自动售货机C语言程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#define list

"%d....%c...%4.1fYuan.....%dleft\n",goods[i].number,goods[i].name,goods[i].price,goods[i].q uantity

float M;//M作为钱

int A=1,B=1;//A为数量标记,B为金钱标记,1表示有,0表示没有

struct goods//定义出物品清单

{

int number;

char name;

float price;

int quantity;

}goods[4]={{1,'A',0.5,5},{2,'B',4,5},{3,'C',11,5},{4,'D',2,5}};

struct money//定义出钱,数量用于记录补钱的某值张数

{

float money;

int mount;

}money[8]={{100,0},{50,0},{20,0},{10,0},{5,0},{1,0},{0.5,0},{0.1,0}};

void main()

{

void change(float m);//声明找钱模块

int sell(int n,float m,int a,int b);//声明出售模块

int i,n;//i用于循环显示商品列表,n用于记录输入的货号

float m1;//m1用于加钱

for(i=0;i<4;i++)

printf(list);

printf("input money first!\n");

scanf("%f",&M);

loop1:printf("you have %.1f\nnow you can choose the goods number,you can use 0 to leave\n",M);

scanf("%d",&n);

if(n==0) change(M);

else//确认用户是选择高开还是买东西

{loop2:sell(n,M,1,1);

if(A==0)//货没有了怎么办

{printf("there is no goods %d left\nyou have %.1f\ninput goods number,you can use 0 for leave\n",n,M);

scanf("%d",&n);

if(n==0)

change(M);

else

{A=1;

B=1;//要将标记归位

goto loop2;

}

}

else if(B==0)//没钱了怎么办

{printf("you can add money or add 0 to left\n");

scanf("%f",&m1);

if(m1==0)

change(M);

else

{M=M+m1;

A=1;

B=1;//标记要归位

goto loop1;

}

}

else//有钱又有货,继续选

goto loop1;

}

system("pause");

}

int sell(int n,float m,int a,int b)

{

int i=0;

while(n!=goods[i].number) i++;

if(m>=goods[i].price)

{if(goods[i].quantity>0)

{goods[i].quantity--;

M=m-goods[i].price;

for(i=0;i<4;i++)

printf(list);

printf("you have %.1f left\n",M);

}

else

A=0;

}

else

B=0;

if(M==0) B=0;//钱用光了

return(a);

return(b);

}

void change(float m)

{

int i;//用于辅助输出

float k=m;//用于找钱的时候显示用户余额

if(m==0)//钱用光了

printf("you have run out of your money\nthinks for coming");

else

{while(m>0.1)//此处若m==0则输入0.3之类的小数时有错误,该错误本人尚未理解for(i=0;i<8;i++)

if(money[i].money<=m)

{m=m-money[i].money;

money[i].mount++;

i--;//继续检索当前的面额是否符合条件,才会有相同面值出现

}

printf("thinks for coming!\nhere is your change\n%.1f=",k);

for(i=0;i<8;i++)

if(money[i].mount>0)

printf("%.1f*%d+",money[i].money,money[i].mount);

printf("%c",8);//消除末尾的+号

}

}

相关文档
最新文档