Sunteți pe pagina 1din 78

[Year]

[Type the document title]


[Type the document subtitle]
[Type the abstract of the document here. The abstract is typically a short summary of the contents of the document. Type the abstract of the document here. The abstract is typically a short summary of the contents of the document.]

Facultatea De Matematic

Florin Andreai i Informatic , Universitatea Bucure ti [Pick the date]

CUPRINS DISERTATIE

INTRODUCERE ............................................................................................ 2
ALEGEREA TEMEI AGEN
IE IMOBILIAR .............................................................................................. 2

TEHNOLOGII FOLOSITE ............................................................................ 4


INTRODUCERE N BAZE DE DATE ....................................................................................... 4 MIC GHID MYSQL .......................................................................................................... 11 TEHNOLOGII .NET DE ACCESARE A BAZEI DE DATE I DEZVOLTARE A APLICA IEI ................. 15

SCHEMA RELA IONAL ......................................................................... 24


TABELELE IMPLICATE ..................................................................................................... 24 MODUL DE GNDIRE BAZAT PE CEEA CE AVEM LA NDEMN .............................................. 34

MANUALUL UTILIZATORULUI ................................................................. 35


PROCESUL DE INSTALARE .............................................................................................. 35 RULARE INTERFA UTILIZATORI..................................................................................... 35 RULARE INTERFA MANAGER........................................................................................ 46

CODUL DIN SPATELE AFI

RII ............................................................. 56

LOGIN.CS ..................................................................................................................... 58 ANGAJATI.CS ................................................................................................................ 62 MANAGER.CS ............................................................................................................... 68 RAPOARTEANGAJATI.CS ................................................................................................ 70 GRAFIC.CS ................................................................................................................... 75

BIBLIOGRAFIE .......................................................................................... 77

pg. 1

Introducere
Alegerea Temei Agen ie Imobiliar

Am ales aceast tem prin prisma faptului ca a fi agent imobiliar ntr-un ora mare sau ntr-o localitate din ar este o activitate destul de des ntlnit c datorit i c ror multe n ar persoane, care tiu s se descurce, le poate aduce n scurt timp un profit frumu el care sa merite ntreaga investi ie. Se tie totodat sau de subnchiriere. Cu acestea n minte am pornit s m gndesc la ce anume a avea nevoie pentru a realiza acest proiect i ce anume ar trebui s fac ca s -l fac realizabil. Cum ideea era i este aceea de a scoate un profit repede si de a crea o rela ie cu clientul care s aduc beneficii de ambele p r i n timp am ales s merg pe direc ia de nchiriere a loca iilor. Ca orice firm care se respect exist cteva segmente pe care se va orienta i acest program. Pentru nceput avem un Super-utilizator c ruia i-am spus Manager i care va avea acces la anumite rapoarte privind angaja ii, activitatea firmei si de ce nu la propriet ile care aduc sau nu profit firmei imobiliare. n primul rnd se s tie c managerul trebuie s gestioneze activitatea firmei astfel nct cheltuielile i pre ul cerut aduc intr-adev r profit firmei. A doua parte a firmei am gndit-o ca sa aduc o i ef s pot gestiona activitatea firmei mele i de ce nu s pot urm ri pe baza datelor introduse de acestea ce anume se ntmpla. Pornind de la aceste dou direc ii vom avea: Managerul care: Poate crea unit i sau filiale noi pe care dore te s le gestioneze i care astfel i vor permit s exist activitatea firmei mai mult n teritoriu, sau s deschid mai multe filiale chiar acolo n ora ul n care opereaz firma, dar la adrese diferite; oarecare interac iune a agentului imobiliar cu programul de gestiune, astfel nct eu ca crizei care exist lumea s-a orientat mai mult c tre cl dirile cu pre mic sau c tre investi iile de nchiriere

pg. 2

Poate decide ce angaja i mai r mn i care angaja i nu mai r mn si totodat s -i gestioneze i astfel cnd va angaja pe cineva se va crea un nou user in baza de date care s aib acces la ea i s se conecteze n func ie de postul ocupat; Poate s gestioneze anun urile care sunt postate pn n acel moment n pres astfel nct s gestioneze apari ia acestora, frecven a sau modul n care se vor afi a + num r de caractere care tim c atunci cnd facem publicare ntr-un ziar conteaz ; Raportarea care desigur n activitatea unui manager este o activitate separat n func ie de rapoartele pe care le scoate poate vedea ce i cum merg cu adev rat lucrurile n firm . Raportarea se axeaz profit, care trebuie s existe cu adev rat. Angajatul care: Trebuie s vad propriet ile care exist n gestiunea firmei , astfel nct s nu se creeze duplicate i s fie de un real ajutor noua proprietate pe care el o introduce; Are acces la clien ii pe care el ii aduce n firm i care permite astfel firmei sa-i aduc profit. Totodat se face aici i indexare dup tipul num rul de identificare al celui logat. Astfel dac dam s introducem un client nou acela va reprezenta un client nou adus de mine, cel care sunt logat in aplica ia mea de gestiune; nchirieri putem vedea ce proprietate este sau nu nchiriat , proprietate care s ne permit s vedem de cnd si pn cnd a fost nchiriat i cum ar trebui s fie gestionat pe viitor n func ie de acest lucru; Vizion rile care se fac ntr-o anumit loca ie astfel nct mai ncolo, la rapoarte putem genera un raport pentru client ca s -i ar t m c i clien i am dus pentru vizionare la el, s -i dovedim productivitatea noastr clientului; Proprietari aici n modelul nostru conceptual am creat o sec iune a proprietarilor pentru c uneori conteaz proprietarul n sine pentru c acesta la final poate de ine mai multe propriet i pe care dore te s le gestioneze firma noastr pentru nchiriere; din punctul de vedere al Sec iunea de rapoarte, dar de data asta privit pe angaja i, anun uri, propriet i si desigur

angajatului, care dore te sa- i gestioneze singur activitatea pe care o ntreprinde i astfel va putea scoate rapoarte pentru: propriet i sau propriet i date i desigur pentru num rul de contracte pe care le-a f cut, lucru care ii va permite s - i gestioneze singur i activitatea lui.

pg. 3

Tehnologii Folosite
Introducere n Baze de date
Introducere n baze de date

n ultimii cincizeci de ani, produc ia i utilizarea tehnicii de calcul harware i software a cunoscut o dezvoltare dramatic . Ea reprezint o parte semnificativ din produsul na ional brut al rilor industrializate; n SUA, de exemplu, peste 50% din capitalul investit este cheltuit pe tehnologie de calcul. Costul informa iei" a ajuns la 1 trilion de dolari SUA (aproximativ produsul na ional brut al Marii Britanii) n anul 2000 i este estimat la peste 1,5 trilioane n 2005 (prognoz realizat de Michael Spindler fost pre edinte la Apple Computer). Produsele program au dep ncorporate i controleaz cu comand financiare it de mult teritoriul centrelor de calcul. Ele sunt i de comunica ii, tranzac ii echipamente industriale (linii tehnologice automate, ma ini

numeric , robo i), mijloace de transport

i bancare, re ele energetice, sisteme de ap rare na ional , etc. Odat cu

perfec ionarea tehnicilor virtual reality i multimedia, calculatorul este tot mai folosit ca mijloc didactic sau de divertisment i n activit i de concep ie. Tehnologia informa iilor face permanente modific ri mijloacelor de munc n ntreaga lume. Informa ii care erau alt dat stocate n depozite pline de dulapuri pot fi accesate acum la o singur ap sare a butonului mouse-ului. Pentru a stoca informa ii n orice mediu imaginabil n zilele noastre sunt folosite sisteme de baze de date. De la bazele mari de date, cum ar fi sistemele de rezervare a biletelor ale companiilor aeriene i pn la colec ia de fi e dintr-un cabinet medical, sistemele de baze de date sunt folosite pentru memorarea i distribuirea datelor de care ncep s depind vie ile noastre. Pn n urm cu c iva ani, sistemele mari de baze de date puteau fi executate numai pe calculatoare de tip mainframe. n mod obi nuit, era foarte costisitor s din clasa sta iilor de lucru, care sunt puternice distribuirea datelor. i ieftine, programatorii au fie proiectate, achizi ionate i ntre inute aceste ma ini. O dat cu apari ia calculatoarelor posibilitatea de a proiecta rapid i ieftin produse software pentru ntre inerea i

pg. 4

Cel mai folosit model de stocare a datelor este baza de date rela ional . Acest nou model s-a dezvoltat pornind de la un articol, A Relational Model of Data for Large Shared Data Banks (Un model rela ional al datelor pentru b nci mari de date folosite n comun), scris de Dr. E. F. Codd n anul 1970. Ideea lui Codd pentru un sistem de administrare a bazelor de date rela ionale folose te conceptele matematice de algebr rela ional pentru a grupa datele n mul imi i a stabili rela ii ntre submul imile (domeniile) comune. n plus fa de dezvoltarea unui model de baz de

date rela ional , alte dou tehnologii au condus la dezvoltarea rapid a ceea ce acum este numit un sistem de baze de date client/server. Prima tehnologie important a fost calculatorul personal, care a f cut posibil ca aplica ii ieftine, u or de folosit, s permit utilizatorilor crearea documentelor i administrarea datelor rapid i corect. Utilizatorii sau obi nuit s modernizeze continuu sistemele, deoarece rata schimbului a fost echilibrat rapid de sc derea pre ului celor mai avansate sisteme. A doua tehnologie important a fost dezvoltarea re elelor locale de calculatoare (LAN). De i utilizatorii erau obi nui i cu terminalele conectate la calculatorul mainframe comun, acum fi ierele procesate puteau fi stocate local i accesate de la orice calculator ata at n re ea. Totodat , cantit i mari de date puteau fi transferate la serverele de date departamentale. n acest context, sistemul, denumit client/server deoarece procesarea este separat ntre calculatoarele client i un server de baze de date, constituie o modificare radical calculatoarele mainframe. Aceast de la programarea aplica iilor bazat pe arhitectur este total recursiv , pe rnd serverele

putnd deveni clien i i cere servicii de la alte servere din re ea. Datorit puterii crescute a hardware-ului calculatoarelor personale, informa iile critice (importante) ale bazei de date pot fi memorate pe un server independent, care poate fi nlocuit mai trziu cu foarte pu ine (sau chiar f r ) modific ri. Ultima dintre arhitecturile dezvoltate este cea a aplica iilor distribuite pe web. Clientul devine o aplica ie cat mai simpla posibil, accesat de obicei printru banal browser de internet. Serverul de date si cel de aplica ii web preiau cea mai mare parte a sarcinilor, fiind plasate in general pe calculatoare puternice. Se revine astfel la structura (oarecum) centralizata, dar pe o spirala evidenta a tehnologiei.

pg. 5

Complexitatea actual necesar

a aplica iilor de management al bazelor de date face i a cre terii

o combina ie a proces rii tranzac iilor on-line, a nc rc rii

sprijinului decizional. n scopul satisfacerii acestor necesit i, este nevoie de baze de date scalabile i performante care pot fi ajustate dinamic pentru a realiza un compromis ntre bazele de date (mai mari) i utilizatorii simultani (mai mul i). De asemenea, sunt necesare tehnologii pentru baze de date proiectate pentru a maximiza capacit ile configura iei hardware/software disponibile (incluznd arhitecturi simplu i multiprocesor), precum i pentru valorificarea unor arhitecturi hardware (cum ar fi clustere cuplate larg i ma ini paralele puternice). Serverele de date de ast zi se apropie de paralel (de nou genera ie) a bazelor de date care i performan ; o regie minimal a sistemului aceste cerin e - o arhitectur de operare;

furnizeaz scalabilitate, manevrabilitate

i o distribuire automat a nc rc rilor de lucru. Arhitectura este proiectat

pentru a utiliza ct mai bine resursele hardware i poate fi reconfigurat dinamic on-line pentru a urm ri cererile n schimbare. Performan a este aspectul critic al succesului, modele de calcul, presiunea exercitat oricnd.
Ce este o baz de date? Dar un sistem de gestiune a bazelor de date?

i avnd n vedere cre terea

dramatic a num rului de utilizatori, date fiind aplica iile de comer electronic i noile asupra bazelor de date este mai mare ca

Baza de date reprezint interdependen mpreun

una sau mai multe colec ii de date aflate n

cu descrierea datelor i a rela iilor dintre ele. Colec ia de

date reprezint un ansamblu de date organizat dup anumite criterii. Descrierea datelor se ntlne te sub denumirile de catalog de sistem, dic ionar de date sau meta-date ceea ce reprezint date despre date. Rela iile logice reprezint asocia iile dintre mai multe entit i. O entitate este un obiect distinct ce trebuie reprezentat n baza de date. Un atribut este o proprietate ce descrie un anumit aspect al obiectului ce se nregistreaz n baza de date. n sistemele de baze de date definirea datelor se separ de programele aplica ie, utilizatorii v d doar defini ia extern a unui obiect f r a cunoa te modul n care e definit acesta i cum func ioneaz . n acest mod, defini ia intern a obiectului poate fi modificat f r a afecta utilizatorii acestuia dac nu se

pg. 6

modific defini ia extern . De exemplu, dac sunt ad ugate noi structuri de date sau sunt modificate cele existente, atunci programele aplica ie nu sunt afectate dac nu depind direct de ceea ce se modific . n bazele de date are loc o integrare a datelor, n sensul c mai multe fi iere sunt privite n ansamblu, eliminndu-se pe ct posibil informa iile redondante. De asemenea, se permite accesul simultan la acelea i date, situate n acela i loc sau distribuite spa ial, a mai multor persoane de preg tiri diferite, fiecare cu stilul personal de lucru. Sistemul de programe care permite construirea unor baze de date, introducerea informa iilor n bazele de date i dezvoltarea de aplica ii privind bazele de date se nume te sistem de gestiune a bazelor de date (SGBD). Un SGBD d posibilitatea utilizatorului s aib acces la date folosind un limbaj de nivel nalt, apropiat de modul obi nuit de exprimare, pentru a ob ine informa ii, utilizatorul f cnd abstrac ie de algoritmii aplica i privind selec ionarea datelor implicate i a modului de memorare a lor. SGBD-ul este o interfa operare.
n esen un SGBD permite:

ntre utilizatori i sistemul de

1. definirea bazei de date printr-un limbaj de definire a datelor (DDL) prin care se specific tipurile de date i structurile precum i constrngerile asupra datelor. 2. extragerea, inserarea, tergerea i actualizarea datelor din baza de date cu ajutorul unui limbaj de manipulare a datelor (DML) care ofer o facilitate de interogare general a datelor, denumit limbaj de interogare. Acest limbaj elimin dificult ile sistemelor bazate pe fi iere unde utilizatorul este constrns s lucreze cu un set fix de interog ri pentru a evita apari ia de programe noi ce creeaz probleme majore privind gestionarea lor. Limbajul ofer accesul controlat la baza de date furniznd: a) un sistem de securitate ce previne accesarea bazei de date de utilizatori neautoriza i; b) un sistem de integritate ce men ine concordan a datelor (coeren a);

