Skip to content
c
#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;
            }
         }
}