Crearea Unui Proiect In Php

Introducere

Sistemele de baze de date au devenit o componentă esențială a vieții de zi cu zi în societatea modernă. În cursul oricarei zile, fiecare dintre noi desfășurăm activitați care implică interacțiunea cu o baza de date, ca de exemplu, depunerea sau extragerea unor sume de bani din banca, rezervarea biletelor la tren sau avion, rezervarea locurilor la hotel, căutarea unei referințe bibliografice într-o biblioteca computerizată (digital library), etc.
În sensul cel mai larg, o baza de date (database) este o colecție de date corelate din punct de vedere logic, care reflectă un anumit aspect al lumii reale și este destinată unui anumit grup de utilizatori. O baza de date poate fi creată și menținuta manual (de exemplu, fișele de evidență a carților dintr-o bibliotecă, așa cum erau folosite cu ani în urmă) sau computerizat, ceea ce reprezintă obiectul aplicației mele.

Un sistem de baze de date (database system) este un sistem computerizat de menținere a evidenței unei anumite activități. Sistemele de baze de date pot avea dimensiuni (număr de înregistrări) extrem de variate, de la câteva zeci de înregistrări (de exemplu, o agendă cu numere de telefon) sau poate ajunge la sute de milioane de înregistrări (de exemplu, într-un sistem de plată a taxelor si impozitelor).

Având ca premise aceste idei, am hotărat să aleg pentru temă de licență o aplicație software cu implicații în domeniul înfrumusețării deoarece mi se pare foarte important aspectul nostru fizic atât din punct de vedere al look-ului cât și al igienei.

În lucrarea ce o voi elabora propun realizarea unei interfețe,prietenoasă și ușor accesibilă, pentru un angajat al unui salon de înfrumusețare cu care să poate țină evidența clientilor și a operațiunilor făcute acestora.

Astfel, în capitolele ce urmează, vă voi prezenta:

partea teoretică – ce cuprinde informații despre limbajul de programare c#, baza de date MySQL,programul EasyPHP (o aplicație care include serverul web Apache, sistemul de gestiune a bazelor de date MySQL si aplicația de administrare a bazelor de date phpMyAdmin).

partea practică – în care voi descrie interacțiunea elementelor enumerate mai sus.

Partea teoretică

Limbajul de programare C#

Platforma .NET

.NET este un cadru (Framework) de dezvoltare software unitară care permite realizarea, distribuirea și rularea atât a aplicațiilor-desktop Windows cat și aplicațiilor WEB.

