学籍管理系统.docx

上传人:b****8 文档编号:9256044 上传时间:2023-02-03 格式:DOCX 页数:18 大小:18.48KB
下载 相关 举报
学籍管理系统.docx_第1页
第1页 / 共18页
学籍管理系统.docx_第2页
第2页 / 共18页
学籍管理系统.docx_第3页
第3页 / 共18页
学籍管理系统.docx_第4页
第4页 / 共18页
学籍管理系统.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

学籍管理系统.docx

《学籍管理系统.docx》由会员分享,可在线阅读,更多相关《学籍管理系统.docx(18页珍藏版)》请在冰豆网上搜索。

学籍管理系统.docx

学籍管理系统

#include

#include

#include

#include

#include

usingnamespacestd;

//结点类,用于存放学生的各种数据

classNode

{

public:

intid;//学号

stringname;//姓名

stringgrade;//等级

doubleenglish;//英语

doublemath;//数学

doublec;//C++

doublesum;//总分

doubleaverage;

Node*next;//指向下一结点的指针

Node(intnid=0,stringnname="noname",//构造函数,初始化变量

doublee=0,doublem=0,doublecl=0,

doubles=0,doublea=0,stringg="ng");

};

Node:

:

Node(intnid,stringnname,doublee,doublem,doublecl,doubles,doublea,stringg)

{

id=nid;

name=nname;

next=NULL;

english=e;

math=m;

c=cl;

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->next=newnode;

break;

}

p1=p1->next;

}

}

}

boolLink:

:

linkDelete(intnid)

{//删除结点,成功则返回true

Node*p;

if(head==NULL)//链表为空的情况

returnfalse;

if(head->id==nid){//删除的为第一个结点的情况

head=head->next;

returntrue;

}

p=head;

while(p->next)

{//删除的为第二个及以后结点的情况

if((p->next)->id==nid)

{

p->next=(p->next)->next;

returntrue;

}

p=p->next;

}

returnfalse;

}

voidLink:

:

linkClear()

{//清空链表

head=NULL;

}

voidLink:

:

linkView()

{//显示链表数据

Node*p=head;

cout<

<<"数学"<

while(p)

{

(p->sum)=(p->english)+(p->math)+(p->c);//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3;//计算平均成绩

linkGrade(p);//计算等级

cout<id<name<english

<math<c<sum<

<average<grade<

p=p->next;

}

}

voidLink:

:

linkGrade(Node*p1)

{//计算等级

while(p1)

{

if(p1->average>=90&&p1->average<=100)

p1->grade="优";

elseif(p1->average>=80&&p1->average<90)

p1->grade="良好";

elseif(p1->average>=70&&p1->average<80)

p1->grade="中等";

elseif(p1->average>=60&&p1->average<=70)

p1->grade="合格";

else

p1->grade="不合格";

p1=p1->next;

}

}

voidLink:

:

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->average>=90&&p3->average<=100)

a+=1;

elseif(p3->average>=80&&p3->average<90)

b+=1;

elseif(p3->average>=70&&p3->average<80)

c+=1;

elseif(p3->average>=60&&p3->average<70)

d+=1;

else

e+=1;

asum+=p3->sum;

aaverage+=p3->average;

p3=p3->next;

}

f=a+b+c+d+e;

averagesum=asum/f;

paverage=aaverage/f;

cout<<"|-------------------------------------------------------|"<

cout<<"|总人数:

"<

cout<<"|-------------------------------------------------------|"<

cout<<"|优人数:

"<

"<

cout<<"|-------------------------------------------------------|"<

cout<<"|良好的人数:

"<

"<

cout<<"|-------------------------------------------------------|"<

cout<<"|中等的人数:

"<

"<

cout<<"|-------------------------------------------------------|"<

cout<<"|所有合格人数:

"<

"<<(a+b+c+d)*100/f<<"%"<

cout<<"|-------------------------------------------------------|"<

cout<<"|不合格数:

"<

"<

cout<<"|-------------------------------------------------------|"<

cout<<"|总分的平均分:

"<

"<

cout<<"|-------------------------------------------------------|"<

}

Node*Link:

:

linkFind(intnid)

{//查找id值为nid的结点,返回该结点的指针

Node*p=head;//没找到符合条件的结点的话,返回的指针值为NULL

while(p)

{

if(p->id==nid)

break;

else

p=p->next;

}

returnp;

}

Node*Link:

:

getHead()

{

returnhead;

}

//classLink结束

//类Student,用于包装Link类及菜单操作

classStudent

{

private:

Linkslink;//Link对象成员

boolk;//记录数据是否被修改

public:

Student();

voidstudentClear();

voidstudentInsert();

voidstudentDelete();

voidstudentFind();

voidstudentView();

voidstudentLoad();

voidstudentSave();

voidstudentAverageTotle();//按平均分数统计等级

voidExit();//退出程序

voidshowMenu();//显示菜单

voidshowTip();//显示操作提示

voiddoMenu(charn);//执行相应菜单项功能

};

