c语言用链表实现通讯录管理系统

有人帮我看看这个代码怎么修改吗?谢谢。

#include
#include
#include
enum option{
    exit,
    add,
    dele,
    search,
    mod,
    show
};
enum text{
    EXIT,
    NAME,
    AGE,
    TELE,
    ADDR
};

struct people{
    char name[20];
    int age;
    char tele[20];
    char addr[30];
};
 typedef struct Lnode{
     struct people data;
     struct Lnode *next;
 }Lnode, *Linklist;
 void menu()
 {
     printf("**********************************通 讯 录 管 理 系 统**********************************\n");
     printf("**********************************1.添加        2.删除**********************************\n");
     printf("**********************************3.查找        4.修改**********************************\n");
     printf("**********************************5.浏览        0.退出**********************************\n");
 }
 void MENU()
 {
     printf("**********************************请选择需要修改的内容**********************************\n");
     printf("**********************************     1. 姓名        **********************************\n");
     printf("**********************************     2. 年龄        **********************************\n");
     printf("**********************************     3. 电话号码    **********************************\n");
     printf("**********************************     4. 家庭住址    **********************************\n");
     printf("**********************************     0. 退出程序    **********************************\n");
 }
 void addcontact(Linklist L)
 {
    char nam[20];
    printf("请输入要添加的联系人姓名-> ");
    scanf("%s",nam);
    Linklist p;
    p=L;
    Linklist s=(Linklist)malloc(sizeof(Lnode));
    s->next=NULL;
    while(p->next)
    {
        if(strcmp(nam,p->data.name)==0)
        {
            printf("该联系人已经存在,不需要再次添加\n");
            break;
        }
        p=p->next;
    }
    if(p->next==NULL)
    {
        strcpy(s->data.name,nam);
        printf("请输入该联系人的年龄->");
        scanf("%d",&s->data.age);
        printf("请输入该联系人的电话号码->");
        scanf("%s",&s->data.tele);
        printf("请输入该联系人的地址->");
        scanf("%s",&s->data.addr);
        p->next=s;
        p=s;
        printf("添加成功\n");
    }
 }
   
 void delecontact(Linklist L)
 {
     char ame[20];
     Linklist p,q;
     p=L;
     Linklist q=(Linklist)malloc(sizeof(Lnode));
     printf("请输入要删除的联系人的姓名->");
     scanf("%s",ame);
     while(p->next)
     {
         if(strcmp(ame,p->data.name)==0)
         {
             q=p->next;
             p->next=p->next->next;
             free(q);
             printf("删除成功\n");
         }
         p=p->next;
     }
     if(p->next==NULL)
     {
         printf("暂时无数据,请添加数据后再使用\n");
     }
 }
 void searchcontact(Linklist L)
 {
     char nme[20];
     Linklist p;
     printf("请输入需要查找的联系人->\n");
     scanf("%s",nme);
     p=L;
     while(p->next)
     {
         if(strcmp(nme,p->data.name)==0)
         {
             printf("找到该联系人,其具体信息如下\n");
             printf("%20s%4s%20s%30s\n","姓名","年龄","电话号码","家庭住址");
             printf("%20s%4d%20s%30s\n",
                 p->data.name,
                 p->data.age,
                 p->data.tele,
                 p->data.addr);
         }
         p=p->next;
     }
     if(p->next==NULL)
     {
         printf("无该联系人\n");
     }
 }

 void modcontact(Linklist L)
 {
     char mne[20];
     int num=0;
     Linklist p;
     p=L;
     printf("请输入要修改的联系人姓名\n");
     scanf("%s",mne);
      while(p->next)
     {
         if(strcmp(mne,p->data.name)==0)
         {
             printf("找到该联系人,其具体信息如下\n");
             printf("%20s%4s%20s%30s\n","姓名","年龄","电话号码","家庭住址");
             printf("%20s%4d%20s%30s\n",
                 p->data.name,
                 p->data.age,
                 p->data.tele,
                 p->data.addr);
             do
             {
             MENU();
             printf("请选择->\n");
             scanf("%d",&num);
             switch(num)
             {
             case NAME:
                 printf("请输入修改后的内容\n");
                 scanf("%s",&p->data.name);
                 break;
             case AGE:
                 printf("请输入修改后的内容\n");
                 scanf("%d",&p->data.age);
                 break;
             case TELE:
                 printf("请输入修改后的内容\n");
                 scanf("%s",&p->data.tele);
                 break;
             case ADDR:
                 printf("请输入修改后的内容\n");
                 scanf("%s",&p->data.addr);
                 break;
             case EXIT:
                 printf("修改完毕\n");
                 break;
             default:
                 printf("选择错误\n");
                 break;
             }
             }while(num);
         }
         p=p->next;
     }
     if(p->next==NULL)
     {
         printf("无该联系人\n");
     }
 }

 void showcontact(Linklist L)
 {
     Linklist p;
     p=L;
     while(p->next)
     {
         printf("%20s%4s%20s%30s\n","姓名","年龄","电话号码","家庭住址");
         printf("%20s%4d%20s%30s\n",
                 p->data.name,
                 p->data.age,
                 p->data.tele,
                 p->data.addr);
         p=p->next;
     }
     if(p->next==NULL)
     {
          printf("通讯录为空\n");
     }

 }
