选修课程系统Word格式.docx
《选修课程系统Word格式.docx》由会员分享,可在线阅读,更多相关《选修课程系统Word格式.docx(27页珍藏版)》请在冰点文库上搜索。
1、问题描述(功能要求):
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。
试设计一选修课程系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)课程信息录入功能(课程信息用文件保存)--输入
(3)课程信息浏览功能--输出
(4)查询功能:
(至少一种查询方式)--算法
ⅰ按学分查询ⅱ按课程性质查询
(5)学生选修课程(可选项)
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统中的各个实体之间的关系及其属性和行为;
(2)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述(包括属性和方法);
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)完成系统总结报告以及系统使用说明书。
2.设计要求:
●课程设计报告正文内容
(包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,总结,参考书目等)。
(一)需求分析
系统设计目的与意义;
系统功能需求(系统流程图);
输入输出的要求;
(二)总体设计
系统功能分析;
系统功能模块划分与设计(系统功能模块图)。
(三)详细设计
数据库需求分析;
数据库概念结构设计(E-R图);
数据库逻辑结构设计;
类层次图
(四)界面设计与各功能模块实现
(五)系统调试
调试问题出现的主要问题:
编译语法错误及修改,重点是运行逻辑问题修改和调整
(六)使用说明及编程体会
说明如何使用你编写的程序,详细列出每一步的操作步骤。
(七)关键源程序(带注释)
●书写格式
a.要求用A4纸打印成册
b.正文格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;
行距为22。
c.正文的内容:
正文总字数要求在3000字左右(不含程序原代码)。
d.封面格式如下页。
●考核方式
指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。
具体考核标准包含以下几个部分:
a.平时出勤(占10%)
b.系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)
c.程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)
d.设计报告(占30%)
注意:
不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。
e.独立完成情况(占10%)。
●课程验收要求
a.判定算法设计的合理性,运行相关程序,获得正确的数值结果。
b.回答有关问题。
c.提交课程设计报告。
d.提交软盘(源程序、设计报告文档)。
e.依内容的创新程度,完善程序情况及对程序讲解情况打分。
三、
教材及参考书
李春葆等著,C++语言程序设计题典,清华大学出版社;
谭浩强著,C++面向对象程序设计,清华大学出版社;
宛延闿编著,C++语言与面向对象程序设计,清华大学出版社,1998;
郑阿奇主编,VisualC++实用教程,电子工业出版社,2000;
谭浩强著,C语言程序设计(第三版),清华大学出版社;
BrianOverland著,董梁等译.C++语言命令详解(第二版).北京:
电子工业出版社
四、进度安排
班级:
信息与计算科学:
1001、1002、1003
1、主讲教师:
王祝君
2、辅导教师:
王祝君、聂存云
3、时间安排:
第16-17周星期二8时:
00分——11时:
30分
星期二14时:
00分——17时:
星期六8时:
30分——11时:
星期六14时:
30分——17时:
第一章课题简述
1.1设计内容及设计要求………………………………………………3
1.2系统需求分析………………………………………………………7
第二章设计简介及系统大纲
2.1设计简介
2.1.1学生端设计………………………………………………………8
2.1.2管理端设计………………………………………………………8
2.2系统流程……………………………………………………………9
第二章详细设计
3.1数据库需求分析……………………………………………………9
3.2数据库概念结构设计(E—R图)………………………………10
3.3数据库逻辑结构设计………………………………………………10
3.4类层次图……………………………………………………………10
3.5界面设计与各功能模块的实现……………………………………11
第三章系统调试
4.1调试及修改…………………………………………………………14
总结……………………………………………………………………14
附录完整程序代码………………………………………………15
数理系课程设计评分表………………………..……………….…25
第一章课题简述
系统需求分析
当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理好选课信息而设计的。
学校作为一种信息资源的集散地,学生和课程繁多,包含很多的信息数据的管理,现今,有很多的学校都是初步开始使用,甚至尚未使用计算机进行信息管理。
根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于选课情况的统计和查询等往往采用对课程的人工检查进行,对学生的选课权限、以及选课代号等用人工计算、手抄进行。
数据信息处理工作量大,容易出错;
由于数据繁多,容易丢失,且不易查找。
总的来说,缺乏系统,规范的信息管理手段。
尽管学校都有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。
数据处理手工操作,工作量大,出错率高,出错后不易更改。
学校采取手工方式对学生选课情况进行人工管理,由于信息比较多,选课信息的管理工作混乱而又复杂;
一般选课情况是记录在文件上,课程的数目和代号也记录在文件中,学校的工作人员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的选课进行更改就更加困难了。
基于这些问题,我认为有必要建立一个学生选课系统。
本系统是针对高校学生的选修课程而设计,通过本系统高校学生可以很方便地进行自由选课。
第二章设计简介及系统大纲
2.1设计简介
本系统的实现,全部采用C++文件输入输出流,同时还借鉴了部分C语言的知识以及网上查阅的资料,系统设计主要分为学生端设计和管理端设计。
2.1.1学生端的设计
1---浏览课程信息
voidCourse:
:
CourseInfoOutPut()
2---查询课程信息
Search()
SearchByCredithour
SearchByCourseKind(stringstrtemp)
SearchByCourseName
3---退出系统;
2.1.2管理端的设计
1---录入课程信息
CourseInfoInput()
2---浏览课程信息
3---查询课程信息
4---退出系统
2.2系统流程
图2—2系统流程图
第三章详细设计
(1)数据库需求分析
该程序主要包含一个Class类和一个main()函数。
其中Class类中有Input(),OutPut(),Search(),SearchByscore(float),SearchByKind(string),SearchByNmae(string)函数来实现各功能。
像在Input()信息输入函数中,ofstreamoutfile创建一个文件输出流对象语句就要用到系统库函数fstream,而conio.h则是Console(键盘和屏幕)输出输入函数的头文件,con-Console,io--input,output。
程序中各功能函数如SearchBy(float)按分数查询,SearchByKind(string)按性质查询,和SearchByName(string)按课程名称,显然是三个独立的函数,但其实现过程很像似。
(2)数据库概念结构设计(E-R图)
(3)类层次图
(4)
4界面设计与各功能模块实现
(1)、功能实现的文件模块:
在主函数中设置目录显示。
设计一个友好、漂亮的界面,通过switch语句进行选择进入相应的功能模块,建立一个class类的对象a,用对象名调用class类的功能函数,恰当的使用清屏函数。
通过对象a调用相应的成员函数,如a.Input()、a.OutPut()、a.Search()等等,这些公有函数成员就是这个系统要求设计的功能模块。
各个功能函数的具体实现如下:
1、录入函数模块:
首先,利用switch语句鉴别从键盘上输入的数字,绕后分别执行相应的voidMangers()和voidStudents()函数,分别显示不同的登录界面。
然后创建一个文件输出流对象outfile,打开文件,判断文件是否存在。
通过while设一个无限循环,当给出指定条件时退出。
在循环中,调用cout函数来提示用户输入相应的信息,如课程编号、名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期等等。
将需要的课程输入完毕之后,可根据提示再输入“q”,即可返回主菜单,重新进行功能的选择。
该步骤界面设计操作图如下:
(输入“1”,根据提示输入课程信息:
)
(输入“2”,根据提示输入课程信息:
显示(浏览)函数模块:
该函数首先创建了输入流文件对象infile,使用语句infile.open(file),然后定义一个string类型的二维数组,用来保存从文本内读取的信息,用for循环保证保存不止一门课程的信息。
最后,cout输出显示所有保存的信息。
操作界面图如下:
查找功能,即按学分查找,按课程性质和按课程名称查找,具体的实现如下:
按课程性质查找:
创建输入流文件对象infile,然后定义一个string类型的二维数组,用来保存从文本内读取的信息,比较用户输入的字符和保存的信息中那些课程的性质相对应,将相应的课程信息进行输出显示,界面设计操作图如下:
按课程名称查找:
原理同上,如果用户输入的学分与所保存的信息想对应,则将对应的课程信息输出显示。
输入“0”可返回主菜单。
具体程序见源程序清单。
该步骤界面显示如下:
第四章系统调试
4.1调试及修改
(1)、在运行程序时,要注意对应数据所设置的类型,是字符型,还是整形。
在参阅同学的程序之后借鉴了voidecho(char*szStr,intt=50)函数,动态输出结果;
(2)、进行程序调试时,事先函数中没有用到清屏,导致界面繁琐不清晰。
后来在头文件中加了#include<
windows.h>
,又在程序中适当地添加了system("
cls"
)语句,这才使得界面颜色可以改变更加友好清晰。
总结
经过一个学期对《C++面向对象程序设计》的学习,我学习到了基本的理论知识,了解到了C++面向对象程序设计的基本知识,这些知识都为我的课程实践和进一步学习打下了坚实的基础。
通过两星期的C++程序设计实习,我从中受益匪浅,并且对C++面向对象程序设计这门课程有了更深一步的认识。
在实习中,我们可以把这学期所学的理论知识和实践联系起来,在所要的课程设计中逐渐成才。
虽然我们对这些C++语言知识运用还不是很熟练,但是我相信我们也能在滴水穿石中成才起来。
发现问题,提出问题,解决问题,使我们从不足之处出发,寻找新的学习方向。
在老师和同学的帮助下,通过自己查阅资料,终于完成了这次的课程设计。
从刚开始的选择程序,理解程序到后来的调试过程以及改进程序这个过程中,我遇到了各种各样的困难和挫折,但最后通过查询资料和向他人的请教,克服重重困难。
由于时间的紧缺和对课本应用的不太熟悉等原因,程序不能做到想象中那样美好,只能设计出一些简单的部分。
通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方便和巧妙。
懂得了在编写程序之前,要有明确的目标和整体的设计思想。
另外有些具体细节也是相当的重要,这些宝贵的编程思想和从中摸索到的经验,这些对我们以后的编程都会有很大的帮组。
经过这两周实习,我获得了许多在课堂上听不到的知识,在这里我要谢谢老师给我们安排的课程设计实习,感谢老师对我们热心的指导和帮助。
这次课程设计让我从分认识到了自己的不足,认识到了动手能力的重要性。
我会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更完善的程序,为以的编程打好基础!
附录完整程序代码
#include<
conio.h>
stdlib.h>
iostream>
fstream>
string>
#include<
usingnamespacestd;
classCourse
{private:
intcourseNumber;
stringcourseName;
stringcourseKind;
intcoursePeriod;
intschoolPeriod;
intexperimentPeriod;
floatcredithour;
stringcourseterm;
public:
voidCourseInfoInput();
//信息输入
voidCourseInfoOutPut();
//信息输出
voidSearch();
//查找信息
voidSearchByCredithour(float);
//按照学分查找
voidSearchByCourseKind(string);
//按照课程;
类型查找
voidSearchByCourseName(string);
};
voidecho(char*szStr,intt=50)
{for(inti=0;
i<
strlen(szStr);
i++)
{cout<
<
szStr[i];
Sleep(t);
}}//动态输出结果
constchar*coursefile="
C:
\\course.txt"
;
//将课程信息定位到C盘下的course.txt中
CourseInfoInput()//课程信息的录入
{ofstreamoutcoursefile;
//创建一个文件输出流对象
outcoursefile.open(coursefile);
//打开文件
if(!
outcoursefile)//判断文件是否存在
{cout<
"
文件打开失败!
"
endl;
return;
}
while
(1)//无限循环,给出指定条件退出
{cout<
******************************课程信息*******************"
endl;
cout<
**按任意键开始信息录入**"
**输入q退出**"
cout<
*********************************************************"
if(getch()=='
q'
{break;
请输入课程编号:
cin>
>
courseNumber;
请输入课程名称:
courseName;
请输入课程性质:
courseKind;
请输入总学时:
coursePeriod;
请输入授课学时:
schoolPeriod;
请输入实验&
上机学时:
experimentPeriod;
请输入学分:
credithour;
cout<
请输入开课学期:
courseterm;
outcoursefile<
\t\t\t\t"
courseNumber<
courseName<
courseKind<
coursePeriod<
schoolPeriod<
experimentPeriod<
credithour<
courseterm<
}
outcoursefile.close();
//关闭输出流文件
CourseInfoOutPut()//课程信息的浏览
{ifstreamincoursefile;
//创建输入流文件对象
incoursefile.open(coursefile);
//打开
incoursefile)//判断文件存在
文件读取失败"
cout<
课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|学分|开课学期\n"
stringarrcourse[100][100];
//定义一个string类型的二维数组,用来保存从文本内读取的信息
intline=0;
memset(arrcourse,0,sizeof(arrcourse));
//将数组清空
while(!
incoursefile.eof())//文件不为空的条件设置
{for(intj=0;
j<
8;
j++)
{incoursefile>
arrcourse[line][j];
line++;
}
for(inti=0;
line;
{cout<
arrcourse[i][j]<
\t"
cout<
incoursefile.close();
SearchByCredithour(floattempch)
{ifstreamincoursefile;
incoursefile.open(coursefile);
return;
{incoursefile>
arrcourse[line][0]>
arrcourse[line][1]>
arrcourse[line][2]>
arrcourse[line][3]>
arrcourse[line][4]>
arrcourse[line][5]>
arrcourse[line][6]>
arrcourse[line][7];
//文件流读取数据
课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|学分|开课学期\n"
{if(atof(arrcourse[i][6].c_str())==tempch)//比较
arrcourse[i][0]<
\t"
arrcourse[i][1]<
<
arrcourse[i][2]<
arrcourse[i][3]<
\t"
arrcourse[i][4]<
arrcourse[i][5]<
\t\t"
arrcourse[i][6]<
arrcourse[i][7]
<
\n*********************************************************"
endl}}
\n\n"
SearchByCourseKind(stringstrtemp)///课程类型查询