Tehnologia .NET pune laolaltă mai multe tehnologii (ASP, XML, OOP, SOAP, WDSL,

UDDI, WPF, LINQ) și limbaje de programare (VB, C++, C#, F#) asigurând totodată atât

portabilitatea codului compilat între diferite calculatoare cu sistem Windows, cât și

reutilizarea codului în programe, indiferent de limbajul de programare utilizat.

.NET Framework este o componentă livrată împreună cu sistemul de operare Windows.

Pentru a dezvolta aplicații pe platforma .NET este bine sa avem 3 componente

esențiale:

un set de limbaje (C#, Visual Basic .NET, J#, Managed C++, Smalltalk, Perl, Fortran, Cobol, Lisp, Pascal etc),

un set de medii de dezvoltare (Visual Studio .NET, Visio)

o bibliotecă de clase pentru crearea serviciilor Web, aplicațiilor Web și aplicațiilor

desktop Windows.

Când dezvoltăm aplicații .NET, putem utiliza:

servere specializate – un set de servere Enterprise .NET (din familia SQL Server 2008, Exchange 2000 etc.), care pun la dispoziție funcții de stocare a bazelor de date, email, aplicații B2B (Bussiness to Bussiness – comerț electronic între partenerii unei afaceri).

servicii Web (în special comerciale), utile în aplicații care necesită identificarea

utilizatorilor (de exemplu, .NET Passport – un mod de autentificare folosind un singur nume și o parolă pentru toate site-urile vizitate)

servicii incluse pentru dispozitive non-PC (Pocket PC Phone Edition, Smartphone,

Tablet PC, Smart Display, XBox, set-top boxes, etc.

.NET Framework

Componenta .NET Framework, ajunsă astăzi la versiunea 4.0 SP1 stă la baza tehnologiei .NET, este ultima interfață între aplicațiile .NET și sistemul de operare și actualmente conține: limbajele C#, VB.NET, C++ și odată cu versiunea 2010, introduce noul limbaj F#. Pentru a fi integrate în platforma .NET toate aceste limbaje respectă niște specificații OOP numite Common Type System (CTS). Ele au ca elemente de bază: clase, interfețe, delegări, tipuri valoare și referință, iar ca mecanisme: moștenire, polimorfism și tratarea excepțiilor.

Platforma comună de executare a programelor numită Common Language Runtime (CLR), utilizată de toate cele 4 limbaje. CTS face parte din CLR. Ansamblul de biblioteci necesare în realizarea aplicațiilor desktop sau Web numit Framework Class Library (FCL).

Componenta .NET Framework este formată din compilatoare, biblioteci și alte executabile utile în rularea aplicațiilor .NET.

1.1.3 Istoria C, C++, C#

În ultimii 20 de ani,C și C++ au fost limbajele de programare alese pentru aplicațiile comerciale și de bussines. Aceste limbaje au oferit un grad ridicat de control programatorilor, lăsându-i pe aceștia să folosească pointeri și multe funcții low-level de sistem. Totuși,când compari limbaje că Microsoft Visual Basic și C/C++,ajungi să realizezi că ,deși C/C++ sunt limbaje mai puternice,acestea necesita un interval mare de timp în realizare aplicațiilor.Mulți programatori C/C++ s-au temut de schimbarea la limbaje gen Visual Basic deoarece pierdeau controlul low-level al funcțiilor,cu care erau învățați.

Era astfel nevoie de un limbaj care să integreze caracteristici atât din Visual Basic,cât și din C/C++.Un limbaj care să ajute cu dezvoltarea rapidă a aplicațiilor,dar care să confere și un control asupra funcțiilor sistem și care să se integreze cât mai bine cu aplicațiile web,XML,și alte tehnologii în curs de dezvoltare.

Oferind o tranziție ușoară programtorilor C/C++ și un limbaj ușor de învățat pentru programtorii neexperimentați sunt doar 2 dintre beneficiile noului limbaj de programare C#.

C# a fost lansat în anul 2000 și combină cele mai bune idei din limbaje că: C, C++ și Java cu accesorii din Microsoft. NET Framework care conferă o experiență productivă în programare atât pentru programatorii experimentați cât și pentru începători.

Limbajul C. Programarea structurata

Limbajul C a fost inventat de către Dennis Ritchie in anii „70 pe un calculator pe care rula sistemul de operare UNIX. Limbajul C s-a dezvoltat in urma revoluției programarii structurate din anii ‟60. Înainte de programarea structurată, programele erau greu de scris și de ințeles din cauza logicii. O masă încâlcită de salturi, apelui și reveniri, greu de urmarit era cunoscută sub numele de cod spaghetti. Datorită sintaxei sale concise și ușor de utilizat, în anii „80, limbajul C a devenit cel mai raspândit limbaj structurat.

Limbajul C are insă limitele sale. Una dintre acestea o reprezintă incapacitatea de a lucra cu programe mari. Limbajul C ridică o barieră atunci cand programul atinge o anumită dimensiune. Acest prag depinde de program, instrumentele folosite, programator, dar este posibil să se situeze in jurul a 5000 de linii de cod.

Limbajul C++. Programarea orientată obiect

La sfarșitul anilor ‟70 dimensiunile multor programe erau aproape de limitele impuse de limbajul C. Pentru a rezolva problema a aparut o modalitate nouă de programare și anume programarea orientată obiect (POO). Limbajul C nu permitea programarea orientată obiect. Fiind cel mai raspandit limbaj, s-a dorit extinderea sa în vederea implementării noii modalități de programare: programarea POO.

Limbajul C++ a fost creat de catre Bjarne Stroustrup incepând din 1979, la laboratoarele Bell din Murray Hill, New Jersey. Limbajul a fost denumit inițial C cu clase, iar in 1983 numele acestuia a fost modificat in C++. In esență, C++ reprezintă versiunea orientată obiect a limbajului C. În anii ‟80, limbajul C++ a suferit dezvoltării si perfecționări masive, astfel ca în anii ‟90 a devenit cel mai raspândit limbaj de programare.

1.1.4 C# Introducere

Ca parte a ansamblului strategiei .NET, dezvoltată de Microsoft, la finele anilor ‟90 a fost creat limbajul C#.

C# este direct înrudit cu C, C++ și Java. “Bunicul” limbajului C# este C-ul. De la C, C# moștenește sintaxa, multe din cuvintele cheie și operatorii. De asemenea, C# construiește peste modelul de obiecte definit în C++.

Relația dintre C# și Java este mai complicată. Java derivă la randul sau din C și C++. Ca și Java, C# a fost proiectat pentru a produce cod portabil. Limbajul C# nu derivă din Java. Între C# și Java există o relație similară celei dintre “veri”, ele derivă din același stramoș, dar deosebindu-se prin multe caracteristici importante.

Limbajul C# conține mai multe facilități novatoare, dintre care cele mai importante se referă la suportul încorporat pentru componente software. C# dispune de facilități care implementează direct elementele care alcătuiesc componentele software, cum ar fi proprietățile, metodele și evenimentele. Poate cea mai importantă facilitate de care dispune C# este posibilitatea de a lucra intr-un mediu cu limbaj mixt.

Caracteristicile limbajului

Tipuri de date: C# lucrează cu două tipuri de date: valoare și referință. Tipurile valoare rețin valoarea actuală, tipurile referință rețin referințe ale unor valori salvate în memorie. Variabilă, care se bazează pe tipuri de valoare conține în mod direct un valori. Alocarea un tip de valoare variabilă cu o valoare cuprinsă copii. Aceasta diferă de la atribuirea de variabile de tip referință, care copiaza o referință la obiect, dar nu obiectul în sine. Spre deosebire de tipurile de referință, aceasta nu este posibil pentru a obține un nou tip de la un tip de valoare. Cu toate acestea, cum ar fi tipurile de referință, struct pot implementa interfețe. Spre deosebire de tipurile de referință, aceasta nu este posibil pentru un tip de valoare să conțină valoarea nulă. Cu toate acestea, tipurile de characteristică nu permit tipuri de valori care urmează să fie alocate la zero. Fiecare tip de valoare are un constructor implicit care initializeaza implicit valoarea implicită de acest tip.

Clasele: tot codul din C# trebuie să fie inclus într-o clasă. Nu poți defini o variabilă în afară clasei și nu poți scrie cod care nu e inclus într-o clasă. Clasele pot avea constructori, care se execută când un obiect al clasei este creat și un destructor, care se execută atunci când un obiect al clasei este distrus. Clasele suportă moștenirea și toate clasele derivă dintr-o clasă de bază. C# ne permite să grupăm clasele într-o colecție de clasa numită namespace. Clasele pot conține atât cod cât și informație. Fiecare membru al clasei are o proprietate numită accessibility scop, care definește vizibilitatea membrului către alte obiecte.

Funcțiile: O funcție este o bucată de cod care poate/nu poate să întoarcă o valoare atunci când este apelata. O funcție este în general asociată cu o bucată de cod care întoarce o informație pe când metodele, în general nu returnează nimic. Funcțiile au 4 tipuri de parametrii:

Parametrii de intrare sunt valori care sunt trimise funcției dar funcția nu poate modifica acele valori.

Parametrii de ieșire nu au nicio valoare când sunt trimiși funcției, dar funcția îi poate modifica și îi trimite cu noile valori înapoi la apelant.

Parametrii referință introduc o referință către o altă valoare. Ei au o valoare care este introdusă în funcție dar această valoare poate fi modificată în interiorul funcției.

Parametrii params definesc un număr variabil de argumente într-o listă.

Variabilele: pot fi definite ca și constante. Constantele sunt valori care nu pot fi modificate pe durata execuției codului.

Interfețele: sunt grupuri de proprietăți metode și evenimente care specifică un set de funcționalitate. Clasele pot implementa interfețe. Se pot dezvolta implementări ale unei interfețe fără a interfera cu codul existent lucru ce minimalizează problemele de compatibilitate. Odată ce o interfața a fost, ea nu mai poate fi modificată, dar poate să evolueze cu ajutorul moștenirii. Clasele din C# pot implementa multe interfețe deși ele moștenesc o singură clasă de bază.

Atributele: Un atribut este un obiect care reprezintă datele pe care doriți să se asocieze cu un element în programul dumneavoastră. Elementul la care va atașa un atribut este menționată ca obiectiv de acest atribut. Acestea declară informații suplimentare despre o clasă la CLR (Common Language Runtime).

Incapsularea

Incapsularea este un mecanism care combină codul și datele pe care le manipulează, menținând integritatea acestora față de interferența cu lumea exterioară. Incapsularea mai este numită și realizarea de cutii negre, întrucât se ascunde funcționalitatea proceselor. Când codul și datele sunt incapsulate se crează un obiect.

Implementarea unui obiect se referă la varibilele membru ale obiectului respectiv și la metodele interne, care contribuie la realizarea funcționalității obiectului, dar care nu sunt necesare utilizatorilor obiectului respectiv. Drepturile de acces reprezintă modalitatea prin care se poate ascunde de utilizatorii clasei detaliile de implementare ale acesteia.

Cei cinci specificatori de acces în C# și semnificația lor sunt:

Private – membrii privați sunt accesibili numai din clasa în care sunt declarați

Internal – membrii interni sunt accesibili numai din clase care fac parte din același assembly cu clasa în care sunt declarați

Protected – membrii protejați sunt accesibili din clasa în care sunt declarați și din clasele derivate ale acesteia

Protected internal – membrii interni și protejați sunt accesibili din clasa în care sunt declarați, din clasele care fac parte din același assembly și din clasele derivate, indiferent în ce assembly sunt acestea

Public – membrii publici sunt accesibili din orice clasă .

Dacă specificatorul de acces lipsește, membrii unei clase sunt implicit privați.

O clasă este alcătuită din membrii moșteniți din clasa de bază și din membrii declarați în corpul clasei. Datele pot fi constante, sau variabile. Diferența dintre constante și variabile este că valoarea constantelor poate fi calculată la compilare și plasată în fișierul executabil ca atare, pe când valoarea varibilelor este calculată la rulare. Implicit, pot fi declarate doar constante aparținând tipurilor recunoscute de compilator ca ”primitive”. Varibilele pot fi de orice tip și pot avea valori care nu sunt cunoscute la compilare.

Constructorul este o metodă care implementează acțiunile care au loc la crearea și inițializarea unei instanțe a clasei. Are același nume ca și clasa din care face parte și nu returnează nicio valoare, nici măcar void. Poate apela un alt constructor al aceleiași clase sau un constructor al clasei de bază. Poate avea orice nivel de acces.

Dacă într-o clasă nu este implementat nici un constructor, compilatorul inserează automat un constructor public, fără argumente, care inițializează automat toate varibilele cu valorile lor implicite. Prin moștenire se înțelege crearea unei clase derivate care conține implicit toți membrii (mai puțin constructorii, constructorul static și destructorul) ale altei clase, numite clasă de bază. Moștenirea se mai numește și derivare, sau mai rar, specializare. În C#, moștenirea se realizează punând ”:” după numele clasei, urmat de numele clasei de bază. O clasă poate avea o singură clasă de bază. Dacă o clasă nu este derivată explicit din nicio clasă, compilatorul o face implicit să fie derivată din object. Object este rădăcina ierarhiei de clase din .NET. Moștenirea este tranzitivă, în sensul că dacă A este derivată din B, și B este derivată din C, implicit A va conține și membrii lui C (și evident și pe cei ai lui B). Prin moștenire, o clasă derivată extinde clasa de bază. Clasa derivată poate adăuga noi membrii, dar nu îi poate elimina pe cei existenți. Deși clasa derivată conține implicit toți membrii clasei de bază, acest fapt nu înseamnă că îi și poate accesa. Membrii privați ai clasei de bază există și în clasa derivată dar nu pot fi accesați. În acest fel, clasa de bază își poate schimba la nevoie implementarea internă fără a distruge funcționalitatea claselor derivate externe. O referință la clasa derivată poate fi tratată ca o referință la clasa de bază. Această conversie se numește upcast, din cauză că în reprezentările ierarhiilor de clase, clasele de bază se pun deasupra, cele derivate dedesuptul lor, ca într-un arbore generalizat. Prin upcast se urcă în arbore. Conversia inversă, de la clasa de bază la cea derivată se numește downcast și trebuie făcută explicit, deoarece nu se știe dacă referința indică spre un obiect din clasa de bază, spre un obiect din clasa derivată la care se încearcă realizarea conversiei sau spre un obiect al altei clase derivate din clasa de bază. Accesibilitatea trebuie să fie consistentă și în cazul în care încercăm să derivăm o clasă din alta. Clasa de bază trebuie sa fie cel puțin la fel de accesibilă ca și clasa derivată din ea. O clasă derivată poate ascunde membri ai clasei de bază, declarând membri cu aceeași semnătură. Prin aceasta, membrii clasei de bază nu sunt eliminați, ci devin inaccesibili prin referințe la clasa derivată. Ascunderea membrilor se face folosind cuvântul cheie new. Acest cuvânt are rolul de a-l obliga pe programator să-și declare explicit intențiile și face, în acest fel, codul mai lizibil.

1.1.5 Crearea unui proiect nou

Un proiect este o entitate formată din mai multe fișiere header, fișiere de resurse, etc…, care conțin toate informațiile necesare generării programului executabil. Proiectul trebuie să iși construiască toate elementele într-un director. Acest director trebuie să fie creat în prealabil folosind instrumentele sistemului de operare sau selectând opțiunea de a crea un nou director în momentul creerii proiectului.

Spațiul de lucru desemnează o structura de informații referitoare la unul sau mai multe proiecte care au legatură între ele. În mod implicit, spațiul de lucru definește informații cu privire la un singur proiect.

Pentru a crea un proiect nou se selectează din meniul „File”, submeniul „New” și din acesta opțiunea „Projects…”. Este afișată o casetă de dialog, ce conține o listă cu toate tipurile de proiecte ce pot fi create. De aici se poate selecta tipul proiectului pe care programatorul dorește să îl creeze. Se pot alege diferite tipuri de proiecte în funcție de limbajul de programare folosit (C++, C#, VB) și în funcție de tipul aplicației (de consolă, cu interfață grafică, pagina web, etc). Totodată, în această casetă de dialog se definesc numele proiectului, directorul pentru proiect. Numele proiectului trebuie să fie scurt, deoarece el este folosit în construcția numelor pentru clasele și fișierele aplicației. După apăsarea butonului OK noul proiect va fi creat și structura lui va fi disponibilă programatorului pentru gestionare în „Solution Explorer”. Rularea aplicației se poate face prin selectarea opțiunii „Execute” din meniul „Build”, prin apăsarea butonului [!] sau folosind acceleratorul „CTRL+F5”.

O aplicație Windows tipică dispune de o bară de titlu în partea superioară, urmată de un meniu derulat și de unul sau mai multe rânduri de bare cu instrumente ale caror pictograme au rol de scurtaturi. Sub aceste bare de instrumente se află zona principală de afișare, iar la baza ferestrei se găsește o bară de stare. Chiar și între tipuri diferite de aplicații, aceleași opțiuni de meniu și pictograme de pe bara cu instrumente sunt identice și își păstrează semnificația.

1.1.6 Deschiderea unui proiect existent

Modalitatea cea mai rapidă de a redeschide un proiect este să se apeleze la lista „Recent Workspaces” din cadrul meniului „File”.

Crearea aplicațiilor cu interfață grafică

Pentru a creea o nouă aplicație cu interfață grafică cu ajutorul Visual C# se accesează meniul „File”, submeniul „New” și opțiunea „Project…”. În fereastra deschisă se selectează tipul proiectului ca fiind „Visual C#”, iar template-ul „Windows Application”. După ce se va seta numele și locația se va da „Ok”. Automat se va crea nouă soluție care va conține noul proiect, în interiorul căruia vom regăsi un formular denumit generic „Form1” asupra căruia se poate opera modificări. De asemenea este creat un fișier „Program.cs” cu ajutorul căruia se deschide formularul principal în momentul rulării programului.

Acestui nou proiect i se pot adaugă nenumarate clase, fișiere sau formulare, folosind meniul contextual.

Popularitatea aplicațiilor Windows provine din conceptul de interfață universală. O aplicație Windows tipică dispune de o bară de titlu în partea superioară, urmată de un meniu derulat și de unul sau mai multe rânduri de bare cu instrumente ale caror pictograme au rol de scurtături. Sub aceste bare de instrumente se află zona principală de afișare, iar la baza ferestrei se găsește o bară de stare. Chiar și între tipuri diferite de aplicații, aceleași opțiuni de meniu și pictograme de pe bara cu instrumente sunt identice și își păstrează semnificația.

În Visual C# se poate crea foarte ușor un schelet de interfață cuprinzând elementele enumerate mai sus, care ulterior pot fi dezvoltate sau modificate după dorința programatorului. Clasele utilizate de Visual C# sunt asamblate formând o structură omogenă numită arhitectură.

Pentru a crea o nouă aplicație cu interfață grafică cu ajutorul Visual C# se accesează meniul „File”, submeniul „New” și opțiunea „Project…”. În fereastra deschisă se selectează tipul proiectului ca fiind „Visual C#”, iar template-ul „Windows Application”. După ce se va seta numele și locația se va da „Ok”. Automat se va crea nouă soluție care va conține noul proiect, în interiorul căruia vom regăsi un formular denumit generic „Form1” asupra căruia se poate opera modificări. De asemenea este creat un fișier „Program.cs” cu ajutorul căruia se deschide formularul principal în momentul rulării programului.

Acestui nou proiect i se pot adaugă nenumarate clase, fișiere sau formulare, folosind meniul contextual.

1.2 Introducere în PHP și MySQL

1.2.1 Ce este PHP ?

PHP (se pronunță pe-haș-pe) este un limbaj de programare ce rulează server, proiectat special pentru WEB. Într-o pagină HTML puteți îngloba cod PHP care va fi executat la fiecare vizitare a paginii.

Codul dumneavoastră PHP este interpretat pe serverul WEB și generează un cod HTML care va fi văzut de Uilizator (clientului (browserului) fiindu-i transmis numai cod interpretat ca și HTML).

Figura 1.1

PHP a fost conceput în anul 1994 și a fost inițial munca unui singur om, Rasmus Lerdorf.

A fost adoptat de alți oameni talentați și a trecut prin trei rescrieri importante pentru a ajunge la produsul clar și matur de astăzi. În octombrie 2002, era în uz de mai mult de nouă milioane de domenii din lumea întreagă, iar acest număr este într-o continuă creștere.

PHP este un produs Open Source, cu acces la codul sursă. Il puteți folosi, modifica și redistribui, toate acestea în mod gratuit.
Inițial, PHP era acronimul de la Personal Home Page, dar a fost modificat pentru a se alinia la conversia de numire recursivă GNU (GNU = Gnu`s Not Unix) și acum este acronimul pentru PHP Hypertext Preprocessor.

Versiunea actuală a PHP este 5.2.4

1.2.2 Ce este MySQL ?

MySQL(se pronuntă mai-es-chiu-el) este un sistem de gestiune a bazelor de date, foarte rapid și robust.O bază de date vă permite să stocați, să cautați, șa sortați și să vă regăsiți datele în mod eficient.

Serverul MySQL controlează accesul la datele dumneavoastră pentru a garanta că mai mulți utilizatori pot lucra simultan cu acestea. Deci, MySQL este un server multi-user (mai mulți utilizatori) și multi-thread (mai multe fire de execuție). Utilizeaza SQL (Structured Query Language), limbajul standard de interogare a bazelor de date din întreaga lume.

MySQL este disponibil în mod public din 1996, dar istoria dezvoltării sale incepe in 1979. A câștigat de mai multe ori Linux Journal Readers` Choice Award (Premiul cititorilor).

MySQL este disponibil sub o licență Open Source, dar dacă este nevoie sunt disponibile și licențe comerciale.

Versiunea actuală a MySQL este 5.1.

1.2.3 Instalarea interpretorului EasyPHP

Vă voi descrie pe scurt pașii necesari instalării programului EasyPHP, o aplicație care include serverul web Apache, interpretorul PHP, sistemul de gestiune a bazelor de date MySQL și aplicația de administrare a bazelor de date phpMyAdmin.

Descărcați EasyPHP. Mergeți la http://www.easyphp.org/ → Download.

Instalați EasyPHP (e bine să se păstreze configurările implicite).

Porniți programul EasyPHP (de cele mai multe ori va porni automat)

În fereastra de EasyPHP apăsați F8 (sau Click-Dreapta pe iconița EasyPHP de langă ceas – în Systray – și alegeți Explore). Se va deschide un folder, care reprezintă locația de unde vor fi luate fișierele când sunt afișate in browser (de obicei C:\Program Files\EasyPHP 5.3.0\www). Salvați un fișier de test în locația de mai sus.

Într-un browser (Firefox, Internet Explorer, Opera, Safari, etc) mergeți la http://localhost/. Va fi afișata o pagină cu linkuri către fișierele/folderelor din Document Root care pot fi accesate. O altă modalitate de a accesa un fișier este să mergeți direct la http://127.0.0.1/home ,de exemplu http://127.0.0.1/home/mysql/

De ce imi trebuie un server web?    

Instalând EasyPHP, calculatorul personal devine un server web (local, ce-i drept – accesibil doar de către mine). Practic PC-ul se comportă ca un site ce are adresa http:http://127.0.0.1/). Este foarte important ca fișierele PHP să fie accesate prin intermediul serverului web, deoarece acesta recunoaște scripturile PHP și invocă automat interpretorul PHP. Fără această intermediere oferită de web-server, scripturile PHP nu ar fi procesate ci trimise așa cum sunt la browser.

1.3 Baza de date

1.3.1 Sisteme de Baze de Date – Introducere

Sistemele de baze de date au devenit o componentă esențială a vieții de fiecare zi în societatea modernă. În cursul oricărei zile, fiecare dintre noi desfășurăm activități care implică interacțiunea cu o bază de date, ca de exemplu, depunerea sau extragerea unor sume de bani din bancă, rezervarea biletelor la tren sau avion, rezervarea locurilor la hotel, căutarea unei referințe bibiografice într-o bibliotecă computerizată (digital library), etc.

În sensul cel mai larg, o bază de date (database) este o colecție de date corelate din punct de vedere logic, care reflectă un anumit aspect al lumii reale și este destinată unui anumit grup de utilizatori. O bază de date poate fi creată și menținută manual (de exemplu, fișele de evidență a cărților dintr-o bibliotecă, așa cum erau folosite cu ani în urmă) sau computerizat, ceea ce reprezintă obiectul cursului de față.

Un sistem de baze de date (database system) este un sistem computerizat de menținere a evidenței unei anumite activități.

Sistemele de baze de date pot avea dimensiuni (număr de înregistrări) extrem de variate, de la câteva zeci de înregistrări (de exemplu, o agendă cu numere de telefon) sau poate ajunge la sute de milioane de înregistrări (de exemplu, într-un sistem de plată a taxelor și impozitelor).

Utilizatorul unei baze de date are posibilitatea de a efectua mai multe categorii de operații asupra datelor stocate:

Introducerea de noi date (insert);

Ștergerea unora din datele existente (delete);

Modificarea datelor memorate (update);

Interogarea bazei de date (query), pentru a regăsi anumite informații, selectate după un criteriu ales.

Definiția unei colecții de date ca fiind o bază de date se aplică, în sens mai restrâns, acelor colecții de date care permit toate operațiile de mai sus, inclusiv operația de interogare. Simple colecții de fișe (documente) dau fișiere de date, care conțin înregistrări cu o organizare simplă și care nu admit operații de interogare (selectarea unor informații după un criteriu ales), nu sunt considerate baze de date. De exempu, un editor de text (ca Microsoft Word) permite memorarea unor informații (texte), care pot fi create, modificate și consultate, dar nu se pot efectua operații de interogare. La fel, un instrument de calcul tabelar (cum este Microsoft Excel) oferă reprezentarea în diferite forme a unor date (tabele, grafice), dar nu permite operații de interogare.

1.3.2 Arhitectura unei Baze de Date

O bază de date poate fi privită din mai multe puncte de vedere cum ar fi :

Punctu de vedere al utilizatorilor, care lucrează cu anumite parți componente ale unei baze de date numite ”vederi”.

Punctul de vedere al administratorului bazei de date care înregistrează toate vederile referitoare la baza de date într-un singur model numit ”schema conceptuală”(sau nivel logic al bazei de date).

Punctul de vedere al implementatorului bazei de date care de obicei coincide cu administratorul bazei de date și privește baza de date ca pe o colecție de fișiere memorate pe diferite medii externe.Acesta reprezintă nivelul fizic al bazei de date.

Primele două nivele sunt descrise prin planuri ce constau în enumerarea tipurilor de entități ce apar in baza de date, relațiile dintre aceste tipuri de entități si modul de trecere de la un nivel la cel imediat superior.Aceste planuri se numesc: scheme externe, subscheme conceptuale sau vederi pentru primul nivel și scheme conceptuale pentru al doilea nivel.Descrierile la nivel fizic sunt făcute prin scheme interne sau scheme fizice.

Scheme externe

Schemele externe sunt definite prin intermediul unui sublimbaj de definire a datelor(SLDD) adesea inclus in LDD. Reprezentarea intuitivă a vederilor presupune stabilirea entităților, relaților dintre ele, a atributelor acestora, a cheilor, a dependențelor funcționale, a diagramelor etc.Pentru utilizatorul obișnuit definireal vederilor se face prin intermediul unor comenzi cu structură dată, folosind forme predefinite pe care le completează sau utlizând un sistem de meniuri.

Scheme conceptuale

Schema conceptuală se bazează pe un model teoretic.Ea combină diferitele subscheme conceptuale(vederi) ce privesc o aplicație intr-un mod unitar.modul de descriere și reprezentare este același cu al vederilor și ca și în cazul acestora intervin noțiunile de entitate,relație,atribut,cheie,dependențe funcționale,diagrama.

Proiectarea schemei conceptuale a unei baze de date se face în funcție de modelul teoretic al SGBD-urilor: modelul rețea,arborescent și modelul relațional.

Scheme interne

Schemele interne descriu diferitele fișiere utilizate pentru memorarea informațiilor bazei de date și modul de operare cu ele. De exemplu există fișiere cu organizare secvențială, organizare cu dispersie, cu index rar și index dens. De asemeanea drept probleme legate de organizarea fișierelor putem aminti pe cele legate de cautarea informaților dupa chei secundare sau chei incomplete si memorarea inregistrărilor de dimensiuni variabile.

1.3.3 Modelarea logică a datelor

Modelul entitate-relație

Modelul utilizat frecvent pentru definirea bazelor de date este cel numit modelul entitate-relație.

Entitatea reprezită un lucru ce este unic identificabil;(Eentitatea nu se poate defini normal. Este o noțiune primară. Totuși putem incerca o definiție: mai multe elemente de același tip formează o entitate). Există entități obișnuite și entități speciale(care depind de existența altor entități).

Proprietatea sau atributul este o altă latură a entității și poate lua valori intr-un domeniu asociat.Proprietațile pot fi unice sau compuse, chei(adică identifică in mod unic entitatea respectivă), pot fi omise etc.

Relația definește o asociere între entități.Numarul de entități care apar într-o relație se numește gradul sau aritatea relației. De cele mai multe ori aritatea relației este k=2 și avem de a face cu relații binare.

În acest caz, în funcție de câte elemente dintr-o entitate corespund la cealaltă entitate avem urmatoarea clasificare a relaților: relație unu la unu (fiecuri element din prima entitate îi corespunde un singur element din a doua si reciproc), relație unu la mai multi (fiecărui element din prima entitate îi corespund mai multe elemente din a doua dar fiecarui element din a doua entitate îi corespunde cel mult unul din prima) și relație mai mulți la mai mulți (fiecarui element din prima entitate îi corespunde un singur element din a doua și reciproc).

Subtipul unei entități este un tip de entitate ce formeaza o submulțime a entitații respective(de obicei cu proprietăți suplimentare).

Modelul logic al bazelor de date este reprezentat grafic prin diagrame entitate-relație.

De exemplu avem entitățile Facultatea de Inginerie, Studenți și Profesori care reprezintă colecții de date prvind Facultatea de inginerie, profesorii și respectiv studenții acestuia.

Principalele modele de baze de date sunt urmatoarele:

Modelul rețea. Datele sunt prezentate cu structura unui graf direcționat oarecare. Acest model permite lucrul cu entitați și relații binare de tip mau mulți la mai mulți. Nodurile corespund entităților iar relațiile sunt reprezentate de săgeți între noduri de la tată la fiu.

Modelul ierarhic. Este un caz particular al modelului rețea. Datele sunt prezentate cu structura unui arbore. Acest model permite lucrul cu entități și relații binare de tip unu la unu și unu la mai mulți, diagrama fiind alcătuită dintr-o mulțime de arbori în care toate legăturile sunt pe direcția drumului de la rădăcină la nodul fiu din relație.

Modelul relațional. În care intervin numai operații cu aceste relații. Datele sunt reprezentate sub forma unor tabele. (Tabela este o submulțime a produsului cartezian a unor domenii de valori. În tabelă sunt coloane, atrbute (carcateristici sau câmpuri) și linii sau t-upluri (sau înregistrări) iar legaturile între tabele sunt logice, realizate prin valori).

1.3.4 Componentele unui Sistem de Baze de Date

Componenele unui sistem de baze de date sunt: hardware, software, utilizatori, date.

Figura 1.2 Componentele unui Sistem de Baze de Date

Hardware. Sistemele de baze de date sunt, de regulă, instalate pe calculatoare de uz general, de la calculatoare PC standard, până la stații multiprocesor puternice. Bineînțeles, performanțele generale de operare ale calculatorului (numărul și viteza procesoarelor, dimensiunea și viteza de operare a memoriei principale) influențează în mod corespunzător performanțele sistemului de baze de date. Dar, ceea ce interesează în mod deosebit în utilizarea unui calculator pentru un sistem de baze de date este volumul (capacitatea) memoriei secundare, utilizată pentru memorarea colecției de date persistente ale bazei de date. Dat fiind că într-un sistem de baze de date este necesar accesul rapid la oricare din înregistrările de date, pentru memorarea acestora se folosesc discurile magnetice (hard-discuri); benzile magnetice sunt utilizate numai pentru duplicarea (backup) datelor.

Software. Între baza de date (colecția de date memorate fizic în fișiere pe hard-discuri) și utilizatorii sistemului există un nivel software, numit Sistem de Gestiune a Bazei de Date (SGBD) (Database Management System – DBMS). Toate cererile utilizatorilor de a accesa baza de date (pentru introducere, ștergere, modificare sau interogare) sunt gestionate (administrate) de către SGBD, care eliberează utilizatorii de necesitatea de a cunoaște organizarea particulară ale sistemului (driverele de disk, fișieree memorate, structura înregistrărilor de date). Cu alte cuvinte, SGBD permite utilizatorilor să aibă o viziune (vedere – view) la un nivel înalt a bazei de date, precum și acces la aceasta prin operații de nivel înalt, independent de detaliile de organizare hardware ale sistemului. Mai mult, SGBD-ul permite protecția datelor împotriva acceselor neautorizate, asigurând integritatea bazei de date.

SGBD-ul este cea mai importantă componentă software a unui sistem de baze de date, dar nu este singura componentă utilizată. Astfel, orice SGBD este dezvoltat și executat sub controlul sistemului de operare al calcuatorului respectiv. De asemenea, sunt folosite numeroase alte componente software pentru proiectarea, dezvoltarea sau exploatarea aplicațiilor de baze de date.

Utilizatori. Utilizatorii unui sistem de baze de date se pot împărți în trei categorii: programatorii de aplicații, utilizatorii finali și administratorul bazei de date.

Programatorii de aplicații sunt cei care scriu (dezvoltă) aplicațiile de baze de date, folosind limbaje de programare de nivel înalt (Cobol, PL/1, Fortran, C, C++, Java, Basic) cu extensii care permit încorporarea unor operații specifice de acces la baza de date. Aplicațiile rezultate pot fi aplicații cu execuție independentă (batch-processing) sau pot fi aplicații conversaționale (on-line) utilizate de utilizatorii finali ai sistemului pentru a accesa (într-un mod mai eficient și mai sigur) baza de date.

Utilizatorii finali sunt acei utilizatori care accesează baza de date prin intermediul unui program de aplicație care le conferă numai anumite posibilități de execuție și drepturi limitate de acces la date. Utilizatorii finali sunt persoane cu pregătire tehnică minimală, care efectuează un volum mare de operații asupra bazei de date, dar nu trebuie să cunoască mai mult decât posibilitățile oferite de programul pe care îl utilizează. De exemplu, utilizatorii finali ai unui sistem de rezervare a bietelor de avion sunt agenți de vânzări, care folosesc programul adevcat (scris de programatorii de aplicații), fără să fie necesar să cunoască întreaga structură a bazei de date.

Administratorul bazei de date este o persoană cu înaltă calificare tehnică care are ca sarcină menținerea funcționalității bazei de date prin stabilirea drepturilor de acces a diferitelor categorii de utilizatori, prin efectuarea operațiilor periodice de salvare a datelor (backup), prin monitorizarea performanțelor sistemului.

Date. Datele memorate într-o bază de date sunt date persisente, adică date care rămân memorate pe suport magnetic, independent de execuția programelor de aplicații. Datele persistente ale unei baze de date se introduc, se șterg sau se actualizează folosind date de intrare (provenind de a tastatură, sau recepționte prin transfer de mesaje). Datele de intrare sunt date nepersistente; ele sunt generate de utilizatori și sunt memorate (devenind date persistente) numai după ce au fost validate (acceptate) de către SGBD. Datele de ieșire ale unui sistem de baze de date sunt, de asemenea, date nepersistente; ele provin din operații de interogare a bazei de date și sunt puse a dispoziția utilizatorului (sub formă de afișări, rapoarte tipărite, etc).

Toate aceste componente asigură exploatarea unei baze de date după ce aceasta a fost proiectată și realizată. Activitatea de proiectare a unei baze de date implică alte categorii de personal cu înaltă calificare tehnică (analiști, programatori) sau administrativă (administrator de date). Proiectanții bazelor de date au responsabilitatea de a analiza realitatea reprezentată (modelată) de baza de date respectivă, de a identifica datele necesare să fie memorate, care să asigure menținerea evidenței activității dorite. De asemenea, în cursul proiectării unei baze de date, proiectanții selectează componentele hardware (sistemul de calcul), software (sistem de operare, SGBD, instrumente de dezvoltare și limbaje de programare), stabilesc structura conceptuală a bazei de date și mențin interacțiunea cu utilizatorii potențiali, pentru a asigura cerințele de prelucrare ale acestora. Aspecte privind proiectarea bazelor de date vor fi studiate în mai multe din capitolele următoare.

1.3.5 Arhitectura internă a Sistemelor de Baze de Date

Arhitectura internă a unui sistem de baze de date propusă prin standardul ANSI/X3/SPARC (1975) conține trei nivele funcționale: nivelul intern, nivelul extern și nivelul conceptual (Figura 1.2).

Figura 1.3 Arhitectura internă a Sistemelor de Baze de Date

Nivelul intern este nivelul de reprezentare a datelor pe suportul fizic.

Nivelul extern reprezintă modul în care datele sunt percepute de utilizatori, existând câte o vedere (view) individuală a datelor pentru fiecare utilizator.

Nivelul conceptual corespunde unei reprezentări unice și abstracte a datelor, care asigură legătura între nivelul extern și cel intern. Nivelul conceptual este o vedere a întregului conținut a bazei de date prin intermediul schemei conceptuale a acesteia.

Toate aceste reprezentări sunt accesate prin intermediul SGBD-ului care asigură, de asemenea, cele două corespondențe (mappings): între nivelul extern și nivelul conceptual și între nivelul conceptual și nivelul intern.

1.3.6 Limbaje și interfețe ale Sistemelor de Baze de Date

Orice SGBD suportă două categorii de limbaje conceptuale: limbaje de descriere a datelor (LDD, Data Description Language – DDL) și limbaje de manipulare a datelor (LMD, Data Manipulation Language – DML). LDD permit definirea conceptuală a datelor, fără referință la modul de memorare fizică a datelor, asigurând în acest fel independența datelor în sistemele de baze de date. LMD asigură operațiile de introducere și prelucrare a datelor (actualizare, ștergere, interogare).

În momentul actual, limbajul cel mai frecvent utilizat în sistemele de baze de date relaționale este limbajul SQL (Structured Query Language), care include componentele LDD și LMD. Orice operație asupra unei baze de date relaționale se adresează SGBD-ului prin instrucțiuni SQL.

Instrucțiunile SQL pot fi trimise de către utilizatori în mod interactiv (de la o consolă) și sunt prelucrate direct de o componentă a SGBD sau pot fi înglobate (embeded SQL) în limbaje de programare de nivel înalt (Cobol, Fortran, C, C++, PL/1, Java, Basic) și transmise SGBD-ului în cursul execuției programelor respective. Programele de aplicații de baze de date mai prezintă, de regulă, interfețe grafice cu meniuri și comenzi prin intermediul cărora utilizatorii finali pot introduce, modifica sau selecta diferite date sau criterii de selecție.

De asemenea, multe SGBD-uri conțin o interfață specială pentru administratorul bazei de date, prin care acesta poate crea conturi, utilizatori, drepturi, etc.

1.3.7 Avantajele oferite de Sistemele de Baze de Date

Față de metodele mai vechi de înregistrare a datelor privind diferite activități pe fișe (documente scrise) sau chiar în fișiere pe disc, sistemele de baze de date oferă avantaje considerabile, ceea ce explică extinsa utilizare a acestora. Câteva dintre avantajele oferite sunt prezentate în continuare.

Compactitate ridicată față de volumul ocupat de documente scrise sau de fișiere necorelate.

Viteză mare de regăsire și actualizare a informațiilor, folosind interogări ale bazei de date.

Reducerea redundanței datelor memorate, prin partajarea datelor între mai mulți utilizatori și aplicații. În stocarea pe fișe sau în fișiere a datelor, fiecare aplicație conținea propriile seturi de date. În sistemele de baze de date, mai multe aplicații pot folosi date comune, memorate o singură dată. De exemplu, o aplicație de personal și o aplicație de rezultate la examene dintr-o universitate care exploatează o singură bază de date, pot folosi aceleași informații referitoare a structurarea facultăților și a secțiilor.

Posibilitatea de introducere a standardelor privind modul de stocare a datelor, ceea ce permite interschimbul informațiilor între diferite organizații.

Menținerea integrității datelor prin politica de securitate (drepturi de acces diferențiate în funcție de rolul utilizatorilor), prin gestionarea tranzacțiior și prin refacerea datelor în caz de funcționare defectuoasă a diferitelor componente hardware sau software.

Independența datelor față de suportul hardware utilizat. Sistemele de gesiune a bazelor de date oferă o vedere (view) externă (logică) a datelor, care nu se modifică atunci când se schimbă suportul de memorare fizic, ceea ce asigură imunitatea structurii bazei de date și a aplicațiilor la modificări ale sistemului hardware utilizat.

1.3.8 Clasificarea Sistemelor de Baze de Date

Se pot lua în considerație mai multe criterii de clasificare ale sistemelor de baze de date.

Clasificare după modelul de date. Majoritatea sistemelor de baze de date actuale se bazează pe modelul de date relațional (relațional data model) sau pe modelul de date obiect (object data model). Dezvoltarea continuă a acestor modele a condus către o nouă categorie de baze de date, numite obiect-reaționale, care combină caracteristicile modelului relațional cu cele ale modelului obiect. De asemenea, mai sunt încă în funcțiune baze de date în modele mai vechi (modelul ierarhic sau modelul rețea). Modelele de date utilizate de SGBD-uri vor fi studiate în capitolul următor.

Clasificare după numărul de utilizatori. Majoritatea sistemelor de baze de date sunt sisteme multi-utilizator, adică permit accesul concurent (în același timp) a mai multor utilizatori la aceeași bază de date. Un număr redus de sistemelor de baze de date sunt de tip mono-utilizator, adică suportă accesul doar a unui singur utilizator (la un moment dat).

Clasificare după numărul de stații pe care este distribuită baza de date. Există două categorii de sisteme de baze de date: centralizate și distribuite.

Un sistem de baze de date este centralizat dacă datele sunt stocate pe o singură stație (calculator). Un sistem centralizat poate suporta unul sau mai mulți utilizatori, dar, în ambele situații, datele, ca și SGBD-ul, rezidă în întregime pe o singură stație.

Un sistem de baze de date distribuit poate avea datele, ca și SGDB-ul, distribuite în mai multe stații interconectate într-o rețea de comunicație.

Sistemele de baze de date pot fi reprezentate din punct de vedere a utilizării lor printr-o arhitectură de tip client-server.

Într-un sistem centralizat (Figura 1.3) există un singur server, care este chiar SGBD-ul, care răspunde cererilor unui singur client (în sistemele mono-utilizator) sau mai multor clienți (în sistemele multi-utilizator), accesând baza de date respectivă. Clienții sunt programe de aplicații, oferite de furnizorul SGBD-ului sau dezvoltate de programatori (utilizatori). Aplicațiile client pot fi executate pe stații diferite, conectate printr-o rețea de comunicație cu stația pe care este executat serverul. Această arhitectură permite o prelucrare distribuită a datelor și, mai mult, o configurare a sistemului adaptată cerințelor de calcul particulare. Astfel, serverul bazei de date poate fi un sistem puternic, echipat corespunzător (cu volum mare de memorie secundară), în timp ce fiecare client este o stație personală, cu putere de calcul adecvată aplicației executate.

Figura 1.4. Sisteme de baze de date centralizate: (a) mono-utilizator; (b) multi-utilizator

Sistemele de baze de date distribuite pot fi reprezentate într-un mod asemănător din perspectiva structurării client-server (Figura 1.4).

Figura 1.5 Sistem de baze de date distribuită

2. Partea practică

2.1 Prezentarea aplicației

Titlul lucrării, fiind “Aplicație cu baze de date-Salon de infrumusetare”, am realizat o aplicație software care deține următoarele funcționalități:

înregistrează clienții.

Înregistrează operațiuni .

caută după nume și prenume într-o listă.

filtrează după anumite criterii.

generează rapoarte.

Programul a fost realizat în mediul de programare Visual Studio 2010 în limbajul C# și a necesitat folosirea unui program suplimentar precum Easy PHP pentru crearea tabelelor aferente bazei de date, a serverului Apache și la salvarea datelor am folosit baza de date MySQL aferenta programului Easy PHP.

2.2 Funcționarea aplicației

Pentru a rula aplicația avem nevoie:

– Visual Studio 2010

– Easy PHP

După instalarea programelor ,se rulează programul Easy PHP și se verifică dacă serverele EasyPHP ( Apache și MySQL) sunt pornite. EasyPHP este un server web foarte ușor de folosit și foarte bun.

Figura 2.1 Serverele Apache și serverul de bază de date MySQL

Easy PHP are o interfață foarte simplă.În dreaptul fiecarui server (Apache și MySQL) îți arată daca este pornit.Când este verde însemana că este pornit ,dacă este roșu este închis.

După rularea serverelor se intră intr-un browser la urmatoare adresă: http://localhost/home/mysql și o să ne apară PhpMyAdmin, se selectează baza de date aferentă aplicației sau se crează o nouă bază de date în meniul “phpMyAdmin” cu numele „salon”, iar apoi se încarcă tabelele care au configurația salvată pt baza noastră de date.

Figura 2.2 PHPMyAdmin

La final se va porni aplicația din folderul destinat acesteia.

Aplicația mea fiind una cu baze de date am ales Easy PHP pentru că este cea mai simplă modalitate de a avea totul pregătit pentru a lucra cu MySQL, este un pachet "All in one". Este o aplicație care include serverul web Apache, interpretorul PHP, sistemul de gestiune a bazelor de date MySQL și aplicația de administrare a bazelor de date phpMyAdmin.

2.3 Conectarea la serverul MySQL

Fiind o aplicație cu baze de date am decis să folosesc EasyPHP-ul deoarece are totul „All in one” și este foarte ușor de folosit având în componența lui serverul de Mysql. Folosind EasyPHP avem și o serie de facilități cum ar fi: lucrul offline sau online, încărcarea informaților în internet foarte ușor si altele.

Deoarece am folosit Easy php-ul vă voi descrie o secvență de cod unde se face conectarea la baza de date:

class DbWrapper

{

private MySqlConnection sqlConn;

private string connStr;

private bool isConnected;

/// <summary>

/// Creates a new database wrapper object that wraps around

/// the users table.

/// </summary>

/// <param name="svr">The name of the server</param>

/// <param name="db">The database catalog to use</param>

/// <param name="user">The user name</param>

/// <param name="pass">The user password</param>

public DbWrapper(string svr, string db, string user, string pass)

{

this.connStr = "SERVER=" + svr + ";PORT=3306;DATABASE=" + db + ";UID=" + user + ";PWD=" + pass + ";";

try

{

sqlConn = new MySqlConnection(this.connStr);

}

catch (Exception excp)

{

Exception myExcp = new Exception("Error connecting you to " +

"the my sql server. Internal error message: " + excp.Message, excp);

throw myExcp;

}

this.isConnected = false;

}

/// <summary>

/// Creates a new database wrapper object that wraps around

/// the users table.

/// </summary>

/// <param name="connStr">A connection string to provide to connect

/// to the database</param>

///

public DbWrapper(string connStr)

{

this.connStr = connStr;

try

{

sqlConn = new MySqlConnection(this.connStr);

}

catch (Exception excp)

{

Exception myExcp = new Exception("Error connecting you to " +

"the my sql server. Error: " + excp.Message, excp);

throw myExcp;

}

this.isConnected = false;

}

/// <summary>

/// Opens the connection to the SQL database.

/// </summary>

public void Connect()

{

bool success = true;

if (this.isConnected == false)

{

try

{

this.sqlConn.Open();

}

catch (Exception excp)

{

this.isConnected = false;

success = false;

Notification newNotification = new Notification("Eroare de conectare sql server:" + excp.Message);

newNotification.ShowDialog();

}

if (success)

{

this.isConnected = true;

}

}

}

/// <summary>

/// Closes the connection to the sql connection.

/// </summary>

public void Disconnect()

{

if (this.isConnected)

{

this.sqlConn.Close();

}

}

/// Gets the current state (boolean) of the connection.

/// True for open, false for closed.

public bool IsConnected

{

get

{

return this.isConnected;

}

}

2.4 Baza de date

2.4.1 Prezentare tabele

Pentru a crea tabele aferente bazei de date ”Salon” am folosit programul EasyPHP.Am creat urmatoarele 4 tabele cu câmpurile aferente.

Tabelul “ Clienti”

Figura 2.3 Tabelul ”Clienți”

Tabelul conține 8 coloane:

CNP(varchar) reține CNP-ul pentru fiecare client, este o cheie primară deoarece CNP-ul este unic .

nume (varchar) reține numele pentru fiecare client;

prenume (varchar) reține prenumele pentru fiecare client;

data nașterii (varchar) reține data nașterii pentru fiecare client;

telefon (varchar) reține telefonul pentru fiecare client;

adresa (varchar) reține adresa pentru fiecare client;

tip par (varchar) reține tipul parului pentru fiecare client.Acesta poate fi: lung sau scurt;

sex (varchar) reține sex-ul pentru fiecare client.Acesta poate fi: m(masculin) sau f(feminin).

Tabelul “ Produse”

Figura 2.4 Tabelul ”Produse”

Tabelul conține 6 coloane:

cod produs (varchar) reține codul produsului care este unic pentru fiecare produs în parte.Este o cheie primară;

nume (varchar) reține numele pentru fiecare produs;

preț (int) reține pretul pentru fiecare produs;

furnizor(varchar) reține furnizorul pentru fiecare produs;

în stoc(varchar) reține dacă se află sau nu se află în stoc un produs;

id operațiune(int) reține ce produs sa folosit pentru o anumită operațiune.Prin acesta se face legatura catre tabelul “Operațiune”.

Tabelul “ Operațiune”

Figura 2.5 Tabelul ”Operațiune”

Tabelul conține 4 coloane:

id operațiune (int) reține id operațiunii ce a fost efectuată;

tip serviciu(varchar) reține tipul serviciului ce a fost efectuat;

data efectuării(varchar) reține data în care a fost efectuată operațiunea;

cnp client(varchar) reține cnp-ul clinetului și face legatura catre tabelul ”Client”. Este o cheie primară.

De reținut că acest tabel este tabelul central și în aceasta se fac toate legăturile cu celelalte tabele.

Tabelul “ Angajați”

Figura 2.6 Tabelul ”Angajați”

Tabelul conține 7 coloane:

CNP (varchar) reține CNP-ul pentru fiecare angajat.Este o cheie primară;

nume (varchar) reține numele pentru fiecare angajat;

prenume (varchar) reține prenumele pentru fiecare angajat;

adresa (varchar) reține adresa fiecarui angajat;

data nașterii (varchar) reține data nașterii pentru fiecare angajat;

funcție (varchar) reține funcția pentru fiecare angajat;

id operațiune (int) reține operatiunea la care participă un anumit angajat și face legatura cu tabelul ”Operațiune”;

2.4.2 Relaționarea tabelelor

Figura 2.7 Relaționarea tabelelor din baza de date

Figura de mai sus, reprezintă legăturile care se fac între tabelele pe care le-am folosit. Nu am facut legături standard ci am folosit una din tabele pentru a face legăturile între ele și anume:

Între tabelul “Clienți” și tabelul ”Operațiune” am creat o legăuta pe baza cheii ”CNP”,această cheie fiind esențială deoarece prin aceasta ne putem da seama cărui client i s-a facut operațiunea, ”CNP”-ul fiind cheie unică pentru tabelul ”Clienți”, relaționarea dintre tabele find de n la n deoarece pentru un anumit client putem aveam n operațiuni, și o anumită operațiune poate fii asociată mai multor clienți.

Între tabelul ”Produse” și tabelul ”Operațiune” am creat o legatură pe baza cheii ”Id-operațiune” dearece prin aceasta putem vedea care produs din tabelul ”Produse” trebuie folosit pentru a executa operațiunea respectivă; este o relație de tip n la n deoarece o operațiune poate folosi mai multe produse și în același timp un produs poate fii utilizat de mai multe servicii.

Între tabelul ”Angajați” și tabelul ”Operațiune” am creat legatura tot pe baza cheii ”Id-operațiune” deoarce prin aceasta putem vedea care angajat din tabelul ”Angajați” trebuie să execute operațiunea respectivă. Este o relaționare de tip 1 la 1 fiindcă o operațiune poate fii executată de un singur angajat.

2.5 Clasele specifice proiectului

În elaborarea programului am utilizat urmatoarele clase :

Figura 2.8 Clasa ”DbWrapper”

Clasa “DbWrapper” permite conectarea la baze date și are în componența sa un constructor și o sumedenie de metode care permit accesul la tabele aflate in componența bazei de date numită ”Salon”.

Primul constructor este unul cu 4 parametrii:

String svr – numele la server

String db – numele bazei de date folosite

String user – numele utilizatorului

String pass – numele parolei

Și se va folosi la crearea de obiecte de tipul DbWrapper.

Printre principalele metode folosite în cadrul clasei “DbWrapper” amintim:

Connect() – prin care se face conexiunea la baza de date “Salon” .

Disconect() – inchide conexiunea creată către baza de date “Salon”.

Pentru tabelele “Client” și “Operațiune” amintim principalele metode create in clasa “DbWrapper” :

AdaugaClient(Client Client)

AdaugaOp(Operatiune Op)

DeleteClient(string CNP)

deleteOperatiune(int id) – șterge operațiunea după id-ul operațiunii primit ca parametru

deleteOperatiuni(string cnp_client) – șterge operațiunea aferentă unui anumit client după cnp-ul acestuia.

Figura 2.9 Clasa ”Angajat”

Clasa ”Angajat” conține :

Angajat() – costructorul clasei cu rolul de a inițializa obiecte de tip Angajat

getAngajatString() – care returnează sub forma unui string datele unui anumit angajat.

Figura 2.10 Clasa ”Client”

Clasa ”Client” este utilizată pentru a reține informațiile despre clienți, și conține :

Client() – care este contructorul clasei.

getClientString – care returnează o valoare de tip String

setClient – are rolul de a seta parametrii unui anumit client.

Figura 2.11 Clasa ”Operațiune”

Clasa ”Operațiune” reține datele unei operațiuni efectuate pentru un anumit client, și are în componența sa urmatoarele:

Operatiune() – este constructorul clasei.

getOperatiuneString – care returnează sub forma unui string informațiile unei anumite operațiuni.

setOperatiune – cu rolul de a seta parametrii unei anumite operațiuni.

Figura 2.12 Clasa ”Produs”

Clasa ”Produs” reține datele unui produs care este folosit în efectuarea unei operațiuni, având în structura sa:

Produs() – acesta fiind constructorul clasei.

getProdusString – acesta returnează sub formă de string datele aferente unui produs.

2.6 Interfețe

Aplicația este structurată în mai multe ferestre: cea principală, cea de ”Administrare Clienți” care are la randul ei ca operațiune înca o ferestrea de ”Adaugare Clienți” , ”Adugare/Ștergere Operațiune” , vizualizare produse,vizualizare angajați.

2.6.1 Pagina principala

Figura 2.13 Fereastra ”Salon”

Fereastra principală este cea care se deschide la rularea aplicației și conține următoarele opțiuni:

Un buton de ”Administrare Clienți” , care ne va deschide fereastra unde vom putea vizualiza, șterge sau adăuga un client.

Un buton de ”Adăugare/Ștergere Operațiune” , care va deschide fereastra unde vom putea vizualiza,adauga sau șterge o operațiune.

Un buton de ”Produse” , care va deschide o fereastra unde avem produsele salonului.

Un buton de ”Angajați” , unde putem vedea care sunt angajații salonului și fiecare angajat ce funcție deține.

Un buton “Inchidere”, prin care vom părăsi aplicația.

2.6.2 Fereastra “Administrare Clienți”

În acestă fereastră, se poate ajunge dând click pe butonul “Administrare Clienți” din fereastra principală, prezentată anterior.

Figura 2.14 Fereastra ”Administrare Clienți”

În acestă fereastră pe langă faptul că putem vizualiza,adauga și șterge clienți am realizat un filtru prin care putem vedea operațiunile efectuate pentru un anumit client.

Acestă fereastră conține 2 DataGridView – uri, 2 textbox-uri, 4 butoane și un label care contorizează clienții existenți în baza de date.

Primul DataGridView conține toți clienții selectați în urma filtrului realizat pe baza numelui și prenumelui introdus în campurile Nume și Prenume.

Al doilea DataGridView conține toate operațiunile clientului selectat deja în primul DataGridView.

Textbox1 cu labelul Nume : aici se va scrie numele clientului pe care dorim să îl căutăm.

Textbox2 cu labelul Prenume : aici se va scrie prenumele clientului pe care dorim sa îl căutăm.

Butonul ”Adaugă” ne va deschide fereastra cu numele ”Adaugă Client”.

Butonul ”Șterge” va șterge din baza de date clientul selectat din DataGridView1.

Butonul ”Refresh” face o reîmprospătare a clienților în DataGridView1.

La butonul ”Exporta” generam un raport care conține toate operațiunile efectuate pentru clientul selectat.

Figura 2.15 Fereastra ”Operațiuni efectuate”

După apăsarea butonului se va genera:

Figura 2.16 Documentul ”Report.txt”

2.6.3 Fereastra ”Adauga Client”

În acestă fereastră, se poate ajunge dând click pe butonul ”Adaugă” din fereastra“Administrare Clienti” prezentată anterior.

Figura 2.17 Fereastra ”Adăugare Client”

Fereastra “Adaugă Client” conține o serie de textbox-uri și 2 butoane:

Nume: aici se va scrie numele clientului.

Prenume: aici se va scrie prenumele clientului.

Data nașterii: aici se va selecta data nașterii clientului.

Telefon: aici se va scrie telefonul clientului.

Adresa: aici se va scrie adresa clientului.

Tip păr: aici se va scrie ce fel de păr are clientul(ex: lung,scurt,etc).

Sex: aici se va completa sexul: masculin sau feminin.

CNP: aici se va scrie CNP-ul clientului.

Butonul “Ok” va adăuga în baza de date informațiile completate.

Butonul “Cancel” va închide fereastra.

2.6.4 Fereastra ”Operațiuni”

În acestă fereastră, se poate ajunge dând click pe butonul ”Adăugare/Vizualizare Operațiuni” din fereastra principala.

Figura 2.18 Fereastra ”Operațiuni”

În acestă fereastră putem vizualiza adăuga și șterge o operațiune. Fereastra conține un DataGridView , 4 TextBox-uri și 2 butoane. Acestea au următoarele funcționalități:

DataGridView-ul conține toate operațiunile existente în tabela ”Operațiuni”.

Textbox 1 cu labelul ID_op : aici se va scrie id-ul operațiunii pe care dorim să o efectuăm.

Textbox 2 cu labelu Tip serviciu : aici se va scrie tipul operațiunii pe care dorim să o efectuăm.

Textbox 3 cu labelu Data : aici se va scrie data efectuării operațiunii.

Textbox 4 cu labelu CNP : aici se va scrie CNP-ul clientului pentru care se va efectua operațiunea.

Butonul “Adaugă” va adăuga în tabela “Operațiuni” informațiile completate doar dacă toate câmpurile au fost completate.În caz contrar se va afișa un mesaj de atenționare.

Butonul “Șterge” va șterge o operațiune din baza de date, operațiune selectată în DataGridView.

2.6.5 Fereastra ”Produse”

În acestă fereastră, se poate ajunge dând click pe butonul ”Produse” din fereastra principală.

Figura 2.19 Fereastra ”Produse”

În fereastra “Produse” putem vizulaiza ce produse există în tabelul “Produse” și de ce produse este nevoie pentru a executa o anumită operațiune . Această fereastră conține un singur DataGridView prin care putem facem vizualizarea.

2.6.6 Fereastra ”Angajați”

În acestă fereastră, se poate ajunge dând click pe butonul ”Angajați” din fereastra principală.

Figura 2.20 Fereastra ”Angajați”

În fereastra “Angajați” putem vizualiza ce angajați există în tabelul “Angajați” și la ce operațiuni participă fiecare angajat. Această fereastră conține un singur DataGridView prin care putem face vizualizarea.

3. Concluzii și dezvoltări ulterioare

În zilele noastre aplicațiile cu baze de date sunt tot mai răspândite deoarece o bază de date în orice aplicație este mereu folositoare.

Salvarea informațiilor intr-o baza de date ale unui Salon de Înfrumusețare reprezintă o ușurință in gestiunea datelor și o imagine cât mai reală a frecvenței cu care un anumit client utilizează serviciile salonului. De asemenea prin acestă gestiune un salon poate creea anumite avantaje pentru clienții fideli.

De altfel, rămâne și posibilitatea de generare de rapoarte, în caz că o informație trebuie transmisă în format text către o anumită persoană.

Aplicația poate fi folosită de orice angajat în scopul obținerii preferințelor fiecarui client,urmărind operațiunile efectuate anterior.

Dacă se aduc câteva schimbări minore programului, acesta poate fi folosit de orice salon.

La partea de dezvoltări ulterioare, aș putea enumera faptul că prezenta aplicație să fie folosită și online, informațiile fiind hostate pe un server securizat, existând astfel posibilitatea accesării informației de peste tot.

Dacă aplicația ar fi răspândită la scară largă(ex: toate saloanele sa dețină aceeași aplicație), un anumit salon ar avea toate informațiile necesare atunci când primește un client nou, de la bazele de date ale altor saloane. Ar fi nevoie un formular de logare, în care fiecare salon va avea un cont de utilizator și o parolă asignată. Salonul va putea vedea doar clienții proprii, iar dacă va primi acordul altor saloane, poate accesa și informații de care are nevoie. Aceste restricții/învoiri de drepturi asupra informațiilor private, vor fi setate de un adminstrator de aplicație. Administratorul va putea accesa baza de date de peste tot, aceasta fiind hostată pe un server securizat.

4. Bibliografie

[1] O'Reilly – CSharp Essentials 2nd

[2] O.Bâscă Bază de date – Editura Didactică și Pedagogică, București 1994

[3] Motorul de cautare- google.ro

[4] Wikipedia -http://www.en.wikipedia.org

[5] http://tutoriale.eul.ro/tutoriale-web/easy-php-tutorial/

[5] http://www.phpromania.net/forum/archive/o_t__t_4807__easyphp.html

[6] http://iseesharp.blogspot.com/2005/09/mysql-with-c.html

5. Anexe

Clasa Dbwrapper

using System;

using System.Collections.Generic;

using System.Text;

using MySql.Data.MySqlClient;

using MySql.Data.Types;

namespace test1

{

class DbWrapper

{

private MySqlConnection sqlConn; //obiectul de conexiune la baza de date

private string connStr;

private bool isConnected;

/// <summary>

/// Creates a new database wrapper object that wraps around

/// the users table.

/// </summary>

/// <param name="svr">The name of the server</param>

/// <param name="db">The database catalog to use</param>

/// <param name="user">The user name</param>

/// <param name="pass">The user password</param>

///

//constructor

public DbWrapper(string svr, string db, string user, string pass)

{

this.connStr = "SERVER=" + svr + ";PORT=3306;DATABASE=" + db + ";UID=" + user + ";PWD=" + pass + ";";

try

{

sqlConn = new MySqlConnection(this.connStr);

}

catch (Exception excp)

{

Exception myExcp = new Exception("Error connecting you to " +

"the my sql server. Internal error message: " + excp.Message, excp);

throw myExcp;

}

this.isConnected = false;

}

/// <summary>

/// Creates a new database wrapper object that wraps around

/// the users table.

/// </summary>

/// <param name="connStr">A connection string to provide to connect

/// to the database</param>

///

public DbWrapper(string connStr)

{

this.connStr = connStr;

try

{

sqlConn = new MySqlConnection(this.connStr);

}

catch (Exception excp)

{

Exception myExcp = new Exception("Error connecting you to " +

"the my sql server. Error: " + excp.Message, excp);

throw myExcp;

}

this.isConnected = false;

}

/// <summary>

/// Opens the connection to the SQL database.

/// </summary>

public void Connect()

{

bool success = true;

if (this.isConnected == false)

{

try

{

this.sqlConn.Open();

}

catch (Exception excp)

{

this.isConnected = false;

success = false;

Notification newNotification = new Notification("Eroare de conectare sql server:" + excp.Message);

newNotification.ShowDialog();

}

if (success)

{

this.isConnected = true;

}

}

}

/// <summary>

/// Closes the connection to the sql connection.

/// </summary>

public void Disconnect()

{

if (this.isConnected)

{

this.sqlConn.Close();

}

}

/// <summary>

/// Gets the current state (boolean) of the connection.

/// True for open, false for closed.

/// </summary>

public bool IsConnected

{

get

{

return this.isConnected;

}

}

public void adaugaClient(Client client)

{

string Query = "INSERT INTO clienti(CNP, nume, prenume, data_nasterii, telefon, adresa, tip_par, sex) values" +

"('" + client.CNP + "','" + client.nume + "','" + client.prenume + "','" + client.data.ToString() + "','" + client.telefon + "','" + client.adresa + "','" + client.par + "','" + client.sex + "')";

MySqlCommand adaugaClient = new MySqlCommand(Query, this.sqlConn);

try

{

adaugaClient.ExecuteNonQuery();

}

catch

{

Notification newNotification = new Notification("Eroare adaugare client.");

newNotification.Show();

}

}

public void adaugaOp(Operatiune op)

{

string Query = "INSERT INTO operatiune(id_operatiune, tip_serviciu, data_efectuari, cnp_client) values" +

"('" + op.id + "','" + op.tip+ "','" + op.data+ "','" + op.cnp_client + "')";

MySqlCommand adaugaop = new MySqlCommand(Query, this.sqlConn);

try

{

adaugaop.ExecuteNonQuery();

}

catch

{

Notification newNotification = new Notification("Eroare adaugare operatiune.");

newNotification.Show();

}

}

/// <summary>

/// Checks whether an operation exists or not already in table "operatiune"

/// </summary>

public bool existaOp(Operatiune op)

{

int value = 0;

string query = "SELECT * FROM operatiune where (id_operatiune='" + op.id + "' and tip_serviciu ='" + op.tip + "' and data_efectuari ='" + op.data + "' and cnp_client ='" + op.cnp_client + "')";

MySqlCommand selecteazaOp = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaOp.ExecuteReader();

while (reader.Read())

{

value = reader.GetInt32(0);

}

reader.Close();

}

catch

{

Notification newNotification = new Notification("Eroare selectie.");

newNotification.Show();

}

if (value == 0) { return false; }

else return true;

}

/// <summary>

/// Checks whether a supplied user name exists or not

/// </summary>

/// <param name="username">The user name</param>

/// <returns>True if the username is already in the table,

/// false if the username is not in the table</returns>

///

public bool existaClient(Client client)

{

int value = 0;

string query = "SELECT * FROM clienti where (nume='" + client.nume + "' and prenume='" + client.prenume + "')";

MySqlCommand selecteazaClient = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaClient.ExecuteReader();

while (reader.Read())

{

value = reader.GetInt32(0);

}

reader.Close();

}

catch

{

Notification newNotification = new Notification("Eroare selectie.");

newNotification.Show();

}

if (value == 0) { return false; }

else return true;

}

public List<Operatiune> existaOperatiune(string cnp_client )

{

List<Operatiune> listOp = new List<Operatiune>();

string query = "SELECT * FROM operatiune where (cnp_client='" + cnp_client + "')";

MySqlCommand selecteazaOperatiune = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaOperatiune.ExecuteReader();

while (reader.Read())

{

listOp.Add(new Operatiune(reader.GetString(3), reader.GetString(1), reader.GetString(2), Convert.ToInt32(reader.GetString(0))));

}

reader.Close();

}

catch (Exception e)

{

Notification newNotification = new Notification("Eroare selectie operatiune."+ e.Message);

newNotification.Show();

}

return listOp;

}

public List<Client> selecteazaClient(string nume, string prenume)

{

List<Client> listaClienti = new List<Client>();

string query = "SELECT * FROM clienti WHERE ";

if ((nume != "") & (prenume != "")) query = query + "nume REGEXP '" + nume + "' and prenume REGEXP '" + prenume + "';";

else

{

if (prenume != "") query += "prenume REGEXP '" + prenume + "';";

if (nume != "") query += "nume REGEXP '" + nume + "';";

}

MySqlCommand selecteazaClient = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaClient.ExecuteReader();

while (reader.Read())

{

listaClienti.Add(new Client(reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), reader.GetString(5), reader.GetString(6), reader.GetString(7)));

}

reader.Close();

}

catch (Exception e)

{

Notification newNotification = new Notification("Eroare selectie:" + e.Message);

newNotification.Show();

}

return listaClienti;

}

public List<Angajat> selectAngajati()

{

List<Angajat> listaAng = new List<Angajat>();

string query = "SELECT * FROM angajati";

MySqlCommand selecteazaAngj = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaAngj.ExecuteReader();

while (reader.Read())

{

listaAng.Add(new Angajat(reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), reader.GetString(5), Convert.ToInt32(reader.GetString(6))));

}

reader.Close();

}

catch

{

Notification newNotification = new Notification("Eroare selectie.");

newNotification.Show();

}

return listaAng;

}

public List<Produs> selectProd()

{

List<Produs> listaProd = new List<Produs>();

string query = "SELECT * FROM produse";

MySqlCommand selecteazaProd = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaProd.ExecuteReader();

while (reader.Read())

{

listaProd.Add(new Produs(reader.GetString(0), reader.GetString(1), Convert.ToInt32(reader.GetString(2)), reader.GetString(3), reader.GetString(4), Convert.ToInt32(reader.GetString(5))));

}

reader.Close();

}

catch

{

Notification newNotification = new Notification("Eroare selectie.");

newNotification.Show();

}

return listaProd;

}