pg. 7

c) un sistem de control al concuren ei ce permite accesul partajat la baza de date; d) un sistem de control al refacerii ce permite restaurarea bazei de date ntr-o stare precedent coerent ca urmare a unei defec iuni hardware sau software; e) un catalog accesibil utilizatorilor ce con ine descrieri ale datelor din baza de date. Spre deosebire de limbajele de programare obi nuite, n care declararea datelor este f cut n acela i loc cu prelucrarea lor, bazele de date prev d limbaje separate pentru declarare i prelucrare. Acestea, deoarece ntr-un program obi nuit datele exist efectiv numai pe timpul rul rii programului, pe cnd ntr-o baz la fiecare prelucrare. Limbajele DDL i DML sunt, de cele mai multe ori, extinderi ale unor limbaje de programe numite limbaje gazd . Compilarea succesiunilor de comenzi pentru descrierea datelor sau pentru operarea cu date se reduce, n acest caz, la o precompilare, adic transformarea acestor comenzi ntr-o succesiune de instruc iuni ale limbajului gazd care, prin executare, s dea efectul dorit. O alt modalitate de operare este aceea a transform rii comenzilor n lans ri de programe executabile. Comenzile sunt descrise prin sintaxe specifice fiec rui tip de SGBD, iar interpretarea i activarea lor se face automat, prin rutine scrise, de obicei, n limbajul gazd . n acest fel, calit ile SGBD-ului depind n mare m sur de calit ile limbajului gazd utilizat.
Componentele unui SGBD sunt:

de date, n general,

datele sunt definite o dat pentru totdeauna i nu mai sunt necesare redefiniri ulterioare

a. Hardware b. Software c. Date d. Proceduri e. Resurse umane a. Componenta hardware poate fi reprezentat de un singur calculator personal, un singur calculator mainframe sau o re ea de calculatoare. De obicei se aplic urm toarea schem ntr-o re ea de calculatoare:

pg. 8

1 calculator principal pe care se afl programele back-end - adic partea din SGBD care administreaz i controleaz accesul la baza de date; mai multe calculatoare aflate n diferite loca ii pe care se afl programele frontend adic partea din SGBD ce constituie interfa a cu utilizatorul. n aceast schem , numit client-server, programele back-end reprezint b. Componenta software - cuprinde: 1. programele SGBD; 2. programele aplica ie - n limbaje de programare de genera ia a III-a (C, Pascal, Cobol) sau SQL ncorporat ntr-un limbaj de genera ia a III-a; 3. sistemul de operare; 4. software de re ea. SGBD-ul poate avea ncorporate instrumente din genera ia a IV-a, cum ar fi SQL ce permit: dezvoltarea rapid de aplica ii; mbun t irea semnificativ a productivit ii; realizarea unor programe u or de ntre inut. c. Datele - ac ioneaz ca o punte ntre componentele ma in (hardware i software) i componenta uman . Baza de date con ine att datele opera ionale (setul de nregistr ri pe care se lucreaz ) ct i metadatele. Structura bazei de date e numit schem . d. Procedurile - reprezint instruc iunile i regulile aplicate n proiectarea i utilizarea bazei de date. Acestea pot fi: 1. deschiderea unei sesiuni de lucru n SGBD; 2. pornirea sau oprirea SGBD; 3. utilizarea unui program de aplica ie sau a unei func ii SGBD; 4. efectuarea de copii de siguran ; 5. tratarea defec iunilor hard i soft; 6. modificarea structurii unui tabel, reorganizarea bazei de date, mbun t irea performan elor, arhivarea datelor. e. Resursele umane sunt reprezentate de: serverul iar cele front-end reprezint clien ii.

pg. 9

1. Administratorul de date - responsabil de gestionarea resurselor de date proiectarea conceptual / logic a bazei de date;

2. Administratorul bazei de date - responsabil de realizarea fizic a bazei de date ce implic proiectarea i implementarea acesteia; 3. Proiectan ii de baze de date - ei pot fi: - Proiectant de BD logice: - identific datele (entit i i atribute) - identific rela iile dintre date - identific constrngerile - identific regulile ce descriu principalele caracteristici ale datelor - implic utilizatori n realizarea modelului de date - Proiectant de BD fizice: - transpune modelul logic ntr-un set de tabele i constrngeri - selecteaz structuri de stocare i metode de acces specific - asigur securitatea datelor 4. Programatorii de aplica ii 5. Utilizatorii finali Dintre sarcinile pe care le ndepline te gestionarul bazelor de date fac parte i urm toarele: Reducerea redundan elor prin identificarea informa iilor comune corespunz toare a aplica iilor. Eliminarea inconsisten elor ce rezult din reducerea redundan elor. Utilizarea simultan a datelor de mai mul i utilizatori. Standardizarea informa iilor. Asigurarea securit ii bazelor de date, n sensul acord rii i urm ririi modului de acces al utilizatorilor la diferite p r i componente ale bazelor de date. Asigurarea integrit ii bazelor de date, n sensul p str rii corectitudinii informa iilor con inute n baza de date prin testele aplicate datelor introduse n aceasta. Asigurarea sincroniz rii n cazul utiliz rii bazei de date simultan de mai mul i utilizatori sau a distribuirii informa iei pe mai multe sisteme. Cele mai multe SGBD-uri con in aplica ii, cum sunt: i o colec ie de utilitare folosite n diferitele i alc tuirea

pg. 10

procesoare pentru limbaje de cereri editoare de rapoarte subsisteme de reprezent ri grafice posibilit i de lucru tabelat procesoare de limbaje naturale programe statistice posibilit i de copiere generatoare de aplica ii (procesoare inteligente de tip "4GL") i alte posibilit i de dezvoltare a unor aplica ii de tip CASE (computer-aide software engineering) Pentru a u ura munca administratorului de sistem, un SGBD con ine o serie de componente ce permit: nc rcarea (crearea unei versiuni ini iale a bazei de date plecnd de la unul sau mai multe fi iere); salvarea i renc rcarea (efectuarea de copii periodice i posibilitatea refacerii bazei de date plecnd de la aceste copii); reorganizarea (rearanjarea datelor pentru a ob ine performan e superioare); statistici, analize i altele.

Mic ghid MySql


Introducere

MySql este un sistem de gestiune a bazelor de date. Mai mult chiar, MySql este un sistem de gestiune a bazelor de date rela ionale i este distribuit n regim Open Source. MySql software este Open Source a ceasta nseamn desc rcat de pe Internet, poate fi folosit f r a pl ti ceva i, dac surs poate fi studiat i i se pot aduce modific ri necesare. Serverul de baze de date MySql este foarte rapid, fiabil i u or de utilizat. Ini ial a fost dezvoltat pentru a manipula baze de date de dimensiuni mari mult mai rapid dect solu iile existente. Conectivitatea sa, viteza i securitatea fac ca Serverul MySql s fie potrivit pentru accesarea bazelor de date prin Internet. c MySql poate fi se dore te, codul

pg. 11

MySql Database Software este un sistem client/server ce const ntr-un server MySql multithreaded care suport Programming Interfaces APIs).
Caracteristici de baz ale MySql

diferite programe client

i biblioteci, unelte

administrative i o gam larg de interfe e pentru programarea aplica iilor (Application

Scris n C i C++; Testat cu o gam larg de compilatoare diferite; Func ioneaz pe diferite platforme; Dispune de API pentru C, C++, Eiffel, Java, Perl, PHP, Pyton, Ruby i Tcl; Complet multi-threaded folosind thread-uri de kernel. Acest lucru nseamn c poate lucra cu u urin pe mai multe procesoare dac sunt disponibile Ofer motoare tranzac ionale i non-tranzac ionale de stocare a datelor; Un sistem de alocare a memoriei foarte rapid i bazat pe thread-uri; Join-uri ale tabelelor foarte rapide; Folose te tabele temporare stocate n memorie Func iile SQL sunt implementate folosind o bibliotec interog rilor; de clase optimizat i sunt foarte rapide. De obicei, nu are loc alocare a memoriei dup ini ializarea

Serverul este disponibil ca program separat ce poate fi folosit ntr-un mediu de re ea de tip client/server. De asemenea, este disponibil i ca bibliotec ce poate fi inclus n aplica ii de sine st t toare.

MySql dispune de multe tipuri de date pentru coloane: numere ntregi de 1,2,3,4 i 8 byte lungime cu/f r OpenGIS; semn, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, i tipuri geometrice

nregistr ri cu lungime fix

i cu lungime variabil .

Comenzi i func ii

Suport complet pentru operatori interog rilor.

i func ii n clauzele SELECT

i WHERE ale

pg. 12

Suport pentru clauzele GROUP BY GROUP_CONCAT()).

i ORDER BY,

i pentru func ii de grup i

(COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), Suport pentru LEFT OUTER JOIN i RIGHT OUTER JOIN. Suport pentru alias-uri de tabele i coloane. DELETE, INSERT, REPLACE modificate. i UPDATE returneaz

num rul de rnduri

Comanda SHOW specific pentru MySql poate fi folosit pentru a ob ine informa ii despre bazele de date, tabele i indec i. Numele func iilor nu intr n conflict cu numele tabelelor sau ale coloanelor. ntr-o aceea i interogare se pot folosi tabele din baze de date diferite

Securitate, Conectivitate, Scalabilitate i Limite, Localizare, Clien i i unelte

Un sistem de privilegii i parole foarte flexibil i sigur care permite verificarea pe baza host-ului. Parolele sunt sigure deoarece tot traficul legat de parole este criptat cnd are loc conectarea la server. Manipuleaz baze de date de dimensiuni mari. MySql este folosit cu baze de date care con in 50 de milioane de nregistr ri. Sunt permi i pn la 32 de indec i pentru un tabel. Fiecare index poate consta din una pn la 16 coloane sau p r i de coloane. Clien ii se pot conecta la serverul MySql folosind socket-uri TCP/IP pe orice platform . Interfa a Connector/ODBC ofer suport MySql pentru programe client care folosesc conexiuni ODBC (Open Database Conectivity). Interfa a Connector/JDBC ofer suport MySQL pentru programe client Java care folosesc conexiuni JDBC (Java Database Conectivity). Serverul poate s prezinte mesaje de eroare clien ilor n multe limbi. Suport complet pentru diferit seturi de caractere. Toate datele sunt salvate folosind un set de caractere specificat. Toate compara iile pentru coloane de tip ir obi nuit de caractere sunt case-insensitive.

pg. 13

Sortarea este realizat n concordan i repar

cu setul de caractere ales. prin

Serverul MySQL are suport inclus pentru instruc iuni SQL care verific , optimizeaz tabelele. Aceste instruc iuni sunt disponibile n linia de comand intermediul clientului mysqlcheck.

Toate programele MySql pot fi invocate cu op iunea help sau -? Pentru a ob ine suport online.

Fundamente MySql Conectarea i Deconectarea de la Server

Pentru a realiza conectarea la server trebuie specificat un nume de utilizator i, de cele mai multe ori, o parol . Dac shell> mysql -h host -u user -p Enter password: ******** unde host i user reprezint Dac hostname-ul unde ruleaz serverul MySQL i respectiv numele unui cont MySQL, iar ******** reprezint parola care trebuie introdus . conectarea se realizeaz cu succes n continuare sunt afi ate informa ii introductive, urmate de prompt-ul mysql> shell> mysql -h host -u user p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 25338 to server version: 4.0.14-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> Aceasta nseamn c MySql este gata pentru a primi comenzile introduse. Deconectarea de la serverul MySQL se poate realiza oricnd prin introducerea comenzii QUIT (sau \a) la prompt-ul MySql. mysql> QUIT bye serverul ruleaz pe un alt calculator trebuie specificat i un hostname. Conectarea se realizeaz astfel:

pg. 14

Introducerea Interog rilor

Urm toarea comand este o interogare simpl care cere serverului informa ii precum versiunea curent i data curent : mysql> SELECT VERSION(), CURRENT_DATE; +--------------+--------------+ | VERSION() | CURRENT_DATE | +--------------+--------------+ | 3.22.20a-log | 1999-03-19 | +--------------+--------------+ 1 row in set (0.01 sec) mysql> Aceast interogare ilustreaz n mod normal, o comand rezultatele, apoi afi eaz cteva lucruri despre mysql const ntr-o declara ie SQL urmat de semnul punct i este gata s

virgul .Ct se lanseaz o comand , mysql o trimite serverului spre execu ie i afi eaz din nou prompt-ul mysql> pentru a indica c accepte alte comenzi. Mysql afi eaz rezultatul interog rilor ntr-o form tabelar . Prima linie con ine etichetele coloanelor, iar liniile urm toare sunt rezultatele interog rii. Mysql afi eaz i num rul de rnduri returnate i ct timp a fost necesar pentru execu ia interog rii.

Tehnologii .NET de accesare a bazei de date i dezvoltare a aplica iei


Generalit i

.NET prezint integrarea inter-limbaj beneficiar mai eficient . El ofer

i tratare a excep iilor, servicii de depanare

profilare, securitate mbun t it , lucru mai eficace cu versiunile

i instalare la

un model cu totul nou pentru interac iunea ntre n principal de

componente i mai mult a teptata bibliotec de clase -.NET Framework. .NET unific modelul de programare, f cnd din alegerea limbajului o problem preferin clase, comun , coerent i elegant . i beneficiaz de puterea personal . La dispozi ia tuturor aplica iilor .NET st o singur bibliotec de

ASP.NET este o tehnologie Microsoft pentru crearea de aplica ii web i servicii web. ASP.NET este succesorul lui ASP (Active Server Page)

pg. 15

platformei de dezvoltare .NET

i de setul de instrumente oferite de mediul de

dezvoltarea al aplica iei Visual Studio .NET. Cteva dintre avantajele ASP .NET sunt: ASP .NET are un set larg de componente, bazate pe XML, oferind astfel un model de programare orientat obiect (OOP). ASP .NET ruleaz cod compilat, ceea ce cre te performan ele aplica iei web. Codul sursa poate fi separat n dou fi iere, unul pentru codul executabil, iar un altul pentru con inutul paginii (codul HTML i textul din pagin ) . .NET este compatibil cu peste 20 de limbaje diferite, cele mai utilizate fiind C# Visual Basic. ADO.NET este o mul ime de biblioteci orientate obiect care permit interac iunea cu sistemele de stocare a informa iilor. De obicei aceste sisteme sunt reprezentate de bazele de date, dar pot fi i fi iere text, fi iere XML, fi iere Excel, etc. i

Niveluri ale paginilor ASP.NET

