要求用 C++语言设计程序,设计实现学生成绩管理系统的应用程序,程序具 体要求如下:1、 输入学号和科目名称(如语文、数学等)查询所有同学该科门科目的平 均成绩以及该生该门科目的排名。 2、 输入学号,输出所有同学根据总成绩的排名,并输出该学号的排名。 3、 输入学号、科目名称、修改的成绩分数对成绩单中成绩进行修改。 4、程序在最开始可以选择想执行的业务选项。

时间: 2023-12-16 18:03:35 浏览: 23
好的,我可以帮您设计实现这个学生成绩管理系统的应用程序。 首先,我们需要设计数据结构来存储学生的成绩信息,可以使用一个结构体来表示每个学生和他们的成绩信息: ```cpp struct Student { string id; // 学号 string name; // 姓名 double scores[NUM_SUBJECTS]; // 成绩数组,包含 NUM_SUBJECTS 个科目的成绩 double total_score; // 总成绩 int rank; // 总成绩排名 int subject_rank[NUM_SUBJECTS]; // 每个科目的排名 }; ``` 其中,`NUM_SUBJECTS` 表示科目数量,可以在程序开始时预先定义好。 接下来,我们需要设计数据结构来存储所有学生的信息,可以使用一个动态数组来存储所有学生的结构体: ```cpp vector<Student> students; ``` 在程序运行时,我们需要从文件或数据库中读取学生信息并存储到这个数组中。 接下来,我们可以实现具体的功能: 1. 查询同学科目平均成绩和排名 ```cpp void query_subject_scores() { string id, subject_name; cout << "请输入学号和科目名称(以空格分隔):" << endl; cin >> id >> subject_name; int subject_index = get_subject_index(subject_name); if (subject_index == -1) { // 没有这个科目 cout << "没有找到该科目!" << endl; return; } double sum_scores = 0; int count = 0; for (int i = 0; i < students.size(); i++) { if (students[i].scores[subject_index] >= 0) { // 有成绩 sum_scores += students[i].scores[subject_index]; count++; } } double average_score = sum_scores / count; // 计算学生排名 for (int i = 0; i < students.size(); i++) { if (students[i].scores[subject_index] >= 0) { // 有成绩 students[i].subject_rank[subject_index] = 1; for (int j = 0; j < students.size(); j++) { if (students[j].scores[subject_index] >= 0 && students[j].total_score > students[i].total_score) { students[i].subject_rank[subject_index]++; } } } else { // 没有成绩 students[i].subject_rank[subject_index] = -1; } } // 输出结果 cout << "该科目平均成绩为:" << average_score << endl; for (int i = 0; i < students.size(); i++) { if (students[i].id == id) { cout << "该生排名为:" << students[i].subject_rank[subject_index] << endl; break; } } } ``` 2. 查询同学总成绩排名 ```cpp void query_total_scores() { string id; cout << "请输入学号:" << endl; cin >> id; // 计算学生总成绩 for (int i = 0; i < students.size(); i++) { double total_score = 0; for (int j = 0; j < NUM_SUBJECTS; j++) { if (students[i].scores[j] >= 0) { // 有成绩 total_score += students[i].scores[j]; } } students[i].total_score = total_score; } // 计算学生排名 for (int i = 0; i < students.size(); i++) { students[i].rank = 1; for (int j = 0; j < students.size(); j++) { if (students[j].total_score > students[i].total_score) { students[i].rank++; } } } // 输出结果 for (int i = 0; i < students.size(); i++) { if (students[i].id == id) { cout << "该生排名为:" << students[i].rank << endl; break; } } // 按总成绩排序输出所有学生 sort(students.begin(), students.end(), [](const Student& s1, const Student& s2) { return s1.total_score > s2.total_score; }); cout << "学号\t姓名\t总成绩\t排名" << endl; for (int i = 0; i < students.size(); i++) { cout << students[i].id << "\t" << students[i].name << "\t" << students[i].total_score << "\t" << students[i].rank << endl; } } ``` 3. 修改成绩 ```cpp void modify_score() { string id, subject_name; double new_score; cout << "请输入学号、科目名称和新的成绩(以空格分隔):" << endl; cin >> id >> subject_name >> new_score; int subject_index = get_subject_index(subject_name); if (subject_index == -1) { // 没有这个科目 cout << "没有找到该科目!" << endl; return; } // 修改成绩 for (int i = 0; i < students.size(); i++) { if (students[i].id == id) { students[i].scores[subject_index] = new_score; break; } } } ``` 4. 程序入口 ```cpp void print_menu() { cout << "请选择要执行的业务:" << endl; cout << "1. 查询同学科目平均成绩和排名" << endl; cout << "2. 查询同学总成绩排名" << endl; cout << "3. 修改成绩" << endl; cout << "4. 退出程序" << endl; } int main() { // 初始化学生信息 while (true) { print_menu(); int choice; cin >> choice; switch (choice) { case 1: query_subject_scores(); break; case 2: query_total_scores(); break; case 3: modify_score(); break; case 4: return 0; default: cout << "请选择正确的业务选项!" << endl; break; } } } ``` 其中,`get_subject_index` 函数可以用来获取某个科目在成绩数组中的下标: ```cpp int get_subject_index(const string& subject_name) { for (int i = 0; i < NUM_SUBJECTS; i++) { if (subject_name == SUBJECT_NAMES[i]) { return i; } } return -1; // 没有找到该科目 } ``` 完整代码如下:

相关推荐

最新推荐

recommend-type

C++实现学生学习成绩管理程序

该系统实现对若干个大学生的学习成绩进行管理。至少包括以下信息: 学号、姓名、科目、成绩,学期。学期取值范围可为1-8。 功能要求: 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

grpcio-1.48.0-cp37-cp37m-linux_armv7l.whl

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

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

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