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语言图书管理系统,该系统利用文件存储图书信息并使用链表进行数据管理。你可以根据自己的需求扩展这个系统,例如添加用户管理、借阅记录等功能。

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

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

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