Sunteți pe pagina 1din 14

package laborator5;

public class ArticolComanda extends Produs {

Produs produs;

Double cantitate;

/* Responsabilitate/Comportament articol: calcul valoare*/

Double calculValoare(){

Double valoare = null; // initializare variabila fara atribuire valoare-ref

// access intern membri-variabile de instanta

// valoare = produs.pretUnitar * cantitate;

/* formula initiala se modifica usor pentru a permite calculul valorii

* in conditii valide: trebui sa existe un produs cu o cantitate

*/

if (produs != null && cantitate !=null)

valoare = produs.pretUnitar * cantitate;

return valoare;

/* Formalizare proprietate valoare ????

* set produs set cantitate => valoare noua

* access valoare get: if null then calcul

* */

/* Variabila de instanta valoareArticol

* - va stoca rezultatul calculValoare

* - nu va fi accesibila direct (private):

* - e posibil ca sa nu fie initializata;

* */
private Double valoareArticol;

public Double getValoareArticol(){

if (valoareArticol == null)

valoareArticol = calculValoare();

return valoareArticol;

/* - Metodele/Operatiile get/set transforma atributele produs si cantitate in proprietati

* - Modificarea proprietatilor produs si cantitate tb sa produca automat actualizarea

* atributului valoareArticol accesibil ca si proprietate (get).

* - Atributul valoareArticol nu are asociata si metoda set fiindca este o valoare

* calculata, adica nu va fi modificata direct din exterior

* - Generare get/set pentru expunerea atributelor ca si proprietati:

* Source/Generate getters and setters

* */

public Produs getProdus() {

return produs;

public void setProdus(Produs produs) {

this.produs = produs;

valoareArticol = calculValoare();

public Double getCantitate() {

return cantitate;

public void setCantitate(Double cantitate) {

this.cantitate = cantitate;

valoareArticol = calculValoare();

}
/*

* Incapsulare procedura de initializare in constructor

* Source/Generate constructor using fields

*/

public ArticolComanda(Produs produs, Double cantitate) {

super();

this.produs = produs;

this.cantitate = cantitate;

/*

* Introducere explicita constructor default

* (rezolvare erori compilare pentru initializare explicita utilizata)

*/

public ArticolComanda() {

super();

@Override

public String toString() {

return "ArticolComanda [produs=" + produs + ", cantitate=" + cantitate + "]";

package laborator5;

import java.util.ArrayList;
import java.util.List;

public class CampaniePromotionala {

Integer idCampanie;

private List<Promotie> promotii = new ArrayList<>();

Double valoareComandaCuDiscount;

public CampaniePromotionala() {

super();

public List<Promotie> getPromotii() {

return promotii;

public void setPromotii(List<Promotie> promotii) {

this.promotii = promotii;

public Double getValoareComandaCuDiscount(Comanda comanda) {

Double valoareCuDiscount=0.0;

for(Promotie promotie:promotii) {

for (ArticolComanda articol:comanda.getArticole())

if(promotie.getProdus().equals(articol.getProdus()))
valoareCuDiscount+=promotie.getValoareDiscount(articol.cantitate);

return comanda.getValoareTotala()- valoareCuDiscount;

public void setValoareComandaCuDiscount(Double valoareComandaCuDiscount) {

this.valoareComandaCuDiscount = valoareComandaCuDiscount;

public CampaniePromotionala(Integer idCampanie) {

super();

this.idCampanie = idCampanie;

public Integer getIdCampanie() {

return idCampanie;

public void setIdCampanie(Integer idCampanie) {

this.idCampanie = idCampanie;

public void adaugaPromotie(Promotie promotie) {

this.promotii.add(promotie);

}
package laborator5;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

public class Comanda extends ArticolComanda {

private Date dataComanda = new Date();

private List<ArticolComanda> articole = new ArrayList<ArticolComanda>();

/* Generare getteri si setteri */

public Date getDataComanda() {

return dataComanda;

public void setDataComanda(Date dataComanda) {

this.dataComanda = dataComanda;

public List<ArticolComanda> getArticole() {

return articole;

public void setArticole(List<ArticolComanda> articole) {

this.articole = articole;

/* Generare constructor */

public Comanda() {

}
/* Adaugare operatie manipulare detalii colectie*/

public void adaugaArticol(ArticolComanda articol){

articole.add(articol);

/* Adaugare proprietate valoare totala*/

private Double valoareTotala;

private void calculValoareTotala(){

valoareTotala = 0.0;

for (ArticolComanda articol: articole)

valoareTotala += articol.getValoareArticol();

public Double getValoareTotala(){

if (valoareTotala == null)

calculValoareTotala();

return valoareTotala;

/* Adaugare metoda info */

public String toString(){

String mesajRezultat = "articole: ";

for(ArticolComanda articol: articole)

mesajRezultat += "cantitate: " + articol.getCantitate() + " - denumire: " +

articol.getProdus().getDenumire() + " ... ";

mesajRezultat += " valoreaza: " + getValoareTotala() + " lei";

return mesajRezultat;

}
}

package laborator5;

public class Produs {

Integer idProdus;

String denumire;

Double pretUnitar;

public Produs(Integer idProdus, String denumire, Double pretUnitar) {

super();

this.idProdus = idProdus;

this.denumire = denumire;

this.pretUnitar = pretUnitar;

public Integer getIdProdus() {

return idProdus;

public void setIdProdus(Integer idProdus) {

this.idProdus = idProdus;

public String getDenumire() {

return denumire;

public void setDenumire(String denumire) {

this.denumire = denumire;
}

public Double getPretUnitar() {

return pretUnitar;

public void setPretUnitar(Double pretUnitar) {

this.pretUnitar = pretUnitar;

public Produs() {

package laborator5;

public abstract class Promotie {

Integer idPromotie;

Produs produs;

public Promotie(Integer idPromotie, Produs produs) {

super();

this.idPromotie = idPromotie;

this.produs = produs;

public Integer getIdPromotie() {

return idPromotie;

public void setIdPromotie(Integer idPromotie) {

this.idPromotie = idPromotie;
}

public Produs getProdus() {

return produs;

public void setProdus(Produs produs) {

this.produs = produs;

public Promotie() {

public abstract Double getValoareDiscount(Double cantitate);

package laborator5;

public class PromotieCantitate extends Promotie {

Integer pragCantitate;

Integer cantitateGratuitati;

Double valoareDiscount;

public PromotieCantitate(Integer idPromotie, Produs produs, Double valoareDiscount) {

super(idPromotie, produs);

this.valoareDiscount = valoareDiscount;

public Double getValoareDiscount(Double cantitate) {

if(cantitate>pragCantitate)

return (cantitate/pragCantitate)*cantitateGratuitati*this.produs.getPretUnitar();

return 0.0;

public void setValoareDiscount(Double valoareDiscount) {


this.valoareDiscount = valoareDiscount;

public PromotieCantitate(Integer idPromotie, Produs produs, Integer pragCantitate, Integer


cantitateGratuitati) {

super(idPromotie, produs);

this.pragCantitate = pragCantitate;

this.cantitateGratuitati = cantitateGratuitati;

public Integer getPragCantitate() {

return pragCantitate;

public void setPragCantitate(Integer pragCantitate) {

this.pragCantitate = pragCantitate;

public Integer getCantitateGratuitati() {

return cantitateGratuitati;

public void setCantitateGratuitati(Integer cantitateGratuitati) {

this.cantitateGratuitati = cantitateGratuitati;

public PromotieCantitate(Integer idPromotie, Produs produs) {

super(idPromotie, produs);

}
public PromotieCantitate() {

package laborator5;

public class PromotieValoare extends Promotie {

Double pragValoare;

Double procentReducere;

public PromotieValoare(Integer idPromotie, Produs produs, Double pragValoare, Double procentReducere)


{

super(idPromotie, produs);

this.pragValoare = pragValoare;

this.procentReducere = procentReducere;

public Double getPragValoare() {

return pragValoare;

public void setPragValoare(Double pragValoare) {

this.pragValoare = pragValoare;

public Double getProcentReducere() {

return procentReducere;

public void setProcentReducere(Double procentReducere) {


this.procentReducere = procentReducere;

public PromotieValoare(Integer idPromotie, Produs produs) {

super(idPromotie, produs);

public PromotieValoare() {

super();

@Override

public Double getValoareDiscount(Double cantitate) {

Double valoareAchizitie=produs.getPretUnitar()*cantitate;

if(valoareAchizitie>pragValoare)

return valoareAchizitie*procentReducere;

return null;

package laborator5;

public class Test {

public Test() {

public static void main(String[] args) {


//produse

Produs p1 = new Produs(1, "", 0.0);

Produs p2=new Produs(2,"",67.0);

// comanda

Comanda comanda=new Comanda();

comanda.adaugaArticol(new ArticolComanda(p1,10.9));

comanda.adaugaArticol(new ArticolComanda(p2, 8.0));

System.out.println("valoare comanda: "+comanda.getValoareTotala());

// reduceri promotii cantitate

CampaniePromotionala c1=new CampaniePromotionala();

c1.adaugaPromotie(new PromotieCantitate(1, p1,5,1));

c1.adaugaPromotie(new PromotieCantitate(2,p2,6,2));

System.out.println("valoare cu discount cantitate:


"+c1.getValoareComandaCuDiscount(comanda));

// reduceri promotii valoare

CampaniePromotionala c2=new CampaniePromotionala();

c2.adaugaPromotie(new PromotieValoare(3,p1,3000.00,0.2));

c2.adaugaPromotie(new PromotieValoare(4,p1,2000.00,0.33));

// creati/adaugati promotii valoare in campania c2

System.out.println("Valoare cu discount: "+c2.getValoareComandaCuDiscount(comanda));

S-ar putea să vă placă și