Funtionarea Aplicatiei “sa Invatam Impreuna”

Introducere

Aplicația mea se numește “Să învățăm împreună”, și după cum spune și numele este o aplicație realizată special pentru copii, prin care aceștia vor învăța, în primul rând literele alfabetului, cifrele de la 1 la 10 și nu în ultimul rând fructele și legumele. Pentru creearea acestei aplicații am folosit programul Microsoft Visual Studio C# 2010 Express, iar pentru realizarea bazei de date am folosit Microsoft Access 2010.

Pentru fiecare categorie în parte – Litere, Numere, Fructe și legume – am realizat câte un test de evaluare a cunoștințelor dobândite pe durata aplicației, la care copiii respectivi vor primi cîte o nota în funcție de răspunsurile corecte și cele incorecte. Notele vor putea fi vizionate în mod separat, atît de copii, cît și de un adult (un profesor, un părÎnte). Aplicația poate deschide și un cântecel pe fundal pentru distracția celor mici.

Baza de date cuprinde trei tabele, câte unul pentru fiecare test în parte.

Scopul aplicației mele este de a atrage copiii să învețe înca de la vîrste fragede, într-un mod cât mai distractiv, fără ajutorul profesorilor si stresul din scoli, și chiar de acasă.

Lucrarea de fata cuprinde trei capitole, în care am descris amănunțit cum funcționează aplicația “Sa învațăm împreună”.

În primul capitol am prezentat câteva aspecte teoretice legate de programul cu care am creeat aplicația – Microsoft Visual Studio C# 2010 Express.

În urmatorul capitol . capitol am realizat proiectarea aplicației cu ajutorul limbajului UML, limbaj care utilizează mai multe tipuri de diagrame pentru a simplifica înțelegerea aplicației în sine.
În ultimul capitol am arătat cum funcționează aplicația în mod practic.

Aplicația “Să învațăm împreună” este destinată copiilor între 5 si 7 ani.

Capitolul I : Limbajul C#

1.1. Caracterizarea limbajului C#

Creatorul limbajului C# a fost Anders Hejlsberg împreună cu mai mulți ingineri Microsoft.

C# este un limbaj alcătuit din aproximativ optzeci cuvinte cheie, dar și doisprezece tipuri de date predefinite.

Limbajul C# conține foarte multe facilități inovatoare, dintre care cele mai importante se axează pe suportul încorporat pentru componente software. C# conține facilități care implementează elementele care formează componentele software, în mod direct, precum:

proprietăți,

metode

evenimente.

Programarea orientată pe obiecte conține principiile ce urmează :

Încapsulare,

Polimorfism

Moștenire, care reprezintă elemente fundamentale pentru programarea C#.

Încapsulare

Încapsularea reprezintă mecanismul care combină codul și datele pe care le manipulează, păstrând integritatea lor față de interferența cu lumea exterioară. Încapsularea sau creearea de cutii negre, ascunde funcționalitatea proceselor.

Când codul și datele sunt încapsulate se creează un obiect. Într-un obiect, codul și datele pot fi:

publice sau

private.

Codul și datele private sunt accesibile doar în cadrul aceluiași obiect, iar codul și datele publice pot fi utilizate și din parți ale programului care există în afara obiectului.

Unitatea fundamentală de încapsulare este reprezentată prin clasă. Clasa specifică date și cod utilizate asupra datelor. Clasa definește forma unui obiect sau spunem că o clasă reprezintă o matriță, și un obiect reprezintă o instanță a clasei.

Polimorfism

Polimorfismul reprezintă calitatea ce permite interfeței să aibă acces la un grup de acțiuni. Termenul este derivat din limba greacă și are semnificația “cu mai multe forme”.

Conceptul de polimorfism este exprimat prin următoarea afirmație : “o singură interfață mai multe metode”.

Moștenirea

Moștenirea reprezintă procesul prin care un obiect poate să primească caracteristicile altui obiect. Deci, mecanismul moștenirii face posibil ca un obiect să fie o instanță a unui caz general.

Părțile componente ale unei aplicații C#

Un limbaj de programare cuprinde o serie de cuvinte cheie care au diferite semnificații. Un program utilizează aceste cuvinte cheie împreună cu alte cuvinte adiționale și simboluri.

Un program C# include următoarele:

spații,

cuvinte cheie C#,

literali și identificatori.

Literali

În C# literalii sunt valori fixate, reprezentate într-un mod cât mai accesibil utilizatorului. Spre exemplu, numărul 75 este un literal.

Literalii mai sunt numiți și constante. Literalii în C# pot fi de mai multe tipuri valorice. Literalii de tip caracter sunt incluși între apostrofuri (ex: ‘i’, etc.).

În ceea ce priveste constantele întregi, tipul fiecărei constante este cel mai mic tip întreg care permite memorarea sa, începand cu int. Un literal întreg poate fi de tip: int, uint, long sau ulong.

Constantele în virgulă mobilă sunt în mod implicit de tip double. Dacă dorim să specificăm o constantă de tip float adăugăm f sau F.

În C# întalnim un alt tip de constantă si anume tipul string. Un string, reprezintă un șir de caractere introduse între ghilimele. Pe langă caracterele obișnuite, o constanta de tip string poate conține mai multe secvențe escape.

Variabile

Variabila este o locație de memorie cu nume, căreia îi poate fi atribuită o valoare. Valoarea unei variabile se poate modifica pe parcursul programului.

