// ViewController.m
// Fraction_Calculator
//
// Created by new on 15/6/7.
// Copyright (c) 2015年 All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
{
char op;
int numberOps;
int currentNumber;//输入中的数字
BOOL firstOperand,isNumerator;//跟踪输入的是第一个分数和第二个分数,以及输入的是分子还是分母;
BOOL isNegative,writingDigit;//跟踪输入的是否是负数,以及书写位数;
Calculator *myCalculator;
NSMutableString *displayString;
}
@synthesize display;
-(void)viewDidLoad
{
//覆盖应用程序载入的自定义方法
firstOperand=YES;
isNumerator=YES;
isNegative=NO;
writingDigit=NO;
numberOps=0;
displayString=[NSMutableString stringWithCapacity:40];
myCalculator=[[Calculator alloc]init];
}
-(void)errorOutDisplay
{
[myCalculator clear];
[displayString setString:@"Error!"];
[display setText:displayString];
}
-(void)processDight:(int)digit
{
if (isNegative)
currentNumber=currentNumber*10-digit;
else
currentNumber=currentNumber*10+digit;
if(!writingDigit)
writingDigit=YES;
[displayString appendString:[NSString stringWithFormat:@"%i",digit]];
display.text=displayString;
}
-(IBAction)clickDigit:(UIButton *)sender
{
int digit;
digit=(int)sender.tag;
[self processDight:digit];
}
-(void)processOp:(char)theOp
{
NSString *opStr;
[self storeFracPart];
numberOps++;
if (numberOps>1) {
NSLog(@"------%i",numberOps);
[myCalculator performOperation:op];
myCalculator.operand1.numerator=myCalculator.accumulator.numerator;
myCalculator.operand1.denominator=myCalculator.accumulator.denominator;
}
if (writingDigit==NO && theOp=='-') {
isNegative=YES;
[displayString setString:[displayString stringByAppendingString:@"-"]];
[display setText:displayString];
return ;
}
op=theOp;
switch (theOp) {
case '+':
opStr=@"+";
break;
case '-':
opStr=@"-";
break;
case '*':
opStr=@"∞";
break;
case '/':
opStr=@"÷";
break;
}
//[self storeFracPart];
firstOperand=NO;
isNumerator=YES;
writingDigit=NO;
isNegative=NO;
[displayString appendString:opStr];
display.text=displayString;
}
-(void)storeFracPart
{
if (firstOperand)
{
if (isNumerator)
{
myCalculator.operand1.numerator=currentNumber;
myCalculator.operand1.denominator=1;
}
else
{
if (currentNumber==0)
[self errorOutDisplay];
myCalculator.operand1.denominator=currentNumber;
}
}
else if (isNumerator)
{
myCalculator.operand2.numerator=currentNumber;
myCalculator.operand2.denominator=1;
}
else
{
if (currentNumber==0)
[self errorOutDisplay];
myCalculator.operand2.denominator=currentNumber;
firstOperand=YES;
}
currentNumber=0;
}
-(IBAction)clickOver
{
[self storeFracPart];
isNumerator=NO;
isNegative=NO;
[displayString appendString:@"/"];
display.text=displayString;
}
//算术操作键
-(IBAction)clickPlus
{
[self processOp:'+'];
}
-(IBAction)clickMinus
{
[self processOp:'-'];
}
-(IBAction)clickMultiply
{
[self processOp:'*'];
}
-(IBAction)clickDivide
{
[self processOp:'/'];
}
//Misc键
-(IBAction)clickEquals
{
if (firstOperand==NO) {
[self storeFracPart];
[myCalculator performOperation:op];
[displayString appendString:@"="];
[displayString appendString:[myCalculator.accumulator convertToString]];
display.text=displayString;
currentNumber=0;
isNumerator=YES;
firstOperand=YES;
numberOps=0;
[displayString setString:@""];
}
}
-(IBAction)clickClear
{
numberOps=0;
isNumerator=YES;
firstOperand=YES;
currentNumber=0;
[myCalculator clear];
[displayString setString:@""];
display.text=displayString;
}
-(IBAction)Convert
{
if(firstOperand && isNumerator &&!currentNumber)
{
[displayString setString:[NSString stringWithFormat:@"%g",[myCalculator.accumulator convertToNum]]];
[display setText:displayString];
}
}
- (void)viewDidUnLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
// ViewController.h
// Fraction_Calculator
//
// Created by new on 15/6/7.
// Copyright (c) 2015年 All rights reserved.
//
#import <UIKit/UIKit.h>
#import "Calculator.h"
@interface ViewController : UIViewController
@property(strong,nonatomic)IBOutlet UILabel *display;
-(void)processDight:(int)digit;
-(void)processOp:(char)theOp;
-(void)storeFracPart;
-(void)errorOutDisplay;
//数字键
-(IBAction)clickDigit:(UIButton*)sender;
//算术操作键
-(IBAction)clickPlus;
-(IBAction)clickMinus;
-(IBAction)clickMultiply;
-(IBAction)clickDivide;
//Misc键
-(IBAction)clickOver;
-(IBAction)clickEquals;
-(IBAction)clickClear;
-(IBAction)Convert;
@end