超级敢敢 2023-03-30 09:44 采纳率: 100%
浏览 28
已结题

求一大佬给我讲下大致思路

img


求一大佬讲解一下这个植物管理系统的大致解决思路。12345648913198184643161994994343135186628

  • 写回答

2条回答 默认 最新

  • apples_kk 2023-03-30 11:01
    关注
    
    #include <stdio.h>
    #include <string.h>
    
    #define MAX_PLANTS 100   // 最多存储100种植物
    #define MAX_NAME_LEN 50  // 植物名称最大长度
    #define MAX_DESC_LEN 100 // 植物描述最大长度
    
    // 定义植物结构体
    typedef struct
    {
        char name[MAX_NAME_LEN];   // 植物名称
        char family[MAX_NAME_LEN]; // 科属
        char desc[MAX_DESC_LEN];   // 特征、用途等信息
    } Plant;
    
    // 定义函数原型
    void add_plant(Plant plants[], int *num_plants, const char *filename);
    void query_plant(Plant plants[], int num_plants);
    void modify_plant(Plant plants[], int num_plants, const char *filename);
    void delete_plant(Plant plants[], int *num_plants, const char *filename);
    
    int main()
    {
        Plant plants[MAX_PLANTS];
        int num_plants = 0;
        char filename[] = "plants.txt";
    
        // 读取已保存的植物信息
        FILE *fp = fopen(filename, "r");
        if (fp != NULL)
        {
            while (num_plants < MAX_PLANTS && fscanf(fp, "%s %s %[^\n]", plants[num_plants].name, plants[num_plants].family, plants[num_plants].desc) == 3)
            {
                num_plants++;
            }
            fclose(fp);
        }
    
        int choice;
        do
        {
            printf("\n植物管理系统\n");
            printf("1. 录入植物信息\n");
            printf("2. 查询植物信息\n");
            printf("3. 修改植物信息\n");
            printf("4. 删除植物信息\n");
            printf("0. 退出\n");
            printf("请选择功能:");
            scanf("%d", &choice);
    
            switch (choice)
            {
            case 1:
                add_plant(plants, &num_plants, filename);
                break;
            case 2:
                query_plant(plants, num_plants);
                break;
            case 3:
                modify_plant(plants, num_plants, filename);
                break;
            case 4:
                delete_plant(plants, &num_plants, filename);
                break;
            case 0:
                printf("退出植物管理系统。\n");
                break;
            default:
                printf("输入错误,请重新输入。\n");
                break;
            }
        } while (choice != 0);
    
        return 0;
    }
    
    // 录入植物信息
    void add_plant(Plant plants[], int *num_plants, const char *filename)
    {
        if (*num_plants == MAX_PLANTS)
        {
            printf("已达到最大植物数量,无法录入新的植物。\n");
            return;
        }
    
        Plant new_plant;
        printf("请输入植物名称:");
        scanf("%s", new_plant.name);
        printf("请输入植物科属:");
        scanf("%s", new_plant.family);
        printf("请输入植物描述:");
        scanf(" %[^\n]", new_plant.desc);
    
        // 将新植物信息添加到数组末尾
        plants[*num_plants] = new_plant;
        (*num_plants)++;
    
        // 将新植物信息保存到文件中
        FILE *fp = fopen(filename, "a");
        if (fp != NULL)
        {
            fprintf(fp, "%s %s %s\n", new_plant.name, new_plant.family, new_plant.desc);
            fclose(fp);
        }
        else
        {
            printf("无法保存植物信息到文件 %s。\n", filename);
        }
        printf("植物信息已录入成功。\n");
    }
    
    // 查询植物信息
    void query_plant(Plant plants[], int num_plants)
    {
        char query[MAX_NAME_LEN];
        printf("请输入要查询的植物名称或科属:");
        scanf("%s", query);
        int found = 0;
        for (int i = 0; i < num_plants; i++)
        {
            if (strcmp(query, plants[i].name) == 0 || strcmp(query, plants[i].family) == 0)
            {
                printf("植物名称:%s\n", plants[i].name);
                printf("植物科属:%s\n", plants[i].family);
                printf("植物描述:%s\n", plants[i].desc);
                found = 1;
            }
        }
    
        if (!found)
        {
            printf("未找到匹配的植物信息。\n");
        }
    }
    
    // 修改植物信息
    void modify_plant(Plant plants[], int num_plants, const char *filename)
    {
        char query[MAX_NAME_LEN];
        printf("请输入要修改的植物名称:");
        scanf("%s", query);
        int found = 0;
        for (int i = 0; i < num_plants; i++)
        {
            if (strcmp(query, plants[i].name) == 0)
            {
                printf("请输入新的植物科属:");
                scanf("%s", plants[i].family);
                printf("请输入新的植物描述:");
                scanf(" %[^\n]", plants[i].desc);
                found = 1;
            }
        }
    
        if (found)
        {
            // 将修改后的植物信息保存到文件中
            FILE *fp = fopen(filename, "w");
            if (fp != NULL)
            {
                for (int i = 0; i < num_plants; i++)
                {
                    fprintf(fp, "%s %s %s\n", plants[i].name, plants[i].family, plants[i].desc);
                }
                fclose(fp);
            }
            else
            {
                printf("无法保存植物信息到文件 %s。\n", filename);
            }
            printf("植物信息已修改成功。\n");
        }
        else
        {
            printf("未找到匹配的植物信息,无法修改。\n");
        }
    }
    
    // 删除植物信息
    void delete_plant(Plant plants[], int *num_plants, const char *filename)
    {
        char query[MAX_NAME_LEN];
        printf("请输入要删除的植物名称:");
        scanf("%s", query);
        int found = 0;
        for (int i = 0; i < *num_plants; i++)
        {
            if (
                strcmp(query, plants[i].name) == 0)
            {
                // 将该植物信息从数组中删除
                for (int j = i; j < *num_plants - 1; j++)
                {
                    plants[j] = plants[j + 1];
                }
                (*num_plants)--;
                found = 1;
            }
        }
    
        if (found)
        {
            // 将更新后的植物信息保存到文件中
            FILE *fp = fopen(filename, "w");
            if (fp != NULL)
            {
                for (int i = 0; i < *num_plants; i++)
                {
                    fprintf(fp, "%s %s %s\n", plants[i].name, plants[i].family, plants[i].desc);
                }
                fclose(fp);
            }
            else
            {
                printf("无法保存植物信息到文件 %s。\n", filename);
            }
            printf("植物信息已删除。\n");
        }
        else
        {
            printf("未找到匹配的植物信息,无法删除。\n");
        }
    }
    
    // 主函数
    int main()
    {
        // 从文件中读取已有的植物信息
        Plant plants[MAX_PLANTS];
        int num_plants = 0;
        const char *filename = "plants.txt";
        FILE *fp = fopen(filename, "r");
        if (fp != NULL)
        {
            char name[MAX_NAME_LEN];
            char family[MAX_FAMILY_LEN];
            char desc[MAX_DESC_LEN];
            while (fscanf(fp, "%s %s %[^\n]", name, family, desc) == 3 && num_plants < MAX_PLANTS)
            {
                strcpy(plants[num_plants].name, name);
                strcpy(plants[num_plants].family, family);
                strcpy(plants[num_plants].desc, desc);
                num_plants++;
            }
            fclose(fp);
        }
        // 显示菜单并根据用户输入执行相应的操作
        int choice;
        do
        {
            printf("欢迎使用植物管理系统!\n");
            printf("1. 录入植物信息\n");
            printf("2. 查询植物信息\n");
            printf("3. 修改植物信息\n");
            printf("4. 删除植物信息\n");
            printf("0. 退出系统\n");
            printf("请选择操作(0-4):");
            scanf("%d", &choice);
    
            switch (choice)
            {
            case 1:
                add_plant(plants, &num_plants, filename);
                break;
            case 2:
                query_plant(plants, num_plants);
                break;
            case 3:
                modify_plant(plants, num_plants, filename);
                break;
            case 4:
                delete_plant(plants, &num_plants, filename);
                break;
            case 0:
                printf("谢谢使用植物管理系统!\n");
                break;
            default:
                printf("无效的操作,请重新选择。\n");
                break;
            }
        } while (choice != 0);
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。