本文将介绍一个使用 C 语言实现的简单图书管理系统,其中包含了借阅、归还和显示图书的功能。为了简化示例,我们将假设图书数据存储在一个链表中,并使用一个名为 BookNode 的结构体来表示每个图书的信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

BookNode *head = NULL; // 图书链表的头节点

// 借阅图书函数
void borrowBook() {
    char bookCode[20];
    printf('请输入要借阅的图书编号:');
    scanf('%s', bookCode);

    if (head == NULL) {
        printf('没有找到相关图书!\n');
        return;
    }

    BookNode *current = head;
    while (current != NULL) {
        if (strcmp(current->bookCode, bookCode) == 0) {
            if (current->borrowed) {
                printf('该图书已借出!\n');
            } else {
                current->borrowed = 1;
                printf('借阅成功!\n');
            }
            return;
        }
        current = current->next;
    }

    printf('没有找到相关图书!\n');
}

// 归还图书函数
void returnBook() {
    char bookCode[20];
    printf('请输入要归还的图书编号:');
    scanf('%s', bookCode);

    if (head == NULL) {
        printf('没有找到相关图书!\n');
        return;
    }

    BookNode *current = head;
    while (current != NULL) {
        if (strcmp(current->bookCode, bookCode) == 0) {
            if (current->borrowed) {
                current->borrowed = 0;
                printf('归还成功!\n');
            } else {
                printf('该图书未借出!\n');
            }
            return;
        }
        current = current->next;
    }

    printf('没有找到相关图书!\n');
}

// 显示图书信息函数
void displayBook() {
    if (head == NULL) {
        printf('图书列表为空!\n');
        return;
    }

    BookNode *current = head;
    while (current != NULL) {
        printf('图书编号:%s\n', current->bookCode);
        printf('书名:%s\n', current->bookName);
        printf('作者:%s\n', current->author);
        printf('出版社:%s\n', current->publisher);
        printf('图书种类:%s\n', current->bookkind);
        printf('图书种类编号:%s\n', current->bookkinds);
        printf('价格:%d\n', current->quantity);
        printf('借阅状态:%s\n', current->borrowed ? '已借出' : '未借出');
        printf('\n');

        if (current->next != NULL) {
            printf('\n');
        }

        current = current->next;
    }
}

// 释放图书链表内存函数
void freeBookList() {
    BookNode *current = head;
    while (current != NULL) {
        BookNode *temp = current;
        current = current->next;
        free(temp);
    }
    head = NULL;
}

int main() {
    // 加载图书数据(省略)
    loadBookData();

    while (1) {
        printf('*****欢迎使用图书管理系统*****\n');
        printf('1. 添加图书信息\n');
        printf('2. 删除图书信息\n');
        printf('3. 修改图书信息\n');
        printf('4. 查找图书信息\n');
        printf('5. 借阅图书\n');
        printf('6. 归还图书\n');
        printf('7. 显示图书信息\n');
        printf('0. 退出程序\n');
        printf('请输入您的选择:');

        int choice;
        scanf('%d', &choice);

        switch (choice) {
            case 1:
                addBook(); // 添加图书功能(省略)
                break;
            case 2:
                deleteBook(); // 删除图书功能(省略)
                break;
            case 3:
                modifyBook(); // 修改图书功能(省略)
                break;
            case 4:
                searchBook(); // 查找图书功能(省略)
                break;
            case 5:
                borrowBook();
                break;
            case 6:
                returnBook();
                break;
            case 7:
                displayBook();
                break;
            case 0:
                // 保存图书数据(省略)
                saveBookData();
                freeBookList();
                printf('感谢使用图书管理系统,再见!\n');
                return 0;
            default:
                printf('无效的选择,请重新输入!\n');
        }
    }
}

功能解释

  1. borrowBook() 函数:

    • 获取用户输入的图书编号。
    • 遍历图书链表,查找与输入编号匹配的图书。
    • 如果找到图书,判断其借阅状态,并进行相应的处理:
      • 如果图书已借出,输出提示信息。
      • 如果图书未借出,更新借阅状态为已借出,并输出提示信息。
    • 如果未找到匹配的图书,输出提示信息。
  2. returnBook() 函数:

    • 获取用户输入的图书编号。
    • 遍历图书链表,查找与输入编号匹配的图书。
    • 如果找到图书,判断其借阅状态,并进行相应的处理:
      • 如果图书已借出,更新借阅状态为未借出,并输出提示信息。
      • 如果图书未借出,输出提示信息。
    • 如果未找到匹配的图书,输出提示信息。
  3. displayBook() 函数:

    • 遍历图书链表,将每个图书的信息输出到屏幕。
    • 包括图书编号、书名、作者、出版社、图书种类、图书种类编号、价格和借阅状态。
  4. freeBookList() 函数:

    • 遍历图书链表,释放每个节点的内存。
    • 最后将头节点设置为 NULL。

流程图

以下是用流程图来展示 borrowBook() 函数的具体流程:

graph LR
    A[开始]
    B{输入图书编号}
    C{图书列表为空?}
    D[输出“没有找到相关图书!”]
    E{遍历图书列表}
    F{找到匹配的图书?}
    G{图书已借出?}
    H[输出“该图书已借出!”]
    I{更新借阅状态为已借出}
    J[输出“借阅成功!”]
    K[输出“没有找到相关图书!”]
    L[结束]

A --> B
B --> C
    C --是--> D
    C --否--> E
    E --> F
    F --是--> G
    F --否--> E
    G --是--> H
    G --否--> I
    I --> J
    H --> L
    J --> L
    E --> K
    K --> L

以下是 returnBook() 函数的流程图:

graph LR
    A[开始]
    B{输入图书编号}
    C{图书列表为空?}
    D[输出“没有找到相关图书!”]
    E{遍历图书列表}
    F{找到匹配的图书?}
    G{图书已借出?}
    H{更新借阅状态为未借出}
    I[输出“归还成功!”]
    J[输出“该图书未借出!”]
    K[输出“没有找到相关图书!”]
    L[结束]

A --> B
B --> C
    C --是--> D
    C --否--> E
    E --> F
    F --是--> G
    F --否--> E
    G --是--> H
    G --否--> J
    H --> I
    I --> L
    J --> L
    E --> K
    K --> L

以下是 displayBook() 函数的流程图:

graph LR
    A[开始]
    B{图书列表为空?}
    C[输出“图书列表为空!”]
    D{遍历图书列表}
    E{输出图书信息}
    F{当前节点为最后一个节点?}
    G[结束]

A --> B
    B --是--> C
    B --否--> D
    D --> E
    E --> F
    F --是--> G
    F --否--> D

以下是 freeBookList() 函数的流程图:

graph LR
    A[开始]
    B{遍历图书列表}
    C{释放当前节点内存}
    D{设置头节点为 NULL}
    E[结束]

A --> B
B --> C
    C --> B
    B --> D
    D --> E

本文提供了一个简单的 C 语言图书管理系统示例,涵盖了借阅、归还和显示图书的功能,并附有详细的流程图和代码注释,供读者参考和学习。读者可以根据实际需求对代码进行扩展和改进,例如增加添加、删除、修改图书的功能,以及数据库连接等。

C语言图书管理系统:借阅、归还和显示图书功能

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

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