//
// zzcalculaterFunction.h
// calculaterByOC
//
// Created by Will Zhang/WKS/Wistron on 14-8-6.
// Copyright (c) 2014年 Will Zhang. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface zzcalculaterFunction : NSObject
-(void)inputNumberToArray:(double)number;//输入一个数到数组中
-(double)outNumberFromArray;//得到最后一个元素
-(double)operation:(NSString *)operator1;
@property NSMutableArray * numberarray;//
@end
//
// zzcalculaterFunction.m
// calculaterByOC
//
// Created by Will Zhang/WKS/Wistron on 14-8-6.
// Copyright (c) 2014年 Will Zhang. All rights reserved.
//
#import "zzcalculaterFunction.h"
@implementation zzcalculaterFunction
-(void)inputNumberToArray:(double)number{
if (_numberarray==nil) {
_numberarray = [[NSMutableArray alloc]init];//创建一个数组
}
[_numberarray addObject:[NSNumber numberWithDouble:number]];//静态类进行创建id
}
-(double)outNumberFromArray{
double number = [[_numberarray lastObject] doubleValue];//得到最后一个元素
if (_numberarray !=nil) {
[_numberarray removeLastObject];//移除最后一个元素
}
return number;
}
-(double)operation:(NSString *)operator1{
double returnValue = [self outNumberFromArray];
switch ([operator1 characterAtIndex:0]) {
case '+':
returnValue +=[self outNumberFromArray];//调用自己的函数
break;
case '-':
returnValue = [self outNumberFromArray] - returnValue;
break;
case '*':
returnValue = returnValue * [self outNumberFromArray];
break;
case '/':
returnValue = [self outNumberFromArray] / returnValue;
break;
default:
break;
}
[self inputNumberToArray:returnValue];
return returnValue;
}
@end
//
// zzViewController.h
// calculaterByOC
//
// Created by Will Zhang/WKS/Wistron on 14-8-5.
// Copyright (c) 2014年 Will Zhang. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "zzcalculaterFunction.h"
@interface zzViewController : UIViewController//故事板的中的按钮和回调函数
@property (weak, nonatomic) IBOutlet UILabel *resultLable;//结果标签
- (IBAction)numberButton:(UIButton *)sender;//数字按钮回调
- (IBAction)operationButton:(UIButton *)sender;//操作按钮回调
- (IBAction)equalButton:(UIButton *)sender;//等号按钮回调
- (IBAction)clearButton:(UIButton *)sender;//清除按钮回调
@property (weak, nonatomic) IBOutlet UILabel *operationLable;//操作标签
@end
//
// zzViewController.m
// calculaterByOC
//
// Created by Will Zhang/WKS/Wistron on 14-8-5.
// Copyright (c) 2014年 Will Zhang. All rights reserved.
//
#import "zzViewController.h"
@interface zzViewController ()
//@property bool isInputNumber;
@end
zzcalculaterFunction * calculaterFunction;
BOOL isCalculateComplete=YES;
BOOL isInputNumber = YES;
NSString *operation;
double value1 = 0.0;
double value2 = 0.0;
BOOL isOperationButtonPressTwoTimes=NO;
@implementation zzViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//初始化变量
//定义一个计算类
calculaterFunction = [[zzcalculaterFunction alloc]init];//自定义类的初始化
_resultLable.text = @"";//设置为空
_operationLable.text = @"";
operation = [[NSString alloc] init];//string的创建
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)numberButton:(UIButton *)sender
{
//如果之没有符号
if (_operationLable.text.length==0)
{
//如果已经完成计算
if (isCalculateComplete ==YES)
{
[calculaterFunction outNumberFromArray];//无参数函数的调用
_resultLable.text=sender.currentTitle;
isCalculateComplete=NO;
}
else
{
_resultLable.text= [_resultLable.text stringByAppendingString:sender.currentTitle];//连接字符串
}
}
else//如果之前有符号
{
if (isCalculateComplete ==YES)
{
//[calculaterFunction outNumberFromArray];
_resultLable.text=sender.currentTitle;
isCalculateComplete=NO;
}
else
{
if (isInputNumber == YES)
{
_resultLable.text= [_resultLable.text stringByAppendingString:sender.currentTitle];//有参数函数的调用
}
else
{
_resultLable.text=sender.currentTitle;//text 可以用.或者用[]进行设置或获得
isInputNumber =YES;
}
}
}
isOperationButtonPressTwoTimes=NO;
}
- (IBAction)operationButton:(UIButton *)sender {
if (_operationLable.text.length==0) {
if (isCalculateComplete ==YES) {
isCalculateComplete =NO;
}else{
[calculaterFunction inputNumberToArray: _resultLable.text.doubleValue];
}
}else{
if ([operation isEqualToString:_operationLable.text]) {
}else{
isOperationButtonPressTwoTimes = NO;
}
if (isOperationButtonPressTwoTimes ==NO) {
[calculaterFunction inputNumberToArray: _resultLable.text.doubleValue];
_resultLable.text = [NSString stringWithFormat:@"%g",[calculaterFunction operation:operation]];
isOperationButtonPressTwoTimes =YES;
}
}
_operationLable.text=sender.currentTitle;
operation=_operationLable.text;
isInputNumber=NO;
}
- (IBAction)equalButton:(UIButton *)sender {
//[calculaterFunction inputNumberToArray: _resultLable.text.doubleValue];
//[calculaterFunction operation:_operationLable.text];
if (isCalculateComplete == NO) {
value2 = _resultLable.text.doubleValue;
[calculaterFunction inputNumberToArray: value2];
_resultLable.text = [NSString stringWithFormat:@"%g",[calculaterFunction operation:operation]];//字符串格式化
_operationLable.text=@"";
}else {
[calculaterFunction inputNumberToArray: value2];
_resultLable.text = [NSString stringWithFormat:@"%g",[calculaterFunction operation:operation]];//%g,的意思是,系统自动判断用浮点计数法还是科学计数法来显示数值。
}
isCalculateComplete =YES;
isOperationButtonPressTwoTimes = NO;
}
- (IBAction)clearButton:(UIButton *)sender {
if (calculaterFunction.numberarray!=nil) {
[calculaterFunction outNumberFromArray];
}
_resultLable.text = @"";
_operationLable.text = @"";
operation = @"";
isCalculateComplete =YES;
isOperationButtonPressTwoTimes = NO;
isInputNumber = YES;
}
@end