经过几天的学习,在对objective-c有所理解的基础上,跟着斯坦福大学的ios程序设计的课程,也根据他们第一个作业的要求完成了我的第一个ios程序,就是一个简单的计算器,但是这个程序对我的帮助是很大的,不仅仅加深了我对mvc模型的理解,还让我知道了更多ios编程时候的习惯以及对整个ios程序结构的把握。
这个是运行在模拟器上面的效果:
用Xcode来写程序真的很爽,感觉比ms的好多了,下面是程序的几个文件代码
//
// CalculatorViewController.h
// Calculator
//
// Created by mac11 on 12-3-8.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface CalculatorViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *display;
@property (weak, nonatomic) IBOutlet UILabel *uperDisplay;
@end
//
// CalculatorViewController.m
// Calculator
//
// Created by mac11 on 12-3-8.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "CalculatorViewController.h"
#import "CalculatorBrain.h"
@interface CalculatorViewController();
@property (nonatomic) BOOL userIsIntheMiddleOfEnteringANumber;
@property (nonatomic,strong) CalculatorBrain *brain;
@property (nonatomic) BOOL isNeedPrint;
@end
@implementation CalculatorViewController
@synthesize display = _display;
@synthesize uperDisplay = _uperDisplay;
@synthesize userIsIntheMiddleOfEnteringANumber = _userIsIntheMiddleOfEnteringANumber;
@synthesize brain = _brain;
@synthesize isNeedPrint = _isNeedPrint;
-(CalculatorBrain *)brain
{
if(!_brain)
_brain = [[CalculatorBrain alloc]init];
return _brain;
}
- (IBAction)digitpress:(UIButton *)sender
{
NSString *digit = [sender currentTitle];
if(self.userIsIntheMiddleOfEnteringANumber)
{
NSString *newDisplay = [self.display.text stringByAppendingString:digit];
self.display.text = newDisplay;
}
else
{
if([digit isEqualToString:@"."])
self.display.text = @"0.";
else
self.display.text = digit;
self.userIsIntheMiddleOfEnteringANumber = YES;
}
self.isNeedPrint = YES;
}
- (IBAction)enterpress
{
[self.brain pushOperand:[self.display.text doubleValue]];
self.userIsIntheMiddleOfEnteringANumber = NO;
if(self.isNeedPrint)
self.uperDisplay.text = [self.uperDisplay.text stringByAppendingFormat:@"%@ ",self.display.text];
}
- (IBAction)operationpress:(UIButton *)sender
{
double result;
NSString *operand = [sender currentTitle];
if(self.userIsIntheMiddleOfEnteringANumber)
{ //6 enter 4 + equal to 6 enter 4 enter +
self.isNeedPrint = NO;
[self enterpress];
}
self.uperDisplay.text = [self.uperDisplay.text stringByAppendingFormat:@"%@ %@ %@ ",
self.display.text,operand,@"="];
result = [self.brain performoperation:operand];
self.display.text = [NSString stringWithFormat:@"%g",result];
self.brain.isPaiPress = NO;
}
- (IBAction)paiPress
{
if(self.userIsIntheMiddleOfEnteringANumber)
[self enterpress];
self.brain.isPaiPress = YES;
self.uperDisplay.text = [self.uperDisplay.text stringByAppendingFormat:@"%@ ",@"π"];
}
- (IBAction)plusOrMins
{
int length = [self.display.text length];
unichar c,temp[50];
if([self.display.text characterAtIndex:0] == '-')
{
for(int i=1;i<length;i++)
{
c = [self.display.text characterAtIndex:i];
temp[i-1] = c;
}
NSString *tempString = [NSString stringWithCharacters:temp length:length-1];
self.display.text = tempString;
}
else
{
temp[0] = '-';
for(int i=0;i<length;i++)
{
c = [self.display.text characterAtIndex:i];
temp[i+1] = c;
}
NSString *tempString2 = [NSString stringWithCharacters:temp length:length+1];
self.display.text = tempString2;
}
}
- (IBAction)backSpace
{
int length = [self.display.text length];
if(length == 0)
self.display.text = @"0";
else
{
if(!([self.display.text characterAtIndex:0] == '0'))
{
unichar temp[50];
for(int i=0;i<length-1;i++)
{
temp[i] = [self.display.text characterAtIndex:i];
}
NSString *tempString = [NSString stringWithCharacters:temp length:length-1];
self.display.text = tempString;
}
}
}
- (IBAction)isClean
{
self.display.text = @"0";
self.uperDisplay.text = @"";
self.userIsIntheMiddleOfEnteringANumber = NO;
[self.brain PopAll];
}
@end
//
// CalculatorBrain.h
// Calculator
//
// Created by mac11 on 12-3-8.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface CalculatorBrain : NSObject
@property BOOL isPaiPress;
-(void) pushOperand:(double) operand;
-(double) performoperation:(NSString *)operation;
-(void) PopAll;
@end
//
// CalculatorBrain.m
// Calculator
//
// Created by mac11 on 12-3-8.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "CalculatorBrain.h"
@interface CalculatorBrain();
@property (nonatomic,strong) NSMutableArray *operandStack;
@end
@implementation CalculatorBrain
@synthesize operandStack = _operandStack; //这里改变属性的名字是为了下面注释处的检查
@synthesize isPaiPress = _isPaiPress;
-(NSMutableArray *)operandStack
{
if(!_operandStack)
{
_operandStack = [[NSMutableArray alloc] init];
}
return _operandStack;
}
-(void) setOperandStack:(NSMutableArray *)anArray
{
_operandStack = anArray;
}
-(void) pushOperand: (double)operand
{
NSNumber *operandObject = [NSNumber numberWithDouble:operand];
[self.operandStack addObject:operandObject];
//如果这里没有加self.,而且上面注释的地方也没有将属性的名字修改,那么编译器是不会检查出没有加self.这个错误的,没有加的话就没有调用setter了,这个程序也会是错的,所以保证这个的方法就是在上面注释处,给属性改名,在这里如果忘记加self.就会提醒有错,这时编写代码的一个习惯。
}
-(double) pOpOperand
{
NSNumber *object = [self.operandStack lastObject];
if(self.operandStack)
[self.operandStack removeLastObject];
return [object doubleValue];
}
-(void) PopAll
{
int count = [self.operandStack count];
while(count > 0)
{
[self.operandStack removeLastObject];
count = count-1;
}
self.operandStack = [[NSMutableArray alloc] init];
}
-(double) performoperation: (NSString *)operation
{
double result=0;
double temp;
if([operation isEqualToString:@"+"])
{
if(self.isPaiPress)
result = [self pOpOperand] + M_PI;
else
result = [self pOpOperand] + [self pOpOperand];
}
else if([operation isEqualToString:@"*"])
{
if(self.isPaiPress)
result = [self pOpOperand] * M_PI;
else
result = [self pOpOperand] * [self pOpOperand];
}
else if([operation isEqualToString:@"-"])
{
temp = [self pOpOperand];
result = [self pOpOperand] - temp;
}
else if([operation isEqualToString:@"/"])
{
temp = [self pOpOperand];
if(temp)
result = [self pOpOperand] / temp;
}
else if([operation isEqualToString:@"sin"])
{
result = sin([self pOpOperand]);
}
else if([operation isEqualToString:@"cos"])
{
result = cos([self pOpOperand]);
}
else if([operation isEqualToString:@"sqrt"])
{
result = sqrt([self pOpOperand]);
}
else if([operation isEqualToString:@"log"])
{
result = log([self pOpOperand]);
}
[self pushOperand:result];
return result;
}
@end