Sunteți pe pagina 1din 62

Universitatea "Dunrea de jos" Galai

Facultatea de tiinta Calculatoarelor Departamentul de Formare Continu i TransferTehnlogic Specializarea: Informatic Aplicat i Programare Seria A XX-A (Tulcea)

Baze de date Gestionarea crilor ntr-o bibliotec

Coordonator tiinific, ef de lucrri Drd. Ing. Dan Munteanu

Absolvent,

Galai 2012

CUPRINS

1 INTRODUCERE...........................................................................................................................................2 2 ANALIZA PROBLEMEI............................................................................................................................7 3 SPECIFICAREA CERINELOR.............................................................................................................13 4 PROIECTAREA SISTEMULUI................................................................................................................15 5 IMPLEMENTARE......................................................................................................................................17 6 INSTALARE................................................................................................................................................37 7 BIBLIOGRAFIE..........................................................................................................................................46 8 ANEXA 1 LISTE PROGRAME SURS..................................................................................................47

1 Introducere
Trebuie menionat faptul c lucrarea de fa i propune nainte de toate s identifice cele mai importante aspecte i probleme ale biblioteconomiei precum i descrierea implementrii unui sistem informatic(digital) de gestiune a unei biblioteci.

1.1 Motivaia alegerii temei


Plecnd de la dictonul elen: O bibliotec este un loc de sntate pentru spirit. i a faptului c sunt profesor de istorie am considerat ntodeauna c elevul nva fr s-i dea seama prin citirea unei cri. Biblioteca colar constituie un bun ctigat n viaa colii romneti, astfel nct nimeni nu poate concepe absena ei din vreo instituie de nvmnt. Poate c unii s-ar ntreba de ce este neaprat nevoie ca n coal s existe o bibliotec, de vreme ce elevii se pot duce s-i cumpere crile i din librrii ori s i le achiziioneze din bibliotecile publice. ntr-o bibliotec colar ar trebui s se gseasc acele cri, fie de beletristic, fie de specialitate, care s reprezinte programa colar, dar i crile care s ajute la formarea spiritual a elevilor, iar elevul are nevoie de o atent ndrumare asupra lecturii sale, pe care nu o poate gsi altundeva dect n cadrul colii.

Cartea are calitatea de nenlocuit de a fi cel mai stimulator instrument de informare pentru gndirea omeneasc. Cinematografia, radioul, televiziunea, internetul, dei implic o participare emotiv crescut, sunt forme mult mai pasive mintal dect cartea. Cartea presupune o reconstrucie, un efort, o activitate intelectual. Cartea dezvolt intelectul, nul sleiete. Cartea dezvolt rspunderea personal. Fiecare carte este o lupt, un proiect la sfritul cruia se poate spune : am neles-o (sau: nu am neles-o). Cartea d acele mari satisfacii pe care le d munca, realizarea palpabil, aciunea dus pn la sfrit. Numrul de cri tiprite, difuzate, numrul de cititori ai bibliotecilor continu s fie indicii primordiali de msurare a culturii unui popor. Biblioteca este instituia de cultur prin excelen. Bibliotecile, ca deintoare ale tezaurului de cunotine i ca centre de difuzare ale acestora, sunt verigi ale culturii n orice timp i societate, continund s fie i n epoca contemporan izvoare de cultur. Este cunoscut faptul c de la apariia televiziunii i a calculatoarelor, numrul crilor n lume nu a sczut, ci, dimpotriv, a crescut de aproape patru ori. Aadar, n viitor cartea va fi n continuare principalul mijloc de nvare, de educaie, de creaie i de cercetare.

1.2 Ce este biblioteconomia


Definitie: Biblioteconomia se preocup de organizarea, catalogarea, clasificarea i funcionarea bibliotecilor, inclusiv orientarea de carte, propaganda de carte, completarea i organizarea fondului bibliotecilor, conservarea crilor. Cuvntul bibliotec i are originea n limba greac veche: biblon = carte; thk = dulap, loc de pstrare a crilor. Deci bibliotec nseamn loc de pstrare a crii. Spre sfritul Evului Mediu, n concepia umanist biblioteca reprezenta triada: loc, dulap, cri; ea era un muzeu de carte, un depozit de valori spirituale. Biblioteconomia se preocup de organizarea, catalogarea, clasificarea i funcionarea bibliotecilor, inclusiv orientarea de carte, propaganda de carte, completarea i organizarea fondului bibliotecilor, conservarea crilor. Definitie: Biblioteca colar este o colecie organizat de documente (cri, reviste, ziare, mijloace audio-vizuale etc.) cu caracter enciclopedic i adecvate nivelului i profilului colii; prin activitatea desfurat, biblioteca particip la realizarea scopurilor nvmntului. Sarcinile bibliotecii colare sunt: 1. 2. s participe la pregtirea elevilor pentru procesul instructiv-educativ i la formarea culturii generale a acestora; s dezvolte gustul tuturor elevilor pentru lectura crilor cu mare valoare instructiv i educativ;

3. s contribuie la formarea i dezvoltarea la elevi a deprinderilor i tehnicilor de munc intelectual, pregtindu-i pentru un studiu individual eficient; 4. s dezvolte sentimentul responsabilitii la elevi, deprinzndu-i s mnuiasc cu grij un bun colectiv pe care l folosesc; 5. s ajute personalul didactic al colii n ridicarea calitii procesului de nvmnt, asigurnd publicaii de referin i de informare curent. 3

Sarcinile bibliotecarului colar: organizeaz activitatea bibliotecii i asigur funcionarea acesteia potrivit normelor legale i n cadrul orarului stabilit de conducerea unitii colare; rspunde de pstrarea i securitatea fondurilor de publicaii; organizeaz coleciile bibliotecii potrivit normelor biblioteconomice indicate de M.E.C.T.; se ngrijete de completarea judicioas a coleciilor de publicaii, innd cont de necesitile crora trebuie s le rspund biblioteca colar; in la zi documentele de eviden a fondurilor de publicaii i a activitilor de bibliotec i asigur permanent instrumentele de informare necesare orientrii rapide n coleciile bibliotecii; elaboreaz planul de munc i darea de seam anual a bibliotecii i completeaz drile de seam statistice; rspunde operativ i eficient nevoilor de lectur i documentare ale cititorilor; desfoar, att singuri, ct i n colaborare cu cadrele didactice, munc de propagand a crii, punnd la dispoziia elevilor i a personalului didactic liste de nouti intrate n bibliotec, bibliografii i organiznd vitrine, expoziii i prezentri de cri, seri literare etc.; ntreprind, n colaborare cu ntregul personal didactic, aciuni de iniiere a elevilor n tehnicile biblioteconomice, bibliografice i de studiu; ajut pe elevi, individual, ori de cte ori este nevoie, n folosirea cataloagelor i a bibliotecii, n consultarea dicionarelor, enciclopediilor i, n general, a lucrrilor de referin, precum i n alctuirea bibliografiilor i alegerea publicaiilor necesare pentru lucrri scrise, activiti n cercuri colare, examene; ndrum lectura elevilor, n colaborare cu toate cadrele didactice, potrivit cerinelor procesului de instrucie i educaie i innd seama de particularitile de vrst, de pregtirea i de interesele individuale ale acestora; folosesc mprumutul interbibliotecar pentru a procura cititorilor lucrrile pe care biblioteca colii nu le posed; i perfecioneaz pregtirea profesional prin participarea obligatorie la toate instructajele i cursurile organizate de forurile tutelare, precum i prin schimburi de experien i studiu individual; folosesc, n toate lucrrile legate de tehnica de bibliotec i de munc cu cititorii, ultimele dispoziii n vigoare, fiind obligai s ia cunotin de ele i s le aplice.

Una dintre seciunile cele mai importante ale unei biblioteci este serviciul catalogri. Aici se identific crile incomplete, anonime, aici se preuiesc crile rare sau vechi; tot aici se alctuiesc listele pentru preocuparea de cri valoroase i inexistente n fondul bibliotecii respective. Exist dou sisteme de catalogare: n registru i pe fie mobile. Catalogul trebuie s individualizeze fiecare carte printr-o descriere proprie. Este ceea ce se numete fia de carte (plana 5). Dac se alctuiete pe fie mobile, acestea se scriu n aa fel nct s rspund ct mai bine cerinelor cititorului i bibliografului. Fia de carte care cuprinde datele bibliografice se alctuiete dup anumite reguli de catalogare i sunt 4

nscrise pe fie de carton de dimensiuni standard internaional, ornduite dup anumite reguli n sertare speciale numite fiiere. Fia de carte trebuie s cuprind: a) autorul (n vedet sau rubric), nti numele i apoi prenumele. Cnd o carte are mai mult de trei autori se consider anonim i n acest caz se pun dou-trei cuvinte din titlul crii, care s serveasc la clasare; b) titlul lucrrii, subtitlul, dac exist, reproducndu-se exact dup foaia de titlu i nu dup copert; c) ediia, volumul, localitatea, editura, anul de tiprire, numrul de pagini, volumele n ntregime ale publicaiei, formatul tipografic, plane, hri, figuri n afara textului, dac sunt; d) instituia sau organizaia sub egida creia a aprut lucrarea, colecia din care face parte, cu numrul de ordine pe care-l deine; e) cota volumului - care arat locul crii respective n depozit - se nscrie n stnga fiei, sus, nsoit i de indicele de clasificare dup sistemul zecimal. Dup modul de aezare a fielor n catalog, exist cataloage alfabetice sau nominale, cataloage pe subiecte sau metodice, cataloage sistematice sau analitice, pe ramuri de cunotine dup coninutul lor. Alte tipuri de cataloage ar fi: catalogul general sistematic, catalogul general alfabetic, ambele destinate publicului cititor, cataloage colective, cataloage tematice, cataloage speciale. n prezent la biblioteci exist i sistemul de catalogare automatizat (Cataloage online). ntr-o bibliotec trebuie s existe un minim de cataloage; catalog alfabetic, pe autori i titluri, catalog pe materii i catalog topografic (alctuit dup un plan prestabilit, cuprinznd descrierea crilor n ordinea locului pe care-l ocup n rafturi). Cel mai complet catalog al unei biblioteci este catalogul alfabetic de serviciu care este oglinda crilor existente ntr-o bibliotec. Necesitatea gsirii i regsirii rapide a informaiilor a determinat importante schimburi n problematica catalogului de bibliotec. Formele tradiionale de cataloage pe fie de carton sunt cele mai frecvent nlocuite n marile biblioteci, cu cataloagele pe microformate sau minicalculator. n general, n aceste biblioteci coexist cataloagele tradiionale - mai accesibile publicului - cu cataloagele automatizate total sau parial. Se discut, chiar la scar internaional, realizarea unui catalog computerizat care s nglobeze cataloagele vechi, oferind un rapid acces la informaii. Bibliotecile i-au diversificat coleciile, avnd la ora actual, alturi de fondurile de carte i periodice, o serie de ali purttori de informaii de natur audio-vizual: diafilme, diapozitive, discuri i benzi magnetice (bibliotecile din Capital i cteva din ar posed un numr important de discuri). Mai mult chiar, n ultimii ani, bibliotecile au nceput s introduc n fondurile lor i informaii bazate pe electronic. Au fost automatizate n special operaiile bazate pe catalogare i mprumut, bibliotecile universitare constituind principalele centre de experimentare a noilor tehnologii. ncercrile de catalogare automat au debutat n anul 1952 la Biblioteca Public din Los Angeles (cataloagele obinute prezentnd unele neajunsuri), iar cea dinti bibliografie naional curent a fost ntocmit cu ajutorul calculatorului n 1966. Dup aceea, timp de cteva decenii, calculatorul s-a introdus treptat, bibliotecarii dobndind o anume experien n mnuirea lui. n deceniile apte i opt numrul bibliotecilor care au preluat 5

calculatorul a crescut simitor, la ora actual aproximativ toate rile din lume l folosesc. (Romnia l folosete din 1976, la Institutul de Petrol i Gaze din Ploieti, iar Biblioteca Naional din Bucureti, din anul 1979). Prin folosirea calculatorului, se obin automat: evidena fondurilor, prelucrarea automat a solicitrilor, ntocmirea situaiilor de care are nevoie biblioteca respectiv, urmrirea circulaiei crii, situaia achiziiilor, a multiplicrilor, a casrilor, tipriri de bibliografii etc. Funcia de conservare a coleciilor de publicaii au avut-o bibliotecile din cele mai vechi timpuri. Din punct de vedere teoretic, aceast activitate presupune o serie ntreag de metodologii, tehnici de programe administrative menite s asigure pstrarea tuturor fondurilor sale, precum i a localului i a mobilierului. Aceste sarcini revin bibliotecaruluiconservator care trebuie s anihileze factorii i cauzele care duc la deteriorarea crilor. Deteriorrile i mbtrnirea coleciilor de publicaii se pot grupa n trei categorii, n funcie de cauzele care le pot determina: 1. Deteriorri mecanice - datorate unei depozitri necorespunztoare, neglijenei personalului de bibliotec, precum i cititorilor care mnuiesc neglijent crile etc. 2. Procese fizico-chimice de deteriorare cauzate de influena luminii solare, a temperaturii (prea ridicate sau prea sczute), a umiditii, a impuritilor din atmosfer (praf mai ales). Materialul suport (hrtie, pergament, piele etc.), va ,,mbtrn. In urma aciunii acestor ageni fizico-chimici, soldndu-se cu decolorri, dezagregri, pulverizare. 3. Deteriorri datorate factorilor biologici - mucegaiuri, insecte, animale. De cele mai multe ori aceti factori acioneaz concomitent, rezultatul fiind dezastruos pentru cri. Trebuie s se creeze un microclimat special de temperatur, luminozitate, umiditate, care s asigure pstrarea publicaiilor din coleciile bibliotecilor.Bibliotecarul contemporan cu revoluia informaional, nu mai poate fi doar un erudit i un custode, ci el trebuie s fie un element activ n difuzare, a informaiei i ,,implantarea ei n rndurile diferitelor categorii de cititori: cercettori, tehnicieni, cadre didactice, studeni etc. Cele 1200 de discipline tiinifice existente la ora actual dup datele UNESCO i care, la rndul lor, se amplific i se diversific, nu mai pot fi ,,stpnite prin mijloace clasice, respectiv puse la ndemna cititorilor. n prezent calculatorul a devenit o necesitate n practicarea meseriei de bibliotecar. ntr-o serie de probleme, cum ar fi prelucrarea textelor n arab, greac, ebraic, latin etc., prelucrarea deosebit de util n seciile de manuscrise ale bibliotecilor, calculatorul aduce reale servicii. Astzi se apeleaz frecvent la calculator, nu numai pentru domeniul matematicii, ci i pentru chestiuni de istorie, geografie, economie, lingvistic, arheologie, demografie, biblioteconomie etc. Societatea actual necesit mai mult ca oricnd instrumente de informare i documentare care s difuzeze cunotinele ct mai rapid i ct mai accesibil. De aici necesitatea introducerii n bibliotec a sistemelor moderne de nmagazinare, prelucrare i regsire a informaiilor. Avnd n vedere multitudinea i complexitatea categoriilor de informaii, a aprut necesitatea crerii unor evidene centralizate privind fondurile documentare i apoi asigurndu-se transferul informaional. Spre exemplu, nregistrarea textului pe videodisc va atinge ctre sfritul secolului valori impresionante. Astfel, ntregul fond de carte al cunoscutei ,,Library of Congress din Washington va putea fi 6

