Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Baze de date


Qdidactic » stiinta & tehnica » informatica » baze de date
UTILIZARE PROCEDURI SI FUNCTII -are aplicatie simpla de Baza de Date universitara



UTILIZARE PROCEDURI SI FUNCTII -are aplicatie simpla de Baza de Date universitara



1.PROCEDURI SI FUNCTII UTILIZATOR


Pentru a realiza o programare modulara , programe inteligibile, usor de depanat si dezvoltat, se recomanda scrierea unui program principal din care se cheama proceduri. Fiecare procedura va realiza functii bine determinate si va avea parametrii proprii de intrare si iesire.

In proceduri se utilizeaza parametrii formali specificati prin comanda PARAMETER, variabile locale, nume de campuri din orice zona (utilizand prefixarea), variabile globale.

Variabilele globale se declara in sectiunile unde se folosesc prin:

PUBLIC lista _var


Variabilele locale (PRIVATE) se pot utiliza numai in proce­dura unde sunt definite, sunt alocate in stiva si dispar dupa executia procedurii. Se pot realiza copii private ale unor varia­bile publice prin:

PRIVATE lista_var ALL [LIKE/EXCEPT generic]


Parametrii formali ai unei proceduri sau functii se dau prin:



PARAMETER lista_var_formale


O procedura are structura:


PROCEDURE nume_proced

PARAMETER lista_var_formale

PUBLIC    lista_var_globale

PRIVATE lista_var_locale

- secventa comenzi definite procedura


- secventa de comenzi.RETURN - sfarsit de procedura


Sfarsitul de procedura se marcheaza prin inceputul altei proce­duri sau functii.

O procedura se cheama prin:


DO nume_proced WITH lista_param


Parametrii de apel trebuie sa fie de acelasi tip cu cei formali din definitie.

Variabilele publice nu se pot sterge cu RELEASE lista_var ci numai cu CLEAR ALL

Functia poate avea mai multi parametrii de intrare dar numai o valoare transmisa la iesire prin numele functiei.

Structura unei functii este asemanatoare cu a procedurii, dar valoarea de iesire se transmite in argumentul comenzii RETURN:

FUNCTION nume_functie

PARAMETER lista_var_formale

PUBLIC    lista_var_globale

- secventa comenzi definitie functie


secventa de comenziRETURN (exp) - iesire cu transmitere valoare calculata.


O functie poate fi utilizata in expresii cu operanzi de acelasi tip cu ea.

Tipul functiei e dat de tipul expresie din RETURN.

Utilizarea procedurilor permite refolosirea unor secvente de program.

Procedurile pot apela proceduri dar nu recursiv.

Procedurile se pot scrie in program la sfarsit sau se pot grupa intr-un fisier de proceduri ce se va declara prin:

SET PROCEDURE TO fis_proc [ADDITIV]

SET LIBRARY TO

Pentru a deschide mai multe fisiere pentru proceduri se va specifica clauza ADDITIV, altfel se va lua numai ultima specificatie SET PROCEDURE

. Inchiderea unui fisier de proceduri se face prin:

SET PROCEDURE TO sau

CLOSE PROCEDURE

Atentie! Comanda CLEAR ALL sterge toate setarile si toate variabilele din memorie si selecteaza prima zona de lucru.


2. Proiectare aplicatie simpla de Baza de Date universitara


La proiectarea unei aplicatii se recomanda urmatoarele faze:

- Analiza aplicatiei si alegerea fisierelor utilizate

- Stabilirea structurii fisierelor componente ale BD si a legaturilor dintre ele (campuri, fisiere index, relatii). Pentru fiecare fisier se va stabili un camp cheie care sa identifice univoc fiecare inregistrare.

- Stabilirea functiilor care trebuie realizate (cerute de beneficiar)

- Stabilirea procedurilor ce realizeaza fiecare functie si a algoritmilor folositi

- Stabilirea meniurilor de selectie a functiilor si ierarhia meniurilor;

- Stabilirea ierarhiei de chemare a procedurilor pentru fiecare functie

- Scrierea programului principal care cuprinde meniul principal si secventa de selectie.

- Scrierea si testarea fiecarei proceduri si a programului in ansamblu.


Se considera o Baza de date pentru evidenta universitara care contine informatii despre studenti, cursuri si profesori care sunt entitati bine definite.

Structura BD se proiecteaza urmarind eliminarea redundantei informatiilor.

Se vor alege fisierele componente in care informatiile nu trebuie sa se repete si spatiul liber trebuie eliminat. Suntem tentati sa cream un fisier de cursuri, care sa contina numele profesorului si gradul sau. Numele se regaseste si in fisierul de profesori unde se gasesc toate datele personale (CodP, data nasterii, salar, locul nasterii, adresa, telefon acasa, telefon la servici, mobil,..). Atunci in fisierul de cursuri vom introduce numai codul profesorului (CodP). Se elimina astfel si repetare numelui daca un profesor este titular la mai multe cursuri.

