单链表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建单链表,2录入学生信息,3删除一个学生信息,4按照成绩修改一个学生的年龄,5、按照姓名顺序查找一个学生是否存在。
#include<stdio.h>
#include<string.h>
#include<myhead.h>
typedef struct stu
{
int age;
int score;
char name[20];
long phone;
}student;
typedef struct node
{
union
{
int len;
student data;
};
struct node*next;
}Node,*pnode;
pnode get_head()
{
pnode p =malloc(sizeof(Node));
p->len=0;
p->next=NULL;
return p;
}
int head_insert(pnode L)
{
int i,j,k;
// pnode t=malloc(sizeof(Node));
printf("输入你要输入的学生个数:");
scanf("%d",&k);
for(i=0;i<k;i++)
{
pnode t=malloc(sizeof(Node));
printf("输入你要输入的第%d个学生信息\n",i+1);
scanf("%d%d%s%ld",&(t->data.age),&(t->data.score),t->data.name,&(t->data.phone));
t->next=L->next;
L->next=t;
L->len++;
}
}
int node_output(pnode L)
{
int i;
pnode t=L;
printf("学生信息如下:\n");
for(i=0;i<L->len;i++)
{
t=t->next;
printf("%d %d %s %ld\n",t->data.age,t->data.score,t->data.name,t->data.phone);
}
}
int any_pos_dele(pnode L,int e)
{
int i;
pnode t=L;
for(i=0;i<e-1;i++)
{
t=t->next;
}
pnode Q=t->next;
t->next=Q->next;
L->len--;
free(Q);
Q=NULL;
}
int any_socre_change(pnode L,int e)
{
int i,k;
pnode t=L;
for(i=0;i<L->len;i++)
{
t=t->next;
if(t->data.score==e)
{
printf("输入要修改的年龄:\n");
scanf("%d",&k);
t->data.age=k;
break;
}
else
{
printf("该学生不存在\n");
}
}
}
int find_node(pnode L,char a[])
{
int i;
pnode t=L;
int key =1;
for(i=0;i<L->len;i++)
{
t=t->next;
if(strcmp(t->data.name,a)==0)
{
printf("查找成功,学生信息如下\n");
printf("%d\t %d\t %s\t %ld\n",t->data.age,t->data.score,t->data.name,t->data.phone);
key=0;
break;
}
}
printf("%d\n",i);
printf("%d\n",key);
if(i==L->len&&key==1)
{
printf("该学生不存在\n");
}
}
int main(int argc, const char *argv[])
{
int i;
int j;
int key;
char b[20];
pnode L=get_head();
while(1)
{
printf("*****学生管理系统*****\n");
printf( "*****输入需要的功能*****\n");
printf( "输入1:创建单链表\n");
printf("输入2:录入学生信息\n");
printf("输入3:删除一个学生信息\n");
printf("输入4:按照成绩修改一个学生的年龄\n");
printf( "输入5:按照姓名顺序查找一个学生是否存在\n");
printf( "输入0:退出\n");
scanf("%d",&key);
switch(key)
{
case 1: printf("创建成功");break;
case 2 : head_insert(L);node_output(L);break;
case 3: printf("输入要删除的第几个位子\n");
scanf("%d",&i);
any_pos_dele(L,i);
node_output(L);break;
case 4 :printf("输入要修改学生的年龄\n");
scanf("%d",&j);
any_socre_change(L,j);
node_output(L);break;
case 5:printf("输入要查找的学生姓名\n");
scanf("%s",b);
find_node(L,b);
node_output(L);break;
case 0:return 0;
}
}
return 0;
}