![面向对象程序设计(高校学籍管理系统)_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/f00ea5e6-f302-43b8-8dc2-69980ab8b9c1/f00ea5e6-f302-43b8-8dc2-69980ab8b9c11.gif)
![面向对象程序设计(高校学籍管理系统)_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/f00ea5e6-f302-43b8-8dc2-69980ab8b9c1/f00ea5e6-f302-43b8-8dc2-69980ab8b9c12.gif)
![面向对象程序设计(高校学籍管理系统)_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/f00ea5e6-f302-43b8-8dc2-69980ab8b9c1/f00ea5e6-f302-43b8-8dc2-69980ab8b9c13.gif)
![面向对象程序设计(高校学籍管理系统)_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/f00ea5e6-f302-43b8-8dc2-69980ab8b9c1/f00ea5e6-f302-43b8-8dc2-69980ab8b9c14.gif)
![面向对象程序设计(高校学籍管理系统)_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/f00ea5e6-f302-43b8-8dc2-69980ab8b9c1/f00ea5e6-f302-43b8-8dc2-69980ab8b9c15.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 报 告 课程名称 面向对象程序设计 课题名称 高校学籍管理系统一、设计内容与设计要求1.课程设计目的:面向对象程序设计课程设计是集中实践性环节之一,是学习完面向对象程序设计课程后进行的一次全面的综合练习。要求学生达到熟练掌握C+语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。2.课题题目高校学籍管理系统3设计要求:设计课题题目:每位同学根据自己学号除以4所得的余数加一选择相应题号的课题。换题者不记成绩。根据自己对应的课题完成以下主要工作:完成系统需求分析:主要包括系统设
2、计目的与意义;系统功能需求(系统框图);输入输出的要求等内容。完成系统总体设计:主要包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。完成系统详细设计:主要包括类层次图;界面设计与各功能模块实现等累人。完成系统调试:主要包括调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。使用说明书及编程体会:说明系统的使用和操作步骤,详细列出每一步的操作步骤。附录:关键源程序(带注释),可以只选取程序主要部分。按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。二、进度安排第17周 星期一 08时:00分1
3、2时:00分 星期三 14时:00分18时:00分 星期四 14时:00分18时:00分课题2:高校学籍管理系统 (一)、课程设计题目:高校学籍管理系统(二)、目的与要求: 1、目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及C+的编程思想来完成系统的设计;(2)要求在设计的过程中,建立清晰的类层次; (3)在系统的设计中,至少要用到面向对象的一种机制。3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结
4、果进行修改的功能。 4、写出设计说明书 (三)、设计方法和基本原理: 1、问题描述(功能要求): (1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。(2)能够将指定的信息从文件中删除。(3)能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。(4)可以统计全部学生的总成绩,及其在班上的排名。(5)能够统计各科的平均成绩及及格率。(6)要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。(7)如果检索不到相应的信息应提示用户。(8)扩展要求:能先行设置本学期的科目 每个学生信息应该包括:姓名、学号、成绩成绩信息应该包括:科目数量、各科目名称、各科目成绩2、问题的
5、解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)写出需求分析(做什么);(2)分析系统中的各个实体之间的关系及其属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)用户界面的设计; (7)分析系统功能模块(系统流程图);(8)代码编写,功能调试;(9)完成系统总结报告以及系统使用说明书。目 录1.系统需求分析12.总体设计13.详细设计24.系统调试与使用说明45.结果分析216.总结22湖南工程学院课程设计报告1. 系统需求分析1. 程序的功能这个程序的主要功能是能够从屏幕上读取
6、一个学生的信息并将其信息存入到数据文件中;能够将指定的信息从文件中删除;能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上;可以统计全部学生的总成绩,及其在班上的排名;能够统计各科的平均成绩及及格率;要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入,如果检索不到相应的信息应提示用户该信息不存在。 2、系统的设计目标 本系统要求工作人员输入并存储学生学籍的有关信息,如:学生的姓名、学号、性别、年龄、班级等信息。能够在查询学生信息的时候根据提示项输入所要查找的类型,再根据提示输入一项学生信息进行查找及修改,实现学生学籍的动态管理。2. 总体设计1. 系统功能分析这个程序是用
7、来对学生的学籍资料进行管理。主要功能包括:a.能够从屏幕上读取一个学生的信息并将其信息存入到数据文件中;b.能够将指定的信息从文件中删除;c.能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上;d.可以统计全部学生的总成绩,及其在班上的排名;e.能够统计各科的平均成绩及及格率;f.要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入,如果检索不到相应的信息应提示用户该信息不存在。2.系统功能模块划分与设计高校学籍管理系统main函数Stu类Student类 Student类进行学生基本信息的录入及保存,学生基本信息包括姓名、学号、年龄、性别、班级、各科成绩等。Stu类里定义
8、了Student类的子对象,不但继承了Student类的数据及函数,还能对信息进行进一步的加工。如:学生信息的录入、显示、修改、查询、删除以及对学生成绩进行统计,算出全部学生的总成绩、班上排名、各科平均分和及格率等,main函数贯穿全局,利用mune函数对程序的各部分进行掌控。 3. 详细设计Student类构造函数Student信息录入函数input信息显示函数showStu类由Student类定义其对象构造函数Stu信息录入函数insert信息显示函数Show信息检索函数search删除信息函数Delete修改信息函数update统计信息函数tongji菜单函数munemain函数文件的打
9、开、创建及关闭关闭函数mune的调用科目设置函数subjects该程序应用了2个类,Student类和Stu类,其UML图如下:Student类的UML图Student类# Tag: bool#name: char # num: int #sex: char #cname: char #age: int #mark: int #sum: double+Student( )+input( ) :void+show( ):voidStu类的UML图Stu类#count: int# s: Student+insert( ):void+Show( ):void+search( ):void+Delet
10、e( ):void+update( ):void+tongji( ):void+mune( ):void4. 系统调试与使用说明4.1系统调试过程中遇到的问题及解决方法4.1.1信息显示时出错程序运行后出现以下界面设置好科目信息,录入学生信息后。选择3,本应将之前录入的信息显示出来的。但没有将所有的学生信息显示出来,而是只显示了最后一个同学的信息。经检查发现,show函数里没有使用循环,导致每输入一个学生信息时就会将前一个的学生信息覆盖,所以只能输入最后一个学生的信息。信息显示的原有程序为:void show() sum=0; cout姓名:nameendl;cout学号:numendl;co
11、ut性别:sexendl;cout年龄ageendl;cout班级:cnameendl;for(int i=0;inumb;i+) sum+=marki;coutsbji成绩:markiendl; cout总分为:sumendl;在Stu类中再定义一个Show函数,使用循环,然后这个Show函数里调用Student类中的show函数,便可以将所有的学生信息显示出来。修改后的程序为:void Stu:Show() for(int i=0;icount;i+)if(si.Tag=true) si.show();coutendl; 若是退出程序再运行,上来选择3就应该将所有的信息显示出来,可是显示的
12、是乱码。经检查后发现,在录入信息后,保存信息时,没有成功把信息保存到文件中。导致程序再次运行时打开文件后找不到相应的学生信息,所以输出了乱码。原程序中使用了C+中二进制文件的保存方式,file.seekg(0,ios:end);file.write(char*)&stu,sizeof(Student);而却没有对该保存方式进行相应的函数声明,造成未能成功保存信息。后经老师帮忙修改才得以将信息保存到文件中。修改后的程序,上来选择3就可以将所有已录入的学生信息显示出来。4.1.2删除、修改、检索信息时出错因为在信息录入时,保存信息的不对,致使要对信息进行删除、修改或检索等操作时,都未能在打开的文件
13、中找到相应的信息,所以都不能对信息进行这些操作。后经老师修改,都能正常显示。在执行修改模块时还出现了不该有的错误。修改学号的时候选择“y”也不能修改就直接跳到下一步。经检查程序,发现将变量ch1写成了ch,导致不能识别输入的是否为“y”。原程序为:cout是否要修改学号?(y/n)ch1;if(ch=y|ch=Y)cout请输入新学号:以回车键结束si.num;修改后程序:cout是否要修改学号?(y/n)ch1;if(ch1=y|ch1=Y)cout请输入新学号:以回车键结束si.num;改正后的程序便可以对学号进行修改。4.1.3统计信息时出错在对已有的学生信息进行统计时出现了几个错误。1
14、. 计算全部学生总成绩时,未对all进行初始化,导致输出的是乱码。原程序为:void Stu:tongji() int i,j,t; float sbj; float cnum=0,pass=0; double all,aver; cout$1.全部学生总成绩,2.班上排名,3.各科平均成绩,4.及格率$endl; cout*请从14中选择*t; switch(t) case 1: /全部学生总成绩 for(j=0;jcount;j+) sj.sum=0; for(i=0;inumb;i+) sj.sum=sj.sum+sj.marki; 的总成绩为:sj.sumendl
15、; all =all+sj.sum; cout全部学生的总成绩为:allendl; break;修改后程序为:case 1: /全部学生总成绩 all=0; for(j=0;jcount;j+) sj.sum=0; for(i=0;inumb;i+) sj.sum=sj.sum+sj.marki; 的总成绩为:sj.sumendl; all =all+sj.sum; cout全部学生的总成绩为:allendl; break;对all进行初始化后便能够正常显示出总成绩。 2. 对已有学生的总成绩进行排名时出错。经调试检查后发现在该程序中多写了一个for循环且少写了位置的交换
16、,导致将排名信息输出时出错。原程序为:case 2:int n ,zf100; double pm100,t; for(j=0;jcount;j+) sj.sum=0; for(i=0;inumb;i+) sj.sum=sj.sum+sj.marki; cout班上排名为:n; for(j=0;jcount;j+) pmj=sj.sum; zfj=j; for(n=j+1;ncount;n+) if(pmjpmn) t=pmn; pmn=pmj; pmj=t; for(j=0;jcount;j+) cout第j+1名总分为:pmjendl; break;修改后的程序为:cas
17、e 2: int n,z,zf100; double pm100,t; for(j=0;jcount;j+) sj.sum=0; for(i=0;inumb;i+) sj.sum=sj.sum+sj.marki; pmj=sj.sum; zfj=j; cout班上排名为:n; for(j=0;jcount;j+) for(n=j+1;npmj) t=pmn; pmn=pmj; pmj=t; z=zfn;zfn=zfj;zfj=z; cout第j+1名总分为:pmjendl; break;去掉最后一个for循环后,便可以正常输出排名信息。3. 计算各科平均分时显示的信息出错。经
18、检查后发现在定义及格人数cnum和及格率pass时,将其定义为了int型,所以计算时科目及格率不对。原程序为:int i,j,t; float sbj; int cnum=0,pass=0; double all,aver; coutt$请从以下项选择$endl; coutt1.全部学生总成绩tttendl; coutt2.班上排名tttendl; coutt3.各科平均成绩tttendl; coutt4.各科及格率tttendl; coutt$请从14中选择$t; switch(t)修改后的程序为: int i,j,t; float sbj; float cnum=0,pass=0; dou
19、ble all,aver; coutt$请从以下项选择$endl; coutt1.全部学生总成绩tttendl; coutt2.班上排名tttendl; coutt3.各科平均成绩tttendl; coutt4.各科及格率tttendl; coutt$请从14中选择$t; switch(t)将cnum和pass的类型改为float类后,便可以正常计算各科及格率。4.2运行结果4.2.1主菜单界面4.2.2科目设置界面4.2.3信息录入界面4.2.4信息显示界面4.2.5删除信息界面4.2.6信息修改界面4.2.7信息检索界面4.2.8统计信息界面计算总成绩班上排名各科平均分各科及格率5. 结果
20、分析1. 该程序的修改模块先提示输入要修改的学生姓名,再根据提示一项一项的进行修改。不需要修改的项则保留原有的数据,使用起来简单方便快捷。2. 不足之处 a. 选择进入某一功能模块之后,要对该模块执行操作完后才能推出到主菜单,使得有时候选择了错误的功能也无法返回。 b. 程序利用了C+中二进制fstream的保存方法,该方法操作很不方便,容易出错。 c. 该程序将保存与退出绑定在一起,要求一定要选择正确的退出方式退出才能将数据保存到文件,否则保存失败。6. 总结这次课程设计,从拿到题目开始到现在,前前后后自己大概花了整整一个多星期去搞。刚拿到题目时以为很简单,谁知真正写起程序来才发现它的困难之
21、处。一开始自己总是贪图程序简单功能又多,老想着写好了基本的模板就能用它来实现各项具体的要求。于是在写程序时只是简单的把基本的东西写出来就完了,然而调试时才发现根本行不通。要想写出好的程序就得下功夫,不能贪图简单而使用不懂的东西,这会使程序越写越吃力,越行不通。就比如在将信息保存到文件时,本来可以用C语言里的方法,很快就能搞定的,自己却贪图简单而去使用未学过的C+里的方法。不仅又花了大量时间去看书,而且还写不出能用的程序。最后还得劳烦老师去修改。通过这次课设才发现自己原来存在很多的不足。很多东西以前都是只知道理论,并没有将其用到实践中来,导致使用时才发现原来什么都不会。一些以前学过的知识也因长期
22、没有运用,导致要用时却也不懂理了。理解上存在误区,写程序时不能理好前后的逻辑关系,导致出现很多不该有的问题。经过这一次的课设,我们再一次将学习中学到的各个知识点串联起来统一的运用到程序的设计中去,将理论与应用结合在一起。再一次巩固了学过的知识,也加深了对新知识的了解。附录#include#include#include#include#include#include#includeint numb=0; /科目数量char sbj2020; /科目名称class Student /定义学生类 public: bool Tag; /有效标志,true:有效 false:无效 char name2
23、0; /姓名 int num; /学号 char sex3; /性别 char cname20; /班级 int age; /年龄 int mark10; /各科成绩 double sum; /总成绩 Student() Tag=false;/保证新对象产生时被置为无效,即表示这个对象尚未填入信息 void input() cout请输入学生信息endl;cout姓名:name;cout学号:num;cout性别(f,m):sex;while(strcmp(sex,f)!=0&strcmp(sex,m)!=0)cout错误请重新输入!sex;break; cout班级:cname;cout年龄
24、:age;cout请输入成绩:endl;for(int i=0;inumb;i+)coutsbjimarki; Tag=true; void show() sum=0; cout姓名:nameendl;cout学号:numendl;cout性别:sexendl;cout年龄ageendl;cout班级:cnameendl;for(int i=0;inumb;i+) sum+=marki; coutsbji成绩:markiendl; cout总分为:sumendl; ;/*科目设置函数*/void subjects() cout请设置科目数量numb; cout请输入科目名称endl;for(i
25、nt i=0;inumb;i+) couti+1sbji;class Stu /定义Stu类 Student s100; public: int count; /表示有效学生的数量Stu()count=0; /一开始没学生void insert(); /录入信息 void Show(); /显示信息 void search(); /检索信息 void Delete(); /删除信息void update(); /修改信息void tongji(); /统计信息void mune(fstream &file,Stu &c); /菜单函数friend fstream &operator(fstre
26、am &f, Stu &c);friend fstream &operator(fstream &f, Stu &c)fc.count;for(int i=0;c.si.numc.si.sexc.si.sum;/每次从文件读入一个学生信息for(int j=0;jc.si.markj;c.si.Tag=true;return f;fstream &operator(fstream &f, Stu &c)fc.count ;for(int i=0;i100;i+)if(c.si.Tag=true)fc.si.age ame c
27、. c.si.num c.si.sex c.si.sum ;/每次向文件写入一个学生的信息for(int j=0;jnumb;j+) fc.si.markj ;return f;void save(fstream &f, Stu &c)fnumb ;/文件中先保存科目信息for(int i=0;inumb;i+)fsbji ;fc;/再保存学生信息/*信息录入*/void Stu:insert() char c2; while(1)for(int i=0;i100;i+)if(si.Tag=false)/此对象为空,即未被占用si.input();count+;break;cou
28、tc;if( c0=n | c0=N)break; /*显示信息*/void Stu:Show() for(int i=0;icount;i+) if(si.Tag=true) si.show(); coutendl; /*检索信息*/void Stu:search() int j; int xh; /学生学号char xm20; /学生姓名coutt$请选择查找方式:$endl;coutt1.按学号查找endl; coutt2.按姓名查找j;while(j!=1)&(j!=2) cout输入错误,请重新输入!j;if(j=1) cout请输入要查找的学号:xh; for(int i=0;i=
29、count) cout查无此人n;else if(j=2) cout请输入你要查找的学生的姓名:xm;for(int i=0;i=count) cout查无此人!endl;/*删除信息*/void Stu:Delete() int xh;cout请输入要删除的学生学号xh;for(int i=0;icount;i+)if(si.Tag=true)if(si.num=xh) cout您将要删除的学生信息为:endl;si.show();si.Tag=false;/删除count-; cout删除成功!=count) cout查无此人!endl;/*修改信息*/void Stu:update()
30、cout输入要修改信息的学生姓名,根据程序提示修改学生的信息:endl; /修改信息,先输入要修改的学生姓名,判断小项目是否要进行修改,选是才进行修改!cout请输入要修改信息的学生姓名xm;for(int i=0;icount;i+) if(si.Tag=true) if(strcmp(,xm)=0)cout是否要修改姓名?(y/n)ch;if(ch=y|ch=Y)cout请输入新姓名:以回车键结束;cout是否要修改学号?(y/n)ch1;if(ch1=y|ch1=Y)cout请输入新学号:以回车键结束si.num;cout是否要修改性别?(y/n)ch2;if
31、(ch2=y|ch2=Y)cout请输入新性别,以回车键结束si.sex;if (strcmp(si.sex,f)!=0&strcmp(si.sex,m)!=0) cout输入性别错误,请重新输入(性别类型为f/m)!:endl;cout是否要修改年龄?(y/n)ch3;if(ch3=y|ch3=Y)cout请输入新年龄:以回车键结束si.age;cout是否要修改班级?(y/n)ch4;if(ch4=y|ch4=Y)cout请输入新班级:以回车键结束ame;cout学生信息已修改完毕!endl; cout你刚刚输入的学生信息为:=count) cout查无此人!endl;/*统计信
32、息*/void Stu:tongji() int i,j,t; float sbj; float cnum=0,pass=0; double all,aver; coutt$请从以下项选择$endl; coutt1.全部学生总成绩tttendl; coutt2.班上排名tttendl; coutt3.各科平均成绩tttendl; coutt4.各科及格率tttendl; coutt$请从14中选择$t; switch(t) case 1: /全部学生总成绩 all=0; for(j=0;jcount;j+) sj.sum=0; for(i=0;inumb;i+) sj.sum=sj.sum+s
33、j.marki; 的总成绩为:sj.sumendl; all =all+sj.sum; cout全部学生的总成绩为:allendl; break; case 2: /班上排名 int n,z,zf100; double t,pm100; for(j=0;jcount;j+) sj.sum=0; for(i=0;inumb;i+) sj.sum=sj.sum+sj.marki; pmj=sj.sum; zfj=j; cout班上排名为:n; for(j=0;jcount;j+) for(n=j+1;npmj) t=pmn; pmn=pmj; pmj=t; z=zfn; zfn=zfj; zfj=z; cout第j+1名总分为:pmjendl; break;case 3: /各科平均分cout请输入要计算的科目:n;for(i=0;inumb;i+) if(i=(n-1) sbj=0;for(j=0;jcount;j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农田灌溉设备采购与安装合同书2025
- 《项目规划与设计》课件
- 《商务流程介绍》课件
- 技术成果转让合同
- 版股权转让合同示范文本培训心得与启示
- 广播广告宣传合同示范版
- 《车桥和车轮》课件
- 子女抚养协议包含:标准离婚合同范本
- 大型公共建筑项目工程劳务合同
- 招商银行信贷合同范本
- 2024年黑龙江省专升本考试生理学护理学专业测试题含解析
- 建筑设计工程设计方案
- 供热行业环境保护管理办法
- (2024年)气胸完整课件
- 2023年部编版高中语文必修上册古诗词诵读
- 《新能源发电技术第2版》 课件全套 朱永强 第1-10章 能源概述- 分布式发电与能源互补
- 2024年湖南省生态环境监测专业技术人员大比武竞赛考试题库(含答案)
- 2024年01月上海证券交易所社会招考聘用笔试近6年高频考题难、易错点荟萃答案带详解附后
- 民盟入盟申请书(通用6篇)
- EAM资产管理系统的功能与应用
- XX精神科医生述职报告(四篇合集)
评论
0/150
提交评论