IOS基础开发二(iphone计算器)

来源:互联网 发布:上海圣约翰大学 知乎 编辑:程序博客网 时间:2024/05/17 23:03

CalculatorViewController:(MVC的控制器)


[cpp] view plaincopyprint?
  1. //  CalculatorViewController.h  
  2. //  Calculator  
  3. //  
  4. //  Created by WildCat on 13-7-28.  
  5. //  Copyright (c) 2013年 wildcat. All rights reserved.  
  6. //  
  7.   
  8. #import <UIKit/UIKit.h>  
  9.   
  10. @interface CalculatorViewController : UIViewController  
  11. @property (weak, nonatomic) IBOutlet UILabel *display;  
  12.   
  13. @end  
[cpp] view plaincopyprint?
  1. <pre name="code" class="cpp">//  
  2. //  CalculatorViewController.m  
  3. //  Calculator  
  4. //  
  5. //  Created by WildCat on 13-7-28.  
  6. //  Copyright (c) 2013年 wildcat. All rights reserved.  
  7. //  
  8.   
  9. #import "CalculatorViewController.h"  
  10. #import "CalculatorBrain.h"  
  11.   
  12. @interface CalculatorViewController()  
  13. @property (nonatomic) BOOL userIsinTheMiddleOfEnteringANumber;  
  14. @property(nonatomic,strong)CalculatorBrain *brain;  
  15. @end  
  16.   
  17. @implementation CalculatorViewController  
  18. @synthesize display=_display;  
  19.   
  20. @synthesize userIsinTheMiddleOfEnteringANumber=_userIsinTheMiddleOfEnteringANumber;  
  21.   
  22. @synthesize brain=_brain;  
  23. -(CalculatorBrain *)brain{  
  24.     if(!_brain) _brain=[[CalculatorBrain alloc] init];  
  25.     return _brain;  
  26.   
  27. }  
  28.   
  29. - (IBAction)digitPressed:(UIButton *)sender {  
  30.     NSString *digit=[sender currentTitle];  
  31.     //建一个局部变量  
  32.   
  33.     if (self.userIsinTheMiddleOfEnteringANumber) {  
  34.          
  35.         self.display.text=[self.display.text stringByAppendingString:digit];  
  36.     }else{  
  37.         self.display.text=digit;  
  38.         self.userIsinTheMiddleOfEnteringANumber=YES;  
  39.     }  
  40.       
  41.        
  42.       
  43.       
  44. }  
  45. - (IBAction)operationPressed:(UIButton *)sender {  
  46.       
  47.     if ([self userIsinTheMiddleOfEnteringANumber]) {  
  48.         [self enterPressed];  
  49.     }  
  50.     double result=[self.brain performOperation:sender.currentTitle];  
  51.       
  52.     NSString *resultString=[NSString stringWithFormat:@"%g",result];  
  53.     self.display.text=resultString;  
  54.       
  55.       
  56. }  
  57. - (IBAction)enterPressed {  
  58.       
  59.     [self.brain pushOperand:[self.display.text doubleValue]];  
  60.     self.userIsinTheMiddleOfEnteringANumber=NO;  
  61.       
  62. }  
  63. - (IBAction)enterDEL:(id)sender {  
  64.     NSString *nowstr=self.display.text;  
  65.     int len=nowstr.length;  
  66.     int nowlength=len-1;  
  67.     if (nowlength>=1) {  
  68.         self.display.text=[nowstr substringWithRange:NSMakeRange(0, nowlength)];  
  69.   
  70.     }else{  
  71.         self.display.text=@"0";  
  72.     }  
  73.           
  74. }  
  75.   
  76. @end  
  77. </pre><br>  
  78. <br>  
  79. <p></p>  
  80. <pre></pre>  
  81. <p></p>  
  82. <p class="p1"> CalculatorBrain(计算器大脑mvc中的model)</p>  
  83. <p class="p1"></p><pre name="code" class="cpp">//  CalculatorBrain.h  
  84. //  Calculator  
  85. //  
  86. //  Created by WildCat on 13-7-28.  
  87. //  Copyright (c) 2013年 wildcat. All rights reserved.  
  88. //  
  89.   
  90. #import <Foundation/Foundation.h>  
  91.   
  92. @interface CalculatorBrain : NSObject  
  93. -(void)pushOperand:(double)operand;  
  94. -(double)performOperation:(NSString *)operation;  
  95.   
  96. @property (readonly)id program;  
  97. +(double) runProgram:(id) program;  
  98. +(NSString *)discriptionOfProgram:(id) program;  
  99.   
  100. @end  
  101. </pre><br>  
  102. <pre name="code" class="cpp">//  
  103. //  CalculatorBrain.m  
  104. //  Calculator  
  105. //  
  106. //  Created by WildCat on 13-7-28.  
  107. //  Copyright (c) 2013年 wildcat. All rights reserved.  
  108. //  
  109.   
  110. #import "CalculatorBrain.h"  
  111. //定义一个私有的栈  
  112. @interface CalculatorBrain()  
  113. @property (nonatomic,strong)NSMutableArray *programStack;  
  114. @end  
  115.   
  116. @implementation CalculatorBrain  
  117. @synthesize programStack=_programStack;  
  118. //ProgramStack的setter and  getter............  
  119. -(NSMutableArray *)programStack{  
  120.     if (_programStack==nil) {  
  121.         _programStack=[[NSMutableArray alloc] init];  
  122.     }  
  123.     return _programStack;  
  124. }  
  125. -(void)setProgramStack:(NSMutableArray *)programStack{  
  126.     _programStack=programStack;  
  127. }  
  128.   
  129. -(double)performOperation:(NSString *)operation{  
  130.     [self.programStack addObject:operation];  
  131.     return [CalculatorBrain runProgram:self.program];  
  132.   
  133. }  
  134. -(id)program{  
  135.   
  136.     return [self.programStack copy];  
  137. }  
  138. //入栈  
  139. -(void)pushOperand:(double)operand{  
  140.   
  141.     [self.programStack addObject:[NSNumber numberWithDouble:operand]];  
  142.   
  143. }  
  144. //出栈  
  145. -(double)popOperand{  
  146.     NSNumber *number=[self.programStack lastObject];  
  147.     if (number) {  
  148.         [self.programStack removeLastObject];  
  149.     }  
  150.     return [number doubleValue];  
  151.   
  152.   
  153. }  
  154. +(double)popOperandOffStack:(NSMutableArray *)stack{  
  155.     double result=0;  
  156.     id topOfStack=[stack lastObject];  
  157.     if (topOfStack) {  
  158.         [stack removeLastObject];  
  159.     }  
  160.     if ([topOfStack isKindOfClass:[NSNumber class]]){  
  161.         result=[topOfStack doubleValue];  
  162.     }else if ([topOfStack isKindOfClass:[NSString class]]){  
  163.         NSString*operation=topOfStack;  
  164.         if ([@"+" isEqualToString:operation]) {  
  165.             result=[self popOperandOffStack:stack]+[self popOperandOffStack:stack];  
  166.         }else if ([@"*" isEqualToString:operation]){  
  167.             result=[self popOperandOffStack:stack]*[self popOperandOffStack:stack];  
  168.         }else if ([@"-" isEqualToString:operation]){  
  169.               
  170.             double firstnumber=[self popOperandOffStack:stack];  
  171.             double secondnumber=[self popOperandOffStack:stack];  
  172.             result=secondnumber-firstnumber;  
  173.         }else if([@"/" isEqualToString:operation]){  
  174.             double firstnumber=[self popOperandOffStack:stack];  
  175.             double secondnumber=[self popOperandOffStack:stack];  
  176.             if(firstnumber)result=secondnumber/firstnumber;  
  177.         }  
  178.               
  179.     }  
  180.     return result;  
  181.   
  182.   
  183. }  
  184. +(double) runProgram:(id) program{  
  185.     NSMutableArray *stack;  
  186.     if ([program isKindOfClass:[NSArray class]]) {  
  187.         stack=[program mutableCopy];  
  188.     }  
  189.       
  190.     return [self popOperandOffStack:stack];  
  191. }  
  192. +(NSString *)discriptionOfProgram:(id) program{  
  193.   
  194.     return @"Implament this in Assignment2";  
  195. }  
  196.   
  197.   
  198. @end  
  199. </pre><br>  
  200. 效果图:<p></p>  
  201. <p class="p1"><br>  
  202. </p>  
  203. <p class="p1"><img src="http://img.blog.csdn.net/20130731152515406?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsZGNhdGxlbGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""><br>  
  204. </p>  
  205. <p class="p1"><br>  
  206. </p>  
  207. <p class="p1"><br>  
  208. </p>  
  209. <br>