diff --git a/src/main/java/org/example/framework/framecreater.java b/src/main/java/org/example/framework/framecreater.java index c3bd110..430e456 100644 --- a/src/main/java/org/example/framework/framecreater.java +++ b/src/main/java/org/example/framework/framecreater.java @@ -9,6 +9,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.time.DateTimeException; import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import static org.example.objekts.Bibiliotek.*; @@ -37,7 +38,6 @@ public class framecreater implements ActionListener { } else { profilframe(); } - }); panel.add(anemelden); @@ -61,48 +61,72 @@ public class framecreater implements ActionListener { //suche feld JTextField Sucher=new JTextField(20); + Sucher.setText(getSeartch()!=null ? getSeartch() : ""); Sucher.setBounds(100,10,300,25); Sucher.addActionListener(e -> { - //rerole + frame.dispose(); + setSeartch(Sucher.getText()); + Startframe(); }); panel.add(Sucher); + //filter by writing + ArrayList filterlist=new ArrayList<>(); + if(Sucher.getText().equals("")){ + filterlist=medienliste; + } else { + for(Medien m : medienliste)if(m.getTitel()!=null && m.getTitel().toLowerCase().startsWith(Sucher.getText().toLowerCase()))filterlist.add(m); + } + //create blocks for the inventory final int[] counter = {0}; - medienliste.forEach(m -> { + filterlist.forEach(m -> { if(m.getClass().getName().substring(20).equals(getFilter())){ panel.add(createbutton(m,counter[0],frame)); counter[0]++; } else if (getFilter().equals("Kein Filter")) { panel.add(createbutton(m,counter[0],frame)); counter[0]++; - } else if (getFilter().equals("Ausgeliehen") && m.getAusgeliehen()>0) { + } else if (getFilter().equals("Ausgeliehen") && m.getAusgeliehen()>=0) { panel.add(createbutton(m,counter[0],frame)); counter[0]++; - } else if (getFilter().equals("Verfügbar") && m.getAusgeliehen()<=0) { + } else if (getFilter().equals("Verfügbar") && m.getAusgeliehen()<0) { panel.add(createbutton(m,counter[0],frame)); counter[0]++; } }); - - } public static JButton createbutton(Medien m, int counter, JFrame frame){ JButton vorlage=new JButton(""+m.getClass().getName().substring(20) - +"
"+m.getTitel() - +"
"+m.getBeschreibung() - +"
"+m.getVerofentlichung() - +"
"+(m.getAusgeliehen()!=0 ? "Ausgeliehen" : "Verfügbar") + +"
"+(m.getAutor()==null ? "Unbekannt" : m.getAutor()) + +"
"+(m.getTitel()==null ? "Unbekannt" : m.getTitel()) + +"
"+(m.getBeschreibung()==null ? "NoData" : m.getBeschreibung()) + +"
"+(m.getVerofentlichung()<=0 ? "NoData" : m.getVerofentlichung()) + +"
"+(m.getAusgeliehen()>=0 ? "Ausgeliehen" : "Verfügbar") +""); vorlage.setBounds(30+(80*(counter%8)),50+(100*(counter/10)),80,100 ); vorlage.addActionListener(e -> { frame.dispose(); - Startframe(); + onmedienclick(m); + }); + return vorlage; + } + public static JButton createprofilebutton(Medien m, int counter, JFrame frame,kunden k){ + JButton vorlage=new JButton(""+m.getClass().getName().substring(20) + +"
"+(m.getAutor()==null ? "Unbekannt" : m.getAutor()) + +"
"+(m.getTitel()==null ? "Unbekannt" : m.getTitel()) + +"
"+(m.getBeschreibung()==null ? "NoData" : m.getBeschreibung()) + +"
"+(m.getVerofentlichung()<=0 ? "NoData" : m.getVerofentlichung()) + +"
"+k.getAusgeliehen().get(m).toString() + +""); + vorlage.setBounds(10+(80*(counter%4)),100+(100*(counter/4)),80,100 ); + vorlage.addActionListener(e -> { + frame.dispose(); + profilframe(); }); return vorlage; } - public static void Zeitframe(){ System.out.println(Bibiliotek.getDatum().toString()); @@ -277,6 +301,15 @@ public class framecreater implements ActionListener { schulden.setBounds( 10,30,200,25); panel.add(schulden); + //schuldenzuruck button + JButton schuldenzuruck=new JButton("Abezahlen"); + schuldenzuruck.setBounds(170,30,80,25); + schuldenzuruck.addActionListener( e -> { + if(!schuldenabezahlen.contains(k))schuldenabezahlen.add(k); + profilframe(); + }); + panel.add(schuldenzuruck); + //studentstatus feld JLabel studentstatus=new JLabel("Student/Schühler: "+( k.isIstStudent()? "Ja" : "Nein")); studentstatus.setBounds(10,50,200,25); @@ -292,6 +325,13 @@ public class framecreater implements ActionListener { }); panel.add(succes); + //ausgeliehene sachen + final int[] i = {0}; + k.getAusgeliehen().keySet().forEach(m -> { + panel.add(createprofilebutton(m,i[0],frame,k)); + i[0]++; + }); + //back button JButton back=new JButton("Zurück"); back.setBounds(10,725,80,25); @@ -301,7 +341,7 @@ public class framecreater implements ActionListener { }); panel.add(back); - //back button + //abmelden button JButton abmelden=new JButton("Abmelden"); abmelden.setBounds(90,725,100,25); abmelden.addActionListener(e -> { @@ -312,6 +352,100 @@ public class framecreater implements ActionListener { panel.add(abmelden); } + public static void onmedienclick(Medien m){ + //frame + JFrame frame=new JFrame("Medien"); + JPanel panel=new JPanel(); + frame.setSize(300,200); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setVisible(true); + frame.add(panel); + panel.setLayout(null); + + //text feld + JLabel autor=new JLabel("Autor: "+(m.getAutor()==null ? "Unbekannt" : m.getAutor())); + autor.setBounds(10,10,200,25); + panel.add(autor); + + //text feld + JLabel titel=new JLabel("Titel: "+(m.getTitel()==null ? "Unbekannt" : m.getTitel())); + titel.setBounds( 10,30,200,25); + panel.add(titel); + + //text feld + JLabel Beschreibung=new JLabel("Beschreibung: "+(m.getBeschreibung()==null ? "NoData" : m.getBeschreibung())); + Beschreibung.setBounds(10,50,200,25); + panel.add(Beschreibung); + + //text feld + JLabel verofentlichung=new JLabel("Veröfentlichung: "+(m.getVerofentlichung()<=0 ? "NoData" : m.getVerofentlichung())); + verofentlichung.setBounds(10,70,200,25); + panel.add(verofentlichung); + + //text feld + JLabel ausleihzeit=new JLabel("Ausleihzeit: "+m.getAusleizeit()+" Wochen"); + ausleihzeit.setBounds(10,100,200,25); + panel.add(ausleihzeit); + + //back button + JButton back=new JButton("Zurück"); + back.setBounds(10,125,80,25); + back.addActionListener(e -> { + frame.dispose(); + Startframe(); + }); + panel.add(back); + + //ausleiehen button + JButton ausleiehen=new JButton("Ausleiehen"); + ausleiehen.setBounds(90,125,100,25); + ausleiehen.addActionListener(e -> { + frame.dispose(); + m.setAusgeliehen(getAngemeldeterbenuter()); + kundenliste.get(getAngemeldeterbenuter()).getAusgeliehen().put(m,getDatum()); + Startframe(); + }); + //zuruckgeben button + JButton zuruckgeben=new JButton("Zurückgeben"); + zuruckgeben.setBounds(90,125,100,25); + zuruckgeben.addActionListener(e -> { + frame.dispose(); + m.setAusgeliehen(-1); + schuldenberechnung(m,kundenliste.get(getAngemeldeterbenuter())); + kundenliste.get(getAngemeldeterbenuter()).getAusgeliehen().remove(m); + Startframe(); + }); + if(m.getAusgeliehen()<0 && getAngemeldeterbenuter()>=0)panel.add(ausleiehen); + if(m.getAusgeliehen()>=0 && m.getAusgeliehen()==getAngemeldeterbenuter())panel.add(zuruckgeben); + + } + + public static void schuldenberechnung(Medien m, kunden k){ + LocalDate datenow=getDatum(); + LocalDate datethen=k.getAusgeliehen().get(m); + + //set max verlängerungen + int verlangerung = m.getAusleizeit(); + if(m.getClass().getName().substring(20).equals("Buch"))verlangerung*=4; + if(m.getClass().getName().substring(20).equals("Viedeospiel"))verlangerung*=2; + + //wochen berechnen + int weeksapart = ((int) ChronoUnit.DAYS.between(datethen,datenow))/7; + if(weeksapart>verlangerung){ + weeksapart-=verlangerung; + weeksapart*=7; + int schulden=0; + if(weeksapart<7){ + schulden=weeksapart; + } else { + weeksapart-=7; + schulden=weeksapart*2; + } + if(k.isIstStudent())schulden/=2; + k.setSchulden(k.getSchulden()+schulden); + } + } + @Override public void actionPerformed(ActionEvent e) { diff --git a/src/main/java/org/example/objekts/Bibiliotek.java b/src/main/java/org/example/objekts/Bibiliotek.java index 5d5517b..3bb88c4 100644 --- a/src/main/java/org/example/objekts/Bibiliotek.java +++ b/src/main/java/org/example/objekts/Bibiliotek.java @@ -8,11 +8,14 @@ public class Bibiliotek { //create lists to track shit public static ArrayList medienliste=new ArrayList<>(); public static ArrayList kundenliste=new ArrayList<>(); + public static ArrayList schuldenabezahlen=new ArrayList<>(); private static int Angemeldeterbenuter; private static String Filter; + private static String Seartch; + // Global system date, initialized to the current date private static LocalDate datum = LocalDate.now(); @@ -43,9 +46,17 @@ public class Bibiliotek { Filter = filter; } + public static String getSeartch() { + return Seartch; + } + + public static void setSeartch(String seartch) { + Seartch = seartch; + } + public static void addshit(){ - medienliste.add(new Buch("Schmi","","",1)); - medienliste.add(new DVD("Schmi2","","s",1)); + medienliste.add(new Buch("Schmi","Schmitt","",1)); + medienliste.add(new DVD("Schmi2","SH","s",1)); medienliste.add(new Buch("Schmi3","","s",1)); medienliste.add(new Buch("Schmi4","","",1)); medienliste.add(new Buch("Schmi5","","",1)); @@ -64,6 +75,6 @@ public class Bibiliotek { medienliste.add(new Buch("Schmi6","","as",1)); medienliste.add(new Buch("Schmi6","","as",1)); medienliste.add(new Buch("Schmi6","","as",1)); - medienliste.add(new Buch("Schmi6","","as",1)); + medienliste.add(new Buch(null,null,null,0)); } } diff --git a/src/main/java/org/example/objekts/Medien.java b/src/main/java/org/example/objekts/Medien.java index 8af9ebc..79ed615 100644 --- a/src/main/java/org/example/objekts/Medien.java +++ b/src/main/java/org/example/objekts/Medien.java @@ -8,6 +8,7 @@ public abstract class Medien { private int nummer; private int verofentlichung; + private int ausleizeit; private int ausgeliehen; abstract public String getAutor(); @@ -16,6 +17,11 @@ public abstract class Medien { abstract public int getNummer(); abstract public int getVerofentlichung(); abstract public int getAusgeliehen(); + abstract public int getAusleizeit(); + + public void setAusgeliehen(int ausgeliehen) { + this.ausgeliehen = ausgeliehen; + } } @@ -35,7 +41,12 @@ class Buch extends Medien{ this.beschreibung=beschreibung; this.verofentlichung=verofentlichung; this.nummber=Bibiliotek.medienliste.size()+1; //test it - this.ausgeliehen=0; + this.ausgeliehen=-1; + } + + @Override + public void setAusgeliehen(int ausgeliehen) { + this.ausgeliehen = ausgeliehen; } @Override @@ -67,6 +78,11 @@ class Buch extends Medien{ public int getAusgeliehen() { return ausgeliehen; } + + @Override + public int getAusleizeit() { + return 4; + } } class DVD extends Medien{ @@ -84,7 +100,12 @@ class DVD extends Medien{ this.beschreibung=beschreibung; this.verofentlichung=verofentlichung; this.nummber=Bibiliotek.medienliste.size()+1; //test it - this.ausgeliehen=0; + this.ausgeliehen=-1; + } + + @Override + public void setAusgeliehen(int ausgeliehen) { + this.ausgeliehen = ausgeliehen; } @Override @@ -116,6 +137,11 @@ class DVD extends Medien{ public int getAusgeliehen() { return ausgeliehen; } + + @Override + public int getAusleizeit() { + return 1; + } } class CD extends Medien{ @@ -133,7 +159,12 @@ class CD extends Medien{ this.beschreibung=beschreibung; this.verofentlichung=verofentlichung; this.nummber=Bibiliotek.medienliste.size()+1; //test it - this.ausgeliehen=0; + this.ausgeliehen=-1; + } + + @Override + public void setAusgeliehen(int ausgeliehen) { + this.ausgeliehen = ausgeliehen; } @Override @@ -165,6 +196,11 @@ class CD extends Medien{ public int getAusgeliehen() { return ausgeliehen; } + + @Override + public int getAusleizeit() { + return 2; + } } class Brettspiel extends Medien{ @@ -182,7 +218,12 @@ class Brettspiel extends Medien{ this.beschreibung=beschreibung; this.verofentlichung=verofentlichung; this.nummber=Bibiliotek.medienliste.size()+1; //test it - this.ausgeliehen=0; + this.ausgeliehen=-1; + } + + @Override + public void setAusgeliehen(int ausgeliehen) { + this.ausgeliehen = ausgeliehen; } @Override @@ -214,6 +255,11 @@ class Brettspiel extends Medien{ public int getAusgeliehen() { return ausgeliehen; } + + @Override + public int getAusleizeit() { + return 2; + } } class Viedeospiel extends Medien{ @@ -232,7 +278,12 @@ class Viedeospiel extends Medien{ this.beschreibung=beschreibung; this.verofentlichung=verofentlichung; this.nummber=Bibiliotek.medienliste.size()+1; //test it - this.ausgeliehen=0; + this.ausgeliehen=-1; + } + + @Override + public void setAusgeliehen(int ausgeliehen) { + this.ausgeliehen = ausgeliehen; } @Override @@ -264,4 +315,9 @@ class Viedeospiel extends Medien{ public int getAusgeliehen() { return ausgeliehen; } + + @Override + public int getAusleizeit() { + return 4; + } } diff --git a/src/main/java/org/example/objekts/kunden.java b/src/main/java/org/example/objekts/kunden.java index bc28f62..d41807b 100644 --- a/src/main/java/org/example/objekts/kunden.java +++ b/src/main/java/org/example/objekts/kunden.java @@ -1,6 +1,6 @@ package org.example.objekts; -import java.util.Date; +import java.time.LocalDate; import java.util.HashMap; public class kunden { @@ -8,7 +8,7 @@ public class kunden { private int nummer; private boolean istStudent; private double schulden; - private HashMap ausgeliehen; + public HashMap ausgeliehen; public kunden(boolean istStudent, int nummer) { this.istStudent = istStudent; @@ -25,7 +25,7 @@ public class kunden { return nummer; } - public HashMap getAusgeliehen() { + public HashMap getAusgeliehen() { return ausgeliehen; } @@ -37,10 +37,6 @@ public class kunden { this.schulden = schulden; } - public void setAusgeliehen(HashMap ausgeliehen) { - this.ausgeliehen = ausgeliehen; - } - public void setIstStudent(boolean istStudent) { this.istStudent = istStudent; } diff --git a/target/classes/org/example/framework/framecreater.class b/target/classes/org/example/framework/framecreater.class index 2b04a7a..4e55c69 100644 Binary files a/target/classes/org/example/framework/framecreater.class and b/target/classes/org/example/framework/framecreater.class differ diff --git a/target/classes/org/example/objekts/Bibiliotek.class b/target/classes/org/example/objekts/Bibiliotek.class index 190ace4..fc72de5 100644 Binary files a/target/classes/org/example/objekts/Bibiliotek.class and b/target/classes/org/example/objekts/Bibiliotek.class differ diff --git a/target/classes/org/example/objekts/Brettspiel.class b/target/classes/org/example/objekts/Brettspiel.class index 5a90df8..87975d4 100644 Binary files a/target/classes/org/example/objekts/Brettspiel.class and b/target/classes/org/example/objekts/Brettspiel.class differ diff --git a/target/classes/org/example/objekts/Buch.class b/target/classes/org/example/objekts/Buch.class index 68ed003..6598512 100644 Binary files a/target/classes/org/example/objekts/Buch.class and b/target/classes/org/example/objekts/Buch.class differ diff --git a/target/classes/org/example/objekts/CD.class b/target/classes/org/example/objekts/CD.class index c97c328..b7b55e3 100644 Binary files a/target/classes/org/example/objekts/CD.class and b/target/classes/org/example/objekts/CD.class differ diff --git a/target/classes/org/example/objekts/DVD.class b/target/classes/org/example/objekts/DVD.class index 8bbfb6a..46a682f 100644 Binary files a/target/classes/org/example/objekts/DVD.class and b/target/classes/org/example/objekts/DVD.class differ diff --git a/target/classes/org/example/objekts/Medien.class b/target/classes/org/example/objekts/Medien.class index ff3c27d..7a24987 100644 Binary files a/target/classes/org/example/objekts/Medien.class and b/target/classes/org/example/objekts/Medien.class differ diff --git a/target/classes/org/example/objekts/Viedeospiel.class b/target/classes/org/example/objekts/Viedeospiel.class index f9c8781..05dc83a 100644 Binary files a/target/classes/org/example/objekts/Viedeospiel.class and b/target/classes/org/example/objekts/Viedeospiel.class differ diff --git a/target/classes/org/example/objekts/kunden.class b/target/classes/org/example/objekts/kunden.class index a696003..ce08c5a 100644 Binary files a/target/classes/org/example/objekts/kunden.class and b/target/classes/org/example/objekts/kunden.class differ