1、目录1系统需求分析142总体设计153具体设计164界面设计和各功效模块实现195 系统调试236 试验心得体会247附:源程序251系统需求分析(1)、本系统是针对高校学生选修课程而设计,经过本系统高校学生能够很方便地进行自由选课。关键问题描述是(功效要求):n门课程,每门课程有课程编号,课程名称,课程性质,总课时,讲课课时,试验或上机课时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。(2)、关键要求实现功效以下: 课程信息录入功效:能依据提醒将各课程相关信息进行输入并保留; 课程信息浏览功效:能将已经录入并保留信息进行浏览;查询功效:可依据不一样查询方法查询对应课程
2、信息。其中查询方法有按学分查询和按课程性质查询两种;系统步骤图以下:输入和功效对应数字判定有否开始实施对应功效结束是否(3)、输入输出要求: 系统以菜单方法工作。用户依据每一个功效模块输入对应内容,然后进行对应操作。如需进行其它操作,可返回主菜单。输出内容要有一个良好界面,使用户看清楚明白。2总体设计(1)、系统功效分析本系统关键由一个Class类及其五个组员函数组成。课题所要求功效由各个函数分别得以实现。首先,在Class类内定义了部分组员变量,用来保留课程编号,课程名称,课程性质,总课时,讲课课时,试验或上机课时,学分,开课学期等信息,还对它组员变量进行了申明,如:然后,在类外,经过作用域
3、运算符将类内申明组员函数定义,和进行对应操作,以实现对应功效。关键包含功效要求中五大功效,即信息输入、信息浏览、按学分查询课程、按课程性质查询课程等。最终,在主函数中设置目录显示。用switch瓜分不一样功效选项。系统依据用户输入符号,调用对应组员函数,完成功效实现。(2)、各个模块之间关系以下图:学生选修课程系统设计Course类Main函数Input()Output() SearchByscore()SearchByKind()3具体设计(1) 数据库需求分析该程序关键包含一个Class类和一个main()函数。其中Class类中有Input(),OutPut(),Search(),Sea
4、rchByscore(float),SearchByKind(string)函数来实现各功效。像在Input()信息输入函数中,ofstream outfile 创建一个文件输出流对象语句就要用到系统库函数fstream,而conio.h则是 Console (键盘和屏幕) 输出输入函数头文件,con - Console,io - input,output。程序中各功效函数如SearchBy (float)按分数查询和 SearchByKind(string)按性质查询,显然是两个独立函数,但其实现过程很像似。(2) 数据库概念结构设计(ER图)课程讲课课时时编号名称上级课时性质学分时 时总学
5、分开课学期输入入输出显示查找(3) 数据库逻辑结构设计(4) 类层次图课程课程编号课程名字课程性质总课时讲课课时试验或上机课时 学分开课学期课程信息录入功效课程信息浏览功效查询功效按学分查询按课程性质查询学生选修课程4界面设计和各功效模块实现(1)、功效实现文件模块: 在主函数中设置目录显示。设计一个友好、漂亮界面,经过switch语句进行选择进入对应功效模块,建立一个class类对象a,用对象名调用class类功效函数,合适使用清屏函数。经过对象a调用对应组员函数,如a.Input()、a.OutPut()、a.Search()等等,这些公有函数组员就是这个系统要求设计功效模块。各个功效函数
6、具体实现以下: 、 录入函数模块:首先,创建一个文件输出流对象outfile,打开文件,判定文件是否存在。经过while设一个无限循环,当给出指定条件时退出。在循环中,调用cout函数来提醒用户输入对应信息,如课程编号、名称、课程性质、总课时、讲课课时、试验或上机课时、学分、开课学期等等。将需要课程输入完成以后,可依据提醒再输入“f”,即可返回主菜单,重新进行功效选择。该步骤界面设计操作图以下:(输入“1”,依据提醒输入课程信息:)显示(浏览)函数模块:该函数首先创建了输入流文件对象infile,使用语句infile.open(file),然后定义一个string类型二维数组,用来保留从文本内
7、读取信息,用for循环境保护证保留不止一门课程信息。最终,cout输出显示全部保留信息。操作界面图以下:查找功效,即按学分查找和按课程性质查找,具体实现以下:按课程性质查找:创建输入流文件对象infile,然后定义一个string类型二维数组,用来保留从文本内读取信息,比较用户输入字符和保留信息中那些课程性质相对应,将对应课程信息进行输出显示,界面设计操作图以下:按课程学分查找:原理同上,假如用户输入学分和所保留信息想对应,则将对应课程信息输出显示。输入“0”可返回主菜单。具体程序见源程序清单。该步骤界面显示以下:5 系统调试(1)、 在查找功效函数当中,刚开始我输入课程性质用数字替换,以后面
8、我查找函数在进行输入比较时是用汉字进行比较,这么就造成了查找错误,刚开始我找了很久也找不出来,以后还是在同学帮助下最终找到了这个错误,并更正。输出了正确结果。(2)、在class类当中我刚开始把组员变量如课程性质只简单设置为字符型char,当在类外进行初始化时出现了错误,因为把要取得字符串函数只简单设置为字符型是不行,它返回得不到一个字符串,要把其设置string类型或数组类型,这么就能够经过编译了。 (3)、进行程序调试时,事先函数中没有用到清屏,造成界面繁琐不清楚。以后在头文件中加了#include,又在程序中合适地添加了system(cls)语句,这才使得界面友好清楚。6 试验心得体会
9、心得 连续三天课程设计最终要靠近尾声了。即使接下来还要面临担心期末考试,但总算能够稍微松一口气。说实话,每次做课程设计、写试验汇报,我全部好上火长痘好几天。原来因为上学期课程设计没有认真做,在网上下载了一篇类似题目,自己作了部分修改,便跑去答辩,被老师当众批评,心里惭愧得要死!心里暗下决心,这次试验汇报一定要自己写,不管写得多差,只要自己很努力地认真在写就好了。这次题目初看不是极难,一个类,部分组员变量,多个组员函数,将它们组合起来就OK了。可是越写下去,便认为四处是难题。到最终感觉自己像处于一个大迷宫里,四面四处是出口,走近了一看,却发觉那只是上面画着门墙壁我只会定义一个类和它组员变量和组员
10、函数,但要求是要有N门课程呢,还要能显示你所输入课程信息,还要按要求将分类不一样信息挑选出来天哪,这可怎么办呢?看来,要将自己输入信息有统计地保留起来就好了。可是老师没教这个呀(以后才知道相关内容在C语言教科书上有,上学期课程设计也有包含到,但因为上次没有认真做,所以对该知识点没有印象)。还跑去图书馆找资料,找到了相关内容,可是,答辩时间也迫近了第三天早晨进试验室,问同学,发觉已经有些人将这个题目完整地做了出来,我不得不感叹人家才思灵敏。也难怪哦,人家是脚扎实地,C语言基础打得好,谁让我上学期玩去了呢?呵老师在试验室里激励大家主动答辩,我盯着自己作品,这个连“半成品”全部谈不上程序,这能去答辩
11、吗?老师也没要求必需答辩,要不,直接copy她们程序写了试验汇报交差完事了!但这不跟上学期一样了么?我这近三天寝食难安不全部白熬了么?去答辩吧,就算给自己付出一个结果吧老师很仁慈,我那个程序对于题目要求根本没什么意义,也就是说我根本没完成任务。估量老师是看我熬了这三天太可怜了,勉强让我过了。试验做完了,心情还是有点沉重,但没上次那样难过了。毕竟自己写,经过思索,查资料,还是学到了不少东西,对C语言也进行了巩固。我要立即将所缺知识填补上来,然后再下次课程设计中打个漂亮胜仗!7附:源程序#include#include#include#include#includeusing namespace
12、std;class Courseprivate:int courseNumber;string courseName;string courseKind;int coursePeriod;int schoolPeriod;int experimentPeriod;float credithour;string courseterm;public:void CourseInfoInput(); /信息输入void CourseInfoOutPut(); /信息输出void Search(); /查找信息void SearchByCredithour(float); /根据学分查找void Sea
13、rchByCourseKind(string); /根据课程;类型查找;const char* coursefile=C:course.txt; /将课程信息定位到C盘下course.txt中!void Course:CourseInfoInput() /课程信息录入ofstream outcoursefile; /创建一个文件输出流对象outcoursefile.open(coursefile); /打开文件if(!outcoursefile) /判定文件是否存在cout 文件打开失败! endl;return ;while(1) /无限循环,给出指定条件退出cout *课程信息*n;cou
14、t 按任意键开始信息录入 n;cout 输入q退出 n;if(getch()=q)break;coutcourseNumber;coutcourseName;coutcourseKind;coutcoursePeriod;coutschoolPeriod;coutexperimentPeriod;coutcredithour; coutcourseterm;outcoursefilecourseNumber courseName courseKind coursePeriod schoolPeriod experimentPeriod credithour endl;outcoursefile
15、.close(); /关闭输出流文件void Course:CourseInfoOutPut() /课程信息浏览ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile); /打开if(!incoursefile) /判定文件存在cout 文件读取失败;return ;cout 课程编号 | 课程名称 | 课程性质 | 总课时 | 讲课课时 | 试验上机课时 | 学分|开课学期n;string arrcourse100100; /定义一个string类型二维数组,用来保留从文本内读取信息int line=0;memset(arr
16、course,0,sizeof(arrcourse); /将数组清空while(!incoursefile.eof() /文件不为空条件设置 for(int j=0;jarrcourselinej;line+; for(int i=0;iline;i+)for(int j=0;j7;j+)cout arrcourseij t;cout endl;incoursefile.close();void Course:SearchByCredithour(float tempch)ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile
17、); /打开if(!incoursefile) /判定文件存在cout arrcourseline0arrcourseline1arrcourseline2arrcourseline3arrcourseline4arrcourseline5arrcourseline6; /文件流读取数据line+;cout 课程编号 | 课程名称 | 课程性质 | 总课时 | 讲课课时 | 试验上机课时 | 学分|开课学期n;for(int i=0;iline;i+)if(atof(arrcoursei6.c_str()=tempch) /比较cout arrcoursei0 t arrcoursei1 t
18、arrcoursei2 t arrcoursei3 t arrcoursei4 t arrcoursei5 t arrcoursei6n- endl;cout nn;incoursefile.close();void Course:SearchByCourseKind(string strtemp)/课程类型查询ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile); /打开if(!incoursefile) /判定文件存在cout arrcourseline0arrcourseline1arrcourseline2arrc
19、ourseline3arrcourseline4arrcourseline5arrcourseline6;line+;cout 课程编号 | 课程名称 | 课程性质 | 总课时 | 讲课课时 | 试验上机课时 | 学分|开课学期n;for(int i=0;iline;i+)if(arrcoursei2=strtemp)cout arrcoursei0 t arrcoursei1 t arrcoursei2t arrcoursei3 t arrcoursei4 t arrcoursei5 tarrcoursei6n- endl;cout nn;void Course:Search()while(
20、1)cout 选择查询方法: endl;cout (1).按课程类型查询 endl;cout (2).按学分查询 endl;cout (0).返回i;switch(i)case 1:cout strtmp;SearchByCourseKind(strtmp);break;case 2:cout ftemp;SearchByCredithour(ftemp);break;if(i=0)break;int main()Course Excourse;while(1)cout *n;cout * 学生选课系统 *n;cout * 请选择操作 *n;cout * (1).录入课程信息 *n;cout * (2).浏览课程信息 *n;cout * (3).查询课程信息 *n;cout * (0).退出系统 *n;cout *;cout i;switch(i)case 1:Excourse.CourseInfoInput();break;case 2:Excourse.CourseInfoOutPut();break;case 3:Excourse.Search();break;case 0:exit(0);return 1;课程设计评分表课题名称: 项 目评 价设计方案合理性和发明性设计和调试结果设计说明书质量答辩陈说和回复问题情况课程设计周表现情况综合成绩 老师署名: 日 期: