C++编程实现:显示一个表格,表格参数在程序运行时输入,输入由一行整数构成

C++编程实现:显示一个表格,表格参数在程序运行时输入,输入由一行整数构成,第1张

#include<stdio.h>

void prt0(int n)

{int i

 for(i=0i<ni++)

  世闹迅 putchar('#')

 putchar('\n')  

}

int 弯袜main()

{int n,m,i,j,k,a[20]={0},s=0

 char c=' ' 

 scanf("%d",&n)

 for(m=0c!='\n'm++)

   {scanf("%d%c",&a[m],&c)

    s+=a[m]

   }

 prt0(m+s+1)

 for(i=0i<ni++)

 {putchar('#')

  for(j=0j<mj++)

  {for(k=0k<搜此a[j]k++)

 putchar(' ')

   putchar('#') 

  }

  putchar('\n')

  prt0(m+s+1)

 }

 return 0

}

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

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

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

}

}


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

原文地址:https://54852.com/yw/12390209.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存