Bibliotecile Scolare

Apariția calculatoarelor în viața cotidiană și tehnologia avansată a acestora ne-a adus pe noi oamenii de a uita de obiceiurile tradiționalele; în sensul de a citi o carte de viziona un film în sala de cinematograf, de a asculta și privi o piesă de teatru, un spectacol liric într-o sală de spectacol. Motivând lipsa timpului pentru toate aceste activitați s-a folosit calculatorul care a devenit un instrument comod în viața noastră.

Pentru fiecare persoană, calculatorul deține un rol important în viața fiecăuia pentru multitudinea serviciilor oferite în rezolvarea problemelor personale sau profesionale.Utilizarea calculatorului în tot mai multe domenii de activitate se urmarește eficintizarea și ușurarea muncii omului. Calculatorul adevenit un instrument de lucru și într-o bibliotecă.Biblioteca a insemnat pentru toate vârstele,pentru cei interesați de anumite domenii o sursă principală de îmbogățire culturala și spirituală, sau o posibilitate de imformație pentru unele persoane care neavând altă posibilitate de învățare și informare au apelat la serviciile unei boblioteci.

Activitatea unei biblioteci are ca scop satisfacerea cerințelor cititorilor intr-un timp scurt si eficient. Aceasta presupune o organizare si administrare foarte bună a elementelor constitutive a acelei biblioteci.

PREZENTAREA GENERALĂ A SISTEMULUI DE EVIDENȚĂ CĂRȚI ȘI CITIORI ÎNTR – O BIBLIOTECĂ ȘCOLARĂ

MOTIVAȚIA APLICAȚIEI

Gestiunea unei biblioteci conține un volum mare de informații privind evidența cărților și a cititorilor, determinând necesitatea informatizării tuturor activităților existente în bilbliotecă.

Munca de evidență într-o bibliotecă impune un volum mare de muncă și multe documente pentru înregistrarea cărților primite în gestiune, a cartilor împrumutate, a cărților restituite, a cititorilor activi, a cititorilor restanțieri. Prin folosirea unui program informatic pentru gestuinea unei biblioteci se câștigă timp, se evită pierderea de date, renunțându-se la un număr mare de documente primare de evidență necesare ținerii evidenței gestiunii unei biblioteci. De asemeni se pot obtine mult mai ușor informațiile solicitate despre cititori, cărți împrumutate, cărți restante, perioada de returnare precum și alte date statistice.

Biblioteca școlară este un compartiment specializat care are ca scop principal constituirea fondului de carte, organizarea , prelucrarea, dezvoltarea și conservarea colecțiilor de cărți, publicații periodice și alte documente specifice. Baza de date a sistemului informatic asigura beneficiarilor utilizarea acestora în vederea informării, cercetării, educației sau recreerii.

În cadrul oricărei instituții de învațământ preșcolar, gimnazial, liceal, există organizată biblioteca, ca parte integrantă a procesului de pregătire, formare și educare în ajutorul elevilor și cadrelor didactice din acea școală.

Scopul existentei unei biblioteci în cadrul unei instituții școlare este de a asigura elevor și cadrelor didactice accesul la informații și documentații suplimetare în vederea susținerii procesului instructiv-educativ, de a ajuta la dezvoltarea și descoperirea competențelor superioare la elevi.

1.2 PREZENTAREA ACTIVITĂȚII DESFĂȘURATE ÎNTR-O BIBLIOTECĂ ȘCOLARĂ

„ Biblioteca școlară oferă informații și idei esențiale pentru funcționarea cu succes a societații informaționale de astăzi bazată pe cunoaștere.”

„Biblioteca școlară formează, la elevi, abilități de studiu pentru toată viața, dezvoltându-le imaginația, oferindu-le posibilitatea să trăiască ca cetățeni responsabili.”

„ Biblioteca școlară oferă servicii de studio, cărți și documnente care permit tuturor membrilor comunității școlare să gândească în mod critic și să devină utilizatori efectivi de informative în orice format și media.”

„ Serviciile bibliotecii școlare trebuie asigurate în egală măsură pentru toți membrii comunității școlare, indiferent de vârstă, rasă, sex, religie, naționalitate, limbă, statut profesional sau social. Serviciile și materialele speciale trebuie asigurate și pentru persoanele care nu pot folosi serviciile si materialele curente ale bibliotecii.

Accesul la servicile si colecțiile bibliotecii școlare se bazează pe Declaratia Universală a Drepturilor și Libertăților Omului și nu trebuie să fie obiectul niciunei forme de cenzură idiologică, politică sau religioasă, și nici al unor presiuni comerciale.”

„Biblioteca școlară este un partener important în rețeaua biblioteconomică și informațională locală regiola și națională.”

(Extras din Manifestul IFLA/UNESCO pentru biblitecile școlare, 2005)

Creerea unei baze de date despre biblioteca școlară urmărește stocarea informațiilor privind împrumutul respective, restituirea cărților împrumutate de elevii școlii, deasemeni permite obținerea și accesarea mai rapidă a unor informații și situații solicitate de conducera școlii.

În acest sens m – am gândit să aleg un sistem informatic care să ajute beneficiarul să gestioneze cât mai ușor fondul de carte și să țină evidența cititorilor dintr-o bibliotecă.

În biblioteca școlară , bibliotecarul confuntându-se cu un număr mare de cărți, autori, împrumuturi, restituiri, adăugiri si eliminări de cărți, cititori, folosindu-se de acest program informatic își va ușura munca , existând posibilitatea ca acest program să fie folosit de orice funcționar al școlii care are ca sarcină de serviciu gestionarea bibliotecii respective.

Acest program a fost conceput să poată aborda toate operațiile de lucru cu cititorii și cărțile unei biblioteci și să poată fi folosit și de cei mai puțin pricepuți în arta calculatoarelor și a programelor informatice.

Meniul principal al programului oferă următoarele posibilități;

Adauga Carte

Adauga Cititor

afișarea datelor personale ale cititorului(Lista Cititori)

afișarea tuturor cărților aparținând bibliotecii(Lista Carti)

afișarea tuturor cărților împrumutate de cititori(Carti Nereturnate)

afișarea tututror cărților restante(Carti Restante)

1.2.1. CONDIȚII DE ÎNSCRIERE

Înscrierea la biblioteca școlară este gratuită. Biblioteca noastră primește toți elevii, toate cadrele didactice – de predare și auxiliare-, personalul nedidactic, oferind un acces egal la informație fiecărui cititor/utilizator, asigurând un acces comod și economic la cultura scrisă, nediscriminând pe nici unul, indiferent de sex, religie sau mediul de proveniență, indiferent de gradul de inteligență. Înscrierile se fac pe baza B.I./C.I. și a tabelelor nominale/clase, întocmite de învățători și diriginți.

1.2.2. CONDIȚII DE ÎMPRUMUT

Bibliotecarul prin accesarea aplicației ”Biblioteca” poate împrumuta individual cititorilor maxim trei cărți pe o perioadă stabilită de până la cincisprezece zile. Cititorul poate beneficia de o prelungire, dacă a fost în trecut cititor corect privind restituirea cărților împrumutate.

În situația când unele documente, bunuri culturale, aflate în gestiunea bibliotecii sunt înregistrate ca pierdute sau distruse de către utilizatori, sau cărțile

n – au fost restituite în termenul prevăzut, se procedează respectând prevederile din Anexa la OMEdC nr.4626/21 iulie 2005 – Metodologia de recuperare a documentelor pierdute, distruse ori deteriorate .

RESTRICȚII DE INTEGRITATE :

Integritatea datelor presupune :

integritate de entitate (fiecare tabelă de sine stătătoare are o cheiie primară);

integritate referențială (legăturile respectă dependențele logice și dependențele funcționale din sistem).

Pentru sistemul informațional ales se vor respecta următoarele restricții de integritate:

aceeași carte nu poate fi împrumutată de mai mulți cititori în același timp, pentru că fiecare carte este înregistrată în baza de date în mod unic;

fiecare cititor are dreptul să împrumute de la 1- 3 cărți, pe o perioadă determinată, cu posibilitate de prelungire a perioadei respective;

aplicația software va permite împrumutarea unei cărți dacă cititorul nu a depășit numărul zilelor de împrumut pentru o carte;

bibliotecarul are dreptul de a șterge un cititor din baza de date, dacă acesta pierde statutul de cititor(depășeșete numărul zilelor de împrumut pentru o carte);

aplicația păstrează cititorii ”șterși” din baza de date în Lista Cititori ”Expirati”, un cititor devenind activ prin returnarea cărților împrumutate.

NOȚIUNI INTRODUCTIVE ÎN BAZE DE DATE

2.1. ORGANIZAREA DATELOR

Stocarea și prelucrarea cât mai rapidă a informațiilor precum și creșterea substanțială a capacității de memorare și a vitezei de prelucrare a datelor sunt doi parametrii care au condus la rezolvarea cu ajutorul calculatorului a diverselor probleme cotidiene.

