《2022年C课程设计学生选课系统设计 2.pdf》由会员分享,可在线阅读,更多相关《2022年C课程设计学生选课系统设计 2.pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录1 系统需求分析. 22 总体设计 . 33 详细设计 . 44 界面设计与各功能模块实现. 55 系统调试 . 86 实验心得体会. 97 附:源程序 . 11 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 1 系统需求分析(1) 、本系统是针对高校学生的选修课程而设计,通过本系统高校学生可以很方便地进行自由选课。主要的问题描述是(功能要求):n 门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或
2、上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。(2) 、主要要求实现的功能如下:课程信息录入功能:能根据提示将各课程的相关信息进行输入并保存; 课程信息浏览功能:能将已经录入并保存的信息进行浏览;查询功能:可根据不同的查询方式查询相应的课程信息。其中查询方式有按学分查询和按课程性质查询两种;系统流程图如下:(3) 、输入输出要求:输入与功能对应的的数字判断有否开始执行相应功能结束是否名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页
3、- - - - - - - - - 系统以菜单方式工作。 用户根据每一个功能模块输入相应内容,然后进行相应的操作。 如需进行其他操作, 可返回主菜单。 输出的内容要有一个良好的界面,使用户看清楚明白。2 总体设计(1) 、系统功能分析本系统主要由一个Class类及其五个成员函数组成。课题所要求的功能由各个函数分别得以实现。首先,在Class类内定义了一些成员变量,用来保存课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,还对它的成员变量进行了声明,如:然后,在类外,通过作用域运算符将类内声明的成员函数定义,以及进行相应的操作,以实现相应的功能。主要包括功能要
4、求中的五大功能,即信息输入、信息浏览、按学分查询课程、按课程性质查询课程等。最后,在主函数中设置目录显示。用switch 瓜分不同的功能选项。系统根据用户输入的符号,调用相应的成员函数,完成功能的实现。(2) 、各个模块之间的关系如下图:学生选修课程系统设计Course类Main 函数Input ()Output()SearchByscore()SearchByKind()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - 3 详
5、细设计(1) 数据库需求分析该程序主要包含一个Class 类和一个 main() 函数。其中 Class 类中有Input(),OutPut(),Search(),SearchByscore(float),SearchByKind(string)函数来实现各功能。像在Input()信息输入函数中, ofstream outfile 创建一个文件输出流对象语句就要用到系统库函数fstream ,而 conio.h则是Console ( 键盘和屏幕 ) 输出输入函数的头文件,con - Console,io - input,output。 程 序中 各功能 函数 如 SearchBy (float
6、)按分 数 查 询和SearchByKind(string)按性质查询,显然是两个独立的函数,但其实现过程很像似。(2) 数据库概念结构设计( ER图)(3) 数据库逻辑结构设计课程授 课 学 时编号名称上级学时性质学 分总学分开课学期输 入输出显示查找名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - (4) 类层次图4 界面设计与各功能模块实现(1) 、功能实现的文件模块:在主函数中设置目录显示。设计一个友好、漂亮的界面,通过
7、switch 语句进行选择进入相应的功能模块, 建立一个 class类的对象 a,用对象名调用 class类的功能函数,恰当的使用清屏函数。 通过对象 a 调用相应的成员函数, 如 a.Input()、a.OutPut()、a.Search() 等等,这些公有函数成员就是这个系统要求设计的功能模块。各个功能函数的具体实现如下:、录入函数模块:首先,创建一个文件输出流对象outfile,打开文件,判断文件是否存在。通过 while 设一个无限循环,当给出指定条件时退出。在循环中,调用cout 函数来提示用户输入相应的信息,如课程编号、名称、课程性质、总学时、授课学课程课程编号课程名字课程性质总学
8、时授课学时实验或上机学时学分开课学期课程信息录入功能课程信息浏览功能查询功能按学分查询按课程性质查询学生选修课程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - 时、实验或上机学时、学分、开课学期等等。将需要的课程输入完毕之后,可根据提示再输入“ f” ,即可返回主菜单,重新进行功能的选择。该步骤界面设计操作图如下:(输入“ 1” ,根据提示输入课程信息:)显示(浏览)函数模块:该函数首先创建了输入流文件对象infile ,使用
9、语句 infile.open(file) ,然后定义一个 string 类型的二维数组,用来保存从文本内读取的信息,用for 循环保证保存不止一门课程的信息。 最后,cout 输出显示所有保存的信息。 操作界面图如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - 查找功能,即按学分查找和按课程性质查找,具体的实现如下:按课程性质查找:创建输入流文件对象infile ,然后定义一个 string 类型的二维数组 ,用来保存从文
10、本内读取的信息,比较用户输入的字符和保存的信息中那些课程的性质相对应,将相应的课程信息进行输出显示,界面设计操作图如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - 按课程学分查找: 原理同上, 如果用户输入的学分与所保存的信息想对应,则将对应的课程信息输出显示。输入“0”可返回主菜单。具体程序见源程序清单。该步骤界面显示如下:5 系统调试(1) 、 在查找功能函数当中,刚开始我输入的课程性质用数字代替,而后面我的查找函数在
11、进行输入比较时是用汉字进行比较的,这样就导致了查找错误,刚开始我找了好久也找不出来, 后来还是在同学的帮助下终于找到了这个错误,并改正。输出了正确的结果。(2) 、在 class类当中我刚开始把成员变量如课程性质只简单的设置为字符型 char,当在类外进行初始化时出现了错误,因为把要获得字符串的函数只简单的设置为字符型是不行的,它的返回得不到一个字符串,要把其设置string 类型或者数组类型,这样就可以通过编译了。(3) 、进行程序调试时,事先函数中没有用到清屏,导致界面繁琐不清晰。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
12、- 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - 后来在头文件中加了 #include, 又在程序中适当地添加了system(cls)语句,这才使得界面友好清晰。6 实验心得体会心得连续三天的课程设计终于要接近尾声了。虽然接下来还要面临紧张的期末考试,但总算可以稍微松一口气。说实话,每次做课程设计、写实验报告,我都好上火长痘好几天。本来因为上学期的课程设计没有认真做, 在网上下载了一篇类似的题目, 自己作了一些修改,便跑去答辩,被老师当众批评,心里羞愧得要死!心里暗下决心,这次试验报告一定要自己写,不管写得多差,只要自己很努力地认真在写
13、就好了。这次题目初看不是很难,一个类,一些成员变量,几个成员函数,将它们组合起来就 OK 了。可是越写下去,便觉得处处是难题。到最后感觉自己像处在一个大迷宫里,四周到处是出口,走近了一看,却发现那只是上面画着门的墙壁 我只会定义一个类和它的成员变量以及成员函数,但要求是要有 N 门课程呢,还要能显示你所输入 的课程 信 息,还 要按要求将分类不 同的信息挑选出来 天哪,这可怎么办呢?看来,要将自己输入的信息有记录地保存起来就好了。可是老师没教这个呀(后来才知道相关内容在C 语言教科书上有,上学期的课程设计也有涉及到, 但由于上次的没有认真做, 所以对该知识点没有印象) 。还跑去图书馆找资料,
14、找到了相关内容, 可是,答辩的时间也逼近了 第三天上午进实验室,问同学,发现已经有人将这个题目完整地做了出来,我不得不感叹人家的才思敏捷。也难怪哦,人家是脚踏实地,C 语言的基础打得好,谁让我上学期玩去了呢?呵 老师在实验室里鼓励大家积极答辩,我盯着自己的作品,这个连“半成品”都谈不上的程序,这能去答辩吗?老师也没要求必须答辩,要不,直接copy 他们的程序写了实验报告交差完事了! 但这不跟上学期一样了么?我这近三天的寝食难安不都白熬了么?去答辩吧,就算给自己的付出一个结果吧 老师很仁慈,我的那个程序对于题目要求根本没什么意义,也就是说我根本名师资料总结 - - -精品资料欢迎下载 - - -
15、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 17 页 - - - - - - - - - 没完成任务。估计老师是看我熬了这三天太可怜了,勉强让我过了。实验做完了,心情还是有点沉重,但没上次那样难过了。毕竟自己写的,通过思考,查资料,还是学到了不少东西的,对C 语言也进行了巩固。我要尽快将所缺的知识填补上来,然后再下次的课程设计中打个漂亮的胜仗!名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17
16、 页 - - - - - - - - - 7 附:源程序#include #include #include #include #include using namespace std; class Course private: int courseNumber; string courseName; string courseKind; int coursePeriod; int schoolPeriod; int experimentPeriod; float credithour; string courseterm; public: void CourseInfoInput(); /
17、信息输入void CourseInfoOutPut(); /信息输出void Search(); /查找信息void SearchByCredithour(float); / 按照学分查找void SearchByCourseKind(string); / 按照课程;类型查找; const char* coursefile=C:course.txt; / 将 课 程 信 息 定 位 到C盘 下 的course.txt中! ! ! ! ! ! ! ! !void Course:CourseInfoInput() /课程信息的录入 ofstream outcoursefile; /创建一个文件输出
18、流对象outcoursefile.open(coursefile); /打开文件if(!outcoursefile) /判断文件是否存在 cout 文件打开失败! endl; return ; while(1) /无限循环,给出指定条件退出 cout *课程信息*n; cout 按任意 键开始 信息录入名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 17 页 - - - - - - - - - n; cout 输 入q 退 出n; if(getch()=q) break
19、; coutcourseNumber; coutcourseName; coutcourseKind; coutcoursePeriod; coutschoolPeriod; coutexperimentPeriod; coutcredithour; coutcourseterm; outcoursefilecourseNumber courseName courseKind coursePeriod schoolPeriod experimentPeriod credithour endl; outcoursefile.close(); /关闭输出流文件 void Course:Course
20、InfoOutPut() /课程信息的浏览 ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile); /打开if(!incoursefile) /判断文件存在 cout 文件读取失败 ; return ; cout 课程编号| 课程名称| 课程性质| 总学时| 授课学时| 实验上机学时| 学分|开课学期 n; string arrcourse100100; /定义一个string 类型的二维数组,用来保存从文本内读取的信息int line=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
21、 - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 17 页 - - - - - - - - - memset(arrcourse,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:Search
22、ByCredithour(float tempch) ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile); /打开if(!incoursefile) /判断文件存在 cout arrcourseline0arrcourseline1arrcourseline2arrcourseline3 arrcourseline4arrcourseline5arrcourseline6; /文件流读取数据line+; cout 课程编号| 课程名称| 课程性质| 总学时| 授课学时| 实验上机学时| 学分|开课学期 n; 名师资料总结
23、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 17 页 - - - - - - - - - for(int i=0;iline;i+) if(atof(arrcoursei6.c_str()=tempch) /比较 cout arrcoursei0 t arrcoursei1 t arrcoursei2 t arrcoursei3 t arrcoursei4 t arrcoursei5 t arrcoursei6n- endl; cout nn; incoursefile.clo
24、se(); void Course:SearchByCourseKind(string strtemp)/ 课程类型查询 ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile); /打开if(!incoursefile) /判断文件存在 cout arrcourseline0arrcourseline1arrcourseline2arrcourseline3 arrcourseline4arrcourseline5arrcourseline6; line+; cout 课程编号| 课程名称| 课程性质| 总学时| 授课学时|
25、 实验上机学时| 学分|开课学期 n; for(int i=0;iline;i+) if(arrcoursei2=strtemp) cout arrcoursei0 t arrcoursei1 t arrcoursei2t arrcoursei3 t arrcoursei4 t arrcoursei5 tarrcoursei6n- endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 17 页 - - - - - - - - - cout nn; void Cou
26、rse:Search() while(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
27、; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 17 页 - - - - - - - - - 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.Cour
28、seInfoOutPut(); break; case 3: Excourse.Search(); break; case 0: exit(0); return 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 17 页 - - - - - - - - - 课程设计评分表课题名称:项目评价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩教师签名:日期:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 17 页 - - - - - - - - -