求一大佬讲解一下这个植物管理系统的大致解决思路。12345648913198184643161994994343135186628
求一大佬给我讲下大致思路
求一大佬讲解一下这个植物管理系统的大致解决思路。12345648913198184643161994994343135186628
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 PointNet++的onnx模型只能使用一次
- ¥20 西南科技大学数字信号处理
- ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
- ¥30 STM32 INMP441无法读取数据
- ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。