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

上传人:b****1 文档编号:3359679 上传时间:2023-05-05 格式:DOCX 页数:17 大小:463.54KB
下载 相关 举报
C学生信息管理系统设计报告.docx_第1页
第1页 / 共17页
C学生信息管理系统设计报告.docx_第2页
第2页 / 共17页
C学生信息管理系统设计报告.docx_第3页
第3页 / 共17页
C学生信息管理系统设计报告.docx_第4页
第4页 / 共17页
C学生信息管理系统设计报告.docx_第5页
第5页 / 共17页
C学生信息管理系统设计报告.docx_第6页
第6页 / 共17页
C学生信息管理系统设计报告.docx_第7页
第7页 / 共17页
C学生信息管理系统设计报告.docx_第8页
第8页 / 共17页
C学生信息管理系统设计报告.docx_第9页
第9页 / 共17页
C学生信息管理系统设计报告.docx_第10页
第10页 / 共17页
C学生信息管理系统设计报告.docx_第11页
第11页 / 共17页
C学生信息管理系统设计报告.docx_第12页
第12页 / 共17页
C学生信息管理系统设计报告.docx_第13页
第13页 / 共17页
C学生信息管理系统设计报告.docx_第14页
第14页 / 共17页
C学生信息管理系统设计报告.docx_第15页
第15页 / 共17页
C学生信息管理系统设计报告.docx_第16页
第16页 / 共17页
C学生信息管理系统设计报告.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《C学生信息管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《C学生信息管理系统设计报告.docx(17页珍藏版)》请在冰点文库上搜索。

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

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

 

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

 

摘要

这一款学生信息管理小系统采用面向对象的设计方法,主要是面对管理端,管理者可以通过密码登录进入系统对学生的各类数据统进行管理和维护。

在主界面中主要设置了8个基本功能:

增加学生、显示全部学生、计算平均成绩、删除一个学生、按年级输出学生信息、按性别输出学生信息、按姓名检索学生、按总分进行排序。

这些功能基本上能满足学生管理的基本要求,此程序可以初步体现课程设计的目标。

采用VisualC++作为开发工具,界面简单友好,操作方便易行,便于维护,是一个功能比较完善的管理系统。

关键字:

学生系统;继承;重载;派生

 

1.引言

随着我国经济与计算机技术的日益发展,信息化技术逐渐取代传统人工作业,而学生也不例外。

由于学生信息管理系统应用范围之广,版本各式各样,功能不尽管理系统相同。

如何做出一个比较出众的学生系统,是对程序员的一种考验,这其中选择一种合适的程序设计语言、一个开发平台和编程思想是至关重要的。

而建成一个数字化的学生信息管理系统,进行统一的管理,管理者就会对学生情况得到及时准确的了解,并根据具体情况提供及时的查询与修改。

这样,就可以使学生的管理变得更为高效。

本系统是从学生信息管理系统最基本的功能进行设计和开发。

设计希望用VC++编写一个界面美观流畅学生信息管理系统,管理者能够使用它对学生数据进行基本的查询、增加、删除、修改等,而且程序运行结果正确,操作方便,界面美观,逻辑层次清楚,程序结构合理,程序代码精简易懂。

管理者通过密码登录进入学生信息管理系统,根据需要可以实现以下功能:

增加学生、显示全部学生、计算平均成绩、删除一个学生、按年级输出学生信息、按性别输出学生信息、按姓名检索学生、按总分进行排序。

该学生信息管理系统是采用面向对象的程序设计思想,选择C++语言进行编写的,整个程序由一个学生基类和两个年级派生类、若干个函数及主函数构成的。

使用面向对象的程序设计方法是设计一个复杂的软件系统时,首要的问题是确定该系统是有哪些对象组成的,并且设计这些对象。

本学期,专业开设了C++面向对象课程设计,为我们提供了一个既动手又动脑独立实践的机会,这就要求根据所学的C++程序设计原理与程序设计的知识,能够针对一个小型的学生信息管理系统,进行系统的任务分析,系统设计,运行调试等,完成题目要求的功能。

学会运用VisualC++设计学生信息管理系统,从而达到了解设计一个小型应用系统的目的,提高适应实际,实践编程的能力。

 

2.设计依据及框图

