Lucrare de diplom ă [604542]

Universitatea „Politehnica” din Timi șoara
Facultatea de Automatic ă și Calculatoare
Departamentul de Automatic ă și
Informatic ă Aplicată

Aplicație pentru realizarea de comenzi online în
cadrul unui restaurant

— Lucrare de diplom ă —

Conducător științific:
Asist.Ing.Raul ROBU Student: [anonimizat] 2012

Universitatea „Politehnica” din Timi șoara
Facultatea de Automatic ă și Calculatoare
Departamentul de Automatic ă și
Informatic ă Aplicată

Aplicație pentru realizarea de comenzi online în
cadrul unui restaurant

— Lucrare de diplom ă —

Conducător științific:
Asist.Ing.Raul ROBU Student: [anonimizat] 2012

CUPRINS FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE
 
2
 Cuprins
CAPITOLUL  1. INTRODUCERE   4 
1.1    Contextul  actual                                                                                                                                   4 
1.2    Obiective                                                                                                                                                            5 
1.3    Tema și structura proiectului                                                                                                                             5 
CAPITOLUL  2. STUDIU BIBLIOGRAFIC   7 
CAPITOLUL  3. FUNDAMENTARE  TEORETIC Ă  11 
3.1   Microsoft   Visual Studio                                                                                                                                       11 
3.2  .Net Framework                                                                                                                                                       14 
3.3   Asp.Net                                                                                                                                                                 19 
3.4   Introducere  în C#                                                                                                                                                   23 
3.5   Internet Information  Services(IIS)                                                                                                                       25 
3.6   MySql                                                                                                                                                                       25 
CAPITOLUL  4. SPECIFICA ȚIILE APLICAȚIEI  32 
4.1 Schema bloc a aplicației  32 
4.2 Funcțiile sistemului   33 
4.3 Stocarea bazei de date  35 
CAPITOLUL  5. IMPLEMENTAREA  APLICAȚIEI  38 
5.1 Arhitectura  sistemului   38 
5.2 Descrierea  modulelor  aplicației  39 
5.3 Descrierea  funcțiilor sistemului   44 
CAPITOLUL  6. UTILIZAREA  APLICAȚIEI  67 
6.1 Interfața cu utilizatorul   67 
6.2 Testarea aplicației  77 
CAPITOLUL  7. CONCLUZII   78 
7.1 Ce s‐a realizat?  78

CAP2.STUDIU BIBLIOGRAFIC FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

3
 7.2 Direcții de dezvoltare   78 
BIBLIOGRAFIE                                   79

4
 Capitolul 1. Introducere
 
1.1 Contextul actual
 
Evoluția tehnologiei a ajuns, în zilele noastre, s ă își pună amprenta aproape în toate
domeniile.Nu mai suntem nevoi ți să ne deplas ăm pentru a ne pl ăti facturile ,s ă plătim sume
foarte mari pe serviciile de telefonie pentru a p ăstra legătura cu rudele sau amicii pleca ți în
străinătate, întrucât prin intermediul internetului lucrurile devin mult mai simple și mai pu țin
costisitoare. Pân ă și cafeaua o putem servii de la automate, toate aceste facilit ății ne ușurează
existența.
Tendința de automatizare o întâlnim zilnic, în toate activit ățile pe care le
desfășurăm.Putem achizi ționa haine de pe internet, putem comanda mâncare la domiciliu,
putem rezerva vacan țe în străinătate, bilete de avion pân ă și alimente.
În cadrul acestei lucr ări de diplom ă am realizat o aplica ție web care este destinat ă
eficientiz ării serviciilor unui restaurant.Aplica ția poate fii utilizat ă atât de osp ătar, bucătar,
administratorul cât și de clien ții restaurantului.
Prin intermediul aplica ției se dore ște plasarea de comenzi online de c ătre client, în
cadrul restaurantului, recep ționarea acestora de c ătre ospătar și bucătar, și generarea de
rapoarte de c ătre administrator.Ideea invant ă constă în posibilitatea de vizualizare a notei de
plata precum și a produselor comandate , de c ătre client, în orice moment al șederii sale în
restaurant .În aceea și ordine de idei și angajații primesc instant comanda efectuat ă de client.
De asemenea aplica ția oferă clientului informa ții despre disponibilitatea produselor din
meniu și a stocului de alimente sau b ăuturi epuizat, pentru buc ătar sau
administrator.Eficientizarea serviciilor const ă în posibilitatea de comandare online a produselor,
de conștientizare, a angaja ților a timpului r ămas pentru onorarea comenzii.
Clientul având acces online la comanda și nota lui de plat ă poate știi care este timpul
de preparare al produselor comandate, cât va trebui s ă mai aștepte pân ă la onorarea

CAP1.INTRODUCER E FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

5
 comenzii.De asemenea angaja ții se vor str ădui să satisfacă cererile clien ților în timp util,ceea ce
duce la o diminuare a timpului epuizat.
Pentru realizarea aplica ției am folosit tehnologia ASP.NET cu limbajul C# din mediul
de dezvoltare Microsoft Visual Studio 2010 , pe platforma .NET Framework 4.0 și baza de date
MySql .Am ales utilizarea bazei de date MySql întrucât este o baz ă de date performant ă și
scalabilă, oferită gratuit.

1.2 Obiective
 
Obiectivele acestei aplica ții sunt:
 plasarea de comenzi online, în cadrul unui restaurant de c ătre clienții din restaurant
 cerea notei de plat ă de către clienți
 recep ționarea comenzilor clien ților, de c ătre ospătar
 recep ționarea notelor de plat ă ale clien ților, de c ătre ospătar
 recep ționarea comenzilor plasate de clien ți de către bucătar,ora la care s-a efectuat,
precum și timpul de preparare,astfel se încearc ă satisfacerea cererilor într-un timp cât mai util
 modificarea re țetelor, de c ătre bucătar
 ob ținerea de rapoarte ale comenzilor, pe zile

1.3 Tema și structura proiectului
 
Tema aleas ă pentru aceast ă lucrare î și propune s ă ofere o solu ție de eficientizare a
modului de onorare a comenzilor într-un restaurant, gestionarea stocului de alimente și băuturi,
dar și controlul total al administratorului asupra tuturor comenzilor.Site-ul este conectat la o baz ă
de date MySql din care sunt înc ărcate informa ții despre produse,comenzi și note de plat ă.
Structura lucr ării de diplom ă este urm ătoarea:

CAP1.INTRODUCER E FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

6
  în capitolul 2, STUDIU BIBLIOGRAFIC vor fii prezentate site-urile de referin ță cu
ajutorul c ărora s-a realizat aplica ția,de unde am preluat numele restaurantului, pozele pentru
galerie, produsele din meniu și datele de contact.Tot în acest capitol am prezentat un exemplu
similar,dar și ideea inovant ă a aplicației realizate în raport aplica ția similar ă.
 în capitolul 3, FUNDAMENTARE TEORETIC Ă sunt prezentate generalit ățile și
noțiunile de baz ă despre tehnologiile utilizate pentru dezvoltarea aplica ției:Microsoft Visual Stu-
dio,ASP.NET,.NET Framework,MySql,Limbajul C#,IIS .
 în capitolul 4,SPECIFICA ȚIILE APLICA ȚIEI sunt prezentate schema bloc a
aplicației,cerințele aplica ției și stocarea bazei de date precum și legăturile dintre tabele.Cerin țele
aplicației sunt prezentate detaliat, nivelurile de acces ale aplica ției și drepturile fiec ărui utilizator
în funcție de tipul s ău.
 în capitolul 5, IMPLEMENTAREA APLICA ȚIEI, sunt prezentate arhitectura
aplicației, în care sunt prezentate toate fi șierele aplic ției.Tot aici sunt prezentate func țiile utilizate
în realizarea programului, cu exemple din cod, chiar și cu imagini din program.Sunt prezentate
atât fișierele . aspx cât și cele . cs.
 în capitolul 6, UTILIZAREA APLICA ȚIEI, sunt prezenta ți pașii de utilizare ai
aplicației,pentru fiecare tip de utilizator.
 în capitolul 7, CONCLUZII, se prezint ă ceea ce s-a realizat, precum și direcțiile de
dezvoltare ale aplica ției.

7
 
Capitolul 2. Studiu bibliografic

Pentru documentarea temei am folosit unele site-uri ce apar țin unor restaurante
cunoscute,atât din Timi șoara cât și din Bucure ști.Numele restaurantului “Casa Bunicii” este al
unui restaurant din Timi șoara, l-am g ăsit foarte rustic și foarte familial.Tot din cadrul acestui site
au fost preluate și datele de contact ale restaurantului.Pe baza adresei, g ăsită în pagina de
contact( Figura 2.1 ), am realizat o hart ă, cu ajutorul google maps, care va ajuta clientul s ă
localizeze localul.

Figura 2.1 Pagina de contact a restaurantului „Casa Bunicii”

CAP2.STUDIU BIBLIOGRAFIC FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

8
 Meniul restaurantului l-am construit pe baza celui din pagina Restaurantului “Perla”
din Bucure ști (Figura 2.2 ).

Figura 2.2 Meniul Restaurantului “ Perla”
Pentru galeria foto am folosit pozele Restaurantului “Piccadilly”, din Bucure ști(Figura
2.3).

Figura 2.3 Galeria foto a Restaurantului ”Piccadilly”

CAP2.STUDIU BIBLIOGRAFIC FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

9
 Pe baza acestor informa ții, culese,dup ă bunul meu plac, am creat restaurantul
prezentat în lucrare .Toate restaurantele prezentate mai sus nu de țin un astfel de sistem
informatic, cu posibilitate de comand ă în cadrul localului.
Un exemplu foarte cunoscut cu posibilitate de comand ă la domiciliu este site-ul
pizzeriei DopoPoco,care pe baza unor informa ții:nume,prenume și număr de telefon ( Figura 2.4 )
oferă clientului posibilitatea de comand ă online la domiciliu.

Figura 2.4 Fereastra de introducere a datelor pentru acces la comand ă

Figura 2.5 Meniul pizzeriei ”DopoPoco” cu posibilitate de comand ă

CAP2.STUDIU BIBLIOGRAFIC FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

10
 După introducerea datelor, utilizatorul va avea drept de comand ă a fiecărui produs din
meniul pizzeriei ( Figura 2.5 ).
Spre deosebire de exemplul prezentat mai sus, în aplica ția prezentat ă în aceast ă
lucrare clientul se va putea conecta doar în local,pe baza unei parole ob ținute de la osp ătar,și va
putea face comenzi doar la fa ța locului.O dat ă ce clientul s-a deconectat el nu va mai avea
acces la cont cu aceea și parolă primită,deoarece atunci când clientul se conecteaz ă se
activeaza un algoritm de generare automat ă a parolei,aceast ă modificare se realizeaz ă și în
baza de date.Noile parole generate pot fii ob ținute numai de la administrator sau
ospătar.Posibilitatea unor eventuale comenzi la domiciliu poate fii privit ă ca o posibil ă directivă
de dezvoltare pe viitor.

11
 Capitolul 3. Fundamentare teoretic ă
 
Pe parcursul acestui capitol vor fi prezentate tehnologiile software folosite pentru
implementarea aplica ției dezvoltate.

3.1 Microsoft Visual Studio

Visual Studio este un mediu integrat de dezvoltare (IDE) de la Microsoft , care este
folosit pentru dezvoltarea aplica țiilor de tip consol ă, aplicații cu interfa ță grafică, aplicații client-
server, pagini web, aplica ții și servicii web.Codul scris al acestor aplica ții este suportat de
următoarele platforme : Microsoft Windows, Windows Mobile, Windows CE, .NET Framework,
Framework, .NET Compact Framework, Microsoft Silverlight și alte platforme produse de
Microsoft . Visual Studio include deasemenea un editor de cod care suport ă IntelliSense și
refactorizarea codului, depanatorul integrat func ționând și ca depanator pentru cod de nivel
înalt, cat și pentru cod ma șină. Visual Studio mai are integrat un designer pentru aplica țiile cu
interfață grafică (GUI) [***10,a].
Visual Studio suportă mai multe tipuri de limbaje de programare, care permite
editorului de text și depanatorului s ă suporte aproape orice limbaj de programare. Limbajele de
programare incluse în Visual Studio sunt: C/C++ (prin Visual C++), VB.NET (prin Visual Basic
.NET), C# (prin Visual C#) și începând cu Visual Studio 2010 , limbajul F#. Visual Studio mai are
suport și pentru alte limbaje, cum ar fi M, Python, Ruby, dar acestea trebuie instalate separat.
Deasemenea mai suport ă XML/XSLT, HTML/XHTML, JavaScript și CSS.Limbajele de
programare specifice platformei Visual Studio există și in variante independente: Microsoft
Visual Basic, Visual J#, Visual C# și Visual C++ [***10,a].
Visual Studio nu accept ă orice limbaj de programare, solu ție sau instrument
intrinsec,în schimb permite conectarea la diferite tipuri de func ționalități. Funcționalitatea
specifică este codat ă ca un VSPackage. Atunci cand este instalat, func ționalitatea este
disponibil ă ca un serviciu. IDE ofer ă trei servicii :

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

12
 – SVsSolution, care ofer ă posibilitatea de a enumera proiecte și soluții;