public List<Client> selecteazaClient()

{

List<Client> listaClienti = new List<Client>();

string query = "SELECT * FROM clienti";

MySqlCommand selecteazaClient = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaClient.ExecuteReader();

while (reader.Read())

{

listaClienti.Add(new Client(reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), reader.GetString(5), reader.GetString(6), reader.GetString(7)));

}

reader.Close();

}

catch

{

Notification newNotification = new Notification("Eroare selectie.");

newNotification.Show();

}

return listaClienti;

}

public void updateClient(Client client)

{

string query = "";//= "UPDATE date_contact_clienti SET nume='" + client.nume + "' , prenume='" + client.prenume + "', adresa='" + client.adresa + "', telefon='" + client.telefon + "', par='" + client.par + "', poza='" + client.poza + "', data_nastere='" + client.data + "' where id=" + client.id;

MySqlCommand updateClient = new MySqlCommand(query, this.sqlConn);

try

{

updateClient.ExecuteNonQuery();

}

catch (Exception e)

{

Notification newNotification = new Notification("Eroare update client:" + e.Message);

newNotification.Show();

}

}

public void updateOperatiune(Operatiune operatiune)

{

string query = "UPDATE servicii_clienti SET operatiune='" + operatiune.tip + "' , data_operatiune='" + operatiune.data + "' where id=" + operatiune.id;

MySqlCommand updateClient = new MySqlCommand(query, this.sqlConn);

try

{

updateClient.ExecuteNonQuery();

}

catch (Exception e)

{

Notification newNotification = new Notification("Eroare update operatiune:" + e.Message);

newNotification.Show();

}

}