●设计思想

学生信息管理系统是一个管理学生数据的服务平台,它应该包括登录界面,通过输入密码,核对正确进而进入主菜单界面,然后通过需要选择不同的操作,最终能够达到查询,增添,删除等功能。

●设计框图、用户界面

2.2.1通过对需求的分析和设计,我初步构造了程序的结构框图。

如图:

2.2.2根据各模块功能的逐步展开与分析,我完成了程序的全部代码设计,详见附录Ⅰ。

在一次次的调试完善后,成功运行了这个学生管理系统。

1.这个系统是作为管理端存在的,为了保证信息的隐蔽性及安全性,防止人为破坏,所以设计一个登录界面,需要输入的密码核实正确后方能进入主菜单操作,以此来确保只有预先获得密码有管理权限的人才能使用该系统。

在此还设定了登录次数不得多于三次,否则强制退出程序。

这里将管理员输入的密码通过if…else语句判断是否等于code(预先定义在后台存储的),若相等则跳转至主界面,否则提示重新输入。

代码如下:

lab1:

system("cls");

cout<

cout<<"\t\t\t请输入登录密码:

";

cin>>co;

if(co==code)

{gotolab2;}

else

{if(s<=3)

{s++;

if(s>=4)

{cout<<"已登录三次,请退出!

"<

return0;}

else

gotolab1;}

}

2.在输入事先设定的密码,经检查正确,就到了主菜单界面,如下图;功能选择通过管理员输入数字,使用switch语句来判断接收,从而能够进入各个子菜单。

图主菜单图

lab2:

system("cls");

cout<<"\t\t\t~*~*~欢迎使用学生信息管理系统~*~*~"<

cout<<"1.录入信息"<

cout<<"2.显示全部学生"<

cout<<"3.计算平均成绩"<

cout<<"4.删除一个学生"<

cout<<"5.按年级输出学生信息"<

cout<<"6.按性别输出学生信息"<

cout<<"7.按姓名检索学生"<

cout<<"8.按总分排序"<

cout<<"9.结束程序运行"<

cout<<"请输入您的选择(1~9):

";

cin>>getin;

switch(getin)

注:

lab2是一个标签,能通过之后的gotolab2从各级子菜单快速地跳转回来。

3.case1是录入信息菜单,p[i]是存储学生信息的数组对象,同样通过switch语句判断选择,可以不限次地分别录入一、二年级的学生信息,完成后自动保存并返回主菜单。

这里用类类型的指针变量指向已存在的最后一个记录,追加到最后一个记录后面,然后通过指针指向对象的成员函数set()从键盘上输入信息,用new开辟一段空间以存放该类型的对象,而统计创建的对象个数的变量i则进行自加运算,最后指针指回头结点。

增加学生信息,界面如下:

case1:

入一年级生信息"<

cout<<"2.录入二年级生信息"<

cout<<"3.返回上一级菜单"<

cout<<"请输入您的选择:

";

cin>>c1;

switch(c1)

{case1:

p[i]=newStudent1;

p[i]->set();

i++;

gotolab3;

case2:

p[i]=newStudent2;

p[i]->set();

i++;

gotolab3;

default:

gotolab2;

}

break;

图录入信息2图

5.case2为显示信息菜单,先通过for循环语句并利用类指针,从类数组第一个对象开始调用display()来显示,直到全部学生显示完毕,最后指针指回头结点,停止操作并返回主菜单。

case2:

deldeldel++deldel

一年级生输出学生信息"<

cout<<"2.按二年级生输出学生信息"<

cout<<"请输入您的选择:

";

cin>>c5;

switch(c5)

