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);
}
}