//单链表实现学生管理系统(参照顺序表技能)
//写出菜单界面switch选择,
//功能1创建单链表,
//2录入学生信息
//3删除一个学生信息,
//4按照成绩修改一个学生的年龄,
//5、按照姓名顺序查找一个学生是否存在
//
//1、学生信息结构体姓名,分数,年龄,电话。
//2.其他功能函数自定义,分文件编译。
主函数文件 main.c
#include "link.h"
//单链表实现学生管理系统(参照顺序表技能)
//写出菜单界面switch选择,
//功能1创建单链表,
//2录入学生信息
//3删除一个学生信息,
//4按照成绩修改一个学生的年龄,
//5、按照姓名顺序查找一个学生是否存在
//
//1、学生信息结构体姓名,分数,年龄,电话。
//2.其他功能函数自定义,分文件编译。
int main(int argc, const char *argv[])
{
int a;
while(1)
{
Pnode L;
printf("输入业务序号:\n");
scanf("%d",&a);
switch(a)
{
case 1 : L=Application_header();
break;
case 2 : Request_space(L);
break;
case 3 : delete_my(L);
break;
case 4 : change_my(L);
break;
case 5 : find_my(L);
break;
case 6 : check_my(L);
break;
default : printf("序号有误,从新输入\n");
break;
}
}
return 0;
}
声明文件 fun.h
#ifndef __FUN_H__
#define __FUN_H__
#include <myhead.h>
#define MAX 30
typedef struct student
{
char name[MAX];
float score;
int age;
char number[MAX];
}stu;
typedef struct node
{
union
{
int len;
stu information;
};
struct node *next;
}Node,*Pnode;
//申请头
Pnode Application_header();
//录入
void Request_space(Pnode L);
//查看
void check_my(Pnode L);
//删除
int delete_my(Pnode L);
//修改
int change_my(Pnode L);
//查找
int find_my(Pnode L);
#endif
功能函数 fun.c
#include "link.h"
Pnode Application_header()
{
Pnode p=malloc(sizeof(Node));
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
p->len=0;
p->next=NULL;
return p;
}
//尾插
void Request_space(Pnode L)
{
if(L==NULL)
{
printf("单链表不存在\n");
}
//Pnode p;
Pnode t=L;
int key=L->len;
int i,d;
printf("输入录入学生的个数\n");
scanf("%d",&d);
printf("输入学生信息\n");
for(i=0;i<key;i++)
{
t=t->next;
}
for(i=0;i<d;i++)
{
Pnode p=malloc(sizeof(Node));
scanf("%s%f%d%s",
p->information.name,
&p->information.score,
&p->information.age,
p->information.number);
t->next=p;
p->next=NULL;
t=t->next;
L->len++;
}
}
//删除
int delete_my(Pnode L)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
int i,min=-1;
char arr[MAX];
Pnode t=L;
Pnode Q;
printf("输入学生姓名:\n");
scanf("%s",arr);
for(i=0;i<=L->len;i++)
{
t=t->next;
if(strcmp(arr,t->information.name)==0)
{
min=i;
break;
}
}
if(min==-1)
{
printf("没找到该学生\n");
return 0;
}
t=L;
if(min==0)
{
t=L;
Q=t->next;
t->next=Q->next;
free(Q);
Q=NULL;
L->len--;
printf("删除成功\n");
}
else
{
for(i=0;i<min;i++)
{
t=t->next;
}
Q=t->next;
t->next=Q->next;
free(Q);
Q=NULL;
L->len--;
printf("删除成功\n");
}
return 0;
}
//修改
int change_my(Pnode L)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
int i;
float arr;
printf("输入成绩\n");
scanf("%f",&arr);
int f,min=-1;
Pnode t=L;
for(i=0;i<L->len;i++)
{
t=t->next;
if(arr==t->information.score)
{
printf("输入需要修改的年龄\n");
scanf("%d",&f);
t->information.age=f;
printf("修改成功\n");
min=i+1;
break;
}
}
if(min==-1)
{
printf("不存在该成绩的学生\n");
}
return 0;
}
//查找
int find_my(Pnode L)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在或为空\n");
return -1;
}
int i,min=0;
char arr[MAX];
Pnode t=L->next;
printf("输入学生姓名:\n");
scanf("%s",arr);
for(i=0;i<L->len;i++)
{
if(strcmp(arr,t->information.name)==0)
{
printf("姓名:%s\t成绩:%.2f\t年龄:%d\t电话号码:%s\n",
t->information.name,
t->information.score,
t->information.age,
t->information.number);
break;
}
t=t->next;
}
return 0;
}
//查看
void check_my(Pnode L)
{
int i;
Pnode t = L;
for(i=0;i<L->len;i++)
{
t=t->next;
printf("姓名:%s\t成绩:%.2f\t年龄:%d\t电话号码:%s\n",
t->information.name,
t->information.score,
t->information.age,
t->information.number);
}
}