帮我用c++写一个学生成绩管理系统,系统应具有:数据维护(数据录入、添加、修改、删除)、数据查询 (可按学号、姓名、性别、民族、年龄、地址、各门课程成绩等进行查询),而且需要利用封装、继承和多态机制,并用备注指明哪里用的封装、继承和多态

时间: 2023-10-20 07:24:30 浏览: 45
好的,下面是一个简单的学生成绩管理系统的示例代码,其中使用了封装、继承和多态机制: ```c++ #include <iostream> #include <string> #include <vector> using namespace std; // 学生类 class Student { protected: string name; // 姓名 string gender; // 性别 int age; // 年龄 string address; // 地址 public: Student(string name_, string gender_, int age_, string address_) { name = name_; gender = gender_; age = age_; address = address_; } // 获取学生信息 virtual void getInfo() { cout << "姓名:" << name << endl; cout << "性别:" << gender << endl; cout << "年龄:" << age << endl; cout << "地址:" << address << endl; } }; // 成绩类 class Score { protected: vector<int> scores; // 各科成绩 public: Score() {} // 添加成绩 void addScore(int score) { scores.push_back(score); } // 获取成绩总分 int getTotalScore() { int totalScore = 0; for (int i = 0; i < scores.size(); i++) { totalScore += scores[i]; } return totalScore; } // 获取平均成绩 float getAverageScore() { int totalScore = getTotalScore(); return (float)totalScore / scores.size(); } // 获取各科成绩 virtual void getScores() { cout << "各科成绩:"; for (int i = 0; i < scores.size(); i++) { cout << scores[i] << " "; } cout << endl; } }; // 学生成绩类 class StudentScore : public Student, public Score { private: int id; // 学号 string nation; // 民族 public: StudentScore(string name_, string gender_, int age_, string address_, int id_, string nation_) : Student(name_, gender_, age_, address_), id(id_), nation(nation_) {} // 获取学生信息和成绩 void getInfo() override { Student::getInfo(); cout << "学号:" << id << endl; cout << "民族:" << nation << endl; getScores(); } // 获取各科成绩 void getScores() override { Score::getScores(); } }; // 学生管理类 class StudentManager { private: vector<StudentScore> students; // 学生列表 public: // 添加学生 void addStudent(StudentScore student) { students.push_back(student); } // 删除学生 void deleteStudent(int id) { for (vector<StudentScore>::iterator it = students.begin(); it != students.end(); it++) { if (it->id == id) { students.erase(it); break; } } } // 修改学生信息 void modifyStudent(int id, string name, string gender, int age, string address, string nation) { for (vector<StudentScore>::iterator it = students.begin(); it != students.end(); it++) { if (it->id == id) { it->name = name; it->gender = gender; it->age = age; it->address = address; it->nation = nation; break; } } } // 按学号查询学生 StudentScore* queryStudent(int id) { for (vector<StudentScore>::iterator it = students.begin(); it != students.end(); it++) { if (it->id == id) { return &(*it); } } return NULL; } // 按姓名查询学生 vector<StudentScore*> queryStudent(string name) { vector<StudentScore*> result; for (vector<StudentScore>::iterator it = students.begin(); it != students.end(); it++) { if (it->name == name) { result.push_back(&(*it)); } } return result; } // 输出所有学生信息 void printAllStudents() { for (vector<StudentScore>::iterator it = students.begin(); it != students.end(); it++) { it->getInfo(); cout << endl; } } }; int main() { // 创建学生管理类 StudentManager studentManager; // 添加学生 StudentScore student1("张三", "男", 18, "北京市海淀区", 1001, "汉族"); student1.addScore(80); student1.addScore(90); student1.addScore(85); studentManager.addStudent(student1); StudentScore student2("李四", "女", 19, "北京市朝阳区", 1002, "满族"); student2.addScore(85); student2.addScore(95); student2.addScore(90); studentManager.addStudent(student2); StudentScore student3("王五", "男", 20, "北京市丰台区", 1003, "回族"); student3.addScore(90); student3.addScore(85); student3.addScore(95); studentManager.addStudent(student3); // 输出所有学生信息 studentManager.printAllStudents(); // 修改学生信息 studentManager.modifyStudent(1002, "赵六", "男", 19, "北京市海淀区", "朝鲜族"); // 输出所有学生信息 studentManager.printAllStudents(); // 按学号查询学生 StudentScore* student4 = studentManager.queryStudent(1003); if (student4 != NULL) { student4->getInfo(); } else { cout << "未找到该学生" << endl; } // 按姓名查询学生 vector<StudentScore*> student5 = studentManager.queryStudent("赵六"); if (student5.size() > 0) { for (vector<StudentScore*>::iterator it = student5.begin(); it != student5.end(); it++) { (*it)->getInfo(); } } else { cout << "未找到该学生" << endl; } // 删除学生 studentManager.deleteStudent(1002); // 输出所有学生信息 studentManager.printAllStudents(); return 0; } ``` 其中,Student类用于封装学生的基本信息,Score类用于封装学生的成绩信息,StudentScore类继承了Student和Score类,实现了多态,即可以输出学生的基本信息和成绩信息。StudentManager类用于管理所有学生,实现了添加、删除、修改、查询等功能。在代码中,用注释指明了哪里使用了封装、继承和多态机制。

相关推荐

最新推荐

recommend-type

C++ 学生成绩管理系统设计报告书

内含4个类,各自具有其属性和行为。 基本实现了: (1)学生基本信息、考试科目及成绩的信息录入。 (2)已有学生信息的显示。 (3)学生基本信息的读取和保存输入数据等功能 (4)学生基本信息的查询与修改。可以对已有的...
recommend-type

学生成绩管理系统实验报告.doc

学生成绩管理系统,功能分为: (1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:...
recommend-type

grpcio-1.47.0-cp310-cp310-linux_armv7l.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

小程序项目源码-美容预约小程序.zip

小程序项目源码-美容预约小程序小程序项目源码-美容预约小程序小程序项目源码-美容预约小程序小程序项目源码-美容预约小程序小程序项目源码-美容预约小程序小程序项目源码-美容预约小程序小程序项目源码-美容预约小程序小程序项目源码-美容预约小程序v
recommend-type

MobaXterm 工具

MobaXterm 工具
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB取整函数与Web开发的作用:round、fix、floor、ceil在Web开发中的应用

![MATLAB取整函数与Web开发的作用:round、fix、floor、ceil在Web开发中的应用](https://img-blog.csdnimg.cn/2020050917173284.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thbmdqaWVsZWFybmluZw==,size_16,color_FFFFFF,t_70) # 1. MATLAB取整函数概述** MATLAB取整函数是一组强大的工具,用于对数值进行
recommend-type

我想做python的算法工程师,我应该学什么?学习的顺序是什么?网上有什么推荐的免费课程吗?回答具体精确一点不要太笼统

对于想要成为 Python 算法工程师的人来说,他们应该先从掌握 Python 的基础语法开始,然后学习数据结构和算法,并且要深入了解 Python 中的一些科学计算和数据处理库,比如 NumPy、Pandas 等。 学习的顺序可以是先学习基础语法和编程技巧,然后再学习数据结构和算法相关的知识,最后深入了解数据处理和科学计算相关的库。 对于免费课程的推荐,我建议你可以先去 Coursera、edX、Udacity 等网站上寻找相关课程,这些网站上有很多优质的 Python 编程和算法课程,你可以根据自己的需求和学习进度进行选择。此外,还可以考虑一些在线编程网站,如 HackerRank、L
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。