include Include struct Person Person left right char Fam 50 bool IsStu

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "Include.h"
struct Person
{
Person *left, *right;
char Fam[50];
bool IsStudent;
union
{
struct
{
char Special[50];
int Course;
} Student;
struct
{
char Work[50];
int Plata;
} Worker;
} Profile;
};
void add(Person **h, Person **t)
{
Person *current = NULL;
int act;
//выделяем память
if (!(current = (Person *)malloc(sizeof(Person))))
return;
//если очередь не существует
if (!*t)
{
*h = current;
(*h)->right = NULL;
}
else
{
(*t)->left = current;
current->right = *t;
}
*t = current;
(*t)->left = NULL;
//заполняем
printf("Фамилия: "); fflush(stdin); gets(current->Fam);
printf("1 - Студент\n2 - Рабочий: "); fflush(stdin); scanf("%d", &act);
if (act == 1)
{
current->IsStudent = true;
printf("Специальность: "); fflush(stdin); gets(current->Profile.Student.Special);
printf("Курс: "); fflush(stdin); scanf("%d", &current->Profile.Student.Course);
}
else
{
current->IsStudent = false;
printf("Место работы: "); fflush(stdin); gets(current->Profile.Worker.Work);
printf("Зар. плата: "); fflush(stdin); scanf("%d", &current->Profile.Worker.Plata);
}
}
void see(Person *h, int type)
{
Person *current = h;
if (!h)
{
puts("error!");
return;
}
do
{
//если студент
if (current->IsStudent)
{
//тип вывода( стеднт или вместе)
if (type == 1 || type == 3)
{
printf("Фамилия: %s. ", current->Fam);
printf("Студент специальности %s %d курса\n",
current->Profile.Student.Special,
current->Profile.Student.Course);
}
}
else
{
//тип вывода( оабочий или вместе)
if (type == 2 || type == 3)
{
printf("Фамилия: %s. ", current->Fam);
printf("Работает на %s. Заработная плата %d\n",
current->Profile.Worker.Work,
current->Profile.Worker.Plata);
}
}
current = current->left;
}
while (current);
}
void main()
{
Person *h = NULL, *t = NULL;
int actionType; //тип действия
system("cls");
setlocale(LC_ALL, "rus");
do
{
add(&h, &t);
printf("\nЖелаете продолжить? (1/0)");
fflush(stdin); scanf("%d", &actionType);
}while (actionType);
do
{
printf("Желаете вывести на экран:\n1 - студентов\n2 - рабочих\n3 - студентов и рабочих\n0 - выход");
scanf("%d", &actionType);
system("cls");
if (actionType > 0 && actionType < 4)
see(h, actionType);
printf("\n");
}while (actionType);
}