– SVsUIShell, care ofer ă ferestre și funcționalitate UI (Interfa ță Utilizator), inclusiv bar ă
de instrumente, tab-uri și diferite unelte pentru ferestre;
– SVsShell, care se ocup ă cu înregistrarea de VSPackage;
În plus IDE este responsabil pentru coordonarea și permiterea comunic ării între
servicii [***10,a].
Visual Studio , ca și alte medii de dezvoltare integrate, includ un editor de texte care
suportă evidențierea sintaxei, care este scris ă cu alta culoare (albastru) decât restul codului și
completarea automat ă a codului folosind IntelliSense pentru variabile, func ții, metode, tablouri,
instrucțiuni de ciclare etc. Visual Studio efectueaz ă o compilare în fundal, pe m ăsură ce codul
este scris, se compileaz ă pentru a oferi informa ții despre erori de sintax ă și de compilare.
Compilarea în fundal nu genereaz ă cod executabil, pentru a genera cod executabil este nevoie
de un alt compilator. Compilarea în fundal a fost introdus ă la început pentru limbajul Visual
Basic , după care a fost extins ă la toate celelalte limbaje [***10,a].
Visual Studio include un depanator care func ționează atât ca un depanator la nivel de
cod surs ă cât și ca un depanator la nivel de cod ma șină. Acesta func ționează atât cu cod
gestionat, precum și cu cod nativ și poate fi utilizat pentru depanarea aplica țiilor scrise în orice
limbaj acceptat de Visual Studio . În plus, se poate ata șa, la procesele care ruleaz ă cu rol de a
monitoriza și depana aceste procese [***10,a].
Versiuni de Visual Studio apărute până in prezent :
 Visual Studio 97 a fost lansat în 1997 și cuprindea Visual Basic 5.0, Visual
C++5.0, în special pentru programare Windows, Visual J++ 1.0 pentru programare JAVA și
Visual FoxPro pentru bazele de date. Visual Studio 97 a fost prima încercare a firmei Microsoft
pentru a folosi acela și mediu de dezvoltare pentru mai multe limbaje de programare [***10,a].
 Visual Studio 6.0 a fost lansat în 1998 con ținând acelea și limbaje ca și primul
Visual Studio, fiind ultima versiune care sa include J++ pentru dezvoltare de programe in

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

13
 limbajul JAVA, în urma unui acord cu firma Sun Microsystem . De asemenea Visual Studio 6.0 a
fost ultima versiunea care a inclus FoxPro [***10,a].
 Visual Studio .NET a fost lansat în 2002, cea mai mare modificare introdus ă este
managementul codului și folosirea platformei .NET Framework . Programele scrise folosind
platforma .NET nu sunt compilate la nivel de cod ma șină, ci într-un format numit MSIL (Microsoft
Intermediate Language) . Când un program MSIL este executat, este compilat în timpul rul ării,
făcând codul sa fie portabil pe mai multe platforme. Programele executate în MSIL pot fi rulate
doar pe platformele pe care este instalat Common Language Infrastructure (CLI) . Este posibil ă
executarea codului MSIL pe platforme Linux sau Mac OS X, folosind platforme diferite fa ța de
.NET , cum ar fi Mono și DotGNU [***10,a].
 Visual Studio .NET 2003, care con ține o actualizare a platformei .NET la
versiunea 1.1 și este prima versiune care suport ă dezvoltarea programelor pentru dispozitivele
mobile folosind ASP.NET și .NET Compact Framework [***10,a]
 Visual Studio 2005, în care au fost introduse .NET Framework 2.0 și ASP.NET
2.0, IntelliSense -ul a fost actualizat pentru a putea ad ăuga noi tipuri de proiecte, pentru a
suporta serviciile web în ASP.NET, având integrat un server web local, separat de IIS, care poate găzdui aplica țiile ASP.NET în timpul dezvolt ării și testării. De asemenea con ține suport
pentru toate bazele de date din SQL Server 2005 [***10,a].
 Visual Studio 2008, care include . NET Framework 3.5 , și este concentrat pe
dezvoltarea platformei Windows Vista și a aplica țiilor web. Implicit, Visual Studio 2008 rulează
pe platforma .NET 3.5 , dar ofer ă posibilitatea de a selecta platforma dorit ă
de .NET (2.0, 3.0,
3.5) [***10,a].
 Visual Studio 2010 prezint ă o nouă interfață utilizator, ferestre cu documente
multiple și oferă un suport mult mai bun pentru operarea cu mai multe monitoare. În Visual
Studio 2010 a fost introdus .NET Framework 4.0 și suportă dezvoltarea aplica țiilor pentru
platforma Windows 7 . Pe lâng ă bine cunoscutul Microsoft SQL Server , suportă sistemul de baze
de date IMB DB2 și Oracle [***10,a].

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

14
 Am ales platforma Visual Studio pentru c ă oferă : intrumente ce le putem folosi și în
alte programe, accesul u șor la baze de date, realizarea desenelor și a graficelor, efectuarea
facilă a majorit ății sarcinilor uzuale cu care se confrunt ă programatorii.
Versiunea folosit ă pentru dezvoltarea aplica ției proiectului de diplom ă este Visual
Studio Ultimate 2010.

3.2 .NET Framework
 
Microsoft .NET Framework este o platform ă software care poate s ă ruleze pe orice
calculator pe care se afl ă instalat orice sistem de operare Windows de la Microsoft. Con ține o
largă librărie de solu ții, în cod, la cele mai întâlnite probleme de programare și o mașină virtuală
care execut ă programele scrise pentru platforma .NET [***10,b].
Platforma .NET suport ă cod scris în mai multe limbaje, într-o manier ă care permite
interoperabilitatea limbajelor, adic ă fiecare limbaj poate utiliza cod scris în alt limbaj. Programele
scrise pentru platforma .NET se execut ă într-un mediu software, care are grij ă ca toate
componentele necesare s ă fie accesibile în timpul rul ării. Fiind o parte a platformei .NET acest
mediu din timpul rul ării se nume ște Common Language Runtime (CLR). CLR este o aplica ție de
mașină virtuală care permite programatorului s ă ruleze programul scris de c ătre acesta f ără să
mai aibă grijă de capabilit ățile procesorului care va executa programul. CLR mai ofer ă și alte
facilități importante, cum ar fi securitatea, managementul memoriei și gestionarea excep țiilor.
Platforma .NET este format ă din librăriile de clase și CLR. Platforma .NET include de asemenea
două versiuni pentru dispozitive mobile și încorporate (embedded), .NET Compact Framework,
pentru platformele Windows CE, incluzând Windows Mobile pentru telefoane inteligente și .NET
Micro Framework care este dedicat unei strânse arii de dispozitive [***10,b].
Microsoft a început dezvoltarea platformei .NET pe la sfâr șitul anilor ‘90 sub numele
de Next Generation Windows Services, adic ă noua genera ție de servicii Windows, iar pe la
sfârșitul anului 2000, a fost lansat ă prima versiune de .NET 1.0 [***10,b].

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

15
 Versiunea .NET Framework 2.0 aduce nou suportul pentru platformele hardware x64,
care suport ă 64 de bi ți, au mai fost introduse numeroase modific ări în interfa ța cu utilizatorul și
integrarea unui server de SQL. Au mai fost ad ăugate și îmbunătățite controalele web din
ASP.NET, suport pentru teme tot în ASP.NET, clase par țiale, tipul de date NULL, metode
anonime și tipul de date DataTables , care a fost folosit foarte intens și în aceast ă aplicație
pentru prelevarea datelor din cadrul unei tabele a bazei de date [***10,b].
Versiunea . NET Framework 3.0 include noi interfe țe utilizator (API), care sunt parte a
sistemelor de operare Windows Vista și Windows Server 2008 . Versiunea 3.0 a platformei .NET
afost lansat ă pe data de 21 noiembrie 2006. De asemenea se poate instala și pe Windows XP și
Windows Server 2003 . Platforma .NET 3.0 folose ște CLR ( Common Language Runtime ) de la
versiunea .NET 2.0 [***10,b].
În aceast ă versiunea de .NET au fost introduse patru noi componente importante:
 Windows Prezentation Foundation (WPF) o nou ă interfață utilizator bazat ă pe
XML (Extensible Markup Language) și grafică vectorial ă care folose ște hardware 3D și
tehnologii Direct3D [***10,b].
 Windows Communication Foundation (WCF) un sistem de mesagerie orientat pe
servicii care permite programelor s ă comunice local și la distan ță, utilizând serviciile web. În
această aplicație a fost utilizat WCF pentru a trimite date de la server la client (datele de la
stațiile meteorologice) [***10,b].
 Windows Workflow Foundation (WF) care permite construirea automat ă de
ubrutine utilizând workflow [***10,b].
 Windows CardSpace o component ă software care stocheaz ă securizat codul
digital personal, cum ar fi autentificarea în cadrul unui sistem, sau a unui site web [***10,b].
Versiunea .NET Framework 3.5 a fost lansat ă în acela și timp cu actualizarea pentru
Windows Mobile și Windows Embedded CE pentru a oferi suport adi țional dispozitivelor care
rulează sub aceste sisteme de operare. Fa ță de versiunea 3.0 au fost introduce noi caracteristici
pentru limbajul C# 3.0 și pentru compilatorul VB.NET 9.0 . Tot în aceast ă versiune este introdus

CAP3.FU N

 Languag e
ADO.NE T
AJAX în A
extensie
pentru si
prin ap e
BASIC. N
suport in t
M [***10,
de 12 apNDAMENTA R
e Integrate d
T și sincron i
ASP.NET [* *
Versiunea
pentru a su
steme distr i
elarea mai
NET și C#, c
tegral pentr u
b].
În Figura 3
rilie 2010 și
RE TEORETI
d Quary (L
izare între c a
**10,b].
.NET Fr a
porta paral e
ibuite. Mai e
multor m e
cum ar fi d e
u IronPytho n
3.1 de mai s
se găsește

INQ). A fo s
ash-ul local
amework 4.
elismul pent r
este preze n
etode în p a
eclarații lam
n, IronRuby
Figur a
sus este pre z
integrat în M
FACULTA T
16 st adăugat
si datele st o
0 aduce n
ru sistemel e
ntat Parallel
aralel. Noi
bda și sup o
și F#. A ma
a 3.1 .NET F r
zentat .NE T
Microsoft Vi s
TEA DE AUT O
suport de
ocate pe pa r
nou față de
e cu mai mu
LINQ care
caracteristi
ortul pentru
i fost introd u
ramework 4. 0
T Framewor k
sual Studio 2
OMATICĂ ȘI
paginare p
rtea de serv
e versiunil e
lte nuclee s
permite co n
ci pentru l
parametrii o
us și limbaj u
0
k 4.0 care f o
2010.
CALCULAT O
pentru tehn o
er.A fost int r
e precede n
sau proceso a
nstrucția pa
limbajul VIS
opționali. In
ul de progr a

ost lansat p e
OARE
ologia
rodus
nte o
are și
ralelă
SUAL
clude
amare
e data

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

17
 După cum se poate observa în Figura 3.2 , la baza stivei .NET Framework se afl ă
CLR( Common Language Runtime ) care prezint ă un mediu în care se poate executa cod scris pe
platforma .NET . Base Class Library este o libr ărie standard disponibil ă programatorilor .NET .
BCL include un num ăr mare de func ții standard, cum ar fi citirea sau scrierea într-un fi șier,
renderizare grafic ă, interacțiuni cu baze de date, și manipularea documentelor XML, care face
treaba programatorilor mult mai u șoară. Windows Forms , sau formulare Windows , este numele
dat pentru aplica ții cu interfa ță grafică. O aplica ție bazată pe Windows Forms este o aplica ție
condusă de evenimente și oferă controale care pot fi doar plasate pe formular și devin
funcționabile. Exemple de controale sunt c ăsuțele de text, etichete, butoane, etc. ASP.NET este
o tehnologie de la Microsoft folosit ă pentru crearea de aplica ții și servicii web, bazat pe XML,
folosindu-se de puterea platformei .NET pentru a oferi un mediu u șor de utilizat.ASP.NET
rulează cod compilat, crescând performan țele aplica ției web. ADO.NET este un set de
componente software care permit programatorilor s ă acceseze și să utilizeze date și servicii de
date [***10,b].

Figura 3.2 Stiva .NET Framework
Toate tehnologiile prezentate mai sus, au fost introduse o data cu versiunea 2.0 a
platformei .NET.

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

18
 În versiunea 3.0 a fost introdus WPF (Windows Prezentation Foundation ) care este
o aplica ție pentru crearea interfe țelor grafice bazate pe platforma Windows . Renderizarea
aplicațiilor realizate in WPF este efectuat ă de către hardware video dedicat. WCF ( Windows
Communication Foundation ) este o component ă a platformei . NET care permite comunicarea
între mai multe calculatoare prin intermediul serviciilor web . WF (Windows Workflow
Foundation ) este o tehnologie care permite definirea, executarea și managementul unui flux
de date. CardSpace este o carte de informa ții despre utilizator și se folose ște pentru a re ține
utilizatori și parole la pagini web unde este necesar ă autentificarea [***10,b].
În versiunea 3.5 a fost introdus LINQ (Language Integrated Query ) care ofer ă
limbajelor de pe platforma .NET posibilitatea s ă adauge nativ comenzi c ătre bazele de date.
ADO.NET Entity Framework realizeaz ă o schem ă conceptual ă a datelor din baza de date
[***10,b].
În versiunea 4.0 au fost introduse Parallel LINQ și Task Parallel Library . Parallel LINQ
a fost introdus pentru a utiliza mai multe metode în paralel, fiind suportate de procesoarele din
ziua de azi, care folosesc mai multe nuclee. TPL (Task Parallel Library) este utilizat pentru a
procesa cod în paralel. De exemplu se pot utiliza instruc țiuni FOR și FOR EACH în paralel
[***10,b].

Figura 3.3 Arhitectura .NET Framework

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

19
 În Figura 3.3 este prezentat ă arhitectura .NET Framework și limbajele de dezvoltare
suportate,cele mai folosite fiind C# și Visual Basic.

3.3 ASP.NET
 
ASP.NET este o tehnologie Microsoft pentru crearea de aplica ții web și servicii web.
ASP.NET este succesorul lui ASP ( Active Server Pages ) și beneficiaz ă de puterea platformei de
dezvoltare .NET, și de setul de instrumente oferite de mediul de dezvoltarea al aplica ției „Visual
Studio .NET” [***10,c].
Câteva dintre avantajele ASP .NET sunt:
 ASP .NET are un set larg de componente, bazate pe XML, oferind astfel un mod-
