Добавил:
rushevamar@mail.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

мой курсач / записка / ПЗ_Рушева_972304 (1)

.pdf
Скачиваний:
11
Добавлен:
28.03.2021
Размер:
1.49 Mб
Скачать

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

print_otz(otz_list, otz_count); break;

case 10: system("cls");

add_otz(&t, &otz_list, &otz_count); break;

case 11:

if (!s) fopen_s(&s, sotrs, "rb+");

/*если открылся, подсчёт числа записей в цикле*/ if (s)

{

puts("Файл открыт..."); if (!sotrs_count)

{

fseek(s, 0, SEEK_SET);

while (fread(&sotr, sizeof sotr, 1, t) == 1) ++otz_count;

/*выделение памяти для массива записей*/ sotrs_list = (Sotr*)calloc(otz_count, sizeof(Sotr));

/*курсор в самое начало (для чтения)*/ fseek(s, 0, SEEK_SET);

/*чтение данных из файла в массив*/ fread(sotrs_list, sizeof * sotrs_list, sotrs_count, s);

/*вывод массива записей в консоль*/

}

if (!sotrs_count) /*если записей 0, то ...*/ puts("Файл пуст.");

}

else /*если файл не открылся, значит его нет и он создаётся*/

{

/*открыть для записи*/ fopen_s(&s, sotrs, "wb");

/*и сразу же закрыть*/ puts("Файл создан.");

}

fclose(s); s = NULL; break;

case 12: system("cls");

print_tables(sotrs_list, sotrs_count); break;

case 13:

{

system("cls"); Date d1, d2;

26

getc(stdin);

puts("Введите начальную дату для поиска"); init_date(&d1, 1);

puts("Введите конечную дату для поиска"); init_date(&d2, 1);

if (compare_date(&d1, &d2) == GREATER)

{

puts("Первая дата должна предшествовать или быть равна

второй!");

puts("Поиск невозможен!");

}

else

filter_by_order_date(clients_list, clients_count, &d1, &d2);

}

break; case 14:

puts("Выход в меню 1-го уровня..."); break;

default:

break;

}

if (n == 14)

{

if (f)

{

fclose(f); f = NULL;

}

break;

}

system("pause");

}

}

Функция шифрования представлена на рисунке 4.2. Код описанной функции представлен ниже блок-схемы:

27

Рисунок 4.2 - Функция шифрования

void encrypt(char* log)

{

//замена символов сдвигом

for (size_t i = 0; i < strlen(log); i++)

{

if (i % 2)

log[i] = log[i] + 1; //символы с нечётным индексом +1

else

log[i] = log[i] + 2; //символы с чётным индексом +2

}

}

Функция просмотра данных в табличной форме представлена на рисунке 4.3.

Код описанной функции представлен ниже блок-схемы:

28

Рисунок 4.3 - Просмотр данных в табличной форме

void print_table(Client* clients_list, size_t k)

{

//проверка параметров if (!clients_list || !k)

{

puts("Список клиентов пуст!"); return;

}

//вывод таблицы и данных

for (size_t i = 0; i < 133; i++) printf_s("-"); printf_s("\n|%4s|%20s|%20s|%20s|", "№ ", "Фамилия", "Имя", "Отчество");

29

printf_s("%15s|%15s|%15s|%15s|\n", "Паспорт", "Телефон", "Дата вылета", "Дата заказа");

for (size_t i = 0; i < 133; i++) printf_s("-"); for (size_t i = 0; i < k; i++)

{

printf_s("\n|%3zu%c|%-20s|%-20s|%-20s|", i + 1, '.', clients_list[i].fio.surname, clients_list[i].fio.name, clients_list[i].fio.patronimic);

printf_s("%15s|%15s|", clients_list[i].passport, clients_list[i].tel); printf_s("%5c%02zu%c%02zu%c%04zu|", ' ', clients_list[i].departure.day,

'.', clients_list[i].departure.month, '.', clients_list[i].departure.year); printf_s("%5c%02zu%c%02zu%c%04zu|", ' ', clients_list[i].order.day, '.',

clients_list[i].order.month, '.', clients_list[i].order.year);

//for (size_t i = 0; i < 133; i++) printf_s("-");

}

puts("");

for (size_t i = 0; i < 133; i++) printf_s("-"); puts("");

system("pause");

}

30