这个代码实现了一个简单的数据仓库,其中数据被存储在一个3x3的二维数组中。用户可以通过控制台界面与这个数据仓库进行交互,可以选择查看数据或者修改数据。
- #include
-
- #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
-
- // ... 其他代码保持不变 ...
-
- 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
-
- // ... 其他代码保持不变 ...
-
- 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;
- }
错误处理:在实际应用中,您需要更详细地处理文件操作可能发生的错误。上面的示例代码只是简单地打印了错误信息,但在生产环境中,您可能需要更复杂的错误处理逻辑。
文件路径:确保您知道文件将保存在哪里,以及程序有权限在那里读写文件。
数据完整性:如果文件中的数据不完整或格式不正确,加载数据的过程可能会失败。您应该添加适当的检查来确保数据的完整性。
文件格式:上面的示例使用纯文本格式存储数据,这对于简单的程序可能足够了。但对于更复杂的应用程序,您可能需要使用更复杂的文件格式或序列化技术,如JSON、XML或二进制格式。
安全性:当处理文件时,安全性是一个重要的考虑因素。确保您的程序不会受到恶意文件或意外输入的影响。
这个程序也可以使用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();
- }
- }