SPECIALIZAREA TEHNICA DE CALCUL h4h12hh
Cuprins
1. INTRODUCERE 3
1.1 Aplicabilitate 3
1.2 Specificatii de definitie 4
1.3 Reguli de calcul Error! Bookmark not defined.
2. MEMORIU TEHNIC 5
2.1 Aplicatii cu baze de date 5
2.2 Metodica de proiectare a aplicatiei Error! Bookmark not defined.
2.3 Etapa analiza. Entitati si Atribute 10
2.4 Etapa analiza. Evenimente si Functii 15
2.5 Etapa proiectare. Diagrama Entitate-Relatie 16
2.6 Etapa proiectare. Diagrama Functionala 19
2.7 Etapa proiectare. Arhitectura aplicatiei 22
2.8 Etapa implementare 24
3. MEMORIU JUSTIFICATIV 25
3.1 Proiectarea si implementarea bazei de date 25
3.2 Proiectarea interfetei utilizator Error! Bookmark not defined.
Meniul aplicatiei 27
Formulare Error! Bookmark not defined.
3.3 Implementare Error! Bookmark not defined.
Functii publice Error! Bookmark not defined.
Functia de calcul a cheltuielilor Error! Bookmark not defined.
Raportul cheltuielilor Error! Bookmark not defined.
3.4 Documentare Error! Bookmark not defined.
3.5 Testare Error! Bookmark not defined.
3.6 Pachet de instalare Error! Bookmark not defined.
4. CAIET DE SARCINI Error! Bookmark not defined.
5. MANUAL DE OPERARE Error! Bookmark not defined.
Instructiuni pentru instalarea aplicatiei Error! Bookmark not defined.
Instructiuni de utilizare Error! Bookmark not defined.
6. CONCLUZII Error! Bookmark not defined.
Aprecieri Error! Bookmark not defined.
Posibilitati de dezvoltare ulterioara Error! Bookmark not defined.
BIBLIOGRAFIE Error! Bookmark not defined.
ANEXE Error! Bookmark not defined.
Anexa 1. Listing Program Error! Bookmark not defined.
1. INTRODUCERE
In partea introductiva a lucrarii vom prezenta scopul aplicatiei, posibilitatile
de utilizare practica, precum si notiunile de baza utilizate de catre CFR, notiuni
utilizate la implementarea aplicatiei sub forma elementelor de proiectare.
De asemenea, din partea introductiva va rezulta si necesitatea dezvoltarii unei
astfel de aplicatii si implicatiile pe care le are utilizarea acesteia in
cadrul CFR-ului.
1.1 Aplicabilitate
Aplicatia este destinata calatorilor CFR care vor sa se infomeze asupra mersului
trenurilor si care in acelasi timp pot sa isi rezerve bilete la
un anumit tren intr-o anumita data , prin caracterul sau general acesta
putandu-se aplica in orice localitate din Romania, respectand
prevederile legale ale CFR-ului aflate in vigoare.
Se urmareste automatizarea procesului de rezervare bilete si a cea de informare
asupra mersului trenurilor. Biletele care se dau de la agentie se pot da online
sau de la un bancomat chitanta sevind drept bilet, in orice moment exista
posibilitatea rezervarii de bilete si aflarii de informatii asupra mersului
trenurilor, deci o aplicatie care usureze si sa ii sistematizeze activitatea
este binevenita.
In principiu, aplicatia trebuie sa permita aflare tuturor trenurilor care
sosesc si pleaca intr-o gara intr-o anumita data, informatii despre
un anumit tren si tote trenurile care circula pe o anumita ruta data de utilizator,
de unde se poate face si rezervarea de bilete. De asemenea aplicatia trebuie
sa permita introducerea trenurilor in baza de date, modificare anumitor
campuri din baza de date si stergerea unor trenuri .
Aplicatia pate fi folosita impreuna cu un automat aflat pe strada la care
se introduce ruta, trenul si data la care vrea sa calatoreasca clientul, iar
automatul ii va da biletul.
Pentru faza de documentare si testare, s-au folosit atat informatii provenite
de pe site-ul www.cfr.ro cat si informatii provenite din gara mica Cluj-Napoca.
1.2 Specificatii de definitie
Notiuni specifice. In urma studierii siteul www.cfr.ro si a unor legi
in vigoare, au rezultat o serie de notiuni, care vor fi utilizate la faza
de implementare sub forma unor elemente de proiectare. Va prezentam in
continuare aceste notiuni si semnificatia lor.
Ruta reprezinta drumul intre doua gari pe un anumit traseu, gara de unde
porneste un anumit tren si pana unde merge. Este compusa din statii care sunt
garile prin cate trece. Intre 2 gari exista posibilitatea de a ajunge
pe rute diferite.
Statia reprezinta gara in care stationeaza un anumit tren la o anumita
data si ora.
Gara reprezinta locul dintr-o localitate in care stationeaza un anumit
tren si locul de unde se pot rezerva si bilete incepand cu o ora inaintea
orei de pornire al trenului cu re dorim sa calatorim.
Trenul reprezinta vagoanele care circula pe o anumita ruta la o anumita data.
Tip tren. Exista 4 tipuri de tren: personal care opreste in toate garile,
acceleratul care opreste numai in orase si inplicit ajune mai repede decat
personalul, rapidul care nu opreste in toate orasele si merge mai repede decat
acceleratul avand in componenta vagoane de clasa I si dormit mai multe
decat la un accelerat.
Traseul reprezinta distanta dintre 2 statii ale unui tren.
Biletul reprezinta documentul care atesta ca un calator are rezervare la un
anumit tren.
Locul reprezinta locatia dintr-un tren in care are rezervare un calator,
adica vagonul si numarul locului.
Calatorul reprezinta persoana care calatoreste pe o anumita ruta, la o anumita
data si cu un anumit tren si care are bilet.
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. Tot asa cum in
alte proiecte ingineresti cum ar fi constructia unei cladiri sau a unui aparat
de zbor este depus un efort considerabil inaintea punerii primei caramizi
in constructia cladirii sau inainte de conceperea primei piese a
aparatului de zbor. In timpul fazei initiale (numita faza de proiectare)
o serie de elemente vor intra in contact unele cu altele pentru a da forma
proiectului de aplicatie. Unele din elemente sunt ne-negociabile sau resurse
limitate cum ar fi timpul, banii, sau mana de lucru. Altele, cum ar fi
tehnologiile disponibile, cunostintele, sau indemanarea sunt resurse
dinamice si variaza pe parcursul ciclului de viata al sistemului "business".a9i
Notiunea de baza de date este strans legata de notiunea de date, care
refera „fapte culese din lumea reala” a11i. 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.
Mai poate fi inteleasa ca o colectie (de obicei mare) de date organizate
intr-o structura descrisa printr-un model conceptual, de exemplu: nume
de categorii (PERSOANA), nume de proprietati (varsta), legaturi intre
categorii (PERSOANA casatorita cu alta PERSOANA), operatii permise / nepermise
(restrictii de integritate - constrangeri).
Pentru o baza de date cel mai important lucru este manipularea datelor continute
in acea baza de date. Aceasta „manipulare” refera operatiile
care se pot efectua asupra datelor: operatii de adaugare a unor date noi, operatii
de regasire, de modificare, de stergere a datelor existente.
Programarea bazelor de date constituie, de fapt, procesul de stocare -;
folosind o modalitate standard -; a unei varietati de informatii, astfel
incat sa fie posibila o accesare si o intretinere facila a
datelor. Informatiile stocate intr-o baza de date, spre deosebire de un
document creat cu un procesor de texte, respecta de obicei un format standard.a10i
Pentru aplicatia ceruta, utilizarea unei aplicatii cu baze de date in
detrimentul altor metode de rezolvare a problemei date, cum ar fi o aplicatie
standard, fara baze de date, rezolva o serie de probleme si neajunsuri. Din
acest punct de vedere, unele avantaje ale proiectarii aplicatiei cu baze de
date au constituit un factor important de decizie atunci cand am ales
modalitatea de rezolvare a problemei date, cum ar fi:
- 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;
- 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;
Concluzionand, baza de date va trebui sa contina toate informatiile necesare
aflarii mersului trenurilor si calculului distantelor rutelor si al biletelor.
Aceste informatii vor fi introduse de catre utilizatorul sistemului, adica de
catre administratorul site-ului, prin intermediul interfetei puse la dispozitie
de aplicatie.
Avand in vedere complexitatea introducerii unui tren in baza de
date si a volumului de date mare care trebuie introdus, aplicatia trebuie sa
fie cat mai intuitiva, cat mai usor de utilizat si sa nu contina
elemente care ar putea sa genereze situatii de ambiguitate. Este de asemenea
important ca interfata aplicatiei sa fie realizata in intregime
cu termeni in limba romana, iar termenii utilizati pentru denumirea
elementelor constitutive ale interfetei sa reprezinte cat mai bine termenii
corespondenti din limbajul specific al acestui domeniu.
Automatizarea procesului de calcul prin intermediul aplicatiei trebuie sa fie
de asemenea transparent, fazele in care se obtin valori intermediare nu
au importanta practica pentru administrator.
2.2 Metodica 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 discutiilor avute cu beneficiarul
aplicatiei, studierea unor documentatii legate de domeniul de activitate respectiv,
in acest caz este vorba de studierea legislatiei asociatiilor de proprietari
si discutiile avute cu administratorul de imobil;
- 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.
Sistemul trebuie sa continue sa functioneze eficient cand, de exemplu,
sunt adoptate proceduri noi de fabricatie, vanzare, administrare.
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
2.3 Etapa analiza. Entitati si Atribute
Pentru a ajunge la realizarea structurii bazei de date, am utilizat specificatiile
de definitie(prezentate in subcapitolul 1.2). Pe baza acestor specificatii
extragem entitatile si atributele care constituie puncte de plecare la proiectarea
bazei de date.
NOTIUNE CALITATE(entitate sau atribut) gara Entitate denumire Atribut poza Atribut ruta Entitate gara plecare Atribut gara sosire Atribut ora plecare Atribut oar sosire Atribut rute date Entitate data Atribut statie Entitate gara Atribut ora plecare Atribut ora sosire Atribut ordinea Atribut
Traseu Entitate gara 1 Atribut gara 2 Atribut
Kilometrii Atribut tren Entitate ruta Atribut tipul Atribut tipuri vagoane Atribut tip tren Entitate denumire Atribut culoare Atribut
Bilet Entitate ruta Atribut data Atribut
Km Atribut pret Atribut calator Atribut gara plecare Atribut gara sosire Atribut locul Atribut calator Entitate nume Atribut prenume Atribut seria buletin Atribut numar buletin Atribut
Loc Entitate numar tren Atribut vagon Atribut clasa Atribut numar loc Atribut
Tabel 1. Lista cu entitati si atribute
In tabelul 2 prezentam entitatile cu tipul acestora precum si cu legaturile
dintre ele.
ENTITATE TIP ENTITATE ENTITATI CU CARE ARE LEGATURA gara entitate de legatura • ruta
• statie
• bilet
• traseu ruta entitate de baza • gara
• statie
• bilet
• ruta_date statie entitate de baza • ruta
• gara
• tren traseeu entitate de baza • gara ruta_date entitate de baza • ruta bilet entitate de baza • calator
• ruta
• gara
• tren
• pret
• supliment calator entitate de baza • bilet tren entitate de legatura • tip_tren
• loc
• bilet tip_tren entitate de baza • tren loc entitate de baza • tren pret entitate de baza • bilet supliment entitate de baza • bilet user entitate de baza
Tabel 2. Entitatile 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.
ATRIBUT NUME UTILIZAT IN BD TIP DE DATE LUNGIME
NULL ENTITATEA DE CARE APARTINE denumire gara denumire varchar 255 NOT NULL gara poza poza varchar 255 gara gara de plecare gara_plecare intreg 11 NOT NULL ruta gara de sosire gara_sosire intreg 11 NOT NULL ruta ora de plecare ora_plecare intreg 50 NOT NULL ruta ora de sosire ora_sosire time NOT NULL ruta id-ul rutei id_ruta Intreg 11 NOT NULL statie id-ul garii id_gara intreg 11 NOT NULL statie ora plecare ora_plecare time NOT NULL statie ora sosire ora_sosire time NOT NULL statie order order intreg 11 NOT NULL statie id-ul rutei id_ruta intreg 11 NOT NULL rute_date data data time NOT NULL rute_date id-ul rutei id_ruta intreg 11 NOT NULL tren id-ul tipului id_tip intreg 11 NOT NULL tren vagon clasa a II-a vagon_cl2 integ 11 NOT NULL tren vagon clasa a I-a vagon_cl1 intreg 11 NOT NULL tren vagon retaurant vagon_restaurant intreg 11 NOT NULL tren id gara 1 id_gara1 intreg 11 NOT NULL traseu id gara 2 id_gara2 intreg 11 NOT NULL traseu
Kilometrii Km intreg 11 NOT NULL traseu id-ul tipului id_tip varchar 255 NOT NULL tip_tren denumire denumire varchar 255 NOT NULL tip_tren culoare culoare varchar 255 NOT NULL tip_tren numar tren nr_tren intreg 11 NOT NULL loc numar vagon nr_vagon intreg 11 NOT NULL loc clasa clasa varchar 255 NOT NULL loc numar loc nr_loc intreg 11 NOT NULL loc id-ul rutei id_ruta intreg 11 NOT NULL bilet data data date NOT NULL bilet
Kilometrii Km intreg 11 NOT NULL bilet pret pret double NOT NULL bilet id-ul calatorului id_calator intreg 11 NOT NULL bilet id-ul garii plecare id_garaplecare intreg 11 NOT NULL bilet id-ul garii sosire id_garasosire intreg 11 NOT NULL bilet id-ul locului id_loc intreg 11 NOT NULL bilet numele nune varchar 255 NOT NULL calator prenumele prenume varchar 255 NOT NULL calator seria buletin bl_seria varchar 255 NOT NULL calator numar buletin bl_numar varchar 255 NOT NULL calator intervalul Km1 intreg 11 NOT NULL preturi intervalul Km2 intreg 11 NOT NULL preturi clasa clasa varchar 255 NOT NULL preturi personal Pers double NOT NULL preturi accelerat Acc double NOT NULL preturi rapid R double NOT NULL preturi ineter city IC double NOT NULL preturi tichet rezervare TichetRrezervare double NOT NULL preturi intervalul Km1 intreg 11 NOT NULL supliment intervalul Km2 intreg 11 NOT NULL supliment clasa clasa varchar 255 NOT NULL supliment personal Pers double NOT NULL supliment accelerat Acc double NOT NULL supliment rapid R double NOT NULL supliment ineter city IC double NOT NULL supliment
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.
Astfel, relatiile pentru cazul de fata vor fi:
TEXT SPECIFICATIE ENTITATE 1 ENTITATE 2 TIP DE RELATIE o ruta contine una sau mai multe statii ruta statie 1:N* pentru o ruta se acorda unul sau mai multe bilete ruta bilet 1:N* o gara apartine mai multor statii gara statie 1:N* o gara este sursa pentru traseu si in acelasi timp destinatie pentru traseu
gara traseu 1:N* un calator poate detine unul sau mai multe bilete calator bilet 1:N* un tren poate avea unul sau mai multe bilete tren bilet 1:N un tren are unul sau mai multe bilete tren loc 1:N* un tiptren caracterizeaza unul sau mai multe trenuri tiptren tren 1:N
Tabel 4. Relatiile dintre entitati
Relatiile notate cu * sunt obligatorii.
2.4 Etapa analiza. Evenimente si Functii
Instantierea entitatilor se face numai in momentul aparitiei unor evenimente
sau functii de business. Principala functie de business pe care trebuie sa o
rezolve aceasta aplicatie ar fi calculul biletului. Prezentam in continuare
o lista a acestor functii.
EVENIMENT FUNCTIE ATASATA EVENIMENTULUI EXPLICATIE CU DETALII
Rezervare bilet Calculul biletului - stabilirea rutei si a clasei vagonului
- verificare daca sunt locuri libere
- stabilirea distantei si a intervalului in care se incadreaza
- calculul pretului
- afisarea pretului
Tabel 5. Evenimente si functii
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)
reprezinta o relatie obligatorie iar „furca” reprezinta o relatie
la N in partea respectiva, in cazul reprezentarii de mai sus relatia
fiind de 1:N. 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:
Citirea diagramei Entitate-Relatie:
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 sau stanga liniei sunt pentru citirea
in directia de la stanga la dreapta sau sus in jos, iar cele
care sunt sub linie sau din dreapta liniei pentru citirea in sens invers,
de la dreapta la stanga sau jos in sus.
O ruta trebuie sa inceapa de la o gara si numai una si sa se termine la
o gara si numai una.
O gara trebuie sa fie sursa si destinatie pentru o ruta
.
..
.
..
..
.
.
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 CAMP TIP ATRIBUT id_gara gara int (11) not null primary key auto increment id_ruta ruta int (11) not null primary key auto increment id_traseu traseu int (11) not null primary key auto increment id tip tren int (11) not null primary key auto increment id_loc loc int (11) not null primary key auto increment id_calator calator int (11) not null primary key auto increment id pret int (11) not null primary key auto increment id supliment int (11) not null primary key auto increment
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
Figura 3. Diagrama functionala
E1
E2
E3
E4
E5
E1
E3
E4
E5
2.7 Etapa proiectare. Arhitectura aplicatiei
Pentru dezvoltarea aplicatiilor cu baze de date, in functie de necesitatile
de utilizare ale aplicatiei, se pot utiliza 3 tipuri de arhitectura, pe care
le vom prezenta in continuare.
a. Arhitectura Desktop
Arhitectura desktop este caracterizata de coexistenta aplicatiei si a bazei
de date pe aceeasi masina fizica(pe acelasi calculator)
Figura 4. Arhitectura Desktop
Acest tip de arhitectura se utilizeaza in cazul aplicatiilor de complexitate
redusa, cand baza de date este utilizata de o singura aplicatie si eventual
de un singur utilizator. Accesul la baza de date se face fie direct de catre
aplicatie(de exemplu in cazul unei aplicatii realizate in Visual
Fox) sau prin intermediul unui motor de baze de date.
b. Arhitectura Client-Server
In cazul arhitecturii client-server, baza de date si aplicatia nu se gasesc
neaparat pe acelasi calculator. Aplicatia ruleaza pe un sistem de calcul numit
client, iar baza de date se gaseste pe un alt sistem de calcul, numit server,
si este gestionata de un server de baze de date(de exemplu SQL Server, MySQL,
etc.) Comunicarea dintre client si server se face prin intermediul unui canal
de comunicatie, care este de obicei o retea locala LAN(Local Area Network) sau
o retea WAN(Wide Area Network).
Acest tip de arhitectura permite accesul la baza de date de la distanta prin
conectarea directa a clientului la serverul de baze de date, de exemplu printr-o
conexiune de tip peer-to-peer.
Figura 5. Arhitectura Client-Server
c. Arhitectura Multistrat
Arhitectura multistrat este cea mai moderna dintre cele 3, si este caracterizata
prin existenta a cel putin 3 sisteme de calcul, in mod generic. Aplicatia
ruleaza pe sistemul client, pe care eventual ruleaza si un browser de web, prin
intermediul caruia aplicatia poate sa emita cereri serverului de aplicatii,
care poate fi de asemenea si un server de web. Serverul de aplicatii contine
regulile de business ale aplicatiei, si este controlat de un administrator care
cunoaste foarte bine intregul sistem si se ocupa cu eventualele actualizari
ale sistemului. Un al treilea sistem este serverul de baze de date, unde se
gaseste si baza de date. Serverul de aplicatii functioneaza ca un intermediar(gestionar)
intre client si serverul de baze de date.
In aplicatiile prin intermediul internetului, de multe ori pe calculatorul
client nu ruleaza o aplicatie specializata, ci doar serverul de web, iar utilizatorul
are acces la baza de date prin accesarea unei pagini de internet.
Figura 6. Arhitectura Multistrat
Dintre cele trei arhitecturi prezentate, vom utiliza pentru dezvoltarea aplicatiei
arhitectura desktop, pentru ca deocamdata nu se justifica utilizarea unei conexiuni
la distanta sau prin intermediul internetului. Intr-o etapa de dezvoltare ulterioara
a aplicatiei, se pot lua in considerare si celelalte tipuri de arhitectura.
Aceasta problema este dezbatuta pe larg in capitolul Dezvoltari ulterioare.
2.8 Etapa implementare
Pentru implementarea aplicatiei am ales mediul de programare PHP si MySql.
2.8.1. PHP
2.8.1.1. Introducere
PHP, acronim care provine din “PHP:Hypertext Preprocessor”, este
un limbaj de scripting utilizat pe scara larga, realizat si distribuit in
sistem Open Source, care este special realizat pentru a dezvolta aplicatii web,
prin integrarea codului PHP in documente HTML. Sintaxa sa provine din C, Java
si Pearl si este usor de invatat. Scopul principal al limbajului este acela
de a scrie rapid pagini web dinamice, dar cu PHP se pot realiza mult mai multe.
Pe masura ce site-urile devin tot mai mari si mai complexe, fisierele HTML statice
isi ating limitele. Azi Web-ul este o platforma orientata spre tranzactii
comerciale folosind aplicatii cum sunt cele de comert online. Pentru satisfacerea
acestor nevoi este necesara o tehnologie care genereaza pagini web cu continut
dinamic. PHP este o solutie special creata pentru web.
Traditional dezvoltatorii foloseau scripturile CGI (Common Gateway Interface)
pentru interactiunea cu utilizatorii sau pentru interogarea bazelor de date.
Totusi pentru ca scripturile CGI sunt programe separate care se executa ca un
proces individual de fiecare data cand un utilizator trimite o cerere,
scalabilitatea este absenta. Scripturile CGI pot consuma rapid toata memoria
disponibila si puterea procesorului.
PHP este una dintre cele mai interesante tehnologii existente in prezent.
Deoarece imbina caracteristici dintre cele mai coplexe cu simplitatea
in utilizare, PHP a devenit rapid un instrument de frunte pentru dezvoltarea
aplicatiilor web, cum este Pearl, PHP este un limbaj de programare comod pentru
incepatori, chiar si pentru cei care nu au mai desfasurat activitati de
programare in trecut.
PHP este un limbaj de script care functioneaza alaturi de un server Web. Deci,
fata de alte limbaje de script, precum Javascript, la PHP codul se executa pe
server. Daca pe serverul Web se afla un script similar, clientul nu va primi
decat rezultatul executiei scriptului, fara a avea nici o posibilitate
de acces la codul care a produs rezultatul. Daca serverul de Web este configurat
sa prelucreze toate fisierele HTML ca fisiere PHP, nu exista nici un mijloc
de a distinge paginile care sunt produse dinamic de paginile statice.
Sintaxa PHP-ului este imprumutata din C, Java si Pearl, insa are si o
seama de noi caracteristici. Un mare avantaj fata de C sau Pearl este faptul
ca nu necesita utilizarea unui numar mare de comenzi pentru a crea cod HTML.
PHP este un limbaj algoritmic, care arata mai bine, cat de importanta
este prelucrarea algoritmica atunci cand avem de a face cu informatia
transmisa prin Internet.
Diferenta dintre PHP si HTML apare din mai multe motive. Cel mai important este
totusi urmatorul: in PHP semnele sunt interpretate pe mai multe nivele:
- cel al simbolurilor pentru operatii ale procesorului;
- cel al interpretarii simbolurilor si operatiilor cu simboluri de iesire; continutul
propriu-zis al iesirii.
Insa PHP-ul nu se limiteaza la generarea de cod HTML: el poate genera
cod PDF sau chiar animatii Flash. PHP poate face ceea ce orice alt limbaj poate
face in CGI si chiar mai mult decat atat. Poate fi folosit
de majoritatea sistemelor de operare: Linux, de majoritaea variantelor Unix,
Windows, RISC OS, etc.
De asemenea, PHP are suport pentru majoritate serverelor Web(Apache, Microsoft
Internet Information Server, Microsoft Personal Web Server, Netscape Server
si multe altele). Unul dintre marile avantaje al PHP-ului este suportul cu un
numar mare de baze de date.
Are, de asemenea suport pentru comunicarea cu alte servicii, folosind protocoale
ca LDAP, IMAP, SNMP, NNTP, POP3, HTTP.
Scopul principal al PHP-ului este de a permite dezvoltatorilor sa creeze pagini
Web dinamice. Limbajul a devenit atat de popular datorita faptului ca
este simplu, rapid si gratuit. In plus, PHP foloseste foarte multe facilitati
predefinite (built-in).
PHP reprezinta un pachet puternic care ofera un limbaj de programare accesibil
din cadrul fisierelor HTML, limbaj asemanator cu Pearl si C, plus suport pentru
manipularea bazelor de date intr-un dialect SQL (dBase, informix, MySql,
Oracle, PostgresSQL, Solid, Sybase, ODBC) si acces la sisteme hipermedia precum
Hyperwave. PHP-ul permite scrierea de scripturi CGI, suporta incarcarea
fisierelor de pe calculatorul client: upload si ofera suport pentru cookies
(mecanism de stocare a datelor in navigatorul client pentru identificarea
utilizatorilor, propus de Netscape).
2.8.1.2. Avantajele PHP
- Este usor de instalat, configurat si intretinut.
- Pentru cei ce cunosc limbajul C este forte usor de invatat.
- Codul sursa este disponibil gratis (open source).
- Codul se dezvolta mai rapid (este un limbaj slab tipizat).
- Poate rula ca modul Apache sau separat.
- Nu este atat de vulnerabil ca JSP-ul in cazul codului scris prost.
- Este creat special pentru Web.
- Functioneaza pe aproape orice sistem de operare.
- Sintaxa seamana cu C,Pearl, Java si Javascript.
2.8.2. MySQL
2.8.2.1. Descriere
Pe masura ce industria calculatoarelor migreaza catre mediile distribuite si
isi muta mare parte din date de la mainframe-uri catre servere, trebuie
intelese conceptele care stau la baza mediilor de baze de date client/server.
Majoritatea bazelor de date folosite pe computere sunt baze de date relationale
si de asemenea suporta folosirea SQL. (“Structured Query Language”)
pe langa alte unelte proprii pentru accesul la date. In sistemele
care folosesc servere pentru baze de date procesarea datelor este optimizata,
permitand fiecarei componente sa acceseze informatiile independent, in
modul cel mai eficient posibil; serverul este centrat pe procesele din baza
de date iar clientul este centrat pe prezentarea informatiei.
Procesarea de date este strans legata de operatiile de stocare si furnizare
de date. O baza de date aaa cum este MySQL este proiectata ca fiind un depozit
pentru datele unei intregi organizatii. Natura esentiala a datelor implica
importanta metodelor folosite pentru stocarea, procesarea si returnarea lor.
MySQL indeplineste toate caracteristicile altor servere de baze de date
si in plus ofera trasaturi care nu sunt necesare altor baze de date. Majoritatea
acestor trasaturi suplimentare sunt rezultatul integrarii serverului SQL cu
sistemele de operare Windows NT.
SQL Server ofera capabilitati de stocare de date si de manipulare a volumelor
de date la fel ca si un mainframe sau minicomputer.
MySQL este un produs matur, scalabil, rapid si gratuit, cu caracteristici foarte
potrivite pentru multe dintre aplicatiile care folosesc suportul de baze de
date pentru Web. Detaliile tehnice referitoare la MySQL se aplica in orice
domeniu de tip Unix si chiar si Windows.
MySQL este un sistem de administrare a unei baze de date. O baza de date este
o colectie structurata de date. Pentru a adauga, accesa si procesa date inregistrate
intr-o baza de date, este nevoie de un sistem de administrare asa cum
este MySqlServer.
MySql este un sistem de administrare a bazelor de date relationale. O baza de
date relationala inregistreaza date in tabele separate. Aceste adaugari
sunt rapide si flexibile. Tabelele sunt legate prin relatii bine definite facand
posibila combinarea datelor din cateva tablouri la cerere.
MySql Software este o sursa deschisa (Open Source): Open Source inseamna
ca este posibila folosirea si modificarea de catre orice utilizator. Oricine
poate descarca MySql Softwarede pe Internet si sa-l foloseasca fara sa plateasca
nimic. Orice persoana care are ceva cunostinte poate sa studieze codul sursa
si sa-l modifice conform nevoilor sale.
MySql DataBase Server este foarte rapid si usor de utilizat, are de asemenea
un set de trasaturi foarte bine dezvoltate si a fost conceput pentru a se descurca,
pentru a solutiona baze de date mari mai rapid decat solutiile deja existente
si a fost utilizat cu succes in mediile cu o productie de nivel inalt
de-a lungul anilor.
MySql opereaza in baza unui model client/server. Orice masina care doreste
sa proceseze interogari asupra bazei de date MySql trebuie sa ruleze MySql server
(mysqld), care este responsabil de tot traficul de tip incoming/outgoing cu
baza de date. Ca orice alt server, mysqld “asculta” pe un port particular
(3306) eventualele cereri de conexiune ale unui “client” -;
orice aplicatie care trimite cereri catre o baza de date via mysqld. Acest client
poate fi un simplu script in Pearl care -; gratie modulului DBI -;
poate trimite o cerere catre baza de date prin intermediul serverului MySQL,
sau chiar clientul “command-line” mysql. Clientul mysql este o interfata
interactiva pentru trimiterea de comenzi catre server.
2.8.2.2. Modelul de securitate
Modelul folosit de MySQL se bazeaza pe username/password, hostname si privilegii
si este similar celui generic folosit de sitemele Unix. Prin privilegii se inteleg
in cazul MySQL operatiunile ce vor fi permise asupra bazei/bazelor de
date, tabelelor sau indecsilor, cum sunt de exemplu SELECT, INSERT, UPDATE,
DELETE, CREATE, DROP.
Cream o baza de date: shell>mysql -;u root -;p mysql> database Clienti; mysql> use Clienti;
Acordam utilizatorului “user” cu parola “parola” care
se conecteaza la serverul MySQL de pe orice masina din reteaua “.retea-singura.net”
dreptul de a face SELECT pe orice tabele din baza de date “Clienti”: mysql>GRANT SELECT ON Clienti.* TO user@”% retea-singura.net”
IDENTIFIED BY “parola”;
Folosirea GRANT si REVOKE este semnalata serverului imediat si, spre deosebire
de acordarea de privilegii cu UPDATE sau INSERT, nu necesita o comanda ulterioara
de tip FLUSH PRIVILEGES, care spune serverului sa reciteasca tabelele de permisiuni.
Pe de alta parte: mysql>GRANT ALL PRIVILEGES ON Clienti.* TO gigi@localhost
IDENTIFIED BY “parola_lunga”;
Ofera “puteri plenipotentiare” user-ului “gigi”, dar
numai de la consola serverului.
Crearea “Clienti si recitirea tabelelor de privilegii prin FLUSH PRIVILEGES
se poate face si cu mysqladmin. Revocarea privilegiilor acordate se face folosind
explicit REVOKE sau prin scrierea directa in tabelele de drepturi (,ysql.user,
mysql.db, mysql.host, mysql.tables_priv si mysql.colums_priv).
Pentru o imagine completa asupra modului in care functioneaza modelul
de securitate MySQL, este obligatorie citirea cu atentie a paginilor respective
din manual. Pentru securizarea datelor si a accesului la mysqld se recomanda
implementarea politicilor specifice necesare, instrumentele furnizate de MySQL
fiind doar o parte din intreg.
2.8.2.3. Utilizare
Exemplul ales prezinta modalitatile de creare si utilizare a doua tabele simple
in MySQL, tabele denumite “Facturare” si “Facturi”.
Detaliile legate de ceea ce se numeste “data modelling” nu sunt
necesare pentru exemplul simplu al acestei aplicatii.
Continutul si structura tabelelor “Facturare” si “Facturi”
folosite in exemplu nostru sunt prezentate mai departe.
Sintaxa pentru crearea tabelului “Facturare” : mysql>CREATE TABLE Facturare ( Nume_client CHAR(255) NOT NULL, Email_client
CHAR(255) NOT NULL, Factura INTEGER NOT NULL, Total DECIMAL(6,2) NOT NULL, Platit
TINYINT NULL, INDEX IDX_FACTURA (Factura));
Sintaxa pentru crearea tabelului “Facturi” : mysql>CREATE TABLE Facturi (Factura INTEGER NOT NULL, Ore DECIMAL(8,2) NOT
NULL, Rate DECIMAL(6,2) NOT NULL, INDEX IDX_FACTURA (Factura));
Crearea corecta a celor doua tabele se verifica prin: mysql>show tables; mysql>describe Facturare; mysql>describe Facturi;
3.5.4. Incarcarea datelor
Incarcarea datelor in tabelele proaspat create se face, printre
alte metode, folosind comanda LOAD DATA INFILE, cu conditia ca datele sa fie
in prealabil existente in fisiere text, delimitate de caracterele
“tab” sau “,”. Delimitatorul implicit recunoscut de
LOAD DATA INFILE este “tab”, deci in cazul unui fisier “facturare.txt”
ce contine datele din tabelul “Facturare” delimitate prin tab, sintaxa
va fi: mysql> LOAD DATA INFILE”/calea/catre/facturare.txt”
INTI TABLE “Facturare” IGNORE 1 LINES;
Similar: mysql> LOAD DATA INFILE”/calea/catre/facturare.txt”
INTI TABLE “Facturi” IGNORE 1 LINES;
Pentru alti delimitatori a se vedea optiunea FIELDS TERMINATED BY din sintaxa
comenzii LOAD DATA INFILE. De mentionat ca optiunea IGNORE 1 LINES determina
importul din fisierul text in tabelul din baza de date a tuturor datelor
mai putin primul rand din fisierul text, care in general este header-ul
tabelului, existent deja in tabelul creat in baza de date. Din motive
de securitate, cand se citesc fisiere aflate pe server, acestea trebuie
sa se afle ori in directorul bazei de date (var/lib/mysql/Clienti) sau
sa aiba drepturi de read pentru “all”. De asemenea, privilegiul
“file” trebuie sa existe pe server. In cazul nostru, pentru
simplitate, se copiaza fisierele “facturi.txt” si “facturare.txt”
in var/lib/mysql/Clienti si se importa din acest director.
Se verifica prin: mysql>select * from Facturi; mysql>select * from Facturare;
In acest moment, mysqld poate furniza informatii din tabelele bazei de
date Clienti.
2.8.2.3.1. Expunerea datelor pe WWW
Daca pe aceeasi masina au fost instalate si modelele de PERL mentionate anterior,
tot ce mai trebuie pentru a putea publica intr-o pagina HTML (pe Web)
este un server web (incetatenit este Apache) si unul sau mai multe scripturi
CGI in Pearl. Subiectul “CGI programming” este vast, pornind de
la alegerea limbajului de programare sau scripting si a serverului de aplicatie
care va procesa practic aplicatiile CGI, terminand cu securitatea programelor
CGI. Administratorii de sistem si programatorii CGI experimentati stiu ca de
securitatea unui script CGI poate depinde securitatea masinii pe care acesta
ruleaza. Pentru simplitate, este prezentat un script Perl rudimentar, care se
conecteaza la mysqld folosind userul “user” si parola “parola”
(trebuie o pereche username/password validata pentru mysqld pe masina server,
altfel scriptul nu se va putea conecta la baza de date) si face un SELECT simplu
asupra tabelului Facturare.
#!/usr/bin/perl
#query.cgi- exemplu Perl/MySQL use DBI
$dbh=DBI->connect(‘dbi:mysql:Clienti”,’user”,’parola’
);
#pregateste si executa statement SQL
$sqlstatement=”SELECT Nume_Client,Email_Client FROM Facturare”;
$sth=$dbh->prepare($sqlstatement);
$sth->execute|| die ”Nu se poate executa instructiunea SQL…”;
#scrie la stdout rezultatele extrase din baza de date print “Content-Type:text/html\n\n”; print” <html>\n<head><title>Pagina Demo</title></head>\n<body><div
align=center>\n”;
while (@row=$sth->fetchrow_array)
A print”@row\n<br>”;
S print”</div></body></html>”;
Acest script se copiaza in directorul “cgi-bin” al serverului
web. Pentru a putea fi executat de daemonul httpd, se seteaza corespunzator
permisiunile: shell> chmod 755 query.cgi
Afisarea rezultatelor in browser se face simplu, accesand locatia: https://nume_masina/cgi-bin/query.cqi unde “nume_masina” este numele
(sau adresa IP) a masinii pe care se afla aplicatia. Aplicatia astfel creata
este accesibila (sau nu, in functie de optiuni) de oriunde din Internet,
de exemplu de pe orice calculator dotat cu modem si care are acces la Internet
printr-un cont de dial-up.
2.8.2.3.2. Performanta MySQL
Sunt testate mai multe sisteme de gestiune a bazelor de date instalate pe
sistemul de operare Windows NT. Rezultatele testului arata performanta MySQL
in comparatie cu alte SGBD-uri concurente.
Un alt test care foloseste tehnologia ADO si care executa comanda: “SELECT
* FROM ADOXYZ” confirma viteza MySQL (rezultatele in secunde);
2.8.3. HTML, JavaScript
Hypertext Markup Language (HTML) poate fi descris ca un set de coduri speciale
numite “tag”-uri care informeaza un browser web despre cum se afiseaza
un document hypertext. HTML poate fi privit ca si o colectie de “stiuluri”
care definesc diferite componente ale unei pagini web. Toate documentele HTML
sunt in format text ASCII, putand fi citite universal de catre diferitele
browsere web existente ce ruleaza pe diferite computere cu diferite sisteme
de operare.
Javascript este un limbaj de scripting compact orientat obiect folosit pentru
dezvoltarea aplicatiilor Internet client si server. El permite extinderea comportamentului
paginulor web mai departe decat clasicul “click and wait”
oferit de HTML standard. Cu ajutorul JavaScript-urilor, utilizatorii trec de
la folosirea paginilor web la interactiunea cu acestea, viteza de raspuns a
paginii web va fi mai mare din cauza ca actiunile JavaScript se petrec la nivelul
browserului si nu la cel al serverului care gazduieste pagina web. Interactiunile
adaugate cu ajutorul scripturilor transforma pagina intr-o adevarata aplicatie.
Codul pentru functiile JavaScript este transmis clientului odata cu pagina HTML,
in acest mod browserul poate interpreta acest cod si il poate executa
la nivelul clientului. Astfel se pot face verificari de forme la nivelul clientului,
se pot deschide ferestre noi, se poate raspunde la miscarea de mouse sau la
click-ul de mouse in alte moduri decat cel standard de navigare.
Cu toate ca aparentele spun ca javaScript-ul poate fi folosit in mod rau
intentionat exista restrictii referitoare la functiile JavaScript, printre care
de exemplu interzicerea accesului la disc.
O caracteristica importanta JavaScript este ca pot fi create fisiere cu functii
JavaScript care pot fi incluse apoi in paginile HTML, usurand in
acest mod reutilizarea codului.
2.8.2.4. Posibilitati de realizare
2.8.2.4.1. APACHE-PHP-MYSQL
Pentru realizarea aplicatiei voi utiliza arhitectura three-tier formata din:
Server de web: Apache, Server de baze de date: MySQL, limbaj de programare PHP.
Acestea sunt determinate de faptul ca nu orice sistem de operare ruleaza pe
orice hardware, nu toate limbajele de scripting se pot conecta la toate bazele
de date, si asa mai departe.
PHP si MySQL pot rula pe orice platforma Linux, Windows, Unix, Mac. Ambele sunt
open source.
Elocvente sunt si benchmark-urile anterioare care arata clar ca triada Apache-PHP-MySQL
are o performanta ridicata. Aceasta tehnologie este foarte utilizata in
prezent pe Internet.
Integrarea PHP cu MySQL este excelenta. Exista foarte multe unelte de management
al bazelor de date MySQL. Facilitatile disponibile sunt comparabile cu cele
oferite de concurenta. Exista niste functii utile care nu exista in alte
produse cum sunt: mysql_insert_id() si mysql_qffected_rows().
PHP si MySQL reprezinta o solutie foarte buna pentru site-urile web din sectorul
de mijloc. MySQL este gandit pentru sectorul de mijloc in care selectarea
si stocarea rapida de date multe sunt mai importante decat suportul tranzactional.
Acest suport tranzactional permite programatorilor sa sincronizeze update-ul
mai multor tabele, lucru de care majoritatea aplicatiilor web nu au nevoie.
In comparatie cu Microsoft Acces, MySQL este mult mai rapid. Oracle si
Microsoft SQL Server au cam aceeasi performanta cu MySQL, dar costurile sunt
foarte ridicate. Oricum comparatia MySQL cu Oracle de exemplu este cam fortata
pentru ca fiecare are alt segment caruia i se adreseaza. MySQL este campion
cand este vorba de instructiuni cum sunt SELECT, UPDATE si INSERT. In
schimb pentru tranzactii Oracle este mai bun.
Apache este astazi cel mai popular Web Server, servind site-urile web de pe
Internet, prin functionalitate, viteza si fiabilitate. Apache este un server
HTTP cu sursa deschisa, dezvoltat de Apache Group. Codul sursa Apache este disponibil
gratuit, inlesnind participarea unei mari comunitati la remedierea eventualelor
disfunctionalitati, trecerea pe noi platforme si personalizarea pentru scopuri
speciale.
PHP este un limbaj de scripting pe partea de server proiectat special pentru
web. Intr-o pagina html se poate scrie cod php care va fi executat de
fiecare data cand este vizitata. Pe serverul web codul php este interpretat
si se genereaza o pagina HTML. PHP este un proiect open source.
De ce PHP?
PHP are multi competitori cum sunt Pearl, Microsoft ASP, JSP, Colp Fusion. In
comparatie cu aceste produse PHP are urmatoarele avantaje:
- performanta ridicata
- suporta interfatarea cu multe sisteme de baze de date
- include librarii pentru multe din cele mai comune task-uri web
- cost redus
- usor de invatat si folosit
- este portabil
- este disponibil codul sursa
Performanta
PHP este foarte eficient. Folosind un singur server ieftin se pot deservi milioane
de cereri zilnic. Benchmark-urile arata ca PHP isi depaseste competitia.
Integrarea cu bazele de date
PHP are disponibile conexiuni native cu multe sisteme de baze de date. Pe langa
Mysql se poate conecta direct la PostgresSQL, mSQL, Oracle, etc.
Folosind ODBC se poate conecta la orice baza de date care are un driver ODBC.
Librarii incluse
Pentru ca PHP a fost proiectat pentru web, acesta are functii predefinite pentru
efectuarea diferitelor taskuri. Se pot genera imagini gif “on-the-fly”,
se poate conecta la diferite servicii de retea, poate trimite mailuri, poate
lucra cu cookie-uri, poate genera fisiere PDF, toate cu doar cateva linii
de cod.
Costuri
PHP este gratuit. Poate fi downloadat de pe site-ul oficial www.php.net.
Invatarea PHP
Sintaxa PHP este bazata pe a altor limbaje de programare, mai ales pe C si Pearl.
Pentru un cunoscator de C, C++, Pearl sau Java limbajul se poate invata foarte
repede.
Portabilitatea
PHP este disponibil pentru diferite sisteme de operare. Functioneaza pe cele
gratuite cum sunt Linux si free BSD, pe versiunile comerciale de UNIX cum sunt
Solaris si IRIX, pe diferite versiuni de Microsoft Windows. Codul merge in
general fara modificari pe oricare sistem pe care ruleaza PHP.
Codul sursa
Accesul la codul sursa este gratuit. Se pot efectua modificari sau adaugiri
fara restrictii.
De ce MySQL?
Unii dintre competitorii principali sunt PostgresSQL, Microsoft SQL Server si
Oracle. MySQL are multe avantaje: performante ridicate, cost redus, usor de
invatat si configurat, portabil, codul sursa este disponibil.
Performanta
MySQL este fara indoiala rapid. Asa cum o arata si benchmark-urile.
Cost redus
MySQL este disponibil gratuit sub licenta open Source sau la un cost redus sub
licenta comerciala daca este necesar.
Usor de utilizat
Multe dintre sistemele de baze de date moderne folosesc SQL. Oricine a folosit
un SGBD se va putea adapta la MySQL repede. Este mai usor de instalat decat
multe produse similare.
Portabilitatea
MySQL poate fi utilizat pe multe sisteme UNIX si pe cele Windows.
Codul sursa
La fel ca si PHP si pentru MySQL este disponibil codul sursa.
Printre dezavantaje s-ar putea mentiona ca MySQL nu suporta proceduri stocate,
triggere si instructiunea SELECT INTO.
2.8.2.5. Securitatea web
Criptografia, este stiinta care foloseste matematica pentru a cripta si decripta
datele. Criptografia este folosita pentru a stoca date confidentiale, sau pentru
a le trimite prin medii nesecurizate. Datele criptate, se numesc cipher, iar
impreuna cu datele necriptate, constiuie criptograma.
Cuvantul “criptografie”, vine de la grecescul “krypte”,
care inseamna “ascuns” si de la grecescul “grafik”,
care inseamna “scriere”.
Criptografia este folosita pentru securizarea datelor, iar inversul ei, este
criptanaliza, care este stiinta care analizeaza si “sparge” datele
criptate. Cipher-ul este mesajul produs prin aplicarea unei metode de criptografie
asupra datelor. Practic, orice cipher, este rezultatul aplicarii unui algoritm,
care este invariabil si a unei chei care este variabila.
Criptarea unor date, poate fi puternica sau slaba. Puterea de criptare, este
data de timpul si de resursele necesare decriptarii textului criptat, fara sa
se stie cheia de criptare. Astfel, pentru a decripta niste date bine criptate,
nu sunt de ajuns un miliard de calculatoare, care sa execute un miliard de instructiuni
pe secunda si sa aiba la dispozitie tot timpul de acum si pana peste un
miliard de ani. Dar, nimeni nu spune ca acest mod de protejare a informatiilor
este perfect. Posibilitatea “spargerii” codului, creste cu inaintarea
in timp (datorita aparitiei calculatoarelor din ce in ce mai performante)
si cu aparitia unor criptanalisti din ce in ce mai determinati.
Un algoritm criptografic, este o functie matematica, folosita in procesul
de criptare si decriptare. Algoritmul criptografic, lucreaza cu o cheie (care
poate fi un cuvant, un numar, o fraza) pentru a cripta textul. Acelasi
algoritm, cripteaza diferit cu diferite chei. Securitatea datelor criptate,
depinde de doua lucruri: puterea algoritmului si secretul cu care este tinuta
cheia.
Criptarea conventionala (algoritmi simetrici)
In criptarea conventionala, o asa zisa cheie secreta, este folosita atat
pentru criptare, cat si pentru decriptare. Criptarea conventionala, se
poate zice ca a fost folosita si acum 2000 de ani, cand Iulius Caesar,
neavand incredere in mesagerii sai, a inlocuit toate
literele a cu d, toate literele b cu e, s.a.m.d.
Deci, fiecare litera venea astfel:
ABCDEFGHIJKLMNOPQRSTUWXYZ
DEFGHIJKLMNOPQRSTUWXYZABC
Folosind acest algoritm, cuvantul “SECRET”, va deveni “VHFUHW”.
Pentru ca un text criptat sa fie citit de catre altcineva, va trebuie sa i se
spuna cheia, care, in acest caz este 3.
Acest tip de criptare, are avantajul ca este rapid. El este eficient cand
nu trebuie sa se transmita datele de la o persoana la alta. Dezavantajul, consta
in transmiterea cheii secrete catre cealalta persoana. Daca o a treia
persoana intra in posesia cheii, ea poate sa modifice, sa stearga sau
doar sa citeasca datele.
Criptarea cu cheie publica (algoritmi asimetrici)
Problema distribuirii cheii secrete, este rezolvata de acest tip de criptare.
Ea a fost inventata in 1975 de Whitfield Diffie si Martin Hellman (sunt
dovezi ca acest tip de criptare a fost descoperit inaintea celor doi de
catre Serviciul Secret Britanic, dar a fost tinut secret si nu s-a facut nimic
cu el).
Criptarea cu cheie publica consta in folosirea a doua chei: una publica
si alta privata. Cheia publica, se poate spune oricui, ea nefolosind decat
la criptarea mesajului. Decriptarea mesajului, este realizata de a doua cheie
(cea privata).
Algoritmi care folosesc astfel e chei sunt:
• Elgamal
• RSA
• Diffie-Helman
• DSA
In practica, de cele mai multe ori, sunt folositi, in combinatie,
atat algoritmii simetrici, cat si cei nesimetrici. Un algoritm cu
cheie publica este folosit pentru a cripta o cheie luata aleator, iar cheia
necriptata, este folosita pentru a cripta datele propriu-zise, folosind un algoritm
simetric. Acest tip de criptare, este numit criptare hibrida, si este foarte
folosit datorita rapiditatii si protectiei care sunt oferite in acelasi
timp.
Algoritmul MD5 (Message Digest) are ca intrare un mesaj de lungime arbitrara
si produce la iesire o “amprenta” de 128 de biti a intrarii. Ipoteza
este ca e imposibil computational ca doua mesaje sa aiba aceeasi semnatura,
sau sa se produca o anumita iesire specificata. Algoritmul este utilizat pentru
semnaturi digitale, unde un fisier mare trebuie securizat inainte sa fie criptat
cu o cheie privata intr-un sistem de criptare cu cheie publica asa cum
este RSA.
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 13 tabele, 12 sunt cele corespunzatoare
entitatilor prezentate in tabelul 1 din subcapitolul 2.3:
- gara
- ruta
- rute_date
- statie
- tren
- traseu
- tiptren
- bilet
- loc
- pret
- supliment
- calator
Celelalt tabel este auxiliar, nu rezulta in urma analizei, ci a fost introdus
ca element ajutator pentru administrare. Acesta este:
- user -; contine userii care au ddreptul sa administreze site-ul cu numele,
parola si tipul 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 tren, atributul id_tip, este cheie straina propagata din tabela
tiptren, pentru a se face legatura dintre cele 2 tabele.
1 1
8 8
8
8
8
1
1
8
8 1
In general, am denumit atributele de identificare cu sufixul id (de la
identificator sau index).
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 arborescenta:
Figura 8. Structura arborescenta a meniului
De la cauta informatii tren spre rute am facut linia punctata deoarece acel
link apare doar in cazul in care am ajuns in informatii tren
din rute.
Tabelul urmator contine categoriile, subcategoriile meniului precum si functionalitatea
acestora.
CATEGORIE SUBCATEGORIE FUNCTIONALITATE
Home Pagina de start
Mersul trenurilor Plecari / Sosiri Informatii despre orarul de parcurs al trenurilor
intr-o anumita gara
Informatii tren Informatii despre un anume tren.
Rute Informatii despre toate trenurile care circula pe o ruta la o anumita data
Jurnal feroviar Articole gazetararesti
Galerie foto O galerie foto cu gari realizata in java script cu ajutorul
ajutorul softului Xara WebStyle 4
Tabel 7. Structura meniului
Meniul principal este afisat permanent pe frame-ul de sus.
In figura .... este prezentata o mostra referitoare la organizarea meniului
mersul trenurilor.
Continutul lucrarii:
Pagina principala este pagina care se dechide la fiecare rulare a aplicatiei
si in care v-a aparea meniul de sus asa cum apare in figura ....
Index.php este pagina din care se pot afla informatii despre plecari/sosiri,
trenuri si rute in care va aparea trei coloane cu trei meniuri pentru
fiecare optiune prezentata mai sus. Pagina arata ca si in fig. .....
Realizarea acestei pagini s-a facut prin crearea unei tabele care a fost impartita
in trei coloane. In prima coloana este formularul care trebuie completat
pentru a afla tabelele cu plecari sau sosiri in gara dorita.
Cauta gara sunt prezentate toate trenurile care pleaca sau care sosesc intr-o
anumita gara impreuna cu orele aferente de plecare sau sosire.
Realizare acestei pagini s-a facut prin crearea unei tabele care a fost impartita
in doua coloane. In prima coloana s-a creat un nou tabel in care
se afiseaza trenurile care circula pe ruta respectiva, iar in a doua coloana
se afiseaza poza garii.
Exemplu:
Fig. Ffff
Cauta tren sunt prezentate toate statiile prin care trece un tren incepad
cu gara de plecaresi pana la gara de sosire impreuna cu orele la care
sosesc si la care pleaca trenul in gara respectiva.
Exemplu:
Cauta rute sunt prezentate toate trenurile care circula pe ruta respectiva
intr-o anumita data.
Exemplu:
Rezervare aceasta optiune per