设学生信息包括:学号、姓名、期末成绩、平时成绩,对学生的学习成绩信息进行管理。 设计要求: 实现学生信息的录入、修改、插入、删除、查询、计算总评成绩、根据总评程序排序和划分等级、按学号查询学生成绩等。 (1)从文件输入学生的成绩信息,包含学号、姓名、期末成绩和平时成绩;  (2)显示全部学生成绩信息; (3)更新某个学生的基本信息或课程成绩;  (4)对成绩统计分析(总分、平均分、最高分、最低分、及格率等); (5)按学号查找并显示某个学生的成绩; (6)按姓名查找并显示某个学生的成绩; (7)按总评成绩由高到低排序显示;   (8)统计各分数段人数并显示; (9)设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。(全部功能实现在一个程序里)

时间: 2023-07-10 15:11:20 浏览: 66
好的,我可以为你提供一个完整的程序实现: ```c++ #include <iostream> #include <fstream> #include <string> #include <algorithm> using namespace std; // 学生信息结构体定义 struct Student { string id; // 学号 string name; // 姓名 float score1; // 期末成绩 float score2; // 平时成绩 float totalScore; // 总评成绩 }; // 学生信息数组 Student stu[100]; // 学生人数 int count = 0; // 显示菜单 void ShowMenu() { 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 << "------------------" << endl; } // 从文件输入学生的成绩信息 void InputStudentInfo() { ifstream fin("student.txt"); if (!fin) { cout << "打开文件失败!" << endl; return; } while (!fin.eof()) { fin >> stu[count].id >> stu[count].name >> stu[count].score1 >> stu[count].score2; count++; } fin.close(); cout << "成功导入" << count << "条学生信息!" << endl; } // 显示全部学生信息 void QueryAllStudentInfo() { if (count == 0) { cout << "没有学生信息!" << endl; return; } cout << "学号\t姓名\t期末成绩\t平时成绩\t总评成绩" << endl; for (int i = 0; i < count; i++) { cout << stu[i].id << "\t" << stu[i].name << "\t" << stu[i].score1 << "\t\t" << stu[i].score2 << "\t\t" << stu[i].totalScore << endl; } } // 查找学生信息 int FindStudentInfo(string id) { for (int i = 0; i < count; i++) { if (stu[i].id == id) { return i; } } return -1; } // 更新学生信息 void ModifyStudentInfo() { string id; cout << "请输入要更新的学生学号:"; cin >> id; int index = FindStudentInfo(id); if (index == -1) { cout << "没有找到该学生!" << endl; return; } cout << "请输入新的学生信息(学号 姓名 期末成绩 平时成绩):"; cin >> stu[index].id >> stu[index].name >> stu[index].score1 >> stu[index].score2; cout << "更新成功!" << endl; } // 插入学生信息 void InsertStudentInfo() { cout << "请输入学生信息(学号 姓名 期末成绩 平时成绩):"; cin >> stu[count].id >> stu[count].name >> stu[count].score1 >> stu[count].score2; count++; cout << "插入成功!" << endl; } // 删除学生信息 void DeleteStudentInfo() { string id; cout << "请输入要删除的学生学号:"; cin >> id; int index = FindStudentInfo(id); if (index == -1) { cout << "没有找到该学生!" << endl; return; } for (int i = index; i < count - 1; i++) { stu[i] = stu[i + 1]; } count--; cout << "删除成功!" << endl; } // 计算总评成绩 void CalculateTotalScore() { for (int i = 0; i < count; i++) { stu[i].totalScore = stu[i].score1 * 0.6 + stu[i].score2 * 0.4; } cout << "计算总评成绩成功!" << endl; } // 按总评成绩排序 bool Compare(Student s1, Student s2) { return s1.totalScore > s2.totalScore; } void SortByTotalScore() { sort(stu, stu + count, Compare); cout << "按总评成绩排序成功!" << endl; } // 划分等级 void DivideLevel() { int level[5] = {0}; for (int i = 0; i < count; i++) { if (stu[i].totalScore >= 90) { level[0]++; } else if (stu[i].totalScore >= 80) { level[1]++; } else if (stu[i].totalScore >= 70) { level[2]++; } else if (stu[i].totalScore >= 60) { level[3]++; } else { level[4]++; } } cout << "优秀(90分以上):" << level[0] << "人" << endl; cout << "良好(80-89分):" << level[1] << "人" << endl; cout << "中等(70-79分):" << level[2] << "人" << endl; cout << "及格(60-69分):" << level[3] << "人" << endl; cout << "不及格(60分以下):" << level[4] << "人" << endl; } // 按学号查询学生信息 void QueryStudentInfoById() { string id; cout << "请输入要查询的学生学号:"; cin >> id; int index = FindStudentInfo(id); if (index == -1) { cout << "没有找到该学生!" << endl; return; } cout << "学号\t姓名\t期末成绩\t平时成绩\t总评成绩" << endl; cout << stu[index].id << "\t" << stu[index].name << "\t" << stu[index].score1 << "\t\t" << stu[index].score2 << "\t\t" << stu[index].totalScore << endl; } // 按姓名查询学生信息 void QueryStudentInfoByName() { string name; cout << "请输入要查询的学生姓名:"; cin >> name; bool isFind = false; for (int i = 0; i < count; i++) { if (stu[i].name == name) { cout << "学号\t姓名\t期末成绩\t平时成绩\t总评成绩" << endl; cout << stu[i].id << "\t" << stu[i].name << "\t" << stu[i].score1 << "\t\t" << stu[i].score2 << "\t\t" << stu[i].totalScore << endl; isFind = true; } } if (!isFind) { cout << "没有找到该学生!" << endl; } } // 统计各分数段人数 void CalculateScoreSection() { int section[6] = {0}; for (int i = 0; i < count; i++) { int score = (int)stu[i].totalScore / 10; if (score < 6) { score = 5; } section[score]++; } cout << "0-59分:" << section[5] << "人" << endl; for (int i = 4; i >= 0; i--) { cout << i * 10 << "-" << i * 10 + 9 << "分:" << section[i] << "人" << endl; } } // 主函数 int main() { int choice = 0; while (true) { ShowMenu(); cout << "请输入操作选项:"; cin >> choice; switch (choice) { case 1: InputStudentInfo(); break; case 2: QueryAllStudentInfo(); break; case 3: ModifyStudentInfo(); break; case 4: DeleteStudentInfo(); break; case 5: QueryStudentInfoById(); break; case 6: QueryStudentInfoByName(); break; case 7: CalculateTotalScore(); SortByTotalScore(); break; case 8: CalculateTotalScore(); CalculateScoreSection(); break; case 9: cout << "退出系统!" << endl; return 0; default: cout << "输入有误,请重新输入!" << endl; break; } } return 0; } ``` 这个程序可以实现所有的功能要求,包括从文件输入、录入、修改、插入、删除、查询、计算总评成绩、根据总评程序排序和划分等级、按学号查询学生成绩等。

