C++学生信息管理系统设计报告Word文件下载.docx
- 文档编号:16690135
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:20
- 大小:229.22KB
C++学生信息管理系统设计报告Word文件下载.docx
《C++学生信息管理系统设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++学生信息管理系统设计报告Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
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语句来判断接收,从而能够进入各个子菜单。
图2.1主菜单图
lab2:
system("
\t\t\t~*~*~欢送使用学生信息管理系统~*~*~"
1.录入信息"
2.显示全部学生"
3.计算平均成绩"
4.删除一个学生"
5.按年级输出学生信息"
6.按性别输出学生信息"
7.按XX检索学生"
8.按总分排序"
9.完毕程序运行"
endl<
cout<
请输入您的选择(1~9):
cin>
getin;
switch(getin)
注:
lab2是一个标签,能通过之后的gotolab2从各级子菜单快速地跳转回来。
3.case1是录入信息菜单,p[i]是存储学生信息的数组对象,同样通过switch语句判断选择,可以不限次地分别录入一、二年级的学生信息,完成后自动保存并返回主菜单。
这里用类类型的指针变量指向已存在的最后一个记录,追加到最后一个记录后面,然后通过指针指向对象的成员函数set()从键盘上输入信息,用new开辟一段空间以存放该类型的对象,而统计创立的对象个数的变量i那么进展自加运算,最后指针指回头结点。
增加学生信息,界面如下:
case1:
//录入信息
lab3:
1.录入一年级生信息"
2.录入二年级生信息"
3.返回上一级菜单"
请输入您的选择:
c1;
switch(c1)
{case1:
p[i]=newStudent1;
p[i]->
set();
i++;
gotolab3;
case2:
p[i]=newStudent2;
default:
gotolab2;
break;
图2.2录入信息2图
5.case2为显示信息菜单,先通过for循环语句并利用类指针,从类数组第一个对象开场调用display()来显示,直到全部学生显示完毕,最后指针指回头结点,停顿操作并返回主菜单。
//显示全部信息
学生信息\n"
学号XX性别(male/female)语文英语数学年\n"
for(j=0;
j<
i;
j++)
{p[j]->
display();
\n\n输入任意数字返回主菜单:
c2;
switch(c2)
case3:
default:
gotolab2}
图2.3信息显示图
6.case3计算平均成绩,输入需查询学生的学号,在for循环中用if语句及指针来搜寻与之匹配的信息,如果存在那么通过函数getsum()取总成绩,再计算出平均成绩并用指针p[j]->
display()输出,否那么给出错误提示信息并返回主菜单返回主菜单后。
//计算平均成绩
lab4:
\t\t\t~*~*~计算平均成绩~*~*~"
请输入学生学号:
intxh;
xh;
for(j=0;
{if(p[j]->
getnum()==xh)
{doublesum,ave;
sum=p[j]->
getsum();
ave=sum/3;
学号XX语文英语数学平均成绩"
p[j]->
getnum()<
"
getname()<
getch()<
geten()<
getma()<
ave<
此学生不存在,请重新输入!
gotolab4;
}
注:
这里的lab4为了便于返回重新查询设的标签,与gotolab4结合起来用。
图2.4查询成绩图
7.case4为删除学生,可以按照XX或者学号删除,当管理员输入相应选择后,程序对应先通过查找记录,再对对应对象信息做删除,同样采用for循环跟if语句,每删除一个学生变量i就进展自减运算,是对象个数及时得到改正,最后指针指向头结点。
按照学号删除的代码如下:
intxuehao;
输入学生的学号:
xuehao;
{
if(p[j]->
getnum()==xuehao)
{
for(intdel=j;
del<
del++)
p[del]=p[del+1];
i--;
\n成功删除!
\n"
c3;
switch(c3)
gotolab2;
图2.5删除信息1图
8.case5是按年级输出学生,管理员选择所需年级后,用指针变量p[j]定位在年级号id所匹配的第一个对象处,接着执行display函数显示信息,j++后继续查找,用j<
i保证指针不超出围〔i作为变量统计学生录入个数〕。
case5:
//按年级输出学生信息
\t\t\t~*~*~按年级输出学生信息~*~*~"
1.按一年级生输出学生信息"
2.按二年级生输出学生信息"
请输入您的选择:
c5;
switch(c5)
学号XX性别语文英语数学年龄"
getid()==1)
cout<
\n输入任意数字返回主菜单:
cin>
switch(c5)
{
case1:
}
cout<
for(j=0;
getid()==2)
\n输入错误!
{case1:
}
图2.61年级输出图
9.case6按性别输出,也同样指针p[j]指向对象的函数getsex()取性别来与“female〞或“male〞比拟,相等那么调用display函数输出学生信息。
界面如下:
图2.7性别输出图
10.case7按XX检索信息,管理员输入查询XX后,系统利用类指针,从头开场p[i]->
getname()==xingm〔存放输入XX的变量〕查找配对的对象,如果if语句返回真值那么执行display函数,接着switch接收任何数字返回主菜单,最后指针指向头结点。
case7:
请输入学生的XX:
xingm;
getname()==xingm)
{p[j]->
c7;
switch(c7)
{case1:
11.case8按总分升序排序,使用for循环用指针变量p[ci]指向对象的成员函数getsum()取总分,将第一个对象依次和其他对象的比拟,假设前者总分大于后者,那么通过两个中间变量htp和ztp把二者的学号与总分对换,以此类推直到排序完成。
接着用hao[j]、zong[j]输出信息。
case8:
//按总分排序
intci;
for(ci=0;
ci<
ci++)
hao[ci]=p[ci]->
getnum();
zong[ci]=p[ci]->
for(n=0;
n<
n++)
{
for(m=n+1;
m<
m++)
if(zong[n]>
zong[m])
htp=hao[m];
hao[m]=hao[n];
hao[n]=htp;
ztp=zong[m];
zong[m]=zong[n];
zong[n]=ztp;
}
\t\t\t~*~*~按总分排序~*~*~"
学生学号总分\n"
hao[j]<
zong[j]<
c8;
switch(c8)
图2.8总分排序图
12.case9退出程序,用system(″cls″)清屏,break语句跳出。
至此整个程序运行即switch语句完毕。
最后,由于main函数定义为int型,要记得加上return0语句。
而程序中使用了输入输出流iostream、string类型等,头文件应该包括:
#include<
iostream>
string>
fstream>
conio.h>
windows.h>
usingnamespacestd;
这其中每个case后要加上break语句以便终止switch语句的执行,另外在一些经常需要跳转到的地方如主菜单处设为标签lab,之后使用goto语句即可跳转至此处。
3.各模块功能及主要模块的流程图
●3.1各模块功能
1.整个程序中构造了一个学生基类,它应该包括学生的共有属性,而两个年级学生作为派生类,可以从基类中继承共有的成员,并在此根底上增加了年级的特性。
其中学生基类中的函数如表1:
表3.1基类模块表
Student
getid()
取年级号,用于识别一二年级
set()
在派生类中调用,录入信息
display()
在派生类中调用,显示信息
getnum()
取学号
getname()
取XX
getsum()
取成绩总分
getsex()
取性别
getch()
取语文成绩
geten()
取英语成绩
getma()
取数学成绩
getborth()
取出生时间
该程序采用的是类类型来处理学生的所有根本信息。
通过对设计要求的分析构造基类Student,信息中应包含的学号、XX、性别等就作为数据成员,而派生类一二年级学生继承了基类的一些属性,如XX、学号等,但由于所处的年级不同,需要增加id号来识别年级。
而且它应该根据选择自动生成,不需要人为的录入。
所以getid()、set()、display()三个函数分别加上关键字virtual,使其成为纯虚函数,留待派生类定义调用同名函数却能实现不同的功能,这就表达了C++的多态性,既用不着重载函数,也能通过指针去调用派生类对象中的成员函数。
另外增加构造函数Student(),并对其数据成员进展赋初值,但id不用赋值,留待派生类分别进展定义。
而其余的8个函数那么是用来取对象的数据。
classStudent
{public:
intid;
//一二年级识别
intnum;
stringname;
stringsex;
doublech,en,ma;
//成绩
intborth;
intage;
Student();
virtualintgetid()=0;
virtualvoidset()=0;
//纯虚函数,在派生类中调用
virtualvoiddisplay()=0;
intgetnum();
//取学号
stringgetname();
//取XX
doublegetsum();
//取总成绩
stringgetsex();
//取性别
doublegetch();
//取各科成绩
doublegeten();
doublegetma();
intgetborth();
};
Student:
:
Student()//基类构造
{num=0;
name=〞Noname"
ch=0;
en=0;
ma=0;
borth=1900;
intStudent:
getnum()//取学号
{returnnum;
stringStudent:
{returnname;
{returnsex;
doubleStudent:
{returnch+en+ma;
{returnch;
{returnen;
{returnma;
{returnborth;
2.而在派生类中我分别定义了五个函数,主要是要表达录入、显示功能和重载,模块如表3.2:
表3.2学生1类模块表
Student1
取id=1,为一年级学生
set()
录入一年级学生信息
显示一年级学生信息
ostream&
operator<
(ostream&
Student1&
)
一年级学生类中重载输出符
istream&
operator>
(istream&
一年级学生类中重载输入符
表3.3学生2类模块表
Student2
取id=2,为二年级学生
录入二年级学生信息
display()
显示二年级学生信息
Student2&
二年级学生类中重载输出符
二年级学生类中重载输入符
两个派生类需采用公用派生,这样便于调用基类中的函数,以及为当中的重载输入输出符的友元函数做准备。
前三个函数分别调用了基类中的纯虚函数,并加以定义。
首先在派生类的构造函数Student1()中定义id为1,二年级类Student2的为2,通过函数getid()取值;
其次函数set()、display()实现了录入和显示的功能。
后两个函数是对输入输出符的重载作为友元函数,这是因为在输入信息时,会不小心引入或者需要有空格,重载就是要允许空格的存在,添加记录时使用。
Student1代码如下:
classStudent1:
publicStudent//一年级学生类
//一年级生识别
Student1();
//Student1构造
intgetid();
voidset();
voiddisplay();
friendostream&
friendistream&
voidStudent1:
set()//录入信息函数
输入一年级生信息\n"
学号XX性别(male/female)语文英语数学出生年\n"
num>
name>
sex>
ch>
en>
ma>
borth;
Student1:
Student1()//Student1构造
{id=1;
intStudent1:
{returnid;
display()//显示信息
\n一年级生:
id<
num<
name<
sex<
ch<
en<
ma<
2009-borth<
//一年级生类中重载输入输出符
out,Student1&
stu)
{out<
stu.id<
stu.num<
stu.name<
stu.sex<
stu.ch<
stu.en<
stu.ma<
stu.age<
returnout;
in,Student1&
{in>
stu.num>
stu.name>
stu.sex>
stu.ch>
stu.en>
stu.ma>
stu.borth;
returnin;
●3.2主要流程图
1.程序运行,管理员进入登录界面,需输入密码。
后台通过其密码与数据库中的比拟,通过验证前方可进入主菜单界面,否那么重新输入,共有三次时机,之后完毕程序。
流程图如下所示:
2.当从主菜单中选择要进展的操作后,分别进入子界面,比方录入信息界面,操作流程图如下所示:
4.软件调试分析
●4.1错误分析
整个的代码编写和程序运行的过程中,我遇到了很多困难,一开场会心烦气躁,不想往下写。
但在调试解决了一个个错误之后,我学习到很多东西。
主要出现的错误如下:
1.起初对派生类的概念没有搞
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 学生 信息管理 系统 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)