Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Evidenta unei biblioteci - aplicatie in Visual FoxPro

fox pro



+ Font mai mare | - Font mai mic



Colegiul National "SF. SAVA" - Bucuresti



Evidenta unei biblioteca

- aplicatie in Visual FoxPro -

CUPRINS

Capitolul 1 : Introducere

Capitolul 2 : Prezentare generala

Capitolul 3 : Prezentare detaliata

3.1 : Tabele .4

3.2 : Structura si module ..5

3.3 : Meniuri si submeniuri .9

Capitolul 4 : Mod de utilizare

4.1 : Resurse .10

4.2 : Date de intrare.10

4.3 : Rapoarte .10

Capitolul 5 : Anexe

Bibliografie

Capitolul 1 : Introducere

Aplicatia este destinata evidentei unei biblioteci, si se adreseaza in special persoanelor care se ocupa cu gestiunea cartilor intr-o biblioteca, permitand o manevrare mai eficienta a informatiilor. Programul are o interfata placuta si este usor de utilizat.

Pentru realizarea acestui proiect s-a folosit integral limbajul de programare Microsoft Visual FoxPro 9.0. Se recomanda rularea aplicatiei pe un sistem unde este instalat si programul Microsoft Visual FoxPro 9.0, insa este functionabila si in absenta acestuia.

Capitolul 2 : Prezentare generala

"Biblioteca.exe" lucreaza cu fisiere de tip tabel, in care sunt retinute date despre cartile unei biblioteci, cititorii acesteia si respectiv tranzactiile (imprumut, returnare) ce se realizeaza in cadrul institutiei.

Structural, aplicatia poate fi impartita in 2 module principale

sectiunea "utilizator"

sectiunea "administrator"

Aceste 2 module principale sunt legate de un al 3-lea , o sectiune de start, din care se alege unul dintre cele precizate mai sus.

Prima sectiune se adreseaza cititorilor , de unde acestia pot returna sau imprumuta carti, cauta o carte, vizualiza rapoarte si statistici etc, sau de unde isi pot deschide o fisa noua in cardul bibliotecii, pentru cei nou-veniti.

A doua sectiune se adreseaza strict administrarii bazei de date, prin stergerea, modificarea sau adugarea de noi carti, autori sau respectiv utilizatori (in cazul celor restantieri)

Ambele module au in spate 5 fisiere de tip tabel (DBF - data base file), structurate intr-un "container" baza de date (DBC - data base container), pentru o mai buna vizualizare si o manipulare a acestora mult mai rapida. Cele 5 tabele au nume sugestive astfel :

cititor.dbf

tranz.dbf

carte.dbf

autor.dbf

editura.dbf

Fiind vorba de un executabil, nefiind necesara rularea din spatele programului Visual Fox, in realizarea lui se poate vorbi despre o programare orientata spre obiect. Atfel sunt folosite fisiere de tip formular (SCX - screen description file), corespondentul ferestrei din Windows. In total exista 7 astfel de form-uri (about.scx, admin.scx, adminuser.scx, cond.scx, getpass.scx, rating.scx, user.scx)

In primul modul, cel al utilizatorului exista un meniu (cu fisierul aferent acestuia de tip MNX) , compus din 3 submeniuri si un buton de inchidere a aplicatiei. Un submeniu este pentru rapoarte (statistici legate de carti, respectiv cititori ai bibliotecii), alt submeniu rezolva problema inregistrarii ca administrator la baza de date, iar al 3-lea este destinat informatiilor despre aplicatie si autor.

Capitolul 3 : Prezentare detaliata

3.1 Tabele

CITITOR.DBF

  • cnp - numeric(13) / cnp-ul cititorului
  • nume - varchar(35) / numele
  • prenume - varchar(35) / prenumele
  • adresa - varchar(100) / adresa
  • rest - logical [default = .F.] / statutul de restantier (se modifica in cazul nereturnarii unei carti dupa mai mult de 30 de zile)

TRANZ.DBF

  • cnp - numeric(13) / cnp-ul pe care s-a facut tranzactia
  • cod_c - numeric(4) / codul cartii tranzactionate
  • data_i - date [default = DATE( )] / data tranzactiei (data de imprumut)
  • data_s - date [default = .NULL.] / data returnarii cartii

CARTE.DBF

  • cod_c - numeric(4) / cod carte
  • titlu - varchar(35) / titlu
  • an_ap - numeric(4) / anul aparitiei
  • pret - numeric(6,2) / pret
  • nr_ex - numeric(2) / numar de exemplare aflate in biblioteca
  • rating - numeric(3,2) [default = 0] / media notelor date de cititori
  • vot - numeric(3) [default = 0] / numarul de voturi
  • cod_a - varchar(35) / codul autorului
  • cod_c - varchar(35) / codul editurii

