文件数据读写(成绩管理)

1)5个学生,每个学生有3门课成绩,输入学生数据(学号,姓名,3门课程成绩)。计算出平均成绩,并按平均成绩排序,排序后的数据(包括平均成绩)存入文件student.dat中。然后从文件中读取数据并输出。

要求:分别用fprintf/fscanffwrite/fread函数实现文件数据读写。

注意fwrite/fread是以二进制形式操作的,因此直接用文本编辑器打开fwrite产生的文件可能会出现乱码

 fprintf/fscanf

#include<stdio.h>
#define N 3
struct student
{
    char sNo[12];
    char sName[20];
    float scores[3];
    double average;
};

int main()
{
	int i,j,idx;
	struct student stu[N],stu2[N];
	struct student temp;
	printf("Please enter No,Name,3 scores:");
	//输入并计算平均值 
	for(i=0;i<N;i++)
	{
		scanf("%s %s %f %f %f",&stu[i].sNo,&stu[i].sName,&stu[i].scores[0],&stu[i].scores[1],&stu[i].scores[2]);
		stu[i].average=(stu[i].scores[0]+stu[i].scores[1]+stu[i].scores[2])/3.0;
	}
	//排序
	for(i=0;i<N;i++) 
	{
		for(j=i;j<N;j++)
		{
			idx=j;
			if(stu[j].average>stu[idx].average)idx=j;
		}
		temp=stu[idx];
		stu[idx]=stu[i];
		stu[i]=temp;
	} 
	//打开文件 
	FILE *fp; 
	if(NULL==(fp=fopen("student.txt","w+")))
	{
		printf("Error open!");
		exit(0);
	}
	//存入数据 
	for(i=0;i<N;i++)
	{
		fprintf(fp,"%s %s %f %f %f %lf\n",stu[i].sNo,stu[i].sName,stu[i].scores[0],stu[i].scores[1],stu[i].scores[2],stu[i].average);
	}
	//读取数据 
	rewind(fp);
	for(i=0;i<N;i++)
	{
		fscanf(fp,"%s %s %f %f %f %lf",stu2[i].sNo,stu2[i].sName,&stu2[i].scores[0],&stu2[i].scores[1],&stu2[i].scores[2],&stu2[i].average);
	}
	//输出数据
	for(i=0;i<N;i++) 
	{
		printf("%s %s %f %f %f %lf\n",stu2[i].sNo,stu2[i].sName,stu2[i].scores[0],stu2[i].scores[1],stu2[i].scores[2],stu2[i].average);
	} 
	return 0;
}

 fwrite/fread

#include<stdio.h>
#define N 3
struct student
{
    char sNo[12];
    char sName[20];
    float scores[3];
    double average;
}stu[N];

int main()
{
	struct student stu[N],stu2[N];
	struct student temp;
	struct student *pa=stu,*pb=stu2,*max;
	printf("Please enter No,Name,3 scores:");
	//输入并计算平均值 
	for(;pa<stu+N;pa++)
	{
		scanf("%s %s %f %f %f",pa->sNo,pa->sName,&pa->scores[0],&pa->scores[1],&pa->scores[2]);
		pa->average=(pa->scores[0]+pa->scores[1]+pa->scores[2])/3.0;
	}
	//排序
	for(pa=stu;pa<stu+N;pa++) 
	{
		for(pb=pa;pb<stu+N;pb++)
		{
			max=pb;
			if(pb->average>max->average)max=pb;
		}
		temp=*max;
		*max=*pa;
		*pa=temp;
	} 
	//打开文件 
	FILE *fp; 
	if(NULL==(fp=fopen("student.txt","w+")))
	{
		printf("Error open!");
		exit(0);
	}
	//存入数据 
	pa=stu;
	fwrite(pa,sizeof(struct student),N,fp);
	//读取数据 
	rewind(fp);
	pb=stu2;
	fread(pb,sizeof(struct student),N,fp);
	//输出数据
	for(pb=stu2;pb<stu2+N;pb++) 
	{
		printf("%s %s %f %f %f %lf\n",pb->sNo,pb->sName,pb->scores[0],pb->scores[1],pb->scores[2],pb->average);
	} 
	return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值