双向链表学生管理系统(0723)

本文介绍了使用双向链表实现的学生管理系统,包括录入学生信息、输出所有信息、查找、删除、修改学生信息以及按成绩排序等功能。通过test.h、test.c和main.c文件实现了系统的核心操作,并展示了运行结果。
摘要由CSDN通过智能技术生成

功能1、录入名学生的信息,包括学号、姓名、分数

功能2、输出这些学生的所有信息

功能3、求出最高分的学生,并输出其所有信息

功能4、根据学生的学号查找学生的所有信息

功能5、根据学生的学号删除学生的所有信息

功能6、根据学生的学号修改学生的所有信息

功能7、按照学生的成绩从高到低降序排序

功能8、退出学生管理系统

test.h

#ifndef __TEST_H__
#define __TEST_H__
typedef struct
{
	int id;
	float score;
	char name[20];
}datatype;

typedef struct student
{
	union{
	datatype data;
	int len;
	};
	struct student *prio;
	struct student *next;
}stu;

//创建
stu *create();
//判空
int empty(stu *s);
//菜单
void menu();
//申请节点
stu *buy(int id,float score,char name[20]);
//学生信息录入
int install(stu *s,int id,float score,char name[20]);
//输出学生信息
void show(stu *s);
//根据id查找学生信息
int search(stu *s,int id);
//最高分
int max_score(stu *s);
//根据id删除学生信息
int del(stu *s,int id);
//根据id修改学生信息
int change(stu *s,int id_old,int id_new,float score,char name[20]);
//按成绩降序
void do_wn(stu *s);
//退出系统
void ex_it();

#endif

test.c

#include <stdio.h>
#include <stdlib.h>
#include "test.h"
#include <string.h>
//创建
stu *create()
{
	stu *s=(stu *)malloc(sizeof(stu));
		if(NULL==s)
		{
			printf("创建失败\n");
			return NULL;
		}
		s->len=0;
		s->next=NULL;
		s->prio=NULL;
		return s;
}
//判空
int empty(stu *s)
{
	return s->len==0?1:0;
}
//菜单
void menu()
{
	printf("*****************************************\n");
	printf("*            学生管理系统               *\n");
	printf("*            1、学生信息录入            *\n");
	printf("*            2、输出学生信息            *\n");
	printf("*            3、查找学生信息            *\n");
	printf("*            4、求最高分并输出          *\n");
	printf("*            5、删除学生信息            *\n");
	printf("*            6、修改学生信息            *\n");
	printf("*            7、按成绩从大到小          *\n");
	printf("*            8、退出系统                *\n");
	printf("*****************************************\n");
	printf("请选择您需要的功能\n");
}
//申请节点
stu *buy(int id,float score,char name[20])
{
	stu *p=(stu *)malloc(sizeof(stu));
		if(NULL==p)
		{
			printf("申请失败\n");
			return NULL;
		}
		p->data.id=id;
		p->data.score=score;
		strcpy(p->data.name,name);
		p->prio=NULL;
		p->next=NULL;
		return p;
}
//学生信息录入
int install(stu *s,int id,float score,char name[20])
{
	if(NULL==s){
		printf("录入不了\n");
		return -1;
	}
	if(s->len>0){
		stu *r=s;
		while(r->next!=NULL)	
		{
			r=r->next;
			if(r->data.id==id){
				printf("\t****************************\n");
				printf("\t*    id有重复,请重新输入   *\n");
				printf("\t****************************\n");
				return -1;
			}
		}
	}
	//录入过程
	stu *q=s;
	while(q->next!=NULL)
	{
		q=q->next;
	}
	stu *p=buy(id,score,name);
	p->prio=q;
	q->next=p;
	s->len++;
	printf("录入完成\n");
	return 0;
}
//输出学生信息
void show(stu *s)
{
	if(NULL==s||empty(s))
	{
		printf("表空,算了吧\n");
		return;
	}
	stu *q=s->next;
	printf("\tid\t姓名\t成绩\n");
	while(q!=NULL)
	{
		printf("\t%d\t%s\t%g\n",q->data.id,q->data.name,q->data.score);
		q=q->next;
	}
	printf("\t****************************\n");
	printf("\t*     全部学生输出完成     *\n");
	printf("\t****************************\n");
}
//根据id查找学生信息
int search(stu *s,int id)
{
	if(NULL&
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值