import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Mainclass {
public static final String EINGABE_UNGUELTIG = "Ihre Eingabe war ungültig. Geben Sie bitte erneut Ihre Auswahl von folgenden ein!";
public static boolean cancel=false;
public static String zeile;
public static Scanner einlesenscanner = new Scanner(System.in);
//public static int anzahlactor = 0;
//main klasse geändert NEU
public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException{
System.out.println("Willkommen. Viel Spass mit der Rainy Day Movie Database!");
startScreen();
}
//Aufteilung der Methoden NEU
public static void startScreen() throws IOException, SQLException, ClassNotFoundException{
Statement st;
ArrayList<Movie> movies;
st=connect();
movies=execute_select(st);
System.out.println("\nHauptmenue ");
System.out.println("________________________________________");
System.out.println("0: Alle Filme anzeigen ");
System.out.println("1: Einen Eintrag editieren ");
System.out.println("2: Einen Film oder Schauspieler hinzufügen");
System.out.println("3: Einen Film suchen ");
System.out.println("4: Die Filme sortieren");
System.out.println("5: Einen Film oder Schauspieler löschen");
System.out.println("9: Programm beenden\n");
menuAuswahl(movies, st);
}
//neuerstellte methode NEU
public static void menuAuswahl(ArrayList<Movie> movies, Statement st) throws IOException, SQLException, ClassNotFoundException {
ResultSet rs;
String menuRegex = "[0-9]", menueeingabe = "", fehlermeldung = "Was möchten Sie nun tun?";
int rueckgabe = -1;
boolean menuewiederholen = false;
// ÄNDERUNG Die Eingabe im Hauptmenu wird geprüft ob sie wirklich den vorhanden Optionen (0-9) entspricht NEU
while (menuewiederholen== false) { //wird keine 0-9 eingegeben, wiederholt sich diese stelle ewigs
System.out.println("Wählen Sie die entsprechende Zahl aus!");
System.out.print("--> ");
menueeingabe = einlesenscanner.nextLine();
Pattern p4 = Pattern.compile(menuRegex);
Matcher m4 = p4.matcher(menueeingabe);
menuewiederholen = m4.matches();
if ( menuewiederholen == false ){
System.out.println("Falsche Eingabe. Geben Sie bitte nur eine einstellige Zahl ein!");
}
//0 wurde eingegeben, alle filme bitte anzeigen NEU
else if (menueeingabe.equals("0")){
menuewiederholen = false;
System.out.println("Alle diese Filme befinden sich in unserer Datenbank:\n");
show(movies);
while ( menuewiederholen == false ) {
System.out.println(fehlermeldung);
System.out.println("A = Zurück zum Hauptmenu");
System.out.println("B = Programm beenden");
menueeingabe = einlesenscanner.nextLine();
menuewiederholen = ((Pattern.compile("[a-bA-B]").matcher(menueeingabe)).matches());
if (menuewiederholen == false ) fehlermeldung = EINGABE_UNGUELTIG;
}
switch(menueeingabe.toUpperCase().charAt(0)) {
case 'A':
startScreen();
break;
case 'B':
System.out.println("Auf Wiedersehen!");
System.exit(0);
}
}
// Option 1 NEU
else if(menueeingabe.equals("1")){
System.out.println("noch nicht realisiert!!");
}
// Option 2 NEU
else if(menueeingabe.equals("2")){
menuewiederholen = false;
fehlermeldung="Möchten Sie einen Schauspieler oder einen Film hinzufügen?";
while (menuewiederholen == false ) {
System.out.println(fehlermeldung);
System.out.println("1 = Film\n2 = Schauspieler");
menueeingabe = einlesenscanner.nextLine();;
menuewiederholen = ((Pattern.compile("[1-2]").matcher(menueeingabe)).matches());
if ( menuewiederholen == false ) fehlermeldung = EINGABE_UNGUELTIG;
}
switch(menueeingabe.toUpperCase().charAt(0)) {
case '1':
insertMovie(movies, st);
break;
case '2':
insertActor(movies, st, true);
break;
default:
}
}
// Option 3 NEU
else if(menueeingabe.equals("3")){
menuewiederholen = false;
fehlermeldung="Nach was wollen Sie suchen?";
rueckgabe = -1;
while (menuewiederholen == false ) {
System.out.println(fehlermeldung);
System.out.println("1 = Filmname\n2 = Schauspieler");
menueeingabe = einlesenscanner.nextLine();;
menuewiederholen = ((Pattern.compile("[1-2]").matcher(menueeingabe)).matches());
if ( menuewiederholen == false ) fehlermeldung = EINGABE_UNGUELTIG;
}
switch(menueeingabe.toUpperCase().charAt(0)) {
case '1':
System.out.println("Wie heist der Film?");
menueeingabe = einlesenscanner.nextLine();
search(movies, menueeingabe, 1);
break;
case '2':
System.out.println("Welchen Schauspieler möchten sie?");
menueeingabe = einlesenscanner.nextLine();
search(movies,menueeingabe,2);
break;
default:
}
}
// Option 4 NEU
else if(menueeingabe.equals("4")){
System.out.println("noch nicht realisiert!!");
}
// Option 5 NEU
else if(menueeingabe.equals("5")){
System.out.println("noch nicht realisiert!!");
}
// Option 9 NEU
else if(menueeingabe.equals("9")){
System.out.println("Auf Wiedersehen!");
System.exit(0);
}
}
}
public static void insertMovie(ArrayList<Movie> movies, Statement st)throws SQLException, IOException, ClassNotFoundException {
ResultSet rs;
int rueckgabe = -1, rID = 0, yID = 0;
int aID = 0;
String fname, fdescription, fehlermeldung = "",menueeingabe="";
int id=0, anzahlactor = 0;
boolean wiederholen = false, temp1 = false, temp2 = false;
System.out.print("Geben Sie den Titel des Films ein:\n-->");
fname=einlesenscanner.nextLine();
System.out.print("Geben Sie eine Beschreibung des Films ein:\n-->");
fdescription=einlesenscanner.nextLine();
System.out.println("Geben Sie eine Bewertung des Films ein( 1-5 ):");
while (wiederholen == false ) {
System.out.println(fehlermeldung);
menueeingabe = einlesenscanner.nextLine();
wiederholen = ((Pattern.compile("[1-5]{1}").matcher(menueeingabe)).matches());
/*try {
rueckgabe = Integer.parseInt(menueeingabe);
if ( rueckgabe >= 1 && rueckgabe <= 10 ) temp2 = true;
else temp2 = false;
} catch ( Exception e ){
temp2 = false;
}*/
fehlermeldung = EINGABE_UNGUELTIG+"\nGeben Sie eine Zahl zwischen 1 und 5 ein!";
//if ( temp1 == true && temp2 == true ) wiederholen = true;
//else wiederholen = false;
}
rID = Integer.parseInt(menueeingabe);
fehlermeldung = "";
wiederholen = false;
System.out.println("Geben Sie ein wann der Film erstellt wurde:\n-->");
while (wiederholen == false ) {
System.out.println(fehlermeldung);
menueeingabe = einlesenscanner.nextLine();
temp1 = ((Pattern.compile("[0-9]{4}").matcher(menueeingabe)).matches());
try {
rueckgabe = Integer.parseInt(menueeingabe);
if ( rueckgabe <= 2050 && rueckgabe >= 1900 ) temp2 = true;
else temp2 = false;
} catch ( Exception e ){
temp2 = false;
}
fehlermeldung = EINGABE_UNGUELTIG+"\nGeben Sie ein Jahr zwischen 1900 und 2050 ein!";
if ( temp1 == true && temp2 == true ) wiederholen = true;
else wiederholen = false;
}
yID = rueckgabe;
id= movies.size()+1;
//film einfügen
try{
st.executeUpdate("INSERT INTO MOVIE VALUES ("+ id +", '"+ fname +"', '"+ fdescription + "'," + rID + ", " + yID +")");
}catch(SQLException e){
e.getMessage();
}
fehlermeldung = "";
wiederholen = false;
rs = st.executeQuery("SELECT COUNT(*) FROM Actor");
//rs = st.executeQuery("SELECT actor_id from Actor");
while (rs.next()) anzahlactor = rs.getInt(1);
System.out.println("Geben Sie die ID des Schauspielers ein:\n-->");
while (wiederholen == false ) {
System.out.println(fehlermeldung);
menueeingabe = einlesenscanner.nextLine();
temp1 = ((Pattern.compile("[0-9]+").matcher(menueeingabe)).matches());
try {
rueckgabe = Integer.parseInt(menueeingabe);
System.out.println(rueckgabe);
System.out.println(anzahlactor);
if ( rueckgabe <= anzahlactor && rueckgabe >= 1 ) temp2 = true;
else temp2 = false;
} catch ( Exception e ){
temp2 = false;
}
fehlermeldung = EINGABE_UNGUELTIG+"\nGeben Sie die richtige ID vom Schauspieler ein!";
if ( temp1 == true && temp2 == true ) wiederholen = true;
else wiederholen = false;
}
aID = rueckgabe;
st.executeUpdate("INSERT INTO MOVIE_ACTOR VALUES ("+ id +","+aID+" )"); //mit tabelle schauspieler verbinden
// ÄNDERUNG Die folgende nachricht erscheint und das program kehrt zum startbildschirm zurück NEU
System.out.println("Der Film wurde ins Archiv aufgenommen" + "\n");
startScreen();
}
public static void insertActor(ArrayList<Movie> movies, Statement st, boolean withmovie)throws SQLException, IOException, ClassNotFoundException {
ResultSet rs;
int id=0, aid=0, anzahlMovies=0, anzahlActor =0;
String aname, avorname;
int rueckgabe = -1;
String menueeingabe="", fehlermeldung = "";
boolean wiederholen = false, temp1 = false, temp2 = false;
rs = st.executeQuery("SELECT COUNT(*) FROM Actor"); //zählen wie viele einträge
while (rs.next()) anzahlActor = rs.getInt(1);
aid = anzahlActor + 1;
System.out.println("Geben Sie den Vornamen ein:\n-->");
avorname= einlesenscanner.nextLine();
System.out.println("Geben Sie den Namen ein:\n-->");
aname=einlesenscanner.nextLine();
//aid=aid+1;
try{
st.executeUpdate("INSERT INTO ACTOR VALUES ('"+aid+"','"+aname+"', '"+avorname+"')");//einfügen schauspieler
}catch(Exception e){
// e.getLocalizedMessage().toString();
e.getMessage();
}
////HIER GIBT ES NOCH PROBLEM, KEINE FEHLERMELDUNG
fehlermeldung = "";
wiederholen = false;
rs = st.executeQuery("SELECT COUNT(*) FROM Movie");
while (rs.next()) anzahlMovies = rs.getInt(1);
System.out.println("Geben sie die ID eines Filmes an wo er Mitspielt::\n-->");
//System.out.println(anzahlMovies);
while (wiederholen == false ) {
System.out.println(fehlermeldung);//DIESE FEHLERMEDLUNG WIRD SCHON AUSGEGEBEN OBWOHL MAN NICHTS GETIPPT HAT
menueeingabe = einlesenscanner.nextLine();
temp1 = ((Pattern.compile("[0-9]+").matcher(menueeingabe)).matches());
try {
rueckgabe = Integer.parseInt(menueeingabe);
System.out.println(rueckgabe);
System.out.println(anzahlMovies);
if ( rueckgabe <= anzahlMovies && rueckgabe >= 1 ) temp2 = true;
else temp2 = false;
} catch ( Exception e ){
temp2 = false;
}
fehlermeldung = EINGABE_UNGUELTIG+"\nGeben Sie die richtige ID vom Film ein!";
if ( temp1 == true && temp2 == true ) wiederholen = true;
else wiederholen = false;
}
id = rueckgabe;
st.executeUpdate("INSERT INTO MOVIE_ACTOR VALUES ("+ id +","+aid+" )"); //einfügen film wo er mitgemacht hat.
System.out.println("Der Schauspieler wurde ins Archiv aufgenommen" + "\n");
startScreen();
}
public static Statement connect() throws ClassNotFoundException, SQLException{
final String HSQLDB_TREIBER_PFAD = "org.hsqldb.jdbcDriver";
final String DB_PFAD = "jdbc:hsqldb:file:C:\\Users\\kiran\\programme\\programmieren\\" +
"hsqldb\\data\\rainydays\\rainydays2";
Class.forName(HSQLDB_TREIBER_PFAD);
Connection con = DriverManager.getConnection(DB_PFAD);
Statement st = con.createStatement();
return st;
}
//Methode liest alle einträge aus db aus und speichert sie in einer array list
public static ArrayList<Movie> execute_select(Statement st) throws SQLException{
int anz=0;
int id=0;
int idlast=1;
String name="";
String description="";
int rating=0;
int year=0;
ArrayList<Movie> movies= new ArrayList<Movie>(); //arraylist movies erstellen
ArrayList<Actor> actors= new ArrayList<Actor>();
//SQL befehl ausführen
ResultSet rs = st.executeQuery
("SELECT Movie.movie_id, Movie.movie_name, Movie.movie_description," +
" Movie.movie_rating, Movie.movie_year,Actor.actor_id, Actor.actor_prename, Actor.actor_name FROM Movie, " +
"Actor, movie_actor WHERE Movie.movie_id = movie_actor.movie_id AND Actor.actor_id= movie_actor.actor_id ;");
// arraylist füllen
while (rs.next()) {
id=rs.getInt(1);
if (id==idlast) //prüfen ob immer noch der gleiche film, wenn ja nur schauspieler hinzufügen, wenn nein Film.
actors.add(new Actor (rs.getInt(6), rs.getString(7), rs.getString(8)));
else {
movies.add(new Movie(idlast,name,description ,rating , year,actors));
actors.clear();
actors.add(new Actor (rs.getInt(6),rs.getString(7), rs.getString(8)));
}
idlast=id;
name=rs.getString(2);
description=rs.getString(3);
rating=rs.getInt(4);
year=rs.getInt(5);
if(rs.isLast())movies.add(new Movie(idlast,name,description ,rating , year,actors)); //wenn letzter eintrag film hinzufügen
}
anz=anz+1;
return movies;
}
//Methode zeigt alle filme auf Bildschirm an
public static void show(ArrayList<Movie> movies) {
int anz=movies.size();
// bis ans ende der arraylist jeden film ausgeben
for (int i=0; i<anz;i++) {
Movie k = (Movie) movies.get(i);
k.print(); //print() methode aus movie.java wird aufgerufen
System.out.println("\n\n\t\t\t\t\t____________\n");
}
}
//Methode sucht nach filname oder Schauspielern die Mitgemacht haben.
public static void search(ArrayList movies, String name, int typ){
int anz=movies.size();
//boolean found =false;
//ArrayList actors=new ArrayList<Movie>();
//int actor_nr=0;
String test;
if(typ==1){
for (int i=0; i<anz;i++) {
Movie k=(Movie) movies.get(i);
//System.out.println(k.movie_name);
test = einlesenscanner.nextLine();
System.out.println("name=" +test+" movie="+k.movie_name);
if (k.movie_name.equals(test)) {
System.out.println("OK");
}else {
System.out.println(name);
System.out.println("NEIN");
}
}
}
//wenn suchen nach actor
/*if (typ==1){
for (int i=0; i<anz;i++) { //alle filme durchgehen
Movie k=(Movie) movies.get(i);
actors=k.movie_actor;
actor_nr=actors.size();
for (int j=0; j<actor_nr;j++) { //die schauspiler des films durchgehen wennn gesuchter dabei film ausgebe.
Actor l=(Actor) actors.get(j);
if (l.actor_name.equals(name)) {
System.out.println("\n************************************************");
k.print();
System.out.println("\n************************************************");
found =true;
}
}
}
} else { //sonst filme
for (int i=0; i<anz;i++) { //list durchgehen bis gefunden wenn gefunden true sonst bleibt false
Movie k=(Movie) movies.get(i);
if (k.movie_name.equals(name)) {
System.out.println("\n************************************************");
k.print();
System.out.println("\n************************************************");
found =true;
break;
}
}
}*/
//if (found==false) System.out.println("kein eintrag gefunden"); //wenn nichts gefunden diese meldung
}
//Methode fügt filme und schauspileer der DB hinzu
}