用c语言写使用单链表建立一个简易商品库存表的程序

用c语言写使用单链表建立一个简易商品库存表的程序,第1张

按照你题意,代码如下:(你提问题没有用编程模板,我这里代码只能直接贴,原格式都没了,你只能自己排版了 。)

(初始化数据的那段输入,只为演示,不要可以删除!)。

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <conio.h>

#include <windows.h>

typedef struct stock

{

int id

char name[10]

int stNum

struct stock *next

}STK

void addByName(STK **stkHead,STK **stkTail,STK *stkNew,char *name)//向指定名称商品后添加节点,不存在添加在表头

void meError(void *p)//内存申请失败

int add2Tail(STK **stkHead,STK **stkTail,STK *stkNew)//向链表尾部添加新节点, 成功返回1,失败返回0

int add2Head(STK **stkHead,STK **stkTail,STK *stkNew)//向链表头部添加新节点, 成功返回1,失败返回0

STK *newSTK()//创建新节点,新建节点

STK *initSTK()//初始化链表

void printSTK(STK *stkHead)

void tjAll(STK *stkHead)//统计总库存数量

int main()

{

int i

char name[10]

STK *stkHead=initSTK(),*stkTail=NULL

//----------为了测试,我在下面这段初始了3个节点,不需要可以删除

i=3

printf("请输入3个节点作为初始测试数据(不需要可以删除该段代码):\n")

while(i--)

if(!add2Tail(&stkHead,&stkTail,newSTK()))

printf("添加节点失败,请重新输入!\n"),i++

while(1)

{

system("cls")

printf("1、显示当前所有商品信息\n")

printf("2、统计商品总库存\n")

printf("3、向指定商品名后添加商品(名称不存在,将插入表头)\n")

scanf("%d",&i)

switch(i)

{

case 1:system("cls")printSTK(stkHead)break

case 2:system("cls")tjAll(stkHead)break

case 3:system("cls")printf("请输入要插入位置商品的名称:"),scanf("%s",name)addByName(&stkHead,&stkTail,newSTK(),name)break

}

printf("................按任意键继续!\n")

getch()

}

return 0

}

STK *initSTK()//初始化链表

{

STK *stkHead=(STK *)malloc(sizeof(STK))

meError(stkHead)

stkHead->next=NULL

return stkHead

}

void addByName(STK **stkHead,STK **stkTail,STK *stkNew,char *name)//向指定名称商品后添加节点,不存在添加在表头

{

int flag=0

STK *stkh=*stkHead

while(stkh->next)

{

if(strcmp(stkh->next->name,name)==0)

{

stkNew->next=stkh->next->next

stkh->next->next=stkNew

flag=1

break

}

stkh=stkh->next

}

if(flag)

printf("新的商品已成功添加到商品%s后面!\n",name)

else

{

add2Head(stkHead,stkTail,stkNew)

printf("%s不存在!新的商品已添加到表头!\n",name)

}

}

void printSTK(STK *stkHead)

{

printf("当前库存情况:\n")

while(stkHead->next)

{

printf("商品编号:%04d,商品名称:%9s,商品库存:%d\n",stkHead->next->id,stkHead->next->name,stkHead->next->stNum)

stkHead=stkHead->next

}

}

void tjAll(STK *stkHead)//统计总库存数量

{

int cnt=0,sum=0

while(stkHead->next)

{

cnt++

sum+=stkHead->next->stNum

stkHead=stkHead->next

}

printf("当前库存共%d种商品,总计库存数量%d\n",cnt,sum)

}

STK *newSTK()//创建新节点,新建节点

{

static int stockID=1//商品ID唯一,每次使用,自增

STK *stkNew=(STK *)malloc(sizeof(STK))

meError(stkNew)

stkNew->next=NULL

stkNew->id=stockID++

printf("请输入商品名称:")

scanf("%s",stkNew->name)

printf("请输入商品库存:")

scanf("%d",&stkNew->stNum)

return stkNew

}

int add2Tail(STK **stkHead,STK **stkTail,STK *stkNew)//向链表尾部添加新节点, 成功返回1,失败返回0

{

if(!(*stkHead))

return 0

if(!((*stkHead)->next))

add2Head(stkHead,stkTail,stkNew)

else

(*stkTail)->next=stkNew

*stkTail=stkNew

return 1

}

int add2Head(STK **stkHead,STK **stkTail,STK *stkNew)//向链表头部添加新节点, 成功返回1,失败返回0

{

if(!(*stkHead))

return 0

if(!((*stkHead)->next))

(*stkTail)=stkNew

stkNew->next=(*stkHead)->next

(*stkHead)->next=stkNew

return 1

}

void meError(void *p)//内存申请失败

{

if(p==NULL)

{

printf("\n异常:内存申请失败!回车结束程序!\n")

while(getch()!='\r')

exit(0)

}

}

我有一个学生管理系统程序,你可以把学生量改成库存量。

希望对你能有帮助。http://zhidao.baidu.com/question/2202293700663164948.html?oldq=1

需求表D2单元格写公式:

=IF(ISERROR(VLOOKUP(B2,库存表!A:B,2,FALSE)),SUMIF($B$2:B2,B2,$C$2:C2)-VLOOKUP(B2,库存表!A:B,2,FALSE),IF(VLOOKUP(B2,库存表!A:B,2,FALSE)-SUMIF($B$2:B2,B2,$C$2:C2)<0,SUMIF($B$2:B2,B2,$C$2:C2)-VLOOKUP(B2,库存表!A:B,2,FALSE),"OK"))

注意:缺少数是累计的,例如某物品在第一次缺少是2,第二次需求数量是5,那么缺少数量就是7。如果你不要累计的话,就使用下面的公式:

=IF(ISERROR(VLOOKUP(B2,库存表!A:B,2,FALSE)),min(c2,SUMIF($B$2:B2,B2,$C$2:C2)-VLOOKUP(B2,库存表!A:B,2,FALSE)),IF(VLOOKUP(B2,库存表!A:B,2,FALSE)-SUMIF($B$2:B2,B2,$C$2:C2)<0,min(c2,SUMIF($B$2:B2,B2,$C$2:C2)-VLOOKUP(B2,库存表!A:B,2,FALSE)),"OK"))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12189640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存