Probleme rezolvate pe baza celor doi parametrii sunt :

„ probleme care implică prelucrări reduse asupra unui volum mare de date;

probleme care implică un volum mediu de prelucrări asupra unui volum mediu de date;

probleme care implică un volum mare de prelucrări asupra unui volum mic de date; ”

Stocarea și prelucrarea unui volum mare de date prin prelucrări reduse se realizează cu ajutorul sistemelor informatice specializate „ numite sisteme de gestiune a bazelor de date. ”

Eficiența sistemului informatic depinde de proiectarea sistemelor informatice, care la rândul ei depinde în funcție de organizarea datelor, care presupune : ordonarea și gruparea datelor mulțimi omogene de date, precum și definerea și structurarea lor, stabilirea relațiilor între date, între elementele unei mulțimi de date, respectiv mulțimi de date, definirea datelor într –un suport informațional.

Pe lângă cerințele prezentate mai sus în organizarea datelor un loc important îl ocupă unicitatea datelor.

. CONCEPTE UTILIZATE ÎN ORGANIZAREA DATELOR

Literatura de specialitate „ sistemului de gestiune a bazelor de date ” se folosește de următoarele concepte : entitate, atribut, valoare. Acestea sunt interdependente. Entitatea este un obiect concret sau abstract definit de proprietățile sate caracterizate printr – o perede de tipuri atribut – valoare. Exemplu : persoană/nume : Irimia, vârsta, 22 ani, adresa…

Un individ se carcterizează prin nume, vârstă, care sunt atributele unei persoane, atribute ce caracterizează o clasă de entități nu doar o entitate. Această clasă de entități poartă denumirea de entitate grup.

Atributul i se mai spune și câmp sau caracteristică, fiind definit de valoarea sa numerică.

Un model de organizare a informației este dat de conceptul dată, care este definit prin identificator, atribut și valoare din punct de vedere logic, iar din punct de vedere fizic conceptului dată îi asociem o zonă de memorie.

2.3. STRUCTURI DE DATE

Colecțiile de date care sunt definite printr – o serie de relații, relații ce conduc la un mecanism de selecție și percepere a componentelor sunt structuri de date. Componentele structurii pot fi identificate prin nume identificator, prin poziția ocupată în structură. Accesul secvențial implică parcurgerea componerntelor în ordinea specificată înaintea sa. Sectarea unei componente neținând seama de celelate componente definește accesul direct.

Pe o structura de date se pot efectua un număr important de operații : actualizarea structurii, ștergerea unor elemente, modificarea valorilor și a relațiilor dintre ele; crearea și memorarea datelor; accesul la componentele structurii pentru prelucrarea informațiilor; sortarea; ventilarea; copierea.

2.4. BAZE DE DATE

„ Se pot defini tipurile de baze de date :

Baze de date rețea(distribuite);

Baze de date relaționale;

Baze de date orientate pe obiecte. ”

Interdependența uneia sau mai multor colecții de date asociate cu descrierea datelor și a relațiilor dintre ele ne conduce la o bază de date. Condițiile ce trebuiesc îndeplinite de o bază de date sunt : interdependența datelor față de program și invers; asigurarea informațiilor pentru cerințele de informare și decizie; informațiile stocate în baza de date să se acceseze rapid; redundanță minimă.

Arhitectura bazelor de date se carcterizează prin : baza de date

propriu – zisă, „ sistemul de gestiune a bazei de date ” și dicționarul bazei de date.

2.5. SGBD – SISTEME DE GESTIUNE A BAZELOR DE DATE

Prin sistemul de gestiune a bazelor de date, cu de numirea Data Base Management System – BDMS se realizează următoarele activități :

„ definirea structurii bazei de date

încărcarea datelor în baza de date

accesul la date

întreținerea bazei de date

reorganizarea bazei de date

securitate datelor. ”

SGBD realizează legătura dintre o bază de date și utilizatorii acesteia, iar pentru îndeplinirea acestei legăturii trebuie să îndeplinească următoarele obiective : asigurarea independenței datelor, asigurarea unei redundanțe minime, asigurarea unei facilități sporite de utilizare a datelor, securitatea și partajabilitatea datelor.

Funcțiile unui sistem de gestiune a bazelor de date sunt :

funcția de descriere a datelor, care se face cu ajutorul unui limbaj de definire la nivel logic, conceptual și fizic;

funcția de manipulare a datelor, realizată cu ajutorul de manipulare a datelor;

funcția de utilizare asigură comunicarea utilizatorului cu baza de date;

funcția de administrare a bazelor de date, supervizează problemele apărute și asigură integritatea datelor.

3.MODELE DE REPREZENTARE A DATELOR ÎN BAZELE DE DATE

3.1. MODELE DE DATE

O colecție integrată de concepte necesare descrierii datelor, relațiilor dintre ele și constrângerilor asupra datelor definește un model de date.Un model de date este folosit pentru a reprezenta date despre date. Modele de date definesc schemele logice și externe și se utilizează în descrierea bazei de date. Elementele de bază a unui model de date sunt :

entități

atribute

relații.

Entitatea este un obiect sau concept din lumea reală, de exemplu un cititor sau o carte în cadrul unei baze de date. Atributul caracterizează entitatea cititorului sau a cărții din baza de date. Între entitate și atribut se stabilește o relație ce este o interacțiune între cele două entități.

Modelelor stabilesc regulile de bază și relațiile dintre proiectanți și utilizatori pentru o comunicare eficientă. De asemenea modelele sunt definite de obiecte, evenimente, aspecte esențiale, inerente și sunt într – o strânsă legătură cu entitățile, atributele și relațiile dintre acestea.

3.2. TIPURI DE MODELE DE BAZE DE DATE

Modelele de date sunt de trei feluri : extern, conceptual și intern. „ Fiecare

Modelul relațional

4. PROIECTAREA UNEI BAZE DE DATE PRIVIND EVIDENȚA CĂRȚILOR ȘI CITITORILOR ÎNTR – O BIBLIOTECĂ ȘCOLARĂ

4.1. DESCRIEREA APLICAȚIEI

În cadrul unei biblioteci se poate realiza o bază de date. Prin interogarea bazei de date se vor obține informații despre o carte sau un cititor ales, despre împrumuturile făcute de cititorul respectiv sau despre cărțile ce nu au fost returnate până la data restantă.

Programul are în component sa următoarele tabele :

CĂRȚI(books)

CATEGORII(category)

ÎMPRUMUTURI(loans)

EDITURI(publishers)

CITITORI(readers)

Fiecare carte este caracterizată de datele sale specifice. Pentru fiecare carte se vor cunoaște: id carte, titlul și autorul, anul ediției, editura, categoria.

Pentru evidența categoriilor se vor cunoaște: id categorie, numele categorie.

Este necesară și o evidență a împrumuturilor efectuate. Pentru aceasta se vor cunoaște: id împrumut, id cititor, id carte, data împrumutului, data până la care trebuie returnată cartea, un câmp care precizează dacă cartea a fost returnată sau nu.

Pentru evidența editurilor se vor cunoaște: id editură, numele editurii și descrierea editurii.

Cititorii sunt caracterizați de următoarele argumente : id cititor, nume cititor, prenume cititor, codul numeric personal, adresa, cititor activ sau ”expirat”.

Bibliotecar

4.2. DESCRIEREA MODELULUI RELAȚIONAL AL DATELOR PE BAZA DEPENDENȚELOR FUNCȚIONALE DINTRE ATRIBUTE

Legătura dintre tabele, edituri și cărți , se realizează prin câmpul publisher_id care reprezintă id – ul editurii. Între cele două tabele există o legătură 1: n deoarece o editură are editate mai multe cărți.

Legătura dintre tabele, categori și cărți , se realizează prin câmpul category_id care reprezintă id – ul categoriei. Între cele două tabele există o legătură 1: n deoarece o categorie conține mai multe cărți.

Tabela cărți se leagă de tabela împrumuturi prin câmpul numit book_id ce reprezintă id cărții care este împrumutată. Între tabela cărți și tabela împrumuturi există legătură de tipul 1:1 deoarece o carte poate fi împrumutată de către un singur client la un moment dat.

Tabela cititori se leagă de tabela împrumuturi prin câmpul numit id ce reprezintă id cititorului. Între tabela cititori și tabela împrumuturi există legătură de tipul 1: n deoarece un cititor poate împrumuta până la trei cărți .

Adaugă carte

Formularul Adauga Carte are următoarele câmpuri : titlu, autor, an, categorie, editură și două butoane Adauga și Anuleaza.

Câmpurile titlu, autor, an, categorie, editură sunt de tip text, trebuie obligatoriu să fie completate pentru a adăuga o nouă carte. Dacă se dorește renunțarea la introducerea unei cărți se alege opțiunea Anuleaza.

<form class="form-horizontal" action="adaugacarte-action.php" onsubmit="return validateForm();" method="get">

<label for="inputTitle" class="control-label">Titlu</label>

<input class="form-control" id="inputTitle" placeholder="Titlu" type="text" name='inputTitle'

