当前位置: 首页 > news >正文

OC----简单的购物系统----

今天下午OC上机考试,虽然考试的时候没写完, 但是课下写完了.

main.m

#import <Foundation/Foundation.h>
#import "Shops.h"
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
     
        Shops *shop = [Shops shopsWithPen:0 cup:0 rubber:0];  // 初始化商店
        [shop disPlayAllGoods];
        Person *per = [Person personWithShop:shop];
        [per pay:100];        //    用户付款
   
    }
    return 0;
}

Shops.h

#import <Foundation/Foundation.h>


@interface Shops : NSObject


@property (nonatomic, assign)NSInteger pen;
@property (nonatomic, assign)NSInteger cup;
@property (nonatomic, assign)NSInteger rubber;
@property (nonatomic, assign)NSInteger code;
@property (nonatomic, assign)NSInteger  number;
@property (nonatomic, assign)NSInteger count;


- (instancetype)initWithPen:(NSInteger)pen
                        cup:(NSInteger)cup
                     rubber:(NSInteger)rubber;
+ (instancetype)shopsWithPen:(NSInteger)pen
                         cup:(NSInteger)cup
                      rubber:(NSInteger)rubber;

- (void)disPlayAllGoods;
- (void)inputCode;
- (void)showAllBuyGoods;
- (void)deleteGoods;
- (void)buyCode:(NSInteger)code;
- (void)isGoOn:(NSInteger)number;
@end

 

Shops.m

 

//
//  Shops.m
//  26- 马峰
//
//  Created by dllo on 16/3/2.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import "Shops.h"

@implementation Shops
/**         自定义初始化      */
- (instancetype)initWithPen:(NSInteger)pen cup:(NSInteger)cup rubber:(NSInteger)rubber{
    self = [super init];
    if (self) {
        _cup = cup;
        _rubber = rubber;
        _pen = pen;
    }
    return self;
}
/**        便利构造器      */
+ (instancetype)shopsWithPen:(NSInteger)pen cup:(NSInteger)cup rubber:(NSInteger)rubber{
    Shops *shop = [[Shops alloc]initWithPen:pen cup:cup rubber:rubber];
    return shop;
}

/**       展示所有的商品     */
- (void)disPlayAllGoods{
    
    NSLog(@"欢迎来到1+1自助超市, 我们这里有以下商品:\n1.笔\n2.水杯\n3.橡皮\n4.退出\n请输入对应的编号选择购买.");
    [self inputCode];
}
/**        输入购买商品的编号      */
- (void)inputCode{
    scanf("%ld", &_code);
/**         判断是否输入有误      */
    if (_code > 4 || _code < 1) {
        _count++;
        if (_count == 3) {
            NSLog(@"错误三次,程序退出");
        }else{
            NSLog(@"输入错误,请重新输入:");
            [self inputCode];
        }
    }
    [self buyCode:_code];
}
/**       显示已经购买的商品          */
- (void)showAllBuyGoods{
    NSLog(@"你选择了%ld只笔, %ld个水杯, %ld个橡皮擦, 一共%ld元.还需要其他的吗. 需要请输入1, 不需要输入2",_pen, _cup, _rubber, _rubber * 2 + _pen * 3 + _cup * 5);
    scanf("%ld", &_number );
/**        判断是否输入有误         */
    if (_number > 2 || _number < 1) {
        _count++;
        if (_count == 3) {
            NSLog(@"错误三次,程序退出");
        }else{
            NSLog(@"输入错误,请重新输入:");
            [self showAllBuyGoods];
        }
    }
    [self isGoOn:_number];
    
}
/**          删除货物             */
- (void)deleteGoods{
    
    NSLog(@"请选择要删除的货物\n1.笔\n2.水杯\n3.橡皮擦");
    scanf("%ld", &_number);
    /** 判断是否输入有误 */
    if (_number > 4 || _number < 1) {
        _count++;
        if (_count == 3) {
            NSLog(@"错误三次,程序退出");
        }else{
            NSLog(@"输入错误,请重新输入:");
            [self deleteGoods];
        }
    }
    /**   判断是哪一种货物  */
    switch (_number) {
        case 1:
            NSLog(@"请输入数量:");
            scanf("%ld", &_number);
            _pen -= _number;
            [self showAllBuyGoods];
            break;
        case 2:
            NSLog(@"请输入数量:");
            scanf("%ld", &_number);
            _cup -= _number;
            [self showAllBuyGoods];
            
            break;
        case 3:
            NSLog(@"请输入数量:");
            scanf("%ld", &_number);
            _rubber -= _number;
            [self showAllBuyGoods];
            break;
        default:
            
            
            break;
    }
    
    
}


