мой курсач / записка / ПЗ_Рушева_972304 (1)
.pdf4 СХЕМЫ АЛГОРИТМОВ РАБОТЫ ПРИЛОЖЕНИЯ
Меню пользователя представлено на рисунке 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