In fisierul de studenti vom introduce datele personale ale studentului (CodS, nume, adresa, data nasterii, telefon, bursa,..). Pentru fiecare student trebuie introduse sirul notelor si cursul la care au fost obtinute.

Pentru a simplifica lucrurile vom introduce entitatea note, ca o entitate de legatura intre studenti si cursuri, care va contine CodS, CodC, Nota, Data. CodS si CodC sunt referinte care definesc o legatura intre fisierul STUD si CURS, iar ultimele 2 campuri sunt informatii cantitative ce caracterizeaza legatura. Structura BD fara redundante va fi cea de mai jos:



STUD

CodS

Nume

Adresa

DataN

Bursa

Telefon

CNP



NOTE

CodS

CodC

NOTA

Data

CURS

CodC


Titlu

CodP

PROF

CodP

Nume

ADRESA

DataN

Salar

Telefon

CNP



Campuri cheie sunt CodS in fisierul STUD, CodC in CURS, CodP in PROF si pentru ele se pot crea fisiere index pentru cautare in acces direct si parcurgere ordonata. Se pot crea fisiere index si pentru campul Nume in fisierele STUD si Titlu in CURS dar ele nu sunt chei pentru fisier. Cheie ar putea fi campul CNP (Cod Numeric Personal) din STUD si PROF, dar ele nu sunt functionale pentru aceasta aplicatie.

In fisierul NOTE cheia este formata din concatenarea campurilor CodS+CodC care identifica univoc o nota. Totusi se va crea cate un fisier index ICodSN si ICodCN pentru campurile Cods si CodC. Indexul IcodSN va servi la identificarea notelor unui student, iar indexul ICodCN la determinarea tuturor notelor la un Curs dat. ( Nu se permit 2 fisiere index cu acelasi nume).


Vom prezenta in continuare un program care face gestiunea fisierului de studenti utilizand proceduri si realizeaza urmatoarele functii:

- crearea structurii fisierelor BD utilizand o structura de referinta

- adaugare inregistrari - singulare (fisierele index deschise)

- masive cu reindexare la sfarsit

- afisarea unor inregistrari selectate in acces direct dupa nume student

- modificarea datelor unor studenti selectati prin nume

- stergerea unor studenti din BD


Ultimele trei proceduri cuprind secventa de selectare a studen­tului si afisarea lui. Ele difera putin, motiv pentru care s-a scris o singura procedura avand ca parametru codul functiei. Daca se cere modificarea inregistrarii selectate se face READ care va trece in editare campurile afisate cu GET. Daca se cere stergerea inregistrarii deja afisate se da un DELETE eventual precedat de confirmare.

- listarea studentilor ordonati alfabetic sau dupa Cods (facultate, sectie, an, grupa, nr.in gr).

Listarea studentilor din BD s-a realizat tot cu o procedura parametrica pentru a realiza 3 functii distincte utilizand un meniu propriu.       Procedura PLIST realizeaza paginare, cu cap tabel si numero­tarea paginilor. Se permite listarea totala in ordinea alfabetica, sau partiala dupa CODS (ex: CODS =AC4) si eventual indexarea dupa acest camp.


Pentru fisierul PROF si CURS se pot realiza proceduri asemanatoare.

Pentru completarea unei note va trebui adaugata o inregistrare in fisierul NOTE cu verificare existenta student (CodS) in fisierul STUD si existenta curs (CodC) in fisierul CURS. Nu se permite adaugarea unei note pentru un student sau un curs care nu exista.



** PRINC ** Program principal de selectie proceduri *


SET TALK OFF

SET PROCED TO FPRO && specificare fisier proceduri

DO WHILE .T.

CLEAR

@ 1,1 SAY 'CAT.CALCULAT'

@ 1,50 SAY 'PROIECT DIDACTIC'

@ 2,60 SAY 'IONESCU BOGDAN'

@ 5,10 SAY 'BAZA DE DATE EVIDENTA STUDENTI'

@ 6,10 SAY REPL('=',30)

@ 7,5 SAY 'FUNCTII OFERITE:'


TEXT

-1 CREARE INITIALA structura BD

-2 ADAUGARI MASIVE

-3 ADAUGARI SINGULARE

-4 AFISARE STUDENTI

-5 MODIFICARI INREGISTRARI

-6 STERGERI INREGISTRARI

-7 LISTARE STUDENTI

-8 TERMINARE PROGRAM

ENDTEXT

WAIT TO R

IF .NOT. R$ '12345678'                       && verificare cod functie

