Sunteți pe pagina 1din 152

UNIVERSITATEA DIN BUCURETI

DEPARTAMENTUL PENTRU PREGTIREA PERSONALULUI DIDACTIC

LUCRARE METODICO-TIINIFIC
PENTRU OBINEREA GRADULUI DIDACTIC I

TEMA: ASPECTE TIINIFICE I METODICE


ALE PREDRII ELEMENTELOR PROGRAMRII
ORIENTATE PE OBIECTE

Coordonator,
Lector Dr. Mihail Cherciu,
Unversitatea din Bucureti, Facultatea de Metematic i Informatic

Autor,
Profesor informatic Florin Petre,
Colegiul Naional Nicolae Iorga Vlenii de
Munte

1
BUCURETI 2014

CUPRINS
1. PROGRAMARE ORIENTAT PE OBIECTE ............................................................... 5
1.1 PRINCIPII ALE POO N LIMBAJUL C# ..................................................................... 5
1.2 CLASE ............................................................................................................................ 6
1.2.1 Definirea claselor ....................................................................................................... 6
1.2.2 Declararea datelor; ..................................................................................................... 6
1.2.3 Metode. Parametrii metodelor ................................................................................... 7
1.2.4 Suprancrcareametodelor: ........................................................................................ 8
1.2.5 Creareaobiectelor: ...................................................................................................... 8
1.2.7 Constructori.............................................................................................................. 10
1.2.8 Destructori................................................................................................................ 12
1.2.9 Membrii statici ai unei clase .................................................................................... 12
1.2.10 Proprieti ................................................................................................................. 13
1.2.11 Indexatori ................................................................................................................. 14
1.2.12 Clase pariale ............................................................................................................ 15
1.2.13 Clase interioare ........................................................................................................ 16
1.2.14 Probleme rezolvate................................................................................................... 17
1.2.15 Probleme propuse..................................................................................................... 30
1.3 DERIVAREA CLASELOR (MOTENIRE) ............................................................... 34
1.3.1 Utilizarea cuvntului cheie protected......................................................................... 37
1.3.2 Constructorii claselor derivate ................................................................................... 38
1.3.3 Probleme rezolvate..................................................................................................... 40
1.3.4 Probleme propuse...................................................................................................... 45
1.4 INTERFA ................................................................................................................ 48
1.5POLIFORMISM ............................................................................................................ 50
2 TRSTURI ALE LIMBAJULUI C# ............................................................................ 53

2
1.1 DELEGARE ................................................................................................................. 53
2.3CLASA GENERIC ..................................................................................................... 54
2.4 Tratarea excepiilor ...................................................................................................... 55
2.5CLASA STRING ........................................................................................................... 57
2.5.1 Operaii i metode ...................................................................................................... 57
2.6FIIERE TEXT .............................................................................................................. 61
3 CONTROALE ................................................................................................................. 69
3.1 Controlul Button .......................................................................................................... 69
3.2 Control Label ............................................................................................................... 71
3.4 Controlul TextBox ....................................................................................................... 72
3.7 Controlul ListBox ........................................................................................................ 77
3.8 Controlul PictureBox ................................................................................................... 79
3.9 Controlul ProgressBar .................................................................................................. 81
3.10 Controlul Timer .......................................................................................................... 81
3.11 Clasa ImageList .......................................................................................................... 84
3.12 Controlul ListView ..................................................................................................... 85
3.13 Controlul TreeView .................................................................................................... 87
3.14 Controlul WebBrowser ............................................................................................... 89
3.16 Probleme rezolvate...................................................................................................... 90
3.17 Probleme propuse...................................................................................................... 113
4 CLASA GRAPHICS ...................................................................................................... 114
4.1 Principalele metode ale clasei Graphics ..................................................................... 114
4.2 Pensule pentru umplerea formelor .............................................................................. 116
4.3 Desenarea stringului.................................................................................................... 116
5. FISIERE XML .............................................................................................................. 117
5.1 Clasa XMLDocument ................................................................................................. 117
5.2 Clasa reader ................................................................................................................. 124
5.3 Probleme propuse........................................................................................................ 125
6. BAZE DE DATE RELAIONALE ............................................................................. 125
6.1 Tehologia ADO.NET. ................................................................................................. 126

3
6.2 Arhitectura ADO.NET ................................................................................................ 126
6.2.1 Furnizorii de date ..................................................................................................... 126
6.2.2 Seturile de date ......................................................................................................... 127
6.3 Aplicaii cu baze de date n modelul conectat ............................................................ 127
6.4 Aplicaii cu baze de date n modul deconectat ............................................... 132
6.5 Limbaj SQL ................................................................................................................ 134
6.5.1 Interogare simpl ..................................................................................................... 134
6.6.2 Interogare multipl ................................................................................................... 136
6.7 Contrlolul DataGridView............................................................................................ 137
6.9 Proceduri stocate ......................................................................................................... 144
7 METODIC ................................................. ERROR! BOOKMARK NOT DEFINED.
7.1 Finalitate ........................................................................ Error! Bookmark not defined.
7.1.1 Finalitile sistemului de nvmnt .......................... Error! Bookmark not defined.
7.1.2 Finalitile procesului de nvmnt .......................... Error! Bookmark not defined.
7.2 Forme ale educaiei ........................................................ Error! Bookmark not defined.
7.3 Proiectarea activitilor didactice ................................... Error! Bookmark not defined.
7.4 Strategii didactice........................................................... Error! Bookmark not defined.
7.4.1 Principiile didactice .................................................... Error! Bookmark not defined.
7.4.2 Metode ........................................................................ Error! Bookmark not defined.
7.4.3 Mijloace de nvmnt ............................................... Error! Bookmark not defined.
7.5.4 Forme de organizare ................................................... Error! Bookmark not defined.
7.6 Lecia.............................................................................. Error! Bookmark not defined.
7.7 Evaluarea........................................................................ Error! Bookmark not defined.
7.7.1 Funciile evalurii; ...................................................... Error! Bookmark not defined.
7.7.2 Metode complementare de evaluare ........................... Error! Bookmark not defined.
7.8 Cercetare pedagogic ..................................................... Error! Bookmark not defined.
-ANEXA1 ........................................................ ERROR! BOOKMARK NOT DEFINED.
-ANEXA2 ........................................................ ERROR! BOOKMARK NOT DEFINED.
-BIBLIOGRAFIE ............................................................................................................. 149

4
1. PROGRAMARE ORIENTAT PE OBIECTE
1.1 Principii ale POO n limbajul C#
Limbajul C# a fost dezvoltat n cadrul firmei Microsoft. Prima versiune larg
distribuit a fost n anul 2000. C# deriv din limbajul C++. Calitile limbajului: limbaj
simplu, modern, cu productivitate mare n programare, orientat pe obiecte, care permite
realizarea de aplicaii industriale
Principii ale POO n limbajul C#
Abstractizare este capacitatea de a extrage de la un obiect din lumea real numai
informaiile necesare i de a obine concepte virtuale. Obiectele pot fi obiecte fizice sau
obiecte conceptuale.
Incapsularea este capacitatea de nglobare i ascundere de date. Sunt vizibile n
exterior numai datele publice. Starea obiectului este definit att de datele publice ct i
de datele ascunse. Modificrile strii obiectului din exterior se poate face cu ajutorul
metodelor publice. Incapsularea mreste sigurana i fiablitatea programelor deoarece
datele nu se pot modifica accidental din exterior.
Mostenirea este capacitatea unei clase de a conine toate datele i metodele
superclasei sale. Clasa mai conine i alte date i metode. C# , fa de limbajul C++ ,
elemin motenirea multipl reliznd o versiune mai cursiv.

5
Poliformismul este capacitatea unei clase de a conine date i metode ale
superclasei, anumite metode le redefinete, n felul acesta permite obiectului s ia mai
multe stri. O anumit opraie se realizeaz diferit n clase diferite. n C# metodele nu
sunt implicit virtual i se elimin astfel riscul de a scrie metode accidental sau implicit.

1.2 CLASE

Clasa este un tip de date care modeleaz obiecte din lumea real sau obiecte
abstracte. Clasele ncapsuleaz date i funcii care opereaz cu aceste date. Clasa
cuprinde:
Membri care sunt variabile care rein informaii despre obiect;
Metode care sunt funcii membre ale clasei;
Clasa poate avea un numr orict de mare de cmpuri i metode.

1.2.1 Definirea claselor


Sintaxa este:
class nume_clasa
{
// date
[modificator de acces] [tip] [nume];
// metode
[modificator de acces] [tipRetur] [numeMetoda(parametri formali)]
}
Exemplu
public class Elev { } unde:
- publicmodificator de acces;
- class cuvnt rezervat pentru noiunea de clas;
- Elev numele clasei;
- { } corpul clasei.
1.2.2 Declararea datelor; [modificatorAcces] tipData nume;

unde:
- modificatorAcces-este opional. Implicit este de tip private;

6
- tipData- reprezint tipul datei. Datele pot fi de orice tip inclusiv clase;
- nume- numele datei;
Datele pot fi: a) constante, b) cmpuri
Constantele- sunt date care nu se modific ntr-un program i se declar prin
cuvntul const. Sintaxa este: [modificator de acces] const tip identificator =
expresieConstant; Constanta mai poate avea ca modificator de acces: new, public,
protected,internal, protected internal, private.
Exemplu
class Constante
{
public const int MAX = 100;
const string SALUT = "Buna ziua!";
}
Cmpul- reprezint o dat variabil a unei clase. n afar de modificatorii
menionai mai sus, se mai adaug: new, readonly, volatile, static. Opional, cmpurile
pot fi iniializate cu valori compatibile. Un astfel de cmp se poate folosi fie prin numelui
su, fie folosind numele clasei sau al obiectului.

1.2.3 Metode. Parametrii metodelor


Metoda este o funcie i definete o aciune. Funiile pot i funcii care returneaz
valori dar i funcii void. Sintaxa este:
[modificatorAcces] tipReturnat numeMetoda([parametri])
{
corp_Metoda
}
Parametrii metodelor:
-parametru trasmis prin valoare este un parametru care este transmis ca argument al
unei metode.

7
-parametru trasmis prin referin este un parametru care are valoare sau nu are la apel, se
modific n timpul execuiei metodei i se vede dup apelul metodei. Asupra
parametrilor formali se aplic modificatorul ref.
Exemplu:
public void schimb (ref int a, ref int b)
{int aux;
aux=a;a=b;aux=b;
}
Pentru tablouri modificatorul este params.
Exemplu: public void vector(params int []v);

1.2.4 Suprancrcarea metodelor:


Se pot defini una sau mai multe metode cu acelai nume n aceeai clas, cu
condiia ca numrul i/sau tipul parametrilor formali s fie diferit.
Exemplu:
class a
{
void f(int a){}
void f(char s){}
void f (int a, int b){}
}
1.2.5 Crearea obiectelor:
Se definete o clas:
class x
{
//membriiclasei
}
Crearea unui obiect reprezint instanierea unei clase i are sintaxa:
x ob=new a();
pentru a accesa membrii clasei se folosete sintaxa: ob.membru;
1.2.6 Modificatorii de acces sunt:

8
1. public o metod sau un membru de tip public are vizibilitate n afara clasei;
2. private este modificatorul de acces care se vede doar n interiorul clasei;
3. protected este modificatorul de acces care se vede doar n clasele motenite;
Exemplu: Definii o clas de tip public care conine un membru de tip public. Membrul
poate fi accesat.
public class a
{
public int i = 20;
}
class Program
{
static void Main(string[] args)
{
a x = new a();
Console.WriteLine(x.i);
}
}
Exemplu: Clasa este public, membrul i este private, deci nu este accesat din afara clasei
public class a
{
int i = 20;
}
class Program
{
static void Main(string[] args)
{
a x = new a();
Console.WriteLine(x.i);
}
Exemplu: Clasa este public, membrul i este protected, deci nu este acccesat.

9
public class a
{
protected int i = 20;
}
class Program
{
static void Main(string[] args)
{
a x = new a();
Console.WriteLine(x.i);
}
}

1.2.7 Constructori
Constructorul este o funcie care face parte din definiia clasei. Costructorul este
folosit doar pentru crearea de obiecte.
Caracteristicile constructorilor:
pot exista mai muli constructori care se pot diferenia prin lista de parametri;
au acelai nume cu cel al clasei;
nu au tip de retur, nici mcar void;
pot fi suprancrcai ca orice metod;
constructorii nu pot fi motenii;
Dac o clas nu are definit niciun constructor, se va realiza automat constructor
implicit, adic constructorul fr parametri al clasei de baz.
Exemplu: S se defineac o clas care nu conine constructor. Ea va conine un membru
numr ntreg i o metod care returmeaz o valoare ntreag.
class a
{
public int i = 123;
public int suma(int i)
{
10
return i + 33;
}
}
class Program
{
static void Main(string[] args)
{
a ob=new a();//contructorul este implicit
Console.WriteLine(ob.i+" "+ob.suma(i));
}
}
Exemplu: S se defineasc o clas care conine un constructor fr parametru.
class contructor
{
public int n;
public contructor() { }//constructorul clasei
}
class Program
{
static void Main(string[] args)
{
contructor o = newcontructor();
Console.WriteLine(o.n);
}
}
Exemplu: S se defineasc o clas care conine constructor cu parametru i un membru.
namespace ConsoleApplication1
{
class contructor
{

11
public int n;
public contructor(int i) { n = i; }
}
class Program
{
static void Main(string[] args)
{
int i = 234;
contructor o = newcontructor(i);
Console.WriteLine(o.n);
}
}

1.2.8 Destructori
Destructorul clasei distruge instanele unei clase. Numele destructorului coincide cu
numele clasei, fiind precedat de caracterul ~. Destructorul nu are parametri i nici
modificator de acces. Destructorul este apelat automat. ntr-o clas exist un singur
destructor. Destructorul nu poate fi motenit.

1.2.9 Membrii statici ai unei clase


n mod implicit metodele i cmpurile unei clase sunt nestatice. Pentru a apela un
membru al unei clase este nevoie s se creeze un obiect de tipul clasei. Metodele statice
se pot apela n lipsa obiectelor. Ele au comportamentul unor funcii globale care sunt
vizibile doar n cadrul clasei. Definirea unui membru static se face folosind modificatorul
de acces static. Sintaxa: static tip nume;
Accesarea unui membru sau metod static se face dupa sintaxa :
Nume_clasa.nume_membru;
Exemplu: Definii o clas care conine un membru static i o metod static.
classa
{
public static int n=199;//membru static
public static void afis()//metoda
12
{
Console.WriteLine("metoda statica");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(a.n);
a.afis();
}
}

1.2.10 Proprieti
Sunt membri ai unei clase i sunt folosite pentru a accesa date membru de tip
private far s se ncalce principiul proteciei datelor. Ele conin dou metode de acces:
1. get care are caracteristicile:
nu are parametri;
are tip de retur de acelai tip cu tipul clasei;
2. Set care are caracteristicile:
Are un parametru implicit numit value care este de tipul clasei i care
reine valoarea cmpului gestionat de ctre proprietate;
Are void ca tip de retur;
Proprieti statice

Atunci cnd este nevoie s se acceseze cmpuri statice de tip private proprietile
se pot declara de tip static. Proprietile statice acceseaz doar date membru de tip static.
class pro_static
{
static int n = 123;
public static int pro
{
13
get { return n; }
set { n = value; }
}
}
class Program
{
static void Main(string[] args)
{
Console.Write(pro_static.pro);
}
}

1.2.11 Indexori
Permit unei clase s fie indexate la fel ca la un tablou. Sintaxa este asemntoare cu
a proprietilor. Numele unui indexor este totdeauna this. Poate returna mai muli membri
ai clasei. El nu poate fi declarat static.
Sintax
tipReturmat this [int index]
{
get
{
//se returneaz valoarea prin index
}
set
{
//se modific valoarea prin index
}
}
Exemplu
public class f
{

14
string[] v = new string[10];
int n;
public f(int a)
{ n = a; }
public string this[int index]
{
get
{
return v[index];
}
set
{
v[index] = value;
}
}
class Program
{
static void Main(string[] args)
{
f ob = new f(6);
for (int i = 0; i <= 5; i++)
ob[i] = i.ToString();
for (int i = 0; i <= 5; i++)
Console.WriteLine(ob[i] + " ");
}
}

1.2.12 Clase pariale


Se poate fragmenta o clas n mai multe blocuri. Pentru aceasta, definiia clasei
conine cuvntul cheie parial. Compilatorul va uni definiiile pariale i instaniaz
obiect de tipul clasei.

15
Aplicaie:Folosind constructor i clase pariale, se va construi o clas care conine
doi membri i dou metode:
- O metod afieaz suma celor doi membri;
- O metod afieaz produsul lor.
public partial class A
{
public int x,y;
public A (int a,int b)
{x=a;y=b;}
public int suma ()
{ return x+y;}
}
public partial class A
{
public int produs()
{ return x * y; }
}
class Program
{
static void Main(string[] args)
{int a=10, b=20;
A o=new A(a,b);
Console.WriteLine(o.suma());
Console.WriteLine(o.produs());}
}

1.2.13 Clase interioare


O clas interioar se gsete n interiorul altei clase. Pentru a instania un obiect de
tipul clasei interioare nu este nevoie de un obiect de tipul clasei exterioare. Metodele
clasei interioare pot fi accesate de toi membrii clasei care o conine prin intermediul
opertorului .

16
Aplicatie. S se defineasc o clas n interiorul altei clase.
class a
{
public class b
{
public void f()
{
Console.WriteLine("clase interioare");
}
}
}
class Program
{
static void Main(string[] args)
{
a.b ob =new a.b();
ob.f();
}
}

1.2.14 Probleme rezolvate


1. Realizai un program care afieaz toate permutrile mulimii {1.2.n} folosind
tehnica Backtraking
using System;
using System.Text;
namespace ConsoleApplication1
{
class back1
{int []st=newint [10];
int n,niv;
bool ev,as1;

17
public back1(int x)
{n=x;}
void succ()
{
if(st[niv]<n)
{as1=true;
st[niv]++;
}
else as1=false;
}
void afis()
{
for (int i = 1; i <= niv; i++)
Console.Write(st[i] + " ");
Console.WriteLine();
}
public void valid()
{
ev=true;
for (int i = 1; i <= niv-1; i++)
if (st[i] == st[niv])
ev = false;
}
public void back()
{
for (int i = 1; i <= n; i++) st[i] = 0;
niv=1;
st[1]=0;
while(niv>0)
{

18
do
{
succ();
if(as1==true)
valid();
} while (as1 && !ev);
if (as1)
if (niv == n)
afis();
else
{
niv++;
st[niv] = 0;
}
else niv--;
}
}
}
classProgram
{
static void Main(string[] args)
{
int x = 3;
back1 ob = new back1(x);
ob.back();
}
}
}
2. S se defineasc o clas care creeaz o structur de tip list i care mai conine
metodele:

19
Inserare()- care insereaz pe poziia a doua o valoare egal cu 333;
tergere() care terge elementul de pe poziia 2;
Afi() care afieaz elementele listei;
Public class lista
{
public int []v=newint [100];
public int n;
public lista ()
{ }
public void creare ()
{Console.WriteLine("n=");
n = Int32.Parse( Console.ReadLine() );
for(int i=1;i<=n;i++)
{Console.Write("v["+i+"]=");
v[i] = Int32.Parse( Console.ReadLine() );
}
}
public void inserare()
{
int j;
for (j = n; j >= 2; j--)
v[j + 1] = v[j];
v[2] = 333;
n++;
}
public void stergere()
{
for (int j = 2; j <= n - 1; j++)
v[j] = v[j + 1];
n--;

20
}
public void afis()
{
for (int i = 1; i <= n; i++)
Console.Write(v[i]+" " );
}
}
class Program
{
static void Main(string[] args)
{
lista o = new lista_static();
o.creare();
o.afis();
o.inserare();
o.afis();
o.stergere();
o.afis();
}
}
}
3. S se defineasc o clas care creeaz o structur de tip stiv i care mai conine
meodele:
Inserare()- care insereaz elemente n stiv;
tergere() care terge din stiv;
Afi() care afieaz elementele stivei;
using System;
usingSystem.Text;
namespace ConsoleApplication1
{public class stiva

21
{
public intdm,vf,val;
public int []st=new int[10];
public stiva(int x)
{
dm = x;
}
public boolvida_st()
{
if(vf==0)
return true;
else
return false;
}
public bool plina_st()
{
if(vf==dm)
return true;
else
return false;
}
public void inserare_st()
{Console.WriteLine("val=");
intval= Int16.Parse( Console.ReadLine());
if(!plina_st())
st[++vf]=val;
else
Console.WriteLine("Eroare! Stivaesteplina!");
}
public void extragere_st()

22
{
if(!vida_st())
val=st[vf--];
else
Console.Write("Eroare! Stivaestevida!");
}
public void afis()
{
for(inti=1;i<=vf;i++)
Console.Write(st[i]+" ");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("dimensiunea maxima a stiveieste");
int x =int.Parse( Console.ReadLine());
stivaob = new stiva(x);
ob.inserare_st();
ob.inserare_st();
ob.inserare_st();
ob.afis();
ob.extragere_st();
ob.afis();
}
}
}
3. S se defineasc o clas care creeaz o structur de tip coad i care mai conine
metodele:

23
Inserare()- care insereaz elemente n coad;
Stergere() care terge din coad;
Afi() care afieaz elementele din coad;
using System;
using System.Text;
namespace ConsoleApplication1
{
class coada
{
public int inc = 1, sf = 1,dim,val;
public int[] st = new int[10];
public coada(int x)
{
dim = x;
}
public bool vida_c()
{
if (inc == sf)
return true;
else
return false;
}
public bool plina_c()
{
if(sf==dim+1)
return true;
else
return false;
}
publicvoid inserare_c()

24
{
Console.WriteLine("dati val");
int val = int.Parse(Console.ReadLine());
if (!plina_c())
st[sf++] = val;
else
Console.WriteLine("Eroare! Coada este plina!");
}
public void extragere_st()
{
if (!vida_c())
val = st[inc++];
else
Console.WriteLine("Eroare! Coada este vida!");
}
publicvoid afis()
{
for (int i = inc; i <= sf; i++)
Console.Write(st[i] + " ");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("dati dimensiunea maxima");
int dim = int.Parse(Console.ReadLine());
coada ob = newcoada(dim);
ob.inserare_c();
ob.inserare_c();

25
ob.inserare_c();
ob.afis();
ob.extragere_st();
ob.afis();
}
}
}

4. Se dau dou numere complexe. Definii o clas care conine metodele:


Afi()- care afieaz numere complexe;
Adunare() adun numerele complexe;
Modul() - afieaz modulul primului numr complex;
using System;
using System.Text;
namespace complex
{
public class complex1
{
public int re, im;
}
public class operatii_numere_complexe
{
public complex1 c1 = new complex1();
public complex1 c2=new complex1 ();
public operatii_numere_complexe (int a, int b, int c, int d)
{
c1.re = a; c1.im = b; c2.re = c; c2.im = d;
}
public void afis()
{ Console.WriteLine(c1.re + "+" + c1.im + "i" + " " + c2.re + "+" + c2.im + "i"); }

26
public void adunare()
{
int sr = c1.re + c2.re;
int si = c1.im + c2.im;
Console.WriteLine(sr + "+" + si + "i");
}
public double modul()
{ return Math.Sqrt(c1.re * c1.re + c1.im + c1.im); }
}
class Program
{
static void Main(string[] args)
{int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int c = int.Parse(Console.ReadLine());
int d = int.Parse(Console.ReadLine());
operatii_numere_complexe ob = new operatii_numere_complexe(a,b,c,d);
ob.afis();
ob.adunare();
Console.WriteLine(ob.modul());
}
}
}
5. Realizai o clas arbore care conine metodele:
creare_nod()- care creeaz un arbore binar;
svd, sdv,vsd- cte o metod pentru cele trei parcurgeri ale arborelui;
using System;
using System.Text;
namespace ConsoleApplication7
{

27
public class nod
{
public int val;
public nod st,dr;
}
public class arbore
{
public nod rad;
public nod creare_nod()
{
nod rad=new nod ();
int val1 = int.Parse(Console.ReadLine());
if (val1 != 0)
{
rad = new nod();
rad.val = val1;
rad.st=creare_nod();
rad.dr=creare_nod();
return rad;
}
else
{
return null ;
}
}
public void svd(nod c)
{if(c.st !=null ) svd(c.st);
Console .Write(c.val+" ");
if(c.dr !=null ) svd(c.dr);
}

28
public void vsd(nod c)
{
if (c != null)
{ Console .Write(c.val+" ");
vsd(c.st);
vsd(c.dr);
}
}
public void sdv(nod c)
{
if (c != null)
{sdv(c.st);
sdv(c.dr);
Console .Write(c.val+" ");
}
}
}
class Program
{
static void Main(string[] args)
{
nod rad=new nod ();
arbore ob = new arbore();
rad= ob.creare_nod();
Console.WriteLine("parcurgere sdv");
ob.sdv(rad);
ob.svd(rad);
ob.vsd(rad);
}
}

29
}

1.2.15 Probleme propuse


1 Care dintre urmtoarele programe sunt corecte din punct de vedere sintactic:
a. class a{ } b. class a{ }

class Program class Program

{ static void Main(string[] args) {static void Main(string[] args)

{ a x = new a() } {A x = new A();}

} }

c. class a{ } d. class a{ }

class Program class Program

{ static void Main(string[] args) { static void Main(string[] args)

{ x a = new x(); } } { a.x = new a();}}

1. Ce afieaz programul urmtor:


class a
{ int n = 122;}
class Program
{ static void Main(string[] args)
{
int n = 12;
a x = new a();
Console.WriteLine(x.n);
}
}
a) 122 b)12 c)0 d) eroare
2. Ce afieaz programul urmtor:
class unu
30
{ public int a = 122,b=12; }
class Program
{
static void Main(string[] args)
{
int a = 1,b=5;
unu x = new unu();
Console.WriteLine(x.a+" "+x.b);
}
}a)1 5 b)eroare c) 122 12 d) 0 0
3. Ce afieaz programul urmtor:
class unu
{ public int a=3,b=4;
public unu(int x, int y)
{ a = x; b = y; }
}
class Program
{ static void Main(string[] args)
{
int x= 1,y=77;
unu ob = new unu(x,y);
Console.WriteLine(ob.x+" "+ob.y);
}
}
a) 1 77 b) 0 0 c) eroare d) 3 4
4. Ce afieaz programul urmtor:
class unu
{ public int a=3, b=4;
public unu(int x, int y)
{ a = x; b = y; }
public int suma(int a, int b)
31
{return a+b;
}
}
class Program
{ static void Main(string[] args)
{
int x= 1,y=77;
unu ob = new unu(x,y);
Console.WriteLine(ob.suma(x,y).ToString());
}
}a) 7 b) 78 c) eroare d) 0
5. Ce afieaz programul urmtor:
class unu
{ public int a,b;
public unu(int x, int y)
{ a = x; b = y; }
public void p(ref int a, int b)
{
a = a + 1;
b = a;
Console.Write(a + " " + b+" ");
}
}
class Program
{
static void Main(string[] args)
{
int x= 1,y=77;
unu ob = new unu(x,y);
ob.p(ref x, y);

32
Console.WriteLine(x + " " + y);
}
}
6. Ce afieaz programul urmtor:
class unu
{ static public int a, b,z=33;
static public void p(ref int a, int b)
{
a = a + 1;
b = a;
Console.Write(a + " " + b);
}
}
class Program
{
static void Main(string[] args)
{
int a= 1,b=77;
unu.p(ref a, b);
Console.Write(unu.a+" ");
Console.WriteLine(unu.z+" ");
Console.WriteLine(b);
} }

7. Fiind dat un arbore binar, realizai o clas care conine metodele:


Afis-pare()- afieaz valorile pare din noduri;
Afis1()- afieaz inforamiile din nodurile frunz;
Afis2()- afieaz descendenii nodului x;
Afis3()- afieaz nodurile de pe nivel p;
Medie()- afieaz media nodurilor divizibile cu 3;

33
8. Se dau datele a n sportivi (nume, prenume, prob de concurs). Realizai o clas
care cuprinde metodele:
Citire()- citete datele sportivilor;
Afis()- afieaz sportivii;
Afis1()- afieaza sporivii care particip la proba maraton.
9. Se dau n puncte n plan. Pentru fiecare punct de cunosc cele dou coordonate x i
y. Definii o clas care conine metodele:
Citire()- citete punctele;
Afis()- afieaz punctele din cadranul II;
Afis1()- afieaz punctele de pe axa Ox;
Rspunsuri: 1) a 2) d3) c 4) c 5) b 6)2 22 777) 2 2 0 33 77

1.3 DERIVAREA CLASELOR (MOTENIRE)


Motenirea este este un concept al Programrii Orientate pe Obiecte care permite
definirea unei clase care ncorporeaz i extinde o alt clas. Clasa care este motenit se
numete clas de baz, iar clasa care o motenete pe aceasta se numete clas derivat.
Proprieti:
- Clasa derivat motenete toate elementele clasei de baz i i adaug altele
proprii.
- Clasa derivat nu poate s tearg niciun membru al clasei de baz.
Definirea unei clase derivate se face folosind sintaxa:
Public class clasa_derivata:clasa_baza{ }
Limbajul C#, admite doar motenirea simpl, n sensul c derivarea se admite doar
dintr-o clas de baz.
Aplicaie . S se creeze o clas care conine un membru i o metod i o alt clas care
motenete pe prima i conine un membru i o metod. Se vor afia datele din clasa
derivat.
using System;
using System.Text;
namespace ConsoleApplication1

34
{
public class a
{
public int x1 = 22;
public void afis()
{Console.Write(x1);
}
}
public class b:a
{public int x;
public b(int n)
{x=n;}
public void afis1()
{Console.Write(x+" "+x1);}
}
class Program
{
static void Main(string[] args)
{
int n = 456;
b ob = new b(n);
ob.afis1();
}
}
}
Aplicaie S se defineasc o clas de baz denumit matrice care cuprinde metodele citire
i afiare a unei matrici. Se mai definete o clas derivat numit diagonala care
motenete clasa matrice i conine o metod care returneaz elementele de pe diagonala
principal.
using System;

35
using System.Text;
namespace ConsoleApplication1
{ public class matrice
{
public int[,] a = new int[4, 4];
public int n;
public void citire()
{
Console.WriteLine("n=");
n = int.Parse(Console.ReadLine());
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{ Console.WriteLine("a["+i+"]["+j+"]=");
a[i, j] = int.Parse(Console.ReadLine());
}
}
public void afis()
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
Console.Write(a[i, j] + " ");
Console.WriteLine();
}
}
}
public class diagonale : matrice
{
public void diag_principala()
{ for (int i = 1; i <= n; i++)

36
Console.Write(a[i,i]+" ");
}
}
class Program
{
static void Main(string[] args)
{
diagonale ob = new diagonale();
ob.citire();
ob.afis();
ob.diag_principala();
}
}
}

1.3.1 Utilizarea cuvntului cheie protected


Cuvntul cheie protected permite restrngerea accesului unui membru al clasei de
baz doar la clasele sale derivate. Membrii protejai motenii devin n mod automat
protejai.
Exemplu: Definii clasa a care conine membru x1 de tip protected i clasa b care
motenete clasa a. n clasa b se afieaz valoarea lui x1.
using System;
using System.Text;
namespace ConsoleApplication1
{
public class a
{
protected int x1 = 22;
public void afis()
{Console.Write(x1)}
}

37
public class b:a
{public int x;
public b(int n)
{x=n;}
public void afis1()
{Console.Write(x+" "+x1);}
}
class Program
{
static void Main(string[] args)
{
int n = 456;
b ob = new b(n);
ob.afis1();
}
}
}

1.3.2 Constructorii claselor derivate


Contructorii clasei de baz nu se motenesc. Constructorul clasei derivate apeleaz
constructorul bazei, pentru a contrui poriunea din obiect specific bazei.
Exemplu:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
public class baza
{
public baza()
{

38
Console.WriteLine("Contructor baza:");
}
}
public class derivat:baza
{
public derivat()
{Console.WriteLine("constructor derivat");
}
}
class Program
{
static void Main(string[] args)
{derivat o=new derivat();
}
}
}
Exemplul arat c atunci cnd se execut constructorul clasei derivate,se execut
mai nti contructorul clasei de baz. Poate exista i apelul explicit al constructorului
bazei.
Sintaxa este:public derivate():base()
using System;
using System.Text;
namespace ConsoleApplication1
{
public class baza
{
public int x;
public baza (int y)
{
x = y;

39
}
}
public class derivat:baza
{public int b;
public derivat(int a,int y):base(y)
{b=a;
}
}
class Program
{
static void Main(string[] args)
{derivat o=new derivat(10,20);
Console.WriteLine(o.x+" "+o.b);
}

1.3.3 Probleme rezolvate


Definii o clas vector care citete i afieaz un vector. Definii o clas subir care
motenete clasa vector i conine metodele :
a) terge elementele pare;
b) Insereaz n faa fiecrui element pozitiv o valoare nul:
using System;
using System.Text;
namespace gredy
{
public class vector
{
public int[] v = new int[11];
public int n;
public void citire()
{
Console.WriteLine("n=");

40
n = int.Parse(Console.ReadLine());
for(int i=1;i<=n;i++)
{Console.WriteLine("v["+i+"]=");
v[i] = int.Parse(Console.ReadLine());
}
}
public void afis()
{
for (int i = 1; i <= n; i++)
{
Console.Write(v[i] + " ");
Console.WriteLine();
}
}
}
public class subsir:vector
{
public void sterge_elemente_pare()
{
int i, j;
for (i = n; i >= 1; i--)
if (v[i] % 2 == 0)
{
for (j = i; j < n; j++)
v[j] = v[j + 1];
n--;
}
for ( i = 1; i <= n; i++)
Console.Write(v[i] + " ");
}

41
public void inserare()
{
int i, j;
for (i = 1; i <= n; i++)
if (v[i] > 0)
{
for (j = n; j >= i; j--)
v[j + 1] = v[j]; v[i] = 0;
n++; i++;
}
for (i = 1; i <= n; i++)
Console.Write(v[i] + " ");
}
}
class Program
{
static void Main(string[] args)
{
subsir ob = new subsir();
ob.citire();
ob.afis();
ob.sterge_elemente_pare();
Console.WriteLine();
ob.inserare();
}
}
}
2 Definii o clas care creeaz i afieaz o list simplu nlnuit numit creare.
Creai o clas prelucrri care motenete clasa creare i care cuprinde metoda
Medie (afieaz media aritmetic a elementelor pare din list).
using System;
42
using System.Text;
namespace ConsoleApplication4
{
public class Node
{
public int val;
public Node leg;
}
public class creare
{
public Node c = new Node();
public Node p = new Node();
public Node u = new Node();
public void add()
{
c = new Node();
c.val = 1;
c.leg = null;
p = c; u = c;
for (int i = 2; i <= 4; i++)
{
c = new Node();
c.val = i;
c.leg = null;
u.leg = c; u = c;
}
}
public void parcurgere()
{
c = p;

43
while (c != null)
{
Console.WriteLine(c.val);
c = c.leg;
}
}
}
public class prelucrri : creare
{//Node c=new Node ();
public void medie()
{
int s = 0, nr=0;
c = p;
while (c != null)
{
if (c.val % 2 == 0)
{
s = s + c.val;
nr++;
}
c = c.leg;
}
double ma = s / nr;
Console.WriteLine("media" + ma);
}
}
class Program
{
static void Main(string[] args)
{

44
prelucrri ob = new prelucrri ();
ob.add();
ob.parcurgere();
ob.medie();
}
}
}

