Char password[33] – используется для записи и хранения пароля пользователя.
Char login[33] – используется для записи и хранения логина пользователя.
Enum ROLE role – используется для идентификации пользователя. Структура Date нужна для хранения в ней информацию о дате:
Size_t day - используется для записи и хранения дня. Size_t month - используется для записи и хранения месяца. Size_t year – используется для записи и хранения года.
Структура Fio нужна для хранения в ней информацию о ФИО клиента и сотрудника:
Char name[31] – используется для записи и хранения имени клиента и сотрудника.
Chae surname[31] – используется для записи и хранения фамилии клиента и сотрудника.
Char patronymic[31] – используется для записи и хранения отчества клиента и сотрудника.
Структура Client нужна для хранения в ней информации о клиенте, в эту структуру вложены структуры Date и Fio, которые описывались ранее.
Fio fio – для записи и хранения ФИО клиента (вложенная).
Size_t age – используется для записи и хранения возраста клиента.
Char tel[21] – используется для записи и хранения номера телефона клиента. Char passport[20] – используется для записи и хранения номера и серии паспорта клиента.
Date departure – используется для записи и хранения даты отлета клиента (вложенная).
Size_t flight_number – используется для записи и хранения номера рейса клиента.
Date order – используется для записи и хранения даты заказа клиента (вложенная).
Структура Sotr нужна для хранения в ней информации о сотруднике турфирмы, в эту структуру вложены структуры Date и Fio, которые описывались ранее.
Fio fios – для записи и хранения ФИО сотрудника (вложенная).
Size_t age – используется для записи и хранения возраста сотрудника.
Char tel[21] – используется для записи и хранения номера телефона сотрудника.
11
Date startwork – используется для записи и хранения даты начала работы в турфирме (вложенная).
Size_t premia – используется для записи и хранения размера премии сотрудника за месяц.
Char dolzhnost[31] – используется для записи и хранения должности сотрудника.
Структура Reclama нужна для хранения в ней информации о предложениях о турах.
Char tour[31] – используется для записи и хранения названия рекламируемого тура.
Char opisanie[31] – используется для записи и хранения описания тура. Size_t tsena – используется для записи и хранения цены тура.
Структура Otzyf нужна для хранения в ней информации и отзывах, в эту структуру вложены структура Date которая описывалась ранее.
Date mes – используется для записи и хранения даты написания отзыва (вложенная).
Char nickname[31] – используется для записи и хранения никнэйма клиента, который оставляет отзыв.
Char otzyf[31] – используется для записи и хранения самого отзыва клиента. Size_t zvezdy – используется для записи и хранения количества баллов за сотрудничество с компанией.
В структурах Client Sotr и Otzyt использованы вложенные структуры. По условиям и задачам, поставленным в данном проекте, для реализации возможностей данного проекта нужны эти поля. Дальнейшая работа осуществляется непосредственно с данными хранящимися в файлах.
12
3 ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ ПРИЛОЖЕНИЯ
Ниже представлено объявление прототипов функций, используемых в данной курсовой работе.
int main()
enum ROLE menu_1() void admin_menu() void user_menu() void encrpt(char* log)
void decrypt(char* log) void print_fio(Client client) void print_fios(Sotr sotr)
void print_departure_date(Client client) void print_startwork_date(Sotr sotr) void print_order_date(Client client) void print_mes_date(Client client)
void print_clients(Client* clients, size_t) void print_sotr(Sotr* sotrs, size_t)
void print_otz(Otzyf* otz, size_t n) void print_rec(Reclama* rec, size_t n) void init_fio(Fio* fio)
void init_fios(Fio* fios)
void init_date(Date* date, size_t var) void init_dates(Date* date, size_t var) void init_datee(Date* date, size_t var) void init_client(Client* client)
void init_sotr(Sotr* sotr) void init_otz(Otzyf* otz) void init_rec(Reclama* rec)
enum COMPARE compare_date(Date* d1, Date* d2) enum COMPARE compare_datee(Date* d1, Date* d2) enum COMPARE compare_dates(Date* d1, Date* d2) void add_client(FILE** f, Client** clients_list, size_t* n) void add_sotr(FILE** s, Sotr** sotrs_list, size_t* n) void add_otz(FILE** t, Otzyf** otz_list, size_t* n)
void add_rec(FILE** p, Reclama** rec_list, size_t* n)
void read_clients_file(FILE** f, Client** clients_list, size_t* clients_count) void read_sotr_file(FILE** s, Sotr** sotrs_list, size_t* sotrs_count)
13
void read_otz_file(FILE** t, Otzyf** otz_list, size_t* otz_count) void read_rec_file(FILE** p, Reclama** rec_list, size_t* rec_count)
void write_clients_file(const char* fname, Client* clients_list, size_t k) void write_sotr_file(const char* fname, Sotr* sotrs_list, size_t k)
void write_otz_file(const char* fname, Otzyf* otz_list, size_t k) void write_rec_file(const char* fname, Reclama* rec_list, size_t k)
void read_users_file(FILE** f, User** users_list, size_t* users_count) void edit_fio(Client* client)
void edit_fios(Sotr* sotr) void edit_tel(Client* client)
void edit_dolzhnost(Sotr* sotr) void edit_passport(Client* client)
void edit_date(Client* client, size_t n) void edit_flight_number(Client* client) void edit_premia(Sotr* sotr)
void edit_tsena(Reclama* reclama) void edit_opisanie(Reclama* reclama) void edit_tour(Reclama* reclama) void edit_client(Client* client)
void edit_sotr(Sotr* sotr)
void edit_rec(Reclama* reclama)
void remove_client(Client** clients_list, size_t n, size_t* size, FILE** f) void remove_sotr(Sotr** sotrs_list, size_t n, size_t* size, FILE** s)
void remove_rec(Reclama** rec_list, size_t n, size_t* size, FILE** p) void print_tables(Sotr* sotrs_list, size_t k)
void print_table(Client* clients_list, size_t k)
client* find_by_surname(Client* clients_list, size_t k, const char* surname, size_t* n)
client* find_by_passport(Client* clients_list, size_t k, const char* passport, size_t* n)
client* find_by_depature(Client* clients_list, size_t k, Date d, size_t* n) client* find_by_age(Client* clients_list, size_t k, size_t age, size_t* n) client* find_by_flight_number(Client* clients_list, size_t k, size_t number,
size_t* n)
reclama* find_by_tsena(Reclama* rec_list, size_t k, size_t number, size_t* n) void find(Client* clients_list, size_t k)
void find_rec(Reclama* rec_list, size_t k)
14
client* filter_by_age(Client* clients_list, size_t k, size_t age, size_t* n, int
order)
client* filter_by_depature(Client* clients_list, size_t k, Date d, size_t* n, int
order)
void filter(Client* clients_list, size_t k)
void filter_by_order_date(Client* clients_list, size_t k, Date* d1, Date* d2) bool init_user(User* user)
void print_users(User* users_list, size_t k)
void add_user(FILE** f, User** users_list, size_t* n) void remove_user(User** users_list, size_t n, size_t* size) void edit_user_login(User* user)
void edit_user_password(User* user) void edit_user(User* user)
int find_user(User* users_list, size_t users_count, const char* log, const char*
pwd)
void maintain_users(const char* fname)
int main() – основная функция. С нее начинается выполнение программы. С помощью оператора множественного выбора switch() осуществляется выбор. При входе в программу вызывается функция enum ROLE menu_1(), отображающая меню:
1.Вход под администратором
2.Вход под пользователем
3.Выход Если это первый вход в систему, то после выбора выше нужна
регистрация. Тогда при вводе логина и пароля данные шифруются с помощью encrypt(). Если вход в систему не первый, то нужно ввести логин и пароль. Если логин и пароль введены правильно, то вызывается функция void admin_menu() или, при соответствующем выборе, void user_menu(), в противном случае она сообщает об ошибке и предлагает попробовать ещё раз.
void admin_menu() – функция вызова меню администратора. Меню администратора имеет следующий вид:
1.открыть/создать файл с данными клиентов
2.добавить запись
3.редактировать запись
4.удалить запись
5.просмотр данных
6.поиск данных
7.фильтрация данных
15