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日

相关文章

  • 详解C++程序中定义struct结构体的方法

    下面我将详细讲解如何在C++程序中定义struct结构体。 1. 概述 在C++中,struct是一种用户自定义的数据类型,它可以将多个不同类型的数据成员组合在一起,形成一个数据结构。在C++中,我们可以使用struct关键字来定义一个结构体,然后在程序中实例化一个结构体对象,可以使用结构体对象来访问结构体中的数据成员,从而完成对数据的处理。 2. 定义结构…

    C 2023年5月30日
    00
  • 利用C语言实现经典多级时间轮定时器

    下面我将详细讲解如何利用C语言实现经典多级时间轮定时器。为了更好地演示,我将分以下五个步骤介绍: 定义时间轮结构体 插入定时器 删除定时器 时间轮转动及定时任务的处理 示例说明 1. 定义时间轮结构体 首先,我们需要定义一个时间轮结构体,用于存储定时器信息和管理定时器。结构体包含时间轮的精度、时间间隔、槽数量等信息,以及一个指针数组用于存储定时器节点。定义如…

    C 2023年5月23日
    00
  • C语言实现直方图均衡化

    下面是“C语言实现直方图均衡化”的完整攻略: 1.什么是直方图均衡化? 直方图均衡化是一种针对图像处理和计算机视觉中的技术,其主要目的是提高图像对比度和亮度的可读性。它的基本思想是使像素值分布更加均匀,从而达到增强图像对比度和亮度的效果。 2.实现步骤 计算图像的直方图。 直方图是指图像中每个像素值出现的次数。首先需要将图像转换为灰度图像,然后统计每个像素值…

    C 2023年5月23日
    00
  • C++语言编写写日志类

    下面就是“C++语言编写写日志类”的完整攻略: 1. 确定日志类的功能和需求 在编写日志类之前,需要考虑其功能和需求,如何记录日志、日志信息的格式、日志级别、日志存储路径等。根据实际需求设计日志类的各项功能,比如: 记录日志信息 支持不同的日志级别 支持自定义日志存储路径和文件名 自动切分日志文件 支持日志的异步输出,避免阻塞主线程等待写日志操作 在这里,我…

    C 2023年5月22日
    00
  • 解析JSON对象与字符串之间的相互转换

    解析JSON对象与字符串之间的相互转换是在前端开发中非常常见的操作之一。这里提供一份完整的攻略,帮助你轻松实现JSON对象与字符串之间的相互转换。 解析JSON对象 在JavaScript中,解析JSON对象需要使用到JSON.parse()方法。该方法可以将JSON格式的字符串转换为JavaScript对象。下面是一个示例: var jsonStr = ‘…

    C 2023年5月23日
    00
  • C语言中如何进行内存管理?

    C语言中内存管理主要分为两种:静态分配和动态分配。 静态分配:在程序编译阶段就分配好内存,变量在整个程序运行期间都存在,并且内存地址不会改变。静态分配可以通过以下几种方式实现: 局部静态变量:在函数中声明,但变量的存储空间在程序执行期间都存在,且只会被初始化一次。例如: void func() { static int count = 0; count++;…

    C 2023年4月27日
    00
  • 荣耀畅玩7c怎么打开游戏模式?荣耀畅玩7c打开游戏模式教程

    下面是荣耀畅玩7c打开游戏模式的完整攻略,包含了详细的步骤以及示例说明。 什么是游戏模式 游戏模式是一种手机功能,它能够优化手机性能,使得手机在运行游戏时更加流畅。荣耀畅玩7c也拥有游戏模式功能,用户可以通过打开游戏模式来获得更好的游戏体验。 如何打开游戏模式 荣耀畅玩7c打开游戏模式的步骤如下: 进入手机“设置”界面。 找到并点击“智能辅助”选项。 找到并…

    C 2023年5月23日
    00
  • C语言实现扫雷游戏(初级版)

    C语言实现扫雷游戏(初级版)完整攻略 一、简介 扫雷游戏是一款经典的休闲小游戏,由于其简单易懂、容易上手的特点,受到了很多人的喜爱。本文将详细讲解如何使用C语言实现扫雷游戏的初级版。 二、准备工作 在开始编写代码之前,我们需要安装一个C语言编译器。这里推荐使用gcc编译器,在Linux和MacOS系统上可以直接使用,如果是Windows系统则需要先安装Cyg…

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