AUTOR.DBF

  • cod_a - numeric(4) / codul autorului
  • nume - varchar(35) / numele
  • prenume - varchar(35) / prenumele

EDITURA.DBF

  • cod_e - numeric(4) / codul editurii
  • nume - varchar(35) / numele

Pentru o mai buna intelegere a relationarii tabelelor in baza de date este atasata urmatoarea poza. Se observa astfel cum tabelul carte este legat de autor si editura, iar tabelul de tranzactie este o rezolvare a intersectiei dintre cititor si carte. (in poza nu apar toate campurile tabelelor, acelea comune fiind doar intr-un singur tabel, iar in CARTE lipsesc campurile de rating si vot)

3.2 Structura si modulele lucrarii

Punctul de inceput al aplicatiei il reprezinta o forma de start (adminuser.scx), de unde persoana care foloseste aplicatia este pusa sa-si aleaga modul de utilizare al acesteia. Optiunile sunt "Utilizator" si respectiv "Administrator

ADMINISTRATOR :

In cazul celei de-a doua optiune , este necesara autentificarea pe baza unei parole (parola folosita in program este "qwerty",este unica si nu poate fi schimbata din interfata aplicatiei)

Administratorul are drepturi de scriere si modificare in tabelele bazei de date. Deasemenea el poate afla informatii despre utilizatorii restantieri din data respectiva, precum si informatii despre cartile care nu sunt in stocul bibliotecii.

Dupa cum se observa si in poza atasata, acesta isi poate alege tabelul pe care doreste sa-l modifice, avand la dispozitie mai multe actiuni (adaugare, modificare, stergere etc)

La selectarea oricariua dintre cele 5 tabele, in acestea nu se poate modifica nimic. La apasarea butonului de adugare sau editare, aceasta optiune se schimba , administratorul putand sa selecteze articolul dorit si sa modifice in el. Butonul de adugare creeaza automat un rand nou in tabel (APPEND BLANK), asteptandu-se completarea acestuia de carte administrator.

Pentru a sterge un articol este de ajuns sa selectam randul respectiv si sa apasam butonul aferent. Stergerea se realizaeaza cu comanda DELETE, dar stim ca aceasta este doar o stergere logica. Pentru stergerea fizica din tabel, in codul de iesire din aplicatie, se inchid toate tabelele, si apoi se realizeaza stergerea articolelor premarcate cu ajutorul comenzii PACK.

Se observa butonul "Anuleaza", care are efect anularea tuturor actiunilor facute anterior. In aplicatie s-a lucrat cu tranzactii (BEGIN / END TRANSACTION), iar butonul de anulare are asignata functia de ROLLBACK.

In sectiunea statistici, exista 2 parti, "carte" si "cititor" prin care administratorului ii sunt afisate informatii de cartile care nu se afla pe stoc, respectiv despre cititorii restantieri. Spre exemplu, aceasta ultima actiune se rezolva astfel :

- la rularea aplicatiei se executa automat urmatorul algoritm : daca din tabelul tranz.dbf exista articole ale caror camp data_s este null (cartea nu a fost returnata) si diferenta dintre data sistemului si data inregistrata in campul data_i este mai mare de 30 de zile atunci se modifica campul din tabela cititor pentru care cnp-ul este identic cu cel al tabelei tranzactii. Codul aferent acestui algoritm poate fi urmatorul :

SELECT tranz

GO top

SCAN FOR ISNULL(data_s) AND DATE()-data_i > 30

ccnp=cnp

SELECT cititor

GO top

LOCATE FOR cnp=ccnp

IF FOUND

replace rest WITH .t.

ENDIF

SELECT tranz

ENDSCAN

- intr-un mod similar este rezolvata si cea de-a doua interogare.

UTILIZATOR

Aceasta parte este la randul ei impartita in alte 2 parti mai mici : imprumutul si returnarea unei carti.

a)          IMPRUMUT

Pagina de imprumut este afisata mai sus. In lista care se observa sunt afisate cartile aflate in stocul bibliotecii (al caror numar de exemplare este mai mare decat 0 [carte.nr_ex > 0])

Procedura care rezolva acest lucru pentru lista respectiva are urmatorul cod :

SELECT carte.titlu+' -- '+autor.prenume+' '+autor.nume+' -- '+editura.nume;

FROM autor INNER JOIN carte;

ON carte.cod_a=autor.cod_a;

INNER JOIN editura ON carte.cod_e=editura.cod_e;

WHERE carte.nr_ex > 0;

