学生分数系统

1从键盘或文件读入20位学生三门课的成绩(每名学生成绩信息均包括姓名,学号,分数)。

②编写查询函数,实现输入学生学号,输出该学生三门课的成绩的功能。

③编写排序函数,采用冒泡法,将学生总成绩成绩按照从高到低进行排序,排序由排序函数实现,在主函数中调用实现排序,并在主函数中输出排序后的成绩单(要求用指针实现参数传递)。

④编写插入函数,实现再输入一个学生三门课的成绩,将此学生总成绩按照排序规律插入原学生成绩数组。

⑤将排好序的成绩单进行反序存放,即原来是总成绩从高到低,现在改为从低到高排列。

#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<malloc.h>
struct a
{
int num;
char name[20];
int yingyu;
int tiyu;
int zhian;
int sum;}a[21];
void Input(struct a* arr);
void Input(struct a* arr)
{
	printf("请输入新的成绩:\n");
	scanf("%d %s %d %d %d",&a[21].num,&a[21].name,&a[21].yingyu,&a[21].tiyu,&a[21].zhian);
	a[21].sum=a[21].yingyu+a[21].tiyu+a[21].zhian;
	for (int i = 0; i <20; i++)
	{
		if (a[21].sum<=a[i].sum&&a[21].sum>a[i+1].sum)
		{
			struct a tmp = a[21];
			for (int j = 20; j>=i+1; j--) a[j+1]=a[j];
			a[i+1]=tmp;break;
		}
	}
	for(int i=0;i<21;i++)
{
	printf("%d %s %.2d %.2d %.2d",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian);
	printf("\n");
}
}
void sorth(struct a* arr);
void sorth(struct a* arr)
{
    for (int i = 0; i <20; i++)
    {
        for (int j = 0; j + 1 < 20 - i; j++)
        {
            if (a[j].sum > a[j + 1].sum)
            {
                struct a tmp = a[j];
                               a[j] = a[j + 1];
                               a[j + 1] = tmp;
            }

        }
    }
}
void write(struct a* arr);
void write(struct a* arr)
{
FILE *fp;
fp=fopen("write.txt", "wt+");    //打开文件
for (int i = 0; i<20; i++)            //将N条信息存储进去
{
	fprintf(fp,"%d %s %.2d %.2d %.2d\n",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian);
}
 
fclose(fp);    //关闭文件
}
void sortl(struct a* arr);
void sortl(struct a* arr)
{
    for (int i = 0; i <20; i++)
    {
        for (int j = 0; j + 1 < 20 - i; j++)
        {
            if (a[j].sum < a[j + 1].sum)
            {
                struct a tmp = a[j];
                               a[j] = a[j + 1];
                               a[j + 1] = tmp;
            }

        }
    }
}
int chaxun(int num);
int chaxun(int num)
			{
				int i,f=0;
				for(i=0;i<20;i++)
			{
			 	if (num==a[i].num)
				{
				printf("%d %s %.2d %.2d %.2d",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian);
				f=1;
				break;
				}
			}
				if (f==0) printf("没找到捏"); 
			}
int main()
{
int i,j;
FILE* fp=fopen("实验五.txt","r");
if(fp==NULL)
	{
printf("无文件");
return -1;
	}
for(i=0;i<20;i++)
{
	fscanf(fp,"%d %s %d %d %d %d",&a[i].num,&a[i].name,&a[i].yingyu,&a[i].tiyu,&a[i].zhian,&a[i].sum);
}
fclose(fp);
for(i=0;i<20;i++)
{
	printf("%d %s %.2d %.2d %.2d %.2d",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian,&a[i].sum);
	printf("\n");
}
int cmd;
	printf("请输入:\n1:学号查询成绩\n2:排序\n3:顺序插入\n4:反序排列\n");
	scanf("%d",&cmd);
	switch(cmd)
	{
		case 1:
			int num;
			printf("请输入学号:\n");
			scanf("%d",&num); 
			chaxun(num);
			break;
		case 2:
			for(i=0;i<20;i++) a[i].sum=a[i].yingyu+a[i].tiyu+a[i].zhian;
			sortl(a);
			for(i=0;i<20;i++)
{
	printf("%d %s %.2d %.2d %.2d",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian);
	printf("\n");
}
			break;
		case 3:
			for(i=0;i<20;i++) a[i].sum=a[i].yingyu+a[i].tiyu+a[i].zhian;
			sortl(a);
			Input(a);
			break;
		case 4:
			for(i=0;i<20;i++) a[i].sum=a[i].yingyu+a[i].tiyu+a[i].zhian;
			sorth(a);
			write(a);
			break;
	}
return 0;
}

第一篇博客,c语言初学者,难免有bug

txt这么写

2307001 张一 92 94 95 0
2307002 张二 65 68 97 0
2307003 张三 88 54 76 0
2307004 张四 66 54 33 0
2307005 张五 55 99 100 0
2307006 张六 60 61 59 0
2307007 张七 58 77 99 0
2307008 张八 99 97 98 0
2307009 张九 100 100 100 0
2307010 张十 88 84 83 0
2307011 李一 88 77 63 0
2307012 李二 81 79 70 0
2307013 李三 72 85 97 0
2307014 李四 92 65 88 0
2307015 李五 68 54 61 0
2307016 李六 88 84 83 0
2307017 李七 66 69 87 0
2307018 李八 88 88 81 0
2307019 李九 72 65 61 0
2307020 李十 64 83 75 0 //0是总分的初始化 要想名字不乱码,txt要用ANSI字符编码

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值