当前位置:文档之家› C++程序设计学生选课系统设计

C++程序设计学生选课系统设计

EAST CHINA INSTITUTE OF TECHNOLOGY课程设计报告课程设计题目:学生选课系统学号1021113423姓名彭楚涵专业软件工程(国际教育)班级10211134指导教师王志波2011 年12 月1 日第一章:面向对象程序设计课程设计目的 (2)第一章:算法分析 (3)第三章:结束语 (8)附:源代码 (9)第一章:面向对象程序设计课程设计目的本课程设计是在学习面向对象基本理论之后的实践教学环节。

该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。

要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。

学生通过课程设计在下述各方面得到锻炼:1 •能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。

2 •提高程序设计和调试能力。

学生通过上机实习,验证自己设计的算法和程序的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。

第二章:算法分析课程设计标题:学生选课系统要求:假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于10) 自由选课。

试设计一选修课程系统,使之能提供以下功能:1•系统以菜单方式工作;2.课程信息录入功能(课程信息用文件保存);3•课程信息浏览功能;4•查询功能(至少一种查询方式:按学分查询、按课程性质查询);5•学生选修课程。

应用程序功能的详细说明:1. 首先根据设计要求,我定义了三个类:Class类,Control类,Menu类。

Class类用来存放一系列课程的信息,以及一些获取信息的get函数;Control类是用来定义选课类的操作属性,从Control类里面来判断并实现用户所需要执行的动作;Menu类定义了菜单的操作,其中包括显示菜单,显示提示信息,获取用户从键盘初输入的信息并执行。

2. 对Class类的定义,首先我定义了一系列的设置相关课程信息的公有函数,用来将输入的内容传给私有函数,还定义了一些常函数,旨在于防止数据被其它函数调用时发生改变,同时将学分定义为浮点型,范围在0~10之间。

3. 对Menu类的定义,我定义了一个获取键盘输入的函数getlnput(),用于获取数据,并且还定义了界面友好的显示目录函数,使得用户进行操作更加方便,以及定义了一系列的显示提示信息函数,之所以将这些函数独立分开,是为了在今后的修改中更加清楚。

4. 对Control类的定义,因为其目的是用于判断并实现用户所要执行的操作,是学生系统的核心。

一切从start()函数开始,通过switch语句判断按下了哪个按键,然后执行对应的操作,在文件录入这一方面,我定义了一个initlalization()函数,首先建立一个输入流,打开文件,将用户录入的课程信息放入到变量中,再由变量放入文件中。

其中的公有函数即课程设计所要求的功能部分:添加选课,浏览选课,查询选课,保存文件。

私有函数我用了链表,classList,用来一条一条记录课程信息,方便添加浏览以及查询。

两种查询方法都运用了迭代器的功能,迭代器的作用相当于指针,从链表的头部一个个指向链表的末尾,用于浏览以及查询部分。

最后把迭代器指向的对象每个字段写入文件中,文件名定义为classSave保存到程序的当前目录下。

5. 最后主函数的实现,代码十分简单,先定义一个Control类的对象,ControlClass,再通过controlClass.start()启动整个程序。

