Материал: ПЗ_Рушева_972304 (1)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

Источник: https://studfile.net/preview/16447983/