INTO CURSOR Ccusts

this rowsource = 'Ccusts'

Se realizeaza 2 joinuri intre cele 3 tabele dupa cum se vede, articolele gasite introducandu-se temporar in cursorul (=tabel creat temporar, care se sterge automat atunci cand nu mai este necesara prezenta sa) "CCUSTS" ,dupa care acesta este asignat listei. Selectand un articol din lista, se pot afisa (prin dublu-click) detalii despre cartea respectiva (an aparitie, pret etc)

O facilitate a aplicatiei o reprezinta functia de cautare. Dupa cum se observa, utilizatorul are optiune de criteriu pentru cautare. Dupa ce isi alege criteriul dorit (titlu, autor, editura) acesta incepe sa scrie ceea ce doreste sa caute in casuta de "Cauta". In timp ce tasteaza, lista isi schimba continutul progresiv in functie de valoarea stringului aflat la un moment dat in "Cauta". Astfel daca in baza de date sunt cartile "A" , "AB" , "ABC" si dorim sa cautam cartea "ABC" vom tasta pe rand literele "a", "b" respectiv "c". Pentru prima litera avem ca rezultat toate cele 3 carti, pentru "ab" rezultatul este doar pentru ultimele 2, iar ultima carte este doar pentru ultima tastare. Codul aferent este detalizat in anexa 1.

In partea de sus a paginii este sectiunea de utitilizator nou. In aceasta sectiune se introduc campurile cnp, nume, prenume si adresa, reintorcandu-se la pagina de imprumut cu campul cnp completat pentru noul utilizator.

Butonul de imprumut functioneaza doar pentru cazul in care o carte este selectata din lista, si campul cnp este completat. Sageata verde de langa cnp face o verificare daca cnp-ul respectiv exista in baza de date, si daca da cu ce nume si prenume.

b)          RETURNEZ

Pagina "Returnare" se adreseaza actiunii de restituire a unei carti deja imprumutate. Utilizatorul isi introduce cnp-ul si apoi confirma daca acest cnp a fost introdus corect (daca el exista in baza de date bineinteles). Pentru situatia in care cititorul nu are carti imprumutate se va afisa un mesaj ca in imagine, in caz contrar lista cu cartile imprumutate si nereturnate. Dupa selectarea unei carti si apasarea butonului returnare, cititorul este intrebat daca doreste sa noteze cartea respectiva (cu o nota de la 1 la 5, vezi anexa 2), acest lucru fiind folositor pentru rapoartele ulterioare. Fie ca voteaza sau nu, tranzactia se incheie cu un mesaj corespunzator, iar lista cu carti se reactualizeaza pentru o eventuala noua returnare.

3.3 Meniul si submeniurile

Meniul este compus din 4 butoane. Butonul "Iesire" are asignata o procedura de inchidere a formei principale (din care face parte meniul) : _SCREEN.ACTIVEFORM.RELEASE

"Logare" este o alta metoda (decat cea initiala din ecranul de start) de autentificare in modulul de administrator.

"Despre" afiseaza cateva informatii despre autor si aplicatie.

"Rapoarte" apeleaza un submeniu, compus din 2 sectiuni ca in poza de mai sus. Pentru "carte" spre exemplu, utilizatorul poate afla statistici despre informatii extrase din interogarea bazei de date, precum topul celor mai 3 citite carti, sau topul cartilor cu cele mai mari note. Mai jos este exemplul de cod pentru actiunea CLICK a butonului "Top 3 citite" :

LOCAL ARRAY v(2000,2)

LOCAL ARRAY aux(1)

LOCAL b

b=''

SELECT COUNT(cod_c) as 'NR',cod_c FROM tranz;

GROUP BY cod_c ;

ORDER BY NR desc

INTO ARRAY v

FOR i=1 TO

SELECT carte.titlu+' -- '+autor.prenume+' '+autor.nume;

FROM carte INNER JOIN autor ON

carte.cod_a=autor.cod_a;

where carte.cod_c = v(i,2);

into ARRAY aux

b=b+aux(1)+' ['+TRANSFORM(v(i,1))+']'+CHR(13) && cod ansi pentru ENTER

ENDFOR

MESSAGEBOX(b,0,'TOP')

Cu alte cuvinte se realizeaza comanda SQL - SELECT pentru tabelul tranz.dbf. Acest select formeaza grupuri ordonate descrescator pentru codul cartilor si numarul de aparitii pentru fiecare cod in tabela de tranzactii, grupuri pe care le introduce in matricea V(2000,2). Avand matricea completata, tot ce mai trebuie facut este sa ne ocupam de primele 3 elemente ale acesteia. De fiecare data realizam un join intre tabelul carte si autor pe carte.cod_a=autor.cod_a , join filtrat de conditia ca codul cartii sa fie egal cu codul elementului curent din matrice. Astfel gasim numele si prenumele autorului cartii precum si titlul cartii.