el de programare orientat obiect (OOP) [***10,c].
 ASP .NET ruleaza cod compilat, ceea ce cre ște performan țele aplictiei web. Co-
dul sursa poate fi separat în dou ă fișiere, unul pentru codul executabil, iar un altul pentru conti-
nutul paginii (codul HTML și textul din pagin ă) [***10,c] .
 .NET este compatibil cu peste 20 de limbaje diferite, cele mai utilizate fiind C# si
Visual Basic [***10,c].
Într-o aplica ție web realizat ă cu ASP .NET vom avea urm ătoarele tipuri de fi șiere și di-
rectoare importante[***11,a]:
 Fișierul web.config este un fi șier de configurare unde este stocat ă informația re-
feritoare la aplica ția web. În acest fi șier se pot defini mai multe propriet ăți ale aplica ției. De ex-
emplu, putem defini string-ul de conectare la baza de date pentru a-l putea folosi in orice pagin ă,
sau putem modifica limita m ărimii fișierelor upload-ate[***11,a].
<configuration>
<!– Configuration section-handler declaration area. –>
<configSections>

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

20
  <section name="section1" type="section1Handler" />
<section name="section2" type="section2Handler" />
</configSections>
<!– Configuration section settings area. –>
<section1>
<s1Setting1 attribute1="attr1" />
</section1>
<section2>
<s2Setting1 attribute1="attr1" />
</section2>
<system.web>
<authentication mode="Windows" />
</system.web>
</configuration> [***11,b]
 Fișiere cu extensia .aspx reprezint ă locul unde este stocat con ținutul paginii
web. Se pot ad ăuga elemente HMTL, javascript, controale ASP .NET server-side [***11,a].
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-
//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/D
TD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>How to use QueryStringParameter</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2 style="color:Red">QueryStringParameter Example</h2>
<asp:HyperLink ID="HyperLink1"
runat="server"
NavigateUrl=
"~/QueryStringParameterExaple.aspx?QSProductID=1"
Text="Click for product details: Chai"
Font-Size="Large" >
</asp:HyperLink>
</div>
</form>
</body>
</html> [***11,c]
 Fișierul Global.asax este opțional și se poate folosi pentru a manipula anumite
evenimente cum ar fi Application_Start, App lication_End, Session_Start, Session_End [***11,a].
<%@ Application Language="C#" %>
<script runat="server">

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

21
  void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
}
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e)
{ // Code that runs when a session ends.
// Note: The Session_End event is raised only when the
sessionstate mode
// is set to InProc in the Web.config file. If session mode
is set to StateServer
// or SQLServer, the event is not raised.
}
</script>

 Directorul BIN este folosit pentru a stoca diverse fi șiere dll folosite ca și compo-
nente sau controale în aplica ție [***11,a].
 Directorul App_Code conține cod ce se va compila și va fi vizibil în orice pagin ă
a aplicației web. Se pot stoca aici de exemplu diverse clase [***11,a].
 Directorul App_Data conține fișiere mdf specifice bazelor de date SQL sau
Access [***11,a].
Pentru a realiza layout-ul unei pagini web, ASP.NET pune la dispozi ția programato-
rului o serie de controale predefinite, precum și posibilitatea definirii unor controale proprii.
Controalele ASP.NET se mai numesc și controale server deoarece pot fiprogramate, prin in-
termediul unui cod server-side, s ă răspundă la anumite evenimente din pagin ă . Pentru a pu-
tea fi accesate prin intermediul codului, aceste controale trebuie sa con țină atributele id și ru-
nat=”server” .

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

22
  Exista dou ă tipuri de controale server: Web și Html. Controalele server HTML co-
respund controalelor standard HTML , și pot fi create prin ad ăugarea atributului ru-
nat=”server” unui tag HTML . Pentru a putea identifica un control Html în codul server-
side,trebuie sa-i ata șăm atributul „id”:<p id = "output" runat="server"/> [***11,d] .
Paginile ASP.NET ruleaz ă pe server- ul web Microsoft IIS . În urma prelucr ării pe
server, rezult ă o pagină web Html, care este trimis ă către browser.Ciclul de via ță al unei pagini
web are urm ătorii pași:
1.User-ul scrie adresa unei pagini web. Acest lucru înseamn ă o o cerere a browse-
rul-ui web c ătre server, prin intermediul metodei HTTP GET . Pe server, pagina ruleaz ă pentru
prima dat ă, executându-se și codul C# existent.
2.Rezultatul este o pagin ă Html care este trimis ă browser-ului.
3.User-ul poate introduce date sau ap ăsa un buton, și pagina este trimis ă înapoi
server-ului.Dac ă utilizatorul acceseaz ă un link, se încarc ă o altă pagină , și nici o prelucrare nu
este efectuat ă de pagina ini țială.
4.Pagina este trimis ă către browser prin intermediul metodei HTTP POST. În
ASP.NET aceast ă acțiune se nume ște PostBack [***11,d].
5.Pe server-ul web, pagina ruleaz ă din nou, și sunt prelucrate informa țiile introduse
de către utilizator în browser.
6.Rezultatul este trimis browser-ului, și astfel se reia ciclul
Procesul de prelucrare a paginii web de c ătre server este împ ărțit înmai multe
etape .Fiecare etap ă corespunde unui eveniment asociat paginii. Printre cele mai importantee-
venimente asociate paginii sunt:
 Init – se ini țializează fiecare control server
 Load – se execut ă la fiecare cerere a paginii
 Render – se genereaz ă codul html ce va fi trimis browser-ului
 UnLoad – sunt eliberate resursele folosite[***11,d].

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

23
 3.4 Introducere în C#
 
Limbajul C# a fost dezvoltat de o echip ărestrânsăde ingineri de la Microsoft, echip ă
din care s-a eviden țiat Anders Hejlsberg (autorul limbajului Turbo Pascal și membru al echipei
care a proiectat Borland Delphi) [***10,d].
C# este un limbaj simplu, cu circa 80 de cuvinte cheie și 12 tipuri de date predefi-
nite. El permite programarea structurat ă, modular ă și orientat ăobiectual, conform perceptelor
moderne ale program ării profesioniste [***10,d].
Principiile de baz ă ale program ării orientate pe obiecte (ÎNCAPSULARE,
MOȘTENIRE, POLIMORFISM) sunt elemente fundamentale ale program ării C#. În mare, lim-
bajul mo ștenește sintaxa și principiile de programare din C++. Sunt o serie de tipuri noi de
date sau func țiuni diferite ale datelor din C++, iar în spiritul realiz ării unor secven țe de cod si-
gure (safe), unele func țiuni au fost ad ăugate (de exemplu, interfe țe și delegări), diversificate
(tipul struct), modificate (tipul string) sau chiar eliminate (mo ștenirea multipl ă și pointerii c ătre
funcții). Unele func țiuni (cum ar fi accesul direct la memorie folosind pointeri) au fost p ăstrate,
dar secven țele de cod corespunz ătoare se consider ă„nesigure”  [***10,d].
C# include dou ă categorii generale de tipuri predefinite: tipuri simple (sau tipuri
valoare) și tipuri referin ță. Tipurile simple cuprind tipurile numerice (întregi, reale și char),tipul
boolean, tipul struct și tipul enumerare. În categoria tipurilor referin ță se încadreaz ă tipurile
tablou, șir de caractere și clasă.Exemplu:
protected voidPage_Load(objectsender,EventArgse)
{
Decimal balanta, dobanda;
//calcul sold noubalanta = 2000.201m;
dobanda = 0.1m;
balanta = balanta * dobanda + balanta;
mainDiv.InnerHtml ="<b>Noul sold este "+ balanta +" RON</b>";
}

Operatorii C# au aceea și semnifica ție ca și în C++, și sunt cuprin și în următoarele ca-
tegorii:

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

24
  Operatori aritmetici:  +, ‐, *, /, %
 Operatori de incrementare/decrementare:  ++, ‐‐,
 Operatori rela ționali: ==,!=,>,<,>=,<=
 Operatori logici:!,&&,||
 Operatori de atribuire:=
 Operatorul condi țional: expresie1 ? expresie2: expresie3
Instrucțiunile existente în C# sunt la fel ca cele din C++:
 Decizionale
 Instruc țiunea if
if (condi ție)
Instruc țiuni_1;
else
Instruc țiuni_2;
 Instruc țiunea switch
switch (expresie){
case val1: instruc țiuni1; break;
case val2: instruc țiuni2; break;
case val3: instruc țiuni3; break;
………………………………..
case valN: instruc țiuniN; break;
default: instruc țiuni; break;
}
 Repetitive

 Cu test ini țial (while)

while (condi ție)
intruc țiuni;

 Cu test final(do while)

do{
instruc țiuni;
}while(condi ție);

 Cu număr cunoscut de pa și

for(ini țializare; test; pas)
intruct țiuni;

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

25
 
Pentru a declara un tablou în C#,se folose ște sintaxa:
tip_elemente[] varibil ă;

3.5 Internet Information Services (IIS)

Internet Information Services este o aplica ție de server web, fiind pe locul doi ca utili-
zare în întreaga lume, dep ășit fiind doar de Apache HTTP Server [***10,e].
IIS este construit pe o arhitectura modular ă. Modulele, denumite și extensii pot fi
adăugate sau îndep ărtate separat, astfel încât doar modulele de care avem nevoie sa ruleze s ă
fie instalate. Acesta este format dintr-un grup de servere web, HTTP și FTP, toate într-un singur
pachet. IIS este compus în principal din urm ătoarele module [***10,e]:
 Modulul HTTP utilizat pentru aplica ții specifice HTTP, cum ar fi r ăspunsul la cereri
HTTP, returnarea erorilor și redirectarea cererilor [***10,e].
 Modulul Securitate folosit pentru securizare, poate generara scheme de autentifi-
care, autoriza ții URL și filtrarea cererilor [***10,e].
 Modulul pentru compresie este folosit pentru ac țiuni de compresie și compresa-
rea fișierelor [***10,e].
 Modulul Caching folosit pentru lucrul cu memoria cache, cum ar fi p ăstrarea pro-
ceselor în memorie serverului [***10,e].
 Modulul de autentificare și diagnosticare folosit pentru autentificare utilizatorilor și
diagnosticare, cum ar fi pasarea informa țiilor și proceselor c ătre sistemul HTTP, pentru autentifi-
care și raportarea erorilor [***10,e].

3.6 MySQL
MySQL este un sistem de gestiune a bazelor de date rela țional, produs de compania
suedeză MySQL AB și distribuit sub Licen ța Public ă General ă GNU. Este cel mai popular
SGBD (Sistem de Gestiune a Bazelor de Date) open – source.

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

26
 Cu MySQL se pot construi aplica ții în orice limbaj major. Exist ă multe scheme API
disponibile pentru MySQL ce permit scrierea aplica țiilor în numeroase limbaje de programare
pentru accesarea bazelor de date MySQL, fiecare dintre aceste limbaje folosind un tip specific API.
O bază de date este o colec ție structurat ă de date, un program ce poate stoca o
cantitate foarte mare de informa ții și o poate organiza într-un format ce este u șor accesibil în
mod direct sau de c ătre un alt program. [Lar05]
Cele mai des întâlnite opera ții cu bazele de date sunt:
Comand ă Semnifica ție
CREATE creează o bază de date sau un tabel
DROP șterge o baz ă de date sau un tabel
INSERT adaugă înregistr ări într-un tabel
DELETE șterge înregistr ări dintr-un tabel
UPDATE actualizeaz ă înregistr ările dintr-un tabel
SELECT selecteaz ă un tabel
ALTER modifică definirea unui tabel
În MySQL spa țiul alocat pe discul serverului este în func ție de tipul de date. Câteva
din tipurile de date folosite în bazele de date MySQL sunt:

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

27
 Tip Semnifica ție
int() număr întreg 32 bi ți
bigint() număr întreg 64 bi ți
tinyint() număr întreg (-128 la 127 sau 0 la 255) 8 bi ți
mediumint() număr întreg 24 bi ți
smallint() număr întreg 16 bi ți
char() secțiune cu lungime fix ă de la 0 la 255 caractere
varchar() secțiune cu lungime variabil ă de la 0 la 255 caractere
float() număr mic cu virgul ă flotantă
Double număr mare cu virgul ă flotantă
Text șir cu maximum 65535 caractere
date() data în format YYYY-MM-DD

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

28
 Comenzi asupra tabelelor
Tabelele sunt cele mai importante obiecte dintr-o baz ă de date rela țională. Toate
datele sunt stocate în tabele organizate sub form ă de linii și coloane, astfel fiecare tabel ă cores-
punde unei rela ții din schema rela țională a bazei de date.
Proiectarea unei baze da date presupune, stabilirea colec ției de tabele și a de-
scrierii tabelelor împreun ă cu toate propriet ățile asociate. Înainte de crearea unei noi tabele tre-
buie luate o serie de decizii de proiectare referitoare la:
– tipurile de date care vor fi stocate în tabel ă;
– coloanele tabelei și tipul de dat ă pentru fiecare coloan ă;
– coloanele care accept ă sau nu valori NULL;
– constrângeri, reguli, valori implicite;
– indec șii necesari coloanelor care formeaz ă cheia primar ă sau sunt parte a unei chei
străine.
După ce baza de date a fost proiectat ă se vor crea tabelele ce o con țin și în care se
vor stoca datele. [Luk07]
Crearea efectiv ă a tabelelor
Pentru a crea o tabel ă în baza de date ne vom folosi de urm ătoarea sintax ă:
CREATE TABLE [nume_baz ă_de_date .[proprietar ].|proprietar .]nume_tabel ({<def_coloan ă>
|<constrângere_tabel ă>}[, n]);
Coloanele sunt separate prin virgul ă iar fiecare coloan ă va avea un nume și tip.
– nume_baza_de_date – este numele bazei de date în care vom crea noua tabel ă;
– proprietar – este numele utilizatorului care va fi proprietarul tabelei;
– nume_tabel – este numele tabelei pe care o vom crea;
– def_coloan ă – se refer ă la defini ția complet ă a unei coloane împreun ă cu constrângerile
impuse asupra sa; – constrângere_tabela – se refer ă la constrângerile tabelei; [Luk07]

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

