C++ 面向对象实现学生成绩管理系统
C++ 面向对象实现学生成绩管理系统
本系统使用 C++ 面向对象编程实现,能够对学生成绩进行增、删、改、查等操作,支持按学分积点排序,并提供友好的菜单界面。
基本要求
-
存储结构: 采用合适的存储结构存储学生成绩信息,每个记录包含以下数据项:
- 学号
- 姓名
- 高等数学
- 英语
- 物理
- 数据结构
- 面向对象程序设计综合实训
- 总分
- 学分积点
以学号为关键字。
-
功能:
- 增加学生记录
- 修改指定学生的成绩数据
- 删除指定学生记录
- 查找符合条件的学生成绩信息(指定学号、指定课程、指定课程且成绩在指定范围、学分积点在指定范围)
- 将学生成绩按学分积点降序排序
-
用户界面:
- 菜单方式
**************************************************** I ---增加学生记录 U ---修改学生成绩 D---删除学生记录 F ---查找条件的学生记录 S ---按学分积点降序排序并输出 P ---打印学生记录 Q ---结束 **************************************************** 请选择功能符(输入I、U、D、F、S、P和Q);- 当选择的功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。
实现思路
-
数据结构设计:
- 可以使用 C++ 的
struct或class来定义学生成绩信息结构。 - 可以使用
vector或其他容器来存储学生成绩信息。
- 可以使用 C++ 的
-
面向对象设计:
- 可以定义一个
Student类来表示学生信息,包含学号、姓名、各科成绩、总分、学分积点等属性。 - 可以定义一个
ScoreManager类来管理学生成绩信息,包含增、删、改、查、排序等功能。
- 可以定义一个
-
用户界面设计:
- 可以使用 C++ 的
iostream库来实现菜单界面。 - 可以使用
switch语句来实现不同功能的选择。
- 可以使用 C++ 的
代码示例
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 定义学生成绩信息结构
struct Student {
string id; // 学号
string name; // 姓名
int math; // 高等数学
int english; // 英语
int physics; // 物理
int dataStructure; // 数据结构
int oop; // 面向对象程序设计综合实训
int totalScore; // 总分
double creditPoint; // 学分积点
};
// 定义学生成绩管理类
class ScoreManager {
public:
// 添加学生记录
void addStudent(const Student& student) {
students.push_back(student);
}
// 修改学生成绩
void modifyStudent(const string& id, const Student& newStudent) {
// 找到指定学号的学生
for (auto& stu : students) {
if (stu.id == id) {
stu = newStudent;
return;
}
}
cout << '没有找到学号为 ' << id << ' 的学生记录!' << endl;
}
// 删除学生记录
void deleteStudent(const string& id) {
// 找到指定学号的学生
auto it = find_if(students.begin(), students.end(),
[&id](const Student& stu) { return stu.id == id; });
if (it != students.end()) {
students.erase(it);
cout << '删除学生记录成功!' << endl;
} else {
cout << '没有找到学号为 ' << id << ' 的学生记录!' << endl;
}
}
// 查找学生成绩
vector<Student> findStudents(const string& id = '', const string& course = '',
int minScore = -1, int maxScore = -1,
double minCreditPoint = -1, double maxCreditPoint = -1) {
vector<Student> result;
for (const auto& stu : students) {
if (id != '' && stu.id != id) continue;
if (course != '' && !isCourseMatch(stu, course)) continue;
if (minScore != -1 && stu.totalScore < minScore) continue;
if (maxScore != -1 && stu.totalScore > maxScore) continue;
if (minCreditPoint != -1 && stu.creditPoint < minCreditPoint) continue;
if (maxCreditPoint != -1 && stu.creditPoint > maxCreditPoint) continue;
result.push_back(stu);
}
return result;
}
// 按学分积点降序排序
void sortStudentsByCreditPoint() {
sort(students.begin(), students.end(),
[](const Student& a, const Student& b) { return a.creditPoint > b.creditPoint; });
}
private:
// 判断学生成绩是否符合指定课程
bool isCourseMatch(const Student& stu, const string& course) {
if (course == '高等数学') return true;
if (course == '英语') return true;
if (course == '物理') return true;
if (course == '数据结构') return true;
if (course == '面向对象程序设计综合实训') return true;
return false;
}
vector<Student> students; // 存储所有学生成绩信息
};
int main() {
ScoreManager manager;
while (true) {
cout << '****************************************************' << endl;
cout << 'I ---增加学生记录 U ---修改学生成绩' << endl;
cout << 'D---删除学生记录 F ---查找条件的学生记录' << endl;
cout << 'S ---按学分积点降序排序并输出 P ---打印学生记录' << endl;
cout << 'Q ---结束' << endl;
cout << '****************************************************' << endl;
cout << '请选择功能符(输入I、U、D、F、S、P和Q):';
char choice;
cin >> choice;
switch (choice) {
case 'I': {
// 添加学生记录
Student newStudent;
cout << '请输入学生学号:';
cin >> newStudent.id;
cout << '请输入学生姓名:';
cin >> newStudent.name;
// 输入各科成绩...
manager.addStudent(newStudent);
break;
}
case 'U': {
// 修改学生成绩
string id;
cout << '请输入要修改的学生学号:';
cin >> id;
// 输入新的学生信息...
manager.modifyStudent(id, newStudent);
break;
}
case 'D': {
// 删除学生记录
string id;
cout << '请输入要删除的学生学号:';
cin >> id;
manager.deleteStudent(id);
break;
}
case 'F': {
// 查找学生成绩
// 输入查找条件...
vector<Student> result = manager.findStudents(id, course, minScore, maxScore, minCreditPoint, maxCreditPoint);
// 打印查找结果...
break;
}
case 'S': {
// 按学分积点降序排序
manager.sortStudentsByCreditPoint();
// 打印排序结果...
break;
}
case 'P': {
// 打印学生记录
// 打印所有学生记录...
break;
}
case 'Q':
return 0;
default:
cout << '无效的功能符!请重新输入。' << endl;
}
}
return 0;
}
说明
- 以上代码仅为示例,具体的实现细节还需要根据实际情况进行调整。
- 可以根据需求添加更多功能,例如统计成绩、计算平均分等。
- 可以使用 C++ 的文件操作来实现数据的持久化存储。
原文地址: https://www.cveoy.top/t/topic/lXKQ 著作权归作者所有。请勿转载和采集!