欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题。
(1) 输入学生的基本信息,计算每个学生的平均分,并将学生信息存入磁盘文件“stud”中;
(2) 将文件stud中的数据按平均分从高到低的顺序进行排序,并将排序结果存放到文件“stud_sort”中;
(3) 输入一个学生的基本信息,将该信息存入文件“stud_sort”中,使插入数据后仍按平均分排序,并保存在原文件“stud_sort”中;
(4) 输入一个学生的学号,在文件“stud_sort”中,将该生删除,其结果仍保存在原文件“stud_sort”中。
#include<stdio.h>
#include<stdlib.h>
#define N 3
typedef struct student{
int num;
char name[20];
float score[3];
float aver;
}S;
void input(S *pw){
int i,j;
FILE *fp;
if((fp=fopen("stud.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++){
scanf("%d%s",&(pw->num),pw->name);
pw->aver=0;
for(j=0;j<3;j++){
scanf("%f",&(pw->score[j]));
pw->aver+=pw->score[j];
}
pw->aver/=3;
fwrite(pw,sizeof(S),1,fp);
}
fclose(fp);
}
void sort(){
int i,j,k;
S t;
FILE *fp,*fp1;
S stu[N];
if((fp=fopen("stud.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
for (k=0;k<N-1;k++){
for (j=0;j<N-k-1;j++){
if (stu[j].aver<stu[j+1].aver){
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
}//加个排序
if((fp1=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(S),1,fp1);
fclose(fp);
fclose(fp1);
}
void insert_rec(S st){
int i;
FILE *fp;
S stu[N+1];
if((fp=fopen("stud_sort.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
for(i=N;i>=0&&stu[i].aver<st.aver;i--)
stu[i+1]=stu[i];
stu[i+1]=st;
fclose(fp);
if((fp=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N+1;i++)
fwrite(&stu[i],sizeof(S),1,fp);
fclose(fp);
}
void delete_rec(int number){
int i,j;
FILE *fp;
S stu[N+1];
if((fp=fopen("stud_sort.dat","rb"))==NULL){
printf("can not open file.\n");
exit(0);
}
i=0;
while(!feof(fp)){
fread(&stu[i],sizeof(S),1,fp);
i++;
}
fclose(fp);
for(i=0;i<N;i++){
if(stu[i].num==number)
break;
for(j=i+1;j<N+1;j++)
stu[j-1]=stu[j];
}
if((fp=fopen("stud_sort.dat","wb"))==NULL){
printf("can not open file.\n");
exit(0);
}
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(S),1,fp);
}
int main(){
S a[N];
S st;
int i,j,k;
int number;
printf("请输入%d个学生的信息:\n",N);
printf("学号 姓名 三门课成绩\n");
for(i=0;i<N;i++){
scanf("%d%s",&a[i].num,&a[i].name);
for(j=0;j<3;j++){
scanf("%f",&a[i].score[j]);
}
}
input(a);
sort();
printf("再输入一个学生的信息:\n");
scanf("%d%s",&st.num,st.name);
for(k=0;k<3;k++){
scanf("%f",&st.score[k]);
}
insert_rec(st);
printf("输入要删除学生的学号:");
scanf("%d",&number);
delete_rec(number);
return 0;
}