#include<iostream>
#include<string>
using namespace std;
typedef struct node
{
string stunum,stuname;
int math,english,computer;
int averagescore;
node *next;
}*ptrn; //结点
class linklist
{
private:
int mathaverage,enaverage,coaverage;
ptrn mathtop,entop,cotop;
ptrn mathmin,enmin,comin;
ptrn ms6,ms6_9,ms7_9,ms8_9,ms9; //各分数段头结点
ptrn es6,es6_9,es7_9,es8_9,es9;
ptrn cs6,cs6_9,cs7_9,cs8_9,cs9;
ptrn head;
public:
void creatlist() //创建链表
{
head=0;
ptrn temp,newnode;
int n;
while(1)
{
cout<<"0表示终止输入,1表示继续"<<endl;
cin>>n;
if(n==0)
break;
else
{
cout<<"请按照学号,姓名,数学,英语,计算机的顺序输入,"<<endl;
newnode=new node;
cin>>newnode->stunum>>newnode->stuname>>newnode->math>>newnode->english>>newnode->computer;
if(head==0)
{
head=newnode;
temp=newnode;
}
else
{
temp->next=newnode;
temp=newnode;
}
}
}
if(head)temp->next=0;
}
int length(ptrn &e) //求链长度
{
int count=0;
ptrn temm;
temm=e;
while(1)
{
if(temm==0)
{
break;
}
else
{
count++;
temm=temm->next;
}
}
return count;
}
void averagescorerank() //平均分排名
{
for(int i=0;i<length(head);i++)
{
ptrn temm;
temm=head;
for(int j=0;j<length(head)-i-1;j++)
{
if(temm->averagescore<temm->next->averagescore) //交换顺序
{
string tem,temp;
int temath,temen,temco,temaverage;
tem=temm->next->stunum;
temp=temm->next->stuname;
temath=temm->next->math;
temen=temm->next->english;
temco=temm->next->computer;
temaverage=temm->next->averagescore;
temm->next->stunum=temm->stunum;
temm->next->stuname=temm->stuname;
temm->next->math=temm->math;
temm->next->english=temm->english;
temm->next->computer=temm->computer;
temm->next->averagescore=temm->averagescore;
temm->stunum=tem;
temm->stuname=temp;
temm->math=temath;
temm->english=temen;
temm->computer=temco;
temm->averagescore=temaverage;
}
temm=temm->next;
}
}
cout<<" "<<"按照平均成绩排名由高到低为"<<endl;
ptrn tem;
tem=head;
while(1)
{
if(tem!=0)
{
cout<<" "<<tem->stunum<<" "<<tem->stuname<<" "<<tem->averagescore<<endl;
tem=tem->next;
}
else
break;
}
}
void mathrank() //数学排名
{
for(int i=0;i<length(head);i++)
{
ptrn temm;
temm=head;
for(int j=0;j<length(head)-i-1;j++)
{
if(temm->math<temm->next->math)
{
string tem,temp;
int temath,temen,temco,temaverage;
tem=temm->next->stunum;
temp=temm->next->stuname;
temath=temm->next->math;
temen=temm->next->english;
temco=temm->next->computer;
temaverage=temm->next->averagescore;
temm->next->stunum=temm->stunum;
temm->next->stuname=temm->stuname;
temm->next->math=temm->math;
temm->next->english=temm->english;
temm->next->computer=temm->computer;
temm->next->averagescore=temm->averagescore;
temm->stunum=tem;
temm->stuname=temp;
temm->math=temath;
temm->english=temen;
temm->computer=temco;
temm->averagescore=temaverage;
}
temm=temm->next;
}
}
mathtop=new node;
mathtop->stunum=head->stunum;
mathtop->stuname=head->stuname;
mathtop->math=head->math;
mathtop->english=head->english;
mathtop->computer=head->computer;
mathtop->averagescore=head->averagescore;
cout<<" "<<"按照数学成绩排名由高到低为"<<endl;
ptrn tem;
tem=head;
mathaverage=0;
while(1)
{
if(tem!=0)
{
cout<<" "<<tem->stunum<<" "<<tem->stuname<<" "<<tem->math<<endl;
mathaverage+=tem->math;
if(tem->next==0)
{
mathmin=tem;
}
tem=tem->next;
}
else
break;
}
}
void enlishrank() //英语排名
{
for(int i=0;i<length(head);i++)
{
ptrn temm;
temm=head;
for(int j=0;j<length(head)-i-1;j++)
{
if(temm->english<temm->next->english)
{
string tem,temp;
int temath,temen,temco,temaverage;
tem=temm->next->stunum;
temp=temm->next->stuname;
temath=temm->next->math;
temen=temm->next->english;
temco=temm->next->computer;
temaverage=temm->next->averagescore;
temm->next->stunum=temm->stunum;
temm->next->stuname=temm->stuname;
temm->next->math=temm->math;
temm->next->english=temm->english;
temm->next->computer=temm->computer;
temm->next->averagescore=temm->averagescore;
temm->stunum=tem;
temm->stuname=temp;
temm->math=temath;
temm->english=temen;
temm->computer=temco;
temm->averagescore=temaverage;
}
temm=temm->next;
}
}
entop=new node;
entop->stunum=head->stunum;
entop->stuname=head->stuname;
entop->math=head->math;
entop->english=head->english;
entop->computer=head->computer;
entop->averagescore=head->averagescore;
cout<<" "<<"按照英语成绩排名由高到低为"<<endl;
ptrn tem;
tem=head;
enaverage=0;
while(1)
{
if(tem!=0)
{
cout<<" "<<tem->stunum<<" "<<tem->stuname<<" "<<tem->english<<endl;
enaverage+=tem->english;
if(tem->next==0)
{
enmin=tem;
}
tem=tem->next;
}
else
break;
}
}
void computerrank() //计算机排名
{
for(int i=0;i<length(head);i++)
{
ptrn temm;
temm=head;
for(int j=0;j<length(head)-i-1;j++)
{
if(temm->computer<temm->next->computer)
{
string tem,temp;
int temath,temen,temco,temaverage;
tem=temm->next->stunum;
temp=temm->next->stuname;
temath=temm->next->math;
temen=temm->next->english;
temco=temm->next->computer;
temaverage=temm->next->averagescore;
temm->next->stunum=temm->stunum;
temm->next->stuname=temm->stuname;
temm->next->math=temm->math;
temm->next->english=temm->english;
temm->next->computer=temm->computer;
temm->next->averagescore=temm->averagescore;
temm->stunum=tem;
temm->stuname=temp;
temm->math=temath;
temm->english=temen;
temm->computer=temco;
temm->averagescore=temaverage;
}
temm=temm->next;
}
}
cotop=new node;
cotop->stunum=head->stunum;
cotop->stuname=head->stuname;
cotop->math=head->math;
cotop->english=head->english;
cotop->computer=head->computer;
cotop->averagescore=head->averagescore;
cout<<" "<<"按照计算机成绩排名由高到低为"<<endl;
ptrn tem;
tem=head;
coaverage=0;
while(1)
{
if(tem!=0)
{
cout<<" "<<tem->stunum<<" "<<tem->stuname<<" "<<tem->computer<<endl;
coaverage+=tem->computer;
if(tem->next==0)
{
comin=tem;
}
tem=tem->next;
}
else
break;
}
}
void mathsection() //数学分数段
{
ptrn tem,temmath60,temmath69,temmath79,temmath89,temmath90;
ms6=0;ms6_9=0;ms7_9=0;ms8_9=0;ms9=0;
tem=head;
ptrn newnode;
while(1)
{
if(tem!=0)
{
newnode=new node;
newnode->stunum=tem->stunum;
newnode->stuname=tem->stuname;
newnode->averagescore=tem->averagescore;
newnode->math=tem->math;
newnode->english=tem->english;
newnode->computer =tem->computer ;
if(tem->math<60)
{
if(ms6==0)
{
ms6=newnode;
temmath60=newnode;
}
else
{
temmath60->next=newnode;
temmath60=newnode;
}
}
else if(tem->math>=60&&tem->math<=69)
{
if(ms6_9==0)
{
ms6_9=newnode;
temmath69=newnode;
}
else
{
temmath69->next=newnode;
temmath69=newnode;
}
}
else if(tem->math>=70&&tem->math<=79)
{
if(ms7_9==0)
{
ms7_9=newnode;
temmath79=newnode;
}
else
{
temmath79->next=newnode;
temmath79=newnode;
}
}
else if(tem->math>=80&&tem->math<=89)
{
if(ms8_9==0)
{
ms8_9=newnode;
temmath89=newnode;
}
else
{
temmath89->next=newnode;
temmath89=newnode;
}
}
else
{
if(ms9==0)
{
ms9=newnode;
temmath90=newnode;
}
else
{
temmath90->next=newnode;
temmath90=newnode;
}
}
tem=tem->next;
}
else
{
break;
}
}
if(ms6)temmath60->next=0;
if(ms6_9)temmath69->next=0;
if(ms7_9)temmath79->next=0;
if(ms8_9)temmath89->next=0;
if(ms9)temmath90->next=0;
}
void ensection() //英语分段
{
ptrn tem,temen60,temen69,temen79,temen89,temen90;
es6=0;es6_9=0;es7_9=0;es8_9=0;es9=0;
tem=head;
ptrn newnode;
while(1)
{
if(tem!=0)
{
newnode=new node;
newnode->stunum=tem->stunum;
newnode->stuname=tem->stuname;
newnode->averagescore=tem->averagescore;
newnode->math=tem->math;
newnode->english=tem->english;
newnode->computer =tem->computer ;
if(tem->english<60)
{
if(es6==0)
{
es6=newnode;
temen60=newnode;
}
else
{
temen60->next=newnode;
temen60=newnode;
}
}
else if(tem->english>=60&&tem->english<=69)
{
if(es6_9==0)
{
es6_9=newnode;
temen69=newnode;
}
else
{
temen69->next=newnode;
temen69=newnode;
}
}
else if(tem->english>=70&&tem->english<=79)
{
if(es7_9==0)
{
es7_9=newnode;
temen79=newnode;
}
else
{
temen79->next=newnode;
temen79=newnode;
}
}
else if(tem->english>=80&&tem->english<=89)
{
if(es8_9==0)
{
es8_9=newnode;
temen89=newnode;
}
else
{
temen89->next=newnode;
temen89=newnode;
}
}
else
{
if(es9==0)
{
es9=newnode;
temen90=newnode;
}
else
{
temen90->next=newnode;
temen90=newnode;
}
}
tem=tem->next;
}
else
{
break;
}
}
if(es6)temen60->next=0;
if(es6_9)temen69->next=0;
if(es7_9)temen79->next=0;
if(es8_9)temen89->next=0;
if(es9)temen90->next=0;
}
void cosection() //计算机分段
{
ptrn tem,temco60,temco69,temco79,temco89,temco90;
cs6=0;cs6_9=0;cs7_9=0;cs8_9=0;cs9=0;
tem=head;
ptrn newnode;
while(1)
{
if(tem!=0)
{
newnode=new node;
newnode->stunum=tem->stunum;
newnode->stuname=tem->stuname;
newnode->averagescore=tem->averagescore;
newnode->math=tem->math;
newnode->english=tem->english;
newnode->computer =tem->computer ;
if(tem->computer<60)
{
if(cs6==0)
{
cs6=newnode;
temco60=newnode;
}
else
{
temco60->next=newnode;
temco60=newnode;
}
}
else if(tem->computer>=60&&tem->computer<=69)
{
if(cs6_9==0)
{
cs6_9=newnode;
temco69=newnode;
}
else
{
temco69->next=newnode;
temco69=newnode;
}
}
else if(tem->computer>=70&&tem->computer<=79)
{
if(cs7_9==0)
{
cs7_9=newnode;
temco79=newnode;
}
else
{
temco79->next=newnode;
temco79=newnode;
}
}
else if(tem->computer>=80&&tem->computer<=89)
{
if(cs8_9==0)
{
cs8_9=newnode;
temco89=newnode;
}
else
{
temco89->next=newnode;
temco89=newnode;
}
}
else
{
if(cs9==0)
{
cs9=newnode;
temco90=newnode;
}
else
{
temco90->next=newnode;
temco90=newnode;
}
}
tem=tem->next;
}
else
{
break;
}
}
if(cs6)temco60->next=0;
if(cs6_9)temco69->next=0;
if(cs7_9)temco79->next=0;
if(cs8_9)temco89->next=0;
if(cs9)temco90->next=0;
}
void outputmathsection() //输出数学分段部分
{
cout<<" "<<"数学成绩不及格情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(ms6)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"数学成绩"<<endl;
ptrn tempp1;
tempp1=ms6;
while(1)
{
if(tempp1!=0)
{
cout<<" "<<tempp1->stunum<<" "<<tempp1->stuname<<" "<<tempp1->math<<endl;
tempp1=tempp1->next;
}
else
break;
}
cout<<" "<<"数学成绩60-69情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(ms6_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"数学成绩"<<endl;
ptrn tempp2;
tempp2=ms6_9;
while(1)
{
if(tempp2!=0)
{
cout<<" "<<tempp2->stunum<<" "<<tempp2->stuname<<" "<<tempp2->math<<endl;
cout<<endl;
cout<<endl;
tempp2=tempp2->next;
}
else
break;
}
cout<<" "<<"数学成绩70-79情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(ms7_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"数学成绩"<<endl;
ptrn tempp3;
tempp3=ms7_9;
while(1)
{
if(tempp3!=0)
{
cout<<" "<<tempp3->stunum<<" "<<tempp3->stuname<<" "<<tempp3->math<<endl;
cout<<endl;
cout<<endl;
tempp3=tempp3->next;
}
else
break;
}
cout<<" "<<"数学成绩80-89情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(ms8_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"数学成绩"<<endl;
ptrn tempp4;
tempp4=ms8_9;
while(1)
{
if(tempp4!=0)
{
cout<<" "<<tempp4->stunum<<" "<<tempp4->stuname<<" "<<tempp4->math<<endl;
cout<<endl;
cout<<endl;
tempp4=tempp4->next;
}
else
break;
}
cout<<" "<<"数学成绩90以上情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(ms9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"数学成绩"<<endl;
ptrn tempp5;
tempp5=ms9;
while(1)
{
if(tempp5!=0)
{
cout<<" "<<tempp5->stunum<<" "<<tempp5->stuname<<" "<<tempp5->math<<endl;
cout<<endl;
cout<<endl;
tempp5=tempp5->next;
}
else
break;
}
}
void outputensection() //输出英语分段部分
{
cout<<" "<<"英语成绩不及格情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(es6)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"英语成绩"<<endl;
ptrn tempp1;
tempp1=es6;
while(1)
{
if(tempp1!=0)
{
cout<<" "<<tempp1->stunum<<" "<<tempp1->stuname<<" "<<tempp1->english<<endl;
cout<<endl;
cout<<endl;
tempp1=tempp1->next;
}
else
break;
}
cout<<" "<<"英语成绩60-69情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(es6_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"英语成绩"<<endl;
ptrn tempp2;
tempp2=es6_9;
while(1)
{
if(tempp2!=0)
{
cout<<" "<<tempp2->stunum<<" "<<tempp2->stuname<<" "<<tempp2->english<<endl;
cout<<endl;
cout<<endl;
tempp2=tempp2->next;
}
else
break;
}
cout<<" "<<"英语成绩70-79情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(es7_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"英语成绩"<<endl;
ptrn tempp3;
tempp3=es7_9;
while(1)
{
if(tempp3!=0)
{
cout<<" "<<tempp3->stunum<<" "<<tempp3->stuname<<" "<<tempp3->english<<endl;
cout<<endl;
cout<<endl;
tempp3=tempp3->next;
}
else
break;
}
cout<<" "<<"英语成绩80-89情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(es8_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"英语成绩"<<endl;
ptrn tempp4;
tempp4=es8_9;
while(1)
{
if(tempp4!=0)
{
cout<<" "<<tempp4->stunum<<" "<<tempp4->stuname<<" "<<tempp4->english<<endl;
cout<<endl;
cout<<endl;
tempp4=tempp4->next;
}
else
break;
}
cout<<" "<<"英语成绩90以上情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(es9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"英语成绩"<<endl;
ptrn tempp5;
tempp5=es9;
while(1)
{
if(tempp5!=0)
{
cout<<" "<<tempp5->stunum<<" "<<tempp5->stuname<<" "<<tempp5->english<<endl;
cout<<endl;
cout<<endl;
tempp5=tempp5->next;
}
else
break;
}
}
void outputcosection() //输出计算机分段部分
{
cout<<" "<<"计算机成绩不及格情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(cs6)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"计算机成绩"<<endl;
ptrn tempp1;
tempp1=cs6;
while(1)
{
if(tempp1!=0)
{
cout<<" "<<tempp1->stunum<<" "<<tempp1->stuname<<" "<<tempp1->computer<<endl;
cout<<endl;
cout<<endl;
tempp1=tempp1->next;
}
else
break;
}
cout<<" "<<"计算机成绩60-69情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(cs6_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"计算机成绩"<<endl;
ptrn tempp2;
tempp2=cs6_9;
while(1)
{
if(tempp2!=0)
{
cout<<" "<<tempp2->stunum<<" "<<tempp2->stuname<<" "<<tempp2->computer<<endl;
cout<<endl;
cout<<endl;
tempp2=tempp2->next;
}
else
break;
}
cout<<" "<<"计算机成绩70-79情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(cs7_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"计算机成绩"<<endl;
ptrn tempp3;
tempp3=cs7_9;
while(1)
{
if(tempp3!=0)
{
cout<<" "<<tempp3->stunum<<" "<<tempp3->stuname<<" "<<tempp3->computer<<endl;
cout<<endl;
cout<<endl;
tempp3=tempp3->next;
}
else
break;
}
cout<<" "<<"计算机成绩80-89情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(cs8_9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"计算机成绩"<<endl;
ptrn tempp4;
tempp4=cs8_9;
while(1)
{
if(tempp4!=0)
{
cout<<" "<<tempp4->stunum<<" "<<tempp4->stuname<<" "<<tempp4->computer<<endl;
cout<<endl;
cout<<endl;
tempp4=tempp4->next;
}
else
break;
}
cout<<" "<<"计算机成绩90以上情况如下"<<endl;
cout<<" "<<"人数为"<<" "<<length(cs9)<<endl;
cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"计算机成绩"<<endl;
ptrn tempp5;
tempp5=cs9;
while(1)
{
if(tempp5!=0)
{
cout<<" "<<tempp5->stunum<<" "<<tempp5->stuname<<" "<<tempp5->computer<<endl;
cout<<endl;
cout<<endl;
tempp5=tempp5->next;
}
else
break;
}
}
void serch() //查找
{
cout<<"********************(1)学号查询**************************"<<endl;
cout<<"********************(2)姓名查询**************************"<<endl;
cout<<"***************请输入提示的数字*********************"<<endl;
int m;
cin>>m;
if(m==1)
{
cout<<"******************请输入学号**************************"<<endl;
char *ch1;
ch1=new char[2];
cin>>ch1;
ptrn temn;
temn=head;
while(1)
{
if(temn!=0&&temn->stunum==ch1)
{
cout<<"***************所查学生的信息如下************************"<<endl;
cout<<"学号"<<" "<<"姓名"<<" "<<"数学"<<" "<<"英语"<<" "<<"计算机"<<endl;
cout<<temn->stunum<<" "<<temn->stuname<<" "<<temn->math<<" "<<temn->english<<" "<<temn->computer<<endl;break;
}
else if(temn!=0)
{
temn=temn->next;
}
else
{
break;
}
}
}
else
{
cout<<"******************请输入姓名**************************"<<endl;
char *ch2;
ch2=new char[10];
cin>>ch2;
ptrn temn;
temn=head;
while(1)
{
if(temn!=0&&temn->stuname==ch2)
{
cout<<"***************所查学生的信息如下************************"<<endl;
cout<<"学号"<<" "<<"姓名"<<" "<<"数学"<<" "<<"英语"<<" "<<"计算机"<<endl;
cout<<temn->stunum<<" "<<temn->stuname<<" "<<temn->math<<" "<<temn->english<<" "<<temn->computer<<endl;
break;
}
else if(temn!=0)
{
temn=temn->next;
}
else
{
break;
}
}
}
}
void output() //输出最高最低分
{
cout<<"数学平均分"<<" "<<"英语平均分"<<" "<<"计算机平均分"<<endl;
cout<<mathaverage/length(head)<<" "<<enaverage/length(head)<<" "<<coaverage/length(head)<<endl;
cout<<"数学最高分"<<" "<<"英语最高分"<<" "<<"计算机最高分"<<endl;
cout<<" "<<mathtop->math<<" "<<entop->english<<" "<<cotop->computer<<endl;
cout<<endl;
cout<<"数学最低分"<<" "<<"英语最低分"<<" "<<"计算机最低分"<<endl;
cout<<" "<<mathmin->math<<" "<<enmin->english<<" "<<comin->computer<<endl;
}
};
void main()
{
linklist list;
list.creatlist();
list.averagescorerank();
list.mathrank();
list.enlishrank();
list.computerrank();
list.mathsection();
list.ensection();
list.cosection();
list.outputmathsection();
list.outputensection();
list.outputcosection();
list.output();
list.serch();
}