Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include<windows.h>
- using namespace std;
- const int MAX_STUDENTS = 100;
- const int MAX_COURSE_PLANS = 100;
- const int MAX_PERFORMANCES = 10000; //поменяла
- //ебаная функция проверяет строку
- 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(); // удаляем последний символ.
- // cout << x << endl;
- 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);
- // cout << "SAVING\n" << performanceCount << endl;
- if (outFile.is_open()) {
- for (int i = 0; i < performanceCount; ++i) {
- outFile << performances[i].studentRecordBookNumber << " "
- << performances[i].subject << " "
- << performances[i].grade << endl;
- }
- outFile.close();
- cout << "closed!" << endl;
- } else {
- cerr << "Error opening file: " << filename << endl;
- }
- }
- void changeStudentFile(){
- string y, w, z;
- char ch;
- cout << "Хотите ли изменить данные о уебки(y/n)" << endl;
- cin >> ch;
- while(ch!='n'){
- cout << "Введите номер зачётки пользователя о котором хотите изменить информацию: " << endl;
- cin >> y; // номер зачетки
- cout << "Введите новую информацию об этом студенте" << endl;
- for (int j = 0; j < studentCount; ++j) {
- if (students[j].recordBookNumber == y) {
- // апдейтим ещё и перфоманс
- string f,i,o;
- cin >> f >> i >> o
- >> students[j].recordBookNumber
- >> students[j].group
- >> students[j].course
- >> students[j].socialScholarship;
- // --------------- UPDATE PERFOMANCES ------------ NEED TO UPDATE GRADE LATER
- for(int q = 0; q < performanceCount; q++){
- if(y == performances[q].studentRecordBookNumber ){
- performances[q].studentRecordBookNumber = students[j].recordBookNumber;
- }
- }
- // --------------- UPDATE PERFOMANCES ------------ NEED TO UPDATE GRADE LATER
- students[j].fio = f + " " + i + " " + o;
- }
- }
- cout << "Ввести еще слово? (y/n)" << endl;
- cin >> ch;
- }
- }
- void changeStudy_planFile(){
- string y, w, z;
- char ch;
- cout << "Хотите ли вы изменить информацию о предмете?(y/n)\n";
- cin >> ch;
- while(ch!='n'){
- cout << "Введите предмет, информацию о котором хотите изменить: " << endl;
- //не уверена насчёт ввода, потому что слов может быть несколько
- cin.ignore();
- getline(cin,y);
- cout << "Введите информацию о новом предмете";
- for (int i = 0; i < coursePlanCount; ++i) {
- if (coursePlans[i].subject == y) {
- string s1;
- while(cin >> s1){
- if(checkint(s1)){
- break;
- }else{
- coursePlans[i].subject += s1;
- }
- }
- coursePlans[i].hours = stoi(s1);
- cin
- >> coursePlans[i].semester
- >> coursePlans[i].formOfControl;
- // --------------- UPDATE PERFOMANCES ------------ NEED TO UPDATE GRADE LATER
- for(int q = 0; q < performanceCount; q++){
- if(y == performances[q].subject ){
- performances[q].subject = coursePlans[i].subject;
- }
- }
- // --------------- UPDATE PERFOMANCES ------------ NEED TO UPDATE GRADE LATER
- }
- }
- cout<<"Ввести еще слово? (y/n)"<<endl;
- cin>>ch;
- }
- }
- 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++;
- }
- }
- }
- // ----------------- UPDATED -----------------
- int get_course_by_subject(string sub){
- for(int i = 0; i < coursePlanCount; i++){
- if(coursePlans[i].subject == sub){
- return coursePlans[i].semester/2;
- }
- }
- }
- // ----------------- UPDATED -----------------
- 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
- // ----------------- UPDATED -----------------
- && get_course_by_subject(performances[j].subject) == students[i].course
- // ----------------- UPDATED -----------------
- ) {
- eligible = false;
- break;
- }
- }
- if (eligible) {
- cout << "Scholarship assigned to: " << students[i].fio << endl;
- }
- }
- }
- string getSubjectType(string sub){
- for(int i = 0; i < coursePlanCount; i++){
- if(coursePlans[i].subject == sub){
- return coursePlans[i].formOfControl;
- }
- }
- return "error"; // типо ввели неправильно
- }
- void UPDATE(){
- 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;
- }
- void adddddddPerformance(){
- int k = 0;
- for(int i=0; i < studentCount; i++){
- cout << students[i].recordBookNumber << endl;
- for(int j = 0; j < coursePlanCount; j++){
- if((students[i].course * 2) == coursePlans[j].semester or
- (students[i].course * 2) == (coursePlans[j].semester + 1)){
- //тут я хочу проверить если курс студента *2 равен семестру или семестру +1(из файла с предметами) то добавляем предмет в файл grade
- performances[k].studentRecordBookNumber = students[i].recordBookNumber;
- performances[k].subject = coursePlans[j].subject;
- int grade;
- string ans = getSubjectType(coursePlans[j].subject);
- cout << coursePlans[j].subject << endl;
- while(true){
- if(ans == "зачет"){
- cout << "Enter 0(bad) or 1(good)\n";
- // cin >> grade;
- grade = 1;
- performances[k].grade = grade;
- break;
- }else if(ans == "экзамен"){
- cout << "Enter from 2(bad) to 5(excellent)\n";
- // cin >> grade;
- grade = 4;
- performances[k].grade = grade;
- break;
- }else{
- cout << "Wrong subject. try again";
- }
- }
- k++;
- }
- }
- }
- // ------------------------------ UPDATED ---------------------------------------
- performanceCount = k;
- // ------------------------------ UPDATED ---------------------------------------
- }
- };
- int main() {
- system("chcp 1251");
- Deanery deanery;
- // Загрузка данных студентов и учебных планов
- deanery.loadStudents("Students.txt");
- deanery.loadCoursePlans("Study_plan.txt");
- // deanery.out_s();
- //заполняем про успеваемость
- deanery.adddddddPerformance();
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment