C++课程设计学生选课管理系统说明书.docx
《C++课程设计学生选课管理系统说明书.docx》由会员分享,可在线阅读,更多相关《C++课程设计学生选课管理系统说明书.docx(27页珍藏版)》请在冰豆网上搜索。
C++课程设计学生选课管理系统说明书
数学与计算机学院
课程设计说明书
课程名称:
面向对象程序设计-课程设计
课程代码:
8401650
题目:
学生选课管理系统
年级/专业/班:
2009级信科1班
学生姓名:
**************************
学 号:
***************
开始时间:
2010年05月23日
完成时间:
2010年06月20日
课程设计成绩:
学习态度及平时成绩(30)
技术水平与实际能力(20)
创新(5)
说明书撰写质量(45)
总分(100)
指导教师签名:
年月日
摘要
随着计算机的普及,各高校均采用计算机进行学生选课。
而对学生选课相关信息的管理由学生选课管理系统实现。
经过分析其学生选课端和系统管理端的各项功能,利用面向对象的C++编程实现了学生选课管理系统。
该系统选课端具有学生选课、退选课程、查看已选课程、打印选课信息等功能,而管理端具有对学生、教师、备选课程等信息的管理,主要包括增加,删除,查看等功能。
关键词:
学生选课管理系统计算机面向对象C++
1引言
1.1问题的提出
我国高校都实行了学分制,其核心就是允许学生自由选课,自主权交给学生。
如果选课能够通过计算机实现,那么就可以节约很多的人力、物力。
因此,为学生选课提供一个好的系统不仅方便学校对学生选课的管理,也方便学生自由选课。
所以,针对此问题有必要做一个学生选课管理系统软件。
1.2任务与分析
学生选课管理系统实现对学生选课相关信息的管理,能处理学生、教师、课程信息的管理及选课操作。
1.每个学生包括有学号、姓名、总学分等内容;
2.每个教师包括工作证号、姓名、职称等信息;
3.课程包括课程号、课程名、任课教师、学分等信息;
4.能提供若干门课,由学生进行选择,打印出学生选课情况。
本课题主要的目的是通过面向对象的C++编程,实现学生选课管理系统对学生选课相关信息的管理,能处理学生、教师、课程信息的管理及选课操作。
其中每个学生包括有学号、姓名、已选课程和总学分;每个教师包括工作证号、姓名、职称等信息;课程包括课程号、课程名、任课教师、学分等信息;最终要实现能通过管理端提供若干门课,供学生进行选择,退选,并打印出学生选课情况。
在功能实现的基础上,还要设计出良好的界面。
2程序的主要功能
2.1添加功能
这是系统管理端的一个功能,主要是对学生、课程和教师的增加。
其中,学生包括学号、姓名;课程包括课程号、课程名、任课教师和学分;教师包括教师证号、教师姓名、职称。
2.2删除功能
这是系统管理端的一个功能,主要是对学生、课程、教师分别按学号、课程号、教师证号进行删除。
2.3查看功能
在系统管理端,可以分别显示所有学生、课程、教师的信息以供查看。
在学生选课端,则可以查看学生的已选课程。
2.4选课功能
这是学生选课端的一个功能,学生通过输入课程号选课,并在选课同时可以查看课程及任课教师的信息。
2.5退选功能
这是学生选课端的一个功能,学生通过输入课程号退选课程。
2.6打印功能
这是学生选课端的一个功能,学生可以打印出选课的所有信息,包括学号,姓名,已选课程和已选课程的总学分等信息。
3程序运行平台
VC++6.0。
具体操作如下:
打开VC++6.0,新建一个空工程,添加相应的源文件,再编译,链接,执行。
4总体设计
图4.1系统总体框架图
5程序类的说明
∙subject类的声明
classsubject//课程信息类
{Course*head;//头指针
Course*p;//当前指针
public:
subject(){head=p=NULL;};
voidAdd();//增加课程
voidDelete();//删除课程
intSearch(charnu[]);//根据课程号查找课程
voidReadFile();//从文件中读取课程信息
voidWriteFile();//向文件写入课程信息
voidDisplay();//在屏幕中输出全部课程信息
friendXS;
friendJS;
friendvoidxuanke(XSP,charnu[],charna[]);
};
∙JS类的声明
classJS//教师信息类
{Teacher*head;//头指针
Teacher*p;//当前指针
public:
JS(){head=p=NULL;};
voidAdd();//增加教师
voidDelete();//删除教师
voidSearch(charna[]);//通过教师姓名查找任课教师
intSearch1(charnu[]);//通过教师号查找教师
voidReadFile();//从文件中读取教师信息
voidWriteFile();//向文件写入教师信息
voidDisplay();//在屏幕中输出全部教师信息
friendXS;
};
∙stu类的声明
classstu//学生信息类
{Student*head;//头指针
Student*p;//当前指针
public:
stu(){head=p=NULL;};
voidAdd();//增加学生
voidDelete();//删除学生
intSearch(charnu[],charna[]);//按学生学号和姓名查找
intSearch(charnu[]);//按学生学号查找
voidReadFile();//将所有学生的信息写入文件
voidWriteFile();//从文件读出学生信息
voidDisplay();//显示所有学生
friendXS;
};
∙XS类的声明
classXS//学生类
{charnum[10];//学号
charname[20];//姓名
Course*head;//已选课程头指针
Course*p;//已选课程当前指针
floattcredit;//已选课程总学分
public:
XS(){head=p=NULL;tcredit=0;};
voidset(charnu[],charna[])
{strcpy(num,nu);strcpy(name,na);};
voidAddcourse(charnu[]);//学生选课
intSearch(charnu[]);//按课程号查找以选课程
voidDeletecourse(charnu[]);//退选
voidShowcourse();//显示已选课程
floatget_tcredit();//获取已选课程总学分
voidReadFilecourse();//读取已选课程
voidWriteFilecourse();//将已选课程写入文件
friendvoidtuixuan(XSP,charnu[],charna[]);
};
6模块分析
6.1选课端登录验证模块
在主菜单选择1时,便进入选课端登录验证,该模块会提示用户输入学号(nu[10])和姓名(na[20]),当输入完成后,调用intstu:
:
Search(nu,na);,当返回值为0,则输出提示信息“对不起,学号或姓名输入错误!
按任意键返回..”,然后返回主菜单;当返回值为1,则登录学生选课系统。
关键代码如下:
P0:
intb1,b2,b0=menu();
stup1;subjectp2;JSp3;XSp;
if(b0==1)
{system("cls");
p1.ReadFile();
charnu[10],na[20];
cout<<"\n\n\t\t请输入您的学号:
";cin>>nu;
cout<<"\n\n\t\t请输入您的姓名:
";cin>>na;
if(p1.Search(nu,na)==0)
{cout<<"\n\n\t\t对不起,学号或姓名输入错误!
按任意键返回..";
getchar();getchar();gotoP0;}
else
{P1:
b1=menu1();
6.2学生选课端选课模块
在学生选课系统中选择1,进入选课模块。
此时调用voidxuanke(XSP,charnu[],charna[]);函数,此函数首先调用subject:
:
ReadFile();subject:
:
Display();将所有的课程输出来,并提示“请输入要选择的课程号:
”,然后输入课程号(kh[10]),此时会提示“是否查看任课教师信息(y/n):
”,输入y,将输出任课教师信息,如果没有此教师信息,输出“没有此任课教师的信息!
”,当输入n,则不输出教师信息。
此时调用XS:
:
Addcourse(kh);选课,再输出“是否继续选课(y/n):
”如输入y,重复以上选课操作,当输入n,则调用XS:
:
WriteFilecourse();保存已选课程。
关键代码如下:
voidxuanke(XSP,charnu[],charna[])//选课功能函数
{system("cls");
JSJ;
J.ReadFile();
subjectsub;
sub.ReadFile();
sub.Display();
P.set(nu,na);
P.ReadFilecourse();
Loop1:
cout<<"请输入要选择的课程号:
";
charkh[10];
cin>>kh;
cout<<"是否查看任课教师信息(y/n):
";
charY_N;
Loop3:
cin>>Y_N;
if(Y_N=='Y'||Y_N=='y')
{chart[20];
Course*kc=sub.head;
while(kc!
=NULL)
{if(strcmp(kc->um,kh)==0)break;
kc=kc->next;
}
if(kc!
=NULL)
{strcpy(t,kc->kecheng.cteacher);
J.Search(t);
}
else
cout<<"没有此任课教师的信息!
"<}
else
if(Y_N!
='N'&&Y_N!
='n')
{cout<<"输入不正确,请重新输入:
";gotoLoop3;}
P.Addcourse(kh);
getchar();
cout<<"\n\t是否继续选课(y/n):
";
Loop2:
cin>>Y_N;
if(Y_N=='Y'||Y_N=='y')gotoLoop1;
else
if(Y_N=='N'||Y_N=='n')P.WriteFilecourse();
else
{cout<<"输入不正确,请重新输入:
";gotoLoop2;}
getchar();
cout<<"按任意键继续....";
getchar();
}
6.3学生选课端退选课程模块
在学生选课系统中选择2,进入退选课程模块,由voidtuixuan(XSP,charnu[],charna[]);函数完成。
首先调用XS:
:
ReadFilecourse();和XS:
:
Showcourse();输出已选课程,然后提示“请输入要退选的课程号:
”,此时可输入课程号(kh[10]),在调用XS:
:
Deletecourse(kh);XS:
:
WriteFilecourse();退选课程并保存。
此后会提示“是否继续退选课程(y/n):
”输入y,重复退课操作,输入n,则退出此模块。
关键代码如下:
voidtuixuan(XSP,charnu[],charna[])//退选课程功能函数
{system("cls");
P.set(nu,na);
P.ReadFilecourse();
Loop3:
if(P.head!
=NULL)
{system("cls");
P.Showcourse();
cout<<"请输入要退选的课程号:
";
charkh[10];
cin>>kh;
P.Deletecourse(kh);
P.WriteFilecourse();
getchar();
cout<<"是否继续退选课程(y/n):
";
charY_N;
Loop4:
cin>>Y_N;
if(Y_N=='Y'||Y_N=='y')gotoLoop3;
else
if(Y_N!
='N'&&Y_N!
='n')
{cout<<"输入不正确,请重新输入:
";gotoLoop4;}
}
elsecout<<"\n\n\t\t没有已选课程,不能退选!
"<getchar();
cout<<"按任意键继续....";
getchar();
}
6.4学生选课端查看已选课程模块
在学生选课系统中选择3,进入查看已选课程模块,由函数voidlookyixuan(XSP,charnu[],charna[]);实现。
通过调用XS:
:
ReadFilecourse();XS:
:
Showcourse();显示已选课程。
关键代码如下:
voidlookyixuan(XSP,charnu[],charna[])//查看学生已选课程函数
{system("cls");
P.set(nu,na);
P.ReadFilecourse();
P.Showcourse();
getchar();
cout<<"按任意键继续....";
getchar();
}
6.5学生选课端打印模块
在学生选课系统中选择4,进入打印模块,由函数voiddayin(XSP,charnu[],charna[]);实现。
先输出学生的信息,再调用XS:
:
Showcourse();输出已选课程,最后调用P.get_tcredit();输出总学分。
关键代码如下:
voiddayin(XSP,charnu[],charna[])//打印学生选课情况函数
{system("cls");
P.set(nu,na);
P.ReadFilecourse();
system("cls");
cout<<"学号:
"<"<cout<<"已选课程:
"<P.Showcourse();
cout<<"已选课程总学分:
"<
getchar();
getchar();
cout<<"按任意键继续....";
getchar();
}
6.6管理员密码验证模块
在主菜单中选择2,进入管理员密码验证。
通过函数voidpassword();实现。
首先提示输入管理员密码,再由用户输入密码,正确则进入选课系统管理端,错误则提示重新输入。
如果错误输入超过3次,就强制退出。
关键代码如下:
voidpassword()//密码检查功能函数
{intk=0,i;
charA[]="000000",B[10],a;
system("cls");
for(i=0;i<6;i++)
cout<printf("\t\t\t请输入管理员密码:
");
while(k<=2)
{i=0;
while
(1)
{a=getch();
if(a==13)break;
B[i]=a;
i++;
printf("*");
}
B[i]='\0';
if(strcmp(A,B)==0)return;
else
{k++;
if(k<3)
cout<<"\n\n\t\t\t密码错误!
请重新输入:
";
}
if(k>=3)
{cout<<"\n\n\t\t\t输入错误密码超过三次!
请按任意键退出..";
getch();
tuichu();
}}}
6.7管理端添加模块
该模块是对学生,课程,教师的增加操作。
由于三者功能相同,故通过函数模板templatevoidADD(TP);实现。
首先询问增加多少个(学生,课程,教师),再输入个数。
然后对每一个对象的详细信息进行输入。
如果已经存在该信息,则提示不能重复添加。
输入完成后保存到文件中。
关键代码如下:
template//增加功能函数模板
voidADD(TP)
{system("cls");
P.ReadFile();
intN,i;
cout<<"请问您需要增加几个:
";
cin>>N;
for(i=0;i{cout<<"第"<
"<P.Add();
cout<P.WriteFile();
getchar();
cout<<"按任意键继续....";
getchar();
}
6.8管理端查看模块
该模块是对学生,课程,教师的查看操作。
由于三者功能相同,故通过函数模板templatevoidLOOK(TP);实现。
调用各自的Display();函数,将所有信息输出。
关键代码如下:
template//查看功能函数模板
voidLOOK(TP)
{system("cls");
P.ReadFile();
P.Display();
getchar();
cout<<"按任意键继续....";
getchar();
}
6.9管理端删除模块
该模块是对学生,课程,教师的删除操作。
由于三者功能相同,故通过函数模板templatevoidDELETE(TP);实现。
首先输出(学生,课程,教师)所有信息,再调用各自的Delete();函数将对象删除。
最后将删除后的信息保存到文件中。
关键代码如下:
template//删除功能函数模板
voidDELETE(TP)
{system("cls");
P.ReadFile();
P.Display();
P.Delete();
P.WriteFile();
getchar();
cout<<"按任意键继续....";
getchar();
}
7系统测试
首先进入VC++6.0,打开工程“选课管理系统.dsw”,进入源程序运行。
运行程序后出现主菜单界面,如图7.1。
图7.1主菜单
输入“2”,进入管理员密码验证(管理员密码:
“000000”)。
当输入错误密码三次,如图7.2所示,输入正确密码就进入“选课管理系统”菜单界面,如图7.3所示。
图7.2错误密码验证
图7.3选课系统管理端菜单
输入“1”,进入增加学生界面。
再输入“4”,增加4个学生。
再根据提示输入学生相关信息,到第4个时输入第1个学生的学号,第4个学生将不能被添加,如图7.4。
图7.4增加学生
按任意键后,回到管理端菜单,输入“2”,查看所有学生信息,如图7.5所示。
图7.5查看所有学生
按任意键后,回到管理端菜单,输入“3”,进入删除学生界面,输入要删除的学生学号“*****”,完成对学生“zhangxiong”的删除,如图7.6。
当输入的学号没有时,如图7.7所示。
再查看学生,确认删除操作成功,如图7.8。
图7.6删除学生
图7.7删除的学生不存在
图7.8查看删除后的所有学生
按任意键返回选课管理菜单,输入“4”,进入增加课程界面。
再输入“4”,增加4门课程。
再根据提示输入课程相关信息,到第4个时输入第1个课程的课程号,第4个课程将不能被添加,如图7.9所示。
图7.9增加课程
按任意键返回管理端菜单,输入“5”,查看所有课程信息,如图7.10所示。
图7.10查看课程
按任意键回到管理端菜单,输入“6”,进入删除课程界面,输入要删除的课程号“10002”,此时没有此课程,如图7.11。
当输入的课程号“20002”时,如图7.12所示。
再查看课程,确认删除操作成功,如图7.13。
图7.11删除的课程不存在
图7.12删除课程
图7.13查看删除后的所有课程
按任意键返回选课管理菜单,输入“7”,进入增加教师界面。
再输入“4”,增加4名教师。
再根据提示输入教师相关信息,到第4个时输入第2个教师的教师号,第4个教师将不能被添加,如图7.14所示。
图7.14增加教师
按任意键返回管理端菜单,输入“8”,查看所有教师信息,如图7.15所示。
图7.15查看教师
按任意键回到管理端菜单,输入“9”,进入删除教师界面,输入要删除的教师证号“10000”,此时没有此教师,如图7.16。
当输入的课程号“30002”时,如图7.17所示。
再查看教师,确认删除操作成功,如图7.18。
图7.16删除的教师不存在
图7.17删除教师
图7.18查看删除后的所有教师
按任意键回到管理端菜单(可以在此再增加一些课程,教师等,以供选课时有更多的选择),输入“0”,返回主菜单,再输入“1”,进入学生选课系统登录界面,输入的学号和姓名不存在或不匹配,则如图7.19;输入的学号和姓名存在且匹配,则进入选课端菜单,如图7.20。
图7.19学生选课系统错误登录
图7.20学生选课系统菜单
在选课系统菜单中输入“1”,进入选课。
分别输入“20001”、“20002”、“20003”、“123456”测试选课。
如图7.21。
图7.21学生选课
按任意键返回选课系统菜单,输入“3”,查看已选课程,如图7.22。
图7.22查看已选课程
按任意键返回选课系统菜单,输入“4”,打印选课信息,如图7.23。
图7.23打印选课信息
按任意键返回选课系统菜单,输入“2”,进入退选课程界面。
输入“54321”,没有此课程,如图7.24,再输入“y”,然后输入“20002”,删除课程“Chinese”,如图7.25所示。
再输入“n”,返回选课系统菜单,输入“3”,查看退选课程后的已选课程,确认是否被删除,如图7.26。
图7.24退选的课程不存在
图7.25退选课程
图7.26退选课程后查看已选课程
按任意键返回,输入“0”,返回主菜单,再输入“0”,退出系统,如图7.27。
图7.27退出系统
通过上述测试,本系统实现了对学生、教师、课程的管理功能和学生自主选课、退选和打印选课信息等功能,能避免询问时对“y”和“n”的输入错误,从界面(下拉菜单)方面来说,也方便实用。
所以,此系统功能全部实现,符合要求。
8结论
刚拿到课程设计任务书时,我看了一下题目及要求,感觉这个课程设计很简单。
但是,到我开始做时,才发觉我学的知识太少,对链表,指针的应用显得特别的