图2实现过程:1•菜单界面如图1 广 l 'C- Jsers\AJmir 5t rat:or.V'/IN-LTPSC JiOUFM\De5<c^\DebLig\Cppl exe'学生选课管理系统 HF"wwr M H m M M 貝貝貝 冃貝稠更请输入操作对应的序号d 扃 WWW* W WK" WiHrA n M M H H H n WK" W,HTE K K E WWW^TW W Wm7K"肌"K H W 图12•课程信息录入界面如图2功询 入蔦查 霸查质 恚息分性自4 程程唇其诫 谭谭校#12 3 4 5图43•课程信息浏览界面 如图3 'C .users\Adfin strator.WIN-LTPSC JSOU F M\D e s<tcp\Debug\C ppi.exe"图34 •按学分查询课程界面 如图4■ , '£:. JsersXAdnnin 5trator.'M N - LT P SC USOU F M\D^s<tc p\ Debu g\Cppi .exe_「信息为授课学时20 0P学ub 机 称上 程捡 课实 课程性质琢图5吩杳一120 学分号时 刀学暑 输5昭粋课 请3.按课授2 時 学"机 称上 ••會 为程验 果课亠5.按课程性质查询课程界面如图5■ T:. Jsers\Adnn i n 弓tra:ar.V/[N-LTPSC JSOL-z M\Des<tc p' Debdg\C pp:.exe' i青拶已总:键继纬….图56 •存储信息界面如图6学生选课管理系统请输人操作对应的序号结程豔的课亠头程髭程课2時学:uh机为称上■ 'C . J5ers\Adnnin 5trator.Vul N-L7PSC JSOL z M\D e s<tcp■ Debdg\C ppi,e:<e功询入蔦查囁查质急息分性息3il12 3 4 5图6流程图:第三章:结束语通过本次面向对象程序设计周,我对C++这门语言有了更深的了解,也巩固了我的C++ 方面的知识。

在课程设计题目拿到后,我做了一系列的知识储备,并且详细复习了课本,但是真正开始写代码却发现自己缺乏一个系统的知识框架,导致很多时候不知道从哪下手,如何实现课程设计要求的函数功能。

从这里我深深的感受到,课本上所学到的知识只是基础中的基础,要真正意义上提升自己的水平,必须不断地练习,所谓熟能生巧,在此次课程设计中,我运用了一些平时上课我忽略的一些知识,例如链表,并且在老师的指导下学会了使用迭代器,了解了其用处类似于指针。

在这次课程设计中,我还深切感受到了要用面向对象的思想去分析需求,实现需求,还要设身处地贴近用户实际使用。

同时,我能顺利完成这次课程设计,离不开老师的指导与同学的帮助。

总之,我会在今后其他语言中的学习中,更加努力,在实践方面同样也会更加花功夫,以取得更好成绩。

附:源代码#include <iostream>#include <list>#include <string>#include <iterator>#include《algorithm〉#include <fstream>using namespace std;class Class{//定义了课程类的一些属性public:void setClassNum(string classNumTemp);void setClassName(string classNameTemp);void setClassProperties(string classPropertiesTemp);void setTotalClassNumber(int totalClassNumberTemp);void setCurrentClassNumber(int currentClassNumber);void setExpClassNumber(int expClassNumberTemp); void setCredit(double credit);void setRightTerm(string rightTermTemp);string getClassNum() const;string getClassName() const;string getClassProperties() const;int getTotalClassNumber() const;int getCurrentClassNumber() const;int getExpClassNumber() const;double getCredit() const;string getRightTerm() const;private:string classNum;string className;string classProperties;int totalClassNumber;int currentClassNumber;int expClassNumber;double credit;string rightTerm;}; void Class::setClassNum(string classNumTemp){ this->classNum = classNumTemp;}void Class::setClassName(string classNameTemp){ this->className = classNameTemp;}void Class::setClassProperties(string classPropertiesTemp){ this->classProperties = classPropertiesTemp;}void Class::setTotalClassNumber(int totalClassNumberTemp){ this->totalClassNumber = totalClassNumberTemp; }void Class::setCurrentClassNumber(int currentClassNumber){ this->currentClassNumber = currentClassNumber; }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::getClassNum() const{〃设置为常函数防止数据改变return this->classNum;}string Class::getClassName() const{ return this->className;}string Class::getClassProperties() const{ return this->classProperties;} int Class::getTotalClassNumber() const{return this->totalClassNumber;int Class::getCurrentClassNumber() const{ return this->currentClassNumber;}int Class::getExpClassNumber() const{ return this->expClassNumber;}double Class::getCredit() const{return this->credit;}string Class::getRightTerm() const{ return this->rightTerm;} class Menu{//定义了菜单类的操作public:char static getInput(){ // 获取输入函数char key = cin.get();return key;}void static showMenu(){cout vv " 学生选课管理系统"vv endl;cout vv " ***************************************" vv endl;cout vv " "vv endl;cout vv " 1课程信息录入"vv endl;cout vv " 2课程信息浏览功能"vv endl;cout vv " 3根据学分查询"vv endl;cout vv " 4按课程性质查询"vv en dl;cout vv " 5存储信息"vv endl;cout vv " "vv endl;cout vv " 请输入操作对应的序号"vv endl;void static clearScreen(){ system("cls");}void static pauseScreen(){system("pause");}cout << ***************************************" <vvoid static showAddClass(){cout << "请输入要添加的课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分, 开课学期等信息"vv endl;}void static showBrowseClass(){cout <v "所有课程的信息为"<< endl;}void static showSearchByCredit(){cout <v "按照学分查询的结果为:"<< endl;}void static showSearchByClassProperties(){cout <v "按照课程性质查询的结果为:"<< endl;}void static showAddClassNum(){cout vv "\n 请输入课程编号"vv endl;}void static showAddClassName(){cout vv " 请输入课程名称"vv endl;}void static showAddClassProperties(){cout vv " 请输入课程性质"vv endl;void static showAddTotalClassNumber(){cout vv " 请输入总学时"vv endl;void static showAddCurrentClassNumber(){ cout << " 请输入授课学时"vv endl;}void static showAddExpClassNumber(){cout << "请输入实验或上机学时"vv endl;void static showAddCredit(){cout << " 请输入学分"<v endl;void static showAddRightTerm(){cout vv " 请输入开课学期"vv endl; }void static showLoadingSaving(){cout vv " 正在存储数据"vv endl;}void static showSuccessedSaving(){cout vv " 数据存储完毕"vv endl;}void static showEachClasslnfo(Class classTemp){cout vv " 课程编号"vv classTemp.getClassNum();cout vv " 课程名称"vv classTemp.getClassName();cout vv " 课程性质"vv classTemp.getClassProperties();cout vv " 总学时"vv classTemp.getTotalClassNumber()vvendl ;cout vv " 授课学时"vv classTemp.getCurrentClassNumber();cout vv " 实验或上机学时"vv classTemp.getExpClassNumber();cout vv " 学分"vv classTemp.getCredit();cout vv " 开课学期"vv classTemp.getRightTerm()vvendl;cout vv " " vvendl;}};class Control{//定义了选课类的操作属性public:Control(){}void start(){ //start 里面要做的事情就是初始化界面,等待用户输入,判断输入调用initialization。

相关主题