Pleasure of challenge


#1

happy to be at the big nerd ranch, i’d like to post that challenge so far.
even it’s the one i have some dislikes, just because i don’t like the (financial)market at all. never mind.
a lot of arrays init, but i hope like this it wouldn’t be a memory-management-problem. i’ve written a routine to generate some space to the stock-names,
just for the look, very dumb and simple, and i know for sure there’s a much better method to do that. but, i’m a beginner and what a pleasure!

main.m

[code]//
#import <Foundation/Foundation.h>
#import “ForeignStockHolding.h”
#import “Portfolio.h”

int main(int argc, const char * argv[])
{

@autoreleasepool         {

    StockHolding *aktie1 = [[StockHolding alloc] init];
    [aktie1 setKaufAktienKurs:2.30];
    [aktie1 setAktuellerAktienkurs:4.50];
    [aktie1 setAnzahlAktien:40];
    [aktie1 setAktienTitel:@"Lego"];
    
    StockHolding *aktie2 = [[StockHolding alloc] init];
    [aktie2 setKaufAktienKurs:12.19];
    [aktie2 setAktuellerAktienkurs:10.56];
    [aktie2 setAnzahlAktien:90];
    [aktie2 setAktienTitel:@"Duplo"];
    
    StockHolding *aktie3 = [[StockHolding alloc] init];
    [aktie3 setKaufAktienKurs:45.10];
    [aktie3 setAktuellerAktienkurs:49.51];
    [aktie3 setAnzahlAktien:210];
    [aktie3 setAktienTitel:@"Smarties"];
   
        NSMutableArray *aktienFolio = [NSMutableArray arrayWithObjects:aktie1, aktie2, aktie3, nil]; //fills array with stock
    
    ForeignStockHolding *aktien = [[ForeignStockHolding alloc]init];
    [aktien setKaufAktienKurs:400.19];
    [aktien setAktuellerAktienkurs:700.56];
    [aktien setAnzahlAktien:12];
    [aktien setAktienTitel:@"Kukident"];
    [aktien setKonventierungsRate:0.5];
        [aktienFolio addObject:aktien];         //adds foreign stock
    
    aktien = [[ForeignStockHolding alloc]init];
    [aktien setKaufAktienKurs:50];
    [aktien setAktuellerAktienkurs:100];
    [aktien setAnzahlAktien:90];
    [aktien setAktienTitel:@"Schnee und Eis AG"];
    [aktien setKonventierungsRate:0.94];
        [aktienFolio addObject:aktien];       //...
    
    aktien = [[ForeignStockHolding alloc]init];
    [aktien setKaufAktienKurs:12.19];
    [aktien setAktuellerAktienkurs:10.56];
    [aktien setAnzahlAktien:90];
    [aktien setAktienTitel:@"Donnerwetter"];
    [aktien setKonventierungsRate:0.7];
        [aktienFolio addObject:aktien];     //...
    

    
    Portfolio *meins = [[Portfolio alloc]init];             
    for (ForeignStockHolding *papier in aktienFolio) {  //the main-folio-array fills the folio-object-array
        [meins addierAktie:papier];
    }
    aktienFolio = nil;  //no further need (they all belong to the object's array now)
    
    NSMutableArray *aktienBestand = [meins aktienBestand];  //so let's ask the object for its content of stocks
    for (NSString *aktie in aktienBestand) {
            NSLog(@"%@", aktie);                //showing every title with its values
    }
    aktienBestand = nil; //no further need 
    
    NSLog(@"-------------------------------------------------------------------------");
    
    NSLog(@"Portofolio: Kosten %.2f, Wert %.2f, gehaltene Titel %u", [meins gesammtKost], [meins gesammtWert], [meins aktienAnzahl]); //ask the object for its overall values in stocks
   
    NSLog(@"%@", [meins ergebnisWort]);     //tell me if i suceed...
    
    NSLog(@"%.2f",[meins ergebnisZahl]);    //tell me in numbers
    
    meins = nil;
}
return 0;

}
[/code]

StockHolding.h

#import "StockHolding.h"

@interface ForeignStockHolding : StockHolding

{
    float konventierungsRate;
}

-(void)setKonventierungsRate:(float)k;

-(float)kostenInStutz;
-(float)wertInStutz;

@end

ForeignStockHolding.m


#import "ForeignStockHolding.h"

@implementation ForeignStockHolding

float konventierungsRate;

-(void)setKonventierungsRate:(float)k
{
    konventierungsRate = k;
}

-(float)kostenInStutz
{
    return [super kostenInStutz] * konventierungsRate;
}


-(float)wertInStutz
{
    return [super wertInStutz] * konventierungsRate;
}
@end

Portofolio.h

#import <Foundation/Foundation.h>
@class StockHolding;
@interface Portfolio : NSObject

{
    NSMutableArray *vollFolio;
    NSMutableArray *alleAktien;
}

-(void)addierAktie:(StockHolding *)s;
-(NSMutableArray *)aktienBestand;
-(double)gesammtWert;
-(double)gesammtKost;
-(unsigned int)aktienAnzahl;
-(float)ergebnisZahl;
-(NSString *)ergebnisWort;
@end

portofolio.m

#import "Portfolio.h"
#import "ForeignStockHolding.h"
@implementation Portfolio

-(void)addierAktie:(StockHolding *)s
{
    if (!vollFolio){
        vollFolio = [[NSMutableArray alloc]init];
    }
    [vollFolio addObject:s];
}

