Forum: PC-Programmierung Problem mit CTypedPtrList


von Franz H. (frahe)


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?
1
if(m_dAbgabenormalgesamt > 0)  // Abgabe Liter Normalbenzin
2
    {
3
      
4
        dZSNA02 = dZSNN01;
5
        m_dZaehlerstandnormalalt = dZSNA02;
6
        m_dZaehlerstandnormalneu = dZSNA02 + dNABL02;
7
      
8
9
      dZSNN02 = m_dZaehlerstandnormalneu;  
10
    }

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Franz H. (frahe)


Lesenswert?

Anbei noch etwas Code
1
if(m_nSeite == 1)
2
  { 
3
    if(m_dBarzahlungnormal > 0)
4
    {
5
      m_dBarnormalgesamt = m_dBarnormalgesamt + m_dBarzahlungnormal;
6
      double dVar1;
7
      dVar1 = m_dBarzahlungnormal / m_dTagespreisbenzin;
8
      m_dAbgabenormalbar = floor(dVar1 * 100.0) / 100.0;
9
      dNormBar1 = dNormBar1 + m_dAbgabenormalbar;
10
      dBNges1 = dBNges1 + m_dBarzahlungnormal;
11
      m_dBarnormalgesamt = dBNges1;
12
      m_nKunden1++;
13
      m_dBarzahlungnormal = 0;
14
    }
15
16
    if(m_dEczahlungnormal > 0)
17
    {
18
      m_dEcnormalgesamt = m_dEcnormalgesamt + m_dEczahlungnormal;
19
      double dVar2;
20
      dVar2 = m_dEczahlungnormal / m_dTagespreisbenzin;
21
      m_dAbgabenormalec = floor(dVar2 * 100.0) / 100.0;
22
      dNormEc1 = dNormEc1 + m_dAbgabenormalec;
23
      dECges1 = dECges1 + m_dEczahlungnormal;
24
      m_dEcnormalgesamt = dECges1;
25
      m_nKunden1++;
26
      m_dEczahlungnormal = 0;
27
    }
28
    
29
    if(m_dRechnungnormal > 0)
30
    {
31
      m_dRechnungnormalgesamt = m_dRechnungnormalgesamt + m_dRechnungnormal;
32
      double dVar3;
33
      dVar3 = m_dRechnungnormal / m_dTagespreisbenzin;
34
      m_dAbgabenormalrech = floor(dVar3 * 100.0) / 100.0;
35
      dNormRech1 = dNormRech1 + m_dAbgabenormalrech;
36
      dREges1 = dREges1 + m_dRechnungnormal;
37
      m_dRechnungnormalgesamt = dREges1;
38
      m_nKunden1++;
39
      m_dRechnungnormal = 0;
40
    }
41
42
    dNABL01 = dNormBar1 + dNormEc1 + dNormRech1;
43
    m_dAbgabenormalgesamt = dNABL01;
44
45
    if(m_dAbgabenormalgesamt > 0)
46
    { 
47
      
48
      
49
      dZSNA01 = m_dZaehlerstandnormalalt;
50
        
51
        dZSNN01 = m_dZaehlerstandnormalalt + dNABL01;
52
        m_dZaehlerstandnormalneu = dZSNN01;
53
      
54
    }
55
}
1
if(m_nSeite == 2)
2
  { 
3
  
4
    if(m_dBarzahlungnormal > 0)
5
    {
6
      m_dBarnormalgesamt = m_dBarnormalgesamt + m_dBarzahlungnormal;
7
      double dVar1;
8
      dVar1 = m_dBarzahlungnormal / m_dTagespreisbenzin;
9
      m_dAbgabenormalbar = floor(dVar1 * 100.0) / 100.0;
10
      dNormBar2 = dNormBar2 + m_dAbgabenormalbar;
11
      dBNges2 = dBNges2 + m_dBarzahlungnormal;
12
      m_dBarnormalgesamt = dBNges2;
13
      m_nKunden1++;
14
      m_dBarzahlungnormal = 0;
15
    }
16
    
17
    if(m_dEczahlungnormal > 0)
18
    {
19
      m_dEcnormalgesamt = m_dEcnormalgesamt + m_dEczahlungnormal;
20
      double dVar2;
21
      dVar2 = m_dEczahlungnormal / m_dTagespreisbenzin;
22
      m_dAbgabenormalec = floor(dVar2 * 100.0) / 100.0;
23
      dNormEc2 = dNormEc2 + m_dAbgabenormalec;
24
      dECges2 = dECges2 + m_dEczahlungnormal;
25
      m_dEcnormalgesamt = dECges2;
26
      m_nKunden1++;
27
      m_dEczahlungnormal = 0;
28
    }
29
    
30
    if(m_dRechnungnormal > 0)
31
    {
32
      m_dRechnungnormalgesamt = m_dRechnungnormalgesamt + m_dRechnungnormal;
33
      double dVar3;
34
      dVar3 = m_dRechnungnormal / m_dTagespreisbenzin;
35
      m_dAbgabenormalrech = floor(dVar3 * 100.0) / 100.0;
36
      dNormRech2 = dNormRech2 + m_dAbgabenormalrech;
37
      dREges2 = dREges2 + m_dRechnungnormal;
38
      m_dRechnungnormalgesamt = dREges2;
39
      m_nKunden1++;
40
      m_dRechnungnormal = 0;
41
    }
42
43
    dNABL02 = dNormBar2 + dNormEc2 + dNormRech2;
44
    m_dAbgabenormalgesamt = dNABL02;
45
46
    if(m_dAbgabenormalgesamt > 0)
47
    {
48
      
49
        dZSNA02 = dZSNN01;
50
        m_dZaehlerstandnormalalt = dZSNA02;
51
        m_dZaehlerstandnormalneu = dZSNA02 + dNABL02;
52
      
53
54
      dZSNN02 = m_dZaehlerstandnormalneu;  
55
    }  
56
  }

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

von Karl H. (kbuchegg)


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.

von Franz H. (frahe)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Karl H. (kbuchegg)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.