单链表学生系统,帮忙看看错在那里
#include<stdio.h>#include<malloc.h>
#include<stdlib.h>
typedef struct student
{
char name[10];
int number;
int chinese;
int math;
int english;
};
typedef struct node
{
char data;
struct student a;
struct node *next;
}node,*linklist;
void createlist(linklist *l)/*创建单链表*/
{
*l=(linklist)malloc(sizeof(node));/*申请内存*/
(*l)->next=NULL;/*建立空的单链表*/
(*l)->data=0;/*初始化数据区*/
}
void charu(linklist *l,int n)/*插入学生信息*/
{
int i;
linklist p,s;
if(n<0||n>(*l)->data+1)
{
printf("超出范围,插入位置不合法\n");
return ;
}
p=(*l);
for(i=1;i<n;i++)
{
p=(linklist)malloc(sizeof(node));
printf("请输入学生的姓名:");
scanf("%s",&(s->a.name));
printf("请输入学生的学号:");
scanf("%d",&(s->a.number));
printf("请输入学生的语文成绩:");
scanf("%d",&(s->a.chinese));
printf("请输入学生的数学成绩:");
scanf("%d",&(s->a.math));
printf("请输入学生的英语成绩:");
scanf("%d",&(s->a.english));
p=p->next;
s->next=p->next;
p->next=s;
(*l)->data++;
}
}
display(linklist *l)
{
linklist p;
p=l->next;
while(p!=NUll)
{
printf("学生的姓名是: %s\n",p->a.name);
printf("学生的学号是: %d\n",p->a.number);
printf("学的语文成绩: %d\n",p->a.chinese);
printf("学的英语成绩: %d\n",p->a.english);
printf("学的数学成绩: %d\n",p->a.math);
p=p->next;
}
}
delete(linklist l,int i)
{
linklist p,q;
int n,i;
p=l;
printf("请输入删除的位置:");
scanf("%d",&n);
if(n<0||n>l->data)
{
printf("删除的位置不合法\n");
return ;
}
for(i=1;i<n;i++)
{
p=p->next;
q=p->next;
p-next=q->next;
free(q);
l->data--;
}
}
void chaxun(linklist l)
{
int n,flag=1;
linklist p;
p=l->next;
printf("输入要查询的学号:\n");
scanf("%d",&n);
while(p!=Null)
{
if(n==p->a.number)
{
printf("学生的姓名是:%s\n",p->a.name);
printf("学生的学号是:%d\n",p->a.number);
printf("学生的语文成绩是:%d\n",p->a.chinese);
printf("学生的数学成绩是:%d\n",p->a.math);
printf("学生的英语成绩是:%d\n",p->a.english);
flag=0;
break;
}
p=p->next;
}
if(flag)
printf("查询的学生不存在\n");
printf("是否重新修改学生信息查询?,输入1修改,输入0不修改:\n);
scanf("%d",&flag);
if(flag)
{
printf("输入学生的姓名:");
scanf("%s",&(p->a.name));
printf("输入学生的学号:");
scanf("%d",&(p->a.number));
printf("输入学的语文成绩:");
scanf("%d",&(p->a.chinese));
printf("输入学的英语成绩:");
scanf("%d",&(p->a.english));
printf("输入学的数学成绩:");
scanf("%d",&(p->a.math));
}
void menu()
{
printf(" 单链表基本操作实验 \n");
printf("******************************************************\n");
printf("请选择命令序号(0-7): *\n");
printf("*1输入学生信息; *\n");
printf("*2插入学生信息; *\n");
printf("*3删除学生信息; *\n");
printf("*4查询学生信息; *\n");
printf("*5输出学生信息; *\n");
printf("*0程序结束. *\n");
printf("******************************************************\n");
}
void function()
{
int n,i,flag;
linklist l;
init(&l);
for(i=0;i<9;i++)
{
printf("输入第%d个学生的信息\n",i+1);
charu(&l,1); //头插法创建
}
mean();
printf("输入要执行的操作:\n");
scanf("%d",&flag);
while(flag)
{
switch(flag)
{
case 1:
printf("输入要插入的位置:\n");
scanf("%d",&n);
charu(&l,n);
break;
case 2:
delete(l);
break;
case 3:
display(l);
break;
case 4:
chaxun(l);
break;
default:
printf("输入无效:\n");
break;
}
mean();
printf("输入要执行的操作:\n");
scanf("%d",&flag);
case 0:exit(1);break;
default:
printf("输入命令错误!请重新输入:\n");
break;
}
int main(void)
{
function();
return OK;
}