自动售货机系统源代码
- 格式:doc
- 大小:67.50 KB
- 文档页数:10
自动售货机图形模拟系统源代码一头文件1)mouse.h (鼠标模块头文件)#include <stdio.h>#include <stdlib.h>#include <graphics.h>#include <conio.h>#include <dos.h>void InitGra();int InitMouse();void DrawMouse(int x,int y);void Mousemove(int *ox,int *oy,int *x,int *y,int *t);void ReadMouse(int *f, int *x, int *y);void ErrMsg();void Quit();2)button.h (按钮模块头文件)#include<bios.h>#include<conio.h>#define LEFT 1#define RIGHT 2void Drawbutton(int *v,int color1,int color2);void Buttdownup(int *v);int Pressbutt(int (*v)[4],int m, int *t);3)drawfram.h (画边框头文件)void Drawrec(int left,int top,int right,int bottom,int color,int line); void Frame1();void Frame2();4)main.h (主程序头文件)#include <stdio.h>void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);struct Goodsinfo{int code;long num;char name[10];};struct Moneyinfo{long onenum;long fivenum;long tennum;long sum;};5)mainmenu.h (主菜单头文件)void Window1(int (*v)[4]);void sale(struct Goodsinfo *drink2,struct Moneyinfo *money2); void Inputpa(struct Goodsinfo *drink8,struct Moneyinfo *money8); 6)sale.h (购买模块头文件)void Window2(int(*v)[4]);void sale(struct Goodsinfo *drink2,struct Moneyinfo *money2); void Shownum(int x1,int y1,int x2,int y2,int buynum);void Clew(int *buynum,int x1,int y1,struct Goodsinfo *drink5); void Ensure(int*x0,int*x1,int*x2,struct Goodsinfo *drink3,struct Moneyinfo *money3);7)ensure.h (确定购买头文件)void Window3(int(*v)[4]);void Buyinfo(int *px0,int *px1,int *px2);void Ensure(int*x0,int*x1,int*x2,struct Goodsinfo *drink3,struct Moneyinfo *money3);void Pay(int *px0,int *px1,int *px2,struct Goodsinfo *,struct Moneyinfo *);void sale(struct Goodsinfo *drink2,struct Moneyinfo *money2);8)pay.h (购买模块头文件)void Window4(int (*v)[4]);void Pay(int *px0,int *px1,int *px2,struct Goodsinfo *,structMoneyinfo *);void Showpay(int paysum,char *buf);void Delclew();void Minus(int *x0,int *x1,int *x2,struct Goodsinfo *drink6);void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);void Over(struct Goodsinfo *drink7,struct Moneyinfo *money7,int pay,int paysum);9)over.h (购买结束模块头文件)#include<math.h>void Window5(int(*v)[4]);void Return(int pay,int paysum,struct Moneyinfo *money6);void Cartoon();void Showreturninfo(int a,int c0,int d0);void Over(struct Goodsinfo *drink7,struct Moneyinfo *money7,int pay,int paysum);void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);void sale(struct Goodsinfo *drink2,struct Moneyinfo *money2); 10)inputpa.h (密码模块头文件)#include<bios.h>void Window6(int(*v)[4]);void Inputpa(struct Goodsinfo *drink8,struct Moneyinfo *money8); int Checkpa(int *pinputpa,int *ppassword,int j);int Password(int Button,int x,int y,int (*v)[4]);void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);void Admiser(struct Goodsinfo *drink9,struct Moneyinfo *money9); #define ENTER 0x1c0d11)admiser.h (管理员模块头文件)void Window7(int(*v)[4]);void Admiser(struct Goodsinfo *drink9,struct Moneyinfo *money9); void Goodsser(struct Goodsinfo *drink10,struct Moneyinfo *money10);void Moneyser(struct Goodsinfo *drink14,struct Moneyinfo *money14);void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);12)goodsser.h (库存模块头文件)void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);void Window8(int (*v)[4]);void Showgoodsinfo(struct Goodsinfo *drink11);void Goodsser(struct Goodsinfo *drink10,struct Moneyinfovoid Addgoods(struct Goodsinfo *drink13,struct Moneyinfo *money13);void Admiser(struct Goodsinfo *drink9,struct Moneyinfo *money9); 13)addgoods.h (增加库存模块头文件)void Goodsser(struct Goodsinfo *drink10,struct Moneyinfo *money10);void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);void Admiser(struct Goodsinfo *drink9,struct Moneyinfo *money9); void Window9(int (*v)[4]);void Addgoodsinfo(struct Goodsinfo *drink12);void Addgoods(struct Goodsinfo *drink13,struct Moneyinfo *money13);void Keyboard(long *addnum,char (*str)[50],int *k,int (*v)[4]); 14)moneyser.h (资金模块头文件)void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);void Admiser(struct Goodsinfo *drink9,struct Moneyinfo *money9); void Window10(int (*v)[4]);void Showmoneyinfo(struct Moneyinfo *money11);void Addmoney(struct Goodsinfo *drink15,struct Moneyinfo15)addmoney.h (增减资金模块头文件)void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1);void Admiser(struct Goodsinfo *drink9,struct Moneyinfo *money9); void Moneyser(struct Goodsinfo *drink14,struct Moneyinfo *money14);void Window11(int (*v[4]));void Addmoneyinfo();void Addmoney(struct Goodsinfo *drink15,struct Moneyinfo *money15);void Keyboard(long *addnum,char (*str)[50],int *k,int (*v)[4]); 16)keyboard.h (键盘模块头文件)#include<bios.h>#define ENTER 0x1c0dint Addmenu(int Button,int x,int y,int(*v)[4]);void Keyboard(long *addnum,char (*str)[50],int *k,int (*v)[4]);二函数1.main#include"main.h"void main(){Struct Goodsinfo drink[3]={{1,20,"cola"},{2,20,"milk"},{3,20,"coffee"}};struct Moneyinfo money={100,20,0,0};money.sum=money.onenum+5*money.fivenum+10*money.tennum; Mainmenu(drink,&money);}2.mainmenu#include"main.h"#include"mouse.h"#include"button.h"#include"mainmenu.h"#include"drawfram.h"void Window1(int (*v)[4]){setbkcolor(CY AN);int i;Frame1();for(i=0;i<3;i++){Drawbutton(v[i],15,8);}settextstyle(0,0,1);outtextxy(177,177,"buy service");outtextxy(280,177,"[costumer use]");outtextxy(175,217,"admi service");outtextxy(280,217,"[administer use]");outtextxy(200,257,"quit");outtextxy(177,290,"please choose the service you want!"); settextstyle(0,0,2);outtextxy(250,130,"welcome!");}void Mainmenu(struct Goodsinfo *drink1,struct Moneyinfo *money1) //主菜单{struct Goodsinfo *pdrink1=drink1;struct Moneyinfo *pmoney1=money1;int k=0,t=1;intv[3][4]={{170,170,270,190},{170,210,270,230},{170,250,270,270} };InitGra(); //图形初始化Window1(v); //画界面if (! InitMouse()) ErrMsg(); //鼠标初始化k=Pressbutt(v,3,&t);switch(k){case 1:sale(pdrink1,pmoney1); //购买饮料break;case 2:Inputpa(pdrink1,pmoney1); //输入密码break;case 3:Quit(); //退出}}3.sale#include"mouse.h"#include"button.h"#include"drawfram.h"#include"sale.h"#include"main.h"void Window2(int (*v)[4]){cleardevice();Frame2();int i,j;for(i=0;i<8;i++){Drawbutton(v[i],15,8);}for(j=0;j<3;j++){settextstyle(0,0,1);outtextxy(327,207+40*j,"+");outtextxy(357,207+40*j,"-");outtextxy(375,220+40*j,"chosen:0"); }outtextxy(210,207,"[ cola ]");outtextxy(210,247,"[ milk ]");outtextxy(208,287,"[coffee]");outtextxy(210,327,"Enter");outtextxy(210,367,"Exit");settextstyle(2,0,6);outtextxy(270,70,"READ THIS");settextstyle(0,0,1);outtextxy(110,90,"cola:2 yuan per bottle;");outtextxy(110,110,"milk:3 yuan per box;");outtextxy(110,130,"coffee:5 yuan per cup.");outtextxy(110,150,"If you want one more drink,click '+' behind the drink name, ");outtextxy(110,170,"one less,click '-' behind the drink name.");}void sale(struct Goodsinfo *drink2,struct Moneyinfo *money2)//购买饮料{struct Goodsinfo *pdrink2=drink2;struct Moneyinfo *pmoney2=money2;int v[8][4]={{320,200,340,220},{350,200,370,220},{320,240,340,260},{350,240,370,260},{320,280,340,300},{350,280,370,300},{170,320,280,340},{170,360,280,380}};int k,buynum0=0,buynum1=0,buynum2=0,t=1;Window2(v);{k=Pressbutt(v,8,&t);if(k==1){buynum0++;Clew(&buynum0,460,220,pdrink2);//提示货物不足Shownum(430,220,450,230,buynum0);//显示已买饮料数目}if(k==2){buynum0--;Clew(&buynum0,460,220,pdrink2);Shownum(430,220,450,230,buynum0);}if(k==3){buynum1++;Clew(&buynum1,460,260,pdrink2+1);Shownum(430,260,450,270,buynum1);}{buynum1--;Clew(&buynum1,460,260,pdrink2+1);Shownum(430,260,450,270,buynum1);}if(k==5){buynum2++;Clew(&buynum2,460,300,pdrink2+2);Shownum(430,300,450,310,buynum2);}if(k==6){buynum2--;Clew(&buynum2,460,300,pdrink2+2);Shownum(430,300,450,310,buynum2);}}while(k==7){Ensure(&buynum0,&buynum1,&buynum2,pdrink2,pmoney2);//顾客确认是否购买}while(k==8){Mainmenu(pdrink2,pmoney2);}}void Shownum(int x1,int y1,int x2,int y2,int buynum)//显示选择饮料数量{char num[10];void *p;unsigned s;s=imagesize(x1,y1,x2,y2);p=malloc(s);getimage(x1,y1,x2,y2,p);putimage(x1,y1,p,1);itoa(buynum,num,10);outtextxy(x1,y1,num);free(p);}void Clew(int *buynum,int x1,int y1,struct Goodsinfo *drink5)//当所选饮料不足时提示不足{void *buf;unsigned s;s=imagesize(x1,y1-5,x1+85,y1+8);buf=malloc(s);if(*buynum>drink5->num){outtextxy(x1,y1,"Not enough!");*buynum=drink5->num;}if(*buynum>=0&&*buynum<drink5->num){getimage(x1,y1-5,x1+85,y1+8,buf);putimage(x1,y1-5,buf,1);free(buf);}if(*buynum<0)*buynum=0;}4.ensure#include"mouse.h"#include"button.h"#include"drawfram.h"#include"ensure.h"void Window3(int (*v)[4]){cleardevice();int i;Frame1();for(i=0;i<2;i++){Drawbutton(v[i],15,8);}settextstyle(2,0,6);outtextxy(150,110,"you have chosen:"); outtextxy(150,125," bottles of cola;"); outtextxy(150,140," boxes of milk;"); outtextxy(150,155," cups of coffee.");outtextxy(150,170,"Y ou should pay yuan!");outtextxy(150,185,"Are you sure to pay these drinks?"); outtextxy(150,200,"click Y es to pay,No to choose again."); outtextxy(157,251,"Y es");outtextxy(358,251,"No");}void Buyinfo(int *px0,int *px1,int *px2)//显示已选择货物信息,和应付费用{char a[10],b[10],c[10],d[10];int total=2*(*px0)+3*(*px1)+5*(*px2);itoa(*px0,a,10);itoa(*px1,b,10);itoa(*px2,c,10);itoa(total,d,10);setcolor(BLUE);outtextxy(155,125,a);outtextxy(155,140,b);outtextxy(155,155,c);outtextxy(290,170,d);setcolor(RED);}void Ensure(int*x0,int*x1,int*x2,struct Goodsinfo *drink3,struct Moneyinfo *money3) //确定是否购买{struct Goodsinfo *pdrink3=drink3;struct Moneyinfo *pmoney3=money3;int k,t;int *px0=x0,*px1=x1,*px2=x2;int v[2][4]={{150,250,190,270},{350,250,390,270}};Window3(v);Buyinfo(px0,px1,px2);k=Pressbutt(v,2,&t);if(k==1) //若购买,付钱{Pay(px0,px1,px2,pdrink3,pmoney3);}if(k==2) //若不购买,返回重新选择{sale(pdrink3,pmoney3);}}5.pay#include"main.h"#include"mouse.h"#include"button.h"#include"drawfram.h"#include"pay.h"void Window4(int(*v)[4]){int i;cleardevice();Frame2();settextstyle(0,0,1); setlinestyle(0,0,1);for(i=0;i<5;i++){Drawbutton(v[i],15,8); }outtextxy(170,207,"[ one ]"); outtextxy(287,207,"+"); outtextxy(170,247,"[ five ]"); outtextxy(287,247,"+"); outtextxy(170,287,"[ ten ]");outtextxy(287,287,"+");outtextxy(210,327,"Enter");outtextxy(210,367,"Exit");settextstyle(2,0,6);outtextxy(270,60,"READ THIS");settextstyle(0,0,1);outtextxy(60,100,"If you want to pay one more piece of money,click '+' behind the");outtextxy(60,130,"money name.");settextstyle(2,0,6);setcolor(BLUE);outtextxy(80,150,"Y ou should pay yuan this time,please insert money!");outtextxy(100,170,"Y ou have paid 0 yuan!");}void Pay(int*px0,int*px1,int*px2,struct Goodsinfo *drink4,struct Moneyinfo *money4) //付钱{int *x0=px0,*x1=px1,*x2=px2,pay,paysum=0,k,t=1;struct Goodsinfo *pdrink4=drink4;struct Moneyinfo *pmoney4=money4;int v[5][4]={{280,200,300,220},{280,240,300,260},{280,280,300,300},{170,320,280,340},{170,360,280,380}};char buf1[10],buf2[10];Window4(v);pay=2*(*x0)+3*(*x1)+5*(*x2);itoa(pay,buf1,10);outtextxy(225,150,buf1);while(k<4||k==4&&paysum<pay){k=Pressbutt(v,5,&t);if(k==1){paysum+=1; //已付费用增加pmoney4->onenum+=1; //相应货币的数量增加1Showpay(paysum,buf2); //显示已付费用}if(k==2){paysum+=5;pmoney4->fivenum+=1;Showpay(paysum,buf2);}if(k==3){paysum+=10;pmoney4->tennum+=1;Showpay(paysum,buf2);}if(k==4&&paysum<pay) //假如所付费用不足以购买已选择饮料,提示继续付钱{settextstyle(0,0,1);outtextxy(290,335,"Not enough money!"); //提示delay(500); //显示500毫秒Delclew(); //删除提示}}if(k==4&&paysum>=pay) //假如费用足够,购买结束{Minus(x0,x1,x2,pdrink4); //相应饮料数量减少相应数目Over(pdrink4,pmoney4,pay,paysum); //购买结束}if(k==5) //返回主菜单{Mainmenu(pdrink4,pmoney4);}}void Minus(int *x0,int *x1,int *x2,struct Goodsinfo *drink6){ //购买完后相应饮料数目减少drink6[0].num-=*x0;drink6[1].num-=*x1;drink6[2].num-=*x2;}void Showpay(int paysum,char *buf) //提示已付费用{void *pic;unsigned s;s=imagesize(240,170,260,190);pic=malloc(s);getimage(240,170,260,190,pic); putimage(240,170,pic,1);itoa(paysum,buf,10);setcolor(BLUE);settextstyle(2,0,6);outtextxy(240,170,buf);free(pic);}void Delclew() //删除付费不足的提示{void *buf;unsigned s;s=imagesize(290,335,450,345);buf=malloc(s);getimage(290,335,450,345,buf); putimage(290,335,buf,1);free(buf);}6.over#include"main.h"#include"mouse.h"#include"button.h"#include"drawfram.h"#include"over.h"void Window5(int (*v)[4]){int i;cleardevice();Cartoon();Frame2();Drawrec(40,50,600,430,4,1); setcolor(YELLOW);circle(100,120,30);floodfill(100,123,YELLOW); setcolor(BLACK);ellipse(90,115,0,180,5,5); ellipse(110,115,0,180,5,5); ellipse(100,130,180,360,15,10); setcolor(RED);settextstyle(0,0,3);outtextxy(200,100,"Thank you!"); settextstyle(0,0,2);outtextxy(170,150,"W elcome next time!"); setcolor(BLUE);settextstyle(2,0,6);outtextxy(170,200,"Return you:"); outtextxy(240,215," pieces of one yuan;"); outtextxy(240,230," pieces of five yuan;"); outtextxy(240,245," pieces of ten yuan;"); outtextxy(240,260,"total yuan!");for(i=0;i<2;i++){Drawbutton(v[i],15,8);}settextstyle(0,0,1);outtextxy(160,360,"Exit");outtextxy(417,360,"Back to sale");}void Cartoon() //找钱前等待时间的动画{double i,j;double x1,x2,y1,y2;setwritemode(XOR_PUT); //异或写入setcolor(YELLOW);setlinestyle(0,0,3);for(i=0;i<360;i+=20){j=(i/180)*3.14159;x1=10*cos(j)+320;x2=50*cos(j)+320;y1=10*sin(j)+240;y2=50*sin(j)+240;line(x1,y1,x2,y2);delay(100);}for(i=0;i<360;i+=20){j=(i/180)*3.14159;x1=10*cos(j)+320;x2=50*cos(j)+320;y1=10*sin(j)+240;y2=50*sin(j)+240;line(x1,y1,x2,y2);delay(100);}setwritemode(COPY_PUT);}void Return(int pay,int paysum,struct Moneyinfo *money6){ //找钱int a,b,c,d,t,c0,d0;t=paysum-pay;//理论上应退回a张10元,c张5元,d张1元,合t元a=t/10;b=t%10;c=b/5;d=b-5*c;while(c>money6->fivenum) //假如理论c大于剩余5元数量{c0=money6->fivenum; //实际退回5元数量等于剩余5元数量/*判断少退的5元可否用相等价值的1元数量替代*/if(d+5*(c-c0)<=money6->onenum) //1元数量足以弥补少退的5元数量{d0=d+5*(c-c0); //实际退回1元数量=理论+少退break;}else //1元数量不足以弥补少退的5元数量{d0=money6->onenum; //实际退回1元数量=剩余1元数量break;}}while(c<=money6->fivenum) //假如理论c<=剩余5元数量{c0=c; //实际退回5元数量等于理论5元数量if(d<money6->onenum) //假如理论d小于剩余1元数量{d0=d; //实际退回1元数量=理论退回1元数量break;}else //假如理论d>=剩余1元数量{d0=money6->onenum; //实际退回1元数量=剩余1元数量break;}}money6->onenum-=d0; //相应货币减少相应数量money6->fivenum-=c0;money6->tennum-=a;money6->sum=money6->onenum+5*money6->fivenum+10*money 6->tennum;Showreturninfo(a,c0,d0); //显示退钱信息}void Showreturninfo(int a,int c0,int d0) //显示退钱信息{char buf1[10],buf2[10],buf3[10],buf4[10];itoa(a,buf1,10);itoa(c0,buf2,10);itoa(d0,buf3,10);itoa(d0+5*c0+10*a,buf4,10);setcolor(BLUE);settextstyle(2,0,6);outtextxy(225,215,buf3);outtextxy(225,230,buf2);outtextxy(225,245,buf1);outtextxy(287,260,buf4);}void Over( struct Goodsinfo *drink7, struct Moneyinfo *money7,int pay,int paysum){struct Goodsinfo *pdrink7=drink7;struct Moneyinfo *pmoney7=money7;int k,t=1;int v[2][4]={{120,350,230,380},{410,350,520,380}};Window5(v);Return(pay,paysum,pmoney7);k=Pressbutt(v,2,&t);if(k==1) //返回主菜单{Mainmenu(pdrink7,pmoney7);}if(k==2) //继续购买{sale(pdrink7,pmoney7);}}7.inputpa#include"main.h"#include"mouse.h"#include"button.h"#include"drawfram.h"#include"inputpa.h"void Window6(int (*v)[4]){int i;cleardevice();Frame1();Drawrec(165,155,220,180,4,1);settextstyle(2,0,7);outtextxy(150,90,"please input the password here"); for(i=0;i<3;i++){Drawbutton(v[i],15,8);}settextstyle(0,0,1);outtextxy(180,237,"Reset");outtextxy(310,237,"Enter");outtextxy(440,237,"Exit");}void Inputpa(struct Goodsinfo *drink8,struct Moneyinfo *money8) {struct Goodsinfo *pdrink8=drink8;struct Moneyinfo *pmoney8=money8;int password[6]={0x231,0x332,0x433,0x534,0x635,0x736};int inputpa[50]={0},k=0,j,Button,x,y,flag=0,key,ox=0,oy=0,t=1; int v[3][4]={{170,230,230,250},{300,230,360,250},{430,230,480,250}};Window6(v);while(1){setwritemode(XOR_PUT);Mousemove(&ox,&oy,&x,&y,&t); //鼠标移动setwritemode(COPY_PUT);ReadMouse(&Button,&x,&y);k=Password(Button,x,y,v);if(kbhit()){key=bioskey(0);}else key=0;if(key!=ENTER&&key!=0&&k==0) //输入密码{inputpa[flag]=key;gotoxy(22+flag,11);flag++;if(flag<7) printf("*");}if(key==ENTER||k==2)break;if(k==1) //重置{Inputpa(pdrink8,pmoney8);}if(k==3) //返回主菜单{Mainmenu(pdrink8,pmoney8);}}j= Checkpa(inputpa,password,flag); //判断密码是否正确if(j==0) //假如错了,提示出错并重新输入{outtextxy(230,160,"input error,please try again!");delay(300);Inputpa(pdrink8,pmoney8);}if(j==1) //假如正确,继续管理员服务{Admiser(pdrink8,pmoney8);}}int Checkpa(int *pinputpa,int *ppassword,int j) //检查密码是否正确{int length=j,i,k=0;if(length!=6)return 0;else{for(i=0;i<6;i++){if(pinputpa[i]!=ppassword[i]){k++;break;}}if(k!=0){return 0;}else return 1;}}int Password(int Button,int x,int y,int (*v)[4]) //按按钮{int k=0;while(Button==1){if(x>170&&x<230&&y>230&&y<250){k=1;Buttdownup(v[0]);break;}if(x>300&&x<360&&y>230&&y<250){k=2;Buttdownup(v[1]);break;}if(x>430&&x<480&&y>230&&y<250){k=3;Buttdownup(v[2]);break;}else break;}return k;}8.admiser#include"main.h"#include"mouse.h"#include"button.h"#include"drawfram.h"#include"admiser.h"void Window7(int(*v)[4]){int i;cleardevice();Frame1();settextstyle(2,0,6);outtextxy(150,100,"please choose the service you want!");for(i=0;i<3;i++){Drawbutton(v[i],15,8);}settextstyle(0,0,1);outtextxy(310,157,"Inspect goods");outtextxy(310,197,"Inspect money");outtextxy(340,237,"Exit");}void Admiser(struct Goodsinfo *drink9,struct Moneyinfo *money9) //管理员服务{struct Goodsinfo *pdrink9=drink9;struct Moneyinfo *pmoney9=money9;int k,t=1,v[3][4]={{300,150,420,170},{300,190,420,210},{300,230,420,250}};Window7(v);k=Pressbutt(v,3,&t);if(k==1) //查库存{Goodsser(pdrink9,pmoney9);}if(k==2) //查钱{Moneyser(pdrink9,pmoney9);}if(k==3) //返回主菜单{Mainmenu(pdrink9,pmoney9);}}9.goodsser#include"main.h"#include"mouse.h"#include"button.h"#include"drawfram.h"#include"goodsser.h"void Window8(int (*v)[4]){cleardevice();int i,j;Frame1();settextstyle(0,0,2);outtextxy(180,100,"Goods infomation"); Drawrec(230,130,410,250,4,1);for(i=1;i<4;i++){line(230,130+30*i,410,130+30*i);Drawbutton(v[i-1],15,8);}for(j=1;j<3;j++){line(230+60*j,130,230+60*j,250); }settextstyle(0,0,1);outtextxy(175,277,"Add goods");outtextxy(310,277,"Back");outtextxy(440,277,"Exit");}void Showgoodsinfo(struct Goodsinfo *drink11) //显示库存信息{char code[3][10],num[3][10];int i;for(i=0;i<3;i++){itoa(drink11[i].code,code[i],10);ltoa(drink11[i].num,num[i],10);outtextxy(258,170+30*i,code[i]);outtextxy(301,170+30*i,drink11[i].name);outtextxy(358,170+30*i,num[i]);}outtextxy(250,140,"code");outtextxy(310,140,"name");outtextxy(370,140,"num");}void Goodsser(struct Goodsinfo *drink10,struct Moneyinfo *money10){int k,t=1,v[3][4]={{170,270,270,290},{300,270,360,290},{430,270,480,290}};struct Goodsinfo *pdrink10=drink10;struct Moneyinfo *pmoney10=money10;Window8(v);Showgoodsinfo(pdrink10);k=Pressbutt(v,3,&t);switch(k){case 1:Addgoods(pdrink10,pmoney10); //增加或减少库存break;case 2:Admiser(pdrink10,pmoney10); //返回管理员服务break;case 3:Mainmenu(pdrink10,pmoney10); //返回主菜单break;}}10.addgoods#include"main.h"#include"mouse.h"#include"button.h"#include"drawfram.h"#include"addgoods.h"void Window9(int (*v)[4]){cleardevice();int i,j,k;Frame1();Drawrec(230,140,410,260,4,1); settextstyle(0,0,2);outtextxy(250,100,"Add goods");for(i=1;i<4;i++){line(230,140+30*i,410,140+30*i); }for(j=1;j<3;j++){line(230+60*j,140,230+60*j,260);}for(k=0;k<4;k++){Drawbutton(v[k],15,8);}settextstyle(0,0,1);outtextxy(180,277,"Enter");outtextxy(260,277,"Reset");outtextxy(340,277,"Back");outtextxy(420,277,"Exit");}void Addgoodsinfo(struct Goodsinfo *drink12) //增加饮料信息{char code[3][10],num[3][10];int i;for(i=0;i<3;i++){itoa(drink12[i].code,code[i],10);outtextxy(258,180+30*i,code[i]);outtextxy(301,180+30*i,drink12[i].name);}outtextxy(250,150,"code");outtextxy(310,150,"name");outtextxy(370,150,"add");}void Addgoods(struct Goodsinfo *drink13,struct Moneyinfo *money13){struct Goodsinfo *pdrink13=drink13;struct Moneyinfo *pmoney13=money13;int k=0,l,v[4][4]={{170,270,230,290},{250,270,310,290},{330,270,390,290},{410,270,470,290}};long addnum[3]={0,0,0};char str[3][50];Window9(v);Addgoodsinfo(pdrink13);gotoxy(46,12);Keyboard(addnum,str,&k,v); //增加或减少库存或钱的模块if(k==1){for(l=0;l<3;l++){if(pdrink13[l].num+addnum[l]<0)pdrink13[l].num=0; //假如减少该饮料库存<0,则该饮料库存为0else pdrink13[l].num+=addnum[l];}Goodsser(pdrink13,pmoney13); //返回库存信息}if(k==2) Addgoods(pdrink13,pmoney13); //重置if(k==3) Admiser(pdrink13,pmoney13);if(k==4) Mainmenu(pdrink13,pmoney13);}11.keyboard#include"mouse.h"#include"button.h"#include"keyboard.h"void Keyboard(long *addnum,char (*str)[50],int *k,int (*v)[4]) //输入增加或减少库存或钱{int key,i=0,j=0,Button,x,y,ox=0,oy=0,t=1;while(1){setwritemode(XOR_PUT);Mousemove(&ox,&oy,&x,&y,&t); //鼠标移动setwritemode(COPY_PUT);ReadMouse(&Button,&x,&y);*k=Addmenu(Button,x,y,v);if(j<3) line(352,195+30*j,408,195+30*j);if(kbhit()) key=bioskey(0);else key=0;while(key!=ENTER&&key!=0&&i<6&&*k==0){if((char)key>='0'&&(char)key<='9'||(char)key=='-'&&i==0) //只能输入数字或负号,而且负号只能出现在第一位{str[j][i]=(char)key; //将数字强制转换为字符printf("%c",str[j][i]); //输出i++;break;}else break;}while(key==ENTER&&*k==0){if(j<3){line(420,175+30*j,425,185+30*j);delay(100);line(425,185+30*j,435,170+30*j);str[j][i]='\0';addnum[j]=atol(str[j]); //将字符串转换为整数j++;gotoxy(46,12+2*j);i=0;break;}else break;}if(*k!=0) break;}}int Addmenu(int Button,int x,int y,int (*v)[4]) //按按钮{int i=0;while(Button==1){if(x>170&&x<230&&y>270&&y<290){Buttdownup(v[0]);i=1;break;}if(x>250&&x<310&&y>270&&y<290){Buttdownup(v[1]);i=2;break;}if(x>330&&x<390&&y>270&&y<290){Buttdownup(v[2]);i=3;break;。
#include <stdio.h>#include <stdlib.h>#include <string.h>void GetltemName(char *item, FILE *file);int GetltemPrice(FILE *file);void AcceptMoney(int price);//symbolic constant definitions#define CAPACITY 10 //max number itemavailable to vendint main(void){char name[CAPACITY][20]={0};int price[CAPACITY]={0};FILE *stockfile;int i,Nitems,choice;int listend;stockfile=fopen("pricelist.txt","r");if(stockfile==NULL){printf("Error initialising vend:pricelist.txt not opened");}else{//read stock from filelistend=0;Nitems=0;do{price[Nitems]=GetltemPrice(stockfile);GetltemName(name[Nitems],stockfile);if(price[Nitems]>0){Nitems++;}else{listend=1;}}while(Nitems<CAPACITY&&!listend);//print menuprintf("***Menu***\n");for(i=0;i<Nitems;i++){printf("\n%d:%20s:%dp",i,name[i],price[i]);}//request selectionprintf("\n\n");do{printf("Please make your chioce(enter CTRL-C to quit);");scanf("%d",&choice);}while(choice<0||choice>Nitems-1);printf("%s seleted.\n",name[choice]);AcceptMoney(price[choice]);printf("\nEnjoy your %s.\n",name[choice]);}fclose(stockfile);return 0;}void GetltemName(char *item,FILE *file){int len;if(feof(file)){item[0]='\0';}else{fgets(item,20,file);len=strlen(item);if(item[len-1]=='\n'){item[len-1]='\0';}}}void AcceptMoney(int price){int money=0,coin,left;printf("Please pay %d p. 10p,5p,2p,1p accepted. No change given.\n\n",price);do{left=price;printf("Price: %d, paid: %d, to pay: %d,",price,money,left);do{printf("please enter coin:\n");scanf("%d",&coin);}while(coin!=1&&coin!=2&&coin!=5&&coin!=10);money=money+coin;left=price-money;}while(left>0);printf("%d p paid. Thank you.",money);}int GetltemPrice(FILE *file){ int j;if(feof(file)){j='\0';}else{fscanf(file,"%d",&j);}return j;}COMMODITY FILE : pricelist.txt40Mars Bar40Toffee Crisp30Kit Kat25Toblerone40bounty50Topic。
编程模拟自动卖机售卖3种饮料功能1.售卖画面2选购画面3输入你可以使用Python来编写这个自动售卖机模拟程序。
下面是一个简单的示例代码,实现了基本的功能:售卖画面、选购画面和输入功能。
python# 饮料清单beverages = {1: {"name": "可乐", "price": 3},2: {"name": "雪碧", "price": 2.5},3: {"name": "果汁", "price": 4}}# 售卖画面def display_menu():print("欢迎使用自动售卖机!")print("请选择您要购买的饮料:")for key, value in beverages.items():print(f"{key}. {value['name']} - 价格:{value['price']}元")# 选购画面def purchase_menu():print("请输入您要购买的饮料编号:")# 输入功能def get_input():while True:try:choice = int(input())if choice in beverages:return choiceelse:print("无效的选择,请重新输入:")except ValueError:print("无效的选择,请重新输入:")# 主程序逻辑def main():display_menu()purchase_menu()choice = get_input()selected_beverage = beverages[choice]print(f"您选择了:{selected_beverage['name']},价格为:{selected_beverage['price']}元")# 运行程序if __name__ == "__main__":main()你可以根据需要进行修改和扩展,添加更多饮料选项和功能。
源码在后面! 一、需求分析本程序为饮料自动售货机的程序,能实现饮料的自动销售,并采用文件的形式记录购买数据,能起到节约人力、减少成本的目的。
二、总体设计本设计主要分为两大系统(顾客购买以及管理员管理系统)以及放于d 盘中“饮料.txt ”的文件系统,每个系统分别执行一些特定的功能。
如下图所示:图一 总体设计概念图三、详细设计3.1 管理员模块管理员是自动售货机系统中权限最高的用户。
在管理员工作模式下,管理员可以进行货物进行补充操作、商品库存信息查询、销售额信息查询、切换到销售界面几大操作。
自动饮料售货机顾客购买系统管理员管理系统选择饮料投币找币记录数据登录界面查询销售额查询剩余数量补货管理员模块的功能结构图,如下:图3.1 管理员操作流程图3.2 顾客购买模块用户模块主要是销售商品的界面。
销售商品的整个过程是,用户投入货币,然后输入商品代号,然后进行找零等操作,最后放出商品,完成交易。
下面来看一下用户模块的流程。
管理员输入密码选择商品库存信息查询销售额信息查询货物补充操作结束图3.2 顾客购买饮料流程图四、系统调试分析它的的任务是尽可能彻底地检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统”做得怎样?”。
这阶段又可分为三个步骤:模块测试,测试每个模块的程序是否有错误;组装测试,测试模块之间的接口是否正确:确认测试,测试整个软件系统是否满足用户功能和性能的要求。
该阶段结束应交付测试报告,说明测试数据的选择,测试用例以及测试结果是否符合预期结果。
测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。
是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。
系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。
4.1 系统启动主界面如图,由用户选择执行某一个操作。
用户选择投币饮料d饮料a......饮料d饮料和零钱图4.1系统启动主界面图4.2 顾客购买饮料操作测试在主界面下,输入口令“1”,进入购买饮料模块。
饮品自动售货机python代码函数饮品自动售货机Python代码函数随着科技的发展,自动售货机已经成为了现代生活中不可或缺的一部分。
自动售货机不仅方便消费者购买商品,也提高了商品销售的效率。
其中,饮品自动售货机是消费者购买频率最高的一种自动售货机。
今天我们来讨论一下如何使用Python代码函数来实现饮品自动售货机。
一、需求分析在实现饮品自动售货机之前,我们需要对需求进行分析。
首先,我们需要确定售货机中所存储的饮品种类和数量,同时需要确定消费者可以购买的饮品种类和价格。
其次,我们需要实现购买饮品的过程,包括输入饮品编号、判断饮品是否存在、判断饮品数量是否充足、计算消费金额等。
最后,我们需要实现找零的过程。
二、代码实现1. 定义饮品和价格我们可以使用Python中的字典(dict)来存储饮品和价格。
代码如下:```pythondrinks = {'可乐': 3, '雪碧': 3, '红茶': 2.5, '绿茶': 2.5, '咖啡': 5}```2. 实现购买饮品的过程我们可以定义一个函数来实现购买饮品的过程。
首先,我们需要输入饮品编号,然后判断饮品是否存在,如果存在则判断饮品数量是否充足,如果充足则计算消费金额并提示用户投币,如果金额不足则提示用户继续投币,如果金额充足则提示用户取饮品并计算找零。
代码如下:```pythondef buy_drink(drinks, drink_name):if drink_name not in drinks:print('饮品不存在')elif drinks[drink_name] == 0:print('饮品已售罄')else:print('请输入{}的数量:'.format(drink_name))while True:try:drink_num = int(input())if drink_num <= 0:print('数量必须大于0,请重新输入')continueelif drink_num > drinks[drink_name]:print('数量不足,请重新输入')continueelse:cost = drinks[drink_name] * drink_numprint('消费金额为{}元,请投币'.format(cost))while True:try:coin = float(input())if coin < cost:print('金额不足,请继续投币')continueelse:change = coin - costprint('请取饮品,找零{}元'.format(change)) drinks[drink_name] -= drink_numbreakexcept ValueError:print('请输入数字')breakexcept ValueError:print('请输入数字')```3. 实现整个售货机的过程我们可以定义一个主函数来实现整个售货机的过程。
实验报告课程名称Java面向对象程序设计实验名称一个简单的应用程序姓名***学号***专业年级14 物联网一、实验目的:本实验的目的是让学生掌握开发Java 应用程序的三个步骤:编写源文件、编译源文件和运转应用程序。
二、实验内容:编写一个简单的 Java 应用程序,该程序在命令行窗口输出两行文字:“你好,很快乐学习 Java”和“ Wearestudents ”。
三、实验步骤实验源代码:publicclassHello{publicstaticvoidmain(Stringargs[]){你好,很快乐学习Java");Aa=newA();();}}classA{voidfA(){arestudents");}}四、实验结果五、总结此次实验让我首次认识了Java 编程软件的环境,为今后编程打下基础实验报告课程名称Java 面向对象程序设计实验名称教室、老师和学生姓名***学号***专业年级14 物联网一、实验目的:熟习 Java 应用程序的基本结构,并能联合编译应用程序所需要的类。
二、实验内容:编写 3 个源文件:、和,每个源文件只有一个类。
含有应用程序的主类(含有 main 方法),并使用了 Teacher 和 Student 类。
将 3 个源文件保存到同一目录中,比方 C:\1000 ,尔后编译。
三、实验步骤实验源代码:publicclassClassRoom{publicstaticvoidmain(String[]args){Teacherzhang=newTeacher();Studentjiang=newStudent();();();}}publicclassStudent{voidintroduceSelf(){}}publicclassTeacher{voidintroduceSelf(){}}四、实验结果五、总结此次实验熟习了 Java 应用程序的基本结构,并将不一样类保存运转在同个目录中。
基于PLC的自动售货机控制系统的设计自动售货机控制系统是现代商业中不可或缺的一部分,它可以为消费者提供方便快捷的购物体验。
本文将从PLC(可编程逻辑控制器)的角度出发,探讨基于PLC的自动售货机控制系统的设计。
一、引言随着科技的发展,自动售货机已经成为了人们生活中不可或缺的一部分。
传统的自动售货机存在着一些问题,如人工成本高、效率低等。
因此,如何设计一种高效、智能的自动售货机控制系统成为了研究的重点。
本文将从PLC的角度出发,探讨基于PLC 的自动售货机控制系统的设计。
二、PLC基础知识介绍1.1 PLC的定义和分类PLC是可编程逻辑控制器的缩写,是一种专门用于工业自动化控制的数字计算机。
根据其功能和结构的不同,PLC可以分为三种类型:顺序控制器、状态控制器和数据处理控制器。
其中,顺序控制器主要用于实现简单的机械控制;状态控制器主要用于实现复杂的逻辑控制;数据处理控制器则主要用于实现数据采集、处理和存储等功能。
1.2 PLC的特点和优势相比于传统的人工控制方式,PLC具有以下几个显著特点和优势:可靠性高:由于PLC采用数字化设计,因此其故障率相对较低,且易于维护和修复。
实时性强:PLC可以实时监测并控制生产过程,从而保证产品质量和生产效率。
灵活性好:PLC可以根据不同的生产工艺和需求进行编程和配置,从而实现个性化定制。
成本低廉:相对于传统的人工控制方式,PLC的成本较低,可以为企业节省大量的人力和物力资源。
三、基于PLC的自动售货机控制系统设计3.1 系统架构设计基于PLC的自动售货机控制系统主要由以下几个部分组成:硬件设备、软件程序和人机交互界面。
其中,硬件设备包括PLC主机、传感器、执行器等;软件程序主要包括PLC程序和人机交互程序;人机交互界面则是指用户与系统之间的交互界面。
在系统架构设计时需要考虑到各个部分之间的协同工作,以确保整个系统的稳定性和可靠性。
3.2 PLC程序设计PLC程序是自动售货机控制系统的核心部分,它主要负责对传感器信号进行采集、处理和控制执行器的工作。
Java自动售货机程序设计思路1. 简介自动售货机是一种能够自动完成商品销售的设备,它能够接受用户选择的商品、接收付款并提供所购商品的功能。
本文将介绍如何使用Java编写一个简单的自动售货机程序,实现基本的购买流程和管理功能。
2. 功能需求为了实现一个完善的自动售货机程序,我们需要考虑以下功能需求:1.用户能够浏览商品列表并选择购买。
2.用户能够输入金额进行支付,并根据支付情况进行相应处理。
3.程序需要根据用户选择和支付情况来计算和找零。
4.程序需要记录每次交易的信息,包括购买商品、支付金额和找零等。
5.程序需要提供管理员功能,包括添加新商品、修改商品信息和查看销售统计等。
3. 设计思路3.1 商品类设计我们需要设计一个商品类来表示售货机中的商品。
该类应包含以下属性:•商品名称•商品价格•商品数量(库存)该类还应提供以下方法:•获取商品名称•获取商品价格•获取商品数量•减少商品数量(用于购买时减少库存)3.2 自动售货机类设计接下来,我们设计一个自动售货机类来管理售货机的整个流程。
该类应包含以下属性:•商品列表(包含多个商品对象)•用户选择的商品•用户支付金额•交易记录该类还应提供以下方法:•初始化商品列表•显示商品列表•用户选择商品•用户输入支付金额•处理支付情况(判断是否足够支付)•计算找零金额•更新商品库存数量•添加交易记录3.3 管理员功能设计为了提供管理员功能,我们可以在自动售货机类中添加一些额外的方法:•添加新商品:管理员可以输入新商品的名称、价格和数量,然后将其添加到商品列表中。
•修改商品信息:管理员可以选择要修改的商品,并输入新的价格和数量进行修改。
•查看销售统计:管理员可以查看每次交易的信息,包括购买商品、支付金额和找零等。
4. 代码实现下面是一个简单的Java自动售货机程序的代码示例:import java.util.ArrayList;import java.util.List;import java.util.Scanner;class Product {private String name;private double price;private int quantity;public Product(String name, double price, int quantity) { = name;this.price = price;this.quantity = quantity;}public String getName() {return name;}public double getPrice() {return price;}public int getQuantity() {return quantity;}public void decreaseQuantity(int amount) {quantity -= amount;}}class VendingMachine {private List<Product> products;private Product selectedProduct;private double payment;private List<String> transactionHistory;public VendingMachine() {products = new ArrayList<>();transactionHistory = new ArrayList<>();// 初始化商品列表products.add(new Product("Coke", 1.5, 10));products.add(new Product("Chips", 2.0, 5));products.add(new Product("Water", 1.0, 8));}public void displayProductList() {System.out.println("Available products:");for (int i = 0; i < products.size(); i++) {Product product = products.get(i);System.out.println(i + ". " + product.getName() + " - $" + product. getPrice());}}public void selectProduct(int index) {if (index >= 0 && index < products.size()) {selectedProduct = products.get(index);System.out.println("Selected product: " + selectedProduct.getName ());} else {System.out.println("Invalid product selection.");}}public void enterPayment(double amount) {payment += amount;System.out.println("Payment entered: $" + payment);}public void processPayment() {if (selectedProduct != null) {if (payment >= selectedProduct.getPrice()) {double change = payment - selectedProduct.getPrice();selectedProduct.decreaseQuantity(1);transactionHistory.add("Purchased: " + selectedProduct.getName () +" | Payment: $" + payment +" | Change: $" + change);System.out.println("Thank you for your purchase!");System.out.println("Change: $" + change);} else {System.out.println("Insufficient payment.");}} else {System.out.println("No product selected.");}}public void addNewProduct(String name, double price, int quantity) {products.add(new Product(name, price, quantity));System.out.println("New product added: " + name);}public void modifyProduct(int index, double price, int quantity) { if (index >= 0 && index < products.size()) {Product product = products.get(index);product.price = price;product.quantity = quantity;System.out.println("Product modified: " + product.getName());} else {System.out.println("Invalid product selection.");}}public void viewTransactionHistory() {System.out.println("Transaction history:");for (String transaction : transactionHistory) {System.out.println(transaction);}}}public class Main {public static void main(String[] args) {VendingMachine vendingMachine = new VendingMachine();Scanner scanner = new Scanner(System.in);while (true) {System.out.println("\n===== Vending Machine =====");vendingMachine.displayProductList();System.out.print("\nEnter the product number to select (or -1 to e xit): ");int index = scanner.nextInt();if (index == -1) break;vendingMachine.selectProduct(index);System.out.print("Enter payment amount: $");double payment = scanner.nextDouble();vendingMachine.enterPayment(payment);vendingMachine.processPayment();}scanner.close();}}5. 总结通过以上设计思路和代码实现,我们成功地创建了一个简单的Java自动售货机程序。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include "goods.h"bool GetCharge(int Sum,int Money);void Getsmalcharge(int Money,int *ChargeNum); int KouLing();char ChooseJieMian();char SaleCenter();void loadGoodsFrom* gs);char ManageCenter();void KunCun();void Sale();void ShangJia();void TongJiFun();Goods goods[3];TongJi tj[3];void init(){for(int i = 0; i < 3; ++i){tj[i].jrxl = 0;tj[i].jrzje = 0;}}void main(){//初始化init();int op = 0;//读取商品信息loadGoodsFrom);char c = ChooseJieMian();while(true){system("cls");if( c == '1'){c = SaleCenter();}else if(c == '2'){op = KouLing();if(op == 1){//进入管理界面c = ManageCenter();//system("pause");}else if(op == 0){//进去销售界面c = SaleCenter();}}}}//----------------------------------------------------/*** @return 1销售界面2管理界面*/char SaleCenter(){char state='N';int Sum=0;char Pro = 'd';// printf("\n********************************\n");while(true){state='N';Sum=0;while(!(Pro == 'c' || Pro == 'a' || Pro == 'b' || Pro == 'q')){system("cls");printf("\n\t*******************************************");printf("\n\t*********顾客您好,请选择商品**************\n");printf("\n\t·a·商品%s ·b·商品%s ·c·商品%s ·q·管理\n",goods[0].name,goods[1].name,goods[2].name);printf("\n\t -%d- -%d- -%d- (单位:件)",goods[0].totalCount,goods[1].totalCount,goods[2].totalCount);printf("\n\t*******************************************\n\t\t");Pro = getchar();}if(Pro == 'q')break;switch(Pro){case 'a':{Sum=Sum+2;printf("\n\t·商品A价格为%d,请投币·",Sum);}break;case 'A':{Sum=Sum+2;printf("\n\t·商品A价格为%d,请投币·",Sum);}break;case 'b':{Sum=Sum+3;printf("\n\t·商品B价格为%d,请投币·",Sum);}break;case 'B':{Sum=Sum+3;printf("\n\t·商品B价格为%d,请投币·",Sum);}break;case 'c':{Sum=Sum+6;printf("\n\t·商品C价格为%d,请投币·",Sum);}break;case 'C':{Sum=Sum+6;printf("\n\t·商品C价格为%d,请投币·",Sum);}break;default:{printf("\n\t输入物品有误!!!!\n");}break;};int Money;bool st=false;while(!st){// printf("\n输入金额:");scanf("%d",&Money);getchar();st=GetCharge(Sum,Money);};Pro = 'd';system("PAUSE");}return '2';}bool GetCharge(int Sum,int Money){int ChargeNum[4];for(int i=0;i<4;i++){ChargeNum[i]=0;}if(Sum>Money){printf("\n\t·所投金额不足支付所选商品,请重新投币·");return false;}else if(Sum==Money){printf("\n\t·所投金额等于商品价格,请在商品出口处拿取商品·\n");//销售成功的操作if(Sum == goods[0].price){goods[0].totalCount --;Sale();tj[0].jrxl ++;tj[0].jrzje += Sum;}else if(Sum == goods[1].price){goods[1].totalCount --;Sale();tj[1].jrxl ++;tj[1].jrzje += Sum;}else if(Sum == goods[2].price){goods[1].totalCount --;Sale();tj[2].jrxl ++;tj[2].jrzje += Sum;}return true;}else{int Result=Money-Sum;Getsmalcharge(Result,ChargeNum);printf("\n\t·所投金额大于商品价格,为您找零%d元·\n",Result);printf("\n\t\t-壹元面值%d张-\n",ChargeNum[0]);printf("\n\t\t-贰元面值%d张-\n",ChargeNum[1]);printf("\n\t\t-伍元面值%d张-\n",ChargeNum[2]);printf("\n\t\t-拾元面值%d张-\n",ChargeNum[3]);printf("\n\t·请在商品出口处拿取商品·\n");// printf("\n余额为%d元,应找零\n1 元%d张\n2 元%d张\n5 元%d张\n10元%d张\n",Result,ChargeNum[0],ChargeNum[1],ChargeNum[2],ChargeNum[3]);}//end if//销售成功的操作if(Sum == goods[0].price){goods[0].totalCount --;Sale();tj[0].jrxl ++;tj[0].jrzje += Sum;}else if(Sum == goods[1].price){goods[1].totalCount --;Sale();tj[1].jrxl ++;tj[1].jrzje+= Sum;}else if(Sum == goods[2].price){goods[2].totalCount --;Sale();tj[2].jrxl ++;tj[2].jrzje+= Sum;}return true;}/**成功卖出操作的后台操作*/void Sale(){FILE* fp;if ((fp = fopen("d:\\goods.out", "w")) == NULL){printf ("未找到文件d:\\goods.out...系统将退出\n ");exit(0);}fprintf(fp,"%s %d %d\n",goods[0].name,goods[0].totalCount,goods[0].price);fprintf(fp,"%s %d %d\n",goods[1].name,goods[1].totalCount,goods[1].price);fprintf(fp,"%s %d %d\n",goods[2].name,goods[2].totalCount,goods[2].price);//关闭文件fclose(fp);fp = NULL;}//------------------------------------void Getsmalcharge(int Money,int *ChargeNum){if(Money<0)return;int Sum=Money;int charge[4]={1,2,5,10};ChargeNum[3]=Sum/charge[3];Sum=Sum%charge[3];ChargeNum[2]=Sum/charge[2];Sum=Sum%charge[2];ChargeNum[1]=Sum/charge[1];Sum=Sum%charge[1];ChargeNum[0]=Sum/charge[0];Sum=Sum%charge[0];}/***@return 1 口令正确0 口令错误,并返回销售界面*/int KouLing(){char kl[50];int count = 0,ret = 0;char rkl[50] = "admin";while(strcmp(rkl,kl) != 0){if(count == 0){printf("\n\t*******************************************");printf("\n\t****************管理口令验证***************\n");printf("\n\t·Tip·忘记口令,输入“cancel”,进入销售界面\n");printf("\n\t*******************************************\n\t\t");}else{printf("\n\t*******************************************");printf("\n\t****************管理口令验证***************\n");printf("\n\t·Tip·忘记口令,输入“cancel”,进入销售界面\n");printf("\n\t*******************************************");printf("\n\t\t\t\t输入错误次数:%d次\n\t\t",count);}count++;scanf("%s",kl);system("CLS");if(strcmp(kl,"cancel") == 0)break;}if(strcmp(kl,"cancel") == 0)ret = 0;elseret = 1;return ret;}/*** @ return '1' , '2'*/char ChooseJieMian(){char c = '3';while(true){system("cls");printf("\n\t*******************************************");printf("\n\t****************界面选择*******************\n");printf("\n\t·1·-销售界面- ·2·-管理界面-\n");printf("\n\t*******************************************\n\t\t");c = getchar();if(c == '1' || c == '2')break;}system("cls");return c;char ManageCenter(){while(true){int op = 7;while( !(op == 1|| op == 2 || op == 3 || op == 4|| op == 5 || op == 6)){system("cls");printf("\n\t*******************************************");printf("\n\t*************欢迎您,管理员****************\n");printf("\n\t·1·-库存查询- ·2·-商品上架-\n");printf("\n\t·3·-销售查询- ·4·-会计查询-\n");printf("\n\t·5·-结算功能- ·6·-销售界面-\n");printf("\n\t*******************************************\n\t\t");scanf("%d",&op);}bool flag = false;switch(op){case 1:{KunCun();}break;case 2:{ShangJia();}break;case 3:{TongJiFun();}break;case 4:{}break;case 5:{}break;case 6:{flag = true;}break;default:break;}if(flag)break;elsesystem("PAUSE");}return '1';}*从文件里读取商品信息@return 商品列表*/void loadGoodsFrom* gs){//获得FILE 指针FILE* fp;if ((fp = fopen("d:\\goods.out", "r")) == NULL){printf ("未找到文件d:\\goods.out...系统将退出\n ");exit(0);}//Goods gs[3];int i = 0;while(!feof(fp)){fscanf(fp,"%s %d %d",gs[i].name,&gs[i].totalCount,&gs[i].price);i++;}//关闭文件fclose(fp);fp = NULL;}void KunCun(){int i = 0;printf("\n\t·商品名称··商品价格(元)··商品余量(件)·\n");for(i = 0; i < 3; ++i){printf("\n\t-%s-\t\t-%d-\t\t-%d-\n",goods[i].name,goods[i].price,goods[i].totalCount);}}void ShangJia(){printf("\n\t·Tip·正数增加,负数减少商品\n");int gs1 = 0,gs2 = 0,gs3 = 0;printf("\n\t\t-商品%s(余%d件): ",goods[0].name,goods[0].totalCount);scanf("%d",&gs1);printf("\n\t\t-商品%s(余%d件): ",goods[1].name,goods[1].totalCount);scanf("%d",&gs2);printf("\n\t\t-商品%s(余%d件): ",goods[2].name,goods[2].totalCount);scanf("%d",&gs3);goods[0].totalCount = gs1 + goods[0].totalCount < 0 ? 0:gs1 + goods[0].totalCount;goods[1].totalCount = gs2 + goods[1].totalCount < 0 ? 0:gs2 + goods[1].totalCount;goods[2].totalCount = gs3 + goods[2].totalCount < 0 ? 0:gs3 + goods[2].totalCount;//写文件//获得FILE 指针FILE* fp;if ((fp = fopen("d:\\goods.out", "w")) == NULL){printf ("未找到文件d:\\goods.out...系统将退出\n ");exit(0);}fprintf(fp,"%s %d %d\n",goods[0].name,goods[0].totalCount,goods[0].price);fprintf(fp,"%s %d %d\n",goods[1].name,goods[1].totalCount,goods[1].price);fprintf(fp,"%s %d %d\n",goods[2].name,goods[2].totalCount,goods[2].price);//关闭文件fclose(fp);fp = NULL;}void TongJiFun(){printf("\n\t·今日商品销售情况一览·\n");printf("\n\t\t-商品%s %d件共%d元-\n",goods[0].name,tj[0].jrxl,tj[0].jrzje);printf("\n\t\t-商品%s %d件共%d元-\n",goods[1].name,tj[1].jrxl,tj[1].jrzje);printf("\n\t\t-商品%s %d件共%d元-\n",goods[2].name,tj[2].jrxl,tj[2].jrzje);printf("\n\t·共计%d件,%d元·\n",tj[0].jrxl + tj[1].jrxl+tj[2].jrxl,tj[0].jrzje+tj[1].jrzje+tj[2].jrzje);}//Goods.htypedef struct _Goods{char name[50];int totalCount;int price;}Goods;typedef struct _TongJi{int jrxl;int jrzje;}TongJi;。
自动售货机C++程序设计自动售货机C++程序设计简介自动售货机是一种智能化设备,可以为用户提供各种商品的购买服务。
本文将介绍如何使用C++语言设计一个简单的自动售货机程序。
程序结构类设计我们将使用面向对象的方式设计自动售货机程序。
在程序中,我们将创建以下几个类:1. 商品类 (Product):用于表示售货机中的商品,包含名称、价格等属性。
2. 售货机类 (VendingMachine):用于管理售货机的机制,包括商品的存储、购买过程等。
3. 用户类 (User):用于表示用户,包含购买商品等操作。
类之间的关系在程序中,售货机类将包含商品类的对象,并与用户类进行交互。
用户可以通过售货机类购买商品。
类的实现商品类 (Product)首先,我们定义商品类,它包含以下成员变量:cppclass Product {private:std::string name; // 商品名称double price; // 商品价格public:// 构造函数Product(std::string n, double p) : name(n), price(p) {}// 获取商品名称std::string getName() {return name;}// 获取商品价格double getPrice() {return price;}};商品类有一个构造函数,用于初始化商品的名称和价格。
通过getName()和getPrice()方法可以获取商品的名称和价格。
售货机类 (VendingMachine)接下来,我们定义售货机类。
这个类将包含商品类的对象,并实现购买商品的过程。
cppclass VendingMachine {private:std::vector<Product> products; // 售货机中的商品列表public:// 添加商品void addProduct(Product product) {products.push_back(product);}// 购买商品bool buyProduct(std::string productName, double &change) {for (Product &p : products) {if (p.getName() == productName) {if (change >= p.getPrice()) {change -= p.getPrice();return true;} else {return false;}}}return false;}};售货机类有一个属性`products`,用于存储售货机中的商品列表。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include "goods.h"bool GetCharge(int Sum,int Money);void Getsmalcharge(int Money,int *ChargeNum); int KouLing();char ChooseJieMian();char SaleCenter();void loadGoodsFromFile(Goods* gs);char ManageCenter();void KunCun();void Sale();void ShangJia();void TongJiFun();Goods goods[3];TongJi tj[3];void init(){for(int i = 0; i < 3; ++i){tj[i].jrxl = 0;tj[i].jrzje = 0;}}void main(){//初始化init();int op = 0;//读取商品信息loadGoodsFromFile(goods);char c = ChooseJieMian();while(true){system("cls");if( c == '1'){c = SaleCenter();}else if(c == '2'){op = KouLing();if(op == 1){//进入管理界面c = ManageCenter();//system("pause");}else if(op == 0){//进去销售界面c = SaleCenter();}}}}//----------------------------------------------------/*** @return 1销售界面2管理界面*/char SaleCenter(){char state='N';int Sum=0;char Pro = 'd';// printf("\n********************************\n");while(true){state='N';Sum=0;while(!(Pro == 'c' || Pro == 'a' || Pro == 'b' || Pro == 'q')){system("cls");printf("\n\t*******************************************");printf("\n\t*********顾客您好,请选择商品**************\n");printf("\n\t·a·商品%s ·b·商品%s ·c·商品%s ·q·管理\n",goods[0].name,goods[1].name,goods[2].name);printf("\n\t -%d- -%d- -%d- (单位:件)",goods[0].totalCount,goods[1].totalCount,goods[2].totalCount);printf("\n\t*******************************************\n\t\t");Pro = getchar();}if(Pro == 'q')break;switch(Pro){case 'a':{Sum=Sum+2;printf("\n\t·商品A价格为%d,请投币·",Sum);}break;case 'A':{Sum=Sum+2;printf("\n\t·商品A价格为%d,请投币·",Sum);}break;case 'b':{Sum=Sum+3;printf("\n\t·商品B价格为%d,请投币·",Sum);}break;case 'B':{Sum=Sum+3;printf("\n\t·商品B价格为%d,请投币·",Sum);}break;case 'c':{Sum=Sum+6;printf("\n\t·商品C价格为%d,请投币·",Sum);}break;case 'C':{Sum=Sum+6;printf("\n\t·商品C价格为%d,请投币·",Sum);}break;default:{printf("\n\t输入物品有误!!!!\n");}break;};int Money;bool st=false;while(!st){// printf("\n输入金额:");scanf("%d",&Money);getchar();st=GetCharge(Sum,Money);};Pro = 'd';system("PAUSE");}return '2';}bool GetCharge(int Sum,int Money){int ChargeNum[4];for(int i=0;i<4;i++){ChargeNum[i]=0;}if(Sum>Money){printf("\n\t·所投金额不足支付所选商品,请重新投币·");return false;}else if(Sum==Money){printf("\n\t·所投金额等于商品价格,请在商品出口处拿取商品·\n");//销售成功的操作if(Sum == goods[0].price){goods[0].totalCount --;Sale();tj[0].jrxl ++;tj[0].jrzje += Sum;}else if(Sum == goods[1].price){goods[1].totalCount --;Sale();tj[1].jrxl ++;tj[1].jrzje += Sum;}else if(Sum == goods[2].price){goods[1].totalCount --;Sale();tj[2].jrxl ++;tj[2].jrzje += Sum;}return true;}else{int Result=Money-Sum;Getsmalcharge(Result,ChargeNum);printf("\n\t·所投金额大于商品价格,为您找零%d元·\n",Result);printf("\n\t\t-壹元面值%d张-\n",ChargeNum[0]);printf("\n\t\t-贰元面值%d张-\n",ChargeNum[1]);printf("\n\t\t-伍元面值%d张-\n",ChargeNum[2]);printf("\n\t\t-拾元面值%d张-\n",ChargeNum[3]);printf("\n\t·请在商品出口处拿取商品·\n");// printf("\n余额为%d元,应找零\n1 元%d张\n2 元%d张\n5 元%d张\n10元%d张\n",Result,ChargeNum[0],ChargeNum[1],ChargeNum[2],ChargeNum[3]);}//end if//销售成功的操作if(Sum == goods[0].price){goods[0].totalCount --;Sale();tj[0].jrxl ++;tj[0].jrzje += Sum;}else if(Sum == goods[1].price){goods[1].totalCount --;Sale();tj[1].jrxl ++;tj[1].jrzje+= Sum;}else if(Sum == goods[2].price){goods[2].totalCount --;Sale();tj[2].jrxl ++;tj[2].jrzje+= Sum;}return true;}/**成功卖出操作的后台操作*/void Sale(){FILE* fp;if ((fp = fopen("d:\\goods.out", "w")) == NULL){printf ("未找到文件d:\\goods.out...系统将退出\n ");exit(0);}fprintf(fp,"%s %d %d\n",goods[0].name,goods[0].totalCount,goods[0].price);fprintf(fp,"%s %d %d\n",goods[1].name,goods[1].totalCount,goods[1].price);fprintf(fp,"%s %d %d\n",goods[2].name,goods[2].totalCount,goods[2].price);//关闭文件fclose(fp);fp = NULL;}//------------------------------------void Getsmalcharge(int Money,int *ChargeNum){if(Money<0)return;int Sum=Money;int charge[4]={1,2,5,10};ChargeNum[3]=Sum/charge[3];Sum=Sum%charge[3];ChargeNum[2]=Sum/charge[2];Sum=Sum%charge[2];ChargeNum[1]=Sum/charge[1];Sum=Sum%charge[1];ChargeNum[0]=Sum/charge[0];Sum=Sum%charge[0];}/***@return 1 口令正确0 口令错误,并返回销售界面*/int KouLing(){char kl[50];int count = 0,ret = 0;char rkl[50] = "admin";while(strcmp(rkl,kl) != 0){if(count == 0){printf("\n\t*******************************************");printf("\n\t****************管理口令验证***************\n");printf("\n\t·Tip·忘记口令,输入“cancel”,进入销售界面\n");printf("\n\t*******************************************\n\t\t");}else{printf("\n\t*******************************************");printf("\n\t****************管理口令验证***************\n");printf("\n\t·Tip·忘记口令,输入“cancel”,进入销售界面\n");printf("\n\t*******************************************");printf("\n\t\t\t\t输入错误次数:%d次\n\t\t",count);}count++;scanf("%s",kl);system("CLS");if(strcmp(kl,"cancel") == 0)break;}if(strcmp(kl,"cancel") == 0)ret = 0;elseret = 1;return ret;}/*** @ return '1' , '2'*/char ChooseJieMian(){char c = '3';while(true){system("cls");printf("\n\t*******************************************");printf("\n\t****************界面选择*******************\n");printf("\n\t·1·-销售界面- ·2·-管理界面-\n");printf("\n\t*******************************************\n\t\t");c = getchar();if(c == '1' || c == '2')break;}system("cls");return c;char ManageCenter(){while(true){int op = 7;while( !(op == 1|| op == 2 || op == 3 || op == 4|| op == 5 || op == 6)){system("cls");printf("\n\t*******************************************");printf("\n\t*************欢迎您,管理员****************\n");printf("\n\t·1·-库存查询- ·2·-商品上架-\n");printf("\n\t·3·-销售查询- ·4·-会计查询-\n");printf("\n\t·5·-结算功能- ·6·-销售界面-\n");printf("\n\t*******************************************\n\t\t");scanf("%d",&op);}bool flag = false;switch(op){case 1:{KunCun();}break;case 2:{ShangJia();}break;case 3:{TongJiFun();}break;case 4:{}break;case 5:{}break;case 6:{flag = true;}break;default:break;}if(flag)break;elsesystem("PAUSE");}return '1';}*从文件里读取商品信息@return 商品列表*/void loadGoodsFromFile(Goods* gs){//获得FILE 指针FILE* fp;if ((fp = fopen("d:\\goods.out", "r")) == NULL){printf ("未找到文件d:\\goods.out...系统将退出\n ");exit(0);}//Goods gs[3];int i = 0;while(!feof(fp)){fscanf(fp,"%s %d %d",gs[i].name,&gs[i].totalCount,&gs[i].price);i++;}//关闭文件fclose(fp);fp = NULL;}void KunCun(){int i = 0;printf("\n\t·商品名称··商品价格(元)··商品余量(件)·\n");for(i = 0; i < 3; ++i){printf("\n\t-%s-\t\t-%d-\t\t-%d-\n",goods[i].name,goods[i].price,goods[i].totalCount);}}void ShangJia(){printf("\n\t·Tip·正数增加,负数减少商品\n");int gs1 = 0,gs2 = 0,gs3 = 0;printf("\n\t\t-商品%s(余%d件): ",goods[0].name,goods[0].totalCount);scanf("%d",&gs1);printf("\n\t\t-商品%s(余%d件): ",goods[1].name,goods[1].totalCount);scanf("%d",&gs2);printf("\n\t\t-商品%s(余%d件): ",goods[2].name,goods[2].totalCount);scanf("%d",&gs3);goods[0].totalCount = gs1 + goods[0].totalCount < 0 ? 0:gs1 + goods[0].totalCount;goods[1].totalCount = gs2 + goods[1].totalCount < 0 ? 0:gs2 + goods[1].totalCount;goods[2].totalCount = gs3 + goods[2].totalCount < 0 ? 0:gs3 + goods[2].totalCount;//写文件//获得FILE 指针FILE* fp;if ((fp = fopen("d:\\goods.out", "w")) == NULL){printf ("未找到文件d:\\goods.out...系统将退出\n ");exit(0);}fprintf(fp,"%s %d %d\n",goods[0].name,goods[0].totalCount,goods[0].price);fprintf(fp,"%s %d %d\n",goods[1].name,goods[1].totalCount,goods[1].price);fprintf(fp,"%s %d %d\n",goods[2].name,goods[2].totalCount,goods[2].price);//关闭文件fclose(fp);fp = NULL;}void TongJiFun(){printf("\n\t·今日商品销售情况一览·\n");printf("\n\t\t-商品%s %d件共%d元-\n",goods[0].name,tj[0].jrxl,tj[0].jrzje);printf("\n\t\t-商品%s %d件共%d元-\n",goods[1].name,tj[1].jrxl,tj[1].jrzje);printf("\n\t\t-商品%s %d件共%d元-\n",goods[2].name,tj[2].jrxl,tj[2].jrzje);printf("\n\t·共计%d件,%d元·\n",tj[0].jrxl + tj[1].jrxl+tj[2].jrxl,tj[0].jrzje+tj[1].jrzje+tj[2].jrzje);}//Goods.htypedef struct _Goods{char name[50];int totalCount;int price;}Goods;typedef struct _TongJi{int jrxl;int jrzje;}TongJi;。