C++课程设计学生选课管理系统说明书.doc
数学与计算机学院课程设计说明书课 程 名 称: 面向对象程序设计-课程设计 课 程 代 码: 题 目: 学生选课管理系统 年级/专业/班: 2009级信科1班 学 生 姓 名: 学 号: 312009070102119 开 始 时 间: 2010 年 05 月 23 日完 成 时 间: 2010 年 06 月 20 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书撰写质量(45)总 分(100)指导教师签名: 年 月 日目 录1 引 言 11.1问题的提出 11.2任务与分析 12 程序的主要功能12.1添加功能12.2删除功能22.3查看功能22.4选课功能22.5退选功能22.6打印功能23 程序运行平台24 总体设计25 程序类的说明36 模块分析66.1 选课端登录验证模块66.2 学生选课端选课模块66.3 学生选课端退选课程模块96.4 学生选课端查看已选课程模块106.5 学生选课端打印模块116.6 管理员密码验证模块126.7 管理端增加模块136.8 管理端查看模块146.9 管理端删除模块147 系统测试158 结论26致谢27参考文献27 摘 要 随着计算机的普及,各高校均采用计算机进行学生选课。而对学生选课相关信息的管理由学生选课管理系统实现。经过分析其学生选课端和系统管理端的各项功能,利用面向对象的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类的声明 class subject / 课程信息类Course *head; /头指针Course *p; /当前指针public:subject()head=p=NULL; ; void Add(); /增加课程void Delete(); /删除课程int Search(char nu); /根据课程号查找课程void ReadFile(); /从文件中读取课程信息 void WriteFile(); /向文件写入课程信息 void Display(); /在屏幕中输出全部课程信息 friend XS;friend JS; friend void xuanke(XS P,char nu,char na);· JS类的声明 class JS /教师信息类 Teacher *head; /头指针Teacher *p; /当前指针public:JS()head=p=NULL; void Add(); /增加教师void Delete(); /删除教师void Search(char na); /通过教师姓名查找任课教师int Search1(char nu); /通过教师号查找教师 void ReadFile(); /从文件中读取教师信息 void WriteFile(); /向文件写入教师信息 void Display(); /在屏幕中输出全部教师信息friend XS;· stu类的声明 class stu /学生信息类 Student *head; /头指针 Student *p; /当前指针public:stu()head=p=NULL;void Add(); /增加学生void Delete(); /删除学生int Search(char nu,char na); /按学生学号和姓名查找 int Search(char nu); /按学生学号查找void ReadFile(); /将所有学生的信息写入文件 void WriteFile(); /从文件读出学生信息 void Display(); /显示所有学生 friend XS; · XS类的声明class XS /学生类char num10; /学号char name20; /姓名Course *head; /已选课程头指针 Course *p; /已选课程当前指针float tcredit; /已选课程总学分public:XS()head=p=NULL;tcredit=0;void set(char nu,char na )strcpy(num,nu); strcpy(name,na); void Addcourse(char nu); /学生选课int Search(char nu); /按课程号查找以选课程void Deletecourse(char nu); /退选void Showcourse(); /显示已选课程float get_tcredit(); /获取已选课程总学分void ReadFilecourse(); /读取已选课程void WriteFilecourse(); /将已选课程写入文件 friend void tuixuan(XS P,char nu,char na); 6 模块分析6.1 选课端登录验证模块在主菜单选择1时,便进入选课端登录验证,该模块会提示用户输入学号(nu10)和姓名(na20),当输入完成后,调用 int stu:Search(nu,na);,当返回值为0,则输出提示信息“对不起,学号或姓名输入错误!按任意键返回.”,然后返回主菜单;当返回值为1,则登录学生选课系统。关键代码如下:P0: int b1,b2,b0=menu(); stu p1;subject p2;JS p3; XS p; if(b0=1)system("cls");p1.ReadFile();char nu10,na20;cout<<"nntt请输入您的学号:"cin>>nu;cout<<"nntt请输入您的姓名:"cin>>na;if(p1.Search(nu,na)=0)cout<<"nntt对不起,学号或姓名输入错误!按任意键返回."getchar();getchar();goto P0;elseP1:b1=menu1();6.2 学生选课端选课模块在学生选课系统中选择1,进入选课模块。此时调用void xuanke(XS P,char nu,char na);函数,此函数首先调用subject:ReadFile(); subject:Display();将所有的课程输出来,并提示“请输入要选择的课程号:”,然后输入课程号(kh10),此时会提示“是否查看任课教师信息(y/n):”,输入y,将输出任课教师信息,如果没有此教师信息,输出“没有此任课教师的信息!”,当输入n,则不输出教师信息。此时调用XS:Addcourse(kh);选课,再输出“是否继续选课(y/n): ”如输入y,重复以上选课操作,当输入n,则调用XS:WriteFilecourse();保存已选课程。关键代码如下:void xuanke(XS P,char nu,char na)/选课功能函数system("cls"); JS J;J.ReadFile(); subject sub;sub.ReadFile(); sub.Display();P.set(nu,na);P.ReadFilecourse ();Loop1:cout<<"请输入要选择的课程号:"char kh10;cin>>kh; cout<<"是否查看任课教师信息(y/n): "char Y_N;Loop3:cin>>Y_N;if(Y_N='Y'|Y_N='y')char t20;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);elsecout<<"没有此任课教师的信息!"<<endl;else if(Y_N!='N'&&Y_N!='n') cout<<"输入不正确,请重新输入:"goto Loop3;P.Addcourse(kh);getchar();cout<<"nt是否继续选课(y/n): "Loop2:cin>>Y_N;if(Y_N='Y'|Y_N='y')goto Loop1;else if(Y_N='N'|Y_N='n')P.WriteFilecourse();else cout<<"输入不正确,请重新输入:"goto Loop2;getchar();cout<<"按任意键继续."getchar(); 6.3 学生选课端退选课程模块在学生选课系统中选择2,进入退选课程模块,由void tuixuan(XS P,char nu,char na);函数完成。首先调用XS:ReadFilecourse ();和XS:Showcourse();输出已选课程,然后提示“请输入要退选的课程号:”,此时可输入课程号(kh10),在调用XS:Deletecourse(kh);XS:WriteFilecourse();退选课程并保存。此后会提示“是否继续退选课程(y/n): ”输入y,重复退课操作,输入n,则退出此模块。关键代码如下:void tuixuan(XS P,char nu,char na)/退选课程功能函数system("cls"); P.set(nu,na);P.ReadFilecourse ();Loop3:if(P.head !=NULL)system("cls");P.Showcourse();cout<<"请输入要退选的课程号:"char kh10;cin>>kh;P.Deletecourse(kh);P.WriteFilecourse();getchar();cout<<"是否继续退选课程(y/n): "char Y_N;Loop4:cin>>Y_N;if(Y_N='Y'|Y_N='y')goto Loop3;else if(Y_N!='N'&&Y_N!='n')cout<<"输入不正确,请重新输入:"goto Loop4;else cout<<"nntt没有已选课程,不能退选!"<<endl<<endl;getchar();cout<<"按任意键继续."getchar();6.4 学生选课端查看已选课程模块在学生选课系统中选择3,进入查看已选课程模块,由函数void lookyixuan(XS P,char nu,char na);实现。通过调用XS:ReadFilecourse ();XS:Showcourse();显示已选课程。关键代码如下:void lookyixuan(XS P,char nu,char na)/查看学生已选课程函数system("cls");P.set(nu,na);P.ReadFilecourse ();P.Showcourse();getchar();cout<<"按任意键继续."getchar();6.5 学生选课端打印模块在学生选课系统中选择4,进入打印模块,由函数void dayin(XS P,char nu,char na);实现。先输出学生的信息,再调用XS:Showcourse();输出已选课程,最后调用P.get_tcredit();输出总学分。关键代码如下:void dayin(XS P,char nu,char na)/打印学生选课情况函数system("cls");P.set(nu,na);P.ReadFilecourse ();system("cls");cout<<"学号:"<<nu<<"t姓名:"<<na<<endl<<endl;cout<<"已选课程:"<<endl<<endl;P.Showcourse();cout<<"已选课程总学分:"<<P.get_tcredit()<<endl<<endl;getchar();getchar();cout<<"按任意键继续."getchar();6.6 管理员密码验证模块在主菜单中选择2,进入管理员密码验证。通过函数void password();实现。首先提示输入管理员密码,再由用户输入密码,正确则进入选课系统管理端,错误则提示重新输入。如果错误输入超过3次,就强制退出。关键代码如下:void password()/密码检查功能函数int k=0,i;char A="000000",B10,a; system("cls");for(i=0;i<6;i+)cout<<endl;printf("ttt请输入管理员密码: ");while(k<=2)i=0;while(1)a=getch();if(a=13)break;Bi=a;i+;printf("*");Bi='0'if(strcmp(A,B)=0)return;elsek+;if(k<3)cout<<"nnttt密码错误!请重新输入: "if(k>=3)cout<<"nnttt输入错误密码超过三次!请按任意键退出."getch();tuichu();6.7 管理端添加模块 该模块是对学生,课程,教师的增加操作。由于三者功能相同,故通过函数模板template <class T> void ADD(T P);实现。首先询问增加多少个(学生,课程,教师),再输入个数。然后对每一个对象的详细信息进行输入。如果已经存在该信息,则提示不能重复添加。输入完成后保存到文件中。关键代码如下:template <class T>/增加功能函数模板void ADD(T P)system("cls");P.ReadFile();int N,i;cout<<"请问您需要增加几个:"cin>>N;for(i=0;i<N;i+)cout<<"第"<<i+1<<"个: "<<endl;P.Add();cout<<endl;P.WriteFile();getchar();cout<<"按任意键继续."getchar(); 6.8 管理端查看模块该模块是对学生,课程,教师的查看操作。由于三者功能相同,故通过函数模板template <class T> void LOOK (T P);实现。调用各自的Display();函数,将所有信息输出。关键代码如下:template <class T>/查看功能函数模板void LOOK(T P) system("cls");P.ReadFile();P.Display();getchar();cout<<"按任意键继续."getchar(); 6.9 管理端删除模块该模块是对学生,课程,教师的删除操作。由于三者功能相同,故通过函数模板template <class T> void DELETE(T P);实现。首先输出(学生,课程,教师)所有信息,再调用各自的Delete();函数将对象删除。最后将删除后的信息保存到文件中。关键代码如下:template <class T>/删除功能函数模板void DELETE(T P)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”,进入删除学生界面,输入要删除的学生学号“10002”,完成对学生“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 结论刚拿到课程设计任务书时,我看了一下题目及要求,感觉这个课程设计很简单。但是,到我开始做时,才发觉我学的知识太少,对链表,指针的应用显得特别的生疏,频繁出错。直到快做完了才发现有些功能无法实现。这时,我对课程设计程序束手无策。经过两天的调试和请教,终于下定决心重新起草。通过互联网和翻阅书籍,我学到了很多东西,最终有了清晰的思路去完成“学生选课管理系统”的设计和编程。费了九牛二虎之力,终于实现了其基本功能,但是还不够完善。我又请教了几个同学,接受了他们的一些建议,对程序进行了完善,并最终让我比较满意了。开始我没有使用函数模板,使程序的代码相当冗长,当用函数模板后,使程序简洁了不少,结构也更清晰了,这使我感觉到很欣慰。当然,由于现在知识能力的限制,程序还存在些许不足,有待改进,比如对程序运行时内存空间的清理做得不是很好。如果有更多的时间,我相信我会将其做得更完善。通过本次课程设计,让我体会到了自己做出一个软件后的乐趣,让我对C+充满了好奇心与无比的兴趣。除此之外,此次课程设计提高了我学习计算机编程的信心。在以后的学习中,我要把做C+课程设计体现出来的临危不惧、知难而进、不耻下问、主动积极、持之以恒的态度保持并发扬,这样,离成功就不远了。致谢首先我要感谢为我细心讲解课程设计的贾年老师,在贾年老师的精心带领下,让我顺利完成了课程设计。此外,我还要感谢所有给予我无私帮助的同学和给我良好建议的同学,感谢他们不吝赐教,让我获益匪浅。参考文献1 谭浩强. C程序设计(第三版). 清华大学出版社,2009.052朱立华,朱建,俞琼. 面向对象程序设计及C+. 人民邮电出版社,2010.12