ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:225.06KB ,
资源ID:28762168      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28762168.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++学生信息管理系统设计报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++学生信息管理系统设计报告.docx

1、C+学生信息管理系统设计报告 摘要这一款学生信息管理小系统采用面向对象的设计方法,主要是面对管理端,管理者可以通过密码登录进入系统对学生的各类数据统进行管理和维护。在主界面中主要设置了8个基本功能:增加学生、显示全部学生、计算平均成绩、删除一个学生、按年级输出学生信息、按性别输出学生信息、按姓名检索学生、按总分进行排序。这些功能基本上能满足学生管理的基本要求,此程序可以初步体现课程设计的目标。采用Visual C+作为开发工具,界面简单友好,操作方便易行,便于维护,是一个功能比较完善的管理系统。关键字:学生系统;继承;重载;派生1.引言随着我国经济与计算机技术的日益发展,信息化技术逐渐取代传统

2、人工作业,而学生也不例外。由于学生信息管理系统应用范围之广,版本各式各样,功能不尽管理系统相同。如何做出一个比较出众的学生系统,是对程序员的一种考验,这其中选择一种合适的程序设计语言、一个开发平台和编程思想是至关重要的。而建成一个数字化的学生信息管理系统,进行统一的管理,管理者就会对学生情况得到及时准确的了解,并根据具体情况提供及时的查询与修改。这样,就可以使学生的管理变得更为高效。本系统是从学生信息管理系统最基本的功能进行设计和开发。设计希望用VC+编写一个界面美观流畅学生信息管理系统,管理者能够使用它对学生数据进行基本的查询、增加、删除、修改等,而且程序运行结果正确,操作方便,界面美观,逻

3、辑层次清楚,程序结构合理,程序代码精简易懂。管理者通过密码登录进入学生信息管理系统,根据需要可以实现以下功能:增加学生、显示全部学生、计算平均成绩、删除一个学生、按年级输出学生信息、按性别输出学生信息、按姓名检索学生、按总分进行排序。该学生信息管理系统是采用面向对象的程序设计思想,选择C+语言进行编写的,整个程序由一个学生基类和两个年级派生类、若干个函数及主函数构成的。使用面向对象的程序设计方法是设计一个复杂的软件系统时,首要的问题是确定该系统是有哪些对象组成的,并且设计这些对象。本学期,专业开设了C+面向对象课程设计,为我们提供了一个既动手又动脑独立实践的机会,这就要求根据所学的C+程序设计

4、原理与程序设计的知识,能够针对一个小型的学生信息管理系统,进行系统的任务分析,系统设计,运行调试等,完成题目要求的功能。学会运用Visual C+ 6.0设计学生信息管理系统,从而达到了解设计一个小型应用系统的目的,提高适应实际,实践编程的能力。2设计依据及框图 2.1设计思想学生信息管理系统是一个管理学生数据的服务平台,它应该包括登录界面,通过输入密码,核对正确进而进入主菜单界面,然后通过需要选择不同的操作,最终能够达到查询,增添,删除等功能。 2.2 设计框图、用户界面2.2.1通过对需求的分析和设计,我初步构造了程序的结构框图。如图2.1:2.2.2根据各模块功能的逐步展开与分析,我完成

5、了程序的全部代码设计,详见附录。在一次次的调试完善后,成功运行了这个学生管理系统。 1. 这个系统是作为管理端存在的,为了保证信息的隐蔽性及安全性,防止人为破坏,所以设计一个登录界面,需要输入的密码核实正确后方能进入主菜单操作,以此来确保只有预先获得密码有管理权限的人才能使用该系统。在此还设定了登录次数不得多于三次,否则强制退出程序。这里将管理员输入的密码通过ifelse语句判断是否等于code(预先定义在后台存储的),若相等则跳转至主界面,否则提示重新输入。代码如下:lab1: system(cls); coutendlendlendl; coutco; if(co=code) goto l

6、ab2; else if(s=4) cout已登录三次,请退出!endl; return 0; else goto lab1; 2.在输入事先设定的密码,经检查正确,就到了主菜单界面,如下图;功能选择通过管理员输入数字,使用switch语句来判断接收,从而能够进入各个子菜单。图2.1 主菜单图lab2:system(cls); coutttt*欢迎使用学生信息管理系统*endlendl; cout1.录入信息endl; cout2.显示全部学生endl; cout3.计算平均成绩endl; cout4.删除一个学生endl; cout5.按年级输出学生信息endl; cout6.按性别输出学生

7、信息endl; cout7.按姓名检索学生endl; cout8.按总分排序endl; cout9.结束程序运行endl endl; coutgetin; switch(getin)注:lab2是一个标签,能通过之后的goto lab2从各级子菜单快速地跳转回来。3 .case1是录入信息菜单,pi是存储学生信息的数组对象,同样通过switch语句判断选择,可以不限次地分别录入一、二年级的学生信息,完成后自动保存并返回主菜单。这里用类类型的指针变量指向已存在的最后一个记录,追加到最后一个记录后面,然后通过指针指向对象的成员函数set()从键盘上输入信息,用new开辟一段空间以存放该类型的对象,