public Client selecteazaClient(string nume)

{

Client client = new Client();

string query = "SELECT * FROM clienti where (nume='" + nume + "')";

MySqlCommand selecteazaClient = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaClient.ExecuteReader();

while (reader.Read())

{

client.setClient(reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), reader.GetString(5), reader.GetString(6), reader.GetString(7));

}

reader.Close();

}

catch

{

Notification newNotification = new Notification("Eroare selectie.");

newNotification.Show();

}

return client;

}

public void deleteClient(string CNP)

{

string query = "DELETE FROM clienti where (CNP='" + CNP + "')";

MySqlCommand deleteClient = new MySqlCommand(query, this.sqlConn);

try

{

//deleteClient.ExecuteNonQuery();

MySqlDataReader reader = deleteClient.ExecuteReader();

reader.Close();

}

catch

{

Notification newNotification = new Notification("Clientul nu poate fi sters.");

newNotification.Show();

}

}

public void deleteOperatiune(int id)

{

string query = "DELETE FROM servicii_clienti where(id='" + id + "')";

MySqlCommand deleteClient = new MySqlCommand(query, this.sqlConn);

try

{

//deleteClient.ExecuteNonQuery();

MySqlDataReader reader = deleteClient.ExecuteReader();

reader.Close();

}

catch

{

Notification newNotification = new Notification("Operatiunea nu poate fi sters.");

newNotification.Show();

}

}

