C++课程设计考场管理系统.docx
《C++课程设计考场管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计考场管理系统.docx(31页珍藏版)》请在冰点文库上搜索。
C++课程设计考场管理系统
课程设计报告
题目:
考场管理系统
学生姓名:
肖琪
学号:
************
专业班级:
计科09102班
同组姓名:
******************
设计时间:
2010年下学年第1-2周
指导老师意见:
评定成绩:
签名:
日期:
1.规划分析
1.1系统概述
首先该系统用户分为教师和学生登录,教师登陆之后,有3个模块,分别为学生管理,教师管理以及考场分配,在其每个模块当中分别实现插入,修改,查询,注销,返回上一级这5个功能。
而学生只需要查询考试信息,因此在登陆之后,系统会自动将所有科目的相关考试信息输出,学生只需核对自己所在班级,找到相关记录即可!
1.2方法分析
首先程序中使用了头文件#include,因为此系统的大部分数据成员都是string类型,这样子解决要简便很多,实现起来也方便。
由于数组存放数据的时候,需要先确定数组的规模,不能动态地分配内存空间,而链表是非连续存放的,可以对内存空间进行动态分配,生成链表之后,每次只要返回头指针就可以对整个链表进行操作,因此用链表来实现各个类模块的插,删,改,查的功能。
另外,程序中通过system("cls")清屏函数来实现界面的转换,主函数中的循环保证程序不会退出,并增加了文件的读入和写出功能,增强了系统的实用性!
2.1系统功能模块图
2.2各个管理模块的插入,删除,修改都是相似的流程:
1.查询流程图
2.修改流程图
3.程序详细代码描述
首先该系统建立了3个类:
科目,学生,教师。
学生类里包括姓名,学号,班级,charname[20],intno,stringsclass;科目类里包括科目名,考室,考试日期时间,考试班级,考室监考老师,stringsubj,place,date,sclass,tea;教师类中包括charname[20],姓名intno,编号;stringsubj,所教科目;
其中,登录函数,包括各个显示界面都包含在每个类中;比如教师登陆界面,以及登录函数包含在教师类中,学生登陆界面以及登录函数包含在学生类中:
此系统所用到的头文件:
#include
#include
#include
#include//使用getch()函数所包含的文件
而各个类的实现手法相似,都是利用单链表,下面只详细介绍科目管理这一个类:
classsubject//科目管理类
{stringsubj,place,date,sclass,tea;
public:
stringgetsubj()//科目名
{returnsubj;
}
voidsetsubj(stringtemp)
{subj=temp;
}
stringgetplace()//考室
{returnplace;
}
voidsetplace(stringtemp)
{place=temp;
}
stringgetdate()//考室日期时间
{returndate;
}
voidsetdate(stringtemp)
{date=temp;
}
stringgetsclass()//考室班级
{returnsclass;
}
voidsetsclass(stringtemp)
{sclass=temp;
}
stringgettea()//考室监考老师
{returntea;
}
voidsettea(stringtemp)
{tea=temp;
}
classsubject*next;
};
subject*start=NULL;//这样便于实现后面的插入,删除,修subject*current=NULL;//改操作
subject*precurrent=NULL;
subject*ptr=NULL;
voidadd1()//向用户链表添加一个节点
{
stringsubj1,place1,date1,sclass1,tea1;
current=newsubject();
//
cout<";
cin>>subj1;
cout<";
cin>>place1;
cout<";
cin>>date1;
cout<";
cin>>sclass1;
cout<";
cin>>tea1;
current->setsubj(subj1);
current->setplace(place1);
current->setdate(date1);
current->setsclass(sclass1);
current->settea(tea1);
//以头插法将新节点插入链表
current->next=start;
start=current;
cout<<"插入成功"<}
voidsubj2()//从硬盘文件读数据生成链表
{
start=NULL;
ifstreamfin("c:
\\subject.txt");
if(!
fin)
{
cout<<"打开文件失败"<return;
}
inti,j;
stringsubj1,place1,date1,sclass1,tea1;
fin>>i;
for(j=0;j
{
current=newsubject();
fin>>subj1>>place1>>date1>>sclass1>>tea1;
current->setsubj(subj1);
current->setplace(place1);
current->setdate(date1);
current->setsclass(sclass1);
current->settea(tea1);
current->next=start;
start=current;
}
}
voidsubj3()//把内存链表数据写入硬盘文件
{
ofstreamfout("c:
\\subject.txt");
if(!
fout)
{
cout<<"打开文件失败"<return;
}
inti=0;
precurrent=start;
while(precurrent!
=NULL)//计算链表中共有多少个节点
{
i++;
precurrent=precurrent->next;
}
fout<
precurrent=start;
while(precurrent!
=NULL)
{
fout<getsubj()<<""<getplace()<<""<getdate()<<""<getsclass()<<""<gettea()<<"'\n'";
precurrent=precurrent->next;
}
}
voidsubj4()//显示内存链表数据
{
cout<<"序号"<<"科目考室考试时间考试班级监考教师"<precurrent=start;
inti=1;
while(precurrent!
=NULL)
{
cout<getsubj()<<""<getplace()<<""<getdate()<<""<getsclass()<<""<gettea()<precurrent=precurrent->next;
}
}
voiddelete1()//删除
{
ptr=precurrent=start;
cout<<"请输入需要删除的科目名称"<stringuname;
cin>>uname;
while(precurrent!
=NULL)
{
if(uname==precurrent->getsubj())//找到该用户
break;
else
{
ptr=precurrent;
precurrent=precurrent->next;
}
}
if(precurrent!
=NULL)//找到了要删除的结点
{
if(precurrent==start)//要删除的结点是头结点
{
start=precurrent->next;//改变头结点指向
}
else//要删除的结点是普通结点
{
ptr->next=precurrent->next;//断开该结点链表连接
}
deleteprecurrent;//释放该结点空间
cout<}
else
{
cout<<"对不起,该用户不存在,请检查后重新输入!
"<}
//Save存档
//ofstreamoutf("c:
\\1.txt",ios:
:
out);
}
voidmodify()//修改
{
precurrent=start;
stringsubj1,place1,date1,sclass1,tea1;
stringuname;
cout<";
cin>>uname;
while(precurrent!
=NULL)
{
if(uname==precurrent->getsubj())//找到该用户
break;
else
{
precurrent=precurrent->next;
}
}
if(precurrent!
=NULL)//找到了要修改的结点
{
cout<<"请输入您想改成的新考室名:
\n"<cin>>place1;
precurrent->setplace(place1);
cout<<"请输入新的考试时间:
\n"<cin>>date1;
precurrent->setdate(date1);
cout<<"请输入新的班级:
\n"<cin>>sclass1;
precurrent->setsclass(sclass1);
cout<<"请输入新安排的教师姓名:
\n"<cin>>tea1;
precurrent->settea(tea1);
cout<<"修改成功"<}
else
{
cout<<"对不起,该用户不存在,请检查后重新输入!
"<}
}
下面这是学生类中的密码函数,即登陆设计,因为有教师跟学生登录,所以它包含在学生类和教师类中:
(附:
该函数程序参考了案例A)
Classstud//学生类
{
charname[20];
intno;
stringsclass;
public:
stringgetPW()//密码函数1
{
charpwCh='*';
constintlength=18;//最大密码长度=18
charpass[length]={0};
for(inti=0;i{
pass[i]=getch();
if(pass[i]=='\r')
{
pass[i]=0;
cout<<"输入结束。
"<returnstring(pass);
}
cout<}
cout<returnstring(pass);
}
intpass()//登陆管理
{
stringpass1,pass2,pass3;
inti=0;
ifstreamfin("D:
\\code.txt");
if(!
fin)
{
system("cls");//清屏函数
do
{
system("cls");//清屏函数
stringpass("666666");
cout<cout<<"\t\t"<cout<<"\t*********************************************************"<cout<"<cout<"<cout<<"\t请注意:
学生只拥有查询考试信息的权利,因此你登陆之后,系统\n";
cout<<"\t会自动将所有科目的相关考试信息输出,您只需进行核对自己的\n";
cout<<"\t班级,找到相关记录!
Thankyou!
!
";
cout<666666):
"<cout<<"\t*********************************************************"<if(!
pare(getPW()))//比较的是pass和getPW函数返回的值进行的比较
{
subj2();
subj4();
return0;
}
else
{
cout<\n"<system("pause");
i++;////错误次数计数
}
}
while(i<3);
if(i==3)
{
cout<"<exit(0);
}
}
fin>>pass2;//从文件里读密码
pass3=pass2;
do
{
system("cls");
cout<cout<"<cout<"<cout<";
if(!
pare(getPW()))
{
subj2();
subj4();
return0;
}
else
{
cout<\n"<system("pause");
i++;////错误次数计数
}
}while(i<3);
if(i==3)
{
cout<"<exit(0);
}
return0;
…stud*head=NULL;
stud*x=NULL;
stud*p=NULL;
stud*q=NULL;
下面是这些是专门为学生类服务的
voidsub1()//向用户链表添加一个节点
{
……..
}
voidsub2()//从硬盘文件读数据生成链表
……..
voidsub3()//把内存链表数据写入硬盘文件
…….
voidsub4()//显示内存链表数据
…
voidsub5()//删除
…
voidsub6()//修改
…
Classteacher//教师管理类
{
charname[20];
intno;
stringsubj;
public:
char*getname()//姓名
voidsetname(char*temp)
stringgetsubj()//班级
voidsetsubj(stringtemp)
intgetno()//学号
voidsetno(inttemp)
classteacher*next;
};
teacher*begin=NULL;
teacher*f=NULL;
teacher*u=NULL;
teacher*v=NULL;
voidtea1()//向用户链表添加一个节点
voidtea2()//从硬盘文件读数据生成链表
voidtea3()//把内存链表数据写入硬盘文件
voidtea4()//显示内存链表数据
voidtea5()//删除
voidtea6()//修改
classuser//界面管理类,负责各个界面的函数
{
voidchoose_face1()
intadmin_face()
voidchoose_face3()
voidchoose_face4()
voidchoose_face2()
…
};
………
进入系统之后的各个界面以及链接函数:
cout<<"\t\t★学生管理★"<cout<<"\t\t★★"<cout<<"\t\t★1.添加学生纪录★"<cout<<"\t\t★2.修改学生信息★"<cout<<"\t\t★3.注销学生信息★"<cout<<"\t\t★4.查询所有学生信息★"<cout<<"\t\t★0.退出学生管理系统★"<cout<<"\t\t★★★★★★★★★★★★★★★★★★★"<cout<";
while
(1)
{
cin>>i;
switch(i)
{
case1:
{
sub1();
sub3();
break;
}
case2:
//
{
sub2();
sub6();
sub3();
break;
}
case3:
{
sub5();
sub3();
break;
}
case4:
{
sub2();
sub4();
break;
}
case0:
{
return;
}
}
}
}
voidchoose_face3()//choose_face3()教师管理函数
{
inti=1;
cout<<"\t\t★★★★★★★★★★★★★★★★★★★"<cout<<"\t\t★★"<cout<<"\t\t★教师管理★"<cout<<"\t\t★★"<cout<<"\t\t★1.添加老师纪录★"<cout<<"\t\t★2.修改老师信息★"<cout<<"\t\t★3.注销教师纪录★"<cout<<"\t\t★4.查询所有教师信息★"<cout<<"\t\t★0.退出教师管理系统★"<cout<<"\t\t★★★★★★★★★★★★★★★★★★★"<cout<";
while
(1)
{
cin>>i;
switch(i)
{
……
……
}
voidchoose_face4()//choose_face4()科目管理实现考场分配
{
inti=1;
cout<<"\t\t★★★★★★★★★★★★★★★★★★★"<cout<<"\t\t★★"<cout<<"\t\t★考场分配★"<cout<<"\t\t★★"<cout<<"\t\t★1.添加一条考场科目纪录★"<cout<<"\t\t★2.修改科目纪录信息★"<cout<<"\t\t★3.注销纪录信息★"<cout<<"\t\t★4.查询所有科目考试信息★"<cout<<"\t\t★0.返回上一级★"<cout<<"\t\t★★★★★★★★★★★★★★★★★★★"<cout<";
while
(1)
{
…
…
}
intadmin_face()//老师登陆之后的界面
{
system("cls");
charchoose[2];
intcn=0;
cout<<"\t\t★★★★★★★★★★★★★★★★★★★"<cout<<"\t\t★★"<cout<<"\t\t★考场管理系统★"<cout<<"\t\t★1.进入学生管理界面★"<cout<<"\t\t★2