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