Pizza 2000: Unterschied zwischen den Versionen

Aus Datenschutz
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 16: Zeile 16:
  
 
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]''').
 
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]''').
 +
 +
[http://www.frankwerner.org/downloads/programs/pizza.exe Download]
  
 
Quelltext:
 
Quelltext:
 
<pre>
 
<pre>
(folgt noch)
+
 
 +
; Pizza 2000 - (p) 1989, 2020 Frank Werner
 +
 
 +
; Funktionsweise: Die erfasste Telefonnummer wird in den bisherigen
 +
; Aufträgen gesucht und wenn gefunden die Daten des Kunden übernommen.
 +
; Anderenfalls werden die Kundendaten erfasst. Die Aufträge werden
 +
; in der CSV-Datei gespeichert (1 Bestellung pro Zeile, 1 Datei pro Monat)
 +
; und können mit einer Tabellenkalkulation eingelesen und ausgewertet werden.
 +
; Erfasste Aufträge werden an Kunde, Bäcker, Fahrer, Chef gesendet.
 +
; Rechnungen werden nicht mehr gedruckt.
 +
 
 +
; To Do:
 +
; - Erfasste Telefonnummer suchen
 +
; - Auftrag per E-Mail versenden
 +
; - Zuweisung von Straßen => Gebieten => Fahrern
 +
; - Auswahl von Zutaten zu erlaubten Pizzen
 +
 
 +
; Compiler-Optionen
 +
#pragma Compile (UPX, False)
 +
 
 +
; Includes
 +
#include <FileConstants.au3>
 +
#include <MsgBoxConstants.au3>
 +
 
 +
; Deklarationen
 +
Global $Artikelliste[][] = _
 +
          [ _
 +
            ["Empty", "N", "0.00"], _                  ; Frei lassen! Arrays starten hier bei 0!
 +
            ["Pizza Margaritha", "N", "4.50"], _        ; Artikel Nr. 1
 +
            ["Pizza Cipolla", "N", "4.80"], _
 +
            ["Pizza Quattro Stagioni", "J", "7.50"] _
 +
          ]
 +
 
 +
; Allgemeine Variable
 +
Global $Found, $ArtikelBuffer, $AuftragsBuffer, $KundenBuffer
 +
 
 +
; 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, " ")) & @YEAR & @MON & ".csv"
 +
 
 +
  Do
 +
    ; Auftragsnummer generieren: einfach nur Datum + Uhrzeit.
 +
    ; HINWEIS: 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 (0 = Ende des Programms)
 +
    $AuftragsBuffer = "Auftragsnummer:" & $Auftragsnummer & @CRLF & "Telefonnummer des anrufenden Kunden (0 = Ende):"
 +
    $Telefonnummer = InputBox ($Programmname, $AuftragsBuffer)
 +
 
 +
    ;Artikel einlesen
 +
    $ArtikelBuffer = ""
 +
    For $Zaehler = 1 to UBound ($Artikelliste) - 1
 +
    $ArtikelBuffer = $ArtikelBuffer & $Zaehler & " " & $Artikelliste [$Zaehler][0] & " " & $Artikelliste [$Zaehler][1] _
 +
      & " " & $Artikelliste [$Zaehler][2] & @CRLF
 +
    Next
 +
 
 +
    If $Telefonnummer <> "0" Then
 +
 
 +
      ; Kunde in bisherigen Bestellungen suchen
 +
      $KundenDateiZeile = 0
 +
      Do
 +
        $KundenDateiZeile = $KundenDateiZeile + 1
 +
        $KundenBuffer = FileReadLine ($FileName, $KundenDateiZeile)
 +
        MsgBox ($Programmname, "Debug", $KundenBuffer & "->" & @error)
 +
        If @error = -1 Then ExitLoop
 +
        If StringLeft ($KundenBuffer, StringInStr ($KundenBuffer, ";") - 1) = $Telefonnummer Then
 +
          $Found = True
 +
        ExitLoop
 +
        EndIf
 +
      Until True
 +
 
 +
      ; Kunde nicht im Bestand, neu erfassen
 +
      If Not $Found Then
 +
        $Kundenname = InputBox ($Programmname, "NEUER KUNDE! Name:")
 +
        $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, $ArtikelBuffer))
 +
 
 +
          If $Artikel < UBound ($Artikelliste) Then
 +
            $Auftragssumme = $Auftragssumme + $Artikelliste [$Artikel][2]
 +
 
 +
            FileWrite ($FileName, $Telefonnummer & ";" & $Kundenname & ";" & $Kundenadresse & ";" & $Kundenmail & ";" _
 +
                      & $Auftragsnummer & ";" & $Menge & ";" _
 +
                      &$Artikelliste [$Artikel][0] & ";" & $Artikelliste [$Artikel][2] & @CRLF)
 +
 
 +
          Else
 +
 
 +
            MsgBox ($Programmname, "Fehler", "Artikelnummer zu groß!")
 +
 
 +
          EndIf
 +
 
 +
        EndIf
 +
 
 +
      Until $Menge = 0
 +
 
 +
      ; Auftrag mailen an Kunde, Bäcker, Fahrer, Chef
 +
      MsgBox ($MB_OK, $Programmname, "Auftragssumme: " & $Auftragssumme)
 +
 
 +
    EndIf
 +
 
 +
  Until $Telefonnummer = "0"
 +
 
 +
  ; Shutdown Program
 +
  MsgBox ($MB_OK, $Programmname, "Programm beendet!")
 +
 
 +
;End
 +
 
 
</pre>
 
</pre>
  

Aktuelle Version vom 18. August 2020, 15:49 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

  1. Es ermöglichte Kunden, die unbekannt waren, direkt zu erfassen
  2. Zu jeder Pizza konnten, sofern vorgesehen, Zutaten gewählt werden
  3. 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.

Dies hier ist eine minimalisierte, neu programmierte Version. Im oberen Teil des Programms werden die Stammdaten eingegeben. Das Programm fragt nach der Telefonnummer eines Kunden und sucht diese in den bisherigen Aufträgen. Findet es die Telefonnummer nicht, fragt es nach den Daten des neuen Kunden. Anderenfalls werden diese in den aktuellen Auftrag übernommen.

Die Bestellungen des Kunden werden dann entgegen genommen und in einer Datei gespeichert. Anschließend wird der Auftrag an den Kunden gemailt (Kontrolle), dem Bäcker (Backauftrag), dem Fahrer (Zustellungsauftrag) und dem Chef (Kontrolle), die diese z. B. mit ihren Handys abrufen können.

Die erzeugte Datei kann später mit einer Tabellenkalkulation eingelesen und ausgewertet werden. Pro Monat wird eine Datei erzeugt.

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).

Download

Quelltext:


; Pizza 2000 - (p) 1989, 2020 Frank Werner

; Funktionsweise: Die erfasste Telefonnummer wird in den bisherigen
; Aufträgen gesucht und wenn gefunden die Daten des Kunden übernommen.
; Anderenfalls werden die Kundendaten erfasst. Die Aufträge werden
; in der CSV-Datei gespeichert (1 Bestellung pro Zeile, 1 Datei pro Monat)
; und können mit einer Tabellenkalkulation eingelesen und ausgewertet werden.
; Erfasste Aufträge werden an Kunde, Bäcker, Fahrer, Chef gesendet.
; Rechnungen werden nicht mehr gedruckt.

; To Do:
; - Erfasste Telefonnummer suchen
; - Auftrag per E-Mail versenden
; - Zuweisung von Straßen => Gebieten => Fahrern
; - Auswahl von Zutaten zu erlaubten Pizzen

; Compiler-Optionen
#pragma Compile (UPX, False)

; Includes
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>

; Deklarationen
Global $Artikelliste[][] = _
          [ _
            ["Empty", "N", "0.00"], _                   ; Frei lassen! Arrays starten hier bei 0!
            ["Pizza Margaritha", "N", "4.50"], _        ; Artikel Nr. 1
            ["Pizza Cipolla", "N", "4.80"], _
            ["Pizza Quattro Stagioni", "J", "7.50"] _
          ]

; Allgemeine Variable
Global $Found, $ArtikelBuffer, $AuftragsBuffer, $KundenBuffer

; 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, " ")) & @YEAR & @MON & ".csv"

  Do
     ; Auftragsnummer generieren: einfach nur Datum + Uhrzeit.
     ; HINWEIS: 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 (0 = Ende des Programms)
     $AuftragsBuffer = "Auftragsnummer:" & $Auftragsnummer & @CRLF & "Telefonnummer des anrufenden Kunden (0 = Ende):"
     $Telefonnummer = InputBox ($Programmname, $AuftragsBuffer)

     ;Artikel einlesen
     $ArtikelBuffer = ""
     For $Zaehler = 1 to UBound ($Artikelliste) - 1
     $ArtikelBuffer = $ArtikelBuffer & $Zaehler & " " & $Artikelliste [$Zaehler][0] & " " & $Artikelliste [$Zaehler][1] _
       & " " & $Artikelliste [$Zaehler][2] & @CRLF
     Next

     If $Telefonnummer <> "0" Then

       ; Kunde in bisherigen Bestellungen suchen
       $KundenDateiZeile = 0
       Do
         $KundenDateiZeile = $KundenDateiZeile + 1
         $KundenBuffer = FileReadLine ($FileName, $KundenDateiZeile)
         MsgBox ($Programmname, "Debug", $KundenBuffer & "->" & @error)
         If @error = -1 Then ExitLoop
         If StringLeft ($KundenBuffer, StringInStr ($KundenBuffer, ";") - 1) = $Telefonnummer Then
           $Found = True
         ExitLoop
         EndIf
       Until True

       ; Kunde nicht im Bestand, neu erfassen
       If Not $Found Then
         $Kundenname = InputBox ($Programmname, "NEUER KUNDE! Name:")
         $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, $ArtikelBuffer))

          If $Artikel < UBound ($Artikelliste) Then
            $Auftragssumme = $Auftragssumme + $Artikelliste [$Artikel][2]

            FileWrite ($FileName, $Telefonnummer & ";" & $Kundenname & ";" & $Kundenadresse & ";" & $Kundenmail & ";" _
                       & $Auftragsnummer & ";" & $Menge & ";" _
                       &$Artikelliste [$Artikel][0] & ";" & $Artikelliste [$Artikel][2] & @CRLF)

          Else

            MsgBox ($Programmname, "Fehler", "Artikelnummer zu groß!")

          EndIf

        EndIf

      Until $Menge = 0

      ; Auftrag mailen an Kunde, Bäcker, Fahrer, Chef
      MsgBox ($MB_OK, $Programmname, "Auftragssumme: " & $Auftragssumme)

    EndIf

  Until $Telefonnummer = "0"

  ; Shutdown Program
  MsgBox ($MB_OK, $Programmname, "Programm beendet!")

;End

Das Programm wird ohne jegliche Gewährleistung zur freien Verfügung gestellt.

Frank Werner