Cu toate c se structur software dep

.NET Framework este o ierarhie supl

i elegant

de clase pentru

dezvoltarea proiectelor Web, programatorii au de-a face cu blocuri de cod i informa ii dificil de manipulat, iar atunci cnd complexitatea unei componente e te un anumit prag, posibilitatea reutiliz rii i ncapsul rii devin

probleme serioase. Acest fenomen ap rut a fost numit n programare cod spaghetti. Ini ial cod spaghetti se referea la amestecul nclcit de linii Basic care rezult din folosirea ce generozitatea instruc iunilor GoTo Termenul este prea complexe. ASP.Net nu ncurajeaz deloc codul spaghetti. ASP.NET este riguros bazat pe obiecte i este construit deasupra unei familii de controale server u or extensibile. Structura unei pagini ASP.NET este extrem de modular avnd trei sec iuni: Directivele de pagin configureaz mediul n care va rula pagina, specific modul n care runtime-ul Http trebuie s proceseze pagina face n siguran i determin ce presupuneri se pot privind pagina. Directivele permit importarea de spa ii de nume pentru i o descriere potrivit i a unui stil de programare modular. i mult pentru paginile ASP nestructurate

a simplifica scrierea codului, nc rcarea de assembly-uri care nu se afl la momentul

pg. 16

curent n cache-ul global de assembly-uri(GAC1),

i nregistrarea de controale noi cu

nume pentru etichete i prefixe pentru spa iul de nume personalizate. Sec iunea de cod, avnd derutantul nume pentru etichete <script>, con ine orice cod surs care ine de pagin . Structura grafic a paginii, reprezint un schelet al paginii, care se completeaz n exterior folosind cod surs .
Abordarea Code-Behind

O solu ie pentru separarea codului de structura grafic n aplica iile ASP.NET ar fi fi ierele code-behind. Prin separarea codului i a structurii grafice se poate exploata orientarea nativ spre obiecte din .NET Framework pentru a construi o ierarhie de clase pentru pagini care ofer func ii din ce n ce mai specializate. n abordarea code-behind, directivele sau Visual C#. Leg tura c tre un fi ier cod-behind este definit @Page. <%@ Page Language="C#" CodeFile="Statistici.aspx.cs" Inherits="_Statistici" %> Facilitatea ASP.NET code-behind este activat spe Inherits prin ad ugarea a dou atribute n utiliznd un atribut al directivei i structura grafic a paginii se stocheaz ntrun fi ier .ASPX, iar codul pentru ele ntr-un fi ier separat scris n Microsoft Visual Basic

i Src, n directiva @Page. Atributul Inherits con ine numele clasei cod-

behind _Statistici din care este derivat pagina curent . Cnd se direc ioneaz browserele c tre pagina .ASPX, fi ierul clas code-behind al clasei este rulat i produce dinamic rezultatul necesar paginii. Cnd este solicitat pagina, fi ierul code-behin este nc rcat i tratat ca o parte integrat a paginii. Un avantaj practic al acestei abord ri este c el permite ca doi programatorii sau doua echipe de programatori s lucreze simultan la dezvoltarea unei pagini Web Forms. Dup ce structura unei pagini este definit n termeni de num r, nume i tipuri de controale server constituente, designerii HTML pot lucra la aspectul fi ierului .ASPX,
1

Global Assembly Cache

pg. 17

determinnd pozi ia controalelor, culorile

i fonturile lor, i chiar codul script de pe i i ndeplinirii

partea client. n acela i timp, programatorii Visual Basic i C# pot dezvolta codul rutinele de tratare a evenimentelor necesare func ion rii corecte a paginii cerin elor utilizator.
Interac iunea Cu Baza De Date Legarea La Date

Legarea la date(data binding) este procesul prin care se preiau datele de la o surs i se asociaz unei propriet i a unui element vizual. n func ie de contextul n care va fi afi at elementul, el va corespunde fie unei etichete HTML, fie unui control Web.NET. n ASP.NET, elementele atomice care conlucreaz pentru a genera con inutul a datelor paginilor sunt controalele Web. n cadrul leg turii la date n ASP.NET, aplica ia preia datele de la baza de date, iar apoi permite manipularea i atribuirea selectiv la propriet i ale controalelor care au fost proiectate specific pentru a suporta legarea la date. Controalele de server Web ASP.NET pot fi legate la o surs de date prin folosirea unui DataSource. Proprietatea DataSource permite specificarea obiectului surs de date la care este legat controlul. Aceast leg tur este logic inferior pn interfa cnd nu se apeleaz i nu are ca rezultat nici o opera ie de nivel metod . Nu toate propriet ile din metod se execut , explicit o alt

de programare a unui control Web pot fi legate la date. Legarea la date a unui apelnd metoda DataBind. Cnd aceast datele din sursa de date asociat , evalueaz propriet ile legate la i complex .

control este activat controlul ncarc

date i i redeseneaz interfa a utilizator pentru a reflecte modific rile. Legarea la date n ASP.NET se poate face prin legare simpl Legarea simpl la date Reprezint o conexiune ntre un element de date i o proprietate a unui control de server. Aceast conexiune este stabilit printr-o expresie special care este evaluat cnd codul din pagina procesat apeleaz metoda DataBind fie din obiectul Page, fie din controlul respectiv. Legarea complex la date

pg. 18

Apare n momentul n care se leag un control list sau un control iterativ la una sau mai multe coloane de date. Controalele list includ DropDownList, CheckBoxList, RadioButtonList i ListBox. Controalele iterative sunt Repeater, DataList i DataGrid.
Metode De Acces i Prezentare A Datelor

Structura fizic . Modelul func ional al aplica iei este structurat pe trei nivele: Nivelul Client (Browser, IE 5.0) Nivelul Web (IIS) Nivelul Database (Microsoft SQL Server) Nivelul Client Nivelul Web. Aplica ia client - browser accept formatare a datelor ADO), dar serverul Web. Nivelul Database Nivelul Web. Providerii OLE-DB2 pot face acum transport de date c tre baza de date i invers i pot transporta date provenind din baza de date. i schimb de date sunt: i prezint formatul i tehnologia de

