功能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&