CATEGORII DOCUMENTE |
Sisteme informatice. Proiectarea unei aplicatii vizuale
Un sistem informatic reprezinta un model fizic de simulare a comportamentului unei parti din lumea reala sau conceptuala. Acest model fizic este definit prin intermediul unui limbaj de programare si se concretizeaza intr-o aplicatie ce poate fi rulata pe un sistem de calcul.
Etapele parcurse in dezvoltarea unei aplicatii pot fi:
Culegerea de specificatii (analiza functionala), ce presupune definirea problemei, specificarea detaliata a functionalitatilor ce trebuie sa fie suportate de catre sistemul informatic
Analiza in cadrul careia se realizeaza identificarea caracteristicilor tuturor solutiilor corecte posibile
Proiectarea aplicatiei, care adauga modelelor de analiza noi elemente ce definesc o solutie particulara, optimizata
Implementarea aplicatiei, in care se realizeaza un proiect executabil al solutiei modelate in faza de proiectare
Testarea aplicatiei, in care se verifica echivalenta implementarii cu modelul proiectat si valideaza faptul ca implementarea respecta criteriile de corectitudine identificate in etapa de analiza.
Realizarea unui sistem informatic complex presupune utilizarea:
notiunilor de programare orientata pe obiecte pentru crearea interfetei aplicatiei
limbajului SQL pentru interogarea bazei de date.
Programare orientata pe obiecte in Visual FoxPro
Clasele Visual FoxPro sunt de doua tipuri:
clase de baza: clase de tip control si clase de tip container
clase definite de utilizator.
Exemple de clase de baza Visual FoxPro sunt prezentate in tabelul 1:
ActiveDoc |
CommandButton |
Label |
TextBox |
CheckBox | Combo-Box |
ListBox |
Image |
Form |
Container |
OLEBoundControl |
PageFrame |
Grid |
Control |
OLEContainerControl |
Shape |
Tabel 1
Orice clasa de baza are asociate evenimente si proprietati. Exemple de evenimente comune claselor de baza Visual FoxPro sunt prezentate in tabelul 2:
Eveniment |
Descriere |
Init |
Apare la crearea obiectului |
Destroy |
Apare la distrugerea obiectului |
Error |
Apare la generarea unei erori |
Tabel 2
Exemple de proprietati comune claselor de baza Visual FoxPro sunt: Class (clasa care contine obiectul), BaseClass (clasa de baza, daca clasa curenta este derivata), ParentClass (clasa parinte, daca clasa curenta este derivata).
Crearea claselor definite de utilizator se poate realiza:
o in mod vizual utilizand instrumentul Class Designer, sau
o in mod programatic.
Crearea claselor utilizand instrumentul Class Designer
Metoda 1: din meniul File, optiunile New, Class, New Class, unde se specifica: numele clasei, clasa de baza si directorul unde se creeaza noua clasa.
Metoda 2: din fereastra de comenzi utilizand comanda:
CREATE CLASS nume_clasa | ?
[OF Nume1 | ?] [AS clasa_baza [FROM Nume2]] [NOWAIT]
Argumentele comenzii sunt:
? - afiseaza fereastra de dialog New Class; OF Nume1 - numele bibliotecii de clase vizuale ce se vor crea. Extensia fisierului este .vcx
AS clasa_baza - clasa de baza a noii clase; poate fi orice clasa definita de utilizator sau o clasa de baza cu exceptia urmatoarelor clase Column, Cursor, DataEnvironment, Header, Page si Relation. Daca se omite clauza AS, se considera clasa de baza FormSet.
FROM Nume2 - numele bibliotecii ce contine clasa de baza definita de utilizator; NOWAIT - continua executia programului, dupa ce a fost deschis Class Designer.
Exemplu: Sa se creeze o clasa pentru crearea unui buton de iesire dintr-un formular Visual FoxPro.
Crearea clasei buton1, folosind comanda CREATE CLASS (figura 1) - se stabilesc numele clasei (buton1), clasa de baza (CommandButton) si directorul unde se creeaza):
Fereastra Class Designer (figura 2) furnizeaza interfata pentru vizualizarea si editarea proprietatilor clasei create. Fereastra Properties contine lista de proprietati, evenimente si metode pentru obiectul selectat (ce poate fi un formular, control, cursor, relatie sau mediul de lucru salvat)
In fereastra Properties se opereaza urmatoarele modificari: Caption (E<xit) si procedura evenimentului Click (thisform.release) - figura 3:
Apelarea clasei se poate realiza astfel: se adauga la bara de instrumente Form Controls clasa creata anterior, din biblioteca Aplicatie.vcx (figura 4):
se traseaza pe formularul Form1 un control din clasa buton1; se stabilesc proprietatile controlului; se lanseaza in executie formularul Form1 si se verifica daca la efectuarea unui click pe butonul Exit, se inchide formularul (figura 5):
Proiectarea unei aplicatii vizuale
Fie baza de date FIRMA cu tabelele DEPART (departamente), ANG (angajati), SALGRD (grade salarizare). Sa se realizeze o aplicatie de gestiune a angajatilor din baza de date FIRMA, care sa foloseasca biblioteci de clase vizuale.
Etapele realizarii aplicatiei sunt:
Crearea proiectului si conectarea la baza de date - din meniul File, se aleg optiunile: New, Project. In fereastra Project Manager se expandeaza nodul Data à butonul Add pentru adaugarea bazei de date (figura 6):
Crearea formularului principal: din sectiunea Documents se selecteaza Forms à New à New Form.
Adaugarea paginilor pentru operatiile de baza: afisare, inserare date, cautare si stergere: afisarea barei de instrumente Form Controls: meniul View à Form Controls Toolbar à Form Controls (figura 7):
se traseaza pe formularul Form1 un control din clasa buton1 (creata la paragraful anterior), pentru iesirea din aplicatie, un control Page Frame (PageFrame1) cu proprietatile: Layout à Page Count (numarul de pagini) - 4; Pentru modificarea fiecarei pagini: selectare PageFrame1, click dreapta à Edit; Pagina 1: Caption - Afisare; pagina 2: Caption - Inserare date; pagina 3 - Cautare; pagina 4 -Stergere.
Pagina Afisare contine un control Grid (figura 8), care stabileste legatura cu baza de date - in sectiunea Data: Record Source Type - Alias; Record Source - angajati (vedere bazata pe o jonctiune interna a tabelelor ANG si DEPART).
Observatii:
q Metoda Refresh a obiectului Form1 (Form1.Refresh) este:
create view angajati;
as select nume,functie, salariu, numedepart as Departament,;
loc as Localitate from ang inner join depart;
on ang.nrdepart=depart.nrdepart && jonctiune interna
use angajati
q Metoda Load a obiectului Form1 (Form1.Load) este:
close databases
open database firma exclusive
thisform.refresh
Dupa compilarea aplicatiei in acest stadiu, se obtine formularul din figura 9:
Pagina Inserare date: butonul ,Adaugare angajat' - pentru inserarea unui angajat in tabelul ANG; etichetele Nume, Functie, Data nasterii, Nr departament, Salariu; obiectele TextBox: nume, functie, datan, nrdepart, salariu (figura 10):
Metoda ClickEvent asociata obiectului buton ,Adaugare angajat' contine:
dimension a(1,1)
a(1,1) = 0
select max(codang) from ang into array a
v_codang = a(1,1) +1
&& se determina urmatorul cod angajat disponibil
v_nume = proper(alltrim(thisform.PageFrame1.Page2.nume.text))
v_functie = upper(alltrim(thisform.PageFrame1.Page2.functie.text))
v_datan = ctod(thisform.PageFrame1.Page2.datan.text)
v_nrdepart = val(thisform.PageFrame1.Page2.nrdepart.text)
v_salariu = val(thisform.PageFrame1.Page2.salariu.text)
select depart
&& se verifica respectarea restrictiei referentiale la inserare
locate for v_nrdepart =nrdepart
if found() && daca exista departamentul v_nrdepart in tabelul parinte && DEPART se poate insera angajatul in tabelul copil ANG
if v_functie = 'VANZATOR'
v_comision = 200 && pentru vanzatori, se ofera un comision fix
else
v_comision = NULL
endif
insert into ang (nume, functie, codang, datan, nrdepart,;
salariu,comision);
values (v_nume, v_functie,v_codang , v_datan, v_nrdepart,;
v_salariu, v_comision)
&& se sterg datele din TextBox
thisform.PageFrame1.Page2.nume.value =' '
thisform.PageFrame1.Page2.functie.value = ' '
thisform.PageFrame1.Page2.datan.value = ' '
thisform.PageFrame1.Page2.nrdepart.value = ' '
thisform.PageFrame1.Page2.salariu.value = ' '
&& se actualizeaza vederea angajati obtinuta dintr-o interogare
requery('angajati')
else
&& nu se respecta restrictia referentiala la inserare
messageBox('Nu exista acest departament in firma')
&& se sterg datele din TextBox si inserarea angajatului nu are loc
thisform.PageFrame1.Page2.nume.value =' '
thisform.PageFrame1.Page2.functie.value = ' '
thisform.PageFrame1.Page2.datan.value = ' '
thisform.PageFrame1.Page2.nrdepart.value = ' '
thisform.PageFrame1.Page2.salariu.value = ' '
endif
Observatii:
q Inserarea unui angajat folosind pagina ,Inserare date' se reflecta in pagina ,Afisare', datorita instructiunii: requery('angajati') care creeaza din nou vederea ,angajati' folosind interogarea din Form1.Refresh.
q Codul angajatilor inserati in tabel se genereaza in ordine crescatoare folosind tabloul A, care memoreaza maximul din coloana ,codang' a tabelului ,ang'.
Pagina Cautare (figura 11) contine: butonul ,Cauta' - pentru cautarea unui angajat in tabelul ,ANG.DBF' dupa cod; etichetele Mesaj1 (Caption - Dati codul angajatului) si Mesaj2 (Caption -None); 1 obiect TextBox (cod) pentru citirea codului angajatului; 1 obiect Grid, pentru afisarea informatiilor despre angajat, daca exista (RecordSource Type - Alias; Visible -False); in sectiunea Layout: FontBold - True.
Metoda Click Event a obiectului buton este:
x= val(alltrim(thisform.PageFrame1.Page3.Cod.text))
select ang
locate for codang = x
if found()
create view angajat_gasit;
as select nume,codang as Cod_angajat,functie, salariu,;
numedepart as Departament,loc as Localitate from ang inner join;
depart on ang.nrdepart=depart.nrdepart where codang = x
use angajat_gasit
requery('angajat_gasit')
thisform.PageFrame1.Page3.Grid1.Visible = .T.
thisform.PageFrame1.Page3.Grid1.RecordSource='angajat_gasit'
thisform.PageFrame1.Page3.Mesaj2.Caption = 'Angajatul este:'
else
thisform.PageFrame1.Page3.Mesaj2.Caption = ;
'Nu exista acest angajat in baza de date'
thisform.PageFrame1.Page3.Grid1.Visible = .F.
thisform.PageFrame1.Page3.Cod.value = ' '
endif
Dupa compilarea aplicatiei in acest stadiu, se obtine formularul din figura 12:
Pagina Stergere contine: butonul ,Sterge' - care permite cautarea unui angajat in tabelul ,ANG.DBF' dupa cod si stergerea lui; etichetele Mesaj1 (Caption - Dati codul angajatului) si Mesaj2 (Caption -None); 1 obiect TextBox (cod) pentru citirea codului angajatului; in sectiunea Layout: FontBold - True (figura 13):
Metoda Click Event a obiectului buton este:
x= val(alltrim(thisform.PageFrame1.Page4.Cod.text))
select ang
locate for codang = x
if found()
y=alltrim(nume)
thisform.PageFrame1.Page4.Mesaj2.Caption =;
'Angajatul '+y+' va fi sters'
delete from ang where codang = x
pack
requery('angajati')
else
thisform.PageFrame1.Page4.Mesaj2.Caption = ;
'Nu exista acest angajat in baza de date'
thisform.PageFrame1.Page4.Cod.value = ' '
endif
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2204
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved