课程信息 、查看选课、人数上限、授课教师等);学生课程类(学生类和课程类所派生,描
述学生选课信息:包括学生编号、姓名、课程编号、课程名称、累
计学分等)。其他根据设计自行添加。
2、功能要求:
(1)分角色登录:学生和管理员按照账号密码登录。
(2)管理员模块:
① 维护学生信息,包含信息的增加、删除、修改、查看等。
② 维护课程信息,包含信息的增加、删除、修改、查看等。
③ 实现学生选课信息查询,包含按照课程名称查询、按照学生名字
查询等。
(3)学生模块:
① 可查看备选课程信息,并按照课程编号选课。
② 查看已选课程信息和累计学分。
(4)学生信息、课程信息、学生选课信息分别用文件保存,每个
类一个文件,程序执行时从文件读入。
(5)数据要求:学生不少于30条记录,课程信息不少于10条记录,
选课信息不少于20条记录。实验数据要格式规范且合理。
(6)显示要求:人机交互设计要合理友好,便于使用。
admin.h
#include
#include
#include
using namespace std;
class Admin//管理员类
{
public:
string num;//管理员账号
string password;//管理员密码
bool login(string a,string b)
{
if( a == num && b == password )
return true;
return false;
}
}admin;
course.h
#include
#include
using namespace std;
class Course
{
public:
string coursenum;//课程编号
string coursename;//课程名
string teacher;//授课老师
int score;//学分
int people;//人数上限
}course;
master.cpp
#include"studentcourse.h"
#include"admin.h"
#include
#include//用于sleep函数,例如sleep(1000)就是停留1秒
#include
#include
#include
using namespace std;
void init();//写入数据
void outit();//读出数据
void login();//登陆
//学生
void studentBegin();//学生开始的界面
void viewcourse();//查看选课
void choose();//选课
//管理员
void adminBegin();//管理员开始的界面
void studentInformation();//*学生信息操作
void addStudentInformation();//增加学生信息
void delStudentInformation();//删除学生信息
void viewStudentInformation();//查看学生信息
void changeStudentInformation();//修改学生信息
void courseInformation();//*课程信息操作
void addCourseInformation();//增加课程信息
void delCourseInformation();//删除课程信息
void viewCourseInformation();//查看课程信息
void changeCourseInformation();//修改课程信息
void findchoose();//*选课查询选择
void coursefind();//课程名查询选课情况
void studentfind();//学生查询选课情况
vector stu;//定义一个学生类的容器,存储学生信息
vector cou;//存储课程
vector sc;//存储选课
int sn;//记录第sn个学生登陆,保证在第sn个学生中改动
void init()//读入数据
{
//学号 姓名 密码 班级 专业
ifstream in("student.txt",ios::in);
while(!in.eof())
{
in>>student.studentnum>>student.studentname>>student.password>>student.Class>>student.major;
stu.push_back(student);//在尾部加数据
}
in.close();
//课程编号 课程名 授课老师 学分 人数
ifstream in1("course.txt",ios::in);
while(!in1.eof())
{
in1>>course.coursenum>>course.coursename>>course.teacher>>course.score>>course.people;
cou.push_back(course);
}
in1.close();
//学号 姓名 课程编号 课程名称 学分
ifstream in2("studentcourse.txt",ios::in);
while(!in2.eof())
{
in2>>studentcourse.studentnum>>studentcourse.studentname>>studentcourse.coursenum>>studentcourse.coursename>>studentcourse.score;
sc.push_back(studentcourse);
}
in2.close();
ifstream in3("admin.txt",ios::in);//录入管理员账号和密码
in3>>admin.num>>admin.password;
in3.close();
}
void outit()//读出数据
{
int i;
//学号 姓名 密码 班级 专业
ofstream out("student.txt",ios::out);
for( i = 0 ; i < stu.size() ; i++ )
{
out<>a;
cout<>b;
cout<>n;
switch(n)
{
case 1:viewcourse();break;
case 2:choose();break;
case 0:cout<<"谢谢您的使用";outit();exit(0);
default:studentBegin();break;
}
}
void viewcourse()//查看选课
{
system("cls");//清屏,刷新页面
bool can = true;//设置一个旗帜
int i,s=0;//s记录课程的分数
cout<<"课程编号\t\t课程名\t\t 学生编号\t\t 姓名 学分"<>n;
for( i = 0 ; i < sc.size() ; i++ )
{
if( n == sc[i].coursenum && sc[i].studentnum == stu[sn].studentnum )//查看课程号和已选的课程号是否相同。看同一个学号是否对应同一个课程号
{
cout<<"您已选该课程"<>n;
switch(n)
{
case 1:studentInformation();break;
case 2:courseInformation();break;
case 3:findchoose();break;
case 0:cout<<"欢迎使用";outit();exit(0);
default:adminBegin();break;
}
}
void studentInformation()//学生信息操作
{
system("cls");
cout<<"\t\t 管理学生"<>n;
switch(n)
{
case 1:addStudentInformation();break;
case 2:delStudentInformation();break;
case 3:viewStudentInformation();break;
case 4:changeStudentInformation();break;
case 0:adminBegin();break;
default:studentInformation();break;
}
}
void addStudentInformation()//增加学生信息
{
system("cls");
cout<<"\t\t 管理员界面"<>a;
for( i = 0 ; i < stu.size() ; i++ )
{
if( a == stu[i].studentnum )
{
cout<<"学号已存在"<>b;
cout<<"请输入学生密码:";cin>>c;
cout<<"请输入学生班级:";cin>>d;
cout<<"请输入学生专业:";cin>>e;
student.studentnum = a;
student.studentname = b;
student.password = c;
student.Class = d;
student.major = e;
stu.push_back(student);
cout<<"增加成功"<>a;
for( i = 0 ; i < stu.size() ; i++ )
{
if(stu[i].studentnum == a)
{
stu.erase(stu.begin()+i);//运用容器的删除函数,删掉容器现在这个元素
cout<<"删除成功"<>a;
for( i = 0 ; i < stu.size() ; i++ )
{
if(stu[i].studentnum == a)
{
break;
}
}
if( i == stu.size())
{
cout<<"没有这个人,查看学号是否输入错误"<>a;
for( j = 0 ; j < stu.size() ; j++ )
{
if( a == stu[j].studentnum && i != j)
{
cout<<"学号已存在"<>b;
cout<<"请输入学生密码:";cin>>c;
cout<<"请输入学生班级:";cin>>d;
cout<<"请输入学生专业:";cin>>e;
stu[i].studentnum = a;
stu[i].studentname = b;
stu[i].password = c;
stu[i].Class = d;
stu[i].major = e;
cout<<"修改成功"<>n;
switch(n)
{
case 1:addCourseInformation();break;
case 2:delCourseInformation();break;
case 3:viewCourseInformation();break;
case 4:changeCourseInformation();break;
case 0:adminBegin();break;
default:courseInformation();break;
}
}
//cout<<"课程编号\t\t课程名\t\t 授课老师\t\t 学分 人数"<>a;
for( i = 0 ; i < cou.size() ; i++ )
{
if( a == cou[i].coursenum )
{
cout<<"课程编号已存在"<>b;
cout<<"请输入授课老师:";cin>>c;
cout<<"请输入学分:";cin>>d;
e = 0;
course.coursenum = a;
course.coursename = b;
course.teacher = c;
course.score = d;
course.people = e;
cou.push_back(course);
cout<<"增加成功"<>a;
for( i = 0 ; i < cou.size() ; i++ )
{
if(cou[i].coursenum == a)
{
cou.erase(cou.begin()+i);
cout<<"删除成功"<>a;
for( i = 0 ; i < cou.size() ; i++ )
{
if(cou[i].coursenum == a)
{
break;
}
}
if( i == cou.size())
{
cout<<"无此课程"<>a;
for( j = 0 ; j < cou.size() ; j++ )
{
if( a == cou[j].coursenum && i != j)
{
cout<<"课程编号已存在"<>b;
cout<<"请输入授课老师:";cin>>c;
cout<<"请输入学分:";cin>>d;
cout<<"请输入人数:";cin>>e;
cou[i].coursenum = a;
cou[i].coursename = b;
cou[i].teacher = c;
cou[i].score = d;
cou[i].people = e;
cout<<"修改成功"<>n;
switch(n)
{
case 1:coursefind();break;
case 2:studentfind();break;
case 0:adminBegin();break;
default:findchoose();break;
}
}
void coursefind()//课程名查询
{
system("cls");
cout<<"\t\t 管理员界面"<>a;
cout<<"课程编号\t\t课程名\t\t 学生编号\t\t 姓名 学分"<>a;
cout<<"课程编号\t\t课程名\t\t 学生编号\t\t 姓名 学分"<
student.h
#include
#include
using namespace std;
class Student
{
public:
string studentnum;;//学号
string studentname;//姓名
string password;//密码
int Class;//班级
string major;//专业
}student;
studentcourse.h
#include"course.h"
#include"student.h"
#include
#include
using namespace std;
class StudentCourse:public Student,public Course
{
}studentcourse;
//学号 姓名 课程编号 课程名称 学分
自己先建一个文件输入管理员信息。然后再录入学生信息。
课程设计报告
课程名称 面向对象程序课程设计
项目名称 学生选课管理系统
姓 名 XX
班 级
学 号
指导教师 XX老师
设计时间 2019年6月24日 至 2019年6月28日
计算机工程学院
目 录
一、 项目要求 1
二、 项目开发环境 2
三、 项目分析 2
四、 设计与实现 3
五、 总结 12
六、 参考文献 13
一、 项目要求
设计三个类:
学生类
课程类
学生选课类。
要实现学生端和管理员端权限;
A.学生端实现以下功能:
a.可查看备选课程信息
b.按照课程编号选课。
c.查看已选课程信息。
d.查看累计学分情况
B.管理员端实现以下功能:
a.可以完成:
增加学生信息;
删除学生信息;
修改学生信息;
查看学生信息。
b.可以完成:
课程信息的增加;
课程信息的删除;
课程信息的修改;
课程信息的查看。
c.实现按照课程名称查询学生选课情况、按照学生名字查询学生选课情况。
学生信息、课程信息、学生选课信息分别用文件保存,每个类一个文件,程序执行时从文件读入,登录时可从文件读出。
学生文本文件不少于30条记录;
课程信息文本文件不少于10条记录;
选课信息文本文件不少于20条记录。
实验数据要格式规范且合理。
界面设计合理友好。
实现管理员和学生用不同的账号密码登录
二、 项目开发环境
硬件环境: CPU的型号及频率:Intel®Core™ i7-8550U CPU @ 1.80GHz 1.99GHz
所需内存大小:145KB;所在磁盘:C盘。
软件环境:Windows 10/ VC++6.0 / CodeBlock 17.12 /X-mind/raptor
三、 项目分析
先写三大类
主要写学生端和管理端对应的功能函数
修理界面,使人机交互更好。
录入三个类的数据。在登录时,从文件读出。
四、 设计与实现
设计思路说明
表2.course表
字段名称 类型 说明
coursenum string 管理员账号
coursename string 管理员密码
teacher string 授课老师
score int 该课的学分
people int 选该课的人数
表3.student表
字段名称 类型 说明
studentnum string 学生账号
studentname string 学生姓名
password string 密码
major int 专业
Class string
表4.studentcourse表
字段名称 类型 说明
coursenum string 课程编号
coursename string 课程名
studentnum string 学号
studentname string 姓名
score int 学分
(2) 流程图说明: 登录系统后,根据提示按管理学生信息,修改学生信息。
2) 通过学生名字查看选课状态功能的详细设计
(1) 流程图:
(2)流程图说明:程序开始后,先选择管理员登录,然后选择查看选课,最后根据提示输入学生名字,最后看到选课信息。
5. 实现
1) 管理员修改学生信息功能的实现
(1) 运行效果图:
(2) 运行效果图说明:首先登录管理员界面,然后根据提示选择1进行学生系统管理.然后根据提示点4进行修改学生信息。输入要修改的学号。再输入修改后的学号。修改成功。
(3) 代码及注释:
void changeStudentInformation()//修改学生信息
{
system("cls");//清屏
cout<<"\t\t 管理员界面"<>a;
for( i = 0 ; i < stu.size() ; i++ )//遍历学生信息
{
if(stu[i].studentnum == a)
{
break;
}
}
if( i == stu.size())
{
cout<<"没有这个人,查看学号是否输入错误"<>a;
for( j = 0 ; j < stu.size() ; j++ )
{
if( a == stu[j].studentnum && i != j)
{
cout<<"学号已存在"<>b;
cout<<"请输入学生密码:";cin>>c;
cout<<"请输入学生班级:";cin>>d;
cout<<"请输入学生专业:";cin>>e;
stu[i].studentnum = a;
stu[i].studentname = b;
stu[i].password = c;
stu[i].Class = d;
stu[i].major = e;
cout<<"修改成功"<
2) 通过学生名字查看选课状态功能的实现
(1) 运行效果图:
(2) 运行效果图说明:程序运行后,按2执行按名字查看选课状态的功能,根据程序的提示信息,录入姓名,就可以看到该学生所有的选课状态。
(3) 代码及注释:
void findchoose()//选课查询选择
{
system("cls");
cout<<"\t\t 管理选课"<>n;
switch(n)
{
case 1:coursefind();break;
case 2:studentfind();break;
case 0:adminBegin();break;
default:findchoose();break;
}
}
void studentfind()//学生查询
{
system("cls");
cout<<"\t\t 管理员界面"<>a;
cout<<"课程编号\t\t课程名\t\t 学生编号\t\t 姓名 学分"<
五、 总结
(586字)这次课程设计我将从以下几个方面论述带给我的影响:
[1] 程序设计基础(C语言)/高克宁/清华大学出版社/2018年1月
[2] C++面向对象程序设计教程习题解答与上机指导/陈维兴,林小荼,陈昕/清华大学出版社/2018年10月
[3] C++面向对象程序设计教程/陈维兴,林小荼,陈昕/清华大学出版社/2018年10月
图请自行脑补吧