C语言链表实现商品库存管理系统

C语言链表实现商品库存管理系统

简介

链表是一种常见的数据结构,优点是可以在任意位置插入或删除元素,而不影响链表中其他元素。因此,链表在一些需要频繁插入或删除元素的场景中非常适用,比如实现商品库存管理系统。

本文将使用C语言来实现链表,并借此来实现一个简单的商品库存管理系统。在该系统中,我们可以添加商品(包括名称、价格和数量),查看商品,删除商品,以及修改商品价格或数量信息。

实现步骤

第一步:定义商品结构体

首先,我们需要定义一个商品结构体,用于存储商品信息。在本例中,我们定义商品结构体包括名称(name)、价格(price)和数量(quantity)三个属性。

struct commodity {
    char name[30];
    float price;
    int quantity;
    struct commodity* next;
};

其中,我们使用了指向下一节点的指针next,这是链表结构中非常重要的一个概念。

第二步:实现链表操作

在实现链表前,我们需要定义链表操作所需要的函数,包括创建链表、添加商品、查看商品、删除商品和修改商品信息等功能。

这些函数的实现详见代码示例1。

第三步:测试示例

以添加商品和删除商品为例,我们可以编写测试代码来验证链表操作的正确性。

代码示例2展示了如何添加商品,在添加商品后,我们通过查看商品操作来验证链表中的商品是否被正确添加。

代码示例3展示了如何删除商品,在删除商品后,我们通过查看商品操作来验证链表中的商品是否被正确删除。

代码示例

示例1:链表操作函数实现

// 创建链表
struct commodity* create() {
    struct commodity* head = NULL;
    head = (struct commodity*)malloc(sizeof(struct commodity));
    head->next = NULL;
    return head;
}

// 添加商品
void add(struct commodity* head, char name[30], float price, int quantity) {
    struct commodity* p = head;
    while (p->next) {
        p = p->next;
    }
    struct commodity* new_commodity = (struct commodity*)malloc(sizeof(struct commodity));
    strcpy(new_commodity->name, name);
    new_commodity->price = price;
    new_commodity->quantity = quantity;
    new_commodity->next = NULL;
    p->next = new_commodity;
}

// 查看商品
void view(struct commodity* head) {
    struct commodity* p = head->next;
    printf("name\tprice\tquantity\n");
    while (p) {
        printf("%s\t%.2f\t%d\n", p->name, p->price, p->quantity);
        p = p->next;
    }
}

// 删除商品
void del(struct commodity* head, char name[30]) {
    struct commodity* p = head;
    while (p->next && strcmp(p->next->name, name)!=0) {
        p = p->next;
    }
    if (p->next) {
        struct commodity* del_commodity = p->next;
        p->next = del_commodity->next;
        free(del_commodity);
    }
}

// 修改商品价格
void modify_price(struct commodity* head, char name[30], float new_price) {
    struct commodity* p = head->next;
    while (p && strcmp(p->name, name)!=0) {
        p = p->next;
    }
    if (p) {
        p->price = new_price;
    }
}

// 修改商品数量
void modify_quantity(struct commodity* head, char name[30], int new_quantity) {
    struct commodity* p = head->next;
    while (p && strcmp(p->name, name)!=0) {
        p = p->next;
    }
    if (p) {
        p->quantity = new_quantity;
    }
}

示例2:添加商品操作

struct commodity* head = create();
add(head, "apple", 3.00, 10);
add(head, "banana", 2.50, 20);
add(head, "orange", 4.00, 5);
view(head);

输出结果:

name    price   quantity
apple   3.00    10
banana  2.50    20
orange  4.00    5

示例3:删除商品操作

del(head, "banana");
view(head);

输出结果:

name    price   quantity
apple   3.00    10
orange  4.00    5

总结

本文简要介绍了如何使用C语言实现商品库存管理系统,其中的关键在于使用链表实现商品信息的存储、查看、删除和修改等操作。希望这篇文章能够帮助读者更好地理解链表的用法。

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

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

