C语言图书管理系统:文件存储与链表操作
C语言图书管理系统:文件存储与链表操作
这篇博客文章将介绍如何使用C语言实现一个简单的图书管理系统。该系统将使用文件存储图书信息,并利用链表来组织和管理数据。
1. 数据结构定义
首先,我们需要定义一个结构体 BookNode 来表示图书信息:ctypedef struct Node { char bookCode[20]; char bookName[50]; char author[50]; char publisher[50]; char bookkind[50]; char bookkinds[50]; float price; int quantity; int borrowed; struct Node *next;} BookNode;
BookNode *head = NULL;
该结构体包含以下字段:
bookCode: 图书编号*bookName: 书名*author: 作者*publisher: 出版社*bookkind: 图书种类*bookkinds: 图书种类编号*price: 价格*quantity: 数量*borrowed: 借阅状态 (0: 未借出, 1: 已借出)*next: 指向下一个节点的指针
2. 加载图书数据
程序启动时,我们需要从文件中加载已有的图书信息。loadBookData() 函数负责完成这项任务:cvoid 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->bookName); // 读取书名 fscanf(file, '%s', newNode->bookCode); // 读取图书编号 fscanf(file, '%s', newNode->author); fscanf(file, '%s', newNode->publisher); fscanf(file, '%s', newNode->bookkind); fscanf(file, '%s', newNode->bookkinds); fscanf(file, '%f', &newNode->price); 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);}
3. 保存图书数据
当程序退出或需要保存数据时,我们需要将图书信息写入文件。saveBookData() 函数用于实现此功能:cvoid saveBookData() { FILE *file = fopen('book_storage.txt', 'w'); if (file == NULL) { printf('无法保存图书信息!
'); return; }
BookNode *current = head; while (current != NULL) { fprintf(file, '%s
', current->bookName); fprintf(file, '%s ', current->bookCode); fprintf(file, '%s ', current->author); fprintf(file, '%s ', current->publisher); fprintf(file, '%s ', current->bookkind); fprintf(file, '%s ', current->bookkinds); fprintf(file, '%.2f ', current->price); fprintf(file, '%d ', current->quantity); fprintf(file, '%d ', current->borrowed);
current = current->next; }
fclose(file);}
4. 添加图书
addBook() 函数允许用户添加新的图书信息到系统中:cvoid addBook() { BookNode *newNode = (BookNode *)malloc(sizeof(BookNode)); printf('请输入图书编号:'); scanf('%s', newNode->bookCode); printf('请输入书名:'); scanf('%s', newNode->bookName); printf('请输入作者:'); scanf('%s', newNode->author); // ... (获取其他图书信息)
newNode->borrowed = 0; newNode->next = NULL;
// 将新节点插入链表 if (head == NULL) { head = newNode; } else { // ... (将新节点添加到链表末尾) }
printf('添加成功!
');}
5. 删除图书
deleteBook() 函数允许用户根据图书编号删除图书信息:cvoid deleteBook() { char bookCode[20]; printf('请输入要删除的图书编号:'); scanf('%s', bookCode);
// ... (在链表中查找对应图书编号的节点并删除)}
6. 修改图书信息
modifyBook() 函数允许用户根据图书编号修改图书信息:cvoid modifyBook() { char bookCode[20]; printf('请输入要修改的图书编号:'); scanf('%s', bookCode);
// ... (在链表中查找对应图书编号的节点并修改其信息)}
7. 查找图书
searchBook() 函数允许用户根据书名查找图书信息:cvoid searchBook() { char bookName[50]; printf('请输入要查找的书名:'); scanf('%s', bookName);
// ... (在链表中查找对应书名的节点并显示其信息)}
8. 借阅图书
borrowBook() 函数允许用户借阅图书:cvoid borrowBook() { char bookCode[20]; printf('请输入要借阅的图书编号:'); scanf('%s', bookCode);
// ... (在链表中查找对应图书编号的节点,并将借阅状态修改为 '已借出')}
9. 归还图书
returnBook() 函数允许用户归还图书:cvoid returnBook() { char bookCode[20]; printf('请输入要归还的图书编号:'); scanf('%s', bookCode);
// ... (在链表中查找对应图书编号的节点,并将借阅状态修改为 '未借出')}
10. 显示所有图书
displayAllBooks() 函数用于显示所有图书的信息:cvoid displayAllBooks() { if (head == NULL) { printf('没有图书信息!
'); return; }
BookNode *current = head; while (current != NULL) { printf('图书编号:%s
', current->bookCode); printf('书名:%s ', current->bookName); // ... (显示其他图书信息) printf(' '); current = current->next; }}
11. 主函数
main() 函数是程序的入口点,它负责处理用户交互和调用其他函数:cint main() { loadBookData();
int choice; while (1) { // ... (显示菜单选项)
printf('请选择操作:'); scanf('%d', &choice);
switch (choice) { case 1: addBook(); saveBookData(); break; // ... (处理其他菜单选项) case 8: saveBookData(); exit(0); default: printf('无效的选择!
'); break; } }
return 0;}
总结
本文介绍了一个简单的C语言图书管理系统,该系统利用文件存储图书信息并使用链表进行数据管理。你可以根据自己的需求扩展这个系统,例如添加用户管理、借阅记录等功能。
原文地址: https://www.cveoy.top/t/topic/fv21 著作权归作者所有。请勿转载和采集!