1.3.4 Probleme propuse


Pentru problemele 1-5 se d urmtoarea clas:
public class baza
{
public int a;
private int b;
protected int c;
public baza(int x, int y, int z)
{ a = x; b = y; c = z; }
public void afis()
{ Console.WriteLine(a + " " + b + " " + c); }
}
1. Pentru urmtoarea secven de program ce se va afia?
public class derivat :baza
{public int d;
public derivat (int x, int y, int z, int t):base(x,y,z)
{d=t;}
public void afis1()
{ Console.WriteLine(a); }
}
class program {
static void Main(string[] args)
{ derivat ob = new derivat(1, 3, 5, 7);

45
ob.afis();
}}
a) 1 3 5 b) 3 c) 5 d) eroare
2. Pentru urmtoarea secven de program ce se va afia?
public class derivat : baza
{
public int d;
public derivat(int x, int y, int z, int t) : base(x, y, z)
{ d = t; }
public void afis2()
{Console.WriteLine(b);
}
}
class Program {
static void Main(string[] args)
{ derivat ob = new derivat(1, 3, 5, 7);
ob.afis2();
}}
a) 1 b) 3 c) 5 d) eroare
3. Pentru urmtoarea secven de program ce se va afia?
public class derivat : baza
{
public int d;
public derivat(int x, int y, int z, int t) : base(x, y, z)
{ d = t; }
public void afis1()
{ Console.WriteLine(a); }
}
class Program {
static void Main(string[] args)

46
{ derivat ob = new derivat(1, 3, 5, 7);
ob.afis3();
}
a) 1 b) 3 c) 5 d) eroare
4. Pentru urmtoarea secven de program ce se va afia:
public class derivat : baza
{
public int d;
public derivat(int x, int y, int z, int t) : base(x, y, z)
{ d = t; }
public void afis1()
{ Console.WriteLine(a); }}
class Program {
static void Main(string[] args)
{ baza ob = new baza(1, 3, 5, 7);
ob.afis();
}
a) 1 3 5 b) 3 c) 5 d) eroare

5. Pentru urmtoarea secven de program ce se va afia?


public class derivat : baza
{
public int d;
public derivat(int x, int y, int z, int t) : base(x, y, z)
{ d = t; }
public void afis3()
{ Console.WriteLine(c); }
}
class Program
{

47
static void Main(string[] args)
{ derivat ob = new derivat(1, 3, 5, 7);
ob.afis3();
}
}
b) 1 b) 3 c) 5 d) eroare
6. Definii o clas care creeaz i afieaz o list simplu nlnuit numit creare.
Creai o clas prelucrri care motenete clasa creare i care cuprinde metodele
a) Ultimpar() - Afieaz ultimul element par din list:
b) Verif() - verific dac toate elementele din list sunt divizibile cu 3;
c) Max() - afieaz elementul cel mai mare;
d) Adaug() adaug un nod la sfritul listei, valoarea nodului este cel mai mic
element par;
e) terge () terge primul nod;
Rspunsuri 1) a 2) d 3) a 4) d 5) c

1.4 INTERFA
O interfa este un tip de referin care nu se implementeaz.
Caracteristici:
- Nu conine cmpuri;
- Clasele pot moteni mai mult interfete;
- O interfa poate moteni o alt interfa;
Sintax: [modificatori] interface nume
{
//Corpul interfetei
}
Exemplu:
using System;
using System.Text;
namespace ConsoleApplication4

48
{
public interface t1
{
void afis1();
}
public interface t2
{
void afis2();
}
public class c : t1,t2
{
public void afis1()
{
Console.WriteLine("a");
}
public void afis2()
{
Console.WriteLine("b");
}
public void afis3()
{
Console.WriteLine("c");
}
}
class Program
{
static void Main(string[] args)
{
c ob = new c();
ob.afis1();

49
}
}
}

1.5 POLIFORMISM
Poliformismul este un concept de baz al programrii orientate pe obiecte. O
entitate se poate comporta diferit n funcie de context. Se poate invoca metode ale
claselor derivate cu ajutorul unei referine la clasa de baz. Se poate defini o clas
derivat care motenete clasa de baz, dar care redefinete una sau mai multe metode.
using System;
namespace ConsoleApplication1
{
public class a
{
public void afis()
{
Console.WriteLine("clasa a");
}
}
public class b : a
{
public void afis()
{
Console.WriteLine("clasab");
}
}
class Program
{
static void Main(string[] args)
{

50
a ob = new a();
ob.afis();// afieaz clasa a
b o1 = new b();
o1.afis();// afieaz clasab
a o = (a)o1;//poliformism de motenire afieaza clasaa
o.afis();
}
}
}
1.5.1 Metode virtuale
Poliformismul bazat pe motenire se relizeaz atunci cnd un obiect al clasei de
baz poate accesa membri ai clasei derivate. Pentru acesta:
Clasa de baz declar un membru virtual;
Clasa derivat redefinete acel membru, cu aceeai semntur i tip de retur,
scriind cuvntul overide naintea tipului de retur.
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
public class a
{
virtual public void afis()
{
Console.WriteLine("clasa a");
}
}
public class b : a
{
override public void afis()

51
{
Console.WriteLine("clasab");
}
}
class Program
{
static void Main(string[] args)
{
a ob = new a();
ob.afis();
b o1 = new b();
o1.afis();
a o2 = new b();
o2.afis();
}
}
}
Observaii
1. Se pot declara virtual urmtorii membri: metode, proprieti, indexatori,
evenimente;
2. Cmpurile nu se pot declara virtual;
3. Metodele override trebuie sa aib acelai nivel de accesibilitate cu al metodelor
virtual;
4. Nu se redefinesc metodele statice i cele non-virtuale;
Modificatorul sealed se folosete atunci cnd mpiedic alte clase s motenesc o
anumit metod sau membru.
class a
{
protected virtual void afis()
{

52
Console.WriteLine("clasa a");
}
}
class b : a
{
sealed protected override void afis()// poate meteni
{
Console.WriteLine("clasa b");
}
}
class c:b
{
protected override void afis()
{
Console.WriteLine("clasa b");// nu poate moteni
}
}

2 TRSTURI ALE LIMBAJULUI C#


1.1 Delegare
O delegare este un tip de referin care cuprinde o list de metode cu semntur
identic i acelai tip de retur. Lista se numete list de invocare.
Declarare
Delegate void numedelegare (int x)
Crearea obiectelor
Numedelegare d=new numedelegare(obiect.metod);
Sau d=obiect.metod;
Ataarea metodelor unei delegri Dac avem dou metode f() i g() cuprinse n
clasa delegare . Construim obiectul delegare ob=new delegare();

53
Iar ataarea metodelor este:
d=delegare.f;// lista este f
d+=delegare.g;// lista este f(),g()
d+=delegare.g;//lista este f(),g(),g()
d-=delegare.g;//lista este f(),g()
Dac se invoc delegri cu tip de retur, se reine ultima metod din lista de invocare.
1.2 Evenimente
Se pot realiza evenimete precum click pe un obiect, apsarea unei taste. Sistemul
de operare ntiineaz fereastra activ de apariia unui evniment. Clasa care semnaleaz
evenimentul este publisher, iar clasele care sunt informate se numesc subscribers.
Evenimentul este un membru al clasei care public evenimentul.
Lucrul cu evenimente
-se declar un tip delegat;
- de declar evenimetul de tip public n clasa publisher cu ajutorul cuvtului cheie event;
-se scrie codul care produce evenimentul;
-declar event Handler-ele;
-nregistreaz Handler.

2.3 Clasa generic


Avem clasa de mai jos:
public class stiva
{private int []a;
private int n;
public stiva (int max)
{a=new int [max];
}public void push(int val)
{a[n++]=val;
}
public int pop()
{return a[--n];

54
}
Aceast clas memoreaz n cmpul a o valoare de tip ntreg. Dac dorim s
reinem date de tip double sau string, atunci trebuie se rescriem codul. Se poate s scriem
o dat codul care s lucreze cu toate tipurile dorite. Clasa se numete clasa generic.
Clasele generice sunt clase parametrice. Clasa generic arat astfel:
public class stiva<T>
{private T []a;
private int n;
public stiva (int max)
{
a=new T [max];
}
public void push(T val)
{
a[n++]=val;
}
public T pop()
{
return a[--n];
Parametrul T se numete parametru generic.
Instanierea claselor generice: stiva<int> o1 = new stiva<int>(22);

2.4 Tratarea excepiilor


n timpul execuiei programelor apar erori. Exist mecanismul de tratare a erorilor.
Cuvintele cheie folosite: try, catch, finally. Se scrie codul n zona try. Cnd excepia se
produce, fluxul de execuie al programului este dirijat n zona catch care prinde i
trateaz excepia.
Forma general a blocurilor try i catch este cea de mai jos:
try { // bloc de cod monitorizat pentru detectarea erorilor la execuie}
catch(TipExceptie1 exOb){ //rutina de tratare pentru TipExceptie1}
catch(TipExceptie2 exOb){ //rutina de tratare pentru TipExceptie2}

55
Aplicaie: Se dau dou numere x, y. S se afieze ctul mpririi lui x la y.
using System;
class Exceptie
{
public static void Main()
{
try
{
int x = 0,y=9,z;
z = y/x;
}
catch { Console.WriteLine("x nu poate fi 0");}
finally
{ Console.WriteLine("Program complet");
Console.Read(); }
}
}
Blocul cach poate avea parametru anume un tip al limbajului.
Tipuri de excepii:
1. DivideByZeroException. nu se poate realiza mprirea cu 0.;
2. OverflowException-verific dac dimensiunea numrului este prea mare;
3. FileNotFoundException- verific dac fiierul s-a deschis:
4. Int32.TryParse(x, out k)- Numrul nuverific dac numarul este de tip int;
Aplicaie: S se scrie o secven de cod care verific dac fiierul este deschis.
static void ReadFile()
{ StreamReader reader = null;
try
{ reader = File.OpenText(@"C:\fisier.txt");
if (reader.EndOfStream) return;
Console.WriteLine(reader.ReadToEnd());

56
}
catch (FileNotFoundException)
{
Console.WriteLine("fiserul nu este deschis");
}
}
Dac nu este cunoscut tipul de excepie, programul de mai jos afieaz tipul.
try
{
int value = 1 / int.Parse("0");
Console.WriteLine(value);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

2.5 Clasa string


Obiectele de tip string cuprind iruri de caractere. Odat create, obiectele nu se mai
modific, orice modificare returneaz un alt string.
2.5.1 Operaii i metode
Declarare:String s;
String []v; // declarare vectori de stringuri
Parcurgerea irurilor de caratere:
for (int ctr = 0; ctr < sir.Length; ctr++)
Aplicaie: S se sfieze toate caracterele unui cuvnt.
static void Main(string[] args)
{
string sit = "ALINA";
for (int ctr = 0; ctr < sir.Length; ctr++)

57
Console.Write( sir[ctr]+" ");
}
Operatori:
1. Operatori relaionali egal ==, diferit !=.
Aplicaie: Se dau dou iruri de caractere. S se realizeze un program c# care
verific dac cele dou iruri sunt identice.
static void Main(string[] args)
{
String sir1 = "info";
String sir2= "Infi";
if (sir1 == sir2)
{
System.Console.WriteLine("siruri identice");
}
else
{
System.Console.WriteLine("nu sunt identice");
}
}
2. Operatori de concatenare : +
Metode
1. Length(sir- returneaz lungimea unui ir de caractere.
static void Main(string[] args)
{
String s1 = "informatica";
Console.WriteLine(s1.Length);
}

2. Split - mparte stringul n substringuri delimitate de separatori.


Exemplu: Se d un ir format din mai multe cuvinte, unic separator este spaial. S
se afieze toate cuvintele.
58
Sintax: String. Split(list separatori)
static void Main(string[] args)
{
int nr = 0;
string s = "an are mere prune si alune";
string[] v = s.Split(' ');
foreach (string x in v)
{
Console.WriteLine(x+" ");
}
}

3. Remove()- terge un substring dintr-un string


Sitaxa: String.Remove(poziie, nceput, nr. caratere);
Dac lipsete nr. caractere, atunci terge pn la sfrit.
Exemplu:
public static void Main()
{
string s = "abc---def";
Console.WriteLine("Index: 012345678");
Console.WriteLine("1) {0}", s);
Console.WriteLine("2) {0}", s.Remove(3)); //..terge ncepnd cu poziia a treia
Console.WriteLine("3) {0}", s.Remove(3, 3));//terge trei elemente ncepnd cu
poziia atreia
}
4. Trim() elimin spaii albe din faa i dup string.
5. Replace nlocuiete un subtring cu alt substring.
Sintaxa: sir.Replace("subsir_vechi","subsir_nou"));
Se d un ir de caractere string. S se nlocuiasc toate apariiile irului "are" cu irul
"avea".
static void Main(string[] args)
59
{
string str = "ana are nere prune si mai are alune";
Console.WriteLine("Original string: \"{0}\"", str.Replace("are", "avea"));
}
6. Concat()- concateneaz dou iruri.
Sintaxa sir.concat(sir1,sir2);
Exemplu : S se concateneze dou iruri s1 i s3.
static void Main(string[] args)
{
string s1 = "matematica";
string s2 = " informatica";
string s3;
s3 = String.Concat(s1,s2);
Console.WriteLine(s3);
} }

7. Compare()- compar dou iruri n ordine lexicografic. Compar codurile


ASCII ale fiecrui caracter.
Sintaxa sir.compare(sir1,sir2). Metoda returneaz un numr ntreg.
Daca nr<0 atunci sir1<sir2
nr=0 atunci sir1=sir2
nr>0 atunci sir1>sir2
static void Main(string[] args)
{
String s1 = "info";
String s2 = "info";
if (String.Compare(s1, s2) == 0)
{
System.Console.WriteLine("identice");
}
else
60
{
System.Console.WriteLine("nu sunt identice");
}
}
Codurile ASCII
static void Main(string[] args)
{
string s = "123";
for (int ctr = 0; ctr < s.Length; ctr++)
Console.Write(Convert.ToUInt16(s[ctr])+" ");
}

2.5.2 Trasformarea irurilor n valori numerice


C# nu are metode sau operatori care s citeasc date de tip numeric. Pentru convertire
din ir de caractere n tipul int, double, float se folosete metoda Parse().
Exemplu: int n=int.Parse(123);
double a=double.Parse(12.34);
2.5.3 Probleme propuse
1 Se d un ir de caractere. Realizai un program C# care afieaz:
- Vocalale din ir;
- Numrul de cuvinte din ir;
- Cte cuvinte ncep cu litera a;
2 Se dau dou iruri s1 i s2. S se tearg toate apariiile irului s2 din irul s1.
3 Se d un ir de caratere s. S se afieze cuvintele din s care au lungime mai mare de
7.
4 Se d un ir de caratere s. S se afieze cuvintele din s n ordine cresctoare.

2.6 Fiiere text


Pentru lucrul cu fiiere text trebuie utilizat spaiul de nume System.IO, care trebuie
introdus n antetul programului linia: using System.IO;

61
Cele dou clase pe care le vom utiliza sunt StreamReader (pentru citirea datelor din
fiier) i StreamWriter (pentru scrierea datelor n fiier).
Dac nu este specificat o cale complet ctre fiier, ci doar numele fiierului,
atunci date.txt trebuie s se afle n acelai folder cu executabilul. Acest folder este de
regul bin\deburg.
2.6.1 Operaii cu fiier:
1. StreamReader fin = new StreamReader("TextFile1.txt");-crearea unui obiect
pentru citire din fiier
2. fin.Close();- nchiderea fiierelor
3. StreamWriter fout = new StreamWriter("TextFile2.txt");");- creare obiect pentru
afiare din fiier;
4. fin.ReadLine();- citire din fiier;
5. fout.WriteLine(cuv);- afiare n fisier;
6. while ((linie = f.ReadLine()) != null)- parcurgere linie cu linie pn la sfritul
fiierului
Aplicaie:n fiierul TextFile1.txt pe prima linie se afl un ir de caractere. S se
afieze n fiierul TextFile2.txt toate cuvintele din primul fiier, cte un cuvnt pe fiecare
linie.
using System;
using System.IO;
namespace Fisiere
{
class Program
{
static void Main(string[] args)
{
// citire din fisier
StreamReader fin = new StreamReader("TextFile1.txt");
string linie = fin.ReadLine();
fin.Close();

62
// separare in cuvinte
string[] cuvinte = linie.Split( );
// tiparirea cuvintelor
StreamWriter fout = new StreamWriter("TextFile2.txt");
foreach (string cuv in cuvinte)
fout.WriteLine(cuv);
fout.Close();
}
}
}
Aplicaie: n fiierul TextFile1.txt se gsesc pe prima linie mai multe numere ntregi. S
se afieze pe ecran suma lor.
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int s = 0;
// citire din fisier
StreamReader fin = new StreamReader("TextFile1.txt");
string linie = fin.ReadLine();
string[] cuvinte = linie.Split(' ');
foreach (string cuv in cuvinte)
{
Console.WriteLine(cuv);
int x = int.Parse(cuv);
s = s + x;

63
}
Console.Write(s);
fin.Close();
}
}
}
Aplicaie:n fiierul TextFile1.txt se gsesc pe mai multe linii mai multe numere ntregi.
S se afieze pe ecran suma lor.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int suma = 0;
string linie;

StreamReader f = new StreamReader("TextFile1.txt");


while ((linie = f.ReadLine()) != null)
{
string[] numere = linie.Split(' ');
foreach (string x in numere)
suma += int.Parse(x);
}
Console.Write(suma);
f.Close();

64
}
}
}
Aplicatie
Sa se afiseze intr-un fisier text valorile introduse in doua obiecte textBox.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
//StreamWriter fout = File.AppendText("TextFile1.txt");

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)


{
using (StreamWriter fout= File.AppendText("TextFile1.txt"))
{ fout.WriteLine( textBox1.Text + " " + textBox2.Text);
textBox1.Text = "";
textBox2.Text = "";
fout.Close();
}

}
}

Aplicatie
In fisierul textFile1 se gasesc mai multe numere. Sa se afiseze suma lor.
suma += int.Parse(x);
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
65
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication23
{
public partial class Form1 : Form
{
int suma = 0;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)


{
using (StreamReader fin = new StreamReader("TextFile1.txt"))
{
while (!fin.EndOfStream)
{
string l = fin.ReadLine();
string[] numere = l.Split(' ');
foreach (string x in numere)
{
suma += int.Parse(x);
// MessageBox.Show(suma.ToString());
}
}
}
MessageBox.Show(suma.ToString());

}
}
}

private void button1_Click(object sender, EventArgs e)


{
using (StreamReader fin = new StreamReader("TextFile1.txt"))
{

MessageBox.Show("fghhfh");
while (!fin.EndOfStream)
{
string l = fin.ReadLine();

string[] numere = l.Split(' ');


label1.Text = label1.Text + "\n" + numere[0] + "\n";
label2.Text = label2.Text + "\n" + numere[1] + "\n";
label3.Text = label3.Text + "\n" + numere[2] + "\n";

}
}

66
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication15
{
public partial class Form1 : Form
{
string linie;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)


{
this.chart1.BackColor = Color.Azure;
this.chart1.Titles.Add("titlu");
this.chart1.Legends.Add("dfndh");
this.chart1.Series.Add("denumire");
StreamReader f = new StreamReader("TextFile1.txt");
while ((linie = f.ReadLine()) != null)
{
string[] numere = linie.Split(' ');
this.chart1.Series["denumire"].Points.AddXY(numere[0], numere[2]);

67
}
f.Close();
}

private void button2_Click(object sender, EventArgs e)


{
dataGridView1.ColumnCount = 3;
dataGridView1.Columns[0].Name = " nume";
dataGridView1.Columns[1].Name = "prenume";
dataGridView1.Columns[2].Name = "nota";
StreamReader f = new StreamReader("TextFile1.txt");
while ((linie = f.ReadLine()) != null)
{
string[] numere = linie.Split(' ');
this.dataGridView1.Rows.Add(numere[0], numere[1], numere[2]);
}
f.Close();

}
}
}
2.6.2 Probleme propuse
1. n fiierul sir.in se gsesc pe prima linie mai multe numere ntregi. S se afieze n
fiierul sir.out elementele din primul fiier ordonate.
2. Pe prima linie a fiierului sir.in se afl un numr natural, iar pe a doua linie n
numere naturale. S se afieze pe ecran elementele de pe a doua linie n ordinea
invers a apariiei lor n fiier.

68
3. Pe prima linie a fiierului mat.in se gsete un numr natural, iar pe urmtoarele n
linii n numere naturale. S se afieze n fiierul mat.out liniile cu cele mai multe
elemente nule

3 CONTROALE
Biblioteca .NET conine clase definite n spaiu de nume System.Windows.Form
cum ar fi Button, ListBox, Label. Utilizatotul trebuie s creeze obiecte folosind clasele
menionate. Se pot crea prin aducerea din Toolbox, s seteze proprieti i s scrie codul
pentru evenimente.

3.1 Controlul Button


Este cel mai utilizat control. Este folosit pentru a declana evenimente.
Evenimente
Click- se declaneaz evenimentul la click pe control;
- mouseMove- se declaneaz cnd mouse-ul este n micare;
- mouse up- se declaneaz cnd butonul mouse-ul se deplaseaz n sus;
- mouse down- se declaneaz cnd butonul mouse-ul se deplaseaz n jos;
- mouse leave- se declanseaz cnd mouse-ul rmne nemicat;
- mouse enter se declaneaz la intrarea mouse-ului deasupra controlului;
Aplicaie Realizai o aplicaie care cuprinde obiecte button care declaneaz
evenimentele: MouseDown, MoudeUp, MouseLeave, MouseMove i patru etichete Label
care explic evenimentele care se produc.
- Se plaseaz pe forma patru etichete i se scriu valorile conform cerinei din
aplicaie;
- Se plaseaz patru obiecte Button i se trateaz evenimentele:
private void button1_MouseDown(object sender, MouseEventArgs e)
{
button1.BackColor = Color.Red;

69
}
private void button1_MouseLeave(object sender, EventArgs e)
{
button1.BackColor = Color.Blue;
}
private void button2_MouseUp(object sender, MouseEventArgs e)
{
button2.BackColor = Color.Yellow;
}
private void button2_MouseLeave(object sender, EventArgs e)
{
button2.BackColor = Color.Blue;
}
private void button3_MouseMove(object sender, MouseEventArgs e)
{
button3.BackColor = Color.Gold;
}
private void button3_MouseLeave(object sender, EventArgs e)
{
button3.BackColor = Color.Blue;
}
private void button4_MouseHover(object sender, EventArgs e)
{
button4.BackColor = Color.Green;
}
private void button4_MouseLeave(object sender, EventArgs e)
{
button4.BackColor = Color.Blue;
}}

70
3.2 Control Label
Controalele label au menirea de a plasa un text pe o form, cu informaii pentru
utilizator.
Proprieti :
- Text- afieaz valoarea textului;
- Size dimensiunea textului cu cele dou componente nlime (Height) si lime
(Width);
- Font valoarea fontului cu cele trei componenete (font, size, style);
- Dock zona unde este plasat pe form;
- ForeColor- culoarea textului;
- Location- returneaz poziia pe forma (coordonatele x si y);
Aplicaie: S se realizeze o aplicaie care conine un label i un buton button. La
realizarea evenimentului click al butonului se modific textul, locaia, fontul,
dimensiunea.
Etape:
1. Se plaseaz pe ecran un label care iniial are valoare label1 i un button;
2. Se seteaz valoarea text al butonului;
3. Se trateaz evenimentul click al butonului:
private void button1_Click(object sender, EventArgs e)
{
label1.ForeColor = Color.Red;
int a = label1.Location.X;
int b = label1.Location.Y;
a = a + 20;
b = b + 20;
label1.Location=new Point(a,b);
label1.Size = new Size(60, 300);
label1.Font=new Font(FontFamily.GenericSerif,22,FontStyle.Bold);
label1.Visible = true;
label1.Dock = DockStyle.Left;
}

71
3.3 Controlul LinkLabel
Afieaz o poriune de text ca un hyperlink. La un click pe hyperlink se poate
deschide o pagin de web sau o alt aplicaie.
Proprieti :
- LinkVisited- schimb culoarea textului dup evenimentul click;
- Text- valoarea text a obiectului;
Metode:
- Start()- pentru a lansa aplicaia;
Aplicaie (linklabel): Realizai o aplicaie care are dou obiecte LinkLabel, primul va
deschide o pagin web, al doilea o aplicaie din calculator;
- Se aduc pe form dou obiecte linkLabel i dou obiecte label care vor afia
mesaje corespunztoare;
- Se trateaz evenimentele click ale celor dou linkLlabel:
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
linkLabel1.LinkVisited = true;
linkLabel1.Text = "www.google.com";
System.Diagnostics.Process.Start("http://www.google.com");
}
private void linkLabel2_LinkClicked(object sender,
LinkLabelLinkClickedEventArgs e)
{
linkLabel1.LinkVisited = true;
linkLabel1.Text = "notepad";
System.Diagnostics.Process.Start("notepad");
}

3.4 Controlul TextBox


Un control TextBox accept introducerea de text pe un formular.
Proprieti
BackColor- culoare prim plan;

72
- Name- nume;
- Visible- vizibilitate;
- Width laimea;
- Heigth- inalimea;
- BorderStyle = BorderStyle FixedSingle- tipul chenarului ;
- PasswordChar- pentru introducerea parolei, textul este nlocuit cu un caracter ales
de utilizator;
Aplicaie:Realizai o aplicaie care conine dou cmpuri de editare username i parola,
dou etichete care au textul username i parola, un control button i un pictureBox. Iniial
imaginea i eticheta parola nu sunt vizibile. Dac parola este corect, se afieaz
imaginea la apsarea pe buton. Dup introducerea username i apasarea tastei Down
apare eticheta parola.
- Se aduc pe forma controale menionate n enun;
- n contructorul formei se mascheaz parola i se seteaz ca nevizibile controalele
imagine i eticheta parola ;
textBox1.PasswordChar = '*';
pictureBox1.Visible = false;
label1.Visible = false;
- Se trateaz evenimentul click al butonului:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "camil")
{
pictureBox1.Visible = true;
}
}
Aplicaie:Realizai o aplicaie care conine un cmp de editare cu mai multe linii
(multiline), un buton. La evenimentul click al butonului se afieaza pe rnd liniile din
cmpul de editare.
- Se aduc pe form controalele textbox, button;

73
- Se seteaz proprietatea multiline a cmpului de editare la valoarea true;
- Se trateaz evenimentul click al butonului:
private void button1_Click(object sender, EventArgs e)
{
string[] s = textBox1.Lines;
foreach (string line in s)
{
MessageBox.Show(line);
}
3.5 Controalele RadioButton, CheckBox
Butonul radio este folosit atunci cnd trebuie s se fac o singur alegere ntre mai
multe opiuni, iar acele opiuni se exclud reciproc. Butoanele radio nu pot fi puse direct
pe form. Ele se grupeaz ntr-un control container, de exemplu GroupBox. n acest
container ele devin coerente din punct de vedere logic, n sensul c un singur buton poate
fi selectat la un moment dat.
Butonele de validare (checkbox-urile) permit utilizatorului sa aleag una sau mai
multe opiuni.
Metode
- Checked eveniment care indic dac controlul este selectat;
Aplicaie: Realizai un test gril cu itemi la alegere. Aplicaia conine trei etichete label a
crui text va avea ca valoare ntrebarea, trei grupe de radiobuton al cror proprietate text
indic posibile rspunsuri, iar un buton va afia rezultatul atunci cnd executm click.
- Aducem pe form controalele din enun;
- Introducem ca valoarea textului pentru controalele label enunurile problemelor;
- Tratm evenimentele CheckedChanged ale butoanelor radio:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{ s1 = 0;//raspuns incorect}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{ s1 = 1;//raspuns corect }
private void radioButton3_CheckedChanged(object sender, EventArgs e)

74
{ s1 = 0; }
private void radioButton4_CheckedChanged(object sender, EventArgs e)
{ s2 = 0; }
private void radioButton5_CheckedChanged(object sender, EventArgs e)
{ s2 = 1; }
private void radioButton6_CheckedChanged(object sender, EventArgs e)
{ s2 = 0;}
private void radioButton7_CheckedChanged(object sender, EventArgs e)
{ s3 = 0;}
private void radioButton8_CheckedChanged(object sender, EventArgs e)
{ s3 = 1; }
private void radioButton9_CheckedChanged(object sender, EventArgs e)
{ s3 = 0; }
Tratm evenimentul click al obiectului button care afieaz rezultatul:
private void button1_Click(object sender, EventArgs e)
{
s= (s1 + s3 + s2)*3+1;//calculam nota
MessageBox.Show("NOTA ESTE"+s.ToString());
}
Aplicaie: Realizai o aplicaie n care Maria i poate alege un singur profil pentru
facultate i mai multe centre universitare. Aducem pe form controalele grupbox i trei
radiobuton ale cror valoare text va reprezent profilul i trei checkbox ale cror valoare
a textului va fi centrul universitar. Mai aducem i un button i tratm evenimentul click.
private void button1_Click(object sender, EventArgs e)
{
String s = "maria s-a inscria la profilul";
if (radioButton1.Checked) s = s + radioButton1.Text;
if (radioButton2.Checked) s = s + radioButton2.Text;
if (radioButton3.Checked) s = s + radioButton3.Text;
s = s + "la facultatile din";

75
if (checkBox1.Checked) s = s + checkBox1.Text;
if (checkBox2.Checked) { s = s + " "; s = s + checkBox2.Text; }
if (checkBox3.Checked) { s = s + " "; s = s + checkBox3.Text; }
MessageBox.Show(s);
}

3.6 Controlul Rich TextBox


Controlul Rich TextBox este folosit ca un editor de text. Pe lng proprietile pe
care le are TextBox, Rich TextBox ofer posibiliti de formatare a textului i
paragrafului, are posibiliti de salvare, printare.
Metode
- Copy ()- copiaz textul selectat;
- Exemplu: richTextBox.Copy ();
- Cut()- mut textul selectat;
- Exemplu: richTextBox.Cut ();
- AppendText()- adaug un ir de caractere n controlul Rich TextBox;
- Exemplu: richTextBox. AppendText ( "coninut Text");
- SelectionBullet selecteaz marcatori;
- Exemplu:richTextBox1.SelectionBullet = true;
- SelectionFont- selecteaz font;
Exemplu: if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
richTextBox1.SelectionFont = fontDialog1.Font;
- SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.RichText)-
salveaz document;
Exemplu: if (saveFileDialog1.ShowDialog() ==
System.Windows.Forms.DialogResult.OK)
richTextBox1.SaveFile(saveFileDialog1.FileName,
RichTextBoxStreamType.RichText);
- SelectionColor- selectare culoare;
Exemplu: if(colorDialog1.ShowDialog()==System.Windows.Forms.DialogResult.OK)
richTextBox1.SelectionColor = colorDialog1.Color;
76
3.7 Controlul ListBox
Controlul ListBox v permite s afiai o list de elemente din care utilizatorul
poate selecta o variant .
Metode:
- Add- adugare n list;
- Remove tergere din list;
Aplicaie: S se realizeze o aplicaie care conine un obiect ListBox, dou cmpuri de
editare TextBox, dou butoane. Aplicaia adaug n list un element pe care utilizatorul l
introduce ntr-un cmp de editare i terge elementul din list introdus n cellalt cmp de
editare. Operaiile de adugare i tergere se realizez facnd click pe unul din butoane.
Evenimentele click ale celor dou butoane:
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Add(textBox2.Text);
}
private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Remove(textBox1.Text);
}
Aplicaie: S se realizeze o aplicaie care conine dou liste. Se pot muta elemente de la
prima list la a doua utiliznd drag and drop.
using System;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
77
{
InitializeComponent();
}
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (listBox1.Items.Count == 0)
return;
int index = listBox1.IndexFromPoint(e.X, e.Y);
string s = listBox1.Items[index].ToString();
DragDropEffects dde1 = DoDragDrop(s,
DragDropEffects.All);
if (dde1 == DragDropEffects.All)
{
listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));
} }
private void listBox2_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
private void listBox2_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
string str = (string)e.Data.GetData(
DataFormats.StringFormat);
listBox2.Items.Add(str);
}
}
}
}

78
3.8 Controlul PictureBox
Controlul PictureBox este utilizat pentru a afia imagini n formate bitmap, GIF,
icoan, sau JPEG.
Proprieti :
- Image- se seteaz pentru afiarea imaginilor;
- SizeMode seteaz modul de afiare a imaginilor. Are valorile: AutoSize,
CenterImage, Normal (Locuri n stnga-sus al imaginii de la partea superioar),
StretchImage
Metode:
- Load afieaz imginea la ncrcare;
- SetBounds seteaz limitele controlului la o anumit locaie i la anumite
dimensiuni.
Evenimente :
- Paint se declaneaz cnd controlul trebuie redesenat;
- drag enter- se declaneaz cand ncepe tragerea;
- drag and drop- se declaneaz la glisarea i fixarea controlului;
- drag leave- se declaneaz cnd obiectul este tras i lsat;
- drag over- se declaneaz cnd obiectul este tras peste control.
- Paint-permite desenarea obievtelor grafice
Aplicaie ( Drag and drop1). ntr-o aplicaie Windows, drag and drop este o operaie
comun efectuat de ctre utilizatori pentru mutarea sau copierea de date de la o control
la un alt control. n cele mai multe cazuri, aceste date pot fi text simplu, dosar, imagine,
un fiier de muzic sau poate fi chiar un obiect OLE. Tehnologia Microsoft NET. are
multe evenimente i metode prin care un programator poate implementa drag and drop n
aplicaii. Realizai o aplicaie simpl, care trage o imagine peste o alt imagine. Aceasta
se realizeaz cu ajutorul evenimentelor DragEnter , DragDrop , i MouseDown.
using System;
using System.Data;
using System.Drawing;
using System.Text;

79
using System.Windows.Forms;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); pictureBox2.AllowDrop = true;
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (pictureBox1.Image == null) return;
if (DoDragDrop(pictureBox1.Image, DragDropEffects.Move) ==
DragDropEffects.Move)
{
pictureBox1.Image = null;
}
}
private void pictureBox2_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Bitmap))
e.Effect = DragDropEffects.Move;
}
private void pictureBox2_DragDrop(object sender, DragEventArgs e)
{
pictureBox2.Image = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
}
}
}

