学生信息管理系统
#include <stdio.h>#include <stdlib.h>
#include <string.h>
typedef struct stu
{ int age;//年龄
int sno;//学号
char name; //名字
struct stu *next;
}stu;
int l;
stu *head;
int main()
{ void guanli();
void xs();
char a;
printf("欢迎使用管理系统\n");
printf("你是管理员还是学生呢?\n");
gets(a);
while (strcmp(a,"管理员")!=0&&strcmp(a,"学生")!=0)
{ printf("输入错误,请重新输入");
gets(a);
}
printf("\n");
printf("请输入学生个数");
scanf("%d",&l);
if (strcmp(a,"管理员")==0)
guanli();
else if (strcmp(a,"学生")==0)
xs();
return 0;
}
void guanli()
{ void chuangli();// 创建一个链表
void charu();// 在指定位置插入一个节点
void shanchu();//删除指定位置的节点
void chakan();// 打印一个链表
stu p1,p2;
char a;
chuangli();
printf("你想 插入 删除 查看?\n");
scanf("%s",a);
if (strcmp(a,"查看")==0)
chakan();
else if (strcmp(a,"删除")==0)
{ shanchu();
l--;
}
else if (strcmp(a,"插入")==0)
charu();
}
void chuangli()
{
stu *p,*p1;
int i;
for (i=1;i<=l;i++)
{if (i==1)
{p=p1=head=(stu *)malloc(sizeof(stu));
printf("请输入名字:");
scanf("%s",(*p1).name );
printf("请输入学生的年龄以及学号:");
scanf("%d %d",&(*p1).age ,&(*p1).sno);
(*p1).next=NULL;
}
else
{ p1=(stu *)malloc(sizeof(stu));
printf("请输入名字年龄以及学号:");
scanf("%s,%d,%d",(*p1).name,&(*p1).age ,&(*p1).sno);
(*p1).next=NULL;
(*p).next=p1;
p=p1;
}
}
}
void chakan()
{ stu *p;
p=head;
while (p!=NULL)
{printf("%d %d %s\n",(*p).age ,(*p).name ,(*p).name);
p=(*p).next;
}
system("pause");
}
void shanchu()
{ stu *p,*q;
char a;
p=head;
printf("请输入你想删除的名字");
gets(a);
while (strcmp((*p).name,a)!=0 )
{q=p;
p=(*p).next;
}
(*q).next=(*p).next;
free(p);
chakan();
}
void charu()
{stu *p,*q;
char a;
p=head;
printf("请输入你要插入到哪位同学后面 :");
scanf("%s",a);
while(strcmp((*p).name,a)!=0)
{ p=(*p).next;
if (p==NULL)
printf("erro\n");
gets(a);
}
q=(stu *)malloc(sizeof(stu));
gets((*q).name );
scanf("%d,%d",(*q).age ,(*q).sno);
(*q).next=(*p).next;
(*p).next=q;
}
void xs()
{stu *p;
char a;
p=head;
printf("请输入学生的名字查询");
scanf("%s",a);
while (strcmp((*p).name,a)!=0)
{ p=(*p).next;
if (p==NULL)
printf("输入错误,请重新输入");
xs();
}
printf("年龄:%d, 学号:%d, 名字:%s",(*p).age,(*p).sno,(*p).name);
} 删除函数以及插入函数有问题,老是内存报错 本帖最后由 吴情剑客 于 2020-1-3 16:17 编辑
新版本我用了get_s,11开始不支持gets。不过这个不重要。
指针q分配空间你把它放在定义的时候,最好是不要一起声明pq两个指针。
分开好看些。然后
很多scanf语句里面的对象都没有加&。
吴情剑客 发表于 2020-1-3 16:04
新版本我用了get_s,11开始不支持gets。不过这个不重要。
首先是指针q分配空间你把它放在定义的时候,最好 ...
我只回复了一部分 ,你再好好看看自己写的 。
你可以好好看看报错信息。 printf有一个格式就不对。。chakan里面你可能敲错了。。char->int 当然会报错
printf("%d %d %s\n", (*p).age, (*p).sno, (*p).name);
。嗯。我这说的几个可能也有不是必要的感觉。 查看函数没问题,就是 删除以及插入函数老是内存报错
页:
[1]