Laborator 6

Lab 6

Problema 1

abstract class Device{

private String information;

public Device(){

information = "";

}

public Device(String information){

this.information = information;

}

public void store(String information){

this.information = information;

}

public String load(){

return information;

}

public abstract String getDevice(Device device);

}

class PhotoDevice extends Device{

public PhotoDevice(String information){

super(information);

}

public void takePicture(){

System.out.println("TakePicture...");

//String picture = ...

//Se va apela this.store(picture) pentru stocarea pozei

}

public String getDevice(Device device){

String result="PhotoDevice";

return result;

}

}

class VideoDevice extends Device{

private String producer;

public VideoDevice(String information, String producer){

super(information);

this.producer = producer;

}

public void film(){

System.out.println("Film...");

//String film = ...

//Se va apela this.store(film) pentru stocarea filmului

}

public String getDevice(Device device){

String result="VideoDevice";

return result;

}

}

class PC{

private String memory = "";

private String registry;

public void store(String information){

memory += information;

registry = information;

}

public String load(){

return registry;

}

}

/*

class USB {

public void transferPCToDevice(PC pc, Device device){

String data;

data = pc.load();

device.store(data);

System.out.println("PC -> Device " + data);

}

public void transferDeviceToPC(PC pc, Device device){

String data;

data = device.load();

pc.store(data);

System.out.println("Device -> PC " + data);

}

}

*/

class USB {

public void transferPCToDevice(PC pc, Device device) {

String data;

data = pc.load();

device.store(data);

/*if (device instanceof PhotoDevice)

System.out.println("PC -> PhotoDevice " + data);

else if (device instanceof VideoDevice)

System.out.println("PC -> VideoDevice " + data);

*/

System.out.println("PC -> "+ device.getDevice(device)+" " +data);

}

}

public class Main {

public static void main(String[] args) {

Device photo, video;

PC pc;

USB usb;

photo = new PhotoDevice("initialPhotoData");

video = new VideoDevice("initialVideoData","company");

pc = new PC();

usb = new USB();

usb.transferPCToDevice(pc, photo);

// usb.transferDeviceToPC(pc, video);

usb.transferPCToDevice(pc,video);

}

}

Problema 2

class B {

public void oMetoda(B b) {

System.out.println("BBBB.oMetoda");

}

//...

}

class D extends B{

public void oMetoda(B b) {

System.out.println("DDDD.oMetoda");

}

//...

}

public class Main {

public static void main(String[] args) {

B b = new B();

B d = new D();

d.oMetoda(b); //Se va afisa DDDD.oMetoda

}

}

Problema 3

import java.io.*;

class listaContribuabili{

private contribuabil[] contribuabili=new contribuabil[10];

private int nr_contribuabili=0;

public listaContribuabili(){

}

public void adaugaContribuabil(contribuabil c1){

if(nr_contribuabili<=contribuabili.length){

contribuabili[nr_contribuabili]=c1;

nr_contribuabili++;

}

else

{

contribuabil[] tmp=new contribuabil[contribuabili.length+10];

for(int i = 0; i <contribuabili.length; i++) {

tmp[i] = contribuabili[i];

}

contribuabili = tmp;

}

}

public contribuabil getContribuabil(String CNP){

for (int i = 0; i < nr_contribuabili; i++) {

if (contribuabili[i].getCNP().equals(CNP)) {

return contribuabili[i];

}

}

return null;

}

}

class contribuabil{

private String nume,CNP;

public contribuabil(String nume, String CNP){

this.nume=nume;

this.CNP=CNP;

}

public String getCNP(){

return CNP;

}

private proprietate[] proprietati=new proprietate[10];

private int nr_proprietati=0;

private float cost;

public void adaugaProprietate(proprietate p1){

if(nr_proprietati<=proprietati.length){

proprietati[nr_proprietati]=p1;

nr_proprietati++;

}

else

{

proprietate[] tmp=new proprietate[proprietati.length+10];

for(int i = 0; i <proprietati.length; i++) {

tmp[i] = proprietati[i];

}

proprietati = tmp;

proprietati[nr_proprietati]=p1;

}

}

public float getCost(){

this.cost=0;

for(int i=0;i<nr_proprietati;i++){

this.cost=this.cost+proprietati[i].cost(proprietati[i].suprafata);

}

return this.cost;

}

public String getFluturas(){

String result="Contribuabil: "+this.nume+"\n\nProprietati:\n";

for(int i=0;i<nr_proprietati;i++){

result=result+proprietati[i].getFluturas();

}

result=result+"\n\nSuma totala: "+getCost();

return result;

}

}

