Problema 31

import java.util.*;

class SistemSoftware{

private ArrayList<Fisier>fisiere=new ArrayList<Fisier>();

public void add(Fisier fisier){

fisiere.add(fisier);

}

public int getNumarFisiere(){

return fisiere.size();

}

public int getNumarClase(){

int result=0;

for(int i=0;i<fisiere.size();i++)

result=result+fisiere.get(i).getNumarClase();

return result;

}

private HashSet<String> getAutoriDistincti(){

ArrayList<String>autori=new ArrayList<>();

for(int i=0;i<fisiere.size();i++)

autori.add(fisiere.get(i).getAutor());

HashSet<String>tmp=new HashSet<String>(autori);

return tmp;

}

public int getNumarAutoriDistincti(){

return getAutoriDistincti().size();

}

public String toString(){

String result="Sistem software:\nNumar fisiere: "+getNumarFisiere()+"\n";

HashSet<String>tmp=getAutoriDistincti();

Iterator<String>it=tmp.iterator();

while(it.hasNext()){

String aux=it.next();

result=result+"Nume autor: "+aux+"\n\tFisiere scrise:\n";

for(int i=0;i<fisiere.size();i++)

if(aux.equals(fisiere.get(i).getAutor()))

result=result+fisiere.get(i).getNumeFisier()+"\n";

}

return result;

}

}

class Fisier{

private LinkedList<Clasa>clase=new LinkedList<Clasa>();

private String numeFisier, autor;

public Fisier(String numeFisier, String autor){

this.numeFisier=numeFisier;

this.autor=autor;

}

public void add(Clasa clasa){

clase.add(clasa);

}

public int getNumarBuguri(){

int result=0;

for(int i=0;i<clase.size();i++)

result=result+clase.get(i).getNumarBuguri();

return result;

}

public int getNumarClase(){

return clase.size();

}

public String getAutor(){

return this.autor;

}

public String getNumeFisier(){

return this.numeFisier;

}

}

class Clasa{

private int numarLiniiCod;

private String numeClasa;

private LinkedList<Bug>bugs=new LinkedList<Bug>();

public Clasa(int numarLiniiCod, String numeClasa){

this.numarLiniiCod=numarLiniiCod;

this.numeClasa=numeClasa;

}

public void add(Bug bug){

bugs.add(bug);

}

public int getNumarLiniiCod() {

return numarLiniiCod;

}

public int getNumarBuguri(){

return bugs.size();

}

}

class Bug{

private String referinta;

public Bug(String referinta){

this.referinta=referinta;

}

protected String getReferinta(){

return this.referinta;

}

}

class NullBug extends Bug{

public NullBug(String referinta){

super(referinta);

}

public String toString(){

return "NullBug: "+super.getReferinta()+"\n";

}

}

class CastBug extends Bug{

private String tipInitial, tipDestinatie;

public CastBug(String referinta, String tipInitial, String tipDestinatie){

super(referinta);

this.tipInitial=tipInitial;

this.tipDestinatie=tipDestinatie;

}

public String toString(){

return "CastBug: "+super.getReferinta()+" "+tipInitial+" "+tipDestinatie+"\n";

}

}

public class Main {

public static void main(String[] args) {

Bug bug1=new CastBug("Referinta1","Initial1","Destinatie1");

Bug bug2=new NullBug("Referinta2");

Clasa clasa1=new Clasa(20,"Numeclasa1");

Clasa clasa2=new Clasa(25,"NumeClasa2");

clasa1.add(bug1);

clasa2.add(bug2);

Fisier fisier1=new Fisier("NumeFisier1","Autor1");

Fisier fisier2=new Fisier("NumeFisier2","Autor1");

Fisier fisier3=new Fisier("NumeFisier3","Autor2");

fisier1.add(clasa1);

fisier1.add(clasa2);

fisier2.add(clasa1);

fisier2.add(clasa2);

SistemSoftware sistem1=new SistemSoftware();

sistem1.add(fisier1);

sistem1.add(fisier2);

sistem1.add(fisier3);

System.out.println("Numar clase:"+sistem1.getNumarClase()+"\n"+sistem1.toString());

}

}