29
 Ștergerea unei tabele
Ștergerea unei tabele se face prin comanda DROP TABLE . Sintaxa instruc țiunii de
ștergere este urm ătoarea :  
DROP TABLE nume_tabela;   
 
Introducerea în tabel ă
Insert este comanda prin care se face introducerea uneia sau mai multor înregistr ări
într-o tabel ă a unei baze de date.
Sintaxa comenzii insert este urm ătoarea:
INSERT [INTO] nume_tabel ă (coloana_1, coloana_2,…, coloana_n) VALUES ('valoare_1', 'valoare_2',
…, 'valoare_n');
– INTO – este cuvânt cheie op țional;
– nume_tabel ă – este numele tabelei în care se face inserarea;
– coloana_1 – coloana în care se face inserarea;
VALUES – precede lista de valori de inserat. În aceast ă listă trebuie s ă existe câte o
valoare pentru fiecare coloan ă specificat ă în lista de coloane. [Luk07]
Ștergerea înregistr ărilor
Ștergerea unei înregistr ări sau a tuturor înregistr ărilor se face utilizând comanda DE-
LETE, având urm ătoarea sintax ă:
DELETE [ FROM ] {nume_tabel ă } [FROM { <sursă_tabelă> }[ ,…n ]] [ WHERE { <condiție_căutare >
}]
FROM – este un cuvânt cheie op țional care precede numele tabelei din care se face
ștregerea.
– nume_tabel ă – este numele tabelei din care se face ștergerea;
– FROM surs ă_tabela – prin aceast ă instrucțiune se poate specifica o cuplare de mai
multe tabele;

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

30
 – WHERE – un cuvânt cheie prin care sunt specificate condi țiile prin care se identific ă
înregistrările care urmeaz ă a fi șterse;
– <condție_căutare> – reprezint ă orice condi ție care poate fi inclus ă în clauza WHERE ;
Selectarea unui tabel
Utilizând comanda SELECT vom putea selecta un tabel în care se vor face
modificările dorite. Instruc țiunea SELECT are urm ătoarea sintax ă:
SELECT [ ALL | DISTINCT ][ TOP n [ PERCENT] ] { * | { nume_tabel | alias_tabel }.* | { nume_coloan ă |
expresie | IDENTITYCOL | ROWGUIDCOL } [[AS] alias_coloan ă] | alias_coloan ă = expresie } [ , n]
– ALL – înregistr ările duplicat pot sa apar ă în relația rezultat. ALL este opțiunea implicit ă;
– DISTINCT – se elimin ă înregistr ările duplicat din rela ția duplicat;
– TOP n [PERCENT] – sunt returnate numai primele n înregistr ări din rezultat, iar dac ă se
specifică și cuvântul cheie PERCENT , atunci vor fi returnate numai primele n procente din tota-
lul înregistr ărilor găsite în tabel ă;
– nume_coloan ă – este numele unei coloane;
– nume_tabel | alias_tabel .* – se include în rezultat numai atributul din tabela specificat ă;
– expresie – poate fi un num ăr de coloan ă, o constant ă, o funcție, orice combina ție a aces-
tora realizat ă prin operatori sau un SELECT imbricat;
– IDENTITYCOL – returneaz ă coloana cu proprietatea IDENTITY ; dacă în clauza FROM
sunt referite mai multe tabele care au un atribut de tip IDENTITY , atunci IDENTITYCOL se va
prefixa cu numele tabelei corespunz ătoare, sub forma Tabela. IDENTITYCOL.
– ROWGUIDCOL – returneaz ă coloana cu valorile identificatorului global unic de înregi-
strare pentru tabelele care au proprietatea ROWGUIDCOL.
– alis_coloan ă – este un nume alternativ cu care se poate înlocui numele unui atribut,
poate fi folosit în clauza ORDER BY , dar nu și în clauza WHERE . [Luk07]  
Modificarea structurii unui tabel
Instrucțiunea ALTER TABLE permite modificarea defini ției unei tabele realizând orice
combina ție a următoarelor categorii de opera ții:
– modificare defini ției unei coloane sau constrângeri;

CAP3.FUNDAMENTARE TEORETIC Ă FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

31
 – adăugarea sau ștergerea unei coloane sau constrângeri;
– activarea sau dezactivarea unei constrângeri sau a unui trigger;

32
 Capitolul 4. Specifica țiile aplica ției
 
 
4.1 Schema bloc a aplica ției
 
 
  
 
   
 
  
Figura 4.1 Rela țiile între componentele sistemului
Aplicația este un site destinat unui restaurant,acesta are mai multe func ționalități.Ea
poate fii accesat ă doar informativ,pentru a se vizualiza poze din restaurant,meniul de care dis-
pune și datele de contact.Aplica ția dispune de un meniu format din :
 Acasă
 Meniu
 Băuturi
 Galerie
 Servicii
 Contact Server 
wEB Motor 
Asp.NET Motor 
MySQL Browser‐ul  Internet 
Date 
MySQL Pagini și 
scripturi 
stocate Fișiere de 
date

CAP4.SPECIFICA ȚIILE APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

33
 Pentru a accesa “Servicii”-le utilizatorul trebuie s ă se autentifice. Exist ă patru tipuri de
utilizatori:
 administrator
 bucătar
 ospătar
 client
În funcție de tipul de utilizator exist ă diferite nivele de acces ale aplica ției. Administra-
torul are dreptul s ă creeze conturi,s ă vizualizeze rapoarte ale comenzilor și notelor de plat ă,să
alimenteze stocurile de alimente și băuturi,precum și posibilitatea de modificare a parolelor pen-
tru conturile de client.Clientul are dreptul comand ă a produselor, din „Meniu” și „Băuturi”, și
posibilitatea de a cere nota de plat ă. Ospătarul are acces la comenzile efectuate de clien ți,la
notele de plat ă cerute,dar și dreptul de a modifica parolele de autentificare ale
clienților.Bucătarul prime ște instant comenzile plasate de clien ți,poate alimenta stocul de
alimente,poate modifica re țete,și poate ob ține rapoarte despre stocul zero de alimente.

4.2 Func țiile sistemului
 
Sistemul format din aplica ția restaurant și server care are rolul de a trimite datele
meteo către aplica ția restaurantului la cererea acesteia. În continuare vor fi specificate func țiile
serverului și ale aplica ției.
Funcțiile aplica ției:
 trimite date c ătre server:
 atunci când se creaz ă un cont nou
 când se realizeaz ă o comand ă
 când se modific ă o rețetă
 când se alimenteaz ă stocurile
 primește date de la server:

CAP4.SPECIFICA ȚIILE APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

34
  atunci când un utilizator se conecteaz ă
 atunci când se dore ște vizualizarea informa țiilor despre comenzi, note de
plată,rețete,stocuri
Aplicația dispune de un mecanism de stabilire a faptului c ă produsul comandat poate
fii onorat, dac ă sunt disponibile toate ingredientele nec esare pentru realizarea produsului.Printr-
un mecanism de refresh automat comenzile plasate vor fii afi șate instant osp ătarului și
bucătarului.
Funcțiile server-ului :
 primește date despre:
 meniu, atunci când utilizatorul realizeaz ă o comand ă
 utilizatori,atunci când administratorul creaz ă un cont nou
 note de plat ă,atunci când utilizatorul cere o not ă de plată
 rețete,când buc ătarul modific ă o rețetă
 stocuri,atunci când acestea vor fii alimentate

 trimite, c ătre aplica ție,date :
 despre comenzi atunci când osp ătarul,buc ătarul sau administratorul doresc s ă
vizualizeze comenzile
 despre note de plat ă atunci când adminitratorul sau osp ătarul doresc sa vizualizeze
notele de plat ă
 despre datele utilizatorului ,la conectare
 despre re țete când se dore ște consultarea lor
 despre stocuri,când se dore ște un raport al stocurilor

CAP4.SPECIFICA ȚIILE APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

35
 4.3 Stocarea bazei de date
 
Toate aceste informa ții sunt stocate într-o baz ă de date în format MySQL numit ă “res-
taurant ” și care con ține șapte tabele.În cele ce urmeaz ă vom descrie fiecare tabel ă împreun ă cu
câmpurile ce le con ține.
Tabela ” users” conține date despre utilizatorii crea ți:
– NumeUtilizator – numele cu care se autentific ă utilizatorul;
– Parola -parola criptat ă ce o folose ște utilizatorul;
– E-mail -adresa de e-mail a utilizatorului;
– TipUtilizator -tipul de utilizator :client,administrator,osp ătar sau buc ătar;

Tabela ” parole ” conține parolele clien ților:
– nume_client -numele mesei la care s-a a șezat clientul;
– parola -parola corespunz ătoare mesei respective,care se va modifica automat din
aplicație,imediat dupa ce clientul se conecteaz ă;

Tabela ” meniu ” conține date despre fiecare produs în parte:
– id_produs -fiecare produs de ține un cod unic de identificare;
– nume_produs -numele produsului;
– timp_preparare -timpul necesar pentru prepararea produsului
– ingrediente -ingredientele necesare pentru prepararea produsului;
– pret-prețul de vânzare al produsului;

Tabela ” ingrediente ” conține toate ingredientele necesare realiz ării produselor:
– id_ingredient -fiecare ingredient are un cod unic de identificare;
– nume_ingredient -numele ingredientului;
– cantitate -cantitatea disponibila în grame;

Tabela ” băuturi ” conține informa ții despre toate b ăuturile din bar:
– id-fiecare b ăutură are un cod unic de identificare;

CAP4.SPECIFICA ȚIILE APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

36
 – nume -numele b ăuturii;
– doza -cantitatea unei doze în ml;
– cantitate -cantitatea de b ăutura disponibila în bar;
– pret-prețul unei doze;

Tabela ” comenz i”,aici se înregistreaz ă toate comenzile efectuate de clien ți:
– nr_crt -numărul curent al comenzii,este unic;
– client -numele mesei de la care se face comanda;
– id_produs -codul produsului comandat;
– nume_produs -numele produsului comandat;
– timp_preparare -timpul necesar prepar ării produsului;
– data-data la care s-a efectuat comanda;
– ora-ora la care s-a efectuat comanda;
– cantitate -cantitatea în care s-a comandat produsul respectiv;
– pret-prețul produsului;
– onorat -aici ospătarul noteaz ă dacă a onorat comanda sau nu;

Tabela ” notaplata ”,aici se înregistreaz ă notele de plat ă cerute de clien ți:
– nume_client- numele mesei de unde se face cererea;
– suma- suma consumat ă de client;
– data- data în care s-a efectuat nota de plat ă;
– ora-ora la care s-a efectuat nota de plat ă;
– achitat- aici ospătarul noteaz ă dacă nota de plat ă a fost achitat ă sau nu;

CAP4.SPECIFICA ȚIILE APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

37
 
Figura 4.2 Tabelele rela ționate
În Figura 4.2 este prezentat ă baza de date format ă din tabelele prezentate mai sus,aici
sunt reprezentate prin s ăgeți câmpurile prin care se leag ă tabelele între ele.

5.1
care ex i
Contact. T
Arhit
După cum
istă un m e
Toate acest e
Master 
PageCapito l
tectura si s
putem obs e
eniu din c
e compone nlul 5. Im
stemului
Figura 5.1 A
erva în Figur
care se p o
nte sunt def a
Acas
Men
Băutu
Gale r
Servi c
Conta c
38 plemen t
Arhitectura si s
ra 5.1 sistem
ot accesa
apt fișiere pl a

niu
uri
rie
cii
cttarea a p
stemulu i
mul este for m
Acasă,Men
asate în Co n
Antre
S
Prep
B
Ra
Adm
B
plicației
mat dint r-un
iu,Băuturi, G
ntentHolder î
uri reci si ca
upe crema
Paste
Peste
parate de ba
Salate
Desert
Cafea
Vinuri
Aperitive
Lichioruri
Gin
Cognac
Whisky
ăuturi tari 
Bere
acoritoare
ministrator
Bucătar
Ospătar
Client
Master Pa g
Galerie,Servi c
în MasterP a
lde

Parol e
Alimen t
Rapoar t
Bautu r
Cont no
ge , în
cii și
age.
e
te
te
ri
ou

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

39
 5.2 Descrierea modulelor aplica ției
 
Aplicația este un WebSite project , realizat cu ajutorul ASP.NET și limbajul C#.Pentru
a realiza aceast ă aplicație am folosit MasterPages .Toate paginile din meniu vor fii înc ărcate în
ContentPlaceHolder -ul care ii corespunde din MasterPage, numai MasterPage -ul va rămâne fix
în pagină. 
 
Figura 5.2 MasterPage și ContentPlaceHolder
Fiecare pagin ă care va fii înc ărcată în MasterPage va avea structura ca și în codul
prezentat mai jos,din fereastra de propriet ăți (din MasterPage ) se seteaz ă numele
ContentPlaceHolder- ului asignat paginii, iar acest nume va fii plasat în ID-ul celui de-al doilea
ContentPlaceHolder din codul paginii înc ărcate. Codul pentru un ContentPlaceHolder în
MasterPage este:
<%@ Master Language ="C#" AutoEventWireup ="true" CodeFile ="MasterPage.master.cs"
Inherits ="MasterPage" %>

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

40
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page </title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder > </head>
<asp:ContentPlaceHolder ID="ParoleHolder" runat="server">
</asp:ContentPlaceHolder >
</html>
Tot în MasterPage este plasat un meniu care con ține butoanele
:Acasă,Meniu,B ăuturi,Galerie,Servicii,Contact. Pentru fiecare dintre acestea exist ă plasat un
ContentPlaceHolder în MasterPage. La fel și pentru submeniurile de la B ăuturi și Meniu,fiecare
categorie de m ăncăruri deține căte o pagin ă care are un ContentPlaceHolder în MasterPage .