value="<?php if ($editeaza) { echo $detaliiCarte["title"]; } ?>">

<label for="inputAuthor" class="control-label">Autor</label>

<input class="form-control" id="inputAuthor" placeholder="Autor" type="text" name="inputAuthor"

value="<?php if ($editeaza) { echo $detaliiCarte["author"]; } ?>">

<label for="inputYear" class="control-label">An</label>

<input class="form-control" id="inputYear" placeholder="An" type="text" name="inputYear"

value="<?php if ($editeaza) { echo $detaliiCarte["year"]; } ?>">

<label for="inputCategory" class="control-label">Categorie</label>

<input class="form-control" id="inputCategory" placeholder="Categorie" type="text" name="inputCategory" value="<?php if ($editeaza) { echo $detaliiCarte["category"]; } ?>">

<label for="inputYear" class="control-label">Editura</label>

<input class="form-control" id="inputEditura" placeholder="Editura" type="text" name="inputPublisher" value="<?php if ($editeaza) { echo $detaliiCarte["publisher"]; } ?>">

<a class="btn btn-sm btn-default "href="/test/listacarti.php">Salveaza</a>

<a class="btn btn-sm btn-default "href="/test/listacarti.php">Anuleaza</a>

</form>

Pentru editare carte se folosește același formular cu diferența că, datele sunt trimise la altă funcție care le procesează și le introduce în baza de date.

Butonul Adauga apelează funcția addNewBook :

function addNewBook($title, $author, $year, $category, $publisher){

$db=getConnection();

$new_category_id = getNewCategoryId( $db, $category );

$new_publisher_id = getNewPublisherId( $db, $publisher );

$q_insert_new_book = "INSERT INTO books( author, title, year, publisher_id, category_id ) VALUES ( '$author', '$title', '$year', '$new_publisher_id', '$new_category_id')";

if(!$result = $db->query($q_insert_new_book)){

die('There was an error running the query [' . $db->error . ']');

}

header('Location: listacarti.php');

}

Se verifică dacă categoria există. Dacă categoria există se selectează id, dacă nu există se inserează în tabela categorii o nouă categorie și se selectează id –ul noii categorii inserate :

function getNewCategoryId( $db, $category ){

$q_category="SELECT c.id AS category_id FROM category c WHERE UPPER(c.name) = UPPER('$category')";

if(!$result = $db->query($q_category)){

die('There was an error running the query [' . $db->error . ']');

}

$num_rows = $result->num_rows;

if ($result->num_rows == 0) {

$q_insert_category="INSERT INTO category(name) VALUES ('$category')";

if(!$result = $db->query($q_insert_category)){

die('There was an error running the query [' . $db->error . ']');

}

$q_get_new_category_id = "SELECT c.id AS category_id FROM category c WHERE c.name='$category'";

if(!$result = $db->query($q_get_new_category_id)){

die('There was an error running the query [' . $db->error . ']');

}

$new_category_id = $result->fetch_assoc()['category_id'];

}else{

$new_category_id = $result->fetch_assoc()['category_id'];

}

return $new_category_id;

}

Se verifică dacă editura există. Dacă editura există se selectează id, dacă nu există se inserează în tabela edituri o nouă editura și se selectează id –ul noii edituri inserate :

function getNewPublisherId( $db, $publisher ){

$q_publisher="SELECT p.id AS publisher_id FROM publishers p WHERE UPPER(p.name) = UPPER('$publisher')";

if(!$result = $db->query($q_publisher)){

die('There was an error running the query [' . $db->error . ']');

}

$num_rows = $result->num_rows;

if ($result->num_rows == 0) {

$q_insert_publishers="INSERT INTO publishers(name) VALUES ('$publisher')";

if(!$result = $db->query($q_insert_publishers)){

die('There was an error running the query [' . $db->error . ']');

}

$q_get_new_publisher_id = "SELECT p.id AS publisher_id FROM publishers p WHERE UPPER(p.name) = UPPER('$publisher')";

if(!$result = $db->query($q_get_new_publisher_id)){

die('There was an error running the query [' . $db->error . ']');

}

$new_publisher_id = $result->fetch_assoc()['publisher_id'];

}else{

$new_publisher_id = $result->fetch_assoc()['publisher_id'];

}

return $new_publisher_id;

}

?>

Adaugă cititor

Formularul Adauga Cititor are următoarele câmpuri : nume, prenume, C. N. P, adresa și două butoane Adauga și Anuleaza.

<form action="adaugacititor-action.php" onsubmit="return validateForm();" method="get">

<input id="inputNume" placeholder="Nume" type="text" name='inputNume' >

<input id="inputPrenume" placeholder="Prenume" type="text" name="inputPrenume">

<input id="inputCNP" placeholder="CNP" type="text" name="inputCNP">

<input id="inputAdresa" placeholder="Adresa" type="text" name="inputAdresa">

<button center" type="submit" name="adauga">Adauga</button>

<button center" type="submit" name="anuleaza">Anuleaza</button>

</form>

Câmpurile nume, prenume, C.N.P. adresă sunt de tip text, trebuie obligatoriu să fie completate pentru a adăuga o nou cititor. C.N.P. trebuie să conțină doar 13 cifre pentru a se înregistra un nou cititor. Dacă se dorește renunțarea la introducerea unui cititor se alege opțiunea Anuleaza.

Câmpul C.N.P trebuie sa fie unic, astfel înainte de a se introduce cititorul în baza de date se face o verificare a CNP-ului. Dacă acesta există un mesaj de atenționare va apărea când se apasă pe butonul adaugă.

Funcția care verifică dacă un CNP există deja în baza de date este următoarea:

function isCNPUnique( $cnp, $idReader ){

$db=getConnection();

if ($idReader != "") {

$sql = "SELECT id FROM readers WHERE cnp = '$cnp' AND id != $idReader";

}else{

$sql = "SELECT id FROM readers WHERE cnp = '$cnp'";

}

if ( $result->num_rows > 0){

return 0;

}

return 1;

}

Când se editează un cititor se apelează aceiați functțe și de aceia trebuie luat în considerare și id-ul(câmp unic) cititorului.

După ce toate câmpurile sunt validate, se apelează funcția addNewReader:

function addNewReader($last_name, $first_name, $cnp, $address){

$db=getConnection();

$q_add_new_reader="INSERT INTO readers( first_name, last_name, cnp, address) VALUES ('$first_name', '$last_name', '$cnp', '$address')";

if(!$result = $db->query($q_add_new_reader)){

die('There was an error running the query [' . $db->error . ']');

}

}

La editarea unui cititor deja existent în baza de date se apelează funcția editReader:

function editReader($id, $last_name, $first_name, $cnp, $address){

$db=getConnection();

$q_add_new_reader="UPDATE readers SET first_name = '$first_name', last_name = '$last_name', cnp = '$cnp', address = '$address' WHERE id = '$id' ";

if(!$result = $db->query($q_add_new_reader)){

die('There was an error running the query [' . $db->error . ']');

}

}

Listă cărți

Lista Carti este o pagină care își ia datele pentru fiecare carte introdusă din Adauga Carte, conține un buton Editează, care permite modificarea datelor pentru o carte salvată în baza de date.

<div class="col-sm-10 col-sm-offset-1">

<table class="table table-striped table-hover ">

<thead>

<tr>

<th>#</th>

<th>Titlu</th>

<th>Autor</th>

<th>An</th>

<th>Editura</th>

<th>Categorie</th>

</tr>

</thead>

<tbody>

<?php

$id=0;

foreach ($list as $value){

$idCarte=$value['id'];

$row="<tr>" .

"<td>" . ++$id . "</td>" .

"<td>" . $value['title'] . "</td>" .

"<td>" . $value['author'] . "</td>" .

"<td>" . $value['year'] . "</td>" .

"<td>" . $value['publisher'] . "</td>" .

"<td>" . $value['category'] . "</td>" . "<td>" . "<a class=\"btn btn-sm btn-default\" href=\"/test/adaugacarte.php?id=$idCarte&action=edit\">Editeaza</a>" . "</td>" .

"</tr>";

echo $row;

}

?>

</tbody>

</table>

</div>

Butonul Editează are ca rezultat următoarea fereastră :

<form class="form-horizontal" action="adaugacarte-action.php" onsubmit="return validateForm();" method="get">

<label for="inputTitle" class="control-label">Titlu</label>

<input class="form-control" id="inputTitle" placeholder="Titlu" type="text" name='inputTitle'

value="<?php if ($editeaza) { echo $detaliiCarte["title"]; } ?>">

<label for="inputAuthor" class="control-label">Autor</label>

<input class="form-control" id="inputAuthor" placeholder="Autor" type="text" name="inputAuthor"

value="<?php if ($editeaza) { echo $detaliiCarte["author"]; } ?>">

<label for="inputYear" class="control-label">An</label>

<input class="form-control" id="inputYear" placeholder="An" type="text" name="inputYear"

value="<?php if ($editeaza) { echo $detaliiCarte["year"]; } ?>">

