m0_55657093
2021-06-17 21:33
采纳率: 75%
浏览 12

学生成绩文件管理的程序

1.定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩

2.从键盘输入10个学生的以上内容,存入文件stud.txt,关闭文件

3.打开stud.txt文件,将数据读出,查看是否正确写入,关闭文件。

4.打开文件stud.txt文件,读出数据,将10个学生按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件studsort.txt中。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • qfl_sdu 2021-06-17 22:06
    已采纳

    代码如下,如有帮助,请采纳一下,谢谢。

    #include <stdio.h>
    struct Student
    {
    	int nmb;
    	char name[20];
    	int score[3];
    };
    //录入数据
    void inputinfo(struct Student a[])
    {
    	int i;
    	printf("输入10个学生的学号,姓名,三门课的成绩:\n");
    	for (i = 0;i< 10;i++)
    	{
    		scanf("%d %s %d %d %d",&a[i].nmb,a[i].name,&a[i].score[0],&a[i].score[1],&a[i].score[2]);
    	}
    }
    //写文件
    void Write2File(const char* file,struct Student a[],int n)
    {
    	FILE* fp;
    	int i;
    	if (!(fp = fopen(file,"w")))
    	{
    		printf("文件打开失败");
    		return ;
    	}
    	for (i = 0;i< n;i++)
    	{
    		fprintf(fp,"%d\t%s\t%d\t%d\t%d\n",a[i].nmb,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2]);
    	}
    	fclose(fp);
    }
    
    
    //读文件
    void ReadFile(const char* file,struct Student a[],int *n)
    {
    	FILE* fp;
    	int i = 0,res =-1;
    	if (!(fp = fopen(file,"r")))
    	{
    		printf("文件打开失败");
    		return ;
    	}
    	while(!feof(fp))
    	{
    		res = fscanf(fp,"%d\t%s\t%d\t%d\t%d\n",&a[i].nmb,a[i].name,&a[i].score[0],&a[i].score[1],&a[i].score[2]);
    		if(res > 0)
    			i++;
    	}
    	fclose(fp);
    	*n = i;
    }
    //按平均分从高到低排序
    void Sort(struct Student a[],int n)
    {
    	int i,j;
    	float avg1,avg2;
    	struct Student tmp;
    	for (i = 0;i< n-1;i++)
    	{
    		for (j = 0;j< n-1-i;j++)
    		{
    			avg1 = (a[j].score[0] + a[j].score[1]+a[j].score[2])/3.0;
    			avg2 = (a[j+1].score[0] + a[j+1].score[1]+a[j+1].score[2])/3.0;
    			if(avg1 < avg2)
    			{
    				tmp = a[j];
    				a[j] = a[j+1];
    				a[j+1] = tmp;
    			}
    		}
    	}
    	printf("number	name	math	Chinese	English	average\n");
    	for (i = 0;i<10;i++)
    	{
    		avg1 = (a[i].score[0] + a[i].score[1]+a[i].score[2])/3.0;
    		printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",a[i].nmb,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2],avg1);
    	}
    }
    
    int main()
    {
    	struct Student a[10];
    	struct Student b[10];
    	int nmb = 0;
    	inputinfo(a);
    	Write2File("stud.txt",a,10);
    	//
    	ReadFile("stud.txt",b,&nmb);
    	printf("nmb=%d\n",nmb);
    	Sort(b,nmb);
    	Write2File("studsort.txt",b,nmb);
    	return 0;
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题