清华大佬耗费三个月吐血整理的几百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; }