清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
//
// main.m
// to
//
// Created by 的MACPro on 14-8-25.
// Copyright (c) 2014年 的MACPro. All rights reserved.
//
#import <Foundation/Foundation.h>
#include <stdio.h>
/**习题12:
自动售货机售货,机器检查纸币或者硬币的特点,有效的硬币是一元,五角,有效纸币是十元,五元,其它货币都认为是假币,将其从退币口退出。当机器接到有效的硬币后,把货币放入到储藏箱中
自动货机装有物品分配器,每个物品分配器,包含了零个或多个价格相同的物品,顾客通过选择物品分配器来选择
商品,如果物品分配其中有商品,而顾客支付的货币部小于该商品的价格,则商品将被分配到商品传送孔传送给顾客,
并将零钱返回到退币孔。如果分配器是空的或者机器内没有足够的硬币找零,则和顾客支付的货币值相等的硬币将被从
退币孔中退回。如果顾客支付的货币值小于所选择的分配器中的商品价格,机器将等待顾客投进更多的货币。如果顾客
决定不买选择的商品,则和顾客支付的货币值相等的硬币从退币孔退回。
*/
//对象 1.ATM 2.钱 3.商品
//钱对象
@interface Money : NSObject{
@public
int five;
int ten;
int one;
float _50cents;
@private
float total;
}
-(BOOL) isIllegal;
-(void) setTotal:(float) fen;
-(float) getTotal;
@end
//货物对象
@interface Goods : NSObject {
@public
NSString *_goods_name;
int _price;
int _amounts;
}
@end
//自动售货机
@interface ATM : NSObject{
@public
Goods *_cococola;
Money *_money;
int temp;
BOOL isDone;
}
-(void) getMoney:(Money *) inCome;
-(void) transaction;
-(void) run:(Money *) m : (Goods *) g;
@end
//--------------ipm--------------
@implementation Money : NSObject
-(BOOL) isIllegal{
BOOL isright = YES;
//要求参数传一个浮点数 直接计算出是否能被4中货币整除 是则返回YES 否则返回NO
if (five%5!=0||ten%10!=0) {
isright = NO;
}
return isright;
}
-(float) getTotal{
return _50cents+five+ten+one;
}
-(void) setTotal:(float)p1 {
total = p1;
}
@end
@implementation Goods : NSObject
@end
@implementation ATM : NSObject
// 收钱
-(void) getMoney:(Money *)inCome{
if([inCome isIllegal])
temp = [inCome getTotal];
else
NSLog(@"对不起 不支持您的货币类型 : 只能支付1元(硬币),5分(硬币),5元(纸币),10元(纸币)");
}
// 完成交易流程
-(void) transaction{
NSLog (@"请输入您要购买的商品类型 目前只有可乐 3块钱一瓶 爱买不买,哼~");
NSLog(@"要几瓶?");
int t = 0;
scanf("%d",&t);
if ((t * _cococola->_price) <= temp && _cococola->_amounts >= t) {
NSLog(@"本次交易收入%i元,购买可乐%i瓶,单价为[%i]元一瓶,开始出货.....",temp,t,
_cococola->_price);
int leftMony = temp - (_cococola->_price * t);
temp = leftMony;
if(isDone) [_money setTotal:temp - leftMony];
_cococola->_amounts -= t;
NSLog(@"交易完成 实收[%i]元 ",t*_cococola->_price);
NSLog(@"找零[%i]元...",leftMony);
}else if (_cococola->_amounts < t){
NSLog(@"对不起,库存不足,请重新选择.....");
return;
}else if(temp < _cococola->_price * t){
NSLog(@"对不起 您的钱不够...");
NSLog(@"交易完成 找零[%i]元",temp);
}else
NSLog(@"输入错误....");
if (isDone) temp = 0;
}
-(void) run:(Money *) m : (Goods *) g{
_cococola = g;
isDone = NO;
[self getMoney: m];
while( !isDone ){
printf("temp = %d\n",temp);
if( temp < _cococola->_price ) {
isDone = YES;
NSLog(@"交易结束 请走人");
}
if( _cococola->_amounts == 0 ) {
isDone = YES;
NSLog(@"不好意思卖光了 请走人");
}
[self transaction];
NSLog(@"\n\n\n-----------你好 欢迎来到 同学的ATM量贩机 请投币....-----------");
}
}
@end
//-------------主函数----------------
int main(int argc, const char * argv[])
{
Money *m1 = [Money new];
printf("\n%p 顾客给的钱的地址\n",&m1);
m1->_50cents = 0.5;
m1->five = 20;
m1->ten = 0;
m1->one = 0;
Money *base = [Money new];
printf("\n%p ATM机找补本金的地址\n",&base);
base->_50cents = 20.0;
base->five = 100;
base->ten = 10;
base->one = 100;
Goods *g1 = [Goods new];
g1->_price = 3; //3元一瓶 屌丝福音...
g1->_amounts = 20;//放20瓶可乐进去...
g1->_goods_name = @"1.可口可乐";
ATM *atm = [ATM new];
atm->_money = base;
atm->isDone = NO;
printf("\n 事实上是这个地址:%p \n",&(atm->_money));
NSString *AboutATMClass = [atm description];
NSLog(@"ATM对象->[%@]",AboutATMClass);
NSLog(@"%@",atm->_money);
[atm run:m1 :g1]; //给2个对象到ATM机器 开始跑 一直出货到钱花完为止...
return 0;
}