ACADEMIA DE STUDII ECONOMICE DIN BUCUREȘTI [626944]
ACADEMIA DE STUDII ECONOMICE DIN BUCUREȘTI
FACULTATEA DE CIBERNETICĂ, STATISTICĂ ȘI
INFORMATICĂ ECONOMICĂ
SPECIALIZAREA INFORMATICĂ ECONOMICĂ
LUCRARE DE LICENȚĂ
Solu ie cu bază de date pentruț
activitatea logistică a unei
companii
COORDONATOR ȘTIINȚIFIC
Prof. univ. dr. MANOLE VELICANU
ABSOLVENT: [anonimizat]
2013
Cuprins
Introducere………………………………………………………………………………………………….. 2
1.Prezentarea activității de “Logistică” într-o companie …………………………………….. 3
1.1 Logistica. Concepte generale …………………………………………………………………. 3
1.1.1 Scurt istoric ……………………………………………………………………………………. 3
1.1.2 Definirea conceptului de logistică ……………………………………………………… 5
1.2 Transporturile – element principal al activită ii logistice ț…………………………………………….. 5
1.3 Eficientizarea logisticii …………………………………………………………………………………. 6
1.4Fluxuri informaționale în activitatea de logistică ……………………………………………………… 7
2. Tehnologiile informatice utilizate la realizarea aplica iei de administrare a logisticii ț …………………..9
2.1 Prezentare generală a unei aplica ii web ț………………………………………………………………. 9
2.2 HTML…………………………………………………………………………………………………. 10
2.3 CSS…………………………………………………………………………………………………….. 11
2.4 jQuery…………………………………………………………………………………………………. 12
2.5 PHP……………………………………………………………………………………………………. 13
2.6 MySql………………………………………………………………………………………………….. 13
2.7 Apache…………………………………………………………………………………………………. 14
2.8 Codeigniter……………………………………………………………………………………………. 15
2.9 Eclipse…………………………………………………………………………………………………. 17
3.Analiza și proiectarea aplicației pentru logistica firmei …………………………………………………. 17
3.1Scopul i obiectivele aplica iei ș ț ……………………………………………………………………….. 17
3.2 Proiectarea bazei de date ……………………………………………………………………………… 18
3.2.1 No iuni teoretice ț…………………………………………………………………………………. 18
3.2.2 Proiectarea practică a bazei de date …………………………………………………………….. 20
3.3 Proiectarea interfeței ………………………………………………………………………………….. 24
4. Prezentarea aplica iei privind logistica companiei ț ………………………………………………………. 26
4.1 Implementarea aplica iei ț……………………………………………………………………………… 26
4.1.1 Implementarea bazei de date i a func ionalită ii acesteia ș ț ț ……………………………………… 28
4.1.2 Implementarea interfe ei i a func ionalită ii acesteia ț ș ț ț ………………………………………….. 29
4.2 Utilizarea aplicației ……………………………………………………………………………… 32
Concluzii……………………………………………………………………………………………………. 37
Referin e bibliografice ț………………………………………………………………………………………. 38
Lista figurilor……………………………………………………………………………………………… 39
Anexe……………………………………………………………………………………………………….. 40
1
Introducere
Lucrarea de fa ă î i propune să justifice importan a bazelor de date în orice sector i ț ș ț ș
activitate a domeniului economic. Este oferit ca exemplu dezvoltarea unei aplica ii ce utilizează ț
o bază de date pentru a administra activitatea oricărei firme care activează în domeniul
transporturilor sau are un departament de transporturi ori logistică internă.
Datele au devenit în ultimii ani cele mai importante resurse ale unei companii deoarece
ele oferă o imagine de ansamblu a activită ii acesteia i reprezintă baza previziunilor pentru ț ș
viitor. Astfel că datele trebuie stocate i manipulate într-un mod cât mai eficient pentru a putea ș
oferi răspunsuri viabile la necesită ile firmei. Deoarece ne situăm în era tehnologiei informa iei, ț ț
orice firmă care dore te să fie eficientă trebuie să profite de avantajele oferite de utilizarea unei ș
aplica ii informatice care simplifică munca angaja ilor i ajută la luarea celor mai bune decizii în ț ț ș
ceea ce prive te activitatea economică a firmei. ș
Am ales ca i domeniu economic de interes, logistica i în special domeniul ș ș
transporturilor deoarece este un sector economic dinamic i totu i existent din cele mai vechi ș ș
timpuri. Firmele care desfă oară activită i ce presupun transporturi au o mare provocare în ș ț
administrarea costurilor de transport deoarece acestea au cea mai mare pondere în totalitatea
costurilor logistice, astfel că este esen ial ca această activitate să fie gestionată corect prin ț
intermediul unei aplica ii informatice. ț
Compania în cadrul căreia a fost realizată documentarea privind departamentul de
logistică, pe baza căreia au fost identificate elementele ce trebuie luate în considerare la
dezvoltarea aplica iei este SC Realitatea Media SA. Realitatea Media este prima televiziune din ț
România dedicată transmisiei 24 de ore din 24 a tirilor. Filosofia postului este că evenimentul ș
guvernează programul, astfel că în orice moment desfă urătorul de emisie poate fi dinamizat cu ș
informa ii de ultimă oră. Grila de programe a Realitatea TV cuprinde în special jurnale de ț
tiri(din oră în oră), dar i emisiuni de analiză politică, socială, culturală i tiin ifică.ș ș ș ș ț
Am considerat că această companie este una relevantă pentru domeniul economic ales i ș
pentru dezvoltarea aplica iei, deoarece de ine un parc auto de dimensiuni mari, aproximativ 30 ț ț
de autovehicule, care efectuează un număr mare de curse pe zi, în diferite scopuri: transmisiuni
live, deplasarea coresponden ilor în teritoriu, transportul invita ilor, aprovizionare internă, etc. ț ț
Vorbim de autovehicule de toate categoriile, inclusiv de cele echipate pentru transmisii din teren.
Un alt element relevant pentru acest domeniu este faptul că sunt înregistrate costuri foarte mari
cu logistica i transporturile ceea ce indică un grad mare de utilizare al respectivelor ș
autovehicule.
2
Lucrarea este structurată în patru capitole ce realizează prezentarea domeniului economic
ales, a tehnologiilor informatice utilizate în realizarea aplica iei de administrare a activită ii ț ț
logistice i a aplica iei rezultate împreună cu modul de implementare a acesteia. ș ț
Astfel, capitolul 1 descrie activitatea de logistică cu tot ceea ce presupune ea, punând
accent pe componenta de transporturi. Sunt descrise fluxurile informa ionale ce apar în ț
desfă urarea activită ii i care sunt utile în dezvoltarea aplica iei deoarece ilustrează modul în ș ț ș ț
care circulă informa iile în cadrul departamentului logistic. Capitolul 2 prezintă tehnologiile ț
informatice utilizate pentru realizarea programului, accentuând punctele lor forte i justificând ș
astfel alegerea lor. Capitolul 3 realizează proiectarea aplica iei i con ine detalii tehnice ț ș ț
referitoare la modul în care a fost implementată aceasta. Ultimul capitol prezintă aplica ia i ț ș
oferă indica ii de utilizare a acesteia. ț
1.Prezentarea activității de “Logistică”
într-o companie
1.1 Logistica. Concepte generale
1.1.1 Scurt istoric
Nu se cunoa te cu exactitate originea termenului de logistică, dar există mai multe ș
ipoteze în acest sens. Una dintre acestea presupune că acest cuvânt provine din limba greacă, din
cuvântul “logistikos” care înseamnă a fi priceput în a face calcule.
Cu toate acestea, deoarece termenul a fost utilizat destul de târziu în istorie (sfârșitul
secolului al XVIII-lea sau chiar începutul secolului al XIX-lea) a determinat destul de mul i ț
istorici i etimologi să sus ină faptul că termenul logistică provine din limba franceză, mai exact ș ț
din termenul “logistique”, termen folosit destul de mult mai ales în campaniile militare,
desemnând opera iunile de transportare i pozi ionare a unită ilor pe câmpul de luptă, dar i ț ș ț ț ș
opera iunile desfă urate pentru transportul hranei i a tuturor celorlaltor elemente anexe unei ț ș ș
unită i militare (unită i de comunica ie, unită i medicale, unită i ce efectuau diferite servicii ț ț ț ț ț
pentru solda i, etc). ț
Una dintre primele personalită i care au utilizat termenul de “logistică”, a fost baronul ț
elve ian Antoine Henry Jemini, care luptase în campaniile lui Napoleon i avea deci destul deț ș
multe cuno tin e în domeniul militar i chiar logistic. În lucrarea sa “Sumar al artei războiului”, ș ț ș
apărută în 1838, baronul sus ine că logistica este unul dintre pilonii principali ai conducerii i ț ș
câ tigării unui război. Apare astfel o primă defini ie a logisticii care presupune mutarea iș ț ș
pozi ionarea armatei, dar i a tuturor materialelor necesare acesteia.ț ș
3
Un alt studiu care a vizat logistica militară este „ Pure Logistics – The Science of War
Preparation” (Logistica absolută – Știința Pregătirii Războiului), publicat de către maiorul
american George C. Thorpe în anul 1916. Scopul respectivului studiu era de a evidenția
importan a teoriei militară a logisticii (denumită „ ț pure logistics”) și mai pu in partea aplicată a ț
acesteia (denumită de către autor „ applied logistics”). Putem spune că acesta a fost unul dintre
primele manuale de logistică publicate. Elementul principal sus inut de către Thorpe este ț
caracteristica de întreg a logisticii. Astfel, autorul a demonstrat prin puternice exemple istorice
faptul că logistica neintegrată a e uat în majoritatea marilor campanii militare. Putem men iona ș ț
aici Războiul lui Napoleon în Rusia din 1812, sau Războiul Prusiei cu Fran a din 1870 – 1871. ț
[TH16]
De i Thorpe a utilizat termenul de logistică, in scrierile sale, acesta nu a reu it să seș ș
impună în strategiile militare din acea perioadă, dar a căpătat totu i un rol important în domeniul ș
militar, astfel că după cel de-al Doilea Război Mondial, logistica militară a devenit un domeniu
studiat pe larg. În domeniul economic, logistica a apărut după 1960.
Figura 1.1 indică evoluția acesteia în timp. Astfel, se observă că la început, activitățile
logistice erau separate, pentru ca în prezent să se vorbească despre un management integrat al
logisticii care gestionează componente precum: planificarea cererii, achizițiile, gestiunea
stocurilor, depozitarea, distribuția și transportul.
Tot în anii 1960 apare și termenul de “logistică a firmei” (“ business logistics”), care
desemna “managementul tuturor activităților care asigură transferul și coordonarea
aprovizionării și distribuției în sensul creării utilității de timp și spațiu”. [HEIVGL65]
Figura 1.1 Evoluția logisticii în cadrul firmei, [MO96]
4
1.1.2 Definirea conceptului de logistică
Voi prezenta câteva definiții ale logisticii propuse de-a lungul timpului.
În 1962, National Council of Physical Distribution Management (NCPDM), definește
logistica astfel: “Mulțimea de activități implicate în tranferul eficient al produselor finite de la
punctele de producție la consumator și în unele cazuri a materialelor de la furnizor la unitățile
de producție. Acestea sunt: transportul, depozitarea, manipularea materialelor, ambalarea,
gestiunea stocurilor, selectarea locațiilor fabricilor și depozitelor, procesarea comenzilor,
previzionarea cererii și serviciul către clienți ”.
În anul 1986 apare definiția dată de către Council of Logistics Management (CLM)
care înglobează practic tendințele logisticii acelor ani: “Logistica este procesul de planificare,
implementare și control al fluxurilor și depozitării eficiente și eficace a materiilor prime,
stocurilor în curs de producție, produselor finite, și a informațiilor referitoare la acestea, de la
punctul de origine la punctul de consum al acestora, cu scopul conformării cerințelor
consumatorilor”. Se observă faptul că a ceastă definiție pune accentul pe planificare,
implementare și control, deci pe activitățile de management desfășurate în cadrul logisticii.
Mai recent, în 2005 apare pentru logistică definiția: „a livra un produs, în bună stare, la
momentul potrivit, în locul potrivit, în cantitatea corectă și necesară, în ambalajul de prezentare
corespunzător, precedate, însoțite și urmărite de informații corecte și exacte înscrise pe
documente legale, totul în cele mai bune condiții economice” . [AKFRDU05] .
Această definiție pune accent pe documentele care însoțesc, confirmă și urmăresc fluxul de
informații și asigură stabilirea istoricului traseului parcurs în distribuție.
Din definițiile prezentate până aici, pot concluziona că logistica este activitatea care se
ocupă în primul rând cu transportul mărfurilor sau produselor, dar si cu achiziția, depozitarea și
livrarea acestora.
După părerea mea, principala componentă a activității logistice se referă la transport,
deoarece acesta generează cele mai mari costuri și totodată este cel mai greu de gestionat.
1.2 Transporturile – element principal al activită ii logistice ț
Transportul reprezintă mi carea oamenilor, animalelor sau a bunurilor dintr-o loca ie în ș ț
alta. Modalită ile de transport includ: aerul, calea ferată, oseaua, cablul, conducta sau spa iul. ț ș ț
Domeniul transporturilor poate fi divizat în “infrastructură”, “vehicule” i “opera iuni”. ș ț
Infrastructura constă în instala ii fixe sau construc ii necesare transportului, cum ar fi: ț ț
osele, căi ferate, căi aeriene, canale fluviale i terminale precum: aeroporturi, gări, sta ii,ș ș ț
depozite, etc. Terminalele pot fi folosite atât pentru schimbarea pasagerilor sau a mărfurilor, cât
i pentru mentenan ă. Vehiculele care utilizează aceste re ele pot include: automobile, biciclete,ș ț ț
autobuze, trenuri, camioane i altele. Opera iunile sunt reprezentate de modul în care sunt ș ț
5
utilizate vehiculele i procedurile setate pentru scopul propus. În domeniul transporturilor, ș
opera iunile i infrastructura pot fi atât publice cât i private, în func ie de ară. ț ș ș ț ț
Din punct de vedere economic, performan a sectorului transporturilor este sensibilă la ț
pre ul petrolului. Deoarece opera iunile gravitează în jurul vehiculelor, pre ul combustibililorț ț ț
reprezintă un cost semnificativ al companiilor ce se ocupă cu transporturile. Atunci când pre ul ț
petrolului cre te, companiile se a teaptă să câ tige mai pu in, în timp ce atunci când pre ul ș ș ș ț ț
petrolului este mic, situa ia financiară a companiilor este bună. ț
1.3 Eficientizarea logisticii
Ca în orice alt domeniu economic, eficientizarea presupune reducerea costurilor și
implicit maximizarea profitului. Astfel, eforturile de eficientizare a activității sunt canalizate în
primul rând către rentabilizarea operațiunilor logistice.
Una dintre primele op iuni luate in calcul pentru diminuarea costurilor logistice este ț
externalizarea acestor opera iuni, cunoscută sub denumirea de ț outsourcing. Cu toate acestea, este
indicat ca aceasta variantă să fie adoptată atunci când calitatea serviciilor oferite de către
operatorul logistic contractat este cel pu in similară cu cea existentă în companie, iar pre ul cerut ț ț
este convenabil.
O altă op iune poate fi dezvoltarea parcului auto (logistic) ceea ce ar permite oferirea de ț
servicii către alte firme, ceea ce aduce un venit necesar acoperirii costurilor proprii. Astfel , este
destul de des întâlnită separarea activită ii logistice într-o entitate de sine stătătoare, care acoperă ț
atât nevoile companiei, dar oferă i servicii către exterior. Practic, putem spune că este creat ș
operatorul logistic necesar desfă urării activită ii companiei. ș ț
Cea de-a treia op iune se referă la încercarea de optimizare a activită ii desfă urate de ț ț ș
parcul logistic, ceea ce presupune administrarea eficientă a depozitelor i a parcului auto, dar i ș ș
îmbunătă irea proceselor de aprovizionare i distribu ie. ț ș ț
Astfel, eficientizarea costurilor logistice necesită o operațiune complexă desfă urată la ș
nivelul întregii companii. Acestă operațiune presupune existența unui sistem informatic capabil
să gestioneze fluxurile de lucru și să urmărească costurile operaționale.
Vorbim despre activitate logistică nu numai în cadrul firmelor de distribuție sau al
firmelor ce manipulează marfuri, cât și în cadrul altor firme care dețin un parc auto ce implică
efectuarea de numeroase curse și deplasări pentru îndeplinirea obiectivelor companiei.
Astfel, consider că principala activitate ce trebuie rentabilizată este activitatea de
transporturi, care generează cele mai mari costuri. Din punct de vedere informatic, așa cum am
precizat și mai sus, eficientizarea presupune existența unor aplicații ce au au ca scop urmărirea și
gestionarea costurilor și a cheltuielilor curente și viitoare.
O aplica ie complexă ce are ca scop administrarea activită ii logistice i implicit ț ț ș
eficientizarea acesteia, trebuie să urmeze mai multe direc ii de dezvoltare: ț
6
definirea i planificarea rutelor parcurse de vehiculele firmei; ș
optimizarea rutelor planificate zilnic prin aplicarea unor abloane, pentru a ine sub control ș ț
costurile de transport;
suport pentru elaborarea unor strategii de transporturi pe termen lung, prin previzionarea
costurilor;
administrarea resurselor (a personalului, a vehiculelor i a materialelor transportate); ș
elaborarea de rapoarte ce ilustrează activitatea logistică a companiei.
Opinia mea este că cele mai importante elemente ale unei astfel de aplica ii sunt reprezentate ț
de administrarea resurselor si elaborarea de rapoarte necesare observării activită ii companiei, ț
deoarece o aplica ie ce con ine aceste module poate fi utilizată atât ce o firmă mică, cât i de o ț ț ș
companie al cărei obiect de activitate este strict logistica i procesează o multitudine de comenzi ș
i transporturi zilnic.ș
1.4 Fluxuri informaționale în activitatea de logistică
Pentru a dezvolta o aplica ie de administrare a activită ii logistice, analistul/ ț ț
programatorul trebuie să în eleagă modul de formare a fluxurilor informa ionale identificate în ț ț
activitatea companiei.
Pentru a identifica entitățile ce vor fi luate în calcul la dezvoltarea aplicației voi pleca de
la o definiție a lanțului de aprovizionare ( supply chain), al unei întreprinderi.Astfel, acesta
include toți furnizorii, capacitățile de producție, centrele de distribuție, depozitele și clienții,
împreună cu materiile prime, stocul de produse semifabricate și stocul de produse finite și cu
toate resursele și informațiile implicate în satisfacerea cerințelor clienților ceea ce înseamnă că
lanțul de aprovizionare este un proces care leagă furnizorii, producătorii, depozitele, distribuitorii
și clienții. [LUCO06]
Putem aprecia că lanțul de aprovizionare este descris cu ajutorul costurilor și veniturilor
implicate: costuri cu furnizorii / materiile prime și materialele, costuri de transport, costuri de
producție, costuri de depozitare și distribuție i venituri de la clienți. ș
Conceptul de supply chain (lanț de aprovizionare) a fost folosit inițial pentru a defini
traseul parcurs de materiale / marfă de la furnizor la firmă.
O aplicație informatică ce are scopul de a eficientiza logistica trebuie să gestioneze și să
previzioneze cererile, sincronizând aprovizionarea cu cererea. Corelarea ofertei cu cererea duce
la livrarea produsului comandat la locul și momentul potrivit. Dacă această aprovizionare este
făcută în condițiile existenței comenzii, atunci firmele pot să-și reducă stocurile și chiar să
lucreze cu un stoc apropiat de cel critic.
În continuare voi prezenta principalele fluxuri de procese informaționale ale unui lanț de
aprovizionare, ilustrate în figura 1.3 . Astfel, putem identifica cel puțin următorii actori principali
ce participă la realizarea fluxurilor informaționale:
7
Planificare
ExecutareControlManager parc logistic
Operator•clientul: cumpără bunuri și servicii
•furnizorul: vinde bunuri și servicii
•sistemul de aprovizionare: achiziționeazăbunuri și servicii de la furnizori
•sistemul de desfacere: vinde bunuri și servicii clienților
•sistemul de producție: produce bunuri și servicii
•sistemul de transport: transportă bunuri.
•depozitele: gestionează bunurile produse și/sau achiziționate.
Figura 1.2 Procese și fluxuri informaționale în lanțul de desfacere, [NOHU00]
Deoarece, în prezenta lucrare ne axăm în primul rând pe activitatea de transporturi, fluxul
informa ional luat în calcul este unul simplificat i urmăre te doar livrarea bunurilor sau ț ș ș
transportul persoanelor între două loca ii i face legătura între serviciile de aprovizonare i ț ș ș
livrare.
Figura 1.3 pezintă fluxul informațional ce descrie activitatea de transporturi. Observăm
astfel că operatorul logistic (șofer, vehicul) execută cursa, în timp ce managerul parcului logistic
se ocupă cu coordonarea activității (planificare și control).
Figura 1.3 Fluxul informațional al activității logistice din cadrul unei companii
8
2.Tehnologiile informatice utilizate la realizarea aplica iei de ț
administrare a logisticii
În continuare vor fi prezentate tehnologiile utilizate pentru realizarea aplica iei de ț
administrare a activită ii logistice. Trebuie precizat că aplica ia va fi una ț ț web-based, adică o
aplica ie ce va putea fi accesată într-un navigator web i va rula pe un server HTTP. ț ș
2.1 Prezentare generală a unei aplica ii web ț
Termenul de aplica ie web este folosit pentru o aplica ie care este accesată de utilizatori ț ț
prin intermediul unei re ele (internet / intranet). Acest termen poate de asemenea să desemneze o ț
aplica ie software scrisă într-un limbaj de programare suportat de navigator ț (browser-supported)
precum JavaScript sau jQuery combinat cu un limbaj de marcare precum HTML i care se ș
bazează pe un browser web pentru redarea aplica iei executabile. ț
Aplica ia pentru administrarea activită ii de logistică se va baza pe mai multe tehnologii. ț ț
HTML, CSS i JQuery au fost folosite pentru partea vizuală i crearea interfe ei, în timp ce PHP ș ș ț
se ocupă cu prelucrările ce au loc pe server (asigură func ionalitatea aplica iei) iar MySql asigură ț ț
legatura cu baza de date prin stocarea datelor si accesul la acestea. În plus, aplica ia va fi stocată ț
pe un server HTTP (Apache).
Pentru o bună organizare a codului sursă i a modulelor proiectului, a fost folosit cadrul ș
de lucru(“framework”) Codeigniter care pe lângă o multitudine de alte facilită i/func ii pe care le ț ț
oferă, facilitează implementarea arhitecturii MVC ( Model – View – Controller ). Tot la
Codeigniter, pot adăuga ca i facilitate importantă, clasa ș Active Record care permite ca opera iile ț
uzuale de lucru cu baza de date să fie simplificate din punctul de vedere al codului scris.
O altă tehnologie utilizată este mediul de dezvoltare Eclipse.
2.2 HTML
HTML (HyperText Markup Language ) este principalul limbaj de marcare utilizat în
crearea de pagini web și alte informații ce pot fi redate într-un navigator web ( web browser).
Scopul unui navigator web este acela de a citi documentele HTML și de a le reda într-o formă
vizibilă sau/și audibilă. Navigatorul nu afișează marcajele HTML, ci le folosește pentru a
interpreta conținutul paginii.Aceste indica ii furnizate de către marcajele HTML, pot varia de la ț
cele mai simple (fontul unui paragraf) la unele complexe(scripturi complicate, formulare, hăr i). ț
Tot prin intermediul marcajelor HTML, pot fi specificate metadate ce con in informa ii despre ț ț
document (titlul, autorul) sau informa ii ce specifică structurarea documentului( divizarea în ț
9
paragrafe, liste, etc). HTML permite ca fiecare document să poată fi legat de altele prin
hiperlegături (hyperlinks) care formează web-ul.
Limbajul HTML poate fi citit i editat folosind orice editor simplu de text. Cu toate ș
acestea, scrierea i modificarea paginilor solicită unele cuno tin e de HTML i consumă timp, ș ș ț ș
astfel că de-a lungul timpului au apărut programe utilitare cu scopul de a facilita crearea de
pagini web. Editoarele grafice (denumite generic WYSIWYG = “ what you see is what you get”)
precum Macromedia Dreamweaver, Adobe GoLive sau Microsoft FrontPage permit ca paginile
web să poată fi realizate u or de către oricine are anumite cuno tin e de operare a calculatorului. ș ș ț
De i crearea site-urilor folosind acest tip de programe este mult mai u oară, trebuie precizat căș ș
de cele mai multe ori codul HTML generat de acestea este de o calitate slabă.[WIKI01].
HTML poate fi generat direct prin utilizarea unor tehnologii de programare din partea
serverului, precum : PHP(Hypertext Preprocessor), JSP (Java Server Pages)sau ASP(Active
Server Pages).
Aplica ia de administrare a activită ii logistice utilizează HTML pentru afi area ț ț ș
con inutului într-un browser web, în forma dorită de programator, permi ând chiar modificareaț ț
acesteia în func ie de cerin ele utilizatorilor. ț ț
2.3 CSS
CSS (Cascading Style Sheets) este un limbaj folosit pentru descrierea semanticii de
prezentare (aspect i formatare) a unui document scris într-un limbaj de marcare (HTML). ș
De cele mai multe ori CSS este folosit pentru a stiliza paginile web scrise în HTML sau
XHTML, dar limbajul poate fi aplicat oricărui tip de document XML. CSS a fost gândit în
primul rând pentru a separa con inutul documentului (exprimat în HTML) de prezentarea ț
documentului care include elemente precum: culori, font, orientare. Această separare
îmbunătă e te accesibilitatea con inutului i oferă o mai mare flexibilitate i control în ț ș ț ș ș
specificarea i modificarea caracteristicilor prezentării. În plus, CSS permite ca mai multe pagini ș
să folosească acelea i specifica ii de prezentare i reduce repetarea acestora. Mai mult, CSS oferă ș ț ș
facilitatea ca aceea i pagină să poată fi prezentată în mai multe formate în func ie de metoda de ș ț
redare (ecran, printare, dispozitive tactile, etc).
Stilurile CSS pot fi ata ate documentelor HTML, atât prin includerea unor documente ș
externe, cât i în cadrul documentului, folosind marcajul <style> i/sau atributul “style” (pentru ș ș
specificarea stilului în cazul unui anumit element HTMl).
Principalul dezavantaj al CSS este faptul că unele navigatoare nu sunt compatibile cu
CSS i documentele HTML sunt afi ate ca i cum CSS n-ar exista, dar cele mai cunoscute i ș ș ș ș
utilizate browsere, cum ar fi: Mozilla Firefox, Internet Explorer, Opera, i altele, ș
sunt compatibile CSS.
10
Printre beneficiile CSS putem enumera: formatarea este introdusă într-un singur loc pentru
tot documentul, editarea rapidă a etichetelor, mic orarea codului paginii i implicit încărcarea ș ș
mai rapidă a acesteia.
Sintaxa CSS este împăr ită în trei categorii/nivele: ț
nivelul 1 – reprezintă proprietatile etichetelor din documentul HTML, folosind atributul style
(tip inline);
nivelul 2 – reprezintă informa ia introdusăîn blocul HEAD, utilizând marcajul ț <style>
(embedded);
nivelul 3 – reprezintă c omenzile aflate în pagini separate ( externe).
Cea mai mare prioritate o are sintaxa de nivelul 1 ( inline) iar cea mai mică o are cea de nivelul 3.
Utilizarea nivelului 3 (fi ier ș extern care con ine comenzi CSS) este practica recomandată ț
deoarece poate fi utilizat în mai multe situa ii (mai multe fi iere HTML pot folosi acela i fi ier ț ș ș ș
extern CSS) eliminând astfel timpul necesar introducerii codului corespunzător în fiecare pagină
i facilitând editarea lorș într-un singur loc pentru mai multe fi iere. ș
Aplica ia descrisă în prezenta lucrare utilizează CSS pentru formatarea con inutului i ț ț ș
prezentarea atractivă a paginilor. Fi ierul CSS utilizat este prezentat în Anexa 4. ș
2.4 jQuery
jQuery este o bibliotecă JavaScript concepută pentru a simplifica scripturile de pe partea
de client i anume scripturile executate prin intermediul elementelor HTML. A fost lansată în ș
ianuarie 2006 de către John Resig. Sintaxa jQuery face mai u oară navigarea într-un document, ș
selectarea elementelor din DOM ( Document Object Model ), crearea anima iilor, manipularea ț
evenimentelor i chiar dezvoltarea de aplica ii AJAX. jQuery oferă de asemenea posibilitatea ș ț
dezvoltatorilor de a crea extensii pentru bibliotecile de JavaScript. Astfel, se pot abstractiza
interac iunile , anima iile i efectele. ț ț ș
jQuery permite îndeplinirea unor sarcini precum:
accesarea unor anumite păr i din pagină i traversarea elementelor paginii; ț ș
modificarea aspectului unei pagini i posibilitatea schimbării dinamice a proprietă ilor ș ț
după încărcarea paginii;
modificarea con inutului paginilor (text, imagini); ț
răspuns la interac iunea utilizatorului cu elementele HTML; ț
adăugarea de anima ii complexe; ț
Plugin-urile sau extensiile sunt cele mai interesante facilită i oferite de jQuery. Programatorii pot ț
dezvolta subaplica ii care să extindă func iile de bază jQuery cu func ii folosite de către ț ț ț plugin.
Astfel, biblioteca principală ocupă doar atât spa iu cât este necesar, în timp ce extensiile vor fi ț
încărcate doar la cerere i în acele pagini unde sunt necesare. Dezvoltatorii pot utiliza un set de ș
extensii predefinite, numit jQuery UI ( jQuery User Interface ). Principalul avantaj al jQuery este
11
faptul că dezvoltarea i testarea componentelor se face concomitent cu dezvoltarea bibliotecii ș
principale, astfel că este eliminată incompatibilitatea.
După părerea mea, cea mai atractivă caracteristică a jQuery este faptul că prin
multitudinea de extensii si utilizări poate furniza solu ii cât mai diversificate, după cum spunea i ț ș
creatorul bibliotecii, John Resig: “ I love seeing cases where an API that I thought I knew well is
turned around and used in new and interesting ways ”. [RE09]
În cadrul aplica iei de logistică, jQuery asigură în primul rând interactivitatea ț
utilizatorului cu mediul de lucru.
2.5 PHP
PHP (PHP Hypertext Preprocessor, ini ial ț Personal Home Page ) este un limbaj de
programare server-side destinat dezvoltării web, dar folosit de asemenea ca un limbaj de
programare de uz general. PHP a fost creat ini ial de către Rasmus Lerdorf în 1995, iar acum este ț
produs de Grupul PHP. Limbajul PHP a apărut în 1995 deoarece Rasmus Lerdorf dorea să afle
câte vizitări are CV-ul lui online. PHP începe să fie remarcat din momentul în care Zeev Suraski
i Andi Gutmansș au rescris motorul, care va purta numele de Zend, o combina ie a prenumelor ț
celor doi programatori. Datorită faptului că este open-source, PHP profită de faptul că are un
suport activ din partea comunității online i se dezvoltă foarte rapid. Interpretorul PHP este cel ș
mai utilizat limbaj de programare folosit pentru realizarea site-urilor Web dinamice. Diferența
față de alte limbaje de programare (precum JavaScript) este reprezentată de faptul că PHP
execută opera iile pe server i nu pe calculatorul client. Astfel, PHP poate accesa baze de date, ț ș
fi iere i alte resurse la care JavaScript nu are acces. ș ș În plus, PHP interpretează instruc iunile pe ț
server i returnează cod HTML necesar paginilor web. HTML este un limbaj static, iar codul ș
scris în HTML este salvat în fi iere ce pot fi vizualizate prin apelarea lor în browser. Dacă este ș
necesară modificarea con inutului paginilor HTML într-un mod dinamic i chiar crearea ț ș
documentelor HTML în func ie de anumite condi ii, va fi folosit un limbaj de scripting pe server, ț ț
precum PHP, Perl, ASP sau altele. Respectivele pagini pot con ine func ii de interogare a bazei ț ț
de date, preluarea de date de pe alte site-uri sau din alte fi iere, iar în final este construită o ș
pagină HTML trimisă către browser. Codul PHP nu este vizibil vizitatorilor. El nu este compilat,
ci rămâne pe server i la fiecare cerere din partea clientului este interpretat i doar rezultatul ș ș
(HTML) este vizibil.
PHP a fost folosit i în cadrul acestui proiect pentru a implementa func ionalitatea ș ț
aplica iei pe partea de server i de lucru cu datele. ț ș
12
2.6 MySql
MySQL este un sistem de gestiune a bazelor de date rela ionalț, creat de compania
suedeza MySQL AB (în momentul de fa ă de inută de Oracle). MySQL rulează ca un server, ț ț
facilitând conectarea mai multor utilizatori i accesul la mai multe baze de date. Este printre cele ș
mai populare sisteme de gestiune a bazelor de date, i chiar cel mai popular dintre sistemele cu ș
sursă deschisă (open-source) la ora actuală. MySQL este totodată un element important al
utilitarelor de tip LAMP (Linux, Apache, MySQL, PHP), care fac u oară configurarea i ș ș
utilizarea unui server web. MySQL este strâns legat de PHP, împreună formând a a-numitul ș
Duo-Dinamic, folosit la majoritatea site-urilor existente.
De i, de cele mai multe ori este utilizat alături de PHP, MySQL permite construirea deș
aplica ii în orice limbaj major de programare (C, C++, Java, Perl, Python). Administrarea bazelor ț
de date MySQL se poate face atât folosind modul linie de comandă, cât i prin intermediul unor ș
interfe e grafice precum: MySQL Administrator, MySQL Workbench sau phpMyAdmin. ț
Principalele caracteristici ale MySQL sunt:
faptul că este un sistem de baze de date rela ional; ț
arhitectura client/server: mysql lucrează ca un server de baze de date la care se pot conecta
mai mul i clien i (programe de aplica ie). Clien ii pot rula pe aceea i ma ină fizică sau pot fi ț ț ț ț ș ș
localiza i pe un alt calculator, comunicând prin re eaua locală sau prin Internet; ț ț
compatibilitatea SQL: după cum reiese i din denumirea sa, este folosit limbajul de baze de ș
date SQL, ca i limbaj standardizat pentru interogarea i actualizarea datelor; ș ș
viteza: MySQL este considerat una dintre cele mai rapide aplica ii de lucru cu bazele de date; ț
independen a de platformă: aplica iile client pot rula pe o varietate de sisteme de operare, iar ț ț
MySQL ca i server poate de asemenea să fie executat pe platforme precum: Apple ș
Macintosh OS X, Linux, Microsoft Windows, dar i alte variante de Unix, cum ar fi: AIX, ș
BSDI, FreeBSD, HP-UX, Open BSD sau Solaris.
O altă caracteristică importantă a MySQL este faptul că poate rula pe platforme cloud cum ar fi
Amazon EC2, existând mai multe posibilită i pentru realizarea acestei facilită i precum: ț ț
utilizarea unei ma ini virtuale cu MySQL instalat, sau oferirea de servicii MySQL de către ș
operatorul de găzduire.
MySQL are atât puncte forte cât i puncte slabe, “Mul i fani înrăi i ai MySQL spun că ș ț ț
acest SGBD este mai rapid, mai de încredere i mai ieftin, sau pur i simplu mai bun, decât orice ș ș
alt sistem de gestiune a bazelor de date (inclusiv sistemele comerciale precum Oracle sau DB2),
în timp ce multi oponen i ai MySQL spun chiar că nu este nici măcar un sistem de baze de date ț
rela ional”. [KO05]ț
În ceea ce prive te aplica ia prezentată în această lucrare, pot spune că MySQL ocupă ș ț
unul din cele mai importante roluri pentru realizarea ei în primul rând datorită faptului că este
prelucrat un set de date de dimensiune mare, iar accesul la aceste date trebuie să fie cât se poate
13
de rapid i corect. MySQL, împreună cu PHP realizează opera iile de regăsire, actualizare, ș ț
inserare i tergere a datelor. ș ș
2.7 Apache
Apache HTTP Server este un server web open source, recunoscut ca fiind cel mai
popular. Ini ial a fost destinat mediilor de lucru Unix, dar apoi a fost portat în Windows i alte ț ș
sisteme de operare în re ea. Apache a avut un rol important în dezvoltarea web, cunoscând o ț
cre tere impresionantă, iar în prezent este folosit la peste jumătate din paginile de Internet active.ș
Apache a apărut ca o primă alternativă de calitate pentru Netscape Communications
Corporation, iar apoi s-a dezvoltat ca un rival competitiv pentru toate serverele web bazate pe
Unix. Fiind un program cu sursă deschisă, Apache este dezvoltat de o comunitate de
programatori coordona i de Apache Software Foundation. Apache poate rula pe o mare varietate ț
de sisteme de operare, precum: Unix, FreeBSD, Mac OS X, Linux, Microsoft Windows.
Robert McCool este cel care a realizat prima versiune a serverului web Apache, în timp
ce lucra la proiectul National Center for Supercomputimg Applications (NCSA). A doua versiune
a pus accent pe Apache Portable Runtime, un nivel considerat prioritar la vremea respectivă.
Func ionalitatea Apache poate fi extinsă de o multitudine de module care variază de la ț
programarea pe partea de server, până la anumite scheme de autentificare dinspre client. Printre
limbajele de programare suportate de Apache putem enumera: mod_perl, mod_python, Tcl i ș
PHP. O calitate aparte a serverului Apache este reprezentată de găzduirea virtuală, care constă în
posibilitatea ca pe acela i server să fie găzduite mai multe site-uri simultan. ș
Competitorii serverului Apache sunt: Microsoft Internet Information Services (IIS), Zeus
Web Server, Sun Java System Web Server etc. Importan a Apache este recunoscută de faptul că ț
unele dintre cele mai mari site-uri din lume îl folosesc ca i server. Spre exemplu, motorul de ș
căutare Google, folose te un modul modificat de Apache denumit Google Web Server (GWS). ș
2.8 Codeigniter
Codeigniter este un cadru de lucru ( framework) cu sursă deschisă folosit pentru a
construi aplica ii web i site-uri cu PHP, într-o manieră rapidă i ordonată. “Scopul său este acela ț ș ș
de a oferi posibilitatea dezvoltatorilor de a realiza proiecte mult mai rapid fa ă de scrierea ț
codului de la zero, prin oferirea unui set bogat de biblioteci pentru cele mai utilizate sarcini,
precum i o interfa ă simplă i o structură logică, prin care să acceseze aceste biblioteci” [CO01]. ș ț ș
Acest lucru înseamnă că programatorii se pot concentra mai mult asupra proiectului, minimizând
timpul necesar scrierii de cod pentru func ionalitatea de bază. ț
14
Codeigniter este de asemenea un produs software cu sursă deschisă, astfel că el poate fi
modificat i utilizat după cum dore te fiecare programator. CodeIgniter are unele caracteristici ș ș
pozitive care îl fac să fie unul dintre cele mai utilizate cadre de lucru cu PHP:
ocupă foarte pu ină memorie deoarece sistemul său central con ine doar câteva ț ț
biblioteci mici, iar celelalte biblioteci necesare sunt încărcate dinamic la cerere;
este printre cele mai rapide cadre de lucru, în primul rând datorită caracteristicii
prezentate la punctul anterior;
este extensibil: orice programator î i poate adăuga propriile biblioteci sau le poate ș
adapta pe cele existente;
este puternic documentat i sus inut de o comunitate relativ mare de dezvoltatori; ș ț
folose te arhitectura Model-View-Controller ș
Una dintre cele mai importante facilită i oferite de Codeigniter este implementarea ț
arhitecturii MVC care permite separarea logicii aplica iei de prezentarea acesteia. ț
MVC, sau Model-View-Controller (Model – Viziune – Unitate de control) este un ablon ș
de dezvoltare care face ca paginile web să con ină cât mai pu in cod sursă scris printre ț ț
elementele de prezentare a aplica iei. Codeigniter lucrează cu PHP5, astfel că introduce ț
programarea orientată pe obiecte, iar fiecare element (model, viziune, unitate de control) va fi
definit ca o clasă cu proprietă i i metode specifice. ț ș
Modelul con ine func ii ce realizează regăsirea, inserarea sau actualizarea informa iilor ț ț ț
din/ în baza de date. Viziunea reprezintă informa ia prezentată utilizatorului. O viziune poate fi ț
atât o pagină web cât i doar un fragment din aceasta, precum header sau footer. Unitatea de ș
control serve te ca i intermediar între model i viziune, dar poate face legătura cu orice altă ș ș ș
resursă necesară.
În figura 3.1 se observă modul în care interac ionează cele 3 elemente ale arhitecturii. ț
Astfel, din viziune sunt trimise cereri către unitatea de control care le procesează i dacă are ș
nevoie de date apelează modelul iar apoi trimite răspunsul către viziune care afi ează ș
informa iile. Dacă nu are nevoie de baza de date, unitatea de control doar răspunde viziunii. ț
Acest mod de utilizare poate fi extins, în sensul că modelele pot fi accesate direct din viziune,
însă această practică nu este recomandată deoarece încarcă pagina web(viziunea) cu cod sursă
care în mod normal trebuie procesat de unitatea de control.
Figura 2.4 Arhitectura Model – View – Controller, [WIKI02]
Consider că arhitectura Model-View-Controller este foarte utilă în dezvoltarea unei
aplica ii web în primul rând datorită structurării ordonate a scripturilor i separării logicii de ț ș
15
prezentare, acestea fiind i motivele datorită cărora am utilizat Codeigniter în realizarea ș
aplica iei. ț
2.9 Eclipse
Eclipse este un mediu de dezvoltare cu sursă deschisă, integrat (IDE- Integrated
Development Environment ) scris în mare parte în Java. Este un mediu de lucru multi-limbaj,
permi ând prin intermediul unor extensii, utilizarea altor limbaje de programare: C, C++, ț
COBOL, FORTRAN, JavaScript, Perl, PHP, Phython, etc.
Pentru dezvoltarea aplica iei de logistică, am utilizat mediul Eclipse, ț împreună cu
extensia PDT (PHP Development Tools ), care permite lucrul cu PHP.
3.Analiza și proiectarea aplicației pentru logistica firmei
3.1Scopul i obiectivele aplica iei ș ț
Scopul aplica iei este acela de a eficientiza atât administrarea firmelor ce se ocupă cu ț
activitatea de transporturi, cât i a departamentelor de logistică / transporturi din cadrul ș
companiilor mai mari.
Eficientizarea provine din din mai multe surse. În primul rând, aplica ia oferă o viziune ț
de ansamblu asupra situa iei firmei / departamentului de transporturi, ceea ce duce implicit la ț
eficien ă în luarea deciziilor. În al doilea rând, utilizarea aplica iei presupune reducerea ț ț
numărului de procesări a documentelor.
Printre obiectivele urmărite de aplica ie putem enumera: oferirea unui program – suport ț
pentru angaja ii departamentelor de logistică, reducerea costurilor cu personalul i a altor costuri ț ș
administrative sau de logistică internă, implementarea unui sistem informatic modern în
companie, care sa sus ină aplica ia de administrare a logisticii dar i alte aplica ii administrative. ț ț ș ț
Nu în ultimul rând, ca i obiectiv al aplica iei pot men iona cre terea nivelului profesional al ș ț ț ș
angaja ilor datorat utilizării unei aplica ii moderne. ț ț
Din figura 3.1 observăm fluxul informa ional ce stă la baza aplica iei. Astfel, după introducerea ț ț
datelor acestea pot fi modificate sau pot fi efectuate calcule pe baza lor i în plus, pot fi ș
consultate atât în starea lor initială, cât i după ce au fost modificate. Obiectivul final este ș
ob inerea de infoma ii prin simpla vizualizarea de ansamblu a situa iei dar mai ales prinț ț ț
vizualizarea rezultatelor ob inute în urma efectuării calculelor. ț
16
DateSoftware
Elemente auxiliareUtilizator
Figura 3.5 Fluxul informațional ce stă la baza aplicației
3.2 Proiectarea bazei de date
Proiectarea bazei de date presupune cunoa terea problemei ce trebuie rezolvată de către ș
aplica ie i în primul rând cunoa terea datelor ce trebuie re inute (dimensiune, tipologie, etc). ț ș ș ț
3.2.1 No iuni teoretice ț
În primul rând, trebuie precizat faptul că realizarea unei aplica ii cu baze de date necesită ț
existen a unui sistem de baze de date (DBS = ț Database System), ce reprezintă un set de elemente
interconectate prin intermediul cărora se realizează colectarea, stocarea i procesarea datelor. ș
Din figura 3.2 se observă faptul că utilizatorul interac ionează cu sistemul de baze de date ț
prin intermediul produselor software instalate, care realizează legătura cu datele, dar i cu alte ș
aplica ii auxiliare. ț
Figura 3.6 Componentele arhitecturii unui sistem de baze de date, [LUVEBO09]
Din categoria produselor software, cel mai important este Sistemul de Gestiune a Bazei de
Date(SGBD), ce reprezintă un ansamblu de programe ce oferă o interfa ă între baza de date i ț ș
utilizatori. “Un SGBD este o componentă software a unui sistem de baze de date care
interac ionează cu toate celelelte componente, asigurând conectarea i independen a dintre ț ș ț
elementele sistemului.” [LUVEBO09]. Astfel, un SGBD are rolul de a asigura: definirea i ș
descrierea structurii bazei de date, încărcarea i validarea datelor, accesul la date pentru opera ii ș ț
de consultare, interogare sau actualizare, mentenan a bazei de date i protec ia bazei de date. ț ș ț
Figura 3.3 prezintă func iile unui SGBD (descriere, manipulare, administrare i utilizare), care ț ș
sunt interconectate i asigură func ionalitatea întregului sistem. Astfel, func ia de utilizare are ș ț ț
rolul de a realiza interfa a cu utilizatorul, func ia de descriere define te structura bazei de date ț ț ș
prin limbajul de descriere a datelor (LDD), func ia de manipulare realizează inserarea i ț ș
17
utilizare
descriere manipulare administrare
Baza de
dateutilizatoriprelucrarea datelor prin limbajul de maipulare a datelor (LMD), iar func ia de administrare ț
gestionează baza de date.
Figura 3.7 Funcțiile unui SGBD, [LUVEBO09]
Într-un sistem de calcul, datele sunt stocate atât în memoria internă (temporară), dar mai
ales în memoria externă. Stocarea datelor în memoria externă a fost condi ionată de aspecte ț
precum : accesul rapid i u or la date, volumul de date tot mai mare, cre terea complexită ii ș ș ș ț
datelor, perfec ionarea echipamentelor de stocare i nu în ultimul rând lucrul în re elele de ț ș ț
calculatoare.Stocarea datelor se poate face atât în fi iere, cât i în baze de date (care au evoluat ș ș
din fi iere). ș
Baza de date este un ansamblu de colec ii de date organizat coerent, structurat astfel încât ț
redundan a să fie minimă i controlată, iar accesul la date să fie permis mai multor utilizatori ț ș
simultan i în timp util. De i există mai multe genera ii de baze de date (arborescente, re ea, ș ș ț ț
rela ionale , orientate obiect), cele mai utilizate în practică sunt cele rela ionale (aproximativț ț
>75% din total).
Pentru a în elege conceputul de bază de date, voi prezenta pe scurt elementele unei baze de date: ț
domeniul de valori desemnează mul imea valorilor posibile pentru o caracteristică; ț
caracteristica reprezintă definirea i descrierea unui anumit aspect dintr-o entitate din lumea ș
reală;
familia de caracteristici reprezintă ansamblul proprietă ilor care se referă la aceea i entitate ț ș
din lumea reală;
18
colec ia de date ț reprezintă o familie de caracteristici asupra căreia se aplică un predicat care
reprezintă o legătură între colec ia curentă de date i o altă colec ie. ț ș ț
Putem deci spune ca baza de date este un ansamblu de colec ii de date aflate în interdependen ă ț ț
împreună cu descrierea datelor.
Revenind la modelul rela ional, proiectarea unei baze de date presupune definirea ț
entită ilor i a legăturilor dintre acestea.Astfel, entită ilevor fi definite sub forma unor tablouri ț ș ț
bidimensionale denumite tabele sau rela ii. Conceptele utilizate sunt următoarele: ț
domeniul desemnează ansamblul valorilor ce pot fi utilizate;
tabela sau relatia este un subansamblu al produsului cartezian dintre mai multe domenii,
caracterizat printr-o denumire;
atributul ilustrează o coloană dintr-o tabelă care are o denumire i care va lua valori dintr-un ș
domeniu. Unele atribute pot avea rolul de cheie;
tuplul (înregistrare/realizare/instan ă) este linia dintr-o tabela; ț
cheia reprezintă un atribut ori un ansamblu de atribute cu rolul de a identifica un tuplu dintr-
o tabelă;
Definirea legăturii dintre entită i se face la nivel logic prin construirea de asocieri cu ajutorul ț
unor atribute de legătură (chei externe).
Ansamblul tabelelor i al legăturilor dintre acestea constituie schema bazei de date. ș
Un aspect important în realizarea unei baze de date este reprezentat de înlăturarea anomaliilor.
Cea mai utilizată tehnică pentru rezolvarea acestei situa ii este tehnica normalizării care ț
presupune ca toate rela iile să respecte cele cinci forme normale. ț
3.2.2 Proiectarea practică a bazei de date
Proiectarea unei baze de date reprezintă proiectarea schemei conceptuale (logice) i fizice ș
a acesteia pentru a răspunde cerin elor uneia sau mai multe aplica ii, sau mai exact pentru a ț ț
răspunde cerin elor utilizatorilor acesteia. Proiectarea unei baze de date este divizată astfel: ț
studiul cerin elor aplica iei, proiectarea conceptuală, alegerea unui SGBD, proiectarea logică i ț ț ș
proiectarea fizică a bazei de date.
În primul rând trebuie analizate cerin ele aplica iei i ale situa iilor ce urmează a fi ț ț ș ț
rezolvate de către aceasta. Deoarece aplica ia urmează a fi utilizată de către mai multe persoane ț
în mod concuren ial este nevoie ca aceasta să urmărească o arhitectură client-server, deci i baza ț ș
de date utilizată trebuie sa fie adaptabilă acestei situa ii. Plusuri pentru folosirea acestei tipologii ț
sunt reprezentate de mărimea securită ii datelor (care sunt situate pe o ma ină–server i pot fi ț ș ș
accesate doar în anumite condi ii de către utilizatori), de eliberarea ma inii–client de procesele ț ș
de calcul dar i de faptul că aplica ia i implicit baza de date pot fi accesate de pe orice calculator ș ț ș
din re eaua locală a companiei (întrucât vorbim despre o aplica ie bazată pe web). ț ț
19
Proiectul conceptual se realizează independent de Sistemul de Gestiune a Bazelor de Date ales, i ș
se reprezintă în general prin modelul Entitate – Asociere ( Entity – Relationship ) care se
concretizează într-o diagramă Entitate-Asociere.
În proiectarea conceptuală a bazei de date vor fi urmări i următorii pa i: ț ș
Determinarea scopului bazei de date. Baza de date necesară aplica iei de administrare a ț
activită ii logistice păstrează informa ii despre ma inile, oferii i cursele firmei de ț ț ș ș ș
transporturi în scopul calculării de rezultate economice necesare administrării activită ii. ț
Împăr irea informa iilor în tabele. Se realizează prin găsirea celor mai importante entită i ț ț ț
sau subiecte din descrierea problemei reale. Observăm astfel că principalele entită i sunt : ț
ma ină, ofer, cursă, defec iune, alimentare.ș ș ț
Transformarea elementelor de informa ii în coloane. Vom decide ce informa ii vor fi ț ț
stocate în fiecare tabelă. Fiecare element devine un câmp afi at sub forma unei coloane a ș
tabelului.
Specificarea cheilor primare. Se alege coloana sau coloanele care vor identifica în mod
unic fiecare înregistrare din tabelă.
În figurile 3.4 – 3.9 se observă faptul că atributele fiecărei entită i au fost transformate în ț
coloane ale tabelelor respective. În plus fiecare tabelă are o cheie primară al cărei rol este
acela de a identifica fiecare tuplu.
Figura 3.8 Tabela Șoferi
Figura 3.9 Tabela Mașini
20
Figura 3.10 Tabela Curse
Figura 3.11 Tabela Defecțiuni
Figura 3.12 Tabela Alimentări
Figura 3.13 Tabela Utilizatori
Configurarea rela iilor dintre tabele ț. Trebuie decis modul în care se asociază datele dintr-
un tabel cu datele din alte tabele. Se observă din figurile 3.4 – 3.9 că a fost inut cont de ț
acest lucru deoarece unele tabele con in i chei externe care în alte tabele au rolul de chei ț ș
primare realizându-se conexiunea dintre entită i. Tabela Utilizatori nu este legată de nici ț
21
o altă tabelă deoarece este utilizată pentru administrarea aplica iei i nu pentru ț ș
func ionalitatea activită ii de transporturi.ț ț
Reprezentarea tabelelor împreună cu rela iile dintre ele ilustrează schema conceptuală a bazei de ț
date sau diagrama Entitate – Asociere, prezentată în figura 3.10.
Figura 3.14 Schema conceptuală a bazei de date
În figura de mai sus observăm entită ile i legăturile dintre ele. Astfel, putem descrie baza de ț ș
date:
un ofer poate executa una sau mai multe curse, un ofer poate înregistra una sau maiș ș
multe alimentări sau un ofer poate înregistra una sau mai multe defec iuni la ma ina pe ș ț ș
care o conduce.
ma ină poate fi folosită în una sau mai multe curse, o ma ină poate fi alimentată o datăș ș
sau de mai multe ori i o ma ină se poate defecta de una sau mai multe ori. ș ș
Legarea tabelelor este realizată prin chei externe. Astfel, id_sofer este cheie primară în tabela
soferi i cheie externă în tabelele curse, defec iuni i alimentări. Aceea i situa ie se observă i în ș ț ș ș ț ș
cazul atributului nr_masina, cheia primară din tabela masini. Schema conceptuală ilustrează
faptul că avem un model de bază de date rela ional, deoarece sunt prezente doar legături de tipul ț
22
unul-la-mai mul i. În cazul în care ar fi existat legături de tipul mai mul i-la-mai mul i, atunci ț ț ț
acestea ar fi trebuit să fie aduse la forma unul-la-mai mul i pentru a fi o bază de date rela ională. ț ț
În cazul nostru schema conceptuală coincide cu cea logică deoarece, a a cum am explicat ș
mai sus nu există rela ii “mai mul i-la-mai mul i” care să necesite transformare. Schema logică ț ț ț
este implementată in SGBD-ul ales (MySQL) prin preluarea schemei conceptuale i rafinarea ei ș
astfel încât să se utilizeze facilită ile oferite de SGBD (modul de generare a cheilor primare, ț
definirea constrângerilor, etc).
Rela iile dintre tabele se stabilesc la momentul descrierii datelor prin LDD (limbajul deț
descriere a datelor) cu ajutorul restric iilor de integritate. Restric iile de integritate sunt ț ț
implementate în SQL ( Structured Query Language ) cu ajutorul comenzilor CREATE TABLE i ș
ALTER TABLE i se clasifică în restric ii structurale i semantice. Primele se definesc prin ș ț ș
compararea unor valori din tabele i sunt reprezentate de: cheia unică (clauza UNIQUE), ș
restric ia referen ială (clauza FOREIGN KEY) i restric ia entită ii (clauza NOT NULL). A doua ț ț ș ț ț
categorie de restric ii de integritate se definesc prin comportamentul datelor i in cont de ț ș ț
valorile din baza de date. Vorbim despre domeniul de valori al unui atribut, sau de restric iile ț
temporare care fac referire la valorile temporare ob inute în urma calculelor. ț
Proiectarea fizică a bazei de date este reprezentată de alegerea structurilor de acces i ș
memorare a datelor, astfel încât acestea să fie optime. Se ine cont de timpul de răspuns, ț
utilizarea spa iului de memorie sau capacitatea tranzac ională. Aceste decizii se pot lua după ț ț
analiza aplica iei care va utiliza baza de date i mai ales după testarea func ionării acesteia în ț ș ț
condi iile dorite (un anumit număr de utilizatori i un anumit volum de date). În principal, ț ș
analiza fizică a bazei de date are ca scop descoperirea atributelor care sunt cel mai frecvent
utilizate în interogări sau care sunt actualizate cel mai des, pentru stabilirea indexurilor
secundare ale rela iilor. ț
Un alt obiectiv care trebuie urmărit în proiectarea bazei de date este reprezentat de către
protec ia bazei de date i ne referim la securitatea i integritatea datelor. Securitatea datelor este ț ș ș
realizată în primul rând prin autorizarea i controlul accesului la date. Utilizatorii vor fi ș
identifica i i vor avea anumite drepturi în ceea ce prive te accesul la baza de date în func ie de ț ș ș ț
calitatea / func ia pe care o îndeplinesc. Un alt aspect ce ine de securitate este faptul că unele ț ț
date, cum ar fi parolele vor fi transmise codificat. Integritatea bazei de date este asigurată prin
restric ii de integritate i validări asupra datelor, dar i prin salvarea unor copii de siguran ă ț ș ș ț
(backup).
3.3 Proiectarea interfeței
Interfa a (GUI – ț Graphical User Interface ) este unul dintre cele mai importante elemente
ale unei aplica ii deoarece reprezintă partea vizuală cu care interac ionează utilizatorul. Scopul ț ț
23
interfe ei este acela de a face interac iunea utilizatorului cât de simplă i eficientă posibil pentru ț ț ș
ca acesta sa- i atingă obiectivele. Acest tip de gândire a interfe ei este de cele mai multe ori ș ț
denumit: user-centered design i anume aspect centrat pe utilizator i după cum spune denumireaș ș
se referă la faptul că atunci când se proiectează o interfa ă, persoana care folose te aplica ia ț ș ț
trebuie să fie cel mai important element luat în considerare. Procesul de dezvoltare a interfe ei ț
trebuie să balanseze func ionalitatea tehnică i elementele vizuale pentru a crea un sistem care ț ș
este nu doar opera ional ci i utilizabil i adaptabil la schimbările de care are nevoie utilizatorul. ț ș ș
Aspectul referitor la prezentarea informa iei este descris în articolul 12 al standardului ISO 9241 ț
referitor la organizarea informa iei (aranjare, aliniere, grupare, etichetare, loca ie), prin apte ț ț ș
atribute:
claritate: con inutul informa iei este redat rapid i exact; ț ț ș
discriminabilitate: informa iile redate pot fi distinse eficient; ț
simplitate: utilizatorii nu sunt supraîncărca i cu informa ii inutile; ț ț
consisten ă: un aspect unic, conform cu a tep ările utilizatorilor; ț ș ț
detectabilitate: aten ia utilizatorului este direc ionată către informa ia necesară; ț ț ț
lizibilitate: informa ia este u or de citit; ț ș
în elegere: informa ia este u or de în eles, neambiguă i u or recunoscută;ț ț ș ț ș ș
Aspectul aplica iei este unul clasic pentru o aplica ie web, dar nu numai, i este reprezentat de ț ț ș
împăr irea ferestrei browserului în 3 par i cu func ionalită i diferite, cum este prezentat în figura ț ț ț ț
3.11.
Figura 3.15 Aspectul general al aplicației
Se observă că fereastra browserului este împăr ită în 3 zone: ț
antetul – con ine sigla companiei i alte informa ii precum numele utilizatorului i ora; ț ș ț ș
meniul – con ine op iunile de navigare către modulele aplica iei; ț ț ț
zona de lucru – reprezintă zona propriu-zisă în care vor fi afi ate formularele, rapoartele i ș ș
celelalte elemente vizuale ale fiecărui modul al aplica iei; ț
24
4.Prezentarea aplica iei privind logistica companiei ț
4.1 Implementarea aplica iei ț
Pentru dezvoltarea aplica iei am utilizat tehnologiile prezentate în capitolul 2 al curentei ț
lucrări. Astfel, am folosit ca i mediu de lucru Eclipse Juno (versiunea 4.2). Serverul web utilizat ș
este Apache care con ine modulele de MySQL i PHP, iar pentru crearea structurii bazei de date ț ș
am folosit utilitarul MySQL Workbench. În timp ce partea care s-a ocupat cu func ionalitatea ț
aplica iei a fost realizată în PHP i MySQL, pentru partea vizuală a programului au fost utilizate ț ș
HTML, CSS i jQuery. Nu în ultimul rând, a fost folosit cadrul de lucru ( ș framework) Codeigniter
care a facilitat implementarea arhitecturii Model-View-Controller.
Trebuie precizat că am utilizat PHP 5 cu facilită ile sale de programare orientate pe ț
obiecte ceea ce a presupus implementarea de clase pentru entită ile cu care lucrează aplica ia i ț ț ș
implicit abstractizarea aplica iei. Faptul că PHP 5 lucrează cu obiecte face mult mai u oară ț ș
implementarea aplica iei utilizănd arhitectura MVC. ț
Model – View – Controller ( model – viziune – unitate de control ) este un ablon ș
software care separă reprezentarea informa iei de interac iunea utilizatorului cu aceasta.Modelul ț ț
constă în datele aplica iei, logică i func ii necesare lucrului cu datele (regăsire sau actualizare). ț ș ț
Modelul implementează practic lucrul cu baza de date . Viziunea (pagina de vizualizare ) constă în
prezentarea datelor i a informa iilor către utilizator. Viziunea implementează practic partea de ș ț
interfa ă grafică. Unitatea de control preia ac iunile utilizatorului i le transformă în comenzi ț ț ș
către model sau view. Unitatea de control implementează func ionalitatea aplica iei. ț ț
Din figura 4.1, observăm că atunci când utilizatorul interac ioneaza cu un program, ț
lucrează cu unitatea de control. La bază, unitatea de control reprezintă punctul de start al
aplica iei i controlează fluxul de lucru bazat pe o anumită decizie a utilizatorului. Acesta ț ș
distribuie mai departe informa iile primite către model care le prelucrează i formulează un ț ș
răspuns care este trimis înapoi la unitatea de control. Acest răspuns este distribuit mai departe
către viziune care îl redă utilizatorului.
25
Figura 4.16 Arhitectura Model – View – Controller
Din punctul meu de vedere, utilizarea unei arhitecturi de tipul MVC, este foarte utilă
deoarece impune o anumită rigurozitate în elaborarea codului sursă, care în acest mod este mai
organizat i mai u or de urmărit i depanat. În plus, foarte multe func ii i metode pot fi utilizate ș ș ș ț ș
în mai multe module ceea ce duce la o programare eficientă.
Aplica ia cuprinde 2 func ionalită i oarecum diferite. Prima se referă la manipularea ț ț ț
datelor desemnate de entită ile bazei de date, în timp ce a doua parte se referă la posibilitatea ț
ob inerii de grafice i rapoarte. Această separare este sugerată chiar de meniul aplica iei.ț ș ț
În figura 4.2, care prezintă meniul aplica iei, se observă faptul că butoanele oferi, Ma ini, ț Ș ș
Curse, Alimentări i Defec iuni reprezintă entită ie studiate sau tabelele din baza de date. Astfel, ș ț ț
fiecare sec iune accesată prin aceste butoane va realiza opera ii de manipulare a datelor din ț ț
tabela respectivă în principal, dar i din tabelele adiacente în cazul în care acestea sunt legate ș
între ele. Ultima op iune permite prezentarea unor grafice relevante pentru activitatea de ț
transporturi.
Figura 4.17 Meniul aplicației
26
4.1.1 Implementarea bazei de date i a func ionalită ii acesteia ș ț ț
Implementarea bazei de date este realizată prin intermediul limbajului de descriere a
datelor (LDD) pentru crearea tabelelor, iar apoi prin limbajul de manipulare a datelor (LMD)
pentru popularea, regăsirea i actualizarea datelor. ș
Crearea bazei de date a fost realizată utilizând aplica ia MySQL Workbench care se ț
conectează la serverul MySQL i accesează baza de date. Crearea tabelelor poate fi făcută atât în ș
mod vizual folosind asistentul aplica iei, cât i prin scrierea de cod SQL. Spre exemplu, crearea ț ș
tabelei Soferi se realizează executând următoarea comandă SQL:
CREATE TABLE `logistica`.`soferi` (
`id` INT NOT NULL AUTO_INCREMENT ,
`nume` VARCHAR(45) NULL ,
`prenume` VARCHAR(45) NULL ,
`cnp` VARCHAR(45) NULL ,
`varsta` INT NULL ,
`data_angajare` DATE NULL ,
`salariu` DOUBLE NULL ,
PRIMARY KEY (`id`) );
Se observă faptul că tabela “soferi” face parte din baza de date “logistica”, i are atributele: id, ș
nume, prenume, cnp, varsta, data_angajare i salariu, dintre care id este cheie primară. ș
Legăturile dintre tabele sunt realizate prin intermediul cheilor externe, însă în cazul mysql nu
este neapărat nevoie ca acestea să fie declarate, ci este suficient ca atributele considerate chei
externe să aibă aceea i denumire i tip de date ca i atributul din tabela părinte. Putem vorbi ș ș ș
despre o legătură logică între tabele.
În ceea ce prive te func ionalitatea bazei de date, acesta este realizată prin limbajul de ș ț
manipulare a datelor, apelat prin intermediul modelelor. După cum a fost prezentat anterior,
modelul reprezintă o clasă a aplica iei care se ocupă cu conectarea la baza de date i asigură ț ș
interfa a dintre aplica ie i baza de date. ț ț ș
Pentru implementarea modelelor am folosit o altă facilitate oferită de către Codeigniter i anume, ș
clasa Active Records, care permite scrierea comenzilor SQL, într-o manieră orientată pe obiecte
specifică PHP 5. Oferim ca exemplu opera iile executate pentru inserarea i actualizarea i ț ș ș
regăsirea datelor din tabela “soferi”:
func ie pentru inserarea unei înregistrări în tabela “soferi”:ț
function add_sofer($nume,$prenume,$cnp,$varsta,$data_angajare,$salariu)
{
$this->db->set('nume',$nume);
$this->db->set('prenume',$prenume);
$this->db->set('cnp',$cnp);
27
$this->db->set('varsta',$varsta);
$this->db->set('data_angajare',$data_angajare);
$this->db->set('salariu',$salariu);
$this->db->insert('soferi');
}
În limbajul SQL, codul de mai sus este echivalent cu :
INSERT INTO SOFERI (nume, prenume, cnp, varsta, data_angajare, salariu) VALUES ($nume,
$prenume, $cnp, $varsta, $data_angajare, $salariu);
func ie pentru editarea unui tuplu din tabela “soferi”:ț
function edit_sofer($id, $nume, $prenume, $cnp, $varsta, $data_angajare, $salariu)
{
$this->db->where('id', $id);
$this->db->set('nume', $nume);
$this->db->set('prenume', $prenume);
$this->db->set('cnp',$cnp);
$this->db->set('varsta', $varsta);
$this->db->set('data_angajare', $data_angajare);
$this->db->set('salariu', $salariu);
$this->db->update('soferi');
}
Limbaj SQL: UPDATE soferi SET nume = $nume, prenume = $prenume, cnp = $cnp, data_angajare =
$data_angajare, salariu = $salariu, telefon = $telefon WHERE id= $id
func ie pentru stergerea unei înregistrări din tabela “soferi”:ț
function delete_sofer($id)
{
$this->db->where('id',$id);
$this->db->delete('soferi');
}
Limbaj SQL: DELETE FROM soferi WHERE id=$id
func ie pentru regăsirea datelor din tabela “soferi”:ț
function get_soferi()
{
$return_array = array();
$this->db->select('*')->from('soferi');
$res = $this->db->get();
foreach($res->result_array() as $row)
{
$return_array[] = $row;
}
return $return_array;
}
Limbaj SQL : SELECT * FROM soferi ORDER BY nume, prenume
4.1.2 Implementarea interfe ei i a func ionalită ii acesteia ț ș ț ț
Interfa a este implementată utilizând viziunile i unită ile de control.Din prezentarea ț ș ț
arhitecturii Model – View – Controller, tim că viziunile se ocupă cu prezentarea informa iilor ș ț
către utilizator, deci cu partea vizuală a interfe ei, în timp ce unitatea de control se ocupă cu ț
func ionalitatea acesteia, întrucât preia cererile generate de ac iunile utilizatorului i leț ț ș
procesează, oferind un răspuns ce indică o nouă direc ie de navigare în cadrul aplica iei sau ț ț
filtrează o parte din informa iile ce trebuie redate. Vom oferi ca exemplu clasa “Soferi”, clasă ce ț
28
implementează logica unei unită i de control a ablonului Model-View-Controller. Această clasă ț ș
realizează listarea oferilor firmei i opera iile de adăugare, editare sau tergere a unui ofer în ș ș ț ș ș
func ie de anumi i parametri trimi i în urma interac iunilor dintre utilizator i aplica ie.ț ț ș ț ș ț
func ie pentru listarea oferilor. Lista de soferi este regăsită în baza de date prin apelarea ț ș
func iei “get_soferi” din modelul “Soferi”, iar apoi este trimisă către viziune sub formă ț
unui obiect json (javaScript object notation ) fiind afi ată. ș
public function lista()
{
$this->load->model('model_curse','curse');
$this->load->model('model_soferi','soferi');
$curse = $this->curse->get_curse();
$result = new stdClass();
$i=0;
foreach($curse as $row)
{
$sofer = $this->soferi->get_sofer($row['id_sofer']);
$row['sofer'] = '';
if(count($sofer)>0)
{
$row['sofer'] = $sofer['nume']." ".$sofer['prenume'];
}
$result->rows[$i]['id']=$row['id'];
$result->rows[$i]['cell']= array($i+1, $row['plecare'], $row['destinatie'],
$row['id_sofer'],$row['sofer'],$row['nr_masina'], $row['distanta'],$row['data']);
$i++;
}
echo json_encode($result);
}
func ie pentru adăugarea, editarea sau tergerea unui ofer:ț ș ș
public function edit()
{
$oper = $this->input->get_post('oper');
$id = $this->input->get_post('id');
$plecare = $this->input->get_post('plecare');
$destinatie = $this->input->get_post('destinatie');
$id_sofer = $this->input->get_post('id_sofer');
$masina = $this->input->get_post('masina');
$distanta = $this->input->get_post('distanta');
$data = $this->input->get_post('data');
$this->load->model('model_curse','curse');
if($oper == 'add') $this->curse->add_cursa($plecare, $destinatie, $id_sofer, $masina,
$distanta,$data);
if($oper == 'edit') $this->curse->edit_cursa($id,$plecare, $destinatie, $id_sofer,$masina,
$distanta,$data);
if($oper == 'del') $this->curse->delete_cursa($id);
}
Din func iile prezentate mai sus, se observă clar rolul unită ii de control, i anume acela de a ț ț ș
dirija fluxul aplica iei, între paginile ce trebuiesc afi ate i elementele de logică ce asigură ț ș ș
func ionalitatea aplica iei. Tot la partea de func ionalitate a aplica iei se adaugă accesul laț ț ț ț
aplica ie pe baza unui nume de utilizator i a unei parole, care identifică fiecare utilizator ce ț ș
lucrează cu aplica ia. Pentru implementarea acestui modul, au fost create o viziune “Login” i o ț ș
unitate de control cu acela i nume. Acest modul, cite te datele de autentificare i verifică dacă ș ș ș
sunt găsite în baza de date. În caz afirmativ, este permis accesul utilizatorului, în caz contrar,
29
accesul este interzis. Controlarea activită ii de autentificare se desfă oară după cum urmează, ț ș
fiind gestionată de clasa Login:
class Login extends CI_Controller{
public function index()
{
$this->load->view('login/login');
}
public function check($username,$password)
{
$this->load->library('session');
$this->load->model('model_users','users');
$check = $this->users->check_user($username,$password);
if($check > 0)
{
echo 1;
$this->session->set_userdata(array('username'=>$username));
}
else echo 0;
}
}
Utilizatorii pot fi administra i din interiorul aplica iei. Se oferă posibilitatea de a terge un ț ț ș
utilizator sau de a adăuga altul. Implementarea modulului de autentificare este prezentată în
Anexa 1.
În ceea ce prive te partea vizuală a aplica iei, un rol foarte important l-a avut limbajul ș ț
jQuery ce oferă o multitudine de extensii i teme pentru dezvoltarea unei interfe e grafice ș ț
atractive.
Astfel, pentru listarea datelor regăsite în tabelele bazei de date, a fost folosită extensia
(plugin) jqGrid, ce implementează un tabel i oferă facilită i de sortare, editare i reîncărcare a ș ț ș
datelor. Aspectul unui tabel creat cu jQuery i jqGrid este prezentat în figura 4.3: ș
Figura 4.18 Tabel jqGrid
Respectivul tabel este construit într-o viziune, al cărei cod este scris în HTML, javaScript i ș
jQuery i al cărei rol este acela de a prezenta datele într-o manieră u or de citit i de în eles i de ș ș ș ț ș
a realiza cererile către server. În continuare, vom vedea cum arată o astfel de viziune:
<script>
$(function(){
jQuery("#soferi_list").jqGrid({
url:'<?php echo $this->config->item('base_url');?>/soferi/lista',
editurl:'<?php echo $this->config->item('base_url');?>/soferi/edit',
datatype: 'json',
colNames:['Nr','Nume', 'Prenume', 'CNP', 'Varsta','Data
Angajare','Salariu','Vechime'],
30
colModel:[
{name:'nr',index:'nr', width:25, editable: false},
{name:'nume',index:'nume', width:180, editable: true},
{name:'prenume',index:'prenume', width:180, editable: true},
{name:'cnp',index:'cnp', width:110, editable: true},
{name:'varsta',index:'varsta', width:70, editable: true},
{name:'data_angajare',index:'data_angajare', width:125, editable: true},
{name:'salariu',index:'salariu', width:70, editable: true},
{name:'vechime',index:'vechime', width:70, sortable: false, editable:false}
],
sortname: "Nr",
rowNum:100000,
rowTotal:-1,
pgtext: "",
pgbuttons: false,
width:880,
toppager:true,
forceFit:true,
shrinkToFit:false,
pager: '#soferi_pager',
caption:"Lista soferi"
});
jQuery("#soferi_list").jqGrid('navGrid',"#soferi_pager",
{edit: true, add:true, del: true, search:false, cloneToTop:true, refresh:true},
{closeOnEscape:true},
{closeOnEscape:true}
);
});
</script>
<table id='soferi_list'></table>
<div id = 'soferi_pager'></div>
Observăm că predomină codul jQuery ce realizează atât prezentarea i formatarea ș
elementelor vizuale, cât i trimiterea cererilor către server. ș
Opera iile de inserare, actualizare sau tergere ce realizează manipularea bazei de date corespund ț ș
în interfa a aplica iei anumitor formulare ce permit introducerea datelor. ț ț
Implementarea completă a modulului de administrare a oferilor este prezentă în Anexa 2. ș
4.2 Utilizarea aplicației
Aplica ia este intuitivă i u or de utilizat de orice persoană, chiar i neini iată în lucrul cu ț ș ș ș ț
calculatorul sau în domeniul logisticii.
Primul pas care trebuie făcut pentru a putea folosi aplica ia este autentificarea, prin ț
introducerea numelui de utilizator i a parolei setate, ca în figura 4.4 ș
31
Figura 4.19 Autentificare aplicației logistică
După autentificarea în aplica ie, utilizatorul are acces la cele trei zone de lucru ce vor fi ț
prezentate în ceea ce urmează. Implementarea paginii principale este prezentată în Anexa 3.
În primul rând, zona din partea de sus a ecranului con ine sigla companiei, numele aplica iei, iar ț ț
în partea dreaptă, ora, numele utilizatorului conectat, un buton de administrare a utilizatorilor i ș
un buton de părăsire a aplica iei, după cum este prezentat în figura 4.5: ț
Figura 4.20 Headerul aplicației
Administrarea utilizatorilor se face într-o fereastră de dialog, modală, care nu permite
interac iunea cu restul aplica iei până când nu este închisă. Astfel, se poate consulta lista ț ț
utilizatorilor conecta i, se pot terge utilizatori (butonul Delete) sau pot fi adăuga i utilizatori noi ț ș ț
(butonul Adaugă utilizator).
Figura 4.21 Lista utilizatorilor autorizați
În cazul în care se dorește adăugarea unui nou utilizator, va fi deschisă o nouă
fereastră, și aceasta modală, după cum urmează:
32
Figura 4.22 Adăugarea unui nou utilizator
Revenim la partea aplicației ce ține de domeniul logisticii și anume la meniul
situat în partea stângă a ecranului care conține următoarele opțiuni: Panou Central,
Șoferi, Mașini, Curse, Alimentări, Defecțiuni și Grafice.
Prima opțiune (Panou central) reprezintă ecranul de început al aplicației și
permite revenirea la acesta mai târziu. Acest ecran principal conține un grafic
dinamic ce reprezintă una dintre cele mai relevante situații de ieșire din domeniul
transporturilor și anume Evoluția costului per kilometru. Efectuând click pe orice
bară a graficului este prezentat un sumar al distanței parcurse și al costurilor din
respectiva lună, după cum se observă în figura 4.8.
Figura 4.23 Panoul Central al aplicației
Efectuând click pe butonul Soferi ne va fi afișată pagina de administrare a
șoferilor, cum este prezentat în figura 4.9:
33
Figura 4.24 Lista șoferilor
Opera iile de manipulare a tablei oferi din baza de date pot fi efectuate din această ț ș
pagină, prin intermediul butoanelor situate atât deasupra tabelului cât si sub acesta. Observăm
existen a a 4 butoane de adăugare, editare tergere i actualizare a listei. Formularele de adăugare ț ș ș
i editare a oferilor sunt prezentate în figurile următoare: ș ș
Figura 4.25 Formular adăugare șofer
34
Figura 4.26 Formular editare șofer
Apăsarea butonului de tergere a unei înregistrări va duce la apari ia unei casete de mesaj care ș ț
cere utilizatorului să confirme din nou inten ia de a terge înregistrarea. ț ș
Figura 4.27 Ștergerea unui șofer din listă
Deoarece una dintre regulile de prezentare a unei aplica ii precizează ca aceasta trebuie să aibă ț
un aspect unitar, celelalte sec iuni vor arăta la fel ca sec iunea oferi, diferind doar con inutul ț ț ș ț
acestora. Acest lucru se observă în figurile ce urmează:
35
Figura 4.28 lista de mașini
Listele de curse, alimentări și defecțiuni permit în plus filtrarea datelor în
funcție de o dată de început și una de sfârșit.
Figura 4.29 Lista de curse
36
Figura 4.30 Lista de alimentări
Figura 4.31 Lista de defecțiuni
Ultima op iune a meniului prezintă o serie de grafice ce oferă informa ii relevante despre starea ț ț
activită ii de transporturi de-a lungul timpului i pot fi considerate suport pentru deciziile ț ș
37
viitoare. După cum se observă în figura 4.17, se poate alege o categorie de grafic, referitoare la
oferi, defec iuni, parcul auto sau furnizorii de combustibil. ș ț
Figura 4.32 Grafice
Astfel , în figura 4.18 este prezentat numărul de curse efectuate i ore efectiv lucrate de către un ș
ofer, în fiecare din lunile anului curent până la cea prezentă. ș
Figura 4.33 Numărul de curse efectuate de un șofer
Figura 4.19 prezintă evolu ia numărului de defec iuni înregistrate de către ma inile firmei de-a ț ț ș
lungul timpului. Efectuând click pe o bară a graficului, vor fi afi ate ma inile ce au avut nevoie ș ș
de repara ii în luna respectivă, împreună cu oferul care a înregistrat defec iunea i data intrării în ț ș ț ș
service.
38
Figura 4.34 numărul de defecțiuni înregistrate
Figura 4.20 ilustrează propor ia mărcilor ma inilor din parcul auto al firmei, iar la selectarea unui ț ș
producător de pe grafic vor fi afi ate ma inile corespunzătoare acelui producător. ș ș
Figura 4.35 Situație parc auto
39
În cele din urmă, figura 4.21, prezintă proporția furnizorilor de combustibil de la care
au fost efectuate alimentări.
Figura 4.36 Proporția benzinăriilor de unde s-a alimentat
40
Concluzii
În concluzie, pot spune că tema aleasă a fost una interesantă i atractivă din punct de ș
vedere economic, dar mai ales din punct de vedere informatic. În ceea ce prive te domeniul ș
economic, tema a fost interesantă deoarece a presupus cercetarea unui domeniu dinamic ce
implică costuri foarte ridicate i trebuie să fie optimizat. Din punct de vedere informatic, ș
atractivitatea temei s-a manifestat prin găsirea unei solu ii de adminstrare a domeniului economic ț
studiat.
Cercetarea a presupus o documentare riguroasă în domeniul bazelor de date i al ș
dezvoltării web i s-a finalizat cu realizarea unei aplica ii web ce utilizează o bază de date i este ș ț ș
aplicabilă oricărei firme din domeniul transporturilor. Aplica ia creată oferă posibilitatea ț
administrării acestei activită i prin inerea unei eviden e a personalului i vehiculelor i oferirea ț ț ț ș ș
unor rapoarte al căror rol este acela de a ajuta la luarea de decizii.
Solu ia informatică realizată poate fi extinsă, iar una dintre primele idei de extindere esteț
implementarea unui modul care să permită localizarea autovehiculelor pe hartă atunci când
acestea sunt în deplasare i un alt modul care să calculeze drumurile minime pentru optimizarea ș
transporturilor. Pot fi extinse i facilită ile deja existente, prin adăugarea unui număr mai mare de ș ț
situa ii de ie ire (grafice, rapoarte). ț ș
41
Referin e bibliografice ț
[HEIVGL65]1Heskett, Ivie & Glaskowsky – “Business Logistics Management of
Physical Supply and Distribution”, Ronald Press Co, 1964
[AKFRDU05
]Mohammad Reza Akbary Jokar, Yannick Frein, Lionel Dupont “ Sur
l’evolution du concept de logistique”, RIRL 2000
[TH16]1George Cyrus Thorpe – “Pure Logistics – The Science of War
Preparation“, Franklin Hudson Publishing Company, 1916
[MO96]2Charles Moeller – “Logistics concept development”, Aalborg University
, 1996
[LUCO06] 3Lect. Vasile Lup e, conf.dr. Ovidiu Cosma – “ Supply Chain ș
Management (SCM)” – Revista Informatica Economică nr.2 (38)/2006
[NOHU00]Grant Norris, James Hurley – “E-business and ERP”, University of
California, 2000
[WIKI01]4“Wikipedia – What You See Is What You Get“
-http://en.wikipedia.org/wiki/WYSIWYG
[RE09]John Resig- “jQuery Cookbook”, O’Reilly Media, 2009
[KO05]Michael Kofler – “The Definitive Guide to MySQL 5”, Apress, 2005
[CO01]5“CodeIgniter at a Glance” –
6http://ellislab.com/codeigniter/user-guide/overview/at_a_glance.html
[WIKI02]7“Model-view-contoller,Wikipedia” –
8http://ro.wikipedia.org/wiki/Model-view-controller
[LUVEBO09
]9Ion Lungu, Manole Velicanu, Iuliana Botha –“Database Systems –
Present and Future”, revista Informatica Economică vol. 13, no. 1/2009
Lista figurilor
Figura 1.1 Evoluția logisticii în cadrul firmei, [MO96] …………………………………………. 4
Figura 1.2 Procese și fluxuri informaționale în lanțul de desfacere, [NOHU00] ………..8
42
Figura 1.3 Fluxul informațional al activității logistice din cadrul unei companii ……….9
Figura 2.1 Arhitectura Model – View – Controller, [WIKI02] ………………………………… 16
Figura 3.1 Fluxul informațional ce stă la baza aplicației ……………………………………. 18
Figura 3.2 Componentele arhitecturii unui sistem de baze de date, [LUVEBO09] ….18
Figura 3.3 Funcțiile unui SGBD, [LUVEBO09] …………………………………………………… 19
Figura 3.4 T abela Șoferi ……………………………………………………………………………….. 21
Figura 3.5 T abela Mașini ………………………………………………………………………………. 22
Figura 3.6 T abela Curse ……………………………………………………………………………….. 22
Figura 3.7 T abela Defecțiuni …………………………………………………………………………. 22
Figura 3.8 T abela Alimentări …………………………………………………………………………. 22
Figura 3.9 T abela Utilizatori ………………………………………………………………………….. 23
Figura 3.10 Schema conceptuală a bazei de date ……………………………………………. 23
Figura 3.11 Aspectul general al aplicației ……………………………………………………….. 26
Figura 4.1 Arhitectura Model – View – Controller ………………………………………………. 27
Figura 4.2 Meniul aplicației …………………………………………………………………………… 28
Figura 4.3 T abel jqGrid …………………………………………………………………………………. 32
Figura 4.4 Autentificare aplicației logistică ……………………………………………………… 33
Figura 4.5 Headerul aplicației ……………………………………………………………………….. 33
Figura 4.6 Lista utilizatorilor autorizați …………………………………………………………… 34
Figura 4.7 Adăugarea unui nou utilizator ………………………………………………………… 34
Figura 4.8 Panoul Central al aplicației ……………………………………………………………. 35
Figura 4.9 Lista șoferilor ………………………………………………………………………………. 35
Figura 4.10 Formular adăugare șofer ……………………………………………………………… 36
Figura 4.11 Formular editare șofer ………………………………………………………………… 36
Figura 4.12 Ștergerea unui șofer din listă ……………………………………………………….. 37
Figura 4.13 lista de mașini ……………………………………………………………………………. 37
Figura 4.14 Lista de curse ……………………………………………………………………………. 38
Figura 4.15 Lista de alimentări ……………………………………………………………………… 38
Figura 4.16 Lista de defecțiuni ……………………………………………………………………… 39
Figura 4.17 Grafice ……………………………………………………………………………………… 39
Figura 4.18 Numărul de curse efectuate de un șofer ………………………………………… 40
Figura 4.19 numărul de defecțiuni înregistrate ……………………………………………….. 40
Figura 4.20 Situație parc auto ………………………………………………………………………. 41
Figura 4.21 Proporția benzinăriilor de unde s-a alimentat …………………………………. 41
Anexe
Anexa 1.Implementarea modulului de autentificare
class Login extends CI_Controller{
public function index()
43
{
$this->load->view('login/login');
}
public function check( $username,$password)
{
$this->load->library('session');
$this->load->model('model_users','users');
$check = $this->users->check_user( $username,$password);
if($check > 0)
{
$this->session->set_userdata(array("username"=> $username));
echo 1;
}
else echo 0;
}
}
<html>
<head>
<link rel="Stylesheet" type="text/css" href="htdocs/jquery/css/themes/ui-
lightness/jquery-ui.min.css" />
<script src='htdocs/jquery/js/jquery-1.7.2.min.js'></script>
<script type="text/javascript" src='htdocs/jquery/js/jquery-ui-
1.8.20.custom.min.js'></script>
<script>
$(function(){
$("#btn_login").button()
.click(function(){
if($('#login_username').val()!="" && $("#login_password").val()!= "")
{
$.ajax({
type:'post',
url:'login/check/'+$('#login_username').val()+'/'+$("#login_password").val(),
success: function(data)
{
if(data == 1) {
window.location = "main";
}
else
{
$("#login_message").html("Numele de utilizator sau/si parola sunt
incorecte");
$("#login_username").val("");
$("#login_password").val("");
}
}
});
}
else alert("Completati numele de utilizator si parola");
});
$("#login_dialog").dialog({
modal:true,
width:400,
position: "center",
title: "Autentificare Administrare Logistica"
});
})
</script>
44
</head>
<body>
<div id='login_dialog'>
<div id='login_message'></div>
<table>
<tr><td>Nume utilizator </td>
<td><input type=text id='login_username' name="username"
style='width:200px;' /></td>
</tr>
<tr><td>Parola </td>
<td><input type=password id='login_password' name="password"
style='width:200px;' /></td>
</tr>
</table>
<button id='btn_login'>Autentificare</button>
</div>
</body>
</html>
Anexa 2. Implementarea modulului de administrare a oferilor: ș
// unitate de control
class Soferi extends CI_Controller{
public function lista()
{
$this->load->model('model_soferi','soferi');
$soferi = $this->soferi->get_soferi();
$result = new stdClass();
$i=0;
foreach($soferi as $row)
{
$data_ang = explode('-',$row['data_angajare']);
$an_angajare = $data_ang[0];
$an_curent = date('Y');
$row['vechime'] = $an_curent – $an_angajare;
$result->rows[$i]['id']=$row['id'];
$result->rows[$i]['cell']=array($i+1,$row['nume'],
$row['prenume'],$row['cnp'], $row['varsta'],$row['data_angajare'],
$row['salariu'],$row['vechime']);
$i++;
}
echo json_encode($result);
}
public function edit()
{
$oper = $this->input->get_post('oper');
$id = $this->input->get_post('id');
$nume = $this->input->get_post('nume');
$prenume = $this->input->get_post('prenume');
$cnp = $this->input->get_post('cnp');
$varsta = $this->input->get_post('varsta');
$data_angajare = $this->input->get_post('data_angajare');
$salariu = $this->input->get_post('salariu');
$this->load->model('model_soferi','soferi');
45
if($oper == 'add') $this->soferi->add_sofer($nume,$prenume,$cnp,$varsta,
$data_angajare,$salariu);
if($oper == 'edit') $this->soferi->edit_sofer($id,$nume,$prenume,$cnp,
$varsta,$data_angajare,$salariu);
if($oper == 'del') $this->soferi->delete_sofer($id);
}
}
// viziune
<script>
$(function(){
jQuery("#soferi_list").jqGrid({
url:'<?php echo $this->config->item('base_url');?>/soferi/lista',
editurl:'<?php echo $this->config->item('base_url');?>/soferi/edit',
datatype: 'json',
colNames:['Nr','Nume', 'Prenume', 'CNP', 'Varsta','Data
Angajare','Salariu','Vechime'],
colModel:[
{name:'nr',index:'nr', width:25, editable: false},
{name:'nume',index:'nume', width:180, editable: true},
{name:'prenume',index:'prenume', width:180, editable: true},
{name:'cnp',index:'cnp', width:120, editable: true},
{name:'varsta',index:'varsta', width:65, editable: true},
{name:'data_angajare',index:'data_angajare', width:125,
editable:true},
{name:'salariu',index:'salariu', width:65, editable: true},
{name:'vechime',index:'vechime', width:70, sortable: false,
editable:false}
],
sortname: "Nr",
rowNum:100000,
rowTotal:-1,
pgtext: "",
pgbuttons: false,
width:870,
toppager:true,
forceFit:true,
shrinkToFit:false,
pager: '#soferi_pager',
caption:"Lista soferi"
});
jQuery("#soferi_list").jqGrid('navGrid',"#soferi_pager",
{edit: true, add:true, del: true, search:false, cloneToTop:true,
refresh:true},
{closeOnEscape:true},
{closeOnEscape:true}
);
});
</script>
<table id='soferi_list'></table>
<div id = 'soferi_pager'></div>
// model
class Model_soferi extends CI_Model{
function __construct()
{
// Call the Model constructor
parent::__construct();
$this->load->database();
}
46
function get_soferi()
{
$return_array = array();
$this->db->select('*')->from('soferi');
$res = $this->db->get();
foreach($res->result_array() as $row)
{
$return_array[] = $row;
}
return $return_array;
}
function get_sofer( $id)
{
$this->db->select('*')->from('soferi');
$this->db->where('id', $id);
$res = $this->db->get();
return $res->row_array();
}
function add_sofer( $nume,$prenume,$cnp,$varsta,$data_angajare,$salariu)
{
$this->db->set('nume', $nume);
$this->db->set('prenume', $prenume);
$this->db->set('cnp', $cnp);
$this->db->set('varsta', $varsta);
$this->db->set('data_angajare', $data_angajare);
$this->db->set('salariu', $salariu);
$this->db->insert('soferi');
}
function delete_sofer( $id)
{
$this->db->where('id', $id);
$this->db->delete('soferi');
}
function edit_sofer( $id,$nume,$prenume,$cnp,$varsta,$data_angajare,
$salariu)
{
$this->db->where('id', $id);
$this->db->set('nume', $nume);
$this->db->set('prenume', $prenume);
$this->db->set('cnp', $cnp);
$this->db->set('varsta', $varsta);
$this->db->set('data_angajare', $data_angajare);
$this->db->set('salariu', $salariu);
$this->db->update('soferi');
ANEXA 3. Pagina principală a aplica iei ț
<html>
<head>
<link rel="Stylesheet" type="text/css" href="htdocs/style.css" />
<link rel="Stylesheet" type="text/css" href="htdocs/jquery/css/themes/ui-
lightness/jquery-ui.css" />
47
<link rel="Stylesheet" type="text/css" href="htdocs/jqgrid 3/css/
ui.jqgrid.css " />
<link rel="stylesheet" type="text/css" href="htdocs/jqPlot/jquery.jqplot.css"
/>
<script src='htdocs/jquery/js/jquery-1.7.2.min.js'></script>
<script type="text/javascript" src='htdocs/jquery/js/jquery-ui-
1.8.20.custom.min.js'></script>
<script type="text/javascript" src='htdocs/jqgrid 3/src/i18n/grid.locale-
en.js'></script>
<script src='htdocs/jqgrid 3/js/jquery.jqGrid.min.js'></script>
<script src='htdocs/clock.js'></script>
<script type="text/javascript" src="htdocs/jqPlot/jquery.jqplot.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.canvasTextRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.dateAxisRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.canvasTextRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.categoryAxisRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.barRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.pieRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.categoryAxisRenderer.min.js"></script>
<script type="text/javascript"
src="htdocs/jqPlot/plugins/jqplot.pointLabels.min.js"></script>
<script type="text/javascript" src="htdocs/jquery.numeric.js"></script>
<script>
function print_content(id_content, page_title, id_grid)
{
$("#"+id_grid).jqGrid('setGridHeight','auto');
var disp_setting=" toolbar=yes, location=no,directories=yes,
menubar=yes,scrollbars=yes, width=1000, height=700, left=100, top=25";
var content_value = document.getElementById(id_content).innerHTML;
var docprint=window.open("","",disp_setting);
docprint.document.open();
docprint.document.write('<html><head><title>'+page_title+'</title>');
docprint.document.write('</head><body onLoad="self.print()"><center>');
docprint.document.write('</head><body><center>');
docprint.document.write(content_value);
docprint.document.write('</center></body></html>');
docprint.document.close();
docprint.focus();
}
$(function(){
$("#username_show").html('<?php echo $username;?>');
$("#btn_logout").button({icons:{primary:'ui-icon-
power'}}).click( function(){
window.location = "login";
});
48
$("#admin").button({icons:{primary:'ui-icon-
person'},text:false}).click(function(){
$('#dialog_users').load('<?php $this->config-
>item('base_url');?>users/users_list');
$
('#dialog_users').dialog({width:500,modal: true,title:'Lista utilizatori'});
});
$("#print").button({icons:{primary:'ui-icon-
print'},text:false}).click(function(){
print_content("main_center");
});
$('.menu_button').button()
.click(function(){
var categorie = $(this).attr('categ');
$.ajax({
type: 'post',
url: <?php $this->config->item ('base_url');?
>'main/'+categorie,
success: function(data){
$("#main_center").html(data);
}
});
});
$("#main_panel_button").trigger('click');
})
</script>
</head>
<body>
<div id='main_top' class='ui-widget-header'>
<div style='width:150px; display:inline-block; position:absolute; top:0px;
left:0px;'>
<img src='htdocs/logo.png' style='background-color:transparent;
height:90px;' />
</div>
<div style='width:700px; display:inline-block; text-align:center;'>
<h2> Administrare Logistica </h2>
</div>
<div style='width:300px; display:inline-block; text-align:right; padding-
right:50px; position:absolute; top:5px; right:5px;'>
<!–ceas –>
<div class="clock">
<div id="Date"></div>
<ul>
<li id="hours"></li>
<li id="point">:</li>
<li id="min"></li>
<li id="point">:</li>
<li id="sec"></li>
</ul>
</div>
<!– ceas –>
<div id='username_show' style='padding-bottom:3px; padding-
top:1px;'></div>
<button id='admin' style='margin-right:5px; height:20px;
width:20px;'>Administrare utilizatori</button>
<button id='btn_logout' style='width:80px; height:30px; font-size:12px;
'>Logout</button>
</div>
</div>
<div id='main_left' >
<button id='main_panel_button' class='menu_button'
categ='panou_central'>Panou Central</button>
49
<button class='menu_button' categ='soferi'> oferi</button> Ș
<button class='menu_button' categ='masini'>Ma ini</button> ș
<button class='menu_button' categ='curse'>Curse</button>
<button class='menu_button' categ='alimentari'>Alimentări</button>
<button class='menu_button' categ='defectiuni'>Defec iuni</button> ț
<button class='menu_button' categ='rapoarte'>Grafice</button>
</div>
<div id='main_center'>
</div>
<div id='dialog_users'></div>
</body>
</html>
ANEXA 4. Fi ierul CSS al aplica eiș ț
#main_top
{
position:absolute;
left:0px;
top:0px;
height:100px;
width: 1100px;
border:1px solid silver;
text-align:center;
}
#main_left {
position: absolute;
left:0px;
top: 100px;
width:200px;
border:1px solid silver;
min-height:500px;
color:#FEFEFE;
text-align:left;
}
#main_center {
position:absolute;
left:200px;
top:100px;
width:880px;
min-height:480px;
border:1px solid silver;
padding: 10px;
}
button {
font-size:15px;
padding:3px;
}
.menu_button
{
width:100%;
margin: 0px;
padding:7px;
}
.clock { margin:0px; margin-left:10px; padding-top:5px; padding-bottom:1px;}
50
#Date {
font-family:'BebasNeueRegular', Arial, Helvetica, sans-serif;
font-size:15px;
text-align:right;
text-shadow:0 0 5px #00c6ff;
}
ul {
margin:0px; padding:0px;
list-style:none;
text-align:right;
}
ul li { display:inline;
font-size:14px;
text-right;
font-family:'BebasNeueRegular', Arial, Helvetica, sans-serif;
text-shadow:0 0 0px #FEFEFE;
}
#point { position:relative;
-moz-animation:mymove 1s ease infinite;
-webkit-animation:mymove 1s ease infinite;
padding-left:1px;
padding-right:1px;
}
/* Simple Animation */
@-webkit-keyframes mymove
{
0% {opacity:1.0; text-shadow:0 0 2px #FEFEFE;}
50% {opacity:0; text-shadow:none; }
100% {opacity:1.0; text-shadow:0 0 2px #FEFEFE; }
}
@-moz-keyframes mymove
{
0% {opacity:1.0; text-shadow:0 0 2px #FEFEFE;}
50% {opacity:0; text-shadow:none; }
100% {opacity:1.0; text-shadow:0 0 2px #FEFEFE; }
}
51
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: ACADEMIA DE STUDII ECONOMICE DIN BUCUREȘTI [626944] (ID: 626944)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
