Societati

Se considera urmatoarea ierahie de clase:

A. Clasa Inteprindere contine:

    • -informatii referitoare la o inteprindere, cum ar fi numele, setat la creearea obiectelor

    • -un atribut de tip real corespunzator capitalului social al inteprinderii

    • -o metoda investeste care are un parametru de tip intreg si updateaza corespunzator atributul capitalului social( a carei implementari depinde de tipul concret al inteprinderii)

    • -o metoda corespunzatoare pentru afisarea informatiilor generale ale firmei precum numele si capitalul social

B. Clasa SocietateRaspundereLimitata:

    • -are capitalul social initial setat pe 0

    • -contine metoda investeste care functioneaza in felul urmator: se genereaza un numar aleator intre 0 si 1; daca acest numar este mai mic decat 0.5 se afiseaza pe ecran mesajul "investitie esuata", iar in caz contrar se adauga la capitalul social 2*valoarea intreaga primita ca parametru

    • -contine reimplementarea metodei de afisare care va reprezenta obiectul sub forma sirului de caractere "SocietateRaspundereLimitata" urmat de informatiile generale

C. Clasa SocietateActiuni:

    • -are capitalul social setat prin constructor

    • -contine inca un atribut de tip intreg corespunzator numarului de actionari setat prin constructor

    • -contine metoda investeste care functioneaza in felul urmator: se genereaza un numar aleator intre 0 si 1; daca acest numar este mai mic decat 0.5 se afiseaza pe ecran mesajul "investitie esuata", iar in caz contrar se adauga la capitalul social 10*valoarea intreaga primita ca parametru/ numarul de actionari

    • -contine reimplementarea metodei de afisare care va reprezenta obiectul sub forma sirului de caractere "SocietateActiuni" si numarul de actionari urmat de informatiile generale

Clasa Piata:

    • -contine un atribut de tip sir de caractere corespunzator numelui pietei, setat la creare

    • -contine un vector in care vor fi stocate inteprinderi( inteprinderile componente sunt date prin constructor)

    • -o metoda investesteSuma care primeste ca parametrii doi intregi reprezentand pozitia unei inteprinderi in piata(index), respectiv o suma de bani(suma). Metoda apeleaza metoda investeste cu parametrul suma pe inteprinderea aflata pe pozitia index(modulo numarul de inteprinderi)

    • -o metoda pentru afisarea sub forma de sir de caractere a pietei, sir compus din reprezentarea sub forma de sir a fiecarei inteprinderi continute si numele pietei

Sa se implementeze ierarhia descrisa anterior si sa se demonstreze functionarea ei prin creearea a doua piete fiecare cu doua inteprinderi(minim una din ficare tip), apelarea metodei investesteSuma pentru fiecare dintre cele doua piete si afisarea lor.

abstract class Inteprindere{

private String nume;

private double capitalSocial;

public Inteprindere(String nume){

this.nume=nume;

}

public abstract void investeste(int invest);

public String toString(){

return "Numele inteprinderii: "+this.nume+"\nCapital social: "+this.capitalSocial;

}

protected String getNume(){

return this.nume;

}

protected void setCapitalSocial(double capitalSocial){

this.capitalSocial=capitalSocial;

}

protected double getCapitalSocial(){

return this.capitalSocial;

}

}

class SocietateRaspundereLimitata extends Inteprindere{

public SocietateRaspundereLimitata(String nume){

super(nume);

super.setCapitalSocial(0);

}

public void investeste(int invest){

double luck=Math.random();

if(luck<0.5){

System.out.println("Investitie esuata");

}

else{

super.setCapitalSocial(getCapitalSocial()+2*invest);

}

}

public String toString(){

return "\nSocietateRaspundereLimitata: "+getNume()+"\nCapital social: "+super.getCapitalSocial();

}

}

class SocietateActiuni extends Inteprindere{

private int nrActionari;

public SocietateActiuni(String nume,double capitalSocial,int nrActionari){

super(nume);

super.setCapitalSocial(capitalSocial);

this.nrActionari=nrActionari;

}

public void investeste(int invest){

double luck=Math.random();

if(luck<0.5){

System.out.println("Investitie esuata");

}

else{

if(nrActionari!=0) {

super.setCapitalSocial(getCapitalSocial()+10*invest/nrActionari);

}

else{

System.out.println("Nu exista actionari!");

}

}

}

public String toString(){

return "SocietateActiuni:\nNr actionari: "+this.nrActionari+"\nCapital social: "+super.getCapitalSocial();

}

}

class Piata{

private String nume;

private Inteprindere[] inteprinderi;

private int nrInteprinderi=0;

public Piata(String nume, Inteprindere[] inteprinderi){

this.nume=nume;

this.inteprinderi=new Inteprindere[inteprinderi.length];

adaugaInteprindere(inteprinderi);

}

private void adaugaInteprindere(Inteprindere[] inteprinderi){

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

if(inteprinderi[i]!=null) {

if (nrInteprinderi == this.inteprinderi.length) {

Inteprindere[] tmp = new Inteprindere[this.inteprinderi.length + 10];

for (int j = 0; j < nrInteprinderi; j++)

tmp[i] = this.inteprinderi[j];

inteprinderi = tmp;

}

this.inteprinderi[nrInteprinderi]=inteprinderi[i];

nrInteprinderi++;

}

else{

System.out.println("Inteprinderea nu a putut fi adaugata");

break;

}

}

}

public void investesteSuma(int pozitie, int suma){

if(nrInteprinderi!=0) {

this.inteprinderi[pozitie % nrInteprinderi].investeste(suma);

}

else{

System.out.println("Nu se poate efectua investitia");

}

}

public String toString(){

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

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

result=result+inteprinderi[i].toString();

return result;

}

}

public class Main {

public static void main(String[] args) {

Piata p1=new Piata("Nr.1",new Inteprindere[]{new SocietateActiuni("Actiuni 1",1000,2),

new SocietateRaspundereLimitata("Limita 1")});

Piata p2=new Piata("Nr.2",new Inteprindere[]{new SocietateActiuni("Actiuni 2",2400,3),

new SocietateRaspundereLimitata("Limita 2")});

p1.investesteSuma(2,200);

p2.investesteSuma(2,250);

System.out.println(p1);

System.out.println(p2);

}

}