public void deleteOperatiuni(string cnp_client)

{

string query = "DELETE FROM operatiune where (cnp_client='" + cnp_client + "')";

MySqlCommand deleteClient = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = deleteClient.ExecuteReader();

reader.Close();

}

catch(Exception e)

{

Notification newNotification = new Notification("Eroare:"+ e.Message);

newNotification.Show();

}

}

public List<Operatiune> selectOp()

{

List<Operatiune> listaOperatiuni = new List<Operatiune>();

string query = "SELECT * FROM operatiune";

MySqlCommand selecteazaOperatiune = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaOperatiune.ExecuteReader();

while (reader.Read())

{

listaOperatiuni.Add(new Operatiune(reader.GetString(3), reader.GetString(1), reader.GetString(2), reader.GetInt32(0)));

}

reader.Close();

}

catch (Exception e)

{

Notification newNotification = new Notification("Eroare selectie operatiune:" + e.Message);

newNotification.Show();

}

return listaOperatiuni;

}

public List<Operatiune> selecteazaOperatiuni(string id_client)

{

List<Operatiune> listaOperatiuni = new List<Operatiune>();

string query = "SELECT * FROM servicii_clienti where (id_client=" + id_client + ")";

MySqlCommand selecteazaOperatiune = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaOperatiune.ExecuteReader();

while (reader.Read())

{

listaOperatiuni.Add(new Operatiune( reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetInt32(0)));

}

reader.Close();

}

