Advertisement
kxcoze

satie_upd_list

Nov 28th, 2020 (edited)
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.56 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <fstream>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <iomanip>
  7. #include <windows.h>
  8.  
  9. using namespace std;
  10.  
  11. struct comp {
  12.     char dest[20]; // Пункт назначен
  13.     char num[20]; // Номер рейса
  14.     char FIO[40]; // ФИО пассажира
  15.     char date[40]; //Дата вылета
  16.     comp* next; //Ссылка на следующий элемент списка
  17. };
  18.  
  19. char* fileName = new char[50];
  20. FILE* f1;
  21.  
  22. struct dyn_list {
  23.     comp* head = NULL; // Первый элемент (голова) списка
  24.     comp* tail{}; // Последний элемент (хвост) списка
  25. };
  26.  
  27. short menu();
  28. void constr_list(dyn_list& l);
  29. bool chk_empty(dyn_list l);
  30. void comp_in(dyn_list& l, char* de, char* nu, char* fio, char* da);
  31. void news(dyn_list& vars1);
  32. void print(dyn_list l);
  33. void comp_del(dyn_list& l, comp* c);
  34. void del(dyn_list& vars1);
  35. void poisk(dyn_list vars1);
  36. void deletelist(comp* vars1);
  37. void output(dyn_list vars1, char*);
  38.  
  39. ifstream fin;
  40. ofstream fout;
  41.  
  42. int main() {
  43.     SetConsoleCP(1251);
  44.     SetConsoleOutputCP(1251);
  45.     char* buf_dest = new char[20];
  46.     char* buf_num = new char[20];
  47.     char* buf_FIO = new char[40];
  48.     char* buf_date = new char[40];
  49.  
  50.     dyn_list vars; // Динамический список
  51.  
  52.     cout << "Работаем с базой данных! ";
  53.     cout << "Введите имя файла -> ";
  54.     cin >> fileName;
  55.  
  56.     ifstream* inp = new ifstream(fileName);
  57.     f1 = fopen(fileName, "r");
  58.  
  59.     if (!inp->good()) {
  60.         cout << "Ошибка в открытии файла!\n";
  61.         system("PAUSE");
  62.         return 0;
  63.     }
  64.     cout << "\nИнформация, содержащаяся в исходном файле:\n" << endl;
  65.     while (!inp->eof()) {
  66.         inp->getline(buf_dest, 20);
  67.         cout << buf_dest << " ";
  68.         inp->getline(buf_num, 20);
  69.         cout << buf_num << " ";
  70.         inp->getline(buf_FIO, 40);
  71.         cout << buf_FIO << " ";
  72.         inp->getline(buf_date, 40);
  73.         cout << buf_date << " " << endl;
  74.         comp_in(vars, buf_dest, buf_num, buf_FIO, buf_date);
  75.     }
  76.     inp->close();
  77.     short choise;
  78.     system("pause");
  79.     do {
  80.         system("cls");
  81.         choise = menu();
  82.         switch (choise) {
  83.         case 1:
  84.             system("cls");
  85.             print(vars);
  86.             system("pause");
  87.             system("cls");
  88.             break;
  89.         case 2:
  90.             system("cls");
  91.             news(vars);
  92.             system("pause");
  93.             system("cls");
  94.             break;
  95.         case 3:
  96.             system("cls");
  97.             del(vars);
  98.             system("pause");
  99.             system("cls");
  100.             break;
  101.         case 4:
  102.             system("cls");
  103.             poisk(vars);
  104.             system("pause");
  105.             system("cls");
  106.             break;
  107.         case 0:
  108.             output(vars, fileName);
  109.             cout << "До свидания!!!" << endl;
  110.             deletelist(vars.head);
  111.             system("pause");
  112.             break;
  113.         default:
  114.             cout << "Неверный выбор!!!" << endl;
  115.             cout << "\n\nPress Enter..." << endl;
  116.             system("pause");
  117.             system("cls");
  118.             break;
  119.         }
  120.     } while (choise);
  121.     cout << endl;
  122.     return 0;
  123. }
  124.  
  125. short menu() {
  126.     short v;
  127.     cout << "\n           МЕНЮ" << endl;
  128.     cout << " Введите [1] для просмотра заявок в виде списка\n";
  129.     cout << " Введите [2] для добавления данных о вновь поступивших заявках\n";
  130.     cout << " Введите [3] для удаления данных о выполненных заявках;\n";
  131.     cout << " Введите [4] для поиска данных по номеру рейса и дате вылета\n";
  132.     cout << " Введите [0] для выхода\n";
  133.     cout << " Пункт: ";
  134.     cin >> v;
  135.     return v;
  136. }
  137.  
  138.  
  139. // Создание пустого списка
  140. void constr_list(dyn_list& l) {
  141.     l.head = NULL;
  142. }
  143.  
  144. // Проверка списка на пустоту
  145. bool chk_empty(dyn_list l) {
  146.     return (l.head == NULL);
  147. }
  148.  
  149. // Включение в список нового компонента
  150. void comp_in(dyn_list& l, char* dest, char* number, char* fio, char* date) {
  151.     comp* c = new comp();
  152.     strcpy_s(c->dest, 20, dest);
  153.     strcpy_s(c->num, 20, number);
  154.     strcpy_s(c->FIO, 40, fio);
  155.     strcpy_s(c->date, 40, date);
  156.     c->next = NULL;
  157.     if (chk_empty(l))
  158.         l.head = c;
  159.     else
  160.         l.tail->next = c;
  161.     l.tail = c;
  162. }
  163.  
  164.  
  165. //ФУНКЦИЯ НОВЫЕ ЗАПИСИ
  166. void news(dyn_list& vars1) {
  167.     cout << "Введите пункт назначения: ";
  168.     char buf_dest[20];
  169.     cin >> buf_dest;
  170.  
  171.     cout << "Введите номер рейса: ";
  172.     char buf_num[20];
  173.     cin >> buf_num;
  174.  
  175.     cout << "Введите ФИО пассажира: ";
  176.     char buf_FIO[40];
  177.     cin.ignore().getline(buf_FIO, sizeof(buf_FIO));
  178.  
  179.     cout << "Введите дату вылета: ";
  180.     char buf_date[40];
  181.     cin.getline(buf_date, sizeof(buf_date));
  182.     cout << "\nЗаявка включена в список.\n";
  183.     comp_in(vars1, buf_dest, buf_num, buf_FIO, buf_date);
  184. }
  185.  
  186. void output(dyn_list l, char* fileName) {
  187.     //cout << "Введите имя файла, куда вводить завяки -> ";
  188.     ofstream inp(fileName, ios::out);
  189.     fopen_s(&f1, fileName, "w");
  190.     while (l.head != NULL) {
  191.         inp << l.head->dest << endl;
  192.         inp << l.head->num << endl;
  193.         inp << l.head->FIO << endl;
  194.         inp << l.head->date;
  195.         if (l.head->next != NULL)
  196.             inp << endl;
  197.         l.head = l.head->next;
  198.     }
  199. }
  200.  
  201. void print(dyn_list l) {
  202.     while (l.head != NULL) {
  203.         cout << "Пункт назначения: " << l.head->dest << endl;
  204.         cout << "Номер рейса: " << l.head->num << endl;
  205.         cout << "ФИО пассажира: " << l.head->FIO << endl;
  206.         cout << "Дата вылета: " << l.head->date << endl << endl;
  207.         l.head = l.head->next;
  208.     }
  209. }
  210.  
  211. // Поиск компонента по номеру рейса
  212. comp* search_by_num(dyn_list l, char* buf) {
  213.     while (l.head != NULL)
  214.     {
  215.         if (!strcmp(l.head->num, buf))
  216.             return l.head;
  217.         l.head = l.head->next;
  218.     }
  219.     return l.head;
  220. }
  221.  
  222. // Удаление компонента из списка
  223. void comp_del(dyn_list& l, comp* c) {
  224.     if (c == l.head) {
  225.         l.head = c->next;
  226.         delete c;
  227.         return;
  228.     }
  229.  
  230.     comp* temp = l.head;
  231.     while (temp->next != c)
  232.         temp = temp->next;
  233.  
  234.     temp->next = c->next;
  235.     delete c;
  236. }
  237.  
  238. void del(dyn_list& vars1) {
  239.     cout << "Введите номер рейса, который был выполнен: ";
  240.     char buf[20];
  241.     cin >> buf;
  242.     comp* p = new comp();
  243.  
  244.     p = search_by_num(vars1, buf);
  245.     if (p) {
  246.         comp_del(vars1, p);
  247.         cout << "Заявка была удалена из списка." << endl;
  248.     }
  249.     else
  250.         cout << "Заявки с таким номером рейса нет!\nУдостоверьтесь в правильности данных,\
  251. которые вы вводите." << endl;
  252. }
  253.  
  254. //ФУНКЦИЯ ПОИСКА
  255. void poisk(dyn_list vars1) {
  256.     cout << "Поиск пассажиров по номеру рейс а и дате вылета\n\n";
  257.     char buf_num[20], buf_date[40];
  258.  
  259.     cout << "Введите номер рейса: ";
  260.     cin >> buf_num;
  261.  
  262.     cout << "Введите дату вылета: ";
  263.     cin.ignore().getline(buf_date, sizeof(buf_date));
  264.     int i = 0;
  265.     while (vars1.head) {
  266.         if (strcmp(vars1.head->date, buf_date) == 0 &&
  267.             strcmp(vars1.head->num, buf_num) == 0) {
  268.             if (!i) {
  269.                 cout << "\nНайденные пассажиры по номеру рейса и дате вылета:\n" << endl;
  270.             }
  271.             cout << "Пункт назначения: " << vars1.head->dest << endl;
  272.             cout << "ФИО пассажира: " << vars1.head->FIO << endl << endl;
  273.             i++;
  274.         }
  275.         vars1.head = vars1.head->next;
  276.     }
  277.     if (!i) {
  278.         cout << "Информация не найдена! Вводите данные правильно!" << endl;
  279.     }
  280. }
  281.  
  282. void deletelist(comp* vars1) {
  283.     if (vars1 != NULL) {
  284.         deletelist(vars1->next);
  285.         delete vars1;
  286.     }
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement