Menu Close

Kassensystem

ProgrammIDE POS

Die Hauptbestandteile

Barcode scannen

Das Scannen von Barcodes gehört zum teil des Kassierens. Hier werden mit mit einem Barcode Scanner (Netum NT-W6) 2D Barcodes (alles übliche außer QR-Codes) gescannt (der Reader gibt sie als Tastatureingaben aus), der Barcode mit der Datenbank abgeglichen und in der Liste angezeigt. Bei Mehrfachem Scannen erhöht sich die Anzahl

Bestandsansicht

In der Bestandsansicht wird einem angezeigt was für Waren wieviel vorrätig sind, wieviel eines dieser Ware kostet sowie die Gesamtzahl der Waren und der Summierte Wert der Waren.

Schnellkassieren

Schnellkassieren mit einem „Launchpad“ (mein ausgedachter name) stellt für einige oft genutzte Produkte eine Alternative zum einzelnen einscannen dar, da sich dadurch die geschwindigkeit des Kassierens drastisch erhöhen lässt.

Die Umsetzung

Der Gesamte Code basiert auf einer MySQL Datenbank, diese kann sowohl Lokal als auch in der „Supermarktcloud“ betrieben werde, eine solche Datenbank erlaubt es, dass das Kassensystem optimal erweitert werden könnte, sogar ohne den Hauptcode zu kennen. Außerdem ist das Komplette System in zwei Programme eingeteilt, den Scanner und die GUI (inklusive Launchpad). Natürlich müssen auch diese miteinander Kommunizieren.

Artikeldatenbank

In der Artikeldatenbank stehen alle Artikel. Jeder Artikel hat eine ID, einen Preis, einen Namen, einen Bestand im Lager sowie einen Barcode.

Der Barcode wird nach erfassung durch den Scanner in der Datenbank herausgesucht. Preis und Name sowie Anzahl werden auf dem Bildschirm angezeigt und in die jeweilige Kassiervorgangs-Tabelle eingetragen.

Kassiervorgänge und KassiervorgangX

Kassiervorgänge
KassiervorgangX

Um Kassiervorgänge zu Protokollieren, Kontrollieren und Ausführen zu können, gibt es eine große Tabelle, in welcher alle Kassiervorgänge inklusive Name der Kasse/des erstellenden Computers und einer ID, welche auf dem Kassenbon des Kunden steht.

Für jede diese IDs existiert eine extra Tabelle pro Einkauf, z.B. Kassiervorgang5.

 

Bondrucker

Video eingebunden von Adafruit

Mithilfe eines Bondruckers wird am ende des Kassiervorgangs ein Zettel ausgedruckt, auf welchem alle Produkte, die betreunde Kasse, die Bonnummer sowie die Uhrzeit stehen.

Dieses Programm wurde in Processing geschrieben. Processing ist eine Art Bibeliothek die es für mehrere Programmiersprachen gibt und zwischen ihnen fast identische Befehle besitzt, dadurch kann ein Processing Code (auch dieser) auch in JavaScript, Java, Android oder Python kompiliert oder verbreitet werden, dies sorgt für große Flexibelität. In diesem fall wurde die Version für Java genutzt sowie eine Java(swing) Library die sich allerdings wenn nötig gut durch eine ähnliche einer anderen Sprache anpassen lässt. Mehr informationen hierzu gibt es auf processing.org. Es werden zusätzlich „Processing Sound“ sowie „BezierSQL“ genutzt. Beides im Processing „Store“ zum Downloaden bereit.

Download

Da noch nicht die nötige Dokumentation, damit das Projekt auf jedem Computer lauffähig ist besteht. Wurde der Download-Link entfernt.

Code

