目录
前言:
一、实验目的
1)使用Java/C++完成学生选课管理系统实现;
2)完成学生选课管理系统实现报告书。
二、实验要求
根据所要开发的软件系统,利用面向对象方法完成学生选课管理系统主要功能,至少包括一个主要功能模块,例如成绩管理子系统或选课管理子系统。另外要求有简单的界面设计,可以通过前台页面进行系统功能的演示。
实验报告书:
一、实现的主要功能
1. 课程管理:
1)展示课程:展示所有课程信息。
2)添加课程:输入课程编号、课程名称、课程学分、老师名称来添加课程,若是已经添加过的课程,则提示“该课程已添加,请重新输入”,否则提示“添加成功”。
3)修改课程:首先输入要修改的课程编号来找到课程,若输入的课程编号不对,则提示“没有该课程”,否则重新输入新的课程名称、课程学分、老师名称来进行修改,最后提示“修改成功”。
4)删除课程:首先输入要删除的课程编号来找到课程,若还没有添加该课程,则提示“还没有添加该课程”,否则提示删除成功。
5)查询课程:输入要查询的课程编号来查询该课程的信息,若课程编号不对则提示“没有该课程”。
2. 学生管理:
1)展示学生信息:展示全部学生信息及学生已选课程。
2)添加学生信息:输入学号、姓名、性别、年级来添加学生,若输入的学号是已经添加过的,则提示“该学生已添加,请重新输入”。
3)修改学生信息:首先输入要修改的学号来找到学生,若该学生没有被添加过,则提示“没有该学生”,否则接着重新输入新的姓名、性别、年龄、年级来进行修改,最后提示修改成功。
4)删除学生信息:首先输入要删除的学号来找到学生,若该学生没有被添加过,则提示“还没有添加该学生”,否则提示删除成功。
5)添加学生选课:输入学生学号会展示学生信息及已选课程,接着输入要添加的课程编号,如果是已选的则会提示“已有该课程,无法添加”,否则添加成功。
6)删除学生选课:输入学生学号会展示学生信息及已选课程,接着输入要删除的课程编号,提示删除成功。
7)查询学生信息:输入要查询的学号来查询该学生的信息及选课情况,若输入的学号
不对,则提示“没有该学生”。
二、实现的主要技术和方法
1. 实体划分:
利用c++语言实现该学生管理系统,首先对两个实体进行划分,分别为课程类和学生类。课程类用来保存每门课程的信息,有课程编号、课程名称、学分、授课教师4个属性;学生类用来保存每个学生的信息,有学号、姓名、年龄、性别、年级5个属性。因为他们有公共属性编号和名字,所以抽象出一个类,有编号和名称两个属性,让课程类和学生类来继承这个公共类。公共类定义打印所有信息的函数,然后在各自的类中定义增加课程、删除课程、增加学生、删除学生等功能的函数,以便后续实现。
2. 存储及管理信息:
为了方便对课程和学生信息的管理,使用容器进行操作。用vector<course> c来存储课程信息。course即课程类,包含课程编号、名称、学分和授课老师的信息。课程信息的增加、删除、修改和查询都通过对课程信息容器vector<course> c进行操作来实现;用vector<student> s来存储学生信息。student即学生类,包含学号、姓名、性别、年级及已选课程的信息。学生信息的增加、删除、修改和查询也是通过对学生信息容器vector<student> s进行操作来实现。
2. 具体的功能函数实现:
(1)判断编号是否存在:利用容器.size()方法遍历容器,如果找到与输入相同的编号,则返回true,否则返回false。
(2)添加数据:首先利用判断编号是否存在的函数判断输入的编号对应的学生或课程是否存在,存在则通过调用容器.push_back()方法向容器末尾添加新的课程或学生信息,否则提示错误。
(3)删除数据:首先利用判断编号是否存在的函数判断输入的编号对应的学生或课程是否存在,存在则使用容器.erase()方法删除指定位置或指定条件下的课程或学生信息,否则提示错误。
(4)修改数据:首先利用判断编号是否存在的函数判断输入的编号对应的学生或课程是否存在,存在则直接修改容器中相应元素的成员变量,否则提示错误。
(5)查询数据:首先利用是否存在的函数判断该编号对应的学生或课程是否存在,
存在则利用容器.size()遍历容器,返回该编号的信息,否则提示错误。
(6)展示数据:遍历容器中的元素,依次展示所有数据。
三、主要功能代码
1. 获取学生信息:
void student::get() {
system("cls");
long k = 1, kk, sumk = 0;
cout << "请输入要查询的学生学号:" << endl;
cin >> kk;
system("cls");
if (ishave(kk)) {
for (size_t i = 0; i < s.size(); i++)
if (s[i].number == kk) {
cout << endl << "学生学号:" << s[i].number << " 姓名:"
<< s[i].name << " 性别:" \
<< s[i].sex << " 年级:" << s[i].grade << endl << endl\
<< "学生已选课程:" << endl;
if (s[i].havec.size() == 0) {
cout << "无" << endl;
continue;
} else {
for (int k = 0; k < s[i].havec.size(); k++) {
cout << endl << "课程编号:" << s[i].havec[k].number
<< " 课程名称:" << s[i].havec[k].name << " 课程学分:" \
<< s[i].havec[k].credit << " 授课老师:" << s[i].havec[k].teachername << endl;
sumk = sumk + s[i].havec[k].credit;
}
cout << endl << "该学生本学期共有" << s[i].scredit << "学分,已选" << s[i].havec.size() << "门,共" << sumk << "学分。" << endl;
}
}
} else {
cout << "没有该学生。" << endl;
}
sprintorget();
}
2. 添加学生信息:
void student::add() {
system("cls");
long k = 1; student s1;
cout << " 请输入要添加的学生学号: " << endl;
cin >> s1.number;
while (ishave(s1.number)) {
system("cls");
cout << "┃ 该学生已添加,请重新输入: ┃" << endl;
cout << "┃ (按0退出) ┃" << endl;
cin >> k;
if (k == 0) {
sinfo();
break;
}
else s1.number = k;
}
if (k != 0) {
cout << " 请输入学生姓名: " << endl;
cin >> s1.name;
cout << " 请输入学生性别: " << endl;
cin >> s1.sex;
cout << " 请输入学生年级: " << endl;
cin >> s1.grade;
system("cls");
s.push_back(s1);
sinfo();
}
}
3. 删除学生信息:
void student::del() {
system("cls");
long k = 1, kk;
cout << "请输入要删除的学生学号:" << endl;
cin >> kk;
if (ishave(kk)) {
for (auto p = s.begin(); p != s.end();) {
if (p->number == kk) {
p = s.erase(p);
break;
}
else
++p;
}
cout << "成功删除该学生:" << endl;
} else {
cout << "还没有添加该学生。" << endl;
}
}
4. 修改学生信息:
void student::edit() {
system("cls");
long k = 1, kk;
cout << "请输入要修改学生的学号:" << endl;
cin >> kk;
if (ishave(kk)) {
for (size_t i = 0; i < s.size(); i++) {
if (s[i].number == kk) {
system("cls");
cout << " 请重新输入学生姓名: " << endl;
cin >> s[i].name;
cout << " 请重新输入学生性别: " << endl;
cin >> s[i].sex;
cout << " 请重新输入学生年级: " << endl;
cin >> s[i].grade;
cout << " 修改成功。 " << endl;
break;
}
}
} else {
cout << "没有该学生。" << endl;
}
}
5. 为学生添加选课:
void student::addcourse() {
system("cls");
long k = 1, kk, sumk = 0, sk;
cout << "请输入学生的学号:" << endl;
cin >> kk;
if (ishave(kk)) {
for (size_t i = 0; i < s.size(); i++) {
if (s[i].number == kk) {
cout << endl << "学生学号:" << s[i].number << " 姓名:" << s[i].name << " 性别:" \
<< s[i].sex << " 年级:" << s[i].grade << endl << endl\
<< "学生已选课程:" << endl;
if (s[i].havec.size() == 0) {
cout << "无" << endl;
}
else {
for (int k = 0; k < s[i].havec.size(); k++) {
cout << endl << "课程编号:" << s[i].havec[k].number
<< " 课程名称:" << s[i].havec[k].name << " 课程学分:" \
<< s[i].havec[k].credit << " 授课老师:" <<
s[i].havec[k].teachername << endl;
sumk = sumk + s[i].havec[k].credit;
}
cout << endl << "该学生本学期共有" << s[i].scredit << "学分,已选"
<< s[i].havec.size() << "门,共" << sumk << "学分。" << endl;
}
cout << "请输入要添加的课程编号:" << endl;
cin >> sk;
for (size_t k = 0; k < s[i].havec.size(); k++)
if (s[i].havec[k].number == sk) {
cout << "已有该课程,无法添加。" << endl;
}
else {
if (course::ishave(sk)) {
course c1;
for (size_t jk = 0; jk < c.size(); jk++) {
if (c[jk].number == sk) {
c1.number = c[jk].number;
c1.name = c[jk].name;
c1.credit = c[jk].credit;
c1.teachername = c[jk].teachername;
}
}
sumk = sumk + c1.credit;
if (sumk > s[i].scredit) {
cout << "学分不足,无法添加。" << endl;
}
else {
s[i].havec.push_back(c1);
cout << "添加成功。" << endl;
break;
}
}
else {
cout << "系统内没有该课程。" << endl;
}
}
}
}
}
else {
cout << "没有该学生。" << endl;
}
}
6. 为学生删除选课:
void student::delcourse() {
system("cls");
long k = 1, kk, sumk = 0, sk;
cout << "请输入学生的学号:" << endl;
cin >> kk;
if (ishave(kk)) {
for (size_t i = 0; i < s.size(); i++) {
if (s[i].number == kk) {
cout << endl << "学生学号:" << s[i].number << " 姓名:"
<< s[i].name << " 性别:" \
<< s[i].sex << " 年级:" << s[i].grade << endl << endl\
<< "学生已选课程:" << endl;
if (s[i].havec.size() == 0) {
cout << "无" << endl;
continue;
} else {
for (int k = 0; k < s[i].havec.size(); k++) {
cout << endl << "课程编号:" << s[i].havec[k].number
<< "课程名称:" << s[i].havec[k].name << "课程学分:" \
<< s[i].havec[k].credit << " 授课老师:"
<< s[i].havec[k].teachername << endl;
sumk = sumk + s[i].havec[k].credit;
}
cout << endl << "该学生本学期共有" << s[i].scredit << "学分,已选"
<< s[i].havec.size() << "门,共" << sumk << "学分。" << endl;
}
cout << "请输入要删除的课程:" << endl;
cin >> sk;
for (auto p = s[i].havec.begin(); p != s[i].havec.end();) {
if (p->number == sk){
p = s[i].havec.erase(p);
break;
}
else
++p;
}
cout << "删除成功。" << endl;
}
}
} else {
cout << "没有该学生。" << endl;
}
}
四、实现界面截图
1. 主菜单页:
2. 学生信息管理页:
3. 课程信息管理页:
4. 添加学生信息:
5. 展示所有学生信息:
6. 添加学生选课:
7. 再次查询该学生信息:
8. 添加课程信息:
9. 查询课程信息:
10. 修改课程信息: