C++程序设计学生选课系统设计.docx
- 文档编号:12518352
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:21
- 大小:290.27KB
C++程序设计学生选课系统设计.docx
《C++程序设计学生选课系统设计.docx》由会员分享,可在线阅读,更多相关《C++程序设计学生选课系统设计.docx(21页珍藏版)》请在冰豆网上搜索。
C++程序设计学生选课系统设计
课程设计报告
课程设计题目:
学生选课系统
学号23
姓名彭楚涵
专业软件工程(国际教育)
班级
指导教师王志波
2011年12月1日
第一章:
面向对象程序设计课程设计目的
本课程设计是在学习面向对象基本理论之后的实践教学环节。
该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。
要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。
学生通过课程设计在下述各方面得到锻炼:
1.能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。
2.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法和程序的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。
第二章:
算法分析
课程设计标题:
学生选课系统
要求:
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于10)自由选课。
试设计一选修课程系统,使之能提供以下功能:
1.系统以菜单方式工作;2.课程信息录入功能(课程信息用文件保存);3.课程信息浏览功能;4.查询功能(至少一种查询方式:
按学分查询、按课程性质查询);5.学生选修课程。
应用程序功能的详细说明:
1.首先根据设计要求,我定义了三个类:
Class类,Control类,Menu类。
Class类用来存放一系列课程的信息,以及一些获取信息的get函数;Control类是用来定义选课类的操作属性,从Control类里面来判断并实现用户所需要执行的动作;Menu类定义了菜单的操作,其中包括显示菜单,显示提示信息,获取用户从键盘初输入的信息并执行。
2.对Class类的定义,首先我定义了一系列的设置相关课程信息的公有函数,用来将输入的内容传给私有函数,还定义了一些常函数,旨在于防止数据被其它函数调用时发生改变,同时将学分定义为浮点型,范围在0~10之间。
3.对Menu类的定义,我定义了一个获取键盘输入的函数getInput(),用于获取数据,并且还定义了界面友好的显示目录函数,使得用户进行操作更加方便,以及定义了一系列的显示提示信息函数,之所以将这些函数独立分开,是为了在今后的修改中更加清楚。
4.对Control类的定义,因为其目的是用于判断并实现用户所要执行的操作,是学生系统的核心。
一切从start()函数开始,通过switch语句判断按下了哪个按键,然后执行对应的操作,在文件录入这一方面,我定义了一个initIalization()函数,首先建立一个输入流,打开文件,将用户录入的课程信息放入到变量中,再由变量放入文件中。
其中的公有函数即课程设计所要求的功能部分:
添加选课,浏览选课,查询选课,保存文件。
私有函数我用了链表,classList,用来一条一条记录课程信息,方便添加浏览以及查询。
两种查询方法都运用了迭代器的功能,迭代器的作用相当于指针,从链表的头部一个个指向链表的末尾,用于浏览以及查询部分。
最后把迭代器指向的对象每个字段写入文件中,文件名定义为classSave,保存到程序的当前目录下。
5.最后主函数的实现,代码十分简单,先定义一个Control类的对象,ControlClass,再通过()启动整个程序。
实现过程:
1.菜单界面如图1
图1
2.课程信息录入界面如图2
图2
3.课程信息浏览界面如图3
图3
4.按学分查询课程界面如图4
图4
5.按课程性质查询课程界面如图5
图5
6.存储信息界面如图6
图6
流程图:
第三章:
结束语
通过本次面向对象程序设计周,我对C++这门语言有了更深的了解,也巩固了我的C++方面的知识。
在课程设计题目拿到后,我做了一系列的知识储备,并且详细复习了课本,但是真正开始写代码却发现自己缺乏一个系统的知识框架,导致很多时候不知道从哪下手,如何实现课程设计要求的函数功能。
从这里我深深的感受到,课本上所学到的知识只是基础中的基础,要真正意义上提升自己的水平,必须不断地练习,所谓熟能生巧,在此次课程设计中,我运用了一些平时上课我忽略的一些知识,例如链表,并且在老师的指导下学会了使用迭代器,了解了其用处类似于指针。
在这次课程设计中,我还深切感受到了要用面向对象的思想去分析需求,实现需求,还要设身处地贴近用户实际使用。
同时,我能顺利完成这次课程设计,离不开老师的指导与同学的帮助。
总之,我会在今后其他语言中的学习中,更加努力,在实践方面同样也会更加花功夫,以取得更好成绩。
附:
源代码
#include
#include
#include
#include
#include
#include
usingnamespacestd;
classClass{
//定义了课程类的一些属性
public:
voidsetClassNum(stringclassNumTemp);
voidsetClassName(stringclassNameTemp);
voidsetClassProperties(stringclassPropertiesTemp);
voidsetTotalClassNumber(inttotalClassNumberTemp);
voidsetCurrentClassNumber(intcurrentClassNumber);
voidsetExpClassNumber(intexpClassNumberTemp);
voidsetCredit(doublecredit);
voidsetRightTerm(stringrightTermTemp);
stringgetClassNum()const;
stringgetClassName()const;
stringgetClassProperties()const;
intgetTotalClassNumber()const;
intgetCurrentClassNumber()const;
intgetExpClassNumber()const;
doublegetCredit()const;
stringgetRightTerm()const;
private:
stringclassNum;
stringclassName;
stringclassProperties;
inttotalClassNumber;
intcurrentClassNumber;
intexpClassNumber;
doublecredit;
stringrightTerm;
};
voidClass:
:
setClassNum(stringclassNumTemp){
this->classNum=classNumTemp;
}
voidClass:
:
setClassName(stringclassNameTemp){
this->className=classNameTemp;
}
voidClass:
:
setClassProperties(stringclassPropertiesTemp){
this->classProperties=classPropertiesTemp;
}
voidClass:
:
setTotalClassNumber(inttotalClassNumberTemp){
this->totalClassNumber=totalClassNumberTemp;
}
voidClass:
:
setCurrentClassNumber(intcurrentClassNumber){
this->currentClassNumber=currentClassNumber;
}
voidClass:
:
setExpClassNumber(intexpClassNumberTemp){
this->expClassNumber=expClassNumberTemp;
}
voidClass:
:
setCredit(doublecredit){
this->credit=credit;
}
voidClass:
:
setRightTerm(stringrightTermTemp){
this->rightTerm=rightTermTemp;
}
stringClass:
:
getClassNum()const{//设置为常函数防止数据改变
returnthis->classNum;
}
stringClass:
:
getClassName()const{
returnthis->className;
}
stringClass:
:
getClassProperties()const{
returnthis->classProperties;
}
intClass:
:
getTotalClassNumber()const{
returnthis->totalClassNumber;
}
intClass:
:
getCurrentClassNumber()const{
returnthis->currentClassNumber;
}
intClass:
:
getExpClassNumber()const{
returnthis->expClassNumber;
}
doubleClass:
:
getCredit()const{
returnthis->credit;
}
stringClass:
:
getRightTerm()const{
returnthis->rightTerm;
}
classMenu{
//定义了菜单类的操作
public:
charstaticgetInput(){//获取输入函数
charkey=();
returnkey;
}
voidstaticshowMenu(){
cout<<"学生选课管理系统"< cout<<"***************************************"< cout<<""< cout<<"1课程信息录入"< cout<<"2课程信息浏览功能"< cout<<"3根据学分查询"< cout<<"4按课程性质查询"< cout<<"5存储信息"< cout<<""< cout<<"请输入操作对应的序号"< cout<<"***************************************"< } voidstaticclearScreen(){ system("cls"); } voidstaticpauseScreen(){ system("pause"); } voidstaticshowAddClass(){ cout<<"请输入要添加的课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息"< } voidstaticshowBrowseClass(){ cout<<"所有课程的信息为"< } voidstaticshowSearchByCredit(){ cout<<"按照学分查询的结果为: "< } voidstaticshowSearchByClassProperties(){ cout<<"按照课程性质查询的结果为: "< } voidstaticshowAddClassNum(){ cout<<"\n请输入课程编号"< } voidstaticshowAddClassName(){ cout<<"请输入课程名称"< } voidstaticshowAddClassProperties(){ cout<<"请输入课程性质"< } voidstaticshowAddTotalClassNumber(){ cout<<"请输入总学时"< } voidstaticshowAddCurrentClassNumber(){ cout<<"请输入授课学时"< } voidstaticshowAddExpClassNumber(){ cout<<"请输入实验或上机学时"< } voidstaticshowAddCredit(){ cout<<"请输入学分"< } voidstaticshowAddRightTerm(){ cout<<"请输入开课学期"< } voidstaticshowLoadingSaving(){ cout<<"正在存储数据"< } voidstaticshowSuccessedSaving(){ cout<<"数据存储完毕"< } voidstaticshowEachClassInfo(ClassclassTemp){ cout<<"课程编号"<<(); cout<<"课程名称"<<(); cout<<"课程性质"<<(); cout<<"总学时"<<()< cout<<"授课学时"<<(); cout<<"实验或上机学时"<<(); cout<<"学分"<<(); cout<<"开课学期"<<()< cout<<""< } }; classControl{ //定义了选课类的操作属性 public: Control(){ } voidstart(){//start里面要做的事情就是初始化界面,等待用户输入,判断输入调用 initIalization(); while (1){ Menu: : clearScreen(); Menu: : showMenu();//显示了界面 charkey=Menu: : getInput(); switch(key){ case'1': //判断是按下了哪个按键,然后执行什么对应的操作 Menu: : clearScreen(); Menu: : showAddClass(); this->addClass(); (); (); break; case'2': Menu: : clearScreen(); Menu: : 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'5': Menu: : showLoadingSaving(); if(this->saveClass()){ Menu: : showSuccessedSaving(); } Menu: : pauseScreen(); Menu: : pauseScreen(); default: break; } } } voidinitIalization(){ ifstreamifs;//文件输入流ifs相当于建立一个文件 ("",ios_base: : in); if(! ifs){ Menu: : pauseScreen(); return; } ClassclassTemp;//class类的一个对象classTemp if()){//系统内置函数判断文件是否打开 stringclassNum("");//初始化 stringclassName(""); stringclassProperties(""); inttotalClassNumber(0); intcurrentClassNumber(0); intexpClassNumber(0); doublecredit; stringrightTerm(""); while(! ()){ ifs>>classNum>>className>>classProperties>>totalClassNumber >>currentClassNumber>>expClassNumber>>credit>>rightTerm;//从文件读取的内容放到对应的变量里面 (classNum); (className); (classProperties); (totalClassNumber); (currentClassNumber); (expClassNumber); (credit); (rightTerm); (classTemp);//在末尾添加一个变量 } (); } } voidaddClass(){//添加例如选课等操作 ClassclassTemp; stringclassNum(""); stringclassName(""); stringclassProperties(""); inttotalClassNumber(0); intcurrentClassNumber(0); intexpClassNumber(0); doublecredit; stringrightTerm(""); Menu: : showAddClassNum(); cin>>classNum; (classNum); Menu: : showAddClassName(); cin>>className; (className); Menu: : showAddClassProperties(); cin>>classProperties; (classProperties); Menu: : showAddTotalClassNumber(); cin>>totalClassNumber; (totalClassNumber); Menu: : showAddCurrentClassNumber(); cin>>currentClassNumber; (currentClassNumber); Menu: : showAddExpClassNumber(); cin>>expClassNumber; (expClassNumber); Menu: : showAddCredit(); cin>>credit; (credit); Menu: : showAddRightTerm(); cin>>rightTerm; (rightTerm); (classTemp); } voidshowAllClass(){ /*一个迭代器从List的头部遍历到List的末尾*/ for(list : iteratoriter=();iter! =();++iter){ Menu: : showEachClassInfo(*iter); } } voidsearchByCredit(){ list : iteratoriter=(); doublecredit(0); Menu: : showAddCredit(); cin>>credit; Menu: : showSearchByCredit(); for(iter;iter! =();iter++){ if(credit==iter->getCredit()){ Menu: : showEachClassInfo(*iter); } } } voidsearchByClassProperties(){ list : iteratoriter=(); stringclassProperties(""); Menu: : showAddClassProperties(); cin>>classProperties; Menu: : showSearchByClassProperties(); for(iter;iter! =();iter++){ if(classProperties==iter->getClassProperties()){ Menu: : showEachClassInfo(*iter); } } } boolsaveClass(){ ofstream
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 学生 选课 系统 设计