<label for="inputCategory" class="control-label">Categorie</label>

<input class="form-control" id="inputCategory" placeholder="Categorie" type="text" name="inputCategory" value="<?php if ($editeaza) { echo $detaliiCarte["category"]; } ?>">

<label for="inputYear" class="control-label">Editura</label>

<input class="form-control" id="inputEditura" placeholder="Editura" type="text" name="inputPublisher" value="<?php if ($editeaza) { echo $detaliiCarte["publisher"]; } ?>">

<a class="btn btn-sm btn-default "href="/test/listacarti.php">Salveaza</a>

<a class="btn btn-sm btn-default "href="/test/listacarti.php">A nuleaza</a>

</form>

Pagina care afișează toate cărțile aflate în bibliotecă conține și un formular pentru filtrare, astfel se poate afla foarte ușor dacă o carte de la o anumită editură, categorie, sau an există în bibliotecă.

Filtrarea cărților se face prin apelarea funcției getFilteredBooks care are ca parametrii titlul, autorul, anul, editura și categoria unei cărți care se dorește a fi gasită.

function getFilteredBooks($title, $author, $year, $category, $publisher, $available = false){

$db=getConnection();

$where_clause = createWhereClause($title, $author, $year, $category, $publisher, $available);

$sql = "SELECT b.id, b.title, b.author, b.year, c.name AS category, p.name AS publisher FROM books b INNER JOIN category c ON b.category_id = c.id INNER JOIN publishers p ON b.publisher_id = p.id" . $where_clause;

if(!$result = $db->query($sql)){

die('There was an error running the query [' . $db->error . ']');

}

if ( $result->num_rows) {

while($row = $result->fetch_assoc()){

$roww['id']=$row['id'];

$roww['title']=$row['title'];

$roww['author']=$row['author'];

$roww['year']=$row['year'];

$roww['publisher']=$row['publisher'];

$roww['category']=$row['category'];

$arr[]=$roww;

}

return $arr;

}

return array();

}

Deoarece nu se știe de la început care parametrii vor fi introduși trebuie verificați pentru a crea interogarea finală.

Funcția care crează clauza WHERE este următoarea:

function createWhereClause($title, $author, $year, $category, $publisher, $available){

$sql=" WHERE ";

$where_id=0;

if ($title != "") {

$sql .="b.title LIKE '%$title%'";

$where_id=1;

}

if($author !=""){

if($where_id != 0){

$sql .= " AND b.author LIKE '%$author%'";

}

else{

$where_id=1;

$sql .="b.author LIKE '%$author%'";

}

}

if($year !=""){

if($where_id != 0){

$sql .= " AND b.year LIKE '$year'";

}

else{

$where_id=1;

$sql .="b.year LIKE '$year'";

}

}

if($category !=""){

$c=strtoupper($category);

$q_category="SELECT c.id AS category_id FROM category c WHERE UPPER(c.name) LIKE '%$c%'";

if(!$result = $db->query($q_category)){

die('There was an error running the query [' . $db->error . ']');

}

$i=0;

$categories_list="-1";

while($row = $result->fetch_assoc()){

$categories_list .= ", " . $row['category_id'];

}

if($where_id != 0){

$sql .= " AND b.category_id IN ( $categories_list )";

}

else{

$where_id=1;

$sql .="b.category_id IN ( $categories_list )";

}

}

if($publisher !=""){

$p=strtoupper($publisher);

$q_publisher = "SELECT p.id AS publisher_id FROM publishers p WHERE UPPER(p.name) LIKE '%$p%'";

if(!$result = $db->query($q_publisher)){

die('There was an error running the query [' . $db->error . ']');

}

$i=0;

$publishers_list="-1";

while($row = $result->fetch_assoc()){

$publishers_list .= ", " . $row['publisher_id'];

}

if($where_id != 0){

$sql .= " AND b.publisher_id IN ( $publishers_list )";

}

else{

$where_id=1;

$sql .="b.publisher_id IN ( $publishers_list )";

}

}

if ( $available == true) {

if($where_id != 0){

$sql .= " AND b.id NOT IN ( SELECT l.book_id FROM loans l WHERE l.returned = 0 )";

}

else{

$where_id=1;

$sql .="b.id NOT IN ( SELECT l.book_id FROM loans l WHERE l.returned = 0 )";

}

}

if($where_id == 0){

$sql .= "1=1";

}

return $sql;

}

Pentru câmpurile autor, titlu și an se verifică doar dacă există și dacă sunt diferite de null se adaugă în clauza WHERE pentru că ele sunt stocate direct în tabela books, categoria și editura sunt stocare prin id-ul unic. Pentru categorie se interoghează baza de date, respectiv tabela category de unde se returneaza id-urile categoriilor ale căror nume conțin ceea ce a introdus utilizatorul în formularul de filtrare. Similar se procedează și pentru editură.

4.2.4. Listă cititori

Lista Cititori este o listă care își ia datele pentru fiecare cititor introdus din Adauga Cititor. Pagina Lista Cititori Activi conține butoanele Vezi fisa, Editează, Sterge.

<form action="adaugacititor-action.php" onsubmit="return validateForm();" method="get">

<input id="inputNume" placeholder="Nume" type="text" name='inputNume' >

<input id="inputPrenume" placeholder="Prenume" type="text" name="inputPrenume">

<input id="inputCNP" placeholder="CNP" type="text" name="inputCNP">

<input id="inputAdresa" placeholder="Adresa" type="text" name="inputAdresa">

<button center" type="submit" name="editeaza">Editeaza</button>

<button center" type="submit" name="anuleaza">Anuleaza</button>

</form>

function editReader($id, $last_name, $first_name, $cnp, $address){

$db=getConnection();

$q_add_new_reader="UPDATE readers SET first_name = '$first_name', last_name = '$last_name', cnp = '$cnp', address = '$address' WHERE id = '$id' ";

if(!$result = $db->query($q_add_new_reader)){

die('There was an error running the query [' . $db->error . ']');

}

}

Butonul Sterge șterge un cititor din Lista Cititori Activi și – l trece în Lista Cititori ”Expirati” :

function db_stergeCititor( $id ){

$db=getConnection();

$return_book="UPDATE readers r SET r.disabled = 1 WHERE r.id = '$id'";

if(!$result = $db->query($return_book)){

die('There was an error running the query [' . $db->error . ']');

}

}

Cititorii existenți în baza de date sunt împărțiți în 2 liste separate: lista cititorilor activi, și lista cititorilor „expirati”. În cea de-a doua categorie intră cititorii care nu mai pot împrumuta carți din diferite motive.

Paginile care afișează listele de cititori conțin câte un formular prin care se poate efectua o filtrare eficientă.

Funcția care filtreaza cititorii în funcție de datele introduse în formular este următoarea:

function getFilteredReaders( $last_name, $first_name, $cnp, $address ,$disabled){

$db=getConnection();

if ($disabled == 1) {

$sql = "SELECT * FROM readers r WHERE r.first_name LIKE '%$first_name%' AND r.last_name LIKE '%$last_name%' AND r.cnp LIKE '%$cnp%' AND r.address LIKE '%$address%' AND r.disabled = 1 ORDER BY r.last_name";

}else{

$sql = "SELECT * FROM readers r WHERE r.first_name LIKE '%$first_name%' AND r.last_name LIKE '%$last_name%' AND r.cnp LIKE '%$cnp%' AND r.address LIKE '%$address%' AND r.disabled = 0 ORDER BY r.last_name";

}

if(!$result = $db->query($sql)){

die('There was an error running the query [' . $db->error . ']');

}

if ( $result->num_rows) {

while($row = $result->fetch_assoc()){

$roww['id']=$row['id'];

$roww['first_name']=$row['first_name'];

$roww['last_name']=$row['last_name'];

$roww['cnp']=$row['cnp'];

$roww['address']=$row['address'];

$arr[]=$roww;

}

return $arr;

}

return array();

}

Ultimul parametru disabled se folosește pentru a identifica tipul de cititori doriți: 0 cititori activi, 1 – cititori expirați.

Pentru fiecare dintre cititorii activi există trei butoane: Vezi fisa, Editeaza și Sterge.

Butonul Vezi fisa duce către o pagină care conține toate informațiile despre cărțile împrumutate de acel cititor:

Se poate observa că există 2 liste: una care conține cărțile pe care le are împrumutate în acest moment cititorul, și una care conține toate cărțile pe care cititorul le-a împrumutat în trecut.

Pentru afișarea celor doua liste se apelează funcția: getHistoryForId, care are ca parametrii id-ul cititorului pentru care se dorește afișarea cărților iîprumutate, și un parametru $ret prin care se specifică dacă se doresc cărțile împrumutate în acest moment, sau cele care au fost împrumutate în trecut și returnate.