-(NSMutableArray *)aktienBestand
{
    NSMutableArray *leer = [[NSMutableArray alloc]init];            //rookie-style in adding space for a proper formatting
    for (ForeignStockHolding *txtCheck in vollFolio) {
        NSUInteger namenLang = [[txtCheck aktienTitel] length];
        if (namenLang == 4) {
            NSString *leerSchlag = @"             ";
            [leer addObject:leerSchlag];
        }
        else if (namenLang == 5) {
            NSString *leerSchlag = @"            ";
            [leer addObject:leerSchlag];
        }
        else if (namenLang == 6) {
            NSString *leerSchlag = @"           ";
            [leer addObject:leerSchlag];
            
        }
        else if (namenLang ==  7) {
            NSString *leerSchlag = @"          ";
            [leer addObject:leerSchlag];
        }
        else if (namenLang ==  8) {
            NSString *leerSchlag = @"         ";
            [leer addObject:leerSchlag];
            
        }
        else if (namenLang ==  9) {
            NSString *leerSchlag = @"        ";
            [leer addObject:leerSchlag];
        }
        else if (namenLang ==  10) {
            NSString *leerSchlag = @"       ";
            leer = [[NSMutableArray alloc]init];
            [leer addObject:leerSchlag];
        }
        else if (namenLang == 11) {
            NSString *leerSchlag = @"      ";
            [leer addObject:leerSchlag];
        }
        else if (namenLang ==  12) {
            NSString *leerSchlag = @"     ";
            [leer addObject:leerSchlag];
        }
        else if (namenLang ==  13) {
            NSString *leerSchlag = @"    ";
            [leer addObject:leerSchlag];
            
        }
        else if (namenLang ==  14) {
            NSString *leerSchlag = @"  ";
            [leer addObject:leerSchlag];
        }
        else if (namenLang ==  15) {
            NSString *leerSchlag = @" ";
            [leer addObject:leerSchlag];
        }
        else {
            NSString *leerSchlag = @"";
            [leer addObject:leerSchlag];
        }
    }

    int l = 0;
    alleAktien = [[NSMutableArray alloc] init];
    for (ForeignStockHolding *aktien in vollFolio) {
    [alleAktien addObject:[NSString stringWithFormat:@"Titel: %@ %@ Kaufpreis %6.2f, Jetztpreis %6.2f, gehaltene Aktien %3d, Kosten %7.2f, Wert %8.2f",
              [aktien aktienTitel],
              [leer objectAtIndex:l],
              [aktien kaufAktienKurs],
              [aktien aktuellerAktienkurs],
              [aktien anzahlAktien],
              [aktien kostenInStutz],
              [aktien wertInStutz]]];
        l++;
        
    }
    leer = nil;
    return alleAktien;
}



-(double)gesammtWert
{
    double gesamt = 0;
    for (StockHolding *papier in vollFolio) {
        gesamt += [papier wertInStutz];
    }
    return gesamt;
}

-(double)gesammtKost
{
    double gesamt = 0;
    for (StockHolding *papier in vollFolio) {
        gesamt += [papier kostenInStutz];
    }
    return gesamt;
}

-(unsigned int)aktienAnzahl
{
    return (unsigned)[vollFolio count];
}


-(float)ergebnisZahl;
{
    
    float alleKosten = [self gesammtKost];
    float allerWert = [self gesammtWert];
    float ergebnis = allerWert - alleKosten;
    return ergebnis;
}


-(NSString *)ergebnisWort
{
    if ([self ergebnisZahl] <0) {
        return @":( VERLUST!!!";
    }
    else if ([self ergebnisZahl] == 0) {
        return @":/ Null-Rechnung...";
    }
    else {
        return @":D GEWINN!";
    }
  
}

@end

(the StockHolding-class is like meant in the book)
the outout is

2012-10-14 16:05:20.962 StocksSucks[17355:403] Titel: Lego               Kaufpreis   2.30, Jetztpreis   4.50, gehaltene Aktien  40, Kosten   92.00, Wert   180.00
2012-10-14 16:05:20.964 StocksSucks[17355:403] Titel: Duplo              Kaufpreis  12.19, Jetztpreis  10.56, gehaltene Aktien  90, Kosten 1097.10, Wert   950.40
2012-10-14 16:05:20.964 StocksSucks[17355:403] Titel: Smarties           Kaufpreis  45.10, Jetztpreis  49.51, gehaltene Aktien 210, Kosten 9471.00, Wert 10397.10
2012-10-14 16:05:20.965 StocksSucks[17355:403] Titel: Kukident           Kaufpreis 400.19, Jetztpreis 700.56, gehaltene Aktien  12, Kosten 2401.14, Wert  4203.36
2012-10-14 16:05:20.965 StocksSucks[17355:403] Titel: Schnee und Eis AG  Kaufpreis  50.00, Jetztpreis 100.00, gehaltene Aktien  90, Kosten 4230.00, Wert  8460.00
2012-10-14 16:05:20.966 StocksSucks[17355:403] Titel: Donnerwetter       Kaufpreis  12.19, Jetztpreis  10.56, gehaltene Aktien  90, Kosten  767.97, Wert   665.28
2012-10-14 16:05:20.966 StocksSucks[17355:403] -------------------------------------------------------------------------
2012-10-14 16:05:20.966 StocksSucks[17355:403] Portofolio: Kosten 18059.21, Wert 24856.14, gehaltene Titel 6
2012-10-14 16:05:20.967 StocksSucks[17355:403] :D GEWINN!
2012-10-14 16:05:20.967 StocksSucks[17355:403] 6796.93

:mrgreen:

by the way, i voted the book in the little (compared with amazon) online shop i’ve buyed it, cede.ch. for real.
thank you aaron.