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

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

基础版源码:

#include <stdio.h>

#define HOUSESIZE 3
int arr[HOUSESIZE][HOUSESIZE] = { 0 }; // 初始化所有元素为0

void 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]; // 初始化所有元素为0

    public 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();
    }
}

相关推荐

  1. 数据仓库之分层存储

    2024-06-12 07:38:02       26 阅读
  2. C语言-数据在内存存储

    2024-06-12 07:38:02       36 阅读
  3. c语言一个抖音点赞系统

    2024-06-12 07:38:02       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 07:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 07:38:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 07:38:02       82 阅读
  4. Python语言-面向对象

    2024-06-12 07:38:02       91 阅读

热门阅读

  1. 2024备忘知识点

    2024-06-12 07:38:02       23 阅读
  2. Python的pytest框架(6)--测试钩子 (hooks)

    2024-06-12 07:38:02       32 阅读
  3. ACM算法学习路线、清单

    2024-06-12 07:38:02       26 阅读
  4. 【Qt】Qt中QJsonArray类

    2024-06-12 07:38:02       27 阅读
  5. pytest框架中的pytest.ini配置文件

    2024-06-12 07:38:02       27 阅读
  6. Qwen等大模型使用 vLLM部署详解

    2024-06-12 07:38:02       24 阅读
  7. 算法训练营day56

    2024-06-12 07:38:02       28 阅读
  8. Elasticsearch 第一期:基础的基础概念

    2024-06-12 07:38:02       33 阅读
  9. c++题目_T307715 风之循环

    2024-06-12 07:38:02       33 阅读
  10. web前端培训生:深入探索与技能进阶之路

    2024-06-12 07:38:02       29 阅读
  11. Objective-C 学习笔记 | 范畴

    2024-06-12 07:38:02       28 阅读
  12. python3按列表元素中字典的value排序

    2024-06-12 07:38:02       26 阅读
  13. 深度搜索 copilot 插件

    2024-06-12 07:38:02       33 阅读