hpnq

finally 2.0

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