用C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī)
自動(dòng)售貨機(jī)
如圖所示的簡(jiǎn)易自動(dòng)售貨機(jī),物品架1、2上共有10樣商品,按順序進(jìn)行編號(hào),分別為1-10。同時(shí)標(biāo)有價(jià)格與名稱,- 一個(gè)編號(hào)對(duì)應(yīng)一個(gè)可操作按鈕,供選擇商品使用。如果物架上的商品被用戶買走,儲(chǔ)物柜中會(huì)自動(dòng)取出商品送到物架上,保證物品架上一定會(huì)有商品.用戶可以一次投入較多錢幣,并可以選擇多樣商品,售貨機(jī)可以一次性將商品輸出并找零錢。
用戶購(gòu)買方法:
(1)放入錢幣,用戶可以以此放入多個(gè)紙幣,面額可以是1元、2元、>5元、10元。售貨機(jī)會(huì)統(tǒng)計(jì)總金額并顯示。
(2)依次輸入要購(gòu)買的產(chǎn)品,可購(gòu)買多個(gè)產(chǎn)品,售貨機(jī)自動(dòng)判斷余額,若余額不足,則找零后退出程序。
若需自主退出需按退出按鈕,程序中用輸入“-1表示”。
售貨機(jī)本著人性化原則,絕不會(huì)私吞用戶錢,也不會(huì)白送給用戶商
品。
因此在選擇貨物號(hào)時(shí),要注意以下幾個(gè)點(diǎn):
1.若什么都不買,用戶投入的錢全部將退回;
2.若購(gòu)買商品后還有余額,但用戶自主退出程序,退回余額;
3.若用戶購(gòu)買貨物時(shí)余額不足,將停止購(gòu)買此商品,退回余額
代碼如下:
4.錢正好花光,沒(méi)有余額,結(jié)束程序。
#include<stdio.h> #define N 10 int sum=0; int sum1; typedef struct sell{ ?? ?int num; ?? ?char name[20]; ?? ?int price; }sell; void main() { ?? ?int i,c,s; ?? ?int s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,s7=0,s8=0;//記錄商品購(gòu)買數(shù)量 ?? ?sell se[N]={{1,"Table-water",1},{2,"Table-water",1},{3,"Table-water",1},{4,"Coca-Cola",2},{5,"Milk",2}, ?? ?{6,"Beer",3},{7,"Orange-Juice",3},{8,"Sprite",3},{9,"Oolong-Tea",4},{10,"Green-Tea",4}}; ?//售貨機(jī)裝入商品 ?? ?do { ?? ??? ?printf("Please put in coins:"); ?? ??? ?scanf("%d",&c); ?//投幣 ?? ??? ?if(c==1||c==2||c==5||c==10) ?? ??? ??? ?sum=sum+c; ?? ??? ?else if(c==-1) break; ?? ??? ?else ?? ??? ??? ?printf("error!\n"); ?? ?} ?? ?while(c!=-1); ?? ?printf("Total:%d yuan\n",sum); ?? ? ?? ? ?? ?printf("Please select the goods serial number:"); ?? ?scanf("%d",&s); ?//選擇商品號(hào) ?? ?se[-2].price =0; ?? ?sum1=sum-se[s-1].price ; ?//第一個(gè)選的商品超過(guò)投幣數(shù) ?? ?if(sum1<0||s==-1) printf("Not enough money!\n"); ?? ?else?? ??? ?sum=sum1; ?? ? ?? ?while(sum>=0&&s!=-1) ? ?//什么都沒(méi)買或者錢夠但是不想買了 ?? ?{ ?? ??? ? ?? ??? ?if(sum>=0){ ? ? ? ? ? ? ?//錢花光了 ?? ??? ??? ?for(i=0;i<3;i++) ?? ??? ??? ??? ?if(s==se[i].num ) ?? ??? ??? ??? ??? ?s1++; ?? ??? ??? ??? ?for(i=3;i<N;i++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(s==se[i].num &&i==3) {s2++;break;} ?? ??? ??? ??? ??? ?else if(s==se[i].num &&i==4) {s3++;break;} ?? ??? ??? ??? ??? ?else if(s==se[i].num &&i==5) {s4++;break;} ?? ??? ??? ??? ??? ?else if(s==se[i].num &&i==6) {s5++;break;} ?? ??? ??? ??? ??? ?else if(s==se[i].num &&i==7) {s6++;break;} ?? ??? ??? ??? ??? ?else if(s==se[i].num &&i==8) {s7++;break;} ?? ??? ??? ??? ??? ?else if(s==se[i].num &&i==9) {s8++;break;} ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ?} ?? ??? ??? ??? ?printf("There is still %d yuan left\n",sum ); ?? ??? ??? ??? ? ?? ??? ??? ??? ?printf("Please select the goods serial number:"); ?? ??? ??? ??? ?scanf("%d",&s); ?? ??? ??? ??? ?sum1=sum-se[s-1].price ; ? //最后一個(gè)商品錢不夠 ?? ??? ??? ??? ?if(sum1<0||s==-1) {printf("Not enough money!\n");break;} ?? ??? ??? ??? ?sum=sum1; ?? ??? ??? ??? ? ?? ??? ?} ?? ??? ?else printf("Not enough money!\n"); ?? ??? ? ?? ?} ?? ?/*輸出已購(gòu)買商品名及數(shù)量*/ ?? ?if(s1!=0)?? ?printf("%s:%d\n",se[0].name ,s1); ?? ?if(s2!=0)?? ?printf("%s:%d\n",se[3].name ,s2); ?? ?if(s3!=0)?? ?printf("%s:%d\n",se[4].name ,s3); ?? ?if(s4!=0)?? ?printf("%s:%d\n",se[5].name ,s4); ?? ?if(s5!=0)?? ?printf("%s:%d\n",se[6].name ,s5); ?? ?if(s6!=0)?? ?printf("%s:%d\n",se[7].name ,s6); ?? ?if(s7!=0)?? ?printf("%s:%d\n",se[8].name ,s7); ?? ?if(s8!=0)?? ?printf("%s:%d\n",se[9].name ,s8); ?? ?if(sum>=0)?? ?printf("change:%d yuan\n",sum);//輸出余額 ?? ? }
運(yùn)行結(jié)果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
有關(guān)C++中類類型轉(zhuǎn)換操作符總結(jié)(必看篇)
下面小編就為大家?guī)?lái)一篇有關(guān)C++中類類型轉(zhuǎn)換操作符總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01C++獲取字符串長(zhǎng)度的幾個(gè)函數(shù)方式
這篇文章主要介紹了C++獲取字符串長(zhǎng)度的幾個(gè)函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12C++實(shí)現(xiàn)設(shè)計(jì)模式之裝飾者模式詳解
這篇文章主要介紹了C++設(shè)計(jì)模式之裝飾模式,裝飾模式能夠?qū)崿F(xiàn)動(dòng)態(tài)的為對(duì)象添加功能,是從一個(gè)對(duì)象外部來(lái)給對(duì)象添加功能,需要的朋友可以參考下2021-09-09C語(yǔ)言編程數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)詳解小白篇
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),非常適合初學(xué)數(shù)據(jù)結(jié)構(gòu)的小白,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-09-09C++ LeetCode1805字符串不同整數(shù)數(shù)目
這篇文章主要為大家介紹了C++ LeetCode1805字符串不同整數(shù)數(shù)目,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12C++常見(jiàn)的stl容器與相關(guān)操作 示例解析
所謂容器,就是可以承載,包含元素的一個(gè)器件,它是STL六大組件之一,是容器、算法、迭代器中最重要也是最核心的一部分2022-10-10c語(yǔ)言鏈表基本操作(帶有創(chuàng)建鏈表 刪除 打印 插入)
這篇文章主要介紹了c語(yǔ)言鏈表基本操作,大家參考使用吧2013-12-12c語(yǔ)言實(shí)現(xiàn)從源文件從文本到可執(zhí)行文件經(jīng)歷的過(guò)程
這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)從源文件從文本到可執(zhí)行文件經(jīng)歷的過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07