Variabilele sunt declarate astfel:

tip nume_variabilă;

unde tip este tipul variabilei, iar nume_variabilă este numele variabilei.

Variabilele trebuie să fie declarate înainte de a fi folosite, de asemenea tipul variabilei nu poate fi modificat pe parcursul duratei sale de viață. Tipul variabilei determina operațiile permise asupra variabilei.

După declararea sa, variabila trebuie să fie inițializată. Inițializarea variabilei se poate face printr-o instrucțiune de atribuire:

nume_variabilă=valoare;

unde valoare reprezintă valoarea atribuita variabilei nume_variabilă.

De asemenea, inițializarea se face dinamic, putându-se utiliza orice expresie validă atunci când variabila este inițializată.

Operatori

Un operator este un simbol care îl ajută pe compilator să realizeze o anumită operație matematică sau logică.

Limbajul C# cuprinde patru categorii de operatori:

aritmetici,

pe biți,

relaționali și logici.

Operatori aritmetici

Limbajul C# cuprinde următorii operatori aritmetici:

+ (adunare),

– (scădere),

* (înmulțire),

/ (împarțire),

% (rest sau operatorul modulo),

++ (incrementare),

–(decrementare).

Când se aplică operatorul / asupra numerelor întregi, restul este trunchiat, de exemplu: 21/4 este egal cu 5.

Diferența față de C si C++ este următoarea: operatorul modulo se aplică atât tipurilor întregi cât și celor în virgulă mobilă.

Operatorii unari de incrementare si decrementare funcționează la fel ca în C.

Aceștia sunt:

x++ (forma postfixată),

++x (forma prefixată),

x– (forma postfixată),

–x (forma prefixată).

Operatori relaționali și logici

Operatorii relaționali reprezintă relațiile ce există între două valori, iar operatorii logici arată modalitațile în care se pot folosi valorile true si false.

Operatorii relaționali se utilizează de obicei cu cei logici. Rezultatele returnate de operatorii relaționali și cei logici sunt de tip bool.

Operatorii relaționali sunt următorii:

== (egal cu),

!= (diferit de),

> (mai mare decât),

< (mai mic decât),

>= (mai mare sau egal cu),

<= (mai mic sau egal cu).

Operatorii logici sunt urmatorii:

& (și),

| (sau),

^ (sau exclusiv),

|| (sau scurtcircuitat),

&& (și scurtcircuitat),

! (non).

În cazul operatorilor relaționali, operanzii trebuie să aparțină tipurilor pe care este definită relația.

În cazul operatorilor logici, operanzii trebuie să fie de tip bool.

Operatori pe biți

Operatorii pe biți efectuează operații asupra unuia sau mai multor biți dintr-o valoare. Operatorii pe biți sunt următorii:

& (și pe biți),

| (sau pe biți),

^ (sau exclusiv pe biți),

~ (complementare pe biți),

>>(deplasare pe biți la dreapta),

<<(deplasare pe biți la stânga).

Microsoft Visual Studio C# 2010 Express este un mediu de dezvoltare al aplicațiilor creeat de Microsoft. El oferă un set de instrumente precum :

editorul de cod,

compilatorul,

depanatorul,

instrumente pentru automatizarea procesului de compilare și altele.

Controale

Buton

Butonul este unul dintre cele mai utilizate controale în interfețele Windows. Deși are o formă grafică, și funcționează ca un buton real, el este în realitate un obiect al clasei Buton. Ca obiect, butonul oferă utilizatorului un set de proprietăți, un set de metode și va fi capabil să producă un set de evenimente.

Câteva din proprietăți sunt:

FlatStyle – realizează interfața butonului.

Enabled – realizează starea de activ/inactiv a butonului. Dacă această proprietate este false, butonul va apărea ca inactiv;

Image – utilizatorul poate să adauge o imagine ce va fi afișată pe buton;

ImageAlign – permite specificarea poziției imaginii în cadrul butonului;

TextAlign – permite specificarea poziției textului în cadrul butonului;

În ceea ce priveste evenimentele, în mod sigur evenimentul principal produs de buton este Click. Acesta se produce atunci când utilizatorul apasă butonul, sau când se apasă tasta Enter și butonul are focusul.

Controlul GroupBox

Este un control folosit pentru realizarea unor grupări de controale de același tip. Se prezintă ca un cadru dreptunghiular în interiorul căruia se realizează gruparea celorlalte controale. Dacă un set de controale de același tip sunt plasate în interiorul casetei de grupare, aceasta devine controlul părinte al grupului, în locul formei. Prin plasarea controalelor în interiorul casetei de grupare, un set de proprietăți ale acestora va fi modificat prin simpla modificare a proprietății respective.

Controlul Label

Este un control ce afișează etichete pentru precizarea funcției altor controale sau legături cu diferite adrese de Internet. Apar ca texte afișate pe ecran.

Câteva din proprietățile controlului, ce pot fi modificate de utilizator sunt:

BorderStyle – indică tipul chenarului care înconjoară controlul.

FlatStyle – indică modul în care e afișat controlul.

Image – permite adăugarea unei imagini ce va fi afișată în interiorul controlului.

ImageAlign – indică poziția imaginii afișată referitor la marginile controlului.

Text – indică textul afișat de către control.

TextAlign – indică poziția textului referitor la marginile controlului.

Controlul TextBox

