




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++课程设计-学生选课系统设计C++课程设计-学生选课系统设计/C++课程设计-学生选课系统设计目录1系统需求分析 142总体设计 153详细设计 164界面设计与各功能模块实现 195系统调试 236实验心得体会 247附:源程序 251系统需求分析(1)、本系统是针对高校学生的选修课程而设计,通过本系统高校学生可以很方便地进行自由选课。主要的问题描述是(功能要求):n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。(2)、主要要求实现的功能如下:①
课程信息录入功能:能根据提示将各课程的相关信息进行输入并保存;②课程信息浏览功能:能将已经录入并保存的信息进行浏览;③
查询功能:可根据不同的查询方式查询相应的课程信息。其中查询方式有按学分查询和按课程性质查询两种;系统流程图如下:输入与功能对应的的数字输入与功能对应的的数字判断有否开始执行相应功能结束是否(3)、输入输出要求:系统以菜单方式工作。用户根据每一个功能模块输入相应内容,然后进行相应的操作。如需进行其他操作,可返回主菜单。输出的内容要有一个良好的界面,使用户看清楚明白。2总体设计(1)、系统功能分析本系统主要由一个Class类与其五个成员函数组成。课题所要求的功能由各个函数分别得以实现。首先,在Class类内定义了一些成员变量,用来保存课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,还对它的成员变量进行了声明,如:然后,在类外,通过作用域运算符将类内声明的成员函数定义,以与进行相应的操作,以实现相应的功能。主要包括功能要求中的五大功能,即信息输入、信息浏览、按学分查询课程、按课程性质查询课程等。最后,在主函数中设置目录显示。用switch瓜分不同的功能选项。系统根据用户输入的符号,调用相应的成员函数,完成功能的实现。(2)、各个模块之间的关系如下图:学生选修课程系统设计学生选修课程系统设计Course类M函数Input()Output()SearchByscore()SearchByKind()3详细设计 数据库需求分析该程序主要包含一个Class类和一个main()函数。其中Class类中有Input(),OutPut(),Search(),SearchByscore(float),SearchByKind(string)函数来实现各功能。像在Input()信息输入函数中,ofstreamoutfile创建一个文件输出流对象语句就要用到系统库函数fstream,而conio.h则是Console(键盘和屏幕)输出输入函数的头文件,con-Console,io--input,output。程序中各功能函数如SearchBy(float)按分数查询和SearchByKind(string)按性质查询,显然是两个独立的函数,但其实现过程很像似。数据库概念结构设计(E-R图)课程课程授课学时时编号名称上级学时性质学分时时总学分开课学期输入入输出显示查找数据库逻辑结构设计类层次图课程课程课程编号课程名字课程性质总学时授课学时实验或上机学时学分开课学期课程信息录入功能课程信息浏览功能查询功能按学分查询按课程性质查询学生选修课程4界面设计与各功能模块实现(1)、功能实现的文件模块:在主函数中设置目录显示。设计一个友好、漂亮的界面,通过switch语句进行选择进入相应的功能模块,建立一个class类的对象a,用对象名调用class类的功能函数,恰当的使用清屏函数。通过对象a调用相应的成员函数,如a.Input()、a.OutPut()、a.Search()等等,这些公有函数成员就是这个系统要求设计的功能模块。各个功能函数的具体实现如下:录入函数模块:首先,创建一个文件输出流对象outfile,打开文件,判断文件是否存在。通过while设一个无限循环,当给出指定条件时退出。在循环中,调用cout函数来提示用户输入相应的信息,如课程编号、名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期等等。将需要的课程输入完毕之后,可根据提示再输入“f”,即可返回主菜单,重新进行功能的选择。该步骤界面设计操作图如下:(输入“1”显示(浏览)函数模块:该函数首先创建了输入流文件对象infile,使用语句infile.open(file),然后定义一个string类型的二维数组,用来保存从文本内读取的信息,用for循环保证保存不止一门课程的信息。最后,cout输出显示所有保存的信息。操作界面图如下:查找功能,即按学分查找和按课程性质查找,具体的实现如下:按课程性质查找:创建输入流文件对象infile,然后定义一个string类型的二维数组,用来保存从文本内读取的信息,比较用户输入的字符和保存的信息中那些课程的性质相对应,将相应的课程信息进行输出显示,界面设计操作图如下:按课程学分查找:原理同上,如果用户输入的学分与所保存的信息想对应,则将对应的课程信息输出显示。输入“0”可返回主菜单。具体程序见源程序清单。该步骤界面显示如下:5系统调试(1)、在查找功能函数当中,刚开始我输入的课程性质用数字代替,而后面我的查找函数在进行输入比较时是用汉字进行比较的,这样就导致了查找错误,刚开始我找了好久也找不出来,后来还是在同学的帮助下终于找到了这个错误,并改正。输出了正确的结果。(2)、在class类当中我刚开始把成员变量如课程性质只简单的设置为字符型char,当在类外进行初始化时出现了错误,因为把要获得字符串的函数只简单的设置为字符型是不行的,它的返回得不到一个字符串,要把其设置string类型或者数组类型,这样就可以通过编译了。(3)、进行程序调试时,事先函数中没有用到清屏,导致界面繁琐不清晰。后来在头文件中加了#include<windows.h>,又在程序中适当地添加了system("cls")语句,这才使得界面友好清晰。6实验心得体会心得连续三天的课程设计终于要接近尾声了。虽然接下来还要面临紧张的期末考试,但总算可以稍微松一口气。说实话,每次做课程设计、写实验报告,我都好上火长痘好几天。本来因为上学期的课程设计没有认真做,在网上下载了一篇类似的题目,自己作了一些修改,便跑去答辩,被老师当众批评,心里羞愧得要死!心里暗下决心,这次试验报告一定要自己写,不管写得多差,只要自己很努力地认真在写就好了。这次题目初看不是很难,一个类,一些成员变量,几个成员函数,将它们组合起来就OK了。可是越写下去,便觉得处处是难题。到最后感觉自己像处在一个大迷宫里,四周到处是出口,走近了一看,却发现那只是上面画着门的墙壁······我只会定义一个类和它的成员变量以与成员函数,但要求是要有N门课程呢,还要能显示你所输入的课程信息,还要按要求将分类不同的信息挑选出来······天哪,这可怎么办呢?看来,要将自己输入的信息有记录地保存起来就好了。可是老师没教这个呀(后来才知道相关内容在C语言教科书上有,上学期的课程设计也有涉与到,但由于上次的没有认真做,所以对该知识点没有印象)。还跑去图书馆找资料,找到了相关内容,可是,答辩的时间也逼近了······第三天上午进实验室,问同学,发现已经有人将这个题目完整地做了出来,我不得不感叹人家的才思敏捷。也难怪哦,人家是脚踏实地,C语言的基础打得好,谁让我上学期玩去了呢?呵······老师在实验室里鼓励大家积极答辩,我盯着自己的作品,这个连“半成品”都谈不上的程序,这能去答辩吗?老师也没要求必须答辩,要不,直接copy他们的程序写了实验报告交差完事了!但这不跟上学期一样了么?我这近三天的寝食难安不都白熬了么?去答辩吧,就算给自己的付出一个结果吧······老师很仁慈,我的那个程序对于题目要求根本没什么意义,也就是说我根本没完成任务。估计老师是看我熬了这三天太可怜了,勉强让我过了。实验做完了,心情还是有点沉重,但没上次那样难过了。毕竟自己写的,通过思考,查资料,还是学到了不少东西的,对C语言也进行了巩固。我要尽快将所缺的知识填补上来,然后再下次的课程设计中打个漂亮的胜仗!7附:源程序#include<conio.h>#include<stdlib.h>#include<iostream>#include<fstream>#include<string>usingnamespacestd;classCourse{private: intcourseNumber; stringcourseName; stringcourseKind; intcoursePeriod; intschoolPeriod; intexperimentPeriod; floatcredithour; stringcourseterm;public: voidCourseInfoInput();//信息输入 voidCourseInfoOutPut();//信息输出 voidSearch();//查找信息 voidSearchByCredithour(float);//按照学分查找 voidSearchByCourseKind(string);//按照课程;类型查找};constchar*coursefile="C:\\course.txt";//将课程信息定位到C盘下的course.txt中!!!!!!!!!voidCourse::CourseInfoInput()//课程信息的录入{ ofstreamoutcoursefile;//创建一个文件输出流对象 outcoursefile.open(coursefile);//打开文件 if(!outcoursefile)//判断文件是否存在 { cout<<"文件打开失败!"<<endl; return; } while(1)//无限循环,给出指定条件退出 { cout<<"***********************************课程信息***********************************\n"; cout<<"按任意键开始信息录入\n"; cout<<"输入q退出\n"; if(getch()=='q') { break; } cout<<"请输入课程编号:"; cin>>courseNumber; cout<<"请输入课程名称:"; cin>>courseName; cout<<"请输入课程性质:"; cin>>courseKind; cout<<"请输入总学时:"; cin>>coursePeriod; cout<<"请输入授课学时:"; cin>>schoolPeriod; cout<<"请输入实验&上机学时:"; cin>>experimentPeriod; cout<<"请输入学分:"; cin>>credithour;cout<<"请输入开课学期:"; cin>>courseterm; outcoursefile<<courseNumber<<""<<courseName<<""<<courseKind<<""<<coursePeriod <<""<<schoolPeriod<<""<<experimentPeriod<<""<<credithour<<""<<endl; } outcoursefile.close();//关闭输出流文件}voidCourse::CourseInfoOutPut()//课程信息的浏览{ ifstreamincoursefile;//创建输入流文件对象 incoursefile.open(coursefile);//打开 if(!incoursefile)//判断文件存在 { cout<<"文件读取失败"; return; } cout<<"课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|学分|开课学期\n"; stringarrcourse[100][100];//定义一个string类型的二维数组,用来保存从文本内读取的信息 intline=0; memset(arrcourse,0,sizeof(arrcourse));//将数组清空 while(!incoursefile.eof())//文件不为空的条件设置 { for(intj=0;j<7;j++) { incoursefile>>arrcourse[line][j]; } line++; } for(inti=0;i<line;i++) { for(intj=0;j<7;j++) { cout<<arrcourse[i][j]<<"\t"; } cout<<endl; } incoursefile.close();}voidCourse::SearchByCredithour(floattempch){ ifstreamincoursefile;//创建输入流文件对象 incoursefile.open(coursefile);//打开 if(!incoursefile)//判断文件存在 { cout<<"文件读取失败"; return; } stringarrcourse[100][100];//定义一个string类型的二维数组,用来保存从文本内读取的信息 intline=0; memset(arrcourse,0,sizeof(arrcourse));//将数组清空 while(!incoursefile.eof())//文件不为空的条件设置 { incoursefile>>arrcourse[line][0]>>arrcourse[line][1]>>arrcourse[line][2]>>arrcourse[line][3] >>arrcourse[line][4]>>arrcourse[line][5]>>arrcourse[line][6];//文件流读取数据 line++; } cout<<"课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|学分|开课学期\n"; for(inti=0;i<line;i++) { if(atof(arrcourse[i][6].c_str())==tempch)//比较 { cout<<arrcourse[i][0]<<"\t"<<arrcourse[i][1]<<"\t"<<arrcourse[i][2]<<"\t" <<arrcourse[i][3]<<"\t"<<arrcourse[i][4]<<"\t" <<arrcourse[i][5]<<"\t"<<arrcourse[i][6]<<"\n"<<endl; } } cout<<"\n\n"; incoursefile.close();}voidCourse::SearchByCourseKind(stringstrtemp)///课程类型查询{ ifstreamincoursefile;//创建输入流文件对象 incoursefile.open(coursefile);//打开 if(!incoursefile)//判断文件存在 { cout<<"文件读取失败"; return; } stringarrcourse[100][100]; intline=0; memset(arrcourse,0,sizeof(arrcourse)); while(!incoursefile.eof()) { incoursefile>>arrcourse[line][0]>>arrcourse[line][1]>>arrcourse[line][2]>>arrcourse[line][3] >>arrcourse[line][4]>>arrcourse[line][5]>>arrcourse[line][6]; line++; } cout<<"课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|学分|开课学期\n"; for(inti=0;i<line;i++) { if(arrcourse[i][2]==strtemp) { cout<<arrcourse[i][0]<<"\t"<<arrcourse[i][1]<<"\t"<<arrcourse[i][2]<<"\t" <<arrcourse[i][3]<<"\t"<<arrcourse[i][4]<<"\t" <<arrcourse[i][5]<<"\t"<<arrcourse[i][6]<<"\n"<<endl; } } cout<<"\n\n";}voidCourse::Search(){ while(1) { cout<<"选择查询方式:"<<endl; cout<<"(1).按课程类型查询"<<endl; cout<<"(2).按学分查询"<<endl; cout<<"(0).返回"<<endl; inti; cin>>i; switch(i) { case1: cout<<"请输入课程类型:\n"; charstrtmp[100]; cin>>strtmp; SearchByCourseKind(strtmp); break; case2: cout<<"请输入学分:\n"; floatftemp; cin>>ftemp; SearchByCredithour(ftemp); break; } if(i==0) { break; } }}intmain(){ CourseExcourse; while(1) { cout<<"***************************************************************************\n"; cout<<"*学生选课系统
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育在线培训服务协议
- 建筑项目设计及施工合作协议
- 大湾区新兴产业发展项目合作框架协议
- 环保科技项目研发与推广合同
- 总包单位签订分包合同
- 买卖手房反担保合同
- 承包合同养殖合同
- 私人拖拉机买卖合同书
- 手房地产转让居间合同
- 游戏项目开发授权及运营协议
- 湘教版三年级美术下册教案全册
- (高清版)DB15∕T 3585-2024 高标准农田施工质量评定规程
- 试油(气)HSE作业指导书
- 重症监护-ICU的设置、管理与常用监测技术
- 法律顾问服务投标方案(完整技术标)
- 中医药三方合作协议书范本
- 2024年《动漫艺术概论》自考复习题库(附答案)
- 2024年职业技能“大数据考试”专业技术人员继续教育考试题库与答案
- 慢病报卡系统使用流程图
- 2024年辽宁轨道交通职业学院单招职业适应性测试题库含答案
- 小升初数学总复习专题训练:平行四边形的面积与梯形的面积
评论
0/150
提交评论