Introducere … … … … 9 [617663]

Cuprins
Introducere ………………………….. ………………………….. ………………………….. ……………………….. 9
1 Analiza domeniului de studiu ………………………….. ………………………….. ……………………… 11
1.1 Descriere a sistemului ………………………….. ………………………….. ………………………….. …. 12
1.2 Descrierea sistemelor existente ………………………….. ………………………….. ………………… 13
1.3 Importanța temei ………………………….. ………………………….. ………………………….. ……….. 18
2 Proiectarea sistemului ………………………….. ………………………….. ………………………….. …… 20
2.1 Descrierea comportamentală a sistemului ………………………….. ………………………….. ….. 21
2.1.1 Imaginea generală asupra sistemului ………………………….. ………………………….. ……… 22
2.1.2 Stările de tranzacție a sistemului ………………………….. ………………………….. ……………. 24
2.1.3 Modelarea vizuală a fluxurilor ………………………….. ………………………….. ………………. 26
2.1.4 Descrierea scenariilor a aplicației și fluxurile de mesaje și legături. ……………………. 28
2.2 Descrie rea structurală a sistemului ………………………….. ………………………….. …………… 31
2.2.1 Descrierea structurii statice și relatiile de dependență între componente ……………… 31
2.2.2 Modelar ea echipamentelor mediului de implementare ………………………….. ………….. 34
3 Realizarea sistemului ………………………….. ………………………….. ………………………….. ……. 35
3.1 Setarea proiectului ………………………….. ………………………….. ………………………….. ……… 38
3.2 Crearea rutelor ………………………….. ………………………….. ………………………….. …………… 39
3.3 Tabelele bazei de date ………………………….. ………………………….. ………………………….. … 40
3.4 Funcțiile aplicației ………………………….. ………………………….. ………………………….. ……… 43
3.5 Interfața aplicației ………………………….. ………………………….. ………………………….. ………. 46
4 Documentarea produsului realizat ………………………….. ………………………….. ………………. 48
5 Evaluarea economică a proiectului ………………………….. ………………………….. ……………… 53
5.1 Planul calendaristic ………………………….. ………………………….. ………………………….. ……. 54
5.2 Analiza SWOT ………………………….. ………………………….. ………………………….. ………….. 55
5.3 Calcul indicatorilor economic ………………………….. ………………………….. ………………….. 57
5.4 Uzura mijloacelor fixe și amortizarea activelor nemateriale ………………………….. …….. 60
5.5 Costul de producție ………………………….. ………………………….. ………………………….. ……. 60
5.6 Calculul indicatorilor economico -financiari ………………………….. ………………………….. . 61
Concluzii ………………………….. ………………………….. ………………………….. ……………………….. 62
Bibliografie ………………………….. ………………………….. ………………………….. …………………….. 63
Anexa A (centerSchema) ………………………….. ………………………….. ………………………….. …. 64
Anexa B (store.pug) ………………………….. ………………………….. ………………………….. ………… 66

UTM 526.2. 580 ME
Mod. Coala Nr. document Semnăt. Data
Elaborat Prisacari I. Proiectarea și
dezvoltarea unui
sistem informațional
de geolocalizare și
utilizare a serviciilor
auto. Litera Coala Coli
Conducător Scorb S. 8 66
Consultant Bodoga C. UTM FCIM
TI– 142 Aprobat Ciorbă D.

9
Introducere

Rezultatul final al oricărui sistem informațional este, ridicarea eficacitățîi funcționării
procesului de control. Toate sistemele informaționale conduc la îmbunătățirea circulației
documentelor, prelucrarea la calculator a masivelor info rmaționale mari, alcătuirea
diferitor rapoarte și buletine. Ele au sens doar atunci când în rezultat crește productivitatea
muncii muncitorilor, se îmbunătățește folosirea resurselor de muncă, materialelor și
energiei, crește cantitatea și calitatea produs elor emise.
Sistemul Informațional este un sistem om -mașînă. Este foarte important de construit
un model bun, adecvat obiectului, de creat un algoritm efectiv, de scris și compilat un
program rapid care nu are nevoie de resurse de calcul mari, de organizat colectarea,
păstrarea și căutarea informației. Dar dacă aici nu se va ține cont de factorul omenesc,
interesele utilizatorilor, atunci e greu de presupus expl uatarea cu succes a sistemului.
Sistemul Informațional elaborat trebuie să posede un înalt grad d e adaptare la
cerințele mereu schimbătoare ale utilizatorilor și vitalitate, adică capacitatea de a funcționa
în condițiile de de viere de la situațiile normale.
Asigurarea calităților de acest tip greu se supune formalizării și în afară de această are
nevo ie de participarea necontenită a inginerului în procesul analizei funcționării
sistemului și introducerii modernizării nece sare fără întreruperi în lucru.
În așa mod expluatarea Sistemelor Informaționale are două aspecte, folosirea
Sistemelor Informațion ale în calitate de instrument, ce ridică eficacitatea procesului de
producție, asigurarea capa cități de muncă și dezvoltării.
În cadrul lucrării de licență am decis să implementez o platformă web ce îi permite
utilizatorilor să se informeze privind ofertel e serviciilor auto din țară. Într -o societate unde
aproape fiecare familie deține măcar un automobil, existența unor servicii auto ce pot
diagnoză și repara automobilele este esențială. Sistemul constă o aplicație pe platforma
Web. Certințele pentru a rula sunt următoarele, dispozitiv ce permite conexiunea cu
internetul un PC, Mobil, Tabletă, conexiune la internet p entru sincronizare cu serverul.
Prin prezența lucrare se urmărește scopul de a proiecta și implementa un sistem
pentru geolocalizare a serviciil or auto. Aplicația respectivă este destinată pentru
companiile din domeniul auto, și pentru oricare u tilizator care este interesat .
Prin analiză domeniului de studiu au fost determinate principalele caracteristici ale
unui sistem de geolocalizare în baza cerecetării a trei platforme existente. Studiul a permis
examinarea profundă a sistemelor și depistarea modulelor principale, a particularităților
non-funcționale ș i a diferențelor între acestea.
Pentru implementarea aplicației, pe parcursul proiectării ac esteia se va utiliza
Enterprise Architect. Enterprise Arhitect este un instrument de modelare și design vizual
bazat pe UML. Platforma sprijină: proiectarea și construcția sistemelor informatice;
proceselor de modelare de afaceri. Acesta este utilizat de c ătre întreprinderi și organizațîi
pentru a modela nu numai arhitectură sistemelor lor, ci pentru a procesa punerea în
aplicare a acestor modele în întreaga ciclului de viață complet de dezvoltare a aplicațiilor .
Pentru proiectare se va utiliza limbajul U ML care reprezintă un limbaj standard pentru
descrierea de modele și specificații pentru software.

10
Printre principalele idei ale acestei lucrări de care trebuie de condus sunt cele de a
folosi modele de proiectare care vor ajută la mentenanță și scalabil itatea aplicației pe viitor
că să fie un sistem fiabil și unic pe piață pe ntru al dezvoltă în continuare.
Dacă să se realizeze un astfel de produs pentru care este pus scopul, tare mulți oameni
ar fi înteresați pentru a sponsoriza și a o dezvoltă în contin uare .
Caracterul asigurării matematice și programabile a Sistemului Informațional se
schimbă esențial pe măsura dezvoltării posibilităților mijloacelor tehnice. Acum
computerele posedă productivitate înaltă, memorie dezvoltată și posibilitatea unirii în
rețele globale și locale.
Limbajele de programare de nivel înalt se desăvârșesc. Ușurând lucrul utilizatorului
aceste limbaje cer o asigurare sistemică programabilă dezvoltată, conținutul căreia tot mai
des devine diferit pentru utilizatori diferiți și tre buie să se precizeze în procesul proiectării
Sistemului Informațional concret.

11
1 Analiza domeniului de studiu

În cadrul lucrării de licență am decis să implementez o platformă web ce îi permite
utilizatorilor să se informeze privind ofertele serviciilor auto din țară. Într -o societate unde
aproape fiecare familie deține măcar un automobil, existența unor servicii auto ce pot
diagnoză și repara automobilele este esențială. Interfață prietenoasă a programului ne
duce la utiliz area simplă a platformei.
Într-un studiu din 2010 a fost estimat că sunt aproximativ 1.015 miliarde de mașini ce
lucrează pe motor din toată lumea. În categoria respectivă intră totalitatea mașinilor de
categorie ușoară, medie și grea, cum ar fi autobuzele , însă nu include echipamentele de
construcție. Mai mult că atît, se estimează că pînă în anul 2035 acest numă r va crește pînă
la 2 miliarde.
Astfel, în prezent avem o multitudine de servicii auto disponibile, fiecare avînd
ofertele, posibilitățile și preț urile proprii. Problema constă în faptul că este foarte
inconvenabil pentru că o persoană să viziteze fiecare serviciu auto pentru a primi o
diagnoză privind problema mașinii sau pentru a găși cea mai bună ofertă valabilă.
Platforma pe care doresc să o dez volt în cadrul lucrării de licență încearcă să s oluționeze
problema respectivă.
În prezent o mulțime de companii ce prestează servicii auto și -au deschis propriul
website pentru a -și prezența ofertele și a -și descrie posibilitățile sale. Site -urile respect ive
descriu totalitatea serviciilor prestate, de la schimbarea uleiului, pînă la vînzarea roților și
diagnostica mașinii. Unele site -uri permit afișarea tuturor serviciilor auto pe hartă sau
posibilitatea de căutare a unor servicii. Eu mi -am pus că scop ex tinderea posibilităților
respective. Platforma dată va unifică totalitatea serviciilor auto, comparînd ofertele și
prețurile fiecărei companii. Nu doar atît, ea va permite contactarea rapidă și comodă cu
compania respectivă pentru a obține detalii privind serviciile prestate.Domeniul auto este
unul dintre cele mai profitabile activități, nu doar în divertisment, ci și în întreaga lume.
Ca dezvoltator, s -ar putea petrece o mulțime de timp pentru crearea produselor cu
caracteristici tehnice puternice și funcț ionalitate solide, dar, uneori, este ușor să uiți de
oamenii care vor fi în cele din urmă judecătorii la toate funcțiile și la design.
Un site alcătuit din mai multe pagini are de obicei o pagină inițială sau principală
numită homepage. Un site web este alc ătuit de regulă din mai multe pagini web. O pagină
web este un document creat cu ajutorul limbajului de marcare HTML și (opțional) limbaje
de programare cum ar fi PHP, ASP ș.a. fiind accesibil vizitatorilor prin intermediul
protocolului HTTP, care transfer ă informația de la server la browser.
Site-urile web se pot clasifica după o mulțime de factori, dar principalul factor rămâne
subiectul de activitate (sau conținutul) site -ului. Din punct de vedere tehnologic un site
web poate fi alcătuit din orice tipuri de date și informații statice, camere de discuții,
produse și servicii de vânzare, anunțuri, formulare de completat online, sunete digitalizate,
clipuri video, imagini statice și animate, efecte speciale, meniuri di namice și multe, multe
altele.

12
1.1 Descrierea sistemului

Sistemul este considerat că fiind o aplicație care ne permite să luăm legătura direct
din orce loc cu perosanele care se ocupă cu deservirea auto. Această presupune că
utilizatorul va avea la dispoziție o platformă unde va putea accesa o bază de date cu toate
autoservisurile, spălătorii a uto etc. din Republica Moldova.
Utilizatorul va putea lăsa un mesaj cu problema care o are mașina sa, și în cel mai
scurt timp va primi oferte de la reprezentanții auto -servis. Oferta va conține prețul pentru
lucru efectuat și timpul cînd va fi efectuat și multe altele.
Un alt aspect al aplicației constă că utilizator va putea alege oferta cea mai
convinabila. De a lua legătură direct cu un auto -servis dorit pentru soluționarea problemei
mașinii, De a v izualiza topul cu cele mai recomandate autoservisuri, topul cu cele mai
mari reducere de reparare amașinii și piesele din magazinul auto. Pagină principală a
platformei descrisă poate fi observată în figura 1.1.

Figura 1. 1 – Services centers

13
1.2 Descrierea sistemelor existente

