当前位置: 首页 > news >正文

实验四代码

1

/*
project1_add. 增加数据
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id; // 产地ID
char name[50]; // 产地名称
int yield; // 产量(吨)
} OrangeFarm;
int main() {
OrangeFarm new_farm; // 本次只需定义?个结构体变量?于追加
FILE *fp;
// 1. 从控制台录?单条需要追加的数据
printf("--- 廉江红橙产地数据追加 ---\n");
printf("请输入新增产地信息(格式:ID 名称 产量):\n");
if (scanf("%d %s %d", &new_farm.id, new_farm.name, &new_farm.yield) != 3)
{
printf("输入格式错误。\n");
return 1;
}
// 2. 以追加模式("a")打开?件
// "a" 代表 append。如果?件不存在会创建;如果存在,指针直接指向?件末尾
fp = fopen("farms.txt", "a");
// 检查?件打开是否成功
if (fp == NULL) {
printf("错误:无法打开文件进行追加!\n");
return 1;
}
// 3. 使? fprintf 写?新数据
// 务必保留末尾的 \n,确保下?条追加的数据能另起??
fprintf(fp, "%d %s %d\n", new_farm.id, new_farm.name, new_farm.yield);
// 4. 关闭?件
fclose(fp);
printf("\n新记录已成功追加至farms.txt 末尾。\n");
return 0;
}

2


/*
project2_delete. 删除信息
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
int id;
char name[50];
int yield;
} OrangeFarm;
int main() {
OrangeFarm farms[100]; // 假设最多存储100个产地
int count = 0;
int deleteId;
char confirm;
FILE *fp;
// 1. 读取?件内容到内存数组
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;
}
// 2. 像题?3?样,先展?当前所有数据,每?3个并对?
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"); // 每?输出3个后换?
}
}
printf("\n---------------------------\n");
// 3. ?户输?要删除的 ID
printf("请输?要删除的产地 ID: ");
scanf("%d", &deleteId);
// 查找该 ID 所在的索引
int targetIndex = -1;
for (int i = 0; i < count; i++) {
if (farms[i].id == deleteId) {
targetIndex = i;
break;
}
}
if (targetIndex == -1) {
printf("错误:未找到 ID 为 %d 的记录。\n", deleteId);
return 0;
}
// 4. 显?具体信息并进?确认
printf("\n拟删除记录详情:\n");
printf("ID: %d | 名称: %s | 产量: %d 吨\n",
farms[targetIndex].id, farms[targetIndex].name,
farms[targetIndex].yield);
printf("警告:此操作不可撤回!确定删除吗?(y/n): ");

getchar(); // 清除之前输?的换?符,防? scanf 直接读取回?
scanf("%c", &confirm);
if (confirm != 'y' && confirm != 'Y') {
printf("操作已安全取消。\n");
return 0;
}
// 5. 在数组中进?“逻辑删除”
// 将?标位置之后的元素全部向前移动?位
for (int i = targetIndex; i < count - 1; i++) {
farms[i] = farms[i + 1];
}
count--; // 总数减1
// 6. 重新写回?件(覆盖模式)
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", deleteId);
return 0;
}

3

/*
project3_alter.修改信息
*/
#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;
// 1.加载数据到内存
fp = fopen("farms.txt", "r");
实验四【⽂件操作】
8
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;
}
// 2.展⽰已有ID,每⾏3个并对⻬
printf("---当前系统内的产地ID列表---\n");
for (int i = 0; i < count; i++) {
printf("[%d] %-12s", farms[i].id, farms[i].name); // %-12s保证名称左对⻬
if ((i + 1) % 3 == 0) {
printf("\n"); //每⾏输出3个后换⾏
}
}
printf("\n-------------------------------\n");
// 3.⽤户选择要修改的ID
printf("请输⼊您想要修改的产地ID: ");
scanf("%d", &targetId);
int index = -1;
for (int i = 0; i < count; i++) {
if (farms[i].id == targetId) {
index = i;
break;
}
}
实验四【⽂件操作】
9
if (index == -1) {
printf("未找到ID%d的记录。\n", targetId);
return 0;
}
// 4.选择修改项
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) { //使⽤switch-case处理多选项
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;
}
// 5.写回⽂件
fp = fopen("farms.txt", "w");
if (fp == NULL) {
printf("回写⽂件失败!\n");
return 1;
}
实验四【⽂件操作】
10
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;
}

http://www.jsqmd.com/news/151294/

相关文章:

  • 大模型推理延迟高?可能是你没用上TensorRT的INT8量化
  • 合规与认证准备:满足GDPR等数据隐私监管要求
  • vivado安装与开发工具集成:初学阶段实用建议
  • 如何用TensorRT镜像快速部署Llama 3、ChatGLM等热门模型?
  • ARM平台看门狗机制应用详解:稳定运行保障
  • 市场调研问卷设计:了解目标客户的真实痛点
  • 【车载开发系列】总线物理层规范上篇
  • 企业级AI部署标准流程:训练→导出→TensorRT引擎生成
  • 镜像签名与验签机制:防止供应链攻击的有效手段
  • 总结最佳实践:形成可复制的成功模式推广全国
  • 不知道吃什么,试试新开发的吃什么工具
  • 引领技术潮流:预研下一代TensorRT可能的方向
  • IAR使用教程:C++在嵌入式中的混合编程指南
  • 想卖GPU算力?先用TensorRT把性能拉满再说
  • 低成本运营大模型API?TensorRT + 批量推理最佳实践
  • C++:unordered_map/unordered_set 使用指南(差异、性能与场景选择)
  • 漏洞响应机制建立:及时修复公开披露的安全问题
  • 打造样板工程:树立几个标杆客户形成示范效应
  • C++:手把手实现 STL Set/Map(从零编写一棵红黑树到完整容器封装)
  • 如何在生产环境实现毫秒级大模型响应?TensorRT来帮你
  • 手把手教你使用NVIDIA TensorRT镜像部署开源大模型
  • 神经符号系统:连接符号逻辑与深度学习
  • Proteus示波器配合逻辑分析仪联合调试方案
  • 项目管理跨职能泳道图在线生成方法
  • 零基础学Proteus:8.9版本下载与安装详细步骤
  • 基于STM32的HID USB驱动实战案例
  • SDK工具包设计原则:简化第三方集成难度
  • 推动标准制定:参与AI推理优化相关行业规范起草
  • 举办线下Meetup:聚集本地AI开发者交流实践经验
  • JavaScript 核心知识点笔记(三)