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

Similar Posts

  • Inovatie Si Design In Grupa Articolelor Sportive

    Disertație Inovatie si design in grupa articolelor sportive CUPRINS Introducere Capitolul I: Noțiuni generale privind inovația și designul.. 1.1 Aspecte teoretice despre design și estetică 1.2 Influența inovației asupra designului Capitolul II: Prezentarea SC Champion Production SRL 2.1 Scurt istoric 2.2 Obiect de activitate 2.3 Structuri organizatorice și de management 2.4 Performanțe și perspective Capitolul…

  • Stimularea Creativitatii LA Prescolari Prin Jocuri Si Activitati Liber Alese

    STIMULAREA CREATIVITĂȚII LA PREȘCOLARI PRIN JOCURI ȘI ACTIVITĂȚI LIBER ALESE CUPRINS REZUMAT INTRODUCERE CAPITOLUL 1: PARTICULARITĂȚILE PSIHICE ALE COPIILOR CU VÂRSTĂ PREȘCOLARĂ 1. 1. DEZVOLTAREA FIZICĂ ȘI PSIHICĂ A COPILULUI PREȘCOLAR 1. 2. PREȘCOLARITATE ȘI SOCIALIZARE 1. 3. ACTIVITATEA ÎN GRĂDINIȚĂ, SCOP ȘI MIJLOACE ALE CUNOAȘTERII PREȘCOLARITĂȚII 1. 3. 1. Grădinița – mediu educogen 1….

  • Dezvoltarea Calitatii Motrice Rezistenta Prin Mijloace Specifice Jocului de Fotbal la Nivelul Unei Echipe de Juniori

    DEZVOLTAREA CALITĂȚII MOTRICE REZISTENȚĂ PRIN MIJLOACE SPECIFICE JOCULUI DE FOTBAL LA NIVELUL UNEI ECHIPE DE JUNIORI i ( 17 – 18 ANI ) PLANUL LUCRĂRII CAP. 1 INTRODUCERE…………………………………………………………. .4 1.1. Prezentarea temei………………………………………………….…………………….. 4 1.2. Motivele alegerii temei..…………………………………………………….. 4 1.3. Gradul de actualitate al temei…..………………………………………….. 5 1.4. Scopul lucrării…….………………………………..……………………….. . 6 CAP. 2 FUNDAMENTAREA TEORETICO-METODICĂ……………………. ..8…

  • Invatarea Prin Cooperare In Scopul Optimizarii Performantelor Scolare ale Elevilor

    Argument În România învățământul se confruntă cu probleme din ce în ce mai complexe, care necesită un nou mod de gândire, idei noi, informații noi și bineînțeles, un nou mod de a învăța. Una dintre temele abordate frecvent de către teoreticienii și practicienii educației o reprezintă învățarea prin cooperare. Învățarea prin cooperare este o metodă…

  • Finalizarea Actiunilor de Atac In Jocul de Fotbal

    MOTTO: “Echipa de fotbal exprima tactica tehnicii de care sunt capabili jucatorii sai .” ( ION V. IONESCU) CUPRINS Capitolul 1……………………………………………….pag.5 Introducere……………………………………………….pag.5 Motivarea alegerii temei…………………………………pag.8 Ipoteza cercetării…………………………………………pag.9 Scopul cercetării…………………………………………pag.10 Sarcinile cercetării.……………………………………..pag.11 Capitolul 2—Fundamentarea teoretico-metodică…….pag.12 Finalizarea acțiunilor de atac in jocul de fotbal……………………………….pag12 Tactica …………………………………………………..pag30 Capitolul 3……………………………………………….pag.32 Sistematizarea tacticii…………………………………..pag.32 Fazele și formle atacului În jocul de…

  • Educatia Fizica, Sportul Si Cultura Organizationala In Romania

    СUPRINS INTRODUCERE……………………………………………………………………………………………………………4 СΑРITΟLUL I. ΑСTUΑLITΑTΕΑ ȘI МΟTIVΑȚIΑ TΕМΕI. МΕTΟDΟLΟGIΑ ΟRGΑΝIΖĂRII ЅTUDIULUI………………………………………………………………………………………….7 1.1. ΑСTUΑLITΑTΕΑ TΕМΕI………………………………………………………………………………………….7 1.2. МΟTIVΑRΕΑ ΑLΕGΕRII TΕМΕI…………………………………………………………………….11 1.3. ЅСΟРUL ЅTUDIULUI……………………………………………………………………………………………..12 1.4. ΟΒIΕСTIVΕLΕ ЅTUDIULUI……………………………………………………………………………………12 1.5. IРΟTΕΖΕLΕ LUСRĂRII…………………………………………………………………………………………13 1.6. ЅUΒIΕСȚI ȘI LΟС…………………………………………………………………………………………………..14 1.7. ΕTΑРΕLΕ ЅTUDIULUI…………………………………………………………………………………………….14 1.8. МΕTΟDΕ DΕ СΕRСΕTΑRΕ . UTILIΖΑTΕ.ЅTUDIUL DΟСUМΕΝTΑR………………………15 CΑРITΟLUL II. FUΝDΑΜΕΝTΑRΕΑ TΕΟRΕTICĂ Α LUCRĂRII…………………………….18 2.1. CΕ ÎΝSΕΑΜΝĂ CULTURΑ ΟRGΑΝIΖΑȚIΟΝΑLĂ?………………………………………………..18 2.2. STRUCTURI SРΟRTIVΕ…