Ne-a mai ramas de facut afisarea, pe care o realizam intr-un messagebox corespunzator.

Analog se procedeaza si pentru restul de rapoarte.

Capitolul 4 : Modul de utilizare a lucrarii

Aplicatia vine atat cu executabilul aferent (Biblioteca.exe) cat si cu sursele acesteia. Pentru vizualizarea si/sau modificarea surselor este necesar Visual FoxPro 9.0

Resurse necesare :   

Programul este accesibil oricarui utilizator, cu o interfata usor de manevrat si poate fi rulat de pe orice sistem de calcul, indiferent de gradul de performanta al acestuia. Este recomandabila rularea de pe un calculator cu Microsoft Visual FoxPro 9.0 instalat (pentru modificarea sau vizualizarea tabelelor sau a altor cateva formuri acest lucru este neaparat necesar) insa este functional si in lipsa acestuia. Executabilului ii sunt atasate 3 fisiere DLL, librarii de compilare a aplicatiei, in cazul in care sistemul de operare nu are Fox-ul instalat.

O posibila eroare o poate reprezenta lipsa unui fisier DLL din folderul C:WINDOWSsystem32 , msvcr71.dll, (Microsoft C Runtime Library), fara de care aplicatia nu poate rula.

Toate aceste 4 dll-uri sunt atasate proiectului in cazul aaparitiei oricareia dintre erorile mentionare

Date de intrare necesare rularii :

In afara tabelelor dbf prezentate mai sus cu date despre carti si cititor, aplicatia nu mai are nevoie de nimic auziliar pentru o buna rulare.

Rapoarte :

In stadiul curent programul realizeaza rapoartele explicate mai sus in cardul sectiunii de meniuri. Fiind realizat pe module, si avandu-se la dispozitie sursa sa, aplicatia poate fi modificata usor in functie de necesitati, si se pot interoga date pentru rapoarte mai complexe, acestea prezente fiind doar un model practic cu o complexitate redusa.

Capitolul 5 : Anexe

Functia de cautare progresiva : (atasata metodei KeyPress pentru textbox)

LPARAMETERS nKeyCode, nShiftAltCtrl

LOCAL cDisplayValue,aux

IF nKeyCode = 127

cDisplayValue = ALLTRIM THIS Value

IF LEN(m.cDisplayValue)=1

cDisplayValue = ''

ELSE

cDisplayValue = LEFT(cDisplayValue,LEN(cDisplayValue)-1)

ENDIF

ELSE

cDisplayValue = ALLTRIM THIS Value CHR(nKeyCode)

ENDIF

aux=ALLTRIM thisform.criteriu)

thisform LockScreen= .t.

thisform.pageframe1.page1.list1.rowsource

DO CASE

CASE EMPTY(cDisplayValue)

thisform.pageframe1.page1.list1.Init

OTHERWISE

SELECT carte.titlu+' -- '+autor.prenume+' '+autor.nume+' -- '+editura.nume;

FROM autor INNER JOIN carte;

ON autor.cod_a=carte.cod_a;

INNER JOIN editura ON carte.cod_e=editura.cod_e;

WHERE carte.nr_ex > 0 and;

UPPER(&aux)=UPPER(cDisplayValue);

INTO CURSOR Ccusts

thisform.pageframe1.page1.list1.rowsource = 'Ccusts'

ENDCASE

thisform LockScreen= .F.

Pentru metoda KeyPress a textboxului respective, mai intai imi formez variabila cDisplayValue cum se observa mai sus, dupa care aplic algoritmul explicat in proiect la prezentarea detaliata a aplicatiei.

Votarea unei carti

Se deschide o noua forma cu cele 5 patratele (care isi schimba culoarea in functie de locatia cursorului) iar la evenimentul click formul returneaza in aplicatie votul respectiv pentru carte.

Bibliografie :

"Microsoft Visual FoxPro 6.0 - Ghidul programatorului" ; Editura Teora, 2000

"Visual FoxPro, ghidul dezvoltarii aplicatiilor profesionale" ; autori: Ioan Brava, Liviu Cretu, Marin Fotache,Catalin Strambei ; Editura Polirom, 2002

Informatica- manual pentru clasa a XIIa"; autori: Marcel Andrei Homorodean, Simona Petrescu; Editura Niculescu ABC, 2004

https://www.profox.ro/



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 4528
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved