c语言成绩管理系统(链表)

C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,修改,查询,计算平均成绩和展示。
开发语言:C语言
开发工具:Dev c++
开发者:呵呵up

  1. 创建学生成绩信息

在这里插入图片描述
2. 插入学生信息
在这里插入图片描述
3. 删除学生成绩信息
在这里插入图片描述
4. 显示学生成绩信息
在这里插入图片描述
5. 修改学生信息
在这里插入图片描述
6. 查询学生成绩信息
在这里插入图片描述
7. 计算平均成绩信息
在这里插入图片描述
8. 退出程序
在这里插入图片描述
代码如下:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct stu
{
 	int num;
 	char name[10];
 	float score;
}STU;
typedef struct node
{
 	STU data;
 	struct node *next;
}Node;
Node *listcreate(Node *head,int people)      //创建链表,创建学生信息 
{
 	int i;
 	Node *p=NULL,*q=NULL;
 	p=head;
 	for(i=1;i<=people;i++){
 		printf("\n请输入第%d个学生的信息:\n",i);
 		q=(Node *)malloc(sizeof(Node));
 		printf("请输入学生信息:\n");
 		printf("学号:");
 		scanf("%d",&q->data.num);
 		printf("姓名:");
 		scanf("%s",q->data.name);
 		printf("成绩:");
 		scanf("%f",&q->data.score);
 		q->next=NULL;
 		p->next=q;
 		p=q;
 	}
	p->next=NULL;
	return head;
}
Node *listinsert(Node *head,int i)		//插入学生信息 
{
 	int j=-1;
 	Node *p=head,*q;
 	q=(Node *)malloc(sizeof(Node));
	q->next=NULL;
 	printf("请输入学生信息:\n");
 	printf("学号:");
 	scanf("%d",&q->data.num);
 	printf("姓名:");
 	scanf("%s",q->data.name);
 	printf("成绩:");
 	scanf("%f",&q->data.score);
 	while(p!=NULL)
	{
 		j++;
 		if(j==i-1){
 		break;
 		}
 	p=p->next;
 	}
	q->next=p->next;
	p->next=q;
	return head;
}
Node *listreplace(Node *head,int i)    //根据学号修改学生成绩 
{
	Node *p=head->next;
	while(p!=NULL){
		if(p->data.num==i){
			printf("请输入修改后的学生信息:\n");
			printf("请输入学号:");
			scanf("%d",&p->data.num);
			printf("请输入姓名:");
			scanf("%s",p->data.name);
			printf("请输入成绩:");
			scanf("%f",&p->data.score);
		}
		p=p->next;	
	}
	return head;
}
Node *listseek(Node *head,int i)     //根据学号查询某个学生信息 
{
	Node *p=head->next;
	while(p!=NULL){
		if(p->data.num==i){
			printf("查询成功\n");
			printf("学号为%d的学生信息如下:\n",p->data.num);
			printf("学号为:%d\n",p->data.num);
			printf("姓名为:%s\n",p->data.name);
			printf("成绩为:%.2f\n",p->data.score);
		}
		p=p->next;
	} 
	return head;
}
Node *listaverage(Node *head)	//计算学生的平均成绩信息 
{
	int i;
	float sum=0,ave;
	Node *p;
	p=head->next;
	for(i=0;p!=NULL;i++)
	{
		sum+=p->data.score;	
		p=p->next;
	}
	ave=sum/i;
	printf("学生的平均成绩信息为:%.2f\n",ave);
	return head;
}
Node *listdelete(Node *head,int i)	//删除学生信息 
{
 	int j=-1;
 	Node *p=head,*q;
	q=(Node *)malloc(sizeof(Node));
 	q->next=NULL;
 	while(p!=NULL){
 	  j++;
 	  if(j==i-1){
      break;
 	  }
 	  p=p->next; 
 	}
	q=p->next;
	p->next=q->next;
	free(q);
	return head;
}
Node *listplay(Node *head)	//显示学生信息 
{
 		Node *p;
 		p=head->next;
 		printf("班级学生信息如下:\n");
 		printf("      学号      姓名      成绩\n");
 		while(p!=NULL){
 		printf("%10d%10s%10.2f\n",p->data.num,p->data.name,p->data.score);
 		p=p->next;
 		}
}
void showmenu()			//界面菜单函数 
{
 		printf("******欢迎使用学生成绩管理系统******\n");
 		printf("\t1,创建学生信息\n");
 		printf("\t2,插入学生信息\n");
 		printf("\t3,删除学生信息\n");
 		printf("\t4,显示学生信息\n");
 		printf("\t5,修改学生信息\n");
 		printf("\t6,查询学生信息\n");
 		printf("\t7,计算平均成绩信息\n"); 
 		printf("\t8,退出程序\n");
}
void main()				//主函数 
{
 		Node *head=NULL;
 		int i,stu,pos;
 		head=(Node *)malloc(sizeof(Node));
 		head->next=NULL;
 		while(1)
 		{
 			showmenu();
 			printf(" 请输入你的选择:");
 			scanf("%d",&i);
 			switch(i)
 			{
 					case 1: printf("请输入班级学生人数:");
 							scanf("%d",&stu);
 							head=listcreate(head,stu);
 							system("cls");
 					     	showmenu();
 							listplay(head);
 					     	printf("班级初始化已完成,按任意键继续。。。");
 							getch();
 							system("cls");
 							break;
 					case 2: printf("插入班级前的学生信息:\n");
 							listplay(head);
 							printf("请输入需要插入的位置:\n");
 							scanf("%d",&pos);
 							head=listinsert(head,pos);
 							printf("插入后班级信息:\n");
 							listplay(head);
 							printf("插入已完成,按任意键继续。。。。\n");
 							getch();
 							system("cls"); 
 							break;
 					case 3: printf("删除前的学生信息:\n");
 							listplay(head);
 							printf("请输入需要删除的位置:\n");
 							scanf("%d",&pos);
 							head=listdelete(head,pos);
 							printf("删除班级信息:\n");
 							listplay(head);
 							printf("删除已完成,按任意键继续。。。。\n");
 							getch();
 							system("cls"); 
 							break;
 					case 4: listplay(head);
 							printf("显示信息如上所示,按任意键继续。。。\n");
 							getch();
 							system("cls");
 							break;
 					case 5: listplay(head);
 							printf("请输入需要修改的学生信息学号:\n");
							scanf("%d",&pos);
							head=listreplace(head,pos);
							printf("修改后班级信息:\n");
							listplay(head);
							printf("修改已完成,按任意键继续。。。\n");
							getch();
							system("cls");
							break; 
					case 6: printf("请输入需要查询的学生信息学号:\n");
						    scanf("%d",&pos);
						    head=listseek(head,pos);
						    printf("查询信息已完成,按任意键继续。。。\n");
						    getch();
						    system("cls");
						    break;
					case 7: head=listaverage(head);
							printf("计算学生平均成绩信息已完成,按任意键继续。。。\n");
							getch();
							system("cls");
							break;
 					case 8: return;
 			}
 		}
}
  • 11
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呵呵up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值