transpus, pagin cu pagin, pe aproximativ 100 de videodiscuri, ceea ce ar rezolva problemele spaiului de depozitare, a conservrii dubletelor, deoarece uzura discurilor cu lectur laser este neglijabil. Teletextul i videotextul sunt alte dou procedee informatice care se folosesc la ora actual mai ales pentru periodice i pentru documentele fundamentale n informarea tinific de specialitate. Telecopia poate prezenta cercettorilor nu numai coninutul semantic al unui document, ci chiar imaginea exact a documentului respectiv, prin convertirea acestei imagini n date numerice. Aceast nou tehnic nu exclude prezena n coleciile bibliotecile a discurilor i benzilor magnetice, a crilor, revistelor i a manuscriselor. n prezent statele care dein cea mai avansat tehnic informatic au i cea mai mare producie de carte i de publicaii periodice: Anglia, Japonia, au peste 80.000 de exemplare pe an. Cu cele 7.000 de titluri pe an (n 1987) Romnia se situa, raportat la numrul de locuitori, la nivelul rilor cu civilizaie industrial avansat. Biblioteca, mai mult dect oricare alt instituie a unei societi, traverseaz timpurile. ,,Biblioteca, aceast cetate a ideii, mereu prdat i niciodat cucerit, este n spatele piramidelor i al Coloseum-ului, sub cercurile lui Arhimede, dincolo de revoluia lui Copernic i n simplitatea formulelor lui Newton, n semnalele primului satelit i n mndria i frica primilor pai pe lun, rezultat i msur. Nu o bibliotec anume, ci toate la un loc, pentru c ele reprezint mpreun omenirea gndului nfrigurat i scormonitor, fiind totodat oglinzile unei lumi aezat deplin n linitea comunitii i a duratei. Bibliotecile au fcut sensibil n societate legea fundamental a conservrii materiei. Odat cu ele nimic nu se poate pierde, lumea adun i cerne mereu, construindu-se destinul. Bibliotecile au fost i continu s fie n epoca contemporan, izvoare de cultur. De la apariia televiziunii i a calculatorului numrul crilor n lume nu a sczut, ci, dimpotriv, a crescut de aproape patru ori. Aadar, n viitor cartea va fi principalul mijloc de nvare, de educaie, de creaie, de cercetare. Accesul universal la publicaii, sistemul internaional de informare bazat pe sistemele naionale de informare, unde sunt incluse i bibliotecile, schimburile interbibliotecare, sunt doar cteva dintre problemele actuale ale bibliologiei, care se pun la diverse consftuiri internaionale, desfurate n continuare sub egida UNESCO.

2 Analiza problemei
Dupa cum am specificat anterior calculatorul a devenit o necesitate n practicarea meseriei de bibliotecar. Vom avea nevoie asadar de un sistem de gestionare a resurselor dintr-o biblioteca. Vom incepe prin a analiza cateva sisteme disponibile deja pe Internet i care evident au succes putnd astfel analiza care sunt cele mai ntlnite cerine i funcionaliti disponibile la un astfel de sistem.

2.1 Sisteme comerciale disponibile pe internet


Bibliotecile se pot mpri n dou categorii din punct de vedere al accesibilitii. Biblioteci publice disponibile on-line i biblioteci private

2.1.1

Google Book Search

Adresa: books.google.com Aici se poate gsi cea mai impresionant colecie de cri din toate domeniile (literatur, ficiune, filozofie, economie, tiine politice, matematic, fizic etc.) n toate limbile pmntului. Accesul este n principal liber ns la majoritatea cilor sunt afiate doar anumite pagini din carte astfel ca pentru a obine toat cartea serviciul direcioneaz user-ul ctre o librrie fizic sau una on-line(ex: Amazon books). Google Books (cunoscut anterior ca Google Book Search i Google Print) este un serviciu de la Google, care caut n textul integral al crilor pe care Google le scaneaz, se convertete la text utiliznd recunoaterea optic a caracterelor, i le stocheaza digital n baza sa de date. Serviciul a fost cunoscut anterior ca Google Print, atunci cnd a fost introdus la Targul de Carte de la Frankfurt, n octombrie 2004. Pn la trei rezultate din indexul Google Books sunt afiate deasupra rezultatelor de cutare n serviciul Google Web Search (google.com) cnd sunt relevante pentru cutarea de cuvinte cheie ale unui utilizator. Un utilizator poate cuta, de asemenea, doar cri dedicate(domenii). Fcnd clic pe un rezultat de la Google Books, se deschide o interfa n care utilizatorul poate vizualiza pagini din carte, precum i anunuri legate de coninut i link-uri ctre site-ul editurii i librrii. Printr-o varietate de limitri de acces i msurile de securitate, unele bazate pe utilizator de urmrire, Google limiteaz numrul de pagini vizualizate i ncercrile de a printa pagina precum i copierea textului din material cu drept de autor. Spre exemplu n loc s se afieze un document din care se poate face copy/paste se va afia o imagine (nu permite copiere) sau se vor afia numai anumite pagini semnificative pentru carte(doar cuprins i nceputul capitolelor). Baza de date Google Books continu s creasc. Google Books permite descrcarea n format PDF a lucrarilor publice i a materialelor fara copyright. Potrivit unui membru al echipei de Asisten Google Books, "Din moment, dac o carte este n domeniul public pot fi adesea o ntrebare delicat juridic, ne alunec pe partea de precauie i de afiare cel mult un fragment de cteva rnduri pn cnd vom avea stabilit c acea carte a intrat n domeniul public ".[2] Utilizatorii din afara Statelor Unite poate accesa toate acestea, un numr mare de cri scanate domeniului public de ctre Google folosind copii stocate pe Internet Archive. Multe dintre cri sunt scanate folosind aparatul Elphel 323 la o rat de 1.000 de pagini pe or. Iniiativa este de ludat pentru potenialul su de a oferi un acces fr precedent la ceea ce poate deveni cel mai mare corpus on-line a cunoaterii umane i promovarea democratizrii de cunotine, dar aceasta a fost criticat de asemenea, pentru nclcarea potenial a drepturilor de autor. Prin martie 2007, Google a avut digitalizate un milion de cri la un cost estimat de 5 milioane dolari. Pe 28 octombrie 2008., Google a declarat c a avut apte milioane de cri cutate prin Google Books, inclusiv cele scanate de ctre partenerii lor(circa 20.000 edituri/publisheri). Din cele 7 milioane de cri, 1 milion sunt n "previzualizare deplin" bazat pe acorduri cu editori. Cele mai multe lucrri scanate nu mai sunt n presa scris sau disponibile pe pia. Pe 9 octombrie 2009, Google a anunat c numrul de cri scanate este de peste zece milioane.

2.1.2 WizBooks Program specializat pentru gestiunea crilor i clienilor unei biblioteci.
Adresa: http://www.wiz-soft.ro/wizbooks.htm Pre/licen MONOPOST 1000 lei Pre/licen RETEA 1900 lei Licen update/an 250 lei 1. Gestiunea crilor din inventarul bibliotecii, permite, stocarea n baza de date a urmtorului set minimal de date referitor la articolele din gestiune: numr de inventar, titlu, autor, editura, locul apariiei, anul apariiei, domeniul lucrrii (n sistem se va creea un catalog de domenii), limba n care este scris cartea, preul de achiziie, domeniul, numrul procesului de recepie cu care a intrat n gestiune, data intrrii n gestiune, proveninen. Deasemenea acest modul ofer posibilitatea introducerii de meniuni cu ocazia inventarieriilor periodice sau neperiodice i generarea de situaii privind aceste aciuni. 2. Gestiunea Clienilor, permite stocarea n baza de date a urmtorului set minimal de date referitor la clieni: nume, prenume, data naterii, adresa, telefon, email, act de identitate (tip, serie i numr ), CNP, data nscrierii, meniuni despre comportament, nivelul de studii, locul de munc, funcia. Clienii din baza de date pot fi identificai dup diverse criterii (CNP, nume, prenume, data naterii). Conform prevederilor legale pentru fiecare cititor aplicaia permite emiterea unui contract valabil de 5 ani i deasemenea permite aplicarea de vize anuale. La expirarea contractului datele clientului se vor arhiva i vor putea fi regsite ulterior. 3. Modul mprumut - restituire, permite mprumutul unei cri unui client cu contract de cititor valabil, preciznd data mprumutului, data cnd trebuie s fac restituirea, data restutuirii efective, optional o not pentru starea crii dupa mprumut. n perioada ct timp cartea este mprumutat ea trece n starea blocat i nu va mai fi disponibil spre a fi mprumutat altui client. Tot aici se pot genera i listele cu situatiile cartilor mprumutate, crile cu termen de restituire depit i pentru acestea pot genera i lista ntiinri pentru restituirea crilor. 4. Modul consultare Acest modul servete la interogarea bazei de date dupa diverse criterii. Se permit cutri ale articolelor din bibliotec dup, numr de inventar, titlu, autor, editur, locul apariiei, anul apariiei, domeniul lucrrii, limba n care este scris cartea, domeniu. 5. Modul listare i statistic, servete la ntocmirea automat a situaiilor statistice cerute pentru a fi raportate sau pentru uz intern. 6. Modul operaii de ntreinerea bazei de date, realizeaz reindexarea datelor, testarea consistenei bazei de date, arhivarea datelor vechi, salvarea periodic a bazei de date, restaurarea bazei de date din ultima salvare i alte operaii necesare ntreinerii bazei de date 9

7. Modul de securizare i alocare drepturi de acces utilizatori, acord acces utilizatorilor la resursele aplicatie pe baz de parole de acces n functie de drepturile acordate.

2.1.3

Program, software evidena bibliotec - OBRE SOFT

http://www.obresoft.ro/ Programul realizeaz evidena informatizat a intrrilor i ieirilor de carte dintr-o bibliotec -programul folosete cititor cod bare -pe fiecare carte se lipesc etichete cod bare avnd imprimate numele crii, numrul de inventar, autorul -crile se introduc n baza de date avnd posibilitate de sortare/cutare dup autor/editur/domeniu -la mprumutul unei cri se citete automat eticheta pentru a afla date despre carte; se citete de asemenea i codul clientului de pe carnetul de acces n bibliotec -la restituirea crii se citete codul de client dup care se citete eticheta fiecrei cri returnate -programul editeaz o fi a crii, o fi a clientul, registrul cu cri mprumutate/resturnate, lista cu cri nereturnate, adrese de ntiinare ctre clienii care nu au returnat crile -programul are posibilitatea de a bloca un client la mprumut pentru un anumit numr de zile -programul are posibilitatea de a rezerva o carte pentru un anumit client -emitere automatizat de somaii pentru depirea termenului de restituire prin sms sau email -pentru cei care nu doresc s foloseasc facilitatea de etichete cod bare i automatizare transmitere somaii preul este de 100 euro -100 ETICHETE GRATUIT. -firma noastr poate pune la dispoziie etichete editate cu datele din baza de date a programului -10 euro --> 1.000 etichete

2.2 Sisteme gratuite


La sisteme gratuite va fi ncadrat i sistemul implementat de mine deoarece intenionez s-l fac disponibil pe unul din forumurile de profil. Ex: PROGRAM GRATUIT BIBLIOTEC COLAR: http://forum.portal.edu.ro/index.php?showtopic=50404

2.2.1 OpenBiblio
http://openbiblioromania.xhost.ro/home/index.php

OpenBiblio permite realizarea managementului activitii unei biblioteci prezentnd multiple avantaje, printre care: - este gratuit; - interfaa n limba romn; 10

programul ruleaz rapid pe orice sistem de operare pe care sunt instalate php, mysql, apache. sistemul este securizat n sensul c nu oricine are acces la informaii dect pe baz de parol; folosind sistemul OPAC putem permite vizualizarea de ctre elevi a informaiilor anumitor bibliografii precum statutul lor(mprumutat, returnat, rezervat, deteriorat, etc); dac OpenBiblio este instalat pe serverul colii i acesta are acces n exterior atunci programul prezint dou mari beneficii:elevii pot vizualiza de acas lista materialelor mprumutate, respectiv data returnrii lor iar bibliotecarii pot introduce date n biblioteca virtual chiar de acas; administratorul poate crea conturi suplimentare pentru mai muli bibliotecari crescnd astfel productivitatea i randamentul unei astfel de biblioteci on-line; administratorul/administratorii (bibliotecarul/bibliotecarii) pot crea conturi pentru fiecare membru(abonat) al bibliotecii; administratorul are acces la arhiva mprumuturilor/returnrilor unui membru; programul are i o eviden financiar, calculeaz amenzi de penalizare, etc; se pot crea diverse tipuri de colecii: cri, cd, dvd, etc; se pot crea cu uurin bibliografii-pentru maxim eficien OpenBiblio utilizeaz limbajul MARC prin intermediul cruia se pot introduce sute de bibliografii folosind programul MarcEdit(dac suntei interesai voi reveni cu amnunte); se poate face importul datelor folosind un program de calcul tabelar(Calc); se pot face rezervri ale materialelor mprumutate; OpenBiblio folosete sistemul codului de bare, permind folosirea scanerelor pentru citirea codului de bare; generare rapoarte complexe, scrisori de somare, etichete cu coduri de bare; cutarea membrilor i bibliografiei dup mai multe criterii,etc editor de teme vizuale; alte opiuni.

2.2.2 Biblioportal (realizat cu fonduri UE, recomandat a fi folosit de intituii)


