www.mikrocontroller.net

Forum: PC-Programmierung Problem mit CTypedPtrList


Autor: Franz Hembera (frahe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe da keine Liste. Wie wäre es mit einem etwas aussagekräftigeren 
Quelltextausschnitt?

Autor: Franz Hembera (frahe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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 Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.