int main()
{
    Linklist L=(Linklist)malloc(sizeof(Lnode));
    L->next=NULL;
    int input=0;
    do
    {
        menu();
        printf("请选择您所需要进行的操作->>  ");
        scanf("%d",&input);
        switch(input)
        {
        case add:
            addcontact(L);
            break;
        case dele:
            delecontact(L);
            break;
        case search:
            searchcontact(L);
            break;
        case mod:
            modcontact(L);
            break;
        case show:
            showcontact(L);
            break;
        case exit:
            printf("退出程序\n");
            break;
        default:
            printf("选择错误\n");
            break;
        }
    }while(input);
    return 0;
}


修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
enum option {
    Exit,         //修改
    add,
    dele,
    search,
    mod,
    show
};
enum text {
    EXIT,
    NAME,
    AGE,
    TELE,
    ADDR
};

struct people {
    char name[20];
    int  age;
    char tele[20];
    char addr[30];
};
typedef struct Lnode {
    struct people data;
    struct Lnode* next;
}Lnode, * Linklist;
void menu()
{
    printf("**********************************通 讯 录 管 理 系 统**********************************\n");
    printf("**********************************1.添加        2.删除**********************************\n");
    printf("**********************************3.查找        4.修改**********************************\n");
    printf("**********************************5.浏览        0.退出**********************************\n");
}
void MENU()
{
    printf("**********************************请选择需要修改的内容**********************************\n");
    printf("**********************************     1. 姓名        **********************************\n");
    printf("**********************************     2. 年龄        **********************************\n");
    printf("**********************************     3. 电话号码    **********************************\n");
    printf("**********************************     4. 家庭住址    **********************************\n");
    printf("**********************************     0. 退出程序    **********************************\n");
}
void addcontact(Linklist L)
{
    char nam[20];
    printf("请输入要添加的联系人姓名-> ");
    scanf("%s", nam);
    Linklist p;
    p = L;
    while (p->next)
    {
        if (strcmp(nam, p->next->data.name) == 0)
        //if (strcmp(nam, p->data.name) == 0)  修改
        {
            printf("该联系人已经存在,不需要再次添加\n");
            break;
        }
        p = p->next;
    }
    if (p->next == NULL)
    {
        Linklist s = (Linklist)malloc(sizeof(Lnode));  //修改
        s->next = NULL;
        strcpy(s->data.name, nam);
        printf("请输入该联系人的年龄->");
        scanf("%d", &s->data.age);
        printf("请输入该联系人的电话号码->");
        scanf("%s", s->data.tele);   //scanf("%s", &s->data.tele);
        printf("请输入该联系人的地址->");
        scanf("%s", s->data.addr);  //scanf("%s", &s->data.addr);
        p->next = s;
        //p = s;                     //修改
        printf("添加成功\n");
    }
}

