问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2023-11-04 02:43

我来回答

1个回答

热心网友 时间:2024-07-31 03:22

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

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

#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);

}

}

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

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 nam...

c语言程序设计 用链表编写商品库存管理。

printf("链表为空,将建立链表!\n");node_push(link);} else{ if( n &lt;= 1){ printf("在链表头插入数据\n");new_node = create_node();

用C语言实现建立一个单链表的过程,并实现打印链表中每一个元素,写出完...

include&lt;stdlib.h&gt; typedef struct linkednode { char data;struct linkednode *next;}node,*link_list;//链表节点的结构及重命名 link_list creat()//创建一个链表返回类型是链表的首地址 { link_list L;node *p1,*p2;char data;L=(node*)malloc(sizeof(node));//开辟存储空间 p2=L;while...

用C语言实现建立一个单链表的过程,并实现打印链表中每一个元素,写出完...

include&lt;stdlib.h&gt; typedef struct linkednode { char data;struct linkednode *next;}node,*link_list;//链表节点的结构及重命名 link_list creat()//创建一个链表返回类型是链表的首地址 { link_list L;node *p1,*p2;char data;L=(node*)malloc(sizeof(node));//开辟存储空间 p2=L;while...

C语言求解单链表的建立

else tail=tail-&gt;next=p; } return head; } struct chain *inlink(struct chain *head,int a,int b) //int a代表要插入的节点,int b代表创建节点的数据域 { struct chain *p,*q,*s; s = (struct chain *)malloc(sizeof(struct chain)); s-&gt;value=b; if(head==NULL) { head = ...

帮我编写一个用C语言编写的单链表的建立,和输入输出操作,谢谢各位_百度...

int num;struct node *next;}lnode;lnode *creat(){ lnode *head,*p,*q;int n;head=NULL;printf("输入要创建的节点数\n");scanf("%d",&amp;n);while(n){ p=(lnode *)malloc(sizeof(lnode));printf("输入数据\n");scanf("%d",&amp;p-&gt;num);if (head==NULL){ head=q=p;} else ...

用c语言编写程序,实现单链表的建立(数据元素为1,2,3,4,5,6),遍历,查...

void foo(struct node *a){ while (a-&gt;next != NULL){ printf("%d\t", a-&gt;val);a = a-&gt;next;} printf("\n");} // 插入 void insert(struct node *a, struct node *b, int n){ int i;for (i = 1; i &lt; n - 1; i++)a = a-&gt;next;b-&gt;next = a-&gt;next;a-&gt;...

编写一个C语言程序 实现单链表的基本操作

return 1;} int LocateElem(SeqList L,DataType e)/*查找线性表中元素值为e的元素,查找成功将对应元素的序号返回,否则返回0表示失败。*/ { int i;for(i=0;i&lt;L.length;i++) /*从第一个元素开始比较*/ if(L.list[i]==e)return i+1;return 0;} int InsertList(SeqList *L,int i...

用C语言编程实现单链表的基本操作

param head 链表头节点 param offset 节点前移的位数 / void EncryptList(LNodePtr head,int offset){ LNodePtr tNode = head-&gt;next;int i;for(i = 0; i &lt; offset; i++){ if(tNode-&gt;next != NULL){ tNode = tNode-&gt;next;} } if(i == offset){ LNodePtr newHead = tNode;L...

单链表问题用C语言编写

单链表是一种顺序存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据元素。因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j 和 i 单链表 1、链接存储方法 链接方式存储的线性表简称为链表(Linked List)。链表的具体存储表示为:① 用一组任意的存储单元来存放线性表的结点(...

c语言单链表程序代码 c语言单链表的创建 简单c语言程序编写 简单c语言程序 单链表c语言 c语言实现单链表 数据结构单链表c语言 c语言链表有什么用 c语言单链表反转
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
燕京啤酒(桂林漓泉)股份有限公司公司简介 儿童沙眼症状 巴西龟眼睛红肿,流鼻涕 炒勺子肉制作过程 奥迪Q3Q3打开电源,不开发动机,机舱里面有风扇在转,是什么情况? 明锐发动机机舱过热正常吗? 酒吧装酒是什么意思呀? 万智牌 规则 问题 出去玩带点什么吃的好呢 出去玩应该带什么吃的好 一个类似红警单机的一个游戏,只有三个国家,一个是蓝颜色的,一...2 ...在产品,半成品,产成品,商品以及周转材料有什么区别,怎么区分啊... 华为手机不显示怎么设置5 华为哪款手机可以隐藏? 我是华为手机我要把我的隐藏起来怎么弄我想让别人搜不到我1 华为手机怎样隐藏?5 如何将微信好友转移到另一个上? 高一政治:结合材料,有人认为:“在人们高度关注收入分配公平的... 给孩子选择幼儿园要注意哪些问题,什么幼儿园不能去? 辽宁省北镇市属于哪个地区7 当兵不到一个月,不想在部队了,回家有啥处分呢 为何我用这款显卡(七彩虹 逸彩9600GSO-GD2 CF黄金版 512M),在玩游戏的... 打印机驱动程序怎么安装2498 我是明年要考研的小盆友,目前想报考西安电子科技大学的的计算机... 尼桑传奇跑车排量是多少1 注销之后还能恢复么?如果能恢复需要通过什么途径恢 ...申请了一个,我想用之前的,怎样才能登上去,没绑卡 公司里很多人是老板的亲戚,我该怎么办?446 曹操和刘邦谁厉害5 刘邦和曹操哪个更厉害1 4平方米二多少平方分米。65平方米=多少平方厘米。120平方... 有人坐过北京到深圳的高铁动卧吗9 原始wxid怎么加好友 ...问题让我很纠结,是关于工作的,现在有两份工作让我选择,但是想了很久... 求学园天堂PS2版的汉化版,各个线路的攻略~525408736@qq.com 两个微信用的是一个手机号怎么把旧的给找回来? 我想问一下公爵有什么用吗? 学校花园里的花常被人摘,写一种提示语放在花园里25 剃须刀装的5号可充电池1.2v500毫安想更换1.2v4600毫安电池可以不可以... ...高七米,没有左右两边求它的棱长总和,表面积和体积? 孩子不愿意去幼儿园,有哪些原因呢? 怎么才能改掉花钱大的毛病1 怎么才能改掉强迫症这个毛病?1 宇昊这个名字的寓意 有人破坏学校的花草树木我们能看着不管吗写的是怎样的修辞手法36 德宏ST116L笔记本电脑能安装CAD吗 普通硅酸盐水泥强度等级分为( )。 信托的原状分配是什么意思 应届生找到两份工作,我该怎么选择?一份职业寿命短,对身体有一定的危害... 和红警一样的游戏,但是只有三个国家,中国有黑客