abstract class proprietate{

protected String strada;

protected int nr;

protected float suprafata;

public proprietate(String strada, int nr, float suprafata){

this.strada=strada;

this.nr=nr;

this.suprafata=suprafata;

}

public abstract float cost(float suprafata);

public abstract String getFluturas();

}

class cladire extends proprietate{

public cladire(String strada, int nr, float suprafata){

super(strada,nr,suprafata);

}

public float cost(float suprafata){

return 500*super.suprafata;

}

public String getFluturas(){

String result="";

result=result+"Cladire: Strada "+super.strada+" Nr. "+super.nr+"\n\t\t "+

"Suprafata "+super.suprafata+

"\n\t\t Cost "+cost(super.suprafata)+"\n";

return result;

}

}

class teren extends proprietate{

private int rang;

public teren(String strada, int nr, float suprafata,int rang){

super(strada,nr,suprafata);

this.rang=rang;

}

public float cost(float suprafata){

return 350*super.suprafata/this.rang;

}

public String getFluturas(){

String result="";

result=result+"Teren: Strada "+super.strada+" Nr. "+super.nr+"\n\t\t"+

" Suprafata "+super.suprafata+" Rang "+this.rang +

"\n\t\t Cost "+cost(super.suprafata)+"\n";

return result;

}

}

public class Main {

public static void main(String[] args) {

contribuabil c1 = new contribuabil("Ion Popescu", "123");

proprietate p1 = new cladire("V Parvan", 2, 20);

proprietate p2 = new teren("V Parvan", 2, 10, 1);

proprietate p3 = new cladire("Lugoj", 4, 25);

c1.adaugaProprietate(p1);

c1.adaugaProprietate(p2);

c1.adaugaProprietate(p3);

contribuabil c2=new contribuabil("Geoge Constantinescu","124");

proprietate p11=new cladire("Mihai Viteazul",3,100);

proprietate p22=new teren("Mihai Viteazul",4,150,2);

c2.adaugaProprietate(p11);

c2.adaugaProprietate(p22);

// System.out.println(c2.getFluturas());

listaContribuabili lista=new listaContribuabili();

lista.adaugaContribuabil(c1);

lista.adaugaContribuabil(c2);

System.out.println(lista.getContribuabil("123").getFluturas());

System.out.println(lista.getContribuabil("124").getFluturas());

try{

InputStreamReader inputKeyboard = new InputStreamReader(System.in);

BufferedReader buffKeyboard = new BufferedReader(inputKeyboard);

System.out.print("\nCNP-ul contribuabilului:");

String CNP = buffKeyboard.readLine();

if((lista.getContribuabil(CNP))==null)

System.out.println("Contribuabilul nu exista");

else

System.out.println(lista.getContribuabil(CNP).getFluturas());

}catch(IOException e){

System.out.println("Something is wrong");

}

}

}

Problema 4

class Tren{

private static final maxVagoane=15;

private Vagon[] vagoane=new Vagon[maxVagoane];

private int nrVagoane=0;

public Tren(){

}

public void adaugareVagon(Vagon v1){

if(nrVagoane<vagoane.length){

vagoane[nrVagoane]=v1;

nrVagoane++;

}

}

private int getColete(){

int nrColete=0;

for(int i=0;i<nrVagoane;i++)

nrColete=nrColete+vagoane[i].getColete();

return nrColete;

}

public boolean equals(Object o) {

if(o instanceof Tren)

return (((Tren)o).getColete() == getColete());

else

return false;

}

public String toString(){

String s="Tren: ";

for(int i=0;i<nrVagoane;i++)

s=s+vagoane[i];

return s;

}

}

abstract class Vagon {

abstract public int getColete();

}

abstract class Calatori extends Vagon{

abstract public int getCalatori();

public void deschidere(){

System.out.println("Usile se deschid");

}

public void inchidere(){

System.out.println("Usile se inchid");

}

}

class CalatoriA extends Calatori{

public int getCalatori(){

return 40;

}

public int getColete(){

return 300;

}

public String toString(){

String s="CalatoriA ";

return s;

}

}

