package LAB6bun; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.time.LocalDate; import java.util.Vector; import java.util.stream.Collectors; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { int optiune; BufferedReader buf= new BufferedReader(new InputStreamReader(System.in)); Vector banci=new Vector(); String denumire; do { System.out.println("0"); System.out.println("1"); System.out.println("2"); System.out.println("3"); System.out.println("4"); System.out.println("5"); System.out.println("6"); System.out.println("7"); System.out.println("8"); System.out.println("9"); System.out.println("10"); System.out.println("11"); System.out.println("Optiunea dvs. este:"); optiune=Integer.parseInt(buf.readLine()); switch(optiune) { case 0:System.exit(0); break; case 1: System.out.println("Dati denumireae bancii:"); denumire=buf.readLine(); Banca banca=new Banca(denumire); banci.add(banca); break; case 2: System.out.println("nume:"); String nume; nume=buf.readLine(); System.out.println("adresa:"); String adresa=buf.readLine(); System.out.println("Banca:"); String ba=buf.readLine(); Client client=new Client(nume,adresa); for(Banca b: banci) { if(b.getDenumire_banca().equals(ba)) { b.getClienti().add(client); } } break; case 3: System.out.println("numar:"); String numar=buf.readLine(); System.out.println("Suma:"); float suma=Float.parseFloat(buf.readLine()); System.out.println("Moneda"); Moneda m=Moneda.valueOf(buf.readLine()); System.out.println("Data deschiderii"); LocalDate d1=LocalDate.parse(buf.readLine()); System.out.println("Data ultimei operatiuni:"); LocalDate d2=LocalDate.parse(buf.readLine()); System.out.println("Client:"); String clientul=buf.readLine(); System.out.println("Banca"); String b2=buf.readLine(); ContBancar cont=new ContBancar(numar,suma,m,d1,d2); for(Banca b:banci) { if(b.getDenumire_banca().equals(b2)) { for(Client c:b.getClienti()) { if(c.getNume().equals(clientul)) { c.getConturi().add(cont); } } } } break; case 4: banci.forEach(System.out::println); break; case 5: banci .stream() .flatMap(e->Stream.of(e.getDenumire_banca(),e.getClienti().size())) .forEach(System.out::println); break; case 6: System.out.println("Banca:"); String b3=buf.readLine(); banci .stream() .filter(a->(a.getDenumire_banca().equals(b3))) .map(Banca::getClienti) .forEach(System.out::println); break; case 7: System.out.println("Banca:"); String b4=buf.readLine(); System.out.println("Client:"); String c2=buf.readLine(); banci .stream() .filter(a->(a.getDenumire_banca().equals(b4))) .flatMap(b->b.getClienti() .stream() .filter(c->(c.getNume().equals(c2))) .map(c->c.getConturi())) .forEach(System.out::println); break; case 8: System.out.println("Nume:"); String n=buf.readLine(); banci .stream() .flatMap(b->b.getClienti() .stream() .filter(c->(c.getNume().equals(n))) .map(c->c.getConturi())) .forEach(System.out::println); break; case 9: System.out.println("Banca:"); b4=buf.readLine(); System.out.println("Client:"); c2=buf.readLine(); System.out.println("Cont:"); String con=buf.readLine(); System.out.println("Suma:"); float s=Float.parseFloat(buf.readLine()); for(Banca b:banci) { if(b.getDenumire_banca().equals(b4)) { for(Client c:b.getClienti()) { if(c.getNume().equals(c2)) { for(ContBancar cb : c.getConturi()) { if(cb.getNumarCont().equals(con)) { cb.depunere(s); } } } } } } break; case 10: System.out.println("Banca:"); b4=buf.readLine(); System.out.println("Client:"); c2=buf.readLine(); System.out.println("Cont:"); con=buf.readLine(); System.out.println("Suma:"); s=Float.parseFloat(buf.readLine()); for(Banca b:banci) { if(b.getDenumire_banca().equals(b4)) { for(Client c:b.getClienti()) { if(c.getNume().equals(c2)) { for(ContBancar cb : c.getConturi()) { if(cb.getNumarCont().equals(con)) { cb.extragere(s); } } } } } } break; case 11: System.out.println("Datele contului din care se extrag bani"); System.out.println("Banca:"); b4=buf.readLine(); System.out.println("Client:"); c2=buf.readLine(); System.out.println("Cont:"); con=buf.readLine(); System.out.println("Suma:"); s=Float.parseFloat(buf.readLine()); System.out.println("Datele contului in care se trimit bani"); System.out.println("Banca:"); String b5=buf.readLine(); System.out.println("Client:"); String c3=buf.readLine(); System.out.println("Cont:"); String con2=buf.readLine(); for(Banca b:banci) { if(b.getDenumire_banca().equals(b4)) { for(Client c:b.getClienti()) { if(c.getNume().equals(c2)) { for(ContBancar cb : c.getConturi()) { if(cb.getNumarCont().equals(con)) { cb.extragere(s); } } } } } } for(Banca b:banci) { if(b.getDenumire_banca().equals(b5)) { for(Client c:b.getClienti()) { if(c.getNume().equals(c3)) { for(ContBancar cb : c.getConturi()) { if(cb.getNumarCont().equals(con2)) { cb.depunere(s); } } } } } } break; default:System.out.println("Optiune gresita!!!!"); } }while(optiune!=0); } } package LAB6bun; import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class ContBancar implements Operatiuni { private String numarCont; private float suma; private Moneda moneda; private LocalDate data_deschiderii; private LocalDate data_ultimei_operatiuni; public ContBancar(String numarCont, float suma, Moneda moneda, LocalDate data_deschiderii, LocalDate data_ultimei_operatiuni) { super(); this.numarCont = numarCont; this.suma = suma; this.moneda = moneda; this.data_deschiderii = data_deschiderii; this.data_ultimei_operatiuni = data_ultimei_operatiuni; } public String getNumarCont() { return numarCont; } public void setNumarCont(String numarCont) { this.numarCont = numarCont; } public float getSuma() { return suma; } public void setSuma(float suma) { this.suma = suma; } public Moneda getMoneda() { return moneda; } public void setMoneda(Moneda moneda) { this.moneda = moneda; } public LocalDate getData_deschiderii() { return data_deschiderii; } public void setData_deschiderii(LocalDate data_deschiderii) { this.data_deschiderii = data_deschiderii; } public LocalDate getData_ultimei_operatiuni() { return data_ultimei_operatiuni; } public void setData_ultimei_operatiuni(LocalDate data_ultimei_operatiuni) { this.data_ultimei_operatiuni = data_ultimei_operatiuni; } @Override public String toString() { return "[numarCont=" + numarCont + ", suma=" + suma + ", moneda=" + moneda + ", data_deschiderii=" + data_deschiderii + ", data_ultimei_operatiuni=" + data_ultimei_operatiuni + "]"; } @Override public float calculeaza_dobanda() { float dobanda=0; if(this.moneda==Moneda.RON) { if(this.suma<500) { dobanda=(float) (0.3*(ChronoUnit.DAYS.between(this.data_ultimei_operatiuni, LocalDate.now()))); } else {dobanda=(float) (0.8*(ChronoUnit.DAYS.between(this.data_ultimei_operatiuni, LocalDate.now()))); } } else { dobanda=(float) (0.1*(ChronoUnit.DAYS.between(this.data_ultimei_operatiuni, LocalDate.now()))); } return dobanda; } @Override public float actualizare_suma() { this.suma+=calculeaza_dobanda(); this.data_ultimei_operatiuni=LocalDate.now(); return this.suma; } @Override public void depunere(float suma) { actualizare_suma(); this.data_ultimei_operatiuni=LocalDate.now(); this.suma+=suma; } @Override public void extragere(float suma) { actualizare_suma(); this.data_ultimei_operatiuni=LocalDate.now(); this.suma-=suma; } } package LAB6bun; public enum Moneda { RON, EURO; } package LAB6bun; public interface Operatiuni { public float calculeaza_dobanda(); public float actualizare_suma(); public void depunere(float suma); public void extragere(float suma); } package LAB6bun; import java.util.HashSet; import java.util.Set; public class Client { private String nume; private String adresa; private Set conturi=new HashSet(); public Client(String nume, String adresa) { super(); this.nume = nume; this.adresa = adresa; } public String getNume() { return nume; } public void setNume(String nume) { this.nume = nume; } public String getAdresa() { return adresa; } public void setAdresa(String adresa) { this.adresa = adresa; } public Set getConturi() { return conturi; } public void setConturi(Set conturi) { this.conturi = conturi; } public Client(String nume, String adresa, Set conturi) { super(); this.nume = nume; this.adresa = adresa; this.conturi =conturi; } @Override public String toString() { return "[nume=" + nume + ", adresa=" + adresa + ", conturi=" + conturi + "]"; } } package LAB6bun; import java.util.ArrayList; import java.util.List; public class Banca { private String denumire_banca; private List clienti=new ArrayList(); public Banca(String denumire_banca, List clienti) { super(); this.denumire_banca = denumire_banca; this.clienti = clienti; } public Banca(String denumire_banca) { super(); this.denumire_banca = denumire_banca; } public String getDenumire_banca() { return denumire_banca; } public void setDenumire_banca(String denumire_banca) { this.denumire_banca = denumire_banca; } public List getClienti() { return clienti; } public void setClienti(List clienti) { this.clienti = clienti; } @Override public String toString() { return "Banca [denumire_banca=" + denumire_banca + ", clienti=" + clienti + "]"; } }