4 СХЕМЫ АЛГОРИТМОВ РАБОТЫ ПРИЛОЖЕНИЯ
Меню пользователя представлено на рисунке 4.1.
Код описанной функции представлен ниже блок-схемы:
21
Рисунок 4.1 - Меню пользователя
void user_menu()
{
size_t n = 0, clients_count = 0, otz_count = 0, sotrs_count = 0, rec_count = 0;
/*объект для чтения/записи из/в бинарный файл и указатель на массив*/
Client client, * clients_list = NULL, * users_list = NULL; Reclama reclama, * rec_list = NULL;
Otzyf otzyf, * otz_list = NULL; Sotr sotr, * sotrs_list = NULL;
/*файловый указатель*/
FILE* f = NULL; FILE* p = NULL; FILE* t = NULL; FILE* s = NULL; read_clients_file(&f, &clients_list, &clients_count);
read_rec_file(&p, &rec_list, &rec_count); read_otz_file(&t, &otz_list, &otz_count); read_sotr_file(&s, &sotrs_list, &sotrs_count);
/*меню пользователя*/ while (1)
{
puts("****************МЕНЮ ПОЛЬЗОВАТЕЛЯ*****************");
puts("------------------------------------------------ |
\n"); |
puts("1.открыть файл с данными клиентов"); |
|
puts("2.просмотр данных"); |
|
puts("3.поиск данных"); |
|
puts("4.фильтрация данных"); |
|
puts("------------------------------------------------ |
\n"); |
puts("******************НАЙДИТЕ ТУР*********************"); |
|
puts("------------------------------------------------ |
\n"); |
puts("5.открыть файл с предложениями о турах"); |
|
puts("6.посмотреть предложения о турах"); |
|
puts("7.искать предложения о турах"); |
|
puts("------------------------------------------------ |
\n"); |
puts("****ПОСМОТРИТЕ НАШИ ОТЗЫВЫ ИЛИ ОСТАВЬТЕ |
|
СВОЙ******"); |
|
puts("------------------------------------------------ |
\n"); |
puts("8.открыть файл отзывов"); |
|
puts("9.посмотреть отзывы"); |
|
puts("10.добавить отзыв"); |
|
puts("------------------------------------------------ |
\n"); |
puts("****************НАШИ СОТРУДНИКИ*******************"); |
|
puts("------------------------------------------------ |
\n"); |
22
puts("11.открыть файл с данными сотрудников"); puts("12.посмотреть данные сотрудников");
puts("------------------------------------------------ |
\n"); |
puts("13.выполнение задачи(вывести на экран все сделки за\n определенный |
|
период(числа вводим с клавиатуры))"); |
|
puts("------------------------------------------------ |
\n"); |
puts("14.выход в меню 1-го уровня"); |
|
/*ввод выбора*/ printf(">> "); scanf_s("%d", &n);
/*выбор действия*/ switch (n)
{
case 1:
if (!f) fopen_s(&f, clients, "rb+");
/*если открылся, подсчёт числа записей в цикле*/ if (f)
{
puts("Файл открыт..."); if (!clients_count)
{
fseek(f, 0, SEEK_SET);
while (fread(&client, sizeof client, 1, f) == 1)
++clients_count;
/*выделение памяти для массива записей*/
clients_list = (Client*)calloc(clients_count, sizeof(Client));
/*курсор в самое начало (для чтения)*/ fseek(f, 0, SEEK_SET);
/*чтение данных из файла в массив*/ fread(clients_list, sizeof * clients_list, clients_count, f);
/*вывод массива записей в консоль*/
}
if (!clients_count) /*если записей 0, то ...*/ puts("Файл пуст.");
}
else /*если файл не открылся, значит его нет и он создаётся*/
{
/*открыть для записи*/ fopen_s(&f, clients, "wb");
/*и сразу же закрыть*/ puts("Файл создан.");
}
fclose(f);
23
f = NULL; break;
case 2:
system("cls"); /*просмотр данных*/
print_table(clients_list, clients_count); break;
case 3:
if (!clients_count) puts("Список клиентов пуст!"); else
find(clients_list, clients_count);
break;
case 4:
if (!clients_count) puts("Список клиентов пуст!"); else
filter(clients_list, clients_count);
break;
case 5:
if (!p) fopen_s(&p, rec, "rb+");
/*если открылся, подсчёт числа записей в цикле*/ if (p)
{
puts("Файл открыт..."); if (!rec_count)
{
fseek(p, 0, SEEK_SET);
while (fread(&reclama, sizeof rec, 1, p) == 1) ++rec_count;
/*выделение памяти для массива записей*/
rec_list = (Reclama*)calloc(rec_count, sizeof(Reclama));
/*курсор в самое начало (для чтения)*/ fseek(p, 0, SEEK_SET);
/*чтение данных из файла в массив*/ fread(rec_list, sizeof * rec_list, rec_count, p);
/*вывод массива записей в консоль*/
}
if (!rec_count) /*если записей 0, то ...*/ puts("Файл пуст.");
}
else /*если файл не открылся, значит его нет и он создаётся*/
{
/*открыть для записи*/ fopen_s(&p, rec, "wb"); puts("Файл создан.");
}
/*и сразу же закрыть*/
24
fclose(p); p = NULL; break;
case 6:
system("cls"); print_rec(rec_list, rec_count); break;
case 7:
if (!rec_count) puts("Список предложений пуст!"); else
find_rec(rec_list, rec_count);
break;
case 8:
if (!t) fopen_s(&t, otz, "rb+");
/*если открылся, подсчёт числа записей в цикле*/ if (t)
{
puts("Файл открыт..."); if (!otz_count)
{
fseek(t, 0, SEEK_SET);
while (fread(&otzyf, sizeof otz, 1, t) == 1) ++otz_count;
/*выделение памяти для массива записей*/ otz_list = (Otzyf*)calloc(otz_count, sizeof(Otzyf));
/*курсор в самое начало (для чтения)*/ fseek(t, 0, SEEK_SET);
/*чтение данных из файла в массив*/ fread(otz_list, sizeof * otz_list, otz_count, t);
/*вывод массива записей в консоль*/
}
if (!otz_count) /*если записей 0, то ...*/ puts("Файл пуст.");
}
else /*если файл не открылся, значит его нет и он создаётся*/
{
/*открыть для записи*/ fopen_s(&t, otz, "wb");
/*и сразу же закрыть*/ puts("Файл создан.");
}
fclose(t); t = NULL; break;
case 9:
system("cls");
25