自动售货机编程GO语言 编写自动售货机程序

自动售货机的程序代码怎么写? C语言大作业要交的,大路大神帮帮忙?( 'ω' )?整个程序的功能 :
商品入库补货
商品购买找零
还有乱七八糟的一堆验证
数据只有结构链表存储,退出不保存,你要写文件或数据库保存,你自己写吧 , 写不动了 。
演示看下图:
#includestdio.h
#includestring.h
#includemalloc.h
#define nameSize 21 //商品名称数组大小 可修改
typedef struct autoMA
{
char *spName;//商品名
intspNum;//商品数量
float spValue;//商品价格
struct autoMA *next;
}AMA;
AMA *amaNEW,*amaP1,*amaSelect;//定义一个新节点指针首节点指针查找用指针
int contStrplen(char *p);
int eqStr(char *str1,char *str2);//比较字符串是否相等,相等返回1 否则返回0
AMA * selectSP(AMA * AMAhead,char *spName);//通过名称查找商品 有返回节点地址没有返回NULL
void insertSP(AMA *AMAhead,AMA **AMAtail,char *VSPname,int VSPnum,float VSPvalue);//添加商品如果已有该商品 , 数量如果没有 新增
float * buySP(AMA *AMAhead,char *name,int num,float pay);//购买返回float数组[2]
int main()
{
AMA *AMAtail,*AMAhead;//定义一个头节点指针尾节点指针
float *b,value;
int num,answer;
char name[nameSize];
amaSelect=(AMA *)malloc(sizeof(AMA));
AMAhead=(AMA *)malloc(sizeof(AMA));
AMAtail=(AMA *)malloc(sizeof(AMA));
AMAhead-next=NULL;
mu: answer=0;
memset(name,0,nameSize);
num=0;
value=https://www.04ip.com/post/0;
printf("=====系统菜单====\n");
printf("补充库存,输入1\n");
printf("购买商品,输入2\n");
scanf("%d",answer);
if(answer==2AMAhead-next==NULL)
{
printf("当前没有商品库存,请先补充库存\n");
goto mu;
}
if(answer==1)
{
printf("输入 ESC 0 0 返回菜单\n");
while(1)
{
printf("\n请录入补充的商品名称(名称小于%d个字符,每项空格分隔):",(nameSize-1)/2);
scanf("%s",name);
printf("请录入补充的数量:");
scanf("%d",num);
printf("请录入单价:");
scanf("%f",value);
if(!eqStr(name,"ESC") || num!=0 || value!=0)
{
insertSP(AMAhead,AMAtail,name,num,value);
}
else
{
printf("\n录入结束返回主菜单\n");
goto mu;
}
}
}
if(answer==2AMAhead-next!=NULL)
{
tb:memset(name,0,nameSize);
num=0;
value=https://www.04ip.com/post/0;
printf("输入 ESC 0 0 返回菜单\n");
while(1)
{
printf("\n请输入要购买的商品名称(名称小于%d个字符):",(nameSize-1)/2);
scanf("%s",name);
printf("请输入要购买的数量:");
scanf("%d",num);
printf("请输入支付金额:");
scanf("%f",value);
if(!eqStr(name,"ESC") || num!=0 || value!=0)
{
b=buySP(AMAhead,name,num,value);
switch ((int)b[0])
{
case 1:
printf("\n购买商品成功,找回零钱%.2f元\n",b[1]);
break;
case 2:
printf("\n商品库存不足,当前剩余数量%d,请重新选择商品\n",(int)b[1]);
goto tb;
break;
case 3:
printf("\n支付金额不足,还需支付%.2f元\n",b[1]);
goto tb;
break;
default:
printf("\n发生错误!交易失败!\n");
break;
}
free(b);
b=NULL;
}
else
{
printf("\n购买结束返回主菜单\n");
goto mu;
}
}
}
return 0;
}
int contStrplen(char *p)//计算字符串指针指向空间的字符串长度并返回长度
{
int len=0,i=0;
while(p[i]!='\0')
{
len;
i;
}
return len;
}
int eqStr(char *str1,char *str2)//比较字符串是否相等,相等返回1 否则返回0
{
int i;
if(strlen(str1)!=strlen(str2))
return 0;
for(i=0;istrlen(str1);i)
{
if(str1[i]!=str2[i])
return 0;
}
return 1;
}
AMA * selectSP(AMA * AMAhead,char *spName)//通过名称查找商品 有返回节点地址没有返回NULL
{
if(AMAhead-next==NULL)
{
return NULL;
}
else
{
AMAhead-next=amaP1;//遍历查询前将头节点链表指针重置到首节点 为下次查询准备
while(AMAhead-next!=NULL)
{
if(eqStr(AMAhead-next-spName,spName))
{
return AMAhead-next;
}
AMAhead=AMAhead-next;
}
}
return NULL;
}
void insertSP(AMA *AMAhead,AMA **AMAtail,char *VSPname,int VSPnum,float VSPvalue)//添加商品如果已有该商品,数量如果没有 新增
//参数: 头结点指针地址尾节点指针地址商品名称
{
amaSelect=selectSP(AMAhead,VSPname);
if(amaSelect!=NULL)//商品已存在 数量核实价格
{
printf("\n商品%s已存在库存%d个,现添加%d个,现在共有库存%d个\n",amaSelect-spName,amaSelect-spNum,VSPnum,(amaSelect-spNum) VSPnum);
(amaSelect-spNum)=(amaSelect-spNum) VSPnum;
if(amaSelect-spValue!=VSPvalue)
{
printf("--该录入的价格与原价格不一致,保留原价格,如要更新价格,请在【更新商品信息】功能中修改(该功能暂未实现)\n");
}
}
else// 新增商品
{
amaNEW=(AMA*)malloc(sizeof(AMA));
amaNEW-spName=(char *)malloc(sizeof(char)*(contStrplen(VSPname) 1));//按照输入字符串长度申请内存空间大小
strcpy(amaNEW-spName,VSPname);
amaNEW-spNum=VSPnum;
amaNEW-spValue=https://www.04ip.com/post/VSPvalue;
amaNEW-next=NULL;
if(AMAhead-next==NULL)//首次新增该节点为首节点头结点链表指针和尾节点指针均指向该节点首地址
{
amaP1=amaNEW;
AMAhead-next=amaP1;
*AMAtail=amaP1;
}
else//添加到链表
{
(*AMAtail)-next=amaNEW;
*AMAtail=amaNEW;
}
printf("\n商品%s,数量%d个,价格%.1f元 已添加到贩卖机中\n",VSPname,VSPnum,VSPvalue);
}
}
float * buySP(AMA *AMAhead,char *name,int num,float pay)//购买返回float数组[2]
//购买商品成功返回[0]=1 [1]=找还金额
//失败库存不足返回[0]=2 [1]=当前库存
//失败金额不足返回[0]=3 [1]=还需支付金额
//失败货物不存在(一般不可能出现) [0]=4 [1]=4
{
float *err=(float *)malloc(sizeof(float)*2);
amaSelect=selectSP(AMAhead,name);
if(amaSelect!=NULL)//商品已存在 核实数量和价格
{
if((amaSelect-spNum)num)
{
err[0]=2;
err[1]=(float)(amaSelect-spNum);
}
if((amaSelect-spNum)=numnum*(amaSelect-spValue)pay)
{
err[0]=3;
err[1]=num*(amaSelect-spValue)-pay;
}
if((amaSelect-spNum)=numnum*(amaSelect-spValue)=pay)
{
err[0]=1;
err[1]=pay-num*(amaSelect-spValue);
amaSelect-spNum=amaSelect-spNum-num;
}
}
else
{
err[0]=4;
err[1]=4;
}
return err;
}
GO语言有哪些优势?怎样入门?1、学习曲线
它包含了类C语法、GC内置和工程工具 。这一点非常重要,因为Go语言容易学习 , 所以一个普通的大学生花一个星期就能写出来可以上手的、高性能的应用 。在国内大家都追求快,这也是为什么国内Go流行的原因之一 。
2、效率
Go拥有接近C的运行效率和接近PHP的开发效率 , 这就很有利的支撑了上面大家追求快速的需求 。
3、出身名门、血统纯正
之所以说Go语言出身名门,是因为我们知道Go语言出自Google公司,这个公司在业界的知名度和实力自然不用多说 。Google公司聚集了一批牛人,在各种编程语言称雄争霸的局面下推出新的编程语言,自然有它的战略考虑 。而且从Go语言的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展前途 。我们看看Go语言的主要创造者,血统纯正这点就可见端倪了 。
4、自由高效:组合的思想、无侵入式的接口
Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持 。Go语言支持当前所有的编程范式 , 包括过程式编程、面向对象编程以及函数式编程 。程序员们可以各取所需、自由组合、想怎么玩就怎么玩 。
5、强大的标准库
这包括互联网应用、系统编程和网络编程 。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用 。
6、部署方便:二进制文件、Copy部署
我相信这一点是很多人选择Go的最大理由 , 因为部署太方便了,所以现在也有很多人用Go开发运维程序 。
7、简单的并发
它包含了降低心智的并发和简易的数据同步,我觉得这是Go最大的特色 。之所以写正确的并发、容错和可扩展的程序如此之难 , 是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单 。
8、稳定性
Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切 。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go
tool、gofmt、go test 。
关于用两种语言编写一个程序的问题?用两种语言编写一个程序是可行的,但是你需要找一种主语言 , 而另外一种语言只编写接口和对应的框架程序封装,用主语言来调用它执行就可以了 。
【自动售货机编程GO语言 编写自动售货机程序】自动售货机编程GO语言的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于编写自动售货机程序、自动售货机编程GO语言的信息别忘了在本站进行查找喔 。

    推荐阅读