SHARE
TWEET

Untitled

a guest Dec 10th, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <fstream>
  4. #include <iomanip>
  5. #include <string>
  6. #include <string.h>
  7. #include <Windows.h>
  8. #include <algorithm>
  9. using namespace std;
  10.  
  11. int n;
  12.  
  13. struct date
  14. {
  15.     int day;
  16.     int mounth;
  17.     int year;
  18. };
  19.  
  20. struct student
  21. {
  22.     string name;
  23.     string inits;
  24.     date datedsar;
  25. };
  26.  
  27. bool sortyear(student a, student b); //исходный // сортировка по годам
  28. bool sortvozrast(student a, student b);//выходной //сортировка от самого старшего к самому младшему
  29. bool sortalf(student a, student b);//выходной
  30. void vivod(student *a,int n);       //Вывод массива на экран
  31. void zapisvfile(student *a, int n); //Запись массива в файл
  32. void searchhh(student *a, student b[], int n, int& chek); //поиск
  33. void pechatchapki(); //Печать шапки
  34. void addstudent(student a[], int &n); //добавить студента
  35. void deletestudent(student a[], int& n); //удалить студента
  36.  
  37. int main()
  38. {
  39.     SetConsoleCP(1251);
  40.     SetConsoleOutputCP(1251);
  41.     int vibormenu, sortirovka, n, chek;
  42.     chek = 0;
  43.     const int N=1000;
  44.     student srch, gg;
  45.     cout << "Введите колличество студентов" << endl; cin >> n;  
  46.     /*student* real = new student[n];*/
  47.     student real[N], poiskk[N];
  48.     ifstream filevhod("C:/Users/Vadim/Desktop/studen1.txt");
  49.     for (int i = 0; i < n; i++)
  50.         filevhod >> real[i].name >> real[i].inits >> real[i].datedsar.day >> real[i].datedsar.mounth >> real[i].datedsar.year; //Считывание массива
  51.     //
  52.     //sort(real, real + n, sortyear); //изначальная сортировка
  53. menu:
  54.     system("cls");
  55.     cout << "Выберите пункт меню(1,2,3,4,5)" << endl;
  56.     cout << "1 - Вывод массива на экран" << endl;
  57.     cout << "2 - Сортировка" << endl;
  58.     cout << "3 - Поиск" << endl;
  59.     cout << "4 - Новый студент" << endl;
  60.     cout << "5 - Удалить студента" << endl;
  61.     cout << "Для выхода из программы нажмите на любую другу клавишу" << endl;
  62.     cin >> vibormenu;
  63.     switch (vibormenu)
  64.     {
  65.     case 1:
  66.     {
  67.         system("cls");
  68.         vivod(real, n);
  69.         system("pause");
  70.         goto menu;
  71.     }
  72.     case 2:
  73.     {
  74.         system("cls");
  75.         cout << "Выберите способ сортировки(1,2,3)" << endl;
  76.         cout << "1 - Сортировка по году рождения по возрастанию" << endl;
  77.         cout << "2 - Сортировка по возрасту, в порядке убывания" << endl;
  78.         cout << "3 - Сортировка по по фамилии и инциалам в алфавитном порядке" << endl;
  79.         cout << "Нажмите любую клавишу для возврата в меню" << endl;
  80.         cin >> sortirovka;
  81.         switch (sortirovka)
  82.         {
  83.         case 1:
  84.         {
  85.             sort(real, real + n, sortyear);
  86.             vivod(real, n);
  87.             zapisvfile(real, n);
  88.             system("pause");
  89.             goto menu;
  90.         }
  91.         case 2:
  92.         {
  93.             sort(real, real + n, sortvozrast);
  94.             vivod(real, n);
  95.             zapisvfile(real, n);
  96.             system("pause");
  97.             goto menu;
  98.         }
  99.         case 3:
  100.         {
  101.             sort(real, real + n, sortalf);
  102.             vivod(real, n);
  103.             zapisvfile(real, n);
  104.             system("pause");
  105.             goto menu;
  106.  
  107.         }
  108.         default:
  109.         {
  110.             goto menu;
  111.         }
  112.         }
  113.     }
  114.     case 3:
  115.     {
  116.         int psk;
  117.         chek = 0;
  118.         searchhh(real, poiskk, n, chek);
  119.         vivod(poiskk, chek);
  120.         cout << "Как отсортировать массив?" << endl;
  121.         cout << "1 - по возраству; 2 - по алфавиту; 3 - выход без сортировки" << endl;
  122.         cin >> psk;
  123.         switch (psk)
  124.         {
  125.         case 1:
  126.         {
  127.             sort(poiskk, poiskk + chek, sortvozrast);
  128.             vivod(poiskk, chek);
  129.             zapisvfile(real, chek);
  130.             system("pause");
  131.             break;
  132.         }
  133.         case 2:
  134.         {
  135.             sort(poiskk, poiskk + chek, sortalf);
  136.             vivod(poiskk, chek);
  137.             zapisvfile(poiskk, chek);
  138.             system("pause");
  139.             break;
  140.         }
  141.         case 3:
  142.         {
  143.             goto menu;
  144.         }
  145.         }
  146.  
  147.        
  148.    
  149.         system("pause");
  150.         goto menu;
  151.     }
  152.     case 4:
  153.         {
  154.             system("cls");
  155.             addstudent(real, n);
  156.             vivod(real, n);
  157.             zapisvfile(real, n);
  158.             goto menu;
  159.             break;
  160.         }
  161.     case 5:
  162.         {
  163.         system("cls");
  164.         vivod(real, n);
  165.         deletestudent(real, n);
  166.         zapisvfile(real, n);
  167.         goto menu; // Вшзврат к меню
  168.         }
  169.     }
  170.        
  171. }
  172.  
  173. void pechatchapki()
  174. {
  175.     cout << "__________________________________________" << endl;
  176.     cout << "| № | Фамилия и инициалы | Дата рождения |" << endl;
  177.     cout << "__________________________________________" << endl;
  178. }
  179.  
  180. void vivod(student *a, int n)
  181. {
  182.     pechatchapki();
  183.     for (int i = 0; i < n; i++)
  184.     {
  185.         cout << "|" << setw(3) << i+1 << "|" << setw(15) << a[i].name << " " << setw(4) << a[i].inits << "|" << setw(7) << a[i].datedsar.day << "." << setw(2) << a[i].datedsar.mounth << "." << setw(4) << a[i].datedsar.year << "|" << endl;
  186.     }
  187. }
  188.  
  189. void zapisvfile(student *a, int n)
  190. {
  191.     int otvet;
  192.     cout << "Сохранить в файл?(1-да/2-нет)" << endl; cin >> otvet;
  193.     if (otvet == 1)
  194.     {
  195.         string filename, kone4niipyt;
  196.         string pytrabstol = "C:/Users/Vadim/Desktop/";
  197.         string txt = ".txt";
  198.         cout << "Введите имя конечного файла" << endl; cin >> filename;
  199.         kone4niipyt = pytrabstol + filename;
  200.         kone4niipyt = kone4niipyt + txt;
  201.         ofstream fout(kone4niipyt);
  202.         if (!fout.is_open()) cout << "Ошибка";
  203.         fout << "__________________________________________" << endl;
  204.         fout << "| № | Фамилия и инициалы | Дата рождения |" << endl;
  205.         fout << "__________________________________________" << endl;
  206.         for (int i = 0; i < n; i++)
  207.         {
  208.             fout << "|" << setw(3) << i+1 << "|" << setw(15) << a[i].name << " " << setw(4) << a[i].inits << "|" << setw(7) << a[i].datedsar.day << "." << setw(2) << a[i].datedsar.mounth << "." << setw(4) << a[i].datedsar.year << "|" << endl;
  209.         }
  210.     }
  211.     else return;
  212.    
  213. }
  214.  
  215. bool sortyear(student a, student b)
  216. {
  217.     return abs(a.datedsar.year) < abs(b.datedsar.year);
  218. }
  219.  
  220. bool sortvozrast(student a, student b)
  221. {
  222.     if (a.datedsar.year != b.datedsar.year)
  223.         return a.datedsar.year < b.datedsar.year;
  224.     else if (a.datedsar.year == b.datedsar.year)
  225.     {  
  226.         if (a.datedsar.mounth != b.datedsar.mounth)
  227.             return a.datedsar.mounth < b.datedsar.mounth;
  228.         else
  229.             return a.datedsar.day < b.datedsar.day;
  230.     };
  231. }
  232.  
  233.  
  234.  
  235. void searchhh(student *a, student b[], int n, int& chek)
  236. {
  237.     student search, search2;
  238.     cout << "Введите левую границу поиска(День,месяц,год — через пробел)" << endl;
  239.     cin >> search.datedsar.day >> search.datedsar.mounth >> search.datedsar.year;
  240.     cout << "Введите правую границу поиска(День,месяц,год — через пробел)" << endl;
  241.     cin >> search2.datedsar.day >> search2.datedsar.mounth >> search2.datedsar.year;
  242.     chek = 0;
  243.     for (int i = 0; i < n; i++)
  244.     {  
  245.  
  246.  
  247.         if ((a[i].datedsar.year >= search.datedsar.year ) and (a[i].datedsar.year <= search2.datedsar.year))
  248.         {
  249.             if ((search.datedsar.year == a[i].datedsar.year) or (a[i].datedsar.year == search2.datedsar.year))
  250.             {
  251.                 if ((search2.datedsar.mounth >= a[i].datedsar.mounth))
  252.                 {
  253.                     b[chek] = a[i];
  254.                     chek++;
  255.                 }
  256.             }
  257.             else {
  258.                 b[chek] = a[i];
  259.                 chek++;
  260.                 }
  261.         }
  262.     }
  263.    
  264. }
  265.  
  266. bool sortalf(student a, student b)
  267. {
  268.     if (a.name != b.name)
  269.         return a.name < b.name;
  270.     else
  271.         return a.inits < b.inits;
  272. }
  273.  
  274. void addstudent(student a[], int& n)
  275. {
  276.     int s;
  277.     cout << "Введите имя, инициаллы и дату рождения студента(день,месяц,год)" << endl;
  278.     student newstudent;
  279.     cin >> newstudent.name >> newstudent.inits >> newstudent.datedsar.day >> newstudent.datedsar.mounth >> newstudent.datedsar.year;
  280.     a[n] = newstudent;
  281.     n++;
  282. }
  283.  
  284. void deletestudent(student a[], int& n)
  285. {
  286.     int i, j;
  287.     char ch;
  288.     i = 0;
  289.     cout << "Номер указанной строки";
  290.     cin >> j;
  291.     j--;
  292.     if (j < 0 || j >= n)
  293.     {
  294.         cout << "Такой строки нет";
  295.         system("pause");
  296.         return;
  297.     }
  298.     else
  299.     {
  300.  
  301.         cout << a[j].name << " " << a[j].inits << " " << a[j].datedsar.day << "." << a[j].datedsar.mounth << "."<< a[j].datedsar.year << "." << endl;
  302.         cout << "Удалить?" << endl;
  303.         cout << "Yes/No" << endl;
  304.         cin >> ch;
  305.         if (ch == 'n')
  306.             return;
  307.         if (ch != 'y')
  308.         {
  309.             cout << "Некорректно";
  310.             system("pause");
  311.             return;
  312.         }
  313.         for (i = j + 1; i < n; i++)
  314.             a[i - 1] = a[i];
  315.         n--;
  316.         cout << "Запись удалена \n";
  317.  
  318.     }
  319.     system("pause");
  320. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top