运用C++语言描述学校类、教师类、学生类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态性和虚函数的知识。注重面向对象程序设计理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解面向对象程序设计的核心的概念。 本课程设计要实现的主要功能如下: 1)建立学校类、教师类、学生类 2)学校信息的初始化 3)教师信息的添加、修改、删除、查找 4)学生信息的添加、修改、删除、查找 5)教师信息、学生信息的输出 6)对学生信息按学号排序 7)将学校、教师、学生信息保存为文件
时间: 2023-07-16 15:13:20 浏览: 93
以下是一个示例代码,实现了上述要求:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
// 学校类
class School {
protected:
string name; // 学校名称
string address; // 学校地址
public:
School(string n, string a) : name(n), address(a) {}
virtual void print() { // 输出学校信息
cout << "学校名称:" << name << endl;
cout << "学校地址:" << address << endl;
}
};
// 教师类
class Teacher {
protected:
string name; // 教师姓名
string id; // 教师工号
public:
Teacher(string n, string i) : name(n), id(i) {}
virtual void print() { // 输出教师信息
cout << "教师姓名:" << name << endl;
cout << "教师工号:" << id << endl;
}
virtual void add() {} // 添加教师信息
virtual void modify() {} // 修改教师信息
virtual void remove() {} // 删除教师信息
virtual void search() {} // 查找教师信息
};
// 学生类
class Student {
protected:
string name; // 学生姓名
string id; // 学号
public:
Student(string n, string i) : name(n), id(i) {}
virtual void print() { // 输出学生信息
cout << "学生姓名:" << name << endl;
cout << "学号:" << id << endl;
}
virtual void add() {} // 添加学生信息
virtual void modify() {} // 修改学生信息
virtual void remove() {} // 删除学生信息
virtual void search() {} // 查找学生信息
};
// 教师派生类,实现具体的添加、修改、删除、查找功能
class TeacherDerived : public Teacher {
private:
vector<Teacher*> teachers; // 教师信息列表
public:
TeacherDerived(string n, string i) : Teacher(n, i) {}
void print() override { // 输出教师信息列表
for (auto t : teachers) {
t->print();
}
}
void add() override { // 添加教师信息
string n, i;
cout << "请输入教师姓名:";
cin >> n;
cout << "请输入教师工号:";
cin >> i;
teachers.push_back(new TeacherDerived(n, i));
}
void modify() override { // 修改教师信息
string i;
cout << "请输入要修改教师的工号:";
cin >> i;
for (auto t : teachers) {
if (t->id == i) {
string n;
cout << "请输入修改后的教师姓名:";
cin >> n;
t->name = n;
cout << "修改成功!" << endl;
return;
}
}
cout << "未找到该教师!" << endl;
}
void remove() override { // 删除教师信息
string i;
cout << "请输入要删除教师的工号:";
cin >> i;
for (auto it = teachers.begin(); it != teachers.end(); it++) {
if ((*it)->id == i) {
delete *it;
teachers.erase(it);
cout << "删除成功!" << endl;
return;
}
}
cout << "未找到该教师!" << endl;
}
void search() override { // 查找教师信息
string i;
cout << "请输入要查找教师的工号:";
cin >> i;
for (auto t : teachers) {
if (t->id == i) {
t->print();
return;
}
}
cout << "未找到该教师!" << endl;
}
};
// 学生派生类,实现具体的添加、修改、删除、查找功能
class StudentDerived : public Student {
private:
vector<Student*> students; // 学生信息列表
public:
StudentDerived(string n, string i) : Student(n, i) {}
void print() override { // 输出学生信息列表
sort(students.begin(), students.end(), [](Student* a, Student* b) { return a->id < b->id; }); // 按学号排序
for (auto s : students) {
s->print();
}
}
void add() override { // 添加学生信息
string n, i;
cout << "请输入学生姓名:";
cin >> n;
cout << "请输入学号:";
cin >> i;
students.push_back(new StudentDerived(n, i));
}
void modify() override { // 修改学生信息
string i;
cout << "请输入要修改学生的学号:";
cin >> i;
for (auto s : students) {
if (s->id == i) {
string n;
cout << "请输入修改后的学生姓名:";
cin >> n;
s->name = n;
cout << "修改成功!" << endl;
return;
}
}
cout << "未找到该学生!" << endl;
}
void remove() override { // 删除学生信息
string i;
cout << "请输入要删除学生的学号:";
cin >> i;
for (auto it = students.begin(); it != students.end(); it++) {
if ((*it)->id == i) {
delete *it;
students.erase(it);
cout << "删除成功!" << endl;
return;
}
}
cout << "未找到该学生!" << endl;
}
void search() override { // 查找学生信息
string i;
cout << "请输入要查找学生的学号:";
cin >> i;
for (auto s : students) {
if (s->id == i) {
s->print();
return;
}
}
cout << "未找到该学生!" << endl;
}
};
int main() {
School school("清华大学", "北京市海淀区");
TeacherDerived teachers("教师信息", "");
StudentDerived students("学生信息", "");
// 初始化学校信息、教师信息、学生信息
cout << "初始化学校信息..." << endl;
school.print();
cout << endl;
cout << "初始化教师信息..." << endl;
teachers.add();
teachers.print();
cout << endl;
cout << "初始化学生信息..." << endl;
students.add();
students.print();
cout << endl;
// 对教师信息、学生信息进行操作
int choice;
while (true) {
cout << "请选择要进行的操作:" << endl;
cout << "1. 添加教师信息" << endl;
cout << "2. 修改教师信息" << endl;
cout << "3. 删除教师信息" << endl;
cout << "4. 查找教师信息" << endl;
cout << "5. 添加学生信息" << endl;
cout << "6. 修改学生信息" << endl;
cout << "7. 删除学生信息" << endl;
cout << "8. 查找学生信息" << endl;
cout << "9. 输出教师信息" << endl;
cout << "10. 输出学生信息" << endl;
cout << "11. 保存信息到文件" << endl;
cout << "12. 退出" << endl;
cin >> choice;
switch (choice) {
case 1:
teachers.add();
break;
case 2:
teachers.modify();
break;
case 3:
teachers.remove();
break;
case 4:
teachers.search();
break;
case 5:
students.add();
break;
case 6:
students.modify();
break;
case 7:
students.remove();
break;
case 8:
students.search();
break;
case 9:
teachers.print();
break;
case 10:
students.print();
break;
case 11: {
ofstream outfile("school.txt");
school.print();
teachers.print();
students.print();
outfile.close();
cout << "保存成功!" << endl;
break;
}
case 12:
return 0;
default:
cout << "输入错误,请重新输入!" << endl;
}
}
return 0;
}
```
在这个示例代码中,我们定义了一个学校类、教师类、学生类,并实现了基类和派生类的继承和多态性。其中,教师类和学生类都有一个派生类,实现了具体的添加、修改、删除、查找功能。
在程序运行时,我们首先对学校、教师、学生信息进行初始化,然后通过菜单提供了一些操作选项,允许用户对教师信息、学生信息进行添加、修改、删除、查找等操作,并输出教师信息、学生信息,最后将所有信息保存到文件中。
注意,由于这只是一个示例代码,还有很多需要完善的地方,例如输入的数据需要进行合法性检查等。
阅读全文