1、 设计一个学生信息管理系统,链表中每一结点包括:学号、姓名、年龄、性别、出生年月、地址、电话、电子邮件。程序能实现以下功能:
从文件中加载信息
从键盘输入信息
显示学生的信息
修改学生的信息
查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示“无此记录!”的信息。
删除链表中指定学号的结点。
添加学生记录
要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序及显示其对应的结果。
完整的代码如下:
void display()
{
student *p=head->next;
printf("链表中所有的学生信息如下:/n");
while(p!=NULL)
{
printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
//printf("/n");
p=p->next;
}
return ;
}
void search()
{
int num,x;
char name[20];
student *p=head->next;
printf("请选择查询的方式:/n");
printf("1、按学号查询/t 2、按姓名查询/n");
scanf("%d",&x);
if(x==1)
{
printf("需要查找的学生学号为:");
scanf("%d",&num);
while(p!=NULL)
{
if(p->id==num)
{
printf("学生学号为%d的学生的信息如下:/n",num);
printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
return;
}
p=p->next;
}
if(p==NULL)
printf("无此记录!/n");
}
else if(x==2)
{
printf("需要查找的学生姓名为:");
getchar();
gets(name);
//scanf();
p=head->next;
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
printf("学生姓名为%s的学生的信息如下:/n",name);
printf("%d %s %d %c %s %s %s %s/n",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
return;
}
p=p->next;
}
if(p==NULL)
printf("无此记录!/n");
}
return ;
}
void insert()
{
int num,i;
student *p,*q;
p=head;
printf("请输入你要插入位置: ");
scanf("%d",&num);
if(num>length)
{
printf("找不到要插入的位置/n");
return ;
}
else
{
printf("请输入你要插入的学生的信息:/n");
q=(student *)malloc(sizeof(student));
scanf("%d %s %d %c %s %s %s %s",&q->id,q->name,&q->age,&q->sex,q->birthday,q->address,q->phone,q->phone);
while(p!=NULL)
{
if(p->id==q->id)
{
printf("该学号已经存在,无法插入!/n");
return ;
}
p=p->next;
}
p=head;
for(i=0;i<num;i++)
p=p->next;
q->next=p->next;
p->next=q;
length++;
printf("插入成功!/n");
return ;
}
}
void Delete()
{
int num;
student *p,*q;
q=head,p=head->next;
printf("请输入要删除的学生的学号:/n");
scanf("%d",&num);
while(p!=NULL)
{
if(p->id==num)
{
q->next=p->next;
free(p);
length--;
printf("删除成功!/n");
return ;
}
p=p->next;
q=q->next;
}
if(p==NULL)
{
printf("找不到要删除的编号!/n");
return ;
}
}
void menu()
{
printf("________________________________________________________________/n");
printf("| 学生信息管理系统 |/n");
printf("| 0、 退出系统 |/n");
printf("| 1、 录入学生信息 |/n");
printf("| 2、 建立链表 |/n");
printf("| 3、 显示链表 |/n");
printf("| 4、 查找链表中的某个元素 |/n");
printf("| 5、 删除链表中指定学号的结点 |/n");
printf("| 6、 指定的位置上插入一个新结点 |/n");
printf("| 7、 修改学生信息 |/n");
printf("________________________________________________________________/n");
return ;
}
int main(void)
{
int a;
menu();
while(1)
{
printf("请选择相应的功能:");
scanf("%d",&a);
switch(a)
{
case 0:
return 0;
case 1:
LoadStudentInfoFromFile(); //从文件中加载学生信息
menu();
break;
case 2:
create(); //从键盘输入学生信息
menu();
break;
case 3:
if(head)
{
display();
menu();
}
else
{
printf("链表为空,请先建立链表!/n");
menu();
}
break;
case 4:
if(head)
{
search();
menu();
}
else
{
printf("链表为空,请先建立链表!/n");
menu();
}
break;
case 5:
if(head)
{
Delete();
menu();
}
else
{
printf("链表为空,请先建立链表!/n");
menu();
}
break;
case 6:
if(head)
{
insert();
menu();
}
else
{
printf("链表为空,请先建立链表!/n");
menu();
}
break;
case 7:
if(head)
{
ModifyStudentInfo();
menu();
}
else
{
printf("链表为空,请先建立链表!/n");
menu();
}
break;
default:
break;
}
}
system("pause");
return 0;
}