catch (Exception e)

{

Notification newNotification = new Notification("Eroare selectie operatiune:" + e.Message );

newNotification.Show();

}

return listaOperatiuni;

}

public List<Operatiune> selecAllOps()

{

List<Operatiune> listaOperatiuni = new List<Operatiune>();

string query = "SELECT * FROM operatiune";

MySqlCommand selecteazaOperatiune = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaOperatiune.ExecuteReader();

while (reader.Read())

{

listaOperatiuni.Add(new Operatiune(reader.GetString(3), reader.GetString(1), reader.GetString(2), reader.GetInt32(0)));

}

reader.Close();

}

catch (Exception e)

{

Notification newNotification = new Notification("Eroare selectie operatiune:" + e.Message);

newNotification.Show();

}

return listaOperatiuni;

}

public Operatiune selecteazaOperatiune(int id)

{

Operatiune o = new Operatiune(); ;

string query = "SELECT * FROM operatiune where (id_operatiune = " + id + ")";

MySqlCommand selecteazaOperatiune = new MySqlCommand(query, this.sqlConn);

try

{

MySqlDataReader reader = selecteazaOperatiune.ExecuteReader();

while (reader.Read())

{

o.setOperatiune(reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetInt32(0));

}

reader.Close();

}

catch (Exception e)

{

Notification newNotification = new Notification("Eroare selectie operatiune:" + e.Message);

newNotification.Show();

}

return o;

}

}

}

