Kreditverlauf graphisch darstellen
-
Es soll eine Linie entstehen, welche die Dauer der Kreditabzahlung und nur die anfängliche Kredithöhe zeigt. Ich brauch also nur eine Linie.
Ich bekomme keine Ausgabe!!!Schuld
^
| ungefähres Model, hier fehlt eben die Gerade von der Laufzeit(unten beginend) nach oben zur Schuld
|
|
|
|
|
|
|______________________> Laufzeit// Declarations added here will be included at the top of the .HPP file const WDouble Monats_Rate = 100; const WDouble JahresZins = 6; const WDouble Schuld_aus_Vormonat = 6000; class __Form1_declspec Form1 : public __Form1_Base { public: // add your public instance data here private: // add your private instance data here WInt nullX; // Nullpunkt X-Achse WInt nullY; // Nullpunkt Y-Achse WInt maxX; // hoechster x-Wert WInt maxY; // hoechster y-Wert WDouble maxSchuld; // max. Schuld WDouble maxLaufzeit; // max. Laufzeit WDouble pixelProSchuld; WDouble pixelProLaufzeit; WString trLauf[20]; // Beschriftung Laufzeit WString strSchuld[20]; // Beschriftung Schuld protected: // add your protected instance data here public: void zeichneGrafik( void ); public: WPoint setzePunkt( WDouble zeit, WDouble tiefe ); public: WDouble berechneZeit( WDouble schuld ); }; // Code added here will be included at the top of the .CPP file // Include definitions for resources. #include "WRes.h" WBool Form1::Form1_Create( WObject * source, WCreateEventData * event ) { maxSchuld = 9000; // Hoechste Schuld maxLaufzeit = 20; // Hoechst Laufzeit nullX = 40; // Nullpunkt links unten nullY = GetHeight()-50; // in Bildschirmkoordinaten maxX = GetWidth()-100; // Hoechste erlaubte Bilschirmkoordinaten maxY = 40; /* Mindestgröße des Fensters festlegen, so daß es nie kleiner als */ /* am Anfang werden kann. */ SetMinimumTrackingSize( WSize(GetWidth(), GetHeight()) ); pixelProSchuld = ( nullY - maxY ) / maxSchuld; pixelProLaufzeit =( maxX - nullX ) / maxLaufzeit; /*-------------------------- Zeichnen der Grafik ----------------------*/ zeichneGrafik(); return FALSE; } Form1::Form1() { } Form1::~Form1() { } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Die Methode 'zeichneGrafik()' führt die grafischen Opertionen aus */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ void Form1::zeichneGrafik( void ) { WPen stiftKoordinatenKreuz; WPen stiftTeilstrich; WPen stiftKurve; WInt schuld, laufzeit; WDrawText * zahl; /*------------------------- Stifte festlegen --------------------------*/ stiftKoordinatenKreuz.Create( WColorBrightBlue); stiftTeilstrich.Create( WColorBlack,1,WPStyleDot ); stiftKurve.Create( WColorBrightRed, 2 ); // Stift Gitternetz /*------------------------- Koordinatenkreuz zeichnen -----------------*/ WDrawLine *linie = new WDrawLine( setzePunkt(0,0), setzePunkt(0,maxSchuld)); linie->SetPen(stiftKoordinatenKreuz); AddDrawPrimitive( linie ); linie = new WDrawLine( setzePunkt(0,0), setzePunkt(maxLaufzeit,0)); linie->SetPen(stiftKoordinatenKreuz); AddDrawPrimitive( linie ); /*----------------------- Koordinatenkreuz beschriften ----------------*/ WDrawText *xAchse = new WDrawText( setzePunkt(20.6, 0)," Laufz-inMo " ); xAchse->SetFont(GetFont()); AddDrawPrimitive( xAchse ); WDrawText *yAchse = new WDrawText( setzePunkt(-0.3,100000)," RestSchu " ); yAchse->SetFont(GetFont()); AddDrawPrimitive( yAchse ); WInt i=0; for( laufzeit= 1; laufzeit < maxLaufzeit; laufzeit++ ) { zahl = new WDrawText((WPoint) setzePunkt(laufzeit,-1), " "); strLauf[i].Sprintf(" %d ", laufzeit); //zahl->SetNumCharacters( strSec[i].GetLength() ); zahl->SetText(strLauf[i]); zahl->SetFont(GetFont()); AddDrawPrimitive( zahl ); i++; } i=0; for( schuld=0; schuld < maxSchuld; schuld+=1000) { zahl = new WDrawText((WPoint) setzePunkt(-0.4, schuld+2), ""); strSchuld[i].Sprintf(" %d ", schuld); //zahl->SetNumCharacters( strSchuld[i].GetLength() ); zahl->SetText(strSchuld[i]); zahl->SetFont(GetFont()); AddDrawPrimitive( zahl ); i++; } for( laufzeit =1; laufzeit < maxLaufzeit; laufzeit++ ) { WDrawLine *teilstrich = new WDrawLine( setzePunkt(laufzeit,0), setzePunkt(laufzeit,maxSchuld)); teilstrich->SetPen(stiftTeilstrich); AddDrawPrimitive( teilstrich ); } for( schuld=1000; schuld < maxSchuld; schuld+=1000 ) { WDrawLine *teilstrich = new WDrawLine(setzePunkt(0,schuld), setzePunkt(maxLaufzeit,schuld)); teilstrich->SetPen(stiftTeilstrich); AddDrawPrimitive( teilstrich ); } for( schuld=0; schuld < maxSchuld; schuld++ ) { WDouble zeit2 = berechneZeit( schuld ); WDouble zeit1 = berechneZeit( schuld+1 ); WDrawLine *kurve = new WDrawLine(setzePunkt(zeit1,schuld), setzePunkt(zeit2,schuld+1)); kurve->SetPen(stiftKurve); AddDrawPrimitive( kurve ); } SetBackColor( WColorBrightCyan ); } WPoint Form1::setzePunkt( WDouble zeit, WDouble tiefe ) { WPoint punkt; punkt.x = nullX + zeit * pixelProLaufzeit; // Koordinaten für die Laufzeit punkt.y = nullY -tiefe * pixelProSchuld; // Koordinaten für die Schuld return punkt; } WDouble Form1::berechneZeit( WDouble schuld ) { WDouble Restschuld; Restschuld = Schuld_aus_Vormonat+(Schuld_aus_Vormonat*JahresZins /100/12)- Monats_Rate; return Restschuld; }
-
Hi,
ehrlich ist mir der Code zu lang, um ihn ganz durchzufräsen ....
aber mal eine Frage: Warum benutzt Du W...-Typen (ich dachte, die eingebauten Typen reichen) ? Und warum doubles (üblicherweise rechnet keine Bank mit höherer Auflösung als 10tel-cent) ?Beim Vergleichen von ...doubles kommt es gerne mal zu erstaunlichen Ergebnissen.
Wenn Du übehaupt keine Ausgabe bekommst, würde ich mir die Werte erstmal als Zahlen ausgeben lassen und überprüfen, ob sie stimmen.
Außerdem solltest Du mal Werte in Deinem System anzeigen lassen, die definitiv erscheinen müssen (um zu prüfen, ob Deine Ausgabe funktioniert).Gruß,
Simon2.