![]() |
C++ |
G.Eichelsdörfer - Staatliche Technikerschule Weilburg |
Projekt: gebuehrenzaehler bzw. gebuehrenzaehler_f
Es soll ein einfacher Telefon-Gebührenzähler implementiert werden, der auf Grund der Telefonierdauer die Telefonkosten des Gesprächs berechnen und ausgeben soll. Der Gebührenzähler ist zu starten und zu beenden. Die Dauer des Gesprächs ist die Zeit zwischen dem Start und dem Beenden und soll vom Computer erfasst werden. Nach dem Starten sollen die verstrichenen Sekunden (untereinander) angezeigt werden.
Zur Erfassung der Gesprächszeit kann die Funktion Sleep() eingesetzt werden. Diese Funktion lässt die Ausführung des Programms für eine gewisse Zeit ruhen. In dieser Zeit wird der Prozessor dem Programm nicht zugeteilt. Das Programm schläft in dieser Zeit.
Sleep() importiert einen int-Parameter, der die Dauer des "Schlafens" in Millisekunden angibt. Der Resultatstyp ist void. Diese Funktion wird dem Compiler durch einbeziehen der Datei windows.h bekannt gegeben.
Erstellen Sie das Programm mit folgenden Verhaltensweisen bzw. Eigenschaften!
Die Dauer der Abrechnungseinheit (Minute, Sekunde oder freie Eingabe) soll eingelesen werden.
Die Gesprächsgebühr pro Minute soll eingelesen werden.
Der Beginn des Gesprächs soll dem Programm durch Drücken einer bestimmten Taste mitgeteilt werden. Wählen Sie dafür eine geeignete Taste!
Nach dem Beginn des Gesprächs soll die laufende Gesprächsdauer in Sekunden angezeigt werden. Die Ausgabe kann untereinander erfolgen. Eine Zeitanzeige an feststehender Stelle kann linksbündig mit dem Zeichen '\r' (von carriage return = Wagenrücklauf, ohne Zeilenvorschb) bewerkstelligt werden. Wer es noch etwas hübscher haben will, mag die Dateien des Archivs conioex.zip verwenden. Dort gibt es u.a. die proprietären Funktionen wherex(), wherey() zur Abfrage der gegenwärtigen Cursorposition und gotoxy() zur Positionierung des Cursors. Mit clreol() kann alles von der Cursorposition bis zum Zeilenende gelöscht werden. Damit lässt sich die Gesprächsdauer an fixierter (feststehender, festgehaltener) Stelle ausgeben. conioex.zip können Sie u.a. im Austauschordner meines Webspaces unter cpp-loesungen finden. Bedenken Sie aber, dass diese Funktionssammlung ausschließlich für Kommandozeilenfenster unter Windows eingesetzt werden kann.
Das Ende des Gesprächs soll dem Programm durch Drücken einer bestimmten Taste mitgeteilt werden. Wählen Sie dafür eine geeignete Taste!
Nach Beendigung des Gesprächs sollen die Dauer des Gesprächs in Sekunden oder in der Form Minuten:Sekunden und die sich daraus ergebende Gesprächsgebühr ausgegeben werden.
Bereits halbwegs Moderne PCs sind so schnell, dass die Ausführung der Anweisungen zwischen dem sekundenweisen "Schlafen" praktisch nicht in's Gewicht fällt. Die Ungenauigkeit beim Drücken der Beginn- und Endetaste dürften höher sein als die durch zusätzliche Befehlsausführungszeiten, zumindest, solange wir von tagelangem Telefonieren absehen ;-). Wer es am Ende möglichst genau haben will, verwendet die Funktion time().
Für die Funktion time() muss die Datei ctime oder time.h einbezogen werden. Diese Funktion liefert die Anzahl an Sekunden, die seit dem 1. Januar 1970, 00:00 Uhr vergangen sind. Diese Anzahl können Sie in einer Variablen vom Typ unsigned long ablegen. Wenn Sie die Zeiten zu Beginn und am Ende des Gesprächs erfassen, ergibt deren Differenz die Gesprächsdauer in Sekunden. Weil die Funktion einen so genannten Zeiger erwartet, den Sie nicht benötigen, rufen Sie time() am Besten per time(NULL) auf. NULL ist der so genannte Nullzeiger, der, einfach ausgedrückt, auf nichts zeigt.