www.mikrocontroller.net

Forum: PC-Programmierung Problem mit CTypedPtrList

Autor: Franz Hembera (frahe)
Datum: 04.05.2008 12:56

Hallo,

ich bin dabei ein Programm für die Tankstelle meiner Tochter zu
schreiben. Dafür habe ich eine SDI-Anwendung in Verbindng mit
CTypedPtrList gewählt. Alles funktioniert prima: Nur wenn ich die
Zählerstände des Vortages in der nächsten Liste übernehmen will, tut
sich gar nichts. Wie muss ich es anstellen, damit diese übernommen
werden?
if(m_dAbgabenormalgesamt > 0)  // Abgabe Liter Normalbenzin
    {
      
        dZSNA02 = dZSNN01;
        m_dZaehlerstandnormalalt = dZSNA02;
        m_dZaehlerstandnormalneu = dZSNA02 + dNABL02;
      

      dZSNN02 = m_dZaehlerstandnormalneu;  
    }

dZSNA02, dZSNN01 sind statische Variablen, in denen die Werte
gespeichert werden, damit sie in der nächten Liste übernommen werden.

Ich bin Programmieranfänger (67 Jahre alt) und für jede Hilfe dankbar!

Grüsse

Franz
Autor: Rufus t. Firefly (rufus) (Moderator)
Datum: 04.05.2008 14:15

Ich sehe da keine Liste. Wie wäre es mit einem etwas aussagekräftigeren
Quelltextausschnitt?
Autor: Franz Hembera (frahe)
Datum: 04.05.2008 19:53

Anbei noch etwas Code
if(m_nSeite == 1)
  { 
    if(m_dBarzahlungnormal > 0)
    {
      m_dBarnormalgesamt = m_dBarnormalgesamt + m_dBarzahlungnormal;
      double dVar1;
      dVar1 = m_dBarzahlungnormal / m_dTagespreisbenzin;
      m_dAbgabenormalbar = floor(dVar1 * 100.0) / 100.0;
      dNormBar1 = dNormBar1 + m_dAbgabenormalbar;
      dBNges1 = dBNges1 + m_dBarzahlungnormal;
      m_dBarnormalgesamt = dBNges1;
      m_nKunden1++;
      m_dBarzahlungnormal = 0;
    }

    if(m_dEczahlungnormal > 0)
    {
      m_dEcnormalgesamt = m_dEcnormalgesamt + m_dEczahlungnormal;
      double dVar2;
      dVar2 = m_dEczahlungnormal / m_dTagespreisbenzin;
      m_dAbgabenormalec = floor(dVar2 * 100.0) / 100.0;
      dNormEc1 = dNormEc1 + m_dAbgabenormalec;
      dECges1 = dECges1 + m_dEczahlungnormal;
      m_dEcnormalgesamt = dECges1;
      m_nKunden1++;
      m_dEczahlungnormal = 0;
    }
    
    if(m_dRechnungnormal > 0)
    {
      m_dRechnungnormalgesamt = m_dRechnungnormalgesamt + m_dRechnungnormal;
      double dVar3;
      dVar3 = m_dRechnungnormal / m_dTagespreisbenzin;
      m_dAbgabenormalrech = floor(dVar3 * 100.0) / 100.0;
      dNormRech1 = dNormRech1 + m_dAbgabenormalrech;
      dREges1 = dREges1 + m_dRechnungnormal;
      m_dRechnungnormalgesamt = dREges1;
      m_nKunden1++;
      m_dRechnungnormal = 0;
    }

    dNABL01 = dNormBar1 + dNormEc1 + dNormRech1;
    m_dAbgabenormalgesamt = dNABL01;

    if(m_dAbgabenormalgesamt > 0)
    { 
      
      
      dZSNA01 = m_dZaehlerstandnormalalt;
        
        dZSNN01 = m_dZaehlerstandnormalalt + dNABL01;
        m_dZaehlerstandnormalneu = dZSNN01;
      
    }
}
if(m_nSeite == 2)
  { 
  
    if(m_dBarzahlungnormal > 0)
    {
      m_dBarnormalgesamt = m_dBarnormalgesamt + m_dBarzahlungnormal;
      double dVar1;
      dVar1 = m_dBarzahlungnormal / m_dTagespreisbenzin;
      m_dAbgabenormalbar = floor(dVar1 * 100.0) / 100.0;
      dNormBar2 = dNormBar2 + m_dAbgabenormalbar;
      dBNges2 = dBNges2 + m_dBarzahlungnormal;
      m_dBarnormalgesamt = dBNges2;
      m_nKunden1++;
      m_dBarzahlungnormal = 0;
    }
    
    if(m_dEczahlungnormal > 0)
    {
      m_dEcnormalgesamt = m_dEcnormalgesamt + m_dEczahlungnormal;
      double dVar2;
      dVar2 = m_dEczahlungnormal / m_dTagespreisbenzin;
      m_dAbgabenormalec = floor(dVar2 * 100.0) / 100.0;
      dNormEc2 = dNormEc2 + m_dAbgabenormalec;
      dECges2 = dECges2 + m_dEczahlungnormal;
      m_dEcnormalgesamt = dECges2;
      m_nKunden1++;
      m_dEczahlungnormal = 0;
    }
    
    if(m_dRechnungnormal > 0)
    {
      m_dRechnungnormalgesamt = m_dRechnungnormalgesamt + m_dRechnungnormal;
      double dVar3;
      dVar3 = m_dRechnungnormal / m_dTagespreisbenzin;
      m_dAbgabenormalrech = floor(dVar3 * 100.0) / 100.0;
      dNormRech2 = dNormRech2 + m_dAbgabenormalrech;
      dREges2 = dREges2 + m_dRechnungnormal;
      m_dRechnungnormalgesamt = dREges2;
      m_nKunden1++;
      m_dRechnungnormal = 0;
    }

    dNABL02 = dNormBar2 + dNormEc2 + dNormRech2;
    m_dAbgabenormalgesamt = dNABL02;

    if(m_dAbgabenormalgesamt > 0)
    {
      
        dZSNA02 = dZSNN01;
        m_dZaehlerstandnormalalt = dZSNA02;
        m_dZaehlerstandnormalneu = dZSNA02 + dNABL02;
      

      dZSNN02 = m_dZaehlerstandnormalneu;  
    }  
  } 

