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


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

    基础版源码:

    1. #include
    2. #define HOUSESIZE 3
    3. int arr[HOUSESIZE][HOUSESIZE] = { 0 }; // 初始化所有元素为0
    4. void printHouseData() {
    5. for (int x = 0; x < HOUSESIZE; x++) {
    6. for (int y = 0; y < HOUSESIZE; y++) {
    7. printf("%d ", arr[x][y]);
    8. }
    9. printf("\n");
    10. }
    11. }
    12. void changeHouseData(int row, int column, int value) {
    13. if (row >= 1 && row <= HOUSESIZE && column >= 1 && column <= HOUSESIZE) {
    14. arr[row - 1][column - 1] = value;
    15. }
    16. else {
    17. printf("输入的行列值超出范围!\n");
    18. }
    19. }
    20. int main() {
    21. printf("欢迎使用数据仓库\n");
    22. printf("请选择功能:\n");
    23. printf("1.查看数据仓库\n");
    24. printf("2.修改数据仓库数据\n");
    25. printf("输入0退出程序\n");
    26. int userinput;
    27. while (1) {
    28. scanf("%d", &userinput);
    29. if (userinput == 0) {
    30. break; // 允许用户通过输入0来退出程序
    31. }
    32. switch (userinput) {
    33. case 1:
    34. printHouseData();
    35. break;
    36. case 2:
    37. int row, column, value;
    38. printf("请输入你要改变数据的行、列、值(用空格分隔):\n");
    39. if (scanf("%d %d %d", &row, &column, &value) != 3) {
    40. printf("输入错误,请重新输入!\n");
    41. continue; // 输入错误时跳过本次循环,重新提示用户输入
    42. }
    43. changeHouseData(row, column, value);
    44. break;
    45. default:
    46. printf("输入错误,请重新选择功能!\n");
    47. break;
    48. }
    49. }
    50. return 0;
    51. }

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

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

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

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

     升级版源码:

    1. #include
    2. // ... 其他代码保持不变 ...
    3. void saveHouseDataToFile(const char* filename) {
    4. FILE* file = fopen(filename, "w"); // 打开文件进行写入
    5. if (file == NULL) {
    6. perror("Error opening file");
    7. return;
    8. }
    9. for (int x = 0; x < HOUSESIZE; x++) {
    10. for (int y = 0; y < HOUSESIZE; y++) {
    11. fprintf(file, "%d ", arr[x][y]); // 将每个元素写入文件
    12. }
    13. fprintf(file, "\n"); // 每行结束后写入换行符
    14. }
    15. fclose(file); // 关闭文件
    16. }
    17. // ... 其他代码保持不变 ...
    18. int main() {
    19. // ... 其他代码保持不变 ...
    20. // 假设我们想在程序结束时保存数据到文件
    21. saveHouseDataToFile("house_data.txt");
    22. return 0;
    23. }

    从文件读取数据

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

    1. #include
    2. // ... 其他代码保持不变 ...
    3. void loadHouseDataFromFile(const char* filename) {
    4. FILE* file = fopen(filename, "r"); // 打开文件进行读取
    5. if (file == NULL) {
    6. perror("Error opening file");
    7. return;
    8. }
    9. for (int x = 0; x < HOUSESIZE; x++) {
    10. for (int y = 0; y < HOUSESIZE; y++) {
    11. if (fscanf(file, "%d", &arr[x][y]) != 1) {
    12. perror("Error reading file");
    13. fclose(file);
    14. return;
    15. }
    16. }
    17. }
    18. fclose(file); // 关闭文件
    19. }
    20. int main() {
    21. // 在程序开始时从文件加载数据
    22. loadHouseDataFromFile("house_data.txt");
    23. // ... 其他代码保持不变 ...
    24. return 0;
    25. }

    注意事项

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

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

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

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

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

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

    java源码:

    1. import java.util.Scanner;
    2. public class HouseData {
    3. private static final int HOUSESIZE = 3;
    4. private static int[][] arr = new int[HOUSESIZE][HOUSESIZE]; // 初始化所有元素为0
    5. public static void printHouseData() {
    6. for (int x = 0; x < HOUSESIZE; x++) {
    7. for (int y = 0; y < HOUSESIZE; y++) {
    8. System.out.print(arr[x][y] + " ");
    9. }
    10. System.out.println();
    11. }
    12. }
    13. public static void changeHouseData(int row, int column, int value) {
    14. if (row >= 1 && row <= HOUSESIZE && column >= 1 && column <= HOUSESIZE) {
    15. arr[row - 1][column - 1] = value;
    16. } else {
    17. System.out.println("输入的行列值超出范围!");
    18. }
    19. }
    20. public static void main(String[] args) {
    21. Scanner scanner = new Scanner(System.in);
    22. System.out.println("欢迎使用数据仓库");
    23. System.out.println("请选择功能:");
    24. System.out.println("1.查看数据仓库");
    25. System.out.println("2.修改数据仓库数据");
    26. System.out.println("输入0退出程序");
    27. int userInput;
    28. while (true) {
    29. userInput = scanner.nextInt();
    30. if (userInput == 0) {
    31. break; // 允许用户通过输入0来退出程序
    32. }
    33. switch (userInput) {
    34. case 1:
    35. printHouseData();
    36. break;
    37. case 2:
    38. System.out.println("请输入你要改变数据的行、列、值(用空格分隔):");
    39. int row = scanner.nextInt();
    40. int column = scanner.nextInt();
    41. int value = scanner.nextInt();
    42. changeHouseData(row, column, value);
    43. break;
    44. default:
    45. System.out.println("输入错误,请重新选择功能!");
    46. break;
    47. }
    48. }
    49. scanner.close();
    50. }
    51. }

  • 相关阅读:
    十年架构五年生活-03作为技术组长的困扰
    HTML5期末大作业:基于 html css js仿腾讯课堂首页
    算法题整理(蓝桥 & leetcode)(待更新)
    前端面试必会 递归 深拷贝 手写
    Lilishop 开源商城系统代码审计
    PCB代工厂提供的报告,仅供参考?以实际报告为大家稍作讲解
    PCB板中符号的意义
    Android内核模块编译
    牛客刷题<21>三段式状态机
    【C语言】指针和数组的深入理解(第四期)
  • 原文地址:https://blog.csdn.net/weixin_56334307/article/details/139606578