function getHistoryForId($id, $ret){

$db=getConnection();

if ( $ret == true ) {

$sql = "SELECT t1.start_date, t1.end_date, t1.returned, t2.id, t2.author, t2.title, t2.year, p.name AS publisher FROM loans t1 INNER JOIN books t2 ON t1.book_id = t2.id INNER JOIN publishers p ON t2.publisher_id = p.id WHERE t1.returned = 1 AND t1.reader_id = $id ORDER BY t1.end_date DESC";

}

else{

$sql = "SELECT t1.start_date, t1.end_date, t1.returned, t2.id, t2.author, t2.title, t2.year, p.name AS publisher FROM loans t1 INNER JOIN books t2 ON t1.book_id = t2.id INNER JOIN publishers p ON t2.publisher_id = p.id WHERE t1.returned = 0 AND t1.reader_id = $id ORDER BY t1.end_date-CURDATE() ASC";

}

if(!$result = $db->query($sql)){

die('There was an error running the query [' . $db->error . ']');

}

while($row = $result->fetch_assoc()){

$roww['id']=$row['id'];

$roww['title']=$row['title'];

$roww['author']=$row['author'];

$roww['year']= $row['year'];

$roww['publisher']=$row['publisher'];

$roww['start_date']=$row['start_date'];

$roww['end_date']=$row['end_date'];

$roww['returned']=$row['returned'];

$arr[]=$roww;

}

return $arr;

}

Butonul Imprumuta carte duce către o pagină care conține o listă cu toate cărțile disponibile în acel moment pentru a fi împrumutate. Pe acea pagină există de asemenea posibililitatea de a filtra cărțile dupa autor, titlu, an, categorie, editură.

După ce se găsește cartea cautată se apasă butonul împrumută care duce la o nouă pagină unde se va finaliza procesul de împrumutare a unei cărți.

Pe această pagină sunt prezente detaliile cărții pe care cititorul dorește să o împrumute și un câmp care trebuie completat cu numărul de zile pentru împrumut. Dupa ce se apasă butonul împrumută se apelează funcția loanBook care are ca parametrii id-ul cititorului, id-ul cărții și numărul de zile pentru care se dorește împrumutul.

function loanBook($idReader, $idBook, $days){

$db=getConnection();

$startDate = date("Y-m-d");

$startDateI = strtotime(date("Y-m-d"));

$endDateI = $startDateI + 3600 * 24 * $days;

$endDate = date('Y-m-d', $endDateI);

$loan_book="INSERT INTO loans( reader_id, book_id, start_date, end_date, returned) VALUES ('$idReader', '$idBook', '$startDate', '$endDate', '0')";

if(!$result = $db->query($loan_book)){

die('There was an error running the query [' . $db->error . ']');

}

}

Această funcție calculează data de returnare a cărții pornind de la ziua curentă și adaugând numărul de zile primit ca parametru. Se introduce o noua înregistrare în tabela loans(care conține istoricul tuturor împrumutorilor) continând id-ul cărții, id-ul cititorului, data curentă, și respectiv data la care trebuie returnată cartea.

Exista si posibilitatea de a prelungi perioada de imprumut a unei carti. Cand se apasa pe butonul Prelungeste se afiseaza o pagina care contine toate detaliile despre cartea imprumutata, cât si un camp care trebuie completat cu numarul de zile pentru care se doreste prelungirea imprumutului curent.

Funcția care salvează în baza de date numărul de zile cu care a fost prelungit împrumutul este următoarea:

function loanBookExtend( $idReader, $idBook, $days , $end_date_old){

$db=getConnection();

$endDateI = strtotime($end_date_old) + 3600 * 24 * $days;

$endDate = date('Y-m-d', $endDateI);

$loan_book="UPDATE loans l SET l.end_date = '$endDate' WHERE l.reader_id = '$idReader' AND l.book_id = '$idBook'";

if(!$result = $db->query($loan_book)){

die('There was an error running the query [' . $db->error . ']');

}

}

După ce se apasă butonul Prelungeste se ajunge din nou la pagina cu istoricul tuturor împrumuturilor pentru acel cititor, care va conține noile informații despre împrumutul caruia i-a fost extinsă perioada.

Dacă se dorește returnarea unei cărți se apasă butonul Returneaza, care va apela functia:

function returnBook($idReader, $idBook){

$db=getConnection();

$return_book="UPDATE loans SET returned = 1 WHERE reader_id = $idReader AND book_id = $idBook";

if(!$result = $db->query($return_book)){

die('There was an error running the query [' . $db->error . ']');

}

}

Aceasta editează câmpul returned din tabela loans, setându-i valoarea 1, ceea ce înseamnă că cititorul a returnat cartea respectivă.

După ce se apasă butonul returnează se actualizează listele cărților împrumutate de acel cititor, respectiv cartea care a fost returnată va dispărea din lista cărților împrumutate în acest moment și va apărea în lista cărților returnate.

Dacă un cititor are o carte nereturnată la timp, atunci el nu va mai avea dreptul de a împrumuta o nouă carte, butonul de Imprumuta Carte fiind dezactivat. Deasemenea va

apărea un mesaj de eroare.

Funcția care verifică dacă un cititor are cărți restante este următoarea:

function userHasUnrerurnedBooks( $id ){

$db=getConnection();

$sql = "SELECT l.reader_id FROM loans l WHERE l.returned = 0 AND l.reader_id = '$id' AND l.end_date < CURDATE() ";

if(!$result = $db->query($sql)){

die('There was an error running the query [' . $db->error . ']');

}

if ( $result->num_rows){

return 0;

}

return 1;

}

Deasemenea dacă un cititor are deja împrumuate trei cărți el nu va mai putea împrumuta altă carte până în momentul în care returnează o carte. Se va afișa și un mesaj de eroare care precizează din ce motiv nu se poate împrumuta o nouă carte.

Funcția care verifică dacă un cititor are deja 3 cărți împrumutate la momentul curent este următoarea:

function db_canLoan($id){

$db=getConnection();

$sql = "SELECT l.id FROM loans l WHERE l.reader_id = '$id' AND l.returned = 0";

if(!$result = $db->query($sql)){

die('There was an error running the query [' . $db->error . ']');

}

if ( $result->num_rows <3) {

return 1;

}

return 0;

}

Pagina Carti Restante o listă cu cititorii care au depășit perioada de împrumut pentru o carte. Pe această pagină există două butoane Vezi Fisa și Șterge Cititor. Vezi Fisa te duce la cărțile împrumutate de cititorul respectiv în acel moment cu posibilitatea de a prelungi sau a returna cartea :

function returnBook($idReader, $idBook){

$db=getConnection();

$return_book="UPDATE loans SET returned = 1 WHERE reader_id = $idReader AND book_id = $idBook";

if(!$result = $db->query($return_book)){

die('There was an error running the query [' . $db->error . ']');

}

}

Dacă un cititor a fost șters prin alegerea butonului Sterge Cititor, pentru că nu și –a predat cărțile la timp, din lista de cititori activi, el ajunge în lista de cititori ”expirați”, iar activarea lui se poate face prin apelarea butonului Activeaza din Lista Cititori ”Expirati”.

function db_activeazaCititor( $id ){

$db=getConnection();

$return_book="UPDATE readers r SET r.disabled = 0 WHERE r.id = '$id'";

if(!$result = $db->query($return_book)){

die('There was an error running the query [' . $db->error . ']');

}

}

Carti Nereturnate este o pagină ce conține cititorii și cărțile și zilele rămase pentru fiecare cititor în parte :

<table class="table table-striped table-hover">

<thead>

<tr>

<th>#</th>

<th>Nume</th>

<th>Prenume</th>

<th>Titlul Cartii</th>

<th>Zile depasite</th>

</tr>

</thead>

<tbody>

<?php

$id=0;

if(is_array($list))

foreach ($list as $value){

$reader_id=$value['reader_id'];

$row="<tr>" .

"<td>" . ++$id . "</td>" .

"<td>" . $value['last_name'] . "</td>" .

"<td>" . $value['first_name'] . "</td>" .

"<td>" . $value['title'] . "</td>" .

"<td>" . $value['days'] . "</td>" .

"<td>" . "<a class=\"btn btn-sm btn-default\" href=\"/test/istoric.php?id=$reader_id\">Vezi Fisa</a> " . "</td>" .

"</tr>";

echo $row;

}

?>

</tbody>

</table>

function getAllUnreturnedBooks(){

$db=getConnection();

$sql = "SELECT r.first_name, r.last_name, b.title, l.id, l.reader_id, DATEDIFF( l.end_date,CURDATE() ) AS days FROM loans l INNER JOIN readers r ON r.id = l.reader_id INNER JOIN books b ON b.id = l.book_id WHERE l.returned = 0 ORDER BY days ASC";

if(!$result = $db->query($sql)){

die('There was an error running the query [' . $db->error . ']');

}

if ( $result->num_rows) {

while($row = $result->fetch_assoc()){

$roww['id']=$row['id'];

$roww['reader_id']=$row['reader_id'];

$roww['first_name']=$row['first_name'];

$roww['last_name']=$row['last_name'];

$roww['days']=$row['days'];

$roww['title']=$row['title'];

$arr[]=$roww;

}

return $arr;

}

return array();

}

