lashrone1

6la

Jun 2nd, 2019
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.48 KB | None | 0 0
  1. #include <iostream>
  2. #include <checkValid.h>
  3. #include <windows.h>
  4. #include <stdio.h>
  5.  
  6. using namespace std;
  7.  
  8.  
  9.  
  10.  
  11. struct student{
  12. char surname[20];
  13. char name[20];
  14. char patronymic[30];
  15.  
  16. unsigned int progress;
  17.  
  18. struct{
  19. int day;
  20. int month;
  21. int year;
  22. }data;
  23.  
  24. };
  25.  
  26. unsigned int counter = 0;
  27.  
  28. int menu();
  29. void dataProcessing(student* &arr);
  30. void add(student* &arr);
  31. void printer(student* &arr,int lim);
  32. void filler(student* &arr);
  33. void del(student* &arr);
  34. int search(student* &arr, int code);
  35. void sorter(student* &arr);
  36. void inKlass(student* &arr);
  37. void outKlass(student* &arr);
  38.  
  39. FILE* F;
  40.  
  41. int main()
  42. {
  43. SetConsoleCP(1251);
  44. SetConsoleOutputCP(1251);
  45.  
  46. F = fopen("data.bin","rw");
  47. fread(&counter,sizeof(int),1,F);
  48. student* database = new student[counter];
  49. student* &st = database;
  50.  
  51.  
  52. for(int i = 0;i < counter;i++){
  53. fread(&database[i],sizeof(database),1,F);
  54. }
  55. fclose(F);
  56.  
  57.  
  58. cout << counter <<"\n";
  59.  
  60. int case3;
  61.  
  62. while (true){
  63. switch(menu()){
  64. case 1:
  65. add(st);
  66. filler(st);
  67. sorter(st);
  68. break;
  69.  
  70. case 2:
  71. printer(st,counter);
  72. break;
  73.  
  74. case 3:
  75. cout << "Выберите режим поиска\n";
  76. cout << "1 По фамилии\n";
  77. cout << "2 По успеваемости\n";
  78. cout << "3 По дате\n";
  79. cin >> case3;
  80.  
  81. search(st,case3);
  82. break;
  83.  
  84. case 4:
  85. del(st);
  86. break;
  87.  
  88. case 5:
  89. inKlass(st);
  90. break;
  91.  
  92. case 8:
  93. delete [] database;
  94. return 0;
  95. break;
  96. }
  97. }
  98.  
  99. }
  100.  
  101. int menu(){
  102. int g;
  103. cout << "\n1 Добавить нового студента\n";
  104. cout << "2 Просмотр всей группы\n";
  105. cout << "3 Поиск\n";
  106. cout << "4 Удаление по номеру списка\n";
  107. cout << "5 Градация по оценкам\n";
  108. cout << "8 Выход\n";
  109. cin >> g;
  110. return g;
  111. }
  112.  
  113. // добавление пустой ячейки
  114. void add(student* &arr){
  115. counter++;
  116. student* tmp = new student[counter];
  117.  
  118. for(int i = 0;i < counter-1;i++){
  119. tmp[i] = arr[i];
  120. }
  121.  
  122. delete [] arr;
  123. arr = tmp;
  124. }
  125. //
  126.  
  127. //Заполнение пустой ячейки
  128. void filler(student* &arr){
  129.  
  130. cout << "Введите имя : ";
  131. cin.ignore();
  132. cin >> arr[counter-1].name;
  133.  
  134. cout << "Введите фамилию : ";
  135. //cin.ignore();
  136. cin >> arr[counter-1].surname;
  137.  
  138. cout << "Введите отчество : ";
  139. //cin.ignore();
  140. cin >> arr[counter-1].patronymic;
  141.  
  142. cout << "Введите дату : ";
  143. dataProcessing(arr);
  144.  
  145. cout << "Введите успеваемость : ";
  146. while(checkValid() == false){}
  147. arr[counter-1].progress = temp;
  148.  
  149. F = fopen("data.bin","wb");
  150. fwrite(&counter,sizeof(int),1,F);
  151.  
  152. for(int i = 0; i < counter;i++){
  153. fwrite(&arr[i],sizeof(arr[i]),1,F);
  154. }
  155. fclose(F);
  156. outKlass(arr);
  157.  
  158. }
  159. //
  160.  
  161. // Обработкаввода даты
  162. void dataProcessing(student* &arr){
  163. char input[10];
  164. cin.ignore();
  165. cin >> input;
  166.  
  167. int dot = 0;
  168.  
  169. arr[counter-1].data.day = 0;
  170. arr[counter-1].data.month = 0;
  171. arr[counter-1].data.year = 0;
  172.  
  173. for(int i = 0; i < strlen(input);i++){
  174. if(input[i] != '.'){
  175. switch(dot){
  176. case 0:
  177. arr[counter-1].data.day = (arr[counter-1].data.day * 10) + (input[i] - '0');
  178. if(arr[counter-1].data.day > 31){dot = -1;}
  179. break;
  180.  
  181. case 1:
  182. arr[counter-1].data.month = (arr[counter-1].data.month * 10) + (input[i] - '0');
  183. if(arr[counter-1].data.month > 12){dot = -1;}
  184. break;
  185.  
  186. case 2:
  187. arr[counter-1].data.year = (arr[counter-1].data.year * 10) + (input[i] - '0');
  188. if(arr[counter-1].data.year > 3000){dot = -1;}
  189. break;
  190.  
  191. case -1:
  192. cout << "Неверный ввод";
  193. i = 99;
  194. break;
  195. }
  196. }else{
  197. dot++;
  198. }
  199. }
  200.  
  201. }
  202. //
  203.  
  204. void printer(student* &arr,int lim){
  205.  
  206. if(counter == 0){
  207. cout << "\nБаза данных пуста\n";
  208. }else{
  209. cout <<"Номер" << "\t" << "Фамилия" << "\t\t" << "Имя" << "\t" << "Отчество" << "\t" << "Дата рождения" << "\t" << "Успеваемость\n";
  210. for(int i = 0; i < lim;i++){
  211. cout << i+1 << "\t" << arr[i].surname << "\t\t" << arr[i].name << "\t" << arr[i].patronymic << "\t";
  212. arr[i].data.day > 10 ? cout << arr[i].data.day << "." :cout << "0" << arr[i].data.day << "." ;
  213. arr[i].data.month > 10 ? cout << arr[i].data.month << "." :cout << "0" << arr[i].data.month << "." ;
  214. cout << arr[i].data.year << "\t";
  215. cout << arr[i].progress << "\n";
  216. }
  217. }
  218. }
  219.  
  220. int search(student* &arr, int code){
  221. char buff[20];
  222.  
  223. int a;
  224. int b;
  225. double d;
  226.  
  227. switch(code){
  228. case 1:
  229. cout << "Введите Фамилию : ";
  230. cin.ignore();
  231. cin >> buff;
  232. cout <<"Номер" << "\t" << "Фамилия" << "\t" << "Имя" << "\t" << "Отчество" << "\t" << "Дата рождения" << "\t" << "Успеваемость";
  233.  
  234. for(int i = 0; i < counter;i++){
  235. if(arr[i].surname == buff){
  236. cout << i+1 << "\t" << arr[i].surname << "\t\t" << arr[i].name << "\t" << arr[i].patronymic << "\t";
  237. arr[i].data.day > 10 ? cout << arr[i].data.day << "." :cout << "0" << arr[i].data.day << "." ;
  238. arr[i].data.month > 10 ? cout << arr[i].data.month << "." :cout << "0" << arr[i].data.month << "." ;
  239. cout << arr[i].data.year << "\t";
  240. cout << arr[i].progress << "\n";
  241. }
  242. }
  243. break;
  244.  
  245. case 2:
  246. cout << "Введите диапазон : ";
  247. while(checkValid() == false){}
  248. a = temp;
  249.  
  250. while(checkValid() == false){}
  251. b = temp;
  252.  
  253. cout << "Номер" << "\t" << "Фамилия" << "\t" << "Имя" << "\t" << "Отчество" << "\t" << "Дата рождения" << "\t" << "Успеваемость";
  254.  
  255. for(int i = 0; i < counter;i++){
  256. if(arr[i].progress >= a && arr[i].progress <= b){
  257. cout << i+1 << "\t" << arr[i].surname << "\t\t" << arr[i].name << "\t" << arr[i].patronymic << "\t";
  258. arr[i].data.day > 10 ? cout << arr[i].data.day << "." :cout << "0" << arr[i].data.day << "." ;
  259. arr[i].data.month > 10 ? cout << arr[i].data.month << "." :cout << "0" << arr[i].data.month << "." ;
  260. cout << arr[i].data.year << "\t";
  261. cout << arr[i].progress << "\n";
  262. }
  263. }
  264. break;
  265.  
  266. case 3:
  267. int day,month;
  268. bool flag=false;
  269.  
  270. cout << "Введите день: ";
  271. while(checkValid() == false){}
  272. day = temp;
  273.  
  274. if(day == 0||day > 31){ //контроль границ ввода
  275. cout << "Неверные данные";
  276. search(arr,3);
  277. }else{
  278. cout << "Введите месяц : ";
  279. while(checkValid() == false){}
  280. month = temp;
  281.  
  282. if(month==0||month>12){ //контроль границ ввода
  283. cout << " Неверные данные ";
  284. search(arr,3);
  285. }else{
  286.  
  287. for(int i=0; i < counter; i++)
  288. if(arr[i].data.day == day && arr[i].data.month == month){
  289. cout << "Номер" << "\t" << "Фамилия" << "\t" << "Имя" << "\t" << "Отчество" << "\t" << "Дата рождения" << "\t" << "Успеваемость";
  290. flag=true;
  291. }
  292. if(flag == false){
  293. cout << "Ничего не найдено\n";
  294. }
  295. }
  296. }
  297.  
  298.  
  299.  
  300. for(int i = 0; i < counter;i++){
  301. if( arr[i].data.day == day && arr[i].data.month == month){
  302. cout << i+1 << "\t" << arr[i].surname << "\t\t" << arr[i].name << "\t" << arr[i].patronymic << "\t";
  303. arr[i].data.day > 10 ? cout << arr[i].data.day << "." :cout << "0" << arr[i].data.day << "." ;
  304. arr[i].data.month > 10 ? cout << arr[i].data.month << "." :cout << "0" << arr[i].data.month << "." ;
  305. cout << arr[i].data.year << "\t";
  306. cout << arr[i].progress << "\n";
  307. }
  308. }
  309.  
  310. }
  311. }
  312.  
  313. void del(student* &arr){
  314. int pos;
  315.  
  316. cout << "Введите номер : ";
  317. while(checkValid() == false){}
  318.  
  319. pos = temp;
  320.  
  321. if(pos > counter){
  322. cout << "Номер отсутствует \n";
  323. del(arr);
  324. }else{
  325. pos--;
  326. counter--;
  327. student * tmp=new student[counter];
  328. for(int i = 0; i < pos;i++)
  329. tmp[i] = arr[i];
  330. for(int i = pos+1; i < counter+1;i++)
  331. tmp[i-1] = arr[i];
  332.  
  333. delete[] arr;
  334. arr = tmp;
  335. cout << "Удалено" << endl;
  336.  
  337.  
  338. F = fopen("data.bin","wt");
  339. fwrite(&counter,sizeof(int),1,F);
  340. fwrite(&arr,sizeof(arr),1,F);
  341. fclose(F);
  342. outKlass(arr);
  343. }
  344. }
  345.  
  346. void sorter(student* &arr){
  347.  
  348. int i = 1;
  349. while(i < counter){
  350. if(i == 0 || arr[i - 1].surname <= arr[i].surname){
  351. i++;
  352. }else{
  353. student temp = arr[i];
  354. arr[i] = arr[i - 1];
  355. arr[i - 1] = temp;
  356. i--;
  357. }
  358.  
  359. }
  360. }
  361.  
  362. void outKlass(student* &arr){ //запись студентов в файлы классификации
  363. int c = 0;
  364. F = fopen("high.bin", "wb");
  365. for(int i = 0; i < counter; i++)
  366. if(arr[i].progress>= 70){
  367. fwrite(&arr[i],sizeof(arr[i]),1,F);
  368. c++;
  369. }
  370. fseek(F,0,SEEK_SET);
  371. fwrite(&c,sizeof(int),1,F);
  372. fclose(F);
  373.  
  374. c = 0;
  375. F=fopen("middle.bin", "wb");
  376. for(int i = 0; i < counter; i++)
  377. if((arr[i].progress >= 50)&&(arr[i].progress < 70)){
  378. fwrite(&arr[i],sizeof(arr[i]),1,F);
  379. c++;
  380. }
  381. fseek(F,0,SEEK_SET);
  382. fwrite(&c,sizeof(int),1,F);
  383. fclose(F);
  384. c = 0;
  385. F=fopen("low.bin", "wb");
  386. for(int i = 0; i < counter; i++)
  387. if(arr[i].progress < 50){
  388. fwrite(&arr[i],sizeof(arr[i]),1,F);
  389. c++;
  390. }
  391. fseek(F,0,SEEK_SET);
  392. fwrite(&c,sizeof(int),1,F);
  393. fclose(F);
  394. }
  395.  
  396. void inKlass(student* &arr){
  397. cout << "Выберите режим : \n";
  398. cout << "1 Высокий балл\n";
  399. cout << "2 Средний балл\n";
  400. cout << "3 Низкий балл\n";
  401. cout << "4 Выйти в главное меню\n";
  402. student* tmp = new student[counter];
  403. while(true){
  404. while(checkValid() == false){}
  405. int c ;
  406. int s =temp;
  407. switch(s){
  408. case 1:
  409. F = fopen("high.bin","rw");
  410. fread(&c,sizeof(int),1,F);
  411.  
  412. for(int i = 0; i < c;i++){
  413. fread(&tmp,sizeof(tmp),1,F);
  414. }
  415. printer(tmp,c);
  416. fclose(F);
  417. break;
  418.  
  419. case 2:
  420. F = fopen("middle.bin","rw");
  421. fread(&c,sizeof(int),1,F);
  422.  
  423. for(int i = 0; i < c;i++){
  424. fread(&tmp,sizeof(tmp),1,F);
  425. }
  426. printer(tmp,c);
  427. fclose(F);
  428. break;
  429.  
  430. case 3:
  431. F = fopen("low.bin","rw");
  432. fread(&c,sizeof(int),1,F);
  433.  
  434. for(int i = 0; i < c;i++){
  435. fread(tmp,sizeof(tmp),1,F);
  436. }
  437. printer(tmp,c);
  438. fclose(F);
  439. break;
  440. }
  441. }
  442.  
  443.  
  444. }
Add Comment
Please, Sign In to add comment