Adresa: http://www.biblioportal.ro Pe 21 Octombrie 2009 a fost lansat Sistemul Biblioteconomic Integrat Web BiblioPortal BiblioPortal este un Sistem Biblioteconomic Integrat Web, dezvoltat pe structura aplicaiei Ibla Soft (rezultat al proiectului IOSSPL) i cuprinde aplicaiile biblioteconomice de baz specifice (Catalogare, Gestiune, mprumut, Rapoarte Standard, Consultare Catalog, Rezervri etc.), i ofer servicii on-line bibliotecilor abonate i clienilor acestora, acoperind ntreaga gama de activiti i fluxuri de informaii i date ale unei biblioteci profesioniste. BiblioPortal ofer servicii de hosting al bibliotecilor abonate, permind integrarea n portal a cataloagelor bibliotecilor clieni n cadrul catalogului comun partajat i a siteurilor acestora, fcnd posibil operarea i utilizarea portalului de ctre personalul bibliotecilor pe baza accesului preferenial i securizat, n funcie de conturile i profilele create n modulul de administrare. Portalul permite operaiuni biblioteconomice complexe 11

prin portlet-uri specifice, n categoriile urmtoare: catalog partajat, operaiuni de catalogare, cutare complex, operaiuni de gestiune bibliotecar, sistem de rapoarte standard, rezervri on-line, mprumuturi, administrare securizat i acces preferenial (sistem complex de conturi, grupuri i profile de utilizatori), modul internaionalizare (n prezent pregtindu-se localizarea pentru 7 limbi de circulaie European). Portalul poate fi customizat pentru a ndeplini funciile specifice ale unor biblioteci specializate. BiblioPortal este utilizat ntr-o serie de proiecte naionale i internaionale, implementrile existente acoperind cteva categorii de biblioteci: Biblioteci Publice (Oreneti, Comunale, Steti), Biblioteci Juridice (Curi de Apel, Tribunale, Judectorii), Biblioteci ale Institutelor de Cercetare, Biblioteci Educaionale (coli, Licee, Universiti). Portalul faciliteaz colaborarea inter-biblioteci, crearea unei comuniti de profil integrnd i cititorii i comunicarea prin forum i wiki propriu. BiblioPortal este un Sistem Biblioteconomic Integrat Web care integreaz o serie de aplicaii biblioteconomice i ofer servicii on-line bibliotecilor abonate i clienilor acestora, acoperind ntreaga gam de activiti i fluxuri de informaii i date ale unei biblioteci profesioniste. BiblioPortal ofer servicii de hosting al bibliotecilor abonate, permind integrarea n portal a cataloagelor bibliotecilor clieni n cadrul catalogului comun partajat i a siteurilor acestora, fcnd posibil operarea i utilizarea portalului de ctre personalul bibliotecilor pe baza accesului preferenial i securizat, n funcie de conturile i profilele create n modulul de administrare. Portalul permite operaiuni biblioteconomice complexe prin portlet-uri specifice, n categoriile urmtoare: catalog partajat, operaiuni de catalogare, cutare complex, operaiuni de gestiune bibliotecar, sistem de rapoarte standard, rezervri on-line, mprumuturi, administrare securizat i acces preferenial (sistem complex de conturi, grupuri i profile de utilizatori), modul internaionalizare. Portalul poate fi customizat pentru a ndeplini funciile specifice ale unor biblioteci specializate. BiblioPortal-ul este utilizat n proiecte naionale i internaionale, implementrile existente acoperind cteva categorii de biblioteci: Biblioteci Publice (Oreneti, Comunale, Steti), Biblioteci Juridice (Curi de Apel, Tribunale, Judectorii), Biblioteci ale Institutelor de Cercetare, Biblioteci Educaionale (coli, Licee, Universiti). Portalul faciliteaz colaborarea inter-biblioteci, crearea unei comuniti de profil, comunicarea prin forum i wiki propriu. BiblioPortal - Ofert servicii: Catalog Bibliografic Partajat (On-line) Servicii de Catalogare (On-line) Servicii de Cutare Complex n Catalog (On-line) Servicii de Gestiune i mprumut (On-line) Servicii de Forum i Wiki (On-line) Servicii de Informare i tiri (On-line) Servicii de Gzduire Site-uri Biblioteci (On-line) Servicii de Management al Conturilor de Utilizatori (On-line) Servicii de Hosting - Numr nelimitat de Biblioteci (On-line) Servicii de Adaptare, Implementare i Training (Local - La cerere) Servicii de Conversie i Import Date (Local - La cerere) Servicii de Asisten - Consultan (Telefonic i On-line) Structura nivele servicii: Servicii globale 12

o Servicii de Hosting - Numr nelimitat de Biblioteci (On-line) o Servicii de Gzduire Site-uri Biblioteci (On-line) o Servicii de Adaptare, Implementare i Training (Local - La cerere) o Servicii de Conversie i Import Date (Local - La cerere) o Servicii de Asisten - Consultan (Telefonic i On-line) Nivel utilizator neautentificat o Servicii de Cutare Simpl n Catalog (On-line) o Servicii de Vizualizare Forum i Wiki (On-line) o Servicii de Vizualizare Info i tiri (On-line) Nivel utilizator autentificat - Bibliotecar o Catalog Bibliografic Partajat (On-line) o Servicii de Catalogare (On-line) o Servicii de Cutare Complex n Catalog (On-line) o Servicii de Gestiune i mprumut (On-line) o Servicii de Forum i Wiki (On-line) o Servicii de Update (On-line) Nivel utilizator autentificat - Cititor o Servicii de Cutare Complex n Catalog (On-line) o Servicii de Consultare mprumuturi Curente Proprii (On-line) o Servicii de Consultare Istoric mprumut Propriu (On-line) o Servicii de Rezervare i monitorizare rezervri proprii(On-line) o Servicii de Forum i Wiki (On-line) o Servicii de Update (On-line) Nivel utilizator autentificat - Administrator o Servicii de Management al Conturilor de Utilizatori (On-line) o Servicii de Administrare Portal (Site-uri Biblioteci, Forum, Wiki, Info) (On-line) o Servicii de Monitorizare i Updatare Portal (On-line)

3 Specificarea cerinelor
Dup cum am observat din expunerea anterioar a ctorva sisteme disponibile, am observat deja cele mai importante operaii pe care mi le propun spre implementare. Iat o list succint: 1. Uurina n utilizare. Sistemul s nu fie greoi de neles i s modeleze ct mai apropiat situaiile reale. Interfaa grafic s fie intuitiv organizat pe meniuri, submeniuri i tab-uri. 2. Fr bug-uri(defecte). Este foarte important s oferim mai nti stabilitate i corectitudine sistemului dect s-l cretem foarte mult i s descoperim multe erori abia dup aceea cnd sistemul a ajuns n exploatare. 3. Afiare informaii de status asupra numrului curent resurse mprumutate precum i resursele crora le-a expirat mprumutul. Aceste informaii vor fi prezente pe fiecare pagin web a programului.

13

4. Adugare, modificare, tergere resurs. O resurs poate fi de mai multe feluri(ex: carte, diafilm, obiect fizic de studiu, etc). Pentru a anticipa ns doar ntr-o mic msur viitoare informaii ce vor descrie o resurs vom ataa fiecrei resurse un cmp(informaie) suplimentar (coloana observaii). 5. Adugare, modificare, tergere cititor. 6. Adugare, modificare, tergere domeniu. Un domeniu identific un grup generic din care fac parte resurse ce au caracteristici comune (ex: domeniul informatic va conine numai cri de informatic). 7. Adugare, modificare, tergere autor. Nu este obligatoriu ca toate resursele s aib autor. Pot exista i scrieri anonime sau resurse de studiu fr un autor bine definit. 8. Cutare folosind doar o parte din informaia cutat. Evident se vor afia toate nregistrrile care conin irul de caractere introdus. Cutare dup numele unei resurse(ex: e de ajuns s introducem doar o parte din numele titlului unei cri). Pentru cutarea unui cititor se specific o parte din nume. Pentru cutarea unui autor se specific o parte din nume. Pentru cutarea unui domeniu se specific o parte din numele domeniului. 9. Vizualizare a informaiei stocate n baza de date. Se vor afia toate resursele, autorii, cititorii, domeniile. Aceasta este o funcionalitate de ajutor n faza de testare mai mult ntruct dac baza de date conine zeci de mii de nregistrri e posibil blocarea browserului n momentul cnd vizualizm un numr aa mare de informaie. 10. mprumut. Se poate mprumuta o resurs. La mprumutare se vor specifica pe lng identificatorul cititorului, resursei, numrul de exemplare i data de sfrit pn la care resursa trebuie returnat. Data de nceput se consider data curent la care s-a fcut mprumutul. 11. Returnare. n momentul n care o carte este returnat ea trebuie tears din tabela ce reine resursele mprumutate. Returnarea este permis numai dac se returneaz exact numrul de exemplare mprumutate. 12. Raport cu crile figureaz n continuare ca mprumutate pe o perioad dat. Se va afia ntr-o seciune mprumuturile neexpirate i ntr-alt seciune mprumuturile expirate. Spre exemplu un bibliotecar dorete s afle ce resurse, crui cititor i cnd le-a mprumutat pentru a-i face o idee asupra cror resurse trebuiesc returnate urgent. 13. Raportul de afiare cri dup domenii va permite selectarea unui nume de domeniu i afiarea tuturor resurselor din acest domeniu. Sistemul va fi instalat pe calculatorul local fie pe un site web. n cazul web efectuarea accesului pe baza de user i parola ar bloca eventualele accesri ilegale. Sistemul este gndit s fie single user. Adic la un moment dat este indicat s fie maxim un utilizator care l folosete, aceasta ntruct baza de date din spate nu e de tip 14

tranzacional. O baz de date ce permite tranzacii garanteaz integritatea datelor. Ex: tranzacie: <begin transaction> <citeste inregistrarea X care mi spune c exist o nregistrare Y> (1) <citeste Y> (2) <end transaction (commit)> Daca nu ar fi o trazacie este posibil ca dup (1) o alt operaie efectuat de alt user s terg Y i atunci presupunerea logic ca am un Y executat la pasul (2) nu ar mai fi valid. Totodat putem grupa mai multe succesiuni de comenzi SQL ntr-o tranzacie. Dac de exemplu se ia curentul electric n mijlocul tranzaciei, fiierul de log al tranzaciei care pstreaz vechile valori ce au fost modificate nu va fi golit (fiindc tranzactia nu s-a sfrit) iar cnd curentul va reveni observnd c a fost ntrerupt va pune napoi vechile valori(rollback). Practic tranzacia ori se execut toat ori deloc(nu exist jumti de msur) astfel ducnd la o mai bun integritate a datelor stocate.

4 Proiectarea sistemului
4.1 Diagrama bazei de date
Aceasta e baza de date are 6 tabele:

Tabela autori se observ c are 8 nregistrri(autori) i 3 coloane(idAutor, nume i observaii).

Se considera idAutor ca identificnd unic un autor. Nota: I: De nu poate fi folosit numele ca i cheie primar (identificator unic care identific o nregistrare)?

15

R: Pentru c pot exista cazuri cnd pe doi autori i cheam la fel, aadar se mai adaug o coloana idAutor care se autoincrementeaza (tipul de date BIGINT cu caracteristicile NOT NULL i AUTO_INCREMENT) la fiecare inserare i deci va fi unic pentru fiecare autor. Totodat i n celelalte tabele vom avea aceast coloana idTIP care identific unic o nregistrare de un anume tip(autor, domeniu, cititor, resurs). Nota: De fapt cnd ne vom referenia din tabela X o nregistrare din tabela Y vom utiliza cheia primar a tabelei Y (adic idTIP). Astfel se spune c cheia primar a lui Y este cheie extern pentru X. Ex: Mai jos tabela de mprumuturi ine doar identificatorii cititorului i al resursei. Atenie: Motorul de baza MyISAM al bazei de date MySQL nu permite integritatea referenial pentru chei externe aadar spre exemplu cand tergem nregistrarea ce conine cheia primar (idTip) va trebui s verificm manual prin comenzi SQL dac nu cumva e refereniat din alte tabele (ex: nu putem terge un autor dac el este refereniat de resurse care nc nu au fost terse). Tabela cititori:

Tabela domenii:

Tabela resurse:

Dupa cum se observ tabela resurse conine 4 cri ns nici una nu specific i cine a scris-o. I: De ce? R: Evident am putea specifica numele autorului ntr-o alt coloan ns dac sunt mai muli autori cu acelai nume nu am ti cine cu adevarat a scris-o. Am putea s folosim valorile idAutor din tabela autori ns de ce cartea(resursa) a fost scrisa de mai muli autori ne-ar trebui mai multe coloane iar acest lucru nu l-am putea cunoate de la nceput(cnd sa creat tabela). Soluia e s mai creem o tabela autoriResurs care s mapeze identificatorii de cri la identificatorii de autori. Tabela autoriResurs: 16

are 4 nregistrri i ne spune de exemplu c resursa cu id-ul 3 a fos scris de autorul 4. Evident mai putem introduce o nregistrare de genul (3 , 5) care ne-ar spune c resursa cu id-ul 3 a fost scris n comun i de autorul cu id-ul 5. Din cte se observ acum lucrul cu numere(identificatori) ocup totodat i mai puin spaiu pe hard disc dect dac am lucra cu nume de autori sau titluri de resurse pe lng faptul c poate identifica unic un autor sau resursa n caz c exist doi cu acelai nume/titlu. Tabela mprumuturi:

Sunt doua mprumuturi curente. Primul mprumut a fost efectuat de ctre cititorul cu id-ul 2 (adic de Ionescu Camelia) asupra resursei 1 (adic cartea Poezii) ntr-un 1 exemplar, ncepnd la data de 201002(februarie)-09 i trebuie s returneze cartea pn la 2010-03-10. Poi vedea toate aceste informaii ne putem loga la http://pmadb2.xhost.ro/ cu user mgradinaru_xho01' i parola 's1wOX5'.

5 Implementare
5.1

Alegere tehnologii

Am ales ca limbaj de programare PHP si MySQL ca program de management al bazelor de date care respect standardul SQL(Structured Query Language). Desemenea pentru paginile web care reprezint interfaa grafic am folosit limbajul HTML (Hyper Text Markup Language) i CSS(Cascading Style Sheets) pentru adugarea de proprieti vizuale suplimentare elementelor HTML(a se vedea fiierul style.css din codul surs).

5.1.1

Scurt prezentare HTML

HTML, vine de la HyperText Markup Language, este limbajul predominant de markup(marcare) pentru paginile web. Acesta ofer un mijloc de a crea documente structurate prin desemnarea semanticii structurale pentru text cum ar fi titluri, paragrafe, liste, etc precum i pentru link-uri, citate, precum i alte elemente. Acesta permite imagini i obiecte care urmeaz s fie ncorporate i pot fi folosite pentru a crea formulare interactive. Este scris n form de elemente HTML compuse din "tag-uri" nconjurate de 17

paranteze unghi n cadrul coninutului paginii web. Iat mai jos o scurta list cu cele mai folosite coduri HTML. Principalele elemente n HTML sumt <html>, <head>, <title> i <body>. Iat i un exemplu simplu de contruire a unei pagini HTML. Un document HTML ntotdeauna va ncepe i va termina cu un tag <html> i respectiv </html>. Aceasta este structura standard a unui HTML. Elementul <head> este cel care urmeaz fiind situat ntre html i body. "Head" nu are nici o functie vizibil ns poate oferi browser-ului informaii foarte utile. Se pot insera aici printre altele coduri Javascript sau CSS. Tag-ul title se pune nuntrul celui de head. ntre cele dou tag-uri title (<title> si </title>) va putea fi vizualizat ca i numele browser-ului, de obicei n partea din stnga sus. Elementul body este cel care definete nceperea coninutului paginii propriu-zise (titluri, paragrafuri, fotografii, muzic i orice altceva).
<html> <head> <title>Sistem de gestionare carti.</title> <link type="text/css" rel="stylesheet" href="style.css"> </head> <body> <p>Salut!</p> </body> </html>

Tag-ul paragraph:
<p>Acesta este un simplu paragraf in HTML</p> <p align="left">Acesta este un paragraf aliniat la stanga</p>

Pe langa atributul align putem folosi pentru a alinia elementele HTML urmtoarele valori: left, right center si justify. Tagurile header(cap) <h1>Acesta este tag-ul HTML pentru cel mai mare titlu</h1> Alte tipuri de titluri in HTML: h2, h3, h4, h5, h6. Unde h1 este cel mai mare i h6 cel mai mic. Tag-ul linebreak(ntrerupere de linie) <br /> este un salt n linie n HTML - spaiul ntre br i slash(/) face diferena ntre cod valid XHTML i un cod dezordonat. Tag-ul linie orizontal <hr /> se folosete pentru a desena o linie orizontal n HTML - spaiul ntre hr i slesh face diferena ntre cod valid XHTML i un cod dezordonat. Liste O lista simpl n HTML este de forma:
<ol> <li>Primul element HTML din lista </li> <li>Al doilea element HTML din lista</li> <li>Al treilea element HTML din lista</li> </ol>

Lista de mai sus este o list ordonat. Alte tipuri de liste n HTML sunt liste neordonate i lista de definiii. 18

Link-uri html
<a href="mprumutare.php">mprumutare</a> <a href="http://www.google.ro/" title="Google" target="_blank" >Pagina Google</a> <a href="#top">Mergi la nceput</a> (<a name="top"></a>) <a href="mailto:admin@exemplu.com" >Nelmuriri aici</a> <a href="http://www.google.com/" title="Google target="_blank" ><img src="http://www.google.ro/intl/en_com/images/logo_plain.png" alt="Imagine Google" /></a>

Au fost exemplificate mai sus un link normal n HTML, un link folosit pentru a lega doua seciuni n aceeai pagin, un link email i un link imagine. Tag-ul imagine (<img>)
<img border="0" alt="Home page" src="book1.gif" width="125" height="100">

Este recomandat alinierea cu ajutorul CSS. La fel i stabilirea dimensiunilor imaginii. Ceea ce ar transforma codul HTML de mai sus n:
<img src="img//html_image.jpg" alt="Html Image" style="width:100px; height:50px; margin:auto;" />

Formulare (tag-ul <form>), cmpuri text, cmpuri radio(una din mai multe opiuni) i cmpuri combobox(desfurator) Am adugat mai jos codul HTML folosit pentru a crea un simplu formular. Acesta este doar formularul HTML folosit de user pentru a introduce informaia dorit. Nu uita c pentru procesarea acestor informaii, odat ce se face click pe butonul submit al formularului HTML. Informaia va fi procesat de ctre un fisier.php i eventual urcat n baza de date sau trimis pe email.
<form action="inserare.php?tip=resursa" method="get"> <p><input type="text" name="titlu" maxlength="100" size="50"/></p> <p><input type="text" name="autor" maxlength="200" size="25"/></p> <p><input type="text" name="anAparitie" maxlength="10" size="3"/></p> <p><input type="text" name="editura" maxlength="50" size="25"/></p> <p><input type="text" name="nrExemplare" maxlength="3" size="3"/></p> <p><input type="text" name="idDomeniu" maxlength="7" size="3"/></p> <p><textarea cols="38" rows="3" name="observatii"></textarea></p><br> <input type="hidden" name="tip" value="resursa"/> <input type="submit" value="Adauga"/> </form>

Iat mai jos un tag care genereaz butonul combobox afiat pentru selectarea domeniului. Am inclus i codul php pentru a observa felul n care putem ntreptrunde cod HTML cu cod PHP.
<form action="raport2.php" method="get"> <p>Nume domeniu: <select name="nume"> <?php $sql = "select * from domenii"; $rezultat = mysql_query($sql); $nrDomenii = mysql_num_rows($rezultat); for ($i=0; $i <$nrDomenii; $i++) { $row = mysql_fetch_array($rezultat); echo '<option value="'.$row['idDomeniu'].'">'.$row['nume'].'</option>';

19

} ?> </select> </p> </br> <input type="submit" value="Afiseaza"/> </form>

Tabele Structura de baz a unui tabel n HTML este urmtoarea..


<table> <tr> <th>Column 1</th> <th>Column 2</th> </tr> <tr> <td>Row 1 Cell 1</td> <td>Row 1 Cell 2</td> </tr> <tr> <td>Row 2 Cell 1</td> <td>Row 2 Cell 2</td> </tr> </table>

Text ngroat (Bold)


<b>text ngrosat n html</b> <strong>text ngroat n html</strong>

5.1.2 Scurta prezentare PHP


PHP este prescurtarea de la Hypertext PreProcessor. Spre deosebire de paginile HTML care puteau fi verificate i pe calculatorul local paginile PHP nu pot fi verificate dect dac sunt gzduite pe un server web care are instalat PHP. Cand accesm o pagin HTML serverul care o gzduiete trimite pagina HTML ctre browser spre afiare. n cazul unei pagini PHP serverul citete codul PHP, l interpreteaz i genereaz dinamic pagina HTML care este trimis browserului spre afiare. Acesta este motivul pentru care utilizatorii folosesc PHP pentru construirea unor pagini cu coninut dinamic. Fiierele PHP au extensia php. Putei scrie astfel de fiiere cu Notepad sau cel mai indicat cu un editor specializat, de exemplu Zend Studio care va indica i numrul liniilor, lucru util la depanarea scripturilor. Verificai c nu avei extensiile ascunse (My Computer -> Tools -> Folder Options -> View -> debifai Hide extensions for known file types). Pentru a putea crea fiiere php dai clic dreapta New -> Text Document, apoi l redenumii nume.php. Cnd PHP-ul parcurge un fiier de fapt "citete" textul pn cnd ntlnete una din etichetele speciale care-i spun s nceap s interpreteze textul ca pe cod PHP. Se execut codul pn cnd este ntlnit eticheta de nchidere. Apoi se "citete" din nou textul mai 20

departe. Acesta este motivul pentru care se poate aduga cod PHP n interiorul HTMLului. Important:

nchiderea unui rnd se face obligatoriu cu caracterul ; numele funciilor nu sunt Case Sensitive (nu se face diferena ntre utilizarea literelor mari sau mici) numele variabilelor sunt Case Sensitive (se face diferena ntre utilizarea literelor mari sau mici) ghilimelele se folosesc pereche "..." sau '...', folosirea lor "...' sau '..." constituie o eroare

Codul PHP este delimitat de unul din urmtoarele seturi de etichete de deschidere i nchidere: <?php ?> etichete recomandate Exemplu: cel mai simplu script PHP este:
<?php echo "Acesta este un script PHP"; ?>

Daca vei verifica funcionarea acestui script pe un server vei vedea c este afiat textul delimitat de ghilimele. Funcia echo este folosit pentru afiarea informaiilor delimitate de ghilimele. Nu uitai s nchidei rndul cu ;. Similar funciei echo este funcia print. n situaia n care scriptul nu este scris corect PHP-ul va afia eroarea indicndu-va i locul unde aceasta apare. Erorile sunt afiate doar dac serverul este setat corespunzator (n php.ini este setat display_errors=On si error_reporting=E_ALL). Exemplu: n interiorul scriptului putei insera i etichete HTML
<?php echo "Acesta este un script <b>PHP</b><br>care conine i etichete HTML"; ?>

Exemplu: fisierul PHP poate conine ntre etichetele <html> i </html> blocuri PHP delimitate de <?php ?>
<html> <head><title>Exemplu0_3</title> </head> <body> Bloc HTML<br> <?php echo "Bloc PHP"; ?> </body> </html>

In PHP sunt trei metode prin care se poate aduga un comentariu, evident neafiat n browser, cu scopul de a aduga informaii necesare programatorului. Tot ce urmeaz dup caracterele // sau # este considerat comentariu. De exemplu:
// Urmeaza un comentariu n PHP

21

# Urmeaza un comentariu n PHP

Utilizare:
echo "test"; // browser-ul va afia test echo "proba"; # browser-ul va afia prob

Un comentariu format din mai multe linii este ncadrat de /* i */. De exemplu:
/* Comentariul in PHP scris pe dou linii */

Acest tip de comentariu poate fi folosit i pentru ignorarea unor blocuri PHP. n exemplul urmtor browserul va afia doar proba
/* echo "Tutorial"; echo "PHP"; */ echo "proba";

Structurile de control if, else, for, while sunt asemntoare cu cele din alte limbaje foarte cunoscute cum ar fi C sau Java. Variabila este un container de date care poart un nume i i se poate atribui o valoare care poate fi modificat de mai multe ori sau salvat ntr-o baz de date. Variabilele nu au un tip asociat (ntreg, ir de caractere, dat) ci pot stoca de-a lungul scriptului n care se afl valori de tipuri diferite. Numele dat variabilei ncepe cu simbolul $ urmat de orice liter mic (a-z) sau mare (A-Z) sau cu caracterul _. Exemplu: atribuim variabilei $program valoarea PHP i apoi o tiprim:
<?php $program="PHP"; echo "Limbajul".$program; concatenare a $program=1; ?> //ia ca valoare un ir de caractere. // punctual . este folosit ca operator de // doua string-uri. //ia ca valoare numrul ntreg 1.

irurile de caractere se pun ntre ghilimele sau apostrof(vezi ex anterior). Diferena o constituie faptul c n sirurile(string) ncadrate de ghilimele putem folosi i nume de variabile $variabila iar acestea vor fi inlocuite cu valoarea lor reala n string-ul rezultat nainte de efectuarea oricrei operaii pe acel ir. Valorile introduce de utilizator n pagina web sunt trimise ctre server i accesibile PHP folosind variabila global $_GET. Astfel pentru a accesa numele cititorului transmis la inserarea unui cititor se va folosi: $_GET[nume]. Din cte se observ $_GET este o variabil de tip tablou asociativ (permite ca indeci numere ntregi positive i iruri de character) iar index-ul ir nume trebuie s fie acelai cu valoarea atributului name din tag-ul html <input> de tip text corespunztor.

5.1.3

Scurta prezentare SQL (Structured Query Language)

Bazele de date sunt modaliti de a stoca datele, pot fi formate dintr-un fiier sau mai multe fiiere. Acestea sunt gestionate de sisteme de gestiune a bazelor de date (SGBD). Fiecare baz de date este format din mai multe tabele. La rndul sau fiecare 22

tabel este format din mai multe coloane identificate printr-un nume unic n tabel. Fiecare coloan poate conine diferite tipuri de date variind de la : numere ntregi, numere reale, iruri de caractere, iruri binare i date completate automat. Datele sunt stocate n tabele aranjate pe mai multe linii. n discuia despre coloane apare denumirea de cheie primar. Fiecare tabel trebuie s aib o astfel de coloana care s identifice unic fiecare linie din tabel. NOTA: n baza mea de date am decis ca numele nu poate identifica unic un cititor (pot exista mai muli cu acelai nume) sau o resurs (pot exista mai multe cri cu acelai titlu) i de aceea cheia primar este o coloana de tip AUTO_INCREMENT ce stocheaz ntregi i este incrementat la fiecare inserare automat astfel c garanteaz unicitatea. Totodata dac se terge o nregistrare valoare cheii nu este refolosit ntruct unicitatea e garantat i n timp i o refolosire ar nclca principiul integritii datelor. Tipuri de date Aa cum am spus ntr-o coloan nu pot exista dect date de un singur tip. Principale tipuri de date disponibile pot fi ncadrate n urmatoarele categorii : tipuri de date sir ( CHAR , VARCHAR, TEXT ), tipuri de date numerice ( BIT, DECIMAL, FLOAT, INT ), tipuri de date data/ora ( DATE, DATETIME, TIME ) i tipuri de date binare ( BINARY, VARBINARY ). Datele de tip ir pot fi limitate la o anumit lungime maxim, n cazul tipurilor de date CHAR(n) i VARCHAR(n) unde n este lungimea maxim sau nelimitate n cazul utilizarii tipului TEXT. Este recomandat ca s fie utilizat tipul cel care ofer facilitile cele mai apropiate de cele dorite, n special din motive de performan, programele SGBD tiind s fac optimizri de stocare i acces. Ceea ce vreau s spun e ca pentru a reine un numr de telefon este absurd s se foloseasca un tip de date TEXT pentru c se tie c lungimea acestuia nu va depi niciodat 15 caractere fiind suficient un CHAR(15). La utilizarea datelor de tip ir, valorile trebuie puse ntre ghilimele. Fiecare cmp poate s dein i o valoare special NULL, care desemneaz un cmp fr informaie. Crearea unui tabel Exist dou modaliti de a creea tabele. Prima presupune folosirea unui interfee grafice pus la dispoziie de majoritatea programelor SGBD sau se poate folosi direct limbajul SQL. Comanda care face acest lucru este CREATE TABLE. Sintaxa ei poate fi diferit n funcie de SGBD-ul folosit, ns majoritatea versiunilor folosesc o implementare standard. Exemplu de utilizare : CREATE TABLE `autoriResursa` ( `idResursa` bigint(20) NOT NULL,

23

`idAutor` bigint(20) NOT NULL, PRIMARY KEY (`idResursa`,`idAutor`) ) COMMENT='O carte poate avea mai muli autori deci folosim o tabel.'; Se poate observa c numele tabelului trebuie specificat imediat dup instruciune urmat de o list de parametrii de form nume_coloana, tip i NOT NULL/NULL. Sintaxa acestei funcii este dependena de programul SGBD folosit. Modificarea unui tabel Prin modificarea unui tabel m refer la operaii de adugare sau de tergere a unor coloane. Astfel de operaii apar destul de rar i trebuie s avei grij n faza de design ca s anticipai necesiti viitoare astfel nct s nu fii nevoit s apelai la aceste funcii. Funcia pe care o vom folosi se numete ALTER TABLE. Exemplu de utilizare: ALTER TABLE domenii ADD observaii CHAR(200); sau ALTER TABLE domenii DROP COLUMN observaii; Aceast funcie trebuie utilizat cu mare atenie pentru c datele nu pot fi recuperate. V recomand s realizai copii de siguran nainte. tergerea tabelelor tergerea unui tabel este o operaie destul de rar ntlnit. Se utilizeaz funcia DROP TABLE. Exemplu: DROP TABLE domenii;

