Aplicatie Web In Pariuri Sportive
Lucrare de licență
Aplicație web în pariuri sportive
Cuprins
Introducere
Motivație
Descompunerea obiectivelor
Capitolul I: Analiza și dezvoltarea cerințelor
1.1 Context
1.1.1 Fațeta subiect
1.1.2 Fațeta Utilizare
1.1.3 Fațeta IT
1.1.4 Fațeta dezvoltare
1.2 Delimitarea sistemului de contextul său
1.3 Activități și procese
1.3.1 Niveluri de detaliere
1.4 Cerințe de sistem
1.4.1 Cazurile de utilizare
1.5 Modelul de dezvoltare
Capitolul II: Instrumente și tehnologii
2.1 .NET Framework
2.2 Microsoft SQL Server 2008 R2
Capitolul III: Proiectarea și implementarea sistemului
3.1 Arhitectura sistemului
3.2 Descrierea procedurilor stocate
3.3 Proiectarea bazei de date
3.4 Implementarea sistemului
Capitolul IV: Testarea Sistemului
4.1 Testarea Black box
4.2 Testarea White box
Concluzii
Bibliografie
Lista Figurilor
Figura 1: Diagrama motivațională Fishbone 4
Figura 2: Diagrama de descompunere a obiectivelor 5
Figura 3: Descriere secțiuni 7
Figura 4: Diagrama de flux de date (DFD) 12
Figura 5: Diagrama cazurilor de utilizare 16
Figura 6: Modelul cascadă („The Waterfall Model”) 18
Figura 7: Sql Server 22
Figura 8: Arhitectura sistemului 24
Figura 9: Structura bazei de date 33
Figura 10: Formular de înregistrare 35
Figura 11: Formular de logare 39
Figura 12: Validare utilizator 47
Figura 13: Tabel validări 48
Lista abrevierilor
CLR – Common Language Runtime
HTTP – Hypertext Transfer Protocol
HTML – HyperText Markup Language
ASP – Active Server Pages
SQL – Structured Query Language
DBMS – Data Base Management System
IIS – Internet Information Services
Introducere
În ultimul deceniu, informatica a cunoscut o evoluție impresionantă, iar rolul acesteia a devenit din ce în ce mai important în aproape toate domeniile. Dezvoltarea permanentă a domeniului economic, impune utilizarea pe o scară tot mai largă a tehnologiilor informatice.
Datorită unei ascensiuni rapide pe piața pariurilor sportive și a jocurilor de noroc, s-a realizat acestă aplicație pentru ajutorul clienților cu ideea de a facilita crearea biletelor mai rapid și mai ușor din orice locație cu acces la internet.
Aplicația este recomandată împătimiților de pariuri sportive dar nu numai, se adresează tuturor persoanelor ce au împlinit vârsta de 18 ani și vor să descopere această lume a pariurilor.
Această platformă oferă utilizatorilor o gamă largă de pariuri. Se poate paria pe evenimente la diferite sporturi precum: fotbal, tenis, baschet, handbal. Oferta de pariuri este foarte variată, pentru fotbal avem posibilitatea de a juca la aproape toate tipurile de pariuri: rezultat final, șansă dublă la final, total goluri (peste/sub 2,5 goluri), marchează/nu marchează, scor la pauză, șansă dublă la pauză, handicapuri, etc.
Timpul pe care clienții îl vor petrece în agenții va fi mult diminuat datorită implementării tichetului virtual. Astfel, se poate pregăti și printa biletul cu evenimentele dorite, ulterior se poate merge în cea mai apropiată agenție cu tichetul virtual, iar operatorul de la agenție să înmâneze biletul oficial. De aseamenea, puteți scrie doar codul care se găsește pe tichetul virtual, introducerea acestuia în sistemul de calcul reproducând automat biletul oficial cu evenimentele pariate.
Aplicația de față oferă o grafică foarte prietenoasă, este ușor de navigat, la acest capitol fiind cea mai bună alegere pe care clienții o pot face, oferă statistici foarte importante, noutăți din lumea sportului, informații care vin în sprijinul clienților înainte de pariere.
În primul capitol se prezintă analiza și dezvoltarea cerințelor. Se va descrie contextul în care va funcționa sistemul informatic cu ajutorul metodologiei fațetelor, de asemenea se vor prezenta aspecte care aparțin sistemului.
Al doilea va prezenta pe scurt noțiunile teoretice despre tehnologiile software folosite pentru realizarea acestei aplicații.
Al treilea capitol cuprinde proiectarea și implementarea sistemului. Vor fi prezentate aspectele legate pentru realizarea proiectării aplicației, arhitectura sistemului, proiectarea bazei de date, tabelelor, relațiilor, descrierea procedurilor stocate. De asemenea se prezintă elementele esențiale pentru a se putea realiza implementarea aplicației.
Al patrulea capitol cuprinde testarea aplicației. Acest capitol va descrie tehnicile de testare cunoscute ( testarea statica white box, testarea dinamica white box, testarea statica black box, testarea dinamica black box, etc) precum și rezultatele obținute în urma testării acestor tehnici.
Iar in final sunt descrise concluziile finale ale aplicației, precum și posibile îmbunătățiri ale acesteia.
Motivație
Aplicația se remarcă prin calitatea serviciilor oferite cliențiilor (oferta de pariuri este foarte variată, cote atractive la multe sporturi, multe tipuri de pariuri și de bonusuri). Clienții au posibilitatea de a paria pe evenimente sportive dintre cele mai variate, oferind cele mai bune cote.
Viziunea acestei aplicații este următoarea:
Clientul nostru este în centrul tuturor acțiunilor noastre și dorim să-i oferim satisfacție la cote maxime.
Am determinat o serie de cauze care duc la dezvoltarea unei aplicații web în pariuri sportive ilustrare cu ajutorul diagramei FishBone.
Conform acestei diagrame motivaționale FishBone s-au identificat următoarele probleme care au stat la baza implementării platformei:
Satisfacția scăzută a clienților reiese din lipsa unui canal de comunicație pentru rezolvarea anumitor probleme ce pot sa apară, lipsa unui tutorial care să ajute clienții pentru a realize un bilet de pariuri, oferta nu este foarte variată și cotele sunt prea mici.
Problemele de promovare apar din cauza lipsei de promovare prin mass media (tv, radio, ziare) și datorită dificultăților in primirea de feedback.
Probleme de eficiență apar in momentul în care administratorul adaugă anumite evenimente greșit, sau adaugă anumite cote eronat.
Figura 1: Diagrama motivațională Fishbone
Descompunerea obiectivelor
Identificarea tuturor motivelor care stau la baza implementarii acestui proiect duc la crearea schemei de descompunere a obiectivelor.
Din această schemă de descompunere a obiectivelor se poate observa că scopul acestei lucrări este dezvoltarea unei aplicații web de pariuri sportive.
Figura 2: Diagrama de descompunere a obiectivelor
Obiectivul principal este realizarea unei aplicații web în pariuri sportive, utilizatorii putând să iși creeze bilete de pariuri sportive, pentru realizarea acestui obiectiv principal se îndeplinesc și următoarele obiective secundare:
Îmbogățirea ofertei de pariuri prin adăugarea anumitor competiții dar și prin adăugarea unor noi tipuri de pariuri
Generarea unui cod unic pentru biletul de pariuri deoarece un client va putea să gaseasca un anumit bilet de pariuri dacă va introduce codul de pe acel bilet
Îmbunătățirea comuncării cu utilizatorii prin realizarea unui sistem de chat dar și prin creearea unui tutorial pentru realizarea unui bilet de pariuri virtual
Capitolul I: Analiza și dezvoltarea cerințelor
1.1 Context
În privința descrierii contextului în care va funcționa aplicația voi utiliza metodologia celor patru fațete: fațeta subiect, fațeta utilizare, fațeta IT și fațeta dezvoltare. Cu ajutorul acestor fațete se vor putea trata obiectivele, aspecte legate de utilizarea sistemului, politici de acces, instrumente folosite în dezvoltarea aplicației, modelul de dezvoltare folosit.
1.1.1 Fațeta subiect
Această fațetă cuprinde obiectivele și evenimentele care definesc sistemul. Principalii stakeholderi ai acestei platforme sunt împatimiții de pariuri sportive dar nu numai, se adresează tuturor persoanelor ce au împlinit vârsta de 18 ani și vor să descopere această lume a pariurilor. Beneficiarii nu sunt numai clienții, ci și firma și angajații ei, prin veniturile aduse.
Beneficiile aduse de această aplicație cliențiilor care o utilizează sunt urmatoarele:
Reducerea timpului de căutare al unui eveniment, meci etc.
Creearea biletului se poate realiza din orice loc unde există conexiune la internet
Reducerea timpului de efectuare a pariului (se poate efectua cu codul biletului)
Prin urmare, folosirea eficientă a aplicației a impus implementarea unei baze de date pentru a permite stocarea tuturor datelor de care utilizatorul are nevoie pentru a putea realiza un bilet de pariuri.
1.1.2 Fațeta Utilizare
Interfața grafică a aplicației este destul de simplă, fiind accesibilă oricărui utilizator. După ce a pornit aplicația utilizatorul trebuie să își creeze un cont nou care va conține atât datele personale cât și numele de utilizator și parola. Pentru a se autentifica utilizatorul trebuie să introducă numele de utilizator și parola. Dacă a reușit să se autentifice acesta va fi întâmpinat cu un mesaj de bun venit și va avea posibilitatea să își selecteze competițiile preferate cât și vizuliazarea tuturor biletelor efectuate.
Deși această aplicație dispune de o interfată ușor de utilizat, noi am creeat o secțiune denumită ’’ Ghid de pariuri’’, această secțiune este folositoare pentru toți clienții deoarece aici sunt descriși toți pașii pentru realizarea unui bilet de pariuri, în același timp sunt descrise toate tipurile de pariuri.
Figura 3: Descriere secțiuni
Utilizatorii au posibilitatea de a accesa următoarele secțiuni:
Secțiunea ’’Contact’’ aici este disponibilă adresa de e-mail a administratorului în cazul în care sunt nelămuriri sau se depistează erori de funcționare.
Secțiunea ’’Ghid de pariere’’ în această secțiune utilizatorul se poate informa despre modul de pariere, aici fiind descrise toate tipurile de pariuri.
Secțiunea ’’Înregistrare cont’’ în această secțiune se completează un formular de înregistrare pentru a înregistra un cont nou.
Secțiunea ’’Sporturi’’ această secțiune va conține tipurile de sporturi și competițile aferente fiecărui sport, aici utilizatorul va avea posibilitatea să aleagă meciurile dorite pentru a realiza biletul de pariuri.
Secțiunea ’’Termeni și condiții’’ descrie termenii și condițiile pe care utilizatorul trebuie să le respecte și să le îndeplinească.
Secțiunea ’’Regulament’’ În această secțiune sunt descrise regulile generale pentru a efectua un pariu.
1.1.3 Fațeta IT
Pentru dezvolatarea acestei aplicații s-a folosit un sistem de operare funcțional, acesta fiind Windows Xp Proffesional. Pe tot parcursul implementării funcționalitățile au fost testate utilizând Mozilla Firefox pe post de browser. Componentele utilizate in dezvoltarea platformei sunt Microsoft Visual Studio 2010 ,acest program ajută la realizarea interfeței grafice a platformei și a utilităților integrate, iar pentru realizarea bazei de date s-a folosit Microsoft SQL Server 2008.
Microsoft Visual Studio 2010 este un mediu de lucru dezvoltat de către Microsoft, este specializat pentru aplicații desktop, telefoane dar și pentru pagini web.
Paginile ASP.NET rulează pe server-ul web Microsoft IIS. În urma prelucrării pe server, rezultă o pagină web HTML, care este trimisă către browser. Rularea aplicației necesită existența unei conexiuni la internet.
Baza de date a fost creeată în Microsoft SQL Server 2008, aici vor fi stocate toate informațiile prezentate în această aplicație. Modificările de conținut necesare periodic acestei aplicații (adăugări, modificări, ștergeri) vor fi făcute de către administrator.
1.1.4 Fațeta dezvoltare
Modelul folosit pentru această aplicație este modelul cascadă deoarece are multe avantaje . Etapele care au dus la creearea aplicației sunt următoarele:
Analiza și specificarea cerințelor
Proiectarea arhitecturală
Implementarea aplicației
Testarea
Întreținerea sistemului informatic
În vederea realizării acestei aplicații a fost necesară existența unui programator și al unui tester.
1.2 Delimitarea sistemului de contextul său
În dezvoltarea sistemului informatic se ține cont de toate procesele care interacționează cu acestea și a căror prezență, existență sau utilizare aentate în această aplicație. Modificările de conținut necesare periodic acestei aplicații (adăugări, modificări, ștergeri) vor fi făcute de către administrator.
1.1.4 Fațeta dezvoltare
Modelul folosit pentru această aplicație este modelul cascadă deoarece are multe avantaje . Etapele care au dus la creearea aplicației sunt următoarele:
Analiza și specificarea cerințelor
Proiectarea arhitecturală
Implementarea aplicației
Testarea
Întreținerea sistemului informatic
În vederea realizării acestei aplicații a fost necesară existența unui programator și al unui tester.
1.2 Delimitarea sistemului de contextul său
În dezvoltarea sistemului informatic se ține cont de toate procesele care interacționează cu acestea și a căror prezență, existență sau utilizare afectează modalitatea de utilizare a platformei.
Aplicabilitatea progamului prevede următoarele: să fie interactiv, să solicite logarea utilizatorului înainte de a încerca să realizeze un bilet de pariuri, să ofere informații clare și reale despre pariuri, să aibă o ofertă cât mai variată, competiții și tipuri de pariuri. Eficiența acestei aplicații ține și de ușurința cu care poate fi manevrată, din această s-a creat o interfață grafică prietenoasă.
Utilizatorii înregistrați (cei care au cont pe această platformă) și vizitatorii (cei care nu au cont) care doar accesează platforma pentru a se informa de ofertele disponibile sunt beneficiarii direcți ai acestui sistem informatic.
Baza de date este cel mai important element al contextului sistemului informatic deoarece aceasta conține toate informațiile referitoare asupra ofertelor disponibile, a tuturor tipurilor de pariuri și cotelor aferente fiecărui eveniment.
1.3 Activități și procese
Proiectarea aplicației se bazează pe respectarea definitorie a unor aspecte principale, a unor activități și procese, implicite sau bazate pe documentarea cerințelor și a specificațiilor.
1.3.1 Niveluri de detaliere
Ni velul 0
Scopul aplicației este acela de a simplifica modul de pariere și de a satisface clienții. Aplicația trebuie să permită atât introducerea, ștergerea și editarea pariurilor, sporturilor, competiților etc, de către administrator, cât și vizualizarea și salvarea biletelor de către clienți. Clientul foloseste datele introduse de către administrator.
Nivelul 1
Administratorul după ce s-a logat poate să introducă și să altereze datele din baza de date. Introducerea datelor presupune completarea anumitor câmpuri cu date valide, sistemul semnalând eventualele erori. Toate aceste date pot fi folosite în cele din urmă de către clienții acestei platforme.
Nivelul 2
Acest nivel presupune logarea clientului folosind numele de utilizator și parola, vizualizarea pariurilor, completarea și salvarea unui bilet. Toți utilizatorii sunt stocați în baza de date și doar cei logați pot să completeze și să salveze un bilet de pariuri. Completarea biletului de pariuri pornește în momentul în care clientul dă click pe o anumită cotă a unui pariu, sistemul va semnala eroare în cazul în care se pun 2 pariuri care aparțin aceluași eveniment. La apăsarea butonului ”pune pariu” biletul se salvează în baza de date.
Nivelul primitiv
Aici are loc procesarea datelor sistemului , datele valide introduse sau editate de administrator se inserează sau actualizează în baza de date, de asemenea și biletele efectuate de către clienți. Tot acest nivel procesează și șterge datele de care nu mai sunt nevoie, se mai ocupă și de asignarea unui identificator unic pentru fiecare bilet de pariuri.
Metoda aleasă pentru prezentarea acestui proces, este reprezentarea cu ajutorul diagramei DFD (Data Flow Diagram), diagramă care reprezintă flow-ul datelor de-a lungul sistemului informatic, modelând procesarea datelor.
Figura 4: Diagrama de flux de date (DFD)
1.4 Cerințe de sistem
Această aplicație se adresează unui numar mic de stakeholderi, astfel se consideră interviul ca fiind cea mai bună metodă de extragere a cerințelor. Interviul este conceput să furnizeze întelegerea problemelor reale și a posibilelor soluții din perspectiva utilizatorilor și a clienților.
Interviurile s-au efectuat la nivelul conducerii dar au existat interviuri și în rândul unor clienți.
Primul interviu s-a desfășurat între cel care a intervievat respectiv persoana căreia i s-au adresat întrebările – managerul de proiect.
Cine este stakeholderul, utilizatorul ?
Cât de complexă doriți să fie interfața care va expune funcționalitățile aplicației?
Câți operatori credeți că sunt necesari pentru a administra conținutul site-ului?
Care sunt metodele de promovare a aplicației?
Care ar fi inconvenimentele ce pot fi create de utilizator?
Ce funționalitați noi doriți să realizați?
Pentru a ne asigura că toate cerințele sistemului sunt relevante, s-a mai realizat un al doilea interviu. Acest interviu a fost realizat in rândul unor clienți.
Cât de accesibilă vi se pare această interfată ?
Cum vi se par Termenii și condițiile acestui site?
Ar trebuii realizate îmbunătățiri în descrierea tipurilor de pariuri?
Credeți că ar fi benefică existența unui forum?
Sunteți mulțumiți de oferta de pariuri existentă?
Ce ați dori nou la această aplicație?
Aveți sugestii sau reclamații ?
Cu ajutorul acestor întrebări am încercat să vedem dacă cerințele actuale ale sistemului reflectă nevoile actuale ale pariorilor, totodată vom lua în considerare toate sugestiile pentru îmbunătățirea sistemului.
Toate răspunsurile subiecților intervievați au fost centralizate și se va ține cont de răspunsurile acestora deoarece se dorește îmbunătățirea continuă acestei aplicații.
1.4.1 Cazurile de utilizare
Funcționalitățile sistemului se pot prezenta într-o formă comprehensivă utilizând digramele UML mai ales cea a cazurilor de utilizare, care descrie comportamentul unui sistem din punctual de vedere al utilizatorului. (Avornicului and Avornicului 2010).
Cazurile de utilizare ale acestui sistem informatic implică acțiunile a doi actori. Aceștia sunt : clientul și administratorul.
Clientul este persoana care vizitează aplicația, se înregistrează pe platformă cu scopul de a putea efectua bilete de pariuri. Clientul poate să viziteze platforma chiar dacă nu este înregistrat dar nu va avea posibilitatea de a efectua bilete.
Pentru a se înregistra clientul va trebuii să completeze un formular cu datele personale(nume, prenume, adresa, email, data nașterii, numar de telefon) și el va trebuii să fie de acord cu termenii și condițiile companiei. După ce s-a autentificat clientul va putea sa efectueze un bilet de pariuri, vizualizând oferta disponibilă cu toate sporturile, competițiile etc, clientul va selecta cota dorită aferentă unui meciu și aceasta va apărea pe biletul de pariuri.
Clientul participă la următoarele cazuri de utilizare:
Autentificare/Deautentificare
Creare profil
Vizualizare ofertă
Efectuare bilet pariuri
Modificare parolă
Autentificarea se face cu scopul de a stabili nivelul de acces al fiecărui actor. Autenficarea se face prin introducerea unui nume (username) și a unei parole, iar deautenficarea se face prin apăsarea unui buton (ieșire) care va realiza automat această acțiune.
Oferta va conține sporturile cu toate competițiile aferente fiecărui sport și cotele aferente în dreptul fiecărui meci. Clientul va putea să vizualizeze toate informațiile prezentate în ofertă.
Efectuarea unui bilet de pariuri va fi posibilă doar după ce s-a înregistrat clientul, el va putea să efectueze biletul de pariuri accesând oferta aferentă, alegând meciurile care le dorește. Pe un bilet de pariuri clientul nu va putea alege decât un tip de pariuri pentru fiecare meci.
Administratorul va gestiona datele introduse de clienți. El va verifica numele, prenumele, adresa, număr de telefon să fie valide (ex: sa nu introducă nume: ’aaa’). După această validare va da acces utilizatorului la salvarea biletelor.
Administratorul se va ocupa cu introducerea sporturilor, competițiilor , echipelor, cotelor etc în baza de date, toate aceastea fiind necesare pentru client pentru a putea vizualiza oferta și pentru a putea să efectueze un bilet de pariuri.. De asemenea va trebuii să se autentifice pe platformă pentru a avea acces la introducerea informațiilor.
El va mai putea modifica cote pentru anumite meciuri în cazul de pariere masivă pe o anumită echipă, sau dacă sunt informații care va necesita modificarea anumitor cote.
Administratorul participă la următoarele cazuri de utilizare:
Autentificare/Deautentificare
Verificare utilizator și pariuri
Gestiune pariuri
Gestiune cote
Diagrama cazurilor de utilizare:
Diagrama cazurilor de utilizare include actorii și cazurile de utilizare. Fiecare diagramă conține un set complet de evenimente inițiate de unul sau mai mulți actori și specifică interacțiunea care are loc între actori și sistem [C.Avornicului și M.Avornicului, 2010]
Figura 5: Diagrama cazurilor de utilizare
1.5 Modelul de dezvoltare
Dezvoltarea acestei aplicații s-a realizat treptat, fiecare etapă terminată cu succes presupunea începutul alteia.
Modelul folosit pentru această aplicație este modelul cascadă deoarece are multe avantaje . Cel mai important avantaj al acestui model este împarțirea unei sarcini complexe in mai mulți pași mici fiind mai ușor de administrat.
”Modelul de dezvoltare în cascadă este ciclul de viață a unui sistem software în care dezvoltarea se desfășoară liniar prin fazele analiză, specificație de cerințe, proiectare, implementare, testare, integrare și mentenanță.”
(Royce 1970)
Etapele care au dus la creearea aplicației sunt următoarele:
Analiza și specificarea cerințelor
Proiectarea arhitecturală
Implementarea aplicației
Testarea
Întreținerea sistemului informatic
Figura 6: Modelul cascadă („The Waterfall Model”)
Avantaje:
Sistemul este bine documentat
Permite un bun management al proiectului:
planificarea resurselor umane pe etape
estimări de cost mai exacte
Dezavantaje:
Un produs executabil, care să demonstreze funcționarea sistemului este disponibil destul de târziu, după integrare. Pană atunci s-au produs numai documente.
Deoarece modelul este secvential, exista numai un feedback local, la tranzițiile între faze.
Multe erori sunt descoperite tarziu cost crescut
Toate riscurile sunt incluse într-un singur ciclu de dezvoltare
Capitolul II: Instrumente și tehnologii
Pentru realizarea acestui sistem s-au folosit următoarele soluții moderne, fiind alese în funcție de obiectivele sistemului:
.NET Framework – având ca limbaj de programare C#
SQL Server 2008 R2 – se folosește pentru crearea bazei de date.
2.1 .NET Framework
.NET Framework (pronunțat dot net) este un framework software care rulează pe Microsoft Windows. Acesta include o bibliotecă mare și sprijină mai multe limbaje de programare care permite și interoperabilitatea între aceste limbaje (fiecare limbaj poate folosi codul scris în alt limbaj).
Librăria.NET este disponibilă pentru toate limbajele de programare care suporta.NET. Programele scrise în.NET se execută intr-un mediu software cunoscut sub numele de Common Language Runtime (CRL), o mașină virtuală care furnizează servicii importante, cum ar fi securitatea, managementul memoriei și manipularea excepțiilor.
Common Language Runtime Engine (CLR) este motorul de executare a framework-ului.NET. Toate programele.NET se execută sub supravegherea CLR-ului, care garantează anumite proprietăți și comportamente legate de managementul memoriei, de securitate și de manipularea excepțiilor
Frameworkul.NET este destinat să fie utilizat de cele mai noi aplicații pentru platforma Windows. Microsoft produce de asemenea și un popular mediu de dezvoltare integrat în mare parte pentru .NET numit Visual Studio.
Framework-ul.NET include caracteristici de design și intrumente care ajută la instalarea software-ului pentru a se asigura că acesta să nu interfereze cu cel instalat anterior și că acesta este conform cu cerințele de securitate. Un program scris să folosească frameworkul ar trebuii să ruleze pe orice tip de sistem pe care frameworkul este implementat. Chiar dacă Microsoft nu a implementat niciodata framework-ul complet pe alt sistem înafară de Microsoft Windows.
Limbajul de programare utilizat este C#. C# este un limbaj de programare orientat-obiect conceput de Microsoft la sfârșitul anilor 90. A fost conceput ca un concurent pentru limbajul Java. Ca și acesta, C# este un derivat al limbajului de programare C++.
Avantajele oferite de .NET includ: acces ușor la baze de date, clase care efectuează majoritatea sarcinilor uzuale cu care se confruntă programele, instrumente de construire a interfeței cu utilizatorul ușor de folosit prin intermediul controalelor oferite de namespace-ul System.Windows.Forms. Folosind aceste controale se pot proiecta și dezvolta rapid și interactiv elementele interfeței grafice.
Mediul de dezvoltare utilizat pentru dezvoltarea aplicației este Microsoft Visual Studio 2010. Această versiune a Microsoft Visual Studio se bazează pe platforma .NET Framework 4.0.
2.2 Microsoft SQL Server 2008 R2
SQL Server 2008 este un DBMS (Data Base Management System) – sistem pentru gestiunea bazelor de date, produs de Microsoft.
Microsoft SQL Server 2008 R2 reprezintă cea mai avansată, de încredere si scalabilă platformă pentru baza de date. Serverul permite stocarea, preluarea si manipularea datelor pentru îndeplinirea obiectivelor referitoare la bazele de date.
Figura 7: Sql Server
Sursa: Microsoft
Versiunea de SQL Server Management Studio Inclusă în SQL Server 2008 acceptă IntelliSense pentru SQL.
Putem spune despre Microsoft SQL Server 2008 că este o soluție integrată de management și analiză a datelor, care ajuta organizațiile de orice dimensiune să:
Dezvolte, implementeze și administreze aplicații la nivel de întreprindere mai sigure, scalabile și fiabile
Maximizeze productivitatea IT prin reducerea complexității creării, implementării și administrării aplicațiilor pentru baze de date.
Partajeze date pe mai multe platforme, aplicații și dispozitive pentru a facilita conectarea sistemelor interne și externe.
Controleze costurile fără a sacrifica performanța, disponibilitatea, scalabilitatea sau securitatea.
Gestionarea serverului se face foarte ușor prin aplicația SQL Server Management Studio.
Capitolul III: Proiectarea și implementarea sistemului
Etapele de proiectare a unei aplicații sunt [C.Avornicului si M.Avornicului, 2010]:
– Analiza sistemului existent;
– Proiectarea generală a noului sistem;
– Proiectarea de detaliu a noului sistem;
– Implementarea sistemului proiectat;
– Exploatarea curentă și menținerea în funcțiune a noului sistem;
3.1 Arhitectura sistemului
Arhitectura sistemului informatic reprezintă soluția generic privitoare la procesele de prelucrare a datelor ce trebuie să se realizeze și modul de integrare a datelor și a prelucrărilor.[C.Avornicului si M.Avornicului, 2010]
Sistemul este împărțit în trei componente mari:
Interfața cu utilizatorul
Prelucrarea și procesarea datelor și comunicarea cu baza de date
Baza de date care stochează informațiile
Figura 8: Arhitectura sistemului
Interfața cu utilizatorul este o pagină web pe care utilizatorul o poate deschide într-un browser. În această pagină utilizatorul poate interacționa cu controalele grafice ale aplicației, îsi poate creea un cont, se poate autentifica, poate să vizualizeze și să efectueze anumite pariuri. Toate paginile pe care utilizatorul le poate accesa sunt pagini HTML generate de server. Comunicarea cu acest server se face folosind protocolul HTTP, utilizatorul făcând o cerere (request) și primind un răspuns (response) de la server.
Serverul se ocupă cu două lucruri importante acestea fiind: Prelucrarea și procesarea datelor și comunicarea cu baza de date.Serverul primește o cerere (request) de la browser, verifică datele primite, le prelucrează și pregătește un răspuns (response) pentru a fi trimis către browser. Deoarece limbajul de programare este C# serverul folosește IiS-ul care generează codul HTML și îl trimite mai departe browserului. Tot în acest nivel se pot apela funcții din nivelul care comunică cu baza de date.
Al doilea nivel important de pe server se ocupă de comunicarea cu baza de date. Acest nivel conține metode pentru inserarea, actualizarea și selectarea informațiilor din baza de date.
Ultimul nivel al arhitecturii îl constituie baza de date în care sunt stocate toate informațiile legate de utilizatori, sporturi, echipe, pariuri etc. Baza de date este creată în Microsoft SQL Server 2008 și conține tabele, proceduri stocate și funcții pentru stocarea și utilizarea informațiilor.
3.2 Descrierea procedurilor stocate
Procedurile stocate duc la creșterea performanțelor redării diverselor informații deoarece serverul SQL compilează o singură dată fiecare procedură stocată și apoi o reutilizează de câte ori are nevoie. Aceste proceduri pot fi lansate în execuție de o aplicație apelantă sau de declanșatoare sau de regulile de integritate. Deoarece SQL-server permite administrarea bazelor de date din sistem este logic ca serverul este locul cel mai bun pentru rularea procedurii stocate. Procedurile stocate pot să returneze valori și să modifice, să execute operații de comparare cu valorile precomparate folosite de sistem.
Procedurile stocate existente în baza de date sunt în număr de zece, acestea sunt: Bets_SelectByCompetition, Competition_SelectBySports, Contact_Add, Credentials_AddUpdate, Sport_Select, UserBets_Add, UserBetsInfo_Add, Users_AddUpdate, Users_Select, Users_SelectByEmail.
Procedura stocată denumită Bets_SelectByCompetition care are ca parametru de intrare CompetitionId de tip smallint. În funcție de acest parametru stocata va returna pariurile aferente acelei competiții, iar atât pariurile din tabela Bets cât și numele echipelor din tabela Teams în funcție de GuestTeamId și HostTeamId, tipul pariului în funcție de BetTypeId.
ALTER PROCEDURE [dbo].[Bets_SelectByCompetition]
@CompetitionId smallint
AS
BEGIN
SELECT B.BetId, SportTypeId, HostTeamId, GuestTeamId, B.BetTypeID,BT.BetType,
B.EventDate, Odds, CompetitionId, T1.TeamName as HostTeamName,
T2.TeamName as GuestTeamName from Bets B
inner join Teams T1
on T1.TeamId = B.HostTeamId
inner join Teams T2
on T2.TeamId = B.GuestTeamId
inner join BetTypes BT
on BT.BetTypeId = B.BetTypeID
where B.CompetitionId = @CompetitionId
END
Procedura stocată denumită Users_AddUpdate, primește ca parametrii de intrare Action de tip smallint, UserName de tip nvarchar(30), Password de tip nvarchar(50), UserTypeId de tip smallint, UserId de tip int și un parametru de ieșire Result de tip int. Această stocată va face Insert sau Update în funție de valoarea parametrului Action. Dacă valoarea parametrului Action este egală cu 1 atunci se va face insert, se va introduce un nou utilizator în baza de date, iar dacă valoarea lui Action nu este 1 se va face Update utilizatorului cu UserId = @UserName. În cazul Insertului, în parametru de ieșire se va returna id-ul noului utilizator.
ALTER PROCEDURE [dbo].[Users_AddUpdate]
– Add the parameters for the stored procedure here
@Action smallint,
@UserName nvarchar(30),
@Password nvarchar(50),
@UserTypeId smallint,
@UserId int,
@Result int out
AS
BEGIN
if @Action =1
Begin
Insert into Users (UserName, Password, UserTypeId)
Values (@UserName, @Password, @UserTypeId)
Select @Result = SCOPE_IDENTITY()
end
else
Begin
Update Users
Set UserName=@UserName,
Password = @Password,
UserTypeId= @UserTypeId
where UserId = @UserId
set @Result = -1
end
END
3.3 Proiectarea bazei de date
Baza de date a fost creeată în Microsoft SQL Server 2008, aici vor fi stocate toate informațiile prezentate in această aplicație. Modificările de conținut necesare periodic acestei aplicații (adăugări, modificări, ștergeri) vor fi făcute de către administrator.
Această bază de date a fost denumită SportingBets conținând zece tabele, acestea sunt: UserType, Users, Bets, BetsTypes, Competitions, Credentials, Sports, Teams, UserBets, UserBetsInfo.
Tabela UserType conține două atribute:
UserTypeId (Id-ul tipului de utilizator) de tip smallint
UserType (tip utilizator) de tip nvarchar(20).
Cheia primară aferentă acestui tabel este câmpul UserTypeId. Această tabelă nu conține chei străine.
Tabela Users conține următoarele atribute:
UserId (Id-ul utilizatorului) de tip int
UserName (nume utilizator) de tip nvarchar(30)
Password (parola) de tip nvarchar(40)
UserTypeId (Id-ul tipului de utilizator) de tip smallint
Cheia primară aferentă acestui tabel este câmpul UserId.
Tabela Bets conține următoarele atribute:
BetId (Id pariu) de tip int
SportTypeId (Id tip sport) de tip smallint
HostTeamId (Id echipă gazdă) de tip int
GuestTeamId (Id echipă oaspete) de tip int
BetTypeId (Id tip pariu) de tip smallint
EventDate (Dată eveniment) de tip Datetime
Odds (Cote) de tip decimal(5,2)
CompetitionId (Id competiție) de tip smallint
Cheia primară aferentă acestui tabel este câmpul BetId.
Tabela BetsTypes conține următoarele atribute:
BetTypeId (Id tip pariu) de tip smallint
BetType (tip pariu) de tip nvarchar(50)
SportId (Id Sport) de tip smallint
Cheia primară aferentă acestui tabel este câmpul BetTypeId.
Tabela Competitions conține următoarele atribute:
CompetitionsId (Id competiție) de tip smallint
CompetitionName (nume competiție) de tip nvarchar(50)
Description (descriere) de tip nvarchar(200)
SportId (Id sport) de tip smallint
Cheia primară aferentă acestui tabel este câmpul CompetitionId.
Tabela Credentials conține următoarele atribute:
UserId (Id utilizator) de tip int
FirstName (Nume) de tip nvarchar(30)
LastName (Prenume) de tip nvarchar(30)
DateOfBirth (Data nașterii) de tip datetime
Address (Adresa) de tip nvarchar(100)
County (Județ) de tip nvarchar(30)
City (Oraș) de tip nvarchar(30)
EmailAddress (Adresă Email) nvarchar(50)
PhoneNumber (număr telefon) de tip numeric
Cheia primară aferentă acestui tabel este câmpul UserId.
Tabela Sports conține două atribute:
SportId (Id sport) de tip smallint
SportName (nume sport) de tip nvarchar(30)
Cheia primară aferentă acestui tabel este câmpul SportId. Această tabelă nu conține chei străine.
Tabela Teams conține următoarele atribute:
TeamId (Id echipă) de tip int
SportId (Id sport) de tip smallint
TeamName (nume echipă) de tip nvarchar(30)
Cheia primară aferentă acestui tabel este câmpul TeamId.
Tabela UserBets conține următoarele atribute:
UserBetId (Id pariu utilizator) de tip int
UserId (id utilizator) de tip int
TotalOdds (total cotă) de tip decimal(7,2)
Stake (miza) de tip decimal(6,2)
BetDate (dată pariu) de tip datetime.
Cheia primară aferentă acestui tabel este câmpul UserBetId.
Tabela UserBetsInfo conține următoarele atribute:
UserBetsInfoId (Id-ul informațiilor suplimentare despre pariu) de tip int
UserBetId (Id pariu utilizator) de tip int
BetId (Id pariu) de tip int
Odds (cotă) de tip decimal(6,2)
BetTypeId (id tip pariu) de tip smallint
Cheia primară aferentă acestui tabel este câmpul UserBetInfoId.
Toate câmpurile din această bază de date trebuie completate obligatoriu deoarece nu se permite introducerea de valori null.
Relațiile între tabele sunt construite cu ajutorul cheilor străine și asigură integritatea datelor din baza de date. Între tabelele prezentate în această aplicație există o singură relație de 1 la 1 , aceasta fiind între tabela Users și tabela Credentials prin câmpul UserId, restul relațiilor sunt de tipul 1 la n. Această relație 1 la n presupune că fiecărei instanțe din primul tabel i se pot asocia mai multe instanțe din al doilea tabel, respectiv fiecărei instanțe din tabelul al doilea i se poate asocia doar o singură instanță din primul tabel.
Între tabela UserType și tabela Users există o relație de 1 la n. Relația se realizează cu ajutorul cheii primare UserTypeId din tabela UserType și cheia străină UserTypeId din tabela Users. Această relație presupune că un singur tip de utilizator(administrator sau utilizator) se asociază mai multor clienți, iar fiecărui client i se asociază un tip de utilizator.
Între tabela UserBets și tabela Users există o relație de 1 la n. Relația se realizează cu ajutorul cheii primare UserId din tabela Users și cheia străină UserId din tabela UserBets. Această relație presupune că un client autentificat poate să realizeze mai multe bilete de pariuri, iar un bilet trebuie efectuat de către un client.
Între tabela UserBetsInfo și tabela Bets există o relație de 1 la n. Relația se realizează cu ajutorul cheii primare BetId din tabela Bets și cheia străină BetId din tabela UserBetsInfo.
Între tabela UserBets și tabela UserBetsInfo există o relație de 1 la n. Relația se realizează cu ajutorul cheii primare UserBetId din tabela UserBets și cheia străină UserBetId din tabela UserBetsInfo.
Între tabela Sports și tabela Teams există o relație de 1 la n. Relația se realizează cu ajutorul cheii primare SportId din tabela Sports și cheia străină SportId din tabela Teams. Această relație presupune că fiecărui sport pot să ii fie asociate una sau mai multe echipe.
Între tabela Competitions și tabela Sports există o relație de 1 la n. Relația se realizează cu ajutorul cheii primare SportId din tabela Sports și cheia străină SportId din tabela Competitions. Această relație presupune că fiecărui sport pot să îi fie asocite una sau mai multe competiții, iar fiecare competiție trebuie să aparțină unui singur sport.
Între tabela Sports și tabela BetTypes există o relație de 1 la n. Relația se realizează cu ajutorul cheii primare SportId din tabela Sports și cheia străină SportId din tabela BetTypes. Această relație presupune că fiecărui sport pot să îi fie asociate unu sau mai multe tipuri de pariuri.
Datorită acestei scheme, se ușurează dezvoltarea bazei de date. Cheile primare aferente schemei de mai jos sunt evidențiate cu o cheie galbenă în dreptul atributelor.
Figura 9: Structura bazei de date
3.4 Implementarea sistemului
În acest subcapitol se va prezenta implentarea aplicației cu ajutorul tehnologiilor prezentate anterior. Implentarea aplicației este faza imediat următoare proiectării și constă în construirea efectivă a aplicației.
În cele ce urmează se vor prezenta și detalia principalele funcționalitați implementate în această aplicație.
Siteul este împărțit în patru zone:
Header
Înregistrare și Login
Conținutul paginilor
Footer
Zona de header care conține numele siteului, este un link către pagina principală a siteului. De asemenea mai conține trei linkuri către următoarele pagini: Despre Noi, Contact și Ghid De Pariere. Această zonă rămâne neschimbată indiferent de pagina pe care ești.
Zona de înregistrare și login conține două linkuri, unul către formularul de înregistrare și unul către formularul de recuperare al parolei și interfața de logare a utilizatorului.
Zona de conținut al paginilor diferă în funcție de linkul accesat și poate conține formularul de înregistrare, competițiile, pariurile etc.
Zona de footer conține două linkuri către paginile Regulament și Termenii Și Condiții.
Prima dată se va prezenta formularul de înregistrare. Acest formular conține Detalii de Autenficare unde trebuie introdus un nume de utilizator și parola (parola trebuie scrisă de două ori la fel pentru verificare), Detalii Personale: Nume, Prenume, Data Nașterii, Adresa, Judet, Oraș, E-mail și Nr de telefon și Confirmare, utilizatorul trebuie să fie de acord cu Termenii și condițiile.
Figura 10: Formular de înregistrare
Acest formular conține o serie de validări, cu ajutorul cărora se va evita introducerea de date eronate.
<asp:RequiredFieldValidator ID="revUserName" ControlToValidate="txtUserName" ErrorMessage="Introduceti numele de utilizator" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RegularExpressionValidator ID="regUserName" ControlToValidate="txtUserName" ErrorMessage="Numele de utilizator trebuie să aibă între 6 și 20 de caractere!" ValidationExpression=".{6,20}.*" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RequiredFieldValidator ID="revPassword" runat="server" ControlToValidate="txtPassword" ErrorMessage="Introduceti parola!" ValidationGroup="RegisterGroup" Display="None" />
<asp:CompareValidator ID="cmvPasswords" runat="server" ControlToCompare="txtPassword" ControlToValidate="txtConfirmPassword" ErrorMessage="Parolele nu sunt la fel!" ValidationGroup="RegisterGroup" Display="None" />
<asp:RegularExpressionValidator ID="regPassword" ControlToValidate="txtPassword"
ErrorMessage="Parola obligatorie de minim 6 caractere" ValidationExpression=".{6}.*"
runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RequiredFieldValidator ID="revConfirmPassword" runat="server" ControlToValidate="txtConfirmPassword" ErrorMessage="Introduceti parola din nou!" ValidationGroup="RegisterGroup" Display="None" />
<asp:RequiredFieldValidator ID="revFirstName" ControlToValidate="txtFirstName" ErrorMessage="Introduceti Numele" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RequiredFieldValidator ID="revLastName" ControlToValidate="txtLastName" ErrorMessage="Introduceti Prenumele" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RequiredFieldValidator ID="revCity" ControlToValidate="txtCity" ErrorMessage="Introduceti Orasul" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RequiredFieldValidator ID="revEmail" ControlToValidate="txtEmail" ErrorMessage="Introduceti adresa de Email" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RequiredFieldValidator ID="revPhoneNumber" ControlToValidate="txtPhoneNumber" ErrorMessage="Introduceti numarul de telefon" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RegularExpressionValidator ID="regLastName" runat="server" ControlToValidate="txtLastName" ValidationExpression="^[a-zA-Z'.\s]{1,50}" ErrorMessage="Introduceti un prenume corect" ValidationGroup="RegisterGroup" Display="None" />
<asp:RegularExpressionValidator ID="regFirstName" runat="server" ControlToValidate="txtFirstName" ValidationExpression="^[a-zA-Z'.\s]{1,50}" ErrorMessage="Introduceti un nume corect" ValidationGroup="RegisterGroup" Display="None" />
<asp:RequiredFieldValidator ID="revAddress" ControlToValidate="txtAddress" ErrorMessage="Introduceti adresa" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RegularExpressionValidator ID="regCity" runat="server" ControlToValidate="txtCity" ValidationExpression="^[a-zA-Z'.\s]{1,50}" ErrorMessage="Introduceti un nume de oras corect" ValidationGroup="RegisterGroup" Display="None" />
<asp:RegularExpressionValidator ID="regEmail" ControlToValidate="txtEmail" ErrorMessage="Introduceti o adresa de E-mail valida" ValidationExpression="\w+([-+.’]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" runat="server" ValidationGroup="RegisterGroup" Display="None" />
<asp:RegularExpressionValidator ID="RegPhoneNumber" runat="server" ErrorMessage="Introduceti numar de telefon valabil"ControlToValidate="txtPhoneNumber" ValidationExpression="\d{10}" ValidationGroup="RegisterGroup"
Display="None" />
Dacă datele au fost introduse corect și utilizatorul a acceptat termenii și condițiile, prin apăsarea butonului de înregistrare aceste date vor fi salvate în baza de date și un nou utilizator va fi creat, fiind întâmpinat cu un mesaj de succes. Dacă la salvarea datelor apare o eroare utilizatorul va fi anunțat.
În baza de date parola utilizatorului se salvează criptat pentru a nu putea fi vazută sau furată de cineva.
Codul sursă pentru salvarea datelor este:
protected void btnRegister_Click(Object sender, EventArgs e)
{
if (Page.IsValid)
{
try
{
string userName = txtUserName.Text;
string passMd5 = Utils.EncodeMd5(txtPassword.Text);
string firstName = txtFirstName.Text;
string lastName = txtLastName.Text;
string county = ddlCounty.SelectedValue;
string city = txtCity.Text;
int year = Convert.ToInt32(ddlYear.SelectedValue);
int month = Convert.ToInt32(ddlMonth.SelectedValue);
int day = Convert.ToInt32(ddlDay.SelectedValue);
DateTime dateOfBirth = new DateTime(year, month, day);
string email = txtEmail.Text;
string address = txtAddress.Text;
string phone = txtPhoneNumber.Text;
int userId = UserDataAccess.AddUpdate(SqlAction.Add, userName, passMd5, 1, 0);
if (userId > 0)
{
CredentialsDataAccess.AddUpdate(SqlAction.Add, userId, firstName, lastName, dateOfBirth, address, county, city, email, phone);
}
txtUserName.Text = string.Empty;
txtPassword.Text = string.Empty;
txtFirstName.Text = string.Empty;
txtLastName.Text = string.Empty;
txtCity.Text = string.Empty;
ddlCounty.SelectedIndex = 0;
txtEmail.Text = string.Empty;
txtAddress.Text = string.Empty;
txtPhoneNumber.Text = string.Empty;
ddlDay.SelectedIndex = 0;
ddlMonth.SelectedIndex = 0;
ddlYear.SelectedIndex = 0;
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsStartupScriptRegistered(cstype, "Succes"))
{
string cstext = "alert('Inregistrarea s-a efectuat cu succes');";
cs.RegisterStartupScript(cstype, "Succes", cstext, true);
}
}
catch
{
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsStartupScriptRegistered(cstype, "Failed"))
{
string cstext = "alert('Inregistrarea nu s-a efectuat cu succes');";
cs.RegisterStartupScript(cstype, "Failed", cstext, true);
}
}
}
}
Metoda de criptare a parolei este:
public static string EncodeMd5(string original)
{
var md5 = new MD5CryptoServiceProvider();
var originalBytes = Encoding.Default.GetBytes(original);
var encodedBytes = md5.ComputeHash(originalBytes);
return BitConverter.ToString(encodedBytes);
}
Urmează modulul de logare al utilizatorului.
Figura 11: Formular de logare
Utilizatorul trebuie să completeze cele două câmpuri cu datele introduse în formularul de înregistrare. Dacă logarea s-a efectuat cu succes, această zonă de înregistrare și logare se va modifica, linkurile către înregistrare și recuperarea parolei dispar, iar în locul câmpurilor pentru utilizator și parolă va apărea mesajul “Bine ati venit” și numele utilizatorului. Tot atunci butonul de login se modifică în butonul de ieșire care va deloga utilizatorul. Dacă logarea nu s-a făcut cu succes, va apărea mesaj de eroare.
Dacă utilizatorul este de tip administrator el va fi redirectat automat către pagina de administrare.
protected void btnLogin_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
string passMd5 = Utils.EncodeMd5(txtPassword.Text);
User user = UserDataAccess.SelectUser(txtUserName.Text, passMd5);
if (user != null)
{
Session["User"] = user;
IsAutenticate = true;
lblName.Text = user.UserName;
}
else
{
Type cstype = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsStartupScriptRegistered(cstype, "PopupLogin"))
{
String cstext = "alert('Utilizator sau parola invalida');";
cs.RegisterStartupScript(cstype, "PopupLogin", cstext, true);
}
}
}
}
Dacă un utilizator si-a uitat parola, aceasta poate fi recuperată folosind formularul “Ati Uitat Parola”. Pentru a recupera parola, utilizatorul va trebuii să-și introducă adresa de email. După apasarea butonului Trimite, el va primi un e-mail cu o nouă parolă generată aleator, dacă aceasta este găsită în baza de date. În caz contrar va primi un mesaj de eroare.
protected void btnSend_Click(Object sender, EventArgs e)
{
if (Page.IsValid)
{
// Verificare daca adresa este in baza de date
User user = UserDataAccess.SelectByEmail(txtEmail.Text);
if (user == null)
{
// Daca nu este gasita se va primi un mesaj de eroare
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsStartupScriptRegistered(cstype, "Eroare"))
{
string cstext = "alert('Adresa nu a fost gasita!');";
cs.RegisterStartupScript(cstype, "Eroare", cstext, true);
}
}
else
{
// Daca este gasita:
// generare parola noua
string newPass = RandomString();
// trimite mail cu parola noua
SendEmail(txtEmail.Text, newPass);
// update in baza de date
user.Password = Utils.EncodeMd5(newPass);
UserDataAccess.AddUpdate(SqlAction.Update, user.UserName, user.Password,
user.UserTypeId, user.UserId);
// mesaj cu succes
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsStartupScriptRegistered(cstype, "Succes"))
{
string cstext = "alert('Parola a fost schimbata cu succes. Ati primit un email nou cu parola modificata');";
cs.RegisterStartupScript(cstype, "Succes", cstext, true);
}
}
}
}
Creearea și salvarea biletului se face în mare parte folosind javascript și jQuery.
Funcția AddBet se apelează la click pe cota pariului și adaugă o linie nouă în biletul de pariuri, care conține codul pariului, numele echipei gazdă, numele echipei oaspete, tipul de pariu și cota, date pe care le primește ca și parametrii. La sfârșitul fiecărei linii există un buton cu care se va putea șterge pariul.
function AddBet(id, HostName, guestName, betTypeName, odd) {
var ids = $('#BetsId').val();
if (ids.indexOf("," + id + ",") < 0) {
var oddTemp = parseFloat($('#Odd').val().replace(",", "."), 10);
oddTemp = oddTemp * parseFloat(odd.replace(",", "."), 10);
if (oddTemp <= 9999.999) {
var row = "<tr id='" + id + "'><td>"
+ id + "</td><td>"
+ HostName + "</td><td>"
+ guestName + "</td><td>"
+ betTypeName + "</td><td>"
+ odd + "</td><td>"
+ "<input type='image' src='/Images/deletered.png' style='width : 15px; height : 15px;' onclick='DeleteBet(" + id + "," + odd.replace(",", ".") + ");return false;'/>" + "</td></tr>";
$('#BiletTable tr:last').after(row);
if (ids == "") {
ids = "," + id + ",";
}
else {
ids = ids + id + ",";
}
$('#BetsId').val(ids);
$('#Odd').val(oddTemp);
if (oddTemp > 1) {
$('#OddLbl').text(oddTemp);
}
else {
$('#OddLbl').text(0);
}
}
else {
alert('Miza prea mare!');
}
}
else {
alert("Acest meci se afla deja pe biletul de pariuri! Va rugam alegeti alt meci");
}
ComputeStake();
}
Funcția DeleteBet este apelată în momentul în care utilizatorul apasă pe butonul respectiv. Această funție va șterge pariul din bilet.
function DeleteBet(id, odd) {
$('#' + id).remove();
var ids = $('#BetsId').val();
ids = ids.replace("," + id + ",", "");
$('#BetsId').val(ids);
var oddTemp = parseFloat($('#Odd').val().replace(",", "."), 10);
oddTemp = oddTemp / parseFloat(odd, 10);
if (oddTemp < 0)
oddTemp = 0;
$('#Odd').val(oddTemp);
if (oddTemp > 1) {
$('#OddLbl').text(oddTemp);
}
else {
$('#OddLbl').text(0);
}
ComputeStake();
}
Funția ComputeStake calculează eventualul câștig în funție de cotele pariurilor și miza introdusă de utilizator.
function ComputeStake() {
var stakeTemp = $('#TicketStake').val().replace(",", ".");
if (stakeTemp != "") {
if ($.isNumeric(stakeTemp)) {
var stake = parseFloat(stakeTemp, 10);
var oddTemp = parseFloat($('#Odd').val().replace(",", "."), 10);
if (oddTemp == 1) {
$('#GainLbl').text(0);
}
else {
var gain = oddTemp * stake + "";
$('#GainLbl').text(gain.replace(".", ","));
}
}
else {
alert("not ok");
}
}
else {
$('#GainLbl').text(0);
}
SaveCookie();
}
Funția SaveCookie salvează în mai multe cookie-uri biletul de pariuri, utilizatorul putând naviga pe alte pagini fară a pierde datele respective. Aceste cookie-uri se păstrează o zi de la creearea lor.
function SaveCookie() {
$.cookie("Bilet", $('#BiletTable').html(), { path: '/', expires: 1 });
$.cookie("Stake", $('#StakeTable').html(), { path: '/', expires: 1 });
$.cookie("Odd", $('#Odd').val(), { path: '/', expires: 1 });
$.cookie("TicketStake", $('#TicketStake').val(), { path: '/', expires: 1 });
$.cookie("BetsId", $('#BetsId').val(), { path: '/', expires: 1 });
}
Următoarea funcție se apelează când utilizatorul apasă pe butonul Salvează. Aceasta stochează datele biletului într-un JSON pentru a putea fi trimise către server folosind un apel Ajax. Folosind un apel Ajax, pagina nu își face refresh iar datele ajung asincron la server pentru a fi salvate. Utilizatorul va primi un mesaj atât la succes cât și la eroare.
$(document).on("click", "#SaveTicket", function () {
var Data = JSON.stringify({ betsId: $('#BetsId').val(), stake: $('#TicketStake').val(), Odd: $('#Odd').val() });
$.ajax({
type: "POST",
url: "Home.aspx/SaveTicket",
data: Data,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () {
alert("Salvare cu succes");
},
error: function () {
alert("Eroare la salvarea biletului");
}
});
});
Funcția de mai jos se apelează automat la încărcarea paginii și folosește datele din cookie-uri pentru a genera biletul (dacă aceste date există).
$(document).ready(function () {
if ($.cookie('Bilet') != null) {
$('#BiletTable').html($.cookie("Bilet"));
}
if ($.cookie('Stake') != null) {
$('#StakeTable').html($.cookie("Stake"));
}
if ($.cookie('TicketStake') != null) {
$('#TicketStake').val($.cookie("TicketStake"));
}
if ($.cookie('Odd') != null) {
$('#Odd').val($.cookie("Odd"));
}
if ($.cookie('BetsId') != null) {
$('#BetsId').val($.cookie("BetsId"));
}
});
Capitolul IV: Testarea Sistemului
Testarea sistemului este necesară deoarece este un proces de validare și verificare a faptului că această aplicație corespunde business cerințelor și cerințelor tehnice care au ghidat proiectarea și implemtarea aplicației, de asemenea rulând și comportânduse corespunzător așteptărilor. Testarea este importantă pentru menținerea dar mai ales pentru îmbunătățirea unui program.
Sistemul a fost testat folosind următoarele tehnici de testare :
Testarea Black box – această tehnică de testare necesită cunoașterea comportamentului extern al programului pe baza specificațiilor. De asemenea testarea black box nu necesită cunoașterea structurii interne a programului sau cunoștinte despre modul în care a fost implementat programul.
Testarea White box – această tehnică de testare necesită acces la codul sursă și la structura programului.
Pentru început vom descrie testarea black box pentru a asimila viziunea utilizatorului și a verifica dacă programul face ce trebuie, apoi vom descrie testarea white box, pentru rafinarea testării și a verifica dacă programul face cum trebuie(precizie).
4.1 Testarea Black box
Caracteristici:
• se folosesc modele, formal sau informal, pentru descrierea softwareului sau a unei componente a acesteia.
• din aceste modele se extrag sistematic cazurile de test
• experiența oamenilor este utilizată pentru a crea cazuri de test: testeri, dezvoltatori.
Testarea statică black box nu necesită rularea programului și se va ocupa de testarea specificațiilor. Acest tip de testare are rolul de a detecta erorile înainte de faza de programare pentru a se evita propagarea acestora.
În cadrul testării specificațiilor s-a verificat dacă această aplicație respectă cerințele utilizatorilor. În urma acestei testări s-a constatat faptul că aplicația respectă aceste cerințe și nu există erori la nivelul acestora. De asemenea s-au verificat și specificațiile de securitate, acestea fiind precizate pentru logarea în sistem.
Testarea dinamică black box se bazează pe rularea aplicației proriu zise cu ajutorul unor cazuri de testare relevante. În această categorie de testare vom avea : testări de limită, teste de risc, testări asupra domeniilor de valori, testări asupra funcțiilor, teste de stres, testare pozitivă dar și testare negativă etc.
Testarea de limită s-a efectuat în pagina de înregistrare în câmpurile: Utilizator, Parolă, Nume, Prenume, Oras, Număr de telefon.
Pentru câmpul utilizator, trebuie să respecte următoarea validare (Numele de utilizator trebuie să aibă între 6 și 20 de caractere!), dacă vom introduce valoare mai mică de 6 sau mai mare de 20 va apărea mesajul de eroare de mai sus.
Figura 12: Validare utilizator
În tabelul de mai jos, s-au efectuat câteva teste de limită, pentru a se verifica dacă validările sunt corecte și funcționale.
Figura 13: Tabel validări
După efectuarea acestor teste s-au constatat unele neajunsuri, cum ar fi:
neexistența unor limite inferioare la anumite câmpuri
neexistența unei limite superioare la câmpul parolă
Testarea axată pe riscuri s-a efectuat în cazul încercării de logare pe platformă cu conturi invalide. S-au testat mai multe variante de logare utilizând username valid dar parolă incorectă, username invalid dar parola validă, username și parolă invalidă, introducând doar usernameul dar fara parolă. În urma acestor teste nu a rezultat nici o eroare, toate încercările de logare invalide fiind întâmpinate cu un mesaj care explică motivul pentru care nu s-a putut efectua logarea.
A doua testare axată pe riscuri s-a efectuat în cazul unui utilizator client în încercarea de a intra pe pagina de administrare (scrierea linkului direct in browser). Aplicația a funcționat corect, utilizatorul a fost redirecționat către pagina principală.
Altă testare axată pe riscuri s-a efectuat în cazul salvării unui bilet de pariuri, butonul de salvare a biletului apare doar după ce utilizatorul este logat.
Testarea pozitivă a constat în faptul că utilizatorul va avea un comportament rațional, aplicația reacționând fară erori.
În cazul testării negative, dacă un utilizatorul nu introduce date în câmpurile obligatorii aplicația funționează normal, fără a permite utilizatorului trecerea mai departe, fiind întâmpinat cu mesaje de avertizare pentru a urma pașii necesari.
De asemenea s-a efectuat și un test de stres. În condiții de stres (multe procese deschise în background, memorie Ram puțin disponibilă) aplicația se va încarca mai greu dar va funcționa fără erori.
4.2 Testarea White box
Testarea White box are următoarele caracteristici:
• Necesită cunoașterea completă a structurii programului și accesul la codul sursă.
• Pune accentul pe acoperirea prin testare a căilor, ramificațiilor și fluxurilor programului.
• Se are în vedere gradul în care cazurile de test acoperă sau execută codul sursă al programului.
• Tehnica utilizată cel mai des de programatori pentru testarea propriului cod.
• Se detectează erorile ce cauzează executarea unei alte căi a programului decât cea care trebuia să se execute.
De asemenea testarea white box se împarte în testare statică white box și în testare dinamică white box.
Testarea statică white box se bazează îndeosebi pe examinarea atentă a detaliilor procedurale, acest tip de testare are loc asupra codului sursă.
Este similară cu testarea statică black box, doar că în loc să aibă loc asupra specificațiilor are loc asupra documentelor de proiectare (detectând erori timpurii) și asupra codului sursă listat și comentariilor. [R.Buchmann, Testarea produselor soft, 44 curs 2011]
S-a verificat lizibilitatea codului sursă, acesta fiind bine structurat, neexistând erori în codul sursă, aplicația funcționând corespunzător. De asemenea s-a observat că în unele pagini lipsesc comentariile.
Testarea dinamică white box mai este numită și testare structurală deoarece se bazează pe structurile de programare folosite (și pe cunoștințele de programare ale testerului). Studiul codului sursă are un impact major asupra rafinării claselor de echivalentă (se vor cunoaște precis și nu doar intuitiv clasele de intrări tratate diferit de program). [R.Buchmann, Testarea produselor soft, 44 curs 2011]
Testarea dinamică white box pemite executarea unor cazuri de testare pe care utilizatorul nu s-ar gândi să le introducă.
Se va verifica funcționalitatea codului C sharp, a javascriptului dar și a formularelor. Codul componenței rulează normal neavând un comportament imprevizibil. De asemenea în cazul formularelor, la introducerea unor date invalide ex: nume format din cifre, număr de telefon format din litere, adrese de email nerecorespunzătoare, la apăsarea butonului de trimitere, aceste date nu vor fi trimise deoarece vor apărea validările corespunzătoare conținând mesaje de avertizare .
Aplicația de față a fost testată pe mai multe browsere (Mozilla Firefox, Google Chrome, Internet Explorer). În consecință, datorită faptului că aplicația a fost concepută și creată cu ajutorul platformei de dezvotare .Net Framework, aceasta are o partabilitate ridicată putand rula pe diferite sisteme de operare.
Aplicația s-a comportat normal pe fiecare dintre browserele amintite, nu s-a observat nici o diferență.
Concluzii
Lucrarea de față urmărește toate etapele de realizare a unei aplicații web: analiza, proiectarea, implementarea și testarea.
Consider că analiza și proiectarea aplicației sunt la fel de importante precum implementarea propriuzisă a acesteia, deoarece depind una de cealaltă.
Obiectul principal urmărit în această lucrare a fost realizarea unei aplicații web pentru a ajuta clienții să își creeze bilete de pariuri mult mai comod. Aceștia pot să își realizeze biletul direct de acasă alegând evenimentele mult mai ușor, putând să selecteze sporturile și competițiile din meniurile aferente. Utilizatorii care sunt înregistrați au avantajul de a-și salva fiecare bilet realizat, având astfel un istoric al acestora.
Pentru dezvoltarea acestei aplicații mediul de dezvoltare ASP .NET s-a dovedit un instrument foarte util, fiind în legătura directă cu Microsoft Sql Server, permițând o gestiune simplă a bazei de date.
Îmbunătățiri ulterioare
Această aplicație poate fi îmbunătățită atât la nivel de design cât și în ceea ce privește unele funcționalități precum :
Adăugarea de noi sporturi, competiții, îmbogățirea ofertei de pariuri existente
Creearea unui sistem de chat pentru clienți, cu ajutorul acestui chat se va răspunde mult mai repede și eficient la anumite probleme sau nelămuriri pe care le au clienții.
Adăugarea unei opțiuni pentru selectarea intervalului desfășurării evenimentelor
Introducerea unor statistici despre competițiile existente în ofertă, privind clasamente, rezultate directe, etc.
De asemenea se vor putea aduce îmbunătățiri în urma feedback-ului primit de la clienți.
Bibliografie
Avornicului, C. and M. Avornicului (2010). Managementul si proiectarea sistemelor informatice de gestiune. Cluj-Napoca, Risoprint.
Avornicului Constantin et. Al- Caiet de lucrari practice la managementul sistemelor informatice de gestiune, Editura -, 2011
Andrew Troelsen, Pro C# 5.0 and the .Net 4.5 Framework
Microsoft. http://msdn.microsoft.com/en-us/library/bb386976.aspx. 2012. http://msdn.microsoft.com/en-us/library/bb386976.aspx
Moca, M., Suport de curs, Cluj-Napoca,2013
R.Buchmann, Testarea produselor soft, curs 2011
Royce, W.W. Managing the Development of Large Software Systems. 1970.
Silaghi Gheorghe Cosmin, Dan Andrei Sitar-Tăuț (2012), Informatică economică de la A la X, Editura RISOPRINT, Cluj-Napoca
Silaghi Gheorghe Cosmin, Medii de dezvoltare, (laboratoare+silabus), 2012
http://www.w3schools.com/jquery
http://inf.ucv.ro/~popirlan/bd/laborator8.pdf
http://www.shiva.pub.ro/PDF/TEST/White_Box_Testing.pdf
http://www.shiva.pub.ro/PDF/TEST/Black_Box_Testing.pdf
www.swarm.cs.pub.ro/~sorina/college
Bibliografie
Avornicului, C. and M. Avornicului (2010). Managementul si proiectarea sistemelor informatice de gestiune. Cluj-Napoca, Risoprint.
Avornicului Constantin et. Al- Caiet de lucrari practice la managementul sistemelor informatice de gestiune, Editura -, 2011
Andrew Troelsen, Pro C# 5.0 and the .Net 4.5 Framework
Microsoft. http://msdn.microsoft.com/en-us/library/bb386976.aspx. 2012. http://msdn.microsoft.com/en-us/library/bb386976.aspx
Moca, M., Suport de curs, Cluj-Napoca,2013
R.Buchmann, Testarea produselor soft, curs 2011
Royce, W.W. Managing the Development of Large Software Systems. 1970.
Silaghi Gheorghe Cosmin, Dan Andrei Sitar-Tăuț (2012), Informatică economică de la A la X, Editura RISOPRINT, Cluj-Napoca
Silaghi Gheorghe Cosmin, Medii de dezvoltare, (laboratoare+silabus), 2012
http://www.w3schools.com/jquery
http://inf.ucv.ro/~popirlan/bd/laborator8.pdf
http://www.shiva.pub.ro/PDF/TEST/White_Box_Testing.pdf
http://www.shiva.pub.ro/PDF/TEST/Black_Box_Testing.pdf
www.swarm.cs.pub.ro/~sorina/college
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: Aplicatie Web In Pariuri Sportive (ID: 166717)
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.
