潍坊模板建站定制,中国工程建设领域网站,网站免费模板制作,wordpress欣赏c语言文件操作
linxiaomei
题目1. 数据持久化——增加与保存
编写程序#xff0c;从控制台输⼊ 5 个廉江红橙产地的信息#xff0c;将其存⼊结构体数组中#xff0c;并
使⽤ fprintf 函数将数组内容持久化存储到名为 farms.txt 的⽂本⽂件中。
⽂件操作重点#xff1a;使⽤…c语言文件操作linxiaomei题目1. 数据持久化——增加与保存编写程序从控制台输⼊ 5 个廉江红橙产地的信息将其存⼊结构体数组中并使⽤ fprintf 函数将数组内容持久化存储到名为 farms.txt 的⽂本⽂件中。⽂件操作重点使⽤ “w” 模式打开⽂件掌握 fprintf 的格式化写⼊。要求每⾏存储⼀个产地的信息字段间⽤空格分隔。#includestdio.h#includestdlib.htypedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){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);return1;}fpfopen(farms.txt,a);if(fpNULL){printf(错误:无法打开文件进行追加!\n);return1;}fprintf(fp,%d %s %d\n,new_farm.id,new_farm.name,new_farm.yield);fclose(fp);printf(\n新记录已成功追加至 farms.txt 末尾。\n);return0;}题目2.数据过滤——读取与删除先将 farms.txt 中的所有数据加载到结构体数组中。⽤户输⼊⼀个要删除的“产地IDˮ程序在数组中剔除该条⽬后将剩余数据重新覆盖写⼊ farms.txt 。⽂件操作重点使⽤ “r” 模式读取 feof() 或 fscanf() ! EOF 判断⽂件结尾。删除逻辑在内存数组中完成删除再通过重新打开⽂件并写⼊来实现“物理删除ˮ。说明数据⽐较重要删除前先进⾏确认⽂件⽆法像数据库那样直接“删除ˮ某⾏标准的做法是将⽂件全部读⼊内存数组 → 在数组中剔除⽬标条⽬ → 以“wˮ模式重新打开⽂件覆盖写⼊。#includestdio.h#includestring.h#includestdlib.htypedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){OrangeFarm farms[100];intcount0;intdeleteld;charconfirm;FILE*fp;fpfopen(farms.txt,r);if(fpNULL){printf(错误无法打开farms.txt请确保文件已存在。\n);return1;}while(fscanf(fp,%d %s %d,farms[count].id,farms[count].name,farms[count].yield)3){count;}fclose(fp);if(count0){printf(数据库为空?数据可删除。\n);return0;}printf(\n---当前廉江红橙产地列表---\n);inti;for(i0;icount;i){printf([%d] %-12s,farms[i].id,farms[i].name);if((i1)%30){printf(\n);}}printf(\n-------------------\n);printf(请输入要删除的产地ID:);scanf(%d,deleteld);inttargetlndex-1;for(i0;icount;i){if(farms[i].iddeleteld){targetlndexi;break;}}if(targetlndex-1){printf(错误未找到ID为%d的记录。\n,deleteld);return0;}printf(\n拟删除记录详情\n);printf(ID:%d|名称%s|产量%d吨\n,farms[targetlndex].id,farms[targetlndex].name,farms[targetlndex].yield);printf(警告此操作不可撤回确定删除吗?(y/n):);getchar();scanf(%c,confirm);if(confirm!yconfirm!Y){printf(操作已安全取消。\n);return0;}for(itargetlndex;icount-1;i){farms[i]farms[i1];}count--;fpfopen(farms.txt,w);if(fpNULL){printf(系统错误无法更新文件数据。\n);return1;}for(i0;icount;i){fprintf(fp,%d %s %d\n,farms[i].id,farms[i].name,farms[i].yield);}fclose(fp);printf(成功ID为%d的记录已从系统中彻底删除。\n,deleteld);return0;}题目3.精准更新——加载与修改实现交互式修改。程序打开⽂件并加载所有 ID 供⽤户预览。⽤户输⼊⽬标 ID。程序提⽰⽤户选择修改项1.修改名称 2.修改产量。⽤户输⼊新值后程序更新数组并同步回⽂件。⽂件操作重点掌握“内存加载 →→ 修改 →→ 重新回写ˮ的完整链路。要求利⽤ switch-case 结构处理⽤户的修改选择。#includestdio.h#includestring.h#includestdlib.htypedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){OrangeFarm farms[100];intcount0;inttargetld,choice;FILE*fp;fpfopen(farms.txt,r);if(fpNULL){printf(错误无法打开farms.txt,请确保文件已存在。\n);return1;}while(fscanf(fp,%d %s %d,farms[count].id,farms[count].name,farms[count].yield)3){count;}fclose(fp);if(count0){printf(数据库为空请先添加数据。\n);return0;}printf(---当前系统内的产地ID列表---\n);inti;for(i0;icount;i){printf([%d]%-12s,farms[i].id,farms[i].name);if((i1)%30){printf(\n);}}printf(\n------------------\n);printf(请输入您想要修改的产地 ID);scanf(%d,targetld);intindex-1;for(i0;icount;i){if(farms[i].idtargetld){index1;break;}}if(index-1){printf(未找到ID为%d的记录。\n,targetld);return0;}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){case1:printf(请输入新的名称);scanf(%s,farms[index].name);break;case2:printf(请输入新的产量(吨));scanf(%d,farms[index].yield);break;case3:printf(操作已取消。\n);return0;default:printf(非法输入操作终止。\n);return0;}fpfopen(farms.txt,w);if(fpNULL){printf(回写文件失败\n);return1;}for(i0;icount;i){fprintf(fp,%d %s %d\n,farms[i].id,farms[i].name,farms[i].yield);}fclose(fp);printf(ID为%d的记录已成功更新。\n,targetld);return0;}题目4.条件检索——读取与查询编写⼀个查询⼯具。⽤户输⼊⼀个“产量阈值ˮ程序打开⽂件读取数据通过遍历结构体数组筛选并打印出所有产量⼤于该阈值的产地信息。⽂件操作重点使⽤循环配合 fscanf 逐⾏解析数据。逻辑重点考查结构体成员的访问与逻辑判断表达式。#includestdio.h#includestdlib.htypedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){FILE*fp;OrangeFarm temp;intthreshold;intfoundCount0;fpfopen(farms.txt,r);if(fpNULL){printf(错误无法打开数据文件farms.txt,请确保文件已存在。\n);return1;}printf(----------廉江红橙产量筛选系统----------\n);printf(请输入产量阈值(吨));if(scanf(%d,threshold)!1){printf(输入无效。\n);fclose(fp);return1;}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.yieldthreshold){printf(%-10d %-20s %-10d\n,temp.id,temp.name,temp.yield);foundCount;}}if(foundCount0){printf(未找到产量超过%d吨的记录。\n,threshold);}else{printf(--------------------------------------------\n);printf(查询完毕共找到%d条记录。\n,foundCount);}fclose(fp);return0;}