? 'FUNCTIA '+R+' NU EXISTA'

WAIT

LOOP

ENDIF

DO CASE

CASE R='1' && creare structura BD

DO PCREA

CASE R='2' .OR. R='3'             && adaugari

DO PAD WITH R

CASE R $ '456'                         && afisari, modificari, stergeri

DO PIMS WITH R

CASE R='7'

DO PLIST         && listari parametrice

CASE R='8'

USE                              && inchidere fisier

? ’PROGRAMUL S-A TERMINAT * La revedere!

CANCEL

ENDCASE

ENDDO



** FPRO ** Fisier de proceduri    **


** PCREA ** Procedura creare baza de date *


PROCEDURE PCREA

CLEAR

@ 1,10 SAY 'Creare initiala structura fisiere BD'

USE RSTUD                              && deachidere fisier de referinta

COPY STRU TO STUD  && copiere structura

USE STUD && deschide fisierul creat

DISP STRU && afisare structura

INDEX ON SUBSTR(NUME,1,7) TO INUME && indexare fisier vid

USE && inchidere fisier

@ 17,10 SAY 'S-A CREAT FISIERUL STUDENT'

WAIT

RETURN



* PAD ** Procedura adaugari **

* R=2 Adaugari masive R=3 Adaugari singulare **


PROCEDURE PAD

PARAM R

USE STUD        && deschidere fisier STUD fara index

IF R='3' && adaugari singulare

SET INDEX TO INUME && deschidere fisier index

ENDIF

R1='D'

DO WHILE R1 $ 'DdYy'

CLEAR

@3,10 SAY 'PROCEDURA ADAUGARE'

APPEND BLANK                       && adaugare inregistrare alba

@5,10 SAY 'NUME STUDENT ' GET NUME

@6,10 SAY 'ADRESA ' GET ADRESA

@7,10 SAY 'BURSA ' GET BURSA

@8,10 SAY 'COD STUDENT ' GET CODS

READ     && activare geturi pentru completare cimpuri

? 'MAI EFECTUATI ADAUGARI D/N?'

WAIT TO R1                            && confirmare continuare adaugari

ENDDO

IF R='2'     && au fost adaugari masive?

INDEX ON SUBSTR(NUME,1,7) TO INUME && reindexare

ENDIF

USE

RETURN

* SFIRSIT PROCEDURA ADAUGARI




** PIMS Procedura interogari,modificari,stergeri                *

* R=4 INTEROGARE,R=5 MODIFICARE,R=6 STERGERE *


PROCED PIMS

PARAM R

USE STUD INDEX INUME

STORE 'D' TO R1

DO WHILE R1 $ 'DdYy'

clear

@3,10 say 'PROCEDURA INTEROGARI,MODIFICARI,STERGERI'

secventa comuna de selectie si afisare

VNUME=SPACE(20)

@ 5,10 SAY 'NUMELE STUDENTULUI ' GET VNUME

READ                 && nume student selectat

VN=SUBSTR(TRIM(VNUME),1,7)        && suprimare spatii din dreapta

SEEK VN           && cauta primul student cu numele

IF EOF()           && daca studentul nu exista mesaj de eroare

? 'STUDENTUL CU NUMELE ' +VNUME+ ' NU EXISTA'

WAIT ’ Continuati D?N’ TO r1 && asteptare citire mesaj

LOOP              

ENDIF

*** ciclu de afisare grup de studenti

DO WHILE .NOT. EOF() .AND. NUME=VN

@ 7,5 SAY 'NUME STUDENT' GET NUME && afisare date un student

@ 8,5 SAY 'ADRESA' GET ADRESA

@ 9,5 SAY 'BURSA' GET BURSA

@ 10,5 SAY 'COD STUDENT' GET CODS

IF R='5'

READ && se trec in editare campurile afisate cu GET

ENDIF

IF R='6'

DELETE                        && se marcheaza pentru stergere studentul selectat

WAIT                           && se poate cere confirmarea stergerii

ENDIF

IF R='4'

WAIT                           && se asteapta dupa afisarea unui student

ENDIF

SKIP                             && se trece la inregistrarea urmatoare

ENDDO

WAIT 'CONTINUATI D/N?' TO R1

ENDDO

IF R='6'

PACK && compactare fisier daca s-au cerut stergeri

INDEX ON SUBST(NUME,1,7)TO INUME        && reindexare

ENDIF

USE

RETURN



** PLIST *Procedura listari parametrice **


PROCEDURE PLIST

R1='D'

DO WHILE R1 $ 'DdYy'

CLEAR

@ 3,10 SAY 'PROCEDURA LISTARE'

@ 6,5 SAY 'FUNCTII OFERITE'