Controlul TextBox este cel mai utilizat control pentru interfețele de intrare-ieșire. Prin modul său de funcționare, permite introducerea sau afișarea unor tipuri de date diferite, permițând și ascunderea acestora față de utilizator (parole).

Controalele TextBox permit manipularea textelor (copy, paste, delete, etc.).

Proprietăți:

CausesValidation – dacă este true, la primirea focusului controlul va genera două evenimente: Validating și Validated.

CharacterCasing – indică tipul literelor cu care sunt afișate textele în control: Lower – toate literele sunt mici, Normal – mici și majuscule, respectiv Upper – toate literele sunt majuscule.

MaxLength – precizează numărul maxim de caractere a textului din control. Dacă valoarea proprietății este 0, lungimea textului este limitată doar de capacitatea de memorie a calculatorului.

Multiline – controlul afișează o singură linie de text. Prin setarea proprietății, controlul va afișa mai multe linii.

PasswordChar – textul e afișat sub formă de parolă. Dacă este true, această proprietate nu funcționează.

ReadOnly – dacă este true, controlul va permite doar afișarea textelor, nu și introducerea lor.

ScrollBars –afișează bara de derulare.

SelectedText – indică textul selectat în interiorul controlului.

SelectionLength – indică lungimea textului selectat în control.

SelectionStart – indicele primului caracter din textul selectat în control.

Evenimente:

Enter, GotFocus, Leave, Validating, Validated, LostFocus – evenimente generate în ordinea în care au fost prezentate. Sunt evenimente de focus. Sunt generate de câte tarea proprietății, controlul va afișa mai multe linii.

PasswordChar – textul e afișat sub formă de parolă. Dacă este true, această proprietate nu funcționează.

ReadOnly – dacă este true, controlul va permite doar afișarea textelor, nu și introducerea lor.

ScrollBars –afișează bara de derulare.

SelectedText – indică textul selectat în interiorul controlului.

SelectionLength – indică lungimea textului selectat în control.

SelectionStart – indicele primului caracter din textul selectat în control.

Evenimente:

Enter, GotFocus, Leave, Validating, Validated, LostFocus – evenimente generate în ordinea în care au fost prezentate. Sunt evenimente de focus. Sunt generate de câte ori controlul de tip TextBox primește focusul, mai puțin Validating și Validated care se produc doar dacă controlul are proprietatea CausesValidation setată true.

KeyDown, KeyPress, KeyUp – sunt evenimente de taste. Permit monitorizarea modificărilor produse în textul din control prin intermediul tastaturii. KeyDown și KeyUp recepționează codul de scanare al tastei acționate. KeyPress recepționează în schimb codul ASCII al tastei.

Change – este generat de câte ori textul este modificat.

Controlul ListBox

Controlul se utilizează pentru a afișa seturi de stringuri, din care unul sau mai multe pot fi selectate la un moment dat.

Proprietățile clasei ListBox sunt:

SelectedIndex – arată indicele bazat pe 0 al elementului selectat în listă, sau a primului element selectat în listă, în cazul selecției multiple.

ColumnWidth – indică lățimea coloanelor, în listele cu coloane multiple.

Items – cuprinde toate elementele stocate în listă.

Multicolumn – precizează numărul de coloane din listă.

SelectedIndices – cuprinde toți indicii elementelor selectate din listă.

SelectedItem – cuprinde elementul selectat în listă dacă selecția este simplă, respectiv primul element selectat din listă pentru selecția multiplă.

SelectedItems – cuprinde elementele selectate din listă.

Sorted – dacă este true, elementele vor fi afișate în listă în ordine alfabetică.

CheckedIndices – cuprinde indicii elementelor din listă care au caseta checkbox bifată.

CheckedItems – cuprinde elementele din listă care au caseta checkbox bifată.

CheckOnClick – dacă este true, starea unui element se schimbă când asupra lui se efectuează click.

Metodele clasei:

ClearSelected() – șterge toate selecțiile din listă.

FindString() – caută primul string care va începe cu șirul specificat ca și parametru în listă.

GetSelected() – returnează valoarea care indică dacă un element este selectat.

SetSelected() – setează sau șterge selectarea unui element.

Câteva evenimente:

ItemCheck – starea de check a unui element se schimbă.

SelectedItemChanged – schimbarea indexului elementelor selectate.

I.1.1 Instalarea

Microsoft Visual Studio C# 2010 Express se poate descarca de pe site-ul Microsoft(https://www.visualstudio.com/en-US/products/visual-studio-express-vs).

1.2 Creearea unei aplicații