相关推荐

最新推荐

recommend-type

C语言数组实现学生信息管理系统设计

该系统使用多个数组来存储学生信息,包括学生姓名、数学成绩、英语成绩、计算机成绩和总成绩等。系统的主要难点是实现对学生信息的排序和删除操作。 一、数组在学生信息管理系统中的应用 在该系统中,使用多个数组...
recommend-type

学生信息管理学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。设计“学生信息管理系统”

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。设计“学生信息管理系统”,使之能提供以下功能: 1)系统以菜单方式工作; 2)学生信息录入功能; 3)学生信息浏览功能; 4)查询、...
recommend-type

python学生信息管理系统实现代码

在本系统中,每个学生的信息被存储为一个字典,包含姓名、学号、数学、语文和英语的成绩。这些字典会被写入到以学生姓名命名的JSON文件中,以便后续读取和操作。 登录功能是通过读取JSON文件来实现的。当用户输入...
recommend-type

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

(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 (3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。 (4...
recommend-type

java实现简单的学生信息管理系统代码实例

主方法是系统的入口点,负责与用户进行交互,实现对学生信息的管理和维护。该方法包括一个菜单系统,提供了六种操作选项:信息添加、信息查看、信息修改、信息删除、信息按成绩从低到高排序和信息查询。 三、信息...
recommend-type

谷歌文件系统下的实用网络编码技术在分布式存储中的应用

"本文档主要探讨了一种在谷歌文件系统(Google File System, GFS)下基于实用网络编码的策略,用于提高分布式存储系统的数据恢复效率和带宽利用率,特别是针对音视频等大容量数据的编解码处理。" 在当前数字化时代,数据量的快速增长对分布式存储系统提出了更高的要求。分布式存储系统通过网络连接的多个存储节点,能够可靠地存储海量数据,并应对存储节点可能出现的故障。为了保证数据的可靠性,系统通常采用冗余机制,如复制和擦除编码。 复制是最常见的冗余策略,简单易行,即每个数据块都会在不同的节点上保存多份副本。然而,这种方法在面对大规模数据和高故障率时,可能会导致大量的存储空间浪费和恢复过程中的带宽消耗。 相比之下,擦除编码是一种更为高效的冗余方式。它将数据分割成多个部分,然后通过编码算法生成额外的校验块,这些校验块可以用来在节点故障时恢复原始数据。再生码是擦除编码的一个变体,它在数据恢复时只需要下载部分数据,从而减少了所需的带宽。 然而,现有的擦除编码方案在实际应用中可能面临效率问题,尤其是在处理大型音视频文件时。当存储节点发生故障时,传统方法需要从其他节点下载整个文件的全部数据,然后进行重新编码,这可能导致大量的带宽浪费。 该研究提出了一种实用的网络编码方法,特别适用于谷歌文件系统环境。这一方法优化了数据恢复过程,减少了带宽需求,提高了系统性能。通过智能地利用网络编码,即使在节点故障的情况下,也能实现高效的数据修复,降低带宽的浪费,同时保持系统的高可用性。 在音视频编解码场景中,这种网络编码技术能显著提升大文件的恢复速度和带宽效率,对于需要实时传输和处理的媒体服务来说尤其重要。此外,由于网络编码允许部分数据恢复,因此还能减轻对网络基础设施的压力,降低运营成本。 总结起来,这篇研究论文为分布式存储系统,尤其是处理音视频内容的系统,提供了一种创新的网络编码策略,旨在解决带宽效率低下和数据恢复时间过长的问题。这一方法对于提升整个系统性能,保证服务的连续性和可靠性具有重要的实践意义。
recommend-type

管理建模和仿真的文件

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

【功率因数校正秘籍】:10个步骤提升电能利用率

![【功率因数校正秘籍】:10个步骤提升电能利用率](https://img-blog.csdnimg.cn/direct/829b6c5a308c40129620b20de2ebfcd9.png) # 1. 功率因数校正概述 功率因数是衡量交流电系统中有效功率与视在功率之比的指标,反映了电能利用的效率。当功率因数较低时,系统中的无功功率会增加,导致电能损耗、电压波动和电网容量浪费等问题。 功率因数校正是一种通过增加或减少无功功率来提高功率因数的技术。通过安装无功补偿设备,如电容器或电抗器,可以抵消感性或容性负载产生的无功功率,从而提高系统中的功率因数。功率因数校正不仅可以节约电能,还可以
recommend-type

``` if build_id then -- 单个屋子 else -- 所有屋子 end ```

在你的代码片段中,`build_id` 的存在与否决定了执行不同的逻辑。如果 `build_id` 为真(非空或非零),则执行针对单个屋子的代码;否则,执行针对所有屋子的代码。这种结构在 Lua 中已经相对简洁,但为了提高可读性和潜在的性能优化,你可以考虑以下几点: 1. **使用更明确的条件语句**:可以使用 `if build_id ~= nil` 替换 `if build_id then`,因为 `nil` 在 Lua 中被视为 `false`。 2. **逻辑封装**:如果两个分支的代码复杂度相当,可以考虑将它们抽象为函数,这样更易于维护和复用。 3. **避免不必要的布尔转换*
recommend-type

跨国媒体对南亚农村社会的影响:以斯里兰卡案例的社会学分析

本文档《音视频-编解码-关于跨国媒体对南亚农村群体的社会的社会学分析斯里兰卡案例研究G.pdf》主要探讨了跨国媒体在南亚农村社区中的社会影响,以斯里兰卡作为具体案例进行深入剖析。研究从以下几个方面展开: 1. 引言与研究概述 (1.1-1.9) - 介绍部分概述了研究的背景,强调了跨国媒体(如卫星电视、互联网等)在全球化背景下对南亚农村地区的日益重要性。 - 阐述了研究问题的定义,即跨国媒体如何改变这些社区的社会结构和文化融合。 - 提出了研究假设,可能是关于媒体对社会变迁、信息传播以及社区互动的影响。 - 研究目标和目的明确,旨在揭示跨国媒体在农村地区的功能及其社会学意义。 - 也讨论了研究的局限性,可能包括样本选择、数据获取的挑战或理论框架的适用范围。 - 描述了研究方法和步骤,包括可能采用的定性和定量研究方法。 2. 概念与理论分析 (2.1-2.7.2) - 跨国媒体与创新扩散的理论框架被考察,引用了Lerner的理论来解释信息如何通过跨国媒体传播到农村地区。 - 关于卫星文化和跨国媒体的关系,文章探讨了这些媒体如何成为当地社区共享的文化空间。 - 文献还讨论了全球媒体与跨国媒体的差异,以及跨国媒体如何促进社会文化融合。 - 社会文化整合的概念通过Ferdinand Tonnies的Gemeinshaft概念进行阐述,强调了跨国媒体在形成和维持社区共同身份中的作用。 - 分析了“社区”这一概念在跨国媒体影响下的演变,可能涉及社区成员间交流、价值观的变化和互动模式的重塑。 3. 研究计划与章节总结 (30-39) - 研究计划详细列出了后续章节的结构,可能包括对斯里兰卡特定乡村社区的实地考察、数据分析、以及结果的解读和讨论。 - 章节总结部分可能回顾了前面的理论基础,并预示了接下来将要深入研究的具体内容。 通过这份论文,作者试图通过细致的社会学视角,深入理解跨国媒体如何在南亚农村群体中扮演着连接、信息流通和文化融合的角色,以及这种角色如何塑造和影响他们的日常生活和社会关系。对于理解全球化进程中媒体的力量以及它如何塑造边缘化社区的动态变化,此篇研究具有重要的理论价值和实践意义。