Sunteți pe pagina 1din 5

Universitatea Al.I.

Cuza Iai Facultatea de Economie i Administrarea Afacerilor Catedra de Informatic Economic SUBIECTE PENTRU EXAMEN LA DISCIPLINA PROGRAMARE II NR: 1 Data ____________ STUDENT_________________________________ Grupa ___________ S1: Argumentai diferenele dintre urmtoarele perechi de noiuni: a) Collection vs. List b) Membru-variabil de instan vs. membru-operaie n dou sau trei fraze pentru fiecare subpunct plus, eventual, un exemplu practic simplu. S2: Lund n considerare urmtorul enun: operaiunile contabile presupun un numr de nregistrri ce consemneaz debitarea sau creditarea cu anumite sume a unor conturi, de exemplu: achiziionarea unor bunuri presupune nregistrari contabile pentru creditarea contului de furnizori(411) i denitarea contului pentru produsele sau materiile prime achizitionate(301). (figura urmtoare prezint entitile implicate n modelul corespunztor cerinelor de mai sus).

Se presupune urmtorul schelet al unei clasei ServiciuContabilitate: public class ServiciuContabilitate { private Map<String, Cont> planContabil = new HashMap<String, Cont>(); private List<OperatiuneContabila> jurnal

= new ArrayList<OperatiuneContabila>(); public ServiciuContabilitate(){} public ServiciuContabilitate(Map<String, Cont> planContabil){ this.setPlanContabil(planContabil); } public Map<String, Cont> getPlanContabil() { return planContabil; } public void setPlanContabil(Map<String, Cont> planContabil) { this.planContabil = planContabil; } public List<OperatiuneContabila> getJurnal() { return jurnal; } public void setJurnal(List<OperatiuneContabila> jurnal) { this.jurnal = jurnal; } public void adaugaOperatiuneContabila(OperatiuneContabila op){ if (jurnal.contains(op)){ int indexOp = jurnal.indexOf(op); jurnal.set(indexOp, op); }else{ jurnal.add(op); } } public void adaugaCont(Cont cont){ planContabil.put(cont.getCod(), cont); } public Double getRulajCreditor(Cont cont){ /* ... ... ... */ } public Double getRulajDebitor(Cont cont){ Double rulaj = .0; for (OperatiuneContabila op: jurnal){ for(InregistrareContabila i: op.getInregistrari()){ if (i instanceof InregistrareDebit && cont.equals(i.getCont())) rulaj += i.getSuma(); } } return rulaj; } public Double getSoldFinal(Cont cont){ /* ... ... ... */} }

innd seama c membrul jurnal reprezint o colecie de tip List de elemente OperaiuneContabil, iar membrul planContabil reprezint o colecie de tip Map coninnd drept valori (values) element de tip ContContabil indexate dup chei (key) reprezentnd codul contului, se cere: a) descriei scopul operaie getRulajDebitor() i modul de realizare al acestuia; b) implementai metodele getRulajCreditor(), getSoldFinal(); c) completai urmtorul test astfel nct s poat fi realizate: adaugarea unei operatii de plata (debit 401, credit 5121), adaugare unui cont pentru client (cod 411), adaugare unui cont pentru venituri din vnzri (cod 707), adaugare unei operatii de vinzare (debit 411, credit 707), adaugarea unei operatii de incasare (debit 5121, credit 411). d) determinai rezultatul testului (soldul conturilor 401 i 411) funcie de sumele implicate. void test1(){ // Creare plan conturi Map<String, Cont> planContabil = new HashMap<String, Cont>(); planContabil.put("401", new Cont("401", "Furnizori")); planContabil.put("301", new Cont("301", "Materii prime")); planContabil.put("5121", new Cont("5121", "Conturi la bnci n lei")); // Creare serviciu contabilitate ServiciuContabilitate serviciuContabilitate = new ServiciuContabilitate(planContabil); // Inregistrare achizitionare OperatiuneContabila achizitionare = new OperatiuneContabila(1, new Date()); List<InregistrareContabila> inregistrari = new ArrayList<InregistrareContabila>(); inregistrari.add(new InregistrareDebit(1, serviciuContabilitate.getPlanContabil().get("301"), 1250.0)); inregistrari.add(new InregistrareCredit(2, serviciuContabilitate.getPlanContabil().get("401"), 1250.0)); achizitionare.setInregistrari(inregistrari); serviciuContabilitate.adaugaOperatiuneContabila(achizitionare); // Inregistrare plata // Creare conturi 411 si 707 // Inregistrare vinzare // Inregistrare incasare System.out.println("Sold cont 401 = " +

serviciuContabilitate. getSoldFinal(serviciuContabilitate.getPlanContabil().get("401"))); System.out.println("Sold cont 411 = " + serviciuContabilitate. getSoldFinal(serviciuContabilitate.getPlanContabil().get("411"))); } S3. Lund n considerare modelul de la S2 cu tot cu completrile s2-b i s2-c (a) completai urmtoarea secven de cod necesar pentru afiarea minimal a jurnalului contabil pentru operaiunile contabile codificate la S2-b (instruciunile de mai jos se consider o continuare a metodei test1 de la S2-b). (b) Care ar fi rezultatul execuiei testului ? System.out.println("----------------------------------------------------------------------"); OperatiuneContabila opj = null; String descriereOpj = null; // Obtinere lista de operatiuni de la serviciu contabilitate List<OperatiuneContabila> jurnal = serviciuContabilitate.getJurnal(); // initializare iterator pentru colectia jurnal Iterator<OperatiuneContabila> j = jurnal.iterator() ; // pentru fiecare operaiune contabil din jurnal accesat prin iteratorul j while(j.hasNext()){ // iniializez variabila ce va conine referina urmtoarei operaiuni accesate /* ??? ??? ??? */ // start formare descriere operatiune descriereOpj = "Operatiune din data " + opj.getDataContabilizare() + "\n"; for (InregistrareContabila inregistrare: opj.getInregistrari()){ if (inregistrare instanceof /* ??? ??? ??? */){ // adaugare in descriere operatiune a unui sir de forma: // debitare cont XXXX cu suma YYYY descriereOpj += /* ??? ??? ??? */ ; } if (inregistrare instanceof /* ??? ??? ??? */){ // adaugare in descriere operatiune a unui sir de forma: // creditare cont XXXX cu suma YYYY descriereOpj /* ??? ??? ??? */ ; } } descriereOpj += "Sold final: " + opj.getSold(); // afisare descriere operatiune System.out.println(descriereOpj); System.out.println("----------------------------------------------------------------------"); }

S4. a) Modificai modelul de clase de la S2 astfel nct operaiunile de achiziie(cumparare) i vnzare s reprezinte subclase ale clasei abstracte OperatiuneComerciala derivat din OperatiuneContabil. b) Care sunt modificrile ce ar trebui aduse testului s2-b. S5. (Persistenta) a) Dat fiind asociaia bidirecional OperatiuneContabil-InregistrareContabil ce adnotri JPA sunt necesare pentru o mapa pe un suport persistent. Scriei codul necesar pentru a realiza o tranzacie n baza de date care s salveze o operaie contabil, nregistrrile asociate i conturile implicate. b) Formulai o interogare JPA pentru a extrage de pe suportul persistent operaiunile contabile din luna ianuarie 2010. Scriei codul necesar pentru a executa aceast interogare i pentru a parcurge rezultatul acesteia astfel nct s cumulai i afiai soldul tuturor operaiunilor obinute.

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