Autor: Alexandru -Cătălin ȚIȚEI Conducător științific : As.drd .ing. Adela PUȘCAȘIU FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE DECAN Prof.dr.ing…. [604426]
FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE
201 8
GENERAREA AUTOMATA A ORARULUI
PROIECT DE DIPLOMĂ
Autor: Alexandru -Cătălin ȚIȚEI
Conducător științific : As.drd .ing. Adela PUȘCAȘIU
FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE
DECAN
Prof.dr.ing. Liviu MICLEA Vizat,
DIRECTOR DEPARTAMENT AUTOMATICĂ
Prof.dr.ing. H onoriu VĂLEAN
Autor : Alexandru -Cătălin ȚIȚEI
Generarea Automată a Orarului
1. Enunțul temei: Se va genera automat o versiune de orar pe baza specificațiilor și a
preferințelor impuse.
2. Conținutul proiectului: Prezenta lucrare de diplomă este structura tă în
următoarele capitole:
a. Introducere( Context General, Obiective, Specificații, Descrierea Mediilor
de Dezvoltare);
b. Studiu Bibliografic (.NET Framework, TMSMVC Framework, APACHE
Server, Oracle Database, C#, PHP , HTML 5, CSS & BootStrap 4, SQL , PL/SQL ,
Aplicații asemănătoare );
c. Analiz a, Proiectare , Implementare (Structura bazei de date , modulul de
vizual izare online , modul ul de administrare loca lă, Modul de utilizare a
suitei de aplica ții pentru generarea orarului , Testare și validare )
d. Concluzii (Rezultate obținute , Direcții de dez voltare )
3. Locul documentației: Universitatea Tehnică din Cluj -Napoca
4. Consu ltanți: –
5. Data emiterii temei: 18.10.2017
6. Data predării: 9.7.2018
Semnătura autorului
Semnătura c onducător ului științific
FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE
Declarație pe proprie răspundere privind
autenticitatea proiectului de diplomă
Subsemnatul(a) Alexandru -Cătălin Ț IȚEI ,
legitimat(ă) cu CI/BI seria PX nr. 183971 , CNP [anonimizat] ,
autorul lucrării:
Generarea Automată a Orarului
elaborată în vederea susținerii examenului de finalizare a studiilor d e licență la
Facultatea de Automatică și Calculatoare , specializarea Automatică și Informatică
Aplicată , din cadrul Universității Tehnice din Cluj -Napoca, sesiunea Iulie 2018 a anului
universitar 2017 -201 8, declar pe proprie răspundere, că această l ucrare este rezultatul
propriei activități intelectuale, pe baza cercetărilor mele și pe baza informațiilor obținute
din surse care au fost citate, în textul lucrării, și în bibliografie.
Declar, că această lucrare nu conține porțiuni plagiate, iar sursele bibliografice au
fost folosite cu respectarea legislației române și a convențiilor internaționale privind
drepturile de autor.
Declar, de asemenea, că această lucrare nu a mai fost prezentată în fața unei alte
comisii de examen de licență.
In cazul consta tării ulterioare a unor declarații false, voi suporta sancțiunile
administrative, respectiv, anularea examenului de licență .
Data Alexandru -Cătălin ȚIȚEI
(semnă tura)
FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE
SINTEZA
proiectului de diplomă cu titlu l:
Generarea Automată a Orarului
Autor: Alexandru -Cătălin ȚIȚEI
Conducător științific: As.drd .ing. Adela PUȘCAȘIU
1. Cerințele temei:
• Dezvoltarea unei aplicații desktop utilizân cunoștințe de programare C#
• Dezvoltarea unei aplicații web utilizând cunoștințe de programare PHP ,
HTML, CSS
• Dezvoltarea unei baze de date comună celor două aplicații utilizând
cunoștințe de proiectare, dezvoltare, și administrare a bazelor de date
2. Soluții alese:
• Pentru aplicația desktop au fost alese:
o Mediu l de dezvoltare: Visual Studio 2017 Community
o Framework: .NET Framework 4.6.1
o Diver pentru baza de date: ODT for Visual Studio 2017
o Limbajul de programare: C#
• Pentru aplicația web au fost alese:
o Mediul de dezvoltare: PhpStorm 2018.1.2
o Framework: tmsMVC
o Driver pentru ba za de date: PHP Data Objects (PDO)
o Limbajele de programare : PHP (v:7.2.4 )
HTML5
CSS3
o Server PHP: Apache 2.4.33 (win32)
• pentru realizarea bazelor de date:
o SGBDR: Oracle 12cR2
o Medii de dezvoltare: Toad for Oracle 10
PL/SQL Developer 1 2
o Acces la baza de date: Oracle 12cR2 Client (win32/64)
• pentru managementul proiectului și versionarea aplicațiilor
o Managementul proiectului: Trello
o Versionarea aplicațiilor: Bitbucket
Sourcetree
FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE
3. Rezultate obținute:
În urma dezvoltării acestei suite de aplicații s -a realizat un pachet software prin
care se poate gestiona orarul unei instituții de învățământ.
4. Testări și verificări:
În urma testelor și a verificărilor s -au validat cerintele exprimate în specificațiile
temei , și s-a descoperit o suită de îmbunătățiri care pot fi făcute pentru o mai bu nă și mai
ușoară funcționare a pachetului software.
5. Contribuții personale:
Contribuțiile personale la dezvoltarea acestei suite software constau în:
o Analiza, proiectarea și implementarea structurii bazei de date.
o Analiza, proiectarea și implementarea A PI-ului aplicațiilor.
o Proiectarea, dezvoltarea și implementarea framework -ului tmsMVC
pentru aplicatia Web.
o Proiectarea și implementarea aplicațiilor Desktop și Web necesare
gestionării și vizualizării, orarului ce apartine unei instituții de
învățământ.
6. Surse de documentare:
[1] „.NET Framework Guide,” 2018. [Interactiv]. Available:
https://docs.microsoft.com/en -us/dotnet/framework/index.
[2] W3Techs, „Usage of web servers for websites,” Web Technology Surveys,
2018. [Interactiv]. Available:
https:// w3techs.com/technologies/overview/web_server/all.
[3] A. S. Fundation, „ABOUT APACHE,” Apache Software Fundation, 2018.
[Interactiv]. Available: https://httpd.apache.org/ABOUT_APACHE.html.
[4] O. Company, „Oracle Database 12c Release 2,” Oracle Company , 2018.
[Interactiv]. Available: https://docs.oracle.com/en/database/oracle/oracle –
database/12.2/index.html.
[5] Microsoft, „Introduction to the C# Language and the .NET Framework,”
Microsoft, 2018. [Interactiv].
[6] ascOrare, „ascOrare.ro,” [Interact iv]. Available: https://ascorare.ro/.
[7] 24edu, „24edu.ro,” [Interactiv]. Available:
http://www.24edu.ro/Front/Orar/Generare.
FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE
[8] L. Negrescu și L. Negrescu, Limbajul C# pentru începători, Cluj -Napoca:
Albastră, 2010, pp. 1 -24.
[9] L. Welling și L. Thomson, Dezvoltarea aplicațiilor Web cu PHP și MySQL,
vol. 1, București: TEORA, 2003, pp. 22 -30.
[10] M. Fotache, SQL, Dialecte DB2, Oracle, PostgreSQL și SQL Server, Iași:
POLIROM, 2009.
Semnătura autorului
Semnătura conducătorului științific
1 Cuprins
1 INTRODUCERE ………………………….. ………………………….. ………………………….. ………………………….. 3
1.1 CONTEXT GENERAL ………………………….. ………………………….. ………………………….. …………………….. 3
1.2 OBIECTIVE ………………………….. ………………………….. ………………………….. ………………………….. …… 5
1.2.1 Vizualizarea rapidă, eficientă și accesibilă a orarului prin i ntermediul unei aplicații web
prietenoase 5
1.2.2 Administrarea și generarea ușoară și eficientă a orarului prin intermediul unei aplicații
locale (desktop) dedicate acestui scop ………………………….. ………………………….. ………………………….. ………. 5
1.3 SPECIFICAȚII ………………………….. ………………………….. ………………………….. ………………………….. … 5
1.3.1 Aplicația de administrare (modulul desktop) ………………………….. ………………………….. ……… 5
1.3.2 Aplicația de vizualizare (modulul Web) ………………………….. ………………………….. …………….. 6
1.3.3 Baza de date ………………………….. ………………………….. ………………………….. …………………….. 6
1.4 DESCRIEREA MEDIILOR D E DEZVOLTARE UTILIZA TE ………………………….. ………………………….. ……………… 7
1.4.1 Visual Studio 2017 ………………………….. ………………………….. ………………………….. …………….. 7
1.4.2 PhpStorm 2018.1.2 ………………………….. ………………………….. ………………………….. ……………. 7
1.4.3 Toad for Oracle 10 ………………………….. ………………………….. ………………………….. …………….. 7
1.4.4 PL/SQL Developer 12 ………………………….. ………………………….. ………………………….. ………….. 7
2 STUDIU BIBLIOGRAPHIC ………………………….. ………………………….. ………………………….. …………….. 8
2.1 .NET FRAMEWORK ………………………….. ………………………….. ………………………….. …………………….. 8
2.2 TMSMVC FRAMEWORK ………………………….. ………………………….. ………………………….. ……………….. 8
2.3 APACHE SERVER ………………………….. ………………………….. ………………………….. ………………………… 9
2.4 ORACL E DATABASE ………………………….. ………………………….. ………………………….. …………………….. 9
2.5 C#, PHP, HTML5, CSS3 & BOOTSTRAP 4 , SQL, PL/SQL ………………………….. ………………………….. . 9
2.5.1 C# ………………………….. ………………………….. ………………………….. ………………………….. ……….. 9
2.5.2 PHP ………………………….. ………………………….. ………………………….. ………………………….. …… 10
2.5.3 CSS3 & Bootstrap 4 ………………………….. ………………………….. ………………………….. ………….. 10
2.5.4 SQL ………………………….. ………………………….. ………………………….. ………………………….. ……. 10
2.5.5 PL/SQL ………………………….. ………………………….. ………………………….. ………………………….. .. 10
2.6 APLICAȚII ASEMĂNĂTOAR E ………………………….. ………………………….. ………………………….. ………….. 11
3 ANALIZĂ, PROIECTARE, IMPLEMENTARE ………………………….. ………………………….. …………………. 11
3.1 STRUCTURA BAZEI DE DATE ………………………….. ………………………….. ………………………….. …………. 11
3.1.1 Tabelele de stocare a materiilor ………………………….. ………………………….. …………………….. 12
3.1.2 Tabelele de stocare a grupelor ………………………….. ………………………….. ………………………. 13
3.1.3 Tabelele de stocare sălilor ………………………….. ………………………….. ………………………….. … 16
3.1.4 Tabela de stocare a user -ilor ………………………….. ………………………….. …………………………. 16
3.1.5 Tabela de stocare a structurii anului universitar ………………………….. ………………………….. . 17
3.1.6 Tabela de stocare a priorităților ………………………….. ………………………….. …………………….. 18
3.1.7 Tabelele de stocare a orarelor ………………………….. ………………………….. ……………………….. 19
3.1.8 Procedurile de ștergere a cursurilor, a seminariilor, a laboratoarelor și a proiectelor …….. 20
3.1.9 Pachetele de implementare a API -ului ………………………….. ………………………….. …………….. 21
3.1.10 View -uri necesare aplicatiei de administrare ………………………….. ………………………….. .. 24
3.2 MODULUL DE VIZUALIZAR E ONLINE ………………………….. ………………………….. ………………………….. … 24
3.2.1 Descrierea Framework -ului tmsMVC ………………………….. ………………………….. ………………. 24
3.2.1.1 Implementare Model ………………………….. ………………………….. ………………………….. ………………. 25
3.2.1.2 Implementare View ………………………….. ………………………….. ………………………….. …………………. 26
3.2.1.3 Implementare Controller -elor Pages si User ………………………….. ………………………….. ……………. 32
3.2.1.4 Implementare Controller, Core și Database ………………………….. ………………………….. …………….. 37
3.3 MODULUL DE ADMINISTRA RE LOCALĂ ………………………….. ………………………….. ………………………….. 40
Introducere
2 3.3.1 Implementarea modulului de administrare locala ………………………….. …………………………. 40
3.3.1.1 Forma de Login ………………………….. ………………………….. ………………………….. ……………………….. 40
3.3.1.2 Forma principala modulului ………………………….. ………………………….. ………………………….. ……… 41
3.3.1.3 Formele de generare a orarelor ………………………….. ………………………….. ………………………….. … 41
3.4 MODUL DE UTILIZARE A SUITEI DE APLICAȚII PENTRU GENERAREA ORA RULUI ………………………….. ………….. 44
3.4.1 Modulul Web ………………………….. ………………………….. ………………………….. ………………….. 44
3.4.2 Modulul de administrare locala ………………………….. ………………………….. ……………………… 47
3.5 TESTARE SI VALIDARE ………………………….. ………………………….. ………………………….. …………………. 50
4 CONCLUZII ………………………….. ………………………….. ………………………….. ………………………….. …. 51
4.1 REZULTATE OBȚIN UTE ………………………….. ………………………….. ………………………….. ………………… 51
4.2 DIRECȚII DE DEZVOLTAR E ………………………….. ………………………….. ………………………….. …………….. 51
5 BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. …………………………. 52
Introducere
3 1 Introducere
În ace astă lucrare voi pr ezenta o suită de aplicații software prin care se va permite
gestionarea și vizualizarea, într -un mod prietenos și eficient , a orarului unei instituții de
învățământ. Prin acest capitol voi prezenta motivele și contextul în care am dezvoltat
acest pachet d e aplicații software.
1.1 Context general
Având în vedere ritmul accelerat al dezvoltării și automatizării intensive a
proceselor tehnologice cât și a vieții cotidiene, simțim nevoia de a ne organiza timpul din
ce în ce mai riguros. Prin acest fapt înțelegem n ecesitatea de a umple cele 24 de ore ale
unei zile de lucru cât mai eficient posibil. Acest proces era ușor de gestionat în urmă cu 50
– 100 de ani deoarece volumul de muncă și volumul de date necesar a fi procesate era
unul redus și constant de la o zi la alta. În contextul actual volumul de muncă și volumul
de date pe care trebuie să le procesăm zilnic, în cel mai fericit caz s -a dublat , și se tot
mărește de la o zi la alta.
Plecând de la acest status quo , am sesizat necesitatea ușurării și eficientizării
procesului de gestionare a timpului și a volumului de munca. Astfel am ajuns la concluzia
că o suită de aplicații , destinate acestui scop , este nu doar necesară cât și vitală, atunci
când ne dorim să ob ținem maximul de performanță de la fiecare minut al v ieții noastre.
Dincolo de dorința person ală de a cunoaște cât mai multe tehnologii și de a lucra cu
ele, implementarea unei suite de aplicații este o practică curentă a marilor companii care
dezvoltă suite de aplicații software, atât pentru mediul de busin ess cât și pentru mediul
privat. În continuare voi menționa c âteva companii si suitele lor de aplicații:
1. Compania Microsoft dezvoltă suita Office, atât de indispensabilă în orice companie dar
utilizată și în mediul privat . Prin această suită se o feră tool -urile necesare redactării
documentelor ( modulul Word), gestionării serviciului email ( modulul Outlook),
realizării de prezentări dinamice ( modulul PowerPoint), gestionării fișelor de calcul
preliminar ( modulul Excel), etc.
2. Compania SIEMENS dezvoltă suita SIMATIC IT R&D Suite, această suită de aplicații ,
fiind bine cunoscută de cei care lucrează în domeniul fabricației bunuri lor de larg
consum și a industriei alimentare . Prin această suită de aplicații SIEMENS oferă un
pachet complet de soluții cu ajutorul cărora se pot gestiona atât liniile de fabricație cât
și procesele de cercetare și dezvoltare a produselor. Un bun exemplu este modulul
INTERSPEC prin care se ges tionează rețetarul unui produs.
3. Compania SAP dezvoltă bine cunoscută suită SAP S/4HANA – ERP implementată la
nivel internațional în companii de renume. Prin ace astă suită se asigură planificarea
resurselor unei companii , cuprinzând module destinate următoarelor departamente :
Vânzări, Producție, Financiar, Contabilitate, Management, etc.
Iar lista exemplelor poate continua. Așadar alegerea unei astfel de abordări, în
dezvoltarea și implementarea suitei de aplicații pentru gestionarea orarului, este una
Introducere
4 actuală și competitivă cu tendințele de dezvoltare și proiectare a aplicațiilor în cadrul
industri ei software.
Pentru a înțelege cât mai bine necesitatea și complexitatea acestei suite software
pentru gestionarea orarului, este necesar să înțelegem conceptele și tehnologiile utilizate.
În acest scop voi defini următoarele:
Mediu de dezvoltare integrat (Integrated Development Environment – IDE): definit
ca pachetul complet de programe necesare dezvoltatorului la scrie rea soluțiilor software .
Un IDE conține un editor de text, un debug -er (depanator) și un compilator sau
interpretor.
Framework -ul este un ansamblu standardizat de concepte, tehnici și practici prin
care se oferă dezvoltatorul un cadru organizat, cu ajutorul căruia poate gestiona ușor și
eficient atât proiectare, dezvoltarea și implementarea, cât și mentenanța ulterioară
livrării produsului s oftware .
Driver (software) este un set de proceduri, funcții și metode prin care se asigură
comunicarea între diverse tehnologii care necesită a fi integrate într -o aplicație software.
Application Programming Interface (API) reprezintă setul de subprograme ,
proceduri, funcții, metode și protocoale prin care se implementează funcționalitățile unui
produs software.
Sistemul de Gestiune a Bazelor de Date Rela ționale (SGBDR) este definit ca
totalitatea tool -urilor software prin intermediul cărora se creează , stochează, procesează,
interoghează și întrețin datele într -o bază de date în care informațiile se obțin în urma
procesării datelor și a rela țiilor definite între acestea.
Server -ul și Client -ul definesc un concept, o arhitectura de aplica ție software prin
care se asigură implementarea conceptului de soluții software distribuite . Server -ul este
acel modul care furnizea ză servicii Client -ului, iar Client -ul este acel modul care pentru
a-și îndeplinit funcționalitățile are nevoie serviciile furnizate de Ser ver.
Limbajul de programare este definit prin totalitatea regulilor sintactice și semantice
prin care se formulează in strucțiunile necesar a fi compilate sau/și interpretate de
compilator/interpretor, prin intermediul cărora se realizează scrierea unei apl icații
software.
Având definite contextul general și termenii necesari înțelegerii motivației și
tehnicilor de dezvoltare, propun să enumerăm în continuare care sunt obiectivele și
specificațiile stabilite pentru dezvoltarea suitei de aplicații software.
Intro ducere
5 1.2 Obiective
Din contextul prezentat anterior obiectivele setate lucrării sunt:
1.2.1 Vizualizarea rapidă, eficientă și accesibilă a orarului prin intermediul unei
aplicații web prietenoase.
1.2.2 Administrarea și generarea ușoară și eficientă a orarului prin interm ediul
unei ap licații locale ( desktop ) dedicate acestui scop.
În cele ce urmează voi detalia fiecare obiectiv în parte, luând în considerare contextul
general.
1.2.1 Vizualizarea rapidă, eficientă și accesibilă a orarului prin intermediul unei
aplicații web prie tenoase
Acest obiectiv se poate justific ă astfel : datorită necesității de a filtra cât mai mult
din informația cu care interacționăm zilnic , rezultă prima parte a obiectivului Vizualizarea
rapidă, eficientă și accesibilă a orarului .
De asem enea datorită de zvoltării accelerate a tehnologiei ne dorim să avem acces
mobil la informația de care avem nevoie și astfel rezult ă a doua parte a obiectivului prin
intermediul unei aplicații web prietenoase.
1.2.2 Administrarea și generarea ușoară și eficientă a orarului prin intermediul
unei ap licații locale (desktop ) dedicate acestui scop
Acest obiectiv își are justificarea în concep tul de modularizare a unei soluții
software astfel rezultând prima parte a obiectivului (Administrarea , generarea și eficientă
a orarului ) și în necesitatea de a concepe o aplicație robustă dedicată administrării
rezultând a doua parte a obiectivului (prin intermediul unei ap licații desktop dedicate
acestui scop ).
În urma definirii și justificării obiectivelor setate voi formula și specificații le
necesare dezvoltării și implementării acestei suite software.
1.3 Specificații
În urma definirii cerințelor și obiectivelor lucrării sunt generate specificațiile
necesare pentru a de zvolta suita de aplicații software.
1.3.1 Aplicația de administrare (modulul de sktop)
Astfel pentru dezvoltarea aplicației desktop de administrare sunt necesare
cunoștințe de programare utilizând limbajul C#. Se dor ește a fi implementate următoarele
funcționalități:
o Conexiunea cu baza de date comună prin intermediul unei ferestre de
login
Introducere
6 o Vizualizarea orarelor pentru fiecare semestru al fiecărui an de studiu în
parte
o Șterge în totalitate fiecare orar pentru fiecare an de studi u
o Programa în mod individual pentru fiecare materie cursurile,
semi nariile, laboratoarele și proiectele.
o Șterg e în mod individual pentru fiecare materie cursurile, seminariile,
laboratoarele și proiectele.
o Integrarea acestor facilități într-un mediu ușor de utilizat, rapid și
eficient.
1.3.2 Aplicația de vizualizare (modulul Web)
Dezvoltarea aplicației web p entru vizual iza orarul necesită cunoștințe de instalare
și administrare a unui server HTTP, cât și cunoștințe de programare utilizând limbaj ele
PHP, HTML 5 și CSS 3. Se doreș te a fi implementate următoarele funcționalități:
o Conexiunea cu baza de date prin intermediul un ei forme de login
o Crearea unui nou user care să poată avea acces la vizualizarea orarului
o Filtra rea informați ei pe care utilizatorul dorește să o acceseze.
o Accesarea informați ilor utile ce sunt complementare orarului (harta
sălilor, link -uri către site -urile universității, etc)
o Prezentarea informațiilor într-un mod plăcut și prietenos respectând
cerințele de rapiditate și eficiență.
1.3.3 Baza de date
Pentru dezvolt area unei baze de date , comune celor două module web respectiv
desktop, sunt necesare următoarele cunoștințe le: de creare și administrare a unui server
Oracle 12cR2 , cât și cunoștințe de programare utilizând limbajul SQL și dialect ul PL/SQL
specific SGBDR -ului Oracle12cR2 . Se doreș te a fi implementate următoarele
funcționalități:
o Implementarea unor setu ri de procedur i, funcții și pachete prin care să
se implementeze API -ul aplicației.
o Implementarea arhitecturii de tabele si view -uri prin care să fie posibilă
programarea și vizualizarea orarelor.
o Crearea de useri specifici aplicației.
o Popularea automată a tabelel or cu setul de date aferent fiecărui an de
studiu.
Limitările acestui prototip de aplicație sunt:
o Asistența din partea unui operator uman la generarea orarului. În
continuare este necesară expertiza unui operator uman pentru a
configura orarul.
Introducere
7 1.4 Des crierea mediilor de dezvoltare utilizate
1.4.1 Visual Studio 2017
Visual St udio 2017 este un mediu de dezvoltare , produs de compania MICROSOFT ,
care permite dez voltatorilor s ă creeze aplicații utilizând limbaje precum Visual C#, Visual
C++, Visual Basic, Visual J#, .NET Framework este framework -ul cu ajutorul căruia se pot
dezvolta aplicații utilizând limbajele de mai sus.
1.4.2 PhpStorm 2018.1.2
PhpStorm 2018.1.2 este un IDE , produs de compania JETBRAINS, acesta facilitând
crearea de aplicații web folosind limbajul PH P. Acest IDE permite integrarea unor
framework -uri cunoscute precum Laravel, și totodată permite utilizatorului să îsi
construiască propriul framework astfel facilitând o mai mare flexibilitate în dezvoltarea
aplicațiilor web.
1.4.3 Toad for Oracle 10
Toad for O racle 10 este un mediu de dezvoltare , produs de compania QUEST care
permite dezvoltarea, gestionarea și administrarea bazelor de date stocate pe servere
Oracle.
1.4.4 PL/SQL Developer 12
PL/SQL Developer 12 este un mediu de dez voltare , produs de compani a ALLROUN D
AUTOMATIONS , care permite dezvoltarea și testarea codului scris în limbajul SQL și în
dialectul PL/SQL . Prin intermediul său pot fi dezvoltate și testate funcții, proceduri,
pachete, etc.
Studiu bibliographic
8 2 Studiu bibliographic
În cadrul acestui capitol voi descrie tehnol ogiile utilizare și aplicațiile deja existente,
care stau la baza acestei suite software.
2.1 .NET Framework
.NET Framework este o platformă de dezvoltare pentru construirea de aplicații web,
Windows, Windows Phone, Windows Server și Microsoft Azure. Se compu ne din
biblioteca Common Language Runtime (CLR) și biblioteca .NET Framework, care include
o gamă largă de funcționalități și oferă suport pentru multe din standarde le impuse în
industri a IT.
.NET Framework oferă o suită de servicii pentru gestionarea memo riei, securitatea
aplicațiilor , crearea de rețele , dezvoltarea, implementarea și livrarea aplicațiilor. Acest
framework oferă structuri de date ușor de utilizat și API -uri care lucrează cu sistemul de
operare Windows , la nivel inferior. Utiliza rea unei varietăți de limb aje precum C #, F # și
Visual Basic este un alt avantaj al framework -ului .NET. Detalii cu privire la
funcționalitățile acestui framework se pot g ăsi la [1].
2.2 tmsMVC framework
Acest framework este dezvoltat special p entru aplicația web , implement ând
conceptul de programare Model View Controller (MVC). Acest concept are la bază
împărțirea (modularizarea) unei aplicații software în trei părți intim interconectate. În
acest mod sunt separate felul în care gestionează apl icația datele și modul în care acestea
sunt prezentate utilizatorului. Pentru a înțelege și mai bine aceste noțiuni, este necesar sa
urmărim figura 2.2.1. După cum se poate observa , utilizatorul accesează i nformația prin
intermediul Controller -elor, aceste a manipuleaz ă datele prin intermediul Modelelor și
ulterior datele sunt prezentate utilizatorului prin intermediul View -urilor.
Figura 2.2.1 Concept MVC
Studiu bibliographic
9 Prin intermediul acestui framework au fost implementate o serie de view -uri prin
care se asigură int eracționarea cu aplicația web. De asemenea s -au implementat și
modelele necesare manipulării datelor din baza de date și totodată au fost dezvoltate
controller -ele necesare procesării cerințelor utilizatorului, manipulând datele furnizate
de modele, în con formitate cu cerințele formulate de utilizator.
2.3 Apache Server
Apache este un server HTTP de tip open source. Apache a jucat și joacă un rol
important în dezvoltarea web -ului, fiind folosit în prezent în circa 46.4 % din paginile web
[2]. Apache este un server web cu o contribuție notabilă la dezvolta rea Internetului
(world wide web). Apache a reprezentat prima alternativă viabilă la Netscape
Communications Corporation, și a evoluat rapid în funcționalitate și performanță ca un
rival competitiv pentru alte servere web bazate pe Unix.
Apache este dezvoltat de o comunitate deschisă de programatori sub emblema
Apache Software Foundation. Aplicația este disponibilă pentru o mare varietate de
sisteme de operare incluzând Unix, FreeBSD, Linux, Solaris, Novell NetWare, Mac OS X,
Microsoft Windows si OS/2. [3]
2.4 Oracle Database
Oracle Database (denumită în mod obișnuit Oracle) este un sistem de management
al bazelor de date relaționale produs și comercializat de O racle Corporation.
Este cel mai popular SGBDR din lume proiectat pentru procesarea online a
tranzacțiilor (OLTP), pentru stocarea datelor (DW) și pentru integrarea acestora (OLTP &
DW) bazate pe datele stocate în aceeași bază de date. Ultima versiune aflat ă în producție
este Oracle Database 12c Release 2 (denumită în mod obișnuit Oracle 12cR2). Detalii cu
privire la Oracle 12cR2 se pot g ăsi la [4]. Această versiune fiind utilizată și la dezvoltarea
bazei de date pentru suita de aplicații ale lucrării de fată.
2.5 C#, PHP, HTML5, CSS3 & BOOTSTRAP 4 , SQL , PL/SQL
2.5.1 C#
C # este un limbaj POO, elegant și sigur, care permite dezvoltatorilor să construiască
o varietate de aplicații sigure și robuste care rulează pe platforma .NET Framework. Acest
limbaj permite crea rea de aplicații client Windows, servicii Web XML, aplicații cu module
distribuite, aplicații client -server, aplicații cu conexiune la baze de date și multe altele.
Visual C # oferă un editor de text avansat, integrează un modul de design ușor de utilizat
pentru a crea interfața cu utilizatorii, un debugger integrat și multe alte instrumente
pentru a ușura dezvoltarea aplicațiilor bazate pe limbajul C # și pe platforma .NET
Framework. Pentru mai multe detalii legate de acest limba j puteți vizita site -ul [5].
Studiu bibliographic
10 2.5.2 PHP
PHP este un limbaj de scripting pentru server și un instrument puternic pentru
crearea de pagini Web dinamice și interactive. PHP este o alternativă utilizată pe scară
largă, gratuită și efici entă față de concurenții cum ar fi ASP .Net produs Microsoft.
Ceea ce face PHP să difere de limbajul JavaScript este tocmai codul său care poate fi
executat pe server, generând HTML care este apoi trimis către client. Clientul va primi
rezultatele rulării a celui script, fără a putea cunoaște codul -sursă c are stă la baz a lui . Cel
mai bun lucru la PHP este simplitatea extremă pentru un începător, dar totodată existența
multor facilități avansate pentru un programator profesionist
2.5.3 CSS3 & Bootstrap 4
CSS (Cascad ing Style Sheets) este un standard pentru formatarea elementelor unui
document HTML. Stilurile se pot atașa elementelor HTML prin intermediul unor fișiere
externe sau în cadrul documentului, prin elementul <style> și/sau atributul style .
Bootstrap este o bibliotecă open source care facilitează dezvoltarea paginilor Web
utilizând HTML, CSS și J avaScript . Cu ajutorul acestei librării se pot implementa diverse
prototipuri de interfe țe, sau se pot crea unele complet noi, astfel încât utilizatorului să îi
fie cat mai ușor sa interacționeze cu site -ul, cât și sa îi placă aspectul acestuia.
2.5.4 SQL
Structured Query Language (SQL) , este un limba j de programare dedicat procesării
datelor , în cadrul unui Sistem de Gestionare a Bazelor de Date Relaționale. Acest limbaj a
apărut la începutul anilor 1970 . Compania IBM fiind prima care prin lansarea proiectului
System/R introduce in piață limbajul de interogare SEQUEL ulterior numele fiindu -i
modificat în SQL la începutul anilor 1980.
2.5.5 PL/SQL
Procedural Language/Structured Qu ery Language (PL/SQL) este un dialect al
limbajului SQL, acesta fiind dezvoltat de compania Oracle. Prin intermediul acestui limbaj
manipularea datelor si utilizarea procedurilor de interogare se poate include în blocuri
structurate. Cu alte cuvinte , limba jul permite introducerea de variabile, constante,
proceduri , funcții, pachete, etc. Odat ă cu implementare ver siunii 8 a Oracle Database au
fost incluse funcționalități asociate programării orientate pe obiect, astfel se pot crea cele
menționate anterior, acestea putând fi stocate în baza de date și ulterior folosite de
SGBDR, sau de aplicații terțe.
Analiză, proiectare, implementare
11 2.6 Aplicații asemănătoare
În urma studiului de piață, am descoperit existența unor aplicații asemănătoare celei
de fată. Existența și utilizarea acestor aplicații este un bun exemplu al necesității și a
nevoii unei astfel de a plicații pe piață. Aceste aplicații sunt:
1. ascOrare [6]
Acesta aplica ție permite:
Generare automată si ajustare a manuală, după ce orarul a fost generat, se
pot face modific ări si ajust ări. Verificarea orarului se bazeaz ă pe algor itmul
propus de aScOrare care detect ează ușor orice conflict din orar.
Introducerea simplă a datelor , procesul de inițializare fiind cât se poate de
rapid și ușor . Orarul poate fi publicat si astfel atât profesorii cât și elevi îl
pot accesa de pe telefonu l mobil .
2. 24Orar -Orarul Școlii [7]
Prin solu ția 24edu este mult mai simplu sa comunici: cu un singur click vei
putea transmite orarul c ătre toți profesorii si elevii scolii tale. 24edu tine cont
de orice criteriu: tipul clasei ( primara, gimnaziala, liceala), program
(diminea ța / dup ă-amiază), numărul de ore pentru fiecare materie,
profesorii unei clase si multe altele. Poți avea chiar si un program diferit in
funcție de anotimp , fără niciun efort in plus. Iar 24edu se asigura ca nimeni
nu încurca orele.
3 Analiză, proiectare, implementare
În cadrul acestui capitol voi descrie pe larg care sunt procesele de analiză, proiectare
și implementare a aplicației de generare a orarului, utilizând tehnologiile prezentate
anterior.
3.1 Structura Bazei de Date
Analiza pentru dezvoltarea structurii bazei de date a pornit de la conceptul de
organizare a priorităților. Este bine cunoscut faptul că atunci când dorim să ne gestionăm
timpul, suntem nevoiți să prioritizăm task -urile pe care le avem de înd eplinit. Analizând
structura orarului care se împarte în zile respectiv ore, am ajuns la concluzia că în cadrul
unei zile de lucru sunt 15 intervale de prioritate, distribuite astfel: ora 8 prioritate 1, ora
9 prioritate 2, … și așa mai departe până la o ra 22 prioritate 15. În acest fel vor fi distribuite
cursurile, seminariile, laboratoarele și proiectele în cadrul unei săptămâni. Prin
intermediul acestui concept se elimină problemele de concepere a unui orar, fiind
necesară doar stabilirea priorităților la începutul unui semestru sau an universitar.
Analiză, proiectare, implementare
12 Pentru a putea implementa concep tul prezentat anterior a fost necesară dezvoltarea
următoarelor tabele, proceduri și pachete:
3.1.1 Tabelele de stocare a materiilor
Cu ajutorul acestor tabele se stochează în baza de date materiile ce urmează a fi
predate în fiecare semestru, pentru fiecare an de studiu în parte. Structura acestor tabel e
este prezentat ă în figurile 3.1.1.1, 3.1.1.2, 3.1.1.3, 3.1.1.4.
Figura 3.1.1.1 Structura tabelei care stocheaz ă materiile pentru anul 1 licen ță
Figura 3.1.1.2 Structura tabelei care stocheaz ă materiile pentru anul 2 licen ță
Figura 3.1.1.3 Structura tabelei care stocheaz ă materiile pentru anul 3 licen ță
Analiză, proiectare, implementare
13 Figura 3.1.1.4 Structura tabelei care stocheaz ă materiile pentru anul 4 licen ță
Astfel coloana ID_MATERIE stochea ză acronimul materiei, coloana
DENUMIRE_MATERIE stochează denumirea complet ă a materiei, coloana
PROF_MATERIE stochează numele profesorului care predă materia respectivă, coloana
PRIORITATE_MATERIE stochează prioritatea p e care o are acea materie, NUMAR_ORE
reprezintă durata în ore a acelei materii, TIP_ORE stochează ce fel de ore are acea materie
(curs (C), seminar (S), laborator (L), proiect (P)), FRECVENTA_MATERIE reprezintă
intervalul de tip la care se repetă acea mat erie, saptămânal (valoarea 0), bisăptămânal în
săptămână impară (valoarea 1) sau bisăptămânal în săptămână pară (valoarea 2) , iar
coloanal SEMESTRU stochează în care semestru se va preda acea materie. După cu se
poate observa din figuri fiecare coloană est e cheie primară, am uti lizat acestă tehnică
pentru a permite introducerea datelor în mod unic în funcție de combinarea parametrilor
descriși anterior. În figura 3.1.1.5 se poate observa un exemplu de stocare a cursurilor
pentru anul 1 de licență semestrul 1.
Figura 3.1.1.4 Exemplu stocare cursuri an1 licen ță semestrul 1
3.1.2 Tabelele de stocare a grupelor
Cu ajutorul acestor tabele se stochează în baza de date grupele pentru fiecare an de
studiu în parte. Structura acestor tabele este prezentat ă în figurile 3.1 .2.1, 3.1. 2.2, 3.1. 2.3,
3.1.2.4.
Figura 3.1.2.1 Structura tabelei de stocare a grupelor pentru an1 licență
Analiză, proiectare, implementare
14 Figura 3.1.2. 3 Structura tabelei de stocare a grupelor pentru an2 licență
Figura 3.1.2. 3 Structura tabelei de stocare a grupelor pentru an 3 licență
Figura 3.1.2. 4 Structura tabelei de stocare a grupelor pentru an4 licență
Analiză, proiectare, implementare
15 Conform cu structura tabelelor coloana ID_GRUPA stochează num ărul grupei, colo ana
NR_STUDENTI stochează numărul de studenți din grupă respectiv semigrupă, iar
NR_SEMIGRUP A stochează numărul semigrupei, astfel semigrupa 0 reprezintă toata
grupa, iar semigrupa 1 respectiv 2 reprezintă ju mătatea superioară respectiv inferioară a
grupei. Un exemplu de stocare a grupelor se poate observa în figura 3.2.1.5 :
Figura 3.1.2.5 Exem plu de stocare a grupelor pentru an1 licență
Ana liză, proiectare, implementare
16 3.1.3 Tabelele de stocare sălilor
În tabela aceasta se stochează în baza de date sălile de care dispune unitatea de
învățământ. Structura acestei tabele este prezentat ă în figura 3.1.3.1
Figura 3.1. 3.1 Structura ta belei de stocare a sălilor
Conform structurii prezentate în figura de mai sus, SALA_ID va stoca numele sălii,
ADRESA reprezintă locația geografică a sălii, CAPACITATE reprezintă volumul de l ocuri
disponibile în s ală, iar TIP_SALA reprezintă scopul destinat fiecărei săli (curs, seminar,
laborator). În figura 3.1.3.2 se poate observa un exemplu de stocare a datelor în această
tabelă:
Figura 3.1.3.2 Exemplu de stocare a sălilor
3.1.4 Tabela de stocare a user -ilor
Prin intermediul acestei tabele se stochează în baz a de date user -ii aplicației web.
Structura acestei tabele este prezentat ă în figura 3.1.4.1
Figura 3.1. 4.1 Structura tabelei de stocare a user -ilor
Analiză, proiectare, implementare
17 În concordanță cu structura prezentată anterior putem adăuga că parola care se
stochează în baza de date e ste criptată folosind algoritmul Eksblowfish . Un exemplu de
stocare a user -ilor se poate vedea în figura 3.2.4.2.
Figura 3.1.4. 2 Exemplu de stocare a user -ilor
3.1.5 Tabela de stocare a structurii anului universitar
Această tabelă ajută la stocarea datelor leg ate de structura anului universitar, mai
precis săptămânile anului uni versitar și intervalele calendaristice aferente. Structura
tabelei se poate observa în figura 3.1.5.1
Figura 3.1.5.1 Structura tabelei de stocare a anului universitar
Un exemplu de stoc are a anului universitar se poate vizualiza în figura 3.1.5.2
Figura 3.1.5.2 Exemplu de stocare a anului universitar
Analiză, proiectare, implementare
18 3.1.6 Tabela de stocare a priorităților
Prin intermediul acestei tabele se stochează datele ce privesc prioritățile în cadrul
unei zile calenda ristice. Structura acestei tabele se prezintă în figura 3.1.6.1.
Figura 3.1.6.1 Structura tabelei de stocare a priorităților
Un exemplu de stocare a priorităților se prezintă în figura 3.1.6.2
Figura 3.1.6. 2 Exemplu de stocare a priorităților pentru ziu a de Luni
Analiză, proiectare, implementare
19 3.1.7 Tabelele de stocare a orarelor
Prin intermediul acestor tabele se stochează datele ce privesc datele de st ructură a
orarelor aferente fiecărui semestru al fiecărui an de studiu . Structura acest or tabele se
prezintă în figur ile 3.1.7.1, 3.1.7. 2, 3.1.7.3
Figura 3.1.7.1 Struc tura tabelei de stocare a orarului an1 semestrul 1
Figura 3.1.7.1 Struc tura tabelei de stocare a orarului an1 semestrul 2
Figura 3.1.7.1 Struc tura tabelelor de stocare a orarului pentru nivelul de licență
Analiză, proiectare, implementare
20 3.1.8 Procedurile de ște rgere a cursurilor, a seminariilor, a laboratoarelor și a
proiectelor
Pentru a facilita ștergerea individuală a cursurilor, seminariilor, laboratoarelor și a
proiectele, a fost necesară implementarea unor proceduri stocate în baza de date. În
continuare vo i prezenta câte un exemplu de implementare pentru fiecare tip de ora în
parte.
Procedura de ștergere a cursurilor din anul 1 semestrul 1 :
CREATE OR REPLACE PROCEDURE TMSDBA .STERGECURSURI_AN1_S1 (
ASZI IN NVARCHAR2 ,
ASDENUMIRE_MATERIE IN NVARCH AR2,
ASSALA IN NVARCHAR2 ,
ASGRUPA IN NVARCHAR2 ) IS
BEGIN
DELETE FROM TMSORAR_LICENTA_AN1
WHERE ZI_CALENDARISTICA = ASZI
AND MATERIE = (SELECT ID_MATERIE
FROM TMSMATERII_LAN1
WHERE DENUMIRE_MATERIE = ASDENUMIRE_MATERIE
AND TIP_ORE = 'C')
AND SALA = ASSALA
AND GRUPA = ASGRUPA
AND TIP_ORA = 'C';
COMMIT;
END STERGECURSURI_AN1_S1 ;
Procedura de ștergere a laboratoarelor din anul 1 semestrul 1:
CREATE OR REPLACE PROCEDURE TMSDBA .STERGELABORATOARE_AN1_S1 (
ASZI IN NVARCHAR2 ,
ASDENUMIRE_MATERIE IN NVARCHAR2 ,
ASSALA IN NVARCHAR2 ,
ASGRUPA IN NVARCHAR2 ,
ASSEMIGRUPA IN NUMERIC )IS
BEGIN
DELETE FROM TMSORAR_LICENTA_AN1
WHERE ZI_CALENDARISTICA = ASZI
AND MATERIE = (SELECT ID_MATERIE
FROM TMSMATERII_LAN1
WHERE DENUMIRE_MATERIE = ASDENUMIRE_MATERIE
AND TIP_ORE = 'L')
AND SALA = ASSALA
AND GRUPA = ASGRUPA
AND SEMIGRUPA = ASSEMIGRUPA
AND TIP_ORA = 'L';
COMMIT;
END STERG ELABORATOARE_AN1_S1 ;
Analiză, proiectare, implementare
21 Procedura de ștergere a seminariilor din anul 1 semestrul 1:
CREATE OR REPLACE PROCEDURE TMSDBA .STERGESEMINARII_AN1_S1 (
ASZI IN NVARCHAR2 ,
ASDENUMIRE_MATERIE IN NVARCHAR2 ,
ASSALA IN NVARCHAR2 ,
ASGRUPA IN NVARCHAR2 ) IS
BEGIN
DELETE FROM TMSORAR_LICENTA_AN1
WHERE ZI_CALENDARISTICA = ASZI
AND MATERIE = (SELECT ID_MATERIE
FROM TMSMATERII_LAN1
WHERE DENUMIRE_MATERIE = ASDENUMIRE_MATERIE
AND TIP_ORE = 'S')
AND SALA = ASSALA
AND GRUPA = ASGRUPA
AND TIP_ORA = 'S';
COMMIT;
END STERGESEMINARII_AN1_S1 ;
Procedura de ștergere a proiectelor din anul 1 semestrul 1:
CREATE OR REPLACE PROCEDURE TMSDBA .STERGEPROIECTE_AN1_S1 (
ASZI IN NVARCHAR2 ,
ASDENUMIRE_MATERIE IN NVARCHAR2 ,
ASSALA IN NVARCHAR2 ,
ASGRUPA IN NVARCHAR2 ,
ASSEMI GRUPA IN NUMERIC )IS
BEGIN
DELETE FROM TMSORAR_LICENTA_AN1
WHERE ZI_CALENDARISTICA = ASZI
AND MATERIE = (SELECT ID_MATERIE
FROM TMSMATERII_LAN1
WHERE DENUMIRE_MATERIE = ASDENUMIRE_MATERIE
AND TIP_ORE = 'P')
AND SALA = ASSALA
AND GRUPA = ASGRUPA
AND SEMIGRUPA = ASSEMIGRUPA
AND TIP_ORA = 'P';
COMMIT;
END STERGEPROIECTE_AN1_S1 ;
3.1.9 Pachetele de implementare a API -ului
În dorința de a dezvolta o aplicație rapidă, a fost implementat API -ul în baza de date,
în acest mod toată procesare datelor se face la nivel de bază de date. Acest API s -a
implementat prin intermediul funcțiilor și a procedurilor care formeaz ă pachetele
specifice fiecărui an de studiu în parte. Așadar au fost necesare 4 pachete aferente celor 4
ani de studii aferen ți nivelului de licență. În cele ce urmează vă voi prezenta pe larg
structura acestor pachete si a header -elor funcții lor și a proceduri lor cât și funcționare
acestora.
Analiză, proiectare, implementare
22 Structura unui pachet se compune din procedurile ce sunt apela te de aplicația de
administrare și funcțiile care permit procesarea datelor și salvarea acestora în tabelele
aferente orarului. În continuare voi prezenta în detaliu o altfel de procedură respectiv
funcție. Prin urma voi prezenta procedura de generare a cursurilor și funcția aferentă
procedurii.
Header -ul acesti proceduri se prezinta astfel:
PROCEDURE GENERAREORARCURSURI_AN1_S1 (ASZI IN NVARCHAR2 ,
ASDENUMIRE_MATERIE IN NVARCHAR2 ,
ASSALA IN NVARCHAR2 ,
ASGRUPA IN NVARCHAR2 );
Această procedură primește ca parametri ziua calendaristică, denumirea
materiei, sala și grupa pentru care se dorește generarea cursului. Corpul acestei
proceduri se poate observa în secvența de cod de mai jos:
BEGIN
SELECT T.PRIORITATE_MATERIE
INTO ASPRIORITATE
FROM TMSMATERII_LAN 1 T
WHERE T.DENUMIRE_MATERIE = ASDENUMIRE_MATERIE
AND T.TIP_ORE = 'C'
AND T.SEMESTRU = 1;
LNRETVAL := GENERAREORARCURSURI_AN1_S1 (ASZI,
ASPRIORITATE ,
ASSALA ,
ASGRUPA ,
ASDENUMIRE_MATERIE );
IF LNRETVAL = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
După cum se observă acestă procedură apeleaza funcția omoloagă
(GENERAREORARCURSURI AN1_S1) si dacă în urma inserării în orar a cursului
rezultatul funcției este 0 atunci se confirmă tranzacția altfel acesta va fi respinsă.
Header -ul functiei omoloage est e identic cu header -ul procedurii, numai că acesta
funcție returnează statusul inserării în tabela de orar. Corpul acestei funcții se prezintă
în secvențele de cod de mai jos:
LSSQL NVARCHAR2 (4000);
LSSELECT NVARCHAR2 (400) := ' SELECT B.ZI, B. ORE, A.ID_MATERIE, C.ID_GRUPA,
D.SALA_ID,A.PROF_MATERIE,A.FRECVENTA_MATERIE,A.TIP_ORE ' ;
LSFROM NVARCHAR2 (400) := ' FROM TMSMATERII_LAN1 A, TMSZIORA B,
TMSGRUPE_LAN1 C, TMSSALI D ' ;
LSWHERE NVARCHAR2 (400) := ' WHERE A.SEMESTRU = 1 ' ||
' AND A.TIP_ORE = ''C'' ' ||
' AND A.PRIORITATE_MATERIE = B.PRIORITATE_MATERIE ' ||
' AND C.NR_SEMIGRUPA = 0 ' ||
' AND A.DENUMIRE_MATERIE = :ASDENUMIRE_MATERIE ' ;
LSSQL := LSSELECT || LSFROM || LSWHERE || ' AND ZI = :ASZI ' ||
Analiză, proiectare, impleme ntare
23 ' AND A.PRIORITATE_MATERIE = :ASPRIORITATE ' ||
' AND D.SALA_ID = :ASSALA ' || ' AND C.ID_GRUPA = :ASGRUPA ' ||
' ORDER BY B. ORE, C.ID_GRUPA ASC ' ;
În secvența de cod de mai sus se configurează interogarea dinamică prin
intermediul căreia se culeg datele necesare a fi introduse în tabela de orar.
IF LC_CURSOR%ISOPEN THEN
CLOSE LC_CURSOR ;
END IF;
OPEN LC_CURSOR FOR LSSQL
USING ASDENUMIRE_MATERIE , ASZI, ASPRIORITATE , ASSALA ,
ASGRUPA ;
IF LC_CURSOR% NOTFOUND THEN
LNRETVAL := 1;
ELSE
BEGIN
FETCH LC_CURSOR
INTO LNZI,
LNORE ,
LNMATERIE ,
LNID_GRUPA ,
LNSALA ,
LNPROF_NUME ,
LNFRECVENTA_MATERIE ,
LNTIP_ORA ;
INSERT INTO TMSORAR_LICENTA_AN1
(ZI_CALENDARISTICA ,
ORE,
GRUPA ,
SEMIGRUPA ,
MATERIE ,
SALA,
PROF_NUME ,
AN_STUDIU_PROF ,
TIP_SAPTAMANA ,
TIP_ORA )
VALUES
(LNZI,
LNORE ,
LNID_GRUPA ,
'0',
LNMATERIE ,
LNSALA ,
LNPROF_NUME ,
'1',
LNFRECVENTA_MATERIE ,
LNTIP_ORA );
LNRETVAL := 0;
END;
END IF;
CLOSE LC_CURSOR ;
RETURN LNRETVAL ;
END GENERAREORARCURSURI_AN1_S1 ;
Analiză, proiectare, implementare
24 În secvența de cod de mai sus se populează cursorul cu datele furnizate de
interogarea dinamică și ulterior aceste sunt inserate in tabela de orar specifică.
3.1.10 View -uri necesare aplicatiei de administrare
Pentru a facilita vizualizarea specifică a m ateriilor fiecărui semestru și a grupelor
fiecărui an, au fost necesare implementarea unui set de view -uri. Un exemplu de astfel de
view se prezintă în secvența de cod următoare:
CREATE OR REPLACE FORCE VIEW TMSDBA .TMSMATERII_LAN1_CURS_S1_VIEW
(
DENUMIRE_MATERI E
)
AS
SELECT DENUMIRE_MATERIE
FROM tmsmaterii_lan1 t
WHERE t.semestru = 1 AND t.tip_ore = 'C';
În ace astă secvență de cod se poate observa ca acest view facilitează vizualizarea
materiilor care au curs in anul 1 semestrul 1.
3.2 Modulul de vizuali zare online
În cadrul acestui capitol vor fi prezentare pe larg construcția framework -ului și a
paginilor de vizualizare a modulului online al suitei software.
3.2.1 Descrierea Framework -ului tmsMVC
Acest framework este dezvoltat special pentru modulul web și i mplementeaz ă
conceptul de programare Model View Controller (MVC). Acest concept are la bază
împărțirea (modularizarea) unei aplicații software în trei părți intim interconectate. În
acest mod sunt separate felul în care gestionează aplicația datele și modu l în care acestea
sunt prezentate utilizatorului. Pentru a înțelege și mai bine aceste noțiuni, este necesar sa
urmărim figura 3.2.1. După cum se poate observa utilizatorul accesează informația prin
intermediul Controller -elor, acestea manipuleaz ă datele prin intermediul Modelelor și
ulterior datele sunt prezentate utilizatorului prin intermediul View -urilor.
Analiză, proiectare, implementare
25 Figura 3.2.1 Concept MVC
Prin intermediul acestui framework au fost implementate o serie de view -uri prin
care se asigură interacționarea cu aplicați a web. De asemenea s -au implementat și
modelele necesare manipulării datelor din baza de date și totodată au fost dezvoltate
controller -ele necesare procesării cerințelor utilizatorului, manipulând datele furnizate
de modele, în conformitate cu cerințele f ormulate de utilizator.
În cele ce urmează voi prezenta pe larg implementarea celor 3 structuri intim
interconectate cât și a bibliotecilor care permit legătura dintre ceste structuri.
3.2.1.1 Implementare Model
Implementarea structurii Model s -a realizat prin crearea claselor ce permit
manipularea datelor din baza de date. Aceste clase sunt:
3.2.1.1.1 Login
Prin intermediul clasei Login se realizează manipularea datelor necesare
autentificării. Ace astă clasă implementează meto da setConnection () care primește ca
parametrii e-mail și parola , ulterior aceste date sunt comparate cu cele din baza de date
și în cazul că aceste date sunt validate se oferă accesul pentru vizualizarea orarului. Altfel
accesul este restricționat.
3.2.1.1.2 OrarAn1S1, OrarAn1S2, OrarAn2S1, OrarAn2S2, OrarAn3 S1, OrarAn3S2 , OrarAn4S1 ,
OrarAn4S2
Cu ajutorul acestor clase se facilitează manipularea datelor din baza de date,
aferente orarelor fiecărui semestru și an de studiu. Aceste clase implementeaz ă metoda
getOrar () prin intermediul căreia se aduc datele din b aza de date.
3.2.1.1.3 Orare
Prin intermediul acestei clase se manipulează datele necesare ferestrei de
vizualizare dinamică a orarului. Ace astă clasă implementează me todă getOrar () care
facilitează aducerea datelor din baza de date în funcție de datele furnizate d e utilizator.
Aceste date furnizate de utilizator, înainte de a compune interogarea dinamică sunt
verificate pentru a nu compune interogări invalide și tot odată a ridica nivelul de
securitate. În acest mod se elimină posibilitatea de a fi atacată baza de date cu SQL
injections.
3.2.1.1.4 Sali
Cu ajutorul acestei clase facilitează manipularea datelor din baza de date, aferente
sălilor instituției de învățământ. Aceste date sunt aduse din baza de date prin intermediul
metodei getSali().
Analiză, proiectare, implementare
26
3.2.1.1.5 StructuraAnUniversitar
Cu ajutorul acestei clase facilitează manipularea datelor din baza de date, aferente
structurii anului universitar. Această clasă implementează metoda getStructura() prin
intermediul căreia se aduc datele din baza de date.
3.2.1.1.6 User
Cu ajutorul acestei clase facili tează inserarea datelor in baza de date, aferente creării
unui nou user. Ace astă clasă implementează metoda creeazaUserNou() care este apelată
cu următorii parametrii prenume, nume, email, numeUtilizator, parola. De asemenea
implementează metoda generarePa rola() , aceasta apelându -se cu parametrul parola , în
acest fel generându -se hash -ul parolei, utilizând algoritmul Eksblowfish .
3.2.1.2 Implementare View
Implementarea structurii View s -a realizat prin crearea paginilor modulului WEB ce
permit vizualizarea datelor și interfața de interacțiune a user -ului cu modulul WEB. În
cele ce urmează voi prezenta modul de utilizare și elementele cheie, ce stau la baza
dezvoltării și funcționării acestor pagini ale modulului WEB.
3.2.1.2.1 Pagina de Login
În figura 3.2.1.2.1.1 se prezin tă pagina de Login a modulului WEB.
Figura 3.2.1.2.1.1 Pagina de Login a modulului WEB
După cum se poate obse rva în figura de mai sus, avem la dispoziție un formular de
login prin intermediul căruia user -ul se autentifică și primește acces la modulul WEB.
Această pagină web s -a construit utilizând limbajul HTML5 al ături de CC3, utilizând
librăria Bootstrap (t ema Lumen ). Prin intermediul butoanelor din bara de navigație se
Analiză, proiectare, implementare
27 poate ajunge la paginile Despre, Info și Creează cont. În continuare voi prezenta suc cint
cele mai importante secvențe de cod din cadrul paginii.
Formularul de Login:
<form method="post" action="<?php echo URLROOT.'/pages/index' ;?>">
<div id="right" style="float: right; width: 29%; max"
class="jumbotron" >
<fieldset >
<h2 style="color: #48b9e5">Login</h2>
<p style="color: #48b9e5" >Introduceti e -mail-ul de
student. </p>
<hr align="center" style="color: #48b9e5" class="my-4">
<div style="height: 16px"></div>
<div class="form-group">
<label style="color: #48b9e5" for="email">Adresa de
Email</label>
<input name="email" style="color: black" type="email"
class="form-control form -control-lg
<?php echo (!empty($data['email_e rr'])) ? 'is-
invalid' : '';?>"
value="<?php echo $data['email'];?>"
placeholder= "Adresa Email" >
<span class="invalid -feedback" ><?php echo
$data['email_err' ];?></span>
</div>
<div class="form-group">
<label style="color: #48b9e5" for="parola" >Parola</label>
<input name="parola" style="color: black" type="password"
class="form-control form -control-lg
<?php echo (!empty($data['parola_err' ])) ? 'is-
invalid' : '';?>"
value="<?php echo $data['parola' ];?>"
placeholder= "Parola" >
<span class="invalid -feedback" ><?php echo
$data['parola_err' ];?></span>
</div>
</fieldset >
<div class="col">
<input type="submit" value="Autentificare" class="btn btn –
success btn -block">
</div>
</div>
</form>
În secvența de cod prezentată mai sus se expune codul prin care s -a implementat
formularul de login. Se poat obse rva elementele definitorii ale acestui formular; și anume
faptul că implementează metoda POST prin intermediul căreia se preiau datele din
interfață în vederea validării ulterioare; și vectorul $data prin intermediul căruia sunt
stocate temporar datele utile, dar și mesa jele de eroare , dacă acestea există.
3.2.1.2.2 Pagina Info
În figura 3.2.1.2. 2.1 se prezintă pagina de Info a modulului WEB. Prin intermediul
acestei pagini sunt prezentate utilizatorului informații legate de denumirea sălilor de curs
și adresa acestora, informații legate de structura anului universitar și link -uri utile către
harta adreselor facultății, site -ul transportului public din Cluj -Napoca, site -ul Universit ății
Tehnice din Cluj -Napoca, site -ul bibliotecii online, link -ul către lista de contacte a
Universit ății și link către platforma SINU.
Analiză, proiectare, implementare
28
Figura 3.2.1.2.2.1 Pagina Info a modulului WEB
3.2.1.2.3 Pagina Creează Cont
În figura 3.2.1.2.3. 1 se prezintă pagina Creează Cont a modulului WEB.
Prin intermediul acestei pagini se pot crea conturi de utilizator noi, pentru ap licația
WEB. În cele ce urmează voi prezenta secvenț ele de cod relevante pentru crearea unui
nou cont de utilizator.
Analiză, proiectare, implementare
29 Figura 3.2.1.2.2.1 Pagina Info a modulului WEB
În secvența de mai joi se verifică daca acel utilizator, respectiv email -ul acestuia, mai
există în baza de date.
public function checkUserEmail( $email){
$this->db->query("SELECT Count(*) AS ROWCOUNT FROM TMSUS WHERE
TMSUS.EMAIL= " . ':email' );
$this->db->bind(':email' ,$email);
$nrRow=$this->db->resultSet();
$rowCount =['ROWS' => $nrRow];
foreach ($rowCount ['ROWS'] as $row){
$count=$row->ROWCOUNT ;
}
IF($count >0){
return true ;
} else{
return false ;
}}
După verificarea existenței email -ului se generează codul hash pentru parola
introd u-să de utilizator, utilizând algoritmul CRYPT_BLOWFISH.
public function generareParola( $parola){
$options = [
'cost' => 12,
];
return password_hash ($parola, PASSWORD_BCRYPT , $options );
}
În urma finalizării acestor două proceduri de f erificare a email -ului și de generare a
codului hash pentru parolă, se introduce în baza de date noul cont de utilizator.
public function
creazaUserNou( $prenume ,$nume,$email,$numeUtilizator ,$parola){
Analiză, proiectare, implementare
30 $this->db->query("INSERT INTO TMSUS ( PRENUME, NUME, EMAIL,
NUME_UTILIZATOR , PAROLA) VALUES ("
.':prenume'
.","
.':nume'
.","
.':email'
.","
.':numeUtilizator'
.","
.':parola'
.")");
$this->db->bind(':prenume' ,$prenume );
$this->db->bind(':nume',$nume);
$this->db->bind(':email' ,$email);
$this->db->bind(':numeUtilizator' ,$numeUtilizator );
$this->db->bind(':parola' ,$parola);
$this->db->execute();
$this->db->query("COMMIT" );
$this->db->execute();
}
Înainte ca aceste funcții se validează datele introduse de utilizator și la nivel de
formular, aceste validări sunt prezentate în secvența de cod de mai jos.
if(empty($data['email'])){
$data['email_err' ] = 'Va rog completati campul pentru email' ;
} else{
//check if exist
if($this->userModel ->checkUserEmail( $data['email'])==true){
$data['email_err' ] = 'Acest email este deja folosit !' ;
}
}
//validare nume, prenume si numeUtilizator
if(empty($data['prenume' ])){
$data['prenume_err' ] = 'Va rog completati campul pentru prenume' ;
}
if(empty($data['nume'])){
$data['nume_err' ] = 'Va rog completati campul pentru nume' ;
}
if(empty($data['numeUtilizator' ])){
$data['numeUtilizator_err' ] = 'Va rog completati campul pentru Nume
Utilizato r';
}
//validare parola si confirmare parola
if(empty($data['parola' ])){
$data['parola_err' ] = 'Va rog completati campul pentru parola' ;
} elseif (strlen($data['parola' ])<6){
$data['parola_err' ] = 'Parola trebuie sa contina cel putin 6
caractere' ;
}
if(empty($data['conf_parola' ])){
$data['conf_parola_err' ] = 'Va rog completati campul pentru
confirmarea parolei' ;
} else{
if ($data['parola' ] != $data['conf_parola' ]) {
$data['conf_parola_err' ] = 'Parolele trebuie sa coincida' ;
}
}
//validare no errors
if(empty($data['email_err' ]) && empty($data['nume_err' ]) &&
empty($data['prenume_err' ])
&& empty($data['numeUtilizator_err' ]) && empty($data['parola_err' ]) &&
Analiză, proiectare, implementare
31 empty($data['conf_parola_err' ])){
//inserare user in DB;
$parola = $this->userModel ->generareParola( $data['parola' ]);
$this->userModel ->creazaUserNou( $data['prenume' ]
,$data['nume']
,$data['email']
,$data['numeUtilizator' ]
,$parola);
3.2.1.2.4 Pagina Despre
În figura 3.2.1.2. 4.1 se prezintă pagina de Despre a modulului WEB.
Figura 3.2.1.2. 4.1 Pagina de Despre a modulului WEB
În această pagina se prezintă informații legate de num ele autorului și numele profesorului
îndrumător.
3.2.1.2.5 Pagina de Orar cu date generate dinamic (Acas ă)
În figura 3.2.1.2.5.1 se prezintă pagina de orar vizualizat dinamic modulului WEB
Figura 3.2.1.2. 5.1 Pagina de orar vizualizat in mod dinamic a modulului WEB
Analiză, proiectare, implementare
32 Prin intermediul acestei pagini utilizatorul își poate configura in mod dinamic si eficient
ceea ce dore ște sa vizualizeze, astfel isi poate alege ziua s ăptămânii, anul de studiu,
grupa, semigrupa și tipul de ora (Curs, Seminar, Laborator, Proiect).
3.2.1.2.6 Paginile de Orar cu date fixe
În figura 3.2.1.2.5.1 se prezintă pagina de orar vizualizat dinamic modulului WEB
Figura 3.2.1.2.6.1 Pagina de orar pentru anul 1 semestrul 1 modulului WEB
Astfel de pagini web au fost create pentru a putea vizualiza întregul or ar pentru
fiecare an si semestru in parte. In acest mod se vizualizeaz ă în mod complet structura
orarului ne mai fiind necesara configurarea unor parametrii de c ăutare.
3.2.1.3 Implementare Controller -elor Pages si User
Prin implementarea celor doua controller -e se gestioneaz ă și proceseaz ă comenzile
care vin din partea utilizatorului astfel utilizatorul vizualiz ând datele din model pe care
le-a solicitat prin intermediul view -ului. Pentru a înțelege și mai bine acest lucru, se poate
observa in diagrama de caz pre zentata in figura 3.2.1.3.1.
Figura 3.2.1.3.1 Diagrama de secvente a controller -elor
În secven ța de cod de mai jos se prezinta implementarea controller -ului User, cel
care gestioneaz ă crearea unui nou user. Dupa cum se poate observa acesta clasa extinde
clasa Controller si implementeaz ă metoda registration prin intermediul c ăreia sunt
validate sau invalidate datele introduse de utilizator in formularul de creare unui nou
user. In cazul in care datele nu sunt valide, utilizatorul este informat ca acele date nu
corespund si este sa reintroduc ă date valide.
Analiză, proiectare, implementare
33 class Users extends Controller {
private $userModel ;
public function __construct(){
$this->userModel = $this->model('User');
}
public function registration(){
if(empty($data['email'])){
$data['email_err' ] = 'Va rog completati campul
pentru email' ;
} else{
//check if exist
if($this->userModel –
>checkUserEmail( $data['email'])==true){
$data['email_err' ] = 'Acest email este deja
folosit !' ;
}
}
//validare nume, prenume si numeUtilizator
if(empty($data['prenume' ])){
$data['prenume_err' ] = 'Va rog completati campul
pentru prenume' ;
}
if(empty($data['nume'])){
$data['nume_err' ] = 'Va rog completati campul
pentru nume' ;
}
if(empty($data['numeUtilizator' ])){
$data['numeUtilizator_err' ] = 'Va rog completa ti
campul pentru Nume Utilizator' ;
}
//validare parola si confirmare parola
if(empty($data['parola' ])){
$data['parola_err' ] = 'Va rog completati campul
pentru parola' ;
} elseif (strlen($data['parola' ])<6){
$data['parola_err' ] = 'Parola trebuie sa contina
cel putin 6 caractere' ;
}
if(empty($data['conf_parola' ])){
$data['conf_parola_err' ] = 'Va rog completati
campul pentru confirmarea paro lei';
} else{
if ($data['parola' ] != $data['conf_parola' ]) {
$data['conf_parola_err' ] = 'Parolele trebuie sa
coincida' ;
}
}
//validare no errors
if(empty($data['email_err' ]) &&
empty($data['nume_err' ]) && empty($data['prenume_err' ])
&& empty($data['numeUtilizator_err' ]) &&
empty($data['parola_err' ]) && empty($data['conf_parola_err' ])){
//inserare user in DB;
$parola = $this->userModel –
>generareParola( $data['parola' ]);
$this->userModel ->creazaUserNou( $data['prenume' ]
,$data['nume']
Analiză, proiectare, implementare
34 ,$data['email']
,$data['numeUtilizator' ]
,$parola);
//validat
$data = ['title' => 'Time Management System' ,
'email'=> $data['email'],
'parola' =>'',
'email_err' =>'',
'parola_err' =>''
];
$this->view('pages/index' ,$data);
} else {
// incarca view cu erori
$this->view('users/registration' ,$data);
}
} else {
//init data
$data = ['title' => 'Creaza Cont Nou' ,
'prenume' =>'',
'nume'=>'',
'email'=>'',
'numeUtilizator' =>'',
'parola' =>'',
'conf_parola' =>'',
'email_err' =>'',
'parola_err' =>'',
'conf_parola_err' =>'',
'prenume_err' =>'',
'nume_err' =>'',
'numeUtilizator_err' =>'',
];
//load view
$this->view('users/registration' ,$data);
}
}
}
In secven ța de cod de mai jos se prezinta implem entarea controller -ului Pages, cel
care gestioneaz ă paginile web . După cum se poate observa acesta clasa extinde clasa
Controller si implementeaz ă metod e pentru fiecare nume de pagina in parte, astfel prin
intermediul acestora se a ccesează pagina dorit ă și totodată acesta se p opulează cu datele
dorite aduse din baza de date prin intermediul modelelor de date. Metoda index este un
mai speciala deoarece prin intermediul sau se face autentificarea. Acesta verifica daca
exista e -mail -ul in baza de date si apoi compare prin intermediul modelului de Login daca
datele introduse sunt identice cu cele stocate in baza de date.
public function index(){
// Check for post
if($_SERVER ['REQUEST_METHOD' ] == 'POST'){
//proces s form
//init data
$data = ['title' => 'Time Management System' ,
'email'=>trim($_POST['email']),
'parola' =>trim($_POST['parola' ]),
'email_err' =>'',
'parola_err' =>''
];
// //Check post data string
// $_POST = filter_input(INPUT_POST,
Analiză, proiectare, implementare
35 FILTER_SANITIZE_STRING);
//validare email
if(empty($data['email'])){
$data['email_err' ] = 'Va rog completati campul
pentru email' ;
}
//validare parola si confirmare parola
if(empty($data['parola' ])){
$data['parola_err' ] = 'Va rog completati campul
pentru parola' ;
} elseif (strlen($data['parola' ])<6){
$data['parola_err' ] = 'Parola trebuie sa
contina cel putin 6 caractere' ;
}
if(empty($data['email_err' ]) &&
empty($data['parola_err' ])){
$login = $this->loginModel –
>setConnection( $data['email'],$data['parola' ]);
if ($login){
//validat
$this->view('orare/orare' ,$data);
} else{
$data['email_err' ] = 'Email invalid' ;
$data['parola_err' ] = 'Parola invalida' ;
$this->view('pages/index' ,$data);
}
} else {
// incarca vi ew cu erori
$this->view('pages/index' ,$data);
}
} else {
//init data
$data = ['title' => 'Time Management System' ,
'email'=>'',
'parola'=>'',
'email_err' =>'',
'parola_err' =>''
];
//load view
$this->view('pages/index' ,$data);
}
}
public function about(){
$data = ['title' => 'Despre Lucrarea de Diploma' ];
$this->view('pages/about' , $data);
}
public function orarAn1S1(){
$orarAn1S1 = $this->orarAn1S1Model ->getOrar();
$data = ['title' => 'Orar Cursuri Anul 1 Seme strul 1' ,
'materiiS1' => $orarAn1S1 ];
$this->view('orare/orarAn1S1' , $data);
}
public function orarAn1S2(){
$orarAn1S2 = $this->orarAn1S2Model ->getOrar();
$data = ['title' => 'Orar Cursuri Anul 1 Semestrul 2' ,
'materiiS2' => $orarAn1S2 ];
$this->view('orare/orarAn1S2' , $data);
Analiză, proiectare, implementare
36 }
public function orarAn2S1(){
$orarAn2S1 = $this->orarAn2S1Model ->getOrar();
$data = ['title' => 'Orar Cursuri Anul 2 Semestrul 1' ,
'materiiS1' => $orarAn2S1 ];
$this->view('orare/orarAn2S1' , $data);
}
public function orarAn2S2(){
$orarAn2S2 = $this->orarAn2S2Model ->getOrar();
$data = ['title' => 'Orar Cursuri Anul 2 Semestrul 2' ,
'materiiS2' => $orarAn2S2 ];
$this->view('orare/orarAn2S2' , $data);
}
public function orarAn3S1(){
$orarAn3S1 = $this->orarAn3S1Model ->getOrar();
$data = ['title' => 'Orar Cursuri Anul 3 Semestrul 1' ,
'materiiS1' => $orarAn3S1 ];
$this->view('orare/orarAn3S1' , $data);
}
public function orarAn3S2(){
$orarAn3S2 = $this->orarAn3S2Model->getOrar();
$data = ['title' => 'Orar Cursuri Anul 3 Semestrul 2' ,
'materiiS2' => $orarAn3S2 ];
$this->view('orare/orarAn3S2' , $data);
}
public function orarAn4S1(){
$orarAn4S1 = $this->orarAn4S1Model ->getOrar();
$data = ['title' => 'Orar Cursuri Anul 4 Semestrul 1' ,
'materiiS1' => $orarAn4S1 ];
$this->view('orare/orarAn4S1' , $data);
}
public function orarAn4S2(){
$orarAn4S2 = $this->orarAn4S2Model ->getOrar();
$data = ['title' => 'Orar Cursuri Anul 4 Semestrul 2' ,
'materiiS2' => $orarAn4S2 ];
$this->view('orare/orarAn4S2' , $data);
}
public function orare(){
$orar = $this->orareModel ->getOrar();
$data = ['title' => 'Orar Automatica si Calculatoare' ,
'materii' => $orar
];
$this->view('orare/orare' , $data);
}
public function infoLogin(){
$sali = $this->saliModel ->getSali();
$structura = $this->structuraModel ->getStructura();
$data = ['title' => 'Info',
'sali'=>$sali,
'structura' =>$structura,];
$this->view('pages/infoLogin' , $data);
}
Analiză, proiectare, implementare
37 public function infoOrare(){
$sali = $this->saliModel ->getSali();
$structura = $this->structuraModel ->getStructura();
$data = ['title' => 'Info',
'sali'=>$sali,
'structura' =>$structura ,];
$this->view('pages/infoOrare' , $data);
}
3.2.1.4 Implementare Controller, Core și Database
3.2.1.4.1 Controller
Clasa controller este clasa prin intermediul c ăreia se gestio nează și proceseaz ă
comenzile care vin din partea utilizatorului. In secven ța de cod de mai jos se prezinta cele
doua metode ale clasei controller si anume metoda model si metoda view .
public function model($model){
// aducere model
require_once '../app/models/' .$model.'.php';
//instantiere model
return new $model();
}
// incarcare view
public function view($view,$data = []){
//cverifica daca exista view -ul
if(file_exists ('../app/views/' .$view.'.php')){
require_once '../app/views/' .$view.'.php';
} else {
//view-ul nu exista
die('Acest view nu exista' );
}
}
}
Cu ajutorul metodei model se încarcă modelul de date care a fost transmis ca para metru
acestei func ți, ulterior acesta fiind returnat de c ătre funcție. Iar prin intermediul metodei
view se verifica daca view -ul exista, iar daca exista atunci aceste ii este prezentat
utilizatorului, altfel afi șându -i-se un mesaj prin care ii se specific a ca acel view nu exista.
3.2.1.4.2 Core
Clasa Core asigura crearea Uniform Resource Locator (URL) după modelul
/controller/met oda/param etrii, tot odat a instantiind controller -ele pentru acest
framework. Se verifica existenta controller -ului, exista metodei si daca acestea exista
atunci se aduc datele in conformitate cu parametrii citi ți din URL.
class Core {
protected $currentController = 'Pages';
protected $currentMethod ='index';
protected $params = [];
public function __construct(){
$url = $this->getUrl();
//se verifica prima parte a URL -ului
if(file_exists ('../app/controllers/' .ucwords($url[0]).'.php')){
//daca exista se seteaza controler -ul
$this->currentController = ucwords($url[0]);
//unset 0 Index
unset($url[0]);
}
Analiză, proiectare, implementare
38
// se incarca controller -ul
require_once '../app/controllers/' .$this-
>currentController .'.php';
//se instantiaza controller -ul
$this->currentController = new $this->currentController ;
//se verifica a doua parte a URL -ului
if(isset($url[1])){
//se verifica existenta metodei in controller
if(method_exists ($this->currentController , $url[1])){
$this->currentMethod = $url[1];
//unset 1 index
unset($url[1]);
}
}
// se preiau parametrii
$this->params = $url ? array_values ($url) : [];
//se incarca datele cu noii parametrii
call_user_func_a rray([$this->currentController ,
$this->currentMethod ],$this-
>params);
}
public function getUrl(){
if (isset($_GET['url'])) {
$url = rtrim($_GET['url'], '/');
$url = filter_var ($url, FILTER_SANITIZE_URL );
$url = explode('/', $url);
return $url;
}
}
}
Analiză, pro iectare, implementare
39 3.2.1.4.3 Database
Prin intermediul clasei Database se asigura conexiunea cu baza de date, se
instanțiază obiectul prin intermediul c ăruia se compun, se executa si se returneaz ă
rezultatele comenzil or SQL . Procesul de creare si execu ție al unei comenzi se prezinta
astfel: se preg ătește interogarea prin intermediul metodei query apoi daca este cazul se
transmit si param etrii necesari acestei interog ări prin inter mediul metodei bind . O data
ce interogarea este preg ătită acesta se executa cu metoda execute , sau în cazul în care se
așteaptă returnarea unor valori se apeleaz ă una din metodele resultSet sau single
utiliz ând ca parametru interogarea anterior configurata .
// Prepare query
public function query($sql){
if($this->dbh <> null) {
$this->stmt = $this->dbh->prepare( $sql);
}
}
// Bind values
public function bind($param, $value, $type = null){
//check the $ value
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO:: PARAM_INT ;
break;
case is_bool($value):
$type = PDO:: PARAM_BOOL ;
break;
case is_null($value):
$type = PDO:: PARAM_NULL ;
break;
default:
$type = PDO:: PARAM_STR ;
}
}
$this->stmt->bindValue($param, $value, $type);
}
// Execute the prepared statement
public function execute()
{
if($this->stmt <> null){
return $this->stmt->execute();
}
}
// Get result set as array of objects
public fun ction resultSet()
{
if($this->stmt <> null) {
$this->execute();
return $this->stmt->fetchAll(PDO:: FETCH_OBJ );
}
}
// Get single record as object
public function single()
{
$this->execute() ;
return $this->stmt->fetch(PDO:: FETCH_OBJ );
}
Analiză, proiectare, implementare
40 3.3 Modulul de administrare locală
Necesitatea unui modul de administrare local a aparut din necesitatea de a putea
crea orarul si in cazul in care conexiunea la internet este inexistenta sau este in disponibila
la momentul respectiv. Astfel in cadrul cestui capitol voi descrie modul de implementare
a modulului de administrare locala cat si modul sau de utilizare.
3.3.1 Implementarea modulului de administrare locala
Pentru implementarea modului de administra re s-a utilizat limbajul de programare
C# si framework -ul .Net Windows Forms App . Structura aplica ției se bazeaz ă pe zece
forme specializate pentru autentificare în aplicație, vizualizare a orarului si generare a
orarului pentru fi ecare an și semestru în parte. În cele ce urmeaza voi prezenta modul de
implementare a fiec ărui tip de forma în parte.
3.3.1.1 Forma de Login
Acestă formă conține doua c âmpuri de introducere a datelor: Numele de utilizator
al administratorului și parola aferent ă. La apăsarea butonului de Login se verific ă datele
și dacă sunt valide se continu ă către pagina principala a modului de administrare. În
secvența de cod de mai jos sunt prezentate metodele prin intermediul c ărora se realizeaz ă
autentificarea. Aceste me tode sunt setDBConnection care primește doi parametrii unul
pentru numele de utilizator și unul pentru parol ă. Această metodă se execut ă atunci c ând
se apasă butonul de Login care apeleaz ă metoda btnLogin_Click cu eveniment pe
apăsarea butonului.
private static void setDBConn ection(string usr,string pwd) {
dbConn = new OracleConnection( "DATA SOURCE = localhost:1521 / TMSDB;
PERSIST SECURITY INFO = True; USER ID ="
+usr + "; Password = " +pwd);
dbConn.Open();
}
private void btnCancel_Click( object sender, EventArgs e)
{
closeDBConnection();
this.Close();
}
private void btnLogin_Click( object sender, EventArgs e){
try {
setDBConnection(txtUser.Text,txtPwd.Text);
this.Enabled = false;
this.Hide();
mainForm = new frmMain(dbConn, this);
mainForm.Show();
} catch (Exception ex){
MessageBox.Sho w("Username -ul sau Parola sunt gresite" , "Ups… Nu ma
pot conecta" ,
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
Analiză, proiectare, implementare
41 3.3.1.2 Forma principala modulului
Prin intermediul acestei forme se pot vizualiza , crea și șterge o rarele pentru fiecare
an și semestru în parte. Prin intermediul butoanelor din meniuri se pot realiza aceste
operațiuni. Așadar în secven țele de cod de mai joi se po ate vedea modul în care sunt
realizate opera țiile menționate.
Prin intermediul metodei orarSem1An1ToolStripMenuItem_Click se stabile ște
textul aferent orarului pe care dorim s ă îl afișăm (în cazul prezentat mai jos orarul pentru
anul 1 semestrul 1 ) și se populeaz ă grid -ul din form ă cu datele aferente anului și
semestrului dorit. În mod similar se implementeaz ă și pentru ceilal ți ani.
private void orarSem1An1ToolStripMenuItem_Click( object sender, EventArgs e)
{
this.lblOrar.Text = "Anul 1 Semestrul 1" ;
this.dataViewOrare.DataSource = this.tMSDBDataSet.TMSORA R_LICENTA_AN1;
this.TMSORAR_LICENTA_AN1TableAdapter.Fill( this.tMSDBDataSet.TMSORAR_LICENTA_AN1);
}
Prin intermediul metodei stergeOrarSem1An1ToolStripMenuItem5_Click se
implementeaz ă facilitatea de a șterge orarul pentru fiecare an si semestru in parte. Astfel
utilizatorul este avertizat ca dore ște să șteargă orarul și tot odată i se cere s ă confirme
această operațiune . Daca se poate șterge orarul atunci se afi șează un mesaj care confirmă
că orarul a fost șters, iar dac ă nu, se afișează mesajul ca orarul nu a putut fi șters. În mod
similar se implementeaz ă și pentru ceilal ți ani.
private void stergeOrarSem1An1ToolStripMenuItem5_Click( object sender,
EventArgs e)
{
DialogResult verificaStergere = MessageBox.Show ("Sunteti sigur ca vreti sa
sterge orarul pentru ANUL 1 SEMESTRUL 1?" ,
"Sterge" ,
MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if (verificaStergere.Equals(DialogResult.OK))
{
string sqlCmdC = "DELETE FROM tmsorar_licenta_an1" ;
OracleCommand cmd = new OracleCommand(sqlCmdC, dbConn);
try
{
cmd.ExecuteNonQuery();
MessageBox.Show( "Orarul a fost sters" );
}
catch (Oracle.ManagedDataAccess.Client.OracleException ex)
{
MessageBox.Show( "Orarul s -a putut sterge!" );
}
}
else { }
}
3.3.1.3 Formele de generare a orarelor
Aceste forme sunt accesate de utilizator prin intermediul butoanelor din forma
principal ă. Prin intermediul acestora se configureaz ă sau se șterg cursurile, seminariile,
laboratoarele și proiectele afere nte fiecărui an, semestru, zi, grupa și semigrup ă.
Prin intermediul metodei btnGenC_Click prezentate în secvența de cod urm ătoare , se
introduce în baza de date cursul aferent anului 1 semestrul 1. Aceast ă metodă apelează
Analiză, proiectare, implementare
42 procedura TMS_API_AN1.GENERAREORARC URSURI_AN1_S1 stocata în baza de date,
aceasta primește parametrii configura ți de utilizator și se introduc datele în baza de date,
respectiv în tabela aferent ă orarului pentru anul 1 semestrul 1. În mod similar se
implementeaz ă și pentru celelalte tipuri de ore.
private void btnGenC_Click( object sender, EventArgs e)
{
if ((cmbZiC.Text == "") || (cmbMatC.Text == "") || (cmbSalaC.Text == ""))
{
MessageBox.Show( "Va rog completati toate campurile pentru C urs!");
}
else
{
string sqlCmdC = "TMS_API_AN1.GENERAREORARCURSURI_AN1_S1" ;
OracleCommand cmd = new OracleCommand(sqlCmdC, dbConn);
cmd.CommandType = CommandType.StoredPr ocedure;
cmd.Parameters.Add( "ASZI", cmbZiC.Text).Direction =
ParameterDirection.Input;
cmd.Parameters.Add( "ASDENUMIRE_MATERIE" , cmbMatC.Text).Direction =
ParameterDirection.Input;
cmd.Parameters.Add( "ASSALA" , cmbSalaC.Text).Direction =
ParameterDirection.Input;
cmd.Parameters.Add( "ASGRUPA" , cmbGrupaC.Text).Direction =
ParameterDirection.Input;
try
{
cmd.ExecuteNonQuery();
MessageBox.Show( "Curs adaugat in orar!" );
} catch (Oracle.ManagedDataAccess.Client.OracleException ex)
{
MessageBox.Show( "Nu am putut adauga cursul in orar! Cursul este
posibil sa existe deja." );
}
}
}
Prin intermediul metodei btnDelC_Click prezentate în secvența de cod urm ătoare , se
șterge din baza de date cursul aferent anului 1 semestrul 1. Aceast ă metodă apelează
procedura STERGECURSURI_AN1_ S1 stocată în baza de da te, aceast a primește
parametrii configura ți de utilizator și se șterg datele din baza de date, respectiv din tabela
aferenta orarului pentru anul 1 semestrul 1. În mod similar se implementeaz ă și pentru
celelalte tipuri de ore.
private void btnDelC_Click(object sender, EventArgs e)
{
if ((cmbZiC.Text == "") || (cmbMatC.Text == "") || (cmbSalaC.Text == ""))
{
MessageBox.Show( "Va rog completati toate campurile pentru Curs!" );
}
else
{
DialogResult verificaStergere = MessageBox.Show( "Sunteti sigur ca
vreti sa stergeti cursul din orar?" ,
"Sterge" , MessageBoxButtons.OKCancel,
MessageBoxIcon.Information);
Analiză, proiectare, implementare
43
if (verificaStergere.Equals(DialogResult.OK))
{
string sqlCmdC = "STERGECURSURI_AN1_S1" ;
OracleCommand cmd = new OracleCommand(sqlCmdC, dbConn);
cmd.CommandType = Co mmandType.StoredProcedure;
cmd.Parameters.Add( "ASZI", cmbZiC.Text).Direction =
ParameterDirection.Input;
cmd.Parameters.Add( "ASDENUMIRE_MATERIE" , cmbMatC.Text).Direction =
ParameterDirection.Input;
cmd.Parameters.Add( "ASSALA" , cmbSalaC.Text).Direction =
ParameterDirection.Input;
cmd.Parameters.Add( "ASGRUPA" , cmbGrupaC.Text).Direction =
ParameterDirection.Input;
try
{
cmd.ExecuteNonQuery();
MessageBox.Show( "Curs sters din orar!" );
}
catch (Oracle.ManagedDataAccess.Client.OracleException ex)
{
MessageBox.Show( "Nu am putut sterge cursul din orar!" );
}
}
}
}
Analiză, proiectare, implementare
44 3.4 Modul de utilizare a suitei de aplica ții pentru generarea orarului
În cele ce urmeaz ă voi prezenta un scurt mod de utilizare a modulelor suitei de
aplicații .
3.4.1 Modulul Web
În figura 3.4.1 se poate observa pagina de Login în care se introduce adresa de email
a utilizatorului și parola aferent ă.
Figura 3.4. 1.1 Pagina de Login
În figura 3.4 .1.2 se prezint ă pagina de vizualizare a orarului în mod dinamic . În
cadrul acestei pagini prin intermediul c âmpurilor de selec ție, se alege ziua, anul,
semestrul, grupa și tipul de materie pe care dorim s ă le vizualiz ăm. Acestea vor fi afi șate
după apăsarea butonului Afiseaza Orar .
Figura 3.4 .1.2 Pagina de Orar dinami c
Analiză, proiectare, implementare
45 Prin intermediul butoanelor din meniul site -ului se pot vizualiza și orarele complete
pentru fiecare an și semestru în parte, dup ă cum se poate observa în figura 3.4 .1.3.
Figura 3.4 .1.3 Pagina de Orar complet
Prin intermediul butonului Info din meniu l site -ului se pot vizualiza informa ții
complementare utile utilizatorului, dup ă cum se poate observa în figura 3.4 .1.4.
Figura 3.4. 1.4 Pagina Info
Analiză, proiectare, implementare
46 Prin intermediul butonului Despre din meniul site -ului se pot vizualiza informa ții
despre autor și profes orul coordonator, dup ă cum se poate observa în figura 3.4 .1.5.
Figura 3.4 .1.5 Pagina Despre
Prin intermediul butonului Creaza Cont din meniul site -ului se pot crea utilizatori
noi pentru modulul web, dup ă cum se poate observa în figura 3.4 .1.6.
Figura 3. 4.1.6 Pagina Creaza Cont
Anal iză, proiectare, implementare
47 3.4.2 Modulul de administrare locala
Prin intermediul formei de login administratorul introduce numele de
utilizator(User) și parola aferent ă acestuia , după cum se poate observa în figura 3.4.2.1 .
Dacă datele introduse sunt valide, ad ministratorului i se va deschide pagina principal ă a
aplicației.
Figura 3.4.2.1 Forma Login
O dată autentificat, administratorului i se deschide forma principal ă a aplicației, din
care poate alege s ă vizualizeze, sa șteargă sau sa creeze orare noi. Ace astă formă se poate
observa în figura 3.4.2.2.
Figura 3.4.2.2 Forma principala.
Analiză, proiectare, implementare
48 În continuare voi descrie un exemplu de vizualizare , unul de ștergere și unul de
creare a unui orar. Pentru a vizualiza orarul, sunt necesari a fi urma ți următorii pași: Se
apasă pe meniul VIEW și se selecteaz ă butonul aferent fiec ărui an și semestru, dup ă cum
se poate observa in figura 3.4.2.3.
Figura 3.4.2.3 Forma principala vizualizare orar.
După apăsarea butonului dorit se poate observa ca în cadranul albastru se va încărca
orarul, iar textul din eticheta Orar va fi adaptat la orarul pe care dorim sa îl vizualiz ăm.
Acest fapt se poate vedea în figura 3.4.2.4.
Figura 3.4.2.3 Forma principala vizualizare orar an1 sem1.
Analiză, proiectare, implementare
49 Pentru ștergerea unui orar se apas ă butonul Sterge și se selecteaz ă orarul pe care
dorim sa îl ștergem. Vom fi notificați și rugați sa confirm ăm dacă dorim să ștergem orarul
ales, dup ă cum se poate observa în figurile 3.4.2.4a si 3.4.2.4b.
Figura 3.4.2.4a Forma principal ă șterge orar an1 sem1
Figura 3.4.2.4b Forma principal ă confirmare ștergere orar an1 sem1
Pentru crearea unui orar nou sunt necesari urm ătorii pași. Din partea st ângă a
formei principale , se selecteaz ă butonul aferent orarului pe care dorim sa îl creăm și
astfel vom fi direc ționați către o pag ina unde putem configura și genera orarul. Fereastra
acesta se poate observa în figura 3.4.2.5.
Analiză, proiectare, implementare
50 Figura 3.4.2.5 Forma de configurare și generare orar an1 sem1
După configurarea orarului pentru fiecare tip de or ă în parte, se apas ă unul din
butoanele Adauga Curs / Adauga Seminat etc. și ast fel a fost adăugat la orar acea stă
materie cu tipul de or ă dorit. Pentru a șterge o m aterie din orar se configureaz ă materia
cum este prezenta în orar și se apasă unul din butoanele de Sterge Curs / Sterge Seminar
etc. afe rent tipului de or ă dorit.
3.5 Testare si validare
Această suită de aplica ții a fost testata manual pe parcursul dezvolt ării sale. Astfel
tehnica de dezvoltare abordata a fost cea de integrare continu ă. Așadar dup ă fiecare
versiune stabil ă de subprogram, acest a a fost testat și verificat ca îndeplinește
specificațiile cerute și nu introduce erori în cadrul aplica ției și nu altereaz ă datele din
baza de date. În acest mod au fost dezvoltate toate modulele aplica ției. La finalizarea
dezvoltării suitei de aplica ții au fost testate din nou toate modulele și modul lor de
funcționare, în felul acesta asigu rându -se ca sunt îndeplinite specifica țiile impuse și
corectitudinea datelor generate de aplica ții. Validarea suitei de aplica ții a constat în
reproducerea orarului existent, rezultatele fiind cele a șteptate. Cu alte cuvinte
reproducerea orarului cu noua solu ție software este o metoda robust ă și rapidă prin care
se poate genera orarul un ei instituții de învățământ.
Concluzii
51 4 Concluzii
4.1 Rezultate obținute
În urma dezvolt ării a cestei aplica ții am ob ținut urm ătoarele rezultate. A fost
dezvoltată o soluție informatic ă integrată prin intermediul c ăreia se pot vizualiza at ât în
format dinamic c ât și în format complet orarele pentru ciclul universitar de licen ță.
Această vizualizare se face online prin intermediul modulului WEB și tot odată în mod
unic datorita posibilit ății de autentificare pe baz ă de email și parolă. De asemenea prin
intermediul modulului de administrare local ă se poate vizualiza, șterge și adăuga orare
pentru fieca re an și semestru în parte. În acest mod se consum ă mai puțin timp pentru
generarea orarului și pentru administrarea acestuia pe parcursul fiec ărui semestru.
În urma rezultatelor ob ținute putem concluziona c ă soluția propus ă în lucrarea de
față este una va ndabila și se poate integra în mediul informatic al unei institu ții de
învățământ, caracteristica definitoriei a cestei solu ții informatice este rapiditatea cu care
se pot vizualiza și genera orarele.
Contribu țiile personale la dezvoltarea acestei aplica ții sunt conceperea unui
framework nou pentru modulul web al aplica ției, implementarea în baza de date a API –
ului ce stă la baza modulelor suitei software, conceperea design -ului, pentru modulul web
respecti v modulul de administrare local ă și implementarea acestora în soluția
informatic ă.
4.2 Direcții de dezvoltare
În viitor se poate dezvolta aceast ă soluție informatic ă în următoarele direc ții. O
prima direc ție de dezvoltare ar fi posibilitatea de a genera în mod 100% automat orarul
fără a mai fi necesar ă config urarea din partea administratorului. O alt ă direcție de
dezvoltare poate fi ad ăugarea de module noi la aceast ă suită software care s ă permită
informatizarea și automatizarea proceselor de administrare a unei institu ții de
învățământ.
Bibliografie
52 5 Bibliografie
[1] „.NET Framework Guide,” 2018. [Interactiv]. Available:
https://docs.microsoft.com/en -us/dotnet/framework/index.
[2] W3Techs, „Usage of web servers for websites,” Web Technology Surveys,
2018. [Interactiv]. Available:
https://w3techs.com/ technologies/overview/web_server/all.
[3] A. S. Fundation, „ABOUT APACHE,” Apache Software Fundation, 2018.
[Interactiv]. Available: https://httpd.apache.org/ABOUT_APACHE.html.
[4] O. Company, „Oracle Database 12c Release 2,” Oracle Company, 2018.
[Interactiv]. Available: https://docs.oracle.com/en/database/oracle/oracle –
database/12.2/index.html.
[5] Microsoft, „Introduction to the C# Language and the .NET Framework,”
Microsoft, 2018. [Interactiv].
[6] ascOrare, „ascOrare.ro,” [Interactiv]. Availab le: https://ascorare.ro/.
[7] 24edu, „24edu.ro,” [Interactiv]. Available:
http://www.24edu.ro/Front/Orar/Generare.
[8] L. Negrescu și L. Negrescu, Limbajul C# pentru începători, Cluj -Napoca:
Albastră, 2010, pp. 1 -24.
[9] L. Welling și L. Thomson, Dez voltarea aplicațiilor Web cu PHP și MySQL,
vol. 1, București: TEORA, 2003, pp. 22 -30.
[10] M. Fotache, SQL, Dialecte DB2, Oracle, PostgreSQL și SQL Server, Iași:
POLIROM, 2009.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Autor: Alexandru -Cătălin ȚIȚEI Conducător științific : As.drd .ing. Adela PUȘCAȘIU FACULTATEA DE AUTOMATIC Ă ȘI CALCULATOARE DECAN Prof.dr.ing…. [604426] (ID: 604426)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