8、而统计创建的对象个数的变量i则进行自加运算,最后指针指回头结点。增加学生信息,界面如下:case 1: /录入信息lab3: system(cls); cout1.录入一年级生信息endl; cout2.录入二年级生信息endl; cout3.返回上一级菜单endl; coutc1; switch(c1) case 1: pi=new Student1; pi-set(); i+; goto lab3; case 2: pi=new Student2; pi-set(); i+; goto lab3; default:goto lab2; break;图2.2 录入信息2图5case2为显示信

9、息菜单,先通过for循环语句并利用类指针,从类数组第一个对象开始调用display()来显示,直到全部学生显示完毕,最后指针指回头结点,停止操作并返回主菜单。case 2: /显示全部信息 system(cls); cout学生信息n学号 姓名 性别(male/female) 语文 英语 数学 年n; for(j=0;jdisplay(); coutc2; switch(c2) case 1:case 2:case 3:default: goto lab2图2.3 信息显示图6case3计算平均成绩,输入需查询学生的学号,在for循环中用if语句及指针来搜寻与之匹配的信息,如果存在则通过函数g

10、etsum()取总成绩,再计算出平均成绩并用指针pj-display()输出,否则给出错误提示信息并返回主菜单返回主菜单后。case 3:/计算平均成绩lab4: system(cls); coutendlendl; coutttt*计算平均成绩*endlendl; coutxh; for(j=0;jgetnum()=xh) double sum,ave; sum=pj-getsum(); ave=sum/3; cout学号 姓名 语文 英语 数学 平均成绩endl; coutgetnum() getname() getch() geten() getma() aveendl; else co

11、ut此学生不存在,请重新输入!endl;goto lab4; 注:这里的lab4为了便于返回重新查询设的标签,与goto lab4结合起来用。图2.4查询成绩图7case4为删除学生,可以按照姓名或者学号删除,当管理员输入相应选择后,程序对应先通过查找记录,再对对应对象信息做删除,同样采用for循环跟if语句,每删除一个学生变量i就进行自减运算,是对象个数及时得到改正,最后指针指向头结点。按照学号删除的代码如下:int xuehao;coutxuehao;for(j=0;jgetnum()=xuehao) for(int del=j;deli;del+) pdel=pdel+1; i-; co

12、ut n成功删除!n;coutc3;switch(c3)case 1:case 2:case 3:default: goto lab2;图2.5 删除信息1图8case5是按年级输出学生,管理员选择所需年级后,用指针变量pj定位在年级号id所匹配的第一个对象处,接着执行display函数显示信息,j+后继续查找,用ji保证指针不超出范围(i作为变量统计学生录入个数)。case 5:/按年级输出学生信息 system(cls); coutttt*按年级输出学生信息* endlendl; cout1.按一年级生输出学生信息endl; cout2.按二年级生输出学生信息endlendl; coutc

13、5; switch(c5) case 1: cout学号 姓名 性别 语文 英语 数学 年龄endl; for(j=0;jgetid()=1) pj-display(); coutc5; switch(c5) case 1:case 2:case 3:default: goto lab2; case 2: cout学号 姓名 性别 语文 英语 数学 年龄endl; for(j=0;jgetid()=2) pj-display(); coutc5; switch(c5) case 1:case 2:case 3:default: goto lab2; default: coutn输入错误!n;

14、break; coutc5; switch(c5) case 1:case 2:case 3:default: goto lab2; 图2.6 1年级输出图9case6按性别输出,也同样指针pj指向对象的函数getsex()取性别来与“female”或“male”比较,相等则调用display函数输出学生信息。界面如下: 图2.7 性别输出图10case7按姓名检索信息,管理员输入查询姓名后,系统利用类指针,从头开始pi-getname()=xingm(存放输入姓名的变量)查找配对的对象,如果if语句返回真值则执行display函数,接着switch接收任何数字返回主菜单,最后指针指向头结点。

15、case 7: system(cls); coutxingm; for(j=0;jgetname()=xingm) pj-display(); coutc7; switch(c7) case 1:case 2:case 3:default: goto lab2;11case8按总分升序排序,使用for循环用指针变量pci指向对象的成员函数getsum()取总分,将第一个对象依次和其他对象的比较,若前者总分大于后者,则通过两个中间变量htp和ztp把二者的学号与总分对换,以此类推直到排序完成。接着用haoj、zongj输出信息。case 8:/按总分排序 int ci; for(ci=0;cig

16、etnum(); zongci=pci-getsum(); for(n=0;ni;n+) for(m=n+1;mzongm) htp=haom; haom=haon; haon=htp; ztp=zongm; zongm=zongn; zongn=ztp; system(cls); coutendlendl; coutttt*按总分排序* endlendl; cout学生学号 总分n; for(j=0;ji;j+) couthaoj zongjendl; coutc8; switch(c8) case 1:case 2:case 3:default: goto lab2; 图2.8 总分排序图

17、12case9退出程序,用system(cls)清屏,break语句跳出。至此整个程序运行即switch语句结束。最后,由于main函数定义为int型,要记得加上return 0语句。而程序中使用了输入输出流iostream、string类型等,头文件应该包括:#include#include#include#include#includeusing namespace std;这其中每个case后要加上break语句以便终止switch语句的执行,另外在一些经常需要跳转到的地方如主菜单处设为标签lab,之后使用goto语句即可跳转至此处。3.各模块功能及主要模块的流程图 3.1 各模块功能

18、1.整个程序中构造了一个学生基类,它应该包括学生的共有属性,而两个年级学生作为派生类,可以从基类中继承共有的成员,并在此基础上增加了年级的特性。其中学生基类中的函数如表1:表3.1 基类模块表Studentgetid()取年级号,用于识别一二年级set()在派生类中调用,录入信息display()在派生类中调用,显示信息getnum()取学号getname()取姓名getsum()取成绩总分getsex()取性别getch()取语文成绩geten()取英语成绩getma()取数学成绩getborth()取出生时间该程序采用的是类类型来处理学生的所有基本信息。通过对设计要求的分析构造基类Stud

19、ent,信息中应包含的学号、姓名、性别等就作为数据成员,而派生类一二年级学生继承了基类的一些属性,如姓名、学号等,但由于所处的年级不同,需要增加id号来识别年级。而且它应该根据选择自动生成,不需要人为的录入。所以getid()、set()、display()三个函数分别加上关键字virtual,使其成为纯虚函数,留待派生类定义调用同名函数却能实现不同的功能,这就体现了C+的多态性,既用不着重载函数,也能通过指针去调用派生类对象中的成员函数。另外增加构造函数Student(),并对其数据成员进行赋初值,但id不用赋值,留待派生类分别进行定义。而其余的8个函数则是用来取对象的数据。代码如下:cla

20、ss Studentpublic:int id; /一二年级识别int num;string name;string sex;double ch,en,ma; /成绩int borth;int age; Student(); virtual int getid()=0; /一二年级识别 virtual void set()=0; /纯虚函数,在派生类中调用 virtual void display()=0;int getnum(); /取学号string getname(); /取姓名 double getsum(); /取总成绩 string getsex(); /取性别 double ge

21、tch(); /取各科成绩 double geten(); double getma(); int getborth();Student:Student() /基类构造num=0; name=”No name; ch=0;en=0;ma=0; borth=1900; int Student:getnum()/取学号return num;string Student:getname()return name;string Student:getsex()return sex;double Student:getsum()return ch+en+ma;double Student:getch()

22、return ch;double Student:geten()return en;double Student:getma()return ma;int Student:getborth()return borth;2.而在派生类中我分别定义了五个函数,主要是要体现录入、显示功能和重载,模块如表3.2:表3.2 学生1类模块表Student1getid()取id=1,为一年级学生 set()录入一年级学生信息display()显示一年级学生信息ostream& operator(istream&,Student1&)一年级学生类中重载输入符表3.3 学生2类模块表Student2getid(

23、)取id=2,为二年级学生 set()录入二年级学生信息 display()显示二年级学生信息ostream& operator(istream&,Student2&)二年级学生类中重载输入符两个派生类需采用公用派生,这样便于调用基类中的函数,以及为当中的重载输入输出符的友元函数做准备。前三个函数分别调用了基类中的纯虚函数,并加以定义。首先在派生类的构造函数Student1()中定义id为1,二年级类Student2的为2,通过函数getid()取值;其次函数set()、display()实现了录入和显示的功能。后两个函数是对输入输出符的重载作为友元函数,这是因为在输入信息时,会不小心引入或者

24、需要有空格,重载就是要允许空格的存在,添加记录时使用。Student1代码如下:class Student1:public Student /一年级学生类public: int id; /一年级生识别 Student1(); /Student1构造 int getid(); /一年级生识别 void set(); void display(); friend ostream& operator(istream&,Student1&);void Student1:set() /录入信息函数cout输入一年级生信息nnumnamesex chenmaborth;Student1:Student1()/Student1构造id=1;int Student1:getid()return id;void Student1:display() /显示信息coutn一年级生:nid num name sex ch en ma 2009-borth endl;/一年级生类中重载输入输出符ostream& operator(ostream& out, Student1& stu)outstu.id stu.num stu.name stu.sex stu.ch stu.en stu.ma stu.age endl; return out;istream& operato

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1