APLICATIE PENTRU UN MAGAZIN VIRTUAL
CUPRINS s5g1gm
1. INRODUCERE
1.1. CE ESTE PHP?
1.2. SQL MySQL
1.3. TEMA LUCRARII
NECESITATEA ELABORARII APLICATIEI
1.4. SPECIFICATII DE DEFINITIE
2. MEMORIU TEHNIC
2.1. APLICATIE CENTRATA PE BAZE DE DATE
2.2. ABORDAREA METODICA A ACTIUNII DE PROIECTARE A APLICATIEI ANALIZA PROIECTARE
Diagrama Entitate-Relatie
Diagrama Functionala Tipul arhitecturii pentru aplicatia creata IMPLEMENTARE
TESTARE DOCUMENTARE
3. MEMORIU JUSTIFICATIV
3.1. SCHEMA BAZEI DE DATE
3.2. CONTRIBUTII PERSONALE
4. CAIET DE SARCINI
5. MANUAL DE OPERARE
5.1 INSTALARE
5.2 UTILIZARE
6. DEZVOLTARI ULTERIOARE BIBLIOGRAFIE ANEXE 1. ANEXA TABELE SI CAMPURI
DIN TABELE 2. ANEXA COD SQL 3. ANEXA COD 4. ANEXA TABELE 5. ANEXA FIGURI 1.Introducere
In partea introductiva a lucrarii vom prezenta cateva cuvinte despre
PHP si MySQL, scopul aplicatiei, cerinta aplicatiei, posibilitatile de utilizare
practica, precum si notiunile de baza utilizate de catre clienti, notiuni utilizate
la comanda unor produse online.
De asemenea, din partea introductiva va rezulta si necesitatea dezvoltarii unei
astfel de aplicatii si implicatiile pe care le are utilizarea acesteia in
cadrul activitatii de cumparare (comanda ) si evidenta clientilor
care au cumparat ceva si deci folosit aplicatia.
1.1Ce este PHP?
Am ales limbajul PHP pentru cu seamana cu limbajul C, este free, usor
de configurat.
PHP este un limbaj de scriptare pe partea de server proiectat anume pentru Web.
PHP a fost conceput in 1994 si a fost initial munca unui singur om, Rasmus
Lerdorf.
Intr-o pagina HTML putem ingloba cod PHP care va fi executat
la fiecare vizitare a paginii. Codul PHP este interpretat pe serverul Web si
genereaza un cod HTML sau o alta iesire care va fi vazuta
de vizitator.
Este una dintre cele mai interesante tehnologii existente in prezent,
deoarece imbina caracteristici dintre cele mai complexe cu simplitatea
in utilizare. Ca si alte limbaje de scripting pentru Web, PHP permite
furnizarea unui continut Web dinamic, adica un continut Web care se modifica
automat de la o zi la alta sau chiar de la un minut la altul. In fiecare
zii se introduc produse noi in baza de date, se schimba preturi, se pot
introduce noi functionalitati pentru aplicatie si toate aceste modificari
au nevoie de un mediu de programare care sa nu se deterioreze si sa suporte
modificari frecvente.
Continutul Web este un element important in sustinerea traficului unui
site Web; de regula vizitatorii nu vor mai revenii la o pagina Web care
contine aceleasi informatii ca si cele prezentate la ultima vizita.
Spre deosebire de limbajele de scripting, precum JavaScript, PHP ruleaza
pe serverul Web nu in browserul Web.
In consecinta, PHP poate obtine accesul la fisiere, baze de date
si la alte resurse inaccesibile programului JavaScript. Pentru a putea lucra
cu Asp sau cu alte limbaje inafara de PHP ar trebui sa cunosc Visual Basic sau
Java
1.2 SQL si MySQL
MySQL este un sitem de gestiune a bazelor de date relationale foarte rapid si
robust. O baza de date ne permite sa stocam, sa
cautam, sa sortam si sa regasim datele in
mod eficient. Serverul MySQL controleaza accesul la date pentru a garanta
ca mai multi utilizatori pot lucra simultan cu acestea. Deci MySQL este
un server multi-user (mai multi utilizatori) si multi-thread (mai multe fire
de executie). Utilizeaza SQL (Structured Query Language), limbajul standard
de interogare a bazelor de date din toata lumea.
SQl este limbajul standard pentru accesarea sistemelor de gestiune a bazelor
de date relationale (SGBDR). Este un limbaj relative simplu dar foarte puternic,
care poate obtine accesul la datele stocate in mai multe tabele, poate
filtra datele dorite si poate sorta, rezuma si afisa rezultatele.
Instructiunile SQL trebuie incorporate in scripturile PHP astfel incat
programele noastre PHP sa poata lucra cu bazele de date relationale.
Utilizand SQL, este posiblil accesul la datele stocate intr-o baza
de date relationala fara a scrie un program de aplicatie,
permitand frecvent evitarea intarzierilor si a costurilor
implicate de programarea personalizata.
Utilizarea bazelor de date MySQL
PHP include o biblioteca de functii care furnizeaza o interfata
cu sistemul MySQL de gestiune a bazelor de date. Folosind aceste functii, un
program PHP poate obtine accesul la datele rezidente dintr-o baza de
date MySQL si le poate modifica.
Majoritatea interractiunilor cu o baza de date se desfasoara
dupa un model secvential simplu:
• Se deschide o conexiune cu serverul MySQL
• Se specifica baza de date la care se va obtine accesul
• Se emit interogari SQL, se obtine accesul la rezultatele interogarilor
si se executa operatii non-SQL
• Se inchide conexiunea cu serverul MySQL
1.3Aplicabilitate
Aplicatia este destinata tuturor persoanelor care navigheaza pe internet
(au acces la internet) doresc sa cumpere produse sau doar sa afle informatii
despre anumite produse si care nu au timp pentru a vizita magazine. In
plus aplicatia are mai multe categorii de produse (cosmetice, flori etc) .
Se urmareste crearea unei aplicatii care sa permita comanda
unor produse online; comenzi care sunt verificate de administratorul aplicatiei
si care vor fi livrate in functie de anumite criterii.
Aplicatia are urmatoarele functionalitati:
• Posibilitatea de a naviga prin categoriile de produse
• Posibilitatea de a vizualiza un produs si marirea imaginii
• Posiblitatea de a alege un produs si cantitatea dorita
• Posibilitatea de a vizualiza produsele aflate in cos si suma totala
de achitat
• Posibilitatea de a modifica cantitatea unui anumit produs
• Posibilitatea de a renunta la toate produsele din cos
1.4Spectificatii de definitie
In urma vizitarii mai multor site-uri de acest gen cu functionalitati
asemanatoare si a analizari temei (cerintei) aplicatiei au rezultat o
serie de notiuni specifice acestui domeniu, care vor fi utilizate la faza de
implementare sub forma unor elemente de proiectare.
Notiunea categorii produse arata clasele de produse. Sunt identificate
prin denumirea care reprezinta aspectul mai general si comun al tipurilor
de produse si produselor care le contin. Intr-o categorie de produse se
pot include tipuri de produse sau produse fara tip adica
care fac parte dintr-o anumita categorie si care nu mai au nevoie de
o descriere comuna rezumata la un tip (de produs).
Notiunea tip produs reprezinta o clasificare a produselor dupa
anumite caracteristici comune. Se identifica printr-un id (unic), denumire,
id-ul categoriei din care face parte acest tip de produs si o poza.
Produsul este obiectul care poate fii cumparat, vizializat prin marirea
pozei atasta si care se identifica printr-o denumire, anumite
cacteristici, pret si o poza.
Notiunea de client reprezinta acea persoana care a cumparat (comandat)
produse de la magazinul nostru virtual si se identifica prin id si datele
personale (nume, prenume, sex, e-mail, telefon).
Adresa contine, adresele (datele mai importante de identificare) a tuturor clientilor
. Pentru ca datele despre un anumit client sa fie memorate in baza
de date acesta trebuie sa emita o cerere de aprovizionare.
Notiunea de cerere de aprovizionare este alcatuita din doua elemente
mai importante comanda propriu-zisa si datele clientului care o efectueaza.
Se identifica printr-un id, o data la care a fost efectuata cererea
si contine toate elementele de comanda care alcatuiesc comanda
respectiva.
Deci notiunea de comanda se identifica printr-un id (care este
unic pentru fiecare comanda), pretul total (suma care trebuie achitata
de client in moentul livrarii) si data la care a fost facuta
comanda. O comanda se compune din unul sau mai multe elemente de comanda;
Notiunea de element de comanda reprezinta de fapt un produs si
cantitatea pe care clientul doreste sa o cumpere din acest produs. Se
identifica prin id-ul comenzii, al elementului de comanda, id-ul
produsului ales, cantitatea dorita si pretul in functie de numarul
de bucati.
Notiunea de livrare inseamna trimiterea produselor la domiciliu
si confirmarea ca au fost primate de catre clientul care l-ea comandat
printr-o semnatura si se identifica prin id-ul livrarii,
id-ul comenzii care a fost livrata si data la care s-a efectuat livrarea.
2.Memoriu Tehnic
2.1 Aplicatii cu baze de date
O aplicatie este in principiu o colectie software consolidata cu scopul
de a rezolva un set dat de probleme. Rezolvarea problemelor prin punerea in
practica a software-ului se numeste software engineering.
Desi de multe ori nu ne dam seama, folosim in permanenta bazele
de date. Ori de cate ori selectam un produs, sau daca efectuam
o cautare (de la un magazin virual) folosim o baza de date. Baza
de date care este interogata (cu ajutorul instructiunilor limbajului
SQL) si se face o selectie dupa niste criterii ( transmise prin anumite
metode GET, POST din php etc.)
Notiunea de baza de date este strans legata de notiunea de date, care
refera „fapte culese din lumea reala”. Baza de date se refera la
un volum mare de date, care sunt stocate pe suport fizic; ea reprezinta, in
cazul sistemului computerizat, echivalentul arhivei din viata reala. Poate fii
asemanata cu un biblioraft care este pur si simplu un loc fizic
in care pot fii stocate date, indiferent care ar fi ele, sau cum ar fi
structurate.
Pentru o baza de date cel mai important lucru este manipularea datelor continute
in acea baza de date. Aceasta „manipulare” se refera la operatiile
care se pot efectua asupra datelor: operatii de adaugare a unor date noi, operatii
de regasire, de modificare, de stergere a datelor existente (care se realizeaza
cu ajutorul instructiunilor limbajului SQL).
In continuare voi rezuma argumentele care au stat la temelia alegerii
pe care am facut-o -; alegerea unei aplicatii centrata pe baze de date.
Aveam nevoie ca aplicatia sa permita stocarea unui volum mare de date (categorii,
tipuri de produse; produse; informatii despre clienti, comenzi etc), la care
sa existe acces tot timpul. Se stie ca in cazul bazelor de date, accentul
este pus pe operatiile de memorare si regasire, efectuate asupra unor volume
mari de date si mai putin asupra operatiilor de prelucrare a datelor, care este
domeniul altor categorii de aplicare a informaticii. Acest aspect a constituit
pentru mine argumentul principal, care m-a determinat sa aleg acest tip de aplicatie.
- posibilitatea stocarii unui volum relativ mare de informatii, precum si accesul
ulterior la aceste informatii;
- remanenta informatiei, care in cazul unei aplicatii standard, fara baze
de date, era incerta. Astfel, utilizatorul aplicatiei va avea posibilitatea
sa verifice la un moment dat comenzile efectuate la o anumita data, clientii
care au comandat ceva.
- simplificarea procesului de calcul, care in cazul calculului tabelar
ar fi avut o complexitate ridicata, fara a avea un control real asupra fluxului
de informatie gestionat;
- transparenta totala a implementarii, utilizatorul aplicatiei nu trebuie sa
cunoasca modalitatile efective de implementare, modul de stocare a datelor,
verificarile de corectitudine a informatiilor introduse. Utilizatorul nu trebuie
sa cunoasca ce se intampla cu o informatie introdusa in sistem,
dar in acelasi timp acesta trebuie sa aiba acces la informatia respectiva;
- fiind vorba de sume de bani, securitatea metodelor de calcul trebuie sa fie
ridicata, trebuie sa fie eliminata pe cat posibil posibilitatea introducerii
de erori in rezultatul final, iar o aplicatie care utilizeaza baze de
date reuseste sa atinga acest obiectiv. In acest sens sunt necesare o
serie de verificari la introducerea de informatii in sistem, care sa evite
aceste erori(cum ar fi de exemplu verificarea ca la introducerea unui produs
in cos sau, sa nu poata fi introduse valori negative).
Doresc ca baza de date pe care o utilizez in aplicatia mea, magvir sa
memoreze toate comenzile efectuate si datele despre toti clientii care au comandat
ceva.
2.2 ABORDAREA METODICA A ACTIUNII DE PROIECTARE A APLICATIEI
Dezvoltarea unui sistem este o activitate laborioasa ce cuprinde o multitudine
de sub-activitati("tasks") desfasurate intr-o maniera metodica.
Aceste sub-activitati pot fi grupate in etape importante. Fiecare etapa
are definite clar elementele livrate (adica ce produse finale sunt obtinute
la incheierea etapei) etapelor ulterioare.
In cadrul fiecarei etape (stadiu) sub-activitatile tind sa fie de scurta
durata si pot fi estimate cu usurinta. Fiecare sub-activitate este divizata
in mai multe sub-sub-activitati. O anumita sub-sub-activitate se poate
repeta de un numar de ori din diferite motive.
Vom discuta despre dezvoltarea pe baza modelului CASE(Computer-Aided Szstems
Engineering).
Prezentam in mare etapele importante de dezvoltare, conform acestui model,
fara a insista cu detalii asupra metodelor si sub-activitatilor corespunzatoare
fiecarei etape :
- etapa de strategie -; obiectivul este de a produce un set de modele de
business, un set de recomandari si un plan agreat pentru dezvoltarea sistemelor
de informatii ce vor servi nevoilor curente si viitoare ale organizatiei, tinand
cont de constrangerile financiare si tehnice ale organizatiei.a9i Este
analizata problema care trebuie rezolvata, pe baza specificatiilor de definitie.
Aceste specificatii sunt obtinute in urma analizarii cerintelor
aplicatiei, in acest caz este vorba de studierea unui pagini de internet
care se ocupa cu relaizareaunor aplicatii pentru magazine virtuale. etapa de analiza -; Preia si verifica lucrurile obtinute in etapa
strategie si le expandeaza in detaliu suficient pentru a asigura acuratetea
de business, fezabilitatea si un fundament sanatos pentru proiectare, in
cadrul domeniului organizatiei si avand in minte sisteme existente;a9i
- etapa de proiectare -; pe baza etapei de analiza, se realizeaza proiectarea
aplicatiei, in urma careia rezulta directive concrete pentru etapa de
implementarea9i, de exemplu se realizeaza proiectarea schemei bazei de date,
stabilirea functiilor de business necesare in sistem, etc.;
- etapa de implementare -; realizarea efectiva a aplicatiei, scrierea codului,
realizarea bazei de date, compilarea aplicatiei sub forma unui program executabil;
- etapa de testare -; produsul software este testat in conditii normale
de utilizare si se rezolva eventualele probleme;
- etapa de documentare -; se scrie documentatia aplicatiei(sub forma tiparita
si/sau online), se face instruirea viitorilor utilizatori ai aplicatiei.
Figura 1. Ciclul de viata al unui sistem informatica9i
Rezultatul stadiilor strategie si analiza trebuie sa fie complet independente
de orice tehnica de implementare specifica, pentru a da proiectantului oportunitatea
maxima de a folosi tehnologia potrivita si pentru a proiecta in coexistenta
cu sisteme curente. Metoda CASE trebuie sa fie doar scheletul, ea trebuie completata
cu ideile proprii si inovatia contribuie la calitatea produsului final.
Business-urile sunt in continua miscare. In linii mari se schimba
nu CE este facut ci CINE si CUM face. Modelele folosite pentru a defini cerintele
business-ului trebuie sa permita modificari rezonabile in structura organizatiei.
Modelele trebuie sa fie de asemenea independente de toate solutiile cunoscute.
Cerintele ar trebui modelate si definite intr-o maniera generica. Cerintele
functionale ar trebui sa defineasca ce este facut, nu cum sau de catre cine.
Structura datelor trebuie sa permita modificari: in structura organizatiei,
pentru exceptii si pentru limite curente si observabile.a9i
Pentru a ajunge la un rezultat satisfacator am parcurs etapele de analiza si
proiectare, care sunt independente de o implementare anume, urmate de etapele
de implementare, testare si documentare.
2.3 Etapa analiza. Entitati si Atribute
Pentru a ajunge la baza de date existenta, am utilizat o „schita”,
pe care am creat-o in baza specificatiilor de definitie. Voi reda mai
jos lista cu entitatile si cu atributele care constituie fundamentul descrierii
schemei bazei de date.
Tab. 1 LISTA CU ENTITATI SI ATRIBUTE PENTRU CONSTRUIREA DIAGRAMEI E-R
NOTIUNE CALITATE
ENTITATE (E) / ATRIBUT(A)
Categorii produs E id_categorie A denumire A
Element comanda E id_elem_com A id_comanda A cantitate A pret A
Tipuri produse E id_tip A id_cat A denumire A poza A
Produse E id_produs A pret A caracteristici A poza_mare A
Comenzi E id_comanda A id_client A pret_total A
NOTIUNE CALITATE
ENTITATE (E) / ATRIBUT(A) data_comenzii A
Livrari E id_livrare A data_livrarii A
Clienti E nume A prenume A id_adresa A email A telefon A
Adresa E strada A nr_strada A apartament A cod_postal A oras A judet A
Cereri aprovizionare E id_cerere A cantitate A data_cererii A data_rezolvarii A
In tabelul 2 prezentam entitatile cu tipul acestora precum si cu legaturile
dintre ele.
ENTITATE TIP ENTITATE ENTITATI CU CARE ARE LEGATURA dresa de baza - clienti categorii produse de baza - tipuri produse
- produse cerere_aprovizionare de baza - produse clientii de baza - comenzi
- element comanda comenzi de baza - element comanda
- clienti
- livrare element_comanda de legatura - produse
- comenzi livrare de baza - comenzi produse de baza - comenzi
- cerere aprovizionare
- tip produs tip produs de legatura - categorii produse
- produse
users de baza
Tab. 2 Lista cu entitatile (tipul acestora) si legaturile dintre ele
Aceste legaturi le-am stabilit pe baza textului care constituie specificatiile
de definitie si sunt piesele de baza la proiectarea structurii bazei de date.
Pentru inceput, entitatile si atributele acestora sunt elementele de baza
pentru alcatuirea diagramei entitate-relatie.
Modelarea ER a fost inventata la mijlocul anilor '70 de Peter Chen si ramane
in continuare principala abordare pentru modelarea datelor.a9i Prin aceasta
reprezentare schematica sub forma unei diagrame se reprezinta entitatile, atributele
si relatiile dintre entitati precum si tipul acestor relatii.
In tabelul 3 sunt enumerate atributele, pentru fiecare dintre acestea
am stabilit tipul de date pe care il vor avea la realizarea bazei de date,
in vederea reprezentarii corecte si complete a informatiei. Coloana a
2-a reprezinta numele efectiv utilizat pentru implementare, astfel am dorit
sa evit folosirea caracterului spatiu in structura bazei de date. Mai
este prcizata si entitatea de care apartine
ATRIBUT NUME UTILIZAT IN BD
TIP DE DATE LUNGIME ENTITATEA DE CARE APARTINE
Numar de identificare adresa id_ adresa int 11 adresa
Strada strada varchar 255 adresa
Numar strada numar_str int 11 adresa
Apartament apartament int 11 adresa
Cod Postal cod_postal varchar 100 adresa
Oras oras varchar 100 adresa
Judet judet varchar 100 adresa
Numar de identificare categorie id_categorie int 11 categorii_produs
Denumire denumire varchar 255 categorii_produs
Numar de identificare cerere id_cerere int 11 cerere_aprovizionare
Numar de identificare produs id_ produs int 11 cerere_aprovizionare
Numar de bucati (cantitate) cantitate double cerere_aprovizionare
Data efectuarii cererii data_cererii date cerere_aprovizionare
ATRIBUT NUME UTILIZAT IN BD
TIP DE DATE LUNGIME ENTITATEA DE CARE APARTINE
Data rezolvarii cererii data_rezolvarii date cerere_aprovizionare
Numar de identificare client id_client int 11 clienti
Nume nume varchar 255 clienti
Prenume prenume varchar 255 clienti
E-mail email varchar 100 clienti
Telefon telefon int 11 clienti
Numar de identificare comanda id_comanda int 11 comanda
Suma de achitat pret_total double comanda
Data efecuarii comenzii data_comenzii date comanda
Numar de identificare element de comanda nr_elem_com int 11 element de comanda
Cantitate (nr. buc.) produs cantitate int 11 element de comanda
Pret (pe elem. comanda) pret double element de comanda
Numar de identificare livrare id_livrare int 11 livrare
Data efectuarii livrarii data_livrare date livrare
Numar de identificare categorie id_cat int 11 produse
Numar de identificare tip produs id_ tip int 11 produse
Denumire produs denumire varchar 255 produse
Descriere (produs) caracteristici longtext produse
ATRIBUT NUME UTILIZAT IN BD
TIP DE DATE LUNGIME ENTITATEA DE CARE APARTINE
Poza poza varchar 255 produse
Poza mare poza_mare varchar 255 produse
Numar de identificare administratori ID int 11 users
Nume (folosit) administrator UserName varchar 255 users
Parola administrator UserPassword varchar 255 users
Tabel 3. Atributele cu tipurile de date corespunzatoare si entitatile de care
apartin
Continuand analiza specificatiilor de definitie, extragem relatiile dintre
entitati, care pot sa fie dintre urmatoarele tipuri:
- 1:N (one to many) - la o instanta a unei entitati ii corespunde una
sau mai multe din cea de-a doua entitate
- 1:1 (one to one) - la o instanta a unei entitati ii corespunde o instanta
a celei de-a doua entitatati
- N:N (many to many) - la o instanta a unei entitati ii corespunde una
sau mai multe din cea de-a doua entitate si reciproc, acesteia din urma ii
corespund una sau mai multe instante ale primei entitati. In acest caz
trebuie introdusa o entitate de legatura pentru implementarea relatiei.
O relatie de legatura este o asociere intre doua entitati
si este binara, in sensul ca este intotdeauna o asociere
exact intre doua entitati sau o entitate cu ea insasi
(ceea ce nu este cazul la noi). Fiecare relatie de legatura are
doua capete pentru fiecare dintre ele existand un:
• nume
• grad / cardinalitate (cat de multi)
• optionalitate (optionala sau obligatorie)
Astfel relatiile pentru cazul de fata vor fi urmatoatrele:
ENTITATE 1 ENTITATE 2 TIP DE RELATIE
Categorii produse Produse 1:N*
Categorii produse Tipuri produse 1:N
Tipuri produse Produse 1:N*
Cereri aprovizionare Produse 1:N
Produse Element de comanda 1:N
Comenzi Element de comanda 1:N
Comenzi Livrari 1:1
Clienti Comenzi 1:N
Adresa Clienti 1:N
Tabel 4. Relatiile dintre entitati
Relatiile notate cu * sunt obligatorii.
2.4 Etapa analiza. Evenimente si Functii
Principala functie de business pe care trebuie sa o rezolve aceasta aplicatie
ar fi efectuarea unei comenzi. Aceasta functie se imparte de fapt
in mai multe functii mai mici care in final vor realiza comanda
de produse.
Adaugare produs in cos:
<?php session_start();
$adaugat_in_cos = false; if(isset($_POSTa'id_produs'i))A if(isset($_SESSIONa"Produs".$_POSTa'id_produs'ii))A
$_SESSIONa"Produs".$_POSTa'id_produs'ii += $_POSTa'cantitate'i;
SelseA
$_SESSIONa"Produs".$_POSTa'id_produs'ii = $_POSTa'cantitate'i;
S
$adaugat_in_cos = true;
S
?>
Modificare cantitate (produs) sau stergere (daca e nevoie) :
Pentru fiecare produs se creaza un formular cu denumirea ModificareCant + produsid
care contine un textfield cu noua cantitate si o imagine care face trimiterea
formularului (facand click pe imagine se lanseaza functia gogo() ).
La trimiterea formularului se face verificarea pentru noua cantitate si apoi
se face trimiterea.
while (list ($key, $val) = each ($_SESSION)) ?
$_SESSIONa‘Produs1’i = “30” ?
$key = “Produs1” $val = “30”
$_SESSIONa‘utitlizator’i = “ion” ?
$key = “utilizator’” $val = “ion”
session_start(); ? porneste sesiunea if(isset($_POSTa'newCant'i))A // daca a fost transmisa noua cantitate( a fost
clickaita imaginea )
$_SESSIONa"Produs".$_POSTa'idprodus'ii = $_POSTa'newCant'i;
\? ex : $_SESSIONa‘Produs30’i = 15 if($_SESSIONa"Produs".$_POSTa'idprodus'ii == 0)A
// daca noua cantitate a fost 0 atunci produsul este sters din sesiune unset($_SESSIONa"Produs".$_POSTa'idprodus'ii);
S
S
2.5 Etapa proiectare. Diagrama Entitate-Relatie
In etapa de proiectare vom utiliza informatiile obtinute la faza de analiza
pentru a realiza diagrama Entitate-Relatie, pe baza listelor cu entitati, atribute
si relatii dintre acestea, precum si diagrama de functii, pe baza listei de
evenimente si functii.
Diagrama Entitate-Relatie este o forma generalizata si abstractizata a listei
de entitati si atribute, si este utilizata apoi pentru realizarea schemei bazei
de date. Aceasta diagrama este independenta de sistemul de gestiune a bazelor
de date utilizat in etapa de implementare.
Pentru generarea diagramei Entitate-Relatie, se pot utiliza unelte CASE, care
permit editarea acesteia in mod vizual si care apoi pe baza diagramei
astfel realizate pot sa genereze in mod automat structura bazei de date.
Am utilizat in acest scop aplicatia AllFusion ERwin Data Modeler 4.1,
dar pentru ca utiliza elemente de reprezentare a diagramei diferite de cele
studiate, am decis sa realizez aceasta diagrama manual.
Prezentam in continuare cateva elemente de notatie ale diagramei
Entitate-Relatie.
pentru entitati, exista urmatoarele notatii:
Dreptunghiul cu colturile rotunjite reprezinta entitatea, in care cu litere
mari se noteaza denumirea entitatii, si cu litere mici se noteaza atributele.
Linia dintre entitati indica existenta unei relatii intre acestea. Astfel,
linia continua indica o relatie obligatorie, linia intrerupta(punctata).
pentru specificarea atributelor, exista 3 simboluri distincte:
# (diez) indica faptul ca atributul respectiv este un element de identificare
a entitatii, numit si cheie, sau ID.
* (asterisc) indica faptul ca atributul este unul obligatoriu.
? (grad) indica faptul ca atributul este optional.
Diagrama entitate-relatie este:
Citirea diagramei E/R:
Cuvintele din apropierea liniilor sunt cuvinte cheie care definesc relatia si
se citesc astfel:
<ENTITATE 1> <cuvant cheie><ENTITATE 2>
Cuvintele cheie care sunt deasupra liniei sunt pentru citirea in directia
de la stanga la dreapta, iar cele care sunt sub linie pentru citirea in
sens invers, de la dreapta la stanga.
Exemplu: comenzi este compusa element comanda element comanda apartine comenzi
Fiecare categorie de produse poate fi compusa din unul sau mai multe
produse si fiecare produs trebuie sa apartina unei categorii si
numai uneia.
Fiecare categorie de produse poate avea unul sau mai multe tipuri de produse
si fiecare tip de produs trebuie sa aiba o categorie si numai
una.
Fiecare tip de produs trebuie sa contina unul sau mai multe produse
si fiecare produs poate sa apartina unui tip de produs si numai
unuia.
Fiecare produs poate fi inclus intr-una sau mai multe cereri de aprovizionare
si fiecare cerere de aprovizionare trebuie sa fie compusa din
unul sau mai multe produse.
Fiecare produs poate fi inclus intr-unul sau mai multe elemente de comanda
si fiecare element de comanda trebuie sa contina un produs
si numai unul.
Fiecare element de comanda trebuie sa apartina unei comenzi
si numai uneia si fiecare comanda poate fi compusa din unul sau
mai multe elemente de comanda.
Fiecare comanda apartine unei livrari si fiecare livrare corespunde
unei comenzi.
Fiecare comanda trebuie sa apartina unui client si numai
unuia si fiecare client poate detine una sau mai multe comenzi.
Fiecare client trebuie sa aiba o adresa si numai una si
fiecare adresa poate avea unul sau mai multi clienti.
Se poate observa in diagrama Entitate-Relatie existenta unor atribute
de identificare, identificatori unici sau de tip cheie, acestea sunt necesare
pentru stabilirea legaturilor dintre entitati in faza de implementare
a schemei bazei de date. In continuare vom enumera aceste atribute:
ATRIBUT ENTITATEA DE CARE APARTINE TIP ATRIBUT id_categorie Categorii produse Not null, primary key, autoincrement id_tip Tipuri produse Not null, primary key, autoincrement id_produs Produse Not null, primary key, autoincrement id_cerere Cereri aprovizionare Not null, primary key, autoincrement id_elem_com Element comanda Not null, primary key, autoincrement id_comanda Comenzi Not null, primary key, autoincrement id_client Clienti Not null, primary key, autoincrement id_adresa Adresa Not null, primary key, autoincrement id_livrare Livrari Not null, primary key, autoincrement
Tabel 6. Atribute de identificare
Am exclus entitatea user din diagrama Entitate-Relatie pentru ca legatura acesteia
cu alte entitati a fost ignorata din considerente bine intemeiate.
2.6 Etapa proiectare. Diagrama Functionala
Diagrama functionala
E1
E2
E3
E5
E6
Cautare avansata si stergere exista pentru toate tabelele
din baza de date.
Adaugare exista pentru urmatoarele tabele: - categorii
produse;
- produse;
- tipuri produse;
- users;
Modificare exista pentru tabelele: - categorii produse;
- cerere aprovizionare;
- comanda;
- produse;
- users;
2.7 Etapa proiectare. Arhitectura aplicatiei
Modelul Client/Server
Toate organizatiile din ziua de azi guvernamentale, economice si majoritatea
intreprinderilor mari si mici recunosc rolul central pe care aplicatiile software
il au in cadrul lor, aplicatiile avand rolul reducerii costurilor
si imbunatatirii serviciilor fata de competitie.
Aceasta dezvoltare si necesitatea utilizarii pe o arie mare a unor date de interes
comun a dus la aparitia, utilizarea si proiectarea modelului Client/Server,
care ofera date distribuite, portabilitate intre platforme si un acces
standardizat la resurse.
Termenul de Client/Server provine de la metoda traditionala de accesare a unui
computer central numit server de catre computere aflate la distanta sau clienti
intr-o infrastructura de retea. Serverele utilizeaza baze de date relationale
in stocarea si intretinerea datelor intre care exista referinte.
Aceste referinte sunt mentionate printr-o tehnologie denumita integritate referentiala
(referential integrity) care ofera mecanisme care actioneaza asupra datelor
(trigger) si proceduri de stocare (stored procedure).
Acest model este o combinatie a trei tehnologii: sistemul relational de management
al bazelor de date (DBMS), reteaua si interfata client (bazata pe GUI/PC). Fiecare
element contribuie in functionarea platformei avand rolul sau, dar
independent in executia functiilor sale.
Foarte multa lume considera clientul si serverul ca fiind doua entitati hardware,
dar de fapt sunt entitati software. Modelul Client/Server implica o entitate
software (clientul) care efectueaza cereri, acestea fiind indeplinite
de o alta entitate software (serverul). Clientul este cel ce transmite o cerere
server-ului, acesta o interpreteaza si apoi o efectueaza. Pentru a putea indeplini
cererea serverul poate referi o sursa de informatie.
(baze de date), sa efectueze procesari asupra datelor, sa controleze periferice
sau sa efectueze cereri aditionale altor servere. In foarte multe arhitecturi,
un client poate face cereri la multiple servere si un server poate deservi mai
multi clienti.
Relatia intre client si server este una de comanda/control, clientul initiaza
cererea si serverul este cel ce o indeplineste transmitand rezultatul
clientului, aplicatia fiind procesata prin divizarea ei intre cele doua
entitati iar transferul de date este bidirectional. Un server nu initializeaza
niciodata un dialog cu clientii. Clientul poate functiona pe un server hardware
si sa efectueze cereri de la un server care ruleaza pe un alt server hardware
sau pe un PC sau clientul si serverul pot functiona pe acelasi computer.
Spre deosebire de un sisitem file/server in care datele sunt aduse de
pe file server pentru a fi procesate pe o masina locala in acest sistem
comenzile sunt transmise asupra bazelor de date localizate pe server, rezultatul
fiind transmis inapoi clientului pentru a fi vizualizat.
Arhitectura efectueaza toate aspectele software, ea trebuie sa ia in considerare
complexitatea aplicatiei, nivelul de integrare si interfatare cerut, numarul
utilizatorilor, raspandirea lor geografica natura retelelor si toate tipurile
de tranzactii necesare inainte de a decide tipul arhitecturii.
De asemenea alegerea arhitecturii afecteaza timpul de dezvoltare, flexibilitatea
precum si intretinerea aplicatiei. La majoritatea aplicatiilor end-user
se urmareste: prezentare, procesare si date. Arhitecturile Client/Server definesc
cum aceste trei componente sunt impartite intre entitatile software
si distribuite in retea, exista o varietate de moduri cum pot fii divizate
si implementate, utilizarea unor astfel de arhitecturi putand aduce multe
beneficii in viitor companiei permitand adaptarea la diferite standarde
si tehnologii. Cateva din caracteristicile acestei arhitecturi sunt:
Centralizarea informatiei -; intr-un astfel de mediu, datele sunt
stocate pe un server central si exista un singur punct de control care administreaza
cererile aplicatiilor si platformelor. Aceste servere de baze de date utilizeaza
un sistem de management al bazelor de date (DBMS) pentru a definii, stoca si
manipula date. Serverul este generic; programatorii neavand nevoie sa
cunoasca un limbaj anume pentru a accesa date. Utilizand tehnicile de
identificare o organizatie poate crea magazii de date de la diferite servere
distribuite in diferite zone geografice. Aceasta tehnica maximizeaza performantele
fara a compromite modelul centralizat si reduce probabilitatea existentei de
date redundante in aplicatii.
Serverul procesor central -; preluand acest avantaj, organizatiile
pot reduce procesarea redundanta prin utilizarea procedurilor trigger si de
stocare. Server-ul este orientat in procese standard ca: mentinerea unor
reguli, validari si referinte de integritate iar prin intermediul functiilor
de stocare pe un server comun datele pot fi manipulate corect din punct de vedere
logic si viabile pentru o varietate de limbaje si unelte ale lor.
Performante -; serverul este un computer dedicat sa proceseze un set limitat
de cereri de la clienti. Singura sa functie este sa proceseze cererile asupra
bazelor sale de date. SQL ofera facilitati eficiente de utilizare a traficului
in retea deoarece doar subseturi ale datelor sunt transmise in retea,
in plus serverele si DBMS sunt desemnate sa gestioneze baze de date masive
fara o degradare simtitoare a performantelor.
Securitate -; serverele ce lucreaza pe platforme ca UNIX, Windows NT sau
OS/2 pot oferi o mai mare securitate pentru managementul bazelor de date in
comparatie cu file server-ele standard. Mecanismele de duplexing, mirroring
si copiere permise administratorilor asigura evitarea dezastrelor, de asemenea
aceste baze de date permit definirea de utilizatori si parole care permit evitarea
accesului unor persoane neautorizate.
Referitor la costurile unor astfel de arhitecturi, server-ele sunt cele ce necesita
procesoare rapide, memorie, hard disc-uri mari si un sistem de operare, clientii
care le acceseaza. Licentierea, instalarea si intretinerea unor sisteme ca Oracle,
Sybase sau Informix necesita sute de mii de dolari iar dezvoltarea unor aplicatii
necesita memorie, masini noi si noi sisteme de operare. Din acest motiv in
prezent multe organizatii care au utilizat mainframe-uri s-au acomodat foarte
usor acestui mediu Client/Server care ofera o excelenta infrastructura pentru
a asigura informatie organizatiei asigurand integritate, viteza si securitate.
Cele mai populare tipuri de arhitecturi sunt cu doua entitati (two-tier) si
cu trei (three-tier).
Arhitectura two-tier. In aceasta implementare, cele trei componente ale
unei aplicatii (prezentare, procesare si date) sunt divizate in doua entitati
(tiers): codul aplicatiei client si baza de date server. O aplicatie client
dezvolta un limbaj si un mecanism de interschimb pentru a transmite cererea
serveru-ului. Prezentarea este detinuta in exclusivitate de client, procesarea
este impartita intre client si server si datele sunt stocate si accesate
de pe server. PC-ul client isi asuma intreaga responsabilitate a
functionarii logice a aplicatiei, timp in care motorul bazei de date verifica
integritatea. Intr-o astfel de topoligie motorul datelor este cel ce proceseaza
cererile clientului, limbajul utilizat fiind o forma a SQL, transmiterea unei
cereri presupune ca aplicatia client sa cunoasca sintaxa serverului sau aceasta
sa fie tradusa printr-o aplicatie (API), totodata sa se cunoasca serverul, cum
sunt organizate datele si denumirea lor. Datele transmise clientului pot fi
manipulate de acesta cum doreste, datele de pe server fiind centralizate. Aceste
medii detin o varietate de structuri de date, totodata aceste arhitecturi bine
in medii eterogene, aplicatia client detinand controlul oricarei
modificari care apare in cadrul unui sistem ducand doar la modificarea
aplicatiei client.
Sistemul de securitate intr-un astfel de mediu este complicat deoarece
un user trebuie sa detina parole pentru fiecare server SQL, iar cresterea utilizatorilor
poate duce la compromiterea securitatii bazelor de date aflate pe server. In
prezent majoritatea aplicatiilor client/server sunt proiectate sa lucreze cu
produse middleware care duc la cresterea securitatii, ele detinand unelte
de acces la date.
Arhitectura three-tier. Aceasta arhitectura a aparut datorita limitarilor arhitecturii
precedente, ea aduce ca noutate separarea prezentarii, procesarii si datelor
in entitati (tiers) software distincte. Aceleasi tipuri de unelte care
in arhitectura precedenta erau utilizate pentru prezentare, acum ele sunt
dedicate doar pentru prezentare. Cand clientul solicita o cerere pentru
acces la date sau o procesare a datelor, cererea se face la nivelul de mijloc
care este un server.
Acest nivel poate efectua procesari de date sau cereri asemeni unui client la
alte servere. Serverele din nivelul de mijloc pot fi multi-treaded si pot fi
accesate de clienti multipli, asemeni unei aplicatii separate. Sistemele three-tier
pot fi implementate utilizand o varietate de tehnologii, mecanismul de
cerere al clientului de la server in majoritatea sistemelor este utilizat
apelul procedurilor remote (RPC).
Apelul unor astfel de proceduri de catre client asigura sistemului o flexibilitate
foarte mare in comparatie cu apelurile SQL efectuate de client in
arhitectura precedenta, aceasta datorita faptului in care parametrii necesari
cererii efectuate de client sunt foarte usor transmisi si specificatiile structurilor
de date care preiau datele primite (if any), acest lucru permitand organizatiilor
sau structurilor back-end (aflate pe servere) sa poata sa-si modifice configurarile
in sistem, datele sa poata fi organizate ierarhic, relational sau obiectual
permitand firmelor sa simplifice trecerea la noi tehnologii legate de
organizarea bazelor de date, fara a fi nevoie de modificari la nivelul aplicatiei
client. Un alt avantaj este acela ca avand entitatile software separate
permit o alocare flexibila a resurselor.
Entitatile mijlocii (servere) pot fi alocate dinamic si repartizate in
functie de necesitatile firmei. Traficul de retea este redus avand server-ele
nivelului de mijloc, preluand date de la structuri precise inainte
sa le distribuie la clienti in retea, PC-urile client fiind dedicate doar
prezentarii, memoria si discurile fiind reduse. Din punct de vedere al dezvoltarilor
software modularitatea ofera reutilizarea unor subrutine cu efort minim reducand
costurile.
In concluzie aceasta arhitectura are un termen lung de functionare al
aplicatiilor indiferent de modificarile aparute in afaceri, cod reutilizabil,
intretinerea usoara si usurinta in migrarea catre noi platforme
server si medii.
2.8 Etapa implementare
Pentru implementarea aplicatiei am ales mediul de programare PHP si MySql.
.
3. MEMORIU JUSTIFICATIV
3.1 Proiectarea si implementarea bazei de date
Proiectarea bazei de date am facut-o pe baza etapelor studiate in capitolul
anterior, iar implementarea cu ajutorul produsului SQLyog.
Baza de date va fi sub forma unor fisiere de tip frm, MYD si MYI. Pentru fiecare
tabel din baza de date vom avea 3 astfel de fisiere.
In urma etapelor de analiza si de proiectare prezentate in capitolul
anterior, am realizat structura bazei de date cu ajutorul produsului SQLyog.
Astfel, baza de date contine un numar de 9 tabele, 8 dintre ele sunt cele corespunzatoare
entitatilor prezentate in tabelul 1 .
- categorii_produse
- tip_produs
- produse
- cerere_aprovizionare
- element_comanda
- comanda
- clienti
- livrari
- adresa
- users
Celelalt tabel este auxiliar, nu rezulta in urma analizei, ci au fost
introduse ca elemente ajutatoare pentru administrare. Acesta este:
- user -; contine userii care au dreptul sa administreze site-ul cu numele,
si parola user-ului.
In figura urmatoare, prezentam structura bazei de date, cu tabelele si
legaturile dintre ele. Observam ca fata de atributele prezente in diagrama
entitate-relatie, sunt prezente si atributele de identificare de tip chei straine,
care se propaga in momentul realizarii legaturilor dintre tabele. De exemplu,
in tabela produse, atributul id_tip, este cheie straina propagata din
tabela tipuri produse, pentru a se face legatura dintre cele 2 tabele.
1
8
1 1
11 8
8
1
8 8 8 1 1
8
8
8 1
3.2 Proiectarea interfetei utilizator
Meniul aplicatiei
Meniul principal al aplicatiei este implementat in HTML, iar cel de la
mersul trenurilor in PHP si au urmatoarea structura :
Magazin
Categorii produse
Tipuri produse
Produse
Produse
Home
Informatii
Cautare produs
Cautare tip produs
Continutul cosului
Golire cos
Meniul este pus in fiecare pagina, iar pagina principala
home arata in felul urmator:
In partea stanga se afla categoriile de produse, iar
daca este selectata categoria, va aparea (se va incarca)
tot in aceeasi pagina tipurile de produse corespunzatoare
categoriei selectate, ca si in exemplu de mai jos:
O categorie de produse poate contine atat tipuri de produse cat
si produse fara tip (adica care au id_tip “null”
cand sunt introduse in baza de date). Deci sunt produse care apartin
acelei categorii dar nu au tip:
La cautarea unui produs sau unui tip se vor afisa in mijloc rezultatul
cautarii (produsele sau tipurile gasite) :
In cazul in care textul introdus nu a fost gasit printre
denumire si caracteristici se va afisa mesajul:
“Textul cautat” nu a fost gasit in baza de date.
La introducerea unui produs in cos va apare produsul selectat singur
in pagina in felul urmator:
Pentru a face comanda produselor selectate se face clik pe Continutul cosului
este din orice pagina si se vor afisa toate produsele din cos. Tot aici
se pot modifica cantitatea unui produs sau se poate sterge prin introducerea
valorii “0” in casuta Modificare cantitate.
Dupa aceea daca doriti sa comandati produsele completati formularul
cu datele personale si faceti click pe butonul Factureaza iar daca
dariti sa mai adaugati si alte produse la comanda puteti
sa navigati in continoare si sa selectati produsele dorite.
Dupa ce faceti click pe butonul Factureaza in pagina
va aparea mesajul :
“Comanda a fost efectuata”