Sunteți pe pagina 1din 54

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
GEORGE CRĂCIUN

BUCUREŞTI
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 .............................................................................................................................................. 15
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 ........................................................................................... 21
3.3 Proiectarea interfeţei......................................................................................................................... 25
4. Prezentarea aplicației privind logistica companiei ................................................................................. 27
4.1 Implementarea aplicației .................................................................................................................. 27
4.1.1 Implementarea bazei de date și a funcționalității acesteia ......................................................... 29
4.1.2 Implementarea interfeței și a funcționalității acesteia ............................................................... 30
4.2 Utilizarea aplicației ........................................................................................................................... 33
Concluzii ..................................................................................................................................................... 43
Referințe bibliografice................................................................................................................................ 44
Lista figurilor ............................................................................................................................................... 45
Anexe .......................................................................................................................................................... 46

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.
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
3
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ă această 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,

5
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
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.

6
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:
 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.

7
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:
• 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.

8
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).

Manager Planificare Control


parc logistic

Operator
Executare

Figura 1.3 Fluxul informațional al activității logistice din cadrul unei companii

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).

9
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
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.

10
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.
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ă comenzile 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.

11
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
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.

12
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.

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.

13
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
de rapid și corect. MySQL, împreună cu PHP realizează operațiile de regăsire, actualizare,
inserare și ștergere a datelor.

14
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ă.

15
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.

16
Figura 2.1 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
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.1 Scopul ș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.

17
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.

Figura 3.1 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.

Date Software Utilizator

Elemente auxiliare

Figura 3.2 Componentele arhitecturii unui sistem de baze de date, [LUVEBO09]

18
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
prelucrarea datelor prin limbajul de maipulare a datelor (LMD), iar funcția de administrare
gestionează baza de date.

utilizatori

utilizare

manipulare descriere administrare

Baza de

date

Figura 3.3 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).
19
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ă;
 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.

20
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).
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.

21
Figura 3.4 Tabela Șoferi

Figura 3.5 Tabela Mașini

Figura 3.6 Tabela Curse

Figura 3.7 Tabela Defecțiuni

22
Figura 3.8 Tabela Alimentări

Figura 3.9 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
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.

23
Figura 3.10 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
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ă
24
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
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

25
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.11 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;

26
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.

27
Figura 4.1 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.2 Meniul aplicației

28
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);
29
$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ă
30
ce 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,

31
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.3 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'],

32
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

33
Figura 4.4 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.5 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.6 Lista utilizatorilor autorizați

34
În cazul în care se dorește adăugarea unui nou utilizator, va fi deschisă o nouă fereastră, și aceasta
modală, după cum urmează:

Figura 4.7 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.8 Panoul Central al aplicației


35
Efectuând click pe butonul Soferi ne va fi afișată pagina de administrare a șoferilor, cum este
prezentat în figura 4.9:

Figura 4.9 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.10 Formular adăugare șofer

36
Figura 4.11 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.12 Ș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ă:

37
Figura 4.13 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.14 Lista de curse

38
Figura 4.15 Lista de alimentări

Figura 4.16 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

39
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.17 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.18 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.

40
Figura 4.19 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.20 Situație parc auto

41
În cele din urmă, figura 4.21, prezintă proporția furnizorilor de combustibil de la care au fost efectuate
alimentări.

Figura 4.21 Proporția benzinăriilor de unde s-a alimentat

42
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).

43
Referințe bibliografice

[HEIVGL65]1. Heskett, 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] 1. George Cyrus Thorpe – “Pure Logistics – The Science of War
Preparation“, Franklin Hudson Publishing Company, 1916
[MO96] 2. Charles Moeller – “Logistics concept development”, Aalborg University
, 1996
[LUCO06] 3. Lect. 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” –
6. http://ellislab.com/codeigniter/user-guide/overview/at_a_glance.html
[WIKI02] 7. “Model-view-contoller,Wikipedia” –
8. http://ro.wikipedia.org/wiki/Model-view-controller
9. Ion Lungu, Manole Velicanu, Iuliana Botha –“Database Systems –
[LUVEBO09]
Present and Future”, revista Informatica Economică vol. 13, no. 1/2009

44
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
Figura 1.3 Fluxul informațional al activității logistice din cadrul unei companii ...........................................9
Figura 2.1 Arhitectura Model – View – Controller, [WIKI02] ..................................................................... 17
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 Tabela Șoferi .............................................................................................................................. 22
Figura 3.5 Tabela Mașini............................................................................................................................. 22
Figura 3.6 Tabela Curse .............................................................................................................................. 22
Figura 3.7 Tabela Defecțiuni ....................................................................................................................... 22
Figura 3.8 Tabela Alimentări ...................................................................................................................... 23
Figura 3.9 Tabela Utilizatori ....................................................................................................................... 23
Figura 3.10 Schema conceptuală a bazei de date ...................................................................................... 24
Figura 3.11 Aspectul general al aplicației ................................................................................................... 26
Figura 4.1 Arhitectura Model – View - Controller ...................................................................................... 28
Figura 4.2 Meniul aplicației ........................................................................................................................ 28
Figura 4.3 Tabel jqGrid ............................................................................................................................... 32
Figura 4.4 Autentificare aplicației logistică ................................................................................................ 34
Figura 4.5 Headerul aplicației..................................................................................................................... 34
Figura 4.6 Lista utilizatorilor autorizați ...................................................................................................... 34
Figura 4.7 Adăugarea unui nou utilizator ................................................................................................... 35
Figura 4.8 Panoul Central al aplicației ........................................................................................................ 35
Figura 4.9 Lista șoferilor ............................................................................................................................. 36
Figura 4.10 Formular adăugare șofer ......................................................................................................... 36
Figura 4.11 Formular editare șofer ............................................................................................................ 37
Figura 4.12 Ștergerea unui șofer din listă .................................................................................................. 37
Figura 4.13 lista de mașini .......................................................................................................................... 38
Figura 4.14 Lista de curse ........................................................................................................................... 38
Figura 4.15 Lista de alimentări ................................................................................................................... 39
Figura 4.16 Lista de defecțiuni ................................................................................................................... 39
Figura 4.17 Grafice ..................................................................................................................................... 40
Figura 4.18 Numărul de curse efectuate de un șofer................................................................................. 40
Figura 4.19 numărul de defecțiuni înregistrate ......................................................................................... 41
Figura 4.20 Situație parc auto .................................................................................................................... 41
Figura 4.21 Proporția benzinăriilor de unde s-a alimentat ........................................................................ 42

45
Anexe

Anexa 1.Implementarea modulului de autentificare


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)
{
$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");
});

46
$("#login_dialog").dialog({
modal:true,
width:400,
position: "center",
title: "Autentificare Administrare Logistica"
});
})

</script>
</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()


{
47
$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');
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>

48
// model
class Model_soferi extends CI_Model{

function __construct()
{
// Call the Model constructor
parent::__construct();
$this->load->database();
}

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');

49
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" />
<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(){
50
$("#username_show").html('<?php echo $username;?>');

$("#btn_logout").button({icons:{primary:'ui-icon-
power'}}).click(function(){
window.location = "login";
});

$("#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>

51
<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>
<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;
}

52
.menu_button
{
width:100%;
margin: 0px;
padding:7px;
}

.clock { margin:0px; margin-left:10px; padding-top:5px; padding-bottom:1px;}

#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; }
}

53

S-ar putea să vă placă și