kxcoze

satie_lists

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