Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
teme:tema_de_recuperare [2016/04/17 21:17] Andrei Roșu-Cojocaru |
teme:tema_de_recuperare [2016/04/20 03:19] (current) Andrei Roșu-Cojocaru [Barem de corectare și notare] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Tema de Recuperare ====== | ====== Tema de Recuperare ====== | ||
| - | ====== Implementarea modulelor de aprovizionare și relații cu clienții pentru un sistem informatic din cadrul unei instituții ce intermediază achiziția de bilete la reprezentații artistice ====== | + | ====== Implementarea modulelor de aprovizionare și relații cu clienții pentru un sistem informatic din cadrul unei instituții ce intermediază achiziția de bilete la reprezentații culturale ====== |
| <note important> | <note important> | ||
| - | Lansare: 30 martie 2015, 23:55\\ Termen de Predare: 29 mai 2015, 23:55\\ Pondere: 20 p | + | Lansare: 20 aprilie 2016, 23:55\\ Termen de Predare: 25 mai 2016, 23:55\\ Pondere: 20 p |
| </note> | </note> | ||
| Line 25: | Line 25: | ||
| * programarea în limbajul Java; | * programarea în limbajul Java; | ||
| * manipularea bazelor de date folosind MySQL; | * manipularea bazelor de date folosind MySQL; | ||
| - | * folosirea API-ului Java DataBase Connectivity; | + | * folosirea API-ului Java DataBase Connectivity SAU o implementare Java Persistence API (de preferat, Hibernate) pentru accesarea programatică a informațiilor stocate în baza de date; |
| * utilizarea, la alegere, a unei dintre tehnologiile RMI sau JAX-WS pentru apelarea unor metode aparţinând unor obiecte existente într-o altă maşină virtuală, a căror definiţie se consideră cunoscută; | * utilizarea, la alegere, a unei dintre tehnologiile RMI sau JAX-WS pentru apelarea unor metode aparţinând unor obiecte existente într-o altă maşină virtuală, a căror definiţie se consideră cunoscută; | ||
| * folosirea tehnologiilor Java Servlets / JavaServer Pages și Node.JS pentru dezvoltarea unei aplicaţii web. | * folosirea tehnologiilor Java Servlets / JavaServer Pages și Node.JS pentru dezvoltarea unei aplicaţii web. | ||
| Line 33: | Line 33: | ||
| Se doreşte implementarea unui sistem informatic destinat gestiunii activităţilor dintr-o organizație prin intermediul căreia pot fi interogate serviciile mai multor instituții culturale, care oferă reprezentații artistice, în scopul rezervării de locuri și achiziționării de bilete la acestea. | Se doreşte implementarea unui sistem informatic destinat gestiunii activităţilor dintr-o organizație prin intermediul căreia pot fi interogate serviciile mai multor instituții culturale, care oferă reprezentații artistice, în scopul rezervării de locuri și achiziționării de bilete la acestea. | ||
| - | Fiecare instituție culturală este caracterizată prin denumire, adresă, tip și descriere. O instituție are un anumit repertoriu, desemnat prin mai multe reprezentații. O reprezentație este caracterizată prin denumire, distribuție (actori), scenograf, regizor și producător precum și durata, exprimată în minute (cu sau fără pauză). De asemenea, o instituție culturală dispune de mai multe săli de spectacole, pentru fiecare existând o anumită capacitate, distribuită pe mai multe rânduri (se definește pentru fiecare locație atât numărul de rânduri, cât și numărul de locuri - considerat constant pentru fiecare rând). Se va defini și programul instituției culturale, prin care se asociază o reprezentație la o sală de spectacole, la o anumită dată calendaristică și o anumită oră. Fiecare instituție culturală va dispune de propria bază de date, prin care se vor reține aceste informații. | + | Fiecare instituție culturală este caracterizată prin denumire, adresă, tip și descriere. O instituție are un anumit repertoriu, desemnat prin mai multe reprezentații. O reprezentație este caracterizată prin denumire, distribuție (actori), scenograf, regizor și producător precum și durata, exprimată în minute (cu sau fără pauză), pretul unui bilet. De asemenea, o instituție culturală dispune de mai multe săli de spectacole, pentru fiecare existând o anumită capacitate, distribuită pe mai multe rânduri (se definește pentru fiecare locație atât numărul de rânduri, cât și numărul de locuri - considerat constant pentru fiecare rând). Se va defini și programul instituției culturale, prin care se asociază o reprezentație la o sală de spectacole, la o anumită dată calendaristică și o anumită oră. Fiecare instituție culturală va dispune de propria bază de date, prin care se vor reține aceste informații. |
| Se va implementa o aplicație desktop, folosită de clienții care doresc să rezerve locuri sau să achiziționeze bilete la aceste reprezentații artistice. În funcție de solicitări, aceasta va accesa, la distanță, sistemele fiecărei instituții artistice în parte. Conexiunea se va realiza prin intermediul tehnologiei RMI SAU JAX-WS (la alegere). | Se va implementa o aplicație desktop, folosită de clienții care doresc să rezerve locuri sau să achiziționeze bilete la aceste reprezentații artistice. În funcție de solicitări, aceasta va accesa, la distanță, sistemele fiecărei instituții artistice în parte. Conexiunea se va realiza prin intermediul tehnologiei RMI SAU JAX-WS (la alegere). | ||
| Line 43: | Line 43: | ||
| ==== Aplicația desktop ==== | ==== Aplicația desktop ==== | ||
| - | Sistemul va putea fi accesat, pe baza unui proces de autentificare, de către mai multe tipuri de angajați, operând în departamentele resurse umane sau financiar-contabil. Pentru fiecare utilizator în parte se vor reţine informații precum CNP, nume, prenume, adresa, număr de telefon, email, cont IBAN, numărul de contract, data angajării, funcţia deţinută. Fiecare utilizator își va putea vizualiza datele personale imediat după ce va accesa sistemul informatic, fără a avea însă posibilitatea de a le modifica. Totodată, programul trebuie să ofere și o funcționalitate pentru deautentificare, prin care se revine la fereastra care solicită datele de acces, pentru ca un alt utilizator să îl poată folosi ulterior, fără a fi necesară repornirea sa. | + | Un spectator poate obține informații cu privire la reprezentațiile artistice ale instituțiilor culturale, realizând rezervări pentru acestea și achiziționând bilete prin intermediul unui agent de intermediere a comunicației. Acesta are rolul de a facilita interacțiunea dintre clienți și astfel de companii, responsabile cu organizarea spectacolelor. El poate fi interogat pentru a se obține lista organizațiilor culturale, lista reprezentațiilor împreună cu data la care acestea sunt programate și numărul de locuri disponibile, pentru a rezerva locurile disponibile pentru anumite perioade de timp (respectiv pentru a anula rezervarea), precum și pentru a achiziționa bilete. |
| - | Utilizatorul de tip **administrator** poate adăuga, modifica şi şterge informaţii în baza de date legate de utilizatori. De asemenea, va exista şi un rol de **super-administrator** care poate opera inclusiv asupra utilizatorilor de tip administrator. | + | **1**. O **instituție culturală** va interacționa doar cu agentul de intermediere a comunicației. Accesul la metodele expuse va fi permis doar în situația în care între aceste entități este stabilită o legătură, în acest sens fiind implementat un meniu în mod text în cadrul componentei companiei organizatoare de spectacole prin care vor fi accesate funcționalitățile de înregistrare, respectiv de deînregistrare de la nivelul agentului de intermediere. |
| - | Pentru un utilizator de tip **angajat** se va reține salariul negociat, numărul de ore care trebuie realizat în fiecare zi precum și numărul de zile de concediu la care au dreptul, anual. Funcțiile ce pot fi deținute în cadrul instituției financiar-bancare sunt inspector resurse umane sau expert financiar-contabil. | + | Funcționalitățile pe care le expune un către agentul de intermediere sunt: |
| - | Sistemul ERP va fi format din mai multe module care vor putea fi accesate de angajaţi în funcţie de drepturile pe care le deţin. Astfel, vor fi implementate un **modul pentru gestiunea resurselor umane** ce vizează gestiunea programului de lucru şi al concediilor angajaţilor și un **modul pentru operaţii financiar-contabile** prin care sunt operate tranzacții curente pentru diferite conturi. | + | **a)** metoda ''getCulturalInstitutionInfo()'' oferă informații cu privire la producător: |
| + | * parametri: -; | ||
| + | * valoare întoarsă: un obiect de tip ''CulturalInstitution'' care conține datele prin care o comapanie culturală este identificată: denumire, adresă, tip și descriere. | ||
| - | Toate aceste module vor fi integrate în cadrul aceluiași sistem informatic, sub forma unor meniuri care vor conține funcționalitățile pe care acestea le oferă, disponibilitatea lor fiind însă limitată și de permisiunile pe care le posedă utilizatorul autentificat la momentul respectiv de timp. | + | <code> |
| + | public CulturalInformation getCulturalInstitutionInfo(); | ||
| + | </code> | ||
| - | Prin intermediul **modulului pentru gestiunea resurselor umane**, un inspector poate căuta un angajat (de orice tip), în funcție de parametrii pe care îi indică: nume, prenume, funcție. Pentru fiecare angajat se va specifica un orar de lucru. Orarul este caracterizat prin ziua la care se referă (zi a săptămânii), intervalul orar (momentul de început și momentul de sfârșit), locația (sucursala) în care se desfășoară. De asemenea, inspectorul poate gestiona pentru un angajat perioadele de concediu (operații de adăugare, modificare, ștergere), specificând și tipul său (concediu de odihnă, concediu medical – cu un anumit cod de indemnizație, concediu fără plată, concediu special) și pontajul zilnic (câte ore a fost prezent la serviciu în fiecare zi). | + | **b)** metoda ''getRepresentationList()'' furnizează lista de reprezentații existente în repertoriul organizației culturale, pentru care există măcar o programare: |
| - | + | * parametri: -; | |
| - | Toți angajații vor avea la dispoziție o secțiune în care pot consulta orarul săptămânal și informații despre concediile efectuate (inclusiv numărul de zile de concediu de odihnă rămase). De asemenea, aceștia pot consulta și salariile încasate pentru lunile precedente, calculate proporțional cu numărul de ore lucrate în luna respectivă, luându-se în considerare numărul de zile pentru fiecare lună în parte precum și zilele în care angajatul s-a aflat în concediu. | + | * valoare întoarsă: o listă de obiecte de tip ''Representation'', caracterizat prin denumire, distribuție (actori), scenograf, regizor, producător, durata, data și sala la care este programat, prețul unui bilet precum și numărul de locuri disponibile, toate aceste informații fiind gestionate prin intermediul unei baze de date dedicate pentru fiecare instituție culturală în parte: |
| - | În cadrul **modulului pentru operații financiar-contabile** un expert poate realiza operațiuni (tranzacții) legate de conturi, aparținând unor clienți, persoană fizică sau juridică. Pentru fiecare client în parte următoarele informații: | + | <code> |
| - | * persoane fizice: CNP, nume, prenume, adresa, număr de telefon, email, locul de muncă, funcția deținută. | + | public List<Representation> getRepresentationList(); |
| - | * persoane juridice: CUI, denumire, adresă, număr de telefon, email, capital subscris. | + | </code> |
| - | Un client poate avea asociate mai multe conturi. Un cont este caracterizat prin identificatorul său (IBAN), tipul (de debit sau de credit), valuta și valoarea curentă. | + | <note tip>În situația în care un spectacol este programat pentru mai multe date calendaristice / săli de spectacol, va fi furnizată o înregistrare distinctă pentru fiecare pereche (dată calendaristică, sală de spectacol).</note> |
| - | Operațiile care pot fi realizate cu un cont de debit sunt depunere și retragere, fiecare având asociate un anumit comision, care va fi aplicat pe suma cu care se realizează operațiunea. | + | **c)** metoda ''makeReservation()'' realizează o rezervare pentru un spectacol: |
| + | * parametri: un identificator unic, pe baza căruia rezervarea va putea fi referită la nivelul furnizorului, un obiect de tip ''Representation'' reprezentând spectacolul la care se dorește să se realizeze rezervarea și o valoare întreagă, reprezentând numărul de locuri care se dorește a fi ocupat; | ||
| + | * valoare întoarsă: o valoare de tip adevărat / fals, care indică posibilitatea realizării rezervării respective. | ||
| - | Operațiile care pot fi realizate cu un cont de credit sunt tot retragere și depunere, permițându-se ca la un moment dat soldul să fie negativ, în limita unui anumit plafon. Dacă perioada în care valoarea curentă a contului este negativă nu depășește o anumită perioadă, nu se va percepe nici o dobândă. După ce intervalul de grație s-a terminat, pentru fiecare lună în parte se va percepe o anumită dobândă, care se va calcula pentru întrega sumă care a fost împrumutată. | + | <code> |
| + | public boolean makeReservation(int reservationId, Representation representation, int numberOfSeats); | ||
| + | </code> | ||
| - | Un cont poate avea asociat un card bancar, identificat printr-un număr, un cod PIN și o perioadă de valabilitate. | + | <note tip>În momentul în care este realizată o rezervare, numărul de locuri disponibile va fi actualizat corespunzător, pentru o perioadă de timp determinată, după care aceasta este anulată în mod automat, dacă nu s-a realizat o achiziție de bilete între timp pe baza ei.</note> |
| - | De asemenea, pentru fiecare cont în parte se va percepe un comision lunar, retras automat la o dată fixă ce poate fi configurată. | + | <note tip>Validarea unei rezervări implică următoarele verificări: |
| + | * testarea faptului că reprezentația respectivă există în repertoriul instituției culturale respective și este programată pentru data solicitată (toate aceste informații sunt încapsulate în obiectul de tip ''Representation'' transmis ca parametru); | ||
| + | * testarea faptului că numărul de locuri solicitat pentru a se realiza rezervarea nu depășește numărul de locuri disponibile. | ||
| + | </note> | ||
| - | Operațiunile pe care le poate realiza un expert financiar-contabil sunt legate atât de clienți cât și de conturile asociate acestora (adăugare, modificare, ștergere). | + | **d)** metoda ''cancelReservation()'' anulează o rezervare prealabilă: |
| + | * parametru de intrare: un identificator unic prin intermediul căruia este referită rezervarea respectivă; | ||
| + | * valoare întoarsă: o valoare de tip adevărat / fals după cum operația a fost realizată cu succes, respectiv cu eșec. | ||
| + | |||
| + | <code> | ||
| + | public boolean cancelReservation(int reservationId); | ||
| + | </code> | ||
| - | De asemenea, pot fi realizate transferuri între conturi ale diferiților clienți, cu condiția ca acestea să aparțină instituției financiar-bancare sau transferuri cu numerar, în care una din părțile implicate este reprezentată de un cont bancar. | + | <note tip>În momentul în care este anulată o rezervare, numărul de locuri disponibile este restaurat la valaorea anterioară, pentru toate produsele implicate.</note> |
| - | Dacă valutele conturilor între care este realizată operațiunea sunt diferite, se va realiza o conversie de la valuta sursă la valuta destinație, în limita unui plafon prestabilit (pentru fiecare valută în parte), conform unui curs valutar care va fi obținut printr-un serviciu la distanță, publicat la o adresă cunoscută în prealabil. Metodele pe care le va oferi serviciul la distanță sunt: | + | **e)** metoda ''buyTicket()'' este corespunzătoare operației de achiziționare a unui bilet la o reprezentație, pe baza unei rezervări: |
| + | * parametru de intrare: un identificator unic prin intermediul căruia este referită rezervarea respectivă; | ||
| + | * valoare întoarsă: o valoare de tip adevărat / fals după cum operația a fost realizată cu succes, respectiv cu eșec. | ||
| - | <code java> | + | <code> |
| - | String[] getCurrencies(); | + | public boolean buyTicket(int reservationId); |
| - | double getExchange(String source, String destination, Date date); | + | |
| - | double getLimit(String currency); | + | |
| </code> | </code> | ||
| - | Un expert financiar-contabil va gestiona și toate tranzacțiile în așteptare, generate de clienți prin intermediul aplicației web, având posibilitatea de a le aproba sau de a le respinge, acestea devenind efective doar din momentul în care starea solicitării respective a fost modificată. | + | **2**. Un **agent de intermediere** facilitează comunicația dintre un compania organizatoare de spectacole și clienți, expunând către fiecare dintre acestea anumite funcționalități: |
| - | Toate transferurile intrabancare vor fi jurnalizate, reținându-se pentru fiecare în parte data și ora la care au fost realizate, suma, contul sursă, contul destinație, tipul operației și comisionul aplicat. | + | **CĂTRE INSTITUȚIA CULTURALĂ** |
| - | ==== Aplicația web ==== | + | **a)** metoda ''registerCulturalInstitution()'' permite înregistrarea unei instituții culturale la agentul de intermediere; doar în cazul în care instituția culturală este înregistrată la agentul de intermediere, aceasta poate fi interogată cu privire la reprezentațiile pe care le are în repertoriu; metoda are ca semnătură: |
| + | * parametri: un obiect de tip ''CulturalInstitution'' conținând informațiile prin care compania organizatoare de spectacole este identificată; | ||
| + | * valoarea întoarsă: un identificator prin care organizația culturală este referită în mod unic la nivelul agentului de intermediere. | ||
| - | Sistemul va putea fi accesat, pe baza unui proces de autentificare, și de către clienții care și-au creat un cont de acces care a fost aprobat. Informațiile care trebuie transmise pentru obținerea permisiunii de a folosi aplicația web sunt: credențialele dorite (nume de utilizator și parolă), respectiv CNP-ul / CUI-ul. Gestiunea acestor solicitări se face doar de către un administrator sau super-administrator. Doar după ce acesta a acordat drepturile necesare, aplicația va putea fi utilizată corespunzător de către clienți. | + | <code> |
| + | public int registerCulturalInstitution(CulturalInstitution culturalInstitution); | ||
| + | </code> | ||
| - | Un client poate vizualiza situația curentă a conturilor sale, pentru fiecare în parte afișându-se IBAN-ul, tipul de cont, valuta și soldul la momentul respectiv. | + | **b)** metoda ''unregisterCulturalInstitution()'' permite deînregistrarea unei instituții culturale de la agentul de intermediere; în acest moment, toate informațiile stocate la nivelul agentului de intermediere cu privire la respectiva companie organizatoare de spectacole sunt eliminate; metoda are semnătura: |
| + | * parametru: identificatorul unic prin care organizația culturală este referită de agentul de intermediere; | ||
| + | * valoarea întoarsă: o valoare de tip adevărat / fals, care indică dacă operația a fost realizată cu succes, respectiv cu eșec. | ||
| - | Pentru fiecare cont în parte, clientul poate genera un raport cu tranzacțiile realizate pentru un anumit interval de timp indicat (dată de început, dată de sfârșit), afișându-se și balanța intermediară după fiecare operațiune în parte. De asemenea, se va afișa situația contului la începutul și la sfârșitul perioadei respective (sold inițial și sold final). | + | <code> |
| + | public boolean unregisterCulturalInstitution(int registrationId); | ||
| + | </code> | ||
| - | Utilizatorul poate transmite către bancă o solicitare pentru realizarea unei tranzacții, indicând contul său din care dorește să realizeze operațiunea respectivă (în situația în care deține mai multe produse de acest tip, în caz contrar acest lucru nefiind necesar) precum și contul către care se va realiza tranzacția, în cadrul aceleiași instituții financiar-bancare (dacă acesta nu este găsit de sistemul informatic, se va genera un mesaj de eroare). Până la momentul în care tranzacția va fi procesată din aplicația desktop de un expert financiar-contabil, suma de bani respectivă va fi retrasă din contul clientului, însă nu va fi transferată propriu-zis, acest fapt realizându-se doar în momentul când operațiunea respectivă este aprobată; în cazul în care tranzacția este respinsă, suma de bani va fi restituită. | + | **CĂTRE CLIENȚI** |
| - | Clientul poate solicita și deschiderea sau închiderea unui cont, specificând, după caz, tipul de cont dorit, respectiv codul IBAN al acestuia. După ce operațiunea va fi realizată (în mod automat), rezultatul va putea fi vizualizat în lista de produse deținute. Solicitarea de deschidere a unui cont de debit va fi aprobată dacă respectivul client nu are deține alte conturi de credit cu sold negativ. De asemenea, solicitarea de deschidere a unui cont de credint nu va fi aprobată dacă utilizatorul mai are un alt cont de acest tip. Închiderea unui cont presupune că suma curentă din cadrul acestuia să nu fie negativă. | + | **a)** metoda ''getCulturalInstitutionList()'' furnizează o listă cu instituțiile culturale care pot fi accesate la un moment dat: |
| + | * parametri: -; | ||
| + | * valoare întoarsă: o listă de obiecte de tip ''CulturalInformation'', conținând informațiile prin care o companie organizatoare de spectacole este identificată. | ||
| - | De asemenea, se va implementa și un sistem de comunicație, prin intermediul căruia clientul poate transmite un mesaj către bancă, care poate avea drept obiect o solicitare pentru suport tehnic, la care vor răspunde administratorii, respectiv pentru obținerea de informații legate de serviciile oferite, la care vor răspunde experții financiar-contabili. Un astfel de mesaj este caracterizat prin expeditor, subiect, dată și oră, tip, conținut și stare (citit sau necitit). | + | <code> |
| + | public List<CulturalInformation> getCulturalInformationList(); | ||
| + | </code> | ||
| - | ===== ===== | + | **b)** metoda ''getRepresentations()'' determină lista tuturor reprezentațiilor existente în repertoriu pentru care există măcar o programare, pentru fiecare organizație culturală în parte: |
| + | * parametri: -; | ||
| + | * valoare întoarsă: un obiect de tip ''Map'' având drept cheie un obiect de tip ''CulturalInstitution'' iar ca valoare o listă de obiecte de tip ''Representation'' reprezentând spectacolele oferite de instituția culturală. | ||
| - | {{ :teme:tema_de_recuperare:arhitectura_de_nivel_inalt.png?nolink&800 }} | + | <code> |
| + | public Map<CulturalInstitution, List<Representation>> getRepresentations(); | ||
| + | </code> | ||
| - | ===== Precizări suplimentare ===== | + | **c)** metoda ''makeReservation()'' realizează o rezervare, la nivelul unei instituții culturale, pentru un anumit spectacol: |
| + | * parametri: un obiect de tip ''CulturalInstitution'', conținând informațiile prin care organizația culturală este identificată, un obiect de tip ''Representation'' cu semnificația reprezentației respective precum și numărul de locuri care se dorește a fi rezervate; | ||
| + | * valoare întoarsă: un identificator unic (atât la nivelul agentului de intermediere cât și la nivelul companiei organizatoare de spectacole) prin care rezervarea va putea fi referită sau -1 în situația în care rezervarea nu a putut fi realizată (spectacolul nu este oferit de organizația culturală respectivă sau numărul de locuri solicitate este incompatibil cu numărul de locuri disponibile). | ||
| - | NU este permină folosirea altor tehnologii decât a celor specificate enunţ. Definiţiile metodelor apelabile la distanţă vor fi descrise în pseudocod. Acestea pot fi modificate la nivelul parametrilor sau rezultatelor întoarse, păstrându-se însă funcţionalitatea lor. | + | <code> |
| + | public int makeReservation(CulturalInstitution culturalInstitution, Representation representation, int numberOfSeats); | ||
| + | </code> | ||
| - | Fiecare fereastră a interfeței grafice va fi definită în cadrul unui fișier FXML generat folosind Scene Builder 2.0. | + | **d)** metoda ''cancelReservation()'' anulează o rezervare prealabilă: |
| + | * parametru: un identificator unic, prin care rezervarea este referită atât la nivelul agentului de intermediere cât și la nivelul instituției culturale; | ||
| + | * valoare întoarsă: o valoare de tip adevărat / fals după cum operația a fost realizată cu succes, respectiv cu eșec. | ||
| + | |||
| + | <code> | ||
| + | public boolean cancelReservation(int reservationId); | ||
| + | </code> | ||
| + | |||
| + | **e)** metoda ''buyTicket()'' realizează achiziționarea unui bilet pe baza unei rezervări: | ||
| + | * parametru de intrare: un identificator unic prin intermediul căruia este referită rezervarea respectivă; | ||
| + | * valoare întoarsă: o valoare de tip adevărat / fals după cum operația a fost realizată cu succes, respectiv cu eșec. | ||
| + | |||
| + | <code> | ||
| + | public boolean buyTicket(int reservationId); | ||
| + | </code> | ||
| + | |||
| + | **3**. Un **client** accesează operațiile pe care le oferă agentul de intermediere a comunicației cu organizațiile culturale pentru a obține informații cu privire la repertoriul acestora, pentru a rezerva locuri la spectacolele pe care acestea le organizează respectiv pentru a achiziționa bilete. | ||
| + | |||
| + | Modul de operare la nivelul clientului implică obținerea listei de instituții culturale și a reprezentațiilor pe care acestea le oferă, selectarea unui spectacol pentru care se solicită realizarea unei rezervări urmată de achiziția unui bilet pe baza acesteia. Toate aceste funcționalități, oferite de către agentul de intermediere, vor fi disponibile prin intermediul unui meniu în mod text. | ||
| + | |||
| + | Arhitectura sistemului informatic va fi prin urmare formată din trei componente care comunică între ele, dintre care una (agentul de intermediere a comunicației) expune funcționalități de tip server atât către componenta de tip instituție culturală cât și către componenta de tip client. În această situație, se va asigura faptul că pentru fiecare entitate vor fi accesibile doar metodele specifice, fără a se expune și operațiile aferente altor aplicații. | ||
| + | |||
| + | ==== Aplicația web ==== | ||
| + | |||
| + | Pentru fiecare instituție culturală se va implementa și o aplicație web (folosind două tehnologii diferite: Java Servlets & JavaServer Pages și Node.JS), aceasta putând fi accesată, pe baza unui proces de autentificare, de către clienții care și-au creat un cont de acces aprobat. Informațiile care trebuie transmise pentru obținerea permisiunii de a folosi aplicația web sunt: credențialele dorite (nume de utilizator și parolă), CNP-ul, codul IBAN și o sumă de bani disponibilă în contul aferent, inițial. Gestiunea acestor solicitări se face doar de către un utilizator de tip administrator, preexistent în baza de date (nu trebuie gestionat programatic). Doar după ce acesta a acordat drepturile necesare, aplicația va putea fi utilizată corespunzător de către clienți. | ||
| + | |||
| + | Un client poate vizualiza lista cu reprezentațiile oferite de instituția culturală respectivă, pentru fiecare spectacol afișându-se toate informațiile caracteristice: denumire, distribuție (actori), scenograf, regizor, producător, durată și preț. Această listă poate fi filtrată în funcție de un actor care se găsește în distribuție, de anumite limite (minimă și maximă) pentru durată, respectiv pentru preț. De asemenea, lista poate fi ordonată alfabetic după denumirea spectacolului precum și în funcție de durată sau ae preț. De asemenea, clientului i se va afișa programul curent al companiei organizatoare de reprezentații, grupată pe săli de spectacole: pentru fiecare zi vor fi afișate manifestările culturale respective, ordonate după ora de începere, precizându-se și numărul de locuri disponibile precum și prețul unui bilet. | ||
| + | |||
| + | Clientul are posibilitatea de a-și defini un coș de cumpărături, format dintr-un număr de 1 sau mai multe bilete achiziționate pentru 1 sau mai multe spectacole. În momentul în care coșul de cumpărături este complet, acesta poate fi finalizat, ceea ce implică actualizarea numărului de locuri disponibile pentru spectacolele completate și a sumei de bani disponibile în contul clientului. În situația în care numărul de locuri solicitate pentru o anumită reprezentație nu corespunde numărului de locuri disponibile, se va genera un mesaj de eroare. | ||
| + | |||
| + | Se va defini și o secțiune în care clientul are acces la datele personale, pe care le poate modifica în orice moment. De asemenea, clientul va putea avea acces la istoricul coșurilor de cumpărături pe care le-a finalizat cu succes. | ||
| + | |||
| + | De asemenea, se va implementa și un sistem de comunicație, prin intermediul căruia clientul poate gestiona (citi, scrie) mesaje către reprezentații instituțiilor culturale, care poate avea drept obiect o solicitare pentru informații referitoare la un spectacol, la care vor răspunde administratorii. Un astfel de mesaj este caracterizat prin expeditor, subiect, dată și oră, tip, conținut și stare (citit sau necitit). | ||
| + | |||
| + | Este necesar să se implementeze și operația de deautentificare prin care se revine la pagina principală a aplicației web. | ||
| + | ===== Precizări suplimentare ===== | ||
| + | |||
| + | NU este permină folosirea altor tehnologii decât a celor specificate enunţ. Definiţiile metodelor apelabile la distanţă sunt descrise în pseudocod. Acestea pot fi modificate la nivelul parametrilor sau rezultatelor întoarse, păstrându-se însă funcţionalitatea lor. | ||
| Popularea bazei de date cu informații trebuie să fie corespunzătoare pentru a putea ilustra funcționalitățile implementate. | Popularea bazei de date cu informații trebuie să fie corespunzătoare pentru a putea ilustra funcționalitățile implementate. | ||
| - | Un angajat poate lucra la mai multe sucursale, în zile diferite ale săptâmânii, fapt specificat în cadrul orarului. | + | Pentru o instituție culturală, datele specifice (denumirea, adresa, tipul și descrierea) vor fi precizate sub formă de parametri în linia de comandă în momentul lansării sale în execuție. |
| - | Numărul de zile de concediu de odihnă rămase se calculează începând cu data angajării, proporțional cu numărul de zile lucrate în anul respectiv. Un inspector de resurse umane nu poate preciza un concediu de odihnă pentru o perioadă mai mare decât numărul de zile de care dispune angajatul respectiv (numărul de zile de concediu de odihnă rămase), în caz contrar generându-se un mesaj de eroare. | + | Perioada pentru care o rezervare este menținută se măsoară în număr de zile calendaristice și se exprimă sub formă de constantă la nivelul codului sursă. |
| - | Pentru calculul salariului, se va avea în vedere faptul că un concediu de odihnă este remunerat cu 100% (ca și când angajatul ar fi lucrat), un concediu fără plată cu 0%, iar un concediu medical cu un procent variabil, în funcție de codul de indemnizație (se vor folosi trei valori, la alegerea proprie). | + | Metodele de la nivelul agentului de intermediere vor accesa funcționalitățile cu acceeași denumire de la nivelul companiilor organizatoare de spectacole, în unele situații fiind necesară parcurgerea întregii liste a instituțiilor culturale care pot fi accesate la un moment dat. Într-un astfel de model, în care componentele sunt strâns cuplate, toate operațiile sunt sincrone (se blochează până se transmite un rezultat de la metoda invocată). Accesul la resursele care pot fi referite de mai multe fire de execuție concomitent trebuie să se realizeze sincronizat. |
| - | Informațiile furnizate de serviciul la distanță vor fi preluate dintr-o bază de date, în care cursurile vor fi introduse manual (fără a fi necesară o interfață grafică ca intermediar), pentru fiecare dată calendaristică în parte. | + | Semnăturile metodelor accesibile la distanță pot suferi modificări în funcție de necesități, cu respectarea funcționalității descrise. |
| - | În cadrul transferurilor intrabancare, se vor realiza verificările necesare (un cont de debit nu poate avea soldul negativ în urma realizării tranzacției, nu se poate depăși un anumit plafon pentru un tip specific de valută), generându-se mesaje de eroare sugestive în cazul în care nu se pot efectua. Atât sursa cât și destinația transferului pot fi deopotrivă persoane fizice sau persoane juridice. | + | În cazul aplicației desktop, nu este necesar să se implementeze o interfață grafică pentru testarea aplicațiilor, fiind suficient un meniu în mod text care să permită introducerea unui număr de opțiuni corespunzător numărului de metode pe care o componentă le poate accesa la distanță. |
| - | În cadrul informațiilor legate de jurnalizare, se vor stoca și comisioanele percepute lunar pentru fiecare cont în parte. | + | În cazul aplicației web, nu se va ține cont de interfața grafică a paginilor Internet, accentul punându-se pe funcționalitatea acestora. Pot fi preluate șabloane pentru foile de stil sau pentru proiectarea aspectului disponibile pe Internet, fără ca acest lucru să intre sub incidența regulilor legate de frauda academică. |
| - | Pentru solicitările realizate de client se vor transmite mesaje în mod automat atunci când un expert financiar-contabil le aprobă sau le respinge. | + | Pentru gestiunea informațiilor stocate în baza de date se poate utiliza fie JDBC (Java DataBase Connectivity), fie JPA (Java Persistence API) cu orice implementare a acesteia (Hibernate, Eclipse Link). |
| - | Pentru rapoartele pe care utilizatorul le poate vizualiza legat de operațiunile realizate, tranzacțiile care nu au fost încă analizate de expertul financiar-contabil vor fi marcate ca fiind în așteptare. | + | Criteriile în funcție de care va fi realizată comparația dintre soluțiile oferite de Java Enterprise Edition / Node.JS pentru dezvoltarea de aplicații web trebuie să fie minim trei, la alegere (memoria utilizată - sistemul de colectare a memoriei, ușurința în dezvoltare - facilități oferite pentru programatori, integrarea cu diferite sisteme de operare / navigatoare, funcționalități oferite / posibilitatea de accesare a diferitelor informații din antetele HTTP sau legate de platforma pe care rulează aplicația web, posibilitatea de gestiune a informațiilor dintr-un sistem de gestiune pentru baze de date, ușurința în depanarea aplicației web, posibilitatea de integrare a unor biblioteci, formatele în care pot fi transferate datele). |
| Orice specificaţie care nu este menţionată mai sus reprezintă decizie de implementare. Puteţi considera orice simplificare în condiţiile în care enunţul nu precizează altfel. | Orice specificaţie care nu este menţionată mai sus reprezintă decizie de implementare. Puteţi considera orice simplificare în condiţiile în care enunţul nu precizează altfel. | ||
| Line 133: | Line 207: | ||
| ===== Barem de corectare și notare ===== | ===== Barem de corectare și notare ===== | ||
| - | ^ PUNCTAJ ^ CRITERII DE ACORDARE ^ | + | ^ PUNCTAJ ^ CRITERII DE ACORDARE ^^ |
| - | | 3 p | proiectarea tabelelor în baza de date\\ ♦ conformitatea structurii conceptuale a bazei de date cu o formă normală: 40%\\ ♦ definirea de chei primare, chei străine (legături între toate tabelele bazei de date), constrângeri de integritate pentru formatul atributelor: 25%\\ ♦ populare corespunzătoare: 35% | | + | | 3 p | proiectarea tabelelor în baza de date\\ ♦ conformitatea structurii conceptuale a bazei de date cu o formă normală: 40%\\ ♦ definirea de chei primare, chei străine (legături între toate tabelele bazei de date), constrângeri de integritate pentru formatul atributelor: 25%\\ ♦ populare corespunzătoare: 35% || |
| - | | 3 p | realizarea interfeţei grafice((Punctajul pentru realizarea interfeţei grafice se acordă doar în condiţiile implementării a minimum 50% din funcţionalităţi, altfel va fi ponderat cu procentul de rezolvare aferent.))\\ ♦ aspect: 40%\\ ♦ uşurinţă în utilizare: 60% | | + | | 1,50 p | proiectarea metodelor corespunzătoare componentelor de tip server\\ • componenta instituție culturală: 35%\\ • componenta agent de intermediere a comunicației (segregarea interfețelor!!!): 65% || |
| - | | 1 p | gestiunea utilizatorilor\\ ♦ autentificare, deautentificare: 20%\\ ♦ operaţii utilizator de tip administrator / super-administrator: 50%\\ ♦ implementare sistem de control al drepturilor de acces al utilizatorilor în cadrul sistemului informatic pe baza rolurilor: 30% | | + | | 2 p | implementarea metodelor corespunzătoare componentei instituție culturală\\ • ''getCulturalInstitutionInfo()'': 10%\\ • ''getRepresentationList()'': 15%\\ • ''makeReservation()'': 35%\\ • ''cancelReservation()'': 15%\\ • ''buyTicket()'': 25% || |
| - | | 2,50 p | funcţionalităţi modul pentru gestiunea resurselor umane\\ ♦ căutare utilizator: 10%\\ ♦ specificare informații referitoare la programul de lucru: 15%\\ ♦ gestiune pontaj: 15%\\ ♦ specificare informații cu privire la concedii: 20%\\ ♦ vizualizarea informațiilor despre programul de lucru (orar, prezență zilnică, concedii), pentru fiecare angajat în parte: 20%\\ ♦ calcul salarii și vizualizarea acestora de către angajați: 20% | | + | | 2 p | implementarea metodelor din agentul de intermediere a comunicației\\ • ''getCulturalInstitutionList()'': 10%\\ • ''getRepresentations()'': 15%\\ • ''makeReservation'': 35%\\ • ''cancelReservation'': 15%\\ • ''buyTicket()'': 25% || |
| - | | 4,50 p | funcţionalităţi modul de operaţii financiar contabile\\ ♦ operații legate de gestiunea clienților (adăugare, modificare, ștergere): 15%\\ ♦ operații legate de gestiunea conturilor (adăugare, modificare, ștergere): 15%\\ ♦ operațiuni financiar-bancare (depunere, retragere): 15%\\ ♦ implementarea transferurilor intrabancare: 15%\\ ♦ gestiunea solicitărilor primite de la clienți (operații legate de conturi, tranzacții între diferite conturi, mesaje): 15%\\ ♦ gestiunea comisioanelor lunare: 15%\\ ♦ accesare serviciu la distanță pentru conversie valutară: 10% | | + | | 1,50 p | apelarea metodelor disponibile la distanță din cadrul componentelor de tip client\\ • componenta client: 55%\\ • componenta agent de intermediere a comunicației: 30%\\ • componenta instituție culturală: 15% || |
| - | | 0,75 p | serviciu la distanță pentru gestiunea conversiei valutare\\ ♦ metoda ''getCurrencies()'': 35%\\ ♦ metoda ''getExchange()'': 40%\\ metoda ''getLimit()'': 10%\\ ♦ proiectarea și implementarea bazei de date aferente: 15% | | + | | 9 p | implementarea aplicațiilor web\\ • Java Servlets / JavaServer Pages: 50%\\ • Node.JS: 50% | • pagina de autentificare / deautentificare: 5% | |
| - | | 4 p | funcționalități modul de asigurare a relației cu clienții\\ ♦ gestiune date de acces (înregistrare, autentificare): 10%\\ ♦ consultare stare conturi bancare: 10%\\ ♦ generare rapoarte operațiuni pentru o perioadă de timp: 20%\\ ♦ transmiterea de solicitări referitoare la tranzacții intrabancare: 20%\\ ♦ transmiterea de solicitări referitoare la operații legate de conturi (deschidere / închidere) 15%\\ ♦ implementare sistem de mesagerie: 25% | | + | | ::: | ::: | • pagina de înregistrare a unui utilizator: 10% | |
| - | | 0,25 p | implementarea mecanismului de jurnalizare a tranzacțiilor financiar-contabile | | + | | ::: | ::: | pagina pentru definirea unui coș de cumpărături: 60%\\ • filtrare reprezentații în funcție de diverse criterii: 20%\\ • gruparea programului pe zile în funcție de sala de spectacole: 10%\\ • gestiunea coșului de cumpărături (adăugare / editare / ștergere): 20%\\ • finalizarea unei comenzi cu semnalarea posibilelor erori: 10% | |
| - | | 1 p | modularizare\\ ♦ structura aplicaţiei: 50%\\ ♦ lizibilitatea codului: 20%\\ ♦ comentarii, README: 30% | | + | | ::: | ::: | • pagina pentru vizualizarea detaliilor unui cont: 15%\\ • date personale cu posibilitate de actualizare: 5%\\ • istoric coș de cumpărături: 10% | |
| - | | 0,50 p | validarea datelor\\ ♦ asigurarea consistenţei informaţiilor reţinute în tabele: 50%\\ ♦ mesaje de eroare: 50% | | + | | ::: | ::: | • sistem de mesagerie: 10% (citire, scriere) | |
| + | | 1 p | modularizare\\ ♦ structura aplicaţiei: 40%\\ ♦ lizibilitatea codului: 20%\\ ♦ comentarii, README (inclusiv comparație Java Enterprise Edition / Node.JS): 40% || | ||
| **BONUS**. Se pot obţine punctaje suplimentare, astfel: | **BONUS**. Se pot obţine punctaje suplimentare, astfel: | ||
| - | * 0,50 p – predarea temei cu două săptămâni mai devreme (înainte de 15.05.2015, 23:55); | + | * 0,50 p – predarea temei cu două săptămâni mai devreme (înainte de 11.05.2016, 23:55); |
| - | * 0,50 p – determinarea profitului operațional al băncii în aplicația desktop, pentru fiecare lună calendaristică în parte, și afișarea lui în interfața expertului financiar contabil; calculul său se obține ca diferență dintre veniturile provenite din comisioane și dobânzi la credite și cheltuielile cu salariile angajaților, acestea fiind defalcate pe sucursale (presupunând că fiecare angajat și fiecare client aparține unei singure sucursale); | + | * 0,50 p – modificarea sistemului de rezervare de locuri / achiziție de bilete în cadrul aplicației desktop, astfel încât acesta să se realizeze pe baza unei locații (unui interval de locații) specifice în sală, caracterizată prin rând și loc; se vor defini categorii de locații, fiecare dintre acestea având asociat un preț specific; |
| - | * 0,50 p – posibilitatea de a programa din aplicația web o serie de plăți recurente; acestea sunt realizate periodic, la intervale prestabilite de timp (săptămânal, lunar, trimestrial, semestrial, anual), începând cu o anumită dată calendaristică, către un cont bancar, suma de bani fiind fixă; ele vor fi realizate în mod automat cu condiția ca soldul curent (raportat la tipul de cont să o permită), în caz contrar generându-se un mesaj de eroare, marcat în operațiile de jurnalizare și transmis sub formă de mesaj clientului. | + | * 0,50 p - implementarea unui sistem de recomandări, în cazul aplicației web: în situația în care pentru un utilizator a realizat achiziții anterioare de bilete la reprezentații culturale, i se pot face anumite sugestii cu privire la spectacolele pe care le poate viziona, folosind un algoritm propriu (posibile criterii fiind: spectacole cu aceeași distribuție / scenograf / regizor / producator, care au program in aceeași sală, în aceeași zi a săptămânii și la aceeași oră sau alte criterii); |
| ===== Condiții de realizare și predare ===== | ===== Condiții de realizare și predare ===== | ||
| Tema va fi realizată individual şi va fi prezentată înainte de examenul de restanță, la o dată care va fi anunțată ulterior. Neprezentarea temei de casă sau un rezultat nesatisfăcător al prezentării (necunoașterea funcționalității aplicației / codului sursă, imposibilitatea de a răspunde la întrebări) atrag după sine anularea punctajului corespunzător acesteia. În cadrul prezentării veţi specifica succint funcţionalităţile pe care le-aţi dezvoltat şi veţi răspunde la întrebări cu privire la modul de implementare al acestora. | Tema va fi realizată individual şi va fi prezentată înainte de examenul de restanță, la o dată care va fi anunțată ulterior. Neprezentarea temei de casă sau un rezultat nesatisfăcător al prezentării (necunoașterea funcționalității aplicației / codului sursă, imposibilitatea de a răspunde la întrebări) atrag după sine anularea punctajului corespunzător acesteia. În cadrul prezentării veţi specifica succint funcţionalităţile pe care le-aţi dezvoltat şi veţi răspunde la întrebări cu privire la modul de implementare al acestora. | ||
| - | Sunt punctate și implementări parțiale, în sensul că anumite module nu au fost abordate deloc. Sunt obligatorii proiectarea și implementarea bazei de date (complet sau incomplet), respectiv a interfeței grafice. | + | Sunt punctate și implementări parțiale, în sensul că anumite module nu au fost abordate deloc. Este obligatorie proiectarea și implementarea bazei de date (complet sau incomplet). |
| - | Tema va trebui încărcată pe site-ul [[http://cs.curs.pub.ro/2014|cs.curs.pub.ro]] sub forma unei arhive de tip .zip (având denumirea **Grupa34XCX_NumePrenume_TemaRecuperare.zip**) care să conţină script-ul pentru crearea şi popularea tabelelor din baza de date (numele bazei de date fiind **Grupa34XCX_NumePrenume**) – în rădăcină, sursele aplicaţiei (proiect Eclipse / NetBeans), scripturi ce conţin lansări în execuţie ale aplicației desktop și a serviciului de conversie valutară la distanță, specificând argumentele necesare((În cazul tehnologiei RMI vor trebui indicate proprietăţile Java ''java.rmi.server.codebase'', ''java.rmi.server.hostname'', ''java.security.policy'', incluzându-se și fişierele ce conţin politica de securitate. Pentru CORBA, se vor preciza parametrii liniei de comandă ''ORBInitialHost'' / ''ORBInitialPort''. Dacă se optează pentru JAX-WS, vor trebui indicate locațiile la care vor fi publicate serviciile web.)) precum şi un README în care să explicaţi funcționalitățile dezvoltate, tehnologiile folosite, problemele întâlnite și modul de soluționare a acestora, eventualele decizii de implementare. Dacă aplicația web este găzduită online, veți indica URL-ul de unde aceasta poate fi accesată. Temele care nu respectă convențiile de nume indicate nu vor fi luate în considerare. | + | Tema va trebui transmisă sub forma unui mesaj la adresa de poștă electronică [[aipi2015@andreirosucojocaru.ro|]] sub forma unei arhive de tip .zip (având denumirea **Grupa34XCX_NumePrenume_TemaRecuperare.zip**) care să conţină script-ul pentru crearea şi popularea tabelelor din bazele de date (numele bazelor de date fiind **Grupa34XCX_NumePrenume_InstitutieCulturala** pentru fiecare companie organizatoare de spectacole respectiv **Grupa34XCX_NumePrenume_AgentIntermediere** pentru agentul de intermediere) – în rădăcina, sursele aplicaţiilor (proiecte Eclipse / NetBeans), configurațiile de rulare (parametrii ''java.rmi.server.codebase'', ''java.rmi.server.hostname'', ''java.security.policy'') - dacă se optează pentru JAX-WS, vor trebui indicate locațiile la care vor fi publicate serviciile web - specifice aplicației desktop, precum şi un README în care să explicaţi funcționalitățile dezvoltate, problemele întâlnite și modul de soluționare a acestora. În cazul în care aplicaţia web este găzduită online, veţi indica URL-ul de unde aceasta poate fi accesată. Subiectul utilizat va fi **[TemaRecuperare][Grupa34XCX][NumePrenume]**. Temele care nu respectă convențiile de nume indicate nu vor fi luate în considerare. Prezentarea se poate face numai după ce tema a fost predată sub această formă. |
| - | Încărcarea pe site nu este redundantă, temele vor fi comparate prin aplicaţii specializate pentru a se depista eventualele fraude. În această situaţie, întreg punctajul pe parcursul semestrului va fi anulat, studenţii implicaţi (atât originalul, cât şi copia / copiile) fiind obligaţi să repete disciplina – cu taxă – în anul universitar următor. | + | Temele vor fi comparate prin aplicaţii specializate pentru a se depista eventualele fraude. În această situaţie, întreg punctajul pe parcursul semestrului va fi anulat, studenţii implicaţi (atât originalul, cât şi copia / copiile) fiind obligaţi să repete disciplina – cu taxă – în anul universitar următor. |
