第一个iOS application

经过几天的学习,在对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



评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值