Pizza 2000: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „PIZZA 2000 war ein Programm, das ich 1989 - 1992 geschrieben und erweitert habe. Es diente einem Lieferdienst, der Pizza, Nudeln und andere Leckereien ausliefe…“) |
Admin (Diskussion | Beiträge) |
||
Zeile 1: | Zeile 1: | ||
− | PIZZA 2000 war ein Programm, das ich 1989 - 1992 geschrieben und erweitert habe. Es diente einem Lieferdienst, der Pizza, Nudeln und andere Leckereien auslieferte und das bis heute noch tut. | + | '''PIZZA 2000''' war ein Programm, das ich 1989 - 1992 geschrieben und erweitert habe. Es diente einem Lieferdienst, der Pizza, Nudeln und andere Leckereien auslieferte und das bis heute noch tut. |
PIZZA 2000 war in Modula-2 geschrieben. Diese, heute etwas merkwürdig klingende Entscheidung, war Gold wert. Denn jede Erweiterung konnte seinerzeit einfach durch ein Modul zu- oder weggeschaltet werden. Topspeed Modula-2 war da das bessere Entwicklungssystem als z. B. das damals populäre "Turbo-Pascal". | PIZZA 2000 war in Modula-2 geschrieben. Diese, heute etwas merkwürdig klingende Entscheidung, war Gold wert. Denn jede Erweiterung konnte seinerzeit einfach durch ein Modul zu- oder weggeschaltet werden. Topspeed Modula-2 war da das bessere Entwicklungssystem als z. B. das damals populäre "Turbo-Pascal". | ||
Zeile 6: | Zeile 6: | ||
# Es ermöglichte Kunden, die unbekannt waren, direkt zu erfassen | # Es ermöglichte Kunden, die unbekannt waren, direkt zu erfassen | ||
− | # Zu jeder Pizza konnten Zutaten gewählt werden | + | # Zu jeder Pizza konnten, sofern vorgesehen, Zutaten gewählt werden |
# Es hatte eine Straße-Gebiet-Fahrer-Zuordnung | # Es hatte eine Straße-Gebiet-Fahrer-Zuordnung | ||
Klar sind das heute keine Besonderheiten mehr. Inzwischen sind auch andere drauf gekommen, wie man so etwas am besten konstruiert. Aber damals kostete es uns eben etwas Gehirnschmalz. | Klar sind das heute keine Besonderheiten mehr. Inzwischen sind auch andere drauf gekommen, wie man so etwas am besten konstruiert. Aber damals kostete es uns eben etwas Gehirnschmalz. | ||
− | Irgendwie hatte ich mal Lust die alte Idee nochmal zu verwirklichen. Dazu wollte ich ganz zurück zu den Anfängen meines Programmiererlebens: BASIC. | + | Irgendwie hatte ich mal Lust die alte Idee nochmal zu verwirklichen. Dazu wollte ich ganz zurück zu den Anfängen meines Programmiererlebens: BASIC (bzw. die beste Implementierung außerhalb großer US-Konzerne: '''[https://www.autoitscript.com/site/ AutoIt]'''). |
− | + | Quelltext: | |
+ | <pre> | ||
+ | |||
+ | ; Pizza 2000 - (c) 1989, 2020 Frank Werner | ||
+ | |||
+ | ; Compiler-Optionen | ||
+ | #pragma Compile (UPX, False) | ||
+ | |||
+ | ; Includes | ||
+ | #include <FileConstants.au3> | ||
+ | #include <MsgBoxConstants.au3> | ||
+ | |||
+ | ; Deklarationen | ||
+ | Global $Artikelliste[][] = _ | ||
+ | [ _ | ||
+ | ["Empty", "N", "0.00"], _ ; Though Arrays starting here with Zero | ||
+ | ["Pizza Margaritha", "N", "4.50"], _ | ||
+ | ["Pizza Cipolla", "N", "4.80"], _ | ||
+ | ["Pizza Quattro Stagioni", "J", "7.50"] _ | ||
+ | ] | ||
+ | |||
+ | ; Allgemeine Variable | ||
+ | Global $FileHandle, $Found, $Buffer | ||
+ | |||
+ | ; Auftragsspezifische Variable | ||
+ | Global $Telefonnummer, $Auftragsnummer, $Kundenname, $Kundenadresse, $Kundenmail, $Menge, $Auftragssumme | ||
+ | |||
+ | ; Hauptprogramm | ||
+ | |||
+ | ; Initialisierung | ||
+ | $Programmname = "Pizza 2000 - (c) 1989, 2020 Frank Werner" | ||
+ | $FileName = StringLeft ($Programmname, StringInStr ($Programmname, " ") - 1) & ".DAT" | ||
+ | |||
+ | ; Auftragsdatei öffnen oder erzeugen | ||
+ | $FileHandle = FileOpen ($Filename, $FO_APPEND) | ||
+ | If $FileHandle = -1 Then | ||
+ | |||
+ | MsgBox ($MB_OK, $Programmname, "FEHLER: Datei " & $FileName & " kann weder geöffnet noch erzeugt werden!") | ||
+ | |||
+ | Else | ||
+ | |||
+ | Do | ||
+ | |||
+ | ; Auftragsnummer generieren: Datum + Uhrzeit. | ||
+ | ; Die Konkurrenz sollte durch die Auftragsnummer nicht den Tagesumsatz einschätzen können. | ||
+ | $Auftragsnummer = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC | ||
+ | $Auftragssumme = 0 | ||
+ | |||
+ | ; Telefonnummer des Kunden entgegennehmen | ||
+ | $Buffer = "Auftragsnummer:" & $Auftragsnummer & @CRLF & "Telefonnummer des anrufenden Kunden:" | ||
+ | $Telefonnummer = InputBox ($Programmname, $Buffer) | ||
+ | |||
+ | ;Artikel einlesen | ||
+ | $Buffer = "" | ||
+ | For $Zaehler = 1 to UBound ($Artikelliste) - 1 | ||
+ | $Buffer = $Buffer & $Zaehler & " " & $Artikelliste [$Zaehler][0] & " " & $Artikelliste [$Zaehler][1] _ | ||
+ | & " " & $Artikelliste [$Zaehler][2] & @CRLF | ||
+ | Next | ||
+ | |||
+ | If $Telefonnummer <> "0" Then | ||
+ | |||
+ | ; Kunde nach Telefonnummer suchen, ggf. neu erfassen | ||
+ | If Not $Found Then | ||
+ | $Kundenname = InputBox ($Programmname, "NEUER KUNDE! Name und Adresse:") | ||
+ | $Kundenadresse = InputBox ($Programmname, "NEUER KUNDE! Lieferadresse:") | ||
+ | $Kundenmail = InputBox ($Programmname, "NEUER KUNDE! Kunden-E-Mail:") | ||
+ | EndIf | ||
+ | |||
+ | ; Bestellungen erfassen | ||
+ | Do | ||
+ | |||
+ | ; Artikelmenge erfassen, Menge = 0: Ende der Erfassung | ||
+ | $Menge = InputBox ($Programmname, "Menge (0 = Ende)") | ||
+ | |||
+ | If $Menge <> "0" Then | ||
+ | |||
+ | ; Artikelname erfassen, Bestellung in Datei schreiben | ||
+ | $Artikel = Number (InputBox ($Programmname, $Buffer)) | ||
+ | $Auftragssumme = $Auftragssumme + $Artikelliste [$Artikel][2] | ||
+ | FileWrite ($FileHandle, $Telefonnummer & ";" & $Kundenname & ";" & $Kundenadresse & ";" & $Kundenmail & ";" _ | ||
+ | & $Auftragsnummer & ";" & $Menge & ";" _ | ||
+ | & $Artikelliste [$Artikel][0] & ";" & $Artikelliste [$Artikel][2] & @CRLF) | ||
+ | |||
+ | EndIf | ||
+ | |||
+ | Until $Menge = 0 | ||
+ | |||
+ | ; Auftrag mailen an Kunde, Bäcker, Fahrer, Chef | ||
+ | MsgBox ($MB_OK, $Programmname, "Auftragssumme: " & $Auftragssumme) | ||
+ | |||
+ | EndIf | ||
+ | |||
+ | Until $Telefonnummer = "0" | ||
+ | |||
+ | EndIf | ||
+ | |||
+ | ; Shutdown Program | ||
+ | FileClose ($FileHandle) | ||
+ | MsgBox ($MB_OK, $Programmname, "Programm beendet!") | ||
+ | |||
+ | ;End | ||
+ | </pre> |
Version vom 21. Juli 2020, 08:52 Uhr
PIZZA 2000 war ein Programm, das ich 1989 - 1992 geschrieben und erweitert habe. Es diente einem Lieferdienst, der Pizza, Nudeln und andere Leckereien auslieferte und das bis heute noch tut.
PIZZA 2000 war in Modula-2 geschrieben. Diese, heute etwas merkwürdig klingende Entscheidung, war Gold wert. Denn jede Erweiterung konnte seinerzeit einfach durch ein Modul zu- oder weggeschaltet werden. Topspeed Modula-2 war da das bessere Entwicklungssystem als z. B. das damals populäre "Turbo-Pascal".
PIZZA 2000 hatte drei damals eher ungewöhnliche Eigenschaften
- Es ermöglichte Kunden, die unbekannt waren, direkt zu erfassen
- Zu jeder Pizza konnten, sofern vorgesehen, Zutaten gewählt werden
- Es hatte eine Straße-Gebiet-Fahrer-Zuordnung
Klar sind das heute keine Besonderheiten mehr. Inzwischen sind auch andere drauf gekommen, wie man so etwas am besten konstruiert. Aber damals kostete es uns eben etwas Gehirnschmalz.
Irgendwie hatte ich mal Lust die alte Idee nochmal zu verwirklichen. Dazu wollte ich ganz zurück zu den Anfängen meines Programmiererlebens: BASIC (bzw. die beste Implementierung außerhalb großer US-Konzerne: AutoIt).
Quelltext:
; Pizza 2000 - (c) 1989, 2020 Frank Werner ; Compiler-Optionen #pragma Compile (UPX, False) ; Includes #include <FileConstants.au3> #include <MsgBoxConstants.au3> ; Deklarationen Global $Artikelliste[][] = _ [ _ ["Empty", "N", "0.00"], _ ; Though Arrays starting here with Zero ["Pizza Margaritha", "N", "4.50"], _ ["Pizza Cipolla", "N", "4.80"], _ ["Pizza Quattro Stagioni", "J", "7.50"] _ ] ; Allgemeine Variable Global $FileHandle, $Found, $Buffer ; Auftragsspezifische Variable Global $Telefonnummer, $Auftragsnummer, $Kundenname, $Kundenadresse, $Kundenmail, $Menge, $Auftragssumme ; Hauptprogramm ; Initialisierung $Programmname = "Pizza 2000 - (c) 1989, 2020 Frank Werner" $FileName = StringLeft ($Programmname, StringInStr ($Programmname, " ") - 1) & ".DAT" ; Auftragsdatei öffnen oder erzeugen $FileHandle = FileOpen ($Filename, $FO_APPEND) If $FileHandle = -1 Then MsgBox ($MB_OK, $Programmname, "FEHLER: Datei " & $FileName & " kann weder geöffnet noch erzeugt werden!") Else Do ; Auftragsnummer generieren: Datum + Uhrzeit. ; Die Konkurrenz sollte durch die Auftragsnummer nicht den Tagesumsatz einschätzen können. $Auftragsnummer = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC $Auftragssumme = 0 ; Telefonnummer des Kunden entgegennehmen $Buffer = "Auftragsnummer:" & $Auftragsnummer & @CRLF & "Telefonnummer des anrufenden Kunden:" $Telefonnummer = InputBox ($Programmname, $Buffer) ;Artikel einlesen $Buffer = "" For $Zaehler = 1 to UBound ($Artikelliste) - 1 $Buffer = $Buffer & $Zaehler & " " & $Artikelliste [$Zaehler][0] & " " & $Artikelliste [$Zaehler][1] _ & " " & $Artikelliste [$Zaehler][2] & @CRLF Next If $Telefonnummer <> "0" Then ; Kunde nach Telefonnummer suchen, ggf. neu erfassen If Not $Found Then $Kundenname = InputBox ($Programmname, "NEUER KUNDE! Name und Adresse:") $Kundenadresse = InputBox ($Programmname, "NEUER KUNDE! Lieferadresse:") $Kundenmail = InputBox ($Programmname, "NEUER KUNDE! Kunden-E-Mail:") EndIf ; Bestellungen erfassen Do ; Artikelmenge erfassen, Menge = 0: Ende der Erfassung $Menge = InputBox ($Programmname, "Menge (0 = Ende)") If $Menge <> "0" Then ; Artikelname erfassen, Bestellung in Datei schreiben $Artikel = Number (InputBox ($Programmname, $Buffer)) $Auftragssumme = $Auftragssumme + $Artikelliste [$Artikel][2] FileWrite ($FileHandle, $Telefonnummer & ";" & $Kundenname & ";" & $Kundenadresse & ";" & $Kundenmail & ";" _ & $Auftragsnummer & ";" & $Menge & ";" _ & $Artikelliste [$Artikel][0] & ";" & $Artikelliste [$Artikel][2] & @CRLF) EndIf Until $Menge = 0 ; Auftrag mailen an Kunde, Bäcker, Fahrer, Chef MsgBox ($MB_OK, $Programmname, "Auftragssumme: " & $Auftragssumme) EndIf Until $Telefonnummer = "0" EndIf ; Shutdown Program FileClose ($FileHandle) MsgBox ($MB_OK, $Programmname, "Programm beendet!") ;End