📄 student.h
字号:
#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<stdlib.h>
#include<fstream>
const int N=4;
using namespace std;
class student
{
char number[15];//学生学号
char name[10];//学生姓名
int score[N];//各门功课成绩
float sum;//各门成绩的总分
float average;//平均分
int order;//名次
student *link;//指向对象的指针
public:
student *init()
{ char c;
cout<<"请按任意键进行初始化"<<endl;
cin>>c;
if(c)
cout<<"恭喜,初始化成功!"<<endl;
return NULL;
}
student* create()
{
student *h=NULL,*info,*last=NULL;
char c;
for(;;)
{
loop: info=new student;
if(!info)
{
cout<<"\nout of memory";
}
cout<<"请输入学号:";
cin>>info->number ;
cout<<"请输入姓名:";
cin>>info->name;
float s=0;
float ave=0;
do{cout<<"请输入语文成绩:";
cin>>info->score[0];
while(!cin)
{cin.clear();
cin.ignore(80,'\n');
cout<<"数据输入错误,请重新输入语文成绩:";
cin>>info->score[0];}
if(info->score[0]>100||info->score[0]<0)
cout<<"注意数据只能在0~100之间"<<endl;}
while(info->score[0]>100||info->score[0]<0);
do{cout<<"请输入数学成绩:";cin>>info->score[1];
while(!cin)
{cin.clear();
cin.ignore(80,'\n');
cout<<"数据输入错误,请重新输入数学成绩:";
cin>>info->score[1];}
if(info->score[1]>100||info->score[1]<0)
cout<<"注意数据只能在0~100之间"<<endl;}
while(info->score[1]>100||info->score[1]<0);
do{cout<<"请输入英语成绩:";cin>>info->score[2];
while(!cin)
{cin.clear();
cin.ignore(80,'\n');
cout<<"数据输入错误,请重新输入英语成绩:";
cin>>info->score[2];}
if(info->score[2]>100||info->score[2]<0)
cout<<"注意数据只能在0~100之间"<<endl;}
while(info->score[2]>100||info->score[2]<0);
do{cout<<"请输入C++成绩:";cin>>info->score[3];
while(!cin)
{cin.clear();
cin.ignore(80,'\n');
cout<<"数据输入错误,请重新输入C++成绩:";
cin>>info->score[3];}
if(info->score[3]>100||info->score[3]<0)
cout<<"注意数据只能在0~100之间"<<endl ;}
while(info->score[3]>100||info->score[3]<0);
for(int i=0;i<4;i++)
s+=info->score[i];
ave=s/4.0;
info->sum=s;
info->average=ave;
info->order=0;
info->link=NULL;
if(h==NULL)
{ //h=new student;
h=info;
last=info;
}
else
{
last->link=info;
last=info;
}
p:{
cout<<"继续输入?(y/n)";
cin>>c;
}
if(c!='y'&&c!='n')
{cout<<"输入错误!"<<endl;
goto p;}
if(c=='y')goto loop;
if(c=='n')break;
}
return h;
}//创建链表
student *del(student *h)
{
student *current,*last,*trailcurrent;
//last 是指向最后一个节点的指针,trailcurrent是current的前趋指针
char name[15];
bool found;
cout<<"请输入你要删除记录学生的名字:";
cin>>name;
current=h;
last=new student;
while(current!=0)//使last指向最后一个节点
current=current->link;
last=current;
if(h==NULL)
cout<<"链表为空,不可以删除数据"<<endl;
else
{
if(strcmp(h->name,name)==0)
{ current=h;
h=h->link;
if(h==NULL)
last=NULL;
delete current;
cout<<"成功删除"<<endl;
}
else
{
found=false;
trailcurrent=h;
current=h->link;
while((!found)&&(current!=NULL))
{
if(strcmp(current->name,name)!=0)
{
trailcurrent=current;
current=current->link;
}
else
found=true;
}
if(found)
{
cout<<"按任意数字键删除(1~10)"<<endl;
cout<<"按0退出"<<endl;
int g;
cin>>g;
if(g)
{
trailcurrent->link=current->link;
if(last==current)
last=trailcurrent;
delete current;
cout<<"删除成功"<<endl;
}
else
cout<<"删除不成功"<<endl;
}
else
cout<<"要删除学生的信息不在表中"<<endl;
}
}
return h;
}
void print(student *h)
{
int i=0;
student *p;
p=h;
if(p==NULL)
{
cout<<" ┎───┬───┬───┬───┬───┬────┬───┬───┬───┓"<<endl;
cout<<setw(8)<<"│学号"<<setw(8)<<"│姓名"<<setw(8)<<"│语文"<<setw(8)<<"│数学"<<setw(8)<<"│英语"<<setw(9)<<" │C++语言 │"
<<setw(8)<<"总分│"<<setw(6)<<"平均分"<<setw(6)<<"│名次 │"<<endl;
cout<<" ┖───┴───┴───┴───┴───┴────┴───┴───┴───┚"<<endl;
cout<<"请先输入数据";
}
else
{
//cout<<"\n\n\n\n******************************学生成绩管理系统******************************\n";
cout<<" ┎───┬───┬───┬───┬───┬────┬───┬───┬───┓"<<endl;
cout<<setw(8)<<"│学号"<<setw(8)<<"│姓名"<<setw(8)<<"│语文"<<setw(8)<<"│数学"<<setw(8)<<"│英语"<<setw(9)<<" │C++语言 │"
<<setw(8)<<"总分│"<<setw(6)<<"平均分"<<setw(6)<<"│名次 │"<<endl;
cout<<" ├───┼───┼───┼───┼───┼────┼───┼───┼───┤"<<endl;
while(p!=NULL)
{
i++;
if(p->link!=NULL){
cout<<" │"<<setw(6)<<p->number<<"│"<<setw(6)<<p->name<<"│"<<setw(6)<<p->score[0]
<<"│"<<setw(6)<<p->score[1]<<"│"
<<setw(6)<<p->score[2]<<"│"<<setw(6)<<p->score[3]<<" │"
<<setw(6)<<p->sum<<"│"<<setw(6)<<p->average<<"│"<<setw(6)<<
p->order<<"│"<<setw(6)<<endl;
cout<<" ├───┼───┼───┼───┼───┼────┼───┼───┼───┤"<<endl; }
else
{
cout<<" │"<<setw(6)<<p->number<<"│"<<setw(6)<<p->name<<"│"<<setw(6)<<p->score[0]
<<"│"<<setw(6)<<p->score[1]<<"│"
<<setw(6)<<p->score[2]<<"│"<<setw(6)<<p->score[3]<<" │"
<<setw(6)<<p->sum<<"│"<<setw(6)<<p->average<<"│"<<setw(6)<<
p->order<<"│"<<setw(6)<<endl;
cout<<" ┖───┴───┴───┴───┴───┴────┴───┴───┴───┚"<<endl;
}
p=p->link;
}
//cout<<" ┖───┴───┴───┴───┴───┴────┴───┴───┴───┚"<<endl;
}
}
void search_by_name(student *h)
{
student *p;
p=new student;
bool found;
char q[15];
cout<<"请输入该生姓名:"<<endl;
cin>>q;
if(p==NULL)
cout<<"兄弟,无节点数据,不能从链表里查询!"<<endl;
else
{
p=h;
found=false;
while(!found&&p!=NULL)
if(strcmp(p->name,q)==0)
found=true;
//else
p=p->link;
if(found)
{
cout<<" ┎───┬───┬───┬───┬───┬────┬───┬───┬───┓"<<endl;
cout<<setw(8)<<"│学号"<<setw(8)<<"│姓名"<<setw(8)<<"│语文"<<setw(8)<<"│数学"<<setw(8)<<"│英语"
<<setw(9)<<" │C++语言 │"
<<setw(8)<<"总分│"<<setw(6)<<"平均分"<<setw(6)<<"│名次 │"<<endl;
cout<<" ├───┼───┼───┼───┼───┼────┼───┼───┼───┤"<<endl;
cout<<" │"<<setw(6)<<p->number<<"│"<<setw(6)<<p->name<<"│"<<setw(6)<<p->score[0]
<<"│"<<setw(6)<<p->score[1]<<"│"
<<setw(6)<<p->score[2]<<"│"<<setw(6)<<p->score[3]<<" │"
<<setw(6)<<p->sum<<"│"<<setw(6)<<p->average<<"│"<<setw(6)<<
p->order<<"│"<<setw(6)<<endl;
//cout<<" ├───┼───┼───┼───┼───┼────┼───┼───┼───┤"<<endl;
cout<<" ┖───┴───┴───┴───┴───┴────┴───┴───┴───┚"<<endl;
}
else
cout<<"无该生信息"<<endl;
}
}
student *search_by_number(student *h)
{ student *p;
p=new student;
bool found;
char q[15];
cout<<"请输入该生学号:"<<endl;
cin>>q;
if(p==NULL)
cout<<"兄弟,无节点数据,不能从链表里查询!"<<endl;
else
{
p=h;
found=false;
while(!found&&p!=NULL)
if(strcmp(p->number,q)==0)
found=true;
else
p=p->link;
if(found)
{
cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"语文"<<"\t"<<"数学"<<"\t"<<"英语"<<"\t"<<"C++语言"
<<"\t"<<"总分"<<"\t"<<"平均分"<<"\t"<<"名次"<<endl;
cout<<p->number<<"\t"<<p->name<<"\t"<<p->score[0]<<"\t"<<p->score[1]
<<"\t"<<p->score[2]<<"\t"<<p->score[3]<<"\t"<<p->sum<<"\t"<<p->average<<"\t"<<p->order<<"\t"<<endl;
}
else
cout<<"无该生信息"<<endl;
}
return h;
}
student *modify(student *h)
{
student *p;
cout<<"请输入需要修改信息的学生的姓名:"<<endl;
p=new student;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -