专业做国际网站的公司,百度地图导航下载安装,设计类素材网站,西安企业做网站物联1251xcjie题目一#xff1a;数据持久化——增加与保存1任务#xff1a;使⽤ fprintf 函数将数组内容持久化存储到名为 farms.txt 的⽂本⽂件中。
⽂件操作重点#xff1a;使⽤ “w” 模式打开⽂件#xff0c;掌握 fprintf 的格式化写⼊。
要求#xff1a;每⾏存储⼀个…物联1251xcjie题目一数据持久化——增加与保存1任务使⽤ fprintf 函数将数组内容持久化存储到名为 farms.txt 的⽂本⽂件中。⽂件操作重点使⽤ “w” 模式打开⽂件掌握 fprintf 的格式化写⼊。要求每⾏存储⼀个产地的信息字段间⽤空格分隔。#include stdio.h #include stdlib.h typedef struct{ int id; char name[50]; int yield; }OrangeFarm; int main(){ OrangeFarm new_farm; FILE*fp; printf(---廉江红橙产地数据追加---\n); printf(请输入新增产地信息格式ID 名称 产量\n); if(scanf(%d%s%d,new_farm.id,new_farm.name,new_farm.yield)!3){ printf(输入格式错误。\n); return 1; } fpfopen(farms.txt,a); if(fpNULL){ printf(错误无法打开文件进行追加\n); return 1; } fprintf(fp,%d%s%d\n,new_farm.id,new_farm.name,new_farm.yield); fclose(fp); printf(\n新纪录已成功追加至farms.txt末尾。\n); return 0; }题⽬ 2数据过滤——读取与删除【任务】先将 farms.txt 中的所有数据加载到结构体数组中。⽤户输⼊⼀个要删除的“产地ID”程序在数组中剔除该条⽬后将剩余数据重新覆盖写⼊ farms.txt 。⽂件操作重点使⽤ “r” 模式读取 feof() 或 fscanf() ! EOF 判断⽂件结尾。删除逻辑在内存数组中完成删除再通过重新打开⽂件并写⼊来实现“物理删除”。#include stdio.h #include string.h #include stdlib.h typedef struct{ int id; char name[50]; int yield; }OrangeFarm; int main(){ OrangeFarm farms[100]; int count0; int deleted; char confirm; FILE*fp; fpfopen(farms.txt,r); if(fpNULL){ printf(错误无法打开farms.txt,请确保文件已存在。\n); return 1; } while(fscanf(fp,%d%s%d,farms[count].id,farms[count].name,farms[count].yield)3){ count; } fclose(fp); if(count0){ printf(数据库为空无数据可删除。\n); return 0; } printf(\n--- 当前廉江红橙产地列表 ---\n); for (int i 0; i count; i) { printf([%d] %-12s, farms[i].id, farms[i].name); if ((i 1) % 3 0) { printf(\n); } } printf(\n---------------------------\n); printf(请输?要删除的产地 ID: ); scanf(%d, deleted); int targetIndex -1; for (int i 0; i count; i) { if (farms[i].id deleted) { targetIndex i; break; } } if (targetIndex -1) { printf(错误未找到 ID 为 %d 的记录。\n, deleted); return 0; } printf(\n拟删除记录详情\n); printf(ID: %d | 名称: %s | 产量: %d 吨\n, farms[targetIndex].id, farms[targetIndex].name, farms[targetIndex].yield); printf(警告此操作不可撤回确定删除吗(y/n): ); getchar(); scanf(%c, confirm); if (confirm ! y confirm ! Y) { printf(操作已安全取消。\n); return 0; } for (int i targetIndex; i count - 1; i) { farms[i] farms[i 1]; } count--; fp fopen(farms.txt, w); if (fp NULL) { printf(系统错误?法更新?件数据。\n); return 1; } for (int i 0; i count; i) { fprintf(fp, %d %s %d\n, farms[i].id, farms[i].name, farms[i].yield); } fclose(fp); printf(成功ID 为 %d 的记录已从系统中彻底移除。\n, deleted); return 0; }题⽬ 3精准更新——加载与修改【任务】实现交互式修改。程序打开⽂件并加载所有 ID 供⽤户预览。⽤户输⼊⽬标 ID。程序提⽰⽤户选择修改项1.修改名称 2.修改产量。⽤户输⼊新值后程序更新数组并同步回⽂件。⽂件操作重点掌握“内存加载 - 修改 - 重新回写”的完整链路。要求利⽤ switch-case 结构处理⽤户的修改选择。#include stdio.h #include string.h #include stdlib.h typedef struct { int id; char name[50]; int yield; } OrangeFarm; int main() { OrangeFarm farms[100]; int count 0; int targetId, choice; FILE *fp; fp fopen(farms.txt, r); if (fp NULL) { printf(错误非法打开 farms.txt请确保文件已存在。\n); return 1; } while (fscanf(fp, %d %s %d, farms[count].id, farms[count].name, farms[count].yield) 3) { count; } fclose(fp); if (count 0) { printf(数据库为空请先添加数据。\n); return 0; } printf(--- 当前系统内的产地 ID 列表 ---\n); for (int i 0; i count; i) { printf([%d] %-12s, farms[i].id, farms[i].name); if ((i 1) % 3 0) { printf(\n); } } printf(\n-------------------------------\n); printf(请输入您想要修改的产地 ID: ); scanf(%d, targetId); int index -1; for (int i 0; i count; i) { if (farms[i].id targetId) { index i; break; } } if (index -1) { printf(未找到 ID 为 %d 的记录。\n, targetId); return 0; } printf(\n已锁定产地: %s (产量: %d 吨)\n, farms[index].name, farms[index].yield); printf(1. 修改产地名称\n); printf(2. 修改预计产量\n); printf(3. 取消修改\n); printf(请选择操作 (1-3): ); scanf(%d, choice); switch (choice) { case 1: printf(请输入新的名称: ); scanf(%s, farms[index].name); break; case 2: printf(请输入新的产量 (吨): ); scanf(%d, farms[index].yield); break; case 3: printf(操作已取消。\n); return 0; default: printf(非法输入操作终止。\n); return 0; } fp fopen(farms.txt, w); if (fp NULL) { printf(回写文件失败\n); return 1; } for (int i 0; i count; i) { fprintf(fp, %d %s %d\n, farms[i].id, farms[i].name, farms[i].yield); } fclose(fp); printf(ID 为 %d 的记录已成功更新。\n, targetId); return 0; }题⽬ 4条件检索——读取与查询【任务】编写⼀个查询⼯具。⽤户输⼊⼀个“产量阈值”程序打开⽂件读取数据通过遍历结构体数组筛选并打印出所有产量⼤于该阈值的产地信息。⽂件操作重点使⽤循环配合 fscanf 逐⾏解析数据。逻辑重点考查结构体成员的访问与逻辑判断表达式。#include stdio.h #include stdlib.h typedef struct { int id; char name[50]; int yield; } OrangeFarm; int main() { FILE *fp; OrangeFarm temp; int threshold; int foundCount 0; fp fopen(farms.txt, r); if (fp NULL) { printf(错误无法打开数据文件 farms.txt请确保文件已存在。\n); return 1; } printf(----------- 廉江红橙产量筛选系统 -----------\n); printf(请输入产量阈值吨); if (scanf(%d, threshold) ! 1) { printf(输入无效。\n); fclose(fp); return 1; } printf(\n正在查询产量大于 %d 吨的产地...\n, threshold); printf(-------------------------------------------\n); printf(%-10s %-20s %-10s\n, ID, 产地名称, 预计产量(吨)); printf(-------------------------------------------\n); while (fscanf(fp, %d %s %d, temp.id, temp.name, temp.yield) 3) { if (temp.yield threshold) { printf(%-10d %-20s %-10d\n, temp.id, temp.name, temp.yield); foundCount; } } if (foundCount 0) { printf(未找到产量超过 %d 吨的记录。\n, threshold); } else { printf(-------------------------------------------\n); printf(查询完毕共找到 %d 条记录。\n, foundCount); } fclose(fp); return 0; }