Figura 5.3 Design mode pentru pagina Default.aspx
În pagina Default.aspx (Figura 5.3 ) există plasat un Image control care con ține poza
unui produs ,acesta are scop publicitar.Codul pentru acest control este:
<asp:Image ID="Image1" runat="server"
Height="149px" ImageUrl ="./31.jpg"
style="margin-left : 51px" Width="229px" />

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

41
 Deoarece aceast ă pagină nu are nici o func ționalitate,doar de vizualizare, în pagina
C#, Default.cs nu există cod,doar cel standard de înc ărcare a paginii:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI. Page
{
protected void Page_Load( object sender, EventArgs e)
{
}
}
 
 Pentru pagina Meniu.aspx am ad ăugat câte un control ImageButton și LinkButton,
butonul imagine a fost personalizat cu poza fiec ărei subdiviziune a meniului,acest lucru rea-
lizându-se din propriet ățile controlului( Figura 5.4 ),iar în codul C# link-ul c ătre pagina spre care
redirecteaz ă butonul a fost .Pentru LinkButton s-a procedat la fel,la declan șarea evenimentului
corespunz ător controlului în codul C# se scrie codul pentru redirectare.
protected  void LinkButton2_Click( object sender,  EventArgs  e) 
     { 
         Response.Redirect( "SupeCrema.aspx" ); 
     } 
protected  void ImageButton1_Click( object sender,  ImageClickEventArgs  e) 
     { 
         Response.Redirect( "AntreuriReciSiCalde.aspx" ); 
     }

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

42
 
Figura 5.4 Pagina Meniu.aspx și caseta de propriet ăți a unui ImageButton

Figura 5.5 Caseta de propriet ăți a meniului principal

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

43
 Dacă butonul Meniu nu este ap ăsat,ci doar se st ă cu click-ul pe el vom observa
apariția unui submeniu,care a fost contruit din propriet ățile meniului( Figura 5.5 ).Din propriet ățile
meniului am stabilit leg ăturile butoanelor spre paginile spre care vor indica,dar și imaginile
corespondente submeniului. Toate acestea sunt valabile și pentru butonul B ăuturi, împreun ă cu
submeniul s ău .
Pentru crearea galeriei am folosit lightbox2.51 , acesta este  un script care permite
afișarea imaginilor într-un mod atractiv. Lightbox folosește Jquery și CSS.Am integrat directoa-
rele CSS,JS și IMAGES în proiect și codul adecvat.
<script src="./js/jquery ‐1.7.2.min.js"></ script > 
<script src="./js/lightbox.js"></ script > 
<link href ="./css/lightbox.css"  rel="stylesheet"  /> 
</asp:Content > 
<asp:Content  ID="Content2"  ContentPlaceHolderID ="GalerieHolder"  Runat ="Server">  
     <br /> 
     <table class ="style7">  
     <tr> 
         <td class ="style8"> &nbsp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp;&nbsp;  
             
     <a href ="images/examples/01.jpg"  rel="lightboxt[a]">< img src="images/examples/01.jpg"  
width ="100" height ="100" border ="0" /></ a> 
         </td> 
         <td class ="style10"> &nbsp&nbsp  
          <a href ="images/examples/03.jpg"  rel="lightboxt[a]">< img 
src="images/examples/03.jpg"  width ="100" height ="100" border ="0" /></ a> 
         </td> 
         <td class ="style9"> &nbsp&nbsp  
          <a href ="images/examples/04.jpg"  rel="lightboxt[a]">< img 
src="images/examples/04.jpg"  width ="100" height ="100" border ="0" /></ a> 
         </td> 
         <td>&nbsp&nbsp  
          <a href ="images/examples/05.jpg"  rel="lightboxt[a]">< img 
src="images/examples/05.jpg"  width ="100" height ="100" border ="0" /></ a> 
         </td> 
     </tr> 
 
În pagina de Servicii.aspx nu avem cod pentru design,deoarece aici vom fii redirecta ți
spre pagina de LogIn , dacă nu exist ă utilizator conectat, sau vom accesa pagina utilizatorului
conectat, în cazul în care acesta este conectat.Pentru acceasta s-a utilizat instruc țiunea switch,
selecția se face în func ție de tipul utilizatorului care este preluat la conectare prin Session.

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

44
 public partial  class Servicii  : System.Web.UI. Page 

     protected  void Page_Load( object sender,  EventArgs  e) 
     { 
         if (!IsPostBack)  
         { 
             if (Session[ "New" ] != null ) 
             { 
                 switch (Session[ "New" ].ToString())  
                 { 
                     case "Ospatar" : { Response.Redirect( "Ospatar.aspx" ); break ; }; 
                     case "Client" : { Response.Redirect( "Client.aspx" ); break ; }; 
                     case "Bucatar" : { Response.Redirect( "Bucatar.aspx" ); break ; }; 
                     case "Administrator" : { Rsponse.Redirect( "Administrator.aspx" );break ;} 
                 } 
             } 
             else { Response.Redirect( "LogIn.aspx" ); } 
         } 
     } 

Pagina de Contact.aspx deține câteva informa ții despre restaurant ,acestea sunt pla-
sate într-un tabel, tot aici putem vizualiza o hart ă care este defapt un Image control, și un Link-
Button care redirecteaz ă spre pagina de Facebook a restaurantului,acestea au fost realizate ca
și în exemplele prezentate mai sus.
5.3 Descrierea func țiilor sistemului

În pagina master este plasat un Timer , pentru acest timer a fost nevoit ă plasarea unui
ScriptManager .Timerul este activat atunci când un client se conecteaz ă.La o anumit ă
perioadă,după ce clientul s-a conectat o nou ă parolă va fii generat ă,ceea ce duce la o
modificare a tabelelor users și parole.
 
String sCon = "Server=localhost;Port=3306;Database=restaurant;Uid=root;Pwd=;Connection  
Timeout=200;Max  Pool Size=100" ; 
 
protected  void Page_Load( object sender,  EventArgs  e) 
     { 
 
         if (!IsPostBack)  
         { 
             Session[ "Menu2" ] = Menu2.Visible;  
             Session[ "Menu3" ] = Menu3.Visible;

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

45
              if (Session[ "New" ] != null ) 
             { 
                 Menu2.Visible  = false ; 
                Menu3.Visible  = true ; 
                 Menu3.SelectedItem.Text  += Session[ "Nume" ]; 
                
             } 
         } 
 
     } 
     public int RandomNumber( int min, int max) 
     { 
         Random random = new Random (); 
         return random.Next(min,  max); 
     } 
     protected  void Timer1_Tick( object sender,  EventArgs  e) 
     { 
         if (Session[ "Nume" ] != null && Session[ "New" ].ToString().Equals( "Client" )) 
         { 
             string nume = Session[ "Nume" ].ToString();  
             int parola = Convert .ToInt32(RandomNumber(10000,  37000));  
            string message  = parola.ToString();  
             string hash = FormsAuthentication .HashPasswordForStoringInConfigFile(message,  
"MD5" ).ToString();  
           
             Session[ "parola" ] = parola;  
          
             try 
             { 
                 MySqlConnection  con2 = new MySqlConnection (sCon);  
                 con2.Open();  
 
                 String s2 = "update  users set parola='"  +hash + "' where NumeUtilizator='"  
+ nume+ "'" ; 
                 MySqlCommand  cmd2 = new MySqlCommand (s2, con2); 
                 cmd2.ExecuteNonQuery();  
            
                 try 
                 { 
                     MySqlConnection  con3 = new MySqlConnection (sCon);  
                     con3.Open();  
 
                     String s3 = "update  parole set parola='"  + parola.ToString()  + "' 
where nume_client='"  + nume + "'"; 
                     MySqlCommand  cmd3 = new MySqlCommand (s3, con3); 
                     cmd3.ExecuteNonQuery();  
                 
                     con3.Close();  
                 } 
                 catch (Exception  ex) 
                 { 
                     Response.Write(ex.ToString());  
                 } 
                 con2.Close();

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

46
              } 
             catch (Exception  ex) 
             { 
                 Response.Write(ex.ToString());  
             } 
         } 
     } 
În MasterPage exist ă 3 meniuri,cel central va ramâne visibil pe toat ă perioada de
vizitare,celelalte 2 meniuri vor fii ascunse, unul în func ție de cel ălalt.Dacă nu exist ă utilizator
conectat meniul cu butonul ”Conectare” va fii vizibil iar cel cu ”Bine ai venit” va fii ascuns, și
invers ,dac ă utilizatorul s-a conectat numele s ău va fii preluat prin Session și adăugat la numele
meniului,ob ținându-se un buton de forma ”Bine ai venit Client”.
Funcția RandomNumber(min,max) genereaz ă aleator un num ăr în intervalul
precizat.Modific ările în baza de date se vor face cu update asupra tabelei precizate,se define ște
o nouă comand ă MySqlCommand care va fii executat ă cu ExecuteNonQuery() .Pentru fiecare
modificare în tabel ă se realizeaz ă o nouă conexiune. String -ul de conectare la baza de date
precizeaz ă baza la care ne conect ăm,parola,userul,portul, și timpul de r ăspuns.
Atunci când administratorul se conecteaz ă, are posibilitatea de creare a unui cont
nou, de precizat este faptul c ă el este singurul care are acest drept.
Paginile de Meniu și Băuturi au func ționalitate atunci când este conectat un
client.Func ționalitatea const ă în faptul c ă butoanele de comand ă și de cantitate sunt
activate.Pentru cantitate am ad ăugat un DropDownList iar pentru comand ă un buton simplu pe
care l-am personalizat.Fiecare produs are câte un Label , al cărei vizibilitate este false ca default,
această poprietate devine true în momentul comand ării prosului respectiv.Textul Label -ului se
modifică ,poate fii ” Comanda a fost trimis ă!” sau ” Comanda nu poate fii onorat ă! ”.Când butonul
Comand ă este apelat într-o variabil ă id se pune codul unic al produsului , și într-o variabil ă
cantitate se preia valoarea selectat ă din DropDownList, valoarea este convertit ă la tipul int.
protected void Button1_Click1( object sender, EventArgs e)
{
id = 113;
cantitate = Convert.ToInt32(DropDownList1.SelectedItem.ToString());
insert(cantitate, id,Label2);

}

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

47
 Funcția insert(int cantitate,int id,Label l) are rolul de ad ăugare a comenzii efec-
tuate,dac ă produsul este disponibil sau de setare a Label -ului în cazul în care acesta nu poate fii
comandat.Verificarea ingredientelor necesare pentru a realiza produsul se face cu ajutorul funcției ingrediente_cant(int id,), care preia cantitatea ingredientului din baza de date si o
returneaz ă.
int ingrediente_cant( int id) 
     { 
         try 
         { 
             MySqlConnection  con4 = new MySqlConnection (sCon);  
             con4.Open();  
             String s4 = "select  cantitate  from ingrediente  where id_ingredient="  + id; 
             MySqlCommand  cmd4 = new MySqlCommand (s4, con4); 
             MySqlDataReader  reader = cmd4.ExecuteReader();  
             reader.Read();  
             int x = Convert .ToInt32(reader[0]);  
             con4.Close();  
              return x; 
            
         } 
         catch (Exception  ex) 
         { 
             Response.Write(ex.ToString());  
             return 0; 
         } 
     } 
     
