墨雨旧梦 2021-10-26 10:05 采纳率: 71.4%
浏览 55
已结题

可修改除手机号外的其它信息项。要先查找,再修改。若当前 条件查找出多个记录,则提示用户增加查询条件继续查找,直到确定唯一用户 后再修改(要链表的代码,C语言)

可修改除手机号外的其它信息项。要先查找,再修改。若当前条件查找出多个记录,则提示用户增加查询条件继续查找,直到确定唯一用户
后再修改。(要链表的代码,C语言)

  • 写回答

2条回答 默认 最新

  • 关注

    代码如下,如有帮助,请帮忙采纳一下,谢谢。

    img

    img

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    struct StNode
    {
        char num[12];  //手机号
        char name[20];  //姓名 
        char part[40];  //工作单位
        StNode* next;
    };
    
    //录入信息
    struct StNode* Input(struct StNode* head)
    {
        struct StNode* p,*node;
        system("cls");
        node = (struct StNode*)malloc(sizeof(struct StNode));
        //录入信息
        printf("请输入手机号:");
        scanf("%s",node->num);
        printf("请输入姓名:"); 
        scanf("%s",node->name);
        printf("请输入工作单位:");
        scanf("%s",node->part);
        node->next = 0;
    
        if (head == 0)
        {
            head = node;
            //
        }else
        {
            p = head;
            while(p->next)
                p = p->next;
            //新建节点
            p->next = node;
        }
        system("pause");
        return head;
    }
    //显示所有手机信息
    void showAll(struct StNode* head)
    {
        struct StNode* p;
        int i=1;
        system("cls");
        p = head;
        while(p)
        {
            printf("%d:手机号:%s\n",i,p->num);
            printf("%d:姓名:%s\n",i,p->name); 
            printf("%d:单位:%s\n",i,p->part);
            i++;
            p = p->next;
        }
        system("pause");
    }
    
    //查询信息
    int Find(struct StNode* head)
    {
        int flag = 0;
        struct StNode* p = head;
        char name[40]={0};
        system("cls");
        printf("请输入手机号或者姓名或者部门:"); 
        scanf("%s",&name);
        while(p)
        {
            if( (strcmp(p->name,name) ==0) || (strcmp(p->num,name) ==0) || (strcmp(p->part,name) ==0))
            {
                printf("手机号:%d\n",p->num);
                printf("姓名:%s\n",p->name); 
                printf("单位:%s\n",p->part);
                flag++;
            }
            p = p->next;
        }
        if(flag==0)
            printf("查无此人\n");
    
        return flag;
    }
    
    
    
    
    //修改手机信息
    void ModInfo(struct StNode* head)
    {
        int nmb = 0,i,j;
        struct StNode* p = head;
        struct StNode* arr[30];
        char name[40]={0};
        system("cls");
        printf("请输入手机号或者姓名或者部门:"); 
        scanf("%s",&name);
    
        while(p)
        {
            if( (strcmp(p->name,name) ==0) || (strcmp(p->num,name) ==0) || (strcmp(p->part,name) ==0))
            {
                printf("手机号:%d\n",p->num);
                printf("姓名:%s\n",p->name); 
                printf("单位:%s\n",p->part);
                arr[nmb] = p;
                nmb++;
            }
            p = p->next;
        }
        if(nmb==0)
            printf("查无此人\n");
    
    
        while(nmb != 1)
        {
            j = 0;
            printf("存在多条信息,请输入更多信息:"); 
            scanf("%s",name);
            for (i=0;i<nmb;i++)
            {
                p = arr[i];
                if( (strcmp(p->name,name) ==0) || (strcmp(p->num,name) ==0) || (strcmp(p->part,name) ==0))
                {
                    //printf("手机号:%d\n",p->num);
                    //printf("姓名:%s\n",p->name); 
                    //printf("单位:%s\n",p->part);
                    arr[j++] = p;
                }
            }
            nmb = j;
            if(nmb == 0)
            {
                printf("查无此人\n");
                system("pause");
                return ;
            }
        }
        //
        printf("请输入姓名:"); 
        scanf("%s",arr[0]->name);
        printf("请输入单位:");
        scanf("%s",arr[0]->part);
        printf("修改完成");
        system("pause");
    }
    
    int main()
    {
        struct StNode* head = 0;
        int opt = 0;
        int bgo = 1;
        char* filename = "students.txt";
    
        while(bgo)
        {
            system("cls");
            printf("--------------手机信息管理系统---------------|\n");
            printf("|   1.录入手机信息                           |\n");
            printf("|   2.显示所有手机信息                       |\n");
            printf("|   3.手机信息查询                           |\n");
            printf("|   4.手机信息修改                           |\n");
            printf("|   0.退出系统                               |\n");
            printf("----------------------------------------------\n");
            scanf("%d",&opt);
            switch(opt)
            {
            case 0:
                bgo = 0;
                break;
            case 1:
                head = Input(head);
                break;
            case 2:
                showAll(head);
                break;
            case 3:
                Find(head);
                system("pause");
                break;
            case 4:
                ModInfo(head);
                break;
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月4日
  • 已采纳回答 10月27日
  • 创建了问题 10月26日

悬赏问题

  • ¥15 bat批处理,关于数据复制问题
  • ¥50 同步两个不同结果的array中某些属性
  • ¥15 悬赏15远程操控解决问题
  • ¥15 CST复制的模型无法单独修改参数?
  • ¥15 前端页面想做个定时任务,但是使用requestAnimationFrame,setinterval和settimeout都不行
  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)