}
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