1、河南城建学院C+程序设计课程设计设计题目: 学生选修课程系统设计 指导老师: 郭努力争取 刘荣辉 薛冰 专 业: 数学和应用数学 学生班级: 1314101 学生学号: 学生姓名: 刘亚欣 同 组 人: 李菲 马小川 数理学院 6月目 录1、课题目标11.1设计要求11.2 选题背景11.3 课题意义11.4功效需求分析21.5系统功效分析22、程序具体实现原理32.1 总体方案32.1.1开发平台32.1.2基础原理42.1.3数据结构42.1.4类UML图52.1.5模块说明62.2 程序各个功效说明72.2.1 程序结构72.2.2 课程设计要求实现93、调试汇报143.1碰到问题及处理
2、措施143.2程序调试及运行结果154、总结195、参考文件19附录201、课题目标1.1设计要求 假定有n门课程,每门课程有课程编号,课程名称,课程性质,总课时,讲课课时,试验或上机课时,学分,开课学期等信息,学生可按要求(如总学分不得少于10)自由选课。试设计一个选修课程系统,使之能提供以下功效:1.系统以菜单方法工作;2.课程信息录入功效(课程信息用文件保留);3.课程信息浏览功效;4.查询功效(最少一个查询方法:按学分查询、按课程性质查询);5.学生选修课程。1.2 选题背景当今时代是飞速发展信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统环境。计算机最到好处
3、于于利用它能够进行信息管理。使用计算机进行信息控制,不仅提升了工作效率,而且大大提升了其安全性。尤其对于复杂信息管理,计算机能够充足发挥它优越性。计算机进行信息管理和信息管理系统开发亲密相关,系统开发是系统管理前提。本系统就是为了管理好学生选课信息而设计。伴随高校多样全方面发展,学生人数和课程种类急速增加,传统选课管理模式已经无法满足目前实际需求,学生选课作为一个信息资源集散地,包含很多信息数据管理。因为数据繁多,轻易丢失,且不易查找。而且数据处理手工操作工作量大,犯错率高,犯错后不易更改,造成多种不便,总来说,缺乏系统,规范信息管理手段。尽管有学校有计算机,不过还未用于信息管理,没有发挥它效
4、力,资源闲置比较突出,这就是学生选课管理信息系统开发基础环境背景。1.3 课题意义基于以上问题,我们认为有必需建立一个学生选课管理信息系统,使学生选课信息管理工作规范化、系统化、程序化,以避免学生选课管理随意性,提升信息处理速度和正确性,能够立即、正确、有效查询和修改选课情况。系统实现后,极大方便对学生进行选课和选课后班级安排管理工作,学生选课信息管理。避免在安排课程信息滞后,降低信息交流繁琐过程及其带来额外开销。促进高校教育计算机信息化进程,提升高校工作效率。而且对于系统本身而言,含有更高使用性、安全性。能够满足学生选课,和学生对选课信息管理。同时,经过该课程设计,我们能够达成把C+程序设计
5、理论知识愈加巩固加深,加强动手操作能力和实践能力,学以致用,和现实生活中应用充足结合起来,也实现了知识活学活用。 1.4功效需求分析一个完善学生选课管理信息系统能够极大提升学生选课信息管理效率,含有检索快速,查找方便,可靠性高,存放量大,更新快,寿命长,成本低等优点。本系统关键能够实现以下任务目标:1、系统能够正确统计和查询学生、老师和所开设课程基础信息2、学生登录系统后能够依据本专业制订教学计划进行选课操作,能够查询个人基础信息性能需求:本学生信息管理系统要能够抵御用户可能多种操作,包含修改、更新、删除等操作,以确保软件可行性、稳定性、健壮性,同时要对数据进行检验,确保数据有效性,可操作性,
6、安全性。同时一般用户登录只有浏览权限。系统非功效性需求:实用性:系统以用户需求为目标,以方便用户为标准。依据用户实际 需求情况,度身订造一套优异局域网数据传输,从用户角度出发尽可能方便用户使用,满足基础用户需要,成为学校等通用网络软件。高可靠性:一个实用系统同时必需是可靠,本设计经过合理而优异网络设计和软、硬件优化选型,可确保系统数据传输正确性。高安全性:在设计中,将充足利用网络软、硬件提供多种安全方法,既能够确保用户共享资源,同时也可确保关键数据安全性。可扩展性及灵活性:系统设计以方便未来业务扩展和系统扩充为目标,系统要求能够方便升级,充足保护系统投资。智能型:系统在设计时,充足考虑系统运行
7、智能性,在使用系统一段时间后,系统能够适应于任何局域网。1.5系统功效分析 依据设计要求,我们认为该系统应该包含:(1)课程信息输入功效;(2)课程信息浏览功效;(3)按学分查询功效;(4)按课程性质查询功效;(5)数据保留功效;(6)正确退出系统功效。其中对于课程信息输入功效能够有两个实现路径:直接在系统中依据提醒输入;依据系统功效在对应文件下建立text文件直接输入课程信息。对于其它四个功效则关键是供学生选课使用。本程序将课程性质统一要求为考试和考查两种;数据保留功效是为了确保在系统中直接输入课程信息顺利保留到text文件。2、程序具体实现原理2.1 总体方案首先依据设计要求,我们定义了三
8、个类: Class类,Control类,Menu类。Class类用来存放一系列课程信息,和部分获取信息get函数;Control类是用来定义选课类操作属性,从Control类里面来判定并实现用户所需要实施动作;Menu类定义了菜单操作,其中包含显示菜单,显示提醒信息,获取用户从键盘输入信息并实施。针对Class类定义,首先我们定义了一系列设置相关课程信息公有函数,用来将输入内容传给私有函数,其次定义了常函数,目标是为了预防数据被其它函数调用时发生改变,同时将学分定义为浮点型,范围在010之间。针对Menu类定义,我们先定义了一个获取键盘输入函数getInput(),用于获取数据,接着定义了界面
9、友好显示目录函数,使得用户进行操作愈加方便,最终定义了一系列显示提醒信息函数。为了使得在以后修改中愈加清楚方便,我们将这些函数独立分开。针对Control类定义,因为它目标是用于判定并实现用户所要实施操作,是学生选课系统关键。一切从start()函数开始,经过switch语句判定按下了哪个数字键,然后实施对应操作,在文件录入这首先,我定义了一个initIalization()函数,首先建立一个输入流,打开文件,将用户录入课程信息放入到变量中,再由变量放入文件中。其中公有函数即课程设计所要求功效部分:添加选课,浏览选课,查询选课,保留文件。私有函数我们用了链表,classList,用来一条一条统
10、计课程信息,方便添加浏览和查询。两种查询方法全部利用了迭代器功效,迭代器作用相当于指针,从链表头部一个个指向链表末尾,用于浏览和查询部分。最终把迭代器指向对象每个字段写入文件中,文件名定义为classSave,保留到程序目前目录下。最终主函数实现,代码十分简单,先定义一个Control类对象,ControlClass,再经过controlClass.start()开启整个程序。2.1.1开发平台操作系统:Win7 开发软件:Mirosoft Visual C+ 6.02.1.2基础原理开始进入系统界面进入主菜单课程信息浏览按学分查询退出课程信息录入信息存放结束按课程性质查询2.1.3数据结构表
11、1 数据结构表数据名称数据类型解释classNumstring课程编号classNamestring课程名称classPropertiesstring课程性质totalClassNumberInt总课时currentClassNumberInt讲课课时expClassNumberInt上级或试验课时creditDouble学分rightTermstring开课学期2.1.4类UML图表2 Class类UML图Class-ClassNum: string-ClassName: string-ClassProperties: string-TotalClassNumber: int-current
12、ClassNumber: int-ExpClassNumber: int-credit: double-rightTerm: string+setClassNum(classNumTemp: string)+setClassName(classNameTemp: string)+setClassProperties(classPropertiesTemp: string)+setTotalClassNumber(totalClassNumberTemp: int)+setCurrentClassNumber(currentClassNumber: int)+setExpClassNumber(
13、expClassNumberTemp: int)+setCredit(credit: double)+setRightTerm(rightTermTemp: string)+getClassNum():string+getClassName():string+getClassProperties():string+getTotalClassNumber():int+getCurrentClassNumber():int+getExpClassNumber():int+getCredit() :double+getRightTerm() :string表3 Menue类UML图Menue+get
14、Input():char+showMenu():void+clearScreen():void+pauseScreen():void+showAddClass():void+showBrowseClass():void+showSearchByCredit():void+showSearchByClassProperties():void+showAddClassNum():void+showAddClassName():void+showAddClassProperties():void+showAddCurrentClassNumber():void+showAddExpClassNumb
15、er():void+showLoadingSaving():void+showSuccessedSaving():void+showEachClassInfo(Class classTemp) :void+quit():void表4 Control类UML图Control-classList: list+Control()+Start():void+initIalization():void+addClass():void+quit():void+showAllClass():void+searchByCredit():void+searchByClassProperties():void+s
16、aveClass():bool2.1.5模块说明(1)课程信息录入。课程信息录入应包含:课程编号、课程名称、课程性质、总课时、讲课课时、试验课时、学分、开课信息八个组员,为录入以上信息,首先使用setClassNum、setClassName、setClassProperties、setTotalClassNumber、setCurrentClassNumber、setExpClassNumber、setCredit、setRightTerm输出提醒信息,其次使用addClass函数添加课程信息。(2)课程信息浏览。该功效关键是读取全部课程信息,在程序中首先经过getClassNum、getC
17、lassName、getClassProperties、getTotalClassNumber、getCurrentClassNumber、getExpClassNumber、getCredit、getRightTerm八个函数读取课程信息相关信息,设置为静态组员函数,预防已录入数据被篡改;其次使用showclass、showeachclassinfo函数显示全部课程信息。 (3)按学分查询。首先使用getCredit函数得到课程学分信息,其次使用searchByCredit 函数输出 “按学分查询”提醒信息;接着使用showAddCredit函数输出“请输入学分”提醒信息;最终使用showS
18、earchByCredit函数将查询结果输出。(4)按课程性质查询。根据课程性质查询实现了依据课程性质对课程查询,程序关键经过、showAddClassProperties、setClassProperties、getClassProperties、searchByClassProperties、showSearchByClassProperties、 来实现对课程查询,一样全部设置为静态组员函数,已经录入数据部能被篡改,依据提醒输入就能得到想要查询内容。(5)存放信息。选择存放信息选项以后用showLoadingSaving函数进行数据存放,显示正在存放数据。数据存放完成后用showSucc
19、essedSaving函数显示输出数据存放完成。(6)退出系统。一个完整系统应该包含退出系统,在程序中使用quit函数,在按数字键6后给出提醒信息:“press any key to continue”提醒使用者按任意键退出系统。2.2 程序各个功效说明2.2.1 程序结构将class类属性和行为进行封装:1.Class封装class Class/定义了课程类部分属性public:void setClassNum(string classNumTemp);/课程编号void setClassName(string classNameTemp);/课程名称void setClassPropert
20、ies(string classPropertiesTemp);/课程性质void setTotalClassNumber(int totalClassNumberTemp);/总课时void setCurrentClassNumber(int currentClassNumber);/讲课课时void setExpClassNumber(int expClassNumberTemp);/试验或上机课时void setCredit(double credit);/学分void setRightTerm(string rightTermTemp);/开课信息/ 录入函数设为常量函数预防信息被篡改
21、string getClassNum() const;/ 课程编号录入string getClassName() const;/课程名称录入string getClassProperties() const;/课程性质录入int getTotalClassNumber() const;/总课时录入int getCurrentClassNumber() const;/讲课课时录入int getExpClassNumber() const;/试验或上机课时录入double getCredit() const;/学分录入string getRightTerm() const;/开课信息录入/ cla
22、ss类私有组员private:string classNum;/课程编号string className;/课程名称string classProperties;/课程性质int totalClassNumber;/总课时int currentClassNumber;/讲课课时int expClassNumber;/上级或试验课时double credit;/学分string rightTerm;/开课学期;2.Menu类封装/menu类关键实现系统主界面class Menupublic:char static getInput();void static showMenu();/显示菜单 v
23、oid static clearScreen();/清屏void static pauseScreen();/暂停void static showAddClass();/显示添加课程信息提醒语void static showBrowseClass();/void static showSearchByCredit();/显示按学分查询提醒语void static showSearchByClassProperties();显示按课程性质查询提醒语void static showAddClassNum();/显示输入课程编号提醒语void static showAddClassName();/显
24、示增加课程名称提醒语void static showAddClassProperties();/显示输入课程性质提醒语void static showAddTotalClassNumber();/显示输入总课时提醒语void static showAddCurrentClassNumber();/显示讲课课时提醒语void static showAddExpClassNumber();/显示输入试验课时提醒语void static showAddCredit();/显示输入学分提醒语void static showAddRightTerm();/显示开课学期提醒语void static sho
25、wLoadingSaving();/显示正在存放信息提醒语 void static showSuccessedSaving();/显示信息已成功存放void static quit();/退出系统函数void static showEachClassInfo(Class classTemp);/调用class类中对象显示信息;3 .Control类封装class Control/定义了选课类操作属性public:Control()void start();void initIalization(); void addClass(); void quit() ; /退出函数 void showA
26、llClass();void searchByCredit();void searchByClassProperties();bool saveClass();private:list classList;2.2.2 课程设计要求实现/Class类中各组员函数实现void Class:setClassNum(string classNumTemp)this-classNum = classNumTemp;/ 设置课程编号实现void Class:setClassName(string classNameTemp)this-className = classNameTemp;/设置课程名称实现v
27、oid Class:setClassProperties(string classPropertiesTemp)this-classProperties = classPropertiesTemp;/设置课程性质实现void Class:setTotalClassNumber(int totalClassNumberTemp)this-totalClassNumber = totalClassNumberTemp;/设置总课时实现void Class:setCurrentClassNumber(int currentClassNumber)this-currentClassNumber = c
28、urrentClassNumber;/设置讲课课时实现void Class:setExpClassNumber(int expClassNumberTemp)this-expClassNumber = expClassNumberTemp;/设置上机或试验课时实现void Class:setCredit(double credit)this-credit = credit;/设置课程学分实现void Class:setRightTerm(string rightTermTemp)this-rightTerm = rightTermTemp;/设置开课学期实现string Class:getCl
29、assNum() const/设置为常函数预防数据改变return this-classNum;string Class:getClassName() constreturn this-className;string Class:getClassProperties() constreturn this-classProperties;int Class:getTotalClassNumber() constreturn this-totalClassNumber;int Class:getCurrentClassNumber() constreturn this-currentClassN
30、umber;int Class:getExpClassNumber() constreturn this-expClassNumber;double Class:getCredit() constreturn this-credit;string Class:getRightTerm() constreturn this-rightTerm;/Menu类各组员函数实现char Menu: getInput() /获取输入函数金融数学考试大三下char key = cin.get();return key; void Menu: showMenu() cout 欢迎您进入学生选课管理系统 end
31、l; cout * endl;cout endl;cout 1 课程信息录入 endl; cout 2 课程信息浏览功效 endl;cout 3 依据学分查询 endl;cout 4 按课程性质查询 endl;cout 5 存放信息 endl; cout 6 退出系统 endl;cout endl;cout 请输入操作对应序号 endl;cout * endl;void Menu: clearScreen()system(cls);void Menu: pauseScreen() /暂停system(pause);void Menu: showAddClass() / 显示增添课程信息cout
32、 请输入要添加课程编号,课程名称,课程性质,总 学 时,讲课课时,试验课时,学分,开课学期等信息 endl; void Menu: showBrowseClass()cout 全部课程信息为 endl;void Menu: showSearchByCredit()cout 根据学分查询结果为: endl;void Menu: showSearchByClassProperties()cout 根据课程性质查询结果为: endl;void Menu: showAddClassNum()cout n请输入课程编号 endl;void Menu: showAddClassName()cout 请输入
33、课程名称 endl;void Menu: showAddClassProperties()cout 请输入课程性质 endl;void Menu: showAddTotalClassNumber()cout 请输入总课时 endl;void Menu: showAddCurrentClassNumber()cout 请输入讲课课时 endl;void Menu: showAddExpClassNumber()cout 请输入试验或上机课时 endl;void Menu: showAddCredit()cout 请输入学分 endl;void Menu: showAddRightTerm()co
34、ut 请输入开课学期 endl;void Menu: showLoadingSaving()cout 正在存放数据 endl; void Menu: showSuccessedSaving()cout 数据存放完成 endl;void Menu: quit()coutpress any key to continue;void Menu: showEachClassInfo(Class classTemp)cout 课程编号: classTemp.getClassNum() ;cout 课程名称: classTemp.getClassName();cout 课程性质: classTemp.ge
35、tClassProperties() ;cout 总课时: classTemp.getTotalClassNumber();cout 讲课课时: classTemp.getCurrentClassNumber() ;cout 试验课时: classTemp.getExpClassNumber();cout 课程学分: classTemp.getCredit();cout 开课学期: classTemp.getRightTerm(); cout endl;cout addClass();cin.get();cin.get();break;case 2:Menu:clearScreen();Men
36、u:showBrowseClass();this-showAllClass();Menu:pauseScreen();break;case 3:Menu:clearScreen();this-searchByCredit();Menu:pauseScreen();break;case 4:Menu:clearScreen();this-searchByClassProperties();Menu:pauseScreen();break;case 6:Menu:clearScreen();this-quit();Menu:pauseScreen();break; case 5:Menu:show
37、LoadingSaving();if (this-saveClass()Menu:showSuccessedSaving();Menu:pauseScreen();Menu:pauseScreen();default:break;void Control: initIalization()ifstream ifs;/文件输入流ifs 相当于建立一个文件ifs.open(classSave.txt,ios_base:in);if (!ifs)Menu:pauseScreen();return;Class classTemp;/class 类一个对象 classTempif (ifs.is_ope
38、n()/系统内置函数 判定文件是否打开string classNum( );/初始化string className( );string classProperties( );int totalClassNumber(0);int currentClassNumber(0);int expClassNumber(0);double credit(0.0);string rightTerm( );while(!ifs.eof()ifs classNum className classProperties totalClassNumber currentClassNumber expClassNu
39、mber credit rightTerm;/从文件读取内容放到对应变量里面classTemp.setClassNum(classNum);classTemp.setClassName(className);classTemp.setClassProperties(classProperties);classTemp.setTotalClassNumber(totalClassNumber);classTemp.setCurrentClassNumber(currentClassNumber);classTemp.setExpClassNumber(expClassNumber);classTemp.setCredit(credit);classTemp.setRightTerm(rightTerm);classList.push_back(classTemp);/在末尾添加一个变量ifs.close();void Control: addClass()/添加比如选课等操作Class classTemp;string classNum();string className();string classPropert