Задание
  Для сведения  составить программу построения графику изменения зарплаты работников по каждому  дню.

 Выбор алгоритма  решения задачи
  Выбор  алгоритма решения задачи был аналогичен предыдущей программе -> см. здесь.
Схема алгоритма решения задачи
Основная программа
 
Функция del

Функция SRAND
 
Функция name
 
Функция add 

Функции view и graf см. здесь ->>
 
Описание программы
Функция  add
  Эта функция заполняет массив структур (размер массива  отмечается в константе), заполнение происходит автоматически с помощью  произвольных чисел и имен, пользователь не берет ни которой участия в  заполнении.
Функции view  и graf см. здесь ->>
Функция del
  Эта функция удаляет весь список с помощью поочередного  удаления каждого элемента.
 
 Текст программы
stdafx.h
#include  <stdio.h>
  #include  <iostream>
#include  <conio.h>
using  namespace std;
const  int ch=8;
struct  A                 //структура рабочего
  {
  A *prev;                               //указатель на предыдущий
  int no;
  char fio[9];
  char pro[9];
  struct B
  {
  int ch,zar;
  }B[5];
  A *next;                //указатель на следующий
  };
  //прототипы  функций
  int  SRAND();
  int  name(int y);
  A  *add(int n, A *first);
  void view(int n, A *first);
  void  graf(int n, A *first);
  void del(A *first);
Func.cpp 
#include "stdafx.h" //подключение файла stdafx.h 
int  SRAND()         // функция случайное число  в диапазоне от 0 .. 1000
  {
  int i=0;
  cout<<"Press any key  to start...";
  while (!kbhit())     //если клавиша не нажата
  {
  if (i>1000)
  i=0;
  i++;
  }
  cout<<endl;
  return(i);    //возвращение полученного числа
  }
int  name(int y)     //функция получение буквы
  {
  int x,m[26];
  for (x=0;x<26;x++)
  m[x]=x+65;
  return (m[y]);
  }
A  *add(int n, A *first)       //функция  добавление списка и заполнение случайным числом.
  {
  A *p, *temp=0;
  int x,y,z,s,numb;
  char nam[9];
  srand(SRAND());   //функция для хаотичного случайного числа
  p=new A;           //выделение памяти под список
  for (x=0;x<n;x++)   //цикл добавления
  {
  if (x==0)    //если список первый
  first=p;    //указатель на первый элемент
  else p->prev->next=p;
                               p->prev=temp;  //указатель на предыдущий
  temp=p;
  p->no=x+1;
  for  (s=0;s<8;s++)    
  {
  p->fio[s]=name(rand()%26);  //случайное заполнение фамилии из 8 букв
  p->pro[s]=name(rand()%26);  //случайное заполнение профессии из 8 букв
  }
  p->fio[s]='\0';  //присвоение конца строки
  p->pro[s]='\0';  //присвоение конца строки
  for  (y=0;y<5;y++)
  {                                             
  p->B[y].ch=rand()%(ch+1);
  p->B[y].zar=p->B[y].ch*56;
  }
  if(x!=n-1)   //если список не последний
  {
  p->next=new  A;
  p=p->next;
  }
  else p->next=0;  //иначе он последний.  Указатель на следующий принимает значение 0
  }
  return first;    //возврат указателя на первый элемент
  }
void view(int n, A *first)       //вывод таблицы работников
  {
  A  *p;
  if(n>0)
  {
  int  x,y;
  printf("  ----------------------------------------------------------------------------\n");
  printf("|   |            |          |   Mo     |   Tu    |    We    |   Th     |   Fr    |\n");
  printf("| #  |     FIO   |Profession| Ch|  $  |  Ch|  $   | Ch|  $  | Ch|   $  | Ch|  $   |\n");
  printf("|---|-----------|----------|---------|---------|---------|---------|---------|\n");
  for(x=0;x<n;x++)
  {
  p=first;
  printf("|%2d  | %9s | %8s |",p->no,p->fio,p->pro);
  for  (y=0;y<5;y++)
  printf("%2d  |%4d |",p->B[y].ch,p->B[y].zar);
  cout<<endl;
  first=p->next;
  }
  printf("  ----------------------------------------------------------------------------\n\n");
  }
  else
  cout<<"Ne  zadano kolichestvo rabochih\n";
  }
void  graf(int n, A *first)                    //функция  построения графика
  {
  A *p, *temp;
  int x,y,a,b,k=1,max=0,s[5];
  if(n>0)
  {
  for  (y=0;y<5;y++)
  {
  temp=first;
  s[y]=0;
  for  (x=0;x<n;x++)
  {
  p=temp;
  s[y]=s[y]+p->B[y].zar;   // Нахождение суммы зарплаты за неделю 
  temp=p->next;
  }
  }
  for  (y=0;y<5;y++)
  {
  if  (max<s[y])      // Нахождение наибольшей  зарплаты за неделю 
  max=s[y];
  }
  while (max>20)    // Нахождение делителя для получения числа  меньше 20 
  {
  max=max/2;
  k=k*2;
  }
  for  (y=0;y<5;y++)
  s[y]=s[y]/k;   // Пропорциональное деление зарплаты всех  работников 
  b=max;
  for (a=0;a<b;a++)        
  {
  printf("%3d|  ",a+1);
  for  (y=0;y<5;y++)
  {
  if  (s[y]<max)    //если  зарплата работника меньше максимальной 
  cout<<"              ";  // Вывод если меньше от максимальной 
  else
  cout<<"*************  ";  // Вывод если больше от  максимальной 
  }
  cout<<endl;
  max--;   // Уменьшение максимального значения 
  }
  cout<<"  ----------------------------------------------------------------------------->\n   ";
  for  (y=1;y<6;y++)
  {
  cout<<"   "<<y<<"-iu";
  cout<<"  - Den'";
  }
  }
  else
  cout<<"Ne  zadano kolichestvo rabochih\n";
  }
void  del(A *first)    //функция удаления  списка
  {
  A *p, *temp;
  for(p=first, temp=p->next; temp; p=temp,  temp=p->next)   //пока не конец списка 
  delete  p;                                                                                        //удаление текущего списка
  } 
 
Laba5.cpp
#include  "stdafx.h"                            //подключение файла stdafx.h 
void  main(void)
  {
  A *first=0;
  int n;
  cout<<"Vvedite  kolichestvo robochih ";
  cin>>n;
  first=add(n, first);   //функция заполнения структуры 
  getch();
  view(n, first);         //функция вывода таблицы на  экран     
  cout<<"Press any key  to continue...\n\n";
  getch();
  graf(n, first);          // функция рисования графику 
  del(first);              // функция удаления списка 
  getch();
  }
 
 Результат работы программы
