Proiectarea și dezvoltarea unui sistem informațional de geolocalizare și utilizare a serviciilor auto [311727]
Universitatea Tehnică a Moldovei
Proiectarea și dezvoltarea unui sistem informațional de geolocalizare și utilizare a serviciilor auto
Designing in the development of a [anonimizat]: [anonimizat]: asis. univ. Scrob Sergiu
Chișinău 2018
Rezumat
Teza de licență cu numele Proiectarea și dezvoltarea unui sistem informațional de geolocalizare și utilizare a [anonimizat]: [anonimizat], a fost dezvoltată în cadrul Universității Tehnice din Moldova. Aceasta este scrisă în limba Română și conține 66 pagini, 7 tabele, 51 figuri și 5 referințe. [anonimizat], concluzie și bibliografie.
Obiectivul principal al lucrării curente este să rezolve o problemă reală apărută în domeniul auto. În cadrul aplicației sunt definiți două tipuri de utilizatori: autoservisul și clientul. Activitățile pentru fiecare în parte sunt definite astfel: [anonimizat]: [anonimizat].
Cele cinci capitole care compun raportul curent sunt următoarele:
– primul capitol analiza domeniului de studiu sunt descrise aspectele generale in demeniul de dezvoltare a pagnilor web si descrierea sistemelor existente;
– capitolul doi proiectarea sistemului s-a proiectat diagramele UML;
– capitolul trei realizarea sistemului sunt descrise tehnologiile folosit pentru realizare și însuși proiectarea sistemului pe etape;
– capitolul patru documentarea produsului realizat se descrie folosirea sistemului de catre utilizator;
– capitolul cinci evaluarea economică a proiectului care este minuțios făcută fiindcă aceasta este partea mare a succesului.
Acest document este destinat cititorilor specializați în domeniul tehnic.
Abstract
The thesis named Proiectarea și dezvoltarea unui sistem informațional de geolocalizare și utilizare a [anonimizat]: [anonimizat], was developed at the Technical University of Moldova. It is written in Romanian and contains 66 pages, 7 tables, 51 figures and 5 references. The thesis consists of a introduction, [anonimizat], and references list.
The main objective of the current paper is to solve a real problem in the automotive field. Two types of users are defined within the application: the service and the customer. The activities for each of them are defined as: [anonimizat]: [anonimizat].
The five chapters that describe the thesis are the following:
– the first chapter analyzes the project's [anonimizat] a general description of the web development process. It also compares the current system with systems that already exist;
– the second chapters develops UML diagrams for the system;
– the third chapter describes the technologies used for the development of the system and offers a step-by-step explanation of the development process;
– the fourth chapter offers a documentation on the system that the user can use as a guide;
– [anonimizat].
This document is intended for readers with technical background.
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 informaț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 produselor 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 expluatarea cu succes a sistemului.
Sistemul Informațional elaborat trebuie să posede un înalt grad de adaptare la cerințele mereu schimbătoare ale utilizatorilor și vitalitate, adică capacitatea de a funcționa în condițiile de deviere de la situațiile normale.
Asigurarea calităților de acest tip greu se supune formalizării și în afară de această are nevoie de participarea necontenită a inginerului în procesul analizei funcționării sistemului și introducerii modernizării necesare fără întreruperi în lucru.
În așa mod expluatarea Sistemelor Informaționale are două aspecte, folosirea Sistemelor Informaționale în calitate de instrument, ce ridică eficacitatea procesului de producție, asigurarea capacităț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 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ă. 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 pentru sincronizare cu serverul.
Prin prezența lucrare se urmărește scopul de a proiecta și implementa un sistem pentru geolocalizare a serviciilor auto. Aplicația respectivă este destinată pentru companiile din domeniul auto, și pentru oricare utilizator 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 acesteia 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 UML care reprezintă un limbaj standard pentru descrierea de modele și specificații pentru software.
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 scalabilitatea aplicației pe viitor că să fie un sistem fiabil și unic pe piață pentru 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 continuare .
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 trebuie să se precizeze în procesul proiectării Sistemului Informațional concret.
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 utilizarea 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 dezvolt în cadrul lucrării de licență încearcă să soluț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 respective 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 extinderea 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 dinamice și multe, multe altele.
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 auto 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 vizualiza 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
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 sistem 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 stă 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 de 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 problemele 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.
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 rating 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 poate fi observată în figura 1.4
Figura 1.4 – Turbina
Compania Turbina.md, este dealerul oficial al marcii Melett și au următoarele servicii Auto-Service:
– testarea tehnică planificată, schimbarea uleiului, lichidelor tehnice și a materialelor consumabile;
– diagnosticul computerizat și reparația aparatajului electronic;
– diagnosticul și reparația turbosuflantelor;
– diagnosticul ș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 experiență 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 problemele 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 standarde 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, absolut 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;
– 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 oferă clienților săi auto servicii, atit reparații prompte de înaltă calitate cît deservire de diferită 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
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 progresul 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
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 caracterizat 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 dezvoltatori 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 platformă 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 singur 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 principal al platformei este revoluționarea modului în care deținătorii de automobile utilizează serviciile prestate de companiile auto.
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 anumite 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ă oferă 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
2 Proiectarea sistemului
Drept lucrare 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; software ș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ținerea 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 caracteristici:
Î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 pentru 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țial 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 acestora, 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 constructie, 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.
2.1 Descrierea comportamentală a sistemului
Pentru a modela și a proiecta sistemul dat, se vor folosi diagramele UML, ele sunt:
a) diagrama cazului de utilizare;
b) diagrama de interacțiune:
1) diagrama de secvență;
2) diagrama de colaborare.
c) diagrama claselor;
d) diagrama de comportament:
1) diagrama de stări;
2) diagrama de activități.
e) diagrama de componente;
f) 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 utilizatorului. Î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, specialiști și toți cei cointeresați în sistemul dat pot 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 relaț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 statică 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 grafic 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 ordine 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 scenariu și secvențele de mesaje transmise între obiecte, necesare îndeplinirii funcționalității scenariului. Diagramele 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 cu 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 organizarea 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 cazurilor 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țiunea 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
În figura 2.1.2 este prezentată diagrama 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 sistem;
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
Cazurile de utilizare sunt următoarele:
selectarea modelului 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 selectarea 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ă diagrama 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ă, specifică 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 corecte trece 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 prezentată 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
Î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 prezentată 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
După cum se observă în figură, se 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 corecte și apoi se continuă execuția, ulterior, se observă elementele fork/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 activităț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 cererii
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.
Figura 2.1.12 – Logare în sistem
.
În figura 2.1.13 este prezentată diagrama de secvenț programarea la un serviciu 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
În figura 2.1.14 poate fi observată diagrama 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 pentru 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 colaborare, 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 – Procesul de utilizare a sistemului din punct de vedere al utilizatorului
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 nume. Î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 modul 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 fi 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 exploatare.
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 conectate 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 structurii statice și relatiile de 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 structural. 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 rolurile 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.
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
În figura 2.2.3 este prezentată diagrama de clase ce corespunde programarii utilizatorului 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 ca 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
2.2.2 Modelarea echipamentelor mediului de implementare
În figura 2.2.5 respectivă sunt reprezentate componentele necesare funcționalităț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 interfeț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 informația catre utilizatori, numarul cărora poate varia mult. De accea serverele trebuie să fie extensibile.
Figura 2.2.6 – Web server
3 Realizarea sistemului
În cadrul capitolului respectiv vor fi descrise totalitatea instrumentelor și a tehnologiilor 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 informațional.
Pentru a elabora websiteul s-a folosit următoarele instumentele principale:
– Visual Studio Code;
– JavaScript;
– MongoDB Compass;
– Git;
– Node.js.
Visual Studio Code (figura 3.1) este un editor de cod sursă dezvoltat de Microsoft pentru 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 tema editorului, comenzile rapide de la tastatură și preferințele. Este gratuit și open-source, deși descărcarea oficială este sub licență de proprietate.
Figura 3.1 – Visual Studio Code
JavaScript (figura 3.2) este un limbaj de programare orientat obiect 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 web, 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 interogă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. printr-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
Git (figura 3.4) este un sistem revision control 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ă oarecum 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 permite 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 paradigmă "JavaScript 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
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 includeț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 require() funcția cu numele modulului.
Express este un cadru minimal și flexibil Node.js pentru aplicaț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 Node.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 session = 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 passport = 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(session({
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 frontend, extensia 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}`);});
Î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 manipulează 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 sunt:
– 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 corespunză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 pentru 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 cod 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 obiect 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 serviciul 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(storeController.getStores));
router.get("/centers/:id/edit", catchErrors(storeController.editStore));
router.get("/add", authController.isLoggedIn, storeController.addForm);
router.get("/message/:id",authController.isLoggedIn,catchErrors(storeController.sendMessage));
router.post("/message/:id",authController.isLoggedIn,catchErrors(storeController.postMessage);
router.post("/add",storeController.upload,catchErrors(storeController.resize),catchErrors(storeController.addStore));
router.post("/add/:id",storeController.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.validateRegister,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(userController.updateAccount));
router.post("/account/forgot", catchErrors(authController.forgot));
router.get("/account/reset/:token", catchErrors(authController.reset));
router.post("/account/reset/:token",authController.confirmedPassword,catchErrors(authController.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/heart",authController.isLoggedIn,catchErrors(storeController.heartStore));
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 reprezentată 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.com:27939/proauto;
mongoose.connect(mongoDB);
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
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 patru modele de schema: users, messages, review, store. ReviewSchema este destinată pentru utilizatori 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ă comentariul, 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: mongoose.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: "Please select vehicle make type"
},
model: {
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 = require("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.Schema.ObjectId,
ref: "Store"
}
]
});
userSchema.virtual("gravatar").get(function() {
const hash = md5(this.email);
return `https://gravatar.com/avatar/${hash}?s=200`;
});
userSchema.plugin(passportLocalMongoose, { usernameField: "email" });
userSchema.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 auto, 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.
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.
Controlerul 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',{title:'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.checkBody('password','Password cannot be blank !').notEmpty();
req.checkBody('password-confirm','Confirm Passwor cannot be blank').notEmpty();
req.checkBody('password-confirm','Oops! Your password do notmatch').equals(req.body.password);
const errors = req.validationErrors();
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')
Controlerul de review raspunde de adăugarea unui comentariu unui serviciu auto. Controlerul de review are funcția addReview este o funcție asincronă 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 Review = mongoose.model('Review');
exports.addReview = async (req,res) =>{
req.body.author = req.user._id;
req.body.store = req.params.id;
const newReview = new Review(req.body);
await newReview.save();
req.flash('success','Review Saved');
res.redirect('back');
}
Controlerul centers are funcțiile principale care menține pagina serviciului auto. Funcția addStor preia datele și adaugă serviciul î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 = async (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 countPromise = 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 exist.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 });};
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("success", "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, lng: placeLng };
bounds.extend(position);
const marker = new google.maps.Marker({ map, position });
marker.place = place;
return marker;
});
markers.forEach(marker =>
marker.addListener("click", function() {
const html = `
<div class="popup">
<a href="/stores/${this.place.slug}">
<img src="/uploads/${this.place.photo || "store.png"}" alt="${this.place.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);
});
}
3.5 Interfaț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 sass. 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 motor de template pentru Node.js. Un motor template ne permite să injectăm date ș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.hearts.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('pencil')
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
Î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") Name
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" name="password-confirm")
input.button(type="submit",value="Register")
Figura 3.10 – Pagina autoservis
4 Documentarea produsului realizat
Pentru a putea accesa aplicația este necesar de accesa pagin web cu adresa respectivă la care va fi 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 reprezentată 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
Î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
Mai jos este reprezentat 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
Î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 selectarea 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
Figura 4.10 – review
Dupa logarea în sistem pe fiecare autoservis este butonul 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
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ționalităț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 nemateriale 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 medicale ș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 rezultatelor 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.
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 de 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 ( Crearea unor diagrame, Crearea 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.
În tabelul 5.1 este reprezentat fondul de timp necesare elaborării proiectului.
Tabelul 5.1 – Fondul de timp necesar elaborării proiectului
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 intangibile 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.
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 produsului de la proiectare și pînă la inițierea acestui pe piață. În tabelul 5.2 este analiza SWOT.
Tabelul 5.2 – Analiza SWOT
În baza analizei SWOT descrisă în tabelul 5.2, sunt propuse următoarele strategii pentru diminuarea riscurilor:
– reducere pentru clienți fideli;
– căutarea sponsuri in domeniu;
– promovarea web-siteul;
– integrarea permanentă a noilor funcționalități și tehnologii.
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 proiectului. Î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
În tabelul 5.4 este reprezentat consumurile directe de materiale.
Tabelul 5.4 – Consumurile directe de materiale
În tabelul 5.5 este reprezentat consumurile directe privind retribuirea muncii.
Tabelul 5.5 – Consumurile directe de material privind retribuirea muncii
Totаlul reprezintă Frm – 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аtorie (А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 de 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 аsigură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 remunerа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 а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аlculeа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 Аsigurа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 ‚
5.4 Uzura mijloacelor fixe și amortizarea activelor nemateriale
Partea importantă a cheltuielilor indirecte constituie calcularea fondului de uzură/amortizare. Uzura mijloacelor 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 =(MFi : DFU) * Ti (7)
Unde:
FA – fondul amortizării, lei;
MFi – valoarea de intrare;
T1 – durata proiectului;
DFU – durata de funcționare utilă.
Fondul de amortizare pentru activele materiale este calculat conform formulei de mai sus:
FAAcer = 12000 : (3 x 365) x 84 = 921 Lei
FATotal = 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 calculează pe o unitate. În tabelul 5.7 sunt realizate toate cheltuielile pentru elaborarea unei copii.
Tabelul 5.7 – Costul de producție
5.6 Calculul indicatorilor economico-financiari
Pentru calculul indicatorilor economico-financiari 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
Concluzii
La baza elaborării unei aplicații stau multe trepte, deseori și mulți dezvoltatori. Cei mai importanți pași sunt 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 cerinț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 ale 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 efectuă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 cu probleme, care au fost rezolvat pas cu pas, consultînd cu profesorul 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. Lucrul 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 multe 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 externi imprevizibili care ar putea crea probleme neașteptate. Au fost calculați indicatori, cum ar fi cheltuielile directe și indirecte și cheltuielile salariale etc.
Lucrarea respectivă, are un rol important în instruirea ca specialist în domeniul modelării 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ă.
Bibliografie
Uremont.com, [Resură electronică] – regim de acces: https://uremont.com
Master-lux.md, [Resură electronică] – regim de acces: http://master-lux.md/
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/
Anexa A
centerSchema
const mongoose = require("mongoose");
mongoose.Promise = global.Promise;
const slug = require("slugs");
const storeSchema = new mongoose.Schema(
{
name: {
type: String,
trim: true,
required: "Please enter a store name"
},
slug: String,
description: {
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: mongoose.Schema.ObjectId,
ref: "User",
required: "You must supply an author"
}
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true }
}
);
//define our indexing
storeSchema.index({
name: "text",
description: "text"
});
storeSchema.index({ 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.constructor.find({ slug: slugRegEx });
if (storeswithSlug.length > 0) {
this.slug = `${this.slug}-${storeswithSlug.length + 1}`;
}
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 have 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, highest 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);
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
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiectarea și dezvoltarea unui sistem informațional de geolocalizare și utilizare a serviciilor auto [311727] (ID: 311727)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
