weixin_71531531 2022-11-29 09:52 采纳率: 42.9%
浏览 27
已结题

通讯薄管理过程和代码

通讯薄管理 要求:(1)依次输入通讯薄的编号,用户名和电话号码,并生成一个.txt文本文件。
(2)可添加和删除通讯薄中的内容。
(3)可以修改通讯薄中某个用户的用户名或电话号码。
要过程和代码

  • 写回答

4条回答 默认 最新

  • 关注

    通讯录管理运行结果:

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct StNode
    {
        char num[12];  //编号
        char name[20];  //用户名
        char phone[40];  //电话号码
        StNode* next;
    };
    
    const char* filename = "record.txt";
    
    //读文件
    struct StNode* ReadFile()
    {
        struct StNode* head = 0;
        struct StNode* p, * t=0;
        FILE* fp = fopen(filename, "r");
        if (fp == 0)
        {
            printf("文件打开失败\n");
            return head;
        }
        while (!feof(fp))
        {
            p = (struct StNode*)malloc(sizeof(struct StNode));
            p->next = 0;
            p->num[0] = 0;
            p->name[0] = 0;
            p->phone[0] = 0;
            fscanf(fp, "%s %s %s", p->num, p->name, p->phone);
            if (strlen(p->phone) > 0) //
            {
                if (head == 0)
                {
                    head = p;
                    t = p;
                }
                else
                {
                    t->next = p;
                    t = p;
                }
            }
            else
                free(p);
            
        }
        fclose(fp);
        return head;
    }
    
    //写文件
    void WriteFile(struct StNode* head)
    {
        struct StNode* p=0;
        FILE* fp = fopen(filename, "w");
        p = head;
        while (p)
        {
            fprintf(fp, "%s %s %s\n", p->num, p->name, p->phone);
            p = p->next;
        }
        fclose(fp);
        fp = 0;
    }
    
    //录入信息
    struct StNode* Input(struct StNode* head)
    {
        struct StNode* p, * node, * t;
        system("cls");
        node = (struct StNode*)malloc(sizeof(struct StNode));
    
        printf("请输入编号:");
        scanf("%s", node->num);
        printf("请输入姓名:");
        scanf("%s", node->name);
        //录入信息
        printf("请输入手机号:");
        scanf("%s", node->phone);
    
        //判断输入的手机号是否已经存在
        t = head;
        while (t)
        {
            if (strcmp(t->phone, node->phone) == 0)
            {
                printf("该号码已存在,请重新输入:");
                scanf("%s", node->phone);
                t = head;
            }
            else
                t = t->next;
        }
    
        node->next = 0;
        if (head == 0)
        {
            head = node;
        }
        else
        {
            p = head;
            while (p->next)
                p = p->next;
            //新建节点
            p->next = node;
        }
    
        //写入文件
        WriteFile(head);
        system("pause");
        return head;
    }
    //显示所有手机信息
    void showAll(struct StNode* head)
    {
        struct StNode* p;
        int i = 1;
        system("cls");
        p = head;
        while (p)
        {
            printf("编号:%s\n", p->num);
            printf("姓名:%s\n", p->name);
            printf("手机号:%s\n",p->phone);
            i++;
            p = p->next;
        }
        system("pause");
    }
    
    //删除信息
    struct StNode* Del(struct StNode* head)
    {
        char tmp[40] = { 0 };
        struct StNode* p, * t;
        p = head;
        printf("请输入需要删除的手机号或者姓名:");
        scanf("%s", tmp);
    
        if (strcmp(head->name, tmp) == 0 || strcmp(head->phone, tmp) == 0)
        {
            p = head->next;
            free(head);
            head = p;
            return head;
        }
        p = head;
        t = head->next;
        while (t)
        {
            if (strcmp(t->name, tmp) == 0 || strcmp(t->phone, tmp) == 0)
            {
                printf("删除人员信息为:\n");
                printf("编号:%s\n", t->num);
                printf("姓名:%s\n", t->name);
                printf("手机号:%s\n", t->phone);
                p->next = t->next;
                free(t);
                break;
            }
        }
        system("pause");
        return head;
    }
    
    
    //查询信息
    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->phone, name) == 0))
            {
                printf("编号:%s\n", p->num);
                printf("姓名:%s\n", p->name);
                printf("手机号:%s\n", p->phone);
                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))
            {
                printf("编号:%s\n", p->num);
                printf("姓名:%s\n", p->name);
                printf("手机号:%s\n", p->phone);
                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) )
                {
                    arr[j++] = p;
                }
            }
            nmb = j;
            if (nmb == 0)
            {
                printf("查无此人\n");
                system("pause");
                return;
            }
        }
        //
        printf("请输入姓名:");
        scanf("%s", arr[0]->name);
        printf("请输入手机号:");
        scanf("%s", arr[0]->phone);
        printf("修改完成");
        system("pause");
    }
    int main()
    {
        struct StNode* head = 0;
        int opt = 0;
        int bgo = 1;
        head = ReadFile();
        while (bgo)
        {
            system("cls");
            printf("-------------------通讯薄管理----------------|\n");
            printf("|   1.录入手机信息                           |\n");
            printf("|   2.显示所有手机信息                       |\n");
            printf("|   3.手机信息查询                           |\n");
            printf("|   4.手机信息修改                           |\n");
            printf("|   5.删除信息                               |\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;
            case 5:
                head = Del(head);
                break;
            }
        }
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 创建了问题 11月29日

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)