自动售货机编程GO语言 自动售货机程序代码

关于用两种语言编写一个程序的问题?

用两种语言编写一个程序是可行的,但是你需要找一种主语言,而另外一种语言只编写接口和对应的框架程序封装,用主语言来调用它执行就可以了。

成都创新互联公司专业为企业提供双桥网站建设、双桥做网站、双桥网站设计、双桥网站制作等企业网站建设、网页设计与制作、双桥企业网站模板建站服务,十载双桥做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

自动售货机的程序代码怎么写? C语言大作业要交的,大路大神帮帮忙٩( 'ω' )و

整个程序的功能 :

商品入库  补货

商品购买  找零

还有乱七八糟的一堆验证

数据只有结构链表存储,退出不保存,你要写文件或数据库保存,你自己写吧,写不动了。

演示看下图:

#includestdio.h

#includestring.h

#includemalloc.h

#define nameSize 21 //商品名称数组大小 可修改

typedef struct autoMA

{

char *spName;//商品名

int  spNum;//商品数量

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=0;

printf("=====系统菜单====\n");

printf("补充库存,输入1\n");

printf("购买商品,输入2\n");

scanf("%d",answer);

if(answer==2  AMAhead-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==2  AMAhead-next!=NULL)

{

tb:     memset(name,0,nameSize);

num=0;

value=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=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)=num  num*(amaSelect-spValue)pay)

{

err[0]=3;

err[1]=num*(amaSelect-spValue)-pay;

}

if((amaSelect-spNum)=num  num*(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语言 自动售货机程序代码
文章链接:http://myzitong.com/article/dojdohs.html