Aceată pagină conține butonul Vezi Fisa care duce la istoricul cărților împrumutate de cititorul respective cu posibilitatea de returnare sau prelungire :

LIMBAJE PENTRU BAZE DE DATE

Împreună cu fiecare model de date sunt necesare anumite limbaje pentru a defini schemele de reprezentare și pentru a efectua operații cu datele memorate în concordanță cu schemele. Sunt uzitate astfel, următoarele tipuri de limbaje :

Limbaj de definire a datelor (DDL) – este un limbaj pentru definirea schemei conceptuale;

Limbaj pentru manipularea datelor (DML);

Limbaj pentru memorarea datelor (SDL).

  Pentru interacțiunile utilizatorilor cu baza de date este necesar un limbaj prietenos, cu o sintaxă simplă, numit limbaj de interogare (QL). În ciuda numelui său, un limbaj de interogare include facilități pentru inserarea, ștergerea și modificarea datelor din baza de date. În cazul modelului relațional, abordarea folosită constă în a încorpora toate aceste facilități cerute într-o sintaxă uniformă, în cadrul unui singur limbaj. Standardul cel mai cunoscut este SQL.

 Limbajul numit SQL (Structured Query Language) este utilizat intens în prelucrarea bazelor de date structurate conform modelului relațional. Unul din motivele popularității de care se bucură acest limbaj este faptul că el a fost standardizat de American National Standards Institute (ANSI). În plus, limbajul a fost inițial dezvoltat și comercializat de IBM, ceea ce i-a asigurat o mare răspândire. Principala aplicație în limbajul SQL, efectuată de utilizator, este interogarea bazei de date.

Printr-o singură instrucțiune SQL se poate exprima o interogare care presupune o secvență de operații SELECT, PROJECT și JOIN, nefiind necesară o anumită ordine a acestora. Deși forma de exprimare a unei instrucțiuni SQL pare a fi imperativă, în esență instrucțiunea este de tip declarativ. Drept urmare limbajul SQL îl scutește pe utilizator de necesitatea dezvoltării unei secvențe de pași care trebuie parcurși pentru obținerea informației dorite – tot ce are de făcut este să descrie informația de care are nevoie.

Majoritatea instrucțiunilor din SQL sunt executabile, ele putând fi interpretate și executate imediat în mod interactiv sau putând fi incluse în diferite aplicații scrise în limbaje de programare cum sunt APL, BASIC, C, COBOL, FORTRAN, PL/I, ASSEMBLER, etc., executându-se în momentul rulării programului respectiv.

5.1. limbajul mysql

5.1.1. descriere

Bazele de date sunt folosite pentru stocarea informațiilor în vederea furnizării ulterioare în funcție de solicitarea primită.

MySQL este un sistem de baze de date funcțional independent.

În PHP există funcții pentru toate operațiile executate asupra bazelor de date MySQL.

Administrarea MySQL se poate face din linie de comandă sau folosind browserul și accesând aplicația numita PHPMyAdmin scrisă în PHP.

5.1.2. Operații asupra bazelor de date

Cele mai uzuale operații cu bazele de date sunt:

5.1.3. Tipuri de date MySQL

În MySQL spațiul alocat pe discul serverului este funcție de tipul de date. Câteva din tipurile de date folosite în bazele de date MySQL sunt:

Pentru ca baza de date să fucționeze mai bine coloanelor li s-au adăugat modificatori de coloană.

Tipul de date întregi încep de la valori negative la pozitive. Dacă se adaugă opțiunea UNSIGNED, care este un modificator de coloană, nu vor mai fi valori negative ci vor începe de la 0.

Alți modificatori sunt:
_INCREMENT functionează cu orice tip întreg. La fiecare rând nou adaugat în baza de date numărul asociat va fi incrementat.

NULL înseamnă fără valoare (diferit de spatiu sau zero).
NOT NULL înseamnă că orice înregistrare va fi considerată ceva.
PRIMARY este rolul primei coloane din tabel, totodată reprezentând elementul de referință pentru fiecare linie.

5.1.4. Comenzi elementare MySQL

Cele mai frecvent utilizate comenzi MySQL sunt prezentate în coloana de mai jos. Ele sunt mult mai multe, dar aici voi face o scurtă prezentarea lor.

Deși MySQL are suport pentru diacritice și setul de caractere 8859-2, este preferabil să nu folosiți diacritice în numele bazelor de date, tabelelor sau câmpurilor. De asemenea, nu puteți folosi ca nume de tabel sau de câmp cuvinte rezervate (nume de funcții, tipuri de caractere din MySQL precum CREATE, DROP sau COLUMN). Se pot folosi nume de tabele care conțin spații dar în practică trebuie să încadrați numele între back-ticks ` (semnul ` îl găsiți pe tasta aflată imediat sub Escape și înainte de 1).

Exemplu:
CREATE TABLE `tabel al carui nume are spatii` (`camp 1`, TEXT);
SHOW COLUMNS FROM `tabel al carui nume are spatii`;

Semnul * este definit în MySQL ca însemnând tot/toate.

Semnul % este folosit în interogările MySQL dacă vrem să găsim cuvântul oriunde în cadrul textului. Mai exact:

%cuvant_cautat – dacă vrem să afișeze toate cuvintele care se termină cu 'cuvantul_cautat' (pot fi și câteva caractere)

cuvant_cautat% – afișează toate cuvintele care încep cu 'cuvantul_cautat'
%cuvant_cautat% – afișează toate cuvintele care conțin 'cuvantul_cautat' oriunde în text.

Putem afla câte înregistrări sunt pentru un criteriu de selecție cu ajutorul lui count(). Putem afla astfel câte înregistrări sunt în total în tabel sau câte înregistrări sunt în tabel al căror câmp este cel cautat… Cu ajutorul instrucțiunii GROUP BY putem "grupa" rezultatele astfel încât să nu vedem duplicatele și să vedem doar valorile unice. Pentru a limita numărul începând de la înregistrarea 10 încă 5 înregistrări).
Pentru ștergerea înregistrărilor dintr-un tabel se folosește comanda DELETE. Pentru ștergerea unui tabel sau a unei baze de date comanda este DROP.

Comanda UPDATE se folosește când vrem să modificăm conținutul unei înregistrări fără a o șterge. Dacă dorim să schimbăm structura unui tabel existent sau să adăugăm alte coloane folosim comanda ALTER TABLE.

INDECSI – Cel mai folosit tip de index este id-ul. Id-ul este un număr unic de identificare pentru un element distinct (un rând) al unui tabel. Un exemplu de id din viața reală este numerotarea cd-urilor. Când aveți un cd nou îl numerotați și îl puneți în raft la sfârșit iar în catalog puteți să îl puneți sortat după titlu sau după numărul de ordine. La fel și într-o bază de date, puteți crea un câmp care să introducă automat un nr pentru fiecare rând nou adăugat în baza de date și la afișare puteți să îl folosiți .

Pentru a creea un index avem următoarele comenzi:

Să zicem că avem o bază de date numită lista cu un câmp caseta și adăugăm câmpul id_casete – comanda este următoarea:

ALTER TABLE `caseta` ADD `id_caseta` INT;

ALTER TABLE `caseta` CHANGE `id_caseta` `id_caseta` INT(11) UNSIGNED NOT NULL;

ALTER TABLE `caseta` ADD PRIMARY KEY (id_caseta);

ALTER TABLE `caseta` CHANGE `id_caseta` `id_caseta` INT(11) UNSIGNED DEFAULT "0" NOT NULL AUTO_INCREMENT;

Și din acest moment, orice casetă nouă introdusă va avea automat un nr de ordine. Este posibil ca toată înșiruirea de comenzi de mai sus să se poată face printr-o singură linie de cod, dar este mai sigur să faceți câte o modificare în parte decât toate odată, pentru a detecta eventualele erori. Este bine să creați un id la începutul tabelului, când nu aveți intrări în baza de date, pentru a face incrementarea automat, altfel e posibil să vă dea erori. Cu ajutorul id-ului puteți afișa de exemplu noutațile, cu o comandă de genul – afișează ultimele 10 intrări sortate după id…, știind că întotdeauna ultima intrare are numărul cel mai mare.

MySQL stochează fizic datele unui tabel într-un fișier pe hard disc și cu cât tabelul e mai mare, cu atât mărimea acestui fișier crește. Versiunea 3.22 a MySQL are o limită de 4 GB pentru mărimea unui tabel. În versiunile superioare această limită este extinsă până la 8 milioane TB pentru tipul de tabel MyISAM. Cu toate acestea, sistemele de operare pot avea propriile limitări ale mărimii fișierelor. Mărimea impicită a tabelelor MySQL este de aproximativ 4 GB.

5.2. HTML – HYPERTEXT MARKUP LANGUAGE

Redus la esență, Limbajul de Marcare HiperText (HiperText Markup Language – HTML) este un set de coduri speciale care se inserează într-un text, pentru a adăuga informații despre formatarea și despre legături. HTML se bazează pe Limbajul Generalizat Standard de Marcare ( Standard Generalized Markup Language – SGML).

