C语言图书管理系统:文件存储与链表操作

这篇文章将带你实现一个简单的图书管理系统,使用C语言编写,并结合文件存储和链表操作。

1. 系统功能

本系统提供以下功能:

  • 添加图书信息: 录入新图书的编号、书名、作者、出版社、种类、价格等。- 删除图书信息: 根据图书编号删除指定图书。- 修改图书信息: 更新已有图书的信息。- 查找图书信息: 根据书名查找图书。- 借阅图书: 将指定图书标记为已借出。- 归还图书: 将借出的图书标记为可借阅。- 显示图书信息: 列出所有图书的详细信息。

2. 代码实现c#include <stdio.h>#include <stdlib.h>#include <string.h>

// 定义图书节点结构体typedef struct Node { char bookCode[20]; char bookName[50]; char author[50]; char publisher[50]; char bookkind[50]; char bookkinds[50]; int quantity; int borrowed; struct Node *next;} BookNode;

// 定义链表头指针BookNode *head = NULL;

// 从文件加载图书数据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);}

// 将图书数据保存到文件void saveBookData() { FILE *file = fopen('book_storage.txt', 'w'); if (file == NULL) { printf('无法保存图书信息! '); return; }

BookNode *current = head;    while (current != NULL) {        fprintf(file, '%s

', current->bookCode); fprintf(file, '%s ', current->bookName); fprintf(file, '%s ', current->author); fprintf(file, '%s ', current->publisher); fprintf(file, '%s ', current->bookkind); fprintf(file, '%s ', current->bookkinds); fprintf(file, '%d ', current->quantity); fprintf(file, '%d ', current->borrowed);

    current = current->next;    }

fclose(file);}

// 添加图书信息void addBook() { // ... (代码与之前相同)}

// 删除图书信息void deleteBook() { // ... (代码与之前相同)}

// 修改图书信息void modifyBook() { // ... (代码与之前相同)}

// 查找图书信息void searchBook() { // ... (代码与之前相同)}

// 借阅图书void borrowBook() { // ... (代码与之前相同)}

// 归还图书void returnBook() { // ... (代码与之前相同)}

// 显示所有图书信息void displayBook() { // ... (代码与之前相同)}

// 释放链表内存void freeBookList() { // ... (代码与之前相同)}

// 主函数int main() { loadBookData(); // 加载数据

while (1) {        // ... (菜单显示与用户交互逻辑,与之前相同)    }}

3. 时间复杂度分析

这段程序的时间复杂度主要取决于链表的操作。

  • 添加图书、删除图书 (头部删除)、查找图书、借阅图书、归还图书: 这些操作都需要遍历链表,最坏情况下需要遍历整个链表,因此时间复杂度为 O(n),其中 n 是图书链表的长度。- 删除图书 (非头部删除): 与查找操作类似,最坏情况下时间复杂度为 O(n)。- 修改图书: 与查找操作类似,找到目标图书后修改操作的时间复杂度为 O(1),但查找操作的时间复杂度为 O(n)。- 显示所有图书信息: 需要遍历整个链表,时间复杂度为 O(n)。

总体而言,程序的时间复杂度为 O(n)。

4. 总结

本文介绍了一个简单的C语言图书管理系统,它结合了文件存储和链表操作,实现了基本的图书管理功能。同时,我们分析了程序的时间复杂度,帮助读者更好地理解程序的性能。

C语言图书管理系统:文件存储与链表操作

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

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