@ 8,10 SAY '1-LISTARE IN ORDINE ALFABETICA'

@ 9,10 SAY '2-LISTARE TOTALA sau PARTIALA dupa CODS'

@ 10,10 SAY '3-INDEXARE FISIER DUPA CODS'

@ 11,10 SAY '4-TERMINARE PROCEDURA'

WAIT TO R2

IF .NOT. R2 $ '1234'                && verificare existenta functie de listare

? 'FUNCTIE INEXISTENTA'

WAIT

LOOP

ENDIF

DO CASE

CASE R2='1'

USE STUD INDEX INUME         && parcurgere ordonata fisier dupa nume

CL='.T.'  && afisare toti studentii in ordine alfabetica

CASE R2='2'

CL='CODS=VCOD' && parametru conditie

ACCEPT 'CODURI DE LISTAT' TO VCOD

VCOD=TRIM(VCOD)   && codul grupului de studenti ex: AC4

USE STUD INDEX ICOD            && fisier index master ICODS

SEEK VCOD && cautare primul student cu codul dat

IF EOF()

? 'CODUL '+VCOD+' NU EXISTA'

WAIT 'Continuati D/N ' TO R1

LOOP

ENDIF

CASE R2='3'

USE STUD                                && indexare dupa CODS daca nu exista index

INDEX ON CODS TO ICOD

USE

LOOP

CASE R2='4'

RETURN && terminare program

ENDCASE

** urmeaza secventa comuna cu parametrul CL

CLEAR

NRP=0                         && contor de pagini

NL=100                        && contor de linii ,fortare afisare cap tabel

* SET DEVICE TO PRINT                                  && pentru imprimanta


DO WHILE .NOT. EOF() .AND. &CL && ciclu de afisare CL='CODS=VCOD' sau .T.

IF NL>23                      && nr linii ecran (65-100 la imprimanta)

DO CAPT && afisare cap tabel

ENDIF

** afisare un rind pe o pozitie variabila

@ NL,1 SAY NUME+' I '+ADRESA+' I '+STR(BURSA,7,2)+' I '+CODS

@ NL+1,1 SAY REPLICATE ('_',75)                  && linie subliniere

NL=NL+2                      && incrementare contor linii

SKIP                             && inregistrarea urmatoare

ENDDO

WAIT 'LISTAREA S-A TERMINAT. CONTINUATI D/N ?' TO R1

* SET DEVICE TO SCREEN                   && daca s-a afisat la imprimanta

ENDDO

RETURN

* SFIRSIT PROCEDURA LISTARE



** CAPT ** Procedura cap tabel *


PROCEDURE CAPT

WAIT                           && asteptare inainte de afisare pagina noua

CLEAR              && daca se lucreaza pe ecran

*EJECT                         && pagina noua la imprimanta

NRP=NRP+1                 && incrementare nr.pagina

@ 0,1 SAY 'FAC CALCULATOARE'

NL=5                            && primul rind de informatii dupa cap tabel

@ 1,20 SAY 'TABEL STUDENTI'                       && titlul tabelului

@ 1,60 SAY 'PAG:'+STR(NRP,2)                       && afisare nr.pagina

@ 2,1 SAY REPL('=',75) && linie cap tabel

@ 3,1 SAY '     NUME SI PRENUME I ADRESA I';

+ ' BURSA I CODS ' && text in cap tabel

@ 4,1 SAY REPLICATE('=',75)

RETURN






Listare in ordine alfabetica








Listare partiala dupa cod student pentru Cods=ac




Propuneri dezvoltare program la laborator pentru dezvoltarea aplicatiei:


  • Meniu si proceduri pentru gestiune fisier profesori (PROF).
  • Meniu si proceduri pentru gestiune fisier cursuri(CURS).
  • Meniu si proceduri pentru gestiune fisier note (NOTE).

Se va folosi o fereastra pentru meniul principal FM si una pentru meniurile secundare FM2.


Functiile pentru gestiunea fisierului NOTE pot fi:

- Adaugare nota pentru un student cu verificare existenta student (CodS) si curs (CodC)

- Afisare note pentru un student dat prin Cods

- Afisare note pentru un student dat prin Nume


Pentru afisare note pentru un student:

Se deschid toate fisierele indexate in 4 zone de lucru

Se stabileste prin SET RELATION o legatura - intre fisierul NOTE si CURS prin CodC

- intre fisierul CURS si PROF prin CodP

Se cere Cods sau Nume si se selecteaza studentul afisand numele in fereastra FS

Se cauta in fisierul NOTE prin indexul ICodSN prima nota a studentului

Se afiseaza intr-un ciclu cu DO WHILE intr-o fereastra FNote pentru toate notele:

Nota, CS->Titlu, PR->Nume



Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright