Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
6
Добавлен:
27.11.2024
Размер:
1.3 Mб
Скачать

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", "Невозможно использовать функцию ! Отсутствуют элементы очереди!");}}

/*Подфункции сортировки*/

/*Смена местами при сортировке*/

Соседние файлы в папке Выполненая работа