C语言链表实现简单图书管理系统

C语言链表是一种常用的数据结构,通过链表可以实现一些比较复杂的数据管理系统。本篇攻略将讲解如何使用C语言链表实现一个简单的图书管理系统。整个系统的实现分为以下几步:

  1. 定义图书数据结构。在本例中,我们需要使用结构体来存储每一本图书的信息,如图书编号、图书名称、图书作者等。
struct Book {
    int id;
    char title[50];
    char author[50];
    char publisher[50];
    int year;
    int price;
    struct Book* next;
};
  1. 定义链表。在本例中,我们需要使用链表来管理多本图书的信息。同时,需要使用头结点来记录链表的起始位置。
struct Book* head = NULL;

void addBook(int id, char title[], char author[], char publisher[], int year, int price) {
    struct Book* book = (struct Book*)malloc(sizeof(struct Book));
    book -> id = id;
    strcpy(book -> title, title);
    strcpy(book -> author, author);
    strcpy(book -> publisher, publisher);
    book -> year = year;
    book -> price = price;
    book -> next = NULL;

    if (head == NULL) {
        head = book;
    } else {
        struct Book* temp = head;
        while (temp -> next != NULL) {
            temp = temp -> next;
        }
        temp -> next = book;
    }
}

  1. 实现图书管理系统的基本操作。在本例中,我们需要实现添加图书,删除图书,修改图书和查询图书等基本操作。
void addBook(int id, char title[], char author[], char publisher[], int year, int price);

void deleteBook(int id) {
    if (head == NULL) {
        printf("您还没有添加图书!\n");
        return;
    } else {
        struct Book* temp = head;
        struct Book* prev = NULL;

        while (temp != NULL && temp -> id != id) {
            prev = temp;
            temp = temp -> next;
        }

        if (temp == NULL) {
            printf("您要删除的图书不存在!\n");
        } else {
            if (prev == NULL) {
                head = temp -> next;
            } else {
                prev -> next = temp -> next;
            }

            free(temp);
            printf("已成功删除图书!\n");
        }
    }
}

void modifyBook(int id, char title[], char author[], char publisher[], int year, int price) {
    if (head == NULL) {
        printf("您还没有添加图书!\n");
        return;
    } else {
        struct Book* temp = head;

        while (temp != NULL && temp -> id != id) {
            temp = temp -> next;
        }

        if (temp == NULL) {
            printf("您要修改的图书不存在!\n");
        } else {
            strcpy(temp -> title, title);
            strcpy(temp -> author, author);
            strcpy(temp -> publisher, publisher);
            temp -> year = year;
            temp -> price = price;
            printf("已成功修改图书信息!\n");
        }
    }
}

void queryBook(int id) {
    if (head == NULL) {
        printf("您还没有添加图书!\n");
        return;
    } else {
        struct Book* temp = head;
        int count = 0;

        while (temp != NULL) {
            if (temp -> id == id) {
                printf("编号:%d\n", temp -> id);
                printf("名称:%s\n", temp -> title);
                printf("作者:%s\n", temp -> author);
                printf("出版社:%s\n", temp -> publisher);
                printf("年份:%d\n", temp -> year);
                printf("价格:%d元\n", temp -> price);
                count++;
            }
            temp = temp -> next;
        }

        if (count == 0) {
            printf("您要查询的图书不存在!\n");
        }
    }
}
  1. 使用示例。使用定义好的函数,用简单的实例演示如何添加一本图书以及如何删除一本图书。
int main() {
    addBook(1, "The C Programming Language", "Brian W. Kernighan, Dennis M. Ritchie", "Prentice Hall", 1978, 25);
    addBook(2, "Head First Design Patterns", "Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates", "O'Reilly Media", 2004, 38);
    addBook(3, "Clean Code: A Handbook of Agile Software Craftsmanship", "Robert C. Martin", "Prentice Hall", 2008, 44);

    queryBook(2); // 查询第2本图书的信息
    deleteBook(3); //删除第3本图书
    queryBook(3); //查询第3本图书的信息(应该报错)

    return 0;
}

