使用动态链表完成一个简单的商品库存信息管理系统。不知道哪里错了
题目如下:•
使用动态链表完成一个简单的商品库存信息管理系统。
•商品信息包括如下字段:商品号、商品名称、商品库存
•函数
create:接收用户输入的商品号和商品名称的信息,建立链表;库存初始化为0,没有进货之前不允许销售;商品号为0表示用户输入结束。本函数用于初始化,如果第二次被调用的时候,首先要执行destroy清除旧链表。
destroy:给定链表的头指针,删除链表的所有节点,并释放相应的空间。本函数在程序退出前应至少被调用一次。在调用此函数前,必须给予用户提示,使用户在删除前有反悔的机会。
sell:商品销售,由参数传入商品号和销售数量。如果不存在给定商品号的商品或销售数量大于相应商品的库存则出错;否则,从指定商品的库存中扣除相应的销售数量。当商品库存为0,则从链表中删除该商品。
stock:商品进货,由参数传入商品号和进货数量。如果不存在给定商品号的商品则在链表中插入新商品,并提示用户输入该商品名称;否则,增加指定商品的库存量。
list:列出所有商品的情况。
•主程序
程序运行后,循环显示如下菜单:
1. 输入商品信息2. 销售3. 进货4. 列举商品信息5. 清除所有商品6. 退出
根据用户的选择进一步提示用户输入并调用对应函数。
我的代码如下:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Goods)
struct Goods
{
long num;
char name[50];
int q;
struct Goods *next;
};
int K=0;
struct Goods *creat(void)
{
int n=0;
struct Goods *head;
struct Goods *p1,*p2;
p1=p2=(struct Goods*)malloc(LEN);
printf("输入商品号:");
scanf("%ld",&p1->num);
printf("输入商品名:");
scanf("%s",p1->name);
printf("输入商品数量:");
scanf("%d",&p1->q);
head=NULL;
while(p1->num!=0)
{
n++;
if(n==1)
head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Goods*)malloc(LEN);
printf("输入商品号:");
scanf("%ld",&p1->num);
printf("输入商品名:");
scanf("%s",p1->name);
printf("输入商品数量:");
scanf("%d",&p1->q);
}
p2->next=NULL;
K=1;
return (head);
}
void destroy(struct Goods *head)
{
struct Goods *q1,*q2;
q1=q2=(struct Goods*)malloc(LEN);
q1=q2=head;
if(head!=NULL)
do
{
q2=q1->next;
free(q1);
q1=q2;
}while(q1!=NULL);
free(q1);
}
struct Goods *sell(struct Goods *head)
{
struct Goods *S1,*S2;
S2=S1=head;
long sell_num;
int sell_q,n=0,T=0;
printf("请输入商品号和售货数量:");
scanf("%ld%d",&sell_num,&sell_q);
if(head!=NULL)
do
{
n=n+1;
if(n==1)
{
if(S2->q==0)
{
S1=S2->next;
free(S2);
head=S1;
S2=S1;
n=0;
exit(0);
}
else
{
S2=S1->next;
S2=S1;
}
}
if(n>1)
{
S1=S2->next;
if(S1->q==0)
{
S2->next=S1->next;
free(S1);
S1=S2;
}
S2=S1;
exit(0);
}
}while(S1!=NULL);
S1=S2=head;
if(head!=NULL)
do
{
S2=S1->next;
if(S1->num==sell_num)
{
T=1;
if(sell_q>S1->q)
printf("Error");
else
S1->q=S1->q-sell_q;
break;
}
S1=S2;
}while(S1!=NULL);
if(T==0)
printf("Error");
return (head);
}
struct Goods *stock(struct Goods *head)
{
struct Goods *S1,*S2,*S;
S1=S2=(struct Goods*)malloc(LEN);
S2=S1=head;
long st_num;
int st_q,n=0,T=0;
printf("请输入商品号和进货数量");
scanf("%ld%d",&st_num,&st_q);
while(S1!=NULL)
{
S=S1;
S2=S1->next;
if(S1->num==st_num)
{
T=1;
S1->q=S1->q+st_q;
break;
}
S1=S2;
}
if(T==0)
{
printf("该产品不存在,请输入新产品信息!");
S2=(struct Goods*)malloc(LEN);
printf("输入商品号:");
scanf("%ld",&S2->num);
printf("输入商品名:");
scanf("%s",S2->name);
printf("输入商品数量:");
scanf("%d",&S2->q);
S->next=S2;
S2->next=NULL;
}
K=2;
return(head);
}
void list(struct Goods *head)
{
struct Goods *p;
p=head;
if(head!=NULL)
do
{
printf("unm.:%ldnname:%sn数量:%dn",p->num,p->name,p->q);
p=p->next;
}while(p!=NULL);
}
int main()
{
struct Goods *head;
int i,j;
printf("在进货前不允许销售,在未输入商品信息前不允许进货、列举商品信息和进行清除操作n");
while(1)
{
printf("菜单:n1.输入商品信息n2.销售n3.进货n4.列举商品信息n5.清除所有商品n6.退出n");
scanf("%d",&i);
if(i==1)
head=creat();
else if(i==2)
{
if(K!=2)
{
printf("未进货,不能销售n");continue;
}
else
head=sell(head);
}
else if(i==3)
{
if(K==0)
{
printf("未输入商品信息,不能进货n");continue;
}
else
head=stock(head);
}
else if(i==4)
{
if(K==0)
{
printf("未输入商品信息,不能列举n");continue;
}
else
list(head);
}
else if(i==5)
{
printf("确定要清除商品吗?按0确定,按1返回");
scanf("%d",&j);
if(j==0)
{
if(K==0)
{
printf("未输入商品信息,不能进行该操作n");continue;
}
else
{
destroy(head);return (0);
}
}
else if(j==1)
continue;
else
printf("错误操作!n");
}
else if(i==6)
return (0);
else
printf("Error!");
printf("nn");
}
destroy(head);
}
相关知识
erp系统在哪里查看库存
花店卖花系统课程设计
springboot毕设便利店连锁经营管理系统程序+论文+部署
springboot+vue仓库管理系统【开题+程序+论文】
该系统为花店销售管理系统 rar压缩包免费下载
小小花店管理系统的设计与实现 毕业设计开题报告
基于flask+vue框架的网上花店销售管理系统[开题+论文+程序]
基于Java的花卉销售系统的设计与实现/管理系统/鲜花网站
{“title”:“低温乳品库存管理技巧 最新保鲜技术提升管理效率”}
[附源码]java毕业设计鲜花销售管理系统
网址: 使用动态链表完成一个简单的商品库存信息管理系统。不知道哪里错了 https://www.huajiangbk.com/newsview561529.html
上一篇: 花店库存怎么管理 |
下一篇: 库存管理信息系统背景 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039