Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- const int MAX_STUDENTS = 100;
- const int MAX_COURSE_PLANS = 100;
- const int MAX_PERFORMANCES = 100;
- //ебаная функция проверяет строку
- bool checkint( string s ) {
- for( int i = 0; i < s.length(); i++ ) {
- if( !isdigit( s[i] )) {
- return false;
- }
- }
- return true;
- }
- struct Student {
- string fio;
- string recordBookNumber;
- string group;
- int course;
- bool socialScholarship;
- Student() : fio(""), recordBookNumber(""), group(""), course(0), socialScholarship(false) {}
- Student(string f, string r, string g, int c, bool s)
- : fio(f), recordBookNumber(r), group(g), course(c), socialScholarship(s) {}
- };
- struct CoursePlan {
- string subject;
- int hours;
- int semester;
- string formOfControl;
- CoursePlan() : subject(""), hours(0), semester(0), formOfControl("") {}
- CoursePlan(string sub, int h, int sem, string form)
- : subject(sub), hours(h), semester(sem), formOfControl(form) {}
- };
- struct Performance {
- string studentRecordBookNumber;
- string subject;
- int grade;
- Performance() : studentRecordBookNumber(""), subject(""), grade(0) {}
- Performance(string srb, string sub, int g)
- : studentRecordBookNumber(srb), subject(sub), grade(g) {}
- };
- class Deanery {
- private:
- Student students[MAX_STUDENTS];
- int studentCount;
- CoursePlan coursePlans[MAX_COURSE_PLANS];
- int coursePlanCount;
- Performance performances[MAX_PERFORMANCES];
- int performanceCount;
- public:
- Deanery() : studentCount(0), coursePlanCount(0), performanceCount(0) {}
- void loadStudents(const string &filename) {
- ifstream inFile(filename);
- if (inFile.is_open()) {
- string f,i,o;
- while (inFile >> f >> i >> o
- >> students[studentCount].recordBookNumber
- >> students[studentCount].group
- >> students[studentCount].course
- >> students[studentCount].socialScholarship) {
- students[studentCount].fio = f + " " + i + " " + o;
- studentCount++;
- }
- inFile.close();
- }
- else {
- cerr << "Error opening file: " << filename << endl;
- }
- }
- void loadCoursePlans(const string &filename) {
- // проблема со считыванием, когда у нас объект состоит из > 0 пробелов
- ifstream inFile(filename);
- if (inFile.is_open()) {
- while (!inFile.eof()){
- string x;
- coursePlans[coursePlanCount].subject = "";
- while(inFile >> x){
- if(checkint(x)){
- break;
- }
- else{
- coursePlans[coursePlanCount].subject += x + " ";
- }
- }
- coursePlans[coursePlanCount].subject.pop_back(); // удаляем последний символ.
- coursePlans[coursePlanCount].hours = stoi(x);
- inFile >> coursePlans[coursePlanCount].semester
- >> coursePlans[coursePlanCount].formOfControl;
- coursePlanCount++;
- }
- inFile.close();
- } else {
- cerr << "Error opening file: " << filename << endl;
- }
- }
- void savePerformance(const string &filename) {
- ofstream outFile(filename);
- if (outFile.is_open()) {
- for (int i = 0; i < performanceCount; ++i) {
- outFile << performances[i].studentRecordBookNumber << " "
- << performances[i].subject << " "
- << performances[i].grade << endl;
- }
- outFile.close();
- } else {
- cerr << "Error opening file: " << filename << endl;
- }
- }
- void changeStudentFile(){
- //а в аргумент что добавить....
- //короче вообще у это число, но я делаю стринг, потому что поле номер зачётки тоже стринг(хз почему, я бы поменяла, но это долго)
- // string y, w, z;
- // char ch;
- // do
- // {
- // cout << "Введите номер зачётки пользователя о котором хотите изменить информацию: " << endl;
- // cin >> y;
- // cout<<"Введите слово которое хотите заменить: "<<endl;
- // cin >> w;
- // cout << "Введите слово на которое хотите заменить:" << endl;
- // cin >> z;
- // cout<<"Ввести еще одно число? (y/n)"<<endl;
- // cin>>ch;
- // };
- // while(ch!='n'){
- // for (int i = 0; i < studentCount; ++i) {
- // if (students[i].recordBookNumber == y) {
- // if(students[i].fio == w)
- // students[i].fio = z;
- // if(students[i].recordBookNumber == w)
- // students[i].recordBookNumber = z;
- // if (students[i].group == w)
- // students[i].group = z;
- // //тут у меня проблемы с типами потому что поле у стулента типа инт, а я ввожу стринг (нам пизда)
- // if (students[i].course == w)
- // students[i].course = z;
- // //тут блять вообще бул хуй знает что делать
- // if (students[i].socialScholarship == w)
- // students[i].socialScholarship = z;
- // }
- // }
- //я хуй знает надо ли здесь рекурсивно вызывать или нет
- // }
- }
- void changeStudy_planFile(){
- string y, w, z;
- char ch;
- // do
- // {
- // cout << "Введите предмет, информацию о котором хотите изменить: " << endl;
- // //не уверена насчёт ввода, потому что слов может быть несколько. не наю как
- // cin >> y;
- // cout<<"Введите слово которое хотите заменить: "<<endl;
- // cin >> w;
- // cout << "Введите слово на которое хотите заменить:" << endl;
- // cin >> z;
- // cout<<"Ввести еще одно число? (y/n)"<<endl;
- // cin>>ch;
- // };
- // while(ch!='n'){
- // for (int i = 0; i < coursePlanCount; ++i) {
- // if (coursePlans[i].subject == y) {
- // if(coursePlans[i].subject == w)
- // students[i].subject = z;
- // //тут тоже пизда с типами
- // if(coursePlans[i].hours == w)
- // coursePlans[i].hours = z;
- // if (coursePlans[i].semester == w)
- // coursePlans[i].semester = z;
- // if (coursePlans[i].formOfControl == w)
- // coursePlans[i].formOfControl = z;
- // }
- // }
- //я хуй знает надо ли здесь рекурсивно вызывать или нет
- // }
- }
- void updatePerformanceFile(const string &filename) {
- ofstream outFile(filename);
- if (outFile.is_open()) {
- for (int i = 0; i < studentCount; ++i) {
- //вот тут у меня проблемы... короче, мы думали, что у студента может смениться номер зачётки, но ещё может смениться и номер курса
- //я не знаю что писать, может придумаю позже. подумай пока ты
- }
- outFile.close();
- } else {
- cerr << "Error opening file: " << filename << endl;
- }
- }
- void updateStudentFile(const string &filename) {
- ofstream outFile(filename);
- if (outFile.is_open()) {
- for (int i = 0; i < studentCount; ++i) {
- outFile << students[i].fio << " "
- << students[i].recordBookNumber << " "
- << students[i].group << " "
- << students[i].course << " "
- << students[i].socialScholarship << endl;
- }
- outFile.close();
- } else {
- cerr << "Error opening file: " << filename << endl;
- }
- }
- void updateCoursePlanFile(const string &filename) {
- ofstream outFile(filename);
- if (outFile.is_open()) {
- for (int i = 0; i < coursePlanCount; ++i) {
- outFile << coursePlans[i].subject << " "
- << coursePlans[i].hours << " "
- << coursePlans[i].semester << " "
- << coursePlans[i].formOfControl << endl;
- }
- outFile.close();
- } else {
- cerr << "Error opening file: " << filename << endl;
- }
- }
- void selectStudentsByGroup(const string &group) {
- for (int i = 0; i < studentCount; ++i) {
- if (students[i].group == group) {
- cout << students[i].fio << " "
- << students[i].recordBookNumber << " "
- << students[i].group << " "
- << students[i].course << " "
- << students[i].socialScholarship << endl;
- }
- }
- }
- void listFailingStudents() {
- for (int i = 0; i < studentCount; ++i) {
- bool failing = false;
- for (int j = 0; j < performanceCount; ++j) {
- if (performances[j].studentRecordBookNumber == students[i].recordBookNumber && performances[j].grade < 3 &&performances[j].grade!=1 ) {
- failing = true;
- break;
- }
- }
- if (failing) {
- cout << students[i].fio << " " << students[i].recordBookNumber << endl;
- }
- }
- }
- void promoteStudents() {
- for (int i = 0; i < studentCount; ++i) {
- bool passing = true;
- for (int j = 0; j < performanceCount; ++j) {
- if (performances[j].studentRecordBookNumber == students[i].recordBookNumber && performances[j].grade < 3 && performances[j].grade != 1) {
- passing = false;
- break;
- }
- }
- if (passing) {
- students[i].course++;
- }
- }
- }
- void assignScholarships() {
- for (int i = 0; i < studentCount; ++i) {
- bool eligible = true;
- for (int j = 0; j < performanceCount; ++j) {
- if (performances[j].studentRecordBookNumber == students[i].recordBookNumber && performances[j].grade < 4 && performances[j].grade != 1) {
- eligible = false;
- break;
- }
- }
- if (eligible) {
- cout << "Scholarship assigned to: " << students[i].fio << endl;
- }
- }
- }
- void addPerformance(const string &recordBookNumber, const string &subject, int grade) {
- if (performanceCount < MAX_PERFORMANCES) {
- performances[performanceCount++] = Performance(recordBookNumber, subject, grade);
- } else {
- cerr << "Performance array is full" << endl;
- }
- }
- string getSubjectType(string sub){
- cout <<"SUB PLAN \n";
- for(int i = 0; i < coursePlanCount; i++){
- cout << coursePlans[i].subject << "\n";
- if(coursePlans[i].subject == sub){
- return coursePlans[i].formOfControl;
- }
- }
- return "error"; // типо ввели неправильно
- }
- void out_s(){
- cout << "STUDENTS\n";
- cout << studentCount << endl;
- for(int i = 0 ; i < studentCount; i++ ){
- cout << students[i].fio <<" "
- << students[i].recordBookNumber << " "
- << students[i].course << "\n";
- }
- }
- bool good_book(string &n){ // проверка на то что такая зачетка у кого то есть
- for(int i = 0; i < studentCount; i++){
- if(students[i].recordBookNumber == n){
- return true;
- }
- }
- return false;
- }
- };
- int main() {
- system("chcp 1251");
- Deanery deanery;
- // Загрузка данных студентов и учебных планов
- deanery.loadStudents("Students.txt");
- deanery.loadCoursePlans("Study_plan.txt");
- // Заполняем файл успеваемости студентов (пример)
- // поправить
- // -----------------FIX IT -------------
- string s;
- while(true){
- cout << "add params ? (y/n)\n";
- cin >> s;
- if(s == "n"){
- break;
- }
- string rb;
- while(true){
- cout << "Enter record book number:\n";
- cin >> rb;
- if(deanery.good_book(rb)){
- break;
- } else{
- cout << "Такой зачетки нету!!! try again \n";
- }
- }
- cout << "Enter subject:\n";
- string sub;
- int grade;
- while(true){
- cin.ignore();
- getline(cin, sub);
- string ans = deanery.getSubjectType(sub);
- if(ans == "test"){
- cout << "Enter 0(bad) or 1(good)\n";
- cin >> grade;
- deanery.addPerformance(rb, sub, grade);
- break;
- }else if(ans == "exam"){
- cout << "Enter from 2(bad) to 5(excellent)\n";
- cin >> grade;
- deanery.addPerformance(rb, sub, grade);
- break;
- }else{
- cout << "Wrong subject. try again";
- }
- }
- }
- // сэйвим изменения.
- deanery.savePerformance("Grade.txt");
- // РАБОТАЕТ!!!!
- return 1;
- // ---------------- END OF FIXING THIS: ------
- /*
- deanery.addPerformance("12345", "Math", 5);
- deanery.addPerformance("12345", "Physics", 4);
- deanery.addPerformance("67890", "Math", 2);
- deanery.addPerformance("67890", "Physics", 3);
- // Сохраняем успеваемость студентов
- deanery.savePerformance("Grade.txt");
- */
- //----------------------------------------------------------------------------------------------------
- //тут мои записки сумасшедшего
- //дописать изменение массивов студент и студент план
- deanery.changeStudentFile();
- deanery.changeStudy_planFile();
- //понаписала... проверь пожалуйста(и поправь!!!!)
- //изменить файл грэйд(если меняем номер зачётной книжки у студента)
- deanery.updatePerformanceFile("Grade.txt");
- //-------------------------------------------------------------------------------------------------------------
- // Вносим изменения в файлы
- deanery.updateStudentFile("Students.txt");
- deanery.updateCoursePlanFile("Study_plan.txt");
- // Делаем выборку по группе
- string group;
- cout << "Group: " << endl;
- cin >> group;
- cout << "Students in group " << group << ":" << endl;
- deanery.selectStudentsByGroup(group);
- // Выводим неуспевающих студентов
- cout << "Failing students:" << endl;
- deanery.listFailingStudents();
- // Переводим студентов на следующий курс
- deanery.promoteStudents();
- deanery.updateStudentFile("Students.txt");
- // Назначаем стипендию
- deanery.assignScholarships();
- return 0;
- }
Add Comment
Please, Sign In to add comment