Здравствуйте!
Пишу программу "картотека для работников", использую enum при выборе Отдела(программисты менеджеры, доставка) и при выборе Транспорта в отделе доставка(авто,поезд,самолет,корабль ). При выборе отдела, программа должна просить пользователя ввести число, соотвественно от 0 до 2, затем сравнивать его с константами в enum и записывать в общую таблицу слово("programmers","managment","sh ipping"), которую потом можно вывести на экран. Проблема в том,что когда показываю таблицу на экран, все поля заполняются так как нужно,а в поле Department(Отдел) выводи горизонтальные полосы. Пожалуйста,подскажите в чем ошибка.
структуры и enum:
Код:
struct PROG
{
char name [255];
char lastname [255];
int age;
enum Department;
char Department [50];
union
{
struct
{
char Project [255];
char CPU [127];
int Memory;
}Programmers;
struct
{
char Project [255];
char Customer [255];
int ProgrammersNum;
}Management;
struct
{
char Addres [255];
char Customer [255];
int Weight;
char Transport [20];
enum Transport;
}Shipping;
};
};
struct Value
{
PROG prog;
Value *next;
};
enum Department
{
DEPT_PROGRAMMERS,
DEPT_MANAGEMENT,
DEPT_SHIPPING
};
enum Transport
{
TRANSP_TRAIN,
TRANSP_AUTO,
TRANSP_AERO,
TRANSP_SHIP
};
Value *first = NULL;
отрывок из функции добавления записи
Код:
printf("Choose the department:\n '0'-programmers;\n '1'-managment;\n '2'-shipping\n");
scanf("%d",&q);
cin.ignore(20,'\n');
if (q==DEPT_PROGRAMMERS)
{
printf("programmers",&v->prog.Department);
printf("\nEnter the project: ");
gets(v->prog.Programmers.Project);
printf("Enter the CPU: ");
gets(v->prog.Programmers.CPU);
printf("Enter the memory: ");
scanf("%d",&v->prog.Programmers.Memory);
cin.ignore(20, '\n'); // Удаляем из буфера ввода все, что там могло остаться после ввода
}
if (q==DEPT_MANAGEMENT)
{
printf("management",&v->prog.Department);
printf("\nEnter the project: ");
gets(v->prog.Management.Project);
printf("Enter the customers: ");
gets(v->prog.Management.Customer);
printf("Enter the numbers of programmers: ");
scanf("%d",&v->prog.Management.ProgrammersNum);
cin.ignore(20, '\n'); // Удаляем из буфера ввода все, что там могло остаться после ввода
}
if (q==DEPT_SHIPPING)
{
printf("shipping",&v->prog.Department);
printf("\nEnter the address: ");
gets(v->prog.Shipping.Addres);
printf("Enter the customers: ");
gets(v->prog.Shipping.Customer);
printf("Enter the weight: ");
scanf("%d",&v->prog.Shipping.Weight);
printf("Enter the transport:\n '0' - train;\n '1' - auto;\n '2' - aero;\n '3' - ship\n");
scanf("%d",&q2);
if (q2==TRANSP_TRAIN)
{
printf("train",&v->prog.Shipping.Transport);
}
if (q2==TRANSP_AUTO)
{
printf("auto",&v->prog.Shipping.Transport);
}
if (q2==TRANSP_AERO)
{
printf("aero",&v->prog.Shipping.Transport);
}
if (q2==TRANSP_SHIP)
{
printf("ship",&v->prog.Shipping.Transport);
}
cin.ignore(20, '\n'); // Удаляем из буфера ввода все, что там могло остаться после ввода
}
таблица
Код:
printf("# | Name | Lastname | Age |Departm P|| Project | CPU | Memory | \n");
printf(" | | | | M|| Project | Customers| Programmers| \n");
printf(" | | | | S|| Address | Customers| Weight |Transport\n");
printf("---+----------+----------+-------+----------++----------+----------+------------+------------\n");
вот так вывожу в таблицу:
Код:
printf("%3d|%10s|%10s|%7d|%10s||%10s|%10s|%10d|%10s| \n",K,v->prog.name,v->prog.lastname,v->prog.age,v->prog.Department,v->prog.Programmers.Project,v->prog.Programmers.CPU,v->prog.Programmers.Memory);
И еще вопрос,как написать условие для заполнения полей в таблице: если пользователь выбрал в Department "programmers", то заполнять в таблице поля:Project,CPU,Memory;если выбрал "mamgement, то заполнять другие поля и т.д.?