C++程序设计学生选课系统设计_第1页
C++程序设计学生选课系统设计_第2页
C++程序设计学生选课系统设计_第3页
C++程序设计学生选课系统设计_第4页
C++程序设计学生选课系统设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告课程设计题目:学生选课系统 学 号 1021113423姓 名 彭楚涵专 业 软件工程(国际教育)班 级 10211134 指导教师 王志波 2011年 12 月 1 日目 录第一章:面向对象程序设计课程设计目的2第二章:算法分析3第三章:结束语8附:源代码9第一章:面向对象程序设计课程设计目的本课程设计是在学习面向对象基本理论之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。学生通过课程设计在下述各方面得到锻炼:1能根据实际问题的具体情况,结合面向对象

2、的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。2提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法和程序的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。第二章:算法分析课程设计标题:学生选课系统要求:假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于10)自由选课。试设计一选修课程系统,使之能提供以下功能:1.系统以菜单方式工作;2.课程信息录入功能(课程信息用文件保存);3.课程信息浏览功能;4.查询功能(至少一种查询方

3、式:按学分查询、按课程性质查询);5.学生选修课程。应用程序功能的详细说明:1. 首先根据设计要求,我定义了三个类: Class类,Control类,Menu类。Class类用来存放一系列课程的信息,以及一些获取信息的get函数;Control类是用来定义选课类的操作属性,从Control类里面来判断并实现用户所需要执行的动作;Menu类定义了菜单的操作,其中包括显示菜单,显示提示信息,获取用户从键盘初输入的信息并执行。2. 对Class类的定义,首先我定义了一系列的设置相关课程信息的公有函数,用来将输入的内容传给私有函数,还定义了一些常函数,旨在于防止数据被其它函数调用时发生改变,同时将学分

4、定义为浮点型,范围在010之间。3. 对Menu类的定义,我定义了一个获取键盘输入的函数getInput(),用于获取数据,并且还定义了界面友好的显示目录函数,使得用户进行操作更加方便,以及定义了一系列的显示提示信息函数,之所以将这些函数独立分开,是为了在今后的修改中更加清楚。4. 对Control类的定义,因为其目的是用于判断并实现用户所要执行的操作,是学生系统的核心。一切从start()函数开始,通过switch语句判断按下了哪个按键,然后执行对应的操作,在文件录入这一方面,我定义了一个initIalization()函数,首先建立一个输入流,打开文件,将用户录入的课程信息放入到变量中,再

5、由变量放入文件中。其中的公有函数即课程设计所要求的功能部分:添加选课,浏览选课,查询选课,保存文件。私有函数我用了链表,classList,用来一条一条记录课程信息,方便添加浏览以及查询。两种查询方法都运用了迭代器的功能,迭代器的作用相当于指针,从链表的头部一个个指向链表的末尾,用于浏览以及查询部分。最后把迭代器指向的对象每个字段写入文件中,文件名定义为classSave,保存到程序的当前目录下。5. 最后主函数的实现,代码十分简单,先定义一个Control类的对象,ControlClass,再通过controlClass.start()启动整个程序。实现过程:1.菜单界面 如图1图12.课程

6、信息录入界面 如图2图23.课程信息浏览界面 如图3图34按学分查询课程界面 如图4图45.按课程性质查询课程界面 如图5图56存储信息界面 如图6图6流程图:主 菜 单课 程 信 息 录 入课 程 信 息 浏 览根 据 学 分 查 询根据 课程信息 查询存 储 文 件第三章:结束语通过本次面向对象程序设计周,我对C+这门语言有了更深的了解,也巩固了我的C+方面的知识。在课程设计题目拿到后,我做了一系列的知识储备,并且详细复习了课本,但是真正开始写代码却发现自己缺乏一个系统的知识框架,导致很多时候不知道从哪下手,如何实现课程设计要求的函数功能。从这里我深深的感受到,课本上所学到的知识只是基础中

7、的基础,要真正意义上提升自己的水平,必须不断地练习,所谓熟能生巧,在此次课程设计中,我运用了一些平时上课我忽略的一些知识,例如链表,并且在老师的指导下学会了使用迭代器,了解了其用处类似于指针。在这次课程设计中,我还深切感受到了要用面向对象的思想去分析需求,实现需求,还要设身处地贴近用户实际使用。同时,我能顺利完成这次课程设计,离不开老师的指导与同学的帮助。总之,我会在今后其他语言中的学习中,更加努力,在实践方面同样也会更加花功夫,以取得更好成绩。附:源代码#include <iostream>#include <list>#include <string>#

8、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 totalClassNumberT

9、emp);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 ge

10、tCurrentClassNumber() 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 c

11、lassNumTemp)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->totalC

12、lassNumber = 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

13、 Class:setRightTerm(string rightTermTemp)this->rightTerm = rightTermTemp;string Class:getClassNum() const/设置为常函数防止数据改变return this->classNum;string Class:getClassName() constreturn this->className;string Class:getClassProperties() constreturn this->classProperties;int Class:getTotalClassN

14、umber() constreturn this->totalClassNumber;int Class:getCurrentClassNumber() constreturn this->currentClassNumber;int Class:getExpClassNumber() constreturn this->expClassNumber;double Class:getCredit() constreturn this->credit;string Class:getRightTerm() constreturn this->rightTerm;cl

15、ass Menu/定义了菜单类的操作public:char static getInput() /获取输入函数char key = cin.get();return key;void static showMenu() cout << " 学生选课管理系统" << endl; cout << " *" << endl;cout << " " << endl;cout << "1 课程信息录入 "<< endl; cout

