C语言图书管理系统:文件存储与链表操作
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语言图书管理系统,它结合了文件存储和链表操作,实现了基本的图书管理功能。同时,我们分析了程序的时间复杂度,帮助读者更好地理解程序的性能。
原文地址: https://www.cveoy.top/t/topic/fv4l 著作权归作者所有。请勿转载和采集!