- #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;
-             }
-          }
- }