C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī)的具體代碼,供大家參考,具體內(nèi)容如下
如圖所示的簡(jiǎn)易自動(dòng)售貨機(jī),物品架1、2上共有10樣商品,按順序進(jìn)行編號(hào)分別為1-10,標(biāo)有價(jià)格與名稱(chēng),一個(gè)編號(hào)對(duì)應(yīng)一個(gè)可操作按鈕,供選擇商品使用。如果物架上的商品被用戶(hù)買(mǎi)走,儲(chǔ)物柜中會(huì)自動(dòng)取出商品送到物架上,保證物品架上一定會(huì)有商品。用戶(hù)可以一次投入較多錢(qián)幣,并可以選擇多樣商品,售貨機(jī)可以一次性將商品輸出并找零錢(qián)。

用戶(hù)購(gòu)買(mǎi)商品的操作方法:
(1)從“錢(qián)幣入口”放入錢(qián)幣,依次放入多個(gè)硬幣或紙幣。錢(qián)幣可支持1元(紙幣、硬幣)、2元(紙幣)、5元(紙幣)、10元(紙幣),放入錢(qián)幣時(shí),控制器會(huì)先對(duì)錢(qián)幣進(jìn)行檢驗(yàn)識(shí)別出幣值,并統(tǒng)計(jì)幣值總額,顯示在控制器顯示屏中,提示用戶(hù)確認(rèn)錢(qián)幣放入完畢;
(2)用戶(hù)確認(rèn)錢(qián)幣放入完畢,便可選擇商品,只要用手指按對(duì)應(yīng)商品外面的編號(hào)按鈕即可。每選中一樣商品,售貨機(jī)控制器會(huì)判斷錢(qián)幣是否足夠購(gòu)買(mǎi),如果錢(qián)幣足夠,自動(dòng)根據(jù)編號(hào)將物品進(jìn)行計(jì)數(shù)和計(jì)算所需錢(qián)幣值,并提示余額。如果錢(qián)幣不足,控制器則提示“Insufficient money”。用戶(hù)可以取消購(gòu)買(mǎi),將會(huì)把所有放入錢(qián)幣退回給用戶(hù)。
輸入格式:
先輸入錢(qián)幣值序列,以-1作為結(jié)束,再依次輸入多個(gè)購(gòu)買(mǎi)商品編號(hào),以-1結(jié)束。
輸出格式:
輸出錢(qián)幣總額與找回零錢(qián),以及所購(gòu)買(mǎi)商品名稱(chēng)及數(shù)量。
輸入樣例:
1 1 2 2 5 5 10 10 -1
1 2 3 5 1 6 9 10 -1
輸出樣例:
Total:36yuan,change:19yuan
Table-water:2;Table-water:1;Table-water:1;Milk:1;Beer:1;Oolong-Tea:1;Green-Tea:1;
解法一:
#include<stdio.h>
int main(void)
{
? char a[10][20] = {"Table-water","Table-water","Table-water","Coca-Cola","Milk","Beer","Orange-Juice","Sprite","Oolong-Tea","Green-Tea"};
? int b[11] = {0,0,0,0,0,0,0,0,0,0,0};
? int c[50];
? int i=1, k, sum = 0, money, SUM = 0, change, flag=0;
??
? scanf("%d",&money);//輸入幣值并計(jì)算總幣值
? while((money!=-1)&&(money <= 10))
? {
? ? sum = sum + money;
? ? scanf("%d",&money);
? }
??
? scanf("%d",&c[i]);
? while(c[i]!=-1)//將選的貨物編號(hào)存儲(chǔ)到數(shù)組c中并計(jì)算找零
? {
? ? switch(c[i])
? ? {
? ? ? case 1: case 2: case 3: SUM = SUM + 1;break;
? ? ? case 4: case 5: SUM = SUM + 2;break;
? ? ? case 6: case 7: case 8: SUM = SUM + 3;break;
? ? ? case 9: case 10: SUM = SUM + 4;break;
? ? ? default:break;
? ? }
? ? if(SUM>sum)
? ? {
? ? ? printf("Insufficient money");
? ? ? flag = 1;
? ? ? break;
? ? }
? ? i++;
? ? scanf("%d",&c[i]);
? }
? change = sum-SUM;
??
? //用數(shù)組b統(tǒng)計(jì)各種商品數(shù)量
? i = 1;
? while(c[i]!=-1)
? {
? ? switch(c[i])
? ? {
? ? ? case 1: b[1]++;break;
? ? ? case 2: b[2]++;break;
? ? ? case 3: b[3]++;break;
? ? ? case 4: b[4]++;break;
? ? ? case 5: b[5]++;break;
? ? ? case 6: b[6]++;break;
? ? ? case 7: b[7]++;break;
? ? ? case 8: b[8]++;break;
? ? ? case 9: b[9]++;break;
? ? ? case 10: b[10]++;break;
? ? ? default:break;
? ? }
? ? i++;
? }
??
? //輸出結(jié)果
? if(flag==0)
? {
? ? printf("Total:%dyuan,change:%dyuan\n",sum, change);
? ? for(i=1; i<=10; i++)
? ? {
? ? ? if(b[i]==0)
? ? ? ? continue;
? ? ? else
? ? ? {
? ? ? ? printf("%s:%d;",a[i-1],b[i]);
? ? ? }
? ? }
? }
??
? return 0;
}解法二:
#include"stdio.h"
struct goods
{
? ? int num;
? ? char name[20];
? ? int price;
? ? int amount;
};
int main()
{
? ? struct goods good[10]=
{
{1,"Table-water",1,0},
{2,"Table-water",1,0},
{3,"Table-water",1,0},
{4,"Coca-Cola",2,0},
{5,"Milk",2,0},
{6,"Beer",3,0},
{7,"Orange-Juice",3,0},
{8,"Sprite",3,0},
{9,"Oolong-Tea",4,0},
{10,"Green-Tea",4,0}
};
? ? int sum=0,num,change,total=0,money=0,i=0;
? ? while(1)
? ? {
? ? ? ? scanf("%d",&money);
? ? ? ? if(money==-1)
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ?sum=sum+money;
? ? }
? ? while(1)
? ? {
? ? ? ? scanf("%d",&num);
? ? ? ? if(num==-1)
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? switch(num)
? ? ? ? {
? ? ? ? case 1:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[0].price;
? ? ? ? ? ? ? ? good[0].amount=good[0].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? case 2:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[1].price;
? ? ? ? ? ? ? ? good[1].amount=good[1].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? case 3:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[2].price;
? ? ? ? ? ? ? ? good[2].amount=good[2].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? ?case 4:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[3].price;
? ? ? ? ? ? ? ? good[3].amount=good[3].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? ?case 5:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[4].price;
? ? ? ? ? ? ? ? good[4].amount=good[4].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? ?case 6:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[5].price;
? ? ? ? ? ? ? ? good[5].amount=good[5].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? ?case 7:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[6].price;
? ? ? ? ? ? ? ? good[6].amount=good[6].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? ?case 8:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[7].price;
? ? ? ? ? ? ? ? good[7].amount=good[7].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? ?case 9:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[8].price;
? ? ? ? ? ? ? ? good[8].amount=good[8].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? ?case 10:
? ? ? ? ? ? {
? ? ? ? ? ? ? ? total=total+good[9].price;
? ? ? ? ? ? ? ? good[9].amount=good[9].amount+1;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? ? if(total>sum)
? ? ? {
? ? ? ? ? printf("Insufficient money");
? ? ? }
? ? ? else
? ? ? {
? ? ? change=sum-total;
? ? ? printf("Total:%dyuan,change:%dyuan\n",sum,change);
? ? ? for(i=0;i<10;i++)
? ? ? {
? ? ? ? ? if(good[i].amount!=0)
? ? ? ? ? {
? ? ? ? ? ? ? printf("%s:%d;",good[i].name,good[i].amount);
? ? ? ? ? }
? ? ? }
? ? ? }
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c++中#include <>與#include""的區(qū)別詳細(xì)解析
<>先去系統(tǒng)目錄中找頭文件,如果沒(méi)有在到當(dāng)前目錄下找。所以像標(biāo)準(zhǔn)的頭文件 stdio.h、stdlib.h等用這個(gè)方法2013-10-10
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10
如何判斷一個(gè)整數(shù)的二進(jìn)制中有多少個(gè)1
本篇文章是對(duì)如何判斷一個(gè)整數(shù)的二進(jìn)制中有多少個(gè)1的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用
strcpy和memcpy都是標(biāo)準(zhǔn)C庫(kù)函數(shù),strcpy提供了字符串的復(fù)制而memcpy提供了一般內(nèi)存的復(fù)制。下面通過(guò)本文重點(diǎn)給大家介紹C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用,非常不錯(cuò),感興趣的朋友一起看下吧2016-08-08
詳解C標(biāo)準(zhǔn)庫(kù)堆內(nèi)存函數(shù)
在C/C++語(yǔ)言中,我們知道內(nèi)存分為這幾種:程序全局變量?jī)?nèi)存、棧內(nèi)存、堆內(nèi)存。其中堆內(nèi)存就是通過(guò)malloc(new)來(lái)分配的內(nèi)存,本文我們來(lái)探討一下C標(biāo)準(zhǔn)庫(kù)堆內(nèi)存函數(shù)。2021-06-06
OpenCV實(shí)現(xiàn)相機(jī)標(biāo)定示例詳解
相機(jī)標(biāo)定是圖像處理的基礎(chǔ),現(xiàn)在市面上買(mǎi)到的相機(jī),都存在著或多或少的畸變。本文將介紹如何利用一系列棋盤(pán)照片進(jìn)行攝像機(jī)標(biāo)定的,感興趣的小伙伴可以關(guān)注一下2021-11-11