Funcia trebuie utilizat cu atenie deoarece datele nu pot fi recuperate. Inserarea datelor Dupa funcia SELECT pe care o vom analiza imediat funcia INSERT INTO este una dintre cele mai folosite. Aceasta permite inserarea ntr-un tabel a unei linii complete sau pariale. Exemplu de utilizare : INSERT INTO `cititori` VALUES (NULL, 'Popescu Ionel', '1751478453459', 'Crizantemelor, nr 5, Alba Iulia', '0740610123', 'popescuionel@yahoo.com', ''); Nota: Am folosit valoarea NULL pentru coloana cheie primar de tip AUTO_INCREMENT ntruct nu putem ti urmtoarea valoare, ea fiind calculate de baza de date ca Maximul de pe acea coloana + 1 i introdus automat. 24

Folosind aceeai sintax se pot insera i rnduri pariale preciznd n lista de coloane doar pe cele dorite. Coloanele omise trebuie s poat fi NULL sau s aib o valoarea prestabilit, altfel programul SGBD va genera un mesaj de eroare. Actualizarea datelor Pentru actualizarea datelor se foloseste funcia UPDATE n combinaie cu o clauz WHERE. Aceast clauz identific linia sau liniile care vor fi actualizate. Sintaxa pentru clauza WHERE este urmtoarea : WHERE expresie [ AND/OR expresie] unde expresia este de forma : nume_coloan, operator, valoare. Utilizarea acestei clauze este esenial altfel fiind modificate toate datele din tabel. Operatorii clauzei WHERE sunt : Operator Descriere = Egalitate <> Diferit de != Diferit de < Mai mic <= Mai mic sau egal !< Nu mai mic > Mai mare >= Mai mare sau egal !> Nu mai mare BETWEEN ntre doua valori IS NULL Este o valoare NULL Pentru a putea utiliza funcia de actualizare este necesar ca n tabel s existe un cmp cu valoare unic n tot tabelul care s poat fi indicat printr-o clauza WHERE. Exemplu de utilizare : UPDATE resurse SET titlu='Poezii', anApariie=1970, idDomeniu=2, observaii='observaii' WHERE idResursa=$id" tergera datelor Pentru a terge o linie sau mai multe linii dintr-un fiier utilizm funcia DELETE FROM mpreuna cu o clauz WHERE. ATENIE !! omiterea clauzei WHERE poate avea consecine dezastruoase, golirea tabelului. Exemplu de utilizare la returnarea unei resurse: DELETE FROM from mprumuturi WHERE idResursa='2' AND idCititor='3' AND nrExemplare='1' Operaiile de actualizare i de tergere trebuie tratate cu foarte mare atenie pentru c folosite greit duc la pierderi de date. Din acest punct de vedere v recomand s facei un back-up naintea unei astfel de operaii. Regsirea datelor 25 editura='Coresi', nrExemplare=5,

Am ajuns la cea mai frecvent operaie executat asupra bazelor de date, operaia de regsire a datelor. Funcia folosit este SELECT nume_coloan FROM tabel. Este una dintre cele mai folosite funcii. I se poate aduga la sfrit o clauz WHEREB astfel nct s regseasc doar informaiile care ndeplinesc o anumit condiie. Exemplu utilizare atunci cnd se dorete aflarea tuturor mprumuturilor expirate: SELECT * ( regsete toate coloanele ) FROM mprumuturi WHERE sfrit<curdate() Aceasta este funcia utilizat cel mai frecvent. Cea mai bun modalitate de a nva funciile este s le aplicm. Putem folosi pentru aceasta PhpMySQL care ofer un dialog n care putem introduce comanda i s o executm.

5.2

Implementare

Pentru implementare am folosit editorul Notepad pentru scrierea codului HTML i PHP precum i PhpMyAdmin pentru operaiile cu baz de date (creare/modificare tabele i testare comenzi SQL). Am ncercat s fac un meniu ct mai intuitiv.

26

Codul de creare al meniului este chemat din index.php care de altfel este prima pagina ncrcat implicit de browser atunci cnd deschidem adresa.
<?php include("header.php"); include("footer.php"); ?>

Functia include include efectiv alt cod php din alte fiiere. Fiierul header.php conine aadar codul HTML care structureaz meniul i codul de conexiune la baza de date. Din acest motiv header.php va fi inclus din fiecare fiier .php pentru ca astfel toate paginile s aib aspectul primeia(meniu inclus) i conexiunea cu baza de date s fie deja realizat. header.php:
<?php $server = 'db1.xhost.ro'; //adresa serverul de baza de date. // conectarea folosid userul si parola stabilite la crearea contului. @$db = mysql_connect($server, 'mgradinaru_xho01', 's1wOX5'); if (!$db) { echo 'Eroare: Nu s-a putut conecta la baza de date.'; exit; } mysql_select_db('mgradinaru_xhost_ro01'); // selectarea bazei de date aferente. ?> <html> <head> <title> Sistem de gestionare carti.</title> <link type="text/css" rel="stylesheet" href="style.css"> </head> <body> <!-- Design-ul este inspirat de catre http://www.microbion.co.uk/index.htm --> <div id="wrapper"> <div id="topbar">

27

<table width="100%" cellspacing="0" cellpadding="0" border="0" id="topbartable"> <tbody><tr> <td class="lefttext"></td> <td class="righttext"><a href="index.php">Home</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;</td> </tr> </tbody></table> </div> <div id="sidebar"> <img border="0" alt="Home page" src="book1.gif" width="125" height="100"> <br><br> <h4>MENIU </h4> <ul> <li class="li_top"><a href="imprumutare.php">Imprumutare</a></li> <li class="li_top"><a href="returnare.php">Returnare</a></li> <li class="li_top"><a href="cautare.php">Cautare resursa/domeniu/cititor.</a></li> <li class="li_top"><a href="adaugareResursa.php">Adaugare resursa/domeniu/cititor</a></li> <li class="li_top"><a href="modificare.php">Modificare resursa/domeniu/cititor</a></li> <li class="li_top"><a href="listare.php">Vizualizare</a></li> <li class="li_top"><a href="raport1.php">Raport cu cartile figurand ca imprumutate pe o perioada data.</a></li> <li class="li_top"><a href="raport2.php">Raport afisare carti dupa domenii.</a></li> </ul> </div> <div id="mainpage"> <p> &nbsp;&nbsp;&nbsp;Numar total resurse imprumutate: <?php $cerere = "select * from imprumuturi"; $rezultat = mysql_query($cerere); echo mysql_num_rows($rezultat); ?> <br> &nbsp;&nbsp;&nbsp;Numar carti carora le-a expirat imprumutul: <?php $cerere = "select * from imprumuturi where sfarsit<curdate()"; $rezultat = mysql_query($cerere); echo mysql_num_rows($rezultat); ?> </p> <p class="horizline">&nbsp;</p> <tr>

footer.php
</div> </div> </body> </html>

Iat felul n care se implementeaz raportul de afiare resurse dup domenii. Acelai script realizeaz att afiarea formularului ce permite selectarea domeniului(cod albastru) ct i codul care afieaz rezultate(codul rou). Diferena asupra crei pri este executat este facut prin testarea parametrului nume (codul violet) care este trimis de formular. Practic dac nu este prezent nu s-a apsat Afieaz n formular deci mai nti se va afia 28