În prezent există o multitudine de platforme similare cu cea pe care încercăm să o
dezvoltăm în cadrul lucrării de licență. Lucrarea a fost bazată pe analiza celor mai
populare sisteme deja existente și crearea unui nou sist em pe baza celor mai bune
caracteristici ale aplicațiilor analizate, în combinație cu noi caractersitici dezvolatate
pentru aplicația în cauză. În subcapitolele de mai jos sunt prezentate trei platforme similare
de geolocalizare a serviciilor auto .
Ideea s tă la suprafată. Pe de o parte, conducătorii auto au întotdeauna nevoie să aleagă
un serviciu pentru repararea mașinii. De obicei se intamplă astfel: o persoană se caută
toate resursele disponibile, pe directoare, pe Internet, cheamă zeci de servicii. Pe d e altă
parte -există mii de centre de îngrijire a autovehiculelor care caută clienți. Aceștia sunt
obligați să investească în publicitate, își cheltuiesc energia pentru găsirea și atragerea
clienților. Uremont.com este o platformă care rezolvă toate problem ele pentru ambele
părti[1].
Pe site -ul nostru, acest lucru se intamplă pur și simplu: proprietarul mașinii
completează o cerere scurtă, care enumeră principalele caracteristici -marca, modelul, anul
fabricării mașinii și descrie ce trebuie făcut. Pagină principală a platformei poate fi
observată în figură 1.2.

Figura 1. 2 – Uremont . Interfață

Cu un singur clic, aplicația se adresează tuturor centrelor de îngrijire a
autovehiculelor conectate (și în prezent sunt aproape 4000). Partenerii de service auto care
sunt gata să accepte aplicația trimit răspunsul cu o indicație a costului exact al reparației.
Dacă este necesar, puteți să specificați imediat toate detaliile necesare în chatul cu
clientul. Că rezultat, șoferul are posibilitatea de a alege î ntre câteva oferte optime și
serviciul de mașini -clientul. Totul este transparent și confortabil[1].
În ansamblu, ideea rămane aceeași. Dar dezvoltăm constant soluția, adăugăm noi
caracteristici și funcții.

14
De exemplu, clienții sunt deja disponibili în georeferențiere și o procedură de aplicare
simplificată. Autoserviciile, pe de altă parte, au putut aplică filtre pentru a aloca ofertele
solicitate din masă totală. Dezvoltarea programelor de sesizare.
Acum, clienții noștri văd mai multe sisteme de ratin g pentru service auto, pot alege
notificări prin SMS sau prin e -mail, multe alte idei interesante sunt în curs de dezvoltare,
despre care nu putem spune incă. În perspectivă, Uremont.com ar trebui să se dezvolte
într-un portal vast de automobile, capabil s ă rezolve orice problemă legată de masină. În
figură 1.3 este reprezentat un model de cerere.

Figura 1.3 – Uremont . Vizualizarea cererii.

Turbina.md are o experienta de peste 5 ani pe piata serviciilor auto. Datorită tehnicii
performante și a personalului, avem toate conditiile necesare pentru repararea oricarui
model de turbosuflanta [3]. Pagina principală a platformei p oate fi observată în figura 1.4

Figura 1. 4 – Turbina

15
Compania Turbina.md, este de alerul oficial al marcii Melett și au următo arele servicii
Auto -Service :
– testarea tehnică planificată, schimbarea uleiului, lichidelor tehnic e și a materialelor
consumabile;
– diagnosticul computerizat și reparația aparatajului electronic ;
– diagnosticul și reparația turbosuflantelor ;
– diagnos ticul și reparația motoarelor ;
– diagnosticul și schimbarea elementelor șasiului ;
– reglarea geometriei rotilor format 3D .

Mai jos, va punem la dispozitie doar cateva dintre punctele forte:
– personal calificat ;
– utilajul tehnic ;
– transparenta;
– preturi accesibile
– garantează calitatea.
Într-un serivice -auto este importantă pregătirea și calificarea echipei de mecanici, care
contribuie direct la calitatea serviciilor oferite! Turbina.md dispune de un personal înalt
calificat, cu o pregătire și e xperiență vastă în domeniul serviciilor de reparații auto și cele
ale recondiționării turbosuflantelor. Va așteptăm cu mare drag să va convingeți!
Orice echipă de profesioniști are nevoie de unelte specializate, de aceea Turbină.md,
va pune la dispoziție utilaj, echipament și instrumente doar de ultima generație.
Sunt întotdeauna foarte deschiși și informăm, preventiv, clienții, despre tot ceea ce
trebuie să știe. Nici nouă nu ne plac surprizele neplăcute, de aceea, de la bun început, veți
cunoaște probl emele autovehiculului Dvs, precum și costul serviciilor necesare pentru
reparație. Nu percepem taxe ascunse sau lucrări suplimentare fără acordul clientului!
Toate lucrările efectuate de noi sunt îndeplinite, respectând cu strictețe cele mai înalte
standa rde ale calității. Turbină.md garantează întotdeauna calitatea serviciile executate.
Suntem printre puținele companii de pe piață, care oferă termen de garanție pe o perioadă
de 12 luni, fără limită în km parcurși, pentru orice turbosuflantă recondiționată !
Fiecare, își dorește calitate înaltă, la prețuri accesibile. Pe parcursul anilor de
activitate, ne -am câștigat o renume pe piață, doar datorită calității excepționale a lucrărilor
executate, păstrând, totodată nivelul scăzut al prețurilor. Astfel, absol ut toate costurile
lucrărilor de reparație auto sunt menținute mereu sub nivelul mediu al pieții.
Turbină.md oferă servicii de recondiționare a turbosuflantelor auto și asigură
montarea pe orice model de autovehicul, totul în decurs de mai puțin de 24 de ore.
În procesul montării, folosim doar piese 100% originale și ne asigurăm că,
turbosuflantele să fie recondiționate conform standardelor producătorilor[3].

Servicii de recondiț onare turbosuflantelor auto:
– diagnosticarea turbosuflantei ;
– inlocuirea cartusului ;
– schimbarea kitului de reparatie a cartusului ;
– balansarea cartusului ;

16
– curatirea geometriei variabile ;
– inlocuirea se reparatia actuatorului ;
– reglarea si adaptarea turbosuflantei .

În figura 1.5 putem vizualiza lista de mărci de mașina a căror turbini se efectueaza
reparația.[3] :

Figura 1.5 – Reparatia turbinelor .

Rețeaua centrelor de anvelope și stații de service Master LUX of eră clienț ilor săi auto
servicii, atit reparați i prompte de înaltă calitate cît deservire de difer ită complexitate pentru
autovehicule ș i autocamioane de toate tipurile [2].
Pagina principală a platformei poate fi observată în figura 1. 6.

Figura 1. 6 – Master -Lux.

17
La dispozitia clientilor avem – spații confortabile și spațioase de parcare și o zonă de
relaxare dotată cu supraveghere video unde clientii pot monitoriza pro gresul lucrarilor
auto service.
La auto service Master LUX muncesc specialiști cu experiență, care trec certificare și
cursuri de formare, ce se specializeaza în următoarele tipuri de lucru [2]:
– montarea si balansarea anvelopelor;
– 3-d Stand computerizat pentru geometria roților;
– schimbul curelelor;
– repararea anvelopelor pentru camioane;
– repararea anvelopelor pentru autoturisme;
– diagnosticul și repararea șasiului;
– reparația echipamentelor electrice;
– curățare sistemelor de ardere diesel și benzină;
– schimbul uleiului și a filtrelor;
– reparatia motorului;
– degajarea Jantelor de frână;
– reparatia sistemului de aer condiționat;
– indreptare Jantelor de oțel la roți;
– indreptarea jantelor turnate din aliaj ușor;
– sudarea cu Argon.
În figura 1.7 este prezentată serviciile auto de bază a auto service Master LUX .

Figura 1.7 – Master -Lux. Servicii auto

18
Auto service Master LUX ofera și urmatoarele servicii auto:
– depozitarea anvelopelor («Hotelul de anvelope») ;
– ajustarea farurilor ;
– injectarea cu azot ;
– spălarea anvelopelor ;
– verificarea și înlocuirea lichidului de frână ;
– verificarea și înlocuirea lichidului de răcire.

În continuare va fi cara cterizat sistemul dezvoltat în cadrul lucrării de licentă în
comparație cu sistemele descrise anterior. Este dificil să compari aceste trei sisteme,
deoarece aceste platforme sunt cele mai bune din seria lor și practic toată munca pe care o
depuso dezvolt atori este la ideal. Dar este puțin diferentă între ele. Pentru a compară aceste
3 sisteme se va face după următoarele caracteristici: mărci de deservire, tipuri de
deservire, regiunea de deservire și multe altele.
Nu toate autoservisurile repară toate m ărcile de mașini. Unele autoservisuri repară
mașini numai de mărci anumite, acceste autoservisuri sunt mai specializate. Precum altele
repară toate mărcile de mașină.
Un alt factor de comparare este regiunea unde poate fi reparat automobilul defectat.
Nu toate serviciile prestate sunt pe întregul teritoriu al Republicii Moldova, ceea ce
platfor mă pe care va fi dezvoltată va permite reparația automobilului în cel mai apropiat
loc și cel mai scurt timp.
Alți factori de comparare este tipuri de deservire și prețul. Nu toate autoservisurile
deservesc toată mărcile de mașină, sunt unele care repară anumite mărci de mașini altele
nu. Prețul la deservirea mașinii în dierite autoservisui sunt diferite. Cu ajutorul platformei
datele utilizatorul va putea sin gur alege de care autoservis să fie deservit cu un preț care îl
va satisface.

1.3 Importanța temei

Considerînd că tehnologiile se dezvoltă la un pas rapid și faptul că tehnologiile
informaționale sunt incluse în majoritatea domeniilor de activitate, am văzut aceasta ca o
oportunitate de a -mi utiliza cunoștințele obținute în cadrul studiilor Tehnologiilor
Informaționale pentru a inova și îmbunătăți un aspect al vieții oamenilor.

Platforma respectivă este proiectată cu următoarele obiective în gînd:
– crearea unui mod rapid și eficient de găsire a serviciilor auto;
– compararea prețurilor și a ofertelor pentru găsirea celei mai bune oferte;
– contactarea rapidă cu unul dintre serviciile auto alese;
– afișarea tuturor ofertelor legate de serviciile auto din Republica Moldova;
– crearea unei platforme de informare cu o interfață intuitivă și ușor de navigat.

Desigur, obiectivele enumerate mai sus reprezintă doar un fragment din totalitatea
funcționalităților prezente în sistemul respectiv. Scopul pr incipal al platformei este
revoluționarea modului în care deținătorii de automobile utilizează serviciile prestate de
companiile auto.

19
Scopul de bază constă în dezvoltarea unei platformi de complexitate medie, Aceasta
va permite nu doar extinderea capacită ților de analiză și design a aplicațiilor, ci și celor la
nivel de implementare și dezvoltare.
Platforma implementată în cadrul lucrării de licență va crea un mediu pentru toți
posesorii de mașini , unde utilizatorii vor putea accesa informații despre anumi te servici
auto, își vor putea expune părerea despre serviciile folosite .
Platforma va conține și un algoritm de sugerare a serviciilor, ce -i va permite
utilizatorului să aleagă un serviciu din lista de recomandări. Astfel, această platformă nu
numai că of eră informații despre cărțile existente, ea oferă și sugestii pentru a îndruma
utilizatorii spre alegerea următorii cărți favorite.
Pentru dezvoltarea unei astfel de platforma este strict necesară o gîndire buna și
analiză profundă a tehnologiilor informa ționale și domeniului, iar experiența obținută în
final are un rol important în instruirea mea ca specialist în domeniul modelării diferitor
sisteme informatice și informaționale

20
2 Proiectarea sistemului