80
Aplicaie: S se deseneze peste un control PictureBox o elips i un string.La
declanarea evenimentului Paint se execut codul de mai jos:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;

g.DrawString("This is a diagonal line drawn on the control",


new Font("Arial", 10), System.Drawing.Brushes.Blue, new Point(30, 30));
g.DrawLine(System.Drawing.Pens.Red, pictureBox1.Left, pictureBox1.Top,
pictureBox1.Right, pictureBox1.Bottom);
}

3.9 Controlul ProgressBar


Controlul este destinat s indice n mod vizual progresul unor aplicaii care
evolueaz lent.
Proprieti:
- Style- indic stilul de afiare i exist trei stiluri:
Bara continu care se umple de la stnga la dreapta;
Blocuri de segmente care evolueaz de la stnga la dreapta;
Blocuri care oscileaz;
- Minimum i maximum- limite pentru values;
Metode:
- PerformStep- incrementeaz bara de progres cu valoarea step;

3.10 Controlul Timer


Controlul funcioneaz ca un cronometru. El declaneaz un eveniment la un
interval de timp specificat de programator.
Sunt dou tipuri de controle timer:
1. System.Windows,Form.Timer care se gsete n Toolbox;
2. System.Timer.Timer. l aducem n felul urmtor: Pe suprafaa toolbox, n partea
de jos, executm click dreapta i comanda Choose Items. Alegei tab-ul NET

81
Framework Components clasa Timer din spaiul de nume System Timer. Un tip
ceas apare n toolbox. Este un control mai precis.
Metode:
- Start()- pornete contorul;
- Stop()- opreste contorul;
Evenimente:
- Tick pentru primul Timer i Elepsed declaneaz un eveniment;
Aplicaie(timer deplasare imagine):Realizai o aplicaie care s deplaseze un control
PictureBox.
1. Pe suprafaa de lucru se aduc controalele: Timer, Button, Picture.
2. Proprietatea Text a controlului Button se seteaz la valoarea start;
3. Tratm evenimetul click al controlului button :
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
4. Declarm un cmp privat nr care contorizeaz numrul de evenimente tick ale
contorului
5. Tratm evenimentul Tick al controlului Timer:
private void timer1_Tick(object sender, EventArgs e)
{
nr++;
if (nr == 10)
timer1.Stop();
int a = pictureBox1.Location.X+10;
int b = pictureBox1.Location.Y;
pictureBox1.Location = new Point(a, b);
}
Aplicaie: S se realizeze un test gril, folosind itemi la alegere. Timpul testrii se va
limita la o valoare dat;

82
Rezolvare :
1. Se plaseaz pe suprafaa de lucru controalele: GoupBox, radioButton (3), label,
timer;
2. Valoarea proprieii text al lebel-lui va fi enunul problemei;
3. Valorile proprieii text ale radioButton vor fi posibile rspunsuri;
4. Vor fi declarate cmpurile private nr (contorul de evenimente tick) i s (nota);
5. Tratm evenimetele click al obiectului radiobutton :
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{ s = 1; }
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{ s = 10; }
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{ s = 1;}
6. Tratm evenimentul tick al controlului Timer:
private void timer1_Tick(object sender, EventArgs e)
{
t++;
if(t==6)
{timer1.Stop();
groupBox1.Visible=false;
MessageBox.Show("ati luat nota" + s.ToString());
}
}
Aplicaie: Realizai o aplicaie care utilizeaz un contor timer care are eveniment tick.
Progresul procesului se realizez cu o bar de progres.
Rezolvare:
1. Se aduc pe suprafaa de lucru controalele: timer, progrebar, button;
2. Se seteaz valorile proprietilor: interval pentru timer i pentru progresbar (step,
minimumSize, maximumSize);
3. Tratm evenimentul Tick al controlului timer:

83
private void timer1_Tick(object sender, EventArgs e)
{
nr++;
if (nr == 20)
{
timer1.Stop();
progressBar1.Visible = false;
}
else
progressBar1.PerformStep();
}

3.11 Clasa ImageList


Clasa imageList este un control care ncapsuleaz o colectie de imagini sau iconuri.
Imaginile se folosesc de alte controale cum ar fi PictureBox, ListView, TreeView.
Proprieti
- Images colecia de imagini utilizate de alte controale;
- ImageSize- dimensiunea imaginilor;
Metode
- Draw- metoda deseneaz imagine pe suprafaa altui control;
Aplicaie: S se realizeze o aplicaie care conine o surs de imagini ImageList. Imaginile
se vor afia pe rnd ntr-un control PictureBox prin acionarea unui buton.
Rezolvare
1. Se aduc pe suprafaa formei controalele ImageList, PictureBox, Button;
2. Se apas pe sageata mic dreapta sus a controlului ImageList. Se seteaz
dimensiunea i adncimea culorii;
3. Alegei Choose images. n editorul coleciilor de imagini adugai imaginile;
4. Declarai un cmp privat nr;
5. Vom trata evenimentul click pentru button:
private void button1_Click(object sender, EventArgs e)
{

84
pictureBox1.Image = imageList1.Images[nr % 6];
nr++;
}
Aplicaie: S se realizeze o aplicaie care conine o surs de imagini ImageList. Imaginile
se vor afia pe rnd ntr-un control PictureBox. Imaginile se vor afia automat la un
interval de timp folosind un control Timer.
1. Se aduc pe suprafaa formei controalele ImageList, PictureBox, Button, Timer;
2. Se apas pe sageata mic drepta sus a controlului ImageList. Se seteaz
dimensiunea i adncimea culorii;
3. Alegei Choose Images. n editorul coleciilor de imagini adugati imaginile;
4. Declarai un cmp privat nr;
5. Vom scrie n cmpul text al butonului valoarea start i vom trata evenimentul
click pentru button:
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
6. Vom trata evenimentul Tick al controlului Timer:
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Image = imageList1.Images[nr & 5];
nr++;
}

3.12 Controlul ListView


ListView este un obiect derivat din ListBox, i ofer utilizatorului posibilitai de aezare
i reaezare a datelor.
Proprieti
- View- Setarea vizualizare pentru afiare detalii;
- LabelEdit-permite utilizatorului s editeze un text;

85
- AllowColumnReorder- permite utilizatorului se rearanjeze coloanele;
- GridLines- dac este setat la valoarea true, atunci se afieaz liniile de gril;
- FullRowSelect- selecteaz rndul;
- Sorting- sorteaz n ordine cresctoare;
- ListView1.LargeImageList = imageListLarge- seteaz o imagine;
Exemplu: S se creeze un obiect ListView care afieaz datele unor elevi (nume,
prenume, localitate domiciliu, not).
private void Form1_Load(object sender, EventArgs e)
{
ListView lista = new ListView();creaz obiectul ListView
lista.Bounds = new Rectangle(new Point(10, 10), new Size(300, 200));
lista.View = View.Details;
lista.LabelEdit = true;
lista.AllowColumnReorder = true;
lista.CheckBoxes = true;
lista.FullRowSelect = true;
lista.GridLines = true;
lista.Sorting = SortOrder.Ascending;
ListViewItem rand1 = new ListViewItem("1");//creaz un rnd
rand1.Checked = true;
rand1.SubItems.Add("radu");//creeaz o celul
rand1.SubItems.Add("popa");
rand1.SubItems.Add("ploiesti");
rand1.SubItems.Add("9");//adaug la colecie
ListViewItem rand2 = new ListViewItem("2", 1);
rand2.SubItems.Add("doru");
rand2.SubItems.Add("maria");
rand2.SubItems.Add("bucuresti");
rand2.SubItems.Add("10");
lista.Columns.Add("nr_ctr", -2, HorizontalAlignment.Left);//creeaz antetul,

86
lista.Columns.Add("nume", -2, HorizontalAlignment.Left);
lista.Columns.Add("prenume", -2, HorizontalAlignment.Left);
lista.Columns.Add("localitate", -2, HorizontalAlignment.Left);
lista.Columns.Add("medie", -2, HorizontalAlignment.Center);
lista.Items.AddRange(new ListViewItem[] { rand1, rand2 });//insereaz in list
rndurile construite.
this.Controls.Add(lista);
}

3.13 Controlul TreeView


Controlul TreeView conine mai multe controale TreeView.Item organizate ntr-o
ierarhie. Se poate afia informaia structurat ierarhic, arborescent. Acest structur
ierarhic conine noduri. Utilizatorul poate extinde aceste noduri, apsnd pe butonul (+)
Proprieti:
- backColor- culoare de fundal;
- ForeColor- culoare font;
Exemplu:S se creeze un TreeView a crui informaie din noduri sunt capitolele POO; la
aplicarea evenimentulului click se deschid pagini din proiect.
using System;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace treeview
{
public partial class Form1 : Form
{
TreeNode poo = new TreeNode("poo");
TreeNode clase= new TreeNode("clase");
TreeNode definire = new TreeNode("definire");
TreeNode mostenire = new TreeNode("mostenire");

87
TreeNode controale = new TreeNode("controale");
TreeNode PictureBox1 = new TreeNode("PictureBox1 ");
TreeNode baze_date = new TreeNode("baze_date ");
TreeNode ado = new TreeNode("ado ");
TreeNode xml = new TreeNode("xml ");
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
TreeNode tNode;
tNode = treeView1.Nodes.Add("poo"); //nodul rdcin
tNode.ForeColor = Color.Green;
treeView1.Nodes[0].Nodes.Add(clase);//descendent al nodului poo
treeView1.Nodes[0].Nodes[0].Nodes.Add(definire);//descendent al nodului clase
treeView1.Nodes[0].Nodes[0].Nodes.Add(mostenire);
mostenire.BackColor = Color.Gold;//proprietate a nodului mostenire, culore
fundal
treeView1.Nodes[0].Nodes.Add(controale);
treeView1.Nodes[0].Nodes[1].Nodes.Add(PictureBox1);
treeView1.Nodes[0].Nodes.Add(baze_date);
treeView1.Nodes[0].Nodes[2].Nodes.Add(ado);
treeView1.Nodes[0].Nodes[2].Nodes.Add(xml);
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(treeView1.SelectedNode.FullPath.ToString());
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)

88
{
if (treeView1.SelectedNode == xml)
{
Form2 f2 = new Form2();
f2.ShowDialog();
}
}
}}

3.14 Controlul WebBrowser


WebBrowser este un control care permite navigarea pe Internet.
Metode
1. Navigate(url) permite navigarea pe Internet;
Exemplu: webBrowser1 (www.edu.ro);
2. GoHome()- trimite la pagina de start;
Exemplu: webBrowser1.GoHome ();
3. Stop ()- oprete navigarea;
Exemplu: webBrowser1.Stop ();
4. Refresh ()- remprosptare.
Exemplu: webBrowser1.Refresh ();
5. ShowSaveAsDialog ()-pentru a afia SaveAsDialog()
Exemplu: webBrowser1.ShowSaveAsDialog ();
6. ShowPrintPreviewDialog ()-pentru a afia PrintPreviewDialog
Exemplu: webBrowser1.ShowPrintPreviewDialog ();
7. ShowPropertiesDialog()- pentru a afia PropertiesDialog
Exemplu: webBrowser1.ShowPropertiesDialog
3.15 Controlul WindowsMediaPlayer
Este un control folosit pentru redare media.
Proprieti
- autostart- ncarc automat fiierul;
Metode:

89
- Play()- pornete media;
- Stop() oprete redare media;
- Pause()- face o pauz de redare;
- Open() - deschide URL pentru redare media;
- URL() ncarc fiierul ales de utilizator.
Aplicaie: S se realizeze o aplicaie care folosete un obiect WindowsMediaPlayer,
butoane pentru operaiile de ncrcare, play, oprire fiiere media i OpenFileDialog.
Se aduc pe form controalele menionate n enun, iar codul pentru evenimetele click ale
butoanelor este:
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
w.settings.autoStart = false;
w.URL = openFileDialog1.FileName;
}
}
private void button2_Click(object sender, EventArgs e)
{
w.Ctlcontrols.play();
}
private void button3_Click(object sender, EventArgs e)
{
w.Ctlcontrols.stop();
}

3.16 Probleme rezolvate


1. Se d un vector cu n elemente numere ntregi. Realizai o aplicaie care determin
cea mai lung secven de elemente pozitive din vector aflate pe poziii
consecutive.
using System;

90
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication61
{
public partial class Form1 : Form
{
Button[] vb = new Button[12];
int [] v = new int [11];
string s;
string[] x;
public int n;
int l1 = 0, p = 1, lmax = 0, pmax = 1,i;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader("TextFile1.txt");
s = sr.ReadLine();
x = s.Split(' ');
n = x.Length;
for ( i = 0; i < x.Length; i++)
v[i]=int.Parse (x[i]);
for ( i = 0; i < n; i++)
{

91
vb[i] = new Button();
vb[i].Location = new Point( 100 + 40 * i,100);
vb[i].Height = 30;
vb[i].Width = 30;
vb[i].Text = x[i];
vb[i].BackColor = Color.Blue;
this.Controls.Add(vb[i]);
}
MessageBox.Show(n.ToString());
}
private void button2_Click(object sender, EventArgs e)
{
for (int i = pmax + 1; i <= pmax + lmax; i++)
vb[i].BackColor = Color.Red;
}
private void button3_Click(object sender, EventArgs e)
{
timer1.Start(); i = 0;
}
private void timer1_Tick(object sender, EventArgs e)
{
i++;
if (i>=n)
timer1.Stop();
else
if (v[i] > 0)
{
vb[i].BackColor = Color.Brown;
//Thread.Sleep(300);
l1++;

92
}
else
{
if (l1 > lmax)
{
lmax = l1;
pmax = p;
}
l1 = 0; p = i;
}
if (l1 > lmax)
{
lmax = l1;
pmax = p;
}
}
}
}
2. Se d un graf neorientat. S se determine toate lanurile de lungime L.
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{

93
public RadioButton[] v = new RadioButton[10];
public int n = 0, a = 0, b = 0, c = 0, d = 0, x, y;
public int[,] ma = new int[9, 9];
public Form1()
{
InitializeComponent();
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
n++;
v[n] = new RadioButton();
v[n].Location = new Point(e.X, e.Y);
v[n].Text = n.ToString();
this.Controls.Add(v[n]);
}
private void button1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Red, 1);
for (int i = 1; i <= n; i++)
if (v[i].Checked)
if (a == 0 && b == 0)
{
a = v[i].Location.X + 5;
b = v[i].Location.Y + 5;
x = i;
}
else
{
c = v[i].Location.X + 5;

94
d = v[i].Location.Y + 5;
g.DrawLine(p, a, b, c, d);
a = 0; b = 0; c = 0; d = 0;
y = i;
ma[x, y] = 1; ma[y, x] = 1;
}
}
private void button2_Click(object sender, EventArgs e)
{
int L = int.Parse(textBox1.Text);
Graphics g1 = this.CreateGraphics();
// Pen p1 = new Pen(Color.Olive );
back1 ob = new back1(n, ma, v);
ob.back(1,L, g1);
// ob.afis();
}
}
class back1
{
public RadioButton[] v1 = new RadioButton[10];
public int n1, K = 0;
public int[,] a1 = new int[9, 9];
public int[] st = new int[7];
public back1(int n, int[,] a, RadioButton[] v)
{
n1 = n;
a1 = a;
v1 = v;
}
public void init(int K)

95
{
st[K] = 0;
}
public bool succ(int K)
{
if (st[K] < n1)
{
st[K]++;
return true;
}
else return false;
}
public bool valid(int K)
{
bool ev;
ev = true;
for (int i = 1; i <= K - 1; i++)
if (st[i] == st[K])
ev = false;
if ((K > 1) && (a1[st[K - 1], st[K]] == 0))
ev = false;
return ev;
}
public bool sol(int K, int L)
{
return (K == L);
}
public void tipar(int K, Graphics g)
{
Pen p1 = new Pen(Color.Black, 1);

96
Pen p2 = new Pen(Color.Yellow,1);
int i;
Thread.Sleep(3000);
for (i = 1; i <=K-2; i++)
{
int a5 = v1[st[i]].Location.X + 5;
int b = v1[st[i]].Location.Y + 5;
int c = v1[st[i+1]].Location.X + 5;
int d = v1[st[i+1]].Location.Y + 5;
g.DrawLine(p1, a5, b, c, d);
Thread.Sleep(1000);
}
Thread.Sleep(1000);
for (i = 1; i < n1-1; i++)
{
int a4 = v1[st[i]].Location.X + 5;
int b4 = v1[st[i]].Location.Y + 5;
int c4 = v1[st[i + 1]].Location.X + 5;
int d4 = v1[st[i + 1]].Location.Y + 5;
g.DrawLine(p2, a4, b4, c4, d4);
}
}
public void back(int K, int L, Graphics g)
{
if (K==L+1)
{
tipar(K, g);
}
else
{

97
init(K);
while (succ(K))
if ((valid(K)))
back(K + 1, L,g);
}
}
}
}
3. Realizai un test format din itemi cu alegere dual (de tip adevrat-fals).
Utilizatorul alege numrul de itemi i realizeaz un fiier text cu ntrebrile i
rspunsurile. Programul alege aleator itemii, afieaz textul i la sfrit afiseaz
rezultatul.
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections.ObjectModel;
namespace test_check
{
public partial class Form1 : Form
{
int i, j, ok,x,n,nr=0;
int[] v = new int[10];
CheckBox[] c = new CheckBox[10];
Collection<intreb> intrebare = new Collection<intreb>();
public Form1()
{

98
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{n=int.Parse (textBox1.Text );
StreamReader f = new StreamReader("TextFile1.txt");
while (!f.EndOfStream)
{
intreb a = new intreb();
a.test = f.ReadLine();
a.raspuns = f.ReadLine();
intrebare.Add(a);
}
Random r = new Random();
i = 0;
while (i <= 3)
{
x = r.Next(intrebare.Count ()); ok = 1;
for (j = 0; j <= i; j++)
if (v[j] == x)
ok = 0;
if (ok == 1)
v[i] = x;
i++;
}
for (i = 0; i < n; i++)
{
c[i] = new CheckBox();
c[i].Text = intrebare[v[i]].test;
c[i].Location = new Point(40, 70 + i * 20);
this.Controls.Add(c[i]);

99
}
}
private void button2_Click(object sender, EventArgs e)
{
for (i = 0; i < n; i++)
{
if (c[i].Checked && intrebare[v[i]].raspuns == "da")
nr++;
}
MessageBox.Show(nr.ToString());
}
}
public class intreb
{
public string test, raspuns;
}
}
4. Realizai un test format din itemi de completare. Utilizatorul alege numrul de
itemi i realizeaz un fiier text cu ntrebrile i rspunsurile. Fiierul poate fi
memorat oriunde pe suport de memorie extern. Programul alege aleator itemii ,
afieaz textul i la sfrit afieaz rezultatul.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
100
using System.Collections.ObjectModel;
namespace WindowsFormsApplication7
{
public partial class Form1 : Form
{
Collection<intr> intrebare = new Collection<intr>();
int[] v = new int[9];
int i, x, ok, j, nr = 0;
TextBox[] t = new TextBox[5];
Label[] l = new Label[5];
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
Random r = new Random();
i = 0;
while (i <= 3)
{
x = r.Next(7); ok = 1;
for (j = 0; j <= i; j++)
if (v[j] == x)
ok = 0;
if (ok == 1)

101
v[i] = x;
i++;
}
StreamReader f1 = new StreamReader("TextFile1.txt");
while (!f1.EndOfStream)
{
intr a = new intr();
a.test = f1.ReadLine();
a.raspuns = f1.ReadLine();
intrebare.Add(a);
}
for (i = 0; i <= 3; i++)
{
t[i] = new TextBox();
t[i].Location = new Point(100, 120 + i * 40);
this.Controls.Add(t[i]);
l[i] = new Label();
l[i].Text = intrebare[v[i]].test;
l[i].Location = new Point(100, 100 + i * 40);
this.Controls.Add(l[i]);
}
}
private void button3_Click(object sender, EventArgs e)
{
for (i = 0; i <= 3; i++)
if (t[i].Text == intrebare[v[i]].raspuns)
nr++;
MessageBox.Show(nr.ToString());
}
}

102
public class intr
{
public string test, raspuns;
}
}
5. Folosind controlul RichTextBox s se editeze un test i baremul de corectare.
ntrebrile sunt alese aleator de program dintr-un fiier text.
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.ObjectModel;
using System.IO;
namespace WindowsFormsApplication27
{
public partial class Form1 : Form
{
Collection<intr> intrebare = new Collection<intr>();
int[] v = new int[9];
int i, x, ok, j;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.AppendText(listBox1.Text + " LA " + listBox2.Text + '\n');
}

103
private void button2_Click(object sender, EventArgs e)
{
Random r = new Random();
i = 0;
while (i <= 3)
{
x = r.Next(7); ok = 1;
for (j = 0; j <= i; j++)
if (v[j] == x)
ok = 0;
if (ok == 1)
v[i] = x;
i++;
}
StreamReader f = new StreamReader("TextFile1.txt");
while (!f.EndOfStream)
{
intr a = new intr();
a.test = f.ReadLine();
a.raspuns = f.ReadLine();
intrebare.Add(a);
}
for (j = 1; j <= i; j++)
richTextBox1.AppendText(intrebare[v[j]].test+'\n');
}
public class intr
{
public string test, raspuns;
}
private void button3_Click(object sender, EventArgs e)

104
{
richTextBox1 .AppendText ("BAREM DE CORECTARE"+'\n');
for (j = 1; j <= i; j++)
richTextBox1.AppendText("raspuns corect "+intrebare[v[j]].raspuns+" 1p " +
'\n');
}
private void button4_Click(object sender, EventArgs e)
{
if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
richTextBox1.SelectionFont = fontDialog1.Font;
}
private void button5_Click(object sender, EventArgs e)
{
richTextBox1.SelectionBullet = true;
}
}
}
6. Se consider un triunghi de numere naturale format din n linii. Pe prima linie se
afla un numr, pe a doua dou numere, pe linia n se afl n numere. Cu ajutorul
acestui triunghi se pot forma sume de numere naturale. n felul urmtor:
- Se pornete de la linia 1
- Succesorul unui numr se gsete pe linia urmtoare sub el sau pe diagonal la
dreapta
Care este cea mai mare sum care se poate obine.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;

105
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication9
{
public partial class Form1 : Form
{ Button[,] a = new Button[7, 7];
int[,] b = new int[7,7];
public int s = 0,i,n;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
n = int.Parse(textBox1.Text);
for(int i=1;i<=n;i++)
for (int j = 1; j <= i; j++)
{
Random r = new Random();
int x = r.Next(34);
b[i, j] = x;
a[i, j] = new Button();
a[i, j].Location = new Point(100 + i * 40, 100 + j * 40);
a[i, j].Height = 35;
a[i,j].Width =35;
a[i, j].BackColor = Color.Gray;
a[i, j].Text = b[i,j].ToString ();
this.Controls.Add(a[i, j]);
}
}

106
private void button2_Click(object sender, EventArgs e)
{
timer1.Start();
i = -1;
s = s + b[1,1];
}
private void timer1_Tick(object sender, EventArgs e)
{
if (i == n-1 )
timer1.Stop();
else
{i++;
if(b[i+1,i]>b[i+1,i+1])
{s+=b[i+1,i];
a[i+1,i].BackColor =Color .Lime;
}
else
{s+=b[i+1,i+1];
a[i+1,i+1].BackColor =Color .Lime;
}
}
MessageBox.Show(s.ToString());
}
}
}
7. Folosind limbajul C# s se realizeze un cronometru analogic.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
107
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace cronometru
{
public partial class Form1 : Form
{
float unghi = 0;float r1=200F,r2=150F;
const float PI = 3.141592654F;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)


{
timer1.Start();
}
private void button1_Paint(object sender, PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
PointF punct1 = new PointF(200F,200F);
PointF punct2 = new PointF( (float)(200 + r1 * System.Math.Sin(unghi *PI / 30
)),(float)(200F - r1 * System.Math.Cos(unghi * PI/30)));
Pen p = new Pen(Color.Black, 2);
Pen p1 = new Pen(Color.Red , 2);
Pen p3 = new Pen(Color.Green , 2);
108
g.DrawLine(p, punct1, punct2);
PointF punct3 = new PointF((float)(200F + r2 * System.Math.Sin(unghi * PI /
30/60)), (float)(200 - r2 * System.Math.Cos(unghi * PI / 30/60)));
PointF punct4 = new PointF((float)(200F + r2 * System.Math.Sin(unghi * PI / 30
/ 360)), (float)(200 - r2 * System.Math.Cos(unghi * PI / 30 / 360)));
g.DrawLine(p1, punct1, punct3);
g.DrawLine(p3, punct1, punct4);
for (int i = 1; i <= 12; i++)
{
float x = (float)(200F+r1 * System.Math.Cos(i * 30 * PI / 180));
float y = (float)(200F+r1 * System.Math.Sin(i * 30 * PI / 180));
float x1 = (float)(205F + r1 * System.Math.Cos(i * 30 * PI / 180));
float y1 = (float)(205F + r1 * System.Math.Sin(i * 30 * PI / 180));
g.DrawLine(p, x,y,x1,y1);
}
}
private void Form1_Load(object sender, EventArgs e)
{
Form1_Resize(sender, e);
}
private void Form1_Resize(object sender, EventArgs e)
{
this.unghi = this.unghi + 1;
this.Refresh();
}
private void timer1_Tick(object sender, EventArgs e)
{

109
Form1_Load(sender, e);
}
private void button3_Click(object sender, EventArgs e)
{
timer1.Stop();
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
MessageBox.Show(e.X.ToString() + " " + e.Y.ToString());
}
}
}
8. O albin trebuie s ajung la o floare. Ea i-a pierdut simul orientrii i de aceea
Mihai trebuie s o dirijeze din tastele de daplasare.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication17
{
public partial class Form1 : Form
{
bool up1, down1, left1, right1;
int a, b;
public Form1()
110
{
InitializeComponent();
KeyDown += new KeyEventHandler(Form1_KeyDown);
this.KeyPreview = true;
b = pictureBox2.Location.Y;
a= pictureBox2.Location.X ;
timer1.Start();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
{
down1 = false;
up1 = false;
right1 = false;
left1 = true;
break;
}
case Keys.Right:
{
down1 = false;
up1 = false;
right1 = true;
left1 = false;
// MessageBox.Show("Right");
}
break;
case Keys.Down:

111
{
down1 = true;
up1 = false;
right1 = false;
left1 = false;
} break;
case Keys.Up:
{
down1 = false;
up1 = true;
right1 = false;
left1 = false;
} break;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (down1)
{
b = pictureBox2.Location.Y - 10;
pictureBox2.Location = new Point(a, b);
}
if (up1)
{
b = pictureBox2.Location.Y + 11;
pictureBox2.Location = new Point(a, b);
}
if (right1)
{
a = pictureBox2.Location.X - 11;

112
pictureBox2.Location = new Point(a, b);
}
if (left1)
{
a = pictureBox2.Location.X + 11;
pictureBox2.Location = new Point(a, b);
}
if (pictureBox2.Bounds.IntersectsWith(pictureBox1.Bounds))
{ timer1.Stop(); MessageBox.Show("gasit"); }
}
}
}

3.17 Probleme propuse


1. Aplicaia cuprinde dou forme form1, form2. La click pe butonul button se
deschide forma2 n care se gsete un cmp de editare textBox1. La nchiderea
formei2 se afieaz pe forma1 cu ajutorul unui control Label1 testul scris n
cmpul de editare textBox1.
2. Aplicaia conine o singur form care are dou butoane. Prin efectuarea repetat
de click pe un buton, cellalt buton trece prin diferite stri, fiecrei stri i
corespunde afiarea pe buton a unei anumite imagini din imageList.
3. Aplicaia conine o singur form care are n ea un buton care n faza de execuie,
s poat fi "tras" oriunde pe form. Dup operaia de glisare, se vor afia pe form
(label) coordonatele butonului.
4. Aplicaia conine o singur form care are n ea un buton care n faza de execuie
s poat fi "tras" oriunde pe form. Dup operaia de glisare s revin la poziia
iniial.
5. Aplicaia conine mai multe forme, iar pe prima un grup radio. n faza de
proiectare, grupul radio are trei butoane. n faza de execuie pentru fiecare buton
selectat, se va deschide cte o form.

113
6. Aplicaia conine o singur form care are n ea un buton standard i o caset de
editare. n faza de proiectare caseta de editare are setat
proprietateaPasswordChar la caracterul '*'. n faza de execuie, la click pe buton
se va afia un mesaj de acceptare sau de respingere (funcia MessageBox.Show)
dup cum textul din caseta de editare (editat manual n prealabil, dar invizibil,
toate caracterele sale fiind nlocuite cu *) este sau nu egal cu un text fixat.
7. Aplicaia conine o singur form care are n ea un grup radio, un buton, un cmp
de editare. n faza de proiectare, grupul radio nu are butoane. n faza de execuie,
la click pe primul buton se va adug un nou buton grupului radio, cu textul ataat
identic cu textul casetei de editare.
8. Se d un graf neorientat. S se realizeze un program care afieaz tote ciclurile
euleriene.
9. Se d un vector cu n elemente numere ntregi. Realizai o aplicaie care sorteaz
vectorul.

4 CLASA GRAPHICS
Cu ajutorul acestei clase se realizez desene grafice. Clasa definete o suprafa de
desenare. Metodele sale deseneaz pe aceast suprafa, iar biblioteca GDI+ tie sa
trimit imaginea pe dispozitivul grafic (monitor, imprimant sau altceva).
Desenarea se realizeaz n doua moduri:
Prin intermediul evenimentului Paint al obiectelor;
Cu ajutorul metodei CreateGrphics(), motenit de ctre toate controalele de la
clasa de baz Control
4.1 Principalele metode ale clasei Graphics
DrawEllipse()-Deseneaz o elips specificat printr-un dreptunghi care o mrginete
Sintaxa: DrawEllipse(penia, dreptunghi);- unde dreptunghi-dreptunghiul n care se
nscrie elipsa;
Exemplu:
Pen penita= new Pen(Color.Red, 1);
RectangleF dreptunghi = new RectangleF(0.0F, 0.0F, 200.0F, 100.0F);

114
e.Graphics.DrawEllipse(penita, dreptunghi);
DrawLine()- Deseneaz un segment specificat prin capetele sale.
Sintaxa: DrawLine (penia, punct1, punct2);- unde punct1, punct2 reprezint
coordonatele punctelor .
Exemplu:
Pen penita= new Pen (Color.Black, 3);
PointF punct1 = new PointF (100.0F, 100.0F);
PointF punct2 = new PointF (500.0F, 100.0F);
e.Graphics.DrawLine (penita, punct1, punct2);
DrawRectangle()-Deseneaz un dreptunghi.
Sintaxa: DrawRectangle(penita, dreptunghi);
Exemplu:
Pen penita = new Pen(Color.Black, 3);
Rectangle dreptunghi = new Rectangle(0, 0, 200, 200);
e.Graphics.DrawRectangle(penita, dreptunghi);
DrawImage()- Deseneaz o imagine la o locaie dat
Sintaxa: DrawImage(imagine, dreptunghi);
Unde imagine este imaginea pe care o desenm i are sintaxa:
image imagine = Image.FromFile("imagine.jpg");
Exemplu:
Image newImage = Image.FromFile("SampImag.jpg");
Rectangle destRect = new Rectangle(100, 100, 450, 150);
e.Graphics.DrawImage(newImage, destRect);
DrawArc()-Deseneaz un arc de elips.
Sintaxa: DrawArc (penia, dreptunghi, nceputunghi, sfritunghi);
Exemplu:
Pen penita = new Pen (Color.Black, 3);
Rectangle dreptunghi = new Rectangle(0, 0, 100, 200);
float inceputunghi = 45.0F;
float sfarsitunghi = 270.0F;

115
e.Graphics.DrawArc(penia, dreptunghi, inceputunghi, sfarsitunghi);
RotateTransform- rotete un obiect cu o valoare a unghiului;
Sintaxa : RotateTransform(unghi);
Clear()-Cur suprafaa de desenare i o umple cu o culoare de fundal.

4.2 Pensule pentru umplerea formelor


Sintaxa: Pen penita = new Pen(culoare, grosime, stil);
Metode folosite mai sus pentru desenare conin n sintaxa i o penia. Metodele folosite
pentru pensule sunt:
1. SolidBrush- culoare de umplere;
Exemplu:
SolidBrush s = new SolidBrush(Color.Red);
Rectangle dreptunghi= new Rectangle(0, 0, 200, 200);
e.Graphics.FillRectangle(s, dreptunghi);
2. HatchBrush- haur de umplere;
Sintaxa: HatchBrush h= new HatchBrush(directie, culoare_linie, culoare_umplre );
Exemplu:
HatchBrush h = new HatchBrush(HatchStyle.Horizontal, Color.Red,
Color.yellow);
3. Liniar gradient- umplem pensula cu gradient liniar .
Exemplu:
LinearGradientBrush lg = new LinearGradientBrush( new Point(0, 10), new Point(200,
10), Color.Yellow ,Color.Violet);
4. TextureBruch- pensula de textura, umple forma cu o imagine.
Exemplu : TextureBrush texture = new TextureBrush(image1);

4.3 Desenarea stringului


GDI+ ofer metode DrawString pentru desenarea stringului. Pentru a desena un
string este nevoie de: pensul, font i un punct
Exemplu:
String drawString = "c#";
Font drawFont = new Font("Arial", 16);
116
SolidBrush drawBrush = new SolidBrush(Color.Black);
PointF drawPoint = new PointF(150.0F, 150.0F);
e.Graphics.DrawString(drawString, drawFont, drawBrush, drawPoint);

5. FISIERE XML
Fiierele XML sunt fiiere text a cror date sunt structurate arborescent cu ajutorul
tagurilor. Tagurile nu sunt predefinite. Informaiile sunt cuprinse ntre aceste taguri.
Exemplu :<nume>popa</nume>
Observaii:
XML este case sensitive;
Tag-urile trebuie s fie nchise n ordinea invers n care au fost deschise
C# ofer clase pentru operaiuni cum ar fi: citire, scriere. Aceste clase sunt stocate
n spaiile de nume: System.Xml, System.Xml.Schema, System.Xml.Serialization,
System.Xml.XPath, System.Xml.Xsl. Clasele care lucreaz cu XML se gsesc n spaiul
de nume System,XML. Exemplu de fiier XML
<?xml version="1.0" encoding="utf-8"?>
<element>
<elev>
<nume>popa</nume>
<prenume>irina</prenume>
<clasa>12b</clasa>
<profil>matematica-informatica</profil>
</elev>
</element>
5.1 Clasa XMLDocument

Clasa XMLDocument se bazeaz pe ideea c obiectul are o colecie de noduri


