3. 有一仓库管理系统,需要对不同种类的商品编号、类型、名称、数量等信息进行管理。要求利用结构体变量记录每种商品的编号、类型、名称和数量,并建立单向链表来存放商品的信息。 功能实现要求如下: (1)写函数create()实现建立单链表来存放商品的信息。 (2)写函数show()输出所有商品的信息。 (3)写函数删除某类商品。(删除成功则提示“商品删除成功!”若删除失败提示“不存在!”) (4)写函数释放链表所占内存空间。
时间: 2024-02-23 12:59:13 浏览: 98
好的,我会尽力回答你的问题。对于你的第一个问题,我明白了。那么,关于你提到的仓库管理系统,我可以给你一些思路。
首先,你可以定义一个结构体来记录每种商品的信息,包括编号、类型、名称和数量。例如:
```c
struct commodity {
int id; // 商品编号
char type[20]; // 商品类型
char name[50]; // 商品名称
int quantity; // 商品数量
struct commodity *next; // 指向下一个商品的指针
};
```
然后,你可以编写一个函数create(),通过用户的输入来建立单向链表来存放商品的信息。例如:
```c
struct commodity *create() {
struct commodity *head, *p, *q;
head = (struct commodity *)malloc(sizeof(struct commodity));
head->next = NULL;
p = head;
while (1) {
q = (struct commodity *)malloc(sizeof(struct commodity));
printf("请输入商品编号:");
scanf("%d", &q->id);
printf("请输入商品类型:");
scanf("%s", q->type);
printf("请输入商品名称:");
scanf("%s", q->name);
printf("请输入商品数量:");
scanf("%d", &q->quantity);
p->next = q;
p = q;
printf("是否继续添加?(Y/N)");
char c;
scanf(" %c", &c);
if (c == 'N' || c == 'n') {
p->next = NULL;
break;
}
}
return head;
}
```
create()函数中,首先定义了一个头节点,然后通过循环获取用户输入的商品信息,将每个商品节点插入到链表的尾部。当用户不再添加商品时,将最后一个节点的next指针设置为NULL,以此结束链表的建立。
接下来,你可以编写一个函数show(),通过遍历链表来输出所有商品的信息。例如:
```c
void show(struct commodity *head) {
struct commodity *p = head->next;
printf("商品编号\t商品类型\t商品名称\t商品数量\n");
while (p != NULL) {
printf("%d\t\t%s\t\t%s\t\t%d\n", p->id, p->type, p->name, p->quantity);
p = p->next;
}
}
```
show()函数中,首先输出表头,然后通过循环遍历链表,输出每个商品节点的信息。
接着,你可以编写一个函数delete(),通过遍历链表来删除某个商品节点。例如:
```c
void delete(struct commodity *head, int id) {
struct commodity *p = head, *q;
while (p->next != NULL) {
if (p->next->id == id) {
q = p->next;
p->next = q->next;
free(q);
printf("商品删除成功!\n");
return;
}
p = p->next;
}
printf("不存在!\n");
}
```
delete()函数中,首先定义了两个指针p和q,通过循环遍历链表,查找待删除的商品节点。如果找到了,就将该节点从链表中删除,并释放其所占内存空间。如果未找到,就输出提示信息。
最后,你可以编写一个函数free_list(),通过遍历链表来释放链表所占内存空间。例如:
```c
void free_list(struct commodity *head) {
struct commodity *p = head, *q;
while (p != NULL) {
q = p->next;
free(p);
p = q;
}
}
```
free_list()函数中,通过循环遍历整个链表,释放每个商品节点所占的内存空间,并将其指针设置为NULL,以此结束链表的释放。
以上就是实现仓库管理系统的一些思路,希望能对你有所帮助。