forumularul altfel dac este prezent nseamn c s-a apsat Afieaz i putem afia rezultatele raportului.
<?php include("header.php"); if (!$_GET['nume']) { //Daca nu exista parametrul 'nume' se afiseaza formularul; ?> <form action="raport2.php" method="get"> <p>Nume domeniu: <select name="nume"> <?php $sql = "select * from domenii"; $rezultat = mysql_query($sql); $nrDomenii = mysql_num_rows($rezultat); for ($i=0; $i <$nrDomenii; $i++) { $row = mysql_fetch_array($rezultat); echo '<option value="'.$row['idDomeniu'].'">'. $row['nume'].'</option>'; } ?> </select> </p> </br> <input type="submit" value="Afiseaza"/> </form> <?php exit(); } $idDomeniu = $_GET['nume']; $sql = "select * from resurse where idDomeniu=$idDomeniu"; $rezultat = mysql_query($sql); $nrResurse = mysql_num_rows($rezultat); if ($nrResurse==0) { echo '<p>Nu s-au gasit resurse in acest domeniu.</p>'; exit(); } else { echo "<p>S-au gasit $nrResurse rezultat(e).</p>"; } for ($i=0; $i <$nrResurse; $i++) { $row = mysql_fetch_array($rezultat); $idResursa = $row['idResursa']; echo echo echo echo echo echo } include("footer.php"); ?> '<p>Identificator resursa: '.$row['idResursa'].'</p>'; '<p>Titlu: '.$row['titlu'].'</p>'; '<p>An: '.$row['anAparitie'].'</p>'; '<p>Editura: '.$row['editura'].'</p>'; '<p>Numar exemplare: '.$row['nrExemplare'].'</p>'; '<p>Observatii: '.$row['observatii'].'</p>';

echo '<p class="horizline">&nbsp;</p> <tr>';

29

5.3

Descriere funcionaliti i testare

Funcionalitiile principale pot fi accesate din meniul principal aflat n partea stng. Acesta este prezent n fiecare pagin a site-ului astfel c este mereu la ndemn.

n partea superioar sunt afiate cteva informaii de stare care sunt de interes i anume: Numrul total de resurse mprumutate i numrul de resurse crora le-a expirat mprumutul i nu au fost returnate.

5.3.1

Adugare resurs, autor, cititor, domeniu nou

Adugarea unei resurse presupune mai nti adugarea autorilor care au scris-o precum i a domeniului din care face parte. Totui nu este obligatoriu ca toate resursele s aib autor. Pot exista i scrieri anonime sau resurse de studiu fr un autor bine definit. Iat mai jos cum se poate aduga un cititor dup ce s-a fcut click pe tab-ul Cititor:

30

n caz de succes se va afia apoi textul: S-a introdus 1 nregistrare..

5.3.1

Modificare/tergere resurs, autor, cititor, domeniu

Modificarea i tergerea sunt grupate mpreun. Pentru a selecta operaia dorit i asupra crui tip de obiect se va efectua se bifeaz cte un radio button din cele dou grupuri. Nota: Se va introduce identificatorul obiectului i nu o parte din numele su. Pentru a afla acest identificator se poate folosi anterior funcionalitatea de cutare.

Dac este gsit obiectul cu identificatorul dat i se afieaz datele n cmpuri text care sunt modificabile. Dupa modificare se face click pe Modific.

31

Dac nu exist nici un obiect cu identificatorul dat atunci se va ntoarce mesajul: Identificatorul dat nu a fost gsit. Dac se ncearc tergerea unui cititor ce are mprumutate cri se afieaz: Cititorul nu poate fi ters ntruct figureaz ca avnd mprumutate resurse. Trebuie mai nti returnate resursele i apoi poate fi ters. Dac se ncearc tergerea unui autor care a scris mai multe resurse ce nc nu au fost terse se va afia: Autorul nu poate fi ters. tergei mai nti resursele care sunt scrise de acest autor.

5.3.1

Cutare

Pentru operaia de cutare se pot introduce i numai frnturi din titlu, nume, etc. Evident trebuie specificat i tipul obiectului cutat prin selectarea un buton radio.

n cazul n care sunt mai multe obiecte ce conin acest subir atunci vor fi afiate toate. Exemplu cutarea dup irul Poezii ntoarce numrul total de rezultate S-au gsit 2 rezultate:

32

5.3.2

mprumutare

La mprumutarea unei cri trebuie specificate titlul resursei sau o parte din el, numele cititorului sau o parte din el, numrul de exemplare i data de sfrit.

n cazul n care exist mai multe resurse cu acelai nume atunci se va afia un dialog suplimentar pentru a alege resursa dorit fiind specificat i identificatorul (pentru mai multe detalii putei folosi funcionalitatea de cutare). n cazul n care se dorete mprumutarea de mai multe exemplare dect disponibile un mesaj corespunztor va fi afiat. 33

n caz de succes se va afia mesajul Resursa a fost mprumutat..

5.3.3 Returnare
Pentru ca o resurs s fie returnat ea trebuie mai nti s fie mprumutat n caz contrar un mesaj corespunzator va fi afiat.

Se pot introduce i pri din nume sau titlu i un dialog suplimentar va stabili care resurs va fi mprumutat n caz c exist dou sau mai multe cu acelai nume. Daca nu se introduce numrul corect de exemplare mprumutate se va afia mesajul: Resursa nu a fost mprumutat anterior sau n numrul de exemplare specificat.

n caz de succes se va afia mesajul 1 resurs mprumutat.

5.3.4 Vizualizare
Este o funcionalitate care afieaz toate resursele, autorii, cititorii i domeniile. Este util n faza de testare cnd nu sunt introduse nc mii de nregistrri. n dreptul fiecrei resurse sunt afiai i autorii

34

5.3.5

Raport cu crile afiate dup domenii

Raportul de afiare dup domenii afieaz mpreun toate resursele ce aparin unui anumit domeniu. Se selecteaz domeniul i se d click pe butonul Afieaz:

nainte de afiare se specific i numrul de resurse din acel domeniu:

35

5.3.6

Raport cu crile mprumutate ntre o perioad dat

Raportul acesta va afia grupat toate crtile mprumutate n intervalul dat.

Dintr-o grup vor face parte resursele crora nc nu le-a expirat termenul de returnare i din cealalt cele crora le-a expirat termenul

36

6 Instalare
Programul poate fi instalat: pe un server web la o adresa de genul http://mgradinaru.xhost.ro. pe un calculator local i accesat la adresa 127.0.0.1. n ambele cazuri este nevoie de un browser (ex: Firefox sau Internet Explorer) pentru a accesa interfaa grafic(GUI Graphical User Interface).

37

6.1 Instalare pe un server web


Instalarea pe un server web presupune cumprarea unui domeniu de internet ex: www.bibliotecamea.ro precum i achitarea unei taxe lunare. Exist ns i alternativa unor site-uri web care ofer conturi gratuit pe serverele lor. Un astfel de site este www.xhost.ro. Iat descris mai jos un cont, accesarea bazei de date precum i uploadarea(ncrcarea) codului surs. Dup crearea unui cont nou se trece de etapa de login i se comand un pachet gratuit(click Comanda Pachet), la comandare se specific i numele domeniului adic: "ir_de_cuvinte_mpreunate.xhost.ro".

Fcnd click pe cuvntul Gratuit apare o descriere succint a domeniului gratuit: Panou administrare
Informatii Generale despre Cont Pachetul de Gazduire: Domenii: Subdomenii: Domenii Parcate: Baze de date: Spatiu Utilizat: Spatiu Utilizat de SQL: Spatiu Utilizat de FTP: Spatiu Utilizat de Email: Spatiu Liber: Banda Consumata: Conturi de Email: Nr. Email-uri Trimise: Forwarder-i de Email: Raspunsuri Automate: Conturi de FTP: GRATUIT 0/0 1/1 0 1/1 0 B / 400.00 MB 0 B / 30.00 MB 0 B / 355.00 MB 0 B / 15.00 MB 400.00 MB 0 B / 3.00 GB 1/1 0 / 50 0 0 1/1 Manager de Fisiere Baza de date Server Baza de Date Port Db User Baza de Date Parola Baza de Date Nume Baza de Date db1.xhost.ro 3306 mgradinaru_xho01 s1wOX5 mgradinaru_xhost_ro01 IE Ftp Client Server Ftp Port Ftp Nume Utilizator Ftp Parola Ftp mgradinaru.xhost.ro 21 mgradinaru_xho01 5Bu4jq841W5Gy [ Panou Administrare Incepatori] | Panou Administrare Avansati | Ftp

Nr. Utilizatori Baze de Date: 1 / 1

Informatii Generale despre Server

Manager Baza de Date

PhpMyAdmin

38

Hosts Info: Email Info: Db Info: Status Serviciu: Versiune Panou: Tema Interfata Panou : Documentatie Panou:

Apasa sa Vezi Apasa sa Vezi Apasa sa Vezi Apasa sa Vezi 1.0 Default Apasa sa Vezi

Email Server POP3 Port POP3 Utilizator POP3 Parola POP3 mail.xhost.ro 110 mgradinaru@xhost.ro GpUUtRNo96as

Web Mail

Squirrel Mail

Se observ cele mai importante detalii: - adresa domeniului: mgradinaru.xhost.ro - userul i parola pentru contul FTP(File Transfer Protocol) care permite folosirea unui program ce suport FTP pentru a transfera, modifica, terge fiiere(cod surs) pe cont. Se recomand a se folosi Managerul de Fiiere oferit (click pe el). - adresa serverului de baza de date MySql: db1.xhost.ro precum i userul i parola. Aceste informaii sunt folosite n cod n partea de realizare a conexiunii la baza de date (vezi fiierul header.php) - adresa PhpMyAdmin (click pe icoana din imagine sau http://pmadb2.xhost.ro/) care este un manager grafic ce permite efectuarea de operaii asupra bazei de date (creare/ modificare tabel, creare(adugare)/modificare nregistrri n tabele, export de tabele pentru a salva informaia coninut, vizualizare tabele, executare de comenzi SQL etc. Se folosete pentru logare user-ul mgradinaru_xho01 i parola s1wOX5 . Se pot observa n stnga toate tabelele, fiind selectat tabelul mprumuturi este afiat i structura de coloane i tipul lor(ex: bigint(20) numr ntreg maxim 20 cifre).

39

Fcnd click pe tab-ul Browse putem vizualiza/modifica i nregistrrile. Totodat odat cu fiecare operaie executat este afiat i corespunztorul comenzii n limbajul SQL. Se observ mai jos c vizualizarea este echivalent cu executarea comenzii SQL:
SELECT * FROM `mprumuturi` LIMIT 0 , 30

O alt operaie foarte des ntlnit este salvarea(backup) datelor existente astfel nct n cazul unei probleme fie ea eroare uman sau eroare fizic(nchiderea contului, coruperea datelor) se poate ncrca la loc baza de date. Salvarea se realizeaz selectnd baza de date(click n stnga pe numele mgradinaru_xhost_ro01) i din tabul Export se bifeaz Save as file face click pe Go.

40

Fisierul oferit spre download reproduce ntocmai toate datele din baza de date. Ex:
-----------phpMyAdmin SQL Dump version 2.6.1 http://www.phpmyadmin.net Host: db2.xhost.ro Generation Time: Mar 15, 2010 at 12:14 AM Server version: 5.0.70 PHP Version: 5.2.11-pl0-gentoo Database: `mgradinaru_xhost_ro01`

-- ---------------------------------------------------------- Table structure for table `autori` -CREATE TABLE `autori` ( `idAutor` bigint(20) NOT NULL auto_increment, `nume` varchar(50) NOT NULL, `observatii` varchar(200) default NULL, PRIMARY KEY (`idAutor`) ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ; --- Dumping data for table `autori` -INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO `autori` `autori` `autori` `autori` `autori` VALUES VALUES VALUES VALUES VALUES (1, (2, (3, (4, (5, 'Mihai Eminescu', NULL); 'George Cosbuc', NULL); 'Jack London', NULL); 'Vasile Alecsandri', NULL); 'Jules Verne', NULL);

41

INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT

INTO INTO INTO INTO INTO INTO INTO INTO INTO

`autori` `autori` `autori` `autori` `autori` `autori` `autori` `autori` `autori`

VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES

(6, 'Mihail Sadoveanu', NULL); (7, 'Andrei Bantas', NULL); (8, 'Grigore Gheba', NULL); (9, 'andrei stefan', ''); (10, 'angela gheorghiu', ''); (11, 'maria mihalciuc', ''); (12, 'ZOE PETRE', ''); (13, 'CORNELIU GROAPA', ''); (14, 'NIETZSCHE', '');

-- ---------------------------------------------------------- Table structure for table `autoriResursa` -CREATE TABLE `autoriResursa` ( `idResursa` bigint(20) NOT NULL, `idAutor` bigint(20) NOT NULL, PRIMARY KEY (`idResursa`,`idAutor`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='O carte poate avea mai multi autori deci folosim o tabela.'; --- Dumping data for table `autoriResursa` -INSERT INSERT INSERT INSERT INTO INTO INTO INTO `autoriResursa` `autoriResursa` `autoriResursa` `autoriResursa` VALUES VALUES VALUES VALUES (1, (2, (3, (4, 1); 5); 4); 7);

-- ---------------------------------------------------------- Table structure for table `cititori` -CREATE TABLE `cititori` ( `idCititor` bigint(20) NOT NULL auto_increment, `nume` varchar(50) NOT NULL, `CNP` varchar(13) NOT NULL, `adresa` varchar(100) NOT NULL, `tel` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, `observatii` varchar(200) NOT NULL, PRIMARY KEY (`idCititor`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; --- Dumping data for table `cititori` -INSERT INTO `cititori` VALUES (1, 'Popescu Ionel', '1751478453459', 'Crizantemelor, nr 5, Alba Iulia', '0740610123', 'popescuionel@yahoo.com', ''); INSERT INTO `cititori` VALUES (2, 'Ionescu Camelia', '1751478983459', 'Izlaz nr 3, Bucuresti', '0763155653', 'camelia@yahoo.com', ''); INSERT INTO `cititori` VALUES (3, 'Mihai Alexandru', '1761220180028', 'Bl. T Vladimirescu , bl. 4, ap. 7', '0740611123', 'alexmihai@yahoo.com', ''); INSERT INTO `cititori` VALUES (4, 'nicoara felicia', '2720326364263', 'tulcea', '075533333', '', ''); INSERT INTO `cititori` VALUES (5, 'mirela georgescu', '2650410362510', 'macin', '0240577777', '', ''); -- ---------------------------------------------------------- Table structure for table `domenii` --

42

CREATE TABLE `domenii` ( `idDomeniu` bigint(20) NOT NULL auto_increment, `nume` varchar(50) NOT NULL, PRIMARY KEY (`idDomeniu`) ) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ; --- Dumping data for table `domenii` -INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO `domenii` `domenii` `domenii` `domenii` `domenii` `domenii` `domenii` VALUES VALUES VALUES VALUES VALUES VALUES VALUES (1, 'Beletristica'); (9, 'filozofie'); (3, 'Dictionare'); (11, 'stiinte naturale'); (10, 'religie'); (8, 'tehnic'); (12, 'arte');

-- ---------------------------------------------------------- Table structure for table `imprumuturi` -CREATE TABLE `imprumuturi` ( `idCititor` bigint(20) NOT NULL, `idResursa` bigint(20) NOT NULL, `nrExemplare` smallint(6) NOT NULL, `inceput` date NOT NULL, `sfarsit` date NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; --- Dumping data for table `imprumuturi` -INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO `imprumuturi` `imprumuturi` `imprumuturi` `imprumuturi` `imprumuturi` VALUES VALUES VALUES VALUES VALUES (2, (3, (4, (4, (1, 1, 1, '2010-02-09', '2010-03-10'); 6, 1, '2010-03-30', '2010-03-31'); 5, 1, '2010-03-30', '2010-04-01'); 10, 1, '2010-03-30', '2010-03-31'); 9, 1, '2010-03-30', '2010-04-02');

-- ---------------------------------------------------------- Table structure for table `resurse` -CREATE TABLE `resurse` ( `idResursa` bigint(20) NOT NULL auto_increment, `titlu` varchar(100) NOT NULL, `anAparitie` varchar(4) default NULL, `editura` varchar(50) default NULL, `nrExemplare` smallint(6) NOT NULL, `idDomeniu` smallint(6) NOT NULL, `observatii` varchar(200) default NULL, PRIMARY KEY (`idResursa`) ) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; --- Dumping data for table `resurse` -INSERT INTO INSERT INTO INSERT INTO INSERT INTO 3, NULL); `resurse` `resurse` `resurse` `resurse` VALUES VALUES VALUES VALUES (1, (2, (3, (4, 'Poezii', '1870', 'Coresi', 15, 1, NULL); 'Hector Servadac', '1877', NULL, 1, 1, NULL); 'Pasteluri', '1910', 'Timpuri', 3, 1, NULL); 'Dictionar Englez Roman', '1997', 'Teora', 1,

43

INSERT INTO INSERT INTO INSERT INTO 10, ''); INSERT INTO ''); INSERT INTO 12, ''); INSERT INTO

`resurse` VALUES (5, 'betoane', '1981', 'tehnica', 3, 8, ''); `resurse` VALUES (6, 'structuri', '2001', 'matrix', 5, 8, ''); `resurse` VALUES (7, 'POVESTIRI RELIGIOASE', '2004', 'ORTODOXA', 10, `resurse` VALUES (8, 'ROMANUL INTERBELIC', '1978', 'ANTET', 1, 1, `resurse` VALUES (9, 'PICTORI CONTEMPORANI', '2005', 'ARTIS', 2,

`resurse` VALUES (10, 'ANTICHRISTUL', '2006', 'ALLFA', 1, 9, '');

6.2 Instalare local


Pentru o instalare local va trebui s instalm urmtoarele programe: - Un server web care s suporte protocolul HTTP(Hyper Text Transfer Protocol). Pentru aceasta vom folosi serverul Apache. Serverul Apache ine toate fiierele disponibile pe web dintr-un browser sub directorul <director_instalare>/htdocs. - Un server de baza de date relaionale. Serverul de baza de date va ti s gestioneze baze de date relaionale i s execute comenzi SQL asupra sa. - Limbajul PHP care va fi instalat ca modul auxiliar la serverul Apache astfel ca toate paginile cu extensia .php din directorul htdocs vor fi mai nti interpretate i outputul (textul afiat folosind spre exemplu funcia PHP echo) va fi trimis mai departe ctre browser. - Optional PhpMyAdmin pentru lucrul uor cu baza de date fr a fi necesar introducerea de comenzi SQL. Cel mai simplu mod de a instala i configura toate aceste programe este s folosim un program care le altur pe toate. Cel mai cunoscut program de acest fel este cel de la ApacheFriends: http://www.apachefriends.org/en/xampp-windows.html. Instalarea pentru Windows poate fi procurat de la adresa: http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/xampp-win321.7.3.exe/download . Dupa instalarea programului se pornete XAMPP Control Panel i se pornesc serviciile(click pe Start) care pornesc serverul Apache(nglobeaz i modulul pentru interpretarea limbajului PHP) i serverul MySQL. ntodeauna cnd vom dori s rulm proiectul va trebui mai nti pornit serverul web i serverul de baze de date relaionale.

44

Pentru a testa c programul a fost instalat corect mergem n locaia unde a fost instalat, ex: d:/xampp n directorul htdocs(directorul unde sunt stocate toate fiierele fcute accesibile de serverul Apache altor clieni(ex:ctre browsere)) vom crea un nou director mgradinaru n care vom crea urmtorul fiier index.html cu coninutul:
<html><body><h1>Instalare corecta.</h1></body></html>

Apoi vom merge ntr-un browser web i vom tasta urmtoarea adres 127.0.0.1/mgradinaru. Va trebui s avem afiat pagina html index.html creat anterior:

127.0.0.1 este adresa IP (internet protocol) a calculatorului local. Se putea folosi i localhost n loc de adresa IP. Putem copia acum tot codul surs(toate fiierele) al proectului nostru n acest director mgradinaru i apoi rencrcm pagina 127.0.0.1/mgradinaru din browser. Mai nti evident trebuie s ne asigurm c avem create baza de date local i tabelele. Pentru aceasta folosim PhpMyAdmin accesibil la adresa http://127.0.0.1. PhpMyAdmin era disponibil i n cazul instalrii pe un server web. Presupunem c creem o baz de date cu numele mgradinaru_xhost_ro01 . Iniial userul root(superadministratorul serverului de baze de date) are parola vid aadar n scriputul header.php de conectare la baza de date conexiunea se realizeaz astfel:
$server = '127.0.0.1'; @$db = mysql_connect($server, 'root', ''); //user-ul root, parola vida. if (!$db) { echo 'Eroare: Nu s-a putut conecta la baza de date.'; exit; } mysql_select_db('mgradinaru_xhost_ro01'); //selectarea bazei de date asupra //careia se lucreaza.

45

7 Bibliografie
Biblioteconomie si sisteme de gestiune: BERCIU-DRGHICESCU, ADINA, tiinele auxiliare ale istoriei, part. I, Curs. Tipografia Universitii Bucureti, 1988. Dan Simionescu, Manual de biblioteconomie, Bucuresti, Editura Didactica si Pedagogica, 1979 Saluc Horvat, Introducere in biblioteconomie, Editura Grafoart, Bucuresti 1969. http://books.google.ro/ http://openbiblioromania.xhost.ro/shared/loginform.php http://en.wikipedia.org http://ebooks.unibuc.ro/istorie/arhivistica/8capIII.htm HTML: http://www.tutorialehtml.com/ http://www.etutoriale.ro/articles/112/1/Tutorial-complet-HTML/ PHP: http://www.etutoriale.ro/articles/93/1/Tutorial-complet-PHP/ http://php.net/ http://www.drogoreanu.ro/tutorials/php.php http://www.oriceon.com http://www.oriceon.com/tutorial_v2.1.rar http://forum.softpedia.com/index.php?showtopic=61508 http://webspace.ulbsibiu.ro/radu.kretzulescu/html/PHP1.pdf SQL: http://www.techit.ro/tutorial_sql.php http://garaj.xhost.ro/docs/sql.htm http://georgemarin.tripod.com/diploma.htm UML: http://www.uml.org/ Specificatia UML 2.0 http://www.techit.ro/tutorial_uml.php CSS: http://www.marplo.net/curs_css/ http://www.tutorialehtml.com/tutoriale-css/introducere-in-css.php

46

8 ANEXA 1 LISTE PROGRAME SURS Returnare


<? Php Include ("header.php"); if (!$_GET['idResursa']) { ?> <form action="returnare.php" method="get"> <p>Identificator resursa: <input type="text" name="idResursa" maxlength="7" size="3"></p> <p>Identificator cititor: <input type="text" name="idCititor" maxlength="7" size="3"></p> <p>Numar exemplare returnare(trebuie returnate toate exemplarele detinute): <input type="text" name="nrExemplare" maxlength="7" size="3"></p> </br> <input type="submit" value="Returneaza"/> </form> <?php exit(); } $idResursa = $_GET['idResursa']; $idCititor = $_GET['idCititor']; $nrExemplareReturnate = $_GET['nrExemplare']; $sfarsit = $_GET ['sfarsit']; $rezultat = mysql_query ("select * from cititori where idCititor=".$idCititor.""); $nr = mysql_num_rows ($rezultat); if ($nr==0) { echo '<p>Cititorul cu identificatorul dat nu a fost gasit.</p>'; exit (); } $rezultat = mysql_query("select * from resurse where idResursa='".$idResursa."'"); $nrResurse = mysql_num_rows($rezultat); if ($nrResurse==0) { echo '<p>Resursa cu identificatorul dat nu a fost gasita.</p>'; exit(); } $row = mysql_fetch_array($rezultat); $nrExemplare = $row['nrExemplare']; // Verifica e imprumutata. $rezultat = mysql_query("select * from imprumuturi where idResursa='$idResursa' and idCititor='$idCititor' and nrExemplare='$nrExemplareReturnate'"); $nrImprumuturi = mysql_num_rows($rezultat); if ($nrImprumuturi==0) { echo "<p>Eroare: Resursa nu a fost imprumutata anterior sau in numarul de exemplare specificat.</p>"; exit(); } 47

$imprumut = mysql_fetch_array($rezultat); $rezultat = mysql_query("delete from imprumuturi where idResursa='$idResursa' and idCititor='$idCititor' and nrExemplare='$nrExemplareReturnate'"); if ($rezultat) echo mysql_affected_rows().' resursa returnata.'; echo '<p>Resursa a fost returnata in '.$imprumut['nrExemplare'].' exemplare.</p>'; include("footer.php"); ?>

Raport
<?php include("header.php"); if (!$_GET['nume']) { ?> <form action="raport2.php" method="get"> <p>Nume domeniu: <select name="nume"> <?php $sql = "select * from domenii"; $rezultat = mysql_query($sql); $nrDomenii = mysql_num_rows($rezultat); for ($i=0; $i <$nrDomenii; $i++) { $row = mysql_fetch_array($rezultat); echo '<option value="'.$row['idDomeniu'].'">'. $row['nume'].'</option>'; } ?> </select> </p> </br> <input type="submit" value="Afiseaza"/> </form> <?php exit(); } $idDomeniu = $_GET['nume']; $sql = "select * from resurse where idDomeniu=$idDomeniu"; $rezultat = mysql_query($sql); $nrResurse = mysql_num_rows($rezultat); if ($nrResurse==0) { echo '<p>Nu s-au gasit resurse in acest domeniu.</p>'; exit(); 48

} else { echo "<p>S-au gasit $nrResurse rezultat(e).</p>"; } for ($i=0; $i <$nrResurse; $i++) { $row = mysql_fetch_array($rezultat); $idResursa = $row['idResursa']; echo '<p>Identificator resursa: '.$row['idResursa'].'</p>'; echo '<p>Titlu: '.$row['titlu'].'</p>'; echo '<p>An: '.$row['anAparitie'].'</p>'; echo '<p>Editura: '.$row['editura'].'</p>'; echo '<p>Numar exemplare: '.$row['nrExemplare'].'</p>'; echo '<p>Observatii: '.$row['observatii'].'</p>'; echo '<p class="horizline">&nbsp;</p> <tr>'; } include("footer.php"); ?>

Modificare
<?php include("header.php"); if (!$_GET['operatie'] && $_GET['operatie']!='Salvare') { ?> <form action="modificare.php" method="get"> <p>Identificator: <input type="text" name="id" maxlength="100" size="50"> <p>Tip: <input type="radio" name="tip" value="Resursa" checked>resursa</input> <input type="radio" name="tip" value="Cititor">cititor</input> <input type="radio" name="tip" value="Autor">autor</input> <input type="radio" name="tip" value="Domeniu">domeniu</input></p> <p>Operatie: <input type="radio" name="operatie" value="Modificare" checked>Modificare</input> <input type="radio" name="operatie" value="Stergere">Stergere</input></p> <br> <input type="submit" value="Executa"/> </form> <?php exit(); } $id = $_GET['id']; $tip= $_GET['tip']; $operatie= $_GET['operatie']; if ($operatie!='Salvare') { 49

if ($tip=="Resursa") { $sql = "select * from resurse where idResursa=".$id.""; $deleteSql = "delete from resurse where idResursa=".$id.""; } if ($tip=="Cititor") { $sql = "select * from cititori where idCititor=".$id.""; $deleteSql = "delete from cititori where idCititor=".$id.""; } if ($tip=="Autor") { $sql = "select * from autori where idAutor=".$id.""; $deleteSql = "delete from autori where idAutor=".$id.""; } if ($tip=="Domeniu") { $sql = "select * from domenii where idDomeniu=".$id.""; $deleteSql = "delete from domenii where idDomeniu=".$id.""; } $rezultat = mysql_query($sql); $nrInregistrari = mysql_num_rows($rezultat); if ($nrInregistrari==0) { echo '<p>Identificatorul dat nu a fost gasit.</p>'; exit(); } if ($nrInregistrari>1) { echo '<p>Se poate modifica o singura inregistrare odata. Introdu o alta valoare pt identificator astfel incat sa identifice o singura inregistrare.</p>'; exit(); } $row = mysql_fetch_array($rezultat, MYSQL_NUM); $id = $row[0]; } if ($operatie=='Stergere') { if ($tip=="Domeniu") { $rezultat = mysql_query("select * from resurse where idDomeniu=$id"); if (mysql_num_rows($rezultat)!=0) { echo '<p>Domeniul nu poate fi sters. Stergeti mai intai resursele care sunt din acest domeniu.</p>'; exit(); } } if ($tip=="Cititor") { $rezultat = mysql_query("select * from imprumuturi where idCititor=$id"); if (mysql_num_rows($rezultat)!=0) { echo '<p>Cititorul nu poate fi sters intrucat figureaza ca avand imprumutate resurse. Trebuie mai intai returnate resursele si apoi poate fi sters.</p>'; exit(); } } if ($tip=="Resursa") { $rezultat = mysql_query("select * from imprumuturi where idResursa=$id"); if (mysql_num_rows($rezultat)!=0) { 50

echo '<p>Resursa nu poate fi stearsa intrucat figureaza ca imprumutata. Returnati-o mai intai si apoi stergeti-o.</p>'; exit(); } } if ($tip=="Autor") { $rezultat = mysql_query("select * from autoriresursa where idAutor=$id"); if (mysql_num_rows($rezultat)!=0) { echo '<p>Autorul nu poate fi sters. Stergeti mai intai resursele care sunt scrise de acest autor.</p>'; exit(); } } $inregistrariSterse = 0; $rezultat = mysql_query($deleteSql); if ($rezultat) $inregistrariSterse += mysql_affected_rows(); if ($tip=="Resursa") { $rezultat = mysql_query("delete from autoriresursa where idResursa=$id"); } if ($rezultat) { echo "<p>S-au sters $inregistrariSterse inregistrari.</p>"; } else { echo "<p>Eroare: Nu s-a putut sterge.</p>"; } } // Acelasi cod ca la inserare.php. if ($operatie=='Salvare') { //Observatii modificarea autorilor unei carti presupune stergerea din tabela autoriResursa a celor vechi si introducerea de legaturi noi //La fel cititorul tb sa existe precum si domeniul. if ($tip=="resursa") { // $sql = "select * from resurse where idDomeniu=".$id.""; // $row = mysql_fetch_array($rezultat); $titlu = $_GET['titlu']; $autori = explode(',', $_GET['autori']); for ($i=0; $i<count($autori);$i++) { $idAutor = $autori[$i]; $rezultat = mysql_query("select * from autori where idAutor=". $idAutor.""); $nr = mysql_num_rows($rezultat); if ($nr==0) { echo "<p>Eroare: Autorul cu identificatorul $idAutor nu a fost gasit.</p>"; exit(); } 51

} $anAparitie = $_GET['anAparitie']; $editura = $_GET['editura']; $nrExemplare = $_GET['nrExemplare']; $idDomeniu = $_GET['idDomeniu']; $rezultat = mysql_query("select * from domenii where idDomeniu=". $idDomeniu.""); $nr = mysql_num_rows($rezultat); if ($nr==0) { echo "<p>Eroare: Domeniul cu identificatorul $idDomeniu nu a fost gasit.</p>"; exit(); } $observatii = $_GET['observatii']; $rezultat = mysql_query("update resurse set titlu='$titlu', anAparitie=$anAparitie, editura='$editura', nrExemplare=$nrExemplare, idDomeniu=$idDomeniu, observatii='$observatii' where idResursa=$id"); // Mai intai sterge orice legatura in autoriresurse. mysql_query("delete from autoriresursa where idResursa=$id"); // Insereaza si in tabela ce mapeaza autorii la resurse. for ($i=0; $i<count($autori);$i++) { $idAutor = $autori[$i]; mysql_query("insert into autoriresursa values ($id, $idAutor)"); } } if ($tip=="autor") { $nume = $_GET['nume']; $observatii = $_GET['observatii']; $rezultat = mysql_query("update autori set nume='$nume', observatii='$observatii' where idAutor=$id"); } if ($tip=="cititor") { $nume = $_GET['nume']; $CNP = $_GET['CNP']; $adresa = $_GET['adresa']; $tel = $_GET['tel']; $email = $_GET['email']; $observatii = $_GET['observatii']; $rezultat = mysql_query("update cititori set nume='$nume', CNP='$CNP', adresa='$adresa', tel='$tel', email='$email', observatii='$observatii' where idCititor=$id"); } if ($tip=="domeniu") { $nume = $_GET['nume']; $rezultat = mysql_query("update domenii set nume='$nume' where idDomeniu=$id"); } if ($rezultat) { $nr = mysql_affected_rows(); echo "<p>S-a modificat $nr inregistrare.</p>"; } else { 52

echo '<p>Nu s-a putut modifica.</p>'; } } if ($operatie=='Modificare') { echo "<form action='modificare.php' method='get'>"; echo '<input type="hidden" name="operatie" value="Salvare"/>'; $rezultat = mysql_query($sql); $row = mysql_fetch_array($rezultat); if ($tip=="Domeniu") { $id = $row['idDomeniu']; $nume = $row['nume']; echo "<p>Nume:<input type='text' name='nume' maxlength='50' size='50' value='$nume'/></p>"; echo '<input type="hidden" name="id" value="'.$id.'"/>'; echo '<input type="hidden" name="tip" value="domeniu"/>'; } if ($tip=="Autor") { $id = $row['idAutor']; $nume = $row ['nume']; $observatii = $row['observatii']; echo '<p>Nume:<input type="text" name="nume" value="'.$nume.'" maxlength="50" size="50"/></p>'; echo '<p>Observatii:<textarea cols="38" rows="3" value="'. $observatii.'"name="observatii"></textarea></p>'; echo '<input type="hidden" name="id" value="'.$id.'"/>'; echo '<input type="hidden" name="tip" value="autor"/>'; } if ($tip=="Cititor") { $id = $row['idCititor']; $nume = $row ['nume']; $CNP = $row['CNP']; $adresa = $row['adresa']; $tel = $row['tel']; $email = $row['email']; $observatii = $row['observatii']; echo '<p>Nume:<input type="text" name="nume" value="'.$nume.'" maxlength="50" size="50"/></p>'; echo '<p>CNP:<input type="text" name="CNP" value="'.$CNP.'" maxlength="13" size="13"/></p>'; echo '<p>Adresa:<input type="text" name="adresa" value="'.$adresa.'" maxlength="100" size="50"/></p>'; echo '<p>Tel:<input type="text" name="tel" value="'.$tel.'" maxlength="50" size="50"/></p>'; echo '<p>Email:<input type="text" name="email" value="'.$email.'" maxlength="50" size="50"/></p>'; 53

echo '<p>Observatii:<textarea cols="38" rows="3" name="observatii" value="'.$observatii.'"></textarea></p>'; echo '<input type="hidden" name="id" value="'.$id.'"/>'; echo '<input type="hidden" name="tip" value="cititor"/>'; } if ($tip=="Resursa") { $id = $row['idResursa']; $titlu = $row['titlu']; $anAparitie = $row['anAparitie']; $editura = $row['editura']; $nrExemplare = $row['nrExemplare']; $idDomeniu = $row['idDomeniu']; $autori=""; $cerere2= "select * from autoriResursa where idResursa='".$id."'"; $rezultat2 = mysql_query($cerere2); for ($j=0; $j <mysql_num_rows($rezultat2); $j++) { $autorResursa = mysql_fetch_array($rezultat2); $autori = $autori.$autorResursa['idAutor']; if ($j<mysql_num_rows($rezultat2)-1) { $autori = $autori.","; } } $observatii = $row['observatii']; echo '<p>Titlu:<input type="text" name="titlu" value="'.$titlu.'" maxlength="100" size="50"/></p>'; echo '<p>Identificatori autori separati prin virgula:<input type="text" name="autori" value="'.$autori.'" maxlength="200" size="25"/></p>'; echo '<p>An aparitie:<input type="text" name="anAparitie" value="'. $anAparitie.'" maxlength="10" size="3"/></p>'; echo '<p>Editura:<input type="text" name="editura" value="'.$editura.'" maxlength="50" size="25"/></p>'; echo '<p>Numar exemplare:<input type="text" name="nrExemplare" value="'.$nrExemplare.'" maxlength="3" size="3"/></p>'; echo '<p>Identificator domeniu:<input type="text" name="idDomeniu" value="'.$idDomeniu.'" maxlength="7" size="3"/></p>'; echo '<p>Observatii:<textarea cols="38" rows="3" name="observatii"value="'.$observatii.'" ></textarea></p>'; echo '<input type="hidden" name="id" value="'.$id.'"/>'; echo '<input type="hidden" name="tip" value="resursa"/>'; } echo "<input type='submit' value='Modifica'/></form>"; } include("footer.php"); ?>

54

Listare
<?php include("header.php"); $cerere = "select * from resurse"; $rezultat = mysql_query($cerere); $nrResurse = mysql_num_rows($rezultat); echo '<p>Numarul de resurse gasite: '.$nrResurse.'</p>'; for ($i=0; $i <$nrResurse; $i++) { $row = mysql_fetch_array($rezultat); echo '<p><strong>Id:'; echo htmlspecialchars(stripslashes($row['idResursa'])); echo '</strong><p><strong>Titlu: '; echo htmlspecialchars(stripslashes($row['titlu'])); echo '</strong><br>Autorii: '; $cerere2= "select * from autoriResursa where idResursa='".$row['idResursa']."'"; $rezultat2 = mysql_query($cerere2); for ($j=0; $j <mysql_num_rows($rezultat2); $j++) { $autorResursa = mysql_fetch_array($rezultat2); $cerere3= "select * from autori where idAutor='". $autorResursa['idAutor']."'"; $rezultat3 = mysql_query($cerere3); for ($k=0; $k <mysql_num_rows($rezultat3); $k++) { $autor = mysql_fetch_array($rezultat3); echo $autor['nume']."<br>"; } } echo 'Observatii:'; echo htmlspecialchars(stripslashes($row['observatii'])); } $cerere = "select * from cititori"; $rezultat = mysql_query($cerere); $nrCititori = mysql_num_rows($rezultat); echo '<p class="horizline">&nbsp;</p> <tr> <p>Numarul de cititori gasiti: '. $nrCititori.'</p>'; for ($i=0; $i <$nrCititori; $i++) { $row = mysql_fetch_array($rezultat); echo '<p><strong> Id: '; echo htmlspecialchars(stripslashes($row['idCititor'])); echo '<p>Nume: '; echo htmlspecialchars(stripslashes($row['nume']))."<br>"; echo '</strong><p>CNP: '; echo htmlspecialchars(stripslashes($row['CNP']))."<br>"; echo '<p>Adresa: '; echo htmlspecialchars(stripslashes($row['adresa']))."<br>"; echo '<p>Tel: '; echo htmlspecialchars(stripslashes($row['tel']))."<br>"; echo '<p>Email: '; echo htmlspecialchars(stripslashes($row['email']))."<br>"; echo 'Observatii: '; 55

echo htmlspecialchars(stripslashes($row['observatii'])); } $cerere = "select * from autori"; $rezultat = mysql_query($cerere); $nrAutori = mysql_num_rows($rezultat); echo '<p class="horizline">&nbsp;</p> <tr> <p>Numarul de autori gasiti: '. $nrAutori.'</p>'; for ($i=0; $i <$nrAutori; $i++) { $row = mysql_fetch_array($rezultat); echo '<p><strong> Id: '; echo htmlspecialchars(stripslashes($row['idAutor'])); echo '<p>Nume: '; echo htmlspecialchars(stripslashes($row['nume']))."<br>"; echo '</strong>Observatii: '; echo htmlspecialchars(stripslashes($row['observatii'])); } $cerere = "select * from domenii"; $rezultat = mysql_query($cerere); $nrDomenii = mysql_num_rows($rezultat); echo '<p class="horizline">&nbsp;</p> <tr> <p>Numarul de domenii gasite: '. $nrDomenii.'</p>'; for ($i=0; $i <$nrDomenii; $i++) { $row = mysql_fetch_array($rezultat); echo '<strong><p>Id: '; echo htmlspecialchars(stripslashes($row['idDomeniu'])); echo '<br>Nume: '; echo htmlspecialchars(stripslashes($row['nume'])).'</strong>'; } include("footer.php"); ?>

mprumutare
<?php include("header.php"); if (!$_GET['idResursa']) { ?> <form action="imprumutare.php" method="get"> <p>Identificator resursa: <input type="text" name="idResursa" maxlength="7" size="3"></p> <p>Identificator cititor: <input type="text" name="idCititor" maxlength="7" size="3"></p> <p>Numar exemplare: <input type="text" name="nrExemplare" maxlength="7" size="3"></p> <p>Data sfarsit (Ex: 2010-05-09): <input type="text" name="sfarsit" maxlength="10" size="10"></p> </br> 56

<input type="submit" value="Imprumuta"/> </form> <?php exit(); } $idResursa = $_GET['idResursa']; $idCititor = $_GET['idCititor']; $nrExemplareDorite = $_GET['nrExemplare']; $sfarsit = $_GET['sfarsit']; $rezultat = mysql_query("select * from cititori where idCititor=".$idCititor.""); $nr = mysql_num_rows($rezultat); if ($nr==0) { echo '<p>Cititorul cu identificatorul dat nu a fost gasit.</p>'; exit(); } $rezultat = mysql_query("select * from resurse where idResursa=".$idResursa.""); $nrResurse = mysql_num_rows($rezultat); if ($nrResurse==0) { echo '<p>Resursa cu identificatorul dat nu a fost gasita.</p>'; exit(); } $row = mysql_fetch_array($rezultat); $nrExemplare = $row['nrExemplare']; // Verifica ca nu e deja imprumutata. $rezultat = mysql_query("select * from imprumuturi where idResursa=".$idResursa.""); $nrImprumuturi = mysql_num_rows($rezultat); $nrExemplareImprumutate = 0; for ($i=0; $i <$nrImprumuturi; $i++) { $row = mysql_fetch_array($rezultat); $nrExemplareImprumutate += $row['nrExemplare']; } $rezultat2 = mysql_query("select * from resurse where idResursa=". $idResursa.""); $resursa = mysql_fetch_array($rezultat2); if ($resursa['nrExemplare']-$nrExemplareImprumutate<$nrExemplareDorite) { echo '<p>Nu se poate imprumuta. Mai exista doar '. (($resursa['nrExemplare']-$nrExemplareImprumutate)).' exemplare care pot fi imprumutate.</p>'; exit(); } $rezultat = mysql_query("insert into imprumuturi values ($idCititor, $idResursa, $nrExemplareDorite, curdate(), '$sfarsit')"); if ($rezultat) echo mysql_affected_rows().' resursa imprumutata.'; echo '<p>Resursa a fost imprumutata.</p>'; include("footer.php"); ?>

57

Cutare
<?php include("header.php"); if (!$_GET['id']) { ?> <form action="cautare.php" method="get"> <p>Nume sau doar o parte din nume(titlu, nume autor, nume cititor, domeniu): <input type="text" name="id" maxlength="100" size="50"> <p><input type="radio" name="tip" value="Resursa" checked>resursa</input> <input type="radio" name="tip" value="Autor">autor</input> <input type="radio" name="tip" value="Cititor">cititor</input> <input type="radio" name="tip" value="Domeniu">domeniu</input></p> </br> <input type="submit" value="Cauta"/> </form> <?php exit(); } $id = $_GET['id']; $tip= $_GET['tip']; if ($tip=="Resursa") { $sql = "select * from resurse where titlu like '%".$id."%'"; } if ($tip=="Autor") { $sql = "select * from autori where nume like '%".$id."%'"; } if ($tip=="Cititor") { $sql = "select * from cititori where nume like '%".$id."%'"; } if ($tip=="Domeniu") { $sql = "select * from domenii where nume like '%".$id."%'"; } $rezultat = mysql_query($sql); $nr = mysql_num_rows($rezultat); if ($nr==0) { echo '<p>Inregistrarea cu identificatorul dat nu a fost gasit.</p>'; exit(); } else { echo "<p>S-au gasit $nr rezultat(e).</p>"; $nrCol = mysql_num_fields($rezultat); } while ($row = mysql_fetch_assoc($rezultat)) { foreach($row as $name => $value) { print "<p>$name : $value</p>"; } echo '<p class="horizline">&nbsp;</p> <tr>'; 58

} include("footer.php"); ?>

Adugare resurse
<?php include("header.php"); ?> <ul id="tabmenu"> <li><a class="active" href="adaugareResursa.php">Resursa</a></li> <li><a href="adaugareAutor.php">Autor</a></li> <li><a href="adaugareCititor.php">Cititor</a></li> <li><a href="adaugareDomeniu.php">Domeniu</a></li> </ul> <div id="sidebar2"> <p>Titlu</p> <p>Identificatori autori*</p> <p>An aparitie</p> <p>Editura</p> <p>Numar exemplare</p> <p>Identificator domeniu</p> <p>Observatii</p> <br><br><br><br><br><br><br><br> * Autorul (precum si domeniul) tb introdus inaintea resursei, pentru ai afla identificatorul iar in caz ca sunt mai multi autori, identificatorii ii introduceti separati prin virgula. </div> <div id="mainpage2"> <form action="inserare.php?tip=resursa" method="get"> <p><input type="text" name="titlu" maxlength="100" size="50"/></p> <p><input type="text" name="autor" maxlength="200" size="25"/></p> <p><input type="text" name="anAparitie" maxlength="10" size="3"/></p> <p><input type="text" name="editura" maxlength="50" size="25"/></p> <p><input type="text" name="nrExemplare" maxlength="3" size="3"/></p> <p><input type="text" name="idDomeniu" maxlength="7" size="3"/></p> <p><textarea cols="38" rows="3" name="observatii"></textarea></p><br> <input type="hidden" name="tip" value="resursa"/> <input type="submit" value="Adauga"/> </form> </div> <?php include("footer.php"); 59

?>

Adugare domeniu
<?php include("header.php"); ?> <ul id="tabmenu"> <li><a class="active" href="adaugareResursa.php">Resursa</a></li> <li><a href="adaugareAutor.php">Autor</a></li> <li><a href="adaugareCititor.php">Cititor</a></li> <li><a href="adaugareDomeniu.php">Domeniu</a></li> </ul> <div id="sidebar2"> <p>Nume domeniu</p> </div> <div id="mainpage2"> <form action="inserare.php?tip=domeniu" method="get"> <p><input type="text" name="nume" maxlength="50" size="50"/></p> <input type="hidden" name="tip" value="domeniu"/> <input type="submit" value="Adauga"/> </form> </div> <?php include("footer.php"); ?>

Adugare cititor
<?php include("header.php"); ?> <ul id="tabmenu"> <li><a class="active" href="adaugareResursa.php">Resursa</a></li> <li><a href="adaugareAutor.php">Autor</a></li> <li><a href="adaugareCititor.php">Cititor</a></li> <li><a href="adaugareDomeniu.php">Domeniu</a></li> </ul> <div id="sidebar2"> <p>Nume</p> <p>CNP</p> <p>Adresa</p> <p>Tel</p> <p>E-mail</p> <p>Observatii</p> <br><br><br><br><br><br><br><br> </div> <div id="mainpage2"> 60

<form action="inserare.php?tip=cititor" method="get"> <p><input type="text" name="nume" maxlength="50" size="50"/></p> <p><input type="text" name="CNP" maxlength="13" size="13"/></p> <p><input type="text" name="adresa" maxlength="100" size="50"/></p> <p><input type="text" name="tel" maxlength="50" size="50"/></p> <p><input type="text" name="email" maxlength="50" size="50"/></p> <p><textarea cols="38" rows="3" name="observatii"></textarea></p><br> <input type="hidden" name="tip" value="cititor"/> <input type="submit" value="Adauga"/> </form> </div> <?php include("footer.php"); ?>

Adugare autor
<?php include("header.php"); ?> <ul id="tabmenu"> <li><a href="adaugareResursa.php">Resursa</a></li> <li><a class="active" href="adaugareAutor.php">Autor</a></li> <li><a href="adaugareCititor.php">Cititor</a></li> <li><a href="adaugareDomeniu.php">Domeniu</a></li> </ul> <div id="sidebar2"> <p>Nume</p> <p>Observatii</p> <br><br><br><br><br><br><br><br> * Autorul tb introdus inaintea cartii, pentru ai afla identificatorul iar in caz ca sunt mai multi separatii prin virgula. </div> <div id="mainpage2"> <form action="inserare.php" method="get"> <p><input type="text" name="nume" maxlength="50" size="50"/></p> <p><textarea cols="38" rows="3" name="observatii"></textarea></p><br> <input type="hidden" name="tip" value="autor"/> <input type="submit" value="Adauga"/> </form> 61

</div> <?php include("footer.php"); ?>

62