Pentru a învăța HTML trbuie următoarele:

să știi să utilizezi un editor de text (ex: Notepad etc.)

să ai cel puțin un browser de internet (ex: Microsoft Internet Explorer, Netscape Comunicator etc.)

să înveți comenzile, atributele necesare limbajului HTML

Structura unui document HTML

Despre taguri

Tag-urile sunt niște marcaje sau etichete pe care limbajul HTML le folosește alături de texte pentru a ajuta browser-ul de internet să afișeze corect conținutul paginii web.

Aceste tag-uri (etichete) pot fi de două feluri:

tag-uri pereche (un tag de început și unul de încheiere). Exemple: <HTML> si </HTML>; <TITLE> si </TITLE>; <HEAD> si </HEAD>;

tag-uri singulare (nu au un tag de încheiere) Exemple: <HR>, <BR>.

<HTML> – cu acest tag începe orice document HTML. Prin folosirea acestui tag îi spunem browser-ului că este vorba de un fișier HTML pentru a-l putea afișa.

<HEAD> și </HEAD> – între aceste taguri sunt trecute, pe lângă titlul paginii, diverse informații folositoare pentru browser-ul de internet.

<TITLE> și </TITLE> -cu ajutorul acestor perechi de taguri vom putea da un titlu documentului nostru. Astfel, textul pe care îl vom scrie între aceste tag-uri va fi afișat în bara de titlu a documentului.

<BODY> – odată cu acest tag începe conținutul paginii web

<BODY> și </BODY> -tot ce se scrie între aceste tag-uri va fi afișat de către browser, pe ecranul monitorului.

</HTML> – este tag-ul de încheiere al tag-ului <HTML>. Codul oricărui document se termină cu acest tag.

Tag-urile (etichetele) pot fi scrise atât cu litere mari cât și cu litere mici.

Atribute HTML

Atributele sunt niște proprietăți ale tag-urilor. Atributele se pun numai în tag-ul de început. Dacă un tag nu are nici un atribut, atunci browser-ul va lua în considerare valorile implicite ale tag-ului respectiv.

<BODY BGCLOR=”red”> -afișează fundalul de culoare roșu.

<BODY LEFTMARGIN=”100” TOPMARGIN=”50”>

“LEFTMARGIN” – stabilește distanța dintre marginea stângă a ferestrei browser-ului și marginea stângă a conținutului paginii.

“TOPMARGIN” – stabilește distanța dintre marginea de sus a ferestrei browser-ului și marginea de sus a conținutului paginii.

<BODY TEXT> -culoarea textului

<BODY ALINK> – culoarea legăturilor active (când mouse-ul se află deasupra lor)

<BODY LINK> – culoarea legăturilor nevizitate

<BODY VLINK> – culoarea legăturilor vizitate

<BR> – sfârșitul randului

<B> – text bold

</B> – sfârșitul textului bold

<I> – text italic

</I> – sfârșitul textului italic

<U> – text subliniat

</U> – sfârșitul textului subliniat

<STRONG> – text evidențiat

</STRONG> – sfârșitul textului evidențiat

<SUB> – text indice

</SUB> – sfârșitul textului indice

<SUP> – text exponent

</SUP> – sfârșitul textului exponent

<FONT COLOR=”blue” face=”times new roman” size=”10” align=”right”>

Color – culoare

Face – stil

Size – mărime

Align – aliniere

Left – stânga

Right – dreapta

Top – sus

Bottom – jos

Center – centru

Middle – mijloc

Width – lungime

<BLOCKQUOTE> ….</BLOCKQUOTE> – indentarea unui bloc de text

<xmp>…</xmp> (80 de caractere pe rând)

<listing>…</listing> (120 de caractere pe rând)

<p> – face posibilă trecerea la o linie nouă și permite

Inserarea unui spațiu suplimentar înainte de blocul paragraph

Inserarea unui spațiu suplimentar dupa blocul paragraph, dacă se folosește delimitatorul </p>

Alinierea textului cu ajutorul atributului “align”, având posibile “left”, “center” sau “right”.

<p align=”right”> – paragraph aliniat la dreapta

<p align=”center”> – paragraph aliniat în centru

<hr> – trasarea unei linii orizontale

“align” – ce permite alinierea orizontală a liniei. “left” sau “right”

“width” – permite alegerea lungimii liniei

“size” – permite alegerea grosomii liniei

“noshade” – când este prezent definește o linie fără umbră

“color” – permite definirea culorii liniei

Blocuri CENTER

<center>…</center> – aliniază centrat toate elementele pe care le conține

<center> <hr width=10%> <hr width=40%> <hr width=70%> <hr width=100%>

Blocuri de titlu

<H1> – permite scrierea unui titlu cu caractere mari și aladine

<H2> – permite scrierea unui titlu cu caractere mai mici decât <H1>

<H3> – permite scrierea unui titlu cu caractere mai mici decât <H2>

<H4> – permite scrierea unui titlu cu caractere mai mici decât <H3>

<H5> – permite scrierea unui titlu cu caractere mai mici decât t <H4>

<H6> – permite scrierea unui titlu cu caractere mai mici decât <H5>

Blocuri DIV

<div>…</div> – delimitează și formatează un bloc de text

“left” (aliniere la stânga)

“center” (aliniere centrată)

“right” (aliniere la dreapta)

<div align=”right”> – blocul este aliniat la dreapta

</div> – sfârșitul alinierii blocului de text

Imagini

< img src=”images/imagine1.jpg” border=”5” width=”350” align=”left” hspace=”30” vspace=”30”> – introducerea unei imagini

Border – bordura unei imagini

Width – lungimea

Height – lățimea

Align – aliniere

Hspace – distanța în pixeli pe orizontală dintre imagine și restul elementelor din pagină

Vspace – distanța în pixeli pe verticală dintre imagine și restul elementelor din pagină

<BODY BACKGROUND=”images/img1.jpg”> – utilizarea unei imagini pe post de fundal

Legături

< a href=”index.html”> <img src=”images/img1.jpg”> </a> – crearea unei legături dintre pagina “index.html” și imaginea “images/img1.jpg”

< a href=”pagina2.html”> Link catre pagina2</a> crearea unei legături dintre pagini din același director.

< a href =”http://www.netscape.com”> Netscape Corporation </a> – crează o legătura către un site particular

< a href=”fisier.zip”> Link către fișierul fisier.zip

Liste

<ol> – lista ordonată

<li> 1

<li> 2

<li> 3

</ol> – sfârșitul listei ordonate

<ul> – lista neordonată

<li> – marcator

<li> – marcator

<li> – marcator

</ul> – sfârșitul listei neordonate

<dl> – o listă de definiții

<dt> – marcajul B

<dd> – afișează text îngroșat

<dt> – marcajul I

<dd> – afișează text înclinat

<dt> – marcajul U

<dd> – afișează text subliniat

<ol type=1 start=11> – o listă care ia diferite valori

<li> atributul SIZE

<dd> specifică dimensiunea textului

</ol> sfârșitul listei

Tabele

<table>…</table> – inserarea unui table

<tr>…</tr> – inserarea unui rând

<td>…<td> – inserarea unei celule

< table align=”left”> – alinierea tabelului

Left

Right

Center

<table bgcolor=”aqua”> – culoarea de fond a tabelului

Dimensionarea celulei unui tabel se face cu următoarele atribute:

“cellspacing” – distanța dintre doua celule vecine

“cellpadding” – distanța dintre marginea unei cllule și conținutul ei

Dimensionarea unui tabel se face cu atributele:

“width” – lățimea

“height” – înălțimea

Alinierea conținutului unei celule se face:

“align” pe orizontală cu valorile:

“left”

“center”

“right”

“char” – alinierea se face față de un character

“valign” pe verticală cu valorile:

“baseline” – la baza

“bottom” – jos

“middle” – la mijloc

“top” – sus

“colspan” – extinderea unei celule peste celulele din dreapta ei

“rowspan” – extinderea unei celule peste celulele de sub ea

Cadre

Blocul <body>…</body> este înlocuit de blocul <frameset>…</frameset> – în interiorul acestui bloc, fiecare cadru este introdus prin eticheta <frame>

<frame src=”p1.html”> – împărțirea ferestrei ecran și a subferestrelor în linii și coloane

“cols” – împărțirea unei ferestre într-un număr de subferestre de tip coloană

“rows” – împărțirea unei ferestre intr-un număr de subferestre de tip linie

“*,*” – o lista de elemente separate prin virgule care descriu modul în care se face împărțirea

<frameset cols=”*,*”>

<frame src=”p2.html”>

</frameset>

<frame src=”p2.html” bordercolor=”blue”> – culoarea chenarului unui cadru

Bare de defilare

<frame src=”p.html” scrolling=”yes” noresize> – adăugarea barei de defilare unui cadru

“yes” – barele de derulare sunt adăugate întotdeauna

