Destiny_ing 2024-05-29 17:43 采纳率: 71%
浏览 1
已结题

怎样修改这个缺失功能的程序呢?

img

img

img

img

img

img

img

img


以上是所有代码。
实现的功能就是把文件中的数据,
然后传递在程序里,
然后对文件数据进行增删查改的功能,
怎样实现呢,
每个子函数应该如何修改呢?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-29 17:43
    关注

    引自免费微信小程序:皆我百晓生

    为了实现所需功能,你需要对现有代码进行一些修改和补充。下面是详细的修改步骤和代码示例。

    首先,修复代码格式和错误,确保编译器可以正确解析。以下是修正后的代码,包括结构体定义、函数声明和主函数部分:

    #include <stdio.h>
    #include <string.h>
    #include <windows.h>
    
    #define MAX_CONTACTS 100
    
    typedef struct stu {
        char name[20];
        char sex[20];
        int dianhua;
        float year;
        char leibie[20];
    } Stu;
    
    typedef struct txl {
        Stu sz[MAX_CONTACTS];
        int size;
    } Txl;
    
    void caidan(Txl *qw);
    void xinjian(Txl *qw);
    void xianshi(const Txl *qw);
    void chazhao(const Txl *qw, const char *target_name);
    void shanchu(Txl *qw, const char *target_name);
    void xiugai(Txl *qw, const char *target_name);
    void tianjia(Txl *qw);
    void duanqiao(Stu sz[], FILE *fp);
    void shuchu(Stu sz[], FILE *fp);
    
    int main() {
        Txl qw;
        qw.size = 0;
    
        FILE *fp_in = fopen("jieke_design.txt", "r");
        if (fp_in == NULL) {
            printf("无法打开文件\n");
            return -1;
        }
        duanqiao(qw.sz, fp_in);
        fclose(fp_in);
    
        FILE *fp_out = fopen("data.txt", "w");
        if (fp_out == NULL) {
            printf("无法打开文件\n");
            return -1;
        }
    
        while (true) { // 添加死循环使其持续出现菜单
            caidan(&qw);
            int n;
            scanf("%d", &n);
    
            switch (n) {
                case 1:
                    xinjian(&qw);
                    printf("建立成功。\n");
                    system("pause");
                    system("cls");
                    break;
                case 2:
                    xianshi(&qw);
                    system("pause");
                    system("cls");
                    break;
                case 3:
                    char target_name[20];
                    printf("请输入你要查找的人的姓名:");
                    scanf("%s", target_name);
                    chazhao(&qw, target_name);
                    system("pause");
                    system("cls");
                    break;
                case 4:
                    char delete_name[20];
                    printf("请输入你要删除联系人的姓名:");
                    scanf("%s", delete_name);
                    shanchu(&qw, delete_name);
                    system("pause");
                    system("cls");
                    break;
                case 5:
                    char modify_name[20];
                    printf("请输入你要修改的人的姓名:");
                    scanf("%s", modify_name);
                    xiugai(&qw, modify_name);
                    system("pause");
                    system("cls");
                    break;
                case 6:
                    tianjia(&qw);
                    system("pause");
                    system("cls");
                    break;
                case 7:
                    shuchu(qw.sz, fp_out);
                    fclose(fp_out);
                    exit(0);
                    break;
                default:
                    printf("无效选项,请重新选择。\n");
                    break;
            }
        }
        return 0;
    }
    

    接下来,修复xiugai()函数中的逻辑错误。在找到目标联系人时,需要更新其信息而不是替换整个结构体:

    void xiugai(Txl *qw, const char *target_name) {
        int i;
        for (i = 0; i < qw->size; i++) {
            if (strcmp(qw->sz[i].name, target_name) == 0) {
                printf("请输入你要修改的人的信息:\n");
                xinjian(qw);
                break;
            }
        }
        if (i >= qw->size) {
            printf("未找到相应的联系人。\n");
        }
    }
    

    最后,为chazhao()函数添加一个参数const char *target_name,以便在查找过程中使用:

    void chazhao(const Txl *qw, const char *target_name) {
        int i;
        printf("请输入你要查找的人的姓名:");
        scanf("%s", target_name);
        for (i = 0; i < qw->size; i++) {
            if (strcmp(qw->sz[i].name, target_name) == 0) {
                xianshi(qw);
                break;
            }
        }
        if (i >= qw->size) {
            printf("未查找到相应联系人。\n");
        }
    }
    

    现在,这个程序已经实现了基本的联系人管理功能,包括新建、显示、查找、删除和修改联系人。注意,由于C语言不支持异常处理,因此在文件操作时,你可能需要添加更多的错误检查来防止意外情况。同时,为了提高代码可读性,建议将输入和输出函数分开,例如分别为用户输入和从文件中读取输入提供单独的函数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 5月29日

悬赏问题

  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥35 跳过我的世界插件ip验证
  • ¥15 抖音看过的视频,缓存在哪个文件
  • ¥15 自定义损失函数报输入参数的数目不足
  • ¥15 如果我想学习C大家有是的的资料吗
  • ¥15 根据文件名称对文件进行排序
  • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
  • ¥15 有人会用py或者r画这种图吗