Student:

:

Student()

{

Link();//调用成员对象的构造函数

studentLoad();//从文件中读取数据,创建链表

k=false;//设置数据被修改

}

voidStudent:

:

studentClear()

{//清空学生记录

slink.linkClear();

cout<<"成功清空学生记录!

"<

}

voidStudent:

:

studentInsert()

{//插入学生记录

Node*p=newNode();

cout<<"请输入学号:

";

cin>>p->id;

cout<<"请输入姓名:

";

cin>>p->name;

if(!

slink.linkFind(p->id))

{//判断学号是否存在

slink.linkInsert(p);

k=true;

}

else

{cout<<"学号为"<id<<"的学生已存在,插入失败!

"<

return;

}

cout<<"请输入成绩:

"<

cout<<"英语:

";

cin>>p->english;

cout<

cout<<"数学:

";

cin>>p->math;

cout<

cout<<"C++:

";

cin>>p->c;

cout<

(p->sum)=(p->english)+(p->math)+(p->c);//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3;//计算平均成绩

}

voidStudent:

:

studentDelete()

{//删除学生记录

inti;

if(slink.linkIsEmpty())//链表为空的情况

cout<<"没有学生记录!

"<

else

{

cout<<"请输入学号:

";

cin>>i;

if(slink.linkDelete(i))

{

cout<<"成功删除学号为"<

"<

k=true;

}

else

cout<<"没有找到学号为"<

"<

}

}

voidStudent:

:

studentFind()

{//查找某学号的学生记录

intn;

Node*p;

if(slink.linkIsEmpty())//链表为空的情况

cout<<"没有学生记录!

"<

else

{

cout<<"请输入要查找的学号:

";

cin>>n;

p=slink.linkFind(n);//获得找到的结点的指针

if(p)

{//指针值不为NULL时

(p->sum)=(p->english)+(p->math)+(p->c);//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3;//计算平均成绩

slink.linkGrade(p);

cout<

<

<<"平均分"<

cout<id<name<english

<math<c<sum<average

<grade<

}

else//指针值为NULL时

cout<<"没有找到学号为"<

"<

}

}

voidStudent:

:

studentView()

{//显示所有学生的记录

if(slink.linkIsEmpty())

cout<<"没有学生记录!

"<

else

slink.linkView();

}

voidStudent:

:

studentLoad()

{//从文件中读入数据,创建链表

Node*p;

intnid;

ifstreaminfile("data.txt");

if(!

infile)

cerr<<"错误:

数据文件不能打开!

\n";

else

while(infile>>nid)

{//读取学号,直到读空

p=newNode();

p->id=nid;

infile>>p->name>>p->english>>p->math>>p->c>>p->sum>>p->average>>p->grade;//读取姓名

slink.linkInsert(p);

}

infile.close();//关闭文件

}

voidStudent:

:

studentSave()

{//将数据保存到文件

Node*p=slink.getHead();

ofstreamoutfile("data.txt");

if(!

outfile)

cerr<<"错误:

数据文件不能打开!

\n";

else

{

while(p)

{

outfile<id<<''<name<<''<english<<''<math<<''

<c<<''<sum<<''<average<<''<grade<

p=p->next;

}

k=false;

cout<<"保存成功!

"<

}

}

voidStudent:

:

studentAverageTotle()

{

if(slink.linkIsEmpty())

cout<<"没有学生记录!

"<

else

slink.linkAverageTotle();

}

voidStudent:

:

Exit()

{

chars='Y';

if(k)

{//判断数据是否修改

cout<<"数据已经改变,是否保存?

(y/n):

";

cin>>s;

if(s=='y'||s=='Y')

studentSave();

}

cout<<"已安全退出,";

system("pause");

exit(0);

}

voidStudent:

:

showMenu()

{

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|学生信息管理系统|"<

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|1.清空:

清除所有学生数据|"<

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|2.添加:

插入一条学生数据|"<

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|3.删除:

删除指定学生数据|"<

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|4.查找:

查找指定学生数据|"<

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|5.显示:

显示所有学生数据|"<

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|6.保存:

保存所有学生数据|"<

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|7.统计:

按学生平均分统计|"<

cout<<""<<"|------------------------------------------------|"<

cout<<""<<"|0.退出:

安全的退出本系统|"<

cout<<""<<"|------------------------------------------------|"<

}

voidStudent:

:

showTip()

{

cout<

cout<<"-------------------操作完成---------------------"<

cout<<"-----------------选择0-7继续-------------------"<

cout<<"请选择:

";

}

voidStudent:

:

doMenu(charn)

{

switch(n)

{

ca

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

当前位置:首页 > 解决方案 > 学习计划

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

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