Clasa Angajat

using System;

using System.Collections.Generic;

using System.Text;

namespace test1

{

class Angajat

{

//membrii clasei

public string CNP;

public string nume;

public string prenume;

public string adresa;

public string functie;

public int id_op;

//consntructorul clasei

public Angajat(string CNP, string nume, string prenume, string adresa, string data_nasterii, string functie, int id_op)

{

this.CNP = CNP;

this.prenume = prenume;

this.nume = nume;

this.adresa = adresa;

this.data_nasterii = data_nasterii;

this.functie = functie;

this.id_op = id_op;

}

//metoda

public string[] getAngajatString()

{

return new string [] {this.CNP, this.nume, this.prenume, this.adresa, this.data_nasterii, this.functie, this.id_op.ToString()};

}

public string data_nasterii { get; set; }

}

}

Clasa Client

using System;

using System.Collections.Generic;

using System.Text;

namespace test1

{

public class Client

{

public string nume;

public string prenume;

public string adresa;

public string telefon;

public string par;

public string data;

public string sex;

public string CNP;

public Client(string CNP, string nume, string prenume, string data, string telefon, string adresa, string par, string sex)

{

this.nume = nume;

this.prenume = prenume;

this.adresa = adresa;

this.telefon = telefon;

this.par = par;

this.sex = sex;

this.data = data;

this.CNP = CNP;

}

public Client()

{

nume = "";

prenume = "";

adresa = "";

telefon = "";

par = "";

sex = "";

data = "";

CNP = "";

}

public string[] getClientString() {

return new string[] { this.CNP, this.nume, this.prenume, this.data, this.telefon, this.adresa, this.par, this.sex };

}

public void setClient(string nume, string prenume, string adresa, string telefon, string par, string data, string sex, string CNP) {

this.nume = nume;

this.prenume = prenume;

this.adresa = adresa;

this.telefon = telefon;

this.par = par;

this.sex = sex;

this.data = data;

this.CNP = CNP;

}

}

}