String barcodeval = "";
String gezahlt;
String rueckgeld;
String kosten;
int anzahlauswertung;
String barcodeauswertung;
boolean scanneron = false;
boolean startscreen = true;
boolean produktscan = false;
boolean bestandsansicht = false;
boolean produktscanauswertung = false;
boolean was;
boolean kartenzahlung = false;
int site = 1;
int bonansichtnummer;
boolean kartenzahlvorgang = false;
boolean bonansicht = false;
String instanzname = "";
String kartenzahlungskartennr = "";
int kartenzahlungsrueckmeldung = -1;
int instanzid;
int nummerzwischen;
int nummerzwischenvh;
int nummer;
int barcode = 1;
int anzahl;
int durchgang;
boolean msqlconnerror = false;
String barcodescanner = "";
int counter=1;
boolean counteran=false;
int arduinocounter=100;
boolean registrierung=false;
boolean arduinoconn = false;
int vorherpad1 = 0;
int vorherpad2 = 0;
int vorherpad3 = 0;
int vorherpad4 = 0;
int vorherpad5 = 0;
int vorherpad6 = 0;
int vorherpad7 = 0;
int vorherpad8 = 0;
int vorherpad9 = 0;
int[] aktuelleids;
import static javax.swing.JOptionPane.*;
import javax.swing.*;
import de.bezier.data.sql.*;
import processing.sound.*;
import java.awt.Toolkit;
import java.awt.Dimension;
import processing.serial.*;
import gohai.simplereceiptprinter.*;
import java.lang.Runtime;
Serial arduino;
SoundFile file;
MySQL msql;
MySQL msql2;

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int width = (int) screenSize.getWidth();
int height = (int) screenSize.getHeight();
float widthprefer = width/1024;
float heightprefer = height/768;
SimpleReceiptPrinter printer;
void setup() {

  PImage icon = loadImage("Icon.png");
  surface.setIcon(icon);

  printer = new SimpleReceiptPrinter(this, SimpleReceiptPrinter.list()[0], 1.11, 9600);

  file = new SoundFile(this, "readbarcode.aiff");

  fullScreen();

  background(#E0AE09);

  String user     = "root";
  String pass     = "PASSWORT";   
  String database = "Kaufmannsladen";
  msql = new MySQL( this, "localhost:8889", database, user, pass );
  msql2 = new MySQL( this, "localhost:8889", database, user, pass );
  if (!msql.connect()) {
    msql = new MySQL( this, "raspberrypi.local", database, user, pass );
    msql2 = new MySQL( this, "raspberrypi.local", database, user, pass );
    if (!msql.connect()) {
      showMessageDialog(null, "Es konnte keine Datenbankverbindung hergestellt werden, bitte versuche es später erneut oder frage deinen Systemadministrator", "MySQL", ERROR_MESSAGE);
      exit();
      msqlconnerror = true;
    }
  }
  if (msqlconnerror==false) {
    String[] optionen = {"Nein", "Ja"};
    int answer = showOptionDialog(null, "Ist ein Arduino mit dem System verbunden?", "Arduino", DEFAULT_OPTION, INFORMATION_MESSAGE, null, optionen, optionen[0]);
    if (answer==1) {
      answer = showOptionDialog(null, "An welchem Port ist der Arduino verbunden?", "Arduino", DEFAULT_OPTION, PLAIN_MESSAGE, null, Serial.list(), Serial.list()[0]);
      arduino = new Serial(this, Serial.list(), 9600);
      arduinoconn = true;
    }
    while ((instanzname.trim().isEmpty())) {
      instanzname = showInputDialog(null, "Bitte Kassennummer eingeben!", "Kassennummer", INFORMATION_MESSAGE);
      if (instanzname==null) {
        exit();
        break;
      }
    }
    printer.sleep();
  }
  if (instanzname!=null) {
    msql.setDebug(true);


    msql.execute("INSERT INTO `Kassenvorgänge` (`ID`, `Timestamp`, `Instanz`) VALUES (NULL, CURRENT_TIMESTAMP, '" + instanzname + "');");
    msql.query("SELECT ID FROM Kassenvorgänge WHERE Instanz='" + instanzname + "' ORDER BY Timestamp DESC LIMIT 1");
    msql.next();
    instanzid = msql.getInt(1);
    msql.execute("CREATE TABLE `Kassiervorgang" + instanzid + "` (`Name` mediumtext,`Preis` float NOT NULL,`Barcode` bigint(20) DEFAULT NULL,  `ID` int(11) DEFAULT NULL,  `Timestamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `Anzahl` int(11) NOT NULL DEFAULT '1',  `Summe` float DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1");
    msql.execute("ALTER TABLE `Kassiervorgang" + instanzid + "` ADD UNIQUE KEY `ID` (`ID`),ADD UNIQUE KEY `Barcode` (`Barcode`)");

    println("Registierung erfolgreich. ID:" + instanzid);

    println("Screen=" + width + "x" + height);
  }
}

void draw() {
  if (arduinoconn==true & arduinocounter==100) {
    arduino.write("Testtext"); 
    arduinocounter=0;
  }
  arduinocounter++;
  frameRate(30);

  if (registrierung==true) {
    registrierung("");
  }
  if (startscreen==true) {
    textSize(20*widthprefer);
    fill(#1B31F0);
    stroke(#FCFCED);
    strokeWeight(4);
    textAlign(CENTER);
    rectMode(RADIUS);
    rect(145*(widthprefer), 107.5*(heightprefer), 125*(widthprefer), 87.5*(heightprefer));
    rect(145*(widthprefer), 350*(heightprefer), 125*(widthprefer), 87.5*(heightprefer));
    fill(#FCFCED);
    text("Kassieren", 145*widthprefer, 107.5*heightprefer);
    text("Kassiervorgang ansehen", 145*widthprefer, 350*heightprefer);
    fill(#1B31F0);
    rect((width-143)*widthprefer, 107.5*heightprefer, 125*widthprefer, 87.5*heightprefer);
    rect((width-143)*widthprefer, 350*heightprefer, 125*widthprefer, 87.5*heightprefer);
    rect((width-143)*widthprefer, 592.5*heightprefer, 125*widthprefer, 87.5*heightprefer);
    rectMode(CORNER);

    fill(#FCFCED);

    text("Bestand", (width-143)*widthprefer, 107.5*heightprefer);
    text("Kreditkarte", (width-143)*widthprefer, 350*heightprefer);
    text("Einlagern", (width-143)*widthprefer, 592.5*heightprefer);
    textAlign(LEFT);
    if (overRect(145*(widthprefer), 107.5*(heightprefer), 125*(widthprefer), 87.5*(heightprefer))) {
      println("Debug: Produkt scannen angeklickt");
      produktscan=true;
      startscreen=false;

      kassieren(instanzid);
    }
    if (overRect(145*(widthprefer), 350*(heightprefer), 125*(widthprefer), 87.5*(heightprefer))) {
      bonansehen();
    }
    if (overRect((width-143)*widthprefer, 350*heightprefer, 125*widthprefer, 87.5*heightprefer)) {
      kreditkarten();
    }

    if (overRect((width-143)*widthprefer, 107.5*heightprefer, 125*widthprefer, 87.5*heightprefer)) {
      println("Debug: Bestand ansehen geklickt");
      bestandsansicht=true;
      startscreen=false;
      clear();
      bestandsansicht();
    }
    if (overRect((width-143)*widthprefer, 592.5*heightprefer, 125*widthprefer, 87.5*heightprefer)) {
      einlagern();
    }
  }


  if (bestandsansicht==true) {
    bestandsansicht();
  }

  if (produktscan==true) {
    kassieren(instanzid);
  }
  if (bonansicht==true) {
    kassieren(bonansichtnummer);
  }
}
void keyPressed() {
  //Scanner
  if (key=='+' && produktscan==true) {
    scanneron=true; 
    println("Scannerein");
    file.play();
  }
  if (key >= '0' && key <= '9' && scanneron==true) {
    println("Accepted");
    barcodeval=barcodeval+key;
    println(barcodeval);
  }
  if (key == 10 && scanneron==true && kartenzahlvorgang==false) {
    trim(barcodeval);


    println("barcode" + barcodeval);
    msql.query("SELECT IFNULL((SELECT Barcode FROM Artikel WHERE Barcode='" + barcodeval + "'),0)");
    msql.next();
    int barcodeback = msql.getInt(1);
    if (barcodeback!=0) {
      msql.execute("UPDATE Kassiervorgang" + instanzid + " SET `Anzahl`=(Anzahl+1) WHERE Barcode='" + barcodeval + "'" );
      msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='" + barcodeval + "'" );

      scanneron=false;
    } else {

      String[] optionen = {"Nein", "Ja"};
      int answer = showOptionDialog(null, "Dieser Barcode ist nicht Registriert!, möchtest du ihn Registrieren? (oder handelt es sich um eine Kreditkarte, wenn die zutrifft bitte \"Nein\" wählen!)", "Barcode Reader", DEFAULT_OPTION, ERROR_MESSAGE, null, optionen, optionen[0]);
      if (answer==1) {
        registrierung(barcodeval);
      }
    }
    barcodeval="";
  }
  if (key == 10 && scanneron==true && kartenzahlvorgang==true) {
    trim(barcodeval);

    println("barcode" + barcodeval);
    msql.query("SELECT IFNULL((SELECT Barcode FROM Kreditkarten WHERE Barcode='" + barcodeval + "'),0)");
    msql.next();
    int barcodeback = msql.getInt(1);
    if (barcodeback!=0) {
      msql.execute("UPDATE `Kreditkarten` SET `Guthaben` = `Guthaben`-" + kosten + " WHERE `Barcode` = " + barcodeval);
      msql.query("SELECT IF(Guthaben<0, 0, 1) FROM Kreditkarten WHERE Barcode=" + barcodeval);
      msql.next();
      kartenzahlungsrueckmeldung=msql.getInt(1);
      if (kartenzahlungsrueckmeldung==0) {
        msql.execute("UPDATE `Kreditkarten` SET `Guthaben` = `Guthaben`+" + kosten + " WHERE `Barcode` = " + barcodeval);
      }
      kartenzahlvorgang=false;
      scanneron=false;
    } else {
      kartenzahlungsrueckmeldung=0;
      msql.execute("UPDATE `Kreditkarten` SET `Guthaben` = `Guthaben`+" + kosten + " WHERE `Barcode` = " + barcodeval);
    }
    kartenzahlungskartennr = barcodeval;
    barcodeval="";
  }
  //Scanner



  if (key == CODED) {
    if (keyCode == DOWN && bestandsansicht==true && nummerzwischen1) {
      site-=1;
    }
  }

  if (key == 'h') {

    produktscan=false;
    produktscanauswertung=false;
    kosten="";
    gezahlt="";
    rueckgeld="0.00";
    kartenzahlungsrueckmeldung=-1;
    kartenzahlvorgang=false;
    kartenzahlung=false;
    counter=0;






    bonansicht=false;
    bestandsansicht=false;
    startscreen=true;
    produktscan=false;
    produktscanauswertung=false;
    clear();
    background(#E0AE09);
    delay(500);
  }
  if (key >= '1' && key <= '9' && scanneron==false && bestandsansicht==false) {
    msql.query("SELECT ID FROM `Kassiervorgang" + instanzid + "` ORDER BY ID DESC LIMIT 1");
    msql.next();
    msql.execute( "UPDATE Kassiervorgang" + instanzid + " SET Anzahl='" + key + "' WHERE ID=" + msql.getString(1));
  }
  if (key >= '1' && key <= '9' && bestandsansicht==true) {
    produkteinstellungen(aktuelleids[58-key]);
  }
  if (key == '=' && produktscan==true && bonansicht==false) {
    if (produktscanauswertung==false) {
      clear();
      produktscanauswertung=true; 
      delay(250);
    }
  }

  if (key == 's' && produktscan==true) {
    msql.query("SELECT Name FROM `Kassiervorgang" + instanzid + "` ORDER BY ID DESC LIMIT 1");
    msql.next();
    if (msql.getString(1)!=null) {
      String name = msql.getString(1);
      msql.query("SELECT Anzahl FROM Kassiervorgang" + instanzid + " ORDER BY ID DESC LIMIT 1");
      msql.next();
      showMessageDialog(null, "Artikel " + name + " (" + msql.getInt(1) + ") wurde vom Warenkorb entfernt", "STORNO", INFORMATION_MESSAGE);
      msql.execute("DELETE FROM Kassiervorgang" + instanzid + " ORDER BY ID DESC LIMIT 1");
    } else {
      showMessageDialog(null, "Es ist momentan kein Produkt im Warenkorb!", "STORNO", ERROR_MESSAGE);
    }
  }
  /*if (key=='+' && produktscan==false) {
   registrierung("0");
   }*/



  if (key == 'y' && was==false) {
    boolean updated = false;
    if (scanneron==false) {
      scanneron = true;
      updated=true;
    }
    if (scanneron==true && updated==false) {
      println("off");
      scanneron = false;
      updated=true;
    }
    was=true;
  } else {
    was=false;
  }



  if (produktscan==true&&bonansicht==false) {

    if (key=='v') {

      Pad1();
    }

    if (key=='b') {

      Pad2();
    }

    if (key=='n') {

      Pad3();
    }

    if (key=='m') {

      Pad4();
    }


    if (key==9) {

      Pad5();
    }

    if (key=='*') {

      Pad6();
    }


    if (key=='#') {

      Pad7();
    }
    if (key=='z') {
      Pad8();
    }
    if (key=='x') {
      Pad9();
    }
    if (key=='c') {
      Pad10();
    }
    if (key=='d') {
      Pad11();
    }
    if (key=='j') {
      Pad12();
    }
    if (key=='k') {
      Pad13();
    }
    if (key=='f') {
      Pad14();
    }
  }
  if (key=='q') {
    produktscan=true;
    startscreen=false;
  }

  if (key=='w') {

    bestandsansicht=true;
    startscreen=false;
    produktscan=false;
    produktscanauswertung=false;
  }
  if (key=='e') {
    bonansehen();
  }
  if (key=='r' && startscreen==true) {
    kreditkarten();
  }
}



boolean overRect(float x, float y, float widthrect, float heightrect) {
  if (mouseX >= x-widthrect && mouseX <= x+widthrect && 
    mouseY >= y-heightrect && mouseY <= y+heightrect && mousePressed && mouseButton!=0) {
    return true;
  } else {
    return false;
  }
}
void bonansehen() {
  String bonchecker = showInputDialog(null, "Bitte Bonnumer eingeben!", "Bonansicht", INFORMATION_MESSAGE);
  if (bonchecker!=null && (!bonchecker.trim().isEmpty())) {
    bonansichtnummer = Integer.parseInt(bonchecker);
    if (bonansichtnummer=1) {
      startscreen=false;
      bonansicht=true;
      kassieren(bonansichtnummer);
    } else {
      if (bonansichtnummer==instanzid) {
        showMessageDialog(null, "Dieser Kassiervorgang " + bonansichtnummer + " ist noch nicht abgeschlossen. Um ihn abzuschließen bitte Kassiervorgang starten", "Bonansicht", ERROR_MESSAGE);
      } else {
        showMessageDialog(null, "Die Bonnummer " + bonansichtnummer + " ist ungültig", "Bonansicht", ERROR_MESSAGE);
      }
    }
  }
}

void kreditkarten() {
  String[] optionen = {"Kreditkarte aufladen", "Kreditkartenstand abfragen"};
  int answer = -1;
  while (answer<0||answer>1) {
    answer = showOptionDialog(null, "Soll die Kreditkarte aufgeladen oder nur ihr Stand abgefragt werden?", "Kreditkarte aufladen", DEFAULT_OPTION, INFORMATION_MESSAGE, null, optionen, optionen[0]);
  }
  if (answer==0) {
    String kreditkartennr = "";
    while ((kreditkartennr.trim().isEmpty())) {
      kreditkartennr = showInputDialog(null, "Bitte Aufzuladene Kreditkarte (auch unregistrierte) mit Scanner scannen", "Kreditkarte aufladen", INFORMATION_MESSAGE);
      while (kreditkartennr==null) {
        kreditkartennr = showInputDialog(null, "Bitte Aufzuladene Kreditkarte (auch unregistrierte) mit Scanner scannen", "Kreditkarte aufladen", INFORMATION_MESSAGE);
      }
    }
    kreditkartennr = kreditkartennr.replace("+", "");
    String kreditkartenbetrag = "";
    while ((kreditkartenbetrag.trim().isEmpty())) {
      kreditkartenbetrag = showInputDialog(null, "Bitte aufzuladenen Betrag eingeben", "Kreditkarte aufladen", INFORMATION_MESSAGE);
      while (kreditkartenbetrag==null) {
        kreditkartenbetrag = showInputDialog(null, "Bitte aufzuladenen Betrag eingeben", "Kreditkarte aufladen", INFORMATION_MESSAGE);
      }
    }
    msql.query("SELECT Inhaber FROM Kreditkarten WHERE Barcode=" + kreditkartennr);
    msql.next();
    optionen[0] = "Nein";
    optionen[1] = "Ja";
    answer = showOptionDialog(null, "Wenn mit ja bestätigt, werden " + kreditkartenbetrag + "€ auf die Kreditkarte von " + msql.getString(1) + " (" + kreditkartennr + ") aufgeladen", "Kreditkarte aufladen", DEFAULT_OPTION, INFORMATION_MESSAGE, null, optionen, optionen[1]);
    if (answer==1) {
      msql.execute("INSERT INTO `Kreditkarten`(`Barcode`, `Guthaben`) VALUES (" + kreditkartennr + "," + kreditkartenbetrag + ") ON DUPLICATE KEY UPDATE Guthaben=Guthaben+" + kreditkartenbetrag); 
      msql.query("SELECT ROUND(Guthaben,2) FROM Kreditkarten WHERE Barcode=" + kreditkartennr);
      msql.next();
      showMessageDialog(null, "Kreditkarte aufgeladen! Neuer Kontostand: " + msql.getString(1) + "€", "Kreditkarte aufladen", INFORMATION_MESSAGE);
    }
  } else {
    String kreditkartennr = "";
    while ((kreditkartennr.trim().isEmpty())) {
      kreditkartennr = showInputDialog(null, "Bitte abzufragende Kreditkarte mit Scanner scannen", "Kreditkarte aufladen", INFORMATION_MESSAGE);
      while (kreditkartennr==null) {
        kreditkartennr = showInputDialog(null, "Bitte abzufragende Kreditkarte mit Scanner scannen", "Kreditkarte aufladen", INFORMATION_MESSAGE);
      }
    }
    kreditkartennr = kreditkartennr.replace("+", "");
    msql.query("SELECT ROUND(Guthaben,2),Inhaber FROM Kreditkarten WHERE Barcode=" + kreditkartennr);
    msql.next();
    showMessageDialog(null, "Kontostand von " + msql.getString(2) + " (" + kreditkartennr + "): " + msql.getString(1) + "€", "Kreditkarte aufladen", INFORMATION_MESSAGE);
  }
}

void einlagern() {
  String produktbarcode = "";
  int answer = 0;
  while (answer==0) {
    produktbarcode = "";
    while ((produktbarcode.trim().isEmpty())) {
      produktbarcode = showInputDialog(null, "Bitte Produkt scannen", "Einlagerung", INFORMATION_MESSAGE);
      while (produktbarcode==null) {
        produktbarcode = showInputDialog(null, "Bitte Produkt scannen", "Einlagerung", INFORMATION_MESSAGE);
      }
    }
    msql.execute("UPDATE `Artikel` SET Stueckzahl=Stueckzahl+1 WHERE Barcode=" + produktbarcode);
    msql.query("SELECT Name,Stueckzahl FROM Artikel WHERE Barcode=" + produktbarcode);
    msql.next();
    String[] optionen = {"Weiter", "Abbruch"};
    answer = showOptionDialog(null, "Die Stueckzahl der " + msql.getString(1) + " beträgt " + msql.getString(2), "Kreditkarte aufladen", DEFAULT_OPTION, INFORMATION_MESSAGE, null, optionen, optionen[0]);
  }
}
void bestandsansicht() {
  int[] ids;
  clear();
  background(#05FCFA);


  msql.query( "SELECT ROUND(COUNT(ID),2),ROUND(SUM(Preis*Stueckzahl),2) FROM Artikel");
  msql.next();
  textSize(20*widthprefer);
  fill(#1B31F0);
  stroke(#FCFCED);
  strokeWeight(4);
  rect(10*widthprefer, 5*heightprefer, width-20*widthprefer, 50*heightprefer);
  fill(#FCFCED);
  textAlign(CENTER);
  text("Es sind momentan " + msql.getInt(1) + " Artikel eingetragen mit einem Warenwert von " + msql.getFloat(2) + " EURO", width/2, 45*heightprefer);

  int sumprodu = msql.getInt(1);
  ids = new int[msql.getInt(1)];
  aktuelleids = new int[10];

  nummerzwischen = msql.getInt(1);
  nummerzwischenvh = msql.getInt(1);

  msql.query( "SELECT ID FROM Artikel ORDER BY Stueckzahl DESC");

  nummer=0;
  while (msql.next()) {

    ids[nummer] = msql.getInt(1);


    nummer+=1;
  }
  nummer=1;

  fill(#1B31F0);
  stroke(#FCFCED);
  strokeWeight(4);
  rect(10*widthprefer, 80*heightprefer, width-20*widthprefer, height-90*heightprefer);
  fill(#FCFCED);
  textSize(23*widthprefer);
  text("Name", 200*widthprefer, 125);
  text("Stückzahl", 650*widthprefer, 125);
  text("Preis", 950*widthprefer, 125);

  int nummer = 1;
  int y = 200;
  msql.execute( "UPDATE `Artikel` SET `Stueckzahl`='0' WHERE Stueckzahl<0" );

  if (nummerzwischen>9) { //Benutze Konstante if (nummerzwischen>site*height/100) {
    nummerzwischen=site*9; // nummerzwischen=site*height/100;
    nummer=site*9-9; //nummer=site*height/100-height/100;
  }
  if (nummerzwischen>=nummerzwischenvh) {
    nummerzwischen=nummerzwischenvh;
    nummer=nummerzwischen-9; // nummer=nummerzwischen-height/100;
  }
  int counter = 0;
  textSize(19*widthprefer);
  textAlign(LEFT);
  text("Produkte "+ nummer + "-" + nummerzwischen + "/" + sumprodu, 10*widthprefer, 45*heightprefer);
  while (nummer
					
					
void kassieren(int instanzkassieren) {
  background(#05FCFA);

  msql.query( "SELECT SUM(Anzahl) FROM Kassiervorgang" + instanzkassieren + "");
  msql.next();



  if (produktscanauswertung==false) {


    textAlign(CENTER);
    textSize(20*widthprefer);
    fill(#1B31F0);
    stroke(#FCFCED);
    strokeWeight(4);
    rect(10*widthprefer, 5*heightprefer, width-20*widthprefer, 50*heightprefer);
    fill(#FCFCED);
    if (bonansicht==false) {
      text("Es sind momentan " + msql.getInt(1) + " Artikel im Warenkorb", width/2, 45*heightprefer);
    } else {
      text("Es waren " + msql.getInt(1) + " Artikel im Warenkorb", width/2, 45*heightprefer);
    }

    fill(#1B31F0);
    stroke(#FCFCED);
    strokeWeight(4);
    rect(10*widthprefer, 80*heightprefer, width-20*widthprefer, height-90*heightprefer);
    fill(#FCFCED);
    textSize(20*widthprefer);
    textAlign(CENTER);
    text("Name", 50*widthprefer, 125);
    text("Anzahl", 650*widthprefer, 125);
    text("Preis", 925*widthprefer, 125);
    textAlign(LEFT);

    int y = 200;




    msql.execute( "SET @i=0" );

    msql.execute( "UPDATE Kassiervorgang" + instanzkassieren + " SET ID = (@i := @i + 1) ORDER BY Timestamp" );
    nummer=1;
    msql.execute( "UPDATE `Kassiervorgang" + instanzkassieren + "` SET `Summe`=Preis*Anzahl");
    msql.query( "SELECT Name,Anzahl,ROUND(Preis,2),ROUND(Preis*Anzahl,2) FROM Kassiervorgang" + instanzkassieren + " WHERE Anzahl>='1'");
    while (msql.next()) {


      textSize(23);
      textAlign(LEFT);

      text(msql.getString(1), 50*widthprefer, y);
      text(msql.getString(2), 650*widthprefer, y);
      text(msql.getString(3), 900*widthprefer, y);
      text(msql.getString(4), 1025*widthprefer, y);

      y=y+75;
      nummer=nummer+1;
    }
    line(500*widthprefer, 100, 500*widthprefer, y-75);
    line(850*widthprefer, 100, 850*widthprefer, y-75);
    msql.query( "SELECT IFNULL(ROUND(SUM(Summe),2),0) FROM `Kassiervorgang" + instanzkassieren + "`" );
    msql.next();
    if (msql.getString(1)!="0") {
      textSize(23);
      text(msql.getString(1), 925*widthprefer, y+75);
    }
  }

  if (produktscanauswertung==true) {
    msql.query( "SELECT ROUND(SUM(Summe),2) FROM `Kassiervorgang" + instanzid + "`" );
    msql.next();
    kosten = msql.getString(1);
    background(#05FCFA);
    textAlign(CENTER);
    textSize(20*widthprefer);
    fill(#1B31F0);
    stroke(#FCFCED);
    strokeWeight(4);
    rect(10*widthprefer, 5*heightprefer, width-20*widthprefer, 50*heightprefer);
    rect(10*widthprefer, 80*heightprefer, width-20*widthprefer, height-90*heightprefer);
    fill(#FFFFFF);

    text("Zu Zahlen:" + msql.getFloat(1), width/2-230*widthprefer, 45*heightprefer);
    nummer=1;
    if (counter==1) {
      msql.query("SELECT COUNT(ID) FROM Kassiervorgang" + instanzid + "");
      msql.next();
      nummerzwischen=msql.getInt(1);
      println("Nummerzwischen" + nummerzwischen);
      while (nummer<=nummerzwischen) {
        msql.query( "SELECT Anzahl,Barcode FROM Kassiervorgang" + instanzid + " WHERE ID=" + nummer );
        msql.next();           
        barcodeauswertung = msql.getString(2);
        anzahlauswertung = msql.getInt(1);
        println("Barcode" + barcodeauswertung + "Stueck" + anzahlauswertung);
        msql2.connect();
        msql2.execute( "UPDATE `Artikel` SET Stueckzahl=Stueckzahl-'" + anzahlauswertung + "' WHERE Barcode='" + barcodeauswertung + "'" );
        msql2.close();
        nummer=nummer+1;
      }
    }





    if (counter==1) {
      counter+=1;
      String[] optionen = {"Barzahlung", "Kartenzahlung (nach wahl bitte direkt scannen)"};
      int answer;
      answer=-1;
      while (answer<0 || answer>1) {
        answer = showOptionDialog(null, "Welche Zahlungsmöglichkeit möchtest du nutzen?", "Zahlvorgang", DEFAULT_OPTION, INFORMATION_MESSAGE, null, optionen, optionen[1]);
      }
      if (answer==0) {
        while (gezahlt==null || (gezahlt.trim().isEmpty())) {
          gezahlt = showInputDialog(null, "Bitte das gegebene Geld eingeben", "Bezahlung von " + kosten + "€", PLAIN_MESSAGE);
        }
      }
      if (answer==1) {
        kartenzahlvorgang=true;
        kartenzahlung=true;
      }
    }
    if (counter==2) {
      if (kartenzahlvorgang==false && kartenzahlung==true) {
        msql.query("SELECT Inhaber,ROUND(Guthaben,2) FROM Kreditkarten WHERE Barcode=" + kartenzahlungskartennr);
        msql.next();
        String kartenzahlungskarteninhaber = msql.getString(1);
        String kartenzahlungskartenguthaben = msql.getString(2);
        if (kartenzahlungsrueckmeldung==0) {
          showMessageDialog(null, "Das Guthaben der Kreditkarte von " + kartenzahlungskarteninhaber + " mit " + kartenzahlungskartenguthaben + "€ reicht nicht aus, Kreditkartenzahlung wird abgebrochen. Zahlung wird stattdessen in Bar durchgeführt!", "Kartenzahlung", ERROR_MESSAGE);
        } else {
          showMessageDialog(null, "Zahlung erfolgt von der Karte von " + kartenzahlungskarteninhaber + ". Neuer Kontostand: " + kartenzahlungskartenguthaben + "€", "Kartenzahlung", INFORMATION_MESSAGE);
        }

        kartenzahlung=false;
        if (kartenzahlungsrueckmeldung==0) {
          gezahlt="0.00";
          gezahlt = showInputDialog(null, "Bitte das gegebene Geld eingeben", "Bezahlung von " + kosten + "€", PLAIN_MESSAGE);
          counter+=1;
        } else {
          gezahlt=kosten;
        }
      }
      if (kartenzahlung==false) {
        counter+=1;
      }
    }
    if (counter>2) {
      println("Gegeben: " + gezahlt);


      msql.query( "SELECT ROUND(ROUND(" + gezahlt + ",2)-ROUND(" + kosten + ",2),2)" );
      msql.next();
      rueckgeld = msql.getString(1);
      textAlign(LEFT);
      text("Rückgeld: " + rueckgeld, width/2+130*widthprefer, 45*heightprefer);
      text("Gegeben: " + gezahlt, width/2+60-130*widthprefer, 45*heightprefer);
      text("Bonnummer: " + instanzkassieren, 20*widthprefer, 125*heightprefer);
      msql.execute("UPDATE `Kassenvorgänge` SET `Summe` = '" + kosten + "', `Gegeben` = '" + gezahlt + "', `Zurück` = '" + rueckgeld + "' WHERE `ID` = 1 ");
      msql.execute("INSERT INTO `Kassenvorgänge` (`ID`, `Timestamp`, `Instanz`) VALUES (NULL, CURRENT_TIMESTAMP, '" + instanzname + "');");

      msql.query("SELECT ID FROM Kassenvorgänge WHERE Instanz='" + instanzname + "' ORDER BY Timestamp DESC LIMIT 1");
      msql.next();
      produktscan=false;
      produktscanauswertung=false;
      kosten="0";
      gezahlt="0";
      rueckgeld="0";
      kartenzahlungsrueckmeldung=-1;
      kartenzahlvorgang=false;
      kartenzahlung=false;
      counter=0;
      instanzid = msql.getInt(1);
      msql.execute("CREATE TABLE `Kassiervorgang" + instanzid + "` (`Name` mediumtext,`Preis` float NOT NULL,`Barcode` bigint(20) DEFAULT NULL,  `ID` int(11) DEFAULT NULL,  `Timestamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `Anzahl` int(11) NOT NULL DEFAULT '1',  `Summe` float DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1");
      msql.execute("ALTER TABLE `Kassiervorgang" + instanzid + "` ADD UNIQUE KEY `ID` (`ID`),ADD UNIQUE KEY `Barcode` (`Barcode`)");
    bondrucken(instanzkassieren, gezahlt, rueckgeld);
      println("Registierung erfolgreich. ID:" + instanzid);
    }
    delay(50);
    if (counter==0) {
      counter=1;
    }
  }
}

void Pad9() { //<>// //<>// //<>// //<>// //<>// //<>// //<>// //<>// //<>//
  file.play();
  println("Pad/Barcode 9");


  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='9' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}


void Pad3() {
  println("Pad/Barcode 3");

  file.play();

  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='3' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}

void Pad6() {
  println("Pad/Barcode 6");

  file.play();
  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='6' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}

void Pad7() {
  println("Pad/Barcode 7");

  file.play();
  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='7' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}

void Pad4() {
  println("Pad/Barcode 4");

  file.play();
  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='4' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}

void Pad1() {
  println("Pad/Barcode 1");

  file.play();
  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='1' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );

  //<>// //<>//
}

void Pad2() {
  println("Pad/Barcode 2");

  file.play();
  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='2' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}

void Pad5() {
  println("Pad/Barcode 5");

  file.play();
  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='5' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}

void Pad8() {
  file.play();
  println("Pad/Barcode 9");

  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='8' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}
void Pad10() {
  file.play();
  println("Pad/Barcode 10");

  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='10' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>// //<>//
}
void Pad11() {
  file.play();
  println("Pad 11 + Barcode 84");

  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='84' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>//
}
void Pad12() {
  file.play();
  println("Pad 12 + Barcode 85");

  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='85' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>//
}
void Pad13() {
  file.play();
  println("Pad 13 + Barcode 86");

  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='86' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>//
}
void Pad14() {
  file.play();
  println("Pad 14 + Barcode 87");

  msql.execute( "INSERT INTO Kassiervorgang" + instanzid + " (Name,Preis,Barcode) SELECT Name,Preis,Barcode FROM Artikel WHERE barcode='87' ON DUPLICATE KEY UPDATE `Anzahl`=(Anzahl+1)" );
  //<>//
}

void registrierung(String barcoderegister) {
  String registername = "";
  while ((registername.trim().isEmpty())) {
    registername=showInputDialog(null, "Bitte Produktnamen eingeben!", "Registrierung", INFORMATION_MESSAGE);
    while (registername==null) {
      registername=showInputDialog(null, "Bitte Produktnamen eingeben!", "Registrierung", INFORMATION_MESSAGE);
    }
  }
  String registerpreis = "";
  while ((registerpreis.trim().isEmpty())) {
    registerpreis=showInputDialog(null, "Bitte Produktpreis eingeben!", "Registrierung", INFORMATION_MESSAGE);
    while (registerpreis==null) {
      registerpreis=showInputDialog(null, "Bitte Produktpreis eingeben!", "Registrierung", INFORMATION_MESSAGE);
    }
  }
  String registerzahl = "";
  while ((registerzahl.trim().isEmpty())) {
    registerzahl=showInputDialog(null, "Bitte Stückzahl des Produkts im Lager angeben!", "Registrierung", INFORMATION_MESSAGE);
    while (registerzahl==null) {
      registerzahl=showInputDialog(null, "Bitte Stückzahl des Produkts im Lager angeben!", "Registrierung", INFORMATION_MESSAGE);
    }
  }
  if (barcoderegister=="0" || barcoderegister=="") {
    while ((barcoderegister.trim().isEmpty())) {
      barcoderegister = showInputDialog(null, "Bitte den Barcode angeben!", "Registrierung", INFORMATION_MESSAGE);
      while (barcoderegister==null) {
        barcoderegister = showInputDialog(null, "Bitte den Barcode angeben!", "Registrierung", INFORMATION_MESSAGE);
      }
    }
  }
  String[] optionen = {"Nein", "Ja"};
  int answer = showOptionDialog(null, "Möchtest du fortfahren und " + registername + ", mit dem Barcode " + barcoderegister + ", mit dem Preis " + registerpreis + " und der Stückzahl " + registerzahl + " eintragen?", "Registrierung", DEFAULT_OPTION, ERROR_MESSAGE, null, optionen, optionen[0]);
  if (answer==1) {

    msql.execute("INSERT INTO Artikel (ID, Name, Preis, Basispreis, Stueckzahl, Barcode) VALUES (NULL, '" + registername + "', '" + registerpreis + "', NULL, '" + registerzahl + "', '" + barcoderegister + "')"); 
    showMessageDialog(null, registername + " Erfolgreich Gespeichert! Bitte erneut scannen um es dem Warenkorb hinzuzufügen", "Registrierung", INFORMATION_MESSAGE);
  }
  registrierung=false;
}

void produkteinstellungen(int produktid) {
  String[] optionen = {"Name", "Preis", "Lagerbestände", "Barcode", "Produkt entfernen", "Vorgang abbrechen", "Informationen"};
  msql.query("SELECT Name FROM `Artikel` WHERE ID=" + produktid);
  msql.next();
  if (msql.getString(1)==null) {
    showMessageDialog(null, "Zu änderndes Produkt existiert nicht", "Fataler Fehler", ERROR_MESSAGE);
  } else {
    int answer = showOptionDialog(null, "Was möchtest du mit " + msql.getString(1) + " machen?", "Arduino", DEFAULT_OPTION, INFORMATION_MESSAGE, null, optionen, optionen[5]);
    switch(answer) {
    case 0:
      println("Ändere den Namen von " + msql.getString(1));
      String answerc0 = "";
      while ((answerc0.trim().isEmpty())) {
        answerc0 = showInputDialog(null, "Zu was soll der Name von " + msql.getString(1) + " geändert werden?", "Datenbankänderung", INFORMATION_MESSAGE);
        while (answerc0==null) {
          answerc0 = showInputDialog(null, "Zu was soll der Name von " + msql.getString(1) + " geändert werden?", "Datenbankänderung", INFORMATION_MESSAGE);
        }
      }
      msql.execute("UPDATE `Artikel` SET Name='" + answerc0 + "' WHERE ID=" + produktid); 
      showMessageDialog(null, "Der Name wurde geändert", "Datenbankänderung", INFORMATION_MESSAGE); 
      break;
    case 1:
      println("Ändere den Preis von " + msql.getString(1));
      String answerc1 = "";
      while ((answerc1.trim().isEmpty())) {
        answerc1 = showInputDialog(null, "Zu was soll der Preis von " + msql.getString(1) + " geändert werden?", "Datenbankänderung", INFORMATION_MESSAGE);
        while (answerc1==null) {
          answerc1 = showInputDialog(null, "Zu was soll der Preis von " + msql.getString(1) + " geändert werden?", "Datenbankänderung", INFORMATION_MESSAGE);
        }
      }
      msql.execute("UPDATE `Artikel` SET Preis='" + float(answerc1) + "' WHERE ID=" + produktid); 
      showMessageDialog(null, "Der Preis wurde geändert", "Datenbankänderung", INFORMATION_MESSAGE); 


      break;
    case 2:
      println("Ändere den Lagerbestand von " + msql.getString(1));
      String answerc2 = "";
      while ((answerc2.trim().isEmpty())) {
        answerc2 = showInputDialog(null, "Zu was soll der Lagerbestand von " + msql.getString(1) + " geändert werden?", "Datenbankänderung", INFORMATION_MESSAGE);
        while (answerc2==null) {
          answerc2 = showInputDialog(null, "Zu was soll der Lagerbestand von " + msql.getString(1) + " geändert werden?", "Datenbankänderung", INFORMATION_MESSAGE);
        }
      }
      msql.execute("UPDATE `Artikel` SET Stueckzahl='" + int(answerc2) + "' WHERE ID=" + produktid); 
      showMessageDialog(null, "Der Lagerbestand wurde geändert", "Datenbankänderung", INFORMATION_MESSAGE); 


      break;
    case 3:
      println("Ändere den Barcode von " + msql.getString(1));
      String answerc3 = "";
      while ((answerc3.trim().isEmpty())) {
        answerc3 = showInputDialog(null, "Zu was soll der Barcode von " + msql.getString(1) + " geändert werden?", "Datenbankänderung", INFORMATION_MESSAGE);
        while (answerc3==null) {
          answerc3 = showInputDialog(null, "Zu was soll der Barcode von " + msql.getString(1) + " geändert werden?", "Datenbankänderung", INFORMATION_MESSAGE);
        }
      }
      msql.execute("UPDATE `Artikel` SET Barcode='" + answerc3 + "' WHERE ID=" + produktid); 
      showMessageDialog(null, "Der Barcode wurde geändert", "Datenbankänderung", INFORMATION_MESSAGE); 


      break;
    case 4:
      String[] optionenc4= {"Nein", "Ja"};
      int answerc4 = showOptionDialog(null, "Möchtest du fortfahren und " + msql.getString(1) + " aus der Datenbank entfernen", "Löschen von " + msql.getString(1), DEFAULT_OPTION, ERROR_MESSAGE, null, optionenc4, optionenc4[0]);
      if (answerc4==1) {
        println("Produkt " + msql.getString(1) + " wird aus der Artikeldatenbank entfernt");
        msql.execute("DELETE FROM `Artikel` WHERE ID=" + produktid);
        showMessageDialog(null, "Das Produkt wurde aus der Datenbank entfernt", "Datenbanklöschung", INFORMATION_MESSAGE);
      }
      break;
    case 6:
      msql.query("SELECT Name,ID,Preis,Basispreis,Stueckzahl,Barcode FROM Artikel WHERE ID=" + produktid);
      msql.next();
      showMessageDialog(null, "Das Produkt " + msql.getString(1) + " (" + msql.getInt(2) + ") welches " + msql.getFloat(3) + " kostet, dessen Basispreis " + msql.getFloat(4) + " war und im Lager " + msql.getInt(5) + "mal vorhanden ist hat den Barcode " + msql.getString(6), "Detaillierte Informationen", INFORMATION_MESSAGE); 
      break;
    }
  }
}

void bondrucken(int instanzbondrucker, String gegeben, String rueckgeld) {
  printer.wake();
  delay(250);
  printer.println("Vielen Dank fuer ihren Einkauf bei ENDEKA");
  msql.query( "SELECT REPLACE(Name,'ü','ue'),Anzahl,ROUND(Preis,2),ROUND(Preis*Anzahl,2) FROM Kassiervorgang" + instanzbondrucker + " WHERE Anzahl>='1'");
  while (msql.next()) {


    textSize(23);
    textAlign(LEFT);
    String Name = msql.getString(1);
    int NameLength = Name.length();

    String Anzahl = msql.getString(2);
    int AnzahlLength = Anzahl.length();

    String Preis = msql.getString(3);
    int PreisLength = Preis.length();

    String Summe = msql.getString(4);
    int SummeLength = Summe.length();

    String Spaces = "";
    for (int i=0; i<32-NameLength-AnzahlLength-PreisLength-SummeLength-2; i=i+1) {
      Spaces += " ";
    }
    printer.println(Name + Spaces + Anzahl + " " + Preis + " " + Summe);
  }
  msql.query("SELECT ROUND(SUM(Preis*Anzahl),2),ROUND(" + gegeben + ",2),ROUND(" + rueckgeld +",2) FROM Kassiervorgang" + instanzbondrucker + " WHERE Anzahl>='1'");
  msql.next();
  String Spaces = "";
  String Gesamtsumme = msql.getString(1);
  int GesamtsummeLength = Gesamtsumme.length();
  for (int i=0; i<32-GesamtsummeLength; i=i+1) {
    Spaces += " ";
  }
  printer.println(Spaces + Gesamtsumme + " Euro");
  printer.feed(1);
  printer.println("Gegebenes Geld: " + gegeben + " Euro");
  printer.println("Rueckgeld: " + rueckgeld + " Euro");
  printer.feed(1);
  printer.println("Fuer spaetere Rueckfragen, ihr Einkauf hatte die Nr. " + instanzbondrucker);
  printer.println("Er fand am " + day()+"." + month()+"." + year() + " um " + hour() + ":" + second() + " an Kasse " + instanzname + " statt");
  printer.feed(2);
  printer.sleep();
}