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_casa_2 [2015/11/29 21:45] Andrei Roșu-Cojocaru |
teme:tema_de_casa_2 [2015/11/29 22:34] (current) Andrei Roșu-Cojocaru |
||
|---|---|---|---|
| Line 4: | Line 4: | ||
| <note important> | <note important> | ||
| - | Lansare: 29 noiembrie 2015, 23:55\\ Termen de Predare: 20 decembrie 2015, 23:55\\ Pondere: 15 p / 35 | + | Lansare: 29 noiembrie 2015, 23:55\\ Termen de Predare: 4 ianuarie 2016, 23:55\\ Pondere: 15 p / 35 |
| </note> | </note> | ||
| Line 29: | Line 29: | ||
| Se dorește implementarea modulului de gestiune a relațiilor cu clienții (CRM - Customer Relationship Management) pentru un sistem informatic destinat gestiunii activității dintr-un lanț de restaurante. | Se dorește implementarea modulului de gestiune a relațiilor cu clienții (CRM - Customer Relationship Management) pentru un sistem informatic destinat gestiunii activității dintr-un lanț de restaurante. | ||
| - | Un astfel de modul este destinat pacienților lanțului de policlinici care doresc să comande produsele comercializate de restaurant spre a fi livrate la o anumită adresă. Acesta va fi accesat prin intermediul unei aplicații web, formată din mai multe pagini Internet, generate dinamic, între care există legături. Vor fi implementate două variante ale aplicației web, una folosind Java Servlets / JavaServer Pages și un server web Apache Tomcat, iar alta folosind Node.JS. Ca sistem de gestiune pentru baze de date se va utiliza MySQL. Performanțele aplicațiilor web folosind cele două tehnologii vor fi comparate folosind mai multe criterii, dintre care unul trebuie să fie timpul de încărcare al paginii Internet. Pe baza acestei comparații, vor fi prezentate concluziile referitoare la cele două tehnologii, într-un text de maxim 10 rânduri. | + | Un astfel de modul este destinat clienților lanțului de restaurante care doresc să comande produsele comercializate de acesta spre a fi livrate la o anumită adresă. Acesta va fi accesat prin intermediul unei aplicații web, formată din mai multe pagini Internet, generate dinamic, între care există legături. Vor fi implementate două variante ale aplicației web, una folosind Java Servlets / JavaServer Pages și un server web Apache Tomcat, iar alta folosind Node.JS. Ca sistem de gestiune pentru baze de date se va utiliza MySQL. Performanțele aplicațiilor web folosind cele două tehnologii vor fi comparate folosind mai multe criterii, dintre care unul trebuie să fie timpul de încărcare al paginii Internet. Pe baza acestei comparații, vor fi prezentate concluziile referitoare la cele două tehnologii, într-un text de maxim 10 rânduri. |
| Accesul în cadrul aplicației web se va realiza securizat, în urma autenficării prealabile, bazată pe un nume de utilizator și o parolă. Utilizatorii care nu dețin un cont vor putea să se înregistreze, furnizând informații precum nume de utilizator și parolă, precum și o serie de informații personale (nume și prenume, cod numeric personal, adresă de poștă electronică, telefon, cont IBAN precum și domiciliul la care se presupune că urmează să fie onorată comanda plasată prin intermediul aplicației). Toate aceste informații sunt obligatorii. Operația de înregistrare va reuși numai în situația în care sunt furnizate toate informațiile solicitate și nu există un alt cont cu aceleași date de autentificare. În caz contrar, vor fi furnizate motivele pentru care operația de înregistrare a eșuat, cu posibilitatea de corectare a informațiilor completate anterior. | Accesul în cadrul aplicației web se va realiza securizat, în urma autenficării prealabile, bazată pe un nume de utilizator și o parolă. Utilizatorii care nu dețin un cont vor putea să se înregistreze, furnizând informații precum nume de utilizator și parolă, precum și o serie de informații personale (nume și prenume, cod numeric personal, adresă de poștă electronică, telefon, cont IBAN precum și domiciliul la care se presupune că urmează să fie onorată comanda plasată prin intermediul aplicației). Toate aceste informații sunt obligatorii. Operația de înregistrare va reuși numai în situația în care sunt furnizate toate informațiile solicitate și nu există un alt cont cu aceleași date de autentificare. În caz contrar, vor fi furnizate motivele pentru care operația de înregistrare a eșuat, cu posibilitatea de corectare a informațiilor completate anterior. | ||
| Line 35: | Line 35: | ||
| În situația în care **utilizatorul nu este autentificat**, el va putea doar să vizualizeze felurile de mâncare disponibile pentru o anumită dată calendaristică (pe care utilizatorul o poate alege dintr-o listă de selecție), fără a-și putea defini un coș de cumpărături. Meniul este defalcat pe tipuri de mâncare (aperetiv, fel principal, desert), astfel încât felurile de mâncare sunt grupate în funcție de categoria din care fac parte. Pentru fiecare fel de mâncare se va afișa compoziția (ingredientele folosite la prepararea sa precum și cantitatea folosită, exprimată în funcție de o unitate de măsură specifică pentru fiecare componentă), specificația unei porții (greutate sau număr de produse), numărul de produse existente în stoc precum și prețul pentru o porție. Pentru fiecare fel de mâncare se vor asocia și anumite etichete în funcție de care se poate realiza filtrarea. | În situația în care **utilizatorul nu este autentificat**, el va putea doar să vizualizeze felurile de mâncare disponibile pentru o anumită dată calendaristică (pe care utilizatorul o poate alege dintr-o listă de selecție), fără a-și putea defini un coș de cumpărături. Meniul este defalcat pe tipuri de mâncare (aperetiv, fel principal, desert), astfel încât felurile de mâncare sunt grupate în funcție de categoria din care fac parte. Pentru fiecare fel de mâncare se va afișa compoziția (ingredientele folosite la prepararea sa precum și cantitatea folosită, exprimată în funcție de o unitate de măsură specifică pentru fiecare componentă), specificația unei porții (greutate sau număr de produse), numărul de produse existente în stoc precum și prețul pentru o porție. Pentru fiecare fel de mâncare se vor asocia și anumite etichete în funcție de care se poate realiza filtrarea. | ||
| - | În cazul în care **utilizatorul este autentificat**, el va putea să indice câte porții dorește să comande din fiecare fel de mâncare. Pe măsură ce astfel de produse sunt specificate, se va afișa conținutul coșului de cumpărături În momentul în care comanda conține toate produsele dorite, ea poate fi finalizată. Acceptarea comenzii este condiționată de existența pe stoc a numărului de porții solicitat. Dacă o comandă nu poate fi onorată din cauza unui număr de produse insuficient, se va afișa un mesaj de eroare, iar utilizatorul are posibilitatea de a ajusta cantitățile respective. Pentru comenzile care pot fi livrate, se emite o factură care conține toate produsele care au fost solicitate. Totodată, este necesar să se actualizeze cantitățile disponibile în stoc pentru acele feluri de mâncare care au fost comandate. Utilizatorul are posibilitatea de a-și vizualiza propriile date personale (furnizate în cadrul operației de înregistrare) spre a putea fi actualizate (cu excepția denumirii contului) precum și istoricul comenzilor anterioare (pentru fiecare comandă pot fi vizualizate data la care aceasta a fost plasată și prețul total precum și detaliile - conținutul propriu-zis al comenzii: numărul de porții și denumirea felului de mâncare). | + | În cazul în care **utilizatorul este autentificat**, el va putea să indice câte porții dorește să comande din fiecare fel de mâncare. Pe măsură ce astfel de produse sunt specificate, se va afișa conținutul coșului de cumpărături, împreună cu prețul total. În momentul în care comanda conține toate produsele dorite, ea poate fi finalizată. Acceptarea comenzii este condiționată de existența pe stoc a numărului de porții solicitat. Dacă o comandă nu poate fi onorată din cauza unui număr de produse insuficient, se va afișa un mesaj de eroare prin care se justifică respingerea, iar utilizatorul are posibilitatea de a ajusta cantitățile respective. Pentru comenzile care pot fi livrate, se emite o factură care conține toate produsele care au fost solicitate. Totodată, este necesar să se actualizeze cantitățile disponibile în stoc pentru acele feluri de mâncare care au fost comandate. Utilizatorul are posibilitatea de a-și vizualiza propriile date personale (furnizate în cadrul operației de înregistrare) spre a putea fi actualizate (cu excepția denumirii contului) precum și istoricul comenzilor anterioare (pentru fiecare comandă pot fi vizualizate data la care aceasta a fost plasată și prețul total precum și detaliile - conținutul propriu-zis al comenzii: numărul de porții și denumirea felului de mâncare). |
| + | |||
| + | Este necesar să se implementeze și operația de deautentificare prin care se revine la pagina principală a aplicației web. | ||
| ===== Precizări suplimentare ===== | ===== Precizări suplimentare ===== | ||
| Line 42: | Line 44: | ||
| Nu se va ține cont de interfața grafică a paginilor web, 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ă. | Nu se va ține cont de interfața grafică a paginilor web, 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 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). | ||
| + | |||
| + | 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). | ||
| + | |||
| + | Etichetele în funcție de care va fi implementat sistemul de filtrare pot viza specificul național al felului de mâncare respectiv, o categorie mai detaliată pentru fiecare tip de mâncare, indicații cu privire la unele restricții în privința ingredientelor sau alte criterii, la alegere. Este vizată implementarea mecanismului de filtrare în funcție de un set de criterii și nu o funcționalitate anume. | ||
| 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 47: | Line 55: | ||
| ===== Barem de corectare și notare ===== | ===== Barem de corectare și notare ===== | ||
| - | ^ **Punctaj** ^ **Criterii de acordare** ^ | + | ^ **Punctaj** ^ **Criterii de acordare** ^^ |
| | 2 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% || | | 2 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% || | ||
| | 12 p | implementarea aplicațiilor web\\ • Java Servlets / JavaServer Pages: 50%\\ • Node.JS: 50% | • pagina de autentificare, inclusiv lista produselor cu detalii fără posibilitatea adăugării unor cantități: 15% | | | 12 p | implementarea aplicațiilor web\\ • Java Servlets / JavaServer Pages: 50%\\ • Node.JS: 50% | • pagina de autentificare, inclusiv lista produselor cu detalii fără posibilitatea adăugării unor cantități: 15% | | ||
| | ::: | ::: | • pagina de înregistrare a unui utilizator: 10% | | | ::: | ::: | • pagina de înregistrare a unui utilizator: 10% | | ||
| - | | ::: | ::: | • pagina pentru definirea unui coș de cumpărături: 60%\\ • selecția meniului în funcție de o dată calendaristică: 10%\\ • gruparea în funcție de tipul de mâncare (aperitiv, fel principal, desert): 10%\\ • filtrarea pe baza unor anumite etichete: 10%\\ • gestiunea coșului de cumpărături (adăugare / editare / ștergere): 20%\\ • finalizarea unei comenzi cu semnalarea posibilelor erori: 10% | | + | | ::: | ::: | pagina pentru definirea unui coș de cumpărături: 60%\\ • selecția meniului în funcție de o dată calendaristică: 10%\\ • gruparea în funcție de tipul de mâncare (aperitiv, fel principal, desert): 10%\\ • filtrarea pe baza unor anumite etichete: 10%\\ • gestiunea coșului de cumpărături (adăugare / editare / ștergere): 20%\\ • finalizarea unei comenzi cu semnalarea posibilelor erori: 10% | |
| | ::: | ::: | • pagina pentru vizualizarea detaliilor unui cont: 15%\\ • date personale cu posibilitate de actualizare: 5%\\ • istoric comenzi: 10% | | | ::: | ::: | • pagina pentru vizualizarea detaliilor unui cont: 15%\\ • date personale cu posibilitate de actualizare: 5%\\ • istoric comenzi: 10% | | ||
| | 1 p | modularizare\\ • structura aplicaţiei: 30%\\ • aspecte legate de eficiență: 30%\\ • lizibilitatea codului, README: 20%\\ • concluzii legate de comparația privind performanțele tehnologiilor Java Servlets / JavaServer Pages și Node.JS: 20% || | | 1 p | modularizare\\ • structura aplicaţiei: 30%\\ • aspecte legate de eficiență: 30%\\ • lizibilitatea codului, README: 20%\\ • concluzii legate de comparația privind performanțele tehnologiilor Java Servlets / JavaServer Pages și Node.JS: 20% || | ||
