Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
4.36 Кб
Скачать
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

class Course;

class Student {
private:
    string firstName;
    string lastName;
    string passportNumber;
    Course* course;
    
public:
    Student(string first, string last, string passport) 
        : firstName(first), lastName(last), passportNumber(passport), course(nullptr) {}
    
    string getFullName() { return firstName + " " + lastName; }
    Course* getCourse() { return course; }
    void setCourse(Course* c) { course = c; }
    string getPassport() { return passportNumber; }
};

class Course {
private:
    int totalStudents;
    int maxStudents;
    string courseName;
    
public:
    Course(string name, int max) : courseName(name), maxStudents(max), totalStudents(0) {
        cout << "Создан курс: '" << name << "' (макс. студентов: " << max << ")" << endl;
    }
    
    bool addStudent(Student& student) {
        if (totalStudents < maxStudents) {
            if (student.getCourse() == nullptr) {
                totalStudents++;
                student.setCourse(this);
                cout << "Студент " << student.getFullName() << " зачислен на курс '" << courseName << "'" << endl;
                return true;
            } else {
                cout << "Ошибка: студент " << student.getFullName() << " уже учится на другом курсе" << endl;
                return false;
            }
        } else {
            cout << "Ошибка: курс '" << courseName << "' переполнен" << endl;
            return false;
        }
    }
    
    void removeStudent(Student& student) {
        if (student.getCourse() == this) {
            totalStudents--;
            student.setCourse(nullptr);
            cout << "Студент " << student.getFullName() << " отчислен с курса '" << courseName << "'" << endl;
        } else {
            cout << "Ошибка: студент " << student.getFullName() << " не учится на этом курсе" << endl;
        }
    }
    
    string getName() { return courseName; }
    int getTotalStudents() { return totalStudents; }
    int getMaxStudents() { return maxStudents; }
};

bool sameCourse(Student& s1, Student& s2) {
    bool result = (s1.getCourse() == s2.getCourse() && s1.getCourse() != nullptr);
    cout << "Студенты " << s1.getFullName() << " и " << s2.getFullName();
    if (result) {
        cout << " учатся на одном курсе: '" << s1.getCourse()->getName() << "'" << endl;
    } else {
        cout << " учатся на разных курсах" << endl;
    }
    return result;
}

int main() {
    SetConsoleOutputCP(65001);
    
    Course sewing("Кройка и шитье", 3);
    Course cooking("Кулинария", 2);
    
    Student student1("Иван", "Иванов", "123456");
    Student student2("Петр", "Петров", "654321");
    Student student3("Мария", "Сидорова", "111222");
    Student student4("Анна", "Кузнецова", "333444");
    
    cout << "\nЗачисление студентов:" << endl;
    sewing.addStudent(student1);
    sewing.addStudent(student2);
    sewing.addStudent(student3);
    sewing.addStudent(student4); // ошибка - переполнение
    
    cooking.addStudent(student4);
    cooking.addStudent(student1); // ошибка - студент уже на другом курсе
    
    cout << "\nПроверка курсов:" << endl;
    sameCourse(student1, student2);
    sameCourse(student1, student4);
    
    cout << "\nОтчисление студента:" << endl;
    sewing.removeStudent(student2);
    
    cout << "\nПовторная проверка:" << endl;
    sameCourse(student1, student2);
    
    cout << "\nСтатистика курсов:" << endl;
    cout << "Курс '" << sewing.getName() << "': " << sewing.getTotalStudents() 
         << "/" << sewing.getMaxStudents() << " студентов" << endl;
    cout << "Курс '" << cooking.getName() << "': " << cooking.getTotalStudents() 
         << "/" << cooking.getMaxStudents() << " студентов" << endl;
    
    return 0;
}
Соседние файлы в папке Лаба2