Drept lucrar e de curs mi -am propus să dezvolt aspectele legate de analiza și
modelarea unui sistem de geolocalizare a seviciilor auto.
Modelarea sistemului dat a fost elaborată în istrumentul Enterprise Architect. S -a ales
instrumentul dat, deoarece este simplu, ușor de utilizat și comunicabil cu utilizatorul.
Enterprise Architect este un software de tip CASE pentru design -ul și construcția
sistemelor software, bazat pe UML. Acest pachet prevede modelarea completă a ciclului
de viață pentru afaceri și sisteme IT; softw are și ingineria sistemelor și integrarea
dezvoltării în timp real.
Integrînd capacitățile de gestionare a cerințelor, Enterprise Architect ajută la
urmărirea specificațiilor la nivel înalt pentru analiza, proiectarea, implementarea, testarea
și întreținer ea modelelor folosind UML.
Enterprise Architect este un instrument grafic, proiectat pentru a ajuta echipele,
construind sisteme robuste și întreținute. Utilizând calitatea înaltă, integrarea raportării și
documentării poate oferi o viziune împărtășită cu ușurință și precizie. Este un mediu de
modelare cu toate necesarele pentru o proiectare UML chiar și mai mult precum
vizualizarea, generarea codului pe bază de diagrame, inclusiv suportul proiectelor mari.
Acesta la rîndul său are și următoarele caracteris tici:
În paragraful respectiv vor fi reprezentate tipurile de diagrame UML , specifice unue
aplicați de geolocalizare a seviciilor auto. În urma reprezentării grafice a diagramei,
urmează descrierea fiecărei diagrame în parte.
Este de mult știut faptul că în trecut programatorii dezvoltau programe fără o bună
analiză și o bună proiectare a respectivelor programe. Faza de analiză și proiectare a unui
proiect trebuie sa fie gata înainte de realizarea codului, pentru a obtine o atenție mărită din
partea diver șilor dezvoltatori. Aceste etape au fost ignorate în trecut, dar în prezent orice
dezvoltator recunoaște importanța acestor faze deoarece s -a dovedit ca de acestea depinde
producerea si refolosirea de software. Pentru analiza si proiectarea programelor s -au creat
limbajele de modelare. Unul din aceste limbaje de modelare este limbajul de modelare
unificat – UML (The Unified Modeling Language) [4]
UML nu este un simplu limbaj de modelare orientat pe obiecte, ci în prezent, este
limbajul universal standard p entru dezvoltatorii software din toata lumea. UML este un
limbaj de modelare care ofera o exprimare grafica a structurii si comportamentului
software. Pentru această exprimare grafică se utilizează notațiile UML.
Notațiile UML constituie un element esenția l al limbajului pentru realizarea propriu –
zisa a modelării și anume partea reprezentării grafice pe care se bazeaza orice limbaj de
modelare. Modelarea în acest limbaj se realizează prin combinarea notațiilor UML în
cadrul elementelor principale ale acesto ra, denumite diagrame. În cadrul UML -ului
descoperim 9 tipuri de diagrame: diagrama cazurilor de utilizare, diagrama de secventa,
diagrama de colaborare, diagrama de clase (cea mai utilizata), diagrama de stari, diagrama
de componente, diagrama de construc tie, diagrama de obiecte, diagrama de activitati. În
cele ce urmează vor fi prezentate notațiile UML care vor fi grupate dupa diagramele
corespunzătoare fiecarei notații în parte.

21
2.1 Descrierea comportamentală a sistemului

Pentru a modela și a proiecta sistemul dat, se vor folosi diagramele UML, ele sunt:
– diagrama cazului de utilizare;
– diagrama de interacțiune:
a. diagrama de secvență;
b. diagrama de colaborare.
– diagrama claselor;
– diagrama de comportament:
a. diagrama de stări;
b. diagrama de activități .
– diagrama de componente;
– diagrama de amplasare.

Diagrama cazurilor de utilizare prezintă acțiunile reciproce dintre variantele posibile
de utilizare și personaje sau sisteme. Diagramele reflectă cerințele față de sistem din
punctul de vedere al uti lizatorului. În așa mod cazurilor de utilizare sunt funcțiile efectuate
de sistem, iar persoanele sunt persoane cointeresate de sistemul elaborat. Diagrama arată
că persoana inițiază varianta diagramei de utilizare. La fel din ea se vede că persoanele
cointeresate primesc date de la cazul de utilizare. Din diagrama cazurilor de utilizare se
poate afla multă informație conținută în sistem. Acest tip de diagrame descrie funcționarea
sistemului la general, iar utilizatorii, managerii proiectării analitice, spe cialiști și toți cei
cointeresați în sistemul dat po t să înțeleagă sistemul studiat [4].
Diagrama de stare – distribuie un mod de modelare variată a stărilor în care un obiect
poate exista. În timp ce diagrma claselor arată imaginea statică a claselor și r elațiilor dintre
ele, diagrama de stare sunt utilizate la modelarea comportamentul dinamic a sistemului.
Diagramele de stare sunt destinate pentru modelarea diferitor stări în care poate să se
afle obiectul. În timp ce diagrama claselor arată imaginea sta tică a claselor și legăturile lor,
diagrama stărilor se folosește la descrierea dinamică a comportamentului sistemului.
Diagrama de stare reflectă comportamentul obiectului. Principalele stări ale diagramei
sunt: început și sfîrșit. Începutul gr afic este reprezentat ca un cerc plin de culoare neagră,
și corespunde stării obiectului în momentul creării. Starea finală se reprezintă grafic prin
două cercuri unu în altul. Cel din mijloc este plin și de culoare neagră [4].
Diagramele de activități – descrie cursul funcționării sistemului. Ele pot fi folosite
pentru a ilustra cursul evenimentelor printr -o precedentă. Aceste diagrame definesc unde
începe cursul lucrului și unde sfîrșește, ce activități au loc pe parcursul cursului de lucru, și
în ce or dine activitățile au loc.
Diagramele de activitate servesc pentru descrierea dinamicii sistemului în situațiile în
care stările observate sînt reprezentate de actiuni sau subactivități, iar evenimentele care
declansează tranziția de la o stare la alte, sî nt în totalitate sau în cea mai mare parte,
constituite de încheierea acestor acțiuni sau subactivități. Acest tip de diagramă foloseste
următoarele elemente: acțiuni, tranziții, puncte de decizie și bare de sincronizare [4].
Diagramele de secvență prezintă interacțiunile care au loc între diverse obiecte ale
unui sistem, ordonate cronologic. Ele determină obiectele și clasele implicate într -un

22
scenariu și secvențele de mesaje transmise între obiecte, necesare îndeplinirii
funcționalității scenariului. Diag ramele de secvență sunt asociate unui caz de utilizare.
Fiecărui obiect, clasă îi corespunde o linie a timpului, reprezentată printr -o linie
punctată sub reprezentarea obiectului. Mesajele transmise între obiecte sunt reprezentate
prin săgeți etichetate c u numele mesajului. În diagramele respective interacțiunile dintre
legături și obiecte sunt reprezentate în evoluția lor în timp [4].
Diagramele de colaborare reprezintă estimarea valorii schimbărilor unei clase, unei
operații etc. Încît diagrama dată arat ă ce obiecte sunt legate între ele, schimbînd unul din
obiecte veți înțelege care obiecte vor fi „atinse” de această schimbare. Diagramele de
colaborare prezintă interacțiunile care au loc între diverse obiecte ale unui sistem,
punîndu -se accentul pe orga nizarea obiectelor cooperante și nu pe ordonarea cronologică a
mesajelor, adică sunt reprezentări spațiale ale obiectelor, legăturilor și interacțiunilor [4].

2.1.1 Imaginea generală asupra sistemului

Subcapitolul respectiv reprezintă diagramele cazuril or de utilizare pentru sistemul dat.
Fiecare diagramă reprezintă un set de activități specifice unuia dintre modulele aplicației.
În figura 2 .1.1 este prezentată diagrama cazurilor de utilizare ce specifică acțiunile
posibile ale utilizatorul în momentul accesării paginii .
Cazurile de utilizare sunt următoarele:
– logara , specifică acțiunea de logare în sistem;
– înregistrare , specifică acțiunea de înregistrare in sistem;
– scrie mesaj , specifică acțiunea de a scrie mesaje;
– înscriere cerere , specifică acțiune a de înscrierea unei cereri la un autoservice;
– vizualizeaza oferte , specifică acțiunea de vizualizare a ofertelor curente;
– se programeaza , specifică acțiunea de programare la un autoservice .

Figura 2 .1.1 – Utilizator

23
În figura 2 .1.2 este prezentată dia grama cazurilor de utilizare ce specifică acțiunile
posibile ale autoservisului în momentul accesării paginii ..
Cazurile de utilizare sunt următoarele:
– logara , specifică acțiunea de logare în sistem;
– înregistrare , specifică acțiunea de înregistrare in si stem;
– scrie mesaj , specifică acțiunea de a scrie mesaje;
– raspunde la cerere , specifică acțiunea de raspunderea la cererie de la un utilizator ;
– vizualizarea cererilor , specifică acțiunea de vizualizare a cererie de la un utilizator .

Figura 2 .1.2 – Autoservis

În figura 2 .1.3 este prezentată diagrama cazurilor de utilizare ce specifică acțiunile
posibile în timpul înscrierii unei cereri de către utilizator.

Figura 2. 1.3 – Înscrierea cererii

24
Cazurile de utilizare sunt următoarele:
– selectarea modelu lui mașinii , specifică acțiunea selectarea modelului mașinii ;
– selectarea seria mașinii , specifică acțiunea de selectarea seria mașinii;
– selectarea anul mașinii , specifică acțiunea de s electarea anul mașinii ;
– selectarea regiunii , specifică acțiunea de selectarea regiunea dorită ;
– introducerea problema mașinii , specifică acțiunea de introducerea problema mașinii ;
– încarcarea fișierilor multimedia , specifică acțiunea de încarcarea fișierilor multimedia :
foto, video, sound.

În figura 2 .1.4 este prezentată diagr ama cazurilor de utilizare ce specifică acțiunile
posibile în timpul înregistrării unei cereri de către utilizator.
Cazurile de utilizare sunt următoarele:
– introducerea email , specifică acțiunea introduce email personal;
– introducerea login,parolă , specif ică acțiunea de audentificare in sistem ;
– introducerea numele,prenumele , specifică acțiunea de introducere a date perosnale;
– introducerea adresa,telefonul , specifică acțiunea de î ntroducerea a datelor de contact.

Figura 2 .1.4 – Înregistrare

2.1.2 Stările de tranzacție a sistemului

În cadrul subcapitolului respectiv, sunt descrise careva diagrame de stări pentru
sistemul dezvoltat.
În figura 2.1.5 este prezentată diagrama de stări corespunzătoare logare în aplicației .
Diagrama respectivă definește stă rile posibile odata ce se lansează aplicația . După cum se
observă în figură, din starea inițială, trece în starea inițializării, după care trece in stare de
completarea cămpurilor. Dupa completarea cîmpurilor are loc validarea, dacă datele sunt

25
corecte tre ce in starea acces setat, daca datele nu corespund are loc trecerea in starea
inițiere .Ulterior se trece în starea finală ce denotă faptul că cererea a fost procesată.

Figura 2.1.5 – Diagramă de stări. Lansarea aplicației

În figura 2.1.6 este prezent ată diagrama de stări programarea la un autoservis.
Diagrama respectivă definește stările posibile pentru programarea la un serviciu auto. Din
starea sa inițială, trece in starea de programare, dupa care are loc trecerea in starea de
completarea datelor. În momentul cînd datele au fost completate, în dependență dacă
datele corespund cerințelor se trece in starea de programare, daca nu respecta cerințele se
trece in starea de anulare. Ulterior se trece în starea finală ce denotă faptul că cererea a fost
procesată sau anulata.

Figura 2.1.6 – Programarea

26
În figura 2.1.7 este prezentată diagrama de stări vizualizarea cererii . Diagrama
respectivă definește stările posibile pentru vizualizarea cererii de carte servicul auto . Din
starea sa inițială, trece in starea de vizualizare a cererii . În dependență daca cererea este
acceptată se trece in starea de accepare a cererii, daca nu are loc trecerea în starea de refuz
a cererii. Ulterior se trece în starea finală ce denotă faptul că cererea a fost refuzată sau
acceptată .

Figura 2.1.7 – Vizualizarea cererii

2.1.3 Modelarea vizuală a fluxurilor

În cadrul capitolului respectiv, sunt descrise diagramele de activități pentru sistemul
dezvoltat.
În figura 2.1.8 este pr ezentată diagrama de activități înscrierea cererii . Diagrama
respectivă definește executarea secvenței de acțiuni la accsesarea în aplicație.

Figura 2.1.8 – Înscrierea cererii

27
După cum se observă în fig ură, s e realizează logarea, specifică faptul că utilizatorul se
logează , în cazul cînd user -ul introduce date incorecte se repetă activitatea de introducere
datelor pînă cînd datele vor fi corec te și apoi se continuă execuția, ulterior, se observă
elementele fo rk/join, unde are loc selectarea seria mașinii, selectarea anul mașinii,
selectarea modelul ma șinii și introducerea problemei, se trece în starea salvare , specificînd
execuția cu succes a pașilor anteriori.
În figura 2.1.9 este prezentată diagrama de activ ități căutarea autoservis . Diagrama
respectivă definește executarea secvenței de activități la cautarea unui autoservis . Se
observă faptul că utilizatorul va tasta caută un autoservis .

