《算法与程序设计课程设计学生选修课程系统.doc》由会员分享,可在线阅读,更多相关《算法与程序设计课程设计学生选修课程系统.doc(21页珍藏版)》请在三一办公上搜索。
1、课 程 设 计 报 告课程名称 算法与程序设计 课题名称 学生选修课程系统 专 业 信息与计算科学 班 级 1002班 学 号 姓 名 指导教师 2011年12 月 24 日湖 南 工 程 学 院课 程 设 计 任 务 书课程名称 算法与程序设计 课 题 学生选修课程系统 专业班级 信息与计算科学1002班 学生姓名 学 号 指导老师 审 批 任务书下达日期 2011 年 12 月 8日任务完成日期 2012 年 1 月 7日一、设计内容与设计要求1设计内容:对课程算法与程序设计中的相关内容进行综合设计或应用(具体课题题目见后面的供选题目)。题目1:学生选修课程系统(一)、课程设计题目:学生选
2、修课程系统(二)、目的与要求: 1、目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及C+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 (三、)设计方法和基本原理: 1、问题描述(功能要求): 假定有n门课程,每门课程有课程编号,课程
3、名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:(1)系统以菜单方式工作(2)课程信息录入功能(课程信息用文件保存)输入(3)课程信息浏览功能输出(4)查询功能:(至少一种查询方式)算法 按学分查询 按课程性质查询(5)学生选修课程(可选项)2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次; (3)完成类层次中各个类的描述(包括属性和方法); (4)完成类中各个成员函数的定
4、义; (5)完成系统的应用模块; (6)功能调试; (7)完成系统总结报告以及系统使用说明书。2设计要求:l 课程设计报告正文内容(包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,总结,参考书目等)。(一)需求分析系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求;(二)总体设计系统功能分析; 系统功能模块划分与设计(系统功能模块图)。(三)详细设计数据库需求分析 ;数据库概念结构设计(ER图);数据库逻辑结构设计;类层次图(四)界面设计与各功能模块实现(五)系统调试调试问题出现的主要问题:编译语法错误及修改,重点是运行
5、逻辑问题修改和调整(六)使用说明及编程体会说明如何使用你编写的程序,详细列出每一步的操作步骤。(七)关键源程序(带注释)l 书写格式a要求用A4纸打印成册b正文格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。c正文的内容:正文总字数要求在3000字左右(不含程序原代码)。d封面格式如下页。l 考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:a平时出勤 (占10%)b系统需求分析、功能设计、数据结构设计及
6、程序总体结构合理与否(占10%)c程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)d设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。e独立完成情况(占10%)。l 课程验收要求a判定算法设计的合理性,运行相关程序,获得正确的数值结果。b回答有关问题。c提交课程设计报告。d提交软盘(源程序、设计报告文档)。e依内容的创新程度,完善程序情况及对程序讲解情况打分。三、 教材及参考书 李春葆等著, C+ 语言程序设计题典,清华大学出版社;谭浩强著,C+面向对象程序设计,清华大学出版社;宛延闿编著,C+语言与面向对象程序设计,清华大学出版社,1998
7、;郑阿奇主编,Visual C+实用教程,电子工业出版社,2000;谭浩强著,C语言程序设计(第三版),清华大学出版社;Brian Overland 著,董梁等译.C+语言命令详解(第二版).北京:电子工业出版社四、进度安排班级: 信息与计算科学:1001、1002、10031、 主讲教师:王祝君2、 辅导教师:王祝君、聂 存 云3、 时间安排:第 16-17 周 星期二 8时:00分11时:30分 星期二 14时:00分17时:30分 星期六 8时:30分11时:30分 星期六 14时:30分17时:30分目录第一章 课题简述11设计内容及设计要求312系统需求分析7第二章 设计简介及系统大
8、纲21设计简介211学生端设计8212管理端设计822系统流程9第二章 详细设计31数据库需求分析932数据库概念结构设计(ER图)1033数据库逻辑结构设计1034类层次图1035界面设计与各功能模块的实现11第三章 系统调试41调试及修改14总结14附录 完整程序代码15数理系课程设计评分表.25第一章 课题简述系统需求分析当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
9、计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好选课信息而设计的。学校作为一种信息资源的集散地,学生和课程繁多,包含很多的信息数据的管理,现今,有很多的学校都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于选课情况的统计和查询等往往采用对课程的人工检查进行,对学生的选课权限、以及选课代号等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管学校都有计算机,但是尚未用于信息管理,没有发挥
10、它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。学校采取手工方式对学生选课情况进行人工管理,由于信息比较多,选课信息的管理工作混乱而又复杂;一般选课情况是记录在文件上,课程的数目和代号也记录在文件中,学校的工作人员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的选课进行更改就更加困难了。基于这些问题,我认为有必要建立一个学生选课系统。本系统是针对高校学生的选修课程而设计,通过本系统高校学生可以很方便地进行自由选课。第二章 设计简介及系统大纲2.1设计简
11、介本系统的实现,全部采用C+文件输入输出流,同时还借鉴了部分C语言的知识以及网上查阅的资料,系统设计主要分为学生端设计和管理端设计。2.1.1 学生端的设计1-浏览课程信息void Course:CourseInfoOutPut()2-查询课程信息void Course:Search()void Course:SearchByCredithourvoid Course:SearchByCourseKind(string strtemp)void Course:SearchByCourseName3-退出系统;2.1.2 管理端的设计1-录入课程信息void Course:CourseInfoI
12、nput() 2-浏览课程信息void Course:CourseInfoOutPut()3-查询课程信息void Course:Search()void Course:SearchByCredithourvoid Course:SearchByCourseKind(string strtemp)void Course:SearchByCourseName4-退出系统2.2 系统流程主 菜 单浏览课程查询课程管理员菜单录入课程退出系统浏览所有课程查询课程信息学生菜单退出系统图22系统流程图第三章 详细设计(1) 数据库需求分析该程序主要包含一个Class类和一个main()函数。其中Class
13、类中有Input(),OutPut(),Search(),SearchByscore(float),SearchByKind(string),SearchByNmae(string)函数来实现各功能。像在Input()信息输入函数中,ofstream outfile 创建一个文件输出流对象语句就要用到系统库函数fstream,而conio.h则是 Console (键盘和屏幕) 输出输入函数的头文件,con - Console,io - input,output。程序中各功能函数如SearchBy (float)按分数查询,SearchByKind(string)按性质查询,和SearchBy
14、Name(string)按课程名称,显然是三个独立的函数,但其实现过程很像似。(2) 数据库概念结构设计(ER图)课程授课学时时编号名称上级学时性质学分时 时总学分开课学期输入入输出显示查找性质(3) 类层次图主菜单 学生选修课程系统Course类Main函数Input()Output() SearchByscore()SearchByKind()管理员程系统4界面设计与各功能模块实现(1)、功能实现的文件模块: 在主函数中设置目录显示。设计一个友好、漂亮的界面,通过switch语句进行选择进入相应的功能模块,建立一个class类的对象a,用对象名调用class类的功能函数,恰当的使用清屏函数
15、。通过对象a调用相应的成员函数,如a.Input()、a.OutPut()、a.Search()等等,这些公有函数成员就是这个系统要求设计的功能模块。各个功能函数的具体实现如下: 、 录入函数模块:首先,利用switch语句鉴别从键盘上输入的数字,绕后分别执行相应的void Mangers()和void Students()函数,分别显示不同的登录界面。然后创建一个文件输出流对象outfile,打开文件,判断文件是否存在。通过while设一个无限循环,当给出指定条件时退出。在循环中,调用cout函数来提示用户输入相应的信息,如课程编号、名称、课程性质、总学时、授课学时、实验或上机学时、学分、开
16、课学期等等。将需要的课程输入完毕之后,可根据提示再输入“q”,即可返回主菜单,重新进行功能的选择。该步骤界面设计操作图如下:(输入“1”,根据提示输入课程信息:)(输入“2”,根据提示输入课程信息:)显示(浏览)函数模块:该函数首先创建了输入流文件对象infile,使用语句infile.open(file),然后定义一个string类型的二维数组,用来保存从文本内读取的信息,用for循环保证保存不止一门课程的信息。最后,cout输出显示所有保存的信息。操作界面图如下:查找功能,即按学分查找,按课程性质和按课程名称查找,具体的实现如下:按课程性质查找:创建输入流文件对象infile,然后定义一个
17、string类型的二维数组,用来保存从文本内读取的信息,比较用户输入的字符和保存的信息中那些课程的性质相对应,将相应的课程信息进行输出显示,界面设计操作图如下:按课程名称查找:原理同上,如果用户输入的学分与所保存的信息想对应,则将对应的课程信息输出显示。输入“0”可返回主菜单。具体程序见源程序清单。该步骤界面显示如下:第四章 系统调试41调试及修改(1)、在运行程序时,要注意对应数据所设置的类型,是字符型,还是整形。在参阅同学的程序之后借鉴了void echo(char* szStr,int t=50)函数,动态输出结果; (2)、进行程序调试时,事先函数中没有用到清屏,导致界面繁琐不清晰。后
18、来在头文件中加了#include,又在程序中适当地添加了system(cls)语句,这才使得界面颜色可以改变更加友好清晰。总结经过一个学期对C+面向对象程序设计的学习,我学习到了基本的理论知识,了解到了C+面向对象程序设计的基本知识,这些知识都为我的课程实践和进一步学习打下了坚实的基础。通过两星期的C+程序设计实习,我从中受益匪浅,并且对C+面向对象程序设计这门课程有了更深一步的认识。在实习中,我们可以把这学期所学的理论知识和实践联系起来,在所要的课程设计中逐渐成才。虽然我们对这些C+语言知识运用还不是很熟练,但是我相信我们也能在滴水穿石中成才起来。发现问题,提出问题,解决问题,使我们从不足之
19、处出发,寻找新的学习方向。在老师和同学的帮助下,通过自己查阅资料,终于完成了这次的课程设计。从刚开始的选择程序,理解程序到后来的调试过程以及改进程序这个过程中,我遇到了各种各样的困难和挫折,但最后通过查询资料和向他人的请教,克服重重困难。由于时间的紧缺和对课本应用的不太熟悉等原因,程序不能做到想象中那样美好,只能设计出一些简单的部分。通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方便和巧妙。懂得了在编写程序之前,要有明确的目标和整体的设计思想。另外有些具体细节也是相当的重要,这些宝贵的编程思想和从中摸索到的经验,这些对我们以后的编程都会有很大的帮组。
20、经过这两周实习,我获得了许多在课堂上听不到的知识,在这里我要谢谢老师给我们安排的课程设计实习,感谢老师对我们热心的指导和帮助。这次课程设计让我从分认识到了自己的不足,认识到了动手能力的重要性。我会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更完善的程序,为以的编程打好基础!附录 完整程序代码#include#include#include#include#include#include using namespace std;class Courseprivate: int courseNumber; string courseName; string courseKind; int
21、coursePeriod; int schoolPeriod; int experimentPeriod; float credithour; string courseterm;public: void CourseInfoInput(); /信息输入 void CourseInfoOutPut(); /信息输出 void Search(); /查找信息 void SearchByCredithour(float); /按照学分查找 void SearchByCourseKind(string); /按照课程;类型查找 void SearchByCourseName(string);void
22、 echo(char* szStr,int t=50) for(int i=0;istrlen(szStr);i+)coutszStri; Sleep(t); /动态输出结果const char* coursefile=C:course.txt; /将课程信息定位到C盘下的course.txt中!void Course:CourseInfoInput() /课程信息的录入ofstream outcoursefile; /创建一个文件输出流对象outcoursefile.open(coursefile); /打开文件if(!outcoursefile) /判断文件是否存在cout 文件打开失败!
23、 endl; return ;while(1) /无限循环,给出指定条件退出 cout*课程信息*endl;cout* 按任意键开始信息录入 *endl;cout* 输入q退出 *endl; cout*endl;if(getch()=q)break;coutcourseNumber;coutcourseName;coutcourseKind;coutcoursePeriod;coutschoolPeriod;coutexperimentPeriod;coutcredithour; coutcourseterm;outcoursefilettttcourseNumber courseName c
24、ourseKind coursePeriod schoolPeriod experimentPeriod credithour coursetermendl;outcoursefile.close(); /关闭输出流文件 void Course:CourseInfoOutPut() /课程信息的浏览 ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile); /打开if(!incoursefile) /判断文件存在cout 文件读取失败; return ;cout 课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|
25、学分|开课学期n;string arrcourse100100; /定义一个string类型的二维数组,用来保存从文本内读取的信息int line=0;memset(arrcourse,0,sizeof(arrcourse); /将数组清空while(!incoursefile.eof() /文件不为空的条件设置for(int j=0;jarrcourselinej;line+; for(int i=0;iline;i+)for(int j=0;j8;j+)cout arrcourseij t;cout endl;incoursefile.close();void Course:SearchB
26、yCredithour(float tempch)ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile); /打开if(!incoursefile) /判断文件存在cout arrcourseline0arrcourseline1arrcourseline2arrcourseline3arrcourseline4arrcourseline5arrcourseline6arrcourseline7; /文件流读取数据line+;cout 课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|学分|开课学期n;for(i
27、nt i=0;iline;i+)if(atof(arrcoursei6.c_str()=tempch) /比较cout arrcoursei0 t arrcoursei1 t arrcoursei2 t arrcoursei3 t arrcoursei4 t arrcoursei5 tt arrcoursei6 t arrcoursei7n* endlcout nn;incoursefile.close();void Course:SearchByCourseKind(string strtemp)/课程类型查询 ifstream incoursefile; /创建输入流文件对象incours
28、efile.open(coursefile); /打开if(!incoursefile) /判断文件存在cout arrcourseline0arrcourseline1arrcourseline2arrcourseline3arrcourseline4arrcourseline5arrcourseline6arrcourseline7;line+;cout 课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|学分|开课学期n;for(int i=0;iline;i+)if(arrcoursei2=strtemp)cout arrcoursei0 t arrcoursei1 t ar
29、rcoursei2 t arrcoursei3 t arrcoursei4 t arrcoursei5 tt arrcoursei6 t arrcoursei7n* endl;cout nn;void Course:SearchByCourseName(string strtemp1) ifstream incoursefile; /创建输入流文件对象incoursefile.open(coursefile); /打开if(!incoursefile) /判断文件存在cout arrcourseline0arrcourseline1arrcourseline2arrcourseline3arr
30、courseline4arrcourseline5arrcourseline6arrcourseline7;line+;cout 课程编号|课程名称|课程性质|总学时|授课学时|实验上机学时|学分|开课学期n;for(int i=0;iline;i+)if(arrcoursei1=strtemp1)cout arrcoursei0 t arrcoursei1 t arrcoursei2 t arrcoursei3 t arrcoursei4 t arrcoursei5 tt arrcoursei6 t arrcoursei7n* endl;cout nn;void Course:Search(
31、)while(1) cout 选择查询方式: endl;cout (1).按课程类型查询 endl;cout (2).按课程名称查询endl; cout (3).按学分查询 endl;cout (0).返回i;switch(i)case 1: cout strtmp; SearchByCourseKind(strtmp); break;case 2: coutstrtmp1; SearchByCourseName(strtmp1); break;case 3: cout ftemp; SearchByCredithour(ftemp); break;if(i=0) break; void St
32、udents() int n,j,a,w=1,flag=0,i=3; char s8; char password=19911219; do cout(nnEnter password:); j=0;while(1) a=getch(); if(a=13) break;sj=a; j+; cout(*);sj=0; if(!strcmp(s,password) /进行密码匹配验证 flag=1; break; else cout(nnError! You only have %d times! Enter again:n,i-1)0); if(!flag) cout(谢谢您的使用,你已3次输入密码错误!)n; switch(n) case 1:Excourse.CourseInfoOutPut();break; case 2:Excourse.Search();break; case 0:exit(0); while(w=1); void Mangers() int n,j,a,w=1,flag=0,i=3; char s8; char password=19911219; do cout(