Guest User

Untitled

a guest
Dec 10th, 2019
83
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