Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба2 / Laba 2 (15)
.cpp#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
