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.


Anmelden zum Antworten