public void insert( int cantitate, int id,Label l) 
     { 
         bool k = true ; 
         try 
         { 
             MySqlConnection  con = new MySqlConnection (sCon);  
             con.Open();  
             String s1 = "select  nume_produs,timp_preparare,ingrediente,pret  from meniu 
where id_produs="  + id; 
             MySqlCommand  cmd1 = new MySqlCommand (s1, con); 
             MySqlDataReader  reader = cmd1.ExecuteReader();  
             reader.Read();  
             string nume_produs  = reader[0].ToString();  
             int timp = Convert .ToInt32(reader[1]);  
             string ingrediente  = reader[2].ToString();  
             double pret = Convert .ToDouble(reader[3]);  
             string numeutilizator  = Session[ "Nume" ].ToString();  
             con.Close();  
             string [] ingr = ingrediente.Split( ','); 
             int[] id_ingredient  = new int[20]; 
             int[] cant = new int[20]; 
             for (int i = 0; i < ingr.Length;  i++)

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

48
              { 
                 string [] s = ingr[i].Split( '('); 
                 id_ingredient[i]  = Convert .ToInt32(s[0]);  
                 string [] sectiune  = s[1].Split( ')'); 
                 cant[i]  = Convert .ToInt32(sectiune[0]);  
                 if ((ingrediente_cant(id_ingredient[i])*cantitate)<(cantitate  *cant[i]))  
                 { k =false ; } 
             } 
             if (k == true ) 
             { 
                 try 
                 { 
                     for (int i = 0; i < id_ingredient.Length;  i++) 
                     { 
                         try 
                         { 
                             MySqlConnection  con3 = new MySqlConnection (sCon);  
                             con3.Open();  
                             String s3 = "update  ingrediente  set cantitate=cantitate ‐" + 
cantitate  * cant[i]  + " where id_ingredient="  + id_ingredient[i];  
                             MySqlCommand  cmd3 = new MySqlCommand (s3, con3); 
                             cmd3.ExecuteNonQuery();  
                             con3.Close();  
                         } 
                         catch (Exception  ex) 
                         { 
                             Response.Write(ex.ToString());  
                         } 
                     } 
                 } 
                 catch (Exception  ex) 
                 { 
                     Response.Write(ex.ToString());  
                 } 
                 try 
                 { 
                     MySqlConnection  con2 = new MySqlConnection (sCon);  
                     con2.Open();  
                     DateTime  data = DateTime .Now; 
                     string [] split = data.ToString().Split( ' '); 
                     String  s2  =  "insert   into  comen‐
zi(client,id_produs,nume_produs,timp_preparare,data,ora,cantitate,pret)  values ('" + nu‐
meutilizator  + "'," + id + ",'" + nume_produs  + "'," + timp + ",'" + split[0]  + "','" + 
split[1]  + "'," + cantitate  + "," + pret * cantitate  + ")";                     
                     MySqlCommand  cmd2 = new MySqlCommand (s2, con2); 
                     cmd2.ExecuteNonQuery();  
                     con2.Close();  
                     l.Text = "Comanda  a fost trimisa!" ; 
                     l.Visible  = true ; 
 
                 } 
                 catch (Exception  ex) 
                 { 
                     Response.Write(ex.ToString());

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

49
                  } 
             } 
             else 
             { 
                 
                 l.Text = "Comanda  nu poate fii onorata!" ; 
                 l.Visible  = true ; 
             } 
         } 
 
         catch (Exception  ex) 
         { 
             Response.Write(ex.ToString());  
         } 
     } 
În funcția insert() avem o variabil ă de tip boolean care va fii setat ă cu valoarea true,
această valoare se va modifica doar dac ă unui din ingredientele necesare pepar ării nu este dis-
ponibil.Se deschide o conexiune nou ă cu baza de date,se preiau datele necesare plas ării com-
enzii și aceste valori vor fii plasate în variabile,dup ă ce au fost convertite.Deoarece re țeta este
formată astfel: id_produs(cantitate),id_produs1(cantitate1),…, id_produsN(cantitateN), aflarea
ingredientelor se va face printr-un split în func ție de virgul ă.Vom ob ține un șir de caractere de
forma : ingr=(”id_produs(cantitate)”, ”id_produs1(cantitate1)” ,…, ” id_produsN(cantitateN)”), ast-
fel ingr[0]=”id_produs(cantitate)”.
În continuare vom folosi o structur ă cu număr cunoscut de pa și,vom parcurge șirul în
funcție de lungimea sa folosind ingr.length(), astfel vom parcurge fiecare ingredient și cantitatea
necesară.În ciclul for, pentru fiecare produs vom ob ține id-ul printr-un split în funcție de “(“, pen-
tru a obține cantitatea vom face din nou un split în funcție de ”)”.Tot în ciclu vom apela func ția
ingrediente_cant() pentru a ob ține cantitatea ingredientului din baza de date,vom stabili dac ă
prodului poate fii comandat printr-o structur ă decizional ă if, în care vom întreba dac ă cantitatea
care se g ăsește în baza de date înmul țită cu numărul de cantitate comandat este mai mic decât
cantitatea necesar ă preparării înmul țită cu cantitatea comandat ă.Dacă nu exist ă cantitate
disponibila variabila boolean -ă va fii setat ă pe false .
În funcție de valoarea variabilei de tip boolean vom decide dac ă comanda va fii
inserată sau dac ă vom afișa numai mesajul ” Comanda nu poate fii on onorat ă!”.Dacă comanda
va fii inserat ă cantitatea de ingrediente a fiec ărui produs va fii modificat ă în baza de date în
funcție de comand ă.

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

50
 În funcția de înc ărcare a paginii vom întreba dac ă utilizatorul conectat este unul de tip
client, și vom afișa butonul de Comand ă și ce de Cantitate .
protected void Page_Load( object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session[ "New"] != null)
{
string tip = Session[ "New"].ToString();
if (tip.Equals( "Client" ))
{
Label1.Visible = true;
Label13.Visible = true;

DropDownList2.Visible = true;

}
}
}
}
Dacă utilizatorul conectat este unul de tip client, drepturile lui vor fii:
 de comand ă, după cum a men ționat și mai sus
 de vizualizare a comenzii efectuate
 de cerere a notei de plat ă
 de plat ă cu cardul

Dreptul de comand ă a fost explicat mai sus.În continuare vom explica cum poate
clientul s ă-și vizualizeze comanda, s ă ceară nota de plat ă, sau să plătească online.Pentrul
afișarea comenzilor efectuate am folosit un control GridView care va fii înc ărcat din cod cu un
DataSet obținut în urma interog ării tabelei.

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

51
 

Figura 5.6 Pagina Client.aspx
După cum se vede în Figura 5.6 toate butoanele necesare sunt plasate într-o singur ă
pagină,ele sunt setate Visible=false, dar vor fii puse pe true atunci când este cazul.Deoarece
interogarea se face pe aceea și tabelă de comenzi, pentru a nu exista probleme în vizualizarea
unui produs care nu a fost comandat de acela și user, vom folosi ca motiv de interogarea data la
care se conecteaz ă clientul și cere ca ora s ă fie mai mare decât ora la care s-a conectat.Ini țial el
va primit un mesaj ” Nu aveti comenzi momentat.Click pe meniu pentru a comanda.”. După ce
clientul va comanda primul produs, el poate s ă-și vizualizeze comanda, iar sub tabelul de
comenzi va vedea permanent nota de plat ă, pe care dac ă o cere aceasta va fii inserat ă în
tabelul notaplata .
   string ora= Session[ "ora" ].ToString();  
             try 
             { 
                 string [] data = DateTime .Now.ToString().Split( ' '); 
                 MySqlConnection  con = new MySqlConnection (sCon);  
                 String s = "select  nume_produs,timp_preparare,ora,cantitate,pret  from com‐
enzi where client='"  + nume + "' and data='" +data[0]+ "' and ora >= '"+ora+ "'"; 
                 MySqlDataAdapter  dat = new MySqlDataAdapter (s, con); 
                 DataSet  ds = new DataSet ();

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

52
                  MySqlCommand  cmd = new MySqlCommand (s,con ); 
                 dat.SelectCommand  = cmd; 
                 dat.Fill(ds,  "comenzi" ); 
                 GridView1.DataSource  = ds.Tables[0];  
                 GridView1.DataBind();  
                 con.Close();  
                 if (GridView1.Rows.Count  == 0) 
                 { 
             
                    Label1.Text  = "Nu aveti comenzi  momentat.Click  pe meniu pentru a coman‐
da." ; 
                     Label1.Visible  = true ; 
                 } 
 
                 else 
                 { 
                     Button2.Visible  = true ; 
                     Button3.Visible  = true ; 
                     try 
                     { 
                         MySqlConnection  con2 = new MySqlConnection (sCon);  
                         String s1 = "select  sum(pret)  from comenzi  where client='"  + nume 
+ "'and data='"  + data[0]  + "' and ora>='"  + ora + "'"; 
                         con2.Open();  
                         MySqlCommand  cmd1 = new MySqlCommand (s1, con2); 
                         MySqlDataReader  myreader  = cmd1.ExecuteReader();  
                         myreader.Read();  
                          suma = myreader[0].ToString();  
                         Label2.Text  = "Total:"  + suma + " Lei" ; 
                         Label2.Visible  = true ; 
                         con2.Close();  
                     } 
                     catch (Exception  ex) { Response.Write(ex.ToString());  } 
                 } 
             } 
             catch (Exception  ex) 
             { 
                 Response.Write(ex.ToString());  
             } 
  protected  void Button2_Click( object sender,  EventArgs  e) 
     { 
         try 
         { 
             MySqlConnection  con2 = new MySqlConnection (sCon);  
             con2.Open();  
             DateTime  data = DateTime .Now; 
             string [] split = data.ToString().Split( ' '); 
             String s2 = "insert  into notaplata(nume_client,suma,data,ora,achitat)  val‐
ues('" +nume +"'," +Convert .ToDouble(suma)+ ",'" +split[0]+ "','" +split[1]+ "','nu')" ; 
             MySqlCommand  cmd2 = new MySqlCommand (s2, con2); 
             cmd2.ExecuteNonQuery();  
             con2.Close();  
             Label7.Text  = "Nota de plata a fost trimisa!" ; 
             Label7.Visible  = true ;

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

53
          } 
         catch (Exception  ex) 
         { 
             Response.Write(ex.ToString());  
         } 
     } 
Deoarece data actual ă are un format ”MM/DD/YYYY HH:MM:SS PM/AM” vom realiza
un split după spațiu pentru a ob ține data și ora.Cu func ția DateTime.Now vom obține data și ora
actuală.
Dacă utilizatorul care este conectat este unul de tip osp ătar atunci el va avea dreptul
să:
 vizualizeze comenzile dup ă data selectat ă pe calendar
 să modifice parolele clien ților
 să vizualizeze notele de plat ă și să le modifice statusul

