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

【C/C++】用C语言写一个数据仓库,存储和修改数据

        这个代码实现了一个简单的数据仓库,其中数据被存储在一个3x3的二维数组中。用户可以通过控制台界面与这个数据仓库进行交互,可以选择查看数据或者修改数据。

基础版源码:

#include <stdio.h>#define HOUSESIZE 3
int arr[HOUSESIZE][HOUSESIZE] = { 0 }; // 初始化所有元素为0void printHouseData() {for (int x = 0; x < HOUSESIZE; x++) {for (int y = 0; y < HOUSESIZE; y++) {printf("%d ", arr[x][y]);}printf("\n");}
}void changeHouseData(int row, int column, int value) {if (row >= 1 && row <= HOUSESIZE && column >= 1 && column <= HOUSESIZE) {arr[row - 1][column - 1] = value;}else {printf("输入的行列值超出范围!\n");}
}int main() {printf("欢迎使用数据仓库\n");printf("请选择功能:\n");printf("1.查看数据仓库\n");printf("2.修改数据仓库数据\n");printf("输入0退出程序\n");int userinput;while (1) {scanf("%d", &userinput);if (userinput == 0) {break; // 允许用户通过输入0来退出程序}switch (userinput) {case 1:printHouseData();break;case 2:int row, column, value;printf("请输入你要改变数据的行、列、值(用空格分隔):\n");if (scanf("%d %d %d", &row, &column, &value) != 3) {printf("输入错误,请重新输入!\n");continue; // 输入错误时跳过本次循环,重新提示用户输入}changeHouseData(row, column, value);break;default:printf("输入错误,请重新选择功能!\n");break;}}return 0;
}  

这个程序只是一个比较简单的部分:

不能实现数据永久存储,程序后数据就没了造成。

如果想做成可以永久存储数据的仓库则需要加一个函数能够使它以txtxtxt形式存储到系统当中。

每次程序运行后都会读取数据。

 升级版源码:

#include <stdio.h>// ... 其他代码保持不变 ...void saveHouseDataToFile(const char* filename) {
FILE* file = fopen(filename, "w"); // 打开文件进行写入
if (file == NULL) {
perror("Error opening file");
return;
}for (int x = 0; x < HOUSESIZE; x++) {
for (int y = 0; y < HOUSESIZE; y++) {
fprintf(file, "%d ", arr[x][y]); // 将每个元素写入文件
}
fprintf(file, "\n"); // 每行结束后写入换行符
}fclose(file); // 关闭文件
}// ... 其他代码保持不变 ...int main() {
// ... 其他代码保持不变 ...// 假设我们想在程序结束时保存数据到文件
saveHouseDataToFile("house_data.txt");return 0;
}

从文件读取数据

接下来,您需要添加一个函数来从文件中读取数据并初始化 arr 数组。这可以通过使用 fscanf 函数来实现。

#include <stdio.h>// ... 其他代码保持不变 ...void loadHouseDataFromFile(const char* filename) {
FILE* file = fopen(filename, "r"); // 打开文件进行读取
if (file == NULL) {
perror("Error opening file");
return;
}for (int x = 0; x < HOUSESIZE; x++) {
for (int y = 0; y < HOUSESIZE; y++) {
if (fscanf(file, "%d", &arr[x][y]) != 1) {
perror("Error reading file");
fclose(file);
return;
}
}
}fclose(file); // 关闭文件
}int main() {
// 在程序开始时从文件加载数据
loadHouseDataFromFile("house_data.txt");// ... 其他代码保持不变 ...return 0;
}

注意事项

  1. 错误处理:在实际应用中,您需要更详细地处理文件操作可能发生的错误。上面的示例代码只是简单地打印了错误信息,但在生产环境中,您可能需要更复杂的错误处理逻辑。

  2. 文件路径:确保您知道文件将保存在哪里,以及程序有权限在那里读写文件。

  3. 数据完整性:如果文件中的数据不完整或格式不正确,加载数据的过程可能会失败。您应该添加适当的检查来确保数据的完整性。

  4. 文件格式:上面的示例使用纯文本格式存储数据,这对于简单的程序可能足够了。但对于更复杂的应用程序,您可能需要使用更复杂的文件格式或序列化技术,如JSON、XML或二进制格式。

  5. 安全性:当处理文件时,安全性是一个重要的考虑因素。确保您的程序不会受到恶意文件或意外输入的影响。

这个程序也可以使用Java来写

java源码:

import java.util.Scanner;public class HouseData {private static final int HOUSESIZE = 3;private static int[][] arr = new int[HOUSESIZE][HOUSESIZE]; // 初始化所有元素为0public static void printHouseData() {for (int x = 0; x < HOUSESIZE; x++) {for (int y = 0; y < HOUSESIZE; y++) {System.out.print(arr[x][y] + " ");}System.out.println();}}public static void changeHouseData(int row, int column, int value) {if (row >= 1 && row <= HOUSESIZE && column >= 1 && column <= HOUSESIZE) {arr[row - 1][column - 1] = value;} else {System.out.println("输入的行列值超出范围!");}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("欢迎使用数据仓库");System.out.println("请选择功能:");System.out.println("1.查看数据仓库");System.out.println("2.修改数据仓库数据");System.out.println("输入0退出程序");int userInput;while (true) {userInput = scanner.nextInt();if (userInput == 0) {break; // 允许用户通过输入0来退出程序}switch (userInput) {case 1:printHouseData();break;case 2:System.out.println("请输入你要改变数据的行、列、值(用空格分隔):");int row = scanner.nextInt();int column = scanner.nextInt();int value = scanner.nextInt();changeHouseData(row, column, value);break;default:System.out.println("输入错误,请重新选择功能!");break;}}scanner.close();}
}

相关文章:

【C/C++】用C语言写一个数据仓库,存储和修改数据

这个代码实现了一个简单的数据仓库&#xff0c;其中数据被存储在一个3x3的二维数组中。用户可以通过控制台界面与这个数据仓库进行交互&#xff0c;可以选择查看数据或者修改数据。 基础版源码&#xff1a; #include <stdio.h>#define HOUSESIZE 3 int arr[HOUSESIZE][…...

YOLO v5与YOLO v8框图比较

1. 介绍 YOLO (You Only Look Once) 是一个用于目标检测的卷积神经网络模型&#xff0c;以其高精度、高速度和易用性著称。YOLO v5 是目前最流行的 YOLO 版本之一&#xff0c;而 YOLO v8 是 YOLO 的最新版本。 2. 原理详解 YOLO 系列模型的基本原理是将目标检测任务转化为图…...

Redis集群(5)

集群原理 节点通信 通信流程 在分布式存储系统中&#xff0c;维护节点元数据&#xff08;如节点负责的数据、节点的故障状态等&#xff09;是关键任务。常见的元数据维护方式分为集中式和P2P方式。Redis集群采用P2P的Gossip协议&#xff0c;这种协议的工作原理是节点之间不断…...

STM32H5 DAC 配置

STM32 H5 DAC的详细初始化过程可以分为以下几个步骤&#xff0c;以下是根据参考文章和相关资料整理的具体步骤和参数设置&#xff1a; 1、使能相关时钟&#xff1a; 使能GPIOA&#xff08;或其他对应DAC输出引脚的GPIO端口&#xff09;的时钟。这通常是通过调用RCC_APB2Perip…...

第十九节:暴力递归到动态规划

一 动画规划的概念 优化出现重复解的递归 一旦写出递归来&#xff0c;改动态规划就很快 尝试策略和状态转移方程是一码事 学会尝试是攻克动态规划最本质的能力 如果你发现你有重复调用的过程&#xff0c;动态规划在算过一次之后把答案记下来&#xff0c;下回在越到重复调用过程…...

服务器部署spring项目jar包使用bat文件,省略每次输入java -jar了

echo off set pathC:\Program Files\Java\jre1.8.0_191\bin START "YiXiangZhengHe-8516" "%path%/java" -Xdebug -jar -Dspring.profiles.activeprod -Dserver.port8516 YiXiangZhengHe-0.0.1-SNAPSHOT.jar 将set path后面改成jre的bin文件夹 START 后…...

2024备忘知识点

1. adb shell dumpsys package f |grep fin 过滤查找指纹服务 &#xff11;&#xff0e; adsp write /sys/kernel/boot_adsp/boot 1 Please change replace dev_dbg into dev_err in kernel file adsp-loader.c. Then check whether "write /sys/kernel/boot_adsp/…...

JS基础与高级应用: 性能优化

在现代Web开发中&#xff0c;性能优化已成为前端工程师必须掌握的核心技能之一。本文从URL输入到页面加载完成的全过程出发&#xff0c;深入分析了HTTP协议的演进、域名解析、代码层面性能优化以及编译与渲染的最佳实践。通过节流、防抖、重复请求合并等具体技术手段&#xff0…...

Python | Leetcode Python题解之第145题二叉树的后序遍历