“no” – barele de derulare nu sunt utilizabile

“auto” – barele de derulare sunt vizibile atunci când este necesar

“noresize – inhibă posibilitatea de a redimensiona cadrul cu ajutorul mouse-ului

“marginheight” – permite stabilirea distanței în pixeli dintre conținutul unui cadru și marginile verticale

“marginwidth” – permite stabilirea distanței în pixeli dintre conținutul unui cadru și marginile orizontale

Formulare

Un formular este un ansamblu de zone active alcătuit din butoane, casete de selecție, câmpuri de editare.

<form> …</form>

“action” – precizează ce se va întâmpla cu datele formularului odată ce acestea ajung la destinație

“method” – precizează metoda utilizată de browser pentru expedierea datelor formularului

“name” – permite atasarea unui nume fiecarui element al formularului

“value” – permite atribuirea unei valori inițiale unui element al formularului

“get” – datele sunt adaugate la adresa URL precizata de atributul “Action”

“post” – datele sunt expediate separate

“type” – un buton de expediere al unui formular

CONCLUZII

În contextul actual când evoluția societății din ultimele decenii se bazează pe dezvoltarea tehnologiei informatice, oamenii preferă, să utilizeze calculatorul datorită multitudinilor sale de opțiuni ță servicii oferite.

Sunt multe modalități prin care calculatorul poate fi util. Tehnologia informației și a comunicării oferă numeroase posibilități de ameliorare a serviciilor de bibliotecă prin îmbunătățirea accesului la informație, cunoștințe și cultură. Din păcate implementarea noilor tehnologii nu se face în mod sistematic și eficient prin crearea unor rețele bine coordonate cu servicii centralizate, care ar conduce la economisirea a numeroase resurse materiale și umane.

O bibliotecă presupune o bună organizare și administrarea tuturor elementelor sale, cu scopul de a satisface cerințele cititorilor într – un timp cât mai scurt și în mod normal cât mai eficient.

De aceea am ales să realizez un sistem informatic care să ajute utilizatorul să gestioneze mult mai ușor cărțile și să țină evidența cititorilor dintr-o bibliotecă.

Acest program va ușura munca bibliotecarului, acesta confruntându-se cu un număr mare de cărți, autori, împrumuturi, restituiri, adăugiri și eliminări de cărți/cititor din bibliotecă. El poate fi folosit de orice bibliotecă, atât de specialiști cât și de nespecialiști fiind un (program) sistem accesibil ce poate fi utilizat cu succes într – o bibliotecă școlară.

Generația actuală de bibliotecari are de înfăptuit schimbarea Modelului Biblioteconomic Tradițional și crearea Modelului Biblioteconomic Modern, care să corespundă tendințelor actuale de dezvoltare a societății, de aici și responsabilitățile imense care stau pe umerii înaintașilor domeniului, responsabilității inerente acestei perioade de tranziție.

Ca instituții de informare și cunoaștere, bibliotecile școlare se numără, probabil, printre instituțiile din sectorul public care sunt implicate cel mai activ în difuzarea informației.

În condițiile Erei Digitale, bibliotecile se transformă din instituții mai mult sau mai puțin închise, în instituții cu acces deschis.

Într-o bibliotecă, sursele tradiționale specifice se îmbogățesc cu surse noi, bazate pe tehnologie modernă: documentele primare clasice se completează cu documente electronice; catalogului tradițional îi corespunde varianta sa modernă – catalogul online; lucrările bibliografice tradiționale sunt completate cu bazele de date bibliografice.

BIBLIOGRAFIE

Lupu, Valeriu, Baze de date – Curs pentru învățământ la distanță, Suceava, 2010

Manifestul IFLA/UNESCO pentru Bibliotecile școlare, 2005

Ciuta,C – baze_de_date-1.doc

https://teacherinforest.files.wordpress.com/2009/10/baze_de_date-1.doc

Lupu,Valeriu – Baze de date

http://www.seap.usv.ro/~valeriul/lupu/baza_de_date_cig.doc

Similar Posts

  • Combaterea Buruienilor

    COMBATEREA BURUIENILOR DEFINIȚIE, OBIECTIVE, STRUCTURĂ Buruienile au fost, sunt și vor fi o mare problemă pentru agricultori. Ele acționează în orice condiții, în toate zonele și în toate culturile agricole. Agricultorul de azi are la dispoziție o gamă largă de posibilități sau metode de combatere. Particularitățile biologice ale buruienilor (înmulțirea, germinația eșalonată, longevitatea, vitalitatea și…

  • Finantarea Intreprinderii

    CUPRINS Introducere………………………………………………………………………………….pag 2 Capitolul 1: Finanțarea intreprinderii……………………………………………….. pag 3 Sursele de finanțare ale întreprinderii (interne, externe)……….pag 4 Decizii de finanțare……………………………………………………….pag 27 Capitolul 2: Tipologia capitalului intreprinderii…………………………………..pag 35 2.1. Capitalul propriu: componente…………………………………………pag 35 2.2. Costul capitalului propriu………………………………………………..pag 37 2.3. Capitalul împrumutat: tipuri……………………………………………pag 39 2.4. Costul capitalului împrumutat…………………………………………pag 44 Capitolul 3: Costul mediu ponderat al capitalului……………………………….pag 46…

  • Analiza Modificarilor Aparute In Modul de Organizare al Lipopolizaharidelor Investigate Prin Spectroscopie de Thz Si Ftir

    CUPRINS Scopul studiului……………………………………………………… 3 Introducere…………………………………………………………… Învelișurile celulare…………………………………………… Membrana citoplasmatică……………………………………….. 5 Peretele celular…………………………………………………. Spațiul periplasmatic……………………………………………. Membrana externă………………………………………………. Lipopolizaharide (LPS)……………………………………… Structura lipopolizaharidelor………………………………. Scopul studiului Pentru modelarea moleculelor de lipopoliaharide (LPS) prin simulare moleculară, este necesară obținerea parametriilor acestora (parametrizarea) pentru câmpuri de forța uzuale (CHARMM, etc). Moleculele de lipopolizaharide includ structuri neuzuale cum ar fi heptazaharidele, ceea…

  • Ϲοntribuțiɑ Mitrοрοlitului Аntim Ivirеɑnul Lɑ Dеzvοltɑrеɑ Limbii Rοmânе Rеligiοɑѕе

    === ec1101bfebc7b8dc14188189a352cf9817691790_497132_2 === Ϲοntribuțiɑ mitrοрοlitului Аntim Ivirеɑnul lɑ dеzvοltɑrеɑ limbii rοmânе rеligiοɑѕе Ϲuрrinѕ Litеrɑturɑ rοmână în Rοmâniɑ Μitrοрοlitul Аntim Ivirеɑnul Ϲοntribuțiɑ mitrοрοlitului Аntim Ivirеɑnul lɑ dеzvοltɑrеɑ limbii rοmânе rеligiοɑѕе- Didɑһiilе Ϲοnсluzii Βibliοgrɑfiе Litеrɑturɑ rοmână în Rοmâniɑ Litеrɑturɑ nοɑѕtră vесһе ɑ еvοluɑt în сοndiții сu tοtul dеοѕеbitе dе сеlе în сɑrе ѕ-ɑu dеzvοltɑt mɑrilе litеrɑturi în…

  • Contractele Civile Aleatorii

    === 50dc11101d3fb9ceec0e5d0e49b87d1481d645eb_481116_1 === CUРRIΝЅ CАРITOLUL I. COΝTRАCTUL Νoțiunе Cɑtеgorii dе сontrɑсtе CАРITOLUL II. ÎΝCHΕIΕRΕА, COΝDIȚIILΕ DΕ VАLАВILITАTΕ ȘI ÎΝCΕTАRΕА COΝTRАCTULUI 2.1. Înсhеiеrеɑ сontrɑсtului 2.2. Condițiilе dе vɑliditɑtе ɑlе сontrɑсtului 2.3. Νulitɑtеɑ сontrɑсtului 2.4. Εfесtеlе сontrɑсtului 2.5. Cеѕiunеɑ și înсеtɑrеɑ сontrɑсtului CАРITOLUL III. COΝTRАCTΕLΕ АLΕАTORII 3.1. Νoțiunеɑ și сonѕidеrɑții introduсtivе рrivind сontrɑсtеlе ɑlеɑtorii 3.2. Contrɑсtul dе…

  • Gestiunea Aprovizionărilor și Posibilități de Perfecționare pe Exemplul Sc Damarin B&c Srl

    Universitatea din Craiova Facultatea de Economie și Administrarea Afacerilor Specializarea Contabilitate și Informatică de Gestiune LUCRARE DE LICENȚĂ Conducător științific: Prof.univ.dr. Ionescu Ion Absolvent: Chițu Alina Gabriela Craiova, 2015 Universitatea din Craiova Facultatea de Economie și Administrarea Afacerilor Specializarea Contabilitate și Informatică de Gestiune Titlul lucrării: Gestiunea aprovizionărilor și posibilități de perfecționare pe exemplul SC…