Clasa Operațiune

using System;

using System.Collections.Generic;

using System.Text;

namespace test1

{

public class Operatiune

{

public int id;

public string tip;

public string data;

public string cnp_client;

public Operatiune(string cnp_client, string tip, string data, int id)

{

this.data = data;

this.cnp_client = cnp_client;

this.tip = tip;

this.id = id;

}

public Operatiune() {

this.data = "";

this.cnp_client = "0";

this.tip = "";

this.id = 0;

}

public string[] getOperatiuneString()

{

return new string[] { this.id.ToString(), this.tip, this.data, this.cnp_client };

}

public void setOperatiune( string cnp_client, string tip, string data, int id)

{

this.data = data;

this.cnp_client = cnp_client;

this.tip = tip;

this.id = id;

}

}

}

Clasa Produs

using System;

using System.Collections.Generic;

using System.Text;

namespace test1

{

class Produs

{

public string cod_produs;

public string nume;

public int pret;

public string furnizor;

public string stoc;

public int id_op;

public Produs(string cod_produs, string nume, int pret, string furnizor, string stoc, int id_op)

{

this.cod_produs = cod_produs;

this.nume = nume;

this.pret = pret;

this.furnizor = furnizor;

this.stoc = stoc;

this.id_op = id_op;

}

public string[] getProdusString()

{

return new string[] {this.cod_produs, this.nume, this.pret.ToString(), this.furnizor, this.stoc, this.id_op.ToString() };

}

}

}

Similar Posts