自动售货机C语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);//消除末尾的+号
}
}