Savelyev_Vyacheslav

1-5 pun KURSOVAAY

May 29th, 2021 (edited)
469
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.39 KB | None | 0 0
  1. // AIP_2.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3. #include <iostream>
  4. #include <string>
  5. #include <fstream> // chtenie faila
  6. #include <stdlib.h>     //for using the function sleep
  7. #include <windows.h> // для Win32 систем
  8. #include <clocale>
  9. #include <typeinfo>
  10. #include <fstream>
  11. using namespace std;
  12.  
  13. struct Hostel {
  14.     string HostelN;
  15.     string room;
  16.     string debt;
  17.  
  18. };
  19.  
  20. struct  University
  21. {
  22.     string Rbook;
  23.     string name;
  24.     string surname;
  25.     string patronymic;
  26.     string faculty;
  27.     string teamN;
  28.     Hostel* HostelPtr = new Hostel();
  29.     struct University* ptr;
  30.  
  31. };
  32. //номер зачетки / фио / направление / группа / № Общаги / № комнаты /долги за общежитие
  33. // выбрать 5 комнат с макс долгом проживания
  34.  
  35. University* head;
  36. string nameFile = "write.txt";
  37. int countK = 0;
  38. void List() { head = NULL; } // Инициализация списка
  39. int getCount() { return countK; } // Получение количества узлов списка
  40. bool isEmpty() { return head == NULL; }  // Проверка, пуст ли список
  41. void setFileName() { cout << "Vvedite imay fila"; cin >> nameFile; }
  42. string getValue0(University* p) { return p->Rbook; } // Получение значения  узла списка
  43. string getValue1(University* p) { return p->name; } // Получение значения узла списка patronymic
  44. string getValue2(University* p) { return p->surname; } // Получение значения узла списка
  45. string getValue3(University* p) { return p->patronymic; }
  46. string getValue4(University* p) { return p->faculty; } // Получение значения 2го узла списка
  47. string getValue5(University* p) { return p->teamN; }
  48. string getValue6(University* p) { return p->HostelPtr->HostelN; }
  49. string getValue7(University* p) { return p->HostelPtr->room; }
  50. string getValue8(University* p) { return p->HostelPtr->debt; }
  51. void SetValue(string num[]) {
  52.     cout << "Введите номер зачетной книжки:     "; cin >> num[0];
  53.     cout << "Введите имя:                       "; cin >> num[1];
  54.     cout << "Введите фамелию:                   "; cin >> num[2];
  55.     cout << "Введите отчество:                  "; cin >> num[3];
  56.     cout << "Введите направление:               "; cin >> num[4];
  57.     cout << "Введите группу:                    "; cin >> num[5];
  58.     cout << "Введите № общежития:               "; cin >> num[6];
  59.     cout << "Введите № комноты:                 "; cin >> num[7];
  60.     cout << "Введите долги:                     "; cin >> num[8];
  61. }
  62. void SetNode(University* elem, string num[]) {
  63.     elem->Rbook = num[0];
  64.     elem->name = num[1];
  65.     elem->surname = num[2];
  66.     elem->patronymic = num[3];
  67.     elem->faculty = num[4];
  68.     elem->teamN = num[5];
  69.     elem->HostelPtr->HostelN = num[6];
  70.     elem->HostelPtr->room = num[7];
  71.     elem->HostelPtr->debt = num[8];
  72. }
  73. University* Next(University* University)
  74. {
  75.     if (isEmpty()) return NULL;
  76.     return University->ptr;
  77. }
  78. void Help()
  79. {
  80.     cout << "Operation  Dobav_head-1 head_del-2 AddTail-3 DelTail-4 Print-5 Delet_ALL-6 ReedOf.Txt-7 \n";
  81.     cout << "WriteFromProgToTxt-8 Print_By_value-9 Del_By_value-10 Exit-anyKEY SetFileName-11 sort()-12 \n";
  82. }
  83.  
  84. int ValidChislo(string s) {
  85.     for (auto c : s) {
  86.         if ((c <= 'z') && (c >= 'a')) {
  87.             cout << "Vi vveli text ne tuda"; return 0;
  88.         }
  89.         else if ((c <= 'Z') && (c >= 'A')) {
  90.             cout << "Vi vveli text  ne tuda"; return 0;
  91.         }
  92.         else if ((c <= 'Я') && (c >= 'А')) {
  93.             cout << "Vi vveli text  ne tuda"; return 0;
  94.         }
  95.         else if ((c <= 'я') && (c >= 'а')) {
  96.             cout << "Vi vveli text  ne tuda"; return 0;
  97.         }
  98.     }
  99.     return 1;
  100. }
  101. int ValidText(string s) {
  102.     for (auto c : s)
  103.         if ((c <= '9') && (c >= '0')) {
  104.             cout << "Vi vveli cislo ne tuda";
  105.             return 0;
  106.         }
  107.     return 1;
  108. }
  109. //University* ChekValidALL(string num0, string num1, string num2, string num3, string num4, string num5, string num6, string num7)
  110. University* ChekValidALL(string num[])
  111. {  
  112.     if (!ValidChislo(num[0])) { cout << " 0-HostelN \n"; return NULL; }
  113.     if (!ValidText(num[1])) { cout << " 1-Rbook \n"; return NULL; }
  114.     if (!ValidText(num[2])) { cout << " 2-name \n"; return NULL; }
  115.     if (!ValidText(num[3])) { cout << " 3-name \n"; return NULL; }
  116.     if (!ValidText(num[4])) { cout << " 4-name \n"; return NULL; }
  117.     //if (!ValidChislo(num[5])) { cout << " 5-faculty \n"; return NULL; }
  118.     if (!ValidChislo(num[6])) { cout << " 6-HostelN \n"; return NULL; }
  119.     if (!ValidChislo(num[7])) { cout << " 7-room \n"; return NULL; }
  120.     if (!ValidChislo(num[8])) { cout << " 8-debt \n"; return NULL; }
  121. }
  122. University* Add(string num[],  University* university_ = NULL)
  123. {
  124.     ChekValidALL(num);
  125.     University* elem = new University();
  126.     SetNode(elem, num);
  127.  
  128.  
  129.     //countK++;
  130.     if (university_ == NULL) // Добавление нового корня
  131.     {
  132.         if (head == NULL) {
  133.             elem->ptr = NULL;
  134.             head = elem;
  135.         }
  136.         else {
  137.             elem->ptr = head;
  138.             head = elem;
  139.         }
  140.         return elem;
  141.     }
  142.     elem->ptr = university_->ptr; // Добавление узла после текущего
  143.     university_->ptr = elem;
  144.     return elem;
  145. }
  146. University* getLast()
  147. {
  148.     University* p = head;
  149.     while (Next(p) != NULL)
  150.         p = Next(p);
  151.     return p;
  152. }
  153. void ReedOfTxtToProg(string nameFile)
  154. {
  155.     ifstream inf(nameFile);
  156.     // Если мы не можем открыть файл для чтения его содержимого,
  157.     if (!inf)
  158.     {
  159.         // то выводим следующее сообщение об ошибке и выполняем функцию exit()
  160.         cerr << nameFile << " could not be opened for reading!" << endl;
  161.         cerr << "Perezagruzi programmu" << endl;
  162.         Sleep(5000);
  163.         exit(1);
  164.     }
  165.  
  166.     //string z0, z1, z2, z3, z4, z5, z6, z7;
  167.        string z[9];
  168.     // Пока есть, что читать,
  169.     while (inf)
  170.     {
  171.  
  172.         // то перемещаем то, что можем прочитать, в строку, а затем выводим эту строку на экран
  173.         string strInput;
  174.         getline(inf, strInput);
  175.         int ci = 0;
  176.         string word = "";
  177.         int probels = 0;
  178.  
  179.         while ((strInput[ci] != NULL)) {
  180.             strInput[ci];
  181.             if (strInput[ci] != ' ') { word += strInput[ci]; }
  182.             if ((strInput[ci] == ' ') || (strInput[ci + 1] == NULL)) {
  183.                 probels++;
  184.                 switch (probels) {
  185.                 case 1:  z[0] = word;
  186.                 case 2:  z[1] = word;
  187.                 case 3:  z[2] = word;
  188.                 case 4:  z[3] = word;
  189.                 case 5:  z[4] = word;
  190.                 case 6:  z[5] = word;
  191.                 case 7:  z[6] = word;
  192.                 case 8:  z[7] = word;
  193.                 case 9:  z[8] = word;
  194.                 default: word = "";
  195.                 }
  196.             }
  197.             ci++;
  198.         }
  199.         University* s = getLast();
  200.         if (strInput != "\0") { s = Add(z, s); }
  201.     }
  202.     Sleep(500);
  203. }
  204.  
  205.  
  206.  
  207. void Print()
  208. {
  209.     if (isEmpty()) { cout << "Список пуст" << endl; return; }
  210.     University* p = head;
  211.     do {
  212.         cout << getValue0(p)
  213.             << " " << getValue1(p)
  214.             << " " << getValue2(p)
  215.             << " " << getValue3(p)
  216.             << " " << getValue4(p)
  217.             << " " << getValue5(p)
  218.             << " " << getValue6(p)
  219.             << " " << getValue7(p)
  220.             << " " << getValue8(p)
  221.             << "\n";
  222.         p = Next(p);
  223.     } while (p != NULL);
  224.     cout << endl;
  225. }
  226. ////////////////
  227. University* head_del()
  228. {
  229.     University* h = head;
  230.     University* t = head;
  231.     if (h == NULL) { return NULL; } // В списке нет узлов
  232.     //<operation>
  233.     head = h->ptr;
  234.     t = NULL;
  235.     delete t;
  236.     //</operation>
  237. }
  238. ////////////////
  239. ////////////////
  240. University* Dobav_head()
  241. {
  242.     University* temp = NULL;
  243.     University* head2 = head;
  244.     string num[9];
  245.     SetValue(num);
  246.     ChekValidALL(num);
  247.     University* elem = new University();
  248.     SetNode(elem, num);
  249.  
  250.     elem->ptr = head2;
  251.     head = elem;
  252.    
  253.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  254.  
  255. }
  256. ////////////////
  257. University* Corr_By_value()
  258. {
  259.     University* temp = NULL;
  260.     University* head2 = head;
  261.  
  262.     string value_del;
  263.     cout << "Поиск по фамилии: "; cin >> value_del;
  264.     if (head2 == NULL) { cout << "pusto "; return NULL; } // В списке нет узло
  265.     int j = 0;
  266.     while (head2 != NULL) {
  267.         temp = head2;
  268.         if (temp->surname == value_del) {
  269.             cout << "Корректировка по фамилии:\n";
  270.             string num2[9];
  271.             SetValue(num2);
  272.             SetNode(temp, num2);
  273.             break;
  274.         }
  275.         head2 = head2->ptr;
  276.         j++;
  277.     }
  278. }
  279.  
  280. ///////////////////
  281. void gotovo() {
  282.     cout << "ГОТОВО!\n";
  283. }
  284.  
  285. void StekOperation()
  286. {
  287.     cout << "Enter any KEY operation  Help-0:  ";
  288.     while (true)
  289.     {
  290.         int opN;
  291.         cin >> opN;
  292.         switch (opN) {
  293.         case 0:
  294.             Help();
  295.             break;
  296.             case 1:
  297.             cout << "Dobav_head\n"; Dobav_head(); gotovo();
  298.             break;
  299.             case 2:
  300.             cout << "head_del\n"; head_del(); gotovo();
  301.             break;
  302.             case 3:
  303.                 cout << "Corr_By_value\n"; Corr_By_value();gotovo();
  304.                 break;
  305.             //case 4:
  306.             //  cout << "DelTail\n";  LIFO(); head_del();
  307.             //  break;
  308.             case 5:
  309.             cout << "Print\n"; Print();
  310.             break;
  311.             //case 6:
  312.             //  cout << "Delete_ALL\n"; Delete_ALL();
  313.             //  break;
  314.             case 7:
  315.             cout << "ReedOfTxtToProg\n"; ReedOfTxtToProg(nameFile);
  316.             break;
  317.             //case 8:
  318.             //  cout << "WriteFromProgToTxt\n"; WriteFromProgToTxt(nameFile);
  319.             //  break;
  320.             //case 9:
  321.             //  cout << "Print_By_value\n"; Print_By_value();
  322.             //  break;
  323.             //case 10:
  324.             //  cout << "Del_By_value\n"; Del_By_value();
  325.             //  break;
  326.             //case 11:
  327.             //  cout << "Set file name: "; cin >> nameFile;
  328.             //  break;
  329.             //case 12:
  330.             //  cout << "sort()";
  331.             //  sort();
  332.             //  break;
  333.         default:
  334.             cout << "Exit\n"; goto tryAgain;
  335.         }
  336.     }
  337. tryAgain: // это лейбл
  338.     exit;
  339. }
  340.  
  341.  
  342. // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
  343. // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
  344.  
  345.  
  346. int main()
  347. {
  348.     //setlocale(LC_ALL, "ru");
  349.     setlocale(LC_CTYPE, "Russian");
  350.     SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
  351.     SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
  352.     setlocale(LC_ALL, "Rus"); // Подключение русского языка
  353.     StekOperation();
  354. }
  355. // Советы по началу работы
  356. //   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
  357. //   2. В окне Team Explorer можно подключиться к системе управления версиями.
  358. //   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
  359. //   4. В окне "Список ошибок" можно просматривать ошибки.
  360. //   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
  361. //   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
  362.  
Add Comment
Please, Sign In to add comment