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