C语言图书管理系统:数据保存与加载功能实现

本示例代码展示了使用 C 语言实现图书管理系统中数据保存与加载功能的代码片段。该代码片段包含三个函数:saveBookData()loadBookData()addBook()

1. saveBookData() 函数

void saveBookData() {
    FILE *file = fopen("book_storage.txt", "w");
    if (file == NULL) {
        printf("无法保存图书信息!\n");
        
    }

    BookNode *current = head;
    while (current != NULL) {
        fprintf(file, "%s\n", current->bookCode);
        fprintf(file, "%s\n", current->bookName);
        fprintf(file, "%s\n", current->author);
        fprintf(file, "%s\n", current->publisher);
        fprintf(file, "%s\n", current->bookkind);
        fprintf(file, "%s\n", current->bookkinds);
        fprintf(file, "%d\n", current->quantity);
        fprintf(file, "%d\n", current->borrowed);

        current = current->next;
    }

    fclose(file);
}

该函数用于将图书数据保存到名为 book_storage.txt 的文件中。首先打开文件,如果打开失败则打印错误信息。然后遍历链表,将每个节点的图书信息写入文件。最后关闭文件。

2. loadBookData() 函数

void loadBookData() {
    FILE *file = fopen("book_storage.txt", "r");
    if (file == NULL) {
        return;
    }

    while (!feof(file)) {
        BookNode *newNode = (BookNode *)malloc(sizeof(BookNode));
        fscanf(file, "%s  ", newNode->bookCode);
        fscanf(file, "%s  ", newNode->bookName);
        fscanf(file, "%s  ", newNode->author);
        fscanf(file, "%s  ", newNode->publisher);
        fscanf(file, "%s  ", newNode->bookkind);
        fscanf(file, "%s  ", newNode->bookkinds);
        fscanf(file, "%d  ", &newNode->quantity);
        fscanf(file, "%d  ", &newNode->borrowed);
        newNode->next = NULL;

        if (head == NULL) {
            head = newNode;
        } else {
            BookNode *current = head;
            while (current->next != NULL) {
                current = current->next;
            }
            current->next = newNode;
        }
    }

    fclose(file);
}

该函数用于从 book_storage.txt 文件中加载图书数据。首先打开文件,如果打开失败则返回。然后逐行读取文件内容,将每行信息存储为一个新的节点,并将其添加到链表中。最后关闭文件。

3. addBook() 函数

void addBook() {
    BookNode *newNode = (BookNode *)malloc(sizeof(BookNode));
    printf("请输入图书编号:");
    scanf("%s", newNode->bookCode);
    printf("请输入书名:");
    scanf("%s", newNode->bookName);
    printf("请输入作者:");
    scanf("%s", newNode->author);
    printf("请输入出版社:");
    scanf("%s", newNode->publisher);
    printf("请输入图书种类:");
    scanf("%s", newNode->bookkind);
    printf("请输入图书种类编号:");
    scanf("%s", newNode->bookkinds);
    printf("请输入数量:");
    scanf("%d", &newNode->quantity);
    newNode->borrowed = 0;
    newNode->next = NULL;

    if (head == NULL) {
        head = newNode;
    } else {
        BookNode *current = head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }

    printf("添加成功!\n");
}

该函数用于添加新图书信息。首先分配内存空间创建一个新节点,然后提示用户输入图书信息并存储到节点中。最后将新节点添加到链表的末尾。

时间复杂度分析

  1. saveBookData():时间复杂度为 O(n),其中 n 为图书链表中的节点数目。需要遍历整个链表,将每个节点的信息写入文件。

  2. loadBookData():时间复杂度为 O(n),其中 n 为文件中图书信息的行数。需要读取文件中的每一行信息,并将其存储为节点。

  3. addBook():时间复杂度为 O(1)。只需要在链表末尾添加一个新的节点。

流程图

saveBookData()
└─ 打开文件
   └─ 遍历链表
      └─ 写入节点信息到文件
└─ 关闭文件

loadBookData()
└─ 打开文件
   └─ 读取文件中的每一行信息
      └─ 将信息存储为节点
└─ 关闭文件

addBook()
└─ 创建新节点
└─ 输入图书信息
└─ 将节点添加到链表末尾

总结

本代码片段展示了使用 C 语言实现图书管理系统中数据保存与加载功能的代码示例,包含 saveBookData()loadBookData()addBook() 函数的实现,并分析了每个函数的时间复杂度和流程图。该代码可以作为学习 C 语言编程和实现数据保存与加载功能的参考。

C语言图书管理系统:数据保存与加载功能实现

原文地址: https://www.cveoy.top/t/topic/fx8k 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录