一、题目背景 设计一个基于 C++的学生信息管理系统,该系统应能够有效地管理学生信息, 包括学生基本信息、课程成绩、奖惩记录等,并提供相关的查询、修改和统计 功能。该系统旨在提高学校的管理效率,并为教师和学生提供更好的服务。
二、功能要求
1. 学生信息录入 o 管理员可以录入学生的基本信息,包括学号、姓名、性别、出生 日期、班级等。 o 系统应自动为每个学生分配一个唯一的学号。
2. 课程成绩管理 o 管理员可以录入学生的课程成绩,包括课程名称、课程代码、成 绩等。 o 支持学生成绩的修改和查询。
3. 奖惩记录管理 o 管理员可以记录学生的奖惩信息,包括奖惩类型、奖惩内容、时 间等。 o 支持奖惩记录的查询和修改。
4. 学生信息查询 o 用户可以通过学号、姓名等关键词查询学生的基本信息、课程成 绩和奖惩记录。 o 查询结果应清晰明了,便于用户快速了解学生情况。
5. 统计分析 o 提供统计分析功能,如按班级统计学生数量、平均成绩等。 o 提供学生成绩排名、奖惩情况统计等报表,帮助管理员分析学生 学习和表现情况。
6. 扩展功能(可选) o 学生登录功能:允许学生使用学号和密码登录系统,查看自己的 信息和成绩。 o 教师登录功能:允许教师查看所教课程的学生成绩和统计信息。 o 导出功能:支持将学生信息、成绩和奖惩记录导出为 Excel 或 CSV 文件。
三、实现要求 使用 C++编程语言实现系统功能。 可以利用结构体或类来定义学生、课程成绩、奖惩记录等相关的数据结 构。 学生信息、成绩和奖惩记录应保存到文件中,确保数据的持久化。 提供友好的用户界面,可以是命令行界面或简单的图形界面。 注意系统的稳定性和安全性,确保数据不会因意外情况而丢失或被篡
以下是代码细节部分(可直接移植):
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
#define Numbers 100
//学生类
class Student {
public:
int student_id;
string name;
string gender;
string birth_date;
string class_name;
Student(int id, string n, string g, string bd, string cn)
: student_id(id), name(n), gender(g), birth_date(bd), class_name(cn) {}
// 注册学生信息
void registerStudent() {
srand(time(0));
cout << "请输入学生的姓名: ";
cin >> name;
cout << "请输入学生的班级: ";
cin >> student_id;
cout << "请输入学生的生日";
cin >> birth_date;
cout << "请输入学生的班级" << endl;
cin >> class_name;
student_id = rand(); // 随机生成一个学号
cout << "为该学生生成了一个专属的学号,学号是:" << student_id << endl;
ofstream outfile("students.txt", ios::app);
if (outfile.is_open()) {
outfile << name << " " << student_id << " " << birth_date << " " << class_name << " " << endl;
outfile.close();
cout << "恭喜,学生信息注册成功!" << endl;
}
else {
cout << "无法写入学生信息." << endl;
}
}
// 学生登录功能
bool loginStudent() {
string name;
int studnet_id;
cout << "请输入学生的姓名 ";
cin >> name;
cout << "请输入学生的学号: ";
cin >> student_id;
ifstream infile("students.txt");
string file_name, file_studentname;
int file_id;
bool login_success = false;
if (infile.is_open()) {
while (infile >> file_name >> file_id >> file_studentname) {
if (file_id == student_id && file_studentname == name) {
cout << "Login successful! Welcome " << file_name << "!" << endl;
login_success = true;
break;
}
}
infile.close();
}
else {
cout << "Unable to open file for reading." << endl;
}
if (!login_success) {
cout << "Invalid ID or password. Login failed." << endl;
}
return login_success;
}
};
//课程成绩类
class CourseGrade {
public:
int student_id;
string course_name;
string course_code;
double grade;
CourseGrade(int id, string cn, string cc, double g)
: student_id(id), course_name(cn), course_code(cc), grade(g) {}
};
//奖赏机制类
class AwardPenalty {
public:
int student_id;
string type;
string content;
string date;
AwardPenalty(int id, string t, string c, string d)
: student_id(id), type(t), content(c), date(d) {}
};
vector<Student> students;
vector<CourseGrade> grades;
vector<AwardPenalty> awards;
int next_student_id = 1;
void addStudent() {
string name, gender, birth_date, class_name;
cout << "请加入学生的姓名: ";
cin >> name;
cout << "请输入学生的成绩: ";
cin >> gender;
cout << "请输入学生的生日 (YYYY-MM-DD): ";
cin >> birth_date;
cout << "请输入学生所属于的班级 (类似2023级电商二班): ";
cin >> class_name;
Student new_student(next_student_id++, name, gender, birth_date, class_name);
students.push_back(new_student);
cout << "学生自己的学号: " << new_student.student_id << endl;
}
void manageCourseGrades() {
int id;
string course_name, course_code;
double grade;
cout << "请输入学生的学号: ";
cin >> id;
cout << "请输入课程名: ";
cin >> course_name;
cout << "请输入课程代号: ";
cin >> course_code;
cout << "请输入学生该门课程的成绩: ";
cin >> grade;
grades.push_back(CourseGrade(id, course_name, course_code, grade));
cout << "课程添加成功!" << endl;
}
//奖罚方法
void manageAwardPenalties() {
int id;
string type, content, date;
cout << "请输入奖罚同学的学号: ";
cin >> id;
cout << "请输入类型 (award/penalty): ";
cin >> type;
cout << "请输入具体奖罚内容: ";
cin >> content;
cout << "发生日期 (YYYY-MM-DD): ";
cin >> date;
awards.push_back(AwardPenalty(id, type, content, date));
cout << "奖励/处罚已被成功添加." << endl;
}
//查找学生
void queryStudentInfo() {
int id;
cout << "请输入学生的学号: ";
cin >> id;
auto it = find_if(students.begin(), students.end(), [id](Student& s) { return s.student_id == id; });
if (it != students.end()) {
cout << "学生的学号: " << it->student_id << endl;
cout << "名字: " << it->name << endl;
cout << "成绩: " << it->gender << endl;
cout << "生日: " << it->birth_date << endl;
cout << "班级: " << it->class_name << endl;
}
else {
cout << "对不起,无法找到该学生." << endl;
}
}
//统计成绩
void statisticalAnalysis() {
map<int, double> student_average_grades;
for (const auto& grade : grades) {
student_average_grades[grade.student_id] += grade.grade;
}
for (auto& pair : student_average_grades) {
pair.second /= count_if(grades.begin(), grades.end(), [pair](CourseGrade& g) { return g.student_id == pair.first; });
}
for (const auto& pair : student_average_grades) {
cout << "学生学号: " << pair.first << ", 平均成绩是: " << pair.second << endl;
}
}
void studentLogin() {
int id,choice;
string Name;
// Simplified login function
cout << "学生登录功能." << endl;
cout << "请输入您的姓名";
cin >> Name;
cout << "请输入您的学号" << endl;
cin >> id;
auto it = find_if(students.begin(), students.end(), [id](Student& s) { return s.student_id == id; });
if (it != students.end()) {
cout << "请问" << Name<<"是否想查询自己的成绩和信息?(请输入-- - (1 / 0))" << endl;
cin >> choice;
switch (choice)
{
case 0:
cout << "感谢您的使用" << endl;
break;
case 1:
cout << Name <<"同学,你的成绩是:" << it->gender << endl;
cout << "以下是您的个人信息" << endl;
cout << "生日: " << it->birth_date << endl;
cout << "班级: " << it->class_name << endl;
default:
cout << "您的选项有误。" << endl;
break;
}
}
else {
cout << "对不起,无法找到该学生." << endl;
}
}
void mainMenu() {
while (true) {
cout << "1. 加入学生信息\n2. 管理课程信息\n3. 奖罚管理\n4. 查询学生信息\n5. 统计与分析\n6. 学生登录\n7. 退出\n";
int choice;
cin >> choice;
switch (choice) {
case 1:
addStudent();
break;
case 2:
manageCourseGrades();
break;
case 3:
manageAwardPenalties();
break;
case 4:
queryStudentInfo();
break;
case 5:
statisticalAnalysis();
break;
case 6:
studentLogin();
break;
case 7:
return;
default:
cout << "您的输入有误,请重新输入谢谢。" << endl;
}
}
}
int main() {
mainMenu();
return 0;
}