学生成绩管理--c语言实现

c语言练手–学生成绩管理

链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。
场景:一个年级,相当链表A
该年级5个班,每个班5个人,相当于链表B1–B5
做一个学生成绩管理系统
学生成绩有语文 数学 英语
功能: 录入成绩 找最三科总分的最高分 最低分 算出平均分。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define  N 5//班级数,学生人数

typedef struct Student{
	char *name;
	float chinese;
	float math;
	float english;
	float sum;
	float ave;
	struct Student *next;
}RNode,*Stu;

typedef struct Class{
     char *name;
     struct Class *next;
     struct Student *back; 
}LNode,*LinkList;

LinkList Creat_class(void);
Stu Creat_stu(void);
float Find_max(LinkList A,float max);
float Find_min(LinkList A,float min);
void print_stu(LinkList A);

int main()
{
    LinkList A;
	Stu B;
	int i;
    float max,min;
    A=Creat_class();
	B=A->next->back;
	max=min=B->sum;

	print_stu(A);
    max=Find_max(A,max);
    printf("最高分:%f\n",max);
    min=Find_min(A,min);
    printf("最低分:%f\n",min);
    
    system("pause");
    return 0;
}

Stu Creat_stu()
{
	Stu H = (Stu)malloc(sizeof(RNode));
	H->next=NULL;
	RNode *s,*r=H;
	char *x;
	x=(char *)malloc(128);
	float c,m,e;
	for(int i=0;i<N;i++)
	{
		s=(Stu)malloc(sizeof(LNode));
		s->name=(char *)malloc(128);
		printf("\n输入第%d个学生名字:",i+1); 
		scanf("%s",&x);
		printf("输入语文成绩:"); 
		scanf("%f",&c);
		printf("输入数学成绩:"); 
		scanf("%f",&m);
		printf("输入英语成绩:"); 
		scanf("%f",&e);
		s->name=x;
		s->chinese=c;
		s->math=m;
		s->english=e;
		s->sum=c+e+m;
		s->ave=(s->sum)/3;
		r->next=s;
		r=s;
	}
	r->next=NULL;
	return H;
}

LinkList Creat_class()
{
	LinkList H = (LinkList)malloc(sizeof(LNode));
	LNode *s,*r=H;
	char *x;
	x=(char *)malloc(128);
	for(int i=0;i<N;i++)
	{
		s=(LinkList)malloc(sizeof(LNode));
		s->name=(char *)malloc(128);
		printf("输入第%d个班级名称:",i+1); 
		scanf("%s",&x);
		s->name=x;
		r->next=s;
		RNode *B = Creat_stu();
		s->back=B->next;
		r=s;
		printf("\n");
	}
	r->next=NULL;
	return H;
}

float Find_max(LinkList A,float max)
{
    LNode *r=A;
    RNode *p;
    p=(Stu)malloc(sizeof(RNode));
	float m=max;
	for(int i=0;i<N;i++)
    {
		r=r->next;
		p=r->back;
        for(int j=0;j<N;j++)
        {	
            if(m<p->sum)
			{
				m=p->sum;
			}
			p=p->next;
		}
		
    }
    return m;
}

float Find_min(LinkList A,float min)
{
    LNode *r=A;
    RNode *p;
    p=(Stu)malloc(sizeof(RNode));
	float m=min;
    for(int i=0;i<N;i++)
    {
		r=r->next;
		p=r->back;
        for(int j=0;j<N;j++)
        {	
            if(m>p->sum)
			{
				m=p->sum;
			}	
			p=p->next;
		}
				
    }
    return m;
}

void print_stu(LinkList A)
{
    LNode *r=A;
    RNode *p;
    p=(Stu)malloc(sizeof(RNode));
    for(int i=0;i<N;i++)
    {
		r=r->next;
        p=r->back;
		printf("%s班学生:\n",&r->name);
        for(int j=0;j<N;j++)
        {
			printf("%s\t",&p->name);
			printf("语文:%f\t",p->chinese);
			printf("数学:%f\t",p->math);
			printf("英语:%f\t",p->english);
			printf("总分:%f\t",p->sum);
			printf("平均分:%f\t",p->ave);
			printf("\n");
			p=p->next;
        }
    }
	printf("\n");
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值