În pagina osp ătarului se g ăsește un control Calendar, la selectarea unei date din
calendar se preia automat data selectat ă în control, acest lucru este posibil prin ad ăugarea
event -ului onSelectionChanged="GetSelectedDate1" , în codul controlului, în pagina
Ospătar.aspx .
<asp:Calendar ID="Calendar2" runat="server" onSelectionChanged ="GetSelectedDate1"
Visible="False"></ asp:Calendar >
Codul C# de preluare a datei și afișare a comenzilor din data respectiv ă este:
protected void GetSelectedDate( object sender, EventArgs e)
{
HiddenField2.Value = Calendar1.SelectedDate.ToString();
try
{
string[] data = HiddenField2.Value.ToString().Split( ' ');

MySqlConnection con = new MySqlConnection (sCon);
String s = "select * from comenzi where data='" + data[0] + "'";
MySqlDataAdapter dat = new MySqlDataAdapter (s, con);
DataSet ds = new DataSet();
MySqlCommand cmd = new MySqlCommand (s, con);
dat.SelectCommand = cmd;
dat.Fill(ds, "comenzi" );
tab = ds.Tables[0];

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

54
  GridView1.DataSource = tab;
GridView1.DataBind();
GridView1.Visible = true;
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
TextBox9.Text = "";

if (GridView1.Rows.Count == 0)
{
Button10.Visible = false;

Label18.Text = "Nu exista comenzi la aceasta data!" ;
}
else
{
Button10.Visible = true;

}
}
Data selectat ă este preluat ă într-un control de tip HiddenField, acest lucru este
realizat pentru a putea folosi data selectat ă și în alte func ții. Cu split după spațiu se preia numai
data, deoarece data selectat ă este de tipul ”MM/DD/YY YY HH:MM:SS PM/AM”.Pe urm ă se
face o interogare în func ție de data ob ținută, valorile ob ținute vor fii plasate GridView -ului.În
urma popul ării vom întreba dac ă există date în GridView, dacă nu exist ă date vom afi șa un
mesaj ” Nu exista comenzi la aceasta data!” și vom ascunde Label-urile, TextBox-urile și
butoanele necesare modific ării unei comenzi .Căsuțele text existente vor fii golite de informa ții,
întrucât noi comenzi sunt disponibile și nici una nu este selectat ă.
Umplerea TextBox – urilor cu datele aferente comenzii selectate din GridView se face
din codul C#.Dar pentru a avea acces la un eveniment al GridView –ului acest lucru trebuie
specificat în codul controlului din pagina .aspx, adăugând onrowcom-
mand="GridView1_RowCommand2".
<asp:GridView ID="GridView1" runat="server" Height="153px" Width="455px" BackCo-
lor="#DEBA84" BorderColor ="#DEBA84" BorderStyle ="None" BorderWidth ="1px" CellPad-
ding="3" CellSpacing ="2" OnSorting ="SortRecords" AllowSorting ="true" DataKey-
Names="nr_crt" onrowdeleted ="GridView1_RowDeleted" onrowdelet-
ing="GridView1_RowDeleting" onrowediting ="GridView1_RowEditing" onrowupdat-
ing="GridView1_RowUpdating" onrowcancelingedit ="GridView1_RowCancelingEdit" onse-
lectedindexchanged ="GridView1_SelectedIndexChanged1" onrowcom-
mand="GridView1_RowCommand2" >
<RowStyle BackColor ="#FFF7E7" ForeColor ="#8C4510" />

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

55
  <PagerStyle BackColor ="#C6C3C6" ForeColor ="Black" />
<Columns>
<asp:CommandField ShowSelectButton ="True" />
</Columns>
<FooterStyle BackColor ="#F7DFB5" ForeColor ="#8C4510" />
<PagerStyle ForeColor ="#8C4510" HorizontalAlign ="Center" />
<SelectedRowStyle BackColor ="#738A9C" Font-Bold ="True" ForeColor ="White"/>
<HeaderStyle BackColor ="#A55129" Font-Bold ="True" ForeColor ="White" />
Codul C# va ar ăta astfel:
protected  void GridView1_RowCommand2( object sender,  GridViewCommandEventArgs  e) 
     { 
         if (e.CommandName  == "Select" ) 
         { 
 
             Int32 num = Convert .ToInt32(e.CommandArgument);  
             HiddenField3.Value  = GridView1.Rows[num].Cells[1].Text;  
             TextBox2.Text  = GridView1.Rows[num].Cells[2].Text;  
   … 
             TextBox9.Text  = GridView1.Rows[num].Cells[10].Text;  
         } 
     } 
Pentru a avea acces la comanda select este nevoie ad ăugarea unui câmp în Grid-
View ca în Figura 5.7 .

Figura 5.7 Ad ăugarea câmpului Select în GridView

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

56
 În GridView1_RowCommand2 întrebăm dacă este selectat vreun rând, preluam in-
dex-ul rândului în variabila num, prin conversie.Casetele text vor fii înc ărcate cu datele de pe
rândul selectat.
GridView-ul suport ă opțiunea de sortare, pentru aceasta este nevoie ad ăugarea
atributelor OnSorting="SortRecords" AllowSorting="true" DataKeyNames="nr_crt" în pagina
.aspx . De men ționat este faptul c ă SortRecords este evenimentul care produce sortarea, acesta
este dezvoltat în codul C#. DataKeyNames reprezint ă câmpul primary key al tabelei.Codul
sortării este urm ătorul:
public SortDirection sortDirection
{
get {
if (ViewState[ "SortDirection" ] == null)
{
ViewState[ "SortDirection" ] = SortDirection .Ascending;
}
return (SortDirection )ViewState[ "SortDirection" ];
}
set { ViewState[ "SortDirection" ] = value; }
}
protected void SortRecords( object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
string direction = string.Empty;
if (sortDirection == SortDirection .Ascending)
{
sortDirection = SortDirection .Descending;
direction = " DESC";
}
else
{
sortDirection = SortDirection .Ascending;
direction = " ASC";
}
if (flag == true)
{
try
{

MySqlConnection con = new MySqlConnection (sCon);
con.Open();
String s = "select * from comenzi" ;
MySqlDataAdapter dat = new MySqlDataAdapter (s, con);
DataSet ds = new DataSet();
MySqlCommand cmd = new MySqlCommand (s, con);
dat.SelectCommand = cmd;
dat.Fill(ds, "comenzi" );
DataTable tab = ds.Tables[0];
tab.DefaultView.Sort = sortExpression + direction;
GridView1.DataSource = tab;

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

57
  GridView1.DataBind();
con.Close();
GridView1.Visible = true;
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
else
{
HiddenField2.Value = Calendar1.SelectedDate.ToString();
try
{
string[] data = HiddenField2.Value.ToString().Split( ' ');

MySqlConnection con = new MySqlConnection (sCon);
String s = "select * from comenzi where data='" + data[0] + "'";
MySqlDataAdapter dat = new MySqlDataAdapter (s, con);
DataSet ds = new DataSet();
MySqlCommand cmd = new MySqlCommand (s, con);
dat.SelectCommand = cmd;
dat.Fill(ds, "comenzi" );
DataTable tab = ds.Tables[0];
DTSamples = tab;
tab.DefaultView.Sort = sortExpression + direction;
GridView1.DataSource = tab;
GridView1.DataBind();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
}
În SortDirection se realizeaz ă un get și set al direc ției de sortare, în func ție de
direcția actual ă de sortare a GridView – ului se va stabili direc ția invers ă a sensului de sortare.Pe
urmă se face afi șarea tabelei cu sensul stabilit.
De asemenea aceste rapoarte ob ținute pot fii transportate în Excel , acest lucru l-am
realizat prin includerea în proiect a unei clase GridViewExportUtil. Codul de leg ătură între
această clasă și GridView este:
protected void Button10_Click( object sender, EventArgs e)
{
GridViewExportUtil .Export( "Customers.xls" , this.GridView1);
}
Dacă se dore ște modificarea statusului comenzii se selecteaz ă din GridView rândul
corespunz ător comenzii, c ăsuțele text vor fii umplute cu datele corespunz ătoare câmpului selec-

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

58
 tat,dar numai câmpul Onorat este disponibil pentru modific ări.Celelalte c ăsuțe text au fost setate
cu proprietatea Enable=false .La apăsarea butonului Modificare,schimb ările vor fii trecute în ba-
za de date și noua tabel ă va fii afișată.
protected void Button3_Click( object sender, EventArgs e)
{
try
{
MySqlConnection con3 = new MySqlConnection (sCon);
con3.Open();
String s3 = "update comenzi set onorat='" +TextBox9.Text+ "' where
nr_crt=" +HiddenField3.Value.ToString();
MySqlCommand cmd3 = new MySqlCommand (s3, con3);
cmd3.ExecuteNonQuery();
con3.Close();
Label11.Text = "Modificari salvate!" ;
Label11.Visible = true;
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}

try
{
string[] data = HiddenField2.Value.ToString().Split( ' ');

MySqlConnection con = new MySqlConnection (sCon);
String s = "select * from comenzi where data='" + data[0] + "'";
MySqlDataAdapter dat = new MySqlDataAdapter (s, con);
DataSet ds = new DataSet();
MySqlCommand cmd = new MySqlCommand (s, con);
dat.SelectCommand = cmd;
dat.Fill(ds, "comenzi" );
tab = ds.Tables[0];
DTSamples = tab;
GridView1.DataSource = tab; //ds.Tables[0];
GridView1.DataBind();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}

}
Pentru realizarea butonului Stergere s-a realizat o comand ă de delete la nivelul tabe-
lei, ștergerea și modificarea s-au realizat dup ă id-ul comenzii selectate care a fost p ăstrat în
HiddenField3 , o dată cu selectarea rândului din tabel ă .

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

59
 protected  void Button4_Click( object sender,  EventArgs  e) 
     { 
         try 
         { 
 
             MySqlConnection  con = new MySqlConnection (sCon);  
             con.Open();  
             String s = "delete  from comenzi  where nr_crt=" +HiddenField3.Value.ToString();  
             MySqlCommand  cmd = new MySqlCommand (s, con); 
             cmd.ExecuteNonQuery();  
             con.Close();  
             
         } 
         catch (Exception  ex) 
         { 
             Response.Write(ex.ToString());  
         } 
         Label11.Text  = "Stergere  efectuata!" ; 
         Label11.Visible  = true ; 
         TextBox9.Text  = ""; 
         … 
         try 
         { 
             string [] data = HiddenField2.Value.ToString().Split( ' '); 
 
             MySqlConnection  con = new MySqlConnection (sCon);  
             String s = "select  * from comenzi  where data='"  + data[0]  + "'"; 
             MySqlDataAdapter  dat = new MySqlDataAdapter (s, con); 
             DataSet  ds = new DataSet (); 
             MySqlCommand  cmd = new MySqlCommand (s, con); 
             dat.SelectCommand  = cmd; 
             dat.Fill(ds,  "comenzi" ); 
             tab = ds.Tables[0];  
             DTSamples  = tab; 
             GridView1.DataSource  = tab; 
             GridView1.DataBind();  
         } 
         catch (Exception  ex) 
         { 
             Response.Write(ex.ToString());  
         } 
     } 
   
În HiddenField2 este păstrată data selectat ă din calenda, acest lucru ne ajut ă ca
după ștergere s ă afișăm tot comenzile din data selectat ă, dar fără cea ștearsă, întrucât aceasta
nu mai exist ă.
De menționat este faptul c ă pagina Ospatar.aspx se va reîmprosp ăta automat la un
două minute.Pentru aceasta am folosit tag-ul meta din hmtl:

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

60
 <meta http-equiv ="refresh" content="120" >

Modificarea parolelor și vizualizarea notelor de plat ă sunt asem ănătoare vizualiz ării și
modificării comenzilor.
Adminstratorul are dreptul :
 de a crea conturi noi
 de a vizualiza rapoarte,la fel ca și ospătarul
 de a alimenta stocul de b ăuturi și ingrediente
 de a modifica parolele clien ților, la fel ca și ospătarul
Atunci când acesta dore ște să creeze un cont nou,va fii redirectat c ătre o pagin ă
Înregistrare.aspx, în cadrul c ăreia se g ăsesc mai multe c ăsuțe text, etichete,un DropDownList
pentru alegerea tipului de utilizator, și două butoane, unul care efectueaz ă inregistrarea sau
celălalt care anuleaz ă înregistrarea.Înregistrarea se va efectua numai când toate condi țiile sunt
îndeplinite:
– toate câmpurile sunt completate
– numele de utilizator nu mai exist ă în baza de date
– parolele coincid
Pentru toate aceste valid ări s-a lucrat cu structura decizional ă if.
protected void Button1_Click( object sender, EventArgs e)
{
if (TextBox1.Text != "" && TextBox2.Text != "" && TextBox3.Text != "" &&
TextBox4.Text != "" && DropDownList1.SelectedValue.ToString() != "" && Text-
Box.Equals(TextBox2.Text, TextBox3.Text))
{
try
{
MySqlConnection con = new MySqlConnection (sCon);
con.Open();
String s1 = "select count(*) from Users where NumeUtilizator='" +
TextBox1.Text + "'";
MySqlCommand cmd1 = new MySqlCommand (s1, con);
cmd1.ExecuteNonQuery();
int temp = Convert.ToInt32(cmd1.ExecuteScalar().ToString());
if (temp == 0)
{
string hash = FormsAuthentica-
tion.HashPasswordForStoringInConfigFile(TextBox2.Text, "MD5").ToString();

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

61
  try
{
String s = "insert into Users values('" + TextBox1.Text +
"','" + hash + "','" + TextBox4.Text + "','" + DropDown-
List1.SelectedValue.ToString() + "')";
MySqlCommand cmd = new MySqlCommand (s, con);
cmd.ExecuteNonQuery();
if (DropDownList1.SelectedItem.ToString() == "Client" )
{
try
{
String s6 = "insert into parole values('" + Text-
Box1.Text + "','" + TextBox2.Text + "')";

MySqlCommand cmd6 = new MySqlCommand (s6, con);
cmd6.ExecuteNonQuery();
}
catch (Exception ex) { Response.Write(ex.ToString());
}
}
Label8.Visible = false;

Label14.Visible = false;
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
else
{
Label8.Visible = true;
}
con.Close();
}

catch (Exception ex)
{
Label1.Text = ex.ToString();
}

}

if (TextBox1.Text == "")
{ Label2.Visible = true; }
else
{ Label2.Visible = false; }

if (TextBox2.Text == "")
{ Label3.Visible = true; }
else { Label3.Visible = false; }
if (!TextBox.Equals(TextBox2.Text, TextBox3.Text))
{
Label7.Visible = true;

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

62
  }
else
{
Label7.Visible = false;
}

if (TextBox3.Text == "")
{ Label4.Visible = true; }
else
{ Label4.Visible = false; }
if (TextBox4.Text == "")
{ Label5.Visible = true; }
else { Label5.Visible = false; }
if (DropDownList1.SelectedValue.ToString() == "")
{ Label6.Visible = true; }
else
{ Label6.Visible = false; }

}
Odată introduse toate aceste câmpuri, și respectate toate condi țiile de mai sus, la
apăsarea butonului înregistrare se realizeaz ă o interogare pe tabel ă prin care se num ără câți
utilizatori au numele ca și cel introdus în prima c ăsuță, doar dac ă acest num ăr este zero se pot
continua interog ările cu privire la condi țiile menționate.
Introducerea parolei în baza de date se face dup ă ce aceasta a fost criptat ă, cu
funcția FormsAuthentication.HashPasswordForStoringInConfigFile , astfel parolele nu vor putea
fii preluate din baza de date.Îns ă parolele clien ților vor fii inserate și în tabela parole.
Căutarea unei b ăuturi, sau a unui ingredient în baza de date se face cu LIKE:
protected void Button8_Click( object sender, EventArgs e)
{
TextBox9.Text = "";
TextBox10.Text = "";
Label11.Visible = false;
try
{

MySqlConnection con = new MySqlConnection (sCon);

String s = "select * from ingrediente where nume_ingredient like '" +
TextBox5.Text.ToString() + "%'";
MySqlDataAdapter dat = new MySqlDataAdapter (s, con);
DataSet ds = new DataSet();
MySqlCommand cmd = new MySqlCommand (s, con);
dat.SelectCommand = cmd;
dat.Fill(ds, "ingrediente" );
GridView1.DataSource = ds.Tables[0];

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

63
  GridView1.DataBind();
con.Close();
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
if (GridView1.Rows.Count == 0)
{
Label8.Visible = true;

}
else { Label8.Visible = false;

}
}

Dacă produsul c ăutat nu a fost g ăsit se va afi șa un mesaj ”  Acest produs nu se
gaseste pe stoc!!!”.
Bucătarul are urm ătoarele drepturi:
 de vizualizare a comenzilor din ziua respectiv ă pe care nu le-a onorat
 de vizualizare și modificare a re țetelor
 de vizualizare și modificare a stocului de alimente

Toate acestea sunt realizate ca și în celelalte pagini prezentate mai sus, la fel ca și
ospătarul, pagina buc ătarului se va actualiza la dou ă minute.
Pentru pagina de conectare LogIn.aspx am folosit dou ă etichete și două casete
text.Atunci când se apas ă butonul conectare se vor realiza ni ște interog ări asupra tabelei
users .Dacă se întroduce un utilizator care nu exist ă se va afi șa mesajul ”Utilizator Inexistent”,
dacă parola introdus ă este gre șită se va afi șa mesajul ” Parolă greșită” .Dacă unul sau ambele
câmpuri nu au fost completate se va afi șa un mesaj ” Introduceti utilizatorul/parola”.
try
{
MySqlConnection con = new MySqlConnection (sCon);
String s = "select count(*) from Users where NumeUtiliza-
tor='"+TextBox1.Text+ "'";
MySqlCommand cmd = new MySqlCommand (s, con);

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

64
  con.Open();
int temp = Convert.ToInt32(cmd.ExecuteScalar().ToString());
if(TextBox1.Text!= "")
{
if (temp == 1)
{
string hash = FormsAuthentica-
tion.HashPasswordForStoringInConfigFile(TextBox2.Text, "MD5").ToString();
String s1 = "select Parola from Users where NumeUtilizator='" +
TextBox1.Text + "' ";
MySqlCommand cmd1 = new MySqlCommand (s1, con);
string password = cmd1.ExecuteScalar().ToString();

if (TextBox2.Text == "")
{
Label6.Visible = true;
… }
else
{
if (password.Equals(hash))
{
Session[ "Nume"] = TextBox1.Text;
String s2 = "select TipUtilizator from Users where NumeUti-
lizator='" + TextBox1.Text + "' and Parola='" +hash+"'";
MySqlCommand cmd2 = new MySqlCommand (s2, con);
MySqlDataReader reader= cmd2.ExecuteReader() ;
reader.Read();
string tip=reader[0].ToString();
Session[ "New"] = tip;
Session.Timeout = 1200;
string[] data= DateTime .Now.ToString().Split( ' ');
Session[ "ora"] =data[1];
switch(tip)
{

case "Ospatar" : { Response.Redirect( "Ospatar.aspx" );
break; };
case "Client" : { Response.Redirect( "Client.aspx" );
break; }

case "Bucatar" : { Response.Redirect( "Bucatar.aspx" );
break; };
case "Administrator" : {
Response.Redirect( "Administrator.aspx" ); break; }
}
reader.Close();
}
else
{
Label3.Visible = true;
Label3.Text = "Parola Gresita" ;
}
}
}
else

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

65
  {
Label4.Visible = true;
Label4.Text = "Utilizator Inexistent" ;
}

}
else
{
Label5.Visible = true;
if (TextBox2.Text == "")
{
Label6.Visible = true;
}
}
}
catch (Exception ex)
{
Label1.Text = ex.ToString();
}
Prima dat ă se interogheaz ă faptul că utilizatorul exist ă în baza de date,dac ă acesta
există se pot continua verific ările, dacă nu se afi șează mesajul ”Utilizator Inexistent”. Dacă
există utilizatorul atunci textul introdus în a doua c ăsuță text va fii criptat și se va realiza o inte-
rogare pe tabel ă dacă parola din tabel ă coincide cu cea criptat ă recent, dac ă nu coincide se va
afișa mesajul ” Parolă greșită”.Dacă toate datele sunt corecte atunci în func ție de tipul utilizatoru-
lui, printr-o instruc țiune switch , aplicația redirecteaz ă utilizatorul spre pagina corespunz ătoare
tipului său de utilizator.Vor fii stocate în sesiuni ora de intrare, tipul utilizatorului și numele,
întrucât aceste date vor fii folosite și în celelalte pagini.
Pentru deconectare ,atunci când se conecteaz ă un utilizator , el prime ște instant
acces la butonul de deconectare.De oriunde este accesat acest buton, el are aceea și
funcționalitate, întrerupe sesiunea utilizatorului și redirecteaz ă spre pagina de conectare Lo-
gIn.aspx .
protected  void Page_Load( object sender,  EventArgs  e) 
 { 
      if (Session[ "New" ] != null ) 
      { 
          string nume = Session[ "Nume" ].ToString();  
          Session[ "New" ] = null ; 
          Session[ "Nume" ] = null ; 
          Response.Redirect( "LogIn.aspx" ); 
 
      }

CAP5.IMPLEMENTAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

66
       else { Response.Redirect( "LogIn.aspx" ); } 
 }

67
 Capitolul 6. Utilizarea aplica ției
 
6.1 Interfa ța cu utilizatorul
 
În momentul acces ării aplica ției se va înc ărca pagina “Default.aspx” ilustrată în figură
(Figura 4.2 ).

Figura 6.1 Pagina „Acas ă” a aplica ției
  Interfața din figur ă (Figura. 4.2) este format ă din mai multe p ărți. În partea de sus a pagi-
nii se afl ă un „header” ce cuprinde o poz ă din interiorul restaurantului,tot aici ,în partea dreapt ă
sus, se afl ă linkul către pagina de autentificare, butonul “Conectare” . Meniul poate fii accesat

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

68
 atât din partea de sus a paginii cât și din „ footer” .La accesarea paginii „Acasă” utilizatorii vor
vizualiza cateva fraze, cu caracter descriptiv, menite s ă instige curiozitatea clientului de a vizita
localul.
Accesarea butonului “Meniu” ( Figura 6.2 ) conduce la vizualizarea meniului
restaurantului,accesând aceste butoane se pot vizualiza preparatele care fac parte din
categoria selectat ă.Aceeași situație este valabil ă și în cazul butonului „Băuturi” .

Figura 6.2 Meniul restaurantului

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

69
 Accesând butonul ”Galerie” ( Figura 6.3 ) vom putea vizualiza poze atât din interiorul
cât și din jurulul restaurantului.Prin ap ăsarea click- ului pe una dintre poze se va deschide un
slideshow care va m ări poza.Prin aducerea mouse -lui în partea dreapt ă a pozei vom observa
apariția butonului ”înainte”, prin ap ăsarea lui se trece la poza urm ătoare, la fel se întâmpl ă și
pentru poza precedent ă, în partea stâng ă a pozei.Închiderea slideshow-ului se face prin
apăsarea butonului ”X”.De asemenea sub poz ă vom vizualiza câte poze de ține galeria și
numărul curent al pozei selectate.

Figura 6.3 Galeria restaurantului
Butonul ”Servicii” va avea func ționalitate numai dac ă utilizatorul este conectat,altfel
vom fii redirecta ți către pagina de conectare( Figura 6.4 ).Dacă există utilizator conectat, în func ție
de drepturile sale aplica ția va avea diferite func ționalități noi.

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

70
 
Figura 6.4 Pagina de conectare a restaurantului
Atunci când utilizatorul conectat este unul de tip client, paginiile de Meniu și Băuturi
vor permite realizarea de comenzi online prin apari ția butoanelor ”Comand ă” și apariția câmpului
cantitate( Figura 6.5 ).Utilizatorul poate selecta un num ăr de produse cuprins între unu și cinci,la
apăsarea butonului ” Comand ă” ospătarul și bucătarul vor primi instant cererea clientului. Dac ă
produsul comandat nu este comandat se va afi șa un mesaj de avertizare,dac ă comanda poate
fii onorat ă și în acest caz se va afi șa un mesaj de în științare .Datele de conectare vor fii primite
de la osp ătar, odat ă cu așezarea la mas ă.Numele utilizatorului va fii corespondentul mesei la
care este a șezat clientul, iar parola primit ă va fii valabil ă doar la o singur ă autentificare, întrucât

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

71
 odată cu conectarea clientului la un scurt interval aplica ția va genera o nou ă parolă,care poate fii
obținută numai de c ătre client sau administrator.

Figura 6.5 Pagina de B ăuturi cu posibilitate de comand ă
Odată ce comenzile au fost plasate, clientul î și poate vizualiza comanda ap ăsând
butonul ”Servicii”( Figura 6.5 ).Tot aici vedem c ă se calculeaz ă automat un total al comenzii.Se
poate cere nota de plat ă prin ap ăsarea butonului ”Cere nota de plat ă”, și ca directiv ă de
dezvoltare m-am gândit la o eventual ă plată cu cardul( Figura 6.6 ), pe viitor.Pentru a se
deconecta utilizatorul poate ap ăsa butonul ”Deconectare” din stânga sus sau jos a paginii .

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

72
 
Figura 6.6 Pagina clientului

Figura 6.7 Plata cu cardul

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

73
 Ospătarul are dreptul de a vizualiza comenzile din data curent ă, dar și din alte date pe
care le poate selecta din calendarul afi șat în pagina lui.Prin selectarea datei el va ob ține o
afișare a comenzilor din ziua respectiv ă(Figura 6.8 ).Prin ap ăsarea butonului ”Raport comenzi”
se vor exporta în Excel comenzile din ziua selectat ă.De asemenea poate s ă vizualizeze toate
comenzile din restaurant, dar și să modifice statusul comenzilor.Modificarea o va realiza prin
selectarea din tabel a liniei aferente comenzii dorite, se vor umple c ăsuțele text cu date despre
această comand ă, modificarea se poate realiza numai asupra câmpului onorat , celelalte fiind
dezactivate.Pentru salvarea modific ărilor se apas ă butonul Modifică, iar pentru a șterge
comanda respectiv ă se va ap ăsa butonul Sterge.

Figura 6.8 Pagina osp ătarului

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

74
 Ospătarul mai are posibilitatea de a sorta comenzile în func ție de fiecare câmp, pentru
a realiza sortarea el va fii nevoit s ă facă click asupra capului de tabel în func ție de care vrea s ă
facă sortarea.La primul click datele se vor sorta într-o anumit ă ordine iar la urm ătorul în ordine
inversă celei anterioare.
Pentru a vizualiza parolele clien ților se apas ă butonul Parole , în urma c ăruia se vor
afișa toate conturile clien ților cu parolele aferente,prin selectarea clientului dorit, se vor înc ărca
datele în c ăsuțe text unde se vor putea face modific ările.La fel se întâmpl ă și în cazul notelor de
plată, care se pot afi șa în func ție de dat ă ca și comenzile.Prin aceea și metodă de modificare a
datelor prezentat ă în cazul comenzilor și al parolelor, se vor realiza modific ările și pentru notele
de plată.De asemenea ca și în cazul comenzilor se vor putea ob ține rapoarte excel pentru
notele de plat ă selectate.Deconectarea utilizatorului se face prin accesarea butonului
Deconectare.
Figura 6.9 Pagina de comenzi a buc ătarului
Bucătarul are posibilitatea de a vizualiza comenzile din ziua respectiv ă care nu au fost
onorate.Ora la care s-a facut comanda și timpul de preparare vor fii utile pentru acesta, pentru a
știi cât timp mai are la dispozi ție pentru a onora comanda.Tot aici se poate schimba statusul

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

75
 comenzii, prin modificarea câmpul ui onorat el va elimina din tabel ă comenzile pe care le-a
onorat deja( Figura 6.9) .
De asemenea el mai poate vizualiza și căuta rețete prin accesarea butonului
Rețete.La fel și pentrul stocul de ingrediente,aici mai are posibilitatea de ob ținere a unui raport
de stoc zero al ingredientelor.

Figura 6.10 Pagina administratorului
Administratorul are posibilitatea de a crea noi conturi( Figura 6.11 ),de a genera
rapoarte despre comenzi la fel ca și ospătarul,de a alimenta stocul de ingrediente și băuturi la fel
ca și bucătarul, și de a modifica parole la fel ca și ospătarul.
Pentru a crea un cont nou acesta este nevoit s ă introduc ă datele cerute pentru
înregistrare, în cazul în care aceste date nu sunt valide el va primi un avertisment s ă introduc ă
date valide.

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

76
 
Figura 6.11 Pagina de inregistrare
Datele de contact pot fii ob ținute prin ap ăsarea butonului ”Contact” (Figura 6.12 ) ,aici
există și o hartă,menirea ei este s ă ajute la localizare fizic ă a localului , tot aici exist ă și un buton
de redirectare c ătre pagina de Facebook a restaurantului.

CAP6.UTILIZAREA APLICA ȚIEI FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

77
 
Figura 6.12 Pagina de cont act a restaurantului

6.2 Testarea aplica ției
 
Testarea aplica ției s-a realizat pe m ăsură ce aceasta a fost scris ă.Fiecare buton nou
adăugat a fost testat în combina ție cu toate celelalte butoane existente deja, dar s-au testat și
celelalte func ționalități deja existente, odat ă cu intoducerea unui element nou, pentru a verifica
dacă nu s-au introdus regresii.

78
 Capitolul 7. Concluzii
 
7.1 Ce s-a realizat?
 
Ceea ce s-a realizat în cadrul acestei lucr ări de diplom ă este o aplica ție de plasare de
comenzi online, în cadrul unui restaurant Aceast ă aplicație a fost dezvoltat ă cu ajutorul
tehnologiei ASP.NET care ușurează munca programatorului prin modul design care permite
plasarea de controale necesare dezvolt ării aplicației.
Această aplicație este foarte util ă pentru mesele organizate în scop festiv în care
sărbătoritul este cel care pl ătește toată consuma ția,acesta va știi în orice moment care este
suma de plat ă fără a fii nevoie s ă ceară nota osp ătarului, sau s ă-l agaseze pe acesta cu
întrebări.
De asemenea aceast ă aplicație reprezint ă o solu ție de eficientizare a onor ării
comenzilor într-un restaurant.De multe ori se întâmpl ă ca un osp ătar să uite de un anume
produs comandat sau s ă-l inlocuiasc ă cu alt produs,având la dispozi ție o asemenea aplica ție va
putea consulta la orice moment tabela de comenzi și va stii exact unde și ce trebuie s ă onoreze.
Bucătarii vor fii ajuta ți de aceast ă aplicație pentru a finaliza în timp util produsele
comandate,el va stii ora exacta la care s-a plasat comanda.Deoarece la comandarea unui produs se scad ingredientele necesare prepar ării produsului comandat, administratorul va
realiza u șor un raport al ingredientelor și băuturilor care nu mai exist ă pe stoc.Acest lucru îl va
ajuta la aprovizionare.
Eu consider c ă această aplicație poate fii pus ă în practic ă,poate cu ni ște cerințe mai
exacte de la client pentru a satisface cât mai multe din necesit ățile sale.
7.2 Direc ții de dezvoltare
O bună direcție de dezvoltare ar fii cea realizare a pl ății comenzii cu cardul,dar
probabil acest lucru ar necesita un contract cu o anumit ă bancă, necesit ă un timp mai mare de
investigare și probabil o investi ție financiar ă semnificant ă.

CAP7.CONCLUZII FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE

79
 De asemenea ca o directiv ă de viitor ar putea fii luat ă în calcul o dezvoltare a p ărții de
gestiune a restaurantului, a facturilor, salariilor angaja ților.
Consider c ă și un sistem de organizare a marilor evenimente, precum nun țile
,botezurile ar putea fii considerat ca o direc ție de dezvoltare,acesta poate fii util pentru
păstrarea: datei exacte a evenimentului, num ărului de participan ți, meniului ales, decorului
ales.Toate acestea vor facilita viitoarele program ări de mari evenimente.

80
 Bibliografie
1. [***10,a] http://en.wikipedia.org/wiki/Microsoft_Visual_Studio
2. [***11,b] http://msdn.microsoft.com/en-us/library/w7w4sb0w.aspx
3. [***11,c] http://asp-net-example.blogspot.ro/2008/12/aspnet-querystringparameter-
example-how.html
4. [***10,d] http://www.cs.ubbcluj.ro/~vcioban/Bistrita/Manuale/Manual_POO_si_Vizuala.pdf
5. [***10,e] http://en.wikipedia.org/wiki/Internet_Information_Services#IIS_Features
6. [***11,a] http://punctnet.blogspot.ro/2009/01/structura-unei-aplicatii-web-in-asp-net.html
7. [***11,b] http://msdn.microsoft.com/en-us/library/w7w4sb0w.aspx
8. [***11,c] http://asp-net-example.blogspot.ro/2008/12/aspnet-querystringparameter-
example-how.html
9. [***11,d] http://www.scribd.com/doc/84704702/Manual-ASP#outer_page_60
10. [Lar05] Larry Ullman, PHP pentru WORLD WIDE WEB în imagini, Editura „Teora”,
11. [Luk07] Luke Welling, Laura Thomson , Dezvoltarea aplica țiilor Web cu PHP și MySQL,
Editura „Teora”, ISBN 10: 1-59496-051-8, Bucure ști 2007.

Similar Posts