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

#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;
}