[code=Java]package Anwendung;
import java.sql.Date;
import java.text.SimpleDateFormat;
import Zwischenspeicher.*;
import datenbank.datenbankverbindung;
import ButtonHandler.*;
import java.util.*;
/**
*
* Klasse zur verwaltung des Anlegens eines neuen Objektes
*/
public class Anlegen
{
ButtonAnlegen button;
datenbankverbindung verbindung = null;
Gui gui = null;
public Anlegen(ButtonAnlegen button)
{
this.button = button;
this.gui = button.gui;
}
/**
* Methode um zu überprüfen ob ein eingegebener Name schon in der Datenbank eingetragen ist
* @throws Exception
*/
public void kundePrüfen() throws Exception
{
if(gui.getField("NameEregbnis").getText().trim().isEmpty() == false && gui.getField("VornameErgebnis").getText().trim().isEmpty() == false)
{
verbindung = new datenbankverbindung();
//Prüfung ob schon in der Datenbank vorhanden
verbindung.ausgabebefehl("name, vorname", "kunde", "name = '"+gui.getField("NameEregbnis").getText().trim()+"' and vorname = '"+gui.getField("VornameErgebnis").getText().trim()+"'", null, null, null);
if (verbindung.getDatenbankauszug().first() == true)
throw new Exception ("Es ist schon eine Person mit diesem Namen in der Datenbank vorhanden");
else
verbindung.closeCommit();
}
else
throw new Exception("Bitte geben sie einen Namen ein");
}
/**
* Methode zum anlegen eines Neuen Kunden-, Adress, und Bankverbindungsobjektes mit automatischer Vergabe der DatenbankIDs und Überprüfung auf Duplikate
* @throws Exception
*/
public void kundeAnlegen() throws Exception
{
try
{
verbindung = new datenbankverbindung();
//Vergabe der DatenbankIDs
int kundenid;
int adressid;
int bankid;
verbindung.ausgabebefehl("idkunde", "kunde u", "not exists(Select idkunde from kunde v where u.idkunde = (v.idkunde - 1))", null, null, null);
if(verbindung.getDatenbankauszug().first() == true)
{
System.out.println(verbindung.getDatenbankauszug().getInt(1)+1);
kundenid = verbindung.getDatenbankauszug().getInt(1)+1;
}
else
kundenid = 1;
verbindung.ausgabebefehl("idadresse", "adresse u", "not exists(Select idadresse from adresse v where u.idadresse = (v.idadresse - 1))", null, null, null);
if(verbindung.getDatenbankauszug().first() == true)
{
System.out.println(verbindung.getDatenbankauszug().getInt(1)+1);
adressid = verbindung.getDatenbankauszug().getInt(1)+1;
}
else
adressid = 1;
verbindung.ausgabebefehl("idbankverbindung", "bankverbindung u", "not exists(Select idbankverbindung from bankverbindung v where u.idbankverbindung = (v.idbankverbindung - 1))", null, null, null);
if(verbindung.getDatenbankauszug().first() == true)
{
System.out.println(verbindung.getDatenbankauszug().getInt(1)+1);
bankid = verbindung.getDatenbankauszug().getInt(1)+1;
}
else
bankid = 1;
//Einfügen des neuen Kunden in die Datenbank
java.util.Date geburtsdatum = new SimpleDateFormat("yyyy-MM-dd").parse(gui.getField("GeburtstagErgebnis").getText().trim());
Date geburtstag = new java.sql.Date(geburtsdatum.getTime());
Kunde neuerkunde = new Kunde(kundenid, gui.getField("NameEregbnis").getText().trim(), gui.getField("VornameErgebnis").getText().trim(), gui.getField("TelefonErgebnis").getText().trim(), geburtstag);
Adresse adresse = new Adresse(adressid, kundenid, gui.getField("StrasseErgebnis").getText().trim(), gui.getField("HausnummerErgebnis").getText().trim(), gui.getField("OrtErgebnisTF").getText().trim(), Integer.parseInt(gui.getField("PlzErgebnis").getText().trim()));
Bankverbindung bank = new Bankverbindung(bankid, kundenid, gui.getField("BankErgebnis").getText().trim(), gui.getField("BlzErgebnis").getText().trim(), gui.getField("KontoErgebnis").getText().trim());
verbindung.eingabebefehl("kunde", null, neuerkunde.getString());
verbindung.eingabebefehl("adresse", null, adresse.getString());
verbindung.eingabebefehl("bankverbindung", null, bank.getString());
verbindung.closeCommit();
}
catch (Exception e)
{
verbindung.closeRollback();
throw new Exception(e.toString());
}
}
/**
* Methode zum anlegen eines Zimmerobjektes mit automatischer Vergabe der DatenbankIDs
* @throws Exception
*/
public void zimmerAnlegen() throws Exception
{
//Vergeben der ZimmerID
try
{
verbindung = new datenbankverbindung();
int zimmerid;
verbindung.ausgabebefehl("idzimmer", "zimmer u", "not exists(Select idzimmer from zimmer v where u.idzimmer = (v.idzimmer - 1))", null, null, null);
if(verbindung.getDatenbankauszug().first() == true)
{
zimmerid = verbindung.getDatenbankauszug().getInt(1)+1;
}
else
zimmerid = 1;
//Einfügen in die neue Datenbank
Zimmer neueszimmer = new Zimmer(zimmerid, gui.getBox("ZimmerTypBox").getSelectedItem().toString().trim(), Integer.parseInt(gui.getBox("ZimmerBettenBox").getSelectedItem().toString()), Integer.parseInt(gui.getField("ZimmerPreisTF").getText().trim()));
verbindung.eingabebefehl("zimmer", null, neueszimmer.getString());
verbindung.closeCommit();
}
catch (Exception e)
{
verbindung.closeRollback();
throw new Exception(e.toString());
}
}
/**
* Methode zum anlegen eines Mietwagenobjektes mit automatischer Vergabe der DatenbankIDs und Überprüfung auf Duplikate
* @throws Exception
*/
public void mietwagenanlegen () throws Exception
{
//Prüfung ob eine Nummernschildnummer eingegben wurde
if(gui.getField("MietwagenSchildTF").getText().trim().isEmpty() == false)
{
try
{
verbindung = new datenbankverbindung();
//Prüfung ob das Auto schon vorhanden ist
verbindung.ausgabebefehl("nummernschildnummer", "mietwagen", "nummernschildnummer = '"+gui.getField("MietwagenSchildTF").getText().trim()+"'", null, null, null);
if (verbindung.getDatenbankauszug().first() == true)
throw new Exception ("Nummernschildnummer schon vergeben");
else
{
//Zuweisen der DatenbankID
int mietwagenid;
verbindung.ausgabebefehl("idmietwagen", "mietwagen u", "not exists(Select idmietwagen from mietwagen v where u.idmietwagen = (v.idmietwagen - 1))", null, null, null);
if(verbindung.getDatenbankauszug().first() == true)
{
mietwagenid = verbindung.getDatenbankauszug().getInt(1)+1;
}
else
mietwagenid = 1;
//Einfügen des Mietwagens in die Datenbank
Mietwagen neuermietwagen = new Mietwagen(mietwagenid, gui.getField("MietwagenSchildTF").getText().trim(), gui.getBox("MietwagenTypBox").getSelectedItem().toString().trim(), Integer.parseInt(gui.getField("MietwagenPreisTF").getText().trim()));
verbindung.eingabebefehl("mietwagen", null, neuermietwagen.getString());
verbindung.closeCommit();
}
}
catch (Exception e)
{
verbindung.closeRollback();
throw new Exception(e.toString());
}
}
else
throw new Exception("Bitte eine Nummernschildnummer eingeben");
}
/**
* Methode zum anlegen eines Buchungsobjektes mit automatischer Vergabe der DatenbankIDs und Überprüfung auf Verfügbarkeit des Zimmers und des Mietwagens im angegebenen Zeitraumes
* @throws Exception
*/
public void buchungAnlegen () throws Exception
{
try
{
//Kunden erstellen
verbindung = new datenbankverbindung();
verbindung.ausgabebefehl("*", "Kunde", "idkunde = "+gui.getTable("Kundenauswahl").getModel().getValueAt(gui.getTable("Kundenauswahl").getSelectedRow(), 0), null, null, null);
verbindung.getDatenbankauszug().next();
Kunde kunde = new Kunde(verbindung.getDatenbankauszug().getInt(1), verbindung.getDatenbankauszug().getString(2), verbindung.getDatenbankauszug().getString(3), verbindung.getDatenbankauszug().getString(4), verbindung.getDatenbankauszug().getDate(5), verbindung.getDatenbankauszug().getInt(6));
//Buchungsids
int buchungsid;
int zimmerbuchungsid;
int mietwagenbuchungsid;
//counter
int counter1 = 0;
//Zimmertage
java.util.Date zimmervon;
java.util.Date zimmerbis;
Date zimmerdatumvon;
Date zimmerdatumbis;
//Mietwagentagetage
java.util.Date wagenvon;
java.util.Date wagenbis;
Date wagendatumvon;
Date wagendatumbis;
//Gesamtbuchungstage und Buchungsdatum
java.util.Date date;
java.util.Date date2;
GregorianCalendar cal = new GregorianCalendar();
java.util.Date date3 = new java.util.Date();
Date datumheute = new java.sql.Date(date3.getTime());
//Zwischenspeicherobjekte
ArrayList<Zimmerbuchung> zimmerbuchungen = new ArrayList<Zimmerbuchung>();
ArrayList<Wagenbuchung> mietwagenbuchungen = new ArrayList<Wagenbuchung>();
Zimmerbuchung[] arrayzimmerbuchung;
Wagenbuchung[] arraywagenbuchung = null;
Zimmerbuchung zimmerbuchung;
Wagenbuchung mietwagenbuchung;
Zimmer gebuchteszimmer;
Mietwagen gebuchtermietwagen;
Buchung buchung;
//Gesamtbuchungstage Formatumwandlung
if (this.gui.getField("VonLabelTF").getText().trim().isEmpty() == false)
date = new SimpleDateFormat("yyyy-MM-dd").parse(this.gui.getField("VonLabelTF").getText().trim());
else
throw new Exception("Geben sie bitte ein Ankunftsdatum ein");
if (this.gui.getField("BisLabelTF").getText().trim().isEmpty() == false)
date2 = new SimpleDateFormat("yyyy-MM-dd").parse(this.gui.getField("BisLabelTF").getText().trim());
else
throw new Exception("Geben sie bitte ein Abfahrtsdatum ein");
Date datumvon = new java.sql.Date(date.getTime());
Date datumbis = new java.sql.Date(date2.getTime());
//Buchungsid festlegen
verbindung.ausgabebefehl("idbuchung", "buchung u", "not exists(Select idbuchung from buchung v where u.idbuchung = (v.idbuchung - 1))", null, null, null);
if(verbindung.getDatenbankauszug().first() == true)
{
buchungsid = verbindung.getDatenbankauszug().getInt(1)+1;
}
else
buchungsid = 1;
//Zimmerbuchungsid festlegen
verbindung.ausgabebefehl("MAX(idzimmerbuchung)", "zimmerbuchung u", null, null, null, null);
if(verbindung.getDatenbankauszug().first() == true)
{
zimmerbuchungsid = verbindung.getDatenbankauszug().getInt(1)+1;
}
else
zimmerbuchungsid = 1;
//Mietwagenbuchungsid festlegen
verbindung.ausgabebefehl("MAX(idmietwagenbuchung)", "mietwagenbuchung u", null, null, null, null);
if(verbindung.getDatenbankauszug().first() == true)
{
mietwagenbuchungsid = verbindung.getDatenbankauszug().getInt(1)+1;
}
else
mietwagenbuchungsid = 1;
//Zimmerbuchungen erstellen Solange noch Zeilen mit Zimmerbuchungen existieren
while (gui.getTable("Zusammenfassung").getRowCount() > counter1 && gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 0) != null)
{
//Datumseingaben einer Zeile prüfen
if (gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 3).toString().trim().isEmpty() == false)
zimmervon = new SimpleDateFormat("yyyy-MM-dd").parse(gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 3).toString().trim());
else
throw new Exception("Geben sie bitte ein Ankunftsdatum bei Zimmer "+gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 0)+"ein");
if (gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 4).toString().trim().isEmpty() == false)
zimmerbis = new SimpleDateFormat("yyyy-MM-dd").parse(gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 4).toString().trim());
else
throw new Exception("Geben sie bitte ein Abfahrtsdatum bei Zimmer "+gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 0)+"ein");
zimmerdatumvon = new java.sql.Date(zimmervon.getTime());
zimmerdatumbis = new java.sql.Date(zimmerbis.getTime());
if(zimmerdatumbis.before(zimmerdatumvon)||zimmerdatumvon.before(datumvon)||zimmerdatumbis.after(datumbis)||zimmerdatumvon.equals(zimmerdatumbis))
throw new Exception("Geben sie bitte gültige Daten bei Zimmer "+gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 0)+"ein");
//Zimmerobjekt erstellen
verbindung.ausgabebefehl("*", "zimmer", "idzimmer = "+gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 0), null, null, null);
verbindung.getDatenbankauszug().next();
gebuchteszimmer = new Zimmer(verbindung.getDatenbankauszug().getInt(1), verbindung.getDatenbankauszug().getString(2), verbindung.getDatenbankauszug().getInt(3), verbindung.getDatenbankauszug().getLong(4));
//Tage ermittlen an denen das Zimmer belegt ist
long belegtetage = (zimmerbis.getTime()-zimmervon.getTime())/(60000*60*24);
//Zimmerbuchung für die einzelnen Tage erstellen
for(int i = 0; i <= belegtetage; i++)
{
zimmerbuchung = new Zimmerbuchung(zimmerbuchungsid, buchungsid, zimmerdatumvon, gebuchteszimmer);
zimmerbuchungen.add(zimmerbuchung);
//Um einen tag weitergehen
cal.setTime(zimmerdatumvon);
cal.add(Calendar.DATE, 1);
zimmervon = cal.getTime();
zimmerdatumvon = new java.sql.Date(zimmervon.getTime());
zimmerbuchungsid++;
}
counter1++;
}
//Mietwagenbuchungen erstellen Solange noch Zeilen mit Mietwagenbuchungen existieren
while (gui.getTable("Zusammenfassung").getRowCount() > counter1 && gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 1) != null)
{
//Datumseingaben einer Zeile prüfen
if (gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 3).toString().trim().isEmpty() == false)
wagenvon = new SimpleDateFormat("yyyy-MM-dd").parse(gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 3).toString().trim());
else
throw new Exception("Geben sie bitte ein Ankunftsdatum bei Mietwagen "+gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 1)+"ein");
if (gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 4).toString().trim().isEmpty() == false)
wagenbis = new SimpleDateFormat("yyyy-MM-dd").parse(gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 4).toString().trim());
else
throw new Exception("Geben sie bitte ein Abfahrtsdatum bei Mietwagen "+gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 1)+"ein");
wagendatumvon = new java.sql.Date(wagenvon.getTime());
wagendatumbis = new java.sql.Date(wagenbis.getTime());
if(wagendatumbis.before(wagendatumvon)||wagendatumvon.before(datumvon)||wagendatumbis.after(datumbis)||wagendatumvon.equals(wagendatumbis))
throw new Exception("Geben sie bitte gültige Daten bei Mietwagen "+gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 1)+"ein");
//Mietwagenobjekt erstellen
verbindung.ausgabebefehl("*", "mietwagen", "idmietwagen = "+gui.getTable("Zusammenfassung").getModel().getValueAt(counter1, 1), null, null, null);
verbindung.getDatenbankauszug().next();
gebuchtermietwagen = new Mietwagen(verbindung.getDatenbankauszug().getInt(1), verbindung.getDatenbankauszug().getString(2), verbindung.getDatenbankauszug().getString(3), verbindung.getDatenbankauszug().getLong(4));
//Tage ermittlen an denen der Mietwagen belegt ist
long belegtetage = (wagenbis.getTime()-wagenvon.getTime())/(60000*60*24);
//Mietwagenbuchung für die einzelnen Tage erstellen
for(int i = 0; i <= belegtetage; i++)
{
mietwagenbuchung = new Wagenbuchung(mietwagenbuchungsid, buchungsid, wagendatumvon, gebuchtermietwagen);
mietwagenbuchungen.add(mietwagenbuchung);
//Um einen tag weitergehen
cal.setTime(wagendatumvon);
cal.add(Calendar.DATE, 1);
wagenvon = cal.getTime();
wagendatumvon = new java.sql.Date(wagenvon.getTime());
mietwagenbuchungsid++;
}
counter1++;
}
//ArrayLists in Arreys umwandeln
arrayzimmerbuchung = zimmerbuchungen.toArray(new Zimmerbuchung[zimmerbuchungen.size()]);
if(mietwagenbuchungen.isEmpty() == false)
arraywagenbuchung = mietwagenbuchungen.toArray(new Wagenbuchung[mietwagenbuchungen.size()]);
//Buchungsobjekt erstellen
if(mietwagenbuchungen.isEmpty() == false)
buchung = new Buchung(buchungsid, kunde, datumheute, arrayzimmerbuchung, arraywagenbuchung);
else
buchung = new Buchung(buchungsid, kunde, datumheute, arrayzimmerbuchung);
ExceptionView Gesamtpreisfenster = new ExceptionView("Der Gersamtpreis beläuft sich auf "+buchung.getPreis()+" Euro");
//Änderungen in Datenbank schreiben
//Buchung einfügen
verbindung.eingabebefehl("buchung", null, buchung.getString());
//Zimmer einfügen
for(int i = 0; i < zimmerbuchungen.size();i++)
{
System.out.println(zimmerbuchungen.get(i).getString());
verbindung.eingabebefehl("zimmerbuchung", null, zimmerbuchungen.get(i).getString());
}
//Mietwagen einfügen
if(mietwagenbuchungen.isEmpty() == false)
{
for(int i = 0; i < mietwagenbuchungen.size();i++)
{
System.out.println(mietwagenbuchungen.get(i).getString());
verbindung.eingabebefehl("mietwagenbuchung", null, mietwagenbuchungen.get(i).getString());
}
}
//Kundenbuchungen erhöhen
kunde.setAnzahlbuchungen(kunde.getAnzahlbuchungen()+1);
verbindung.updatebefehl("kunde", "anzahlbuchung = "+kunde.getAnzahlbuchungen(), "idkunde = "+kunde.getKundennummer());
verbindung.closeCommit();
}
catch (Exception e)
{
e.printStackTrace();
verbindung.closeRollback();
throw new Exception(e.toString());
}
}
}