当前位置: 首页 > 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();}
}

http://www.lryc.cn/news/369953.html

相关文章:

  • YOLO v5与YOLO v8框图比较
  • Redis集群(5)
  • STM32H5 DAC 配置
  • 第十九节:暴力递归到动态规划
  • 服务器部署spring项目jar包使用bat文件,省略每次输入java -jar了
  • 2024备忘知识点
  • JS基础与高级应用: 性能优化
  • Python | Leetcode Python题解之第145题二叉树的后序遍历
  • 公司面试题总结(二)
  • 人脸识别和 ArcFace:用于深度人脸识别的附加角边际损失
  • 双标引领:汽车软件安全的ASPICE与ISO21434之道
  • 再度牵手,制造升级 | 毅达科技IMS OS+通用产品集+行业套件项目正式启动!
  • 大疆智图_空三二维重建成果传输
  • python实现无人机航拍图片像素坐标转世界坐标
  • C#面:什么是 Windows 服务,它的生命周期与标准的 EXE 程序有什么不同
  • Java基础面试题自测
  • 【LeetCode 第 401 场周赛】K秒后第 N 个元素的值
  • 游戏心理学Day10
  • MySQL表设计经验汇总篇
  • Servlet基础(续集2)
  • 【云原生】创建harbor私有仓库及使用aliyun个人仓库
  • 什么是SOLIDWORKS科研版
  • 微信小程序页面配置
  • 如何将JPG/PNG位图免费快速一键转换成SVG格式的矢量图
  • YOLO检测环境安装配置
  • NOSQL -- ES
  • 【Python基础】名称空间和作用域
  • 安全智能预警软件有人试图窃取会立即发出高分贝警报已解锁VIP功能
  • DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状
  • cordic IP核中,sin and cos的使用