1、include
#include
#include
#include
const int M = 20;
class stucopy//此类用于拷贝student的数据,用于排序功能的实现
{
public:
char id[20];
char sex[10];
char name[10];
double grade[5];
double sumsum;//总成绩
double average;//平均成绩
};
class student//用于保存学生信息的类
2、{
friend class list;
public:
char id[20];//保存学号
char sex[10];//保存性别
char name[10];//保存名字
double grade[5];//保存成绩
student()
{
next=0;
for (int i=0;i<20;i++) id[i]=0;
for (i=0;i<10;i++) sex[i]=0;
for (i=0;i<10;i++) name[i]=0;
}
void s();
void setid(char id1[20])
{
for(int i=0;i<20;i+
3、)
id[i]=id1[i];
}
void setsex(char sex1[10])
{
for(int i=0;i<10;i++)
sex[i]=sex1[i];
}
void setname(char name1[10])
{
for(int i=0;i<10;i++)
name[i]=name1[i];
}
void setgrade(double grade1[5])
{
for(int i=0;i<5;i++)
grade[i]=grade1[i];
}
student *next;//next指向下一个学生,构成链表
char * out
4、id(){return id;};
char * outsex(){return sex;};
char * outname(){return name;};
double outsum()
{
double sum=0;
for(int i=0;i<5;i++)
sum+=this->outgrade(i);
return sum;
}
double outav(){return this->outsum()/5;}
double outgrade(int i){return grade[i];};
void intgrade(int);
};
void stud
5、ent::intgrade(int j)//用于修改学生的成绩
{
switch (j)
{
case 1:
cout<<" 请输入数学成绩:\n";
cin>>grade[0];break;
case 2:
cout<<"请输入英语成绩:\n";
cin>>grade[1];break;
case 3:
cout<<"请输入政治成绩:\n";
cin>>grade[2];break;
case 4:
cout<<"请输入程序设计基础成绩:\n";
cin>>grade[3];break;
case 5:
cout<<"请输入物理成绩:\n";
cin>>
6、grade[4];break;
}
}
void student::s()//用于录入学生的信息
{
cout<<"请输入学号:\n";
cin>>id;
cout<<"请输入姓名:\n";
cin>>name;
cout<<"请输入性别:\n";
cin>>sex;
cout<<"请输入数学成绩:\n";
cin>>grade[0];
cout<<"请输入英语成绩:\n";
cin>>grade[1];
cout<<"请输入政治成绩:\n";
cin>>grade[2];
cout<<"请输入程序设计基础成绩:\n";
cin>>grade[3];
co
7、ut<<"请输入物理成绩:\n";
cin>>grade[4];
}
class list//此类为链表
{
private:
double high[5],low[5];
public:
student *last,*first;//链表的开头和结尾
double totoal;
list(){last=0;first=0;};
~list();
void instu();//新建一个学生的数据
void outstu(char *);//根据姓名输出一个学生的信息
int delstu(char *n);//根据姓名删除一个学生的信息
void outstu1
8、char *);//根据学号输出一个学生的信息
int delstu1(char *n);//根据学号删除一个学生的信息
void outsum(char *);//根据姓名输出一个学生的总成绩和平均成绩
void outsum1(char *);//根据学号输出一个学生的总成绩和平均成绩
void think();//用于输出班级成绩的统计分析
void search(char s[10],int);//根据姓名修改一个学生的成绩
void search1(char s[20],int);//根据学号修改一个学生的成绩
double hi(int i);//求某门课的最高分
9、
double lo(int i);//求某门课的最低分
void av(int i);//求某门课的平均分
void ev(int i);//用于班级成绩统计分析的人数分布输出
void scanall();//输出所有学生的信息
};
list::~list()//析构函数,将所有创建的学生对象删掉
{
if(first!=0)
{
student *p=first,*temp;
while(p!=NULL){
temp=p;
p=p->next;
delete temp;
cout<<"ok\n";
}}}
void list::instu()
{ st
10、udent *p=new student();
p->s();
if(first==0){first=last=p;}else{last->next=p;last=p;}
}
void list:utstu(char *n)
{
if(first==0) {cout<<"班级无成员!查无此人!"<next)
if(strcmp(temp->outname(),n)==0)
{
cout<11、outid()<outname()<outsex()<outgrade(0)<outgrade(1)<outgrade(2)<outgrade(3
12、)<outgrade(4);return;}
cout<<"查无此人!"<next)
if(strcmp(temp->outid(),n)==0)
{
cout<13、w(6)<<"数学"<outid()<outname()<outsex()<outgrade(0)<outgrade(1)<outgrade(2)<outgrade(3)<o
14、utgrade(4);return;}
cout<<"查无此人!"<outname(),n)==0)
{ first=first->next;delete temp;
cout<<"\n删除成功\n";return 0;}
else for(;temp->next!=NULL;temp=temp-
15、>next)
{if(strcmp(temp->next->outname(),n)==0)
{p=temp->next;temp->next=temp->next->next;delete p;
cout<<"\n删除成功\n";return 0;}}
cout<<"\n查无此人,删除失败\n";
return 0;
}
int list::delstu1(char *n)
{
if(first==0) {cout<<"无数据!"<
16、outid(),n)==0)
{ first=first->next;delete temp;
cout<<"\n删除成功\n";return 0;}
else while(temp->next!=NULL)
{if(strcmp(temp->next->outid(),n)==0)
{p=temp->next;temp->next=temp->next->next;delete p;
cout<<"\n删除成功\n";return 0;}
else temp=temp->next;}
cout<<"\n查无此人,删除失败\n";
return 0;
}
void l
17、ist::think()
{
if(first==0) {cout<<"无数据!"<next;
i++;
}
totoal=i;
cout<<"人数:"<18、o(1)<<" "<<"平均分:";
av(1);
ev(1);
cout<<"政治\n";
cout<<"最高分:"<19、
double list::hi(int i)
{
high[i]=0.00;
student *temp=first;
while(temp!=0)
{if(temp->outgrade(i)>high[i])
high[i]=temp->outgrade(i);
temp=temp->next;
}
return high[i];
}
double list::lo(int i)
{
low[i]=100;
student *temp=first;while(temp!=0)
{if(temp->outgrade(i)20、temp->outgrade(i);
temp=temp->next;
}
return low[i];
}
void list::av(int i)
{
double aver=0;
student *temp=first;
while(temp!=NULL)
{
aver+=temp->outgrade(i);
temp=temp->next;
}
cout<21、hile(temp!=0)
{switch((int)temp->outgrade(i)/10)
{
case 10:a++;break;case 9:a++;break;
case 8:b++;break;case 7:c++;break;
case 6:d++;break;case 5:e++;break;
default:f++;
}
temp=temp->next;
}
cout<<"100-90的人数:"<22、下的人数:"<next)
if(strcmp(temp->outname(),s)==0)temp->intgrade(n);
}
void list::search1(char s[20],int n)
{
student *temp=first;for(;temp!=NULL;temp=
23、temp->next)
if(strcmp(temp->outid(),s)==0)temp->intgrade(n);
}
void list::outsum(char *n)
{
if(first==0) {cout<<"无数据!"<next)
if(strcmp(temp->outname(),n)==0)
{
cout<24、
setw(10)<<"平均成绩"<<"\n";
cout<outid()<outname()<outsex()<outsum()<outav();
return;
}
cout<<"查无此人!"<25、"无数据!"<next)
if(strcmp(temp->outid(),n)==0)
{
cout<outid()<outname()<outsex()<26、mp->outsum()<outav();
return;
}
cout<<"查无此人!"<next)
cout<outid()<outname()<outsex()<outgrade(0)<27、p->outgrade(1)
<outgrade(2)<outgrade(3)<outgrade(4)<outsum()<outav()<28、//临时变量
ifstream input;//输入
ofstream output;//输出
char file[20],classname[20],temp[80],id[20],name[9],sex1[10];//临时变量
int m=0,n=0,j=0,i=0;//临时变量
double grade1[5];//临时变量
for(i=0;i<20;i++) id[i]=0;
for(i=0;i<9;i++) name[i]=0;//初始化
do{
cout<<"//---------------------------------------------------
29、\\\n"
<< " 0、 退出系统。\n"
<< " 1、 成绩录入:\n"
<< " 2、 成绩查询:\n"
<< " 3、 成绩修改:\n"
<< " 4、 数据删除:\n"
<< " 5、 成绩统计分析:\n"
<< " 各个分数段的人数(100-90、89-80、79-70、69-60、59-50、50以下)、及格率。\n"
<< " 6、 总成绩和平均成绩的查询:\n"
<< " 7、 浏览所有学生信息。\n"
<< " 8、 将所有学生信息保存成文件。\n"
<< " 9、 打开指定的数据文件。\n"
<< " 10、 按总成绩排序输出学生信
30、息。\n"
<< " 11、 按学号顺序输出学生信息,保存成文件。\n"
<< "//----------------------------------------------------------\\\n";
cout<>m;
switch(m)
{
case 1:
will.instu();
break;
case 2:
cout<<"1.根据学号查询 2.根据姓名查询"<>n;
switch(n){
case 1:
cout<<"请输入学号\n";
cin>>id;
w
31、ill.outstu1(id);
cout<<"\n";break;
case 2:
cout<<"请输入姓名\n";
cin>>name;
will.outstu(name);
cout<<"\n";break;}break;
case 3:
cout<<"1.根据学号查询 2.根据姓名查询"<>n;
switch(n){
case 1:
cout<<"请输入学号\n";
cin>>id;
will.outstu1(id);
cout<<"\n";
cout<32、英语"<>j;
will.search1(id,j);break;
case 2:
cout<<"请输入姓名\n";
cin>>name;
will.outstu(name);
cout<<"\n";
cout<33、"<>j;
will.search(name,j);break;}break;
case 4:
cout<<"1.根据学号删除 2.根据姓名删除"<>n;
switch(n){
case 1:
cout<<"请输入学号\n";
cin>>id;
will.outstu1(id);
will.delstu1(id);break;
case 2:
cout<<"请输入姓名\n";
cin>>name;
will.outstu(name);
will.delstu(n
34、ame);break;}break;
case 5:
will.think();
break;
case 6:
cout<<"1.根据学号查询 2.根据姓名查询"<>n;
switch(n){
case 1:
cout<<"请输入学号\n";
cin>>id;
will.outsum1(id);break;
case 2:
cout<<"请输入姓名\n";
cin>>name;
will.outsum(name);break;}break;
case 7:
cout<35、setw(8)<<"姓名"<>file;
cout<<"请输入班级名称:"<>classname;
output.open(file);
p = will.
36、first;
output<next)
output<outid()<outname()<37、p->outsex()<outgrade(0)<outgrade(1)
<outgrade(2)<outgrade(3)<outgrade(4)<outsum()<outav()<>file;
input.open(file);
if (input.fail())
38、
{
cout<<"File does not exist"<>id>>name>>sex1>>grade1[0]>>grade1[1]>>grade1[2]>>
grade1[3]>>grade1[4];
input>>temp;
input>>temp;//将总成绩和平均成绩输入进临时变量
p1->setid(id);
p1->se
39、tname(name);
p1->setsex(sex1);
p1->setgrade(grade1);
will.first=p1;
will.last=will.first;
while(!input.eof())
{
p=new student();
q=will.last;
will.last->next=p;
will.last=p;
input>>id>>name>>sex1>>grade1[0]>>grade1[1]>>grade1[2]>>
grade1[3]>>grade1[4];
will.last->setid(id);
will.last
40、>setname(name);
will.last->setsex(sex1);
will.last->setgrade(grade1);
input>>temp;
input>>temp;//将总成绩和平均成绩输入进临时变量
}
will.last=q;
will.last->next=NULL;
input.close();break;
case 10:
p=will.first;
for(i=0;i<20&&p!=NULL;i++,p=p->next)
{
for (j=0;j<20;j++)
{
stu[i].id[j]=p->id[j];
}
fo
41、r (j=0;j<10;j++)
{
stu[i].name[j]=p->name[j];
}
for (j=0;j<10;j++)
{
stu[i].sex[j]=p->sex[j];
}
stu[i].sumsum=p->outsum();
stu[i].average=p->outav();
}
for(n=0;n42、t<
43、next)
{
for (j=0;j<20;j++)
{
stu[i].id[j]=p->id[j];
}
for (j=0;j<10;j++)
{
stu[i].name[j]=p->name[j];
}
for (j=0;j<10;j++)
{
stu[i].sex[j]=p->sex[j];
}
stu[i].sumsum=p->outsum();
stu[i].average=p->outav();
for(j=0;j<5;j++)
stu[i].grade[j]=p->grade[j];
}
for(n=0;n44、jstu[j].id)
{
stutemp=stu[j];
stu[j]=stu[n];
stu[n]=stutemp;
}
}
cout<45、setw(8)<46、in>>m;
if (m==1)
{
cout<<"请输入文件名:"<>file;
cout<<"请输入班级名称:"<>classname;
output.open(file);
output<47、etw(10)<<"平均成绩"<>m;
}while(m==1);
}