相关文章

  • 在nodeJs中如何修改json文件中的数据

    修改 JSON 文件中的数据在 Node.js 中有多种实现方式,下面我将介绍其中两种常用的方法。 方法一:使用Node.js内置的fs模块 1. 使用fs.readFile()方法读取JSON文件 fs.readFile() 方法可以读取 JSON 文件的内容,并返回一个字符串类型的 JSON 数据。 const fs = require(‘fs’); f…

    C 2023年5月23日
    00
  • 深入理解Java虚拟机_动力节点Java学院整理

    深入理解Java虚拟机攻略 什么是Java虚拟机 Java虚拟机(Java Virtual Machine,JVM)是Java程序运行的基石,是一个能够运行Java字节码的虚拟计算机。Java虚拟机是Java技术的核心,它是Java程序跨平台特性的实现基础。理解Java虚拟机的工作原理和内部机制对于Java开发人员来说是非常重要的。 深入理解Java虚拟机的…

    C 2023年5月23日
    00
  • 迷宫游戏控制台版C++代码

    迷宫游戏控制台版C++代码攻略 在这里,我将为大家详细讲解如何使用C++编写迷宫游戏控制台版代码。本攻略将包含以下内容: 游戏规则 游戏素材 代码结构 代码实现 游戏规则 迷宫游戏是一款益智类游戏,游戏规则如下: 游戏迷宫由一个正方形网格构成,包含起点和终点两个位置,玩家需要从起点到达终点。 玩家每次只能前进一格,只能向上、下、左、右四个方向移动。 玩家不能…

    C 2023年5月30日
    00
  • C语言MultiByteToWideChar和WideCharToMultiByte案例详解

    C语言MultiByteToWideChar和WideCharToMultiByte案例详解 简介 在C语言中,字符编码的转换是一个基本操作,这通常需要用到 MultiByteToWideChar 和 WideCharToMultiByte 这两个Windows API函数。 MultiByteToWideChar 将ANSI格式的字符串(即单字节字符串)转…

    C 2023年5月23日
    00
  • C语言中如何通过指针参数返回值

    通过指针参数返回值在C语言中非常常见,通常用于需要同时返回多个值或需要改变传递给函数的参数值的情况。下面介绍一下如何通过指针参数返回值的完整攻略: 1. 定义函数时传递指针参数 通过指针参数返回值的核心方法就是在函数定义时传递一个指针或指针数组作为参数。这个指针指向想要返回的值。在函数内部,可以通过指针操作符(*)来读取或修改指针所指向的值。 以下是一个简单…

    C 2023年5月23日
    00
  • 如何判断一个数是否为2的幂次方?若是,并判断出来是多少次方?

    判断一个数是否为2的幂次方: 一个数如果是2的幂次方,那么它的二进制表示中只有最高位是1,其他各位都是0。比如2的1次方是2,写成二进制就是10;2的2次方是4,写成二进制是100;2的3次方是8,写成二进制是1000。 根据这个规律,我们可以用位运算来判断一个数是否为2的幂次方,具体方法如下: 首先判断这个数是否大于0,如果为0则不是2的幂次方; 然后判断…

    C 2023年5月23日
    00
  • 计时器的time_t和clock_t 的两种实现方法(推荐)

    计时器的time_t和clock_t的两种实现方法(推荐) 计时器是一个非常实用的工具,在很多应用场景中都得到了广泛的应用。time_t和clock_t是两种常见的计时器类型,它们都可以用于测量时间的长度。本文将详细介绍这两种类型的实现方法,以供大家参考。 time_t的实现方法 time_t是标准C库中的一种数据类型,它代表了从1970年1月1日零时整到给…

    C 2023年5月23日
    00
  • C语言实现进程间通信原理解析

    C语言实现进程间通信原理解析 什么是进程间通信? 进程是计算机中运行的程序的基本单位。每个进程都有自己的地址空间、代码、数据、变量等,它们相互独立,互相不干扰。进程间通信指的是不同的进程之间进行数据交换和共享资源的一种机制。 进程间通信的常见方式 进程间通信的常见方式有: 管道(Pipe) 消息队列(Message queue) 信号量(Semaphore)…

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