Suche... Neulich an der Kasse der FFW....

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag 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.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag 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.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag 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?
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag 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?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Rettung

Beitrag 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
Zuletzt geändert von kswb73 am 01.09.2008 14:53, insgesamt 1-mal geändert.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Rettung

Beitrag von DrShrek »

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

Danke.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Beitrag 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...
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Antworten