class CalatoriB extends Calatori{

public int getCalatori(){

return 50;

}

public int getColete(){

return 400;

}

public void blocareGeam(){

System.out.println("Geamurile s-au blocat");

}

public String toString(){

String s="CalatoriB ";

return s;

}

}

class Marfa extends Vagon{

public int getColete(){

return 400;

}

public String toString(){

String s="Marfa ";

return s;

}

}

public class Main{

public static void main(String[] args){

Tren t1=new Tren();

Vagon v1=new CalatoriA();

Vagon v2=new CalatoriB();

Vagon v3=new Marfa();

t1.adaugareVagon(v1);

t1.adaugareVagon(v2);

t1.adaugareVagon(v3);

Tren t2=new Tren();

Vagon v4=new CalatoriA();

Vagon v5=new CalatoriA();

Vagon v6=new Marfa();

t2.adaugareVagon(v4);

t2.adaugareVagon(v5);

t2.adaugareVagon(v6);

System.out.println(t1);

System.out.println(t2);

System.out.println(t1.equals(t2));

((CalatoriA)v1).deschidere();

((CalatoriA)v1).inchidere();

((CalatoriB)v2).blocareGeam();

}

}

Problema 5

abstract class Greutate {

abstract public int capacitate();

}

class GreutateSimpla extends Greutate {

private int capacitate=0;

public GreutateSimpla(int capacitate){

this.capacitate=capacitate;

}

public int capacitate(){

return this.capacitate;

}

}

class GreutateDubla extends Greutate {

private Greutate greutate1, greutate2;

public GreutateDubla(Greutate g1, Greutate g2){

this.greutate1=g1;

this.greutate2=g2;

}

public void setGreutate1(Greutate g){

this.greutate1=g;

}

public void setGreutate2(Greutate g){

this.greutate2=g;

}

public int capacitate(){

return this.greutate1.capacitate()+this.greutate2.capacitate();

}

}

class GreutateMultipla extends Greutate {

private Greutate[] lantGreutati=new Greutate[10];

private int nrGreutati=0;

public GreutateMultipla(Greutate[] g){

this.adaugaGreutate(g);

}

public void adaugaGreutate(Greutate g){

if(nrGreutati<=lantGreutati.length){

lantGreutati[nrGreutati]=g;

nrGreutati++;

}

else{

Greutate[] tmp=new Greutate[lantGreutati.length+10];

for(int i=0;i<lantGreutati.length;i++){

tmp[i]=lantGreutati[i];

}

lantGreutati=tmp;

lantGreutati[nrGreutati]=g;

nrGreutati++;

}

}

public void adaugaGreutate(Greutate[] g){

for(int i=0;i<g.length;i++){

this.adaugaGreutate(g[i]);

}

}

public int capacitate(){

int capacitate=0;

for(int i=0;i<nrGreutati;i++)

capacitate=capacitate+lantGreutati[i].capacitate();

return capacitate;

}

}

class ColectieGreutati{

private Greutate[] colectie=new Greutate[10];

private int nrGreutati=0;

private int nrMaxGreutati;

public ColectieGreutati(int nrMaxGreutati){

this.nrMaxGreutati=nrMaxGreutati;

}

public void adaugaGreutate(Greutate g){

if(nrGreutati<=nrMaxGreutati){

this.colectie[nrGreutati]=g;

nrGreutati++;

}

else{

System.out.println("Numarul maxim de greutati din colectie a fost deja atins!\n");

}

}

public void adaugaGreutate(Greutate[] g){

for(int i=0;i<g.length;i++)

this.adaugaGreutate(g[i]);

}

public int capacitate(){

int capacitate=0;

for(int i=0;i<nrGreutati;i++)

capacitate=capacitate+colectie[i].capacitate();

return capacitate;

}

public double medie(){

return this.capacitate()/this.nrGreutati;

}

}

public class Main {

public static void main(String[] args) {

Greutate gs1 = new GreutateSimpla(10);

Greutate gs2 = new GreutateSimpla(20);

Greutate gd = new GreutateDubla(gs1, gs2);

Greutate gm = new GreutateMultipla(new Greutate[]{gs1, gs2, gd});

Greutate[] greutati={gs1,gs2,gd,gm};

ColectieGreutati c1=new ColectieGreutati(100);

c1.adaugaGreutate(greutati);

System.out.println("Capacitate colectie:"+c1.capacitate());

System.out.println("Media colectiei: "+c1.medie());

}

}