#import "ViewController.h"
typedef enum{
    kStausNum,
    kStausOperation
}kStaus;

typedef enum{
    kOperationTypeAdd = 1,
    kOperationTypeMinus,
    kOperationTypeMultiply,
    kOperationTypeDevide,
    kOperationTypeEqual,
    kOperationTypeNone
}kOperationType;

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *result_label;
@property (nonatomic,assign) long long firstParam; //记录第一个参数
@property (nonatomic,assign) kOperationType lastOperation;//保存上一次的操作数
@property (nonatomic,assign) BOOL status;//记录当前的状态

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //赋初值
    self.firstParam = 0;
    self.lastOperation = kOperationTypeNone;
    self.status = kStausNum;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)numButtonDidClicked:(UIButton *)sender {
    //获取点击的按钮上的数字
    int num = [sender.titleLabel.text intValue];
    //判断继续拼接还是单独显示
    long long showNum;
    if (self.status == kStausNum) {
        //获取之前显示的结果
    long long orgNum = [self.result_label.text longLongValue];
    
    //计算最终显示结果
    showNum = orgNum * 10 + num;
    }else{
        showNum = num;
        self.status = kStausNum;
    }
        
    //显示结果
    self.result_label.text = [NSString stringWithFormat:@"%lld",showNum];
    
    }

//操作键+-*÷
- (IBAction)operationButtonDidClicked:(UIButton *)sender {
    if (self.status != kStausOperation) {
        self.status = kStausOperation;
    }
    self.status = kStausOperation;
    //有两种情况
    //1.第一次操作,只需保存只一次操作
    //2.前面有操作需要计算,并保存这一次的操作
    //3.判断是不是第一次操作
    if (self.lastOperation != kOperationTypeNone) {
        //2.前面有操作需要计算,保存这次操作
        [self calculate];
    }else{
        //第一个参数输入完毕 保存
        self.firstParam = [self.result_label.text longLongValue];
    }
    //保存这一次操作
    if (sender.tag == kOperationTypeEqual) {
        self.lastOperation = kOperationTypeNone;
    }else{
        self.lastOperation = (kOperationType)sender.tag;//自定义tag的值
    }
    
}

//计算结果
-(void)calculate{
    int secondParam = [self.result_label.text intValue];
    long long result;
    
    switch (self.lastOperation) {
        case kOperationTypeAdd:
            result = self.firstParam + secondParam;
            break;
        case kOperationTypeMinus:
            result = self.firstParam - secondParam;
            break;
        case kOperationTypeMultiply:
            result = self.firstParam * secondParam;
            break;
        case kOperationTypeDevide:
            result = self.firstParam / secondParam;
            break;
        default:
            break;
    }
    //显示最终结果
    self.result_label.text = [NSString stringWithFormat:@"%lld",result];
    
    //当前的结果就是下一次的第一个参数的值
    self.firstParam = result;
    
    //更改操作符
    self.lastOperation = kOperationTypeNone;
}

- (IBAction)resetButtonDidClicked:(UIButton *)sender {
    self.result_label.text = @"0";
    self.lastOperation = kOperationTypeNone;
    self.status = kStausNum;
}

@end

1228.1——计算器(未使用MVC设计模式)的更多相关文章

  1. request对象常用API 获取请求参数的值 request应用 MVC设计模式

    1 request对象常用API   1)表示web浏览器向web服务端的请求   2)url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1     ...

  2. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  3. javaweb三大框架和MVC设计模式

    javaweb三大框架和MVC设计模式 转载,原文请见https://blog.csdn.net/sunpeng19960715/article/details/50890705 一.MVC设计模式 ...

  4. asp.net MVC设计模式中使用iTextSharp实现html字符串生成PDF文件

    因个人需求,需要将html格式转换成PDF并加上水印图片.于是乎第一次接触这种需求的小菜鸟博主我,在某度搜索引擎上不断的查阅关键字资料.踩坑,终于有了一个相应的解决方案.以下是解决步骤,记录下来方便以 ...

  5. 转载 javaweb三大框架和MVC设计模式 (自己加拉些内容)

    javaweb三大框架和MVC设计模式 一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基 ...

  6. MVC设计模式与Java Web经典三层架构

    MVC设计模式 MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  7. 浅谈javaweb三大框架和MVC设计模式

    一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(Vie ...

  8. AngularJS_01之基础概述、设计原则及MVC设计模式

    1.AngularJS: 开源的JS框架,用来开发单一页面应用,以及数据操作频繁的场景:2.设计原则: ①YAGNI原则:You Aren't Gonna Need It! 不要写不需要的代码! ②K ...

  9. 谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式

    作为一名java工程狮,大家肯定经历过很多面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的类似这样的一系列关于MVC的问题. [出现频率] [关键考点] MVC的含义 MVC的结构 ...

随机推荐

  1. VC编程命名方法

    1.

  2. 【android】Android检查是否已经连接到网络

    ConnectivityManager con=(ConnectivityManager)getSystemService(Activity.CONNECTIVITY_SERVICE); boolea ...

  3. js复制对象 和 节点类型和NodeList

    1. myList.cloneNode(true); 在参数为true的情况下,执行深复制,也就是复制节点及其整个子节点树,包括属性 2. myList.cloneNode(false); 在参数为f ...

  4. 在windows下获取硬盘序列号(win7 32位,Windows Server 64位测试,希望在其他平台测试,遇到问题的网友留言分享)

    #include <Windows.h> #include <stdio.h> // IOCTL控制码 // #define DFP_SEND_DRIVE_COMMAND CT ...

  5. android 退出方案 导致内存泄露

    比较奇怪android没有给出一个统一的退出接口,网上查了很多材料也出现了一些错误,在此记录一下,遇到的,与总结的. 1.常见概念,方法 finish() 通知结束当前activity实例,finis ...

  6. final关键字的作用

    final 可以修饰类.方法.变量. (1):final修饰的变量是一个常量,只能被赋值一次. 常量一般使用final声明,如: public static final String CHINA = ...

  7. poj2505-A multplication game

    题意:两个人轮流用2~9来乘n,使n不断扩大,n开始为1.当给一个固定值k,谁先使n超过k谁赢. 分析:能到达必败态的状态为必胜态,只能到达必胜态的状态为必败态.对于给定的k,n>=k时为必败态 ...

  8. (转载):() { :|:& }; : # <-- 打开终端,输入这个,回车.你看到了什么??

    代码::() { :|:& }; : 为什么这个东西会让你的系统死掉???有人执行了然后问我 让我们来分析一下这段代码,我改一下格式,但内容是一样的 代码::() # 定义一个叫“:”的过程  ...

  9. 最短路径问题:dijkstar

    算法描述: 输入图G,源点v0,输出源点到各点的最短距离D 中间变量v0保存当前已经处理到的顶点集合,v1保存剩余的集合 1.初始化v1,D 2.计算v0到v1各点的最短距离,保存到D for eac ...

  10. hadoop深入研究:(十六)——Avro序列化与反序列化

    转载请写明来源地址:http://blog.csdn.net/lastsweetop/article/details/9773233 所有源码在github上,https://github.com/l ...