课程设计报告.docx
- 文档编号:25304415
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:46
- 大小:897.68KB
课程设计报告.docx
《课程设计报告.docx》由会员分享,可在线阅读,更多相关《课程设计报告.docx(46页珍藏版)》请在冰豆网上搜索。
课程设计报告
课程设计报告
课程名称《计算机系统与系统软件》
课题名称学生成绩管理系统
专业信息管理与信息系统
班级
学号
姓名
指导教师
2011年1月09日
湖南工程学院
课程设计任务书
课程名称《计算机系统与系统软件》
课题学生成绩管理系统
专业班级
学生姓名
学号
指导老师
审批
任务书下达日期2010年12月20日
任务完成日期2011年1月09日
一、设计内容与设计要求
1.课程设计目的:
全面熟悉、掌握计算机系统与系统软件基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,增强面向对象程序设计概念,熟悉C++语言编程,养成提供文档资料的习惯和规范编程的思想,为后继课程的实验以及课程设计打下较扎实的基础。
进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程(数据结构、数据库和汇编语言等课程)的实验以及课程设计,特别是自学、毕业论文的完成打下扎实的基础。
2.课题题目
1、学生成绩管理系统
2、职工信息管理系统
3、图书管理系统程序系统
4、教师工作量统计系统
3.设计要求:
●主要模块
1、学生成绩管理系统
具有功能:
1、显示统计数据2、查找学生成绩3、修改学生成绩4、删除学生成绩5、插入学生成绩6、按平均分降序排列7、显示全部学生成绩8、退出本系统
2、职工信息管理
具有功能:
1、添加信息2、显示统计数据3、查找学生成绩4、修改信息5、删除信息6、插入信息7、显示全部信息8、退出本系统
3、图书管理系统程序
具有功能:
1、浏览书籍信息2、修改书籍信息3、统计书记情况4、查询书的基本信息5、录入新书信息
4、教师工作量统计系统
具有功能:
1、输入教师信息2、查看教师信息3、清空记录4、退出程序
课程设计报告规范
1、完成系统需求分析:
包括系统设计目的与意义;系统功能需求;输入输出的要求。
2、完成系统概要设计:
程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
3、完成系统详细设计:
包括采用C++语言定义相关的数据类型;写出各模块的类C++码算法;画出函数的调用关系图。
4、调试分析、设计体会、测试数据:
准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。
5、关键源程序(带注释)
6、其他
1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5)实际操作过程中遇到的问题及解决方法:
设计总结及心得体会.
6)上机演示。
二、进度安排
第17周星期二14时:
00分
星期三8时:
00分
星期四8时:
00分
星期五8时:
00分
第18周星期二14时:
00分
星期三14时:
00分
一.课题系统主要功能分析
1、系统需求
(1)问题描述:
该系统实现对若干个大学生的学习成绩进行管理。
至少包括以下信息:
学号、姓名、科目(电子,C语言,新闻,英语,数学,体育,政治)及其成绩。
总分,平均分,名次。
(2)功能要求:
1.使用中文菜单,界面设计和用户输入输出要人性化些;
2.将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。
3.具有数据输入功能,输入的数据能最终保存在文件中;
4.具有数据删除功能,能最终从文件中删除;
5.排序功能,根据自己设计的数据结构,设计排序算法
6.具有多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;
7.其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平均分等等)
8.学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)
(3)说明:
功能各方面越完善越好
自定义的数据结构可以使用数组,链表,树等,然后根据不同的数据结构,设计不同的排序,查找算法。
其中,排序算法至少有两种,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。
若用数组,必须动态分配空间(文本文件中最好有一行表示学生人数)
(4)、输入输出的形式
本系统是一个学生成绩管理系统,采用VC++6.0编译器作为开发环境,这个环境是我们在学习C++的平台。
输入数据类型主要是char、int、float等数据类型,输入内容包括:
学期、学号、姓名、高等数学成绩,数据机构成绩,组成原理成绩,总分,平均分等数据。
用户在输入学生数据时要保证输入数据格式的正确性,系统不会自动检测输入的数据是否正确,输出形式与输入形式类似,根据需要可以选择显示输入的各项内容,还可以选择显示计算好平均分后并排序后的记录,显示内容包括:
学期、学号、姓名、高等数学成绩,数据机构成绩,组成原理成绩,总分,平均分等数据。
2、开发环境
VisualC++不仅仅是是一个C++编译器,而是一个基于Windows操作系统的可视化集成开发环境IDE,这种环境开发出来的软件稳定性好、可移植性强,可以编制各种各样的Windows应用程序。
本课题运用了c++类(面向对象)、链表和指针相结合开发的学生成绩管理系统,该系统的主要功能是:
1.输入信息
2.统计分数
3.查找信息
4.修改信息
5.删除信息
6.输出信息
7.排序分数
8.插入信息
9.写入信息
10.读取信息
11.退出系统
二、总体设计分析
本程序实行了对学生成绩管理系统的管理,其系统功能模块如图所示;
图2-1系统功能模块
三、实现主要功能模块流程图
3.1查询模块
图3-1查询模块流程图
3.2修改模块
图3-2修改模块流程图
3.3删除模块
图3-3删除模块流程图
四、详细分析
1.功能模块划分
1.00先编入系统所需的库函数,从而使程序可运行。
#include
#include
#include
#include
#include
1.01构建学生类
首先构建学生类,里面用public定义友元函数,用private定义学生的属性变量(包括学号,姓名,各科成绩,总分,平均分,名次)。
友元函数的特点是能够访问类中的私有成员的非成员函数。
友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。
classStu//构建学生类
{
public:
friendvoidInput(Stustud[]);
friendvoidStatistic(Stustud[]);
friendvoidLookup(Stustud[]);
friendvoidModify(Stustud[]);
friendvoidDelete(Stustud[]);
friendvoidOutput(Stustud[]);
friendvoidSort(Stustud[]);
friendvoidInsert(Stustud[]);
friendvoidWrite(Stustud[],intn);
friendvoidsort(Stustud[]);
friendvoidPaixu(Stustud[]);
friendvoidRead(Stustud[]);
voidprint(Stustud[],inti);
friendvoidinput(Stustud[]);
private:
intnum;
charname[8];
floatelec;
floatc_program;
floatmedia;
floatenglish;
floatmath;
floatsport;
floatpolity;
floataverage;
floatsum;
intorder;
};
Stustud[M];
1.01主函数
主函数主要是菜单的选择,当进系统时,通过输入m进行选择需要执行的函数功能。
voidmain()
{包括菜单和菜单的选择…….
}
1.02输入信息
利用类构造数组存储学生的信息,按照提示信息有顺序的输入学号,姓名,各科成绩等信息。
然后选择是否继续输入下一个学生的信息,是按‘y’否按其他键,直到结束。
然后返回主菜单。
注意:
输入的学号不能重复,还有各科的成绩必须都为(0-100)。
voidInput(Stustud[])//输入信息
{intn=0;intt=0;
do
{t=0;
cout<<"请输入学号:
";
cin>>stud[N].num;
for(n=0;n if(stud[N].num==stud[n].num) {cout<<"该学号已存在! ! "< t++; break; } }while(t==1); cout<<"请输入姓名: "; cin>>stud[N].name; …………………………. } 1.03统计函数 此函数主要是对每个学生的各科成绩进行累加,最后求平均值。 voidStatistic(Stustud[]) {for(inti=0;i {stud[i].sum=stud[i].elec+stud[i].c_program+stud[i].media+stud[i].math+stud[i].english+stud[i].sport+stud[i].polity; stud[i].average=stud[i].sum/7; } } 1.04查询函数 首先选择要进入查询的方式,输入该种进入查询方式的相对应信息,接着系统会判断该学生是否存在,是的话就输出你所要查询的学生全部信息,否则显示不存在该学生。 voidLookup(Stustud[]) {1.按学号查询 2.按姓名查询 3.按总分查询 cout<<"请选择···(1--4)"< cin>>m; switch(m) {case'1': …………………………. case'2': …………………….. case'3': ……………………. case'4': cout<<"谢谢使用! "< default: cout<<"请输入正确数字(1--11)"< } }while(m! ='4'); } 1.05修改函数 首先选择要进入修改的方式,输入该种进入修改方式的相对应信息,先查出此学生的原本信息,然后再对该学生的信息进行修改。 此功能是可以利用不同种方式进入修改的。 voidModify(Stustud[]) {charm;inti=0; 1.按学号进入修改 2.按姓名进入修改 switch(m) {case'1': ………… case'2': …………. case'3': cout<<"谢谢使用! "< default: cout<<"请输入正确数字(1--3)"< } }while(m! ='3'); } 1.06删除函数 首先要删除一个学生的信息,输入所有删除的学号后判断该学生是否存在,如果不存在,则输出没有该学生的提示信息;否则就删除所要删除的学生信息,,然后把后面的学生记录都向前移一位,返回N-1。 voidDelete(Stustud[]) {………………. } 1.07输出学生信息 学生信息录入完毕后,更多的操作时显示和查找记录,本函数实现学生信息的显示功能。 voidOutput(Stustud[]) {………………………………. } 1.08按总分降序排序 此函数采用的是冒泡法对每个学生的总分进行排序。 voidsort(Stustud[]) {if(N>0) {for(intk=0;k for(intm=0;m { Stumax; if(stud[m].sum { max=stud[m+1]; stud[m+1]=stud[m]; stud[m]=max; } } for(inti=0;i stud[i].order=i+1; } } 1.09按学号排序 此函数是按照学生的学号进行排序。 voidPaixu(Stustud[]) {…………………………… } 1.10插入信息 当发现有遗漏学生信息时,可以执行插入函数,插入到系统中,然后自动统计和排名。 voidInsert(Stustud[]) {chark; do { Input(stud); cout<<"是否继续输入? (继续请输入y,结束输入其他)"< cin>>k; N++; }while(k=='y'); Statistic(stud); sort(stud); Output(stud); } 1.11写入文件 首先打开一个指定的文件,并判断打开的是不是存在的,是的话则输出提示信息,将记录写入文件,并将换行符号写入文件,显示保存成功。 注意: 换行符号是“\r\n”。 voidWrite(Stustud[],intn) {ofstreammyFile("c: \\student.txt",ios: : out|ios: : dec); if(! myFile) {cout<<"c: \\student.txtcan'topen! "< abort(); } else {………………………… } } 1.12读取文件 该函数的功能是从指定的文件中读取信息并输出。 voidRead(Stustud[]) {…………………….. } 1.13退出系统 2.程序调试中的问题 1.首先是用类定义一个数组Stustud[M],原本写成指针型数组Stu*stud[M],导致后面都是错的。 因为整个程序中,我都是以结构体数组的形式对每个学生的信息进行操作。 2.第一次编程时,当输入学生信息时,不同的学生输入的学号是可以相同的,这很不严谨,所以必须对其输入学号时进行限制。 将新输入的学号与系统中的学号进行比较,相同时就重输。 3.同上,当输入各科成绩时,成绩也是有限制的,必须控制在0-100分。 4.信息的显示是很重要的,当然为了美观,我们必须要使输出来的信息整齐,合理,只要在数据之间用setw(n)控制数据之间的距离。 5.当执行查询操作时,选择查询方式时,输入字符时,系统会编程死循环。 所以必须对进行选择查询的m的类型定义为字符型,这样就不会出现上面的情况。 6.当对一个学生的信息进行修改时,首先选择查询你所以修改的学生的方式。 修改完后会输出所有学生的信息。 开始时,修改的学生的在成绩单中并没有总分统计和名次。 所以必须加上Statistic(stud);sort(stud);两个子函数,输出的就是排名后的成绩单。 7.当修改一个学生时,有的只要修改其成绩的数据而不必修改他的学号时,就不能直接调用Input(stud);函数,因为Input(stud);函数中是有对学号进行限制的,当新输入学号相同时,就会要求重输。 所以必须另建一个函数input(stud);不对学号的限制。 8.当输出信息时,需要setw(n)进行数据间的距离控制,当刚开始时是显示错误的: 'setw': undeclaredidentifier。 所以只需要在加上#include 9.删除函数时,也要对输入的信息进行查询,当找不到时的情况是j>=N,而不是j>N,否者无论输什么信息进行查询时都不会显示该学生不存在。 10.删除信息时,当从被删除的学生后面起,后面的学生信息覆盖前面的学生信息时,是用循环的。 而N--;是放在循环外面的。 不然将会删除很多学生的信息,导致数据的缺失。 11.将信息存入文件中时,本来也是为了输出的美观。 对数据的距离加以控制, myFile<<"****************************************"<<"\r\n"; myFile<<"*学号姓名电子c语言媒体英语数学体育政治总分平均分名次*"<<"\r\n"; 输入到文件中,显示的是正确的,但当从文件中读取信息时,输出的第一个学生的学号总是为0,经过老师的帮组下,原来“*”这些都是多余的。 导致读取有误。 所以只要将这些修饰的符号都删掉就可以了。 12.调用写入文件的函数时,因为类中定义的友元函数是friendvoidWrite(Stustud[],intn);,所以在调用是也需要输入正确: Write(stud,N);而不能少了N; 13.当按照学生的姓名进行查找学生的信息时,for(i=0;i for(i=0;i =0;i++); 14.还有就是细节问题了,比如字符的大小写,还有符号的遗漏,特别是分号等等。 五、程序调试 5.0输入和输出学生成绩 选择序号1进行输入学生信息 图5-1学生信息在输入 选择6进行输出学生信息: 图5-2学生信息在输出 5.1排序统计成绩 选择序号7进行学生成绩的排序(排序后再进行显示学生成绩) 5-3学生成绩在排序 5.2修改学生成绩 选择4进行修改学生成绩 图5-4修改学生信息 六、心得体会 经过一周多的c++课程设计,今天终于要完成了,虽然遇到很多麻烦,但还是有很多的收获的,就上课的理论学习而言,我又一次巩固了所学到的知识,之前的学习只是停留在理论基础上,现在自己动手操作试验后,才是真正的理解及体会。 相对于上学期的c语言课程设计,我有更进一步学到了跟多的知识。 我们虽然学习程序设计有一学年了,但有很多知识都是似懂非懂,通过平时上机操作,自己也了解了一些,但让我有了更深的理解和更好的认识,则是在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进步就很高兴。 重在实践,过程又是那么的有趣,有过困难有过快乐,只要我们努力了,我们就会有成果。 当然做课设,最重要的还是态度问题,我们都应该秉着认真对待,态度端正,细心编程,准备合理,虚心请教的态度做课设。 在课程设计之前,因为有了上学期的课设还有这学期的实验经验,明白了写代码这一步是非常重要的,因为当你把代码输进去之后,并编译让其运行,发现通过不了,再来检查出问题,是很费费力的事情,因此分析和规划代码是很重要的,最重要的是要把逻辑结构写好,这样就不会出现大问题,写代码就要先找出核心的内容,用多种方法来实现核心部分,这样可以尽可能的避免发现逻辑或编译不支持的错误。 在实践过程中,我遇到了很多困难,有很多不懂的地方,重要的是有很多细节还是会经常出错的,但我也学会了自己去探索其中的原因,再不会的就会和同学一起探讨。 很多事情都是看上去很难,可是做起来并不是想象中的那么困难,同时,很多事情也是看上去很容易,可是最终细节才是决定成败的关键。 平时接触c++也不是很多,自己还不是很熟练,所以一起合作,一起讨论作用很大。 刚开始时,很害怕会做不好,总是会丢掉很多细小的方面,字母写错,标准库函数的不熟等。 但慢慢的就逐渐融入C++体系当中了。 当编出一个程序出来时,我就会有很大成就感,于是我就会更认真的去探索新的知识。 通过本次论文设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道了如何整合资料和处理这些资料的能力,这位以后做毕设的论文打下了基础,使我感觉比较好的是有一种成功的喜悦,虽然在编译的时候会经常因为一些小的错误而心烦意乱,但是也不失为一件好事,失败的越多积累的经验越丰富,对人的考验也比较多,那么在最后编译成功时的喜悦就越浓烈,也是自己的能力有了进一步的提高。 由于知识和经验的不足,这个程序编写的不是很尽如人意,但是融合了自己的心血,就觉得是最好的,所以在以后还是需要较多的努力的,还是会在以后的学习过程中不断地提高和改进的。 七、附件 7.1程序源代码 #include #include #include #include #include #defineM35 intN=0; classStu//构建学生类 { public: friendvoidInput(Stustud[]); friendvoidStatistic(Stustud[]); friendvoidLookup(Stustud[]); friendvoidModify(Stustud[]); friendvoidDelete(Stustud[]); friendvoidOutput(Stustud[]); friendvoidSort(Stustud[]); friendvoidInsert(Stustud[]); friendvoidWrite(Stustud[],intn); friendvoidsort(Stustud[]); friendvoidPaixu(Stustud[]); friendvoidRead(Stustud[]); voidprint(Stustud[],inti); friendvoidinput(Stustud[]); privat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告