Advertisement
YT_o4ka

Untitled

Apr 26th, 2022
819
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <windows.h>
  4. #include <fstream>
  5. using namespace std;
  6.  
  7. struct predm {
  8.     char name[20];
  9.     int mark;
  10. };
  11. struct session {
  12.     int predm_co;
  13.     predm p[10];
  14. };
  15.  
  16. struct student {
  17.     char fam[20];
  18.     char im[20];
  19.     char ot[20];
  20.     int b_day;
  21.     int b_month;
  22.     int b_year;
  23.     int year_apply;
  24.     char kaf[20];
  25.     char group[20];
  26.     int zachetka;
  27.     int sess_co;
  28.     session s[10];
  29.     int pos = 0;
  30. };
  31.  
  32. class input {
  33. public:
  34.     char key;
  35.     void switcher_in() {
  36.    
  37.         cout << " ---МЕНЮ---\n Введите k для ввода информации о студенте \n Для выхода введите e \n Для просмотра информации, которую вы ввели, нажмите r"<< endl;
  38.         cin >> key;
  39.     }
  40. };
  41.  
  42.  
  43.  
  44. class f : public virtual input {
  45.    
  46. public:
  47.     FILE* ou;
  48.     int s = 0;
  49.  
  50.     void f_in() {
  51.     fopen_s(&ou, "flilk", "wb");
  52.     struct student chel;
  53.     for (; 1;) {
  54.         cout << "\n вы собираетесь вводить ? Для продолжения выберите нужный вариант \n 1 -  для продолжения ввода \n 0 - для выхода 1/0\n";
  55.         cin >> s;
  56.         if (!s) break;
  57.         cout << "Введите имя, фамилию и отчество студента " << endl;
  58.         cin >> chel.im >> chel.fam >> chel.ot;
  59.         cout << "Введите дату рожедния студента, день, месяц и год " << endl;
  60.         cin >> chel.b_day >> chel.b_month >> chel.b_year;
  61.         cout << "Введите кафедру, номер груммы и номер зачётки студента " << endl;
  62.         cin >> chel.kaf >> chel.group >> chel.zachetka;
  63.         cout << "Введите количество СЕССИЙ, по которым вы хотите ввести информацию по данному студенту " << endl;
  64.         cin >> chel.sess_co;
  65.         for (int i = 0; i < chel.sess_co; i++) {
  66.             cout << "Введите количество предметов в "<< chel.sess_co<< " сессии, по которым вы хотите ввести данные этой сессии " << endl;
  67.             cin >> chel.s[i].predm_co;
  68.             for (int j = 0; j < chel.s[i].predm_co; j++) {
  69.                 cout << "Введите название предмета, а затем оценку по нему" << endl;
  70.                 cin >> chel.s[i].p[j].name >> chel.s[i].p[j].mark;
  71.             }
  72.         }
  73.            
  74.     }
  75.     cout << "Введёная вами информация сохраняется в файл";
  76.         fwrite(&chel, sizeof(chel), 1, ou);
  77.         fclose(ou);
  78.         cout << "Введённая вами информация была успешно осхранена в файл";
  79.     }
  80. };
  81. class read : public virtual f{
  82. public:
  83.     void f_read() {
  84.         struct student chel;
  85.         fopen_s(&ou, "flilk", "rb");
  86.         fread(&chel, sizeof(chel), 1, ou);
  87.         while (!feof(ou)) {
  88.             cout << " ФИО студента " << chel.im << "  " << chel.fam << "  " << chel.ot << endl;
  89.             cout << " Дата рождения студента " << chel.b_day << "  " << chel.b_month << "  " << chel.b_year << endl;
  90.             cout << " Кафедра, номер группы и зачётки " << chel.kaf << "  " << chel.group << "  " << chel.zachetka << endl;
  91.             cout << " Количество ссесий " << chel.sess_co << endl;
  92.             for (int i = 0; i < chel.sess_co; i++) {
  93.                 cout << " Количество предметов данной сессии " << endl;
  94.                 cout << chel.s[i].predm_co << endl;
  95.                 for (int j = 0; j < chel.s[i].predm_co; j++) {
  96.                     cout << "Название предмета и оценка" << endl;
  97.                     cout << chel.s[i].p[j].name <<"  " << chel.s[i].p[j].mark << endl;
  98.                 }
  99.             }
  100.             fread(&chel, sizeof(chel), 1, ou);
  101.         }
  102.         fclose(ou);
  103.     }
  104. };
  105. class rewrite : public virtual read {
  106. public:
  107.     struct student all[1000];
  108.     struct student all_rep[1000];
  109.     struct student chel;
  110.    
  111.     void f_correst() {
  112.         int count = 0;
  113.         fopen_s(&ou, "flilk", "rb");
  114.         fread(&chel, sizeof(chel), 1, ou);
  115.         while (!feof(ou)) {
  116.             all[count] = chel;
  117.             count++;
  118.             fread(&chel, sizeof(chel), 1, ou);
  119.         }
  120.  
  121.         cout << "Введите фамилию человека, данные которого вы хотите заменить";
  122.         char temp[100];
  123.         int count_rep=0;
  124.         cin >> temp;
  125.         for (int i = 0; i < count; i++) {
  126.             if (all[i].fam == temp) {
  127.                 all[i].pos = i;
  128.                 all_rep[count_rep] = all[i];
  129.                 count_rep++;
  130.             }
  131.         }
  132.         int temp_numb;
  133.         int numb_replased_stud;
  134.         switch (temp_numb){
  135.         case 0: {
  136.             cout << "Небыло найдено подходящих записей, возвращяю в меню";
  137.             numb_replased_stud = 0;
  138.             goto end;
  139.         }
  140.         case 1: cout << "Был найден всего 1 подходящий студент, вы направлены меню изменения его данных";
  141.         default: {
  142.             cout << "Было найденно " << count_rep << " студент(ов) с такой фамилией, далее будут выведены их ФИО и номера зачёток " << endl;
  143.             for (temp_numb; temp_numb < count_rep; temp_numb++) {
  144.                 cout << all_rep[temp_numb].fam << " " << all_rep[temp_numb].im << " " << all_rep[temp_numb].ot << " с номером зачётки " << all_rep[temp_numb].zachetka << endl;
  145.             }
  146.             cout << "Введите номер подходящего ученика для замены данных ";
  147.             cin >> numb_replased_stud;
  148.         }
  149.         }
  150.         choose:
  151.         cout << "--МЕНЮ ИЗМЕНЕИЯ ДАННЫХ СТУДЕНТА--\n Список доступных пунтов для изменения, для выбора подходящего введите его номер ";
  152.         cout << "0 - для выхода из меню";
  153.         cout << "1 - для изменения имени, текущее значение  " << all_rep[numb_replased_stud].im;
  154.         cout << "2 - для изменения фамилии, текущее значение  " << all_rep[numb_replased_stud].fam;
  155.         cout << "3 - для изменения отчества, текущее значение  " << all_rep[numb_replased_stud].ot;
  156.         cout << "4 - для изменения года рождения, текущее значение  " << all_rep[numb_replased_stud].b_year;
  157.         cout << "5 - для изменения месяйа рождения, текущее значение  " << all_rep[numb_replased_stud].b_month;
  158.         cout << "6 - для изменения дня рождения, текущее значение  " << all_rep[numb_replased_stud].b_day;
  159.         cout << "7 - для изменения кафедры, текущее значение  " << all_rep[numb_replased_stud].kaf;
  160.         cout << "8 - для изменения группы, текущее значение  " << all_rep[numb_replased_stud].group;
  161.         cout << "9 - для изменения номера зачётки, текущее значение  " << all_rep[numb_replased_stud].zachetka;
  162.         cout << "10 - для перехода в меню изменения сессий и оценок студента";
  163.  
  164.         int temp_action;
  165.         cin >> temp_action;
  166.  
  167.         switch (temp_action) {
  168.         case 0: break;
  169.         case 1: {cout << "Введите новое значение для поля имя "; cin >> all_rep[numb_replased_stud].im; }
  170.         case 2: {cout << "Введите новое значение для поля фамилия "; cin >> all_rep[numb_replased_stud].fam; }
  171.         case 3: {cout << "Введите новое значение для поля отчество "; cin >> all_rep[numb_replased_stud].ot; }
  172.         case 4: {cout << "Введите новое значение для поля год рождения "; cin >> all_rep[numb_replased_stud].b_year; }
  173.         case 5: {cout << "Введите новое значение для поля месяц рождения "; cin >> all_rep[numb_replased_stud].b_month; }
  174.         case 6: {cout << "Введите новое значение для поля день рождения "; cin >> all_rep[numb_replased_stud].b_day; }
  175.         case 7: {cout << "Введите новое значение для поля кафедра "; cin >> all_rep[numb_replased_stud].kaf; }
  176.         case 8: {cout << "Введите новое значение для поля код группы "; cin >> all_rep[numb_replased_stud].group; }
  177.         case 9: {cout << "Введите новое значение для поля номер зачётки "; cin >> all_rep[numb_replased_stud].zachetka; }
  178.         case 10: {
  179.             cout << "-- меню редактирования сессий -- ";
  180.             cout << "Имеются даннные по " << all_rep[numb_replased_stud].sess_co << " числу сессий, введите номер сессии для исправления этой сессии" << endl;
  181.             int temp_sess_rewrite;
  182.             cin >> temp_sess_rewrite;
  183.             cout << "В " << temp_sess_rewrite << " сессии имеются данные по " << all_rep[numb_replased_stud].s[temp_sess_rewrite].predm_co << " предмету(ам), введите номер предмета для изменения его данных" << endl;
  184.             int temp_subj_rewrite;
  185.             cin >> temp_subj_rewrite;
  186.             int temp_action_rewrite;
  187.             start_ww:
  188.             cout << "Введите, что вы хотите изменить в данном предмете" << endl;
  189.             cout << "0 - для выхода из данного меню" << endl;
  190.             cout << "1 - название предмета, текущее " << all_rep[numb_replased_stud].s[temp_sess_rewrite].p[temp_subj_rewrite].name << endl;
  191.             cout << "2 - отметка по предмету, текущая " << all_rep[numb_replased_stud].s[temp_sess_rewrite].p[temp_subj_rewrite].mark << endl;
  192.             cin >> temp_action_rewrite;
  193.             switch (temp_action_rewrite) {
  194.             case 0: break;
  195.             case 1: {cout << "Введите новое название предмета "; cin >> all_rep[numb_replased_stud].s[temp_sess_rewrite].p[temp_subj_rewrite].name; }
  196.             case 2: {cout << "Введите новую отметку по предмету  "; cin >> all_rep[numb_replased_stud].s[temp_sess_rewrite].p[temp_subj_rewrite].mark; }
  197.             default: {cout << "Вы ввели что-то не то, возвращаю вас на момент ввода, или нажмите 0 для выхода " << endl; goto start_ww; }
  198.             }
  199.         }
  200.         default: {cout << "Вы неверно введи номер действия, введите его заново или введите 0 для выхода"; goto choose; }
  201.         }
  202.     end:
  203.     }
  204. };
  205.  
  206. int main()
  207. {
  208.     SetConsoleCP(1251);
  209.     SetConsoleOutputCP(1251);
  210.  
  211.     read func;
  212.     func.switcher_in();
  213.     while (func.key != 'e') {
  214.         switch (func.key) {
  215.         case 'k': {func.f_in(); break; }
  216.         case 'r': func.f_read();
  217.         }
  218.         func.switcher_in();
  219.     }
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement