Seite 2 von 2

Verfasst: 30.08.2008 19:33
von DrShrek
Sicro hat geschrieben:Hallo Dr. Shrek,
wieso erstellst du nicht selber so ein Kassenprogramm?
Mfg Sicro
Eine Frage die berechtigt ist. Sicher eine Marktlücke.
Die Programme die ich bis jetzt im Internet gefunden habe, sind alle zu 'BIG'.

Ich (und sicher viele andere auch, in irgendwelchen 200 Seelendörfer Vereinen) brauchen etwas einfacheres.

Da reichen sicher auch die 29 Tasten locker aus um die max 20 Produkte zu berechnen/zu verwalten.

Verfasst: 30.08.2008 19:43
von Kaeru Gaman
meine idee wäre dann, die Buttons auch so anzuordnen wie die tasten,
also 11, 11, 7 pro reihe, ggf. Hochkant-Buttons mit 64x128 Images.

wenn man es "perfekt" machen will, kann man noch nen export einbaun,
das die verwendeten Images zu einem einzigen Image zusammenfasst,
das man dann ausdrucken und auf ein altes Keyboard kleben könnte.

Verfasst: 30.08.2008 20:39
von DrShrek
hardfalcon hat geschrieben: 1)
Ich sags ja, das kommt davon, wenn man zuviel an die Sonne geht. Bleibt im Keller vor der Flimmerkiste hocken, dann passiert sowas auch nicht... :mrgreen:

2)
Sowas sollte doch schnell in PB zusammenzuhacken sein.

3)
Aber bist du wirklich sicher, dass du da zwischen umkippenden Bierkrügen und brutzelnden Hamburgern nen PC aufbauen willst? Nimm doch nen Taschenrechner, und gut is... :?
zu 1) Warum sagts Du mir das erst NACHDEM ich als freiwilliger Helfer aufstellen haben lassen?

zu 2) Ja sicher...Deswegen ja auch der Such-Aufruf hier:
Also! Wer will sich dieser Aufgabe stellen?

zu 3) Kein Problem...die Tastatur ist eine dieser:
Tastatur aufrollbar, wassergeschützte Air Touch Tastatur

PC/Laptop selber wird spritzwassergeschützt eingepakt bzw aufgestellt.

Verfasst: 30.08.2008 20:54
von Andreas_S
Dr. Shrek hat geschrieben:zu 2) Ja sicher...Deswegen ja auch der Such-Aufruf hier:
Also! Wer will sich dieser Aufgabe stellen?
Ich!
Hier mal der Anfang... den Rest kannst du ja weiter coden...


Ne, jetzt im ernst, warum machst du das nicht?

Verfasst: 30.08.2008 21:02
von DrShrek
Andreas_S hat geschrieben:Ne, jetzt im ernst, warum machst du das nicht?
Ich sage doch nicht, daß ich es nicht mache...oder steht irgendwo solch eine Aussage von mir?

Rettung

Verfasst: 30.08.2008 21:51
von kswb73
Habs. Das ganze basiert auf windowedScreen damit man den KeyboardReleased Befehl verwenden kann. Das Prinzip ist einfach. Man klick auf neue Ware. Ins obere Kästchen gibt man den Namen ein und im unter den Preis (in Cent). Dann klick man auf add. Der Name des Fenster änder sich dann in #Name+" (press Key)". Dann drückt man einfach die Taste zu der die Ware zugeordnet werden soll (Tastenkombinationen funktionieren nicht!). Hat man dies getan muss man nur noch die Tasten für die Waren drücken und schon erscheint der Gesamtpreis. Ist die abrechnung vertig klick man auf Löschen und schon kann die nächste Bestellung kommen.

PS: die Konstante #Name muss noch deinen Wunschnamen für das Programm erhalten.

/Edit Fehlendes ClearScreen() eingefügt.

Code: Alles auswählen

#Name="???"

Ware.s
Price.f
Total.f

InitKeyboard()
InitSprite()

LoadFont(1,"Arial",10)


