C学生信息管理系统设计报告Word格式.docx
- 文档编号:5883273
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:17
- 大小:463.54KB
C学生信息管理系统设计报告Word格式.docx
《C学生信息管理系统设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《C学生信息管理系统设计报告Word格式.docx(17页珍藏版)》请在冰点文库上搜索。
●设计框图、用户界面
2.2.1通过对需求的分析和设计,我初步构造了程序的结构框图。
如图:
2.2.2根据各模块功能的逐步展开与分析,我完成了程序的全部代码设计,详见附录Ⅰ。
在一次次的调试完善后,成功运行了这个学生管理系统。
1.这个系统是作为管理端存在的,为了保证信息的隐蔽性及安全性,防止人为破坏,所以设计一个登录界面,需要输入的密码核实正确后方能进入主菜单操作,以此来确保只有预先获得密码有管理权限的人才能使用该系统。
在此还设定了登录次数不得多于三次,否则强制退出程序。
这里将管理员输入的密码通过if…else语句判断是否等于code(预先定义在后台存储的),若相等则跳转至主界面,否则提示重新输入。
代码如下:
lab1:
system("
cls"
);
cout<
<
endl<
endl;
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("
\t\t\t~*~*~欢迎使用学生信息管理系统~*~*~"
1.录入信息"
2.显示全部学生"
3.计算平均成绩"
4.删除一个学生"
5.按年级输出学生信息"
6.按性别输出学生信息"
7.按姓名检索学生"
8.按总分排序"
9.结束程序运行"
endl<
请输入您的选择(1~9):
cin>
getin;
switch(getin)
注:
lab2是一个标签,能通过之后的gotolab2从各级子菜单快速地跳转回来。
3.case1是录入信息菜单,p[i]是存储学生信息的数组对象,同样通过switch语句判断选择,可以不限次地分别录入一、二年级的学生信息,完成后自动保存并返回主菜单。
这里用类类型的指针变量指向已存在的最后一个记录,追加到最后一个记录后面,然后通过指针指向对象的成员函数set()从键盘上输入信息,用new开辟一段空间以存放该类型的对象,而统计创建的对象个数的变量i则进行自加运算,最后指针指回头结点。
增加学生信息,界面如下:
case1:
入一年级生信息"
2.录入二年级生信息"
3.返回上一级菜单"
cout<
请输入您的选择:
cin>
c1;
switch(c1)
{case1:
p[i]=newStudent1;
p[i]->
set();
i++;
gotolab3;
case2:
p[i]=newStudent2;
default:
gotolab2;
}
break;
图录入信息2图
5.case2为显示信息菜单,先通过for循环语句并利用类指针,从类数组第一个对象开始调用display()来显示,直到全部学生显示完毕,最后指针指回头结点,停止操作并返回主菜单。
case2:
deldeldel++deldel
一年级生输出学生信息"
2.按二年级生输出学生信息"
请输入您的选择:
c5;
switch(c5)
学号姓名性别语文英语数学年龄"
for(j=0;
j<
i;
j++)
{if(p[j]->
getid()==1)
p[j]->
display();
cout<
\n输入任意数字返回主菜单:
switch(c5)
{
case1:
case3:
default:
gotolab2;
}
case2:
for(j=0;
getid()==2)
p[j]->
default:
cout<
\n输入错误!
\n"
break;
{case1:
图1年级输出图
9.case6按性别输出,也同样指针p[j]指向对象的函数getsex()取性别来与“female”或“male”比较,相等则调用display函数输出学生信息。
界面如下:
图性别输出图
10.case7按姓名检索信息,管理员输入查询姓名后,系统利用类指针,从头开始p[i]->
getname()==xingm(存放输入姓名的变量)查找配对的对象,如果if语句返回真值则执行display函数,接着switch接收任何数字返回主菜单,最后指针指向头结点。
case7:
请输入学生的姓名:
xingm;
for(j=0;
{if(p[j]->
getname()==xingm)
{p[j]->
\n\n输入任意数字返回主菜单:
c7;
switch(c7)
{case1:
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
取id=1,为一年级学生
set()
录入一年级学生信息
显示一年级学生信息
ostream&
operator<
(ostream&
Student1&
)
一年级学生类中重载输出符
istream&
operator>
(istream&
一年级学生类中重载输入符
表学生2类模块表
Student2
取id=2,为二年级学生
录入二年级学生信息
display()
显示二年级学生信息
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.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统 设计 报告