C语言链表嵌套链表学生成绩管理系统

  • 一阶段考核标准:用C语言链表嵌套链表学生成绩管理系统

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

#include <stdio.h>
#include <stdlib.h>

struct Student
{
	char name[128];
	int chinese;
	int math;
	int english;
	int sum;
	float average;
	struct Student *next;
};

struct Class
{
	struct Student *stu;
	struct Class *next;
};

struct Student* insertFromStudentNode(struct Student *head, struct Student *new)
{
	struct Student *p = head;
	
	if(p == NULL){
		head = new;
		return head;
	}
	while(p->next != NULL){
		p = p->next;
	}
	p->next = new;
	
	return head;
}

struct Class* insertFromClassNode(struct Class *head, struct Class *new)
{
	struct Class *p = head;
	
	if(head == NULL){
		head = new;
		return head;
	}
	while(p->next != NULL){
		p = p->next;
	}
	p->next = new;
	
	return head;
}

struct Student* creatStudentNode(struct Student *head)
{
	int i;
	struct Student *new = NULL;
	
	for(i=1; i<3; i++){
		new = (struct Student *)malloc(sizeof(struct Student));
		
		printf("请输入第%d个学生的名字和语文、数学、英语、成绩:\n",i);
		scanf("%s%d%d%d",new->name,&(new->chinese),&(new->math),&(new->english));
		new->sum = (new->chinese) + (new->math) + (new->english);
		new->average = (float)(new->sum)/3;
		new->next = NULL;
		head = insertFromStudentNode(head,new);
	}
	return head;
}

struct Class* creatClassNode(struct Class *head)
{
	int i;	
	struct Class *new = NULL;
	
	for(i=1; i<3; i++){
		struct Student *p = NULL;
		new = (struct Class *)malloc(sizeof(struct Class));
		
		printf("请输入第%d个班级的学生信息:\n",i);
		p = creatStudentNode(p);
		new->stu = p;
		new->next = NULL;
		head = insertFromClassNode(head,new);
	}
	return head;
}

void printStudentNode(struct Class *head)
{
	int i;
	int j;
	struct Student *p1 = NULL;
	struct Class *p2 = head;
	
	for(i=1; i<3; i++){
		p1 = p2->stu;
		printf("第%d个班级的学生成绩如下:\n",i);
		printf("--------------------------------------------------------------\n");
		printf("成绩统计\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
		printf("--------------------------------------------------------------\n");
		for(j=1; j<3; j++){
			printf("第%d个学生的成绩:",j);
			printf("%s\t%d\t%d\t%d\t%d\t%.2f\n",p1->name,p1->chinese,p1->math,p1->english,p1->sum,p1->average);
			p1 = p1->next;
		}
		p2 = p2->next;
		putchar('\n');
	}
}

void getStuSumMaxMin(struct Class *head, int *psumMax, int *psumMin)
{
	int i;
	int j;
	struct Student *p1 = NULL;
	struct Class *p2 = head;
	
	*psumMax = head->stu->sum;
	*psumMin = head->stu->sum;
	for(i=1; i<3; i++){
		p1 = p2->stu;
		for(j=1; j<3; j++){
			if(*psumMax < p1->sum){
				*psumMax = p1->sum;
			}
			if(*psumMin > p1->sum){
				*psumMin = p1->sum;
			}
			p1 = p1->next;
		}
		p2 = p2->next;
	}
}

void getClassAverage(struct Class *head, float *pclassAve)
{
	int i;
	int j;
	float total = 0.0;
	struct Student *p1 = NULL;
	struct Class *p2 = head;
	
	for(i=1; i<3; i++){
		p1 = p2->stu;
		for(j=1; j<3; j++){
			total = total + (p1->sum);
			p1 = p1->next;
		}
		p2 = p2->next;
	}
	*pclassAve = total/4;
}

int main()
{
	struct Class *head = NULL;
	int sumMax = 0;
	int sumMin = 0;
	float classAverage = 0.0;
	
	head = creatClassNode(head);
	printStudentNode(head);
	
	getStuSumMaxMin(head,&sumMax,&sumMin);
	getClassAverage(head,&classAverage);
	
	printf("所有班级的学生中最高分是:%d\n",sumMax);
	printf("所有班级的学生中最低分是:%d\n",sumMin);
	printf("所有班级的学生中平均分是:%.2f\n",classAverage);
	return 0;
}
/*
E:\02_老陈VIP\03_code\01_一阶段C语言\一阶段C语言考核题>gcc demo_class_student.c

E:\02_老陈VIP\03_code\01_一阶段C语言\一阶段C语言考核题>a.exe
请输入第1个班级的学生信息:
请输入第1个学生的名字和语文、数学、英语、成绩:
aa
11
22
33
请输入第2个学生的名字和语文、数学、英语、成绩:
bb
44
55
66
请输入第2个班级的学生信息:
请输入第1个学生的名字和语文、数学、英语、成绩:
cc
77
88
99
请输入第2个学生的名字和语文、数学、英语、成绩:
dd
14
25
36
第1个班级的学生成绩如下:
--------------------------------------------------------------
成绩统计        姓名    语文    数学    英语    总分    平均分
--------------------------------------------------------------
第1个学生的成绩:aa     11      22      33      66      22.00
第2个学生的成绩:bb     44      55      66      165     55.00

第2个班级的学生成绩如下:
--------------------------------------------------------------
成绩统计        姓名    语文    数学    英语    总分    平均分
--------------------------------------------------------------
第1个学生的成绩:cc     77      88      99      264     88.00
第2个学生的成绩:dd     14      25      36      75      25.00

所有班级的学生中最高分是:264
所有班级的学生中最低分是:66
所有班级的学生中平均分是:142.50
*/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值