通过以上的实现,我们可以很容易地使用C语言链表实现一个简单的图书管理系统。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言链表实现简单图书管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Linux网络编程之UDP Socket程序示例

    下面是关于使用UDP Socket进行Linux网络编程的攻略及示例. UDP Socket编程简介 UDP全称User Datagram Protocol,是一种无连接的,不可靠的面向数据报的传输协议,采用UDP传输需要自行保证数据的可靠性和完整性。因为UDP通信无连接,所以它发送的数据报文既不需要建立连接,也不需要断开连接,数据报文也不需要发送端和接收端…

    C 2023年5月30日
    00
  • 利用C语言实现n字棋游戏

    利用C语言实现n字棋游戏 简介 n字棋游戏是一款比较经典的益智游戏,在实现过程中需要涉及到很多算法和数据结构的知识。本篇攻略将会详细讲解如何使用C语言实现n字棋游戏,包括游戏规则、程序设计思路、核心代码实现以及基本的图形界面等。 程序设计思路 如何实现n字棋游戏呢?首先我们需要了解一下游戏的基本规则和要求。 游戏规则:两个玩家轮流在棋盘上下棋,其中一个玩家执…

    C 2023年5月23日
    00
  • C语言实现页面置换算法(FIFO、LRU)

    C语言实现页面置换算法 在操作系统中,进程访问内存时,若访问的物理页不在内存中,就会出现缺页调度现象。为了解决这个问题,就需要使用页面置换算法。常用的页面置换算法包括FIFO和LRU,下面将详细讲解如何用C语言实现这两种算法。 一、使用FIFO算法实现页面置换 FIFO算法是一种最简单的内存置换算法,它是根据页面装入内存的时间先后次序决定淘汰的页面。先进先出…

    C 2023年5月22日
    00
  • C#多线程异步执行和跨线程访问控件Helper

    关于C#多线程异步执行和跨线程访问控件Helper,我会分为以下几个部分进行讲解: 什么是多线程异步执行和跨线程访问控件 为什么需要多线程异步执行和跨线程访问控件 实现多线程异步执行和跨线程访问控件的方法 示例说明:多线程异步执行 示例说明:跨线程访问控件Helper 什么是多线程异步执行和跨线程访问控件 多线程异步执行是指在执行过程中,可以有多个线程同时进…

    C 2023年5月22日
    00
  • C++驱动bash的实现代码

    要实现C++驱动bash,我们需要理解两件事情:首先是调用shell命令,其次是获取shell命令的输出。下面是完整的攻略。 调用shell命令 在C++中调用shell命令的最常用的方法是使用system函数。该函数可以在程序中执行给定的命令,并等待该命令完成。例如,在Linux中,我们可以使用以下代码执行ls命令: #include <stdlib…

    C 2023年5月23日
    00
  • C++抽奖程序实现方法

    下面是 C++ 抽奖程序的实现方法完整攻略,包括以下步骤: 1. 设计程序功能 在开始编写代码之前,我们需要先明确程序需要实现的功能,即实现一个简单的抽奖程序,需要包括以下特点: 参与抽奖的人员名单事先固定,即不允许现场填写名字等信息; 程序需要在全部人员名单中随机抽取若干名中奖者; 抽奖过程需要进行多次,每次抽奖结果不重复; 可以在控制台中显示每次抽奖的结…

    C 2023年5月23日
    00
  • C语言实现单链表

    C语言实现单链表的完整使用攻略 什么是单链表 单链表是一种常见的数据结构,它的每个节点包含两部分内容,一个是存放数据的数据域,另一个是指向下一个节点的指针域。单链表的特点是插入和删除操作非常快,但查询操作相对较慢。 单链表的实现步骤 实现一个单链表需要以下步骤: 定义节点结构体:定义一个结构体,包含数据域和指针域两个成员。 创建节点:通过malloc函数动态…

    C 2023年5月9日
    00
  • C语言程序的编译与预处理基础定义讲解

    C语言程序的编译与预处理基础定义讲解 什么是编译过程 编译是指将高级语言(C语言)源代码转换成可执行代码的过程。编译过程涉及到预处理、编译、汇编和链接等多个步骤。 预处理阶段 预处理阶段的主要任务是根据预处理指令将源代码进行处理,然后输出修改后的源代码作为下一步的编译输入。预处理指令以“#”开头,常用的指令有: include:将指定的头文件内容插入到当前文…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部