Se deschide mediul de programare (în acest caz Microsoft Visual Studio C# 2010 Express);

Din meniul File se selectează New Project. Am selectat mai departe Windows Form Application, am schimbat numele aplicației în eduaplication,click OK.

Fig.1.2.1 : Creearea unei aplicații

Se deschide o fereastră ce conține : în partea stângă Toolbox cu toate instrumentele necesare pentru lucrul cu aplicația, în partea dreaptă se deschide Solution Explorer unde apare aplicația împreună cu proprietăți, referințe, și ferestrele care fac parte din aplicație. În centru se va deschide automat prima fereastră numită Form1.cs.

Fig.1.2.2 : Form1.cs

Am schimbat denumirea ferestrei astfel : Properties -> Text -> Să învațăm împreună.

Am schimbat iconița ferestrei astfel : Properties -> Icon -> am adaugat o iconiță -> Open.

Fig.1.2.3 : Adăugarea unei iconițe

Am adăugat o imagine de fundal pentru Form1 astfel : Properties -> BackgroundImage -> Import -> am ales o imagine -> Open.

Fig.1.2.4 : Adăugarea unei imagini de fundal

Am setat localizarea paginii astfel : Properties -> Location -> 100;100, apoi am setat la Start Position -> Manual.

Am setat dimensiunea ferestrei astfel : Properties -> Size -> 500;480.

Astfel am creeat prima fereastră a aplicației.

Urmatoarele ferestre sunt asemanatoare, diferă doar faptul că acestea nu conțin imaginea de fundal ci doar au o culoare de fundal. Am schimbat culoarea ferestrei astfel : Properties -> BackColor -> Web -> PeachPuff.

Fig.1.2.5 : Schimbarea culorii ferestrei

Capitolul II : Proiectarea aplicației

UML este un limbaj de modelare bazat pe notații grafice folosit pentru a specifica,

vizualiza, construi și documenta componentele unui program.

UML este un limbaj cu ajutorul căruia se pot descrie modele. Un model

prezintă un anumit aspect al unui program și același model poate fi descris la diferite nivele de abstractizare. Fiecărui model îi corespunde o diagramă.

Tipurile de diagrame existente în UML sunt:

Diagrama cazurilor de utilizare

Diagrama de clase

Diagrame de interacțiuni

– Diagrama de secvență

– Diagrama de colaborare

Diagrama de stări

Diagrama de activități

Diagrame de implementare:

Diagrama de componente

Diagrama de plasare

Pentru dezvoltarea unui proiect este nevoie de mai multe diagrame UML precum:

în faza de analiză se utilizează diagrama cazurilor de utilizare și diagrama de activități;

în faza de proiectare se folosesc: diagrama de clase pentru precizarea structurii sistemului și diagramele de stări și interacțiune pentru descrierea comportamentului acestuia;

în faza de implementare se utilizează diagramele de implementare.

2.1 Diagrama cazurilor de utilizare

O diagramă use case este o diagramă folosită în UML pentru a modela aspecte dinamice ale programului împreună cu diagrama de activități, diagrama de stări, diagrama de secvență și diagrama de colaborare.

Deci, diagramele use case se utilizează pentru:

• pentru a modela contextul sistemului.

• pentru a modela cerințele sistemului: ce trebuie să facă sistemul.

Elementele componente ale unei diagrame use case sunt:

– use case-uri;

– actori;

– relațiile care se stabilesc între use case-uri, între actori și între use case-uri și actori.

Use case-uri

Un caz de utilizare reprezintă cerințele utilizatorilor. Reprezintă descrierea unei mulțimi de secvențe de acțiuni pe care un program le execută când interacționează cu actori și care conduc la obținerea unui rezultat de folos actorului. Un use case descrie ce face un program, dar nu precizează nimic despre cum este implementată o anumită funcționalitate.

Fiecare use case are un nume prin care se deosebește de celelalte use case-uri.

De regulă, numele sunt fraze verbale scurte care denumesc un comportament ce există în vocabularul sistemului ce trebuie modelat.

Relația de asociere este folosită pentru a exprima comunicarea între elementele pe care le unește.

Relația de dependență se poate stabili numai între use case-uri. Acest tip de relație modelează două situații:

• cazul în care un use case folosește funcționalitatea oferită de un alt use case – dependența de tip include;

• există variante ale aceluiași use case – dependența de tip extend .

În diagrama de mai jos am prezentat diagrama cazurilor de utilizare pentru aplicația Să învățăm împreună! în care am ilustrat operațiile ce pot fi executate de Utilizator și anume:

Pornește Melodie;

Vezi Catalog;

Acces Profesor;

Verifică Cunoștințe;

Accesează Numere;

Accesează Litere;

Accesează Fructe și Legume.

Fiecare operație include la rândul său alte operații dupa cum se vede în figura 2.1.

Fig. 2.1.1 : Diagrama cazurilor de utilizare

2.2 Diagrama de Clase

Diagrama de clase este folosită pentru a modela structura sistemului. Această diagramă cuprinde clase, obiecte și relațiile care se stabilesc între acestea.

Tipuri de relații:

• asociere;

• agregare;

• generalizare;

• dependență;

• realizare.

Clasele sunt folosite pentru a înregistra vocabularul sistemului ce trebuie dezvoltat. Clasele pot include:

• abstracții care fac parte din domeniul problemei;

• clase necesare la momentul implementării.

O clasa poate reprezenta entități software, entități hardware sau concepte. Modelarea unui sistem presupune găsirea elementelor importante din punctul de vedere celui ce

modelează.

Aceste elemente formează vocabularul sistemului.

Elementele unei clase sunt:

Nume;

Atribute;

Operații.

Specificatorii de vizibilitate au următoarea semnificație:

• + public;

• – private;

• # protected .

În figurile ce urmează am prezentat Diagrama de Clase pentru aplicația Să învățăm împreună! în care am ilustrat fiecare tabel din baza de date.

Prima figură ilustrează tabelul TestFructe, împreună cu câmpurile aferente și tipurile de date respective.

Fig. 2.2.1 : Diagrama de Clase-Tabel TestFructe

Această figură ilustrează tabelul TestNumere, împreună cu câmpurile aferente și tipurile de date respective.

Fig. 2.2.2 : Diagrama de Clase-Tabel TestNumere

Această figură ilustrează tabelul TestLitere, împreună cu câmpurile aferente și tipurile de date respective.

Fig. 2.2.3 : Diagrama de Clase-Tabel TestLitere

Această figură ilustrează tabelul Login, împreună cu câmpurile aferente și tipurile de date respective.

Fig. 2.2.4 : Diagrama de Clase-Tabel Login

2.3 Diagrama de obiecte

Diagramele de obiecte reprezintă obiecte și legături.

Ca în cazul diagramelor de clase, diagramele de obiecte reprezintă structura statică. Notația pentru diagramele de obiecte este asemănătoare cu cea pentru diagramele de clase. Elementele care sunt instanțe sunt subliniate.

Diagramele de obiecte sunt folosite în primul rând pentru a arăta un context – spre exemplu, înainte sau după o interacțiune. Totuși, ele sunt folositoare în a ajuta la înțelegerea structurilor de date complexe, cum sunt structurile recursive.

Obiectele sunt instanțe ale claselor. Obiectele au identitate și valori ale atributelor.

În figurile ce urmează am prezentat Diagrama de Obiecte pentru aplicația Să învățăm împreună! în care am ilustrat fiecare tabel din baza de date.

Prima figură ilustrează tabelul TestLitere, împreună cu câmpurile și instanțele (obiectele) aferente.

Fig. 2.3.1 : Diagrama de Obiecte-Tabel TestLitere

Această figură ilustrează tabelul TestNumere, împreună cu câmpurile și instanțele (obiectele) aferente.

Fig. 2.3.2 : Diagrama de Obiecte-Tabel TestNumere

Această figură ilustrează tabelul TestFructe, împreună cu câmpurile și instanțele (obiectele) aferente.

Fig. 2.3.3 : Diagrama de Obiecte-Tabel TestFructe

Această figură ilustrează tabelul Login, împreună cu câmpurile și instanțele (obiectele) aferente.

Fig. 2.3.4 : Diagrama de Obiecte-Tabel Login

2.4 Diagrama de Activități

Diagrama de activitate este un mod de modelare vizuală a fluxurilor. Cu ajutorul ei pot fi modelate foarte bine use case-urile, dar pot fi folosite pentru modelarea proceselor de business. În ceea ce privește notațiile, acestea sunt foarte asemănătoare cu cele din diagrama de stări deoarece diagramele de activitati sunt o variație a diagramei de stări.

O acțiune este un singur pas într-o activitate: un calcul, găsirea unor date, verificarea unor date. O acțiune se prezintă sub forma unui dreptunghi rotunjit în care este scris text (numele actiunii) în format liber.

Acțiunile prezentate într-o diagramă de activitate pot fi executate de diferite obiecte, care sunt active în același timp.

Tipuri de noduri într-o diagramă de activitate:

Noduri executabile: noduri acțiune și noduri „tratare excepție”;

Noduri de control: noduri de decizie, nod final, nod Fork, nod Join, nod inițial, nod unificare (merge) ;

Noduri obiect.

Tipuri de căi într-o diagramă de activitate:

Flux control;

Flux obiect.

În următoarea diagramă am prezentat Diagrama de Activități pentru aplicația Să învățăm împreună! în care am ilustrat componentele ferestrei Verificare Cunoștințe și anume : TestFructe, TestNumere, TestLitere, împreună cu instrucțiuni de utilizare ale testelor respective(Bifează/Completează Răspunsurile, Introducere Nume, Primește Notă, Vizualizează Notă pentru fiecare test în parte).

Fig. 2.4.1 : Diagrama de Activități

2.5 Diagrama de stări

Diagrama de stări modelează ciclul de viață al unui obiect prin stările sale și schimbările de stare care au loc pe parcursul vieții. Schimbările de stare sunt determinate de evenimente.

O diagrama de stări reprezintă un automat cu stări finite.

În următoarea diagramă am prezentat Diagrama de Stări pentru aplicația Să învățăm împreună! în care am ilustrat stările în care se poate afla acțiunea Înregistrare, și anume:

Înregistrare cu rol de Profesor;

Înregistrare cu rol de Jucător/Elev.

Fiecare rol are la rândul său anumite atribuții.

Profesorul poate vedea catalogul pentru toate testele și poate șterge note.

Jucătorul/Elevul poate vedea catalogul, porni melodia, verifica cunoștințele, învăța numerele, învăța literele, învăța fructele și legumele.

Fig. 2.5.1 : Diagrama de Stări

Capitolul III : Creearea aplicației

3.1 Legături între ferestre

Pe prima fereastră Form1 am adăugat o eticheta label1 cu denumirea aplicației. Atât această etichetă cat si întreaga fereastră va face legătura catre fereastra a doua Form2 cu ajutorul următorului cod :

private void label1_Click(object sender, EventArgs e)

{

Form2 f2 = new Form2();

f2.Show();

this.Hide();

}

Pentru întreaga fereastră am creeat un eveniment astfel : Properties -> Events -> Form1_Click.

private void Form1_Click(object sender, EventArgs e)

{

Form2 f2 = new Form2();

f2.Show();

this.Hide();

}

A doua fereastră conține următoarele elemente :

Patru PictureBox fiecare având câte o imagine aferentă pentru : Litere, Fructe și legume și Numere, iar ultima o imagine pentru sunet.

Două butoane : unul pentru Verificare Cunostințe și unul pentru accesul profesorului.

Cinci etichete : unul pentru catalog și restul contin denumiri pentru imagini.

Fig.3.1.1 : Form2.cs

Prima imagine Fructe și legume face legătura cu Form3.cs care conține o listă de fructe și legume astfel :

private void pictureBox1_Click(object sender, EventArgs e)

{

Form3 f3 = new Form3();

f3.Show();

this.Hide();

}

Fig.3.1.2 : Form3.cs

Fiecare imagine din Form3 are la rândul ei legătură către imaginea respectivă care conține denumirea fructului sau legumei în cauză. De exemplu, imaginii cu mărul îi corespunde următoarea fereastră :

Fig.3.1.3 : Form6.cs

A doua imagine Litere face legătura cu Form5.cs care conține o listă de fructe și legume astfel :

private void pictureBox2_Click(object sender, EventArgs e)

{

Form5 f5 = new Form5();

f5.Show();

this.Hide();

}

Fig.3.1.4 : Form5.cs

Fiecare imagine din Form5 are la rândul ei legătura către imaginea respectivă care conține denumirea literei în cauză. De exemplu, imaginii cu litera A îi corespunde următoarea fereastră :

Fig.3.1.5 : Form29.cs

A treia imagine Numere face legatura cu Form4.cs care conține o listă cu numere de la 1 la 10, astfel :

private void pictureBox3_Click(object sender, EventArgs e)

{

Form4 f4 = new Form4();

f4.Show();

this.Hide();

}

Fig.3.1.6 : Form4.cs

Fiecare imagine din Form4 are la rândul ei legătură către imaginea respectivă care conține denumirea numărului în cauză. De exemplu, imaginii cu numarul 1 îi corespunde următoarea fereastră :

Fig.3.1.7 : Form19.cs

A patra imagine cu nota muzicală face legătura cu fereastra Form60 în care am introdus un WindowsMediaPlayer, astfel :

private void pictureBox4_Click(object sender, EventArgs e)

{

Form60 f60 = new Form60();

f60.Show();

}

Fig.3.1.8 : Form60.cs

Această fereastră conține la rândul său două imagini : una pentru redare melodie și a doua pentru oprire melodie.

Eticheta Vezi Catalog face legătura cu Form59 care conține trei cataloage pentru fiecare test în parte cu numele și nota elevului respectiv. Legătura se face astfel :

private void label5_Click(object sender, EventArgs e)

{

Form59 f59 = new Form59();

f59.Show();

this.Hide();

}

Fig.3.1.9 : Form59.cs

Butonul Verificare cunostinte! face legătura cu Form55 care la rândul său conține trei butoane care fac referire către alte ferestre. Legătura se face astfel :

private void button1_Click(object sender, EventArgs e)

{

Form55 f55 = new Form55();

f55.Show();

this.Hide();

}

Fig.3.1.10 : Form55.cs

Fiecare buton din Form55 are la rândul său legătura către o fereastră în care sunt prezentate testele pentru fiecare categorie în parte. De exemplu, butonul Litere face trimitere la Form54.

Fig.3.1.11 : Form54.cs

Butonul Numere face trimitere la Form52.

Fig.3.1.12 : Form52.cs

Butonul Fructe si legume face trimitere la Form53.

Fig.3.1.13 : Form53.cs

Butonul Acces profesor face legătura cu fereastra Logare care conține o platformă de logare alcătuita din utiliyator și parolă și un buton de logare.

Fig.3.1.14 : Logare

La rândul său butonul Logare va face trimiterea pe Form62 care reprezintă Catalogul profesorului.

Fig.3.1.15 : Form62.cs

3.2 Creearea bazei de date

3.2.1 Creearea tabelelor

Baza de date pentru aplicația “Să învațăm împreună” a fost creeată cu ajutorul softului Microsoft Access 2010. Aceasta cuprinde patru tabele, câte unul pentru fiecare categorie de test în parte, și unul necesar pentru logarea profesorului.

Baza de date este denumită Utilizatori.acdb iar tabelele se numesc astfel : TabelFructe, TabelLitere, TabelNumere si Login.

În fiecare tabel se vor insera datele referitoare la numele și nota elevilor, rezultate în urma efectuării testelor.

Primele trei tabele contin următoarele date :

Id(cheie primară);

Nume;

Notă.

Fig.3.2.1 : TabelFructe

Tabelul Login cuprinde o singură înregistrare și are câmpurile:

Id(cheie primară);

Utilizator;

Parola.

Fig.3.2.2 : Login

3.2.2 Creearea legăturii dintre baza de date si aplicație

În Microsoft Visual Studio C# 2010 Express în meniul Data -> Add New Data Source adaug o nouă conexiune. Apare următoarea fereastră :

Fig.3.2.2.1 : Adăugarea conexiunii la baza de date

Selectez Database -> Next, apoi îmi apare o noua fereastră Choose a Database Model :

Fig.3.2.2.2 : Adăugarea modelului de baza de date

Selectez Dataset apoi click Next, și îmi va apărea următoarea fereastră :

Fig.3.2.2.3 : Adăugarea propriu-zisă a conexiunii

Dau click pe New Connection și îmi va apărea fereastra Add Connection. La Data Source adaug Microsoft Access Database File(OLE DB); apoi la Database file name adaug numele bazei de date, apoi click OK.

Îmi va apărea o nouă fereastră numită Choose Your Database Objects în care voi selecta tabelele, apoi dau click Finish și astfel am realizat conexiunea dintre aplicație și baza de date.

Fig.3.2.2.4 : Adăugarea tabelelor la conexiune

3.2.3 Inserarea datelor în baza de date

Pe fiecare fereastră care conține un test există o etichetă cu numele jucătorului, un textbox în care se va trece numele, două etichete pentru notă, și respectiv două butoane, unul pentru testare și celălalt pentru a vedea notele de la testul respectiv.

Fig.3.2.3.1 : Inserarea datelor în baza de date

Butonul Testează! funcționează astfel :

În primul rand, în cazul în care jucatorul nu și-a trecut numele înainte să apese pe buton, va apărea un mesaj de atenționare care îi va atrage atenția asupra faptului că trebuie să-și introduca numele pentru a continua.

if (String.IsNullOrEmpty(txtNume3.Text))

{

MessageBox.Show("Introduce-ti numele!");

}

Pentru fiecare întrebare există două variante. În cazul în care s-a selectat varianta corectă va apărea în dreptul întrebării o imagine ce exemplifică răspunsul corect. În caz contrar, va apărea în dreptul întrebării o imagine ce exemplifică răspunsul greșit.

if (chxRosie.Checked == true)

{

lbGresit.Visible = true;

}

else if (chxMar.Checked == true)

{

lbCorect.Visible = true;

n++;

}

else if ((chxRosie.Checked == false) && (chxMar.Checked == false)) // pt momentul în care nici una dintre variante nu e bifată

{

lbGresit.Visible = true;

}

Codul de mai sus presupune faptul că : dacă pentru prima întrebare s-a ales răspunsul Roșie va apărea imaginea pentru răspunsul greșit, însă dacă s-a ales răspunsul Măr va apărea imaginea pentru răspunsul corect. Dacă nu s-a ales nici o variantă de răspuns, va apărea imaginea pentru răspunsul greșit.

Codul de mai jos este folosit pentru momentul în care am selectat o variantă de răspuns, cealaltă varianta va fi blocată.

private void chxRosie_CheckedChanged(object sender, EventArgs e)

{

chxMar.Enabled = false;//imi dezactiveaza celalalt raspuns

}

private void chxMar_CheckedChanged(object sender, EventArgs e)

{

chxRosie.Enabled = false;

}

Butonul Vezi Note funcționează astfel :

Am creeat un eveniment Properties -> Events -> Click -> btnNote1_Click. La apăsarea butonului acest eveniment va insera numele scris în textbox împreună cu nota din etichetă în tabelul testului respectiv.

private void btnNote1_Click(object sender, EventArgs e)

{

if (txtNume3.Text != "")

{

string q2 = "Insert into TabelFructe (NUME,NOTA) values ('" + txtNume3.Text.ToString() + "','" + lbNota2.Text.ToString() + "')";

dosomething2(q2);

txtNume3.Text = null;

}

De asemenea, la apăsarea butonului acesta va trimite rezultatul pe o noua fereastră cu notele testului respectiv.

Form58 f58 = new Form58();

f58.Show();

this.Hide();

Se va deschide și conexiunea o dată cu apăsarea butonului.

private void dosomething2(String q2)

{

try

{

cn2.Open();

cmd2.CommandText = q2;

cmd2.ExecuteNonQuery();

cn2.Close();

}

catch (Exception e)

{

cn2.Close();

MessageBox.Show(e.Message.ToString());

}

}

Pentru fiecare fereastră în parte am introdus o casetă cu mesajul dacă vizitatorul dorește să părăsească aplicația astfel :

private void Form53_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult dialog = MessageBox.Show("Sunteti sigur ca doriti sa închideti aplicația ?", "Iesire", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

if (dialog == DialogResult.Yes)

{

Application.ExitThread();

}

else if (dialog == DialogResult.No)

{

e.Cancel = true;

}

}

Butonul Logare de pe fereastra cu logarea profesorului realizează următoarele :

Deschide conexiunea;

Selectează din tabelul Login utilizatorul și parola. Verifică dacă acestea sunt corecte, dacă da va afișa un mesaj prin care îl informează pe utilizator că datele sunt corecte și merge mai departe pe fereastra Form62; dacă nu va afișa un mesaj că datele nu sunt corecte și utilizatorul nu va avea acces la date.

Închide conexiunea.

Fig.3.2.3.2 :Butonul Logare

private void button1_Click_1(object sender, EventArgs e)

{

cn6.Open();

OleDbCommand cmd6 = new OleDbCommand();

cmd6.Connection = cn6;

cmd6.CommandText = "select * from Login where Utilizator='" + textBox1.Text + "'and Parola='" + textBox2.Text + "'";

OleDbDataReader dr6 = cmd6.ExecuteReader();

int numara = 0;

while (dr6.Read())

{

numara++;

}

if (numara == 1)

{

MessageBox.Show("Utilizator si parola corecte!");

Form62 f62 = new Form62();

f62.Show();

this.Hide();

}

else

{

MessageBox.Show("Utilizator si parola incorecte!");

}

cn6.Close();

}

3.3 Butonul cu instrucțiuni(HELP)

Am creeat butonul Help pentru a ajuta utilizatorii să utilizeze în mod corect aplicația. Am introdus toate aspectele necesare acestora pentru lucrul cu aplicația, pornind de la butoanele care trebuiesc apăsate și până la modalități de efectuare ale testelor.

Fig.3.3.1 : Butonul Help

Am creeat pe prima pagină un nou buton(încadrat cu roșu) care duce la fereastra cu regulile respective astfel:

Form61 f61 = new Form61();

F61.Show();

this.Hide();

Pagina Help este următoarea:

Fig.3.3.2 : Reguli de funcționare

3.4 Iconița aplicației

Aplicația Să învățăm împreună! are ca și formă de prezentare următoarea iconiță:

Fig.3.4.1 : Iconița aplicației

Am introdus iconița cu ajutorul proprietății Properties -> Icon de unde am selectat o imagine cu clopoțel descărcată în prealabil de pe Internet.

Apoi, la proprietatea Text am introdus scrisul: Să învățăm împreună.

Concluzii și propuneri

Lucrarea de față a fost creeată în scopul de a-i învata pe cei mici să numere de la 1 la 10, să cunoască literele alfabetului, să cunoască fructele și legumele cele mai comune, într-un mod distractiv, de acasă – fără să fie nevoie deplasarea la scoală sau plata de ore pregătitoare cu alți profesori și supravegheați de părinți.

Testele de final își propun verificarea memoriei și a cunoștințelor celor mici în urma metodelor de învațare studiate, dar și impulsionarea acestora de a învăța mai mult și de a deveni mai buni.

În concluzie, “Să învațăm împreună” este o aplicație practică, fiind de ajutor atât copiilor, cât și părinților.

Ca și propuneri, consider că pe viitor aplicația ar avea nevoie de o rază mai mare de utilizatori – copii peste 7 ani. De exemplu, la categoria Litere aș putea adăuga pe langă alfabet, monologuri și povești pentru ca utilizatorii să-și dezvolte capacitatea de citire. La categoria Numere, aș putea adăuga numerele pana la 100 și operații simple de calcul (adunare, scădere). La ultima categorie – Fructe și legume – aș adăuga mai multe tipuri din acestea iar la final aș adăuga noi teste distractive. Astfel aplicația ar putea deveni mai complexă și va putea fi folosită și în școli.

Bibliografie

https://www.youtube.co/watch?v=rnI1AQcmJnI – C# Use Check Box to Disable/Enable Button

http://stackoverflow.com/questions/11931770/get-integer-from-textbox – eroare casuta goala

https://www.youtube.com/watch?v=MPBlsJpRFqY – conexiune BD,inserare in BD

http://stackoverflow.com/questions/10714124/missing-semicolon-at-end-of-sql-statement – corectare greseala in insert int tabel …

https://www.youtube.com/watch?v=iUAOzHljBoQ – media player

Herbert Schildt, C#, Ed.Teora (traducere, 2002);

Karli Watson et al., Beginning Visual C#, Wrox Press Ltd. (2002);

Karli Watson, Beginning C# 2005 Databases, Wiley Publishing, Inc. (2006);

Kris Jamsa si Lars Klander, Totul despre C si C++ Manualul fundamental de programare in C si C++, Ed. Teora, (traducere 2007).

https://drive.google.com/viewerng/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx1bWx1cGd8Z3g6NDViMjNhYWIzOWI2MjQ0Nw – Introducere UML

https://drive.google.com/viewerng/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx1bWx1cGd8Z3g6NTcyYzBhZjk2ODE1YTk2OA – Diagrama cazurilor de utilizare

http://www.techit.ro/tutorial_uml_3.php – Diagrama de activitati

https://drive.google.com/viewerng/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx1bWx1cGd8Z3g6MTRkNDRkNmQxZWI5ODQwNg – Diagrama de clase

http://users.utcluj.ro/~jim/OOPR/Resources/Laboratory/DiagrameDeObiecte.pdf

http://ro.scribd.com/doc/24775779/Diagrame-de-Stare#scribd

GroupBox/ Label/ LinkLabel/ TextBox

Bibliografie

https://www.youtube.co/watch?v=rnI1AQcmJnI – C# Use Check Box to Disable/Enable Button

http://stackoverflow.com/questions/11931770/get-integer-from-textbox – eroare casuta goala

https://www.youtube.com/watch?v=MPBlsJpRFqY – conexiune BD,inserare in BD

http://stackoverflow.com/questions/10714124/missing-semicolon-at-end-of-sql-statement – corectare greseala in insert int tabel …

https://www.youtube.com/watch?v=iUAOzHljBoQ – media player

Herbert Schildt, C#, Ed.Teora (traducere, 2002);

Karli Watson et al., Beginning Visual C#, Wrox Press Ltd. (2002);

Karli Watson, Beginning C# 2005 Databases, Wiley Publishing, Inc. (2006);

Kris Jamsa si Lars Klander, Totul despre C si C++ Manualul fundamental de programare in C si C++, Ed. Teora, (traducere 2007).

https://drive.google.com/viewerng/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx1bWx1cGd8Z3g6NDViMjNhYWIzOWI2MjQ0Nw – Introducere UML

https://drive.google.com/viewerng/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx1bWx1cGd8Z3g6NTcyYzBhZjk2ODE1YTk2OA – Diagrama cazurilor de utilizare

http://www.techit.ro/tutorial_uml_3.php – Diagrama de activitati

https://drive.google.com/viewerng/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx1bWx1cGd8Z3g6MTRkNDRkNmQxZWI5ODQwNg – Diagrama de clase

http://users.utcluj.ro/~jim/OOPR/Resources/Laboratory/DiagrameDeObiecte.pdf

http://ro.scribd.com/doc/24775779/Diagrame-de-Stare#scribd

GroupBox/ Label/ LinkLabel/ TextBox

Similar Posts