#include<iostream.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<fstream.h>
#include<stdlib.h>
struct sstudent
{
char namber[15];
char name[10];
float math;
float chinese;
float eglish;
float computer;
double pingjun;
float hscore;
sstudent *next;
};
class cstudent
{
sstudent *head;
sstudent *ss1;
sstudent *ss2;
sstudent *h1;
int i;
public:
sstudent *h2;
cstudent()
{
head=0;
ss1=0;
ss2=0;
h1=0;
h2=0;
}
double pj(sstudent *p1)
{
double a;
a=(p1->math+p1->chinese+p1->eglish+p1->computer)/4;
return a;
}
float hs(sstudent *p1)
{
float a=p1->math;
if(a>=p1->chinese);
else
a=p1->chinese;
if(a>=p1->eglish);
else
a=p1->eglish;
if(a>=p1->computer);
else
a=p1->computer;
return a;
}
void look1(sstudent *h1)
{
printf("学号 姓名 数学 语文 英语 计算机 平均 最好分");
cout<<endl;
printf("%-13s%-10s%-8f %-8f %-8f %-8f %-10lf %-8f/n",h1->namber,h1->name,h1->math,h1->chinese,h1->eglish,h1->computer,h1->pingjun,h1->hscore);
}
void look2()
{
int a=1;
sstudent *p1=head;
do
{
if(p1==0) a=0;
else
{
look1(p1);
p1=p1->next;
}
}
while(a==1);
}
void built()
{
int a=0;
do
{
ss1=new sstudent;
ss1->next=0;
if(head==0)
{
head=ss1;
ss2=ss1;
}
else
{
ss2->next=ss1;
ss2=ss1;
}
cout<<"输入学号:"<<endl;
cin>>ss1->namber;
cout<<"输入姓名:"<<endl;
cin>>ss1->name;
cout<<"输入数学成绩:"<<endl;
cin>>ss1->math;
cout<<"输入语文成绩:"<<endl;
cin>>ss1->chinese;
cout<<"输入英语成绩:"<<endl;
cin>>ss1->eglish;
cout<<"输入计算机成绩:"<<endl;
cin>>ss1->computer;
ss1->pingjun=pj(ss1);
ss1->hscore=hs(ss1);
cout<<"继续输入1,否则输入0;"<<endl;
cin>>a;
}
while(a==1);
}
void save()
{
ofstream fout;
sstudent *p=head;
fout.open("c:student.txt",ios::out|ios::binary);
if(!fout)
{
cout<<"Error:can't open student.txt!";
exit(1);
}
while(fout&&p!=0)
{
fout.write((char*)&*p,sizeof(sstudent));
p=p->next;
}
fout.close();
}
void o()
{
ifstream fin;
sstudent *p1=0;
sstudent *p2=0;
fin.open ("c:student.txt",ios::in|ios::binary);
if(!fin)
{
cout<<"Error:can't open student.txt!";
exit(1);
}
p1=new sstudent;
p2=p1;
head=p1;
fin.read ((char*)&*p1,sizeof(sstudent));
while(fin&&p1->next!=0)
{
p1=new sstudent;
p2->next=p1;
p2=p1;
fin.read ((char*)&*p1,sizeof(sstudent));
}
fin.close();
look2();
}
void xx()
{
sstudent *p2,*p1=head;
p2=new sstudent;
int c=0,i;
double sum[6]={0};
while(p1!=0)
{
sum[0]=p1->math+sum[0];
sum[1]=p1->chinese+sum[1];
sum[2]=p1->eglish+sum[2];
sum[3]=p1->computer+sum[3];
sum[4]=p1->pingjun+sum[4];
sum[5]=p1->hscore+sum[5];
p1=p1->next;
c++;
}
for(i=0;i<4;i++)
p2->namber[i]='0';
p2->namber[i+1]='/0';
for(i=0;i<4;i++)
p2->name[i]='0';
p2->name[i+1]='/0';
p2->math=(float)sum[0]/c;
p2->chinese=(float)sum[1]/c;
p2->eglish=(float)sum[2]/c;
p2->computer=(float)sum[3]/c;
p2->pingjun=(float)sum[4]/c;
p2->hscore=(float)sum[5]/c;
look1(p2);
}
int book()
{
h1=0;
h2=0;
char m[15];
int a=0;
cout<<"输入学号:"<<endl;
cin>>m;
do
{
if(h1==0)
{
if(head->next==0)
{
if(!strcmp(head->namber,m))
{
h2=head;
a=1;
}
else
a=2;
}
else
{
h1=head;
h2=head->next;
if(!strcmp(head->namber,m))
{
h2=head;
a=1;
}
else ;
}
}
else
{
if(!strcmp(h2->namber,m))
a=1;
else
{
if(h2->next==0)
a=2;
else
{
h1=h2;
h2=h2->next;
}
}
}
}
while(a==0);
return a;
}
void paixu()
{
sstudent *p1=head;
sstudent *p2=head;
sstudent *p3=head;
sstudent *p4=head->next;
sstudent *p5=0;
do
{
if(p2==head)
{
if(p4!=0)
{
if(p2->pingjun-p4->pingjun==0||p2->pingjun-p4->pingjun>0)
{
p3=p3->next;
p4=p4->next;
}
else
{
if(p2==p3)
{
head=p4;
p5=p4->next;
p4->next=p2;
p2->next=p5;
p1=head;
p2=head;
p3=head;
p4=p3->next;
p3=p3->next;
p4=p4->next;
}
else
{
head=p4;
p5=p4->next;
p4->next=p2->next;
p2->next=p5;
p3->next=p2;
p1=head;
p2=head;
p4=p3->next;
p3=p3->next;
p4=p4->next;
}
}
}
else
{
if(p2==p3)
p2=p2->next;
else
{
p2=p2->next;
p3=p2;
p4=p2->next;
}
}
}
else
{
if(p4!=0)
{
if(p2->pingjun-p4->pingjun==0||p2->pingjun-p4->pingjun>0)
{
p3=p3->next;
p4=p4->next;
}
else
{
if(p2->next==p4)
{
p1->next=p4;
p5=p4->next;
p4->next=p2;
p2->next=p5;
p2=p1->next;
p3=p2;
p4=p3->next;
p3=p3->next;
p4=p4->next;
}
else
{
p5=p4->next;
p4->next=p2->next;
p2->next=p5;
p1->next=p4;
p3->next=p2;
p2=p1->next;
p4=p3->next;
p3=p3->next;
p4=p4->next;
}
}
}
else
{
if(p2==p3)
p2=p2->next;
else
{
p2=p2->next;
p1=p1->next;
p3=p2;
p4=p2->next;
}
}
}
}
while(p2!=0);
ss1=p3;
ss2=p3;
look2();
}
void brek()
{
int a;
char s[4]="1";
char ai[20]={0};
char b[8][20]={{"学号"},{"姓名"},{"数学"},{"语文"},{"英语"},{"计算机"},{"平均成绩"},{"最好成级"}};
a=book();
if(a==2)
{
cout<<"无此项"<<endl;
return;
}
look1(h2);
cout<<"删除该项输入1,否则,输入许修改的项."<<endl;
cin>>ai;
if(!strcmp(ai,s))
{
if(head->next==0)
{
delete head;
head=0;
}
else
{
if(h2==head)
{
head=head->next;
delete h2;
}
else
{
if(h2->next==0)
{
h1->next=h2->next;
delete h2;
ss1=h1;
ss2=h1;
}
else
{
h1->next=h2->next;
delete h2;
}
}
}
look2();
}
else
{
for(i=0;strcmp(b[i],ai)&& i!=8;i++);
if(i==8);
else
{
cout<<"输入新数据"<<endl;
switch(i)
{
case 0:
cin>>h2->namber;break;
case 1:
{
cin>>h2->name;break;
}
case 2:
{
cin>>h2->math;break;
}
case 3:
{
cin>>h2->chinese;break;
}
case 4:
{
cin>>h2->eglish;break;
}
case 5:
{
cin>>h2->computer;break;
}
case 6:
{
cin>>h2->pingjun;break;
}
case 7:
{
cin>>h2->hscore;break;
}
}
h2->pingjun=pj(h2);
h2->hscore=hs(h2);
look1(h2);
}
}
}
};
void main()
{
int u,x=0;
int v=0;
cstudent cs;
do
{
cout<<"添加1,搜索2,输出3,删除或修改4,排序5,平均成绩6,保存7,打开文件8,推出9"<<endl;
cin>>u;
switch (u)
{
case 1: cs.built();break;
case 2:
{
x=cs.book();
if(x==1)
{
cs.look1(cs.h2);break;
}
else
{
cout<<"无此信息"<<endl;break;
}
}
case 3:cs.look2();break;
case 4:cs.brek();break;
case 5:cs.paixu();break;
case 6:cs.xx();break;
case 7:cs.save ();break;
case 8:cs.o();break;
case 9:v=1;break;
}
}
while(v!=1);
}