Figura 2.1.9 – Căutarea autoservis

În figura 2.1.10 este prezentat ă diagrama de activități solicitarea cererii. Diagrama
respectivă definește executarea secvenței de activități la solicitarea unei cereri din baza de
date. Autoservisul rapunde de solicitare, afișarea cererii și modificarea cautarii.Baza de
date rapunde de cautarea conform datelor cererilor.

Figura 2.1.10 – Solicitarea cereri i

28
2.1.4 Descrierea scenariilor a aplicației și fluxurile de mesaje și legături.

Subcapitol descrie diagramele de secvențe și colaborare elaborate pentru sistemul.
Prin intermediul acestora se studiază particularitățile temporale ale interacțiunii obiectelor
și colaborarea între acestea în cadrul sistemului.
În figura 2.1. 11 este prezentată diagrama de secvenț înregistrarea cererii în baza de
date. Aceasta studiază modul în care se transmit mesajele între obiecte. În diagrama
respectiva avem următoarele obiecte:
– clientul;
– serviciul RepairCar ;
– baza de date.

Figura 2.1 .11 – Înregistrarea a cererii

În figura 2.1 .12 este prezentată diagrama de secvenț logare în sistem de către
utilizatori. Aceasta studiază modul în care se transmit mesajele între obiecte. Utilizatorl
introduce datele după care cere acces de la sistem pentru validarea datelor, daca acestea
sunt corecte are loc expedierea datelor către server unde se petrece validarea, apoi se
returnează pagina de acces utilizatoului. În diagrama respectiva avem următoarele obiecte:
– clientul;
– serviciul RepairCar ;
– server .

29

Figura 2.1 .12 – Logare în sistem
.
În figura 2.1 .13 este prezentată diagrama de secvenț programarea la un servici u auto
de către utilizatori. Aceasta studiază modul în care se transmit mesajele între obiecte. În
diagrama respectiva avem următoarele obiecte:
– clientul;
– cont;
– autoservis ;
– programare .

Figura 2.1 .13 – Programare

30
În figura 2.1 .14 poate fi observată d iagrama de colaborare, solicitarea listei de
programare la un serviciu auto. După cum se observă în figură, aceasta denotă aspectul
structural al comunicării între obiectele sistemului în moment ce clientul încarcă să se
solicită lista cu date libere pentr u programare la un serviciu auto. În diagrama respectiva
avem următoarele obiecte ce interacționează între ele:
– clientul;
– autoservis;
– programare .

Figura 2.1 .14 – Solicitarea listei de programare

În figura 2.1 .15 poate fi observată diagrama de colabora re, Procesul de utilizare a
sistemului din punct de vedere al utilizatorului” . După cum se observă în figură, aceasta
denotă aspectul structural al comunicării între obiectele sistemului în moment ce clientul
se logează în sistem.

Figura 2.1.15 – Proce sul de utilizare a sistemului din pu nct de vedere al utilizatorului

31
2.2 Descrierea structurală a sistemului

O clasă conține structura și comportamentul comun unui set de obiecte. O clasă este o
abstracție a entităților lumii reale. Cînd acestea există în lumea reală, ele sunt instante ale
clasei, și atribuite obiectelor. Pentru fiecare clasă care are un comportament temporal
semnificativ, putem creea o diagramă de stare să descrie acest comportament.
Numele claselor, fiecare clasă trebuie să conțină un num e. În diagramele de clase,
toate simbolurile de clase cu același nume se consideră a reprezenta aceeași clasă,
indiferent de diagrama de clase în care apare [4].
O diagramă de componente prezintă dependențele existente între diverse componente
software (cod sursă, cod binar, fișiere executabile, librării cu legătură dinamică etc) ce
compun un sistem informatic. Aceste dependențe sunt statice (au loc în etapele de
compilare sau link -editare) sau dinamice (au loc în timpul execuției). O componentă este
un modu l soft (cod sursă, cod binar, dll, executabil, etc) cu o interfață bine definită.
Un tip de componentă reprezintă o parte distinctă, realocabilă, a implementării unui
sistem. Instanța unei componente este o unitate de implementare în execuție și poate f i
utilizată pentru reprezentarea unităților de implementare care au o identitate în momentul
execuției. Îm diagrama de componente entitatea principală este componenta [4].
Diagramele de componente elaborate reprezintă structura la nivel fizic al sistemului,
descrisă prin fișiere. Diagramele amplasărilor prezintă configurația elementelor de
procesare din timpul execuției și componentele, procesele și obiectele care le conțin.
Fiecare model al unui sistem informatic are asociata o singura diagrama de exploatar e.
Instanțele componentelor soft reprezintă manifestări a unor unități de cod în cadrul
execuției. Componentele care nu există ca entități de execuție nu apar în aceste diagrame,
ci doar în diagramele de componente.
O diagramă de exploatare este un graf de noduri conectat e prin asocieri de
comunicare. Nodurile pot conține instanțe ale componentelor (componenta există sau se
execută pe nodul respectiv). Componentele pot conține obiecte (acestea sunt localizate în
componente) [4].

2.2.1 Descrierea structu rii statice și relatiile d e dependență între
componente

În cadrul capitolului respectiv, sunt descrise diagramele de clase pentru sistemul
dezvoltat. Este necesar a menționa faptul că, diagramele descrise ulterior nu definesc
întreg sistemul în plan stru ctural. Pot fi adăugate/șterse/modificate careva clase la
necesitate.
În figura 2.2 .1 este prezentată diagrama de clase ce definește relația dintre
principalele clase ale sistemului modelat. Relațiile dintre clase este de asociere, fiind
descrise și roluri le fiecăreia dintre ele, precum și multitudinea existentă. Putem vizualiza
că clasa client realizeaza interfața care permite adăugarea unei cereri. Clasa utilizator
realizează interfața ce permite logarea în sistem.

32

Figura 2.2.1 – Clasele de baza

În figura 2.2 .2 este prezentată diagrama de clase ce definește generalizarea
utilizatorului. Clasa client are ca atribute login și parolă iar ca metode adaugarea cererii și
editarea cererii. Iar clasa autoservis are ca atribute login și parolă iar ca metode ad ăugarea
anunțurilor, vizualizarea cererii, editarea. Relațiile dintre clase este relația de generalizare.

Figura 2.2.2 – Corespunzătoare generalizarii utilizatorului

33
În figura 2.2 .3 este prezentată diagrama de clase ce corespunde programarii
utilizato rului la un serviciu auto. Clasa programare are ca atribute an, data, ora și ca
metodă programarea. Clasa client are ca atribute login și parolă iar ca metode adaugarea
cererii și editarea cererii. Iar clasa autoservis are ca atribute login și parolă iar c a metode
adăugarea anunțurilor, vizualizarea cererii, editarea. Relațiile dintre clase este relația de
compoziți.

Figura 2.2.3 – Corespunzătoare programărei

În figura 2.2 .4 este prezentată diagrama ce definește conexiunea tuturor fișierelor
aplicației . Se observă faptul că aceasta este asemănătoare cu diagramele de clase descrise
anterior, și faptul că se utilizează 3 librării dinamice. Sunt reprezentate fișierele principale
necesare pentru dezvoltarea interfeței sistemului. Pentru pagina web a aplicaț iei se
utilizează mai multe componente, fișiere php, js, css, librării și imagini.

Figura 2.2 .4 – Structura aplicației

34
2.2.2 Modelarea echipamentelor mediului de implementare

În figura 2.2 .5 respectivă sunt reprezentate componentele necesare funcționa lității
Sistemului fiind reprezentate ca un graf de noduri conectate prin asocieri de comunicare.
Nodurile pot conține instanțe ale componentelor (componenta există sau se execută pe
nodul respectiv).
Componentele sunt conectate cu alte componente sau in terfețele acestora prin
intermediul unor relații de dependență (săgeți întrerupte) ceea ce reprezintă faptul că o
componentă folosește serviciile altei componente.

Figura 2.2.5 – Diagramă de amplasare .

În figura 2.2.6 este prezentat nucleul funcționă rii sistemului. Deoarece este o aplicatie
Web, perifericele sunt mai putin importante, dar indispensabile sunt cele 2 servere din
partea superioară a diagramei: serverul pentru baza de date și serverul web, toate acestea
sunt necesare pentru a transmite in formația catre utilizatori, numarul cărora poate varia
mult. De accea serverele trebuie să fie extensibile.

Figura 2.2.6 – Web server

35
3 Realizarea sistemului

În cadrul capitolului respectiv vor fi descrise totalitatea instrumentelor și a
tehnologiil or utilizate în cadrul sistemului informațional. Prin intermediul descrierii
tehnologiilor putem înțelege modul de implementare a funcționalităților sistemului,
analizînd avantajele și dezavantajele fiecărei metodologii. Descrierea începe cu o analiză a
instrumentelor folosite în cadrul platformei.
Descrierea instrumentelor oferă informații despre avantajele și dezavantajele
instrumentului, funcționalitățile și capabilitățile principale ale sale, motivul utilizării
instrumentului în procesul de elaborare a sistemului informațional, cît și a diferențelor
dintre elaborarea sistemului cu instrumentul respectiv în comparație cu elaborarea manuală
a sistemului. În subcapitolul respectiv vor fi descrise instumentele ce au fost utilizate la
elaborarea sistemului in formațional .
Pentru a elabora websiteul s-a folosit următoarele instumentele principale:
– Visual Studio Code ;
– JavaScript ;
– MongoDB Compass ;
– Git;
– Node.js .

Visual St udio Code (figura 3.1) este un editor de cod sursă dezvoltat de Microsoft
pentr u Windows, Linux și MacOS. Acesta include suport pentru depanare, control Git
încorporat, evidențierea sintaxei, finalizarea codului inteligent, fragmente și refactorizarea
codului. De asemenea, este personalizabil, astfel încât utilizatorii pot schimba te ma
editorului, comenzile rapide de la tastatură și preferințele. Este gratuit și open -source, deși
descărcarea oficială est e sub licență de proprietate .

Figura 3.1 – Visual Studio Code

36
JavaScript (figura 3.2 ) este un limbaj de programare orientat obie ct bazat pe
conceptul prototipurilor . Este folosit mai ales pentru introducerea unor funcționalități în
paginile web, codul JavaScript din aceste pagini fiind rulat de către browser. Limbajul este
binecunoscut pentru folosirea sa în construirea siturilor w eb, dar este folosit și pentru
accesul la obiecte încastrate (embedded objects) în alte aplicații. A fost dezvoltat inițial de
către Brendan Eich de la Netscape Communications Corporation sub numele de Mocha,
apoi LiveScript, și denumit în final JavaScript .
În ciuda numelui și a unor similarități în sintaxă, între JavaScript și limbajul Java nu
există nicio legătură. Ca și Java, JavaScript are o sintaxă apropiată de cea a limbajului C,
dar are mai multe în comun cu limbajul Self decât cu Java .

Figura 3.2 – JavaScript

MongoDB Compass (figura 3.3) este un GUI pentru MongoDB. Vizualizați vizual
datele dvs. Rulați interogări ad -hoc în câteva secunde. Interacționați cu datele dvs. cu
funcționalitate completă CRUD. Vizualizați și optimizați performanța intero gării.
Disponibil pe Linux, Mac sau Windows. Compass vă permite să luați decizii mai
inteligente cu privire la indexare, validarea documentelor și multe altele. MongoDB
Compass analizează documentele dvs. și afișează structuri bogate din colecțiile dvs. pr intr-
o interfață grafică intuitivă. Acesta vă permite să vizualizați rapid și să explorați schema
pentru a înțelege frecvența, tipurile și intervalele de câmpuri din setul de date.

Figura 3.3 – MongoDB Compass

37
Git (figura 3.4) este un sistem revision c ontrol care rulează pe majoritatea
platformelor, inclusiv Linux, POSIX, Windows și OS X. Ca și Mercurial, Git este un
sistem distribuit și nu întreține o bază de date comună. Este folosit în echipe de dezvoltare
mari, în care membrii echipei acționează oar ecum independent și sunt răspândiți pe o arie
geografică mare.

Figura 3.4 – Git

Node.js (figura 3.5) este un mediu open -source, cross -platform JavaScript run -time
care execută serverul de cod JavaScript. Din punct de vedere istoric, JavaScript a fost
folosit în primul rând pentru scripting pe partea clientului, în care script -urile scrise în
JavaScript sunt încorporate în HTML -ul unei pagini web și se execută în partea clientului
de un motor JavaScript în browser -ul web al utilizatorului. Node.js permi te dezvoltatorilor
să utilizeze JavaScript pentru script -urile care rulează de pe server pentru a genera conținut
din pagina web dinamică înainte ca pagina să fie trimisă browserului web al utilizatorului.
În consecință, Node.js reprezintă o parad igmă "Jav aScript peste tot", unificând dezvoltarea
aplicațiilor web în jurul unui singur limbaj de programare, în loc de limbi diferite pentru
scripturile de pe partea de server și de pe partea clientului.

Figura 3.5 – Node.js

38
3.1 Setarea proiectului

În acest subcapitol vom crea o aplicație reală Node.js de la început până la sfârșit.
Inițial au fost instalate modulele pentru aplicație, mai jos vor fi descrise citeva module
aparte și modul de conectare . Modulul este un set de funcții pe care doriți să le includ eți în
aplicația dvs. Node.js are un set de module încorporate, pe care le puteți utiliza fără nici o
altă instalare. Pentru a include un modul, utilizați requir e() funcția cu numele modulului.
Express este un cadru minimal și flexibil Node.js pentru aplic ații web care oferă un
set de caracteristici pentru aplicațiile web și mobile.
Mongoose este un cadru JavaScript care este utilizat în mod obișnuit într -o aplicație
Node.js cu o bază de date MongoDB. path
Passport este un mijloc de autentificare pentru No de.js. Extrem de flexibil și modular,
Passport poate fi în orice aplicație web bazată pe Express. Un set cuprinzător de strategii
acceptă autentificarea utilizând un nume de utilizator și o parolă, Facebook, Twitter și
multe altele.
Flash este o zonă specială a sesiunii utilizată pentru stocarea mesajelor. Mesajele sunt
scrise în bliț și sunt șterse după ce au fost afișate utilizatorului. Modul de conectare in
proiect este reprezentat mai jos.

const express = require('express');
const ses sion = require('express -session');
const mongoose = require('mongoose');
const MongoStore = require('connect -mongo')(session);
const path = require('path');
const cookieParser = require('cookie -parser');
const bodyParser = require('body -parser');
const pas sport = require('passport');
const promisify = require('es6 -promisify');
const flash = require('connect -flash');
const expressValidator = require('express -validator');
const app = express();
app.use(expressValidator());
app.use(cookieParser());
app.use(ses sion({
secret: process.env.SECRET,
key: process.env.KEY,
resave: false,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection })
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash() );
app.use((req, res, next) => {
res.locals.h = helpers;
res.locals.flashes = req.flash();
res.locals.user = req.user || null;
res.locals.currentPath = req.path;
next();
});
Codul de Mai jos este reprezentat cum este setat dosarul în care păstrăm fișierele
noastre pe partea front end, exten sia de tipul pub și pornirea serverului.

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
const app = require("./app");
app.set("port", process.env.PORT || 7777);
const server = app.listen(app.get("port"), () => {
console.log(`Express running → PORT ${server.address().port}`);});

39
În figura 3.6 de mai jos este furnizată ca o reamintire a fluxului principal de date și a
lucrurilor care trebuie implementate atunci când se manipul ează o cerere / răspuns HTTP.
În plus față de vizualizări și rute, diagrama arată "controlorii" – funcții care separă codul de
cererile de rutare de codul care procesează cererile. [5]

Figura 3.6 – MVC

Principalele lucruri pe care trebuie să le creăm s unt:
– Modele pentru baza de date;
– Rute pentru a redirecționa cererile acceptate (și orice informație codificată în URL -urile
de solicitare) la funcțiile co respunzătoare ale controlerului;
– Controlerul funcționează pentru a obține datele solicitate din modele, pentru a crea o
pagină HTML care să afișeze datele și a le întoarce utilizatorului p entru a le vizualiza în
browser;
– Vizualizări (șabloane) utilizate de controlori pentru a face datele. [5]

3.2 Crearea rutelor

O ruta este o secțiune de co d care asociază un verb HTTP cum ar fi: GET, PUT, o
cale, și o funcție care este chemat să se ocupe de acest model. .
Mai întâi vom crea rute într -un fișier numit index .js. Primul cod importă obiectul
aplicației Express, îl folosește pentru a obține un obi ect Router

const express = require("express");
const router = express.Router();

și apoi adaugă câteva rute către el folosind metoda get () si post () .Mai jos sunt
reprezentate toate rutele pentru aplicație, cum ar fi: înregistrare, logare, adaugare serv iciul
auto, scrierea mesajului unui serviciu, dezlogare, taguri, mapa, comentariu etc

router.get("/", catchErrors(storeController.getStores));
router.get("/centers", catchErrors(storeController.getStores));
router.get("/centers/page/:page", catchErrors(st oreController.getStores));

40
router.get("/centers/:id/edit", catchErrors(storeController.editStore));
router.get("/add", authController.isLoggedIn, storeController.addForm);
router.get("/message/: id",authController.isLoggedIn, catchErrors(storeController.send Message));
router.post("/message/: id",authController.isLoggedIn, catchErro rs(storeController.postMessage) ;
router.post( "/add",storeController.upload, catchErrors(storeController.resize), catchErrors(stor
eController.addStore));
router.post("/add/:id",storeCont roller.upload,catchErrors(storeController.resize),catchErrors(
storeController.updateStore));
router.get("/store/:slug", catchErrors(storeController.getStoreBySlug));
router.get("/tags", catchErrors(storeController.getStoresByTags));
router.get("/tags/:tag" , catchErrors(storeController.getStoresByTags));
router.get("/login", authController.pageGuard, userController.loginForm);
router.get("/register", authController.pageGuard, userController.registerForm);
router.post("/register", userController.validateReg ister,userController.register, authController
.login);
router.get("/logout", authController.logout);
router.post("/login", authController.login);
router.get("/account", authController.isLoggedIn, userController.account);
router.post("/account", catchErrors(user Controller.updateAccount));
router.post("/account/forgot", catchErrors(authController.forgot));
router.get("/account/reset/:token", catchErrors(authController.reset));
router.post("/account/reset/:token", authController.confirmedPassword, catchErrors(authCon trolle
r.updatePass));
router.get("/map", storeController.mapPage);
router.get("/hearts", catchErrors(storeController.getHearts));
router.post("/reviews/: id",authController.isLoggedIn, catchErrors(reviewController.addReview));
router.get("/top", catchErrors( storeController.getTopStores));
router.get("/api/search", catchErrors(storeController.searchStore));
router.get("/api/centers/near", catchErrors(storeController.mapStores));
router.post("/api/centers/:id/hea rt",authController.isLoggedIn, catchError s(storeCo ntroller.hea
rtStore));
module.exports = router;

3.3 Tabelele bazei de date

În cadru lucrării resprective am creat o baza de date mLab . mLab este un serviciu de
baze de date bazat pe cloud, care găzduiește baze de date MongoDB. În figura 3.7 este
repreze ntată baza de date a proiectului.

Figura 3.7 – baza de date

Această secțiune oferă o prezentare generală a modului de a conecta Mongoose la o
bază de date MongoDB, cum să definiți o schemă și un model și cum să efectuați
interogări de bază. Mongoose necesită o conexiune la o bază de date MongoDB. Puteți să
vă conectați la o bază de date găzduită local cu mongoose.connect(), după cum se arată în
codul de mai jos.

var mongoose = require('mongoose');
var mongoDB = mongodb://proauto:1234@ds227939.mlab.c om:27939/proauto;
mongoose.connect(mongoDB);
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));

41
Modelele sunt definite utilizând Schema . Schema vă permite să definiți câmpurile
stocate în fiecare document împreună cu cerințele lor de validare și valorile implicite.
Schemele sunt apoi "compilate" în modele folosind mongoose.model()metoda. După ce
aveți un model, îl puteți utiliza pentru a găsi, crea, actualiza și șterge obiecte de tipul dat. O
schemă poate avea un număr arbitrar de câmpuri – fiecare reprezintă un câmp în
documentele stocate în MongoDB .
În cadru proiectului avem p atru modele de schema: u sers, messages, r eview , store.
ReviewSchema este destinată pentru util izatori simpli care să poată lăsa un comentariu și o
nota de de la unul la cinci, în baza căreia se va face topul autoservisului. Schema
respectiva conține urmatoarele cimpuri: utilizatorul care lasă un comentariu, autoservisul
caruia se referă comentari ul, comentariul insuși lăsat de utilizator și o notă de la unul ala
cinci. Codul sursă este reprezentat mai jos.

const reviewSchema = new mongoose.Schema({
created : {
type:Date,
default:Date.now
},
author:{
type: mon goose.Schema.ObjectId,
ref:'User',
required:'You must supply an author!'
},
store:{
type: mongoose.Schema.ObjectId,
ref:'Store',
required:'You must supply a store'
},
text:{
type:String,
required:'Your review must have text!'
},
rating: {
type:Number,
min:1,
max:5
}
});
module.exports = mongoose.model('Review',reviewSchema);

MessageSchema este destinată pentru utilizatori care solicită un răspuns la problema
cu care se confruntă de la un servicu auto. Schema dată conține următoarele cîmpuri:
marca, autoservisul, modelul mașinii, autorul, mesajul și numărul de contact. Codul sursă
este reprezentat mai jos.

const mongoose = require("mongoose");
mongoose.Promise = global.Promise;

const messageSchema = new mongoose.Schema({
center: {
type: mongoose.Schema.ObjectId,
ref: "Store",
required: "Please select center"
},
make: {
type: String,
required: "Pleas e select vehicle make type"
},
model: {

42
type: String,
required: "Please select model of vehicle"
},
message: {
type: String,
minlength: 75,
required: "Please enter your message"
},
sender: {
type: mongoose.Schema.ObjectId,
ref: "User"
},
contact: {
type: String,
required: "Please enter contact number"
}
});
messageSchema.pre("find", function(next) {
this.populate("sender");
next();
});
module.exports = mongoose.model("Message", messageSchema);

Codul sursă este mai jos este reprezentat userSchema este destinată pentru utilizatori
simpli care să se poată înregistra pe platformă. Schema respectiva conține urmatoarele
cimpuri: nume, email, parolă, avatar.

const md5 = require("md5");
const passportLocalMongoose = requ ire("passport -local-mongoose");

const userSchema = new Schema({
email: {
type: String,
unique: true,
lowercase: true,
trim: true,
validate: [validator.isEmail, "Invalid Email Address"],
required: "Please enter email address"
},
name: {
type: String,
required: "Please enter a name",
trim: true
},
hearts: [
{
type: mongoose.Sch ema.ObjectId,
ref: "Store"
}
]
});
userSchema.virtual("gravatar").get(function() {
const hash = md5(this.email);
return `https://gravatar.com/avatar/${hash}?s=200`;
});

userSchema.plugin(passportLocalMongoose, { usernameFie ld: "email" });
userSche ma.plugin(mongodbErrorHandler);

module.exports = mongoose.model("User", userSchema);

CentersSchema este destinată pentru companiile care prestează servicii auto. Schema
din (Anexa A) conține datele principale despre un serviciu au to, cum ar fi: numele,
descrierea, logo, locația in coordonate , numarul de contact și multe alte informații. Toate
datele sunt păstrate in baza de date și pot fi modificate.

43
3.4 Funcțiile aplicației

Dupa ce am definit rutele noastre, vom crea toate funcț iile de apel pe care le vor
invoca. Callback -urile vor fi stocate în module "controler" separate pentru user, review,
store, etc. A fost creat un dosar pentru controlorii noștri și apoi a fost create fișiere
separate pentru manipularea fiecărui model .
Cont roler ul user are funcțiile de a returna forma de înregistrare și logare care este
reprezentat in codul de mai jos.

exports.loginForm = (req,res) => {
res.render('login',{title:'Log In'});
};
exports.registerForm = (req,res) => {
res.render('register',{tit le:'Register'});
}
Funcț ia validateRegister verifică dacă datele sunt introduse de către utilizator cum ar
fi email, nume, parola și daca sunt datele valide are loc trecerea la pasul următor.