/**        根据用户输入判断是否买完       */
- (void)isGoOn:(NSInteger)number{
    switch (number) {
        case 1:
            [self disPlayAllGoods];
            break;
        case 2:
            NSLog(@"请付款");
        default:
            break;
    }
}
/**    根据用户输入判断用户要买哪一种商品   */
- (void)buyCode:(NSInteger)code{
    switch (code) {
        case 1:
            NSLog(@"请输入数量:");
            scanf("%ld", &_number);
            _pen += _number;
            [self showAllBuyGoods];
            break;
        case 2:
            NSLog(@"请输入数量:");
            scanf("%ld", &_number);
            _cup += _number;
            [self showAllBuyGoods];
            break;
        case 3:
            NSLog(@"请输入数量:");
            scanf("%ld", &_number);
            _rubber += _number;
            [self showAllBuyGoods];
            break;
        case 4:
            NSLog(@"程序已经退出!");
            break;
        default:
            
            break;
    }
}
@end

Person.h

#import <Foundation/Foundation.h>
#import "Shops.h"


@interface Person : NSObject


@property (nonatomic, retain)Shops *shop;


- (instancetype)initWithShop:(Shops *)shop;

+ (instancetype)personWithShop:(Shops *)shop;

- (void)pay:(NSInteger)money;




@end

 

Person.m

//
//  Person.m
//  26- 马峰
//
//  Created by dllo on 16/3/2.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import "Person.h"

@implementation Person
/**   自 定 义 初 始 化     */
- (instancetype)initWithShop:(Shops *)shop{
    self = [super init];
    if (self) {
        _shop = shop;
    }
    return self;
}
/**   便 利 构 造 器    */
+ (instancetype)personWithShop:(Shops *)shop{
    Person *per = [[Person alloc]initWithShop:shop];
    return per;
}

/**    付 款 函 数    */
- (void)pay:(NSInteger)money{
    
    if ((_shop.cup * 5 + _shop.rubber * 2 + _shop.pen * 3) > money) {
        NSLog(@"你买的东西超过了100块钱!!");
        [_shop deleteGoods];
        [self pay:money];
        
    }
    else{
        NSLog(@"付款成功!谢谢惠顾!!");
    }
    
}



@end

 

相关文章:

  • spring四种依赖注入方式
  • Swift2.0(17)内存管理ARC
  • 转:Vim实战指南(四):ex命令
  • Eclipse配置信息
  • 如何在CentOS 5/6上安装EPEL源
  • csu 1600: Twenty-four point
  • 常用的Linux操作命令(一)
  • 2014103《JAVA程序设计》第一周学习总结
  • 2月第4周网络安全报告:境内69.1万主机感染病毒
  • 本地环境,Ecshop安装教程
  • 使用maven+eclipse构建spark项目
  • pull解析和sax解析的差别
  • eclipse中JS文件乱码
  • JavaScript设计模式与开发实践系列之策略模式
  • 颜色名列表
  • ----------
  • 3.7、@ResponseBody 和 @RestController
  • Asm.js的简单介绍
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Just for fun——迅速写完快速排序
  • KMP算法及优化
  • Linux gpio口使用方法
  • MySQL QA
  • mysql外键的使用
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Python学习之路13-记分
  • React-生命周期杂记
  • 从零搭建Koa2 Server
  • 分类模型——Logistics Regression
  • 聊聊directory traversal attack
  • 前端js -- this指向总结。
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 详解NodeJs流之一
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​决定德拉瓦州地区版图的关键历史事件
  • (1)bark-ml
  • (2)STM32单片机上位机
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)fread与fwrite详解
  • (二)pulsar安装在独立的docker中,python测试
  • (十三)Flask之特殊装饰器详解
  • (转)关于pipe()的详细解析
  • (转)重识new
  • .chm格式文件如何阅读
  • .dwp和.webpart的区别
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • //解决validator验证插件多个name相同只验证第一的问题
  • @Resource和@Autowired的区别
  • @Transaction注解失效的几种场景(附有示例代码)
  • [100天算法】-x 的平方根(day 61)
  • [20150629]简单的加密连接.txt