Das ist der Code für die 1. und 2. Liste. Der neue Zählerstand aus der
1. Liste soll als alter Zählerstand in der 2. Liste übernommen werden.
Das klappt nicht. In der Liste kann ich mit "home, prev, next, und end"
zu einer anderen Seite umschalten. Mit "Ins" wird die neue Liste
eingegeben und kann dann abgespeichert werden. Bei öffnen den
gespeicherten Datei sind dann die Zählerstände verschwunden, bis auf den
in der ersten Liste eingetragenen alten Zählerstand, der am Anfang des
Monats eingegeben wird.

Hoffentlich kannst Du jetzt was ersehen.

Grüsse

Franz
Autor: Karl heinz Buchegger (kbuchegg) (Moderator)
Datum: 05.05.2008 00:04

Franz Hembera wrote:

>
> Hoffentlich kannst Du jetzt was ersehen.
>

Nicht wirklich.

Da oben sind einige Berechnungen. Die könnte man wahrscheinlich
etwas kürzer formulieren, aber das ist jetzt nicht das Thema.
Was das ganze allerdings mit einer CTypedPtrList zu tun hat,
geht daraus immer noch nicht hervor.
Autor: Franz Hembera (frahe)
Datum: 06.05.2008 09:29

Das hat damit zu tun, dass sämtliche Umsätze der Tankstelle für jeden
Tag in eine Seite der Liste eingegeben werden sollen und das ganze
jeweils für den laufenden Monat. Damit muss jeder Tag nach Abschluss
abgespeichert werden, d. h. dass am Ende eines Monats bis zu 31 Seiten
vorhanden sind, in denen dann mit "Home. Prev, Next und End" geblättert
werden kann. Das ganze erstelle ich auf Vorlage des Beispiels EX16B in
dem Buch "Inside Visual C++ 6.0".

Ich bin jetzt dabei, den Quelltext zu ändern. Vielleicht habe ich damit
mehr Erfolg.

Ich möchte mich bei Dir bedanken, dass Du an meinem Problem Anteil
genommen hast.

Grüsse

Franz
Autor: Rufus t. Firefly (rufus) (Moderator)
Datum: 06.05.2008 10:08

Dein Problem wird in den Teilen des Codes liegen, die Du uns
vorenthalten hast, nämlich der Liste und deren Behandlung. Was jetzt
irgendwelche Tastendrücke damit zu tun haben, wirst auch nur Du wissen.
Autor: Karl heinz Buchegger (kbuchegg) (Moderator)
Datum: 06.05.2008 10:20

Rufus t. Firefly wrote:
> Dein Problem wird in den Teilen des Codes liegen, die Du uns
> vorenthalten hast, nämlich der Liste und deren Behandlung.

Erstens das.
Zweitens vermutet meine Glaskugel, dass eine CTypedPtrList schon
mal der falsche Weg ist. Ich sehe in der Aufgabenstellung nichts
was auf Polymorphie hinweist und was deshalb eine CTypedPtrList
erforderlich machen würde bzw. wo eine normale CList nicht auch
schon ausreichen würde.

Meine Vermutung geht daher in die Richtung, dass wieder mal viel
zu viel mit Pointern und dynamischer Allokierung rumgeworfen wird,
wo es eigentlich gar nicht notwendig wäre. Das führt dann, wenn
man es nicht kann, unweigerlich zu Problemen beim Kopieren solcher
Listen bzw. einzelner Einträge, etc. etc.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net