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
Datum: 04.05.2008 14:15
Ich sehe da keine Liste. Wie wäre es mit einem etwas aussagekräftigeren Quelltextausschnitt?
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
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.
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
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.
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