Titlul, Numele și prenumele ________________________________ Data ____________ Semnătura ________________ DECLARA ȚIE privind originalitatea con… [627056]
UNIVERSITATEA “ALEXANDRU IOAN CUZA” DIN IA ȘI
FACULTATEA DE INFORMATICĂ
LUCRARE DE LICEN ȚĂ
Take me to dinner
propusă de
Ionuț -Răzvan Oprea
Sesiunea: Iulie, 2018
Coordonator științific
Drd. Colab. Florin Olariu
UNIVERSITATEA “ALEXANDRU IOAN CUZA” DIN IA ȘI
FACULTATEA DE INFORMATICĂ
Take me to dinner
Ionuț -Răzvan Oprea
Sesiunea : Iulie, 2018
Coordonator științific
Drd. Colab. Florin Olariu
Avizat,
Îndrumător Lucrare de Licen ță
Titlul, Numele și prenumele ________________________________
Data ____________ Semnătura ________________
DECLARA ȚIE privind originalitatea con ținutului lucrării de licen ță
Subsemnatul(a) ………………………………………………………………………………………
cu domiciliul în …………………………………………………………………………………………………..
născut(ă) la data de ………………..…., identificat prin CNP ………….……………..…………………,
absolvent(a) al(a) Universită ții „Alexandru Ioan Cuza” din Ia și, Facultatea de ………………… …….
specializarea …………………………………………………………, promo ția …………………………., declar pe
propria răspundere, cunoscând consecin țele falsului în declara ții în sensul art. 326 din Noul
Cod Penal și dispozi țiile Legii Educa ției Na ționale nr. 1/2011 art.143 al. 4 și 5 referi toare la
plagiat, că lucrarea de licen ță cu titlul:
_________________________________________________________________________________________________________
___________________________________________________________________________________________________ ______
________________________________elaborată sub îndrumarea dl. / d -na
________________________________________________________, pe care urmează să o sus țin în fa ța comisiei
este originală, îmi apar ține și îmi asum con ținutul său în întregime.
De asemenea, declar că sunt de acord ca lucrarea mea de licen ță să fie verificată prin
orice modalitate legală pentru confirmarea originalită ții, consim țind inclusiv la introducerea
conținutului său într -o bază de date în acest scop.
Am luat la cuno ștință des pre faptul că este interzisă comercializarea de lucrări
științifice în vederea facilitării fa lsificării de către cumpărător a calită ții de autor al unei
lucrări de licen ță, de diploma sau de diserta ție și în acest sens, declar pe proprie răspundere
că lucrarea de fa ță nu a fost copiată ci reprezintă rodul cercetării pe care am întreprins -o.
Dată azi, ………………………… Semnătură student …………………………
DECLARA ȚIE DE CONSIM ȚĂMÂNT
Prin prezenta declar că sunt de acord ca Lucrarea de licen ță cu titlul „ Take me to
dinner ”, codul sursă al programelor și celelalte con ținuturi (grafice, multimedia, date de test
etc.) care înso țesc această lucrare să fie utilizate în cadrul Facultă ții de Informatică.
De asemenea, sunt de acord ca Facultatea de Informatică de la Universitatea
„Alexandru Ioan Cuza” din Ia și, să utilizeze, modifice, reproducă și să distribuie în scopuri
necomerciale programele -calculator, format executabil și sursă, realizate de mine în cadrul
prezentei lucrări de licen ță.
Iași, data
Absolvent: [anonimizat]
__________________________________
(semnătura în original)
Cuprins
Introducere ………………………….. ………………………….. ………………………….. ………………………….. ……. 7
Motivație ………………………….. ………………………….. ………………………….. ………………………….. ………. 8
Context ………………………….. ………………………….. ………………………….. ………………………….. ………… 8
Contribuții ………………………….. ………………………….. ………………………….. ………………………….. …… 11
1. Tehnologii folosite ………………………….. ………………………….. ………………………….. …………….. 12
2. Dezvoltarea aplicației ………………………….. ………………………….. ………………………….. ………… 13
2.1 Structura aplicației ………………………….. ………………………….. ………………………….. ………. 13
2.1.1 Introducere ………………………….. ………………………….. ………………………….. ……………….. 13
2.1.2 Code -behind model ………………………….. ………………………….. ………………………….. …… 13
2.1.3 Master page ………………………….. ………………………….. ………………………….. ……………… 14
2.1.4 Structura directoarelor ………………………….. ………………………….. ………………………….. .. 16
2.2 Serviciul de e -mail ………………………….. ………………………….. ………………………….. …………… 17
2.3 Securitatea ………………………….. ………………………….. ………………………….. ……………………… 18
2.4 Structura bazei de date ………………………….. ………………………….. ………………………….. ……… 20
3. Descrierea aplicației ………………………….. ………………………….. ………………………….. ………….. 22
3.1 Introducere ………………………….. ………………………….. ………………………….. …………………. 22
3.2 Acțiuni posibile ………………………….. ………………………….. ………………………….. …………… 22
3.3 Manual de utilizare ………………………….. ………………………….. ………………………….. ……… 23
3.3.1 Login ………………………….. ………………………….. ………………………….. …………………… 23
3.3.2 Register ………………………….. ………………………….. ………………………….. ……………….. 24
3.3.3 Forgot P assword ………………………….. ………………………….. ………………………….. …… 25
3.3.4 Change Password ………………………….. ………………………….. ………………………….. ……… 25
3.3.5 My Profile ………………………….. ………………………….. ………………………….. ……………. 26
3.3.6 Home ………………………….. ………………………….. ………………………….. ……………………… 27
3.3.6 Show Places ………………………….. ………………………….. ………………………….. …………. 27
3.3.7 Show Details ………………………….. ………………………….. ………………………….. ………… 28
4. Direcții de dezvoltare ………………………….. ………………………….. ………………………….. …………. 29
5. Concluzii ………………………….. ………………………….. ………………………….. ………………………….. 30
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. …. 31
Anexe ………………………….. ………………………….. ………………………….. ………………………….. …………. 32
Anexa 1 ………………………….. ………………………….. ………………………….. ………………………….. …… 32
Introducere
Orice ființă umană are nevoie de apă și de mâncare, ele fiind principalele nevoi fiziologice,
fără de care nu am putea trăi. Acest lucru face ca piața restaurantelor să fie una permanentă și în
continuă creștere , după cum se poate observa în Fig. 1 de mai jos , iar aplicațiile web și mobile din
acest domeniu să prindă din ce în ce mai bine la public , având din ce în ce mai mare căutare.
Fig. 1 – Vânzările din industria restaurantelor (în miliarde de dolari)
În zilele noastre, din ce în ce mai multe persoane aleg să mănânce la restaurant , mai ales în
rândul generațiilor tinere. Principalele motive invocate pentru care oamenii aleg să mănânce în oraș
sunt lipsa timpului, faptul că nu sunt nevoiți să mai gătească și de asemenea pot interacționa social
mult mai ușor. Astfel, începe să se formeze un trend în rândul populației tinere de a mânca în oraș
și de asemenea se pune din ce în ce mai mult accent pe mâncarea sănătoasă și tradițională.
„Take me to dinner ” este o aplicație web c are oferă utilizatoril or posibilitatea de a alege
restaurantul ideal pentru a mânca în oraș, pe baza criteriilor alese de aceștia cu scopul de a avea o
experiență cât mai pl ăcută. De asemenea, utilizatorii vor putea vizualiza și adăuga recenzii și, mai
mult decât atât, vor pute a adăuga localuri, pentru a ajuta la dezvoltarea aplicației. Aplicația va fi
concepută în așa fel încât orice categorie de oameni va fi capabilă să o utilizeze, fără nicio
dificultate. Este destinată în principal utilizatorilor ce se află într -un oraș nou sau pe care nu îl
cunosc atât de bine, cât și celor care sunt indeciși sau vor să experimenteze.
Aplicația este disponibilă atât pe dispozitivele mobile, cât și pe tablete, laptopuri sau
desktop -uri.
Motivație
Am ales această temă, deoarece consider că o aplicație web de acest tip este una de
actualitate și are utilitate în practică, atât pentru utilizatorii care doresc să găsească un restaurant
potrivit pentru ei, cât și pentru cei care doresc să promoveze un anumit local. Astfel, sunt beneficii
pentru toate părțile implicate.
Din experiență proprie , pot spune că este foarte anevoioasă și extrem de costisitoare ca timp
căutarea și compararea mai multor localuri pentru a găsi ceva pe gustul meu, iar uneori chiar
dezamăgitoare, când informațiile prezentat e nu corespundeau cu realitatea. Din acest motiv,
aplicația „Take me to dinner” va prezenta informații reale, de actualitate, permițând filtrarea cât
mai rapidă și ușoară a datelor.
Ca motivație tehnică, am ales să dezvolt o aplicație web folosind ASP.NET , deoarece mi –
am dorit să învăț această tehnologie și am avut ghinionul să nu fiu repartizat la opționalele din anul
III, semestrul I „Introducere în .Net”, respectiv „Topici speciale de programare .Net” din semestrul
al II-lea. A m luat-o ca pe o provocare personală, demonstrându -mi că pot fi și autodidact.
Context
Ca orice altă industrie din lume, sectorul restaurantelor a fost afectat puternic de viteza
uluitoare a dezvoltării tehnologiei. Astfel, un prim avantaj al aplicațiilor web și mobile de
recomand are și promovare a restaurantelor este cererea extrem de mare pentru acestea, ele fiind
folosite constant (lunar, săptămânal sau chiar zilnic), spre deosebire de aplicațiile hoteliere, de
închirieri de mașini etc.
Tot mai mulți utilizatori folosesc diferi te site-uri web pentru a alege un local potrivit pentru
aceștia. Un studiu făcut de Statista1 arată că 84% dintre utilizatori aleg să se uite la mai multe
restaurante pentru a alege unde să mănânce, iar 60% dintre aceștia au citit măcar o recenzie a
restau rantului respectiv , iar majoritatea lor ajung să și mănânce la restaurantul pe care l -au ales. Cu
toate acestea, un procent îngrijorător de mare din restaurante nu au un site web, fiind extrem de
1 https://www.statista.com/
dificilă sau chiar imposibilă aflarea unor informații despre acesta, moment în care tipul de aplicație
web pe care doresc să îl dezvolt vine la îndemână.
Ideea există deja pe piață, unele sunt aplicații web, altele aplicații mobile pentru iOS și
Android, fiecare cu avantajele și dezavantajele sale. Printre aplicaț iile similare se număra:
1. Foursquare
Fig. 2 – Foursquare
Foursquare ( www.foursquare.com ) este un site web lansat pe 11 martie 2009 și oferă
recomandări utilizatorilor ei, bazate pe locația curentă a acestora și pe istoricul căutărilor sau a
check -in-urilor2.
2. HipMenu
Fig. 3 – HipMenu
2 Publicarea unei postări pe o rețea de socializare cu locația curentă și eventual cu persoanele care te însoțesc
HipMenu (www.hipmenu.ro ) este o aplicație web dezvoltată de către o echipă de tineri din
Cluj, dar colaborează doar cu o serie de restaurante din Cluj Napoca, Timișoara și Oradea.
Utilizatorii aplicației pot rezerva un loc la restaurant, pot ridica personal mâncarea sau pot comanda
acasă.
3. OpenTabl e
Fig. 4 – OpenTable
OpenTable (www.opentable.com ) este o aplicație web de rezervare online a unui restaurant ,
creat pe 2 iulie 1998 în San Francisco, California și oferă utilizatorilor ei posibilitatea de a alege
dintr -o listă limitată de restaurante, majoritatea din Statele Unite ale Americii. De asemenea oferă
și posibilitatea de rezerva o masă la restaurantul respectiv.
De asemenea, mai sunt și alte aplicații mai puțin cunoscute, unele dintre ele fiind contra
cost, de exemplu , Wher e Chefs Eat .
Aplicația „Take me to dinner ” le va oferi antreprenorilor șansa să își promoveze
restaurantul și de asemenea să actualizeze constant informațiile despre acesta : prețul mediu al unui
meniu, ora deschiderii și a închiderii (care pot fi afectat e de sărbători sau diferite evenimente și pe
majoritatea site -urilor nu sunt actualizate) etc. Aplicația va permite și selecția restaurantelor pe
baza prețului, care, deși nu multă lume recunoaște, este unul din cei mai importanți factori în
selecția unui restaurant. De asemenea, am ales să fie aplicație web responsive3, în loc de aplicație
mobilă pentru iOS sau Android, deoarece în acest mod un utilizator poate căuta și de pe laptop /
desktop și de asemenea unii utilizatori sunt mai reticenți în ceea ce pr ivește instalarea unei aplicații
noi, dacă aceasta nu le -a fost recomandată de cineva.
În țara noastră nu sunt atât de cunoscute aplicațiile web sau mobile de acest gen, șansele de
reușită a unei aplicații noi fiind mult mai mari , în lipsa concurenței .
Contribuții
Tema lucrării a fost propusă de mine, ideea a fost transmisă profesorului coordonator, care
a venit cu numeroase sugestii de îmbunătățiri , atât inițial, cât și pe tot parcursul creării aplicației ,
ajungând la această variantă finală.
Alegerea d omnului profesor Florin Olariu ca îndrumător pentru licență a fost datorită
experienței dumnealui în .Net, dar și a modului de predare și interacționare cu studenții.
Comunicarea între mine și domnul profesor s -a realizat atât față în față (prin întâlniri periodice),
prin e -mail (trimițând actualizări periodice ale aplicației), prin intermediul rețelei de socializare
Facebook (a fost creat un grup privat destinat discuțiilor dintre domnul profesor și stude nți) și de
asemenea a avut acces la repository -ul4 proiectului de pe Github.
Toate tehnologiile și librăriile folosite în acest proiect sunt open source5, nu a fost încălcat
niciun drept de autor , iar arhitectura generală a aplicației este concepută în totalitate de mine, doar
având ca repere unele idei din aplicații similare deja existente.
3 Conținutul paginii se adaptează în funcție de rezoluția ecranului
4 Folder ce conține fișierele sursă ale aplicației
5 Cu sursă liberă – i se permite utilizatorului să acționeze liber asupra procesului de producție sau dezvoltare
1. Tehnologii folosite
Aplicația „Take me to dinner” a fost dezvoltată în Visual Studio 2017 Community Edition, iar
printre principalele tehnologii utilizate se numără (urmând să se vorbească detaliat despre fiecare
în parte în Anexa 1) :
• ASP.NET : folosind Entity Framework Database First (data layer) și Asp.Net
Standard Webforms (server layer)
• SSMS6: utilizat pentru gestiunea bazei de date
• HTML7: limbaj de marcare standard, utilizat la crearea paginilor web
• CSS8: utilizat pentru formatarea elementelor dintr -un document HTML
• Java Script : utilizat pe partea de client
• Bootstrap: utilizat pentru realizarea paginilor web în modul responsive
Pe tot parcu rsul dezvoltării aplicației a fost folosit GitHub, ca sistem de control al versiunilor.
Astfel am avut mereu control asupra versiunilor codului scris, revenind de multe ori la versiuni
anterioare ale acestuia, din cauza unor erori ce nu puteau fi rezolvate . De asemenea, a fost mult
mai ușor pentru profesorul coordonator să urmărească evoluția proiectului .
6 SQL Server Management Studio
7 HyperText Markup Language
8 Cascading Style Sheets
2. Dezvoltarea aplicației
2.1 Structura aplicației
2.1.1 Introducere
Aplicația a fost dezvoltată folosind Asp.Net 4.6.1 Standard Web Forms9 Code -behind
Model , iar ca limbaj de programare a fost folosit Microsoft Visual C#. ASP.NET Web Forms
permite construirea de site -uri web dinamice, folosind un model bazat pe evenimente cu drag -and-
drop. O suprafață de design și sute de elemente de control și de componente facilitează construirea
rapidă de site -uri cu un UI10 sofisticat cu acces la date.
ASP.NET Web Forms oferă:
• Separarea codului HTML și a codului UI de logica aplicației și de asemenea a clientului de
server
• O suită bogată de controale de server pentru tot felul de acțiuni, inclusiv acces la baza de
date
• Suport pentru scripting pe partea de client, pentru o serie de funcționalități precum:
securitate, rutare, performanță, internaționalizare, testare, depanare și gestionare a erorilor
• Acces rapid și ușor la baza de date
2.1.2 Code -behind model
Microsoft recomandă ca abordarea codului dinamic al paginii să se facă folosindu -se
modelul Code -behind, care plasează codul respectiv într -un fișier separat. Acest fișier va avea
numele paginii, urma t de extensia .cs. De exemplu, pentru pagina „Default.aspx” ( .aspx este
extensia paginii web) fișierul ce conține codul dinamic va avea denumirea „Default.aspx.cs” , după
cum se poate observa și în Fig. 5 de mai jos . De asemenea, o pagină web conține și un fișier
designer (având extensia .designer ), fișier generat automat de pe pagina aspx și îi permite
programatorului să facă referire la co mponentele fișierului cs în pagina aspx fără să le declare
manual. În acest fel se poate avea în vedere la nivel teoretic o separare a prezentării și a
9 Pagini Web (în ASP.NET poartă numele de Web Forms)
10 User Interface
conținutului. În linii mari, este similară cu separarea controlerului de view în framework -ul Model –
View -Controller.
Fig. 5 – Componentele unei pagini Aspx
2.1.3 Master page
O pagină principala ( master page) permit e crearea unui aspect unitar pentru paginile întregii
aplicații. Această pagină (având extensia .master ) definește as pectul și comportamentul dorit
pentru toate paginile (sau un grup de pagini) din aplicație. Apoi, se pot crea pagini de conținut
individuale, care vor respecta întocmai structura dată de pagina master , iar în momentul în care un
utilizator accesează o pagină de conținut, rezultatul va fi o pagină ce îmbină conținutul paginii
respective cu aspectul paginii master. Vizual, se poate înțelege mai bine acest proces, analizând
Fig. 6 de mai jos.
În acest mod, toate paginile vor utiliza aceleași elemente, precum: antet, bară de navigare,
stiluri, fundal, subsol etc. În acest mod se scrie și mai puțin cod, el fiind scris o singură dată, în
pagina master , iar dacă pagina master se va modifica, schimbarea se va produce în toate paginile.
În fiecare pagină de conținut se declară pagina master, prin intermediul directive i11
<%@Page %> în antetul paginii . În exemplul de cod următor se va specifica pagina master
„Site.Master” a paginii „Default.aspx” :
<%@ Page Title="Default Page" Language ="C#" MasterPageFile ="~/Site.Master" AutoEventWireup ="true"
CodeBehind ="Default.aspx.cs" Inherits ="WebApp._Default" %>
Prin intermediul unui PlaceHolder se indică zona exactă în pagina master dedicată
reutilizării, fiind folosită , după necesitate, de fiecare pagină de conținut. Un PlaceHolder este un
control pe server, invizibil utilizatorului, ce stochează conținutul dinamic al unei pagini. Acest
lucru s e realizează prin declararea lui în pagina master , după cum urmează :
<asp:ContentPlaceHolder ID="MainContent" runat ="server"></ asp:ContentPlaceHolder >
11 Instrucțiune specială despre cum ASP.NET ar trebui să proceseze pagina
În pagina de conținut, se plasează informațiile dorite în interiorul tag -ului <asp:Content> ,
după cum urmează (cu specificația ca ID -ul controlului ContentPlaceHolder, din pagina master,
trebuie să fie același cu ContentPlaceHolderI D din pagina de conținut ) :
<asp:Content ID="BodyContent" ContentPlaceHolderID ="MainContent" runat ="server" ></asp:Content >
Tag-ul runat=”server” indică faptul că respectivul control este pe partea de server, iar la
majoritatea controalelor este obligatoriu , altfel compilator va omite secțiunea respectivă de cod.
Fig. 6 – Structura unei pagini Aspx
Aplicația „Take me to dinner” este construită exact pe același principiu , toate paginile
având o singura pagina master , cu singura diferență că a fost eliminată zona de subsol.
2.1.4 Structura directoar elor
Avantajul ASP.NET Web Forms este acela că aplica ția poate fi structurată după preferință,
nu mai este necesară respectarea unor reguli prestabilite cu privire la structura directoarelor și
fișierelor , respectiv denumirea acestora.
Astfel, am decis să structurez cât mai clar aplicația, în două parți (Fig. 7 și Fig. 8):
• Partea de Business : conține toate entitățile( obiectele ) și relațiile dintre acestea
• Aplicația Web : conține toate paginile web, script -urile, fișierele CSS, configurările
aplicației, etc.
Fig. 7 – Structura aplicației (1)
Fig. 8 – Structura aplicației (2)
2.2 Serviciul de e -mail
Pentru unele operațiuni precum activarea contului, resetarea parolei etc. este necesară
trimiterea unui e -mail de confirmare utilizatorului . Pentru realizarea acestui lucru a fost folosit ă
librăria SendGrid , ce permite trimiterea de e-mail-uri cu conținut atât text, cât și HTML .
Pentru a trimite e -mail cu ajutorul SendGrid este necesară crearea unui cont pe platforma
www.sendgrid.com pentru crearea unei chei unice, folosită în API -ul lor. Din motive de securitate,
această cheie este preferabil să fie stocată în variabilele de sistem sau să fie salvat ă în fișierul de
configurare al aplicației ( web.confing). Nu este necesară o adresă de e -mail validă pentru trimiterea
mesajelor.
În exemplul de mai jos este prezentat codul serviciului de e-mail:
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
return configSendGridasync(message);
}
private async Task configSendGridasync( IdentityMessage message)
{
var apiKey = Environment.GetEnvironmentVariable( "SENDGRID_APIKEY" ,
EnvironmentVariableTarget.User);
var client = new SendGridClient(apiKey);
var msg = new SendGridMessage()
{
From = new EmailAddress( "info@takemetodinner.com" , "TakeMeToDinner" ),
Subject = message.Subject,
PlainTextContent = message.Body,
HtmlContent = message.Body
};
msg. AddTo( new EmailAddress(message.Destination));
var response = await client.SendEmailAsync(msg);
}
}
În cazul înregistrării, odată cu accesarea link -ului de confirmare primit pe e -mail (Fig. 9),
în tabela AspNetUsers câmpul „EmailConfirmed” va fi actualizat pe „true” , utilizatorul putând să
se autentifice cu datele sale. În caz contrar, contul rămâne neactivat și autentificarea va fi
imposibilă.
Fig. 9 – Mesaj confirmare cont
2.3 Securitatea
Pentru a avea o aplicație securizată, în ASP.NET există mai multe moduri prin care se poate
realiza autentificarea, cele mai des folosi te fiind cele menționate în tabelul de mai jo s.
„Autentificarea este procesul de obținere a acreditărilor de identificare, cum ar fi numele
și parola, de la un utilizator și validarea acestor acreditări împotriva unei autorități. Dacă
acreditările sunt valide, entitate a care a prezentat acreditările este considerată o identitate
autentificată. Odată ce o identitate a fost autentificată, procesul de autorizare determină dacă acea
identitate are acces la o anumită resursă. ”[1]
„Autorizarea este procesul prin care un uti lizator autentificat primește acces pe resursele
pe care are dreptul să le acceseze."[2]
Fig. 10 – Tipuri de autentificare
În această aplicație a fost folosită ASP.NET Forms Authentication & Authorization . După
verificarea informațiilor de login, este creat un token de autentificare într -un cookie sau în adresa
URL a paginii. Astfel, vizitele ulterioare pe site includ token -ul de autentificare, permițând
aplicației web să identifice utilizatorul, odată ce este logat . În mod evident, dacă un utilizator
încercă să acceseze o resursă la care nu are acces, acesta este redirecționat către pagina de Login.
În ASP.NET managementul utilizatorilor se poate realiza foarte ușor cu ajutorul
funcționalității Membership, ce este inclusă î n ASP.NET Authentication. Principalele clase
Membership sunt:
Clasa Membership :
• Creează un nou utilizator
• Șterge un utilizator
• Actualizează informațiile unui utilizator
• Returnează o listă cu toți utilizatorii
• Caută un utilizator după nume sau e -mail
• Valid ează un utilizator
• Returnează numărul de utilizatori online
Clasa MembershipUser :
• Returnează parola
• Schimbă parola
• Determină dacă utilizatorul este online
• Determină dacă utilizatorul este validat
• Returnează data ultimei activități (login / schimbare parolă)[3]
2.4 Structura bazei de date
Baza de date este alcătuită din 10 tabele, având în prim -plan tabelele AspNetUsers și Places.
În Fig. 11 de mai jos sunt prezentate tabelele și relațiile între ele.
Fig. 11 – Structura bazei de date
Legătura dintre baza de date și aplicație se face folosind un Entity Data Model (EDM), cu
abordarea „Database First”. În acest fel se creează un Entity Model (clase le, proprietățile dintre
acestea, DbContext etc. ), iar acele clase devenind legătura dintre baza de date și aplicație.
Se pot construi și executa interogări ut ilizând Entity Framework pentru a prelua informațiile
din baza de date. Entity Framework acceptă diferite tipuri de interogări, care, la rândul lor se
convertesc în interogări SQL pentru baza de date.
Cele 3 tipuri de interogări acceptate de Entity Frame work sunt:
• LINQ -to-Entities
• Entity SQL
• Native SQL
În aplicația „Take me to dinner” a fost folosit primul tip de interogare pentru a accesa datele.
„LINQ12 este un limbaj puternic de interogare, introdus în Visual Studio din anul 2008. El
oferă un model mai simplu și mai consistent pentru a lucra cu date din diferite tipuri de surse date
și diferite formate. Într -o interogare LINQ se lucrează întotdeauna cu obiecte. ” [4]
O op erație de interogare LINQ constă în trei acțiuni: obținerea sursei de date (sau a
surselor), crearea interogării și executarea acesteia.
În interogare, se specifică exact informațiile pe care dorim să le preluam din sursa de date.
O interogare poate de asemenea să precizeze modul în care informațiile trebuie sortate, grupate și
modelate în ainte de a fi returnate. O interogare este stocată într -o variabilă, astfel încât dacă
interogarea returnează o secvență de valori, acea variabilă trebuie să fie de tipul secvenței de valori
(sau poate fi declarată var și compilatorul face automat conversia). De asemenea, fără executarea
interogării, nu se pot prelua datele.
Un exemplu de metodă în care se folosește LINQ pentru a returna o listă cu toate localurile
(ordonate după nume ) se poate observa mai jos:
public static List<Place> GetAllPlaces()
{
using (var db = new EntitiesContext())
{
return db.Places.OrderBy(x => x.Name).ToList();
}
}
Este recomandat să creăm o instanță a contextului folosind using , deoarece odată ce s-a ieșit
din blocul de acolade, instanța respectivă este eliminată automat. Dacă nu am fi scris și ToList() ,
interogarea nu s -ar fi executat și nu s -ar fi returnat nimic.
12 Language -Integrated Query
3. Descrierea aplicației
3.1 Introducere
În acest capitol al aplicației v a fi prezentat accesul la funcționalitățile aplicației , pentru
fiecare tip de utilizator în parte și manualul de utilizare pentru toate paginile aplicației. În Anexa 2
sunt disponibile screenshot -uri ale aplicației, în varianta pentru telefoanele mobile.
3.2 Acțiuni posibile
Aplicația are 4 tipuri de utilizatori: Utilizator anonim, Utilizator autentificat, Partener și
Administrator. Fiecare rolurile menționate mai sus are acces la diferite funcționalități ale aplicației:
Utilizatorul Anonim:
• Înregistrare
• Logare
• Vizualizare listă restaurante
• Vizualizare detalii restaurant
• Vizualizare recenzii
Utilizator autentificat:
• Toate funcționalitățile de mai sus
• Editare profil
• Schimbare parolă
• Vizualizare listă restaurante pe baza profilului
• Adăugare/Ștergere/Editare recenzie personală
Partener:
• Toate funcționalitățile de mai sus
• Adăugare/Editare/Ștergere restaurant
• Vizualizare listă restaurante proprii
Administrator:
• Toate funcționalitățile de mai sus
• Vizualizare listă utilizatori
• Modificarea rolului unui utilizator
• Ștergere / Blocare cont utilizator
• Ștergerea oricărei recenzii (nu neapărat personală)
3.3 Manual de utilizare
3.3.1 Login
Fig. 12 – Pagina de login
Pagina de login este pagina în care utilizatorul își introduce datele contului pentru a putea
beneficia de toate funcționalitățile aplicației. Autentificarea se face pe baza unei adrese de e -mail
validă și a unei parole. De asemenea, contul trebuie să fie validat prin accesar ea unui link primit
pe adresa de e -mail utilizată la înregistrare , în caz contrar nefiind posibilă autentificarea.
Pagina de login este pagina către care este redirecționat utilizatorul, ori de câte ori dorește
să acceseze o resursă la care nu are acces. Odată apăsat butonul Login , în cazul în care datele
contului sunt valide, utilizatorul este redirecționat spre pagina Home , iar în caz contrar este afișat
un mesaj de eroare specific.
3.3.2 Register
Fig. 13 – Pagina de register
În aceas tă pagină i se permite utilizatorului să își creeze un cont, pentru a beneficia de toate
funcționalitățile oferite de aplicație unui utilizator autentificat. Informațiile cerute pentru
înregistrare sunt minimale, pentru a încuraja cât mai mulți utilizatori să își facă cont pe aplicație ,
având ulterior șansa de a își personaliza profilul.
Câmpurile cerute pentru înregistrare sunt: Email, Parolă și Confirmare parolă . Toate cele
3 câmpuri sunt obligatorii și conțin validări, afișându -se un mesaj de eroare în dreptul câmpului,
daca informația introdusă nu respectă regulile impuse. De exemplu, parola trebuie să conțină minim
o majusculă, o cifră și un caracter special, iar lungimea ei să fie de minim 6 caractere.
Adresa de e -mail trebuie să fie una validă, deoa rece va fi trimis un link de confirmare pe
respectiva adresă. Doar în momentul în care s -a accesat acel link, utilizatorul se va putea autentifica
cu noul cont creat. În caz contrar, contul respectiv rămâne inactiv.
3.3.3 Forgot Password
Fig. 14 – Pagina de recuperare a parolei
În această pagină li se oferă șansa utilizatorilor de a -și reseta parola, în cazul în care aceasta
a fost uitată. Dacă adresa introdusă este una validă (adică există în baza de date), un e -mail cu link-
ul (având atașat și un cod unic) către pagina de resetare a parolei va fi trimisă pe adresa respectivă.
3.3.4 Change Password
Fig. 15 – Pagina de schimbare a parolei
Pentru utilizatorii autentificați există opțiunea de schimbare a parolei. Acest lucru se
realizează introducând parola actuală (din motive de securitate), parola nouă și confirmarea
acesteia.
Câmpurile prezintă aceleași validări pentru parolă ca la pagina de înregistrare.
3.3.5 My Profile
Fig. 16 – Pagina cu informațiile de profil
În această pagină, utilizatorul poate modifica informațiile după care se va face căutarea
restaurantelor, nemaifiind nevoit să modifice criteriile de căutare d e fiecare dată. Utilizatorul nu
este nevoit să modi fice toate câmpurile, doar cele de interes, celelalte fiind implicite în momentul
căutării.
Câmpul City conține toate orașele din baza de date , altele nefiind accesibile pentru
selectare. Câmpul Minimum rating reprezintă numărul minim de stele pe care restaurantul să le
aibă, fiind afișate și cele cu rating mai mare decât cel ales de noi. Câmpurile Min/Max Price sunt
de tip numeric și pot avea valori între 0 și prețul maxim al restaurantelor.
Câmpurile Email și Role sunt needitabile, fiind doar cu scop informativ.
3.3.6 Home
Fig. 17 Pagina acas ă
Pagina acasă este pagina pe care este redirec ționat un utilizator atunci când intră prima dată
în aplicație , când dă click pe logo -ul aplicației și de asemenea după ce acesta se autentifică.
În această pagină se selectează orașul, utilizatorul urmând să fie redirecționat pe pagina
ShowPlaces , unde va putea viziona o listă de restaurante din orașul respectiv.
3.3.6 Show Places
Fig. 18 – Pagina cu lista restaurantelor
În această pagină utilizatorul va vedea lista cu toate restaurantele din orașul ales de acesta.
De asemenea are posibilitatea de a filtra datele prin alegerea altui oraș, modificarea prețului mediu
și a ra ting-ului.
De asemenea, pe lângă vizualizarea informațiilor, utilizatorul poate da click pe butoanele
Details , care îl va redirecționa pe pagina ShowDetails (unde i se vor afișa informații suplimentare
despre restaurant) și pe butonul Directions , care va face deschide Google Maps cu locația
restaurantului respectiv ca destinație și bazându -se pe locația noastră, va calcula traseul până la
acesta.
3.3.7 Show Details
Fig. 19 – Pagina cu detaliile unui restaurant
În această pagina un util izator poate vedea informațiile adiționale ale restaurantului și poate
citi recenziile adăugate de alți utilizatori. De asemenea, la rândul său poate adăuga/edita/șterge o
recenzie, dacă este autentificat. Un utilizator poate adăuga maxim o recenzie la fie care restaurant.
Direcții de dezvoltare
Pe viitor consider că următoarele funcționalități ar fi folositoare și ar aduce un plus de valoare
aplicației:
1. Posibilitatea de a rezerva o masă la restaurantul respectiv
Acest lucru este posibil, dar implică ori des tul de mult echipament hardware, ori ar fi
necesară o colaborare strânsă cu reprezentații restaurantului respectiv, mai exact să existe un
responsabil care să actualizeze în timp real câte mese libere, respectiv locuri sunt.
Desigur, ar trebui găsită și o metodă prin care putem împiedica utilizatorii să rezerve locuri
aiurea, fără a avea intenția să meargă la restaurantul respectiv. De exemplu, rezervarea ar putea
avea un cost modic, pentru a preveni rezervările false.
2. Comisi on lunar celor care își promovează localurile
Odată ce aplicația a ajuns cunoscută, cei care vor să își promoveze restaurantul să fie nevoiți
să plătească o taxă lunară și/sau taxă pe fiecare rezervare ce s -a realizat cu ajutorul aplicației (în
cazul în ca re a fost implementată prima funcționalitate) . Posibil chiar și costuri suplimentare pentru
utilizatorii ce vor ca restaurantul lor să fie printre primele rezultate apărute la o căutare.
3. Check -in
Să se implementeze funcționalitatea de check -in, iar toți prietenii pe o rază de 1km (de
exemplu) să fie notificați prin e -mail/alertă etc.
4. Chat
Implementarea unui chat, pentru a putea adresa mai multe întrebări unui utilizator care a
dat o recenzie negativă unui loc pe care doreai să îl vizitezi, de exemp lu.
Concluzii
Aplicația „ Take me to dinner ”, descrisă în această lucrare, este o aplicație web care oferă
utilizatorilor posibilitatea de a alege restaurantul ideal pentru a mânca în oraș, pe baza criteriilor
alese de aceștia cu scopul de a avea o experi ență cât mai plăcută.
Avantajele acestei aplicații sunt:
• Vine în ajutorul oamenilor într -o problemă reală
• Este ușor de înțeles și de folosit (intuitiv, fără alte explicații)
• Prezintă un design sugestiv și atractiv
Pe tot parcursul dezvoltării aplicației am avut următoarele realizări personale :
• Am reușit să finalizez , în mare parte singur, o aplicați e web responsive de la zero
• Am învățat diverse tehnologii, atât la nivel teoretic, cât și în practică
• Am învățat să îmi organizez timpul, astfel încât să resp ect un termen limită
• Am învățat să redactez o lucrare de documentație la un nivel academic
În concluzie, o aplicație de aceste tip este necesară, având utilitate în practică și cred că va
prinde bine în țara noastră, unde alte aplicații similare nu sunt atât de cunoscute .
Bibliografie
[1] ***, ASP.NET Authentication, https://msdn.microsoft.com/en -us/library/eeyk640h.aspx
[2] Adrian Niță, Maria Niță, Nicolae Olăroiu, Introducere în .Net Framework , 2008, Editura Agora
[3] ***, ASP.NET Membership, https://msdn.microsoft.com/en -us/library/2d449f1x.aspx
[4]Maira Wenzel, Matt Hoffman, Mike Jones, LINQ , https://docs.microsoft.com/en –
us/dotnet/framework/data/adonet/ef/language -reference/queries -in-linq-to-entities
[5] Adrian Niță, Maria Niță, Nic olae Olăroiu, Introducere în .Net Framework , 2008, Editura Agora
[6] ***, SSMS, https://docs.microsoft.com/en -us/sql/ssms/sql -server -management -studio –
ssms?view=sql -server -2017
[7] ***, HTML , https://ro.wikipedia.org/wiki/HyperText_Markup_Language
[8] ***, CSS , https://ro.wikipedia.org/wiki/Cascading_Style_Sheets
[9] ***, Bootstrap, https://en.wikipedia.org/wiki/Bootstra p_(front -end_framework)
Anexe
Anexa 1: Detalierea tehnologiilor folosite în aplicație
Anexa 2: Screenshot -uri din aplicație pentru varianta mobilă
Anexa 1
„ASP.NET este tehnologia Microsoft care permite dezvoltarea de aplicații web moderne,
utilizând platforma Microsoft .NET cu toate beneficiile sale. Pentru a înțelege procesul de realizare
a unui site web cu ASP.NET este important să cunoaștem modul în care funcțio nează comunicarea
între browser și serverul web. Acest proces este format din următoarele etape principale:
1. Browser -ul Web inițiază o cerere (request) a unei resurse către serverul Web unde
este instalată aplicația dorită.
2. Cererea este trimisă serverului W eb folosind protocolul HTTP13.
3. Serverul Web procesează cererea.
4. Serverul Web trimite un răspuns browser -ului folosind protocolul HTTP.
5. Browser -ul procesează răspunsul în format HTML, afișând pagina web.
6. Utilizatorul poate introduce date (să spunem într -un formular), apasă butonul
Submit și trimite date înapoi către server.
7. Serverul Web procesează datele.
8. Se reia de la pasul 4. ” [5]
SQL Server Management Studio (SSMS) este un mediu integrat pentru gestionarea
oricărei infrastructuri SQL. Utilizând SSMS pute m accesa, configura, administra și dezvolta toate
componentele SQL Server, Azure SQL Database și SQL Data Warehouse[6]. Este un utilitar
complet ce combină un grup larg de instrumente grafice, fiind accesibil pentru programatori de
toate nivelurile. În Fig. 20 de mai jos sunt prezentate o interogare, rezultatele interogării și panoul
Object Explorer din Microsoft SQL Server Management Studio 17.
13 HyperText Transfer Protocol
Fig. 20 – SQL Server Managem ent Studio 17
„HyperText Markup Language (HTML) este un limbaj de marcare (nu de programare)
utilizat pentru crearea paginilor web ce pot fi afișate într -un browser sau altfel spus , codul care stă
la baza paginilor web. Paginile HTML sunt formate din etichete (tag -uri) și au extensia .html sau
.htm.”[7]
Fig. 21 – Structura unui element HTML
În imaginea de mai sus ( Fig. 21) este prezentată structura unui element HTML:
• Eticheta (tag -ul) de deschidere și închidere: Acesta este reprezentat de numele
elementului (în cazul prezentat „p” – ce reprezintă un paragraf), căruia i se adaugă
paranteze unghiulare de deschidere, respectiv închidere. Eticheta de închidere mai
conține și o bară oblică (slash), indicând unde se termină elementul.
• Conținutul: în cazul nostru este text
• Elementul: Este format din tag -ul de deschide re, conținut și tag -ul de închidere .
Elementele pot avea și atribute, de exemplu <p class=”text -danger”> , unde class este
numele atributului, iar text-danger reprezintă valoarea lui.
„Cascading Style Sheets (CSS ) este un standard pentru formatarea element elor unui
document HTML . Stilurile se pot atașa elementelor HTML prin intermediul unor fișiere externe
sau în cadrul documentului, prin elementul <style> și/sau atributul style.”[8]
JavaScript (JS) este un limbaj de programare interpretat14 de nivel înalt , bazat pe conceptul
prototipurilor15. Alături de HTML și CSS, JavaScript este una dintre cele trei tehnologii de bază
ale World Wide Web (WWW). Permite crearea de pagini web interactive și, prin urmare, este o
parte esențială a aplicațiilor web.
Twitter Bootstrap este cel mai cunoscut framework pentru front -end pentru dezvoltarea
de aplicații web responsive și mobile -first. Acesta conține șabloane de design HTML și CSS pentru
tipografii, formulare , butoane, navigație și alte componente de interfață, precum și extensii
JavaScript. Spre deosebire de multe alte framework -uri web, acesta se preocupă numai de
dezvoltarea front -end-ului. Este al doilea proiect cu cele mai multe stele de pe GitHub (având
126.000 de stele).[9]
14 Instrucțiunile se execută direct, fără compilare a codului
15 Este un stil al Programării Orientate Obiect (POO)
Anexa 2
Primele două screenshot -uri sunt pagin a de start, respectiv cea cu lista restaurantelor
(Home, ShowPlaces) , iar următoarele două sunt de pe pagina cu detalii ale unui restaurant
(ShowDetails ). Se poate observa că aplicația este responsive, având un design atractiv atât pe
desktop, cât și pe mobil.
Fig. 22 – Pagina acasă (mobile)
Fig. 23 – Pagina cu lista restaurantelor (mobile)
Fig. 24 Pagina ShowDetails – 1 (mobile)
Fig. 25 – Pagina ShowDetails – 2 (mobile)
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: Titlul, Numele și prenumele ________________________________ Data ____________ Semnătura ________________ DECLARA ȚIE privind originalitatea con… [627056] (ID: 627056)
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.
