学生选课和成绩管理系统
毕业季,复习c++以找工作,恰逢期末,写一下成绩管理系统,蹭下热度,顺便复习。。。
类框架
- 系统管理员(sys)
- 教师(teacher)
- 学生(student)
- 课程(course)
- 选课项(S_C)
类成员设计
- 系统管理员(sys)
教师表
学生表
课程表
选课表
文件I/O流
- 教师(teacher)
选课表(打分)
学生表(对应班级的时候查看)
工号
姓名
授课数
授课课程
- 学生(student)
课程表(选课)
选课表
学号
姓名
班级号
专业
- 课程(course)
课程ID
课程名称
课程性质
学分
学时
- 选课项(S_C)
学号
学生名
课程名称
分数
类功能函数设计
- 系统管理员(sys)
载入教师信息函数
载入学生信息函数
载入课程信息函数
载入选课信息函数
开始界面函数
系统管理员界面
添加学生、教师、课程函数
修改学生、教师、课程函数
删除学生、教师、课程函数
保存学生、教师、课程函数
- 教师(teacher)
打印教师信息函数
设置信息函数
教师管理界面
用文件打分函数
修改分数函数
查找函数
保存分数信息函数
排序函数
分析统计函数
- 学生(student)
打印学生信息函数
设置信息函数
学生管理界面
保存选课信息函数
选课函数
退课函数
- 课程(course)
打印课程信息
设置信息函数
- 选课项(S_C)
打印信息
设置信息函数
类总览
- 系统管理员(sys)
- 教师(teacher)
- 学生(student)
- 课程(course)
- 选课项(S_C)
部分具体函数实现
- 添加学生
void sys::add_s()//添加学生
{
student t_student;
cout << "请输入学生ID:";
cin >> t_student.s_id;
cout << "请输入学生姓名:";
cin >> t_student.s_name;
cout << "请输入学生班级:";
cin >> t_student.s_class_id;
cout << "请输入学生专业:";
cin >> t_student.s_speacialty;
vector<student>::iterator it;
for (it = students.begin(); it != students.end(); ++it) {
if (it->s_id == t_student.s_id) {
cout << "该生信息已存在\n";
break;
}
}
if (it == students.end()) {
t_student.print();
cout << "确认添加该学生信息?(回答y or n)";
char ch = getchar();
while (ch == 10)
ch = getchar();
if (ch == 'y')
students.push_back(t_student);
else {
cout << "老瞎填个啥-_-!!!\n";
}
}
cout << "添加结束!按任意键返回上一界面";
_getch();
this->systempage();
}
- 删除学生
void sys::del_s()//删除学生
{
student t_student;
cout << "请输入学生ID:";
cin >> t_student.s_id;
vector<student>::iterator it;
for (it = students.begin(); it != students.end(); ++it) {
if (it->s_id == t_student.s_id) {
t_student.print();
cout << "确认删除该学生信息?(回答y or n)";
char ch = getchar();
while (ch == 10)
ch = getchar();
if (ch == 'y') {
students.erase(it);
}
else if (ch == 'n')
cout << "未删除....";
else {
cout << "老瞎填个啥-_-!!!\n";
}
break;
}
}
if (it == students.end()) {
cout << "该生信息不存在\n";
}
cout << "删除结束!按任意键返回上一界面";
_getch();
this->systempage();
}
- 修改学生
void sys::change_s()//修改学生
{
student t_student;
cout << "请输入学生ID:";
cin >> t_student.s_id;
vector<student>::iterator it;
for (it = students.begin(); it != students.end(); ++it) {
if (it->s_id == t_student.s_id) {
t_student.print();
cout << "确认修改该学生信息?(回答y or n)";
char ch = getchar();
while (ch == 10)
ch = getchar();
if (ch == 'y') {
cout << "请输入学生姓名:";
cin >> it->s_name;
cout << "请输入学生班级:";
cin >> it->s_class_id;
cout << "请输入学生专业:";
cin >> it->s_speacialty;
cout << "已修改";
}
else {
cout << "老瞎填个啥-_-!!!\n";
}
break;
}
}
if (it == students.end()) {
cout << "该生信息不存在\n";
}
cout << "修改结束!按任意键返回上一界面";
_getch();
this->systempage();
}
- 保存学生表
void sys::save_s()//保存学生
{
out.open(s_filename);
if (out.is_open())
cout << "out open successful!\n";
else
cout << "out open failed!\n";
out << "#学号(ID)" << ' ' << "姓名" << ' ' << "班级" << ' ' << "专业\n";
vector<student>::iterator it;
for (it = students.begin(); it != students.end(); ++it) {
out << it->s_id << ' ' << it->s_name << ' ' << it->s_class_id << ' ' << it->s_speacialty << '\n';
}
out << "#END";
cout << "store " << students.size() << " students data\n";
out.close();
cout << "保存结束!按任意键返回上一界面";
_getch();
this->systempage();
}
- 文件打分
void teacher::load()//录入成绩
{
fstream file;
cout << "请输入学生成绩文件名(顺便加上路径)\n";
string filename = "temp.txt";
char line[105];
file.open(filename);
if (file.is_open())
cout << "in open successful!\n";
else
cout << "in open failed!\n";
S_C t_S_C;
int size1 = 0;
int size2 = 0;
while (file >> line && line[1] != 'E') {
if (line[0] == '#') {
file.getline(line, 100);
continue;
}
t_S_C.set_s_id(line);
file >> line;
file >> line;
t_S_C.set_c_name(line);
file >> line;
t_S_C.set_score(atoi(string(line).c_str()));
vector<S_C>::iterator it;
for (it = t_S_Cs.begin(); it != t_S_Cs.end(); it++) {
if (it->s_id == t_S_C.s_id&&it->c_name == t_S_C.c_name) {
it->score = t_S_C.score;
size1++;
break;
}
}
if (it == t_S_Cs.end()) {
t_S_Cs.push_back(t_S_C);
size2++;
}
}
cout << "change " << size1 << " S_Cs data\n";
cout << "add " << size2 << " S_Cs data\n";
file.close();
}
- 排序
void teacher::msort()//对某班某科排序
{
string t_class_id;
string t_c_name;
cout << "请输入排序班号:";
cin >> t_class_id;
cout << "请输入排序课程名:";
cin >> t_c_name;
vector<S_C> m_S_Cs;//对应班级课程学生选课表
vector<S_C>::iterator it;
for (it = t_S_Cs.begin(); it != t_S_Cs.end(); it++) {
if (this->search_class_id(it->s_id) == "error")
cout << "此人不在学生表中\n";
else if (this->search_class_id(it->s_id) == t_class_id && it->c_name == t_c_name) {
m_S_Cs.push_back(*it);
}
}
sort(m_S_Cs.begin(), m_S_Cs.end(), mcomp);
for (it = m_S_Cs.begin(); it != m_S_Cs.end(); it++) {
it->print();
}
cout << "排序结束!按任意键返回上一界面";
_getch();
this->systempage();
}
- 选课
void student::select() {
S_C t_S_C;
cout << "请输入选课课程名:";
cin >> t_S_C.c_name;
cout << "请输入您的ID:";
cin >> t_S_C.s_id;
cout << "请输入您的姓名:";
cin >> t_S_C.s_name;
t_S_C.score = -1;
vector<S_C>::iterator it;
for (it = t_S_Cs.begin(); it != t_S_Cs.end(); it++) {
if (it->s_id == t_S_C.s_id && it->c_name == t_S_C.c_name) {
cout << "此课程已选\n";
//break;
}
}
if (it == t_S_Cs.end()) {
t_S_C.print();
cout << "确定选课?(回答y or n)\n";
char ch = getchar();
while (ch == 10)
ch = getchar();
if (ch == 'y') {
t_S_Cs.push_back(t_S_C);
cout << "添加成功!";
}
else if (ch == 'n') {
this->systempage();
}
else {
cout << "输入错误,重新查询!";
this->select();
}
}
}