题目&#xff1a; 题解&#xff1a; class Solution:def postorderTraversal(self, root: TreeNode) -> List[int]:def addPath(node: TreeNode):count 0while node:count 1res.append(node.val)node node.righti, j len(res) - count, len(res) - 1while i < j:res…...

公司面试题总结(二)

7. 说说 JavaScript 中的数据类型&#xff1f;存储上的差别&#xff1f; • 基本类型&#xff1a; o Number o String o Boolean o Undefined o null o symbol • 引用类型 o Object o Array o Function • 声明变量时不同的内存地址分配&#xff1a; o 简单类型的…...

人脸识别和 ArcFace:用于深度人脸识别的附加角边际损失

在本文中,您将发现一种 ArcFace 方法,该方法可获得用于人脸识别的高分辨特征。阅读本文后,你将了解: 人脸识别任务如何工作。如何计算人脸匹配。SoftMax 和 ArcFace 的直观区别。ArcFace 的几何解释。ArcFace 背后的数学原理本文假定您已经熟悉用于多类分类、检测和 SoftMax…...

双标引领:汽车软件安全的ASPICE与ISO21434之道

随着汽车行业的飞速发展&#xff0c;尤其是智能化、网联化趋势的加剧&#xff0c;汽车软件开发的复杂性和安全性需求日益提升。在这样的背景下&#xff0c;ASPICE标准和ISO21434安全标准应运而生&#xff0c;为汽车软件的开发和管理提供了坚实的支撑。 ASPICE&#xff08;Auto…...

再度牵手,制造升级 | 毅达科技IMS OS+通用产品集+行业套件项目正式启动!

在数字化与智能制造的浪潮中&#xff0c;制造业企业纷纷加快转型步伐&#xff0c;力求通过技术创新实现生产效率与质量的双重提升。近日&#xff0c;广东毅达医疗科技股份有限公司&#xff08;以下简称“毅达科技”&#xff09;再次携手盘古信息&#xff0c;正式启动了IMS 数字…...

大疆智图_空三二维重建成果传输

一、软件环境 1.1 所需软件 1、 大疆智图&#xff1a;点击下载&#xff1b;   2、 ArcGIS Pro 3.1.5&#xff1a;点击下载&#xff0c;建议使用IDM或Aria2等多线程下载器&#xff1b;   3、 IDM下载器&#xff1a;点击下载&#xff0c;或自行搜索&#xff1b;   4、 Fas…...

python实现无人机航拍图片像素坐标转世界坐标

背景 已知相机参数&#xff08;传感器宽度和高度、图像宽度和高度、焦距、相对航高、像主点坐标 &#xff09;&#xff0c;在给定像素坐标的前提下&#xff0c;求世界坐标&#xff0c;大部分通过AI来实现&#xff0c;不知道哪个步骤有问题&#xff0c;望大家指正 脚本 impor…...

C#面:什么是 Windows 服务,它的生命周期与标准的 EXE 程序有什么不同

C#中的Windows服务是一种在后台运行的长时间运行的应用程序&#xff0c;它可以在Windows操作系统启动时自动启动&#xff0c;并在系统运行期间持续运行。与标准的EXE程序相比&#xff0c;Windows服务具有以下不同之处&#xff1a; 生命周期&#xff1a;Windows服务的生命周期与…...

Java基础面试题自测

文章目录 一、Java 中有哪 8 种基本数据类型&#xff1f;说说这 8 种基本数据类型对应的包装类型&#xff1f;二、包装类型的常量池技术了解么&#xff1f;三、为什么要有包装类型&#xff1f;四、什么是自动拆装箱&#xff1f;原理&#xff1f;四、遇到过自动拆箱引发的 NPE 问…...

【LeetCode 第 401 场周赛】K秒后第 N 个元素的值

文章目录 1. K秒后第 N 个元素的值&#x1f197; 1. K秒后第 N 个元素的值&#x1f197; 题目链接&#x1f517; &#x1f427;解题思路&#xff1a; 前缀和 小规律&#x1f34e; &#x1f34e; 从上图观察可知&#xff0c;规律一目了然&#xff0c;arr[i] arr[i] 对上一…...

游戏心理学Day10

习得性动机。 习得性动机也称社会性动机是指人与社会生活相联系的后天习得的动机&#xff0c;这类动机比原发性动机要多很多。 成就动机。 成就动机是指个人追求进步以及达到目标的内在动力。 在游戏中设计师总会担心过多的失败&#xff0c;会令玩家感到挫败进而离开游戏 对…...

MySQL表设计经验汇总篇

文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除&#xff0c;而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...