16、 << "2 课程信息浏览功能 " << endl;cout << "3 根据学分查询 " << endl;cout << "4 按课程性质查询 " << endl;cout << "5 存储信息 " << endl;cout << " " << endl;cout << " 请输入操作对应的序号 " << endl;cout <

17、;< " *" << endl;void static clearScreen()system("cls");void static pauseScreen()system("pause");void static showAddClass()cout << "请输入要添加的课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息" << endl; void static showBrowseClass()cout << "

18、;所有课程的信息为" << endl;void static showSearchByCredit()cout << "按照学分查询的结果为:" << endl;void static showSearchByClassProperties()cout << "按照课程性质查询的结果为:" << endl;void static showAddClassNum()cout << "n请输入课程编号" << endl;void static s

19、howAddClassName()cout << "请输入课程名称" << endl;void static showAddClassProperties()cout << "请输入课程性质" << endl;void static showAddTotalClassNumber()cout << "请输入总学时" << endl;void static showAddCurrentClassNumber()cout << "请输入授课学时&

20、quot; << endl;void static showAddExpClassNumber()cout << "请输入实验或上机学时" << endl;void static showAddCredit()cout << "请输入学分" << endl;void static showAddRightTerm()cout << "请输入开课学期" << endl;void static showLoadingSaving()cout <<

21、; "正在存储数据" << endl;void static showSuccessedSaving()cout << "数据存储完毕" << endl;void static showEachClassInfo(Class classTemp)cout << "课程编号" << classTemp.getClassNum() ;cout << "课程名称" << classTemp.getClassName() ;cout <

22、;< "课程性质" << classTemp.getClassProperties() ;cout << "总学时" << classTemp.getTotalClassNumber()<<endl ;cout << "授课学时" << classTemp.getCurrentClassNumber() ;cout << "实验或上机学时" << classTemp.getExpClassNumber() ;cou

23、t << "学分" << classTemp.getCredit() ;cout << "开课学期" << classTemp.getRightTerm()<<endl; cout << "" <<endl;class Control/定义了选课类的操作属性public:Control()void start()/start里面要做的事情就是初始化界面,等待用户输入,判断输入调用initIalization();while(1)Menu:clearSc

24、reen();Menu:showMenu();/显示了界面char key = Menu:getInput();switch(key)case '1': /判断是按下了哪个按键,然后执行什么对应的操作Menu:clearScreen();Menu:showAddClass();this->addClass();cin.get();cin.get();break;case '2':Menu:clearScreen();Menu:showBrowseClass();this->showAllClass();Menu:pauseScreen();break

25、;case '3':Menu:clearScreen();this->searchByCredit();Menu:pauseScreen();break;case '4':Menu:clearScreen();this->searchByClassProperties();Menu:pauseScreen();break;case '5':Menu:showLoadingSaving();if (this->saveClass()Menu:showSuccessedSaving();Menu:pauseScreen();Menu

26、:pauseScreen();default:break;void initIalization()ifstream ifs;/文件输入流ifs 相当于建立一个文件ifs.open("classSave.txt",ios_base:in);if (!ifs)Menu:pauseScreen();return;Class classTemp;/class 类的一个对象 classTempif (ifs.is_open()/系统内置函数 判断文件是否打开string classNum("");/初始化string className(""

27、);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 >

28、> expClassNumber >> credit >> rightTerm;/从文件读取的内容放到对应的变量里面classTemp.setClassNum(classNum);classTemp.setClassName(className);classTemp.setClassProperties(classProperties);classTemp.setTotalClassNumber(totalClassNumber);classTemp.setCurrentClassNumber(currentClassNumber);classTemp.setEx

29、pClassNumber(expClassNumber);classTemp.setCredit(credit);classTemp.setRightTerm(rightTerm);classList.push_back(classTemp);/在末尾添加一个变量ifs.close();void addClass()/添加例如选课等操作Class classTemp;string classNum("");string className("");string classProperties("");int totalClassNum

30、ber(0);int currentClassNumber(0);int expClassNumber(0);double credit(0.0);string rightTerm("");Menu:showAddClassNum();cin >> classNum;classTemp.setClassNum(classNum);Menu:showAddClassName();cin >> className;classTemp.setClassName(className);Menu:showAddClassProperties();cin >

31、;> classProperties;classTemp.setClassProperties(classProperties);Menu:showAddTotalClassNumber();cin >> totalClassNumber;classTemp.setTotalClassNumber(totalClassNumber);Menu:showAddCurrentClassNumber();cin >> currentClassNumber;classTemp.setCurrentClassNumber(currentClassNumber);Menu:s

32、howAddExpClassNumber();cin >> expClassNumber;classTemp.setExpClassNumber(expClassNumber);Menu:showAddCredit();cin >> credit;classTemp.setCredit(credit);Menu:showAddRightTerm();cin >> rightTerm;classTemp.setRightTerm(rightTerm);classList.push_back(classTemp);void showAllClass()/*一个迭

33、代器从List的头部遍历到List的末尾*/for (list<Class>:iterator iter = classList.begin();iter != classList.end(); +iter)Menu:showEachClassInfo(*iter);void searchByCredit()list<Class>:iterator iter= classList.begin();double credit(0);Menu:showAddCredit();cin >> credit;Menu:showSearchByCredit();for (iter; iter != classList.end(); iter+)if (credit = iter->getCredit()Menu:showEachClassInfo(*iter);void searchByClassProperties()li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论