
- •Void dellete_all(struct rekagent* beg);
- •Void change(struct rekagent* beg, struct rekagent* end, int id_num);//корректировка
- •Int inp_int(int n, const char* inf); // Прототип функции для ввода целочисленных значений с проверкой
- •Void header() //определение функции header(){
- •Void print_on_the_screen(const struct rekagent z) // Объявление функции вывода элемента на экран с параметром структуры rekagent
- •Void sort_replace(struct rekagent* left, struct rekagent* right, struct rekagent* temp){
- •Заключение
- •Список использованных источников
- •Бити нияу мифи ифст – 5з
Void header() //определение функции header(){
for (int i = 0; i < 148; i++) printf("="); //выводим на экран 148 символов "="
printf("\n|%-3s|", "ID"); //выводим на экран заголовок для столбца ID
printf("%-12s|", "Номер "); //выводим на экран заголовок для столбца Номер заказа
printf("%-20s|", "Юридическое или"); //выводим на экран заголовок для столбца Юридическое или физическое лицо
printf("%-20s|", "Ответственный "); //выводим на экран заголовок для столбца Ответственный менеджер
printf("%-15s|", "Город"); //выводим на экран заголовок для столбца Город
printf("%-15s|", "Номер телефона"); //выводим на экран заголовок для столбца Номер телефона
printf("%-18s|", "Количество услуг"); //выводим на экран заголовок для столбца Количество услуг
printf("%-18s|", "Сумма услуг(руб.)"); //выводим на экран заголовок для столбца Сумма услуг(руб.)
printf("%-17s|", "Дата"); //выводим на экран заголовок для столбца Дата
printf("\n|%-3s|", ""); //выводим на экран пустую строку вместо заголовка столбца ID
printf("%-12s|", "Заказа"); //выводим на экран заголовок для столбца Номер заказа
printf("%-20s|", "физическое лицо"); //выводим на экран заголовок для столбца Юридическое или физическое лицо
printf("%-20s|", "менеджер"); //выводим на экран заголовок для столбца Ответственный менеджер
printf("%-15s|", ""); //выводим на экран пустую строку вместо заголовка столбца Город
printf("%-15s|", "телефона"); // Вывод на экран заголовка колонки "телефона"
printf("%-18s|", "услуг"); // Вывод на экран заголовка колонки "услуг"
printf("%-18s|", "услуг(руб.)"); // Вывод на экран заголовка колонки "услуг(руб.)"
printf("%-17s|\n", "(ГГГГ.ММ.ДД)"); // Вывод на экран заголовка колонки "дата" с форматированием
for (int i = 0; i < 148; i++) printf("="); // Вывод на экран строки из символов "=" длиной 148 символов}
/*Вывод элемента на экран*/
Void print_on_the_screen(const struct rekagent z) // Объявление функции вывода элемента на экран с параметром структуры rekagent
{
printf("\n|%-3d|", z.id); // Вывод на экран поля "id" элемента с форматированием
printf("%-12d|", z.numzakaza); // Вывод на экран поля "numzakaza" элемента с форматированием
printf("%-20s|", z.lico); // Вывод на экран поля "lico" элемента с форматированием
printf("%-20s|", z.manager); // Вывод на экран поля "manager" элемента с форматированием
printf("%-15s|", z.gorod); // Вывод на экран поля "gorod" элемента с форматированием
printf("%-15s|", z.telephone); // Вывод на экран поля "telephone" элемента с форматированием
printf("%-18.2f|", z.p_servicenumber); // Вывод на экран поля "p_servicenumber" элемента с форматированием
printf("%-18.2f|", z.p_money); // Вывод на экран поля "p_money" элемента с форматированием
printf("%-17s|\n", z.date); // Вывод на экран поля "date" элемента с форматированием и переносом строки
for (int i = 0; i < 148; i++) printf("="); // Вывод на экран строки из символов "=" длиной 148 символов}
/*Заголовок для обработки*/
void header_proccessing() // Объявление функции вывода заголовка для обработки{
for (int i = 0; i < 79; i++) printf("="); // Вывод на экран строки из символов "=" длиной 79 символов
printf("\n|%-30s|", "Юр. или физ. лицо"); // Вывод на экран заголовка колонки "Юр. или физ. лицо" с форматированием
printf("%-20s|", "Количество услуг"); // Вывод на экран заголовка колонки "Количество услуг" с форматированием
/* Вывод на экран заголовка таблицы "Сумма услуг" */
printf("%-25s|\n", "Сумма услуг");
/* Вывод на экран символов "=" в количестве 79 для создания горизонтальной линии */
for (int i = 0; i < 79; i++) printf("=");
/* Функция вывода элемента обработки на экран /
void print_processing(const struct rekagent z){
/ Вывод информации об элементе обработки на экран в заданном формате */
printf("\n|%-30s|", z.lico); // вывод на экран значения поля "lico" в форматированном виде
printf("%-20.2f|", z.p_servicenumber); // вывод на экран значения поля "p_servicenumber" в форматированном виде
printf("%-25.2f|\n", z.p_money); // вывод на экран значения поля "p_money" в форматированном виде
for (int i = 0; i < 79; i++) printf("="); // вывод на экран символов "=" в количестве 79 для создания горизонтальной линии}
/* Функция вывода списка элементов обработки на экран */
void show_processing(struct rekagent beg){
struct rekagent* temp = beg; // инициализация указателя на начало списка
printf("%s\n", "Сумма заработка и количество обработанных услуг(за указанный переиод) :"); // вывод заголовка на экран
header_proccessing(); // вызов функции вывода заголовка таблицы на экран
while (temp) // цикл по всем элементам списка
/* Цикл вывода элементов обработки на экран с проверкой условия печати */{
print_processing(*temp); // вывод на экран текущего элемента обработки
if (temp->next && temp->next->id % print == 1) // если следующий элемент - 13 (т.е. элемент, после которого нужно сделать перерыв в печати){
printf("\n"); // перевод строки
system("pause"); // ожидание нажатия клавиши пользователем
system("cls"); // очистка экрана
printf("%s\n", "Сумма заработка и количество обработанных услуг(за указанный переиод) :"); // вывод заголовка на экран
header_proccessing(); // вызов функции вывода заголовка таблицы на экран}
temp = temp->next; // переход к следующему элементу списка}
/* Вывод на экран итоговой строки с общим количеством и общей суммой услуг */
printf("\n"); // перевод строки
printf("%-31s|", " "); // вывод пустой ячейки в форматированном виде
printf("%-20s|", "Общее кол-во услуг"); // вывод заголовка колонки "Общее кол-во услуг" в форматированном виде
printf("%-25s|\n", "Общая сумма услуг"); // вывод заголовка колонки "Общая сумма услуг" в форматированном виде
printf("%31s", " "); // вывод пустой строки в форматированном виде
for (int i = 0; i < 48; i++) printf("="); // вывод на экран символов "=" в количестве 48 для создания горизонтальной линии
printf("\n%-31s|", " "); // вывод пустой ячейки в форматированном виде
printf("%-20.2f|", count_servicenumber(beg)); // вывод на экран значения общего количества услуг в форматированном виде
printf("%-25.2f|\n", count_money(beg)); // вывод на экран значения общей суммы услуг в форматированном виде
printf("%31s", " "); // вывод пустой строки в форматированном виде
for (int i = 0; i < 48; i++) printf("="); // вывод на экран символов "=" в количестве 48 для создания горизонтальной линии
printf("\n"); // перевод строки
Функции обработки списка. Объединяет остальные функции, необходимые для обработки.
void processing(struct rekagent* beg); // Обработка списка согласно варианту
Функции подсчёта суммарного веса и суммы денег.
float count_money(struct rekagent* beg_p); // Подсчёт суммы денег для обработки
float count_servicenumber(struct rekagent* beg_p); // Подсчёт количества услуг
Функция записи в файл с именем filename результатов обработки.
int processing_write_in_file(char* filename, struct rekagent* temp); // Запись списка элементов обработки в файл
char* concat(const char* s1, const char* s2); // Конкатенация двух строк
Листинг файла Proccesing.c предоставлен ниже:
#include <Windows.h>
#include "rekagent.h"
#include "Input.h"
#include "Queue.h"
#include "Processing.h"
#include "Output.h"
#include "Menu.h"
#include "stdio.h"
HANDLE ProcessingHandle;
char* concat(const char* s1, const char* s2){
char* result = (char*) malloc(strlen(s1) + strlen(s2) + 1);//+1 нужен для нуль-терминатора строки.
strcpy(result, s1);
strcat(result, s2);
return result;}
/*Подсчёт количества услуг и сумма всех услуг(за указанный период)*/
void processing(struct rekagent* beg){
struct rekagent* temp = beg;
struct rekagent* beg_p = NULL, * end_p = NULL;
char time1[mem25] = "", time2[mem25] = "";
char * filename_processing;
system("cls");
cursor_off_on(TRUE);
printf("%s\n", "Введите дату начала");
strcpy(time1, inp_date(time1));
printf("%s\n", "Введите дату окончания");
strcpy(time2, inp_date(time2));
while (strcmp(time1, time2) > 0){
system("cls");
printf("%s\n", "Неверно введена дата! Дата окончания не может быть раньше даты начала !");
printf("%s\n", "Введите дату начала");
inp_date(time1);
printf("%s\n", "Введите дату окончания");
inp_date(time2);}
system("cls");
cursor_off_on(FALSE);
printf("%s", "Дата начала :");
printf(time1, mem25);
printf("\n%s", "Дата окончания :");
printf(time2, mem25);
printf("\n");
while (temp){
if (((strcmp(temp->date, time1) > 0) || strcmp(temp->date, time1) == 0) && ((strcmp(temp->date, time2) < 0) || strcmp(temp->date, time2) == 0)){
if (!beg_p){
beg_p = add_first(*temp);
end_p = beg_p;}
else{
int c = 0;
struct rekagent* temp1 = beg_p;
while (temp1){
if (strcmp(temp->manager, temp1->manager) == 0){
temp1->p_money += temp->p_money;
temp1->p_servicenumber += temp->p_servicenumber;
c = 1;
break;}
temp1 = temp1->next;}
if (c == 0){
end_p = add(end_p, *temp);}}}
temp = temp->next;}
if (beg_p){
show_processing(beg_p);
cursor_off_on(TRUE);
filename_processing = inp_filename("Введите имя сохраняемого файла без расширения");
filename_processing = concat(filename_processing, ".txt");
cursor_off_on(FALSE);
processing_write_in_file(filename_processing, beg_p);}
else printf("%s", "Не найдены элементы списка , которые могут соответствовать указанному периоду!");}
/*Подсчёт количества сумм за услуги*/
float count_money(struct rekagent* beg_p){
struct rekagent* temp = beg_p;
float count = 0;
while (temp){
count += temp->p_money;
temp = temp->next;}
return count;}
/*Подсчет количества услуг*/
float count_servicenumber(struct rekagent* beg_p){
struct rekagent* temp = beg_p;
float count = 0;
while (temp){
count += temp->p_servicenumber;
temp = temp->next;}
return count;}
/*Запись данных обработки в файл*/
int processing_write_in_file(char * filename, struct rekagent* temp){
float money = count_money(temp), servicenumber = count_servicenumber(temp);
FILE* fout = fopen(filename, "w");
if (!fout) { printf("%s\n", "Не могу открыть файл для записи"); return 1; }//если поток
//открыть невозможно - вывести сообщение об ошибке
while (temp)//пока список не закончился{
fprintf(fout, "Юр.или физ. лицо: %s\n", temp->lico);
fprintf(fout, "Ответственный менеджер: %s\n", temp->manager);
fprintf(fout, "Дата: %s\n", temp->date);
fprintf(fout, "Количество услуг: %f\n", temp->p_servicenumber);
fprintf(fout, "Сумма услуг: %f\n", temp->p_money);
temp = temp->next;//переход к следующей структуре
fprintf(fout, "\n");}
fprintf(fout, "\n");
fprintf(fout, "Общее количество всех услуг: %f\n", servicenumber);
fprintf(fout, "Общая сумма всех услуг: %f\n", money);
fclose(fout);
printf("%s %s\n", "Результаты обработки сохранены в файле: ", filename);
return 0;}
Функция отрисовки и взаимодействия Search.c с меню поиска представлен ниже:
#ifndef SEARCH_H // проверка наличи¤ заголовочного файла SEARCH_H, чтобы избежать повторной компил¤ции.
#define SEARCH_H // определение SEARCH_H дл¤ использовани¤ в условной компил¤ции.
#pragma once // директива препроцессора, котора¤ гарантирует, что заголовочный файл будет включен только один раз.
#include <setjmp.h> // подключение заголовочного файла дл¤ использовани¤ функции jmp_buf.
#include "rekagent.h" // подключение заголовочного файла дл¤ использовани¤ структуры rekagent.
// поиск не по ключевому полю
void search(struct rekagent* beg, jmp_buf env);
// поиск по номеру заказа
void search_numzakaza(struct rekagent* beg, int num_numzakaza);
// поиск по юр или физ лицу
void search_lico(struct rekagent* beg, char* zakaz_lico);
// поиск по ответственному менеджеру
void search_manager(struct rekagent* beg, char* zakaz_manager);
// поиск по городу
void search_gorod(struct rekagent* beg, char* zakaz_are);
// поиск по телефону
void search_telephone(struct rekagent* beg, char* telephone);
// поиск по количеству услуг
void search_p_servicenumber(struct rekagent* beg, float p_servicenumber);
// поиск по сумме за услуги
void search_p_money(struct rekagent* beg, float sum_money);
// поиск по дате
void search_date(struct rekagent* beg, char* data);
// поиск по id
void search_id(struct rekagent* beg, int id);
#endif
Функции поиска в файле Search.с представлены в виде листинга файла:
#include <Windows.h>
#include "rekagent.h"
#include "Queue.h"
#include "Input.h"
#include "Output.h"
#include "Menu.h"
#include "Search.h"
HANDLE SearchHandle;
/*Функция поиска , объединяющая остальные подфункции*/
void search(struct rekagent* beg,jmp_buf env){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
if (beg){
int number = 0;
char lico[mem25], manager[mem25],
gorod[mem25], telephone[mem25], data[mem25];
float servicenumber = 0, money = 0;
strcpy(lico, "");
strcpy(manager, "");
strcpy(gorod, "");
strcpy(telephone, "");
strcpy(data, "");
const char * how_searh[] = {
"По номеру заказа",
"По юридическому или физическому лицу" ,
"По ответсвенному менеджеру" ,
"По городу",
"По номеру телефона" ,
"По количеству услуг" ,
"По сумме услуг" ,
"По дате заказа"};
switch (menu_category(how_searh, sizeof(how_searh), "По какому параметру вы хотите найти ? \n Вы можете нажать ESC для выхода в меню",env)){
case 0:
system("cls");
cursor_off_on(TRUE);
number = inp_int(number, "Введите номер заказа :");
search_numzakaza(beg, number);
break;
case 1:
system("cls");
cursor_off_on(TRUE);
inp_char(lico, "Введите юридическое или физическое лицо :", mem25);
search_lico(beg, lico);
break;
case 2:
system("cls");
cursor_off_on(TRUE);
inp_char(manager, "Введите ответственного менеджера :", mem25);
search_manager(beg, manager);
break;
case 3:
system("cls");
cursor_off_on(TRUE);
inp_char(gorod, "Введите город :", mem25);
search_gorod(beg, gorod);
break;
case 4:
system("cls");
cursor_off_on(TRUE);
inp_char(telephone, "Введите номер телефона :", mem25);
search_telephone(beg, telephone);
break;
case 5:
system("cls");
cursor_off_on(TRUE);
servicenumber = inp_float(servicenumber, "Введите количество услуг:");
search_p_servicenumber(beg, servicenumber);
break;
case 6:
system("cls");
cursor_off_on(TRUE);
money = inp_float(money, "Введите сумму услуг:");
search_p_money(beg, money);
break;
case 7:
system("cls");
cursor_off_on(TRUE);
inp_date(data);
search_date(beg, data);
break;}}
else{
printf("%s\n", "Невозможно использовать функцию ! Отсутствуют элементы очереди!");}
cursor_off_on(FALSE);}
/*Подфункции поиска*/
/*Поиск по номеру заказа*/
void search_numzakaza(struct rekagent* beg, int num_numzakaza){
int count = 0;
struct rekagent* temp = beg, * beg_s = NULL, * end_s = NULL;
while (temp){
if (temp->numzakaza == num_numzakaza){
if (!beg_s){
beg_s = add_first(*temp);
beg_s->id = temp->id;
end_s = beg_s;}
else { end_s = add(end_s, *temp); end_s->id = temp->id; }}
temp = temp->next;}
if (!beg_s) { printf("%s\n", "Информация , соответвующая запросу отсутствует !");}
else{
printf("%s %d %s\n", "Информация , соответвующая запросу (", num_numzakaza, "):");
header();
temp = beg_s;
while (temp){
if (count != 1 && (count % print) == 1){
system("pause");
system("cls");
printf("%s %d %s\n", "Информация , соответвующая запросу (", num_numzakaza, "):");
header();
print_on_the_screen(*temp);
count++;}
else{
count++;
print_on_the_screen(*temp);}
temp = temp->next;}}
printf("\n");}
/*Поиск по физическом или юридическому лицу*/
void search_lico(struct rekagent* beg, char* zakaz_lico){
int count = 0;
system("cls");
struct rekagent* temp = beg, * beg_s = NULL, * end_s = NULL;
while (temp){
if (strcmp(temp->lico, zakaz_lico) == 0){
if (!beg_s){
beg_s = add_first(*temp);
beg_s->id = temp->id;
end_s = beg_s;}
else { end_s = add(end_s, *temp); end_s->id = temp->id; }}
temp = temp->next;}
if (!beg_s) { printf("%s\n", "Информация , соответвующая запросу отсутствует !");}
else{
printf("%s %s %s\n", "Информация , соответвующая запросу (", zakaz_lico, "):");
header();
temp = beg_s;
while (temp){
if (count != 1 && (count % print) == 1){
printf("\n");
system("pause");
system("cls");
printf("%s %s %s\n", "Информация , соответвующая запросу (", zakaz_lico, "):");
header();
print_on_the_screen(*temp);
count++;}
else{
count++;
print_on_the_screen(*temp);}
temp = temp->next;}}
printf("\n");}
/*Поиск по ответственному менеджеру*/
void search_manager(struct rekagent* beg, char* zakaz_manager){
int count = 0;
system("cls");
struct rekagent* temp = beg, * beg_s = NULL, * end_s = NULL;
while (temp){
if (strcmp(temp->manager, zakaz_manager) == 0){
if (!beg_s){
beg_s = add_first(*temp);
beg_s->id = temp->id;
end_s = beg_s;}
else { end_s = add(end_s, *temp); end_s->id = temp->id; }}
temp = temp->next;}
if (!beg_s) { printf("%s\n", "Информация , соответвующая запросу отсутствует !");}
else{
printf("%s%s%s\n", "Информация , соответвующая запросу (", zakaz_manager, "):");
header();
temp = beg_s;
while (temp){
if (count != 1 && (count % print) == 1){
printf("\n");
system("pause");
system("cls");
printf("%s%s%s\n", "Информация , соответвующая запросу (", zakaz_manager, "):");
header();
print_on_the_screen(*temp);
count++;}
else{
count++;
print_on_the_screen(*temp);}
temp = temp->next;}}
printf("\n");}
/*Поиск по городу*/
void search_gorod(struct rekagent* beg, char* zakaz_gorod){
int count = 0;
system("cls");
struct rekagent* temp = beg, * beg_s = NULL, * end_s = NULL;
while (temp){
if (strcmp(temp->gorod, zakaz_gorod) == 0){
if (!beg_s){
beg_s = add_first(*temp);
beg_s->id = temp->id;
end_s = beg_s;}
else { end_s = add(end_s, *temp); end_s->id = temp->id; }}
temp = temp->next;}
if (!beg_s) { printf("%s\n", "Информация , соответвующая запросу отсутствует !");}
else{
printf("%s%s%s\n", "Информация , соответвующая запросу (", zakaz_gorod, "):");
header();
temp = beg_s;
while (temp){
if (count != 1 && (count % print) == 1){
printf("\n");
system("pause");
system("cls");
printf("%s%s%s\n", "Информация , соответвующая запросу (", zakaz_gorod, "):");
header();
print_on_the_screen(*temp);
count++;}
else{
count++;
print_on_the_screen(*temp);}
temp = temp->next;}}
printf("\n");}
/*Поиск по телефону*/
void search_telephone(struct rekagent* beg, char* telephone){
int count = 0;
system("cls");
struct rekagent* temp = beg, * beg_s = NULL, * end_s = NULL;
while (temp){
if (strcmp(temp->telephone, telephone) == 0){
if (!beg_s){
beg_s = add_first(*temp);
beg_s->id = temp->id;
end_s = beg_s;}
else { end_s = add(end_s, *temp); end_s->id = temp->id; }}
temp = temp->next;}
if (!beg_s) { printf("%s\n", "Информация , соответвующая запросу отсутствует !");}
else{
printf("%s%s%s\n", "Информация , соответвующая запросу (", telephone, "):");
header();
temp = beg_s;
while (temp){
if (count != 1 && (count % print) == 1){
printf("\n");
system("pause");
system("cls");
printf("%s%s%s\n", "Информация , соответвующая запросу (", telephone, "):");
header();
print_on_the_screen(*temp);
count++;}
else{
count++;
print_on_the_screen(*temp);}
temp = temp->next;}}
printf("\n");
}
/*Поиск количеству заказов*/
void search_p_servicenumber(struct rekagent* beg, float p_servicenumber){
int count = 0;
system("cls");
struct rekagent* temp = beg, * beg_s = NULL, * end_s = NULL;
while (temp){
if (temp->p_servicenumber == p_servicenumber){
if (!beg_s){
beg_s = add_first(*temp);
beg_s->id = temp->id;
end_s = beg_s;}
else { end_s = add(end_s, *temp); end_s->id = temp->id; }}
temp = temp->next;}
if (!beg_s) { printf("%s\n", "Информация , соответвующая запросу отсутствует !");}
else{
printf("%s%f%s\n", "Информация , соответвующая запросу (", p_servicenumber, "):");
header();
temp = beg_s;
while (temp){
if (count != 1 && (count % print) == 1){
printf("\n");
system("pause");
system("cls");
printf("%s%f%s\n", "Информация , соответвующая запросу (", p_servicenumber, "):");
header();
print_on_the_screen(*temp);
count++;}
else{
count++;
print_on_the_screen(*temp);}
temp = temp->next;}}
printf("\n");}
/*Поиск по сумме*/
void search_p_money(struct rekagent* beg, float sum_money){
int count = 0;
system("cls");
struct rekagent* temp = beg, * beg_s = NULL, * end_s = NULL;
while (temp){
if (temp->p_money == sum_money){
if (!beg_s){
beg_s = add_first(*temp);
beg_s->id = temp->id;
end_s = beg_s;}
else { end_s = add(end_s, *temp); end_s->id = temp->id; }}
temp = temp->next;}
if (!beg_s) { printf("%s\n", "Информация , соответвующая запросу отсутствует !");}
else{
printf("%s%f%s\n", "Информация , соответвующая запросу (", sum_money, "):");
header();
temp = beg_s;
while (temp){
if (count != 1 && (count % print) == 1){
printf("\n");
system("pause");
system("cls");
printf("%s%f%s\n", "Информация , соответвующая запросу (", sum_money, "):");
header();
print_on_the_screen(*temp);
count++;}
else{
count++;
print_on_the_screen(*temp);}
temp = temp->next;}}
printf("\n");}
/*Поиск по дате*/
void search_date(struct rekagent* beg, char* data){
int count = 0;
system("cls");
struct rekagent* temp = beg, * beg_s = NULL, * end_s = NULL;
while (temp){
if (strcmp(temp->date, data) == 0){
if (!beg_s){
beg_s = add_first(*temp);
beg_s->id = temp->id;
end_s = beg_s;}
else { end_s = add(end_s, *temp); end_s->id = temp->id; }}
temp = temp->next;}
if (!beg_s) { printf("%s\n", "Информация , соответвующая запросу отсутствует !");}
else{
printf("%s%s%s\n", "Информация , соответвующая запросу (", data, "):");
header();
temp = beg_s;
while (temp){
if (count != 1 && (count % print) == 1){
printf("\n");
system("pause");
system("cls");
printf("%s%s%s\n", "Информация , соответвующая запросу (", data, "):");
header();
print_on_the_screen(*temp);
count++;}
else{
count++;
print_on_the_screen(*temp);}
temp = temp->next;}}
printf("\n");}
void search_id(struct rekagent* beg, int id){
struct rekagent* temp = beg;
while (temp){
if (temp->id == id) { header(); print_on_the_screen(*temp); printf("\n"); system("pause"); break; }
else temp = temp->next;}}
Функция отрисовки и взаимодействия с меню сортировки. Также передаёт остальным функциям сортировать функцию по убыванию или возрастанию. Листинг файлов Sort.h и Sort.c, предоставлен ниже:
Листинг Sort.h
#ifndef SORT_H // Объявление директивы препроцессора #ifndef
#define SORT_H // Директива #define определяет идентификатор SORT_H, который используется в #ifndef
#pragma once // Директива #pragma once обеспечивает однократное включение заголовочного файла
#include <setjmp.h> // Включение заголовочного файла <setjmp.h>, который обеспечивает механизм длинных переходов
#include "rekagent.h" // Включение пользовательского заголовочного файла rekagent.h, который содержит определения структуры rekagent и другие функции
void sort_by_field(struct rekagent* beg, jmp_buf env); // Объявление функции sort_by_field с двумя параметрами - указателем на структуру rekagent и jmp_buf, который является типом данных, используемым в функциях длинных переходов
void sort_numzakaza(struct rekagent* beg, int how_sort); // Объявление функции sort_numzakaza с двумя параметрами - указателем на структуру rekagent и целочисленным значением, которое определяет направление сортировки
void sort_lico(struct rekagent* beg, int how_sort); // Объявление функции sort_lico с двумя параметрами - указателем на структуру rekagent и целочисленным значением, которое определяет направление сортировки
void sort_manager(struct rekagent* beg, int how_sort); // Объявление функции sort_manager с двумя параметрами - указателем на структуру rekagent и целочисленным значением, которое определяет направление сортировки
void sort_gorod(struct rekagent* beg, int how_sort); // Объявление функции sort_gorod с двумя параметрами - указателем на структуру rekagent и целочисленным значением, которое определяет направление сортировки
void sort_telephone(struct rekagent* beg, int how_sort); // Объявление функции sort_telephone с двумя параметрами - указателем на структуру rekagent и целочисленным значением, которое определяет направление сортировки
void sort_p_servicenumber(struct rekagent* beg, int how_sort); // Объявление функции sort_p_servicenumber с двумя параметрами - указателем на структуру rekagent и целочисленным значением, которое определяет направление сортировки
void sort_p_money(struct rekagent* beg, int how_sort); // Объявление функции sort_p_money с двумя параметрами - указателем на структуру rekagent и целочисленным значением, которое определяет направление сортировки
void sort_date(struct rekagent* beg, int how_sort);//сортировка по дате
void sort_replace(struct rekagent* left, struct rekagent* right, struct rekagent* temp);//функция для смены местами элементов функции
#endif#pragma once
Листинг Sort.c:
#include <Windows.h>
#include "rekagent.h"
#include "Menu.h"
#include "Sort.h"
#include "stdio.h"
HANDLE sortHandle;
/*Функция сортировки , объединяющая остальные подфункции*/
void sort_by_field(struct rekagent* beg,jmp_buf env){
if (beg){
int how_sort;
const char * _sort[] = { " По возрастанию " ," По убыванию " };
const char * field[] = {
"По номеру заказа",
"По юридическому или физическому лицу" ,
"По ответсвенному менеджеру" ,
"По городу",
"По номеру телефона" ,
"По количеству услуг" ,
"По сумме услуг" ,
"По дате заказа"};
how_sort = menu_category(_sort, sizeof(_sort), "Какую сортировку вы хотите выбрать ?\n Вы можете нажать ESC для выхода в меню",env);
struct rekagent* temp_1, temp_2;
switch (menu(field, sizeof(field), "По какому параметру вы хотите отсортировать ? ")){
case 0:
system("cls");
sort_numzakaza(beg, how_sort);
break;
case 1:
system("cls");
sort_lico(beg, how_sort);
break;
case 2:
system("cls");
sort_manager(beg, how_sort);
break;
case 3:
system("cls");
sort_gorod(beg, how_sort);
break;
case 4:
system("cls");
sort_telephone(beg, how_sort);
break;
case 5:
system("cls");
sort_p_servicenumber(beg, how_sort);
break;
case 6:
system("cls");
sort_p_money(beg, how_sort);
break;
case 7:
system("cls");
sort_date(beg, how_sort);
break;
}
printf("%s\n", "Сортировка была выполнена !");}
else{
printf("%s\n", "Невозможно использовать функцию ! Отсутствуют элементы очереди!");}}
/*Подфункции сортировки*/
/*Смена местами при сортировке*/