用c++来编写一个 对一个有N个学生(至少10人)的班级,每个学生有M门门(至少3门) 课程实现班级成绩管理;包括对成绩的录入、显示、修改、排序、保存等操作。功能要求: 1系统以菜单方式工作; (2)管理员可以初始化班级N个学生的信息,包括学号、姓名、专业、年级和班级; (3)管理员可以初始化M门课程的信息,包括课程编号、课程名称、学分。 (4)教师可以录入某门课程的学生成绩信息,查看课程的班级成绩详细信息,班级的成绩统计信息:平均分,及格人数,百分比,不及格人数,百分比信息(5)学生可以查看自己的课程成绩。提示:本题目可根据实际情况设计结构体和文件存储
时间: 2024-03-21 11:44:04 浏览: 28
好的,这个问题需要实现一个班级成绩管理系统,包括录入、显示、修改、排序、保存等操作。以下是一个基于C++语言的实现示例:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 10; // 班级人数
const int M = 3; // 课程数量
// 学生信息结构体
struct StudentInfo {
int id; // 学号
string name; // 姓名
string major; // 专业
int grade; // 年级
int cls; // 班级
vector<int> score; // 成绩
StudentInfo() {
score.resize(M);
}
};
// 课程信息结构体
struct CourseInfo {
int id; // 课程编号
string name; // 课程名称
int credit; // 学分
};
vector<StudentInfo> students(N); // 学生信息数组
vector<CourseInfo> courses(M); // 课程信息数组
void initStudents() {
cout << "请输入学生信息:学号,姓名,专业,年级,班级" << endl;
for (int i = 0; i < N; i++) {
cin >> students[i].id >> students[i].name >> students[i].major >> students[i].grade >> students[i].cls;
}
}
void initCourses() {
cout << "请输入课程信息:课程编号,课程名称,学分" << endl;
for (int i = 0; i < M; i++) {
cin >> courses[i].id >> courses[i].name >> courses[i].credit;
}
}
void inputScore() {
int course_id;
cout << "请输入要录入成绩的课程编号:" << endl;
cin >> course_id;
auto iter = find_if(courses.begin(), courses.end(), [course_id](const CourseInfo& course) {
return course.id == course_id;
});
if (iter == courses.end()) {
cout << "不存在该课程" << endl;
return;
}
cout << "请输入课程编号为 " << course_id << " 的学生成绩:" << endl;
for (int i = 0; i < N; i++) {
cin >> students[i].score[course_id - 1];
}
cout << "录入成功" << endl;
}
void showScore() {
int course_id;
cout << "请输入要查看成绩的课程编号:" << endl;
cin >> course_id;
auto iter = find_if(courses.begin(), courses.end(), [course_id](const CourseInfo& course) {
return course.id == course_id;
});
if (iter == courses.end()) {
cout << "不存在该课程" << endl;
return;
}
cout << "课程编号:" << iter->id << ",课程名称:" << iter->name << ",学分:" << iter->credit << endl;
cout << "学号\t姓名\t成绩" << endl;
for (int i = 0; i < N; i++) {
cout << students[i].id << '\t' << students[i].name << '\t' << students[i].score[course_id - 1] << endl;
}
}
void showScoreStats() {
int course_id;
cout << "请输入要查看成绩统计信息的课程编号:" << endl;
cin >> course_id;
auto iter = find_if(courses.begin(), courses.end(), [course_id](const CourseInfo& course) {
return course.id == course_id;
});
if (iter == courses.end()) {
cout << "不存在该课程" << endl;
return;
}
int pass_count = 0, fail_count = 0;
double total_score = 0;
for (int i = 0; i < N; i++) {
if (students[i].score[course_id - 1] >= 60) {
pass_count++;
} else {
fail_count++;
}
total_score += students[i].score[course_id - 1];
}
double pass_rate = double(pass_count) / N;
double fail_rate = double(fail_count) / N;
double avg_score = total_score / N;
cout << "课程编号:" << iter->id << ",课程名称:" << iter->name << ",学分:" << iter->credit << endl;
cout << "平均分:" << avg_score << ",及格人数:" << pass_count << ",及格率:" << pass_rate
<< ",不及格人数:" << fail_count << ",不及格率:" << fail_rate << endl;
}
void saveScore() {
ofstream out("score.txt");
out << "学号\t姓名\t专业\t年级\t班级\t";
for (int i = 0; i < M; i++) {
out << courses[i].name << '\t';
}
out << endl;
for (int i = 0; i < N; i++) {
out << students[i].id << '\t' << students[i].name << '\t' << students[i].major << '\t' << students[i].grade << '\t' << students[i].cls << '\t';
for (int j = 0; j < M; j++) {
out << students[i].score[j] << '\t';
}
out << endl;
}
cout << "保存成功" << endl;
}
void loadScore() {
ifstream in("score.txt");
if (!in.is_open()) {
cout << "无法打开文件" << endl;
return;
}
string line;
getline(in, line); // 读取表头
for (int i = 0; i < N; i++) {
in >> students[i].id >> students[i].name >> students[i].major >> students[i].grade >> students[i].cls;
for (int j = 0; j < M; j++) {
in >> students[i].score[j];
}
}
cout << "载入成功" << endl;
}
void showMenu() {
cout << "1. 初始化学生信息" << endl;
cout << "2. 初始化课程信息" << endl;
cout << "3. 录入成绩" << endl;
cout << "4. 查看课程成绩" << endl;
cout << "5. 查看课程成绩统计信息" << endl;
cout << "6. 保存成绩到文件" << endl;
cout << "7. 从文件中载入成绩" << endl;
cout << "0. 退出" << endl;
}
int main() {
while (true) {
showMenu();
int choice;
cin >> choice;
switch (choice) {
case 1:
initStudents();
break;
case 2:
initCourses();
break;
case 3:
inputScore();
break;
case 4:
showScore();
break;
case 5:
showScoreStats();
break;
case 6:
saveScore();
break;
case 7:
loadScore();
break;
case 0:
return 0;
default:
cout << "无效的选择" << endl;
break;
}
}
}
```
这个程序定义了两个结构体 `StudentInfo` 和 `CourseInfo` 来存储学生和课程的信息,然后通过不同的函数实现录入、显示、修改、排序、保存等操作。
学生的信息和成绩使用一个 `vector<int>` 来存储,方便进行成绩的录入和统计。同时,通过 `find_if` 函数来查找指定的课程信息。
保存成绩使用了文件存储,通过 `ofstream` 类来写入文件,载入成绩则使用了 `ifstream` 类来读取文件。在保存和载入时,使用了一个表头来方便查看和解析文件。
这个程序实现了基本的班级成绩管理功能,可以通过菜单方式进行操作。