PROGRAMUL DE STUDIU CALCULATOARE FORMA DE ÎNVĂȚĂMÂNT IF Proiect de diplomă COORDONATOR ȘTIINȚIFIC PROF. DR. ING. GYŐRÖDI CORNELIA AURORA ABSOLVENT… [303773]
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ
ȘI TEHNOLOGIA INFORMAȚIEI
PROGRAMUL DE STUDIU CALCULATOARE
FORMA DE ÎNVĂȚĂMÂNT IF
Proiect de diplomă
COORDONATOR ȘTIINȚIFIC
PROF. DR. ING. GYŐRÖDI CORNELIA AURORA
ABSOLVENT: [anonimizat]
2020
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ
ȘI TEHNOLOGIA INFORMAȚIEI
PROGRAMUL DE STUDIU CALCULATOARE
FORMA DE ÎNVĂȚĂMÂNT IF
DEZVOLTAREA UNEI APLICAȚII WEB PENTRU GESTIONAREA UNUI RESTAURANT
COORDONATOR ȘTIINȚIFIC
PROF. DR. ING. GYŐRÖDI CORNELIA AURORA
ABSOLVENT: [anonimizat]
2020
1. INTRODUCERE
Lucrarea de față are ca scop implementarea unui restaurant cu numele “Unique flavours”, precum și prezentarea aspectelor teoretice ale procesului de dezvoltare al acestuia. Aplicația dezvoltată are două componente principale și anume: [anonimizat] a [anonimizat] o [anonimizat]: HTML, CSS, JavaScript, PHP, [anonimizat].
Aplicația restaurantului este destinată tuturor persoanelor dornice de a [anonimizat] o gamă diversificată. Alegerea dezvoltării acestui site a [anonimizat] a descoperi noi rețete și de a promova preparatele realizate de mine.
Scenariul de utilizare a site-ului web împreună cu cea a [anonimizat], [anonimizat], [anonimizat], Opera etc. Este necesară crearea unor conturi de utilizator având dreptul de a [anonimizat] a [anonimizat] a face finalizarea comenzii înregistrate in baza de date. Astfel, pot afirma că baza de date MySQL ([anonimizat], comenzilor ) comunică în mod direct cu interfața utilizator ([anonimizat], JavaScript, PHP, [anonimizat]). Pentru realizarea acestei aplicații am folosit editorul de cod Sublime Text și pentru gestiunea bazei de date am utilizat “web-serverul” XAMPP. Baza de date poate fi găzduită local.
[anonimizat], cât și magazinul online sunt implementate astfel încât există posibilitatea dezvoltării ulterioare a interfeței și a magazinului prin adăugarea de noi preparate fără ca funcționarea obișnuită să fie afectată.
1.1 [anonimizat]. [anonimizat], are rol introductiv și de prezentare a [anonimizat] a soluțiilor identificate în vederea implementării.
Capitolul doi este dedicat prezentării tehnologiilor fundamentale care stau la baza implementarii aplicației ‘’Unique Flavours”, împreună cu prezentarea tehnologiilor și a [anonimizat].
[anonimizat], [anonimizat], precum și detalii despre fiecare modul al aplicației și structura bazei de date. Sunt descrise paginile restaurantului prin capturile de ecran realizate la finalizarea implementării, funcționalitatea lor, precum și fluxurile de date între componente, pentru a crea o imagine cât mai completă a utilizării soluțiilor tehnice implementate.
Ultima parte a lucrării este dedicată concluziilor legate de implementarea aplicației, cunoștințele pe care le-am dobândit în urma realizării acesteia, și posibilele dezvoltări viitoare ale aplicației.
2. TEHNOLOGII ȘI LIMBAJE DE PROGRAMARE UTILIZATE
2.1. BAZE DE DATE
Datorită dezvoltării rapide a industriei software și a calculatoarelor electronice ce a dus la necesitatea stocării unui volum tot mai mare de date s-a impus perfecționarea modulului de organizare și structurare a datelor care permit accesul rapid la datele stocate, pentru regăsirea și prelucrarea acestora. Pentru a efectua mai multe operații diferite de prelucrare, accesul rapid la date trebuie să rezolve probleme legate de viteza de regăsire a datelor și să asigure accesul mai multor utilizatori [2].
Există două tipuri de date, și anume: date simple care sunt independente unele de altele din punct de vedere al reprezentării lor în memorie și datele compuse care reprezintă colecții de date între care există anumite relații structurale [3].
Organizarea datelor presupune:
Definirea, structurarea, ordonarea și gruparea datelor în colecții de date omogene
Stabilirea relațiilor între date
Stocarea datelor pe un suport informațional
Obiectivele principale în organizarea datelor sunt:
Accesul rapid la date
Spațiul de memorie internă și externă ocupat de date să fie cât mai mic
Datele să apară o singură dată în sistem
Flexibilitatea datelor
O bază de date reprezintă un set centralizat și structurat a datelor stocate pe un sistem informatic. Aceasta oferă facilități pentru regăsirea, adăugarea, modificarea și ștergerea datelor atunci când este nevoie și oferă facilități pentru transformarea datelor extrase în informații utile.
Din punct de vedere al serviciilor pe care le oferă, baza de date reprezintă o colecție de date care poate să descrie întreaga activitate a unei organizații și care furnizează acces la diferite informații, care sunt prezentate în diferite formate.
Avantajele folosirii bazelor de date în locul fișierelor de date sunt:
Partajarea informațiilor
Consistența, integritatea, securitatea, și independența datelor
Transparența
MySQL este un sistem de gestiune a bazelor de date relaționale, ce nu conține interfață grafică pentru administrarea sau gestionarea datelor din bazele de date și este produs de compania suedeză MySQL AB și distribuit sub Licența Publică Generală GNU. Este cel mai popular SGBD open-source la ora actuală fiind o componentă cheie a stivei LAMP(Linux, Apache, MySQL, PHP).Administrarea MySQL se face în două moduri: din linia de commandă sau folosind browserul și accesând aplicația phpMyAdmin scrisă în PHP.
Un sistem de gestionare a bazelor de date relaționale (RDBMS) este un instrument esențial în multe medii, de la utilizări în mediul de afaceri, cercetare și contexte educaționale, la livrarea conținutului pe internet.
SQL (Structured Query Language) este un limbaj de programare specific pentru manipualrea datelor în sistemele de manipulare a bazelor de date relaționale (RDBMS). Acesta are ca scop inserarea datelor, interogații, actualizare și ștergere, modificarea și crearea schemelor, precum și control asupra accesului la date.
MySQL este un sistem de gestiune a bazelor de date relaționale, fiind cel mai popular SGBD open-source la ora actuală.
MySQL are multe calități printre care:
– Viteza: MySQL este rapid și devine mai rapid;
– Ușurință în utilizare: MySQL este un sistem de baze de date de înaltă performanță, relativ simplu, mai puțin complex de instalat și administrat decât sistemele mai mari;
– Înțelege SQL (Language Structured Query);
– Capabilitatea: Serverul MySQL este multi-threaded, astfel încât mulți clienți se pot conecta la el în același timp. Fiecare client poate utiliza simultan mai multe baze de date.
Am utilizat limbajul SQL pentru a adăuga, a șterge, a interoga și actualiza date din baza de date. Comenzile SQL se află în fișiere PHP.
2.2. XAMPP
XAMPP este un sever de dezvoltare locală, utilizat frecvent pentru crearea site-urilor web, care rulează pe același dispozitiv pe care utilizatorul acestuia îl folosește pentru a crea și accesa aplicația.
Unul dintre avantajele utilizării acestui server este reprezentat de faptul că nu este necesară o conexiune la internet pentru a rula site-ul.
XAMPP este un acronim pentru:
X (de la "cross", care înseamnă cross-platform), adică poate fi utilizat/rulat pe diferite sisteme de operare, cum ar fi Windows, Linux, Unix etc.
Apache HTTP Server (open source) – este cel mai utilizat server din întreaga lume pentru livrarea de conținut web. Aplicația server este pusă la dispoziție ca software liber de Apache Software Foundation.
MySQL – în MySQL, XAMPP conține unul dintre cele mai populare sisteme de gestionare a bazelor de date relaționale din lume. În combinație cu serverul web Apache și limbajul de scripting PHP și MySQL oferă stocarea datelor pentru serviciile web, iar cea mai recentă versiune pentru MySQL se numește MariaDB.
PHP – limbaj de programare din partea serverului care permite utilizatorilor să creeze site-uri sau aplicații dinamice, de asemenea poate fi instalat pe toate platformele și suportă o serie de sisteme de baze de date diverse.
Perl – limbaj de scripting care este folosit în administrarea sistemului, dezvoltarea web și programarea în rețea. Ca și PHP, Perl le permite utilizatorilor să programeze și aplicații web dinamice.
Alături de aceste componente de bază, această distribuție gratuită Apache conține și alte instrumente utile, care diferă în funcție de sistemul de operare utilizat. Aceste instrumente includ serverul de poștă electronică Mercury, instrumentul de administrare a bazelor de date phpMyAdmin, soluțiile software Web Analytics, OpenSSL și Apache Tomcat și serverele FTP FileZilla sau ProFTPd.
Figura 2.1. Panelul de control XAMP pentru pornirea și oprirea serviciilor Apache, MySQL
Am ales să folosesc acest server în urma unor cercetări, deoarece m-am documentat pentru a alege varianta cea mai eficentă și optimă, fiind de asemenea o soluție gratuită care îmi oferă acces atât la bazele de date cât și la partea de front-end și back-end a website-ului pe care l-am creat.
În continuare voi prezenta câteva concluziile pe care le-am stabilit în urma acestei cercetări, și informații care m-au motivat să fac această alegere, să aleg serverul XAMPP dintre toate variantele pe care le aveam la dispoziție, și anume: serverele WAMP, LAMP și MAMP.
2.2.1. XAMPP VS WAMP, LAMP și MAMP
Fiecare dintre aceste servere menționare mai sus sunt servere locale, care au același scop: de a fi utilizate în timpul dezvoltării site-urilor web PHP și pentru testarea locală a acestora.
Testarea locală având rolul de a semnala erorile și mai ales cele prezente înainte de încărcare.
Diferența majoră dintre aceste servere: XAMPP, WAMP, LAMP și MAMP este constituită de tipul sistemului de operare, mai exact XAMPP este utilizat pentru X-OS, Apache, Mysql, PHP, Perl, WAMP pentru Windows, LAMP este pentru Linux, iar MAMP este pentru Mac OS X.
Pentru a evidenția diferența dintre aceste servere, în următoarele rânduri voi face o scurtă descrie a fiecăruia.
După cum am mai menționat, XAMPP este unul dintre cele mai simple și ușoare servere locale care este utilizat pentru a testa site-ul local pe parcursul dezvoltării și este o platformă open source.
Include X-OS, deoarece funcționează în toate sistemele de operare majore precum Windows, Linux, Mac etc și funcții precum Filezilla, mercury mail, suport pentru Perl și multe altele. Unul dintre principalele avantaje este că se pot efectua cât mai multe testări și actualiza conținutul din testarea locală a site-ului. Întrucât este un open source, se poate descărca și instala cu ușurință în sistem. Se pot realiza o serie de testări instalându-l o singură dată.
A doua variantă de server pe care am analizat-o și despre care m-am documentat este WAMP, care reprezintă un acronim pentru Windows, Apache, Mysql și PHP.
Acest server funcționează numai pe sistemul de operare Windows, de asemenea este o platformă open source precum XAMPP și folosește serverul web Apache. Folosește și sistemul de gestionare a bazelor de date relaționale MySQL și limbajul de script orientat pe obiecte: PHP.
Un avantaj pentru WAMP este reprezentat de faptul că deține Apache care este utilizat pentru a rula un server web pe Windows. Prin rularea acestui server local pe Windows, dezvoltatorul web își poate testa paginile web fără să le publice. Cu acest server local, se pot testa site-uri web dinamice fără a le publica pe serverul web live. Este ușor de utilizat și de codat cu PHP și este disponibil atât pentru sistem pe 32 biți, cât și pe 64 biți.
Următoarea versiune de server este LAMP, a cărui semnificație are la bază următoarele denumiri: Linux, Apache, Mysql și PHP.
Și aceasta este o platformă open source, dar funcționează pe sistemul de operare Linux. Utilizează serverul web Apache, sistemul de gestionare a bazelor de date relaționale MySQL și limbajul de script orientat pe obiecte PHP.
Deoarece această platformă are patru straturi, poate fi asemănată cu structura unei stive, de aceea se mai numește și stiva LAMP. Această versiune este foarte securizată, funcționând cu sistemul de operare Linux și este ușor de codat cu PHP.
Un server LAMP poate genera pagini web dinamice care rulează cod PHP și încarcă date dintr-o bază de date MySQL, nu doar pagini HTML statice.
Ultima versiune este MAMP, acronim pentru Mac, Apache, Mysql și PHP.
MAMP este o platformă open source și funcționează pe sistemul de operare Mac. Precum serverului prezentat anterior, MAMP folosește Apache, sistemul de gestionare a bazelor de date relaționale Mysql și limbajul orientat pe obiecte PHP.
Spre deosebire de celelalte, acesta oferă toate instrumentele pentru a rula WordPress, în scopul dezvoltării și testării.
Toate serverele locale menționate mai sus sunt cu adevărat ușor de utilizat și nu necesită nicio configurație avansată, și fiecare versiune conține un pachet de setări implicite.
Eu am ales XAMPP deoarece consider că este cel mai ușor de utilizat pentru mine, în concordanță cu sistemul de operare instalat pe gadgetul meu, funcționalitățile pe care am dorit să le implementez aplicației, și datorită opțiunii de testare multiplă.
2.3 SUBLIME TEXT 3
Sublime Text 3 este un editor de coduri sursă. Suportă nativ multe limbaje de programare și limbaje de marcare, iar funcțiile pot fi adăugate de utilizatori cu plugin-uri, construite în mod obișnuit în comunitate și întreținute sub licențe de software liber.
Sublime Text este disponibil pentru descărcarea pe mai multe platforme, pe MAC, Windows și este disponibil cu majoritatea distribuțiilor Linux. Scopul principal al programului Sublime Text este funcționalitatea de editare live HTML, CSS și JS, și de asemenea oferă suport pentru PHP.
Acesta oferă mai multe caracteristici și anume:
„Goto Anything”-navigare rapidă către fișiere, simboluri sau linii
Paleta de comenzi folosește potrivirea adaptivă pentru invocarea rapidă de pe tastatură a comenzilor arbitrare
Editare simultană: se pot realiza simultan aceleași modificări interactive în mai multe zone selectate
API-ul bazat pe Python
Personalizare extinsă prin fișiere cu setări JSON, inclusiv setări specifice proiectului și platformei
Cross-platform (Windows, macOS și Linux) și plugin-uri de suport pentru multiplă platformă
Compatibil cu multe gramatici de limbă de la TextMate
Figura 2.2. Editorul de cod Sublime Text
2.4. HTML
HTML (HyperText Markup Language) a fost impus pentru crearea paginilor web. Acesta este un limbaj de marcare și are ca scop să prezinte într-un anumit format informațiile precum: tabele, paragrafe, culori și fonturi.
HTML nu este un limbaj de programare și asta datorită faptului că în HTML lipsește atributul propriu principal oricărul limbaj de programare, și anume comenzile.
În HTML nu poate fi creată o succesiune de acțiuni, ci doar poate fi descris modul în care browserul trebuie să afișeze pe ecran documentul respectiv. HTML utilizează pentru descrierea documentelor web tag-uri, numite și etichete, care sunt specifice pentru fiecare element descris. Tag-urile stabilesc atât structura documentului, cât și aspectul acestuia.
Un tag este un identificator care furnizează browser-ului instrucțiuni de formatare a documentului. Pentru a fi delimitate, aceste tag-uri sunt încadrate între paranteze unghiulare (< >).
HTML este independent de platformă, adică se pot crea fișiere HTML pe o anumită platformă și se poate folosi orice alt calculator pentru a vizualiza acel fișier ca și o pagină Web.
2.4.1. HTML5
HTML5 are multe caracteristici noi sintactice, caracteristici care cuprind elemente ca <header>, <audio>, <video>,și elemente HTML, precum integrarea conținutului SVG(Scalable Vector Graphics) care a înlocuit utilizarea tag-ului <object>. Aceste noutăți au ca scop de a facilita includerea și manipularea conținuturilor multimedia în web dar și grafice fără a mai fi nevoie să se apeleze la proprietățile de plugin și API. Elemente noi precum <article>, <header>, <section> au scopul de a îmbunătății conținutul semantic al documentelor [7].
Aplicațiile HTML5 pot fi pornite pentru a rula în modul offline. HTML5 oferă o funcție de stocare offline, numită un cache al cererii pentru stocarea de fișiere. Dacă utilizatorul este deci offline, browser-ul mai are încă acces la fișierele necesare. [9].
HTML5 include o funcție Drag and Drop, care permite dezvoltarea de aplicații interactive. Cu Drag & Drop avem posibilitatea să mutăm orice element în locul dorit.HTML5 introduce multe elemente noi de intrare, cum ar fi selectoare de culori, pop-up calendare și altele.
Am ales să folosesc acest limbaj pentru a structura într-un mod cât mai logic și eficient și a da sens conținutului web, de exemplu, definind paragrafe, titluri și tabele de date sau încorporând imagini.
2.5. LIMBAJUL DE STILIZARE CSS
CSS este un acronim pentru Cascading Style Sheets și este un limbaj de stilizare al elementelor și al tagu-urilor HTML. Cu ajutorul acesuia descriem modul de reprezentare al paginii HTML, într-un fișier separat.
Dintre avantajele acestui limbaj de stilizare se pot enumera următoarele:
Conținutul este separat de prezentare
Are control asupra layout-ului documentelor dintr-o singură pagină de stiluri
Permite ca modul de afișare si layout-ul paginilor de pe un server web să fie definite intr-un singur loc
Se poate utiliza pentru pagini HTML, cât și pentru documente XML.
Sintaxa fișierelor CSS constă dintr-o listă de:
Selectori – folosiți pentru alegerea tag-urilor
Descriptori – pentru a indica ce vrem să facem cu acestea
CSS extinde funcționalitățile HTML, permițând redefinirea etichetelor HTML existente.
Un fișier CSS conține o listă cu astfel de perechi (selectori, descriptori). Selectorii pot fi simple tag-uri HTML sau XML, iar descriptorii sunt definiți în standard-ul CSS.
Există trei moduri de utilizare a CSS-urilor:
– Style sheet extern:
Se aplică la HTML și XML și se pot utiliza toate elementele de sintaxă CSS
– Style sheet intern:
Se aplică numai la HTML și se pot utiliza toate elementele de sintaxă CSS
– Style sheet inline:
Se aplică numai la HTML și nu se pot utiliza toate elementele de sintaxă CSS
2.5.1 CSS3
CSS3 oferă o mulțime de lucruri noi pentru a îmbunătății un website. Cea mai mare schimbare o reprezintă includerea modulelor. Avantajul modulelor este acela că permite specificațiilor să fie completate și aprobate mai repede, deoarece segmentele sunt completate și aprobate în bucăți [9].
Caracteristici noi CSS3:
– Selectorii:
Permit proiectantului/dezvoltatorului să selecteze niveluri mult mai specifice ale documentului
Pseudo-clase structurale precum nth-child
Pseudo-clasă țintă pentru a modela numai elementele care sunt vizate în URL
– Efecte de text și layout
Text shadow – se poate adăuga umbră la conținut sau la anumit font
– Pseudo-clase precum first-letter și first-line
– Mediu paginat și conținut generat
CSS3 suportă mai multe opțiuni în mediile paginate precum: rularea antetelor și subsolurilor, numerotarea paginilor, anumite proprietăți pentru imprimarea conținutului generat, inclusiv proprietăți pentru notele de subsol și referințele încrucișate.
– Multi-column layout
Oferă proprietăți care permit proiectanților să-și afișeze conținutul în mai multe coloane, cu definiții cum ar fi decalajul dintre coloane, numărul de coloane și lățimea coloanei.
– Ruby
Are capacitatea de a adăuga adnotări mici in partea de sus sau lângă cuvinte, cele mai des utilizate in limba chineză sau japoneză. Ele sunt utilizate în general pentru a da pronunția sau sensul ideogramelor dificile [9].
În cazul aplicației pe care am realizat-o, am folosit fișiere cu extensia .css pentru a stiliza într-un mod cât mai curat și atrăgător pentru utilizator, cu ajutorul căruia am reușit definirea paginilor web.
2.6. LIMBAJUL PHP
PHP este un limbaj de programare folosit pentru dezvoltarea paginilor și aplicațiilor web și reprezintă acronimul pentru Personal Home Page.
Acesta este cel mai cunoscut limbaj de scripting folosit pentru crearea site-urilor Web interactive. Denumirea este un acronim recursiv pentru Hypertext PreProcessor. Diferența față de alte limbaje de scripting precum JavaScript, este faptul că PHP este un interpretor server-side adică operațiile sunt executate de către server și nu pe calculatorul utilizatorului [12].
Scripturile PHP sunt utilizate în trei domenii principale, și anume:
– Scripting pe partea serverului, acesta fiind cel mai tradițional și de bază domeniu al PHP
– Scripting în linia de comandă, adică se poate crea un script PHP care poate rula fără server și fără navigator web
– Scrierea aplicațiilor de birou
Una dintre cele mai semnificative facilități ale PHP este susținerea unui larg domeniu de baze de date. Accesarea unei baze de date se face utilizând una din extensiile de lucru cu baze de date sau utilizând un nivel de abstractizare precum POO, sau conectarea la orice bază de date ce susține standardul “Open Database Connection” cu ajutorul extensiei ODBC [12].
În implementarea aplicației am folosit PHP în cadrul căruia sunt comenzile MySQL. Aplicația accesează fișierele PHP pentru a primi date și informații care sunt returnate cu ajutorul MySQL.
2.7. LARAVEL
Laravel este unul dintre cele mai populare framework-uri PHP conceput pentru aplicațiile web în dezvoltare cu scopul de a le face mai ușoare și mai rapide prin funcții integrate.
De asemenea este alegerea dezvoltatorilor profesioniști datorită performanțelor, caracteristicilor și scalabilității sale.
Acest framework urmează structura MVC (Model View Controller) care face ușor de învățat și implementat rapid aplicațiile web. Laravel oferă funcții integrate precum autentificare, email, rutare și sesiuni, și este ușor de personalizat astfel încât există posibilitatea de a crea propria structură de proiect care să răspundă cererii aplicației web.
Caracteristicile acestui framework sunt următoarele:
Managementul dependenței
Gestionarea dependenței este una dintre cele mai bune caracteristici ale Laravel, înțelegerea funcționalității containerului de servicii (IoC) este partea principală pentru a învăța aplicații web moderne. În Laravel, IoC (Inversion of Control) sau Service Container este cel mai puternic instrument de gestionare a dependențelor clasei.
Modularitatea
Modularitatea este gradul în care componentele unei aplicații web pot fi separate și recombinate, iar Laravel este conceput pentru a crea aplicații modulare.
Autentificarea
Autentificarea este o parte integrată a oricărei aplicații web moderne, iar acest framework oferă posibilitatea de a crea un sistem de autentificare prin rularea unei comenzi simple. De asemenea, Laravel oferă documentație pentru a implementa propria autentificare.
Memoria cache
Caching-ul este o tehnică de stocare a datelor într-o locație de stocare temporară și poate fi preluată rapid la nevoie. În principal, cache-ul este folosit pentru a crește performanța aplicației. Această tehnică ajută la scăderea timpului de procesare, crescând astfel performanța.
Rutarea
Rutele Laravel se pot utiliza pentru a crea motoare de căutare URL-uri, cu o flexibilitate și control deosebit.
Creatorul de interogări de baze de date
Acesta oferă o modalitate convenabilă de a crea interogări în baza de date. Conține funcții de ajutor care pot fi utilizate pentru a filtra datele.
Sistem de fișiere
Laravel oferă asistență pentru mai multe sisteme de fișiere. Se poate utiliza un sistem de fișiere local sau orice sistem bazat pe cloud, cum ar fi Amazon S3.
Securitatea
Laravel oferă un mod intuitiv de a crea aplicații web sigure și stochează toate parolele ca hash în loc de parole simple. Laravel folosește BCrytp pentru aceste parole și oferă securitate împotriva atacurilor de injecție SQL.
Artisan
Instrumentul pentru linia de comandă se numește Artisan. Laravel are zeci de comenzi pre-construite care se pot rula pe o interfață de linie de comandă.
Cu ajutorul acestui instrument se pot evita sarcinile repetitive în timpul procesului de dezvoltare.[16]
Sistemul de migrare
Laravel oferă un sistem de migrare pentru a crea structuri de baze de date. Pentru a scrie migrația care va crea structura bazei de date se poate utiliza limbajul PHP, în loc de SQL. Migrarea se mai poate folosi și în cazul în care se dorește schimbarea unei coloane a tabelului, cu scopul de a simplifica și ușura această operație.
2.8. LIMBAJUL JAVASCRIPT
JavaScript abreviat adesea ca JS este un limbaj de programare orientat pe obiecte bazându-se pe conceptul prototipurilor. Alături de HTML și CSS, JavaScript este unul dintre cele trei tehnologii de bază ale World Wide Web.
JavaScript permite inserarea de script-uri în paginile web, care se execută în cadrul paginii web, mai precis în cadrul browser-ului utilizatorului, ușurând astfel și traficul dintre server și client. De exemplu pentru a colecta date de la utilizator într-o pagină web, se pot adăuga scripturi JavaScript pentru validarea corectitudinii a introducerii și apoi pentru a trimite serverului doar date corecte spre a fi procesate. JavaScript conține o listă de funcții și comenzi cu scopul de a ajuta ajuta la operațiile matematice, la manipulări de șiruri, și sunete, imagini, obiecte și ferestre ale browser-ului, link-uri URL și verificări ale introducerii datelor în formulare [9].
Pentru inserarea unui cod JavaScript într-un document HTML, se folosește tagul <script>, respective tagul </script>. Aceste taguri marchează locul în care începe, respectiv se sfârșește scriptul.
Pentru a insera scripturi în documente HTML se pot folosi 4 metode și anume:
Metoda 1 – plasarea de script în antet-ul paginii (între <head>și </head>)
Metoda 2 – plasarea de script în corpul paginii (între <body>și </body>)
Metoda 3 – utilizarea fișierelor sursă
Metoda 4 – crearea unui gestionar de evenimente
Există câteva aspecte fundamentale ale limbajului JavaScript și anume:
JavaScript poate fi introdus în HTML – codul JavaScript este găzduit de obicei în documentele HTML și executat în interiorul lor.Obiectele din JavaScript au etichete HTML, pe care le reprezintă în așa fel încât programul să fie inclus pe partea de client a limbajului. JavaScript folosește HTML pentru a putea lucra în cadrul aplicațiilor web.
Este dependent de mediu – este un limbaj de scriptare întrucât software-ul care rulează programul de lucru este de fapt browser-ul web(Opera, Firefox, etc.).
Este un limbaj interpretat – codul scriptului este interpretat de browser înainte de a se executa. JavaScript nu are nevoie de compilări sau preprocesări, el rămâne integrat în documentul HTML. Dezavantajul acestui limbaj este faptul că rularea durează mult deoarece navigatorul web citește și procesează comenzile JavaScript atunci când user-ul apelează acele funcții. Avantajul este faptul că se poate actualiza ușor codul sursă.
Este un limbaj flexibil – putem să declarăm o variabilă de un anume tip, sau putem să lucrăm cu o variabilă cu toate că nu-i cunoaștem tipul specificat înainte de a o rula.
JavaScript este un limbaj bazat pe obiecte – adică modelul de obiect JavaScript nu este bazat pe moștenire ci pe instanță
Este condus de evenimente – o mare parte a codului JavaScript este făcut pentru a răspunde la evenimentele generate de un utilizator sau de un sistem. Obiectele HTML, de tip butoanele, au fost îmbunătățite pentru a accepta handlere sau evenimente
Acoperă diverse contexte – programarea în acest limbaj este îndreptată către partea de client, însă se poate folosi JavaScript și pe partea de Server. JavaScript este limbaj nativ pentru anumite instrumente de dezvoltare web, precum Macromedia Dreamweaver sau Borland IntraBuilder [10].
Fiind un limbaj de scripting, JavaScript mi-a permis să creez un conținut dinamic actualizat.
2.9. JQUERY
jQuery este o platformă de dezvoltare JavaScript, concepută pentru a simplifica traversarea documentelor HTML, gestionarea evenimentelor, animarea și interacțiunile AJAX pentru dezvoltarea web rapidă. jQuery este un set de instrumente JavaScript concepute pentru a simplifica diverse sarcini prin scrierea unui cod mai puțin [14].
jQuery are mai multe caracteristici precum:
– selecția de elemente în arborele DOM folosind motor propriu de selecții open source precum Sizzle, un proiect născut din jQuery;
– parcurgerea și modificarea arborelui DOM (inclusiv suport pentru selectori CSS3 și Xpath simpli);
– efecte și animații;
– înregistrarea și modificarea evenimentelor din browser;
– manipularea de elemente CSS;
– cereri de tip AJAX;
– utilități – funcția each;
– extensii.
Plugin-urile sau extensiile sunt unele dintre cele mai interesante aspecte ale jQuery. Arhitectura sa permite programatorilor să dezvolte sub-aplicații bazate în biblioteca principală care extind funcțiile de bază jQuery cu funcții specifice plugin-ului. jQuery UI oferă un set de extensii pentru interactivitate de bază, efecte mai complexe decât cele din biblioteca de bază și teme de culori. Avantajul UI față de alte extensii este că dezvoltarea și testarea acestor componente se face în paralel cu dezvoltarea bibliotecii principale, minimând riscul de incompatibilitate [15].
Există două moduri de a utiliza jQuery:
– Instalare locală – se poate descărca biblioteca jQuery pe mașina locală
– Versiune bazată pe CDN – se poate include direct biblioteca jQuery în codul HTML din Rețeaua de livrare a conținutului (CDN – Content Delivery Network) [14].
3. IMPLEMENTAREA APLICAȚIEI
Acest capitol are scopul de a prezenta modul de implementare a soluției destinată gestionării comenzilor restaurantului ’’Unique Flavours’’, precum și funcționalitățile de care acesta dispune.
De asemenea, acest capitol este destinat pentru a putea detalia structura fiecărui modul al aplicației pentru a fi evidențiat mecanismul de funcționare care stă la baza acesteia, și voi explica structura bazei de date. Mai multe detalii despre această bază de date sunt prezentate în Anexa 1 a acestei lucrări, unde este atașată în întregime schema bazei de date.
3.1 STRUCTURA BAZEI DE DATE
Pentru aplicația web am creat o bază de date cu ajutorul sistemului de gestiune a datelor phpMyAdmin.
În Anexa 1 a acestei lucrări, după cum am menționat și mai sus este atașată structura bazei de date a aplicației pe care am creat-o, fiind evidențiate și relațiile dintre tabele. Numele bazei de date este “restaurant” și conține 14 tabele, fiecare având diferite roluri, după cum se poate observa în cele ce urmează.
Tabelele care alcătuiesc structura acestei baze de date, după cum este prezentat și în Figura 3.1 sunt următoarele:
Figura 3.1.1 Structura bazei de date-restaurant
În figura 3.1.2 este prezentată tabela carts, în care se stochează datele referitoare la coșul de cumpărături care se creează în momentul în care se selectează comanda aferentă pentru orice produse care urmează să fie achiziționate. Această tabelă conține câmpurile: id, care reprezintă id-ul comenzii, poate fi privit precum un număr de ordine, user_id, adică id-ul clientului care a efectuat comanda, și delivered pentru a marca dacă acea comandă a fost sau nu livrată.
Figura 3.1.2 Captură de ecran cu structura tabelei carts
Figura 3.1.3 afișează structura tabelei carts_details. Această tabelă marchează legătura dintre produse și cărucioarele de cumpărături prin câmpurile cart_id, food_id și quantity.
Figura 3.1.3 Captură de ecran cu structura tabelei carts_details
Practic, putem spune că această tabelă reprezintă doar căruciorul, fără conținutul acestuia.
În figura 3.1.4 se poate observa tabela failded_jobs, care este o tabelă specifică pentru framework-ul Laravel și care conține statusul cozilor (queues) în cazul în care au fost utilizate, dar în acest moment această tabelă este goală, deoarece acestea nu s-au utilizat.
Figura 3.1.4 Captură de ecran cu structura tabelei failded_jobs
Figura 3.1.5 prezintă structua tabelei foods, care este efectiv tabela care conține toate tipurile de preparate care se regăsesc în meniu restaurantului.
Figura 3.1.5 Captură de ecran cu structura tabelei foods
Tabela foods_categories este prezentată în figura 3.1.6, tabelă care realizează legăturile dintre preparate și categoriile din care fac parte. Am creat această tabelă nouă deoarece un produs poate face parte din mai multe categorii și pentru a elimina orice confuzii sau erori în această privință.
Figura 3.1.6 Captură de ecran cu structura tabelei foods_categories
În figura 3.1.7 este tabela food_categories, care conține categoriile de preparate din meniu, de exemplu o categorie pe care am creat-o este cea de aperitive.
Figura 3.1.7 Captură de ecran cu structura tabelei food_categories
Tabela migrations, a cărei structură este prezentată în figura 3.1.8, conține informații despre migrări, care sunt realizate cu ajutorul comenzii php artisan migrate în Command Prompt. Această tabelă este foarte utilă, deoarece elimină posibilitatea de a se efectua migrari multiple pentru aceleași date.
Figura 3.1.8 Captură de ecran cu structura tabelei migrations
În figura 3.1.9 avem tabela orders. Aceasta conține detalii despre comenzile plasate pe site (checkout).
Figura 3.1.9 Captură de ecran cu structura tabelei orders
Tabela order_details prezentată în figura de mai jos, realizează legăturile dintre preparate și comenzile efectuate, de asemenea deține detalii despre aceste preparate, cum ar fi cantitatea comandată și id-ul preparatelor.
Figura 3.1.10 Captură de ecran cu structura tabelei orders_details
Tabela password_resets este specifică Laravel cu rol în securizarea parolelor pentru conturi, pentru a nu exista posibilitatea ca un utilizator să modifice parola altuia. Practic, se creează token-uri care au o legătură cu email-ul. În momentul de față tabela nu conține detalii, deoarece nu au existat cazuri de conflicte la parolele utilizatorilor.
În figura de mai jos se poate observa structura tabelei sellers_orders în care sunt stocate comenzile pe care le efectuează ospătarii în restaurant. Aceste comenzi sunt comenzi închise, în ideea că nu sunt livrate la domiciliu, ci la un număr de masă din restaurant.
Figura 3.1.11 Captură de ecran cu structura tabelei sellers_orders
Figura 3.1.12 evidențiază tabela seller_orders_details. Aceasta conține legăturile dintre comenzile plasate de către ospătari și preparatele comandate.
Figura 3.1.12 Captură de ecran cu structura tabelei sellers_orders_details
Tabela users conține toți utilizatorii creați pentru a avea diferite tipuri de acces la aplicație, și anume: useri pentru clienți (tipul default), pentru ospătari (seller) și pentru administratori (admin). De asemenea, administratorul la rândul său poate crea useri pentru a avea acces la aplicație.
Tabela users_biling_details am creat-o în scopul de a stoca detalii despre adresele clienților care au plasat comenzi pe aplicație, iar acestea sunt utilizate pentru livrarea comenzilor la domiciliu.
4.2 STRUCTURA APLICAȚIEI
Aplicația pe care am realizat-o se numește Unique Flavours și este structurată în 3 părți/interfețe, și anume:
1. Interfața pentru client/utilizator al aplicației, care cuprinde pagina de Home, o pagină cu o scurtă descriere a locației, pagina de comandă, adică cea de prezentare a preparatelor disponibile pentru a fi comandate, o pagină de contact la restaurantului care pe langă adresă, număr de telefon și vizualizarea locației pe hartă, mai conține și un formular de contact, și în cele din urmă paginile cu detalii despre comenzi și setări pentru contul creat.
2. Interfața pentru ospătar
Ospătarul poate vizualiza aceleași pagini ca și clientul, doar că are în plus zona de administrare a comenzilor plasate pentru clienții din restaurant și o pagină a istoricului comenzilor pentru a avea evidența casei de marcat, în vederea predării sumei acumulate următorului ospătar sau administratorului la sfârșit de zi.
3. Interfața pentru administrator
Administratorul deține control asupra întregii aplicații. Acesta se ocupă de gestionarea comenzilor online, care trebuie să fie livrate la domiciliu, poate adăuga sau elimina preparate din meniu, în funcție de actualizarea acestuia și de disponibilitate, de asemenea are acces pentru a adăuga noi categorii de mâncare și administrează conturile create pentru aplicație.
Aceste trei module sunt separate, independente unul față de celălalt din punct de vedere al implementării, dar din punct de vedere funcțional acestea comunică între ele, deoarece administratorul are control deplin asupra aplicației, poate controla conținutul pe care îl vizualizează un ospătar sau un client în site și la ce date pot avea aceștia acces.
Figura 3.2.1 Harta generală a site-ului
În figura 3.1. este reprezentată harta site-ului, care conține structura ierarhică a paginilor acestuia. Această structură este una generală, care poate fi accesată de către toate tipurile de utilizatori (client, ospătar și admin), urmând ca în continuare să detaliez structura aplicației în funcție de tipul de utilizator, deoarece aceasta este diferită la fiecare dintre aceștia, având în plus unele funcționalități.
Site-ul web pe care l-am realizat are un meniu simplu și o interfață ușor de utilizat. Scopul implementării acestui site este promovarea restaurantului “Unique Flavours” și prezentarea ofertelor către clienți, aceștia având posibilitatea de a efectua comenzi online și de a fi livrate la domiciliu. Site-ul poate fi accesat de orice persoană care dorește să descopere gustul preparatelor prezentate în meniu și de a experimenta noi combinații de arome, toate acestea sunt afișate în pagina de comandă. Această pagina oferă clienților o gamă variată de preparate, atât deserturi traditionale, dar și variante reinterpretate, cât și garnituri, supe și altele preparate pe gustul fiecărui client.
Pentru partea de front-end am creat interfața pentru utilizatori, dar și una pentru administrator și pentru ospătar, iar pe parte de back-end pentru managementul conținutului am creat o bază de date de unde administratorul actualizează conținutul, iar ospătarul adaugă comenzi, și face o evidență a acestora filtrată pe mai multe categorii.
3.2 INTERFAȚA PENTRU CLIENT
Această interfață cuprinde mai multe pagini, după cum se poate observa în figura de mai jos, în meniul site-ului: pagina de Home, pagina “Despre noi” care conține o scurtă descriere a locației, magazinul online sau pagina de comandă, o pagină de contact, pagini cu detalii despre cont, setările datelor și coșul de cumpărături.
Figura 3.2.1 Pagina principală
Site-ul are o interfață ușor de folosit, este de tip “one page”, iar navigarea printre pagini
este de tip “scrolling” pentru a oferi utilizatorului posibilitatea de a sări rapid la diferite secțiuni ale paginii.
Pentru crearea paginilor am utilizat Bootstrap, un framework care mi-a permis realizarea de pagini responsive. În pagina din figura 3.2.1 am utilizat clasa ‘navbar’’, iar pentru design am folosit CSS care pe baza selectorilor și proprietăților m-au ajutat la stilizarea mai multor elemente ȋn cadrul realizării aplicației, după cum se poate observa și în figura de mai jos:
Figura 3.2.2 Cod pentru meniu de navigare
Bootstrap conține un sistem de grid pe 12 coloane fiind un cadru web care se concentrează pe simplificarea dezvoltării paginilor web informative. Componentele cele mai proeminente ale Bootstrap-ului sunt componentele layout-ului, deoarece afectează o întreagă pagină Web. Componenta elementului de bază este numită "Container", așa cum se plasează fiecare element din pagină. Odată ce un container este instalat, alte componente ale aspectului Bootstrap implementează un aspect al gridului CSS prin definirea rândurilor și a coloanelor.
Cu ajutorul acestui sistem de grid am împărțit pagina principală a site-ului în 3 coloane de dimensiuni egale făcând-o astfel accesibilă și de pe alte dispozitive (figura 3.2.3).
Figura 3.2.3 Conținut pagina principală
Efectul utilizării framework-ului Bootstrap este evidențiat în imaginea de mai jos, în care se poate observa modul de vizualizare a paginii principale pe un smartphone.
Figura 3.2.4 Pagină principală vizualizată pe smartphone
În următoare figură este prezentată pagina care conține câteva detalii despre locație, și o imagine din interiorul restaurantului, precum și tipurile de preparate pe care se bazează meniul. Dacă se acționează butonul “VEZI MENIU”, se face în mod automat redirecționarea către următoarea pagină, și anume pagina de comandă, în care se găsesc toate preparatele din restaurant, filtrate pe categorii, pentru a ușura vizualizarea acestora și mai ales pentru a fi mai ușor de adăugat în coș produsele care se doresc a fi comandate.
Figura 3.2.5 Pagina despre restaurant
Pagina de comandă din figura 3.2.7 permite utilizatorului/clientului să vizualizeze produsele din meniu filtrate pe categorii, iar fiecărui produs este îi este atașată o imagine pentru ca utilizatorul să știe exact despre ce produs este vorba și pentru a-i ușura și scurta timpul de selecție a produselor pentru plasarea comenzii.
Figura 3.2.6 Cod pentru adăugare produs în coș
De asemenea, fiecare produs are prețul afișat și opțiune de selectare a cantității, iar în momentul în care clientul plasează comanda, acesta poate afla singur suma totală.
Figura 3.2.7 Pagina de prezentare preparate din meniu
După procesul de adăugare în coș a produselor dorite, clientul accesează pagina corespunzătoare coșului de cumpărături (figura 3.2.8) și trece la pasul următor spre finalizare comenzii.
Figura 3.2.8 Pagina coș comandă
După plasarea comenzii, clientul primește un mesaj de confirmare, precum în figura următoare:
Figura 3.2.9 Mesaj confirmare comandă
Clientul mai are posibilitatea de a vizualiza istoricul comenzilor plasate, după cum se poate observa în figura de mai jos:
Figura 3.2.10 Pagina istoric comenzi plasate
Doresc să menționez și faptul că orice client care utilizează aplicația are posibilitatea de a trimite email-uri către adresa de gmail a restaurantului. Acest email poate fi trimis prin accesarea paginii de contact, completând formularul următor:
Figura 3.2.11 Formular contact
3.3 INTERFAȚA PENTRU OSPĂTAR
Această interfață este aproape identică cu cea pentru client, doar că are câteva pagini în plus pentru zona de administrare pe care o efectuează ospătarul asupra comenzilor plasate pentru clienții din restaurant.
Din acest motiv, în continuare voi prezenta doar paginile suplimentare la care are acces ospătarul, care aparțin zonei de administrare.
În figura 3.3.1 este prezentată pagina dashboard, care reprezintă zona de administrare la care are acces ospătarul.
Figura 3.3.1 Zona de administrare pentru ospătar
Această zonă conține paginile de gestionare a comenzilor plasate de către ospătar, la cererea clienților din restaurant.
Ospătarul are posibilitatea de a vizualiza comenzile deja plasate și de a adăuga o comandă nouă, după cum se poate observa în figurile de mai jos:
Figura 3.3.2 Pagina vizualizare comenzi plasate
Figura 3.3.3 Pagina de plasare comandă
După cum se poate observa în figura 3.3.3, ospătarul are opțiunea de a căuta preparate din meniu în timp real, pentru accesarea mai ușoară și plasarea rapidă a comenzii. Această căutare se realizează direct în baza de date, în timpul tastării.
La nivel funcțional, prima etapă pentru realizarea acestei căutări este realizarea unui request către server de către browser, folosind Ajax, iar etapa următoare este cea în care Laravel caută în baza de date string-ul trimis de pe client și returnează informația găsită.
Figura 3.3.4 Cod pentru client către server
Figura 3.3.5 Cod căutare în baza de date
Ospătarul are acces și la istoricul comenzilor plasate, unde poate vizualiza suma totală a vânzărilor, după cum se observă în figura următoare:
Figura 3.3.6 Pagina pentru vizualizare sumă vânzări
Este de menționat și faptul că un ospătar poate plasa comenzi și în calitate de client al restaurantului, precum a fost prezentat în secțiunea interfeței pentru client.
3.4 INTERFAȚA PENTRU ADMINISTRATOR
Interfața la care are acces administratorul este asemănătoare cu cea pentru ospătar, cu diferența că administratorul are în plus acces la modificarea meniului, adică adăugarea preparatelor noi în meniu sau eliminarea acestora în cazul în care nu mai sunt disponibile, după cum se poate observa în figurile de mai jos:
Figura 3.4.1 Pagină pentru adăugare preparat nou în meniu
Codul utilizat pentru aceast procedeu de adăugare este prezentat în figura de mai jos:
Figura 3.4.2 Codul pentru adăugarea unui nou preparat
De asemenea, administratorul poate crea noi categorii de preparate sau le poate elimina. În cazul în care o categorie este eliminată utilizând codul prezentat în figura 3.4.3, sunt eliminate și preparatele care aparțin acelei categorii.
Figura 3.4.3 Codul pentru eliminarea unei categorii
Tot administratorul se ocupă de crearea conturilor de utilizator, atât pentru clienți cât și pentru ospătari, după cum se poate observa în figura 3.4.3.
Figura 3.4.2 Pagina de editare categorii de preparate
Figura 3.4.3 Pagina de administrare utilizatori
Administratorul are dreptul de acces și comenzile care sunt plasate online, acesta le preia și le comunică ospătarilor pentru a le livrara la domiciliu.
Figura 3.4.4 Vizualizare pagină de comenzi
4. CONCLUZII
Procesul de dezvoltare a unei aplicații software trebuie să conducă la găsirea unei implementări care să ofere soluții adecvate domeniului de utilizare și scopului urmărit de utilizatorii finali. Astfel, în fundamentarea tehnologiilor și arhitecturii pe care le-am implementat, în primul rând am ținut cont de contextul în care urma aplicația să fie folosită și de posibilele scenarii de utilizare.
Am creat acest site web cu scopul de a promovare a unei afaceri și de a-mi îmbunătăți cunoștințele în programare și web design. Interfața principală am încercat să o structurez astfel încât utilizatorului să-i fie ușor să găsească informația de care are nevoie în cel mai scurt timp. În ceea ce privește partea de aplicație și anume pagina de magazin online, aceasta poate fi accesată de orice persoană care dorește să-și comande diverse preparate din meniu, unele având rețetele reinterpretate pentru a da un plus de originalitate, și să experimenteze noi arome.
Această aplicație reprezintă un prim pas pentru dezvoltarea pe viitor a unor funcționalități mai complexe. Prin realizarea acestei aplicații mi-am aprofundat cunoștințele în utilizarea tehnologiilor: HTML, CSS, Bootstrap, Laravel, PHP, MySQL reușind să dobândesc cunoștințe noi în utilizarea de noi biblioteci și limbaje de programare precum și utilizarea unor platforme de dezvoltare JavaScript precum jQuery.
Pe viitor ca și principale dezvoltări mi-am propus să îmbunătățesc sistemul de securitate și să îl fac public astfel încât să poată fi accesată online. De asemenea doresc să creez o bază de date pentru introducerea anumitor evenimente în pagina site-ului, care vor avea loc în restaurant, cum ar fi degustarea de preparate și să adaug opțiune care permite utilizatorului să selecteze limba română sau engleză în care să se afișeze conținutul, să adaug animații cu scopul de a face site-ul mai atractiv și noi opțiuni pentru metoda de plată, cum ar fi plata cu cardul.
BIBLIOGRAFIE
[1] Aplicație web http://www.creeaza.com/referate/informatica/internet/INTERNET-si-arhitectura-de-baz875.php
Consultat la data de 20.05.2020
[2] Baze de date http://www.prouniversitaria.ro/carte/baze-de-date
Consultat la data de 22.05.2020
[3] Baze de Date relaționale. Teorie și Aplicații în Visual FoxPro, Cornelia Gyorodi, R. Gyorodi, G. Pecherle, Editura Mediamira, 2008.
[4] MySQL https://dev.mysql.com/doc/refman/8.0/en/what-is-mysql.html,
Consultat la data de 25.05.2020
[5] XAMPP https://www.ionos.com/digitalguide/server/tools/xampp-tutorial-create-your-own-local-test-server/ Consultat la data de 24.05.2020
[6] Chuck Musciano, Bill Kennedy, HTML and XHTML, the definitive guide, Editura O'Reilly Media, Inc., 2002
[7] Mark Pilgrim, HTML5: Ghidulîncepătorului, Brașov, 2011, p. 10
[8] HTML5 https://www.techradar.com/news/internet/web/html5-what-is-it-1047393
Consultat la data de 01.06.2020
[9] Simon Collison, Beginning CSS Web Development: From Novice to Professional, Editura Apress, 2006
Consultat la data de 01.06.2020
[10] Limbajul JavaScript https://web.ceiti.md/lesson.php?id=16
Consultat la data de 03.06.2020
[11] Pavel Năstase, Foarea Năstase, Internet World Wide Web, JavaScript-HTML-Java, Editura Economică, 1998
[12] Despre PHP http://etutoriale.ro/articles/16/1/Despre-PHP/
Consultat la data de 03.06.2020
[13] Paul Dubois, MYSQL, Editura Teora, 2001
14] Despre jQuery http://www.tutorialspoint.com/jquery/jquery_tutorial.pdf
Consultat la data de 02.06.2020
[15] jQuery https://ro.wikipedia.org/wiki/JQuery
Consultat la data de 02.06.2020
[16] Laravel https://www.larashout.com/what-is-laravel-and-why-you-should-learn-it
Consultat la data de 09.06.2020 și 14.06.2020
ANEXA 1 – STRUCTURA BAZEI DE DATE UTILIZATĂ ÎN APLICAȚIE
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: PROGRAMUL DE STUDIU CALCULATOARE FORMA DE ÎNVĂȚĂMÂNT IF Proiect de diplomă COORDONATOR ȘTIINȚIFIC PROF. DR. ING. GYŐRÖDI CORNELIA AURORA ABSOLVENT… [303773] (ID: 303773)
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.
