第1个回答 2013-09-07
#include<iostream>
#include<string>
using namespace std;
int n=20;
class student
{
long int num;//学号
char name[20];//姓名
int grade;
public:
student(){}
student(long nu,char na[],int gr){num=nu;strcpy(name,na);grade=gr;}
void put_student(long nu,char na[],int Chinese,int math,int English){num=nu;strcpy(name,na);grade=Chinese+math+English;}
int get_grade(){return grade; }
void get_student(){cout<<num<<" "<<name<<" "<<grade<<" "<<endl;}
long int get_num(){return num;}
char* get_name(){return name;}
student::operator=(class student a){num=a.num;strcpy(name,a.name);grade=a.grade;}
};
void taxis(class student a[]) //按总成绩由大到小排序
{
class student b;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(a[i].get_grade()<a[j].get_grade())
{
b=a[i];
a[i]=a[j];
a[j]=b;
}
}
void insert(class student a[]) //将一个新学生总成绩插入已排好序数组中
{
long int num;//学号
char name[20];//姓名
int grade;
cout<<"请输入学号,姓名,总分,";
cin>>num>>name>>grade;
class student c(num,name,grade);
for(int i=0;i<n;i++)
{
if(a[i].get_grade()<c.get_grade())
break;
}
n++;
for(int j=n;j>i;j--)
a[j]=a[j-1];
a[j]=c;
}
void del(class student a[]) //将不及格学生记录删除
{
int j=0;
for(int i=0;i<n;i++)
if(a[i].get_grade()>=(60*3))
a[j++]=a[i];
n=j;
}
void save(class student a[]) //排序的结果用文件形式存放磁盘
{
FILE *fp;
if((fp=fopen("save_student.dat","w"))==NULL)
{cout<<"ERROR"<<endl;exit(0);}
for(int i=0;i<n;i++)
{
fprintf(fp,"%-10d%-10s%-5d\n",a[i].get_num(),a[i].get_name(),a[i].get_grade());
}
if(fp!=NULL)
fclose(fp);
}
void main(void)
{
long int num;//学号
char name[20];//姓名
int Chinese,math,English;//3门课成绩
FILE *fp;
class student a[30];
if((fp=fopen("student.dat","r"))==NULL)
{cout<<"ERROR"<<endl;exit(0);}
for(int i=0;i<n;i++)
{
fscanf(fp,"%d%s%d%d%d",&num,&name,&Chinese,&math,&English);
a[i].put_student(num,name,Chinese,math,English);
}
taxis(a);
for(i=0;i<n;i++)
a[i].get_student();
insert(a);
for(i=0;i<n;i++)
a[i].get_student();
cout<<"del(a)"<<endl;
del(a);
for(i=0;i<n;i++)
a[i].get_student();
save(a);
if(fp!=NULL)
fclose(fp);;
}
B.按总成绩由大到小排序(同组采用不同排序方法)
同组 是什么意思..
==
student.dat格式
学号 姓名 3门课成绩
1 Adaam 8 90 50