void delecontact(Linklist L)
{
    char ame[20];
    Linklist p, q;
    p = L;
    //Linklist q = (Linklist)malloc(sizeof(Lnode)); //修改
    printf("请输入要删除的联系人的姓名->");
    scanf("%s", ame);
    while (p->next)
    {
        if (strcmp(ame, p->next->data.name) == 0) //修改
        //if (strcmp(ame, p->data.name) == 0)
        {
            q = p->next;
            p->next = p->next->next;
            free(q);
            printf("删除成功\n");
            break;                 //修改
        }
        p = p->next;
    }
    if (p->next == NULL)
    {
        printf("无该联系人\n");  //修改
    }
}
void searchcontact(Linklist L)
{
    char nme[20];
    Linklist p;
    printf("请输入需要查找的联系人->\n");
    scanf("%s", nme);
    p = L;
    while (p->next)
    {
        if (strcmp(nme, p->next->data.name) == 0)  //修改
        //if (strcmp(nme, p->data.name) == 0)
        {
            printf("找到该联系人,其具体信息如下\n");
            printf("%20s%4s%20s%30s\n", "姓名", "年龄", "电话号码", "家庭住址");
            printf("%20s%4d%20s%30s\n",
                p->next->data.name,   //修改
                p->next->data.age,    //修改
                p->next->data.tele,   //修改
                p->next->data.addr);  //修改
            break;                    //修改
        }
        p = p->next;
    }
    if (p->next == NULL)
    {
        printf("无该联系人\n");
    }
}

void modcontact(Linklist L)
{
    char mne[20];
    int num = 0;
    Linklist p;
    p = L;
    printf("请输入要修改的联系人姓名\n");
    scanf("%s", mne);
    while (p->next)
    {
        if (strcmp(mne, p->next->data.name) == 0) //修改
        //if (strcmp(mne, p->data.name) == 0)
        {
            printf("找到该联系人,其具体信息如下\n");
            printf("%20s%4s%20s%30s\n", "姓名", "年龄", "电话号码", "家庭住址");
            printf("%20s%4d%20s%30s\n",
                p->next->data.name,    //修改
                p->next->data.age,     //修改
                p->next->data.tele,    //修改
                p->next->data.addr);   //修改
            do
            {
                MENU();
                printf("请选择->\n");
                scanf("%d", &num);
                switch (num)
                {
                case NAME:
                    printf("请输入修改后的内容\n");
                    scanf("%s", p->next->data.name); //scanf("%s", &p->data.name);
                    break;
                case AGE:
                    printf("请输入修改后的内容\n");
                    scanf("%d", &p->next->data.age);
                    break;
                case TELE:
                    printf("请输入修改后的内容\n");
                    scanf("%s", p->next->data.tele); //scanf("%s", &p->data.tele);
                    break;
                case ADDR:
                    printf("请输入修改后的内容\n");
                    scanf("%s", p->next->data.addr); //scanf("%s", &p->data.addr);
                    break;
                case EXIT:
                    printf("修改完毕\n");
                    break;
                default:
                    printf("选择错误\n");
                    break;
                }
            } while (num);
            break;                  //修改
        }
        p = p->next;
    }
    if (p->next == NULL)
    {
        printf("无该联系人\n");
    }
}

void showcontact(Linklist L)
{
    Linklist p;
    p = L;
    if (p == NULL || p->next == NULL)  //修改
    {
        printf("通讯录为空\n");      
    }
    else {                             //修改
        printf("%20s%4s%20s%30s\n", "姓名", "年龄", "电话号码", "家庭住址");  //修改
        while (p->next)
        {
            printf("%20s%4d%20s%30s\n",
                p->next->data.name,      //修改
                p->next->data.age,       //修改
                p->next->data.tele,      //修改
                p->next->data.addr);     //修改
            p = p->next;
        }
    }
}
int main()
{
    Linklist L = (Linklist)malloc(sizeof(Lnode));
    L->next = NULL;
    int input = 0;
    do
    {
        menu();
        printf("请选择您所需要进行的操作->>  ");
        scanf("%d", &input);
        switch (input)
        {
        case add:
            addcontact(L);
            break;
        case dele:
            delecontact(L);
            break;
        case search:
            searchcontact(L);
            break;
        case mod:
            modcontact(L);
            break;
        case show:
            showcontact(L);
            break;
        case Exit:  //修改
            printf("退出程序\n");
            break;
        default:
            printf("选择错误\n");
            break;
        }
    } while (input);
    return 0;
}