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

server/2024/9/25 13:26:30/

        这个代码实现了一个简单的数据仓库,其中数据被存储在一个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.ppmy.cn/server/49355.html

相关文章

前端实现获取后端返回的文件流并下载

前端实现获取后端返回的文件流并下载 方法一&#xff1a;使用Axios实现文件流下载优点缺点 方法二&#xff1a;使用封装的Request工具实现文件流下载优点缺点 方法三&#xff1a;直接通过URL跳转下载优点缺点 结论 在前端开发中&#xff0c;有时需要从后端获取文件流&#xff0…

毕业了校园卡怎么改套餐?

毕业了校园卡怎么改套餐&#xff1f; 毕业生校园卡99元套餐变更8元保号套餐教程 学弟学妹们恭喜毕业呀&#x1f393; 校园卡绑定了好多东西注销不掉又不想交高额月租的看过来。 今天一招教你更改校园卡套餐。 中国移动/电信/联通App 打开App&#xff0c;在首页右上角点击人工…

TDengine 3.3.0.0 引入图形化管理工具、复合主键等 13 项关键更新

在涛思数据研发团队的努力下&#xff0c;TDengine 3.3.0.0 版本终于和大家见面了。这一版本中&#xff0c;我们引入了多项革新功能和性能优化&#xff0c;力求在为用户提供极致体验的同时&#xff0c;不断推动技术的前沿。 此次更新不仅针对开源社区版本&#xff0c;进行了一系…

聚焦赛宁网安竞赛平台+赛事服务,引领网络安全竞赛新潮流

第八届XCTF总决赛将在2024年6月22日于中国成都震撼开启&#xff0c;本届总决赛分为个人Live Solo和团队KOH巅峰对决两个赛道&#xff0c;从个人和团队多角度全方位考察参赛人员的竞技水平。 巅峰对决 智慧的火花在此碰撞 个人Live Solo赛制 Live Solo赛分为晋级赛和Solo赛。…

网络编程2----UDP简单客户端服务器的实现

首先我们要知道传输层提供的协议主要有两种&#xff0c;TCP协议和UDP协议&#xff0c;先来介绍一下它们的区别&#xff1a; 1、TCP是面向连接的&#xff0c;UDP是无连接的。 连接的本质是双方分别保存了对方的关键信息&#xff0c;而面向连接并不意味着数据一定能正常传输到对…

Perl语言基础概念、基本语法

Perl语言入门学习可以从以下几个方面展开&#xff1a; 一、基础概念 定义&#xff1a;Perl&#xff0c;全称“Practical Extraction and Report Language”&#xff0c;意为“实用提取和报告语言”。它是一种解释型的高级编程语言&#xff0c;适用于多种应用&#xff0c;特别…

ijkplayer编译 android版本

ijkplayer源码下载地址如下&#xff1a;https://github.com/bilibili/ijkplayer 下载代码&#xff0c;直接执行如下命令即可&#xff1a; $cd /data/project/ijkplayer/ $git clone https://github.com/bilibili/ijkplayer.git $git checkout -B latest k0.8.8 1 环境安装 …

Comingsoon-phtml

刚开始没有IP 单用户修改密码也需要输入用户密码&#xff0c;不能改 /boot/grub/grub.cfg配置文件下 ### BEGIN /etc/grub.d/00_header ### set superusers"root" password_pbkdf2 root grub.pbkdf2.sha512.10000.ACE3E31954E3E55AB9AB407CA8B6BC9D336B7376733F6B38…