编写一个 对一个有N个学生(至少10人)的班级,每个学生有M门门(至少3门) 课程实现班级成绩管理;包括对成绩的录入、显示、修改、排序、保存等操作。功能要求: 1系统以菜单方式工作; (2)管理员可以初始化班级N个学生的信息,包括学号、姓名、专业、年级和班级; (3)管理员可以初始化M门课程的信息,包括课程编号、课程名称、学分。 (4)教师可以录入某门课程的学生成绩信息,查看课程的班级成绩详细信息,班级的成绩统计信息:平均分,及格人数,百分比,不及格人数,百分比信息(5)学生可以查看自己的课程成绩。提示:本题目可根据实际情况设计结构体和文件存储
时间: 2024-03-21 17:44:10 浏览: 109
C语言班级成绩管理系统(期末课程设计)
5星 · 资源好评率100%
好的,这是一个比较复杂的问题,需要详细地思考和设计。以下是一个可能的实现方案:
1. 定义学生信息和课程信息的结构体:
```c++
struct Student {
int id; // 学号
string name; // 姓名
string major; // 专业
int grade; // 年级
int clazz; // 班级
vector<vector<double>> scores; // 成绩,用二维数组存储
};
struct Course {
int id; // 课程编号
string name; // 课程名称
int credit; // 学分
};
```
2. 定义班级类,包括学生信息和课程信息的初始化、成绩录入、统计和保存等操作:
```c++
class Class {
public:
Class(int n, int m); // 构造函数,n为学生数量,m为课程数量
void init_students(); // 初始化学生信息
void init_courses(); // 初始化课程信息
void input_scores(); // 录入成绩
void show_scores(int cid); // 显示某门课程的成绩
void show_stats(int cid); // 显示某门课程的成绩统计信息
void save(); // 保存成绩信息到文件
private:
vector<Student> students_; // 学生信息
vector<Course> courses_; // 课程信息
};
```
3. 实现班级类的构造函数和初始化学生、课程信息的函数:
```c++
Class::Class(int n, int m) {
students_.resize(n);
for (int i = 0; i < n; ++i) {
students_[i].id = i + 1;
}
courses_.resize(m);
}
void Class::init_students() {
for (auto& student : students_) {
cout << "请输入学生信息(学号 姓名 专业 年级 班级):";
cin >> student.id >> student.name >> student.major >> student.grade >> student.clazz;
}
}
void Class::init_courses() {
for (auto& course : courses_) {
cout << "请输入课程信息(课程编号 课程名称 学分):";
cin >> course.id >> course.name >> course.credit;
}
}
```
4. 实现成绩录入、显示、统计和保存等操作:
```c++
void Class::input_scores() {
int sid, cid;
double score;
cout << "请输入学生编号和课程编号及成绩(以-1结束):";
while (cin >> sid >> cid >> score) {
if (sid == -1 || cid == -1) break;
students_[sid - 1].scores[cid - 1].push_back(score);
}
}
void Class::show_scores(int cid) {
cout << "学号\t姓名\t成绩" << endl;
for (auto& student : students_) {
cout << student.id << "\t" << student.name << "\t";
if (student.scores[cid - 1].empty()) {
cout << "未录入" << endl;
} else {
for (auto& score : student.scores[cid - 1]) {
cout << score << " ";
}
cout << endl;
}
}
}
void Class::show_stats(int cid) {
double sum = 0, pass = 0, fail = 0;
for (auto& student : students_) {
for (auto& score : student.scores[cid - 1]) {
sum += score;
if (score >= 60) {
pass += 1;
} else {
fail += 1;
}
}
}
double avg = sum / students_.size();
double pass_rate = pass / students_.size();
double fail_rate = fail / students_.size();
cout << "平均分:" << avg << endl;
cout << "及格人数:" << pass << ",占比:" << pass_rate << endl;
cout << "不及格人数:" << fail << ",占比:" << fail_rate << endl;
}
void Class::save() {
ofstream fout("scores.txt");
fout << "学号\t姓名\t专业\t年级\t班级";
for (auto& course : courses_) {
fout << "\t" << course.name;
}
fout << endl;
for (auto& student : students_) {
fout << student.id << "\t" << student.name << "\t" << student.major << "\t" << student.grade << "\t" << student.clazz;
for (auto& scores : student.scores) {
if (scores.empty()) {
fout << "\t未录入";
} else {
double sum = 0;
for (auto& score : scores) {
sum += score;
}
double avg = sum / scores.size();
fout << "\t" << avg;
}
}
fout << endl;
}
fout.close();
}
```
5. 实现菜单和主函数:
```c++
void menu() {
cout << "1.初始化学生信息" << endl;
cout << "2.初始化课程信息" << endl;
cout << "3.录入成绩" << endl;
cout << "4.显示成绩" << endl;
cout << "5.显示成绩统计信息" << endl;
cout << "6.保存成绩信息" << endl;
cout << "0.退出" << endl;
}
int main() {
int n, m;
cout << "请输入班级人数和课程数量:";
cin >> n >> m;
Class cls(n, m);
int choice;
do {
menu();
cout << "请选择操作:";
cin >> choice;
switch (choice) {
case 1:
cls.init_students();
break;
case 2:
cls.init_courses();
break;
case 3:
cls.input_scores();
break;
case 4:
cout << "请输入课程编号:";
cin >> choice;
cls.show_scores(choice);
break;
case 5:
cout << "请输入课程编号:";
cin >> choice;
cls.show_stats(choice);
break;
case 6:
cls.save();
break;
case 0:
break;
default:
cout << "输入错误,请重新输入" << endl;
break;
}
} while (choice != 0);
return 0;
}
```
这个程序可以通过菜单的方式进行操作,支持初始化学生和课程信息、录入成绩、显示成绩、显示成绩统计信息和保存成绩信息等操作。可以根据实际需要对代码进行优化和改进。
阅读全文