C语言利用链式存储结构来存储商品的编号、名称、数量,编写程序完成下列功能: 1、创建一个链表来存储商品的信息 2、根据编号或者名称查询商品的库存 3、实现商品的入库管理(新商品入库和已有商品入库) 4、实现商品的出库管理(出库和下架)
时间: 2024-09-12 21:10:59 浏览: 94
在C语言中,我们可以使用链表数据结构来存储商品信息,每个节点包含商品的编号、名称和数量。以下是实现这些功能的基本步骤:
1. **创建链表存储商品信息**:
定义一个结构体,如`struct Goods`,包含三个字段:`id`, `name`, 和 `quantity`。然后定义一个链表节点`typedef struct Node`,包含指向下一个节点的指针`next`以及商品信息。
```c
typedef struct {
int id;
char name[50];
int quantity;
} Goods;
typedef struct Node {
Goods info;
struct Node* next;
} Node;
```
创建链表头节点`Node head = {NULL}`。
2. **查询商品库存**:
设计一个函数,比如`search_by_id()`或`search_by_name()`, 接收编号或名称作为参数,遍历链表查找匹配的商品,并返回其库存。
```c
Goods search_node(Node* node, int id_or_name) {
while (node != NULL) {
if (node->info.id == id_or_name || strcmp(node->info.name, id_or_name) == 0) {
return node->info;
}
node = node->next;
}
// 如果未找到,可以返回错误消息或NULL
}
```
3. **入库管理**:
- 新商品入库:添加新节点到链表头部。
```c
void add_item(Goods new_item) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->info = new_item;
newNode->next = head;
head = newNode;
}
```
- 已有商品入库:遍历链表找到目标商品并更新库存。
```c
void update_quantity(int id, int delta) {
Node* node = head;
while (node != NULL) {
if (node->info.id == id) {
node->info.quantity += delta;
break;
}
node = node->next;
}
}
```
4. **出库管理和下架**:
- 出库:减少库存。如果库存小于0,则表示已售罄。
```c
void remove_item(int id, int amount) {
Node* prev = NULL;
Node* node = head;
while (node != NULL) {
if (node->info.id == id && node->info.quantity >= amount) {
node->info.quantity -= amount;
if (prev == NULL) {
head = node->next;
} else {
prev->next = node->next;
}
free(node);
break;
} else {
prev = node;
node = node->next;
}
}
}
```
- 下架:设置商品库存为0,相当于移除链接。
```c
void delist_item(int id) {
for (Node* node = head; node != NULL; node = node->next) {
if (node->info.id == id) {
node->info.quantity = 0; // 或者删除该节点
break;
}
}
}
```
阅读全文