小羊爱.睡觉♡ 2023-01-06 10:55 采纳率: 50%
浏览 65
已结题

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

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

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


  • 写回答

1条回答 默认 最新

  • qzjhjxj 2023-01-06 13:30
    关注

    修改如下,供参考:

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月14日
  • 已采纳回答 1月6日
  • 创建了问题 1月6日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装