ChildNode. Clasa XMLDocument conine metodele:
1. AppendChild Adaug nodul specificat la sfritul listei de noduri copil.
XmlElement elem = doc.CreateElement("price");
elem.InnerText="19.95";
117
root.AppendChild(elem);
2. CreateComment- Creeaz un comentariu;
XmlComment newComment;
newComment = doc.CreateComment(" fiier XML ");
3. CreateElement (String)-Creeaz un element cu numele specificat;
XmlElement elem = doc.CreateElement("pret");
XmlText text = doc.CreateTextNode("198.95");
doc.DocumentElement.AppendChild(element);
4. CreateAttribute (String)-Creeaz un XmlAttribute cu nume specificat;
5. CreateNode (String, String, String)- creeaz un nod;
6. InsertAfter- insereaz un nod inainte de un nod specificat;
Exemplu- insereaz nainte de primul nod;
XmlDocument doc = new XmlDocument();
doc.LoadXml(fis.xml);
XmlNode root = doc.DocumentElement;
XmlElement elem = doc.CreateElement("tret");
elem.InnerText="19.95";
root.InsertAfter(element, root.FirstChild);
7. insertBefore- insereaz dup un nod. Exemplu: insereaz dup primul mod;
root.InsertBefore (element, root.FirstChild);
8. load(string)- ncarc documentul XML de la URL-ul specificat;
9. removeChild- Elimin nodul copil specificat;
10. Save(stream)- salveaz fiierul xml;
XmlDocument doc = new XmlDocument();
XmlNode root = doc.DocumentElement;
doc.Save(Console.Out);

Aplicaie: S se realizeze o machet care insereaz ntr-un fiier XML datele elevilor
(nume, prenume, clasa, profil, data naterii).
using System;
using System.Data;

118
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
namespace WindowsFormsApplication27
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string path = "XMLFile1.xml";
XmlDocument doc = new XmlDocument();
if (!System.IO.File.Exists(path))
{
MessageBox.Show("lmge;lm");
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8",
"yes");
XmlComment comment = doc.CreateComment("This is an XML Generated
File");
doc.AppendChild(declaration);
doc.AppendChild(comment);
}
else {
doc.Load(path); MessageBox.Show("rau");
}
XmlElement root = doc.DocumentElement;

119
XmlElement Subroot = doc.CreateElement("elev");
XmlElement nume = doc.CreateElement("nume");
XmlElement prenume = doc.CreateElement("prenume");
XmlElement clasa = doc.CreateElement("clasa");
XmlElement profil = doc.CreateElement("profil");
XmlElement datanasterii = doc.CreateElement("datanasterii");
nume.InnerText = textBox1.Text;
prenume.InnerText = textBox2.Text;
clasa.InnerText = textBox3.Text;
profil.InnerText = listBox1.Text;
datanasterii.InnerText = monthCalendar1.Text;
Subroot.AppendChild(nume);
Subroot.AppendChild(prenume);
Subroot.AppendChild(clasa);
Subroot.AppendChild(profil);
Subroot.AppendChild(datanasterii);
root.AppendChild(Subroot);
doc.AppendChild(root);
doc.Save(path);
MessageBox.Show("Details added Successfully");
}
}
}

Aplicaie: S se afieze ntr-un control DataGridView elementele din fiierul xml.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;

120
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace WindowsFormsApplication27
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
XmlReader xmlFile;
xmlFile = XmlReader.Create("XMLFile1.xml", new XmlReaderSettings());
DataSet ds = new DataSet();
ds.ReadXml(xmlFile);
dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
Aplicaie S se parcurg fiierul XML creat mai sus i s se creeze o list ListBox care
reine numele elevilor.

121
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace WindowsFormsApplication27
{
public partial class Form2 : Form
{
XmlDocument xml = null;
XmlNodeList xnList;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
xml= new XmlDocument();
xml.Load("XMLFile1.xml"); //
xnList = xml.SelectNodes("element/elev");
foreach (XmlNode xn in xnList)
{
string nume = xn["nume"].InnerText;
listBox1.Items.Add(nume);
}
}

122
}
}

Aplicaie:S se afieze clasa al crui elev este p.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
DataView dv;
DataSet ds = new DataSet();
ds.ReadXml("XMLFile1.xml");
dv = new DataView(ds.Tables[0]);
dv.Sort = "nume";
int index = dv.Find("popa");
if (index == -1)
{
MessageBox.Show("itemul nu exista");

123
}
else
{
MessageBox.Show(dv[index]["nume"].ToString());
}
}
}
}

5.2 Clasa reader


Metode
Read()- Citete urmtorul caracter i avanseaz pe urmatoarea poziie
Read(Char[], Int32, Int32)- Citete un numr de caractere ncepnd cu o pozitie de
nceput;
ReadToEnd Citete toate caracterele de la poziia curent pn la sfrit;
Aplicaie: S se realizeze o aplicaie care afieaz elementele dintr-un fiier xml ntr-un
control Label.
private void button1_Click(object sender, EventArgs e)
{
listBox1.Text = "";
XmlTextReader xr = new XmlTextReader("XMLFile2.xml");
while (xr.Read())
{
switch (xr.NodeType)
{
case XmlNodeType.Element:
listBox1.Text = listBox1.Text + "<" + xr.Name + ">" + "\r\n";
break;
case XmlNodeType.Text:
listBox1.Text = listBox1.Text + "" + xr.Value + "\r\n";
break;
124
case XmlNodeType.EndElement:
listBox1.Text = listBox1.Text + "</" + xr.Name + ">" + "\r\n";
break;
}
}
label1.Text = listBox1.Text;
xr.Close();
}

5.3 Probleme propuse


1. Realizai o aplicaie care introduce ntr-un fiier XML date despre crile din
bibliotec. Se va realiza o interfa grafic ce cuprinde controale.
2. Datele angajailor unei firme sunt memorate ntr-un fiier XML. Realizai o
aplicaie care afieaz salariul mediu al angajailor din firm

6. BAZE DE DATE RELAIONALE


Baza de date este o colecie de date persistente, care este memorat pe un suport
extern, poate fi extins i manipulat cu ajutorul unui sistem de gestiune a bazelor de
date.
Sistemul de gestiune a bazelor de date. Este un pachet de programe care asigur
interfaa dintre baza de date si utilizator.
O entitate este un lucru, un obiect, o persoan sau un eveniment care are
semnificaie pentru realitatea modelat, pentru care trebuie s colectm date i s le
memorm.O entitate are mai multe atribute.
Relaia este o legtur ntre entiti.
Tipuri de relaii:
- Relaii one-to-one
- Relaii one-to-many
- Relaii many-to-many- ele se trasform n relaii one-to-many
- Relaii recursive

125
6.1 Tehologia ADO.NET.
Este o tehnologie nou care este format din Biblioteci de Clase NET folosite
pentru accesarea bazelor de date.Lucrul cu bazele de date se face:
- n mod conectat. Se realizeaz conexiunea la baza de date, se fac modificrile i la
sfrit se realizeaz deconectarea. Dac sunt muli utilizatori care lucraz
simultan, serverul este ngreunat.
- n mod deconectat. Se ncarc baza de date ntr-o structur de date dataset care
este fiier XML, se produc modificrile n dataset i la sfrit se transmit bazei de
date. Dac baza de date este mare i spaiul de memorie (memorie RAM) este
insuficient, lucrul n mod deconectat este dificil.

6.2 Arhitectura ADO.NET


Are dou componente :
- Furnizorii de date (data provider)
- Seturile de date (datasets)

6.2.1 Furnizorii de date


Furnizorul de date asigur conectarea la o baz de date i manipularea datelor. Baza
de date poate fi fisier text, fisier XML, baz de date relaional. Furnizorul de date
dispune de un numr de obiecte ale unor clase specializate. Acestea sunt:
- Clasa Connection- Este folosit pentru a realiza o conexiune la sursa de
date.Elementele componente sunt: locaia bazei de date, parola, numele.
- Metode: deschidere, nchidere , realizarea unei tranzacii.
- Clasa Command- Este folosit pentru a executa diferite comenzi pe baza de date
(SELECT, INSERT, UPDATE, DELETE) i pentru a furniza obiecte de tip
DataReader sau DataSet. Mai este folosit pentru a apela proceduri stocate.
- Clasa DataReader- Este folosit pentru lucrul n mod conectat la baza de date. Se
folosete apelul metodei ExecuteReader() pentru un obiect al clasei Command.
- Clasa DataAdapter- Face legtura ntre baza de date i obiecte de tip DataSet i
realizeaz operaii n baza de date: nchidere, deschidere, selectare, modificare,
adugare.

126
- Clasa DataSet- Folosit pentru lucrul n mod deconectat, stocheaz date local,
modific datele i retransmite date la baza de date folosindu-se de obiecte
DataAdapter.

6.2.2 Seturile de date


Reprezint o colecie de obiecte DataTable (tabele) relaionate ntre ele cu ajutorul
obiectelor DateRelation. Pe lng tabele relaionate baza de date poate s mai cuprind i
vederi. Clasele cu care lucreaz dataseturile fac parte din sistemul de nume System.Data.
Celelalte clase cu care lucreaz dataseturile sunt:
- dataTable- obiecte care reprezint o singur tabel;
- DataRow- reprezint un rnd dintr-o tabel;
- DataColumn- reprezint o coloan dintr-o tabel;
- DataView- reprezint o vedere;
- DataRowView- reprezint un rnd dintr-o vedere;
- DataRelation- reprezint o relaie ntre dou tabele;
- Constraint- reprezint o constrngere;

6.3 Aplicaii cu baze de date n modelul conectat


Etape:
1. Se include n spaiul de nume biblioteca System.Data.SqlClient;
2. Se deschide o conexiune cu baza de date;
Clasa SqlConnection permite obinerea unei conexiuni la server i
deschiderea cu ajutorul metodei Open();
Constructorul acestei clase SqlConnection primete stringul de conectare;
Proprietile Database i CommandText returneaz baza de date, respectiv
interogarea curent
3. Executarea interogrii
Se construiete un obiect SqlCommand;
Constructorul SqlCommand(sql,conexiune) primete ca argumente
interogarea cerut i conexiunea prin care va lucra;

127
Executarea propriu-zis se face cu metoda ExecuteReader(). Aceasta face
dou lucruri: construiete un obiect reader de tip SqlDataReader i apoi
execut interogarea;
4. Accesarea rezultatelor interogrii:
Se parcurge setul de date cu metoda Read(), care la fiecare apel avanseaz
reader-ul la linia urmtoare;
Pe fiecare linie se poate accesa fiecare coloan indexat reader[3] sau
reader[nume_coloana];
Aplicaie:
1. n baza de date Database1 se creeaz tabela cri (cod,nume, autor, pret).
2. Construim o machet pentru inserarea datelor. Macheta conine patru controale
TextBox i un buton button, pentru transmiterea datelor.
using System;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace bd_conecate
{
public partial class Form1 : Form
{
SqlConnection conexiune = null;//declararea constructorului de conectare

public Form1()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my

128
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{ SqlDataReader reader = null;//declararea unui obiect SqlCommand
string inserare;
inserare = @"insert into carti values ('"; inserare += textBox1.Text + "','" +
textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')";
SqlCommand c = new SqlCommand(inserare, conexiune);//realizarea unui obiect
SqlCommand
reader = c.ExecuteReader();//executarea propriu zisa
if (c != null)
MessageBox.Show("insereaza");
conexiune.Close();// inchiderea conexiunii
conexiune.Dispose();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio
2010\Projects\bd_conecate\bd_conecate\Database1.mdf;Integrated Security=True;User
Instance=True");
conexiune.Open();
}

129
3. Realizai o machet care afieaz nregistrri din tabela cri cu ajutorul
interogrii select. Macheta conine patru obiecte label i un obiect buton.
Programul ataat:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace bd_conecate
{
public partial class Form3 : Form
{
SqlConnection conn = null;
public Form3()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{

130
string selectare = "SELECT * FROM carti";
SqlCommand c = new SqlCommand(selectare, conexiune);
SqlDataAdapter adapter = new SqlDataAdapter(c);
DataSet ds = new DataSet();
adapter.Fill(ds, "carti");
foreach (DataRow r in ds.Tables["carti"].Rows)
{
label1.Text = label1.Text + "\n" + r["cod"] + "\n";
label2.Text = label2.Text + "\n" + r["nume"] + "\n";
label3.Text = label3.Text + "\n" + r["autor"] + "\n";
label4.Text = label4.Text + "\n" + r["pret"] + "\n";
}
}
}
}
4. Realizai o machet care tearge din tabela cri nregistrrile crilor care au
preul introdus de utilizator ntr-un obiect TextBox:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace bd_conecate
{
public partial class Form5 : Form
{
SqlConnection conn = null;

131
public Form5()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{
SqlDataReader reader = null;
string deletesql;
deletesql = "delete from carti where pret='"; deletesql += textBox1.Text + "'";
SqlCommand cmd = new SqlCommand(deletesql, conn);
reader = cmd.ExecuteReader();
if (cmd != null)
MessageBox.Show("sterge");
conn.Close();
conn.Dispose();
}
}
}

6.4 Aplicaii cu baze de date n modul deconectat


Construirea i utilizarea dataset-urilor
Etape:
1.Se creeaz o instan a clasei DataSet folosind unul din constructorii:
dataset ds=new DataSet();

132
dataset ds=new DataSet(numeataset);
2. Crearea adaptorului: un DataSet primete datele de la un DataDataAdaptor.
SqlDataAdapter da =new SqlDataAdapter(sql,conn);
3.ncrcarea DataSet-ului cu elementele unei tabele se face cu ajutorul metodei Fill:
Da.Fill(ds,tabela);
4.Accesarea unui table:
DataTable dt=ds.DataTable(table);
5.Accesarea rndurilor i a coloanelor:
dataRow r=dt.Row[nr];
Data Column=dt.Comlumn[nume);
6.Accesarea valorilor dintr-o tabel
Foreach( DataRow row in dt.Row)
{ foreach (DataColumn col in dt.Column)
Console.Writeine(row[col]);
}
7.Datele se propag napoi n baza de date cu ajutorul metodei update a clasei
DataAdapter;
Int Update(DataSet ds);
Int update(DataTable dt);
Aplicaie: S se realizeze tabela cri (id, nume, autor, pre). Inserarea se realizeaz cu o
machet care conine controale TextBox.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication7

133
{
public partial class Form1 : Form
{
private Database1DataSet ds = null;//declararea dataSet
private Database1DataSetTableAdapters.t1TableAdapter t=null;//declararea
adaptorului
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ds = new Database1DataSet();//crearea dataset
t = new Database1DataSetTableAdapters.t1TableAdapter();//crearea adaptorului
t.Fill(ds.t1);//umplerea Dataset cu datele din tabela
}
private void button1_Click(object sender, EventArgs e)
{
t.Insert(int.Parse(textBox1.Text),textBox2.Text);//inserarea
t.Update(ds.t1);//trasmiterea datelor in tabela
Close();
} }
}

6.5 Limbajul SQL

6.5.1 Interogare simpl

Crearea tabelelor se realizeaz vizual. Solution Explorer- click dreapta pe


numele proiectului- Add- New Item- Service-based Database- se d un nume
bazei de date- Add. si contriete un DataSet gol. Din fereastra Server Explorer
click dreapta pe Table- Add New Table. Pentru relaionare click dreapta pe

134
Database Diagrams- Add New Diagram- se adaug tabelele i se realizeaz
legtura ntre tabele trgnd mouse-ul apsat ntre cele dou cmpuri care sunt
chei primare sau chei strine.

Comanda select

select [all | distinct]{* | list de atribute selectate | expr as alias}


from. tabele
where- condiie
group by- list de expresii
having - condiie
order by- {expresie logic}[asc | desc]]
Prezena clauzelor SELECT i FROM este obligatorie deoarece acestea specific
coloanele selectate, respectiv tabelele din care se vor extrage datele.
Eliminarea duplicatelor se poate realiza folosind clauza DISTINCT. Dac nu se
specific parametrul DISTINCT, parametrul ALL este implicit i are ca efect afiarea
dublurilor.
Simbolul * permite selectarea tuturor atributelor din tabelele asupra crora se
execut cererea. Atributele sau expresiile din lista clauzei SELECT pot conine alias-uri,
care vor reprezenta numele cmpurilor respective n cadrul tabelului furnizat ca rezultat
de instruciunea SELECT.
Clauza WHERE poate fi folosit pentru a impune anumite condiii liniilor din care
se vor extrage atributele specificate n clauza SELECT.
Clauza GROUP BY grupeaz nregistrrile dup anumite cmpuri; n cazul
prezenei acestei clauze, clauza HAVING poate impune restricii suplimentare asupra
rezultatului final.
Ordonarea nregistrrilor se poate face cu ajutorul clauzei ORDER BY. Cu ajutorul
parametrilor ASC i DESC se poate specifica ordonarea cresctoare, respectiv
descresctoare a nregistrrilor. Pentru o secven cresctoare valorile null sunt afiate
ultimele.

135
Comanda DELETE . tergerea unei linii dintr-un tabel se realizeaz prin comanda
DELETE.
FROM table
WHERE condiie
Comanda UPDATE Pentru modificarea valorilor existente ntr-un tabel se utilizeaz
comanda UPDATE.
UPDATE tablename / viewname
SET coloana =expresie
WHERE condiie
Aplicaie : Se d tabelul elev (id, nume, prenume, clasa, media). Cerine:
1. S se afieze clasele distincte;
2. S se afieze elevii clasei 11a sortai dup medie, descresctor;
3. S se afieze media fiecrei clase;
4. S se afieze elevii cu media cea mai mare;
5. S se tearg elevii clasei 12a;
6. S se micoreze cu 1 punct media elevilor de la 11a;
Rezolvare
1. SELECT DISTINCT clasa FROM elev
2. SELECT DISTINCT id, nume, prenume, clasa, medie FROM elev WHERE
(clasa = '11a')ORDER BY medie;
3. SELECT clasa, AVG(medie) AS medie_clasa FROM elev GROUP BY clasa;
4. SELECT DISTINCT id, nume, prenume, clasa, medie FROM elev WHERE
(medie =(SELECT MAX(medie) AS Expr1 FROM elev AS elev_1))
5. DELETE FROM elev WHERE (clasa = '12a')
6. UPDATE elev SET medie = medie 1 WHERE(clasa = '11a');

6.6.2 Interogare multipl


Interogarea multipl este acea interogare care combin date din mai multe tabele
relaionate.
Exist mai mult multe tipuri:

136
1. Produs cartezian- leag o nregistrare dintr-o tabel cu toate nregistrrile din
cealalt tabel
2. Equijoin sau natural join- dou tabele sunt legate printr-o relaie de egalitate
ntre cheie primar i cheie strin ( relaii 1-n) sau ntre chei primare (relaii 1-1).
Aplicaie: Se d o baz de date format din tabelele clas (id, nume) i tabela elev
(id_elev, nume, prenume, id_clasa). Realizai o interogare care afieaz elevii i clasa
din care face parte.
SELECT clasa.id, clasa.nume, clasa.prenume, clasa.id_clasa, elev.id AS Expr1,
elev.nume AS Expr2, elev.sala FROM clasa INNER JOIN elev ON clasa.id =
elev.id
3. Nonequijoin- leag elemente din mai multe tabele condiia fiind alta dect cea de
egalitate.
4. Selfjoin leag o tabel cu ea nsi;
Aplicaie: Se d tabela angajat ( id, nume, prenume, id_ef). S se afieze toi angajaii i
numele efului lor.
SELECT * FROM angajat a, angajat b where a.id=b.id_sef;
Standard ANSI
SELECT a.id, a.nume, a.prenume, a.id_sef, b.id AS Expr1, b.nume AS Expr2,
b.prenume AS Expr3, b.id_sef AS Expr4 FROM angajat AS a INNER JOIN
angajat AS b ON a.id = b.id_sef
5. Outerjoin se realizeaz legturi ntre dou tabele atunci cnd o nregistrare
dintr-o tabel nu gsete corespondena n cealalt tabel.
Aplicaie: Pentru baza de date de la punctual 2 s se afieze i clasele care nu au elevi.
select * from elev c, clasa ewhere e.id(+)=c.id_clasa;

6.7 Contrlolul DataGridView


Controlul este folosit pentru afiarea datelor. Clasa DataGridView permite
contruirea unei tabele adaptabile, celulele i rndurile se seteaz prin intermediul
proprietilor Row si Column. Controlul se poate popula manual sau programatic. Ca
alternativ, controlul se poate lega la o sursa de date prin intermediul proprietatilor
DataSource si DataMember. Astfel popularea se face automat.

137
Aplicatie Sa se realizeze o baz de date. Informaiile din tabel se afieaz ntr-un control
DataGridView
1. Se creeaz baza de date ;
2. Se creeaz un set de date (Dataset) n felul urmtor: din Solution Explorer, click
dreapta add- dataset. Se trage tabelul peste dataset.Se creeaz automat i un
adaptor;
3. Pentru DataGridview click pe sageat i se face legatura cu datasetul creat;
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace grid
{
public partial class Form2 : Form
{ SqlConnection conn = null;//
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
conn = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\grid\grid\Database1.mdf;Integrated
Security=True;User Instance=True");// // string connectionString = "Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\grid\grid\Database1.mdf;Integrated
Security=True;User Instance=True";
string sql = "SELECT * FROM elev";
SqlDataAdapter dataadapter = new SqlDataAdapter(sql, conn);

138
DataSet ds = new DataSet();
conn.Open();
dataadapter.Fill(ds, "elev");
conn.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "elev";

}
}
}
Metode
1. Sortare dataGridView1.Sort (dataGridView1.Columns [1], ListSortDirection.
Ascending)
2. Filtrare DataView dv; dv = new DataView (ds.Tables [0], "type = 'business'",
"tip Desc", DataViewRowState.CurrentRows); dataGridView1.DataSource = dv;
Aplicaie:S se realizeze o secven de program care sorteaz, filtreaz date dintr-un
tabel, afieaz ntr-un control DataGridView
dataGridView1.DataMember = "elev"; DataView dv;
dv = new DataView(ds.Tables[0], "medie > 6", "medie Desc",dataGridView1.DataSource
= dv;
3. Adugare linii- dataGridView1.Rows.Add(row);
4. Adugare coloane- dataGridView1.Columns[Index].Visible = false;
5. Formatare- DataGridViewRow row = this.dataGridView1.RowTemplate;
row.DefaultCellStyle.BackColor = Color.Bisque;
row.Height = 35;
row.MinimumHeight = 20;
6. Adugare butoane check DataGridViewCheckBoxColumn check = new
DataGridViewCheckBoxColumn();
dataGridView1.Columns.Add(check);
7. Adugare imagine DataGridViewImageColumn imag = new
DataGridViewImageColumn ();
139
Imagine = Image.FromFile ("Calea Image");
imag.Image = imagine
dataGridView1.Columns.Add (imag);
8. Adugare link - DataGridViewLinkColumn lnk = new
DataGridViewLinkColumn();
dataGridView1.Columns.Add(lnk);
9. Printare - printDocument1.Print ();
Aplicaie: S se realizeze o aplicaie care execut urmtoarele operaii ntr-un Control
DataGridView
- creeaz rnduri i coloane;
- formateaz celulele;
- adaug imagini;
- adaug butoane check;
- adaug linkuri,
- printeaz document,
private void button2_Click(object sender, EventArgs e)
{
dataGridView1.ColumnCount = 4;
dataGridView1.Columns[0].Name = " ID";
dataGridView1.Columns[1].Name = " Name";
dataGridView1.Columns[2].Name = "prenume";
dataGridView1.Columns[2].Name = "medie";
string[] row = new string[] { textBox1.Text, textBox2.Text, textBox3.Text,
textBox4.Text };
dataGridView1.Rows.Add(row);
DataGridViewLinkColumn link = new DataGridViewLinkColumn();//adaugarea de
linkuri.
dataGridView1.Columns.Add(lnk);
link.HeaderText = "Link Data";
link.Name = "Http://csharp.net-informations.com";
link.Text = "Http://csharp.net-informations.com";
140
link.UseColumnTextForLinkValue = true;
DataGridViewImageColumn imag = new DataGridViewImageColumn();//adaugare
imagine:
Image image = Image.FromFile("Resources//Water lilies.jpg");
imag.Image = image;
dataGridView1.Columns.Add(imag);
imag.HeaderText = "Image";
imag.Name = "imag";
//adaugare butoane
DataGridViewCheckBoxColumn check = new DataGridViewCheckBoxColumn();
dataGridView1.Columns.Add(check)
dataGridView1.Rows[1].Cells[5].Value = true;
}
//Pentru formatare:
dataGridView1.RowsDefaultCellStyle.BackColor = Color.Bisque;
dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Beige;
dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
dataGridView1.DefaultCellStyle.SelectionBackColor = Color.Red;
dataGridView1.DefaultCellStyle.SelectionForeColor = Color.Yellow;
dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.Columns[1].DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleRight;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.AllowUserToResizeColumns = false;
//Pentru printare se aduce pe form printDocument1 din toolbox
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
Bitmap bm = new Bitmap(this.dataGridView1.Width,
this.dataGridView1.Height);

141
dataGridView1.DrawToBitmap(bm, new Rectangle(0, 0,
this.dataGridView1.Width, this.dataGridView1.Height));
e.Graphics.DrawImage(bm, 0, 0);
}
private void button2_Click(object sender, EventArgs e)
{
printDocument1.Print();
}
6.8 Controlul Chart
Controlul Chart afieaz date ca un grafic sau sub form de diagram.
Proprieti :
Title- numele diagramei;
Obiectul conine mai multe obiecte Series. Proprietile obiectelor Series:
Series.ChartType tipul de diagram;
Series.Legend introduce o legend;
Series.XAxisType seteaz tipul axei X;
Series.YAxisType seteaz tipul axei Y;
Adugarea unei Series se face cu ajutorul metodei Add: Chart.Series.Add ( "Series" );
Aplicaie: Se d tabela elev (id,nume_prenume, medie). S se realizeze o aplicaie care
afieaz cu ajutorul obiectului Chart numele elevilor i mediile lor.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication12

142
{
public partial class Form1 : Form
{
SqlConnection conn = null;
public Form1()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{
string selectSQL = "SELECT * FROM elev";
SqlCommand cmd = new SqlCommand(selectSQL, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "elev");
foreach (DataRow r in ds.Tables["elev"].Rows)
{this .chart1 .Series ["nume"].Points .AddXY(r["nume"],r["nota"]);
this.chart1.Series["prenume"].Points.AddXY(r["nume"], r["nota"]);
}
}
}
}

143
6.9 Proceduri stocate
O procedur stocat este o secven de instruciuni stocate pe serverul de baze de
date, care are un nume, sunt compilate o singur dat i apelate de cte ori este nevoie. O
procedur stocat cuprinde instruciuni SQL.Sintaxa este:
CREATE PROCEDURE [posesor] nume_procedura:nr
@nume_parametru tip_data [=default][output]
@nume_parametru tip_data [=default][output]
.
[FOR REPLICATION][WITH Recompile]
ENCRIPTION]
AS ..
INSTRUCIUNI SQL
RETUR
O procedur stocat poate fi apelat folosind obiectul SqlCommand:
SqlCommand cmd = new SqlCommand("procedura",conexiune);
cmd.CommandType = CommandType.StoredProcedure;
Primul parametru al constructorului este un ir de caractere ce reprezint numele
procedurii stocate. A doua instruciune de mai sus spune obiectului SqlCommand ce tip
de comand va fi executat prin intermediul proprietii CommandType.
Exemplu:Am creat o procedur procedur care afieaz toate nregistrrile tabelei elev
(id, nume, nota).
Procedura este:
ALTER PROCEDURE procedura
AS
select * from elev;
RETURN
Codul :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
144
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication22
{
public partial class Form1 : Form
{
SqlConnection conn = null;
public Form1()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("florin", conexiune);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);//crearea adaptorului
DataSet ds = new DataSet();//crearea setului de date
adapter.Fill(ds, "elev");
foreach (DataRow r in ds.Tables["elev"].Rows)
{

145
label1.Text = label1.Text + "\n" + r["id"] + "\n";
label2.Text = label2.Text + "\n" + r["nume"] + "\n";
label3.Text = label3.Text + "\n" + r["nota"] + "\n";
}
}
}
}
Aplicaie proceduri stocate n mod deconectat, Fie tabela angajai (id, nume, prenume,
salariu). n mod vizual construim adapter. Din meniul Data- ShowDataSources- Edit
DataSet with Designer. Din Server Explorer glism pe suprafaa DataSet tabelul angajat
i obinem angajatTableAdapter. Pe diagrama tabelei clas din DataSet, click dreapta pe
angajatTableAdapter- Add Query, se deschide o fereastr i alegem Use SQL
Statermants- Insert. Se creeaz procedura:
ALTER PROCEDURE [dbo].ins
(
@id int,
@nume nchar(10),
@prenume nchar(10),
@salariu real
)
AS
SET NOCOUNT OFF;
INSERT INTO [dbo].[angajat] ([id], [nume], [prenume], [salariu]) VALUES (@id,
@nume, @prenume, @salariu);
SELECT id, nume, prenume, salariu FROM angajat WHERE (id = @id)
Unde (@id, @nume, @prenume, @salariu sunt parametrii de ieire.
Pe form aducem patru controale TextBox i un control Button, iar pe evenimentul
Click introducem codul:
private void button1_Click(object sender, EventArgs e)
{

146
if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "" || textBox4.Text ==
"")
MessageBox.Show("nu sunt introduse date");
else
{
angajatTableAdapter1.ins(int.Parse(textBox1.Text), textBox2.Text,
textBox3.Text, float.Parse(textBox4.Text));
angajatTableAdapter1.Fill(database1DataSet1.angajat);
Close();
}
}
Aplicaie: Fie tabela cri (cod, titlu, autor, pre). Folosind o procedur afiai numrul de
cri cu preul mai mare dect o valoare introdus de utilizator n controlul
TextBox.Procedura este:
ALTER PROCEDURE [dbo].p1
(
@pret real
)
AS
SET NOCOUNT ON;
SELECT COUNT(*) FROM carte where pret>@pret
Codul asociat evenimentului click al butonului:
private void button2_Click(object sender, EventArgs e)
{
int nr=(int)carteTableAdapter1.p1(float.Parse(textBox1.Text));
MessageBox.Show(nr.ToString());
}
Aplicaie: Fie tabela produs (id, denumire, pre, cantitate, valoare). S se tearg toate
produsele care au denumirea introdus de utilizator n controlul TextBox.
Procedura este:

147
ALTER PROCEDURE [dbo].del
(
@Original_denumire nchar(10)
)
AS
SET NOCOUNT OFF;
DELETE FROM [dbo].[produs] WHERE (denumire = @Original_denumire)
Evenimentul click al butonului:
private void button2_Click(object sender, EventArgs e)
{
produsTableAdapter1.del(textBox1.Text);
produsTableAdapter1.Fill(database1DataSet1.produs);
Close();
}
Aplicaie: Fie tabela Examen (id, nume, prenume, nota1, nota2, medie). S se
completeze automat cmpul medie.
Procedura stocat pentru calculul mediei este:
ALTER PROCEDURE [dbo].m1
AS
SET NOCOUNT OFF;
UPDATE examen
set medie=(nota1+nota2)/2
codul pentru evenimentul click al butonului:
private void button1_Click(object sender, EventArgs e)
{
examenTableAdapter1.m1();
examenTableAdapter1.Fill(database1DataSet1.examen);
}
Probleme propuse

148
1. Creai o baz de date cu numele Spital care cuprinde tabelele Pacieni (cnp,
nume, prenume, adres, venit, diagnostic, salon, id_medic) i Medici ( cnp,
nume, prenume, specializarea). Aplicaia implementeaz operaii de inserare n
tabele, stergere de nregistrti, modificare de valori ale unor nregistrri, afisare
de date din baza de date.
2. Creai o baz de date cu numele Muzic care cuprinde tabelele: muzician ( id,
nume, prenume, data_naterii, formaia) i albume) id, titlu, data_apatiiei, pret,
id_muzician). Aplicaia implementeaz operaii de inserare n tabele, stergere
de nregistrti, modificare de valori ale unor nregistrri, afisare de date din
baza de date.

Bibliografie
1. Charles Petzold- "Programare n Windows cu C#", Teora, 2003
2. Herbert Schildt -"C#", Teora, 2002
3. Constantin Glan, Susana Glan- Programare n Visual C#, L&S Infomat,
2008

149
4. Ana ntuneric, Cristina Sichim, Daniela Taras- Aplicaii Windows Visual n C#,
Polirom, 2010
5. Jon Jagger "C# Programming Course"
www.jaggersoft.com/csharp_course/index.html
6. Documentaia online MSDN pentru mediul vizual de dezvoltare Microsoft Visual
Studio (varianta C#)
7. Ileana Popescu, Letiia Velcescu- Proiectarea Bazelor de Date, Editura Universitii
din Bucureti, 2007
8. Marin Fotache "SQL", Editura Polirom, 2009
9. Carmen Popescu Manual de Informatic clasa a XII-a, Editura L&S Infromat,
2007
10. C# Station ADO.NET Tutorial http://www.csharp-station.com/Tutorial/AdoDotNet
11. Sorin Cristea- Curriculum Pedagogic, Editura Didactic i Pedagogic, 2006
12. SINGER Mihaela (Coord.), SARIVAN Ligia (Coord. Volum) "Ghid metodologic
pentru educaie tehnologic, informatic, tehnologia informaiei: Liceu Teoretic",
Editura S.C. Aramis Print S.R.L., Bucureti, 2001
13. MASALAGIU Cristian, ASIMININOAEI Ioan -"Didactica predrii informaticii",
Editura Polirom, Iai, 2004
14. MASALAGIU Cristian , ASIMINOAEI Ioan, Maxim Ioan -"Metodica predrii
informaticii, Editura Matrix Rom, Bucureti", 2001
15. Mihaela Suditu, Luminia Rpeanu, Luminia Radu, Daniela Ionescu, Codrua
enea- Didactica Informaticii, Editura Karta-Graphic, 2011
16. Carmen Petre, Daniela Popa, Stefania Crciunnoiu, Camelia Iliescu- Metodica
Predrii Informaticii i Tehnologiei Informaiei, Editura Arves, 2002

150
Declaraie de autenticitate

Subsemnatul Petre Florin avnd funcia didactic professor la unitatea colar


Colegiul Naional Nicolae Iorga Valenii de Munte declar pe propria rspundere
c lucrarea cu titlul Aspecte stiinifice i metodice ale predrii elementelor
programrii orientat pe obiecte avnd coordonator tiinific Lector Dr Mihail
Cherciu a fost elaborat personal pe baza studierii bibliografiei de specialitate, a
experienei personale i mi aparine n ntregime. De asemenea nu am folosit alte
surse dect ncele menionate n bibliografie, nu au fost preluate texte, date sau
elemente de grafic din alte lucrri, fr a fi citate i fr a fi precizat sursa
prelurii, inclusiv n cazul n care sursa o reprezint alte lucrri ale candidatului.

Data Semntura candidatului

151
152