hpnq

ZOVZOVZOV

Jul 13th, 2024
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. const int MAX_STUDENTS = 100;
  8. const int MAX_COURSE_PLANS = 100;
  9. const int MAX_PERFORMANCES = 100;
  10.  
  11. //ебаная функция проверяет строку
  12. bool checkint( string s ) {
  13.     for( int i = 0; i < s.length(); i++ ) {
  14.         if( !isdigit( s[i] )) {
  15.             return false;
  16.         }
  17.     }
  18.     return true;
  19. }
  20.  
  21. struct Student {
  22.     string fio;
  23.     string recordBookNumber;
  24.     string group;
  25.     int course;
  26.     bool socialScholarship;
  27.  
  28.     Student() : fio(""), recordBookNumber(""), group(""), course(0), socialScholarship(false) {}
  29.  
  30.     Student(string f, string r, string g, int c, bool s)
  31.             : fio(f), recordBookNumber(r), group(g), course(c), socialScholarship(s) {}
  32. };
  33.  
  34. struct CoursePlan {
  35.     string subject;
  36.     int hours;
  37.     int semester;
  38.     string formOfControl;
  39.  
  40.     CoursePlan() : subject(""), hours(0), semester(0), formOfControl("") {}
  41.     CoursePlan(string sub, int h, int sem, string form)
  42.             : subject(sub), hours(h), semester(sem), formOfControl(form) {}
  43. };
  44.  
  45. struct Performance {
  46.     string studentRecordBookNumber;
  47.     string subject;
  48.     int grade;
  49.  
  50.     Performance() : studentRecordBookNumber(""), subject(""), grade(0) {}
  51.     Performance(string srb, string sub, int g)
  52.             : studentRecordBookNumber(srb), subject(sub), grade(g) {}
  53. };
  54.  
  55. class Deanery {
  56. private:
  57.     Student students[MAX_STUDENTS];
  58.     int studentCount;
  59.     CoursePlan coursePlans[MAX_COURSE_PLANS];
  60.     int coursePlanCount;
  61.     Performance performances[MAX_PERFORMANCES];
  62.     int performanceCount;
  63.  
  64. public:
  65.     Deanery() : studentCount(0), coursePlanCount(0), performanceCount(0) {}
  66.  
  67.     void loadStudents(const string &filename) {
  68.         ifstream inFile(filename);
  69.         if (inFile.is_open()) {
  70.             string f,i,o;
  71.             while (inFile >> f >> i >> o
  72.                           >> students[studentCount].recordBookNumber
  73.                           >> students[studentCount].group
  74.                           >> students[studentCount].course
  75.                           >> students[studentCount].socialScholarship) {
  76.  
  77.                 students[studentCount].fio = f + " " + i + " " + o;
  78.                 studentCount++;
  79.             }
  80.             inFile.close();
  81.         }
  82.         else {
  83.             cerr << "Error opening file: " << filename << endl;
  84.         }
  85.     }
  86.  
  87.     void loadCoursePlans(const string &filename) {
  88.         // проблема со считыванием, когда у нас объект состоит из > 0 пробелов
  89.         ifstream inFile(filename);
  90.         if (inFile.is_open()) {
  91.             while (!inFile.eof()){
  92.                 string x;
  93.                 coursePlans[coursePlanCount].subject = "";
  94.                 while(inFile >> x){
  95.  
  96.                     if(checkint(x)){
  97.                         break;
  98.                     }
  99.                     else{
  100.                         coursePlans[coursePlanCount].subject += x + " ";
  101.                     }
  102.                 }
  103.                 coursePlans[coursePlanCount].subject.pop_back(); // удаляем последний символ.
  104.  
  105.                 coursePlans[coursePlanCount].hours = stoi(x);
  106.  
  107.                 inFile >> coursePlans[coursePlanCount].semester
  108.                        >> coursePlans[coursePlanCount].formOfControl;
  109.  
  110.                 coursePlanCount++;
  111.             }
  112.             inFile.close();
  113.         } else {
  114.             cerr << "Error opening file: " << filename << endl;
  115.         }
  116.     }
  117.  
  118.     void savePerformance(const string &filename) {
  119.         ofstream outFile(filename);
  120.         if (outFile.is_open()) {
  121.             for (int i = 0; i < performanceCount; ++i) {
  122.                 outFile << performances[i].studentRecordBookNumber << " "
  123.                         << performances[i].subject << " "
  124.                         << performances[i].grade << endl;
  125.             }
  126.             outFile.close();
  127.         } else {
  128.             cerr << "Error opening file: " << filename << endl;
  129.         }
  130.     }
  131.  
  132.  
  133.     void changeStudentFile(){
  134.         //а в аргумент что добавить....
  135.         //короче вообще у это число, но я делаю стринг, потому что поле номер зачётки тоже стринг(хз почему, я бы поменяла, но это долго)
  136. //        string y, w, z;
  137. //        char ch;
  138. //        do
  139. //        {
  140. //            cout << "Введите номер зачётки пользователя о котором хотите изменить информацию: " << endl;
  141. //            cin >> y;
  142. //            cout<<"Введите слово которое хотите заменить: "<<endl;
  143. //            cin >> w;
  144. //            cout << "Введите слово на которое хотите заменить:" << endl;
  145. //            cin >> z;
  146. //            cout<<"Ввести еще одно число? (y/n)"<<endl;
  147. //            cin>>ch;
  148. //        };
  149. //        while(ch!='n'){
  150. //            for (int i = 0; i < studentCount; ++i) {
  151. //                if (students[i].recordBookNumber == y) {
  152. //                    if(students[i].fio == w)
  153. //                        students[i].fio = z;
  154. //                    if(students[i].recordBookNumber == w)
  155. //                        students[i].recordBookNumber = z;
  156. //                    if (students[i].group == w)
  157. //                        students[i].group = z;
  158. //                    //тут у меня проблемы с типами потому что поле у стулента типа инт, а я ввожу стринг (нам пизда)
  159. //                    if (students[i].course == w)
  160. //                        students[i].course = z;
  161. //                    //тут блять вообще бул хуй знает что делать
  162. //                    if (students[i].socialScholarship == w)
  163. //                        students[i].socialScholarship = z;
  164. //                }
  165. //            }
  166.             //я хуй знает надо ли здесь рекурсивно вызывать или нет
  167. //        }
  168.     }
  169.  
  170.     void changeStudy_planFile(){
  171.         string y, w, z;
  172.         char ch;
  173. //        do
  174. //        {
  175. //            cout << "Введите предмет, информацию о котором хотите изменить: " << endl;
  176. //            //не уверена насчёт ввода, потому что слов может быть несколько. не наю как
  177. //            cin >> y;
  178. //            cout<<"Введите слово которое хотите заменить: "<<endl;
  179. //            cin >> w;
  180. //            cout << "Введите слово на которое хотите заменить:" << endl;
  181. //            cin >> z;
  182. //            cout<<"Ввести еще одно число? (y/n)"<<endl;
  183. //            cin>>ch;
  184. //        };
  185. //        while(ch!='n'){
  186. //            for (int i = 0; i < coursePlanCount; ++i) {
  187. //                if (coursePlans[i].subject == y) {
  188. //                    if(coursePlans[i].subject == w)
  189. //                        students[i].subject = z;
  190. //                    //тут тоже пизда с типами
  191. //                    if(coursePlans[i].hours  == w)
  192. //                        coursePlans[i].hours  = z;
  193. //                    if (coursePlans[i].semester == w)
  194. //                        coursePlans[i].semester = z;
  195. //                    if (coursePlans[i].formOfControl == w)
  196. //                        coursePlans[i].formOfControl = z;
  197. //                }
  198. //            }
  199.             //я хуй знает надо ли здесь рекурсивно вызывать или нет
  200. //        }
  201.     }
  202.  
  203.     void updatePerformanceFile(const string &filename) {
  204.         ofstream outFile(filename);
  205.         if (outFile.is_open()) {
  206.             for (int i = 0; i < studentCount; ++i) {
  207.                 //вот тут у меня проблемы... короче, мы думали, что у студента может смениться номер зачётки, но ещё может смениться и номер курса
  208.                 //я не знаю что писать, может придумаю позже. подумай пока ты
  209.             }
  210.             outFile.close();
  211.         } else {
  212.             cerr << "Error opening file: " << filename << endl;
  213.         }
  214.     }
  215.  
  216.     void updateStudentFile(const string &filename) {
  217.         ofstream outFile(filename);
  218.         if (outFile.is_open()) {
  219.             for (int i = 0; i < studentCount; ++i) {
  220.                 outFile << students[i].fio << " "
  221.                         << students[i].recordBookNumber << " "
  222.                         << students[i].group << " "
  223.                         << students[i].course << " "
  224.                         << students[i].socialScholarship << endl;
  225.             }
  226.             outFile.close();
  227.         } else {
  228.             cerr << "Error opening file: " << filename << endl;
  229.         }
  230.     }
  231.  
  232.  
  233.     void updateCoursePlanFile(const string &filename) {
  234.         ofstream outFile(filename);
  235.         if (outFile.is_open()) {
  236.             for (int i = 0; i < coursePlanCount; ++i) {
  237.                 outFile << coursePlans[i].subject << " "
  238.                         << coursePlans[i].hours << " "
  239.                         << coursePlans[i].semester << " "
  240.                         << coursePlans[i].formOfControl << endl;
  241.             }
  242.             outFile.close();
  243.         } else {
  244.             cerr << "Error opening file: " << filename << endl;
  245.         }
  246.     }
  247.  
  248.     void selectStudentsByGroup(const string &group) {
  249.         for (int i = 0; i < studentCount; ++i) {
  250.             if (students[i].group == group) {
  251.                 cout << students[i].fio << " "
  252.                      << students[i].recordBookNumber << " "
  253.                      << students[i].group << " "
  254.                      << students[i].course << " "
  255.                      << students[i].socialScholarship << endl;
  256.             }
  257.         }
  258.     }
  259.  
  260.     void listFailingStudents() {
  261.         for (int i = 0; i < studentCount; ++i) {
  262.             bool failing = false;
  263.             for (int j = 0; j < performanceCount; ++j) {
  264.                 if (performances[j].studentRecordBookNumber == students[i].recordBookNumber && performances[j].grade < 3 &&performances[j].grade!=1 ) {
  265.                     failing = true;
  266.                     break;
  267.                 }
  268.             }
  269.             if (failing) {
  270.                 cout << students[i].fio << " " << students[i].recordBookNumber << endl;
  271.             }
  272.         }
  273.     }
  274.  
  275.     void promoteStudents() {
  276.         for (int i = 0; i < studentCount; ++i) {
  277.             bool passing = true;
  278.             for (int j = 0; j < performanceCount; ++j) {
  279.                 if (performances[j].studentRecordBookNumber == students[i].recordBookNumber && performances[j].grade < 3 && performances[j].grade != 1) {
  280.                     passing = false;
  281.                     break;
  282.                 }
  283.             }
  284.             if (passing) {
  285.                 students[i].course++;
  286.             }
  287.         }
  288.     }
  289.  
  290.     void assignScholarships() {
  291.         for (int i = 0; i < studentCount; ++i) {
  292.             bool eligible = true;
  293.             for (int j = 0; j < performanceCount; ++j) {
  294.                 if (performances[j].studentRecordBookNumber == students[i].recordBookNumber && performances[j].grade < 4 && performances[j].grade != 1) {
  295.                     eligible = false;
  296.                     break;
  297.                 }
  298.             }
  299.             if (eligible) {
  300.                 cout << "Scholarship assigned to: " << students[i].fio << endl;
  301.             }
  302.         }
  303.     }
  304.  
  305.     void addPerformance(const string &recordBookNumber, const string &subject, int grade) {
  306.         if (performanceCount < MAX_PERFORMANCES) {
  307.             performances[performanceCount++] = Performance(recordBookNumber, subject, grade);
  308.         } else {
  309.             cerr << "Performance array is full" << endl;
  310.         }
  311.     }
  312.  
  313.     string getSubjectType(string sub){
  314.         cout <<"SUB PLAN \n";
  315.         for(int i = 0; i < coursePlanCount; i++){
  316.             cout << coursePlans[i].subject << "\n";
  317.             if(coursePlans[i].subject == sub){
  318.                 return coursePlans[i].formOfControl;
  319.             }
  320.         }
  321.         return "error"; // типо ввели неправильно
  322.     }
  323.     void out_s(){
  324.         cout << "STUDENTS\n";
  325.         cout << studentCount << endl;
  326.         for(int i = 0 ; i < studentCount; i++ ){
  327.             cout << students[i].fio <<" "
  328.             << students[i].recordBookNumber << " "
  329.             << students[i].course << "\n";
  330.         }
  331.     }
  332.     bool good_book(string &n){ // проверка на то что такая зачетка у кого то есть
  333.         for(int i = 0; i < studentCount; i++){
  334.             if(students[i].recordBookNumber == n){
  335.                 return true;
  336.             }
  337.         }
  338.         return false;
  339.     }
  340. };
  341.  
  342. int main() {
  343.     system("chcp 1251");
  344.     Deanery deanery;
  345.  
  346.     // Загрузка данных студентов и учебных планов
  347.     deanery.loadStudents("Students.txt");
  348.  
  349.     deanery.loadCoursePlans("Study_plan.txt");
  350.  
  351.     // Заполняем файл успеваемости студентов (пример)
  352.     // поправить
  353.     // -----------------FIX IT -------------
  354.     string s;
  355.  
  356.     while(true){
  357.         cout << "add params ? (y/n)\n";
  358.         cin >> s;
  359.         if(s == "n"){
  360.             break;
  361.         }
  362.         string rb;
  363.  
  364.         while(true){
  365.             cout << "Enter record book number:\n";
  366.             cin >> rb;
  367.             if(deanery.good_book(rb)){
  368.                 break;
  369.             } else{
  370.                 cout << "Такой зачетки нету!!! try again \n";
  371.             }
  372.         }
  373.  
  374.  
  375.         cout << "Enter subject:\n";
  376.         string sub;
  377.         int grade;
  378.         while(true){
  379.             cin.ignore();
  380.             getline(cin, sub);
  381.             string ans = deanery.getSubjectType(sub);
  382.             if(ans == "test"){
  383.                 cout << "Enter 0(bad) or 1(good)\n";
  384.                 cin >> grade;
  385.                 deanery.addPerformance(rb, sub, grade);
  386.                 break;
  387.             }else if(ans == "exam"){
  388.                 cout << "Enter from 2(bad) to 5(excellent)\n";
  389.                 cin >> grade;
  390.                 deanery.addPerformance(rb, sub, grade);
  391.  
  392.                 break;
  393.             }else{
  394.                 cout << "Wrong subject. try again";
  395.             }
  396.         }
  397.  
  398.     }
  399.     // сэйвим изменения.
  400.  
  401.     deanery.savePerformance("Grade.txt");
  402.     // РАБОТАЕТ!!!!
  403.     return 1;
  404.  
  405.  
  406.  
  407.     // ---------------- END OF FIXING THIS: ------
  408.     /*
  409.     deanery.addPerformance("12345", "Math", 5);
  410.     deanery.addPerformance("12345", "Physics", 4);
  411.     deanery.addPerformance("67890", "Math", 2);
  412.     deanery.addPerformance("67890", "Physics", 3);
  413.  
  414.     // Сохраняем успеваемость студентов
  415.     deanery.savePerformance("Grade.txt");
  416.      */
  417.  
  418.  
  419.     //----------------------------------------------------------------------------------------------------
  420.     //тут мои записки сумасшедшего
  421.     //дописать изменение массивов студент и студент план
  422.     deanery.changeStudentFile();
  423.     deanery.changeStudy_planFile();
  424.     //понаписала... проверь пожалуйста(и поправь!!!!)
  425.  
  426.     //изменить файл грэйд(если меняем номер зачётной книжки у студента)
  427.     deanery.updatePerformanceFile("Grade.txt");
  428.     //-------------------------------------------------------------------------------------------------------------
  429.  
  430.  
  431.     // Вносим изменения в файлы
  432.     deanery.updateStudentFile("Students.txt");
  433.     deanery.updateCoursePlanFile("Study_plan.txt");
  434.  
  435.     // Делаем выборку по группе
  436.     string group;
  437.     cout << "Group: " << endl;
  438.     cin >> group;
  439.     cout << "Students in group " << group << ":" << endl;
  440.     deanery.selectStudentsByGroup(group);
  441.  
  442.     // Выводим неуспевающих студентов
  443.     cout << "Failing students:" << endl;
  444.     deanery.listFailingStudents();
  445.  
  446.     // Переводим студентов на следующий курс
  447.     deanery.promoteStudents();
  448.     deanery.updateStudentFile("Students.txt");
  449.  
  450.     // Назначаем стипендию
  451.     deanery.assignScholarships();
  452.  
  453.     return 0;
  454. }
  455.  
Add Comment
Please, Sign In to add comment