OpenWindow(1,0,0,300,460,#Name,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

OpenWindowedScreen(WindowID(1),10,10,280,400,0,0,0)


CreateGadgetList(WindowID(1))
  
  ButtonGadget(3,10,420,140,30,"Neue Ware")
 
Structure ware
Ware.s
Price.f
EndStructure

Dim Key.ware(256)

NewList Ware.ware()

Repeat
  Repeat
    If IsWindow(1)=0
    End
    EndIf
  WEvent=WindowEvent()
  Select WEvent
    Case #PB_Event_CloseWindow
    CloseWindow(EventWindow())
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 3
        OpenWindow(2,0,0,200,100,"Neue Ware",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
        CreateGadgetList(WindowID(2))
          StringGadget(4,10,10,180,20,"Ware")
          StringGadget(5,10,40,180,20,"0",#PB_String_Numeric)
          ButtonGadget(6,10,70,180,20,"add")
        Case 6
        Ware=GetGadgetText(4)
        Price=Val(GetGadgetText(5))/100
        CloseWindow(2)
        SetWindowTitle(1,#Name+" (press Key)")
      EndSelect 
  EndSelect
  Until WEvent=0
 ClearScreen(0)
 ExamineKeyboard()
 
 Y=0
 StartDrawing(ScreenOutput())
 DrawingFont(FontID(1))
 ResetList(Ware())
 Total=0
  While NextElement(Ware())
  DrawText(10,Y,Ware()\Ware+"("+StrF(Ware()\Price,2)+")")
  Total+Ware()\Price
  Y+20
  Wend
 DrawText(10,380,"Total:"+StrF(Total,2)+"¬")
 StopDrawing()
 
  For a=1 To 255
    If KeyboardReleased(a)
      If GetWindowTitle(1)=#Name+" (press Key)"
      Key(a)\Ware=Ware
      Key(a)\Price=Price
      SetWindowTitle(1,#Name)
      ElseIf Not Key(a)\ware=""
        AddElement(Ware())
        Ware()\Ware=Key(a)\Ware
        Ware()\Price=Key(a)\Price
      EndIf
    EndIf
  Next a
FlipBuffers()
Until IsWindow(1)=0

Re: Rettung

Verfasst: 30.08.2008 22:17
von DrShrek
kswb73 hat geschrieben:Habs.
Nette Umsetzung.
Einige Ideen sind sehr nett...Mal sehen wie ich es selbst machen werde ;-)

Danke.

Verfasst: 31.08.2008 14:40
von KatSeiko
So ein Kassenprogramm hab ich mal mit Barcodes und einem alten Scanner (gibts bestimmt irgendwo günstig als gebraucht) gemacht. Die Barcodes gibt es sicher irgendwo als Font-Datei. Mit Code39 muss man nicht mal rumrechnen.

Ich hab damals eben diesen Code39-Font genommen und eine Liste mit diversen Getränken gemacht und durchnummeriert. "*1*" (der Scanner liest immer das was zwischen zwei Sternen steht) war für "Bier 0,33L" oder "*2*" für "Bier 0,5L". Das Ganze kann man so einfach weiter führen.

Das Kassenprogramm war als Console geschrieben und sah am Ende so aus:

Code: Alles auswählen

;====================
; Überlassen nach Creative Commons
; http://creativecommons.org/licenses/by/3.0/de/
; Ursprünglicher Author: Katana Seiko
; letzte Bearbeitung durch: 
;====================

Structure sArtikel
 Name.s
 Preis.d
EndStructure

NewList Artikel.sArtikel()

Datei = OpenFile(#PB_Any, "Kassenpreise.txt")
While Not Eof(Datei) ;Wird wiederholt bis die Datei zuende eingelesen ist
 CurName.s = ReadString(Datei)
 If Eof(Datei) ;Zur Absicherung gegen Errors
  Continue
 Else
  CurPreis.s = ReadString(Datei)
  AddElement(Artikel())
  Artikel()\Name = CurName
  Artikel()\Preis = ValD(CurPreis)
 EndIf
Wend

OpenConsole()
PrintN("Kassenprogramm")
PrintN("Programmiert von Katana Seiko, letzte Fassung von (name)")
If CountList(Artikel()) > 0 ;Sollte die Datei leer gewesen sein, wird das Programm nicht gestartet...
 Repeat
 PrintN("Aktueller Preis: "+StrF(Aktuell.d, 2))
 Eingabe.s = Input()
 ; <-- hier Piepen wenn nötig
 If Eingabe = "" ;Absicherung gegen leere Eingaben
  Continue
 EndIf
 If Eingabe = "0" ;0 = Neuer Kunde
  Aktuell = 0
  ClearConsole()
  Continue
 EndIf
 Element = Val(Eingabe)
 If Element > CountList(Artikel()) ;Verhindern, dass man eine höhere Zahl eingibt als Artikel da sind
  Print("Artikel nicht gefunden. ")
 Else
  SelectElement(Artikel(), Element-1)
  Print(Artikel()\Name+" hinzugefuegt. ")
  Aktuell = Aktuell + Artikel()\Preis
 EndIf
 Until LCase(Eingabe) = "quit"
Else ;...sondern eine Fehlermeldung ausgegeben
 PrintN("Fehler: Konnte Daten nicht einlesen!")
 Print("Enter zum Fortfahren. . .")
 Input()
EndIf
CloseConsole()
Praktischerweise piept der Scanner bei einer Eingabe, ein weiteres Piepen war hier nicht notwendig. Sollte der Scanner nicht piepen, sollte das am Besten noch ins Programm rein (Stelle ist markiert).

Die Liste für die Kassenpreise sah in etwa so aus: (Textdatei)

Code: Alles auswählen

Bier 0.33L
1.50
Bier 0.5L
2.00
(...)
Hierbei ist zu beachten, dass immer zwei Zeilen zusammengehören. Wenn die Zeilen durcheinander kommen, gibt das leider mit der Programmierung von oben entweder Datensalat oder nen Error.

Du darfst diese Umsetzung gern verwenden...