C++学生信息管理系统设计报告Word文件下载.docx

上传人:b****5 文档编号:16690135 上传时间:2022-11-25 格式:DOCX 页数:20 大小:229.22KB
下载 相关 举报
C++学生信息管理系统设计报告Word文件下载.docx_第1页
第1页 / 共20页
C++学生信息管理系统设计报告Word文件下载.docx_第2页
第2页 / 共20页
C++学生信息管理系统设计报告Word文件下载.docx_第3页
第3页 / 共20页
C++学生信息管理系统设计报告Word文件下载.docx_第4页
第4页 / 共20页
C++学生信息管理系统设计报告Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C++学生信息管理系统设计报告Word文件下载.docx

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

C++学生信息管理系统设计报告Word文件下载.docx

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.起初对派生类的概念没有搞

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

当前位置:首页 > 小学教育 > 数学

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

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