{case1:

cout<<"学号姓名性别语文英语数学年龄"<

for(j=0;j

{if(p[j]->getid()==1)

p[j]->display();}

cout<<"\n输入任意数字返回主菜单:

";

cin>>c5;

switch(c5)

{

case1:

case2:

case3:

default:

gotolab2;

}

case2:

cout<<"学号姓名性别语文英语数学年龄"<

for(j=0;j

{if(p[j]->getid()==2)

p[j]->display();}

cout<<"\n输入任意数字返回主菜单:

";

cin>>c5;

switch(c5)

{

case1:

case2:

case3:

default:

gotolab2;}

default:

cout<<"\n输入错误!

\n";

break;

cout<<"\n输入任意数字返回主菜单:

";

cin>>c5;

switch(c5)

{case1:

case2:

case3:

default:

gotolab2;}

}

图1年级输出图

9.case6按性别输出,也同样指针p[j]指向对象的函数getsex()取性别来与“female”或“male”比较,相等则调用display函数输出学生信息。

界面如下:

图性别输出图

10.case7按姓名检索信息,管理员输入查询姓名后,系统利用类指针,从头开始p[i]->getname()==xingm(存放输入姓名的变量)查找配对的对象,如果if语句返回真值则执行display函数,接着switch接收任何数字返回主菜单,最后指针指向头结点。

case7:

system("cls");

cout<<"请输入学生的姓名:

";

cin>>xingm;

for(j=0;j

{if(p[j]->getname()==xingm)

{p[j]->display();}

}

cout<<"\n\n输入任意数字返回主菜单:

";

cin>>c7;

switch(c7)

{case1:

case2:

case3:

default:

gotolab2;}

11.case8按总分升序排序,使用for循环用指针变量p[ci]指向对象的成员函数getsum()取总分,将第一个对象依次和其他对象的比较,若前者总分大于后者,则通过两个中间变量htp和ztp把二者的学号与总分对换,以此类推直到排序完成。

接着用hao[j]、zong[j]输出信息。

case8:

模块功能及主要模块的流程图

●各模块功能

1.整个程序中构造了一个学生基类,它应该包括学生的共有属性,而两个年级学生作为派生类,可以从基类中继承共有的成员,并在此基础上增加了年级的特性。

其中学生基类中的函数如表1:

表基类模块表

 

Student

getid()

取年级号,用于识别一二年级

set()

在派生类中调用,录入信息

display()

在派生类中调用,显示信息

getnum()

取学号

getname()

取姓名

getsum()

取成绩总分

getsex()

取性别

getch()

取语文成绩

geten()

取英语成绩

getma()

取数学成绩

getborth()

取出生时间

该程序采用的是类类型来处理学生的所有基本信息。

通过对设计要求的分析构造基类Student,信息中应包含的学号、姓名、性别等就作为数据成员,而派生类一二年级学生继承了基类的一些属性,如姓名、学号等,但由于所处的年级不同,需要增加id号来识别年级。

而且它应该根据选择自动生成,不需要人为的录入。

所以getid()、set()、display()三个函数分别加上关键字virtual,使其成为纯虚函数,留待派生类定义调用同名函数却能实现不同的功能,这就体现了C++的多态性,既用不着重载函数,也能通过指针去调用派生类对象中的成员函数。

另外增加构造函数Student(),并对其数据成员进行赋初值,但id不用赋值,留待派生类分别进行定义。

而其余的8个函数则是用来取对象的数据。

代码如下:

classStudent

{public:

intid;在派生类中我分别定义了五个函数,主要是要体现录入、显示功能和重载,模块如表:

表学生1类模块表

 

Student1

getid()

取id=1,为一年级学生

set()

录入一年级学生信息

display()

显示一年级学生信息

ostream&operator<<(ostream&,Student1&)

一年级学生类中重载输出符

istream&operator>>(istream&,Student1&)

一年级学生类中重载输入符

表学生2类模块表

 

Student2

getid()

取id=2,为二年级学生

set()

录入二年级学生信息

display()

显示二年级学生信息

ostream&operator<<(ostream&,Student2&)

二年级学生类中重载输出符

istream&operator>>(istream&,Student2&)

二年级学生类中重载输入符

两个派生类需采用公用派生,这样便于调用基类中的函数,以及为当中的重载输入输出符的友元函数做准备。

前三个函数分别调用了基类中的纯虚函数,并加以定义。

首先在派生类的构造函数Student1()中定义id为1,二年级类Student2的为2,通过函数getid()取值;其次函数set()、display()实现了录入和显示的功能。

后两个函数是对输入输出符的重载作为友元函数,这是因为在输入信息时,会不小心引入或者需要有空格,重载就是要允许空格的存在,添加记录时使用。

Student1代码如下:

classStudent1:

publicStudent

件调试分析

●错误分析

整个的代码编写和程序运行的过程中,我遇到了很多困难,一开始会心烦气躁,不想往下写。

但在调试解决了一个个错误之后,我学习到很多东西。

主要出现的错误如下:

1.起初对派生类的概念没有搞清楚,基类中的函数无法调用,在将其改为虚函数之后,问题解决了;

2.输入密码验证时,设置最多能登录三次,否则结束运行,但是却出现无法跳出循环的情况,经过检查后发现,for语句一直执行返回操作,应在密码验证超过三次之后加上输出提示“已登录三次,请退出!

”及结束语句“return0”;

3.由于主函数过长,导致“{}”没有划分清楚,结果提示文件没有结束,在添加之后解决了这一问题;

4.最初是在Word文档中编写代码,使用了中文的标点符号,到了VC++无法运行,认识到:

原来任何一个细小的问题都会牵连整个程序,所以任何方面都要仔仔细细,不能粗心大意。

●系统特点及缺点

系统最终基本实现一个小型学生管理系统的主要要求,它代替了人工作业的复杂繁琐和易错,体现数字化的方便高效。

每一步操作系统都会给出提示,能够记录学生的重要信息,并及时实现增添、删除、修改、查询等功能,而平均成绩等能自动计算准确。

当输入错误时,系统提示并允许重新更改,凸显了人性化。

同时,系统还是暴露了许多缺点。

首先,界面不美观,缺乏特点;另外异常处理效果差,强制退出会导致资料丢失;而网络功能的欠缺,使其只能在单片机上运行,无法实现资源共享;数据安全仍然没有得到完善的解决,单一的密码识别无法做到万无一失,用户权限应该有更好的控制措施。

这些都需要在今后的运行调试中去慢慢改进,结合更多的新技术。

 

5.结语

经过一个月的努力,我的课程设计任务终于完成了。

在这次设计中我不但温故了以前学过的知识,更学到了很多新的知识。

对对象这个概念有了比较全面的认识和理解;对学生信息管理系统开发的基本框架和基本设计方法有了比较深入的理解;对页面的布局、美化有了新的认识;同时对VisualC++的应用变得更熟练了;通过本次课程的分析和设计,对如何进行需求分析、系统结构搭建等也有了一些更深的理解和体会。

在整个设计过程中,也出现过很多的问题,在不断学习的过程中我体会到:

a.设计是一个不断学习新鲜事物的过程,从设计初的摸不着头脑到最后能够顺利完成,我体会到在实践中学习的重要性。

首先必须掌握好课本上的理论体系,打牢知识基础,最重要的是能够学以致用,在设计过程中体现C++的思想及用途。

b.由于前期工作的不彻底,对系统的需求分析的要求认识不够清楚,使得后续的工作不得不经常返回去修改模块功能和个别代码。

使我体会到在设计中的每一步的重要性,如果上一个步骤不能很好的完成,在后续的设计将会付出几倍的代价。

c.设计过程中,由于要实现某些功能,互联网帮了我的大忙。

网络资源是一个丰富的共享体系,我通过在CSDN论坛上提出问题得到了很多热心网友的帮助,使我在很多地方少走了很多的弯路。

d.程序设计是一个漫长而琐碎的过程,有的时候仅仅因为一个标点符号或者数据类型,就会让整个程序无法运行。

所以设计需要我们耐心严谨的态度,从最初的模块设计、流程图分析就要小心翼翼,代码完成后还需要仔细检查和完善。

e.由于开始的设计思路不是很清晰,后期时间有比较紧,导致主函数繁多复杂,没有把各函数提出来,通过调用来实现,所以整个程序代码不太清晰明了,在以后的学习中要注意这个问题。

最后,整个过程是在同学和老师的帮助指导下完成的,要特别感谢徐老师和同学的付出!

参考文献

[1]潭浩强.C++面向对象程序设计.清华大学出版社,

[2]Robert,Alexander.C++数据结构与程序设计.清华大学出版社,

[3]梁普选.VisualC++程序设计与实践.清华大学出版社&北京交通大学出版社,

[4]郑莉,董渊.C++语言程序设计(第2版).清华大学出版社,2001.

[5]吕凤翥.C++语言基础教程.清华大学出版社,1999.

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2