C语言链表实现图书管理系统:增删改查功能详解

本文将详细介绍使用C语言链表实现图书管理系统中删除图书、修改图书和查找图书的功能,并分析每个函数的时间复杂度和流程图。

1. 删除图书:deleteBook()

void deleteBook() {
    char bookCode[20];
    printf('请输入要删除的图书编号:');
    scanf('%s', bookCode);

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

    if (strcmp(head->bookCode, bookCode) == 0) {
        BookNode *temp = head;
        head = head->next;
        free(temp);
        printf('删除成功!\n');
        return;
    }

    BookNode *current = head;
    while (current->next != NULL) {
        if (strcmp(current->next->bookCode, bookCode) == 0) {
            BookNode *temp = current->next;
            current->next = temp->next;
            free(temp);
            printf('删除成功!\n');
            return;
        }
        current = current->next;
    }

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

时间复杂度:O(n)

在最坏情况下,需要遍历整个链表来查找要删除的图书编号。

流程图:

deleteBook():
1. 输入要删除的图书编号
2. 如果链表为空,输出'没有找到相关图书!',结束
3. 如果头节点的图书编号等于要删除的图书编号
    4. 将头节点的下一个节点设为新的头节点
    5. 释放原头节点的内存
    6. 输出'删除成功!'
    7. 结束
8. 初始化current为头节点
9. 循环直到current的下一个节点为NULL
    10. 如果current的下一个节点的图书编号等于要删除的图书编号
        11. 将temp设为current的下一个节点
        12. 将current的下一个节点设为temp的下一个节点
        13. 释放temp的内存
        14. 输出'删除成功!'
        15. 结束
    16. 将current设为current的下一个节点
17. 输出'没有找到相关图书!'

2. 修改图书:modifyBook()

void modifyBook() {
    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) {
            printf('请输入新的书名:');
            scanf('%s', current->bookName);
            printf('请输入新的作者:');
            scanf('%s', current->author);
            printf('请输入新的出版社:');
            scanf('%s', current->publisher);
            printf('请输入新的图书种类:');
            scanf('%s', current->bookkind);
            printf('请输入新的图书种类编号:');
            scanf('%s', current->bookkinds);
            printf('请输入新的价格:');
            scanf('%d', &current->quantity);
            printf('修改成功!\n');
            return;
        }
        current = current->next;
    }

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

时间复杂度:O(n)

在最坏情况下,需要遍历整个链表来查找要修改的图书编号。

流程图:

modifyBook():
1. 输入要修改的图书编号
2. 如果链表为空,输出'没有找到相关图书!',结束
3. 初始化current为头节点
4. 循环直到current为NULL
    5. 如果current的图书编号等于要修改的图书编号
        6. 输入新的书名
        7. 输入新的作者
        8. 输入新的出版社
        9. 输入新的图书种类
        10. 输入新的图书种类编号
        11. 输入新的价格
        12. 输出'修改成功!'
        13. 结束
    14. 将current设为current的下一个节点
15. 输出'没有找到相关图书!'

3. 查找图书:searchBook()

void searchBook() {
    char bookName[50];
    printf('请输入要查找的书名:');
    scanf('%s', bookName);

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

    BookNode *current = head;
    int found = 0;
    while (current != NULL) {
        if (strcmp(current->bookName, bookName) == 0) {
            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 ? '已借出' : '未借出');
            found = 1;
        }
        current = current->next;
    }

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

时间复杂度:O(n)

在最坏情况下,需要遍历整个链表来查找要查找的图书。

流程图:

searchBook():
1. 输入要查找的书名
2. 如果链表为空,输出'没有找到相关图书!',结束
3. 初始化current为头节点
4. 初始化found为0
5. 循环直到current为NULL
    6. 如果current的书名等于要查找的书名
        7. 输出图书信息
        8. 将found设为1
    9. 将current设为current的下一个节点
10. 如果found为0,输出'没有找到相关图书!'

总结:

本文详细介绍了使用C语言链表实现图书管理系统中删除图书、修改图书和查找图书的功能,并分析了每个函数的时间复杂度和流程图。链表是一种常用的数据结构,可以方便地实现各种数据操作。

C语言链表实现图书管理系统:增删改查功能详解

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

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