学籍管理系统Word格式.docx
《学籍管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《学籍管理系统Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
sum=s;
average=a;
grade=g;
}
//classNode结束
//Link类,把数据以链表的形式存储,链表的每个结点为一个Node对象
classLink
private:
Node*head;
//链表的头指针,为Node对象类型的指
public:
Link();
//构造函数,初始化变量
boollinkIsEmpty();
//判断链表是否为空
voidlinkInsert(Node*newnode);
//向链表中插入新的结点
boollinkDelete(intnid);
//从链表中删除的结点
voidlinkClear();
//清空链表中数据
voidlinkView();
//查看链表中数据
voidlinkGrade(Node*p1);
//计算等级
voidlinkAverageTotle();
//按平均分统计
Node*linkFind(intnid);
//在链表中查找id为nid结点,返回指向该结点的指针
Node*getHead();
//获取头指针
Link:
Link()
{//构造函数,初始化链表为空
head=NULL;
}
boolLink:
linkIsEmpty()
{//判断链表是否为空,空则返回true
return(head==NULL);
voidLink:
linkInsert(Node*newnode)
{//按id值从小到大的顺序,插入新的结点
Node*p1;
if(!
head)//链表为空的情况
head=newnode;
else
if((head->
id)>
(newnode->
id))
{//插入到第一个结点的情况
newnode->
next=head;
head=newnode;
}
else
{//插入到第二个及以后情况
p1=head;
while
(1)
{
if(!
(p1->
next))
{
p1->
next=newnode;
break;
}
else
if((p1->
next)->
id>
newnode->
id)
{
newnode->
next=p1->
next;
p1->
break;
}
p1=p1->
}
linkDelete(intnid)
{//删除结点,成功则返回true
Node*p;
if(head==NULL)//链表为空的情况
returnfalse;
if(head->
id==nid){//删除的为第一个结点的情况
head=head->
returntrue;
}
p=head;
while(p->
next)
{//删除的为第二个及以后结点的情况
if((p->
id==nid)
{
p->
next=(p->
returntrue;
p=p->
returnfalse;
linkClear()
{//清空链表
linkView()
{//显示链表数据
Node*p=head;
cout<
<
setw(10)<
"
学号"
setw(8)<
姓名"
英语"
setw(8)
<
数学"
C++"
总分"
平均分"
等级"
endl;
while(p)
{
(p->
sum)=(p->
english)+(p->
math)+(p->
c);
//计算总分
average)=((p->
c))/3;
//计算平均成绩
linkGrade(p);
cout<
p->
id<
name<
english
<
math<
c<
sum<
average<
grade<
}
linkGrade(Node*p1)
{//计算等级
while(p1)
if(p1->
average>
=90&
&
p1->
=100)
p1->
grade="
优"
;
elseif(p1->
=80&
90)
良好"
=70&
80)
中等"
=60&
=70)
合格"
else
不合格"
p1=p1->
linkAverageTotle()
{//按学生平均分统计
inta=0,b=0,c=0,d=0,e=0,f=0;
doubleaveragesum=0,asum=0,aaverage=0,paverage=0;
Node*p3=head;
while(p3)
if(p3->
p3->
=100)
a+=1;
elseif(p3->
b+=1;
c+=1;
70)
d+=1;
e+=1;
asum+=p3->
sum;
aaverage+=p3->
average;
p3=p3->
f=a+b+c+d+e;
averagesum=asum/f;
paverage=aaverage/f;
|-------------------------------------------------------|"
|总人数:
f<
|优人数:
a<
|"
优秀率:
"
a*100/f<
%"
|良好的人数:
b<
良好率:
b*100/f<
|中等的人数:
中等率:
c*100/f<
|所有合格人数:
a+b+c+d<
合格率:
(a+b+c+d)*100/f<
|不合格数:
e<
不合格率:
e*100/f<
|总分的平均分:
averagesum<
所有科目的平均分:
paverage<
Node*Link:
linkFind(intnid)
{//查找id值为nid的结点,返回该结点的指针
//没找到符合条件的结点的话,返回的指针值为NULL
if(p->
id==nid)
break;
p=p->
returnp;
getHead()
returnhead;
//classLink结束
//类Student,用于包装Link类及菜单操作
classStudent
Linkslink;
//Link对象成员
boolk;
//记录数据是否被修改
Student();
voidstudentClear();
voidstudentInsert();
voidstudentDelete();
voidstudentFind();
voidstudentView();
voidstudentLoad();
voidstudentSave();
voidstudentAverageTotle();
//按平均分数统计等级
voidExit();
//退出程序
voidshowMenu();
//显示菜单
voidshowTip();
//显示操作提示
voiddoMenu(charn);
//执行相应菜单项功能
Student:
Student()
//调用成员对象的构造函数
studentLoad();
//从文件中读取数据,创建链表
k=false;
//设置数据被修改
voidStudent:
studentClear()
{//清空学生记录
slink.linkClear();
成功清空学生记录!
studentInsert()
{//插入学生记录
Node*p=newNode();
请输入学号:
cin>
>
id;
请输入姓名:
name;
slink.linkFind(p->
{//判断学号是否存在
slink.linkInsert(p);
k=true;
{cout<
学号为"
的学生已存在,插入失败!
return;
请输入成绩:
英语:
english;
数学:
math;
C++:
c;
(p->
//计算平均成绩
studentDelete()
{//删除学生记录
inti;
if(slink.linkIsEmpty())//链表为空的情况
没有学生记录!
else
cin>
i;
if(slink.linkDelete(i))
cout<
成功删除学号为"
i<
的学生记录!
k=true;
没有找到学号为"
的学生!
studentFind()
{//查找某学号的学生记录
intn;
请输入要查找的学号:
n;
p=slink.linkFind(n);
//获得找到的结点的指针
if(p)
{//指针值不为NULL时
(p->
slink.linkGrade(p);
setw(6)<
<
average
else//指针值为NULL时
n<
studentView()
{//显示所有学生的记录
if(slink.linkIsEmpty())
slink.linkView();
studentLoad()
{//从文件中读入数据,创建链表
intnid;
ifstreaminfile("
data.txt"
infile)
cerr<
错误:
数据文件不能打开!
\n"
while(infile>
nid)
{//读取学号,直到读空
p=newNode();
id=nid;
infile>
name>
english>
math>
c>
sum>
grade;
//读取姓名
slink.linkInsert(p);
infile.close();
//关闭文件
studentSave()
{//将数据保存到文件
Node*p=slink.getHead();
ofstreamoutfile("
outfile)
while(p)
outfile<
'
'
english<
k=false;
保存成功!
studentAverageTotle()
slink.linkAverageTotle();
Exit()
chars='
Y'
if(k)
{//判断数据是否修改
数据已经改变,是否保存?
(y/n):
s;
if(s=='
y'
||s=='
)
studentSave();
已安全退出,"
system("
pause"
exit(0);
showMenu()
|------------------------------------------------|"
|学生信息管理系统|"
|1.清空:
清除所有学生数据|"
|2.添加:
插入一条学生数据|"
|3.删除:
删除指定学生数据|"
|4.查找:
查找指定学生数据|"
|5.显示:
显示所有学生数据|"
|6.保存:
保存所有学生数据|"
|7.统计:
按学生平均分统计|"
|0.退出:
安全的退出本系统|"
endl<
showTip()
-------------------操作完成---------------------"
-----------------选择0-7继续-------------------"
请选择:
doMenu(charn)
switch(n)
ca