Problem mit CTypedPtrList

#858916
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
#859167
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
#859342
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.
#860256
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
#860306
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren