#include<stdio.h>#include<stdlib.h>typedef struct xitong{ char ID[12]; char name[7]; char sex[3]; int age; char profess[11]; char telephone[12]; struct xitong *next;} xi;void input(xi *head) /*录入人员信息*/{ xi *pnew,*px; int i=1; pnew=head; px=head; int n; printf(" 请输入录入人数: "); scanf("%d",&n); while(i<=n) { pnew=(xi *)malloc(sizeof(xi)); printf("\n *************** 人员信息录入 ******************\n"); printf("\n 请输入第%d个人员的信息:\n",i); printf("\n 姓名:"); scanf("%s",&pnew->name); printf(" 学号:"); scanf("%s",&pnew->ID); printf(" 性别:"); scanf("%s",&pnew->sex); printf(" 年龄:"); scanf("%d",&pnew->age); printf(" 专业:"); scanf("%s",&pnew->profess); printf(" 电话:"); scanf("%s",&pnew->telephone); px->next=pnew; px=pnew; i++; } px->next=NULL; printf("\n 输入已完成,请键入1返回菜单: "); scanf("%d",&i); printf("\n\n\n\n\n\n"); if(i==1) return;}void output(xi *head) /*输出人员信息*/{ int i; xi *p=head; printf("\n *************** 人员信息输出 ******************\n"); while(p!=NULL&&p->next!=NULL) { p=p->next; printf("\n 姓名:%s",p->name); printf("\n 学号:%s",p->ID); printf("\n 性别:%s",p->sex); printf("\n 年龄:%d",p->age); printf("\n 专业:%s",p->profess); printf("\n 电话:%s",p->telephone); printf("\n\n\n"); } printf("\n\n 输出已完成,请键入1返回菜单: "); scanf("%d",&i); printf("\n\n\n\n\n\n"); if(i==1) return;}void search(xi *head) /*查找人员信息*/{ int i; char ID[11]; xi *p=head->next; printf("\n *************** 人员信息查找 ******************\n"); printf(" 请输入人员的学号: "); scanf("%s",&ID); while(p->next!=NULL&&p->ID!=ID) { p=p->next; } printf("\n 姓名:%s",p->name); printf("\n 学号:%s",p->ID); printf("\n 性别:%s",p->sex); printf("\n 年龄:%d",p->age); printf("\n 专业:%s",p->profess); printf("\n 电话:%s",p->telephone); printf("\n\n 查找已完成,请键入1返回菜单: "); scanf("%d",&i); printf("\n\n\n\n\n\n"); if(i==1) return;}void change(xi *head) /*修改人员信息*/{ int i; xi *p=head->next; printf("\n *************** 人员信息修改 ******************\n"); printf(" 请输入要修改人员的名字: "); char name[10]; scanf("%s",&name); while(p->next!=NULL&&p->name!=name) { p=p->next; } printf("\n 姓名:"); scanf("%s",&p->name); printf("\n 学号:"); scanf("%s",&p->ID); printf("\n 性别:"); scanf("%s",&p->sex); printf("\n 年龄:"); scanf("%d",&p->age); printf("\n 专业:"); scanf("%s",&p->profess); printf("\n 电话:"); scanf("%s",&p->telephone); printf("\n 输出已完成,请键入1返回菜单: "); scanf("%d",&i); printf("\n\n\n\n\n\n"); if(i==1) return;}void add(xi *head) /*添加人员信息*/{ int i; xi *pnew; pnew=(xi *)malloc(sizeof(xi)); printf("\n *************** 人员信息添加 ******************\n"); printf(" 请输入人员的信息:\n"); printf("\n 姓名:"); scanf("%s",&pnew->name); printf("\n 学号:"); scanf("%s",&pnew->ID); printf("\n 性别:"); scanf("%s",&pnew->sex); printf("\n 年龄:"); scanf("%d",&pnew->age); printf("\n 专业:"); scanf("%s",&pnew->profess); printf("\n 电话:"); scanf("%s",&pnew->telephone); pnew->next=head->next; head->next=pnew; printf("\n 输出已完成,请键入1返回菜单: "); scanf("%d",&i); printf("\n\n\n\n\n\n"); if(i==1) return;}void delete(){ struct student *p,*q; char *sp; sp=(char *)malloc(10*sizeof(char)); printf("所删学生的姓名:"); scanf("%s",sp); fflush(stdin); if(first==NULL) { printf("当前成管为空\n"); return ; } if(first!=NULL&&strcmp(first->name,sp)==0) { q=first; first=first->next; free(q); return ; } for(p=first,q=p->next; q!=NULL; p=q,q=q->next) { if(strcmp(q->name,sp)==0) { p->next=q->next; free(q); } } printf("\n 删除成功 \t"); free(sp);}int ui() /*UI界面*/{ int i; printf("\n * * * * * * *实验室人员管理系统* * * * * * **\n"); printf(" * *\n"); printf(" * 1.录入人员信息 *\n"); printf(" * 2.输出人员信息 *\n"); printf(" * 3.查找人员信息 *\n"); printf(" * 4.修改人员信息 *\n"); printf(" * 5.添加人员信息 *\n"); printf(" * 6.删除人员信息 *\n"); printf(" * 7.:( 退出系统 *\n"); printf(" * *\n"); printf(" * * * * * * * * * * * * * * * * * * * * * * *\n"); printf("\n 请选择(1-7): "); scanf("%d",&i); if(i>=0&&i<=7) return i; else return 8;}int main(){ int i; xi *head,*pnew,*px; head=(xi *)malloc(sizeof(xi)); while(1) { switch(i=ui()) { case 1: printf("\n\n"); input(head); break ; case 2: printf("\n\n"); output(head); break ; case 3: printf("\n\n"); search(head); break ; case 4: printf("\n\n"); change(head); break ; case 5: printf("\n\n"); add(head); break ; case 6: printf("\n\n"); delet(head); break ; case 7: printf(" \n\n :) 感谢使用实验室人员管理系统\n\n\n\n"); return 0; } }}
1 回答
已采纳
Ivoth
TA贡献13条经验 获得超3个赞
写的什么鬼啊
链表删除节点可不是你这样 啊
q=first;
first=first->next;
free(q);
这句话是如果输入的名字匹配链表第一个名字,吧头指针q=first都释放了,也就是没有头节点,其它节点你有没有用其他指针承接, 就是全没了,
下面的for循环也是把,匹配到的名字后面的全删了
- 1 回答
- 0 关注
- 1629 浏览
添加回答
举报
0/150
提交
取消