写一个程序,设学生信息包括:学号、姓名、期末成绩、平时成绩,对学生的学习成绩信息进行管理。 设计要求: 实现学生信息的录入、修改、插入、删除、查询、计算总评成绩、根据总评程序排序和划分等级、按学号查询学生成绩等。 (1)从文件输入学生的成绩信息,包含学号、姓名、期末成绩和平时成绩; (2)显示全部学生成绩信息; (3)更新某个学生的基本信息或课程成绩; (4)对成绩统计分析(总分、平均分、最高分、最低分、及格率等);(5)学号查找并显示某个学生的成绩;(6)按姓名查找并显示某个学生的成绩;(7)按总评成绩由高到低排序显示;(8)统计各分数段人数并显示; (9)设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。(在devc++中,全部功能在一个程序中实现)
时间: 2023-12-19 16:07:04 浏览: 151
好的,下面是一个示例程序,实现了您所需的功能:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iomanip>
#include <vector>
using namespace std;
// 学生信息结构体
struct Student {
string id; // 学号
string name; // 姓名
double finalScore; // 期末成绩
double dailyScore; // 平时成绩
double totalScore; // 总评成绩
};
// 学生信息管理类
class StudentManager {
public:
// 从文件中读取学生信息
void readFromFile(string fileName) {
ifstream fin(fileName);
if (!fin) {
cout << "无法打开文件 " << fileName << endl;
return;
}
while (!fin.eof()) {
Student stu;
fin >> stu.id >> stu.name >> stu.finalScore >> stu.dailyScore;
if (!fin.fail()) {
students.push_back(stu);
}
}
fin.close();
}
// 显示全部学生信息
void displayAll() {
if (students.empty()) {
cout << "没有学生信息" << endl;
return;
}
cout << "学号\t姓名\t期末成绩\t平时成绩\t总评成绩" << endl;
for (const auto& stu : students) {
cout << stu.id << "\t" << stu.name << "\t"
<< stu.finalScore << "\t\t" << stu.dailyScore << "\t\t"
<< stu.totalScore << endl;
}
}
// 更新学生信息
void update(const string& id) {
auto it = find_if(students.begin(), students.end(), [&](const Student& stu) {
return stu.id == id;
});
if (it == students.end()) {
cout << "找不到学号为 " << id << " 的学生" << endl;
return;
}
cout << "请输入学号、姓名、期末成绩、平时成绩:" << endl;
cin >> it->id >> it->name >> it->finalScore >> it->dailyScore;
it->totalScore = calcTotalScore(*it);
cout << "修改成功" << endl;
}
// 插入学生信息
void insert() {
Student stu;
cout << "请输入学号、姓名、期末成绩、平时成绩:" << endl;
cin >> stu.id >> stu.name >> stu.finalScore >> stu.dailyScore;
stu.totalScore = calcTotalScore(stu);
students.push_back(stu);
cout << "插入成功" << endl;
}
// 删除学生信息
void remove(const string& id) {
auto it = find_if(students.begin(), students.end(), [&](const Student& stu) {
return stu.id == id;
});
if (it == students.end()) {
cout << "找不到学号为 " << id << " 的学生" << endl;
return;
}
students.erase(it);
cout << "删除成功" << endl;
}
// 按学号查找学生信息
void findByID(const string& id) {
auto it = find_if(students.begin(), students.end(), [&](const Student& stu) {
return stu.id == id;
});
if (it == students.end()) {
cout << "找不到学号为 " << id << " 的学生" << endl;
return;
}
cout << "学号\t姓名\t期末成绩\t平时成绩\t总评成绩" << endl;
cout << it->id << "\t" << it->name << "\t"
<< it->finalScore << "\t\t" << it->dailyScore << "\t\t"
<< it->totalScore << endl;
}
// 按姓名查找学生信息
void findByName(const string& name) {
vector<Student> result;
for (const auto& stu : students) {
if (stu.name == name) {
result.push_back(stu);
}
}
if (result.empty()) {
cout << "找不到姓名为 " << name << " 的学生" << endl;
return;
}
cout << "学号\t姓名\t期末成绩\t平时成绩\t总评成绩" << endl;
for (const auto& stu : result) {
cout << stu.id << "\t" << stu.name << "\t"
<< stu.finalScore << "\t\t" << stu.dailyScore << "\t\t"
<< stu.totalScore << endl;
}
}
// 根据总评成绩排序并显示
void sortByTotalScore() {
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.totalScore > b.totalScore;
});
displayAll();
}
// 统计各分数段人数并显示
void countByScoreRange() {
int A = 0, B = 0, C = 0, D = 0, E = 0;
for (const auto& stu : students) {
if (stu.totalScore >= 90) {
++A;
} else if (stu.totalScore >= 80) {
++B;
} else if (stu.totalScore >= 70) {
++C;
} else if (stu.totalScore >= 60) {
++D;
} else {
++E;
}
}
cout << "A: " << A << endl;
cout << "B: " << B << endl;
cout << "C: " << C << endl;
cout << "D: " << D << endl;
cout << "E: " << E << endl;
}
// 显示菜单
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 << "0. 退出系统" << endl;
}
// 运行学生信息管理系统
void run() {
string fileName = "students.txt";
readFromFile(fileName);
while (true) {
showMenu();
int choice;
cin >> choice;
switch (choice) {
case 0:
cout << "退出系统" << endl;
return;
case 1:
displayAll();
break;
case 2:
cout << "请输入要更新的学生的学号:" << endl;
{
string id;
cin >> id;
update(id);
}
break;
case 3:
insert();
break;
case 4:
cout << "请输入要删除的学生的学号:" << endl;
{
string id;
cin >> id;
remove(id);
}
break;
case 5:
cout << "请输入要查找的学生的学号:" << endl;
{
string id;
cin >> id;
findByID(id);
}
break;
case 6:
cout << "请输入要查找的学生的姓名:" << endl;
{
string name;
cin >> name;
findByName(name);
}
break;
case 7:
sortByTotalScore();
break;
case 8:
countByScoreRange();
break;
default:
cout << "无效的选项" << endl;
break;
}
}
}
private:
vector<Student> students; // 学生信息数组
// 计算学生的总评成绩
double calcTotalScore(const Student& stu) {
return stu.finalScore * 0.6 + stu.dailyScore * 0.4;
}
};
int main() {
StudentManager manager;
manager.run();
return 0;
}
```
这个程序使用了类和 STL 容器,能够完成您所需的所有功能。在程序中,我们定义了一个 `Student` 结构体来表示学生的信息,定义了一个 `StudentManager` 类来管理学生信息,实现了从文件中读取学生信息、显示全部学生信息、更新、插入、删除、按学号和姓名查找学生信息、根据总评成绩排序和划分等级、统计各分数段人数等功能,并设计了一个菜单来让用户选择操作。
阅读全文