ASP al datelor furnizate de nivelul serverului Web (IIS) (aici contribuind

Comunicarea datelor ntre nivele. Tehnicile de acces ntre client i IIS - Comunicarea se face prin Browser; ntre IIS

i SQL Server - Comunicarea se face prin ADO (toate paginile ASP care

acceseaz datele se conecteaz la serverul SQL folosind tehnologia ADO) Comunicarea ADO-SQL - Procedurile SQL pot primi ca parametri comenzi ASP, iar procedurile SQL pot returna recordset-uri. Comunicarea ASP-IE - Paginile ASP trimit c tre client cereri care sunt transformate pe client folosind ODBC3. n pagina ASP, cererea c tre SQL Server este trimis prin ADO i rezultatul este preluat ntr-un obiect de tip Recordset. Avantajul metodei const n faptul c datele aduse n momentul de execu ie a comenzilor din paginile ASP pot fi prelucrate cu ajutorul unor obiecte externe serverului

2 3

Object Linking And Embedding Data Base Open Data Base Connectivity

i avnd posibilitatea de transport de la browser la

pg. 19

Web sau corelate cu surse de date externe serverului de date (exemplu corelarea unor date provenind din SQL Server cu surse de date externe de tipul unor site-uri furnizoare de date).
Nivel Client (IE)
Nivel Prezentare (DHTML, MSXML)

ASP

ODBC

ASP

Nivel Web(IIS)
Nivel Prezentare *.ASP

ASP

ASP

ASP

Nivel Database(SQL Server)


Nivelul Prelucrare Date (proceduri stocate)

Nivel Logistic (proceduri stocate)

Nivel Datelor

Figura 2.4.3 -1 Structura fizic a sistemului

Formatarea datelor pe server Se utilizeaz ODBC ca metod de baz de tranzac ionare a datelor. Folosirea Aspului pentru transformarea pe server a datelor aduce pe o parte nc rcarea excesiv a serverului web, dar pe de alt parte nu impune o instalare special pe client a unei versiuni de browser. Abordarea faciliteaz de asemenea integrarea paginilor de tip ASP n sistem n cazurile cnd aceasta se impune. Metoda presupune formatarea datelor pe

pg. 20

server, ns

are avantajul de a aborda o metod

unic

(prin accesarea unei func ii

definit ntr-o pagin ASP inclus n celelalte pagini care o folosesc). Formatarea datelor pe client Abordarea este orientat pe ASP. Aceast metod are randamentul maxim din punctul de vedere al nc rc rii serverului i al vitezei de formatare. Comparativ cu metoda prelucr rii datelor pe server, n acest caz vor fi transportate pe client datele, urmnd ca apoi formatarea s fie executat de aplica ia browser. Integrarea Tehnologiei ADO n paginile conexiunii ADO are la baz un model bazat pe obiecte care expune colec ii, metode i propriet i necesare pentru accesarea i utilizarea unei baze de date. Acest model este i aplica iile de Web Utilizarea

disponibil n cadrul codului ASP i lucreaz mpreun cu nivelurile OLE-DB. ADO este responsabil n acela i timp pentru stabilirea conexiunilor ODBC, conlucrarea cu OLEDB i asigurarea utilit ii i lizibilit ii codului. n cadrul ASP, ADO utilizeaz un driver i propriet ile asociate dintr-o baz de ODBC pentru a se conecta la SQL Server. Obiectul Recordset define te cmpurile date. Obiectul Command integreaz parametrii care le trimitem c tre server, fie c Colec ia general i propriet ile asociate cu comenzile pe proceduri stocate, fie c afl m dac ordoneaz au ap rut colec ie se apeleaz

serverului efectuarea unor opera ii de administrare. Errors este cea care ne permite s probleme la executarea unei interog ri sau la accesarea serverului. Aceast de a reac iona la problemele ce pot ap rea pe durata utiliz rii sale. Obiectul Connection se define te de regul la nivel de pagin , pentru a stabili o conexiune func ional cu furnizorul de baz de date. Aceast conexiune reprezint canalul care se folose te pentru a trimite obiectul guvernant care controleaz i a primi informa ii de la baza de date. Este i apoi apelnd metoda OPEN.

este indispensabil pentru crearea unei aplica ii responsabile, care s aib capacitatea

interac iunea cu baza de date. O conexiune se

stabile te indicnd mai nti propriet ile acesteia

pg. 21

Colec ia general

Properties pentru obiectul Connection con ine informa ii despre numele utilizatorului, i alte elemente care definesc o conexiune la SQL Server.

conexiunea cu serverul. Printre aceste propriet i se afl identificatorul de conectare

Caracteristicile asociate unui obiect Connection Caracteristicile unei conexiuni controleaz modul n care se realizeaz conexiunea ntre aplica ia client controleaz i server. n cazul unei aplica ii ADO pentru Web, acestea interac iunea dintre nivelurile OLE-DB i interfa a ODBC. Caracteristicile de 30 de secunde, aceast n mai multe domenii. n interog rile

utilizate n implementare au fost: CommandTimeOut. Avnd valoarea implicit proprietate este folosit frecvent i se dovede te a fi util

primul rnd, este o modalitate de a reac iona la un trafic masiv pe server. Aceast valoare poate fi mic orat mare. Este bine s n cazul unor interog ri mai simple. Dac superioar pentru aceast necesit un timp redus de execu ie, acestei propriet i i se poate atribui o valoare mai stabilim o limit valoare pe baza experien elor avute cu rularea manual a unei interog ri n cauz , deoarece astfel se va evita expunerea utilizatorilor la a tept ri foarte ndelungate. S-a luat n considera ie nu numai traficul de pe Internet, ci Server. ConnectionString. Caracteristica ConnectionString permite s OLE-DB poate s con in se specifice irul transmis la ini ializarea furnizorului de OLE-DB din ODBC. Aceast proprietate pentru fie numele unei surse de date deja definite n cadrul sistemului, fie parametrii individuali folosi i pentru crearea conexiunii. Pentru o flexibilitate n sensul ajust rii unora din parametrii asocia i conexiunii, solu ia cea mai potrivit este specificarea tuturor parametrilor n cadrul irului. DefaultDatabase. La accesarea SQL Server exist desemn m o baz de date implicit trei modalit i diferite de a determina baza de date activ . Prima modalitate este la nivel de utilizator, acolo unde n func ie de informa iile de conectare a n indicarea bazei de date implicite n cadrul utilizatorului. A doua modalitate const i traficul de pe controlul de domeniu asociat cu SQL

configura iei ODBC. Ultima posibilitate este specificarea bazei de date prin intermediul propriet ii DefaultDatabase a conexiunii. Stabilind aceast proprietate ne asigur m c

pg. 22

baza de date dorit este

i cea accesat implicit la deschiderea conexiunii. Este bine fie indicat n irul de i nu ca proprietate. Dac irul de conectare const

ca n comanda de deschidere a conexiunii baza de date s conectare al turi de toate detaliile

n numele sursei de date trebuie folosit neap rat proprietatea DefaultDatabase. Mode. Asemeni multor alte propriet i asociate unei conexiuni, proprietatea Mode se stabile te nainte de deschiderea conexiunii Aceast optimizare poate fi o consecin i se folose te pentru a controla tipul de (de acces la baza de date aflat dedesubt, precum i o anumit optimizare a conexiunii. a alegerii modului de citire exclusiv exemplu), prin care motorul de baze de date este informat c nu vor fi efectuate

modific ri. Astfel se poate ob ine o cre tere a performan ei, deoarece de multe ori motorul de baze de date nu mai men ine acela i nivel de detaliu asupra conexiunii n cazul n care nu se mai a teapt la modific ri. nchiderea conexiunii cu baza de date prin metoda Close. Aceast metod nchide conexiunea cu baza de date, astfel toate obiectele Recordset fiind nchise automat.

pg. 23

Schema Rela ional


Folosind MySql trebuia pentru aceasta creat o baz de date care s poate fi integrata sistemului nostru i totodat modului nostru de gndire i care mai trziu s ne permit s putem asigura portabilitatea i integritatea bazei noastre de date. Astfel ne vom baza pe mai multe segmente care nsumate s ne ofere ntregul de care avem noi nevoie. Suma tuturor recreerebaza.sql Am creat astfel o baza de date imobiliar prin comanda : CREATE DATABASE IF NOT EXISTS imobiliar; USE imobiliar; - aceast manageri. baz de date fiind folosit ca un container pentru datele care vor circula ntre angaja i pe acela i nivel i ntre angaja i si i a conceptului de gndire concretizndu-se n fi ierul:

Tabelele implicate

1. CREATE TABLE `angajati` ( `id_angajat` int(10) unsigned NOT NULL AUTO_INCREMENT, `nume_angajat` varchar(45) DEFAULT NULL, `adr_angajat` varchar(100) DEFAULT NULL, `post_angajat` varchar(45) DEFAULT NULL, `salariu_angajat` double DEFAULT NULL, `id_sef` int(10) unsigned NOT NULL, `id_suc` int(10) unsigned NOT NULL, PRIMARY KEY (`id_angajat`), KEY `FK_angajati_1` (`id_suc`), CONSTRAINT `FK_angajati_1` FOREIGN KEY (`id_suc`) REFERENCES `sucursale` (`id_suc`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; unde vom avea astfel:

pg. 24

id_angajat dat de tip numeric int care se autoincrementeaz 10. autoincrementarea asigur introduc o dat nou ca de fiecare dat n sistem aceasta s fie diferit

i de lungime i

cnd cineva va ncerca s de cea anterioar

totodat s creasc cu unu. Astfel asigur m dac cineva vine i ne terge un angajat atunci vom avea un altul( dac va fi necesar s angaj m) care va avea un cod diferit; nume_angajat dat de tip sir de caractere (varchar) de lungime 45 care este nula By Default ca sa asigur m c la prima afi are sa nu fie afi at nimic i totodat aici se va stoca numele angajatului sediului firmei noastre; adr_angajat dat de tip ir de caractere(varchar) de lungime 100 care este tot nula By Default pentru a asigura ca la afi are nu se vede nimic. n acest cmp vom stoca adresa angajatului pe care dorim s -l angaj m; post_angajat dat de tip ir de caractere (varchar) de lungime 45 , nul By Default, n care vom stoca func ia pe care angajatul nostru o ocup : sef, manager, secretara, etc.; salariu_angajat dat de tip real care este nul By Default i n care vom stoca salariul angajatului nostru, salariu trecut cu cifre; id_sef dat de tip int(10) in care este trecut id-ul efului persoanei respective. Aici p str m echilibrul cu ce am creat anterior ca to i angaja ii au un cod asignat i chiar i eful unui angajat este angajat la firma noastr ; id_suc dat de tip num r ntreg(int) de lungime 10 n care se va stoca id_ul sucursalei unde lucreaz angajatului nostru; A a cum era de a teptat am creat o cheie primar pentru id_angajat ca sa se poat face indexare i c utare dup aceasta i totodat am creat i o cheie extern care implic direct tabela sucursale , astfel evit m s introducem angaja i n sucursale care nu exist . Pentru introducere folosim codul : INSERT f`,`id_suc`) VALUES (1,'FLORIN','BUCURESTI','agent',1000,0,1), INTO `angajati` (`id_angajat`,`nume_angajat`,`adr_angajat`,`post_angajat`,`salariu_angajat`,`id_se

pg. 25

(3,'MANAGER','Tecuci','sef',500,2,1); - pentru a ilustra maniera n care introducem, ca prim etap la creare ( nc nu suntem n interfa a grafic programul nostru) , datele n tabelul nostru de abia creat. 2. CREATE TABLE `anunturi` ( `id_anunt` int(10) unsigned NOT NULL AUTO_INCREMENT, `nume_ziar` varchar(45) NOT NULL, `tel_ziar` varchar(45) NOT NULL, `contact_ziar` varchar(45) NOT NULL, `id_proprietate` int(10) unsigned NOT NULL, `data_publicarii` datetime NOT NULL, `cost_anunt` double DEFAULT NULL, PRIMARY KEY (`id_anunt`), KEY `FK_anunturi_1` (`id_proprietate`), CONSTRAINT `FK_anunturi_1` FOREIGN KEY (`id_proprietate`) REFERENCES `proprietati` (`id_prop`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; unde vom avea astfel: id_anunt dat de tip num r ntreg de lungime 10 n care vom stoca un id de anun care s ne permit sa-l identific m i s -l g sim mai trziu; nume_ziar dat de tip ir de caractere, de lungime 45 , in care se va trece numele ziarului n care se reg se te anun ul nostru imobiliar; tel_ziar, contact_ziar - dat de tip ir de caractere de lungime 10 n care se va trece modalitatea de contact a ziarului respectiv; id_proprietate dat de tip ntreg de lungime 10 n care se va trece id-ul i n care propriet ii pentru care s-a dat anun ul n ziar, nu poate fi niciodat nula; data_public rii - dat de tip datetime care nu poate fi niciodat nul nostru; cost_anunt dat de tip real n care se va stoca costul anun ului pe care l-am publicat n ziar; se va trece data la care s-a f cut contractul cu ziarul pentru a se publica anun ul i totodat nu am rulat

pg. 26

A a cum era de a teptat , din denumire, am transformat id_anunt in cheie primara si id_prop n cheie extern care va fi preluat din tabelul proprietati.

3. CREATE TABLE `clienti` ( id_client` int(10) unsigned NOT NULL AUTO_INCREMENT, `nume_client` varchar(45) DEFAULT NULL, `tel_client` varchar(45) DEFAULT NULL, `tip_preferat` varchar(4) DEFAULT NULL, `max_chirie` double DEFAULT NULL, `id_angajat` int(10) unsigned NOT NULL, `data_introducerii` datetime DEFAULT NULL, PRIMARY KEY (`id_client`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1; unde vom avea: id_client dat Se observ c de tip num r ntreg de lungime 10 n care vom stoca id-ul nu poate fi nul i valoarea lui se modifica, autoincrementeaz , clientului nostru astfel nct s nu avem doi clien i care au acela i cod de client. odat cu introducerea unei noi nregistr ri; nume_client dat de tip ir de caractere de lungime 45 n care se va trece numele complet al clientului nostru; telefon_client dat de tip ir de caractere n care vom stoca num rul de telefon al clientului nostru; tip_preferat dat de tip varchar de lungime 4 n care se va trece tipul de apartament preferat pe care l prefer clientul nostru; max_chirie dat de tip real care va stoca pre ul maxim n euro pe care clientul nostru dore te sa-l pl teasc ; id_angajat dat de tip num r ntreg de lungime 10, care nu poate fi nul care se trece codul angajatului firmei care se ocupa de nchirierea respectiva; data_introducerii dat de tip datetime care la fel nu este nul referire la data la care se va ncepe sa se stea; A a cum era de a teptat cheia primar este id_client; i care face i n

pg. 27

4. CREATE TABLE `contracte` ( `id_contract` int(10) unsigned NOT NULL AUTO_INCREMENT, `id_client` int(10) unsigned NOT NULL, `id_proprietate` int(10) unsigned NOT NULL, `mod_plata` int(10) unsigned DEFAULT '1', `avans` double DEFAULT NULL, `durata` int(10) unsigned NOT NULL, `data_start` datetime NOT NULL, PRIMARY KEY (`id_contract`), KEY `FK_contracte_1` (`id_client`), KEY `FK_contracte_2` (`id_proprietate`), CONSTRAINT `FK_contracte_1` FOREIGN KEY (`id_client`) REFERENCES `clienti` (`id_client`), CONSTRAINT `FK_contracte_2` FOREIGN KEY (`id_proprietate`) REFERENCES `proprietati` (`id_prop`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; unde vom avea: id_contract dat de tip num r ntreg care se va autoincrementa i n care vom trece num rul contractului. Se autoincrementeaza ca si celelalte pentru a nu da acela i num r de contract la contracte diferite; id_client dat de tip numeric de lungime 10 care are acelea i propriet i ca descrierile de mai sus; id_proprietate dat de tip numeric de lungime 10 n care se va trece num rul de identificare al propriet ii; mod_plat dat de tip numeric de lungime 10 in schimb de data asta are i ne va specifica dac s-a dat sau valoarea ini ial egal cu 1; avans dat de tip real care ini ial este nul nu avans; durata dat de tip numeric de lungime 10 n care se va men iona durata pe care este f cut contractul de nchiriere;

pg. 28

data_start dat de tip datetime n care se va trece data la care va intra n vigoare contractul, data de nceput; Avem indexare cupa doua chei externe id_client si id_proprietate cu constrngerile de rigoare astfel nct s nchiriem o proprietate care nu o avem sau care nu exista;

5. CREATE TABLE `proprietari` ( `id_proprietar` int(10) unsigned NOT NULL AUTO_INCREMENT, `nume_proprietar` varchar(45) DEFAULT NULL, `adresa_proprietar` varchar(45) DEFAULT NULL, `tel_proprietar` varchar(45) DEFAULT NULL, `domeniu_ec` varchar(45) DEFAULT NULL, `contact` varchar(45) DEFAULT NULL, PRIMARY KEY (`id_proprietar`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1; unde avem c : id_proprietar dat de tip numeric de lungime 10 n care se va introduce codul unic de identificare al proprietarului pentru o c utare i o indexare mai u oar ; nume_proprietar dat de tip sir de caractere de lungime 45 n care se va trece numele complet al proprietarului; adresa_proprietar dat de tip ir de caractere de lungime 45 n care se va trece adresa proprietarului; tel_proprietar dat de tip ir de caractere de lungime 45 n care se va trece num rul de telefon al proprietarului; domeniu_ec dat contact dat de tip ir de caractere n care se va trece domeniul economic al proprietarului; de tip ir de caractere de lungime 45 n care se va trece modalitatea de contact a proprietarului; Vom avea totodat ca i cheie primar , pentru indexare i s nu existe dou nregistr ri care s aib aceea i valoare, cmpul id_proprietar.

pg. 29

6. CREATE TABLE `proprietati` ( `id_prop` int(10) unsigned NOT NULL AUTO_INCREMENT, `adresa_prop` varchar(100) DEFAULT NULL, `tip_prop` int(1) unsigned DEFAULT NULL, `nr_camere` int(10) unsigned DEFAULT NULL, `chirie` double DEFAULT NULL, `id_proprietar` int(10) unsigned NOT NULL, `descriere` varchar(1000) DEFAULT NULL, `poza` varchar(500) DEFAULT NULL, PRIMARY KEY (`id_prop`), KEY `FK_proprietati_1` (`id_proprietar`), CONSTRAINT `FK_proprietati_1` FOREIGN KEY (`id_proprietar`) REFERENCES `proprietari` (`id_proprietar`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; unde vom avea: id_prop data de tip numeric de lungime 10 care se autoincrementeaz n parte; adresa_prop dat de tip ir de caractere de lungime 100 care se va folosi pentru a stoca adresa propriet ii pe care noi vom dori s o nregistr m; tip_prop dat de tip num r ntreg de lungime 1 care va stoca tipul propriet ii noastre, lucru descris un pic mai trziu cnd vom vorbi despre programul creat; nr_camere data de tip num r ntreg de lungime 10 n care se va trece num rul de camere pe care l are proprietatea care urmeaz a fi nchiriat ; chirie dat de tip real n care se va stoca valoarea care se va dori a fi pl tit pentru chiria lunar ; id_proprietar dat respectiv ; descriere dat de tip ir de caractere de lungime 1000 n care se poate trece o descriere mai larga a propriet ii; de tip num r ntreg de lungime 10 n care se va trece spre nchiriere proprietatea num rul de identificare al proprietarului care ofer i care se va folosi pentru a da un num r de identificare unic pentru fiecare proprietate

pg. 30

poza dat de tip ir de caractere n care se va stoca path-ul pn la poz astfel nct calculatorul s Vom avea totodat tie de unde s ia poza pentru a putea astfel s o afi eze; ca i cheie primar id_proprietar si ca cheie extern

id_proprietar care se va lega cu id_proprietar din tabela proprietari. 7. CREATE TABLE `sucursale` ( `id_suc` int(10) unsigned NOT NULL AUTO_INCREMENT, `adresa_suc` varchar(100) DEFAULT NULL, `tel_suc` varchar(45) DEFAULT NULL, `id_manager` int(10) unsigned NOT NULL, `data_ang` datetime DEFAULT NULL, `bonus` double DEFAULT NULL, PRIMARY KEY (`id_suc`), KEY `FK_sucursale_1` (`id_manager`), CONSTRAINT `FK_sucursale_1` FOREIGN KEY (`id_manager`) REFERENCES `angajati` (`id_angajat`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1; unde vom avea: id_suc - dat de tip numeric de lungime 10 care se i autoincrementeaz i astfel pentru fiecare sucursal care se va crea vom avea o alt valoarea; adresa_suc dat de tip ir de caractere de lungime 100 n care vom trece adresa sucursalei noi pe care noi ne dorim s o cre m; tel_suc dat de tip ir de caractere n care se vor trece numerele de contact pentru sucursala respectiv ; id_manager dat de tip num r ntreg de lungime 10 n care se va trece codul de identificare al managerului care conduce sucursala respectiv ; data_angaj dat de tip datetime n care se va trece data la care s-a nfiin at sucursala; bonus dat sucursal fa de tip real n care se va trece bonusul realizat de respectiva de alte sucursale;

pg. 31

Vom avea totodat

i cheia externa id_manager care se va lega de un id_angajat

deoarece nu putem avea un manager care nu este angajat la firma noastr ; 8. CREATE TABLE `useri` ( `ID_USER` int(10) NOT NULL AUTO_INCREMENT, `USERNAME` varchar(45) NOT NULL, `PAROLA` varchar(100) NOT NULL, `LEVEL` int(10) NOT NULL DEFAULT '1', `ID_ANG` int(10) unsigned NOT NULL, KEY `ID_USER` (`ID_USER`), KEY `FK_useri_1` (`ID_ANG`), CONSTRAINT `FK_useri_1` FOREIGN KEY (`ID_ANG`) REFERENCES `angajati` (`id_angajat`) ON DELETE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC Aceast tabel este i creat pentru a crea utilizatori care s aib acces la baza noastr de date astfel o parte din ei sa fie manageri de filiale i o alt parte s fie angaja i care s aib acces. Astfel vom avea: id_user dat de tip num r ntreg de lungime 10 care se i autoincrementeaz . Aici se va trece id_ul utilizatorului creat pentru a avea acces la baza de date. Este folosit pentru indexare i sortare; username - dat de tip ir de caractere de lungime 45 care se folose te pentru a declara un nume de utilizator pentru logarea n aplica ie; parola dat de tip ir de caractere de lungime 100 care va fi folosit pentru a stoca parola care ii trebuie utilizatorului pentru logare; Level dat de tip int de lungime 10 care se folose te pentru a declara nivelul de acces pe care l va avea un utilizator n aplica ie. Nivelul 1 este setat ca Default i reprezint nivelul de acces al unui utilizator obi nuit si managerul are nivel 2 de acces; id_ang dat de tip num r ntreg de lungime 10 n care se va trece id-ul de angajat pentru care au fost crea i utilizatorii i parola;

pg. 32

Vom avea

i cheia extern

id_ang care va face leg tura cu tabela angaja i

elementul id_angajat; 9. CREATE TABLE `vizionari` ( `id_vizionare` int(10) unsigned NOT NULL AUTO_INCREMENT, `id_client` int(10) unsigned NOT NULL, `id_proprietate` int(10) unsigned NOT NULL, `data_vizionare` datetime NOT NULL, `comentarii` varchar(100) DEFAULT NULL, PRIMARY KEY (`id_vizionare`), KEY `FK_vizionari_1` (`id_client`), KEY `FK_vizionari_2` (`id_proprietate`), CONSTRAINT `FK_vizionari_2` FOREIGN KEY (`id_proprietate`) REFERENCES `proprietati` (`id_prop`), CONSTRAINT `FK_vizionari_1` FOREIGN KEY (`id_client`) REFERENCES `clienti` (`id_client`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; unde vom avea: id_vizionare dat id_client dat de tip num r ntreg n care se va trece num rul de identificare al vizion rii pentru a putea fi c utat i identificat mai u or; de tip num r ntreg de lungime 10 n care se va trece codul de tip num r ntreg de lungime 10 n care se va trece clientului care va nchiria proprietatea; id_proprietate dat codul de identificare al propriet ii care urmeaz a fii vizionate; data_vizionare dat de tip datetime n care se va stoca data la care se face vizionarea propriet ii; comentarii dat de tip ir de caractere n care se vor stoca eventualele tim c uneori conteaz ceea ce se ntmpl n timpul comentarii f cute n timpul vizion rii att de c tre agentul imobiliar ct i de c tre clientul n sine pentru c unei vizion ri;

pg. 33

A a cum era de a teptat avem i constrngerile de cheie primar id_vizionare si totodat avem constrngeri de cheie extern id_proprietate i respectiv id_client.

la cmpul

la cmpurile

Modul de gndire bazat pe ceea ce avem la ndemn


innd cont c mi trebuia s creez o aplica ie care s fie totu i portabil m-am gndit pe aceast cale s folosesc cuno tin ele acumulate n anii de studiu la Master pentru a reu i s realizez tot ceea ce i dore te acest proiect s realizeze. Mai nti de toate a trebuit s m gndesc cum asigur conexiunea cu baza de date deschis pot s i folosesc ceea ce mi este necesar. Pentru nceput am pornit cu instalarea programului MySql care mi-a permis crearea serverului i a bazei de date de care aveam nevoie pentru a rula aplica ia mea. Nimic mai simplu pn aici pentru c odat ce am stabilit planul de implementat n aici lucrurile au mers destul de documentul MySql creat am dat i l-am rulat. Pan i cum

simplu numai c mai r mnea crearea unei conexiuni care s r mn totu i deschis atunci cnd lucrez cu serverul sau doar atunci cnd dorin a mea este numai de a realiza rapoarte. Am ncercat s vad ce se poate face n schimb pentru leg tura cu Visual utilizarea unui de date. Pentru aceasta am Studio mi trebuia o aplica ie de leg tura care s -mi permit ConnectionString care s se conecteze la baza noastr leg tur . Dup

ales aplica ia dcmysqlfree care mi va permite s personalizez i s rela ionez aceast ce totul a fost la locul lui i astfel gndit am pornit la implementarea efectiv prin VisualStudio.

pg. 34

Manualul Utilizatorului
Procesul de instalare
Ca orice program am dorit ca un inginer de software, sau cineva de la it s poat instala aplica ia i totodat s f cnd totodat s ne permit s tie ce set ri trebuie f cute pentru ca utilizatorii s aib acces la acest site. Astfel voi descrie n pa i simpli cum ar trebui instalat, referin i la ce declar ri am f cut eu pentru ca programul s mearg . gestion m baza de date i totodat s efectueze n background Pasul 1. Include faptul c nainte de toate trebuie s avem MySql-ul instalat care opera iile ulterioare pe care utilizatorii programului le vor face. Astfel codul din interfa a grafic va rula opera iile care vor asigura modific ri, n func ie de nivelul de acces , s asigur m partajarea bazei noastre de date ) aceste i rulat fi ierul recreerebaza.exe din direct n baza noastr de date create i astfel dac se vor face modific ri ntr-o parte (daca vom dori vreodat Dup modific ri vor fi vizibile de oriunde. instalarea programului am inclus fi ierul sqldatarun ca s ne creeze baza de date i desigur s ne refac nregistr rile. Acolo se g sesc i cei doi utilizatori ini iali: florin i Manager care vor avea parola florin i care vor avea acces direct n baza de date i desigur cnd s-a creat pentru prima dat mysql s-a creat root-ul cu parola florin. Pas. 2 Dup ce am terminat de creat baza de date, ca i instalator , trebuie apoi s rul m programul dcmzsqlfree.exe din programul de instalat i acolo sa permitem ca portul i baza de date cu acela i utilizator i parol creat prin MySql. Pas. 3 R mne partea de rulare care se va baza momentan, prin prisma cuno tin elor pe care le-am acumulat pn acum , pe Visual Studio i pe sec iunea de rulare pe care acesta o are inclus n acest moment. terminat . i cu acest pas instalarea este s fie conectat la baza de date

Rulare interfa

utilizatori

Vom ncepe cu utilizatorii pentru c ei vor avea n primul rnd ansa s ruleze programul pe calculatorul propriu i desigur s cear majoritatea datelor. Desigur prin utilizator n cadrul firmei mele imobiliare m refer la agen ii imobiliari care s-au angajat

pg. 35

pn

n acel moment la firm

i c rora desigur li s-au creat user

i parol

pentru

aplica ie. Pornim rularea i primul lucru care l vom vedea va fi interfa a de logare unde vom introduce datele utilizatorului pe care l-am creat ca s fie agent imobiliar i s aib , pentru trening, acces n baza noastr de date, astfel se va introduce Florin ca nume de utilizator si parola tot florin. Per ansamblu i logarea a fost personalizat cu o imagine sugestiv care s reflecte faptul c vorbim despre agen ia mea imobiliar Astfel dac un client este prin preajm nu ne va fi fric sa o deschidem.
Interfa a de logare

i totodat ca

s fie pl cut att pentru utilizator ct i pentru persoanele care sunt n jurul acesteia.

Dup ce am introdus datele mai sus men ionate, fie dnd Enter, fie cu click pe butonul intr n cont vom accesa urm torul meniu care ne va duce la fiecare ramur pe care ulterior o vom descrie.

pg. 36

Astfel : 1. Cu click pe fi ier avem acces la Butonul de Ie ire a c rui singur scop va fi sa ne scoat din aplica ie si astfel s reintr m n sistemul de operare a ma inii pe care avem instalat aplica ia s ruleze.
Figura cu propriet i

2. Dac

d m click pe butonul propriet i, ca

i utilizator vom avea acces la destinat cre rii de

propriet ile pe care eu ca i agent imobiliar le gestionez , sau pe care le-am gestionat, aceast interfa fiind folosit att ca o interfa

pg. 37

noi nregistr ri ct i ca o interfa fost atribuite.

pentru a vedea propriet ile care deja mi-au

De acolo atunci cnd vom da un click pe cap tul din stnga vom observa c cmpurile noastre Adresa, Tip de Locuin , Num r camere, Proprietar si descrierea se vor popula cu datele care se reg sesc n acea nregistrare i apoi vor putea fi u or editate. Astfel pentru a edita o proprietate deja existent trebuie mai nti s o select m ca s ne populeze zonele, apoi s modific m ce avem de modificat i apoi s select m butonul pe care scrie Editeaz totodat salvarea acestora. Aten ie a nu se da click pe salveaz pentru c apoi acel buton creeaz o nregistrare nou cu acelea i date, dar totodat modificat id-ul de proprietate. Se observ totodat c mai avem butoanele de : Proprietate noua care ne va asigura c dac sunt selectate date anterior atunci urmeaz ca toate TextBoxurile s aib con inutul golit pentru a putea astfel introduce mai u or datele unei noi propriet i i desigur atunci cnd d m salvare aceasta s se i salveze ca o nregistrare nou n baza noastr de date, nregistrare ce va fi din nou disponibil la o urm toare logare; Upload Imagine desigur c lucr m cu chirii sau c lucr m cu altceva, elementul final l reprezint tot o proprietate i cum adeseori o imagine face mai mult dect o mie de cuvinte este bine ca proprietatea s fie nso it i de un element vizual i de aceea am n creat acest buton. Atunci cnd este ac ionat imaginea pe care o avem salvat date; Stergere desigur nu putea lipsi acest buton pentru c gre eal o nregistrare gre it sau dac gestiune trebuie s o elimin m.
3. Totodat

care va asigura updatarea informa iilor din tabel

calculator se va muta (prin crearea unei copii) n folderul photos al bazei noastre de dac am introdus din n nu mai avem proprietatea respectiv

ca orice agent care se respect

nu pute lipsi sec iunea de clien i ai

agentului. Astfel de aici fiecare agent i va putea gestiona proprii clien i care fie vor dori s ofere spre nchiriere o proprietate, fie au o proprietate pe care doresc

pg. 38

s o nchirieze i au aflat de ea n urma unui anun sau de ce nu ace tia sunt clien i cu care mergem la vizion ri spre a le g si o proprietate de nchiriat.
Figura Clien ilor

Se observ totodat c am dorit s p str m unitatea ntregului proiect ca astfel navigarea dintr-o fereastr n alta s fie mai u oar i pentru utilizator. n sec iunea de florin ) i pot zicala clientul nostru jos reg sim totalitatea clien ilor pe care eu ca agent ( n cazul de fa contacta n caz ca am o proprietate de nchiriat. Astfel dup

st pnul nostru am urm rit s ne ghid m dup preferin ele acestora i astfel vom avea: nume, num r telefon i angajatul care reprezint id-ul angajatului care face vad de cnd

nregistrarea( se observ din poz ca avem numai cifra unu care reprezint id-ul angajatului nostru florin) si data introducerii care urm re te s respectivul client a ales s fie clientul nostru;

pg. 39

a doua sec iune este bazat dat chiria maxim

pe preferin e si astfel vom avea : tip proprietate o ofere, ca i valoare

preferat n care select m ce tip de proprietate prefer clientul, apoi avem ca i pe care clientul nostru dore te s aceasta fiind consemnat n euro. O dat selectat o nregistrare cmpurile din tabel se populeaz cu aceasta i vom putea folosi tot butonul: Editeaz pentru a edita nregistrarea dup selec ie, Client Nou i Salveaz pentru a crea o nou nregistrare i de ce nu dac persoana respectiv nu mai dore te s ne fie client s putem s o tergem din baza noastr de date ca sa nu o mai populeze inutil. 4. Avem clien i i avem i propriet ile i astfel ne mai trebuie o interfa care s

asigure leg tura dintre ace tia. Unde cererea se ntlne te cu oferta trebuie s putem ncheia un contract. Astfel dac d m click pe nchirieri c pe acest lucru se bazeaz activitatea noastr de firm , va ap rea urm torul formular:
Figur nchirieri

pg. 40

Aici datele sunt rela ionate pentru c avem partea stnga care pune accent pe clien i si dac d m click pe s geata din dreptul Labelului client vom vedea numele tuturor clien ilor introdu i de noi n baza de date a firmei si astfel celelalte cmpuri ( din partea stng )se vor nc rca automat dup selec ia unui client cu datele acestuia de contact i selec iile selectate anterior , completate atunci cnd a luat decizia s devin clientul firmei noastre. Pe cealalt parte, n dreapta, avem sec iunea Proprietate care va utiliza datele salvate la propriet i si astfel dac select m din dropdownList-ul care se afla n dreptul Labelului Proprietate o proprietate - cmpurile din partea dreapt se vor popula i ele. Dac clientul este hot rt, bate palma dorind s ncheie un contract de nchiriere cu noi, dup Este o interfa noi contracte.
Figura Vizion ri

ce select m ce proprietate a ales clientul nostru putem da

salveaz contract i astfel pe id_ul nostru de agent va ap rea un nou contract activat. care ne permite foarte u or s salv m nregistr rile i totodat s cre m

5. Cum la fiecare apartament trebuie s ducem clien i pentru vizionare am creat o tabel care s stocheze datele de vizionare pentru orice proprietate. Datele acestea vor fi salvate i vor putea fi folosite n momentul n care clientul ne cere

pg. 41

s -i scoatem un raport n care sa-i ar t m ce am f cut pentru a i nchiria proprietatea. Se bazeaz despre clien i si totodat vizion rile se salveaz aceea i proprietate. A a se prezint tabela care ne permite s facem vizion rile i totodat se vede c pentru unitate am l sat n continuare clientul pe partea stng pe partea dreapt . Putem pune totodat de date. Dac Nou ne i desigur proprietatea i comentarii legate de vizionare, mai ales c ca i tabelul anterior pe datele care le-am stocat de data asta putem avea mai multe vizion ri la pe datele despre proprietate numai c separat pentru c

pentru a stoca datele ce le introducem aici am creat o tabel special n baza noastr am dat salvare automat datele vor fi salvate, iar dac d m Vizionare terge orice nregistrare am fi avut-o noi n prealabil.

Figur Proprietari

6. Acum am creat o tabel propriet

care va stoca proprietarii care ofer

spre nchiriere

i prin firma noastr . Cnd am gndit acest lucru am pornit de la faptul

pg. 42

c agentul percepe comision att de la proprietar ct i de la noul client pe care l duce pentru vizionare la loca ia respectiv . Avem astfel ca i date: Numele, adresa Tipul de persoan de cele fizice; Domeniul economic dac s-a bifat persoan juridic trebuie apoi s select m domeniul economic n care aceasta activeaz ; Nume Contact se tie c dac avem de a face cu un agent economic atunci intervine necesitatea de a prelua datele unei persoane de contact care s poat s dispun de bunurile sau actele firmei; Ca i butoane putem selecta ( de la stnga la dreapta): Client Nou buton care ne va permite eliminarea nregistr rilor anterioare din c u e astfel nct s putem introduce date nou, un fel de clear; Salveaz - dup ce introducem noi date putem da click pe acest buton i astfel va fi creat pentru noi o nou nregistrare n baza de date care va folosi pentru un client nou; Editeaz odat ce am selectat o dat aceasta trebuie s poat fi editat i apoi cu click pe acest buton salv m modific rile; Sterge i astfel dac ne dorim s tergem un proprietar cu care este un buton al c rui efect, dac este un client selectat - la click - este acela de a terge nregistrarea selectat nu mai colabor m o putem face foarte u or. 7. Rapoarte pentru rapoarte a trebuit s creez o interfa special care sa-mi i telefonul de contact ( sau telefoanele de contact ) ale dac este juridic sau fizic acest cmp este important proprietarului care dore te s ofere spre nchiriere proprietatea.; pentru a fi completat pentru c n Romnia persoanele juridice au alt statut fa

permit la fel ca i aceasta accesul pe mai multe sec iuni asupra c rora m-am orientat. Astfel vom avea meniul de forma in care se vor vedea direc iile, cum putem considera sec iunea aceasta ca o subinterfa o vom descrie aici:

a) Fi ier un click pe aceast sec iune din meniu ne poart c tre un SubMeniu Inapoi cu care ne putem ntoarce la interfa a ini ial pentru angaja i;

pg. 43

b) Propriet i aceast sec iune este total diferit de cea anterioar pentru ca se ocup de afi area unui raport privind anumite condi ii si astfel vom avea i vom putea scoate un raport cnd vine vorba de : tipul de proprietate, cte camere are , chirie maxim care dorim a fi pl tit , dac este disponibil sau nu , i dac avem nevoie i detaliile proprietarului. Tot ce avem noi de f cut este s facem selec ia i apoi s d m click pe butonul genereaz raport pentru ca apoi n sec iunea de jos a formularului s ni se genereze un raport care s respecte condi iile introduse de noi atunci cnd am f cut c utarea. n cazul de fa cel mai u or de scos datele. Mai jos este totodat trecut maniera de prezentare a raportului i modul n care a fost gndit ca s se prezinte pentru utilizatorul final.
Figur Raport Propriet i

raportul este gndit ca o c utare pentru ca este

c) Proprietate Data este denumit un pic mai sugestiv i nu reprezint proprietate dat a a cum s-ar considera doar din citirea numelui. Anterior stocam date i despre persoane care ar putea fi posibili clien i si deci atunci cnd un client vine la noi , noi i cu ce l despre vizion ri

nregistra contracte cu noi. Ziceam c

trebuie sa-i ar t m despre ce este vorba n proprietatea noastr avantajeaz pe el cel mai mult colaborarea cu noi.

pg. 44

Figura Raport Proprietate Data

i cum se observ n partea stng noi am selectat proprietatea pe care eu o gestionez ca i agent i apoi n partea dreapt am selectat vizion ri i posibili cump r tori s fie afi a i. Dac proprietatea avea o poz aceasta va ap rea ca preview n imaginea care ne este prezentat drept nlocuitor pn la o selec ie prealabil . Totodat putem vedea foarte u or la vizion ri comentariile pe care leau avut poten ialii clien i n privin a nchirierii sau a locului n sine.
d) Ultimul raport care trebuia neap rat generat i creat pentru a ne putea evalua activitatea este raportul privind contractele ncheiate care se deschide ca i interfa Meniului Clienti-Contracte. i aici se va observa clar c ne-am orientat pe perioada n care au fost ncheiate tim ct mai sunt valabile i dac aceste contracte au contractele pentru ca ne dorim s prin selec ia

fost sau nu onorate de c tre noi. Totodat in raport vedem numele clientului i putem vedea dac din gre eal aceea i proprietate a fost asignata unui alt angajat al firmei, lucru care ar duce la disput ntre colegi.

pg. 45

Figur Clien i Contracte

Cu acesta am terminat sec iunea care se ocup de utilizator i astfel vom selecta Inapoi i pe urm ie ire ca s ies din aplica ie. Pornind de la ceast structur am conceput structuri n plus i pentru manager, structuri a a cum men ionam anterior c le vom descrie imediat. Este important totodat de putere i deci el poate modifica i angaja ii firmei. tiut c managerul are mult mai mult

Rulare interfa

manager

Interfa a grafic pentru acesta este dup cum urmeaz , asta dup ce ne-am logat n prealabil cu utilizatorul Manager i parola florin:

Acesta este meniul cu iconul personalizat ca s se observe mai bine unde am intrat. n func ie de selec ia din meniu un Manager poate face urm toarele dup cum urmeaz ( a se ine cont c am p strat totodat aceea i interfa anterioar ): 1. Sucursale reprezentnd locurile unde actualul manager, cel logat nu managerul de pe alt firm a altei sucursale, este efectiv manager i are drept de modificare. Astfel dac un manager atribuie o anumit sucursal unui alt manager sau nu o mai gestioneaz el trebuie atunci s tearg acea nregistrare i organizare ca i la sec iunea

pg. 46

din sistem unde el apare ca manager. Totodat dac atribu iile lui ca manager cresc i mai devine manager i pe alt filial atunci el va fi nevoit s adauge o sucursal nou pe care s o poat administra i gestiona.
Figur Sucursale

i avem a a ca i cmpuri: Adresa Sucursal se va trece ora ul, sectorul, sau efectiv adresa unde se reg se te sucursala firmei noastre de imobiliare, apoi urmat de telefoanele de manager date de firm sau cele personale, manager care reprezint numele managerului, bonus dac a primit sau nu bonus. Ca butoane pe partea cealalt avem parte de : Sucursal nou care odat

ap sat elibereaz toate cmpurile n vederea introducerii de noi date, iar dac se d

pg. 47

click pe butonul Salveaz atunci sucursala respectiv va intra n baza de date i va fi vizibil i de ceilal i manageri. Avem desigur si nelipsitele butoane de Editeaz tergerea se face n func ie de o dat deja existent i terge numai c aceste butoane merg doar dac este selectat una din datele care apar mai in jos pentru c nou. 2. Am ajuns la sec iunea angaja ilor n care eu ca manager pot s vad oamenii care lucreaz cuno tin
Figur angaja i

i totodat nu

dorim s apar erori care apoi ne vor scoate din program fiind nevoi i s ne relog m din

sub conducerea mea sau egali cu mine, astfel nct s de oamenii i colegii cu care muncesc.

iau u or la

i astfel se observ c pot sa generez ( s creez ) un angajat nou prin ap sarea butonului nou, pot dac selectez un angajat din cei deja existen i ,prin click pe s geata din sec iunea de jos, pot sa-i fac modific ri angajat) prin ap sarea butonului terge. i apoi cu Editeaz s se modifice respectiva nregistrare i n baza noastr de date, apoi pot s terg ( odat selectat un

pg. 48

Se observ totodat ca avem la Superior s p streze id-ul efului care i este superior angajatului nostru , avem nc o dat sucursala la care angajatul nostru lucreaz , i desigur datele de contact ale acestuia : nume, adresa de domiciliu i postul ocupat. M-am gndit totodat s trec i salariul brut deoarece se tie c angaja i diferi i pot avea salarii diferite pe care se pot baza i totodat n multe sectoare de activitate salariul este si trebuie s fie confiden ial chiar i ntre angaja i. 3. Urm toarea sec iune se bazeaz pe anun uri deoarece este important ca firma s dea anun uri n ziarele locale astfel nct s se fac cunoscut fa de poten iali clien i si totodat ca sa se identifice ( prin textul mesajelor ) cu o

identitate comerciala. Important este c noi ca manageri putem s superviz m aceste anun uri mai ales c angaja ii no tri le aduc i totodat noi trebuie s le filtr m astfel nct textul s corespund standardelor i imaginii pe care ne dorim s o promov m.
Figur anun uri

pg. 49

Astfel pentru a publica un anun nou avem mai multe lucruri de f cut. Astfel mai nti ca i utilizatori va trebui s select m din partea dreapt proprietatea pentru care dorim s concepem un nou anun i astfel se va popula imaginea din dreapta cu de proprietatea imaginea propriet ii i la proprietate cu cost anun . Apoi la date de contact la Nume se va trece numele i telefonul de contact al agentului care se ocup respectiv astfel nct s avem o consistent n date. Dup ce am introdus ct ne-a cerut ziarul ca i pre pentru anun ( aici costul fiind in Ron) si mai avem data la care s-a publicat i astfel pl tind o taxa pentru o s pt mn publicat. Se pune desigur problema republic rii, dac n timp de o s pt mn proprietatea noastr nu s-a dat i astfel nc mai avem anun ul postat va trebui s -l republic m i putem face aceasta f cnd o selec ie pe anun si apoi pe ziarul i apari ia s-a i astfel , dac este necesar, s modific m data i pre ul la publicare si apoi cu editeaz s tergem salv rile. Dac n schimb nu mai ne dorim ca anun ul nostru sa fie publicat ntrun anumit ziar putem terge asta prin click pe anun si apoi tergere. Aten ie c se tergem proprietatea o putem terg anun urile i nu proprietatea i deci dac dorim s putem fi siguri c anun ul va fi

face direct din propriet i, a a cum s-a descris mai devreme n acest manual. 4. O sec iune particulara, la fel cum era rapoartele care suntem nevoi i s i la agentul imobiliar , o reprezint

le facem pentru a ne gestiona mai bine

activitatea. Astfel prin click pe Rapoarte din meniul descris se descrie un alt meniu care va avea structura data de mine format n felul urm tor:

i vom descrie mai n detaliu aceste sec iuni pentru c fiecare este centrat pe o anumit arie de interes care ne poate face s ne d m seama de orientarea firmei i totodat ne permite s gndim numeric strategia pe care dorim s o abord m pentru a reu i pe viitor i strategia n care ne dorim s avem ncredere. a) ncepem cu nceputul cu sec iunea de Cont Profit i pierdere astfel dac d m click pe aceast sec iune va ap rea n felul urm tor:

pg. 50

Figur contorizare Venituri, Profit i Pierdere Firm

i astfel se

tie c

profitul se ob ine din formula simpl suntem n pierdere

Profit = ncas ri ne

Cheltuieli i astfel dac suntem pe plus nseamn c firma ob ine profit, n schimb dac suntem pe minus va reprezenta c pe cre tere i s nu d m faliment. Astfel cnd vom acea click pe butonul Calculeaz Venituri ni se va Calcula i astfel va trebui s schimb m strategia i modalitatea de abordare astfel nct s ajungem cu profitul napoi

Totalul ,generat n Ron, n TextBox-ul care apare lng Labelul Venituri din chirii i astfel ce apare acum cu alb se va popula cu respectiva valoare. Iar jos n schem ne va ap rarea acele tranzac ii care au creat veniturile pentru noi. Pe cealalt parte avem cheltuielile care se fac i astfel, pentru a p stra unitatea, am creat pentru fiecare Label i un TextBox care s ne arate valoarea n Ron, ca sec iuni ( prin prisma a ceea ce am parcurs anterior din manual) vom avea: Cheltuieli generate de salarizarea n valoare bruta pentru c pn la valoarea net se pierde n procesul de salarizare, Cheltuielile cu publicitatea fiecare anun dat are un anumit pre

pg. 51

si astfel cu fiecare anun exist

riscul s

ne scad

profitul dac

nu avem succes,

Renumera ii proprietari se refer la ct trebuie s acord m i noi proprietarilor n urma procesului de intermediere, si avem cheltuieli la toate. i sec iunea Total cheltuieli care face lista de

A a se prezint cnd select m ambele sec iuni i apoi n josul paginii vedem realizat diferen a a a cum am spus, diferen care ne va ar ta dac ob inem profit sau nu. n cazul de fat se constata ca exista profit i mai trziu o s ar t m i formula . b) Terminnd cu profitul, n datele de teste se vede c am ntlnit situa ia ideal n care se dovede te c suntem pe profit, trecem mai departe pe sec iunea de angaja i dar departe de lucrurile cu care suntem obi nui i aici se vor calcula rapoarte care ne vor arata de fapt care angaja i merit s investim n ei i care nu. Totu i dorim s scoatem profit si nu altceva. Vom avea pe partea stng sec iunea care va determina care este cel mai bun angajat din firma noastr pe fiecare sucursal i totodat dac angajatul face parte din sucursala noastr i se va scrie numele i n sec iunea de jos la angaja i. Se observ c

pg. 52

angajatul cu cele mai mari realiz ri, n cazul datelor de intrare introduse aici nu se va reg si din filiala mea, lucru care m face s m ntreb cum pot face s fiu un manager mult mai bun.
Figur angajat cel mai bun

Deci se observ clar c Florin este angajatul lunii numai c jos fiind nepopulat nseamn c nu face parte dintre angaja ii mei care se g sesc n aceast filial . Apoi pe partea dreapt vom avea sec iunea cu ncas rile care se realizeaz la nivel de sucursal i care ne vor ajuta s determin m care este situa ia. Astfel avem dou CheckBox-uri astfel: Angajatii acestei sucursale care ne va ar ta ce c tiguri au angaja ii pe care eu i gestionez se va observa totodat c la aceast sucursal nu avem nici un angajat cu realiz ri (alegnd aceasta variant pentru a ne ar ta exact ce se ntmpl dac avem angaja i de la noi sau din alt parte), n schimb dac voi

pg. 53

introduce un angajat pe aceast filial prin introducerea unui angajat nou n maniera descris mai devreme voi ob ine i umplerea raportului aici; apoi avem to i angaja ii la FlorinImob care lucreaz pentru mine i care sunt n toate sucursalele. Dac facem selec ie a a ni se va popula zona care se reg se te n partea de jos a paginii si astfel n sec iunea productivitatea angaja ilor vom avea angajatul si profitul pe care acesta l-a adus pentru firma noastr .
Figur raport productivitate angaja i

i astfel ne putem face o idee despre activitatea firmei. c) Acum ne dorim totodat s inem o eviden a anun urilor pe care firma le are cu

diverse ziare locale sau a a cum se

tie modalitatea n care este prezentat.

Totodat ce este interesant la acest raport este c am stabilit sa-mi scoat data la care anun ul a fost dat spre publicare i totodat pentru a se afi a mai multe detalii.

pg. 54

Modul n care opereaz

pagina este oarecum circular. Astfel mai nti putem

selecta o dat de la care s ncepem s scoatem rapoartele, acest lucru este op ional pentru c dac dorim s vedem toate anun urile nregistrate pn atunci trebuie s le vedem, iar lng avem formatul n care putem face acest lucru. Pasul urm tor este s d m click pe Butonul generare raport astfel nct zona de jos cu propriet i num r de anun uri s se populeze, se observ totodat cte anun uri avem n total postate pentru respectiva proprietate adic ne va scoate n cte ziare se g se te de fapt n acest moment anun ul nostru. Dup ce am terminat cu asta dac ne dorim s vedem i care sunt ziarele unde se g se te anun ul nostru este suficient s select m proprietatea pe partea stng ca s se populeze partea dreapt care ne va ar ta n ce ziare mai exact este postat anun ul. Aceast gndire se folose te adeseori pentru a eviden ia detalierea stratificat i

leg tura ntre baza noastr de date i nregistr rile pe care le con ine sau le-ar putea con ine. Aici, cum se va vedea i n figura urm toare avem urm toarele, neselectnd nimic am ob inut singurul nostru anun care a fost i publicat n ziar. Astfel din prima parte afl m c anun ul cu num rul de identificare 4 care se g se te n Bac u a ap rut ntr-un ziar. Select m apoi nregistrarea i constat m c ziarul n care a fost postat se nume te favorit, ca o apari ie ne cost opt lei, vedem si data de introducere i totodat agentul care se ocup de acest anun
Figur Raport Anun uri

i al c rui nume de contact se g se te acolo.

pg. 55

d) Ultima sec iune este bazat pe un grafic care s ne arate profitul care s-a realizat lunar i astfel o s avem.
Grafic Venituri Lunare

Acest grafic care ne arat

am avut un venit mai mare pe la jum tatea lunii

Ianuarie 2011. Este necesar un grafic pentru a ar ta evolu ia, dar cum sunt pu ine nregistr ri programul ne va ar ta doar evolu ia profitului pe Ianuarie.

Codul din spatele afi rii


Am creat aceast sec iune pentru a specifica i modul n care vom realiza codul i modul n care a fost gndit n spatele sec iunii de program. Aceast sec iune este necesar pentru a men iona totodat de ce avem nevoie de anumite afi realizat anumite opera ii care au fost gndite. ri sau de ce este bine s facem ca lucrurile s ruleze n spate i totodat pentru a ar ta cum am

pg. 56

Figur Solu ie Explorer

Astfel se observ din aranjarea fi ierelor c avem un fi ier de resurse, unul de referin e , avem o iconi pentru aplica ie si totodat pe ce ne-am axat efectiv. Astfel n program am creat: Angajati.cs care se deschide atunci cnd ne log m cu user-ul de angajat florin i parola florin i este o fereastr care con ine mai multe formulare, ce sunt ilustrate i descrise n manual. Apoi am creat un fi ier numit Grafic.cs care s ne ajute s afi m evolu ia profitului reprezentnd graficul care apare atunci cnd ne log m ca manageri i d m click pe grafic , Login.cs s-a creat pentru a ilustra interfa a de logare, Manager.cs este de asemenea o aplica ie care con ine mai multe formulare ce sunt descrise ca afi are n manual i care este pagina de introducere atunci cnd ne

pg. 57

log m ca manager si mai avem desigur RapoarteAngajati.cs i RapoarteManager.cs care se refer a rapoartele care un manager sau pe care angaja ii le scot.

Login.cs
Pornim cu acest fi ier pe care l vom descrie ca necesare pe care le vom folosi, totodat odat ad uga apoi descrierea sa pentru c nu ar mai fi nevoie. 1. using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using Devart.Data; using Devart.Data.MySql; using System.Data; Se observ aici c am introdus componentele necesare pentru a putea ca programul s -mi recunoasc liniile de cod. Avem totodat ad ugat System.Drawing pentru desen, System.Collections pentru colec ii, Devart.Data.MySql pentru partea de MySql acestea fiind important de men ionat i diferite fa 2. public Login() { InitializeComponent(); conn.ConnectionString = "Driver={MySQL ODBC 3.51 de inputurile standard. i cod principal i maniere ce am descris un cod nu vom mai

Driver};Server=localhost;Database=imobiliar;User=root;Password=florin;Option=3;";} acest cod este necesar pentru a deschide baza noastr de date i de a face leg tura cu celelalte fi iere. Acum cnd am setat MySql-ul am avut grij s setez parola de la root ca florin astfel nct s -mi permit deschiderea unei leg turi cu baza de date. Se vede c avem setat pe localhost, ca avem o baza de date imobiliar cu parola florin i c se ncearc de trei ori logarea. Aici cnd cream baza de date MySql puteam da i alta parola la root dar am hot rt s p stram unitatea. 3. public string GetMD5Hash(string input) {

pg. 58

System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] bs = System.Text.Encoding.UTF8.GetBytes(input); bs = x.ComputeHash(bs); System.Text.StringBuilder s = new System.Text.StringBuilder(); foreach (byte b in bs) { s.Append(b.ToString("x2").ToLower()); } string password = s.ToString(); return password; } Codul acesta asigur parola florin ca criptarea parolei in MD5. Astfel atunci cnd s-a introdus i nu ca florin de aceea avem nevoie de o i utilizator n tabela utilizatori ea s-a introdus sub forma

3f294c847694e21764856124deb5e7d1

Criptografiere care s -mi transforme aceast codare n florin. Aici folosim acest cod ca i o func ie i astfel folosim o manier simpl de a scoate parola. 4. private void bRenunta_Click(object sender, System.EventArgs e) { Application.Exit(); } Aceast linie de cod s-a folosit pentru c dac utilizatorul nu dore te s se legheze dar dore te s renun e poate da click pe Renunta i apoi l scoate din aplica ie folosind func ia Exit. Totodat se vede c acest lucru este asociat eventului Click. 5. private void bLogin_Click(object sender, System.EventArgs e) { if((textBox1.Text == "") || (textBox2.Text == "")) { MessageBox.Show("Nu ati introdus un nume de utilizator si o parola!"); textBox1.Text = "";

pg. 59

textBox2.Text = ""; return; } Pe aceast Dac sec iune se verific dac s-au introdus cate n cele dou nu afi eaz casete. s-au introdus date atunci trece mai departe, dac DataSet ds = new DataSet(); conn1.Open(); string md5 = GetMD5Hash(textBox2.Text); Aici se descrie ceea ce am definit la punctele doi i trei. Astfel se deschide sec iunea nou creat i se utilizeaz func ia GetMD5Hash pentru a converti textul introdus ca parola ca i caractere. dsPopulate(ds, "USERI", "Select level, id_ang from useri where username = '" + textBox1.Text + "' AND parola = '" + md5 + "'"); Acum popul m recordul de date afi at mai sus cu selec ia din tabelul useri creat in SQL folosind comanda select i condi ia de verificare ca userul i parola s existe. Desigur dac nu exist avem mai jos implicarea s ne afi eze c numele i parola introduse sunt incorecte. if (ds.Tables["USERI"].Rows.Count == 0) { MessageBox.Show("Nume incorecte!"); textBox1.Text = ""; textBox2.Text = ""; return; } else { if (Convert.ToInt16(ds.Tables["USERI"].Rows[0].ItemArray.GetValue(0)) == 1) de utilizator sau parola MessageBox

conform set rilor stabilite de noi.

pg. 60

{ Angajati sf.conn = conn1; sf.Show(); this.Hide(); } else { if (Convert.ToInt16(ds.Tables["USERI"].Rows[0].ItemArray.GetValue(0)) == 2) { Manager mf = new Manager(Convert.ToInt32(ds.Tables["USERI"].Rows[0].ItemArray.GetValue(1))); mf.conn = conn1; mf.Show(); this.Hide(); }}}} Acum n func ie de tipul de acces se va face redirec ionarea utilizatorului, astfel se creeaz o intrare angaja i care dac corespunde num rul de acces, a a cum a fost introdus n tabela, INSERT INTO `useri` (`ID_USER`,`USERNAME`,`PAROLA`,`LEVEL`,`ID_ANG`) VALUES (1,'FLORIN','3f294c847694e21764856124deb5e7d1',1,1), (8,'MANAGER','3f294c847694e21764856124deb5e7d1',2,3);- deci de la useri vom prelua valoarea , o vom verifica i cum accesul este 2 la Manager atunci ne va deschide fereastra de acces pentru manageri, dac este unu atunci ne va introduce in fereastra pentru utilizatori. Totodat this.Hide(); are grij s ne ascund fereastra curent , cea de logare. 6. private { void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) sf = new Angajati(Convert.ToInt32(ds.Tables["USERI"].Rows[0].ItemArray.GetValue(1)));

pg. 61

if (e.KeyCode == Keys.Enter) { bLogin_Click(null,null); } i nu n ultimul rnd i aici se ncearc prinderea tastei enter, astfel nct atunci cnd utilizatorul ap s enter i nu pe butonul logare, s se trimit spre verificare datele introduse.

Angajati.cs
Cum prima dat am loga ca 1. { conn.Open(); dsPopulate(dsInfo, "Proprietati", "Select * from proprietati"); dsPopulate(dsInfo, "Clienti", "Select * from clienti where id_angajat=" + id_angajat); dsPopulate(dsInfo, "Owneri", "Select * from proprietari"); panClienti.Visible = false; panProprietati.Visible = false; panInchir.Visible = false; panVizionari.Visible = false; panOwneri.Visible = false; } Acum avem un nou eveniment care se ntmpl la Load la nc rcarea angaja ilor i astfel data creat nou se va popula cu propriet ile, cu clien ii angajatului care este logat pentru c este pus n MySql i condi ia i totodat cu proprietarii. Se observ c pentru orice avem nevoie totodat este nevoie de comenzi MySql care s trimit cerin a c tre baza noastr de date. i denumirile cu pan reprezint vizualiz rile, i la manual am vorbit despre ce anume s-ar ntmpla dac nede precedentul.

i angaja i acum vom vorbi la fel despre codul care este introdus n

Angajati.cs i ce anume este diferit fa

private void Staff_Load(object sender, System.EventArgs e)

pg. 62

panourile pentru diferite comenzi din meniu, care acuma nu sunt vizibile deoarece la nc rcare este bine s pornim de la 0. 2. private void bUploadPoza_Click(object sender, System.EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.RestoreDirectory = true; try { if (ofd.ShowDialog() == DialogResult.OK) { fisier_deschis = ofd.FileName; pictureBox1.Image = Image.FromFile(fisier_deschis); } } catch { fisier_deschis = ""; return; } } Aceast func ie este creat pentru a asigura la click c facem nc rcarea pozei. Astfel vom folosi un OpenFileDialog care va avea grij s deschid un fi ier si astfel dac se ncarc poza aceasta s se afi eze n pictureBox1 acest lucru ntmplndu-se prin schimbarea atributului Image. Se verific totodat dac fi ierul este deschis sau nu ca sa prindem eroarea prin folosirea lui catch i try. 3. private void mClienti_Click(object sender, System.EventArgs e) { panClienti.Visible = true; panProprietati.Visible = false; panInchir.Visible = false; panVizionari.Visible = false;

pg. 63

panOwneri.Visible = false; dgClienti.DataSource = dsInfo.Tables["Clienti"]; } Aceast structur de cod se folose te pentru a fi siguri c la click pe butonul clien i din meniu(mClienti) transform m panClienti vizualizarea pentru clien i n visible i totodat asigur m c n partea de jos, unde aveam tabela cu to i clien i no tri aceasta se deschide i preia datele care sunt nregistrate n tabelul Clien i. dgClienti. n principal aceea i structur o vom folosi i pentru celelalte p r i ale butoanelor i pentru accesul din meniu. 4. private void mImprumuturi_Click(object sender, System.EventArgs e) { panClienti.Visible = false; panProprietati.Visible = false; panInchir.Visible = true; panVizionari.Visible = false; panOwneri.Visible = false; for (int i = 0; i < dsInfo.Tables["Clienti"].Rows.Count; i++) { cbClienti.Items.Add(dsInfo.Tables["Clienti"].Rows[i].ItemArray.GetValue(1).ToString()); } for (int i = 0; i < dsInfo.Tables["Proprietati"].Rows.Count; i++) { cbProp.Items.Add(dsInfo.Tables["Proprietati"].Rows[i].ItemArray.GetValue(1).ToString() ); } } Aici a doua parte a codului este important afi eaz totodat pentru c aceast sec iune se i atunci cnd vorbim despre nchirieri i d m click pe respectiva sec iune din dac select m proprietatea ni se va popula dropdownlist-ul care apare la

meniu. Astfel ni se va popula comand butonul cu numele clien ilor din tabela 1

sec iunea nchirieri cu numele propriet ilor. Astfel vom putea selecta ce client dore te o anumit proprietate i astfel s ncheiem un contract nou.

pg. 64

5. private void dgClienti_Click(object sender, System.EventArgs e) { tbNumeClient.Text ng(); tbTelClient.Text ng(); tbChirieMax.Text ng(); tbStaff.Text ng(); string ng(); Aceste comenzi descrise un pic mai sus se folosesc pentru populare. Astfel dac ne g sim n panoul Clienti care poart numele de panClienti i d m click jos pe un client , atunci datele din tabel vor intra n obiectele create de noi la Client. Astfel proprietatea text a lui tbNumeClient va prelua valoarea din c su a unu a nregistr rii respective i astfel va prelua numele clientului, i tot a a acest lucru asigurnd o umplere rapid n vederea edit rii datelor. data = data.Substring(0, data.IndexOf(" ")); data = data.Substring(data.LastIndexOf("/") + 1) + "-" + data.Substring(0, data.IndexOf(".")) + "-" + data.Substring(data.IndexOf(".") + 1, data.LastIndexOf(".") data.IndexOf(".") - 1); tbDataIntr.Text = data; string ng(); tip_pref = dsInfo.Tables["Clienti"].Rows[dgClienti.CurrentRowIndex].ItemArray.GetValue(3).ToStri data = dsInfo.Tables["Clienti"].Rows[dgClienti.CurrentRowIndex].ItemArray.GetValue(6).ToStri = dsInfo.Tables["Clienti"].Rows[dgClienti.CurrentRowIndex].ItemArray.GetValue(5).ToStri = dsInfo.Tables["Clienti"].Rows[dgClienti.CurrentRowIndex].ItemArray.GetValue(4).ToStri = dsInfo.Tables["Clienti"].Rows[dgClienti.CurrentRowIndex].ItemArray.GetValue(2).ToStri = dsInfo.Tables["Clienti"].Rows[dgClienti.CurrentRowIndex].ItemArray.GetValue(1).ToStri

pg. 65

Debifat(); for (int i = 0; i < tip_pref.Length; i++) { switch (int.Parse(tip_pref[i].ToString())) { case 1: { cbGarsCL.Checked = true; break; } case 2: { cbAptCL.Checked = true; break; } case 3: { cbCasaCL.Checked = true; break; } case 4: { cbVilaCL.Checked = true; break; } Aici n aceast ultim parte am folosit cu case deoarece avem de a face cu CheckBox si trebuie s select m n fun ie de prefetin a clientului. Se tie c un ir de checkboxuri se parcurge de cele mai multe ori printr-un ciclu for. } } } 6. private void bLoadClient_Click(object sender, System.EventArgs e) { string strupdate = ""; strupdate = "Update Clienti set nume_client = '" + tbNumeClient.Text + "',tel_client= '" + tbTelClient.Text + "', max_chirie =" + tbChirieMax.Text + ", id_angajat = '" + tbStaff.Text + "'," + "data_introducerii = '" + tbDataIntr.Text + "', tip_preferat = '"; if (cbGarsCL.Checked) strupdate += "1"; if (cbAptCL.Checked) strupdate += "2"; if (cbCasaCL.Checked) strupdate += "3"; if (cbVilaCL.Checked) strupdate += "4"; strupdate += "' where id_client =" + dsInfo.Tables["Clienti"].Rows[dgClienti.CurrentRowIndex].ItemArray.GetValue(0); MySqlCommand cmd = new MySqlCommand(strupdate, conn); cmd.ExecuteNonQuery();

pg. 66

dsInfo.Tables["Clienti"].Clear(); dsPopulate(dsInfo, "Clienti", "Select * from clienti where id_angajat= " + id_angajat); dgClienti.DataSource = dsInfo.Tables["Clienti"]; } Aici se ruleaz comanda pentru a edita datele. Astfel dac am selectat un client i d m click pe editare se salveaz n aceea i nregistrare noile date. Astfel se observ c am folosit comanda Update de mysql i c apoi am folosit MySqlCommand(strupdate,con= pentru a fi siguri ca vom crea comanda noastr care va asigura actualizarea datelor. De-a lungul programului aceea i structur a comenzii se va folosi de fiecare dat pentru Editeaz . 7. private void bSaveClient_Click(object sender, System.EventArgs e) { string strinsert = ""; strinsert = "Insert into clienti(nume_client, tel_client, max_chirie, id_angajat, data_introducerii, tip_preferat) values('" + tbNumeClient.Text + "', '" + tbTelClient.Text + "', " + tbChirieMax.Text + ", " + id_angajat + ", '" + tbDataIntr.Text + "', '"; if (cbGarsCL.Checked) strinsert += "1"; if (cbAptCL.Checked) strinsert += "2"; if (cbCasaCL.Checked) strinsert += "3"; if (cbVilaCL.Checked) strinsert += "4"; strinsert += "')"; MySqlCommand cmd = new MySqlCommand(strinsert, conn); cmd.ExecuteNonQuery(); dsInfo.Tables["Clienti"].Clear(); dsPopulate(dsInfo, "Clienti", "Select * from clienti where id_angajat= " + id_angajat); dgClienti.DataSource = dsInfo.Tables["Clienti"]; }

pg. 67

Structura este similar

cu cea anterioar

numai c

de data asta se folose te o

comanda de MySql insert care va asigura introducerea datelor. Aceea i structur tergere.

vom folosi i pe parcurs cnd va veni vorba de inserarea altor date i totodat pentru

Interesant aici c n principal i ct timp nu vorbim de rapoarte aici la Angajati.cs ne vom ocupa n special de vizualizarea datelor i introducerea, editarea, acestora pe cnd prelucrare efectiv importante de prelucrare ntmplndu-se la rapoarte. tergerea se face la un nivel mai mic, lucrurile mai

Manager.cs
Acum vom vorbi despre Manager.cs sco nd la iveal codul care este diferit. Desigur avem i lucruri care se ntmpl la fel n cod i nu le vom mai descrie. 1. public void dsPopulate(DataSet ds, string tblname, string strSQL) { try { MySqlDataAdapter cmd = new MySqlDataAdapter(strSQL, conn); cmd.Fill(ds, tblname); } catch ( Exception xcp ) { MessageBox.Show(this, "Eroare: " + xcp.Message + "!"); } } Deci mai { conn.Open(); panSuc.Visible = false; sus avem codul private void Manager_Load(object sender, System.EventArgs e)

pg. 68

panAng.Visible = false; panAnu.Visible = false; dsPopulate(dsInfo, "Sucursale", "Select * from sucursale"); dsPopulate(dsInfo, "Angajati", "Select * from angajati"); dsPopulate(dsInfo, "Anunturi", "Select * from anunturi"); dsPopulate(dsInfo, "Proprietati", "Select * from proprietati"); } s o avem. 2. private void dgAnu_Click(object sender, System.EventArgs e) { tbNumeZ.Text ng(); tbTelZ.Text ng(); tbNumeCon.Text ng(); tbProp.Text ng(); string ng(); data = data.Substring(0, data.IndexOf(" ")); data data.Substring(0, = data.Substring(data.LastIndexOf(".")+1) + "-" + + "-" + data.IndexOf(".")) data.Substring(data.IndexOf(".")+1, data = dsInfo.Tables["Anunturi"].Rows[dgAnu.CurrentRowIndex].ItemArray.GetValue(5).ToStri = dsInfo.Tables["Anunturi"].Rows[dgAnu.CurrentRowIndex].ItemArray.GetValue(4).ToStri = dsInfo.Tables["Anunturi"].Rows[dgAnu.CurrentRowIndex].ItemArray.GetValue(3).ToStri = dsInfo.Tables["Anunturi"].Rows[dgAnu.CurrentRowIndex].ItemArray.GetValue(2).ToStri = dsInfo.Tables["Anunturi"].Rows[dgAnu.CurrentRowIndex].ItemArray.GetValue(1).ToStri i dac acest cod d eroare atunci trebuie s facem n a a fel ca eroarea s ne fie afi at i folosim catch sau try ca s ne arate eroarea care am putea

data.LastIndexOf(".") - data.IndexOf(".")-1); tbDataP.Text = data;

pg. 69

tbCost.Text ng(); }

dsInfo.Tables["Anunturi"].Rows[dgAnu.CurrentRowIndex].ItemArray.GetValue(6).ToStri

n Manager.cs am folosit n principal structuri ca n Angajati.cs pentru a ar ta tipurile de date. Aici n cazul de fa pentru comanda de acces la anun uri facem ca atunci cnd d m click n dreptul unui anun acesta s fie afi at i astfel s avem i noi acces la el. Se observ cum schimb m sau jongl m n principal cu proprietatea text a unui element.

RapoarteAngajati.cs
Cum lucrurile mai importante se ntmpl pe parcurs acum vom discuta despre cele dou fi iere care am ales s se ocupe de rapoartele noastre. Astfel vom avea pentru nceput descrierea pentru RapoarteAngajati.cs cu codurile diferite astfel: private void bRapCC_Click(object sender, System.EventArgs e) { DataSet ds = new DataSet(); string strsel = ""; if ( cbVal.Checked) { try { if ( tbValabil.Text.Length != 10) { throw new Exception(); } if ((tbValabil.Text[4]!='-')||(tbValabil.Text[7])!='-') { throw new Exception(); } if ( int.Parse(tbValabil.Text.Substring(0,4))<2000) { throw new Exception(); } if ( int.Parse(tbValabil.Text.Substring(5,2))>12) { throw new Exception(); } if ( int.Parse(tbValabil.Text.Substring(8,2))>31)

pg. 70

{ } catch { }

throw new Exception();

} strsel = "Select nume_client, tel_client, id_contract, data_start, durata, avans, adresa_prop, nume_angajat"+ " from clienti c, contracte ct, proprietati p, angajati a where c.id_client = ct.id_client "+ " and c.id_angajat = a.id_angajat and ct.id_proprietate = p.id_prop and (ct.data_start + INTERVAL "+ " ct.durata MONTH >'" + tbValabil.Text + "')"; } else {

MessageBox.Show("Formatul datei este incorect!"); return;

strsel = "Select nume_client, tel_client, id_contract, data_start, durata, avans, adresa_prop, nume_angajat"+ " from clienti c, contracte ct, proprietati p, angajati a where c.id_client = ct.id_client "+ " and c.id_angajat = a.id_angajat and ct.id_proprietate = p.id_prop"; } dsPopulate(ds,"CC", strsel); dgCC.DataSource = ds.Tables["CC"]; } Acesta este codul care se execut atunci cnd vine vorba despre clien i i despre contractele ncheiate, astfel se verific corect de la tastatur i dac mai nti dac se introduce sau nu o dat fie optimizat . i aici ca i n se introduce atunci se face selec ia astfel nct s

popul m data grid-ul cu datele corecte i c utarea s celelalte p r i sunt comenzi MySql .

Selec ia i rapoartele de aici se bazeaz foarte mult pe comenzi MySql i de aceea nu voi mai interveni s le mai descriu pentru c declara iile i c ut rile sunt date anterior. Se populeaz baza de date i apoi cnd se solicit raportul acesta este oferit. Acuma cnd vine vorba de fi ierul RapoarteManager.cs am folosit mai mult calcule care s descris ar fi: ne arate exact ct am consuma cu firma noastr de imobiliare. Cod

pg. 71

1. private void bCalcVen_Click(object sender, System.EventArgs e) { string str = ""; str = "Select id_contract,nume_client,avans, durata durata_luni, data_start , chirie from "+ " contracte c, clienti cl, proprietati p where c.id_client=cl.id_client and c.id_proprietate="+ "p.id_prop"; dsPopulate(dsRap, "Venituri",str); dgVenituri.DataSource = dsRap.Tables["Venituri"]; double total=0; Aici vom face apelarea pentru scoaterea datelor care se vor ocupa de calculul veniturilor i un pic mai jos vom avea desigur atribuirea acestor date unor elemente grafice care s le fac vizibile i pentru utilizatorul final. Astfel codul este dat n felul urm tor: for(int i=0;i<dsRap.Tables["Venituri"].Rows.Count;i++) { int double double DateTime durata chirie avans data_start = = = = int.Parse(dsRap.Tables["Venituri"].Rows[i].ItemArray.GetValue(3).ToString()); double.Parse(dsRap.Tables["Venituri"].Rows[i].ItemArray.GetValue(5).ToString()); double.Parse(dsRap.Tables["Venituri"].Rows[i].ItemArray.GetValue(2).ToString()); Convert.ToDateTime(dsRap.Tables["Venituri"].Rows[i].ItemArray.GetValue(4)); int durata_ef = DateTime.Now.Month - data_start.Month; if (durata_ef < durata) { total += Max(avans, chirie * durata_ef); }

pg. 72

else { total += chirie * durata; } } Aici folosim calcul algebric care ne va permite s calcul m exact suma n bani care ne va fi util . Astfel se va face totalul cu avansul, dac clientul ne d un avans, sau se va face chiria pl tit ori durata n luni. total = total * 6; tbVen.Text = total.ToString(); Aici pentru afi are vom face conversia totalului din numeric n string pentru a putea afi a datele n cmpul nostru. } Acum vom ncepe cu calculul Cheltuielilor care implic firma i astfel vom prelua date din: private void bCalcCh_Click(object sender, System.EventArgs e) { string str1 = ""; str1 = "Select nume_angajat, salariu_angajat from angajati"; DataSet ds = new DataSet(); dsPopulate(ds,"Salarii",str1); dgSal.DataSource = ds.Tables["Salarii"]; double salarii = 0; for(int i=0;i<ds.Tables["Salarii"].Rows.Count;i++) { salarii double.Parse(ds.Tables["Salarii"].Rows[i].ItemArray.GetValue(1).ToString()); } Aici vom prelua cheltuielile care se efectueaz cu salariile angaja ilor. tbChSal.Text = salarii.ToString(); string str2 = ""; +=

pg. 73

str2 = "Select id_anunt,cost_anunt from anunturi"; dsPopulate(ds,"Pub",str2); dgPub.DataSource = ds.Tables["Pub"]; double pub = 0; for(int i=0;i<ds.Tables["Pub"].Rows.Count;i++) { pub double.Parse(ds.Tables["Pub"].Rows[i].ItemArray.GetValue(1).ToString()); } tbChPub.Text = pub.ToString(); Aici vom prelua cheltuielile care vin din anun uri string str3 = ""; str3 = "Select avans, durata , chirie from contracte c, proprietati p where c.id_proprietate=p.id_prop"; dsPopulate(ds,"Rem",str3); double rem = 0; for(int i=0;i<ds.Tables["Rem"].Rows.Count;i++) { int double double double rap = avans/chirie rem double.Parse(ds.Tables["Rem"].Rows[i].ItemArray.GetValue(0).ToString()); rem double.Parse(ds.Tables["Rem"].Rows[i].ItemArray.GetValue(2).ToString()) *durata; } tbChProp.Text = (rem * 0.4).ToString(); += += durata chirie avans = = = int.Parse(ds.Tables["Rem"].Rows[i].ItemArray.GetValue(1).ToString()); double.Parse(ds.Tables["Rem"].Rows[i].ItemArray.GetValue(2).ToString()); double.Parse(ds.Tables["Rem"].Rows[i].ItemArray.GetValue(0).ToString()); +=

pg. 74

int x int.Parse(tbChProp.Text);

= int.Parse(tbChSal.Text) + int.Parse(tbChPub.Text) +

tbTotalCh.Text = x.ToString(); if ((tbVen.Text!="")&&(tbTotalCh.Text!="")) { int y = int.Parse(tbVen.Text) - int.Parse(tbTotalCh.Text); tbProfit.Text = y.ToString(); } n ultima sec iune vom avea calcului cheltuielilor provenite i din chirii i la final vom avea grij s calcul m profitul care va fi atribuit la profit atunci cnd situa ia o va cere. Dintre toate acest lucru mi s-a p rut cel mai greu de calculat deoarece au fost multe variabile i aribuiri implicate pe care a trebuit s le folosesc.

Grafic.cs
Voi descrie mai jos un cod care va folosi variabilele x i y care au fost create pentru a afi a venitul pe o anumit lun . private void CreateGraph( ZedGraphControl zgc ) { GraphPane myPane = zgc.GraphPane;

// Set the titles and axis labels myPane.Title.Text = "Graficul veniturilor lunare"; myPane.XAxis.Title.Text = "Luna"; myPane.XAxis.Type = AxisType.Date; myPane.YAxis.Title.Text = "Venit"; PointPairList list = new PointPairList(); for ( int i = 0; i < length; i++ )

pg. 75

{ XDate x = new XDate(timpi[i]); double y = date[i]; list.Add( x, y ); } LineItem myCurve = myPane.AddCurve( "", list, Color.Red, SymbolType.None ); myCurve.Symbol.Fill = new Fill( Color.Blue ); myPane.Fill = new Fill( Color.White, Color.FromArgb( 220, 220, 255 ), 45F );

zgc.AxisChange(); }

pg. 76

Bibliografie
1. Connolly, Th., Begg, C., Strachan, A., Baze de date, Ed. Teora, Bucure ti, 2001. 2. Moraru, S., Perniu, L., Malo, P, http://vlab.unitbv.ro/velab/ - Aplica ii ale bazelor de date orientate web, 2005

3. Smeureanu, I., Drdal , M., Reveiu, A., Visual C#.NET, Editura CISON, Bucure ti, 2004 4. Damien, Foggon- Beginning ASP.NET 2.0 Databases: From Novice to Professional, Editura Apress, 2006 5. Matthew, MacDonald i Mario, Szpuszta- Pro ASP.NET 2.0 in C# 2005, Editura Apress, 2005 6. Damon, Armstrong- Pro ASP.NET 2.0 Website Programming, Editura Apress, 2005 7. Mesbah, Ahmed, Chris, Garrett, Jeremy, Faircloth, Chris, Payne- ASP.NET WEB developers guide, Editura Syngress, 2002 8. Nitin, Pandey- Microsoft ASP .NET Fast & Easy Web Development, Editura Premier Press, 2002 9. John Paul, Mueller-Web Development with Microsoft Visual Studio 2005, Editura Wiley, 2005
10. http://www.mysql.com/ - documenta ie traducere, help i implementare. 11. http://thor.info.uaic.ro/~busaco/teach/courses/net/docs/mysql-ro.pdf 12. http://www.itim-cj.ro/~jalobean/Cursuri/www.my-sql.go.ro/

pg. 77

S-ar putea să vă placă și