#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>#define null 0 typedef struct { char num[5]; /*员工编号*/ char name[8]; /*员工姓名*/ char phone[9]; /*办公室电话号码*/ char call[12]; /*手机号码*/}DataType;/*通讯录单链表的结点类型*/typedef struct node{ DataType data; /*结点的数据域*/ struct node *next; /*结点的指针域*/}ListNode,*LinkList;LinkList CreatList(void) /*建立一个通讯录链表*/{ LinkList head,s,p; char ch; head=(ListNode *)malloc(sizeof(ListNode)); /*创建头结点*/ head->next=NULL; p=head; do { s=(ListNode *)malloc(sizeof(ListNode)); /*创建一个记录结点*/ printf("请输入姓名:"); scanf("%s",s->data.name); printf("请输入编号:"); scanf("%s",s->data.num); printf("请输入电话号码:"); scanf("%s",s->data.phone); printf("请输入手机号码:"); scanf("%s",s->data.call); s->next=p->next; p->next=s; printf("继续输入下一记录吗(y/n)?"); scanf("\n%c",&ch); } while(ch=='y'|| ch=='Y'); return head; /*返回头结点指针*/}ListNode *SearchList(LinkList head) /*查询函数*/{ ListNode *p; int x; /* 按照编号或姓名在链表中查找由x的值决定*/ char num[5]; /*员工编号*/char name[8]; /*员工姓名*/ printf("1. 按编号查询 2.按姓名查询\n"); printf("请选择:"); scanf("%d",&x); if(x==1) { printf("请输入待查人的编号:"); scanf("%s",num); for(p=head;p!=NULL&&strcmp(p->data.num,num)!=0;p=p->next); } else if(x==2) { printf("请输入待查人的姓名:"); scanf("%s",name); for(p=head;p!=NULL&&strcmp(p->data.name,name)!=0;p=p->next); } return p; /*返回查指向找到的记录的指针,若没查找到,返回的是空指针*/}void InsertList(LinkList head,ListNode *p){ p->next=head->next; head->next=p;}void DelNode(LinkList head){ LinkList p,q; char ch; p=SearchList(head); if(!p) { printf("没有找到此人的记录\n"); return; } printf("确定要删除吗?(y/n)"); scanf("\n%c",&ch); if(ch=='n') return; for(q=head;q!=NULL&&q->next!=p;q=q->next); q->next=p->next; free(p); printf("删除成功\n");}void PrintList(LinkList head){ LinkList p; p=head->next; printf(" 编号 姓名 电话号码 手机号码\n"); while(p!=NULL) { printf(" %s %s %s %s\n", p->data.num,p->data.name,p->data.phone,p->data.call); p=p->next; }}void Menu() /*显示菜单函数*/{ printf(" *********软件公司员工通讯录**********\n"); printf("1-通讯录建立 2-查看全部记录 3-查询 4-插入新员工 5-删除离开员工 0-退出\n"); printf("请选择(输入0--5):");}void main(){ int t; LinkList head,p; while(1) { Menu(); scanf("%d",&t); /*选择系统子功能*/ switch(t) { case 1: printf("建立通讯录\n"); head=CreatList(); break; case 2: printf("查看全部记录\n"); PrintList(head); break; case 3: printf("查询\n"); p=SearchList(head); if(p) { printf("编号 姓名 电话号码 手机号码\n"); printf(" %s %s %s %s\n", p->data.num,p->data.name,p->data.phone,p->data.call); } else printf("无此人\n"); break; case 4: printf("插入\n"); p=(ListNode *)malloc(sizeof(ListNode)); printf("请输入姓名:"); scanf("%s",p->data.name); printf("请输入编号:"); scanf("%s",p->data.num); printf("请输入电话号码:"); scanf("%s",p->data.phone); printf("请输入手机号码:"); scanf("%s",p->data.call); InsertList(head,p); break; case 5: printf("删除\n"); DelNode(head); break; case 0: printf("退出\n"); return; } }}