exports.validateRegister = (req,res,next) => {
req.sanitizeBody ('name');
req.checkBody('name','You must supply a name.').notEmpty();
req.checkBody('email','Email is not Valid').isEmail();
req.sanitizeBody('email').normalizeEmail({
remove_dots:false,
remove_extension: false,
gmail_remove_subaddress: false
});
req.check Body('password','Password cannot be blank !').notEmpty();
req.checkBody('password -confirm','Confirm Passwor cannot be blank').notEmpty();
req.checkBody('password -confirm','O ops! Your password do notmatch').equals(req.body.password);
const errors = req.vali dationErrors();
if(errors){
req.flash('error',errors.map(err => err.msg));
res.render('register',{title:'Register',body:req.body,flashes:req.flash()});
return;
}
next();
};
Dupa validarea datelor are loc înregistrare unui nou utilizator și salvarea datelor in
baza de date. După care funcția account returnează utilizatorului pagina pe care este deja
logat . Funcția updateAccount permite utilizatorului să își modifice datele contului.

exports.register = async(req, res, next) => {
const user = new User({email: req.body.email,name:req.body.name});
const register = promisify(User.register,User);
await register(user,req.body.password);
next();//pass to auth.login
};
exports.account = (req, res, next) => {
res.render('account',{title:'Edit your account'});
};
exports.updateAccount = async(req, res) => {
const updates = {
name: req.body.name,
email: req.body.email
};
const user = await User.findOneAndUpdate(
{_id:req.user._id},
{$set:updates},
{new:true,runValidators:true,context:'query'}
).exec();
req.flash('success ','Profile Updated');
res.redirect('back')

44
Controler ul de review raspunde de adăugarea unui comentariu unui serviciu auto .
Controlerul de review are funcția addReview este o funcție asincr onă care citește datele
din formular și le înscrie în baza de date , apoi afișează mesajul de succes sau de eroare.

const mongoose = require('mongoose');
const Rev iew = mongoose.model('Review');
exports.addReview = async (req,res) =>{
req.body.author = req.user._id;
req.body.store = req.params.id;
const newRe view = new Review(req.body);
await newReview.save();
req.flash('success','Review Saved');
res.redirect('back');
}

Controler ul centers are funcțiile principale care menține pagina serviciului auto.
Funcția addStor preia datel e și adaugă ser viciul în baza de date, dupa care funcția getStore
afișează serviciul auto pe pagina web vizibilă clientului.

exports.addStore = async (req, res) => {
req.body.author = req.user._id;
let upload = promisify(cloudinary.uploader.upload, cloudinary );
upload = await upload(`./public/uploads/${req.body.photo}`);
req.body.photo = upload.secure_url;
const store = await new Store(req.body).save();
req.flash("success", "Store info saved.");
res.redirect("/");
};
exports.getStores = asy nc (req, res) => {
const page = req.params.page || 1;
const limit = 4;
const skip = page * limit – limit;
const storesPromise = Store.find()
.skip(skip)
.limit(limit)
.sort({ created: "desc" });
const countPromis e = Store.count();
const [stores, count] = await Promise.all([storesPromise, countPromise]);
const pages = Math.ceil(count / limit);
if (!stores.length && skip) {
req.flash("info", `Hey you asked for a page ${page}. But that doesn't exi st.So I put
you on a page ${pages}`);
res.redirect(`/stores/page/${pages}`);
return;
}
res.render("stores", { title: "Service Centers", stores, page, pages, count });
};

const confirmOwner = (req, res, store, user) => {
if (!store.author.equals(user._id)) {
req.flash("error", "You must own this store");
res.redirect("back");
}
return;
};
Funcția de mai jos getStoresByTags permite căutarea serviciilor dupa anumite taguri.

exports.getStoresByTags = async (req, res) => {
const tag = req.params.tag;
const tagQuery = tag || { $exists: true };
const tagsPromise = Store.getTagsList();
const storesPromise = Store.find({ tags: tagQuery });
const [tags, stores] = await Promise.all([tagsPromise, storesPromise]);
res.render("tags", { tags, tag, stores });};

45
Implimentarea transmiterii mesajului unui serviciu auto este reprezentat in funcția de
mai jos.

exports.sendMessage = async (req, res) => {
const makes = require("../data/cars.json");
res.render("message", { title: "Send your message", makes: makes.Makes });
};

exports.postMessage = async (req, res) => {
req.body.center = req.params.id;
req.body.sender = req.user._id;
await new Message(req.body).save();
req.flash("s uccess", "Message send.");
res.redirect("back");
};

Cum sa menționat in capitolul unu toate serviciile auto vor fi vizibile pe mapa , cu
ajutorul funcții de mai jos a fost posibil realizarea aceesteia.

function loadPlaces(map, lat = 47.01, lng = 28. 86) {
axios.get(`/api/centers/near?lat=${lat}&lng=${lng}`).then(res => {
const places = res.data;

if (!places.length) {
alert("No places found");
return;
}

//create a bounds
const bounds = new google.maps.LatLngBounds();
const infoWindow = new google.maps.InfoWindow();

const markers = places.map(place => {
const [placeLng, placeLat] = place.location.coordinates;
const position = { lat: placeLat, ln g: placeLng };
bounds.extend(position);
const marker = new google.maps.Marker({ map, position });
marker.place = place;
return marker;
});

markers.forEach(marker =>
marker.addList ener("click", function() {
const html = `
<div class="popup">
<a href="/stores/${this.place.slug}">
<img src="/uploads/${this.place.photo || "store.png"}"
alt="${this.pl ace.name}" />
<p>${this.place.name} – ${this.place.location.address}</p>
</a>
</div>
`;
infoWindow.setContent(html);
infoWindow.open(map , this);
})
);
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
});
}

46
3.5 Int erfața aplicației

În subcapitotlul respectiv se va descrie parțial implementarea interfeței aplicației.
Pentru implementarea interfeței sa folosit limbajul pug si less. Pentru a înțelege Pug,
trebuie să rețineți că browserul citește cod HTML și CSS și apoi afișează imagini și text
formatate către client pe baza a ceea ce HTML și CSS îi spune să facă. Pug este
intermediarul și este un mo tor de template pentru Node.js. Un motor template ne permite
să injectăm dat e și apoi să producem cod HTML. Pe scurt: Pug înlocuiesc variabilele din
fișierul nostru cu valori reale și apoi trimite șirul HTML rezultat clientului . Datorită Pug,
codul arată ca paragrafele. Acest lucru îmbunătățește considerabil codarea și simplifică
proiectele cu mai mulți dezvoltatori.
Codul de mai jos pesrmite citirea si afișarea din baza de date a unui autoservis.
Rezultatul codului poti vedea în figura 3.8.

mixin storeCard(store = {})
.
if user
.store__action.store__action –heart
form.heart(method="POST" action=`/api/stores/${store._id}/heart`)
-const heartStrings = user.h earts.map(obj => obj.toString())
-const heartClass = heartStrings.includes(store._id.toString()) ?
'heart__button –hearted':''
button.heart__button(type="submit" name="heart" class=heartClass)
!= h.icon('heart')
if user && store.author.equals(user._id)
.store__action.store__action –edit
a(href=`/centers/${store._id}/edit`)
!= h.icon('pen cil')
if store.reviews
.store__action.store__action –count
!= h.icon('review')
span= store.reviews.length
img(src=`${store.photo || 'store.jpg'}`, alt=`${store. name}`)
h2.title
a(href=`/store/${store.slug}`) #{store.name}
.store__details
p= store.location.address
if user
a(href=`/message/${store._id}` style="display:block;padding:10px;text –
align:center;background:#00BFFF;color:#fff;position:absolute;bottom:0;width:100%;") Send
Message

Figura 3.8 – Vizualizarea unui autoservis

47
În figura 3.9 este reprezentat forma de înregistrare, care conține câmpurile name,
email, password. Codul sursă poate fi vizualizat mai jos mai jos. În (Anexa B) este
reprezentat codul pentru figura 3.10 pagina unui autoservis.

Figura 3.9 – Înregistrare
extends layout
block content
.inner
form.form(action="/register" method="POST")
h2= title
label(for="name") N ame
input(type="text" name="name")
label(for="email") Email
input(type="email" name="email")
label(for="password") Password
input(type="password" name="password")
label(for="password -confirm") Confirm Password
input(type="password" nam e="password -confirm")
input.button(type="submit",value="Register")

Figura 3.10 – Pagina autoservis

48
4 Documentarea produsului realizat

Pentru a putea accesa aplicația este necesar de accesa pagin web cu adresa respectivă
la care va f i setată. În figura 4.1 de mai jos este reprezentată interfața aplicației. Cum se
vede în imagine meniul conține următoarele:
– centers conține toate centrele de deservire auto;
– tags conține câteva taguri cum ar fi wifi, parcare, coffe, etc;
– top conține topul autoservisurilor dupa review clienților;
– add este pagina pentru adăugare a unui serviciu auto;
– map este pagin unde sunt afișate centrele de deservire auto.

Figura 4.1 – Pagina principala

În figura 4.2 de mai jos este reprezenta tă pagina tags. Pagina respectivă conține patru
taguri: 24/7, coffee, wifi, parking. Pe fiecare tag este vizibil numărul total de autoservisuri
care corespunde tagurilor. Tastând pe un oarecare tag dorit se va afișa lista cu servisuri.

Figura 4.1 – tags

49
În figura 4.3 de mai jos este reprezentată pagina top. Pagina respectivă conține tabelul
cu următoarele câmpuri:
– photo conține imaginea companiei;
– ranking arată poziția pe care se află;
– name este numele companiei;
– review arată numarul de comentarii;
– averange rating arată media dupa votarea utilizatorilor.

Figura 4.3 – top

Pagina map conține o hartă unde poți căuta centrele de deservire auto și de accesa
pagina lor , vezi în figura 4.4.

Figura 4.4 – mapa

50
Mai jos este repreze ntat funcționalitatea modorului de cautare. Pentru a căuta un
centru de deservire auto e necesar de a introduce un cuvînt cheie după care se va efectua
căutările(figura 4.5).

Figura 4.5 – căutare

În figura 4.6 de mai jos este reprezentată formele de înregistrare și logare în
sistem.Pagina respectivă conține formularul cu următoarele câmpuri de înregistrare:
nume, email, parolă și de logare: email și parolă. În figura 4.7 utilizatorul își poate
modifica numele cît și emailul.

Figura 4.6 – căutare

Figura 4.7 – editare profil

51
În figura 4.8 de mai jos este reprezentată formele de înregistrare a unui servicu
auto.Pagina respectivă conține formularul cu următoarele câmpuri de înregistrare: nume,
descriere, poză, adresa, număr de contact, și select area tagurilor.

Figura 4.8 – adăugarea autoservis

Pagina autoservisului se poate vedea în figura 4.9. Pagina respectivă conține poza
încărcată de utilizator, numele autoservisului, afișarea pe mapă, informație referitor
centrului auto, butonul de a scri un mesaj. În figura 4.10 este reprezentat un textbox unde
utilizatorii își pot lăsa comentariile și respectiv o notă de una sau cinci stele.

Figura 4.9 – pagina autoservis

52

Figura 4.10 – review

Dupa logarea în sistem pe fiecare autoservis este but onul care permite scrierea unui
mesaj , vezi figura 4.9 . În figura 4.11 este formularul care va fi transmis
autoservisului (figura 4.12) , care conține marca mașinii, modelul, un număr de contact și
însuși mesajul.
.

Figura 4.11 – cererea

Figura 4.12 – mesajul primit

53
5 Evaluarea economică a proiectului

Analiza economică este foarte importantă din motiv că aceasta ne ajută la estimarea și
cântărirea unor riscuri în lucru care apar pe parcursul muncii. Și deci noi facem analiza
economică pentru a le putea evita la stadia de proiectare.
În capitolul respectiv va fi analizat sistemul din punct de vedere economic. Capitolul
respectiv cercetează sistemul dezvoltat în cadrul lucrării de licență din punct de vedere a
rentabilității sale și a avantajelor / dezavantajelor față de concurenți. Prin intermediul
cercetării economice, putem obține o estimare a costului de producție a sistemului și a
unui posibil profit, cît și a analiza potențialele riscuri și oportunități pe care sistemul dat le
are în comparație cu alte sisteme, creînd astfel strategii de sporire a interesului
consumatorilor pentru sistemul respectiv.
Procesul de elaborare a sistemului este separat de trei etape, începînd cu etapa de
pregătire, a cărui scop este stabilirea cerințelor și funcționa lităților sistemului, precum și a
tehnicilor și strategiilor folosite pentru elaborare. Acest proces este urmat de o cercetare a
tehnologiilor ce va permite o elaborare mai eficientă și rapidă a sistemului. Odată cu
finisarea etapei de pregătire, începe etapa de elaborare, în care este dezvoltat sistemul
propriu -zis. La etapa respectivă, acțiunile sunt divizate în termen de 4-5 zile, în
dependență de complexitatea funcționalității. La finalul procesului de elaborare urmează
ultima etapă, și anume cea de testare, corectare a erorilor găsite și creare a documentației.
Planul calendaristic este urmat de o analiză SWOT, în care sunt identificare
punctele forte ale sistemului, punctele slabe ale sistemului, atît cît și oportunitățile și
riscurile sistemului respectiv. În baza informației colectate în rubrica dată putem formula
strategii pentru a îmbunătăți punctele forte și în același timp diminua punctele slabe. De
asemenea, cunoscînd riscurile sistemului respectiv putem dezbate soluții pentru a crea
avantaje față de concurenți.
Odată cu finisarea analizei SWOT, urmează etapa de calcul al indicatorilor
economici pentru a stabili prețul de elaborare al aplicației. În procesul de calcul al
indicatorilor economici este inclus calculul activelor materiale și nemater iale pe termen
lung, calculul consumurilor directe de retribuire a muncii și a calculelor consumurilor
directe de materii. Din momentul identificării fondului de retribuire a muncii, este
identificat fondul de asigurări sociale, fondul de asigurări medical e și a fondului de
pensionare.
Următoarea etapă constă din identificarea cotei de impozitare a venitului, și astfel
este determinat suma venitului net. De asemenea, este calculată uzura mijloacelor fixe
pentru totalitatea activelor materiale de termen lung, este stabilit costul de producție al
sistemului dat și sunt calculați indicatorii economico -financiari, prin stabilirea unui profit
și calcularea rentabilității sistemului.
În final este prezentată o concluzie ce analizează și oferă o descriere a rezul tatelor
obținute în urma calculelor și cum prețul sistemului dat este evaluat în comparație cu
prețul mediu al aplicațiilor mobile de genul dat.

54
5.1 Planul calendaristic

Planul calendaristic al proiectului reprezintă distribuirea în timp a procesului de
elaborare și repartizare a sarcinilor și resurselor. În funcție de durata proiectului, planul
poate fi divizat în luni, săptămîni, zile, ore.
Etapele de planificare a timpului recomandate pentru proiect sînt date în figura 5.1.

Figura 5.1 – Etapele de planificare

Obiectivele – Este deosebit de important a formula clar obiectivele principale ale
produsului pentru a putea atinge rezultatele dorite. În acest scop se face o scriere a
produslui finit, argumentînd eficiența și utilitatea lui.

Volumul de lucru – Precum că volumul de lucru este destul de mare și este doar un
dezvoltator este nevoie să stabilim dățile limite pentru a fi clare sarcinile cu prioritate mai
mare pentru dacă nu ne încadrăm în timp va fi nevoie prioritățile mai de grad mai mic d e
redus din lista curentă de funcții.

Timpul destinat realizării proiectului – Este timpul necesar pentru realizarea
proiectului cu toate funcționalitățile propuse. Pentru aceasta ne va ajuta 5 pași importanți
pentru a estima timpul:

– planificarea ( C rearea unor diagrame, Crear ea unor prototipe, Determinarea resurselor
necesare pentru realizare);
– cercetarea ( Analiza market, starbilirea grupei de oameni care vor folosi produsul,
cercetarea tehnologiilor existente pentru alege cea mai potrivită);
– dezvolatarea ( Crearea sistemului actual, ajustarea cerințelor după frameworkurile
alese);
– testarea ( Testarea funcțiilor implimentarea la nivelul de de Dezvoltare după cerințele
propuse);
– lansarea ( Procesul de disponibilitate ).
Ca o generalizare la tabelul 5.1 se poate de menționat că aici au fost cuprinse toate
etapele de la proiectare pînă la lansare a produsului în masă. Pentru finisarea sistemului a
fost realizate 17 sarcini majore care include estimarea a 84 de zile lucrătoare.

55
În tabelu l 5.1 este reprezentat fondul de timp necesare elaborării proiectului.

Tabelul 5.1 – Fondul de timp necesar elaborării proiectului
Nr. d/o Denumirea acțiunii Perioada Executant Resurse Utilizare
1 Stabilirea temei 4 zile Programatorul Internet
2 Accept area temei 3 zile Conducătorul
3 Cautarea și studierea
informației 5 zile Programatorul Internet
4 Cercetarea tehnologiilor și a
domeniului 5 zile Programatorul Internet
5 Elaborarea digramelor. 5 zile Programatorul Pc, Internet
6 Implementarea autent ificare 4 zile Programatorul Pc, Internet
7 Implementarea logare 3 zile Programatorul Pc, Internet
8 Implementarea adăugare
autose rvis 3 zile Programatorul Pc, Internet
9 Implementarea afișarea
autose rvis 4 zile Programatorul Pc, Internet
10 Impleme ntarea editare
autose rvis 3 zile Programatorul Pc, Internet
11 Implementarea afișarea
autosevisurilor pe mapă 3 zile Programatorul Pc, Internet
12 Implementare top
autoservis dupa review 6 zile Programatorul Pc, Internet
13 Verificarea și corectarea
greșelelor 7 zile Programatorul Pc, Internet
14 Implementarea adăuare
comentariu 3 zile Pc, Internet
15 Ultima testare 10 zile Programatorul Pc, Internet
16 Scrierea Documentației 6 zile Programatorul Pc
17 Promovarea produsului 9 zile Programato rul Internet
Total 84 zile

5.2 Analiza SWOT

Elaborarea analizei SWOT poate ajuta cu depistarea punctelor forte și slabe ale
mediului intern și extern al proiectului.
Puncte Forte ( mediu intern) – descriu atributele pozitive, tangibile și intangi bile care
țin de organizație și proiect. Punctele tari cuprind elemente intangibile, de exemplu legate
de echipă ( organizație, proiect), cunoștințe în domeniu, educație, experiență, contacte,
reputație, capacitatea membrilor, precum și elemente tangibile legate de sursele financiare
disponibile, echipamente, canale de comunicare, materiale cu dreptul de autor ș.a.m.d. care
aparțin organizației.

56
Puncte slabe ( mediu intern ) – factorii aflați sub controlul participanților implicați în
mod direct în proiect și care pot împiedica obținerea sau menținerea unui nivel de calitate
competitiv.
Oportunități ( mediu extern ) – evaluează factorii atractivi externi ce reprezintă
elementele de care organizația / echipa de proiect poate profita.
Riscuri ( mediu extern ) – amenințările include factorii în afara controlului care ar
utea impune implimentarea proiectului într -o poziție de risc. Aceștia sînt factori externi
care pot fi controlați, dar care ar putea fi anticipați dacă ar exista un plan de urgență care să
poată preveni și rezolva aceste probleme.
Analiza SWOT este foarte important să fie realizată fiindcă aceasta arată la rîndul său
toate tipurile de puncte a celor 2 factori externi și interni. Ele pot provoca probleme la
diferit nivel de ciclu de viață al produ sului de la proiectare și pînă la inițierea acestui pe
piață. În tabelul 5.2 este analiza SWOT.

Tabelul 5.2 – Analiza SWOT

Mediul intern

Punctele forte
Punctele slabe

– nu există concurenți pe piața locală;
– accesibil și portabil;
– se așteaptă să fie extrem de profitabilă;
– ușor de întreținut. – lipsa reputației pe piață;
– termene scurte pentru realizarea
proiectului;
– conducere fără experiență ;
– lipsa resurselor financ iare.

Mediul extern

Oportunități

Riscuri
– concurența slabă;
– dezvoltarea domeniului;
– creșterea clienților ;
– investitori străini. – lipsa interesului din partea clienților;
– concurenți puternici .

În baza analizei SWOT descrisă în tabelul 5.2, sunt propuse următoarele strategii
pentru diminuarea riscurilor:
– reducer e pentru clienți fideli;
– căutarea sponsuri in domeniu;
– promovarea web-siteul;
– integrarea permanentă a noilo r funcționalități și tehnologii.

57
5.3 Calcul indicatorilor economic

Activele materiale (AMTL) care iau formă fizică naturală au durată de funcționare
utilă mai mare de un an și se utilizează în activitatea întreprinderii sau se află în procesul
creării și nu sînt destinate vînzării (computer, componente suplimentare necesare pentru
lucru – HDD, RAM, scaner, imprimantă, modem).
Activele nemateriale (ANTL), active nebănești, care nu iau formă materială, sînt
controlate de întreprindere și utilizate mai mult de un an în activitățile de producție,
comercială sau în alte genuri de activitate. Software – programe și aplicații necesare pentru
realizarea pro iectulu i. În tabelul 5.3 este bine definit activele materiale /nemateriale
necesare pentru a crea un astfel de soft.

Tabelul 5.3 – Active materiale/nemateriale pe termen lung
Active materiale pe termen lung
Nr.
d/o Denumirea Unitatea de
măsură Prețul
achiziție pe
unitate MDL Cantitatea Valoarea de
intrare MDL
1 Calculator Acer unitate 12000 1 12000
Total 12000
Active nemateriale pe termen lung
Nr.
d/o Denumirea Unitatea de
măsură Prețul
achiziție pe
unitate MDL Cantitatea Valoarea de
intrare MDL
1 Visua l Studio Code unitate gratuit 1 0
2 Chrome unitate gratuit 1 0
3 Firefox unitate gratuit 1 0
4 Opera unitate gratuit 1 0
5 Git unitate gratuit 1 0
6 Atom unitate gratuit 1 0
7 Microsoft Word unitate gratuit 1 0
Total 0

În tabelul 5.4 este repr ezentat consumurile directe de material e.
Tabelul 5.4 – Consumurile directe de material e
Denumirea Unitatea de
masura Pret pe unitate,
MDL Cantitatea Valoarea totală,
MDL
Stilou unitate 5 2 10
Creion unitate 5 2 10
Hirtie A4 pachet 70 2 140
Mapa unitat e 15 2 30
Total 190

58
În tabelul 5.5 este reprezentat consumurile directe privind retribuirea muncii.
Tabelul 5. 5 – Consumurile directe de material privind retribuirea muncii
Nr.
d/o Funcția
angajatului Volumul de
lucru, zile Salariul pe
ora, lei FSB, lei FRM, lei
1. Programator 84 40 26880 26880
Total 26880 26880

Totаlul reprezintă F rm – Fondul de Retribuire а Muncii, în bаzа căruiа se cаlculeаză
sumа contribuțiilor în Fondul Sociаl (FS) – 23 % și vаloаreа primei de аsigurаre medicаlа
obligаtor ie (АM) – 4,5%.

FАS = FRM x Cfs(%) (1)

FАS – Fondul de Аsigurаri Sociаle,
FRM – Fondul de Retribuire а Muncii ,

Cfs – cotа contribuțiilor de аsigurări sociаle de stаt obligаtorii, se аprobă în fiecаre аn
prin Legeа Bugetului аsigurărilor sociаle de stаt. Conform „Legii bugetului аsigurаrilor
sociаle de stаt pe аnul 2015” contribuțiа lа bugetul аsigurărilor sociаle de stаt obligаtorii,
suportаtа de аngаjаtor, constituie 23% din fondul d e remunerаre а muncii.

FАM = FRM x Cаm(%) (2)

Cаm – Cotа primei de аsigurаre obligаtorie de аsistență medicаlă, se аprobă în fiecаre
аn prin Legeа Republicii Moldovа „Privind fondurile аsi gurării obligаtorii de аsistență
medicаlă”. Conform „Legii privind fondurile аsigurării obligаtorii de аsistență medicаlă pe
аnul 2018 ”, cotа primei de аsigurаre obligаtorie de аsistență medicаlă suportаtа de
аngаjаtor constituie 4,5 % din fondul de remune rаre а muncii.

FАS = 26880 x 23% = 6182, 4 lei
FАM = 26880 x 4,5% = 1209, 6 lei

Lа finаl cаlculăm fondul de remunerаre а muncii totаl pentru а cheltuielile necesаre
proiectului pentru sаlаrizаre.

FRMT = FRM + FАS + FАM (3)

FRMT = 26880 + 6182, 4 + 1209, 6 = 34272 lei

Аstfel utilizînd prevederile legislаției în vigoаre vom cаlculа venitul net аnuаl și
respectiv sumа impozitului pe venit trаnsferаt lа bugetul de stаt, cît și reținerile în fondul
sociаl și contribu țiile de аsigurări medicаle аchitаte de аngаjаt. Presupunem că venitul brut

59
аnuаl аl programatorului este de 95,000 lei.Cаlculаm retinerile în fondul sociаl (FS) și
contributii аsigurаri medicаle (FАS):
FS = 6% x 95000 = 5700 lei,
FАM = 4,5% x 95000 = 4275 lei.
Cаlculul venitului impozаbil:
VI = VB – FP – FАM – SP – SiP – SM (4)
unde:
VI – venitul impozаbil;
VB – venitul brut;
FP – fondul de pensionаre (аsigurаri sociаle) -obționаl;
FАM – fondul de Аsigurаre Medicаlă;
SP – scutireа personаlа -obționаl;
SiP – scutireа pentru persoаnа intretinutа -obționаl;
SM – scutireа personаlа mаjorа -obționаl.
Folosind formulа (4) se efectueаză cаlculele pentru determinаreа venitului
impozаbil:
VI = 95000 – 5700 – 4275 = 85025 lei.
Se cаl culeаzа sumа venitului net аplicind cotele de impozitаre în vigoаre:

VN = VB – IV – FP – FАM (5)
unde:
VB – venitul brut;
IV – impozit pe venit;
FP – fondul de pensionаre (аsigurаri sociаle);
FАM – primа de Аsig urаre Medicаlă;
VN = 95000 – 11674.5 – 5700 – 4275 = 73350,5 lei.

Se cаlculeаză sumа impozitului pe venit:
IV = VI – I (6)
unde:
I – Impozit pe venit
IV = 33000 x 7% + ( 85025 – 33000) x 18% = 11674,5 lei.

În tabelul 5.6 de mai jos este reprezentat consumurile indirecte .
Tabelul 5.6 – Consumurile indirecte ‚
Denumirea
articolului Unitatea de
măsură Cantitatea Tarif/unitar, lei Valoarea totală,
lei
Arendă Camin Preț lunar 4 280 1120
Servicii Inter net Preț lunar 4 50 200
Servicii transport Preț pe tur 10 78 780
Total 2100

60
5.4 Uzura mijloacelor fixe și amortizarea activelor nemateriale

Partea importantă a cheltuielilor indirecte constituie calcularea fondului de
uzură/amortizare. Uzura mijlo acelor fixe reprezintă repartizarea sistematică a valorii
uzurabile a mijloacelor fixe pe parcursul duratei de funcționare utilă. Norma uzurii se
calculează în funcție de durata utilizării activului. Formula de calcul a fondului de
amortizare este:
FA =(MF i : DFU) * T i (7)
Unde:
FA – fondul amortizării, lei;
MF i – valoarea de intrare;
T1 – durata proiectului;
DFU – durata de funcționare utilă.
Fondul de amortizare pentru activele mat eriale este calculat conform formulei de mai sus:

FA Acer = 12000 : (3 x 365) x 84 = 921 Lei
FA Total = 3 x 921 = 2763 Lei

5.5 Costul de producție

Costul de producție reprezintă totalitatea cheltuielilor corespunzătoare consumului de
factori de producție, pe care agenții economici le efectuează pentru producerea și vînzarea
de bunuri materiale sau prestarea de servicii. Prețul de cost se calcu lează pe o unitate. În
tabelul 5.7 sunt realizate toate cheltuielile pentru elaborarea unei copii.

Tabelul 5.7 – Costul de producție
Articole de calculație Valoarea,lei Ponderea, %
Consumuri directe de materiale 190 0,48
Consumuri directe privind retribuirea muncii 26880 68,35
Contribuții de asigurări sociale de stat obligatorii (FAS) 6182, 4 15,72
Prim a de asigurare obligatorie de asistență medicală (FAM) 1209, 6 3,07
Consumuri indirect 2100 5,34
Uzura mijloacelor fixe (AMTL) 2763 7,04
Total 39325 100

61
5.6 Calculul indicatorilor economico -financiari

Pentru calculul indicatorilor economico -financi ari am ales metoda botttom -up.
Metoda se aplică la proiectarea și elaborarea programelor, precum și la integrarea și
testarea produsului informatic.
Preț brut = Preț de cost + Profit (8)
Rentabilitate = PN : CT x 100% (9)
Unde:
PN – profit
CT – costul total de realizare a proiectului
Preț brut = Preț de cost + Profit = 39325 + 50000 = 89325 lei
Rentabilitate = PN : CT x 100 % = (50000 : 89325) x 100 % = 55,97 %

Preț net = Preț brut + TVА = 89,325.98 lei + 20 % = 107190 lei

62
Concluzi i

La baza elaborării unei aplicații stau multe trepte, deseori și mulți dezvoltatori. Cei
mai importanți pași sun t elaborarea cerințelor tehnice și a specificațiilor față de sistem.
Cerințele tehnice față de sistem sunt primordiale în crearea oricărui soft. Dezvoltatorul
trebuie să stabilească distinct ce trebuie și cum trebuie să implementeze în aplicația sa.
Odată ce c erințele au fost stabilite, nu rămîne decît crearea diagramelor, adică
specificațiilor față de sistem. În lucrarea mea de curs am creat modele de diagrame de
toate tipurile studiate. Succind, dar detaliat am enunțat principalele funcții al e aplicației .
Toate aceste diagrame sunt primordiale în proiectarea sistemului meu, enunțînd în
mod direct unii dintre pașii pe care trebuie să -i parcurg în proiectare, ceea ce facilitează
mult lucrul ca dezvoltator al unei aplicații sau al unui sistem.
În decursul ef ectuării lucrării de curs au fost dezvoltat deprinderi în lucrul cu
instrumentul de modelare a sistemelor informatice Enterprise Architect. Acumulînd multe
cunostințe noi în domeniul modelării sistemelor informatice. Elaborarea lucrării a dus la
ciocniri c u probleme, care au fost rezolvat pas cu pas, consultînd cu profesor ul de
laborator, apelînd și la Internet.
În timpul elaborării modelului s -a străduit să se pătrundă în toate detaliile de care s -a
ținut cont la elaborarea acestui model informatic. Lucru l intensiv, a dus la dezvoltarea,
deprinderea de a lucra în domeniu, de a fi responsabil și comunicabil. În pofida volumului
de muncă, s -a realizat totul cu multă plăcere.
Un alt pas care trebuie de luat în considerare a fost că mediu care este proiectat
trebuie să se supună standartelor UML, astfel ca el să fie ușor de învățat de către alți
utilizatori, și diagramele create să fie înțelese de toți cei care înțeleg limbalul UML.
După analizarea proiectului din punct de vedere economic, au fost făcute mai m ulte
concluzii făcut. În primul rând, efectuarea unei astfel de cercetări a dat posibilitatea de a
înțelege mai bine care sunt punctele forte și punctele slabe ale sistemului și unde ar trebui
să se acorde o atenție suplimentară pentru a evita factorii ext erni imprevizibili care ar
putea crea problem e neașteptate. Au fost calculați indicatori , cum ar fi ch eltuielile directe
și indirecte și cheltuielile salariale etc .
Lucrarea respectivă, are un rol important în instruirea ca specialist în domeniul
modelări i diferitor sisteme informatice și informaționale. Lucrul intensiv, experimentarea
dă posibilitatea apropierii tot mai mult de lumea IT -ului, fiind mai ușoară încadrarea în
cîmpul de muncă.

63
Bibliografie

1. Uremont.com , [Resură electronică] – regim de acces: https://uremont.com

2. Master -lux.md, [Resură electronică] – regim de acces: http://master -lux.md/

3. Turbinamd.com , [Resură electronică] – regim de acces: http://turbina.md/ro

4. Radu Melnic , Analiza și Modelarea Sistemelor Informaționale [Resursă electronică]. –
Regim de acces: https://ru.scribd.com/document/204600132/Curs -AMSI

5. Express Tutorial [Resursă electronică] – regim de acces:
https://developer.mozilla.org/en -US/docs/Learn/Server -side/Express_Nodejs/

64
Anexa A
center Schema

const mongoose = require("mongoose");
mongoose.Promise = glob al.Promise;
const slug = require("slugs");
const storeSchema = new mongoose.Schema(
{
name: {
type: String,
trim: true,
required: "Please enter a store name"
},
slug: String,
descripti on: {
type: String,
trim: true
},
tags: [String],
created: {
type: Date,
default: Date.now()
},
location: {
type: {
type: String,
default: "Point"
},
coordinates: [
{
type: Number,
required: "You must supply coordinates!"
}
],
address: {
type: String,
required: "You must supply an address !"
}
},
photo: String,
contact: {
type: String,
required: "Contact is required"
},
author: {
type: mongoos e.Schema.ObjectId,
ref: "User",
required: "You must supply an author"
}
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true }
}
);

//define our indexing
storeSchema.index({
name: "tex t",
description: "text"
});
storeSchema.i ndex({ location: "2dsphere" });
storeSchema.pre ("save", async function(next) {
this.slug = slug(this.name);
const slugRegEx = new RegExp(`^(${this.slug})(( -[0-9]*$)?)$`, "i");
const storeswithSlug = await this.constru ctor.find({ slug: slugRegEx });
if (storeswithSlug.length > 0) {
this.slug = `${this.slug} -${storeswithSlug.length + 1}`;

65
}
next();});

storeSchema.statics.getTagsList = function() {
//this refers to model
return this.aggregate([
{ $unwind: "$tags" },
{ $group: { _id: "$tags", count: { $sum: 1 } } },
{ $sort: { count: -1 } }
]);
};
storeSchema.statics.getTopStores = function() {
return this.aggregate([
//lookup stores and populate their reviews
{
$lookup: {
from: "reviews",
localField: "_id",
foreignField: "store",
as: "reviews"
}
},
//filter for only items that h ave 2 or more items
{
$match: {
"reviews.1": {
$exists: true
}
}
},
//Add the average reviews field
{
$project: {
photo: "$$ROOT.photo",
name: "$$ROOT.name",
reviews: "$$ROOT.reviews",
slug: "$$ROOT.slug",
averageRating: { $avg: "$reviews.rating" }
}
},
//sort it by our new field, hi ghest review first
{
$sort: {
averageRating: -1
}
},
//limit to at most 10
{ $limit: 10 }
]);
};
storeSchema.virtual("reviews", {
ref: "Review",
localField: "_id", //which field on store
foreignField: "store" //which field on review
});
function autopopulate(next) {
this.populate("reviews");
next();
}
storeSchema.pre("find", autopopulate);
storeSchema.pre("findOne", autopopulate);
module.exports = mongoose.model( "Store", storeSchema);

66
Anexa B
store.pug

extend layout

include mixins/_reviewForm
include mixins/_review

block content
.single
.single__hero
img.single__image(src=`${store.photo || 'store.jpg'}`)
h2.title .title–single
a(href=`/stores/${store.slug}`) #{store.name}

.single__details.inner
img.single__map(src=h.staticMap(store.location.coordinates))

p.single__location= store.location.address
if user
a(href=`/message/${store._id}` style="display:block;padding:10px;text –
align:center;background:#00BFFF;color:#fff;bottom:0;") Send Message
p= store.description
h1 Contact : #{store.contact}

if store.tags
ul.tags
each tag in store.tags
li.tag
a.tag__link(href=`/tags/${tag}`)
span.tag__text ##{tag}

if user
+reviewForm(store)

if store.reviews
.reviews
each review in store.reviews
.review
+review(review)

if user && store.author.equals(user._id)
h3 Messages
each message in messages
div(style="border:1px solid #dcdcdc;padding:15px;margin:10px 0;")
span(style="padding:25px;") Make :
b=message.make.toUpperCase()
span(style="padding:25px;") Model :
b=message.model.toUpperCase( )
hr
p(style="padding:25px;font -weight:bold;")=message.message
hr
span(style="padding:25px;") Send By : #{message.sender.name}
(#{message.sender.email})
if message.contact
=message.contact

Similar Posts