Aplicatie Android Pentru Gestiunea Unei Biblioteci Personale (clasica Si Electronica)

CUPRINS

Introducere…………………………………………………………………………….11

I.Cerinte impuse……………………………………………………………………….13

II.Arhitectura aplicatiei……………………………………………………………….17

III.Descrierea bazei de date…………………………………………………………..22

3.1 Modelul Entitate-Relatie………………………………………………….22

3.2 Modelul Relational………………………………………………………..23

3.3 Scripturi SQL……………………………………………………………..25

IV.Descrierea Serviciului WEB………………………………………………………30

4.1 Meniu Serviciu WEB……………………………………………………..30

4.2 Descrierea metodelor Serviciului WEB…………………………………31

V.Descrierea aplicatiei………………………………………………………………..48

5.1 Meniul Aplicatiei…………………………………………………………48

5.2 Diagrame de clase………………………………………………………..51

5.3 Descrierea detaliata a claselor…………………………………………..53

VI.Testare…………………………………………………………………………….71

VII.Concluzii si propuneri de imbunatatire………………………………………..72

Works Cited………………………………………………………………………….73

Bibliografie……………………………………………………………………………73

Anexe………………………………………………………………………………….75

LISTA FIGURILOR

Figure 1:Modelul Cascada ………… 19

Figure 2:Diagrama USE-CASE …… 22

Figure 3:Modelul Entitate-Relatie… 24

Figure 4:Modelul Relational……… 26

Figure 5:Meniu Serviciu WEB…… 31

Figure 6:Metoda Insert Address…… 37

Figure 7:Metoda Insert Articol…… 38

Figure 8:Metoda Insert Autor……… 38

Figure 9:Metoda Insert Carte……… 39

Figure 10:Metoda Insert Contact…… 39

Figure 11:Metoda Insert Continut…… 40

Figure 12:Metoda Insert Editie……… 40

Figure 13:Metoda Insert Editura…… 41

Figure 14:Metoda Insert Imprumut… 42

Figure 15:Metoda Insert Locatie…… 42

Figure 16:Metoda Insert Revista…… 43

Figure 17:Metoda Insert Scriitor…… 43

Figure 18:Metoda Insert Telefon…… 44

Figure 19:Metoda Insert User……… 45

Figure 20:Metoda Delete Book…… 45

Figure 21:Metoda Veifica Imprumut 46

Figure 22:Metoda View Books…… 46

Figure 23:Metoda View Users……… 47

Figure 24:Meniu Aplicatie…………… 48

Figure 25:Submeniu Insert…………… 49

Figure 26:Submeniu Delete… 49

Figure 27:Submeniu View… 50

Figure 28:Submeniu Search… 51

Figure 29:Diagrama de Clase 52

Introducere

Aplicație Android pentru gestiunea unei biblioteci personale(clasică și electronică) reprezintă titlul lucrării de licență.Lucrarea de față își propune dezvoltarea unei aplicații pentru dispozitive mobile,al căror sistem de operare este Android,care permite gestiunea cărților, revistelor și articolelor din biblioteca personală.

Am ales această temă deoarece am simțit nevoia de a îmbunatați modul in care persoanele îsi țin evidența cărților din biblioteca personală și pentru că este destul de dificil de reținut ce cărți deținem în biblioteca personală,ce cărți sau reviste am împrumutat prietenilor,rudelor sau altor persoane pasionate de cărți,de citit și de cunoaștere.Se întâmplă deseori să cauți o carte pentru a te documenta asupra unei probleme și să constați că acea carte îți lipsește.Cu ajutorul acestei aplicații ne propunem să ne ușurăm puțin viața.Atunci când cineva dorește să împrumute o carte de la noi,putem să ținem evidența carților împrumutate și sa adăugam data la care ar trebui să o returneze.

În dezvoltarea acestei aplicații s-au folosit mai multe limbaje de programare și mai multe medii de dezvoltare.Un prim limbaj de programare folosit a fost SQL,necesar pentru a crea baza de date unde vor fi reținute toate cărțile din bibliotecă,toate detaliile despre cărți,precum și detalii despre persoanele care au împrumutat cărți și detalii despre împrumuturi.

Am ales să folosesc Microsoft SQL Server 2012 Management Studio ca program pentru gestiunea cărților,revistelor articolelor din bibliotecă deoarece Microsoft SQL Server este un sistem de baze de date cu performanțe ridicate, dar relativ simplu, a cărui configurare și administrare este mult mai simplă decat în cazul altor sisteme.

SQL Server Management Studio reprezintă o aplicație software lansat prima data cu Microsoft SQL Server 2005, care este folosit pentru configurarea, managementul, precum și administrarea tuturor componentelor din cadrul Microsoft SQL Server.Instrumentul include editoare de script și instrumente grafice care lucrează cu obiecte și caracteristici ale serverului.

O caracteristică centrală a SQL Server Management Studio este obiectul Explorer, care permite utilizatorului să caute, selecteze, și să acționeze pe oricare dintre obiectele din server. De asemenea, are o versiune "express", care poate fi descărcată gratuit.

„Sistemele de gestiune a bazelor de date (în limba engleză "database management system" – SGDB) reprezintă totalitatea programelor utilizate pentru crearea, interogarea și întreținerea unei baze de date. Include două categorii de module: module care sunt comune cu cele ale sistemelor de operare ale calculatoarelor și module cu funcții specifice bazei de date. Subsistemele monitor conțin programele de control al perifericelor și sistemul de gestiune a fișierelor. Subsistemele externe sunt alcătuite din procesorul de definiție și programul de administrare. Alături de acestea există programe de descriere a bazei de date și cereri de prelucrare.Între utilizator și sistem există două interfețe: definirea bazei de date și utilizarea bazei de date. Definirea unei baze de date se execută sub controlul procesorului de definiție (PD), capabil să prelucreze programe de descriere, formulate folosind limbaje specializate cunoscute sub denumirea de limbaje de definiție a datelor .”

Un al doilea limbaj de programare folosit pentru dezvoltarea aplicației îl reprezintă C#.Acest limbaj de programare a fost necesar pentru a dezvolta Serviciul WEB.Aplicația trebuie să funcioneze în rețea,deci este necesară o conexiune la internet.Serviciul Web a fost necesar pentru a realiza stocarea datelor în bază de date și pentru crearea unei aplicații cu baze de date.

Am ales să folosesc ca program de dezvoltare a Serviciului WEB Visual Studio de la Microsoft. Visual Studio cuprinde intreg setul de instrumente de dezvoltare pentru generarea de aplicații ASP.NET, Servicii Web XML, aplicații desktop și aplicații mobile. Visual Basic, Visual C++, Visual C# și Visual J# toate folosesc același mediu de dezvoltare integrat (IDE) care le permite partajarea instrumentelor și facilitează crearea de soluții folosind mai multe limbaje de programare. Aceste limbaje permit să beneficieze de caracteristicile .NET Framework care oferă acces la tehnologii cheie care simplifica dezvoltarea de aplicații web ASP și XML Web Services cu Visual Web Developer.

Ultimul,dar nu cel din urmă limbaj de programare folosit pentru dezvoltarea aplicației a fost Android.Acesta a fost necesar pentru a realiza aplicația mobilă. Android reprezinta o platforma software și este un sistem de operare  pentru  dispozitive mobile care se bazeaza pe nucleul Linux.A fost dezvoltată inițial de catre compania Google, iar mai târziu de catre consorțiul comercial Open Handset Alliance. Android permite dezvoltatorilor să scrie cod gestionat în limbajul Java, controlând dispozitivul prin intermediul bibliotecilor Java dezvoltate de Google. Aplicațiile scrise în C și în alte limbaje pot fi compilate în cod mașină ARM și executate, dar acest model de dezvoltare nu este sprijinit oficial de către Google.

“Lansarea platformei Android la 5 noiembrie 2007 a fost anunțată prin fondarea Open Handset Alliance, un consorțiu de 48 de companii de hardware, software și de telecomunicații, consacrat dezvoltării de standarde deschise pentru dispozitive mobile.Google a lansat cea mai mare parte a codului Android sub licența Apache, o licență de tip free-software și open source.”

In acest fel,pentru a realiza aplicația avem nevoie de trei componente:o bază de date,un server WEB si o aplicație mobilă.Datele de la aplicația mobilă sunt trimise catre baza de date folosind serverul.

I.Cerinte impuse

Cerințele sunt descrieri ale serviciilor oferite de sistem și a constrângerilor impuse de-a lungul desfășurării proceselor de inginerie a cerințelor.

Descrierea cerințelor:

Specificarea comportamentului extern al sistemului.

Clar definite pentru clienți, manager și utilizatori.

Dacă definirea cerințelor este greșită, atunci sistemul va fi greșit.

Cerințele pot fi clasificate în:

Cerințe funcționale

Afirmații despre serviciile pe care sistemul trebuie să le cuprindă,cum trebuie el să răspundă la anumite intrări și cum să reacționeze în anumite situații

Cerințe non-funcționale

Constrângeri ale serviciilor și funcțiilor oferite de sistem cum ar fi constrângeri de timp,constrângeri ale procesului de dezvoltare,standarde.

Cerințele funcționale prezintă funcționalitatea sistemului și serviciile furnizate.Ele depind de tipul softului,de utilizatorii avuți în vedere și de tipul sistemului pe care softul este întrebuințat.

Cerințele non-funcționale descriu proprietăți și constrângeri ale sistemului cum ar fi:fiabilitatea,timpul de răspuns,cerințe pentru spațiul de stocare.

Cerințele non-funcționale pot fi mai critice decât cele funcționale.Dacă nu sunt realizate,sistemul este potrivit scopului în care a fost realizat.

Principalele cerințe funcționale sunt:

Încărcarea bazei de date

Introducerea datelor privind cărțile deținute(autori,titlu,ediție,an apariție,editură,ISBN)

Introducerea operațiilor de împrumut

Eliminarea unor cărți vândute,pierdute

Verificarea împrumuturilor nereturnate

Vizualizare titluri cărți după diverse criterii:

Cărți împrumutate

Domeniul cărții(cuvânt cheie) Carti incomplete

Cărții păstrate in format electronic

Articole (autori,titlu,dată aparitie,site)

Principalele cerințe non-funcționale

respectarea unor norme ergonomice

Atunci când spunem norme ergonomice,ne referim la faptul că aplicația are ca obiectiv adaptarea la cerințele utilizatorilor astfel încât să fie ușor de folosit și să fie necesară utilizatorilor. Există câteva principii pe care trebuie să le respectăm atunci când construim un aplicatie:

Orice proiect trebuie sa fie unic: Acestea trebuie să fie citite și utilizate în funcție de specificul fiecărui proiect, cel mai important fiind cunoașterea utilizatorilor aplicatiei. De aceea trebuiesc efectuate studii de cercetare a utilizatorilor, ale căror rezultate trebuiesc luate în considerare când ne construim aplicatia.

Aplicatia mea este ergonomica dacă poate fi ușor de utilizat și pentru necunoscători în domeniu.

Pentru ca o aplicatie sa fie ergonomica nu este necesar ca ea sa fie utilizabila de catre toti incepatorii,trebuie sa fie o aplicatie care se poate adapta la pretentiile utilizatorilor.

Functionalitatile pe care le va incorpora aplicatia trebuiesc sa indeplineasca cateva cerinte pentru ca aplicatia sa corespunda cerintelor ergonomice:

Tot ce este inutil trebuie sters: o pagina este mai dificil de integrat mental daca ea contine foarte multe obiecte.

Limitarea încărcării activitatilor:trebuie optimizat fiecare obiect,fiecare formular.

Crearea unor template-uri care să creeze "un aer familial", comun tuturor activitatilor aplicatiei. Această coerență facilitează înțelegerea aplicatiei.

Adaptarea la rezoluția de ecran utilizată de majoritatea utilizatorilor aplicatiei, care în general nu sunt aceleași ca cea folosită de către proiectant.

Textele lizibile și clare

Tipografia și culorile

Mărimea fontului suficient de mare: niciodată sub un Arial de 10 puncte sau Verdana 9 puncte pentru corpul paginii.

Niveluri de contrast, culoare și luminozitate suficiente pentru a distinge caracterele. Aceste reguli se aplică la toate elementele ce conțin text: titluri, link-uri, meniuri, butoane sau imagini.

Limitarea numărului de culori diferite. Acest lucru poate ajuta la construirea ierarhică a conținutului.

Evitarea formatului italic, dificil de citit pe ecran. Utilizarea acestuia se va face în cazul citărilor.

Formulare ușor de completat

Reglarea vizibilității de câmpuri în funcție de importanța lor.

Ștergerea":" de la sfârșitul etichetei.

Dacă formularul conține multe domenii, acestea trebuiesc grupate pe teme.

Meniul – navigarea fără a pierde Nordul

Se recomandă utilizarea funcției „Back”. Este foarte utilă punerea elementelor care îndeplinesc această funcție deoarece acest lucru faciliteaza revenirea la meniul anterior, acest lucru va crește probabilitatea de utilizare.

Arhitectura uni meniu

Există multe moduri de a organiza conținutul unei aplicatii și inclusiv a meniului ei:

Organizare tematică

Organizarea pe activități

Organizarea în funcție de ținta utilizatorului

Organizare în ordine alfabetică

Organizarea cronologică

Organizare bazată pe popularitatea operatiilor

În construirea arhitecturii aplicatiei trebuie să ne folosim de principiul lățime în profunzime, adică puține niveluri cu multe opțiuni. Aceasta are ca avantaj o privire de ansamblu rapidă. Utilizatorul poate selecta cu ușurință elementul de interes la fiecare nivel.

Termenii ce definesc obiectele ce apartin aceluiași nivel al unui meniu trebuie să fie:

Semnificanți (am inteles termenii pe care le acoperă)

Complementari (toate elementele acoperă toate posibilitățile de navigare)

Exclusivi (nici o ambiguitate între elemente).

Funcționarea unui meniu

Evitarea meniurilor de tip cascadă (mai multe niveluri succesive) listă de operare.

Nu se schimbă ordinea rubricilor meniului în funcție de activitatea selectata de către utilizator.

Evitarea plasării într-un meniu de navigare a unui link către un site extern care conține de asemenea rubrici interne.

Butoane de acționare

Butoanele ar trebui să apară și să se comporte identic în interiorul aplicatiei.

Butoanele de acțiune trebuie să fie vizibile: într-un format clar și detașat de fundal.

Trebuie prevăzut un format specific de butoane la apasarea lor.

Butoanele trebuie să fie ușor de apăsat, să fie destul de mari, iar suprafața de apăsat să fie extinsă dincolo de textul etichetei.

Limbajul butoanelor de acțiune trebuie să fie alcătuit din verbe, trebuie să se evite etichetele, iar aceeași acțiune trebuie să aibă întotdeauna aceeași formulare, aceeași etichetă.

Evitarea butoanelor alcătuite doar din imagini, cu excepția cazului în care este extrem de convențională și dacă aveți nevoie de spațiu pe ecran.

Cerințe de performanță

Unul dintre indicatorii de performață este reprezentat de timpul de răspuns al unui sistem. În cazul aplicațiilor de față, timpul de răspuns pentru vizualizarea unei carți sau timpul de răspuns după apăsarea butonului de adăugare la o carte nu trebuie să fie mai mare de 4 secunde, pentru a facilita accesul rapid la informațiile cerute de utilizator.

Dispozitivul mobil al utilizatorului trebuie să aibă urmatoarea configurație minimă: Display de 7”,processor Dual Core Cortez A7 de 1,2 GHz,GPU Mali 400 Multi-Core,Memorie RAM de 512 MB DDR3,sistem de oparare Android 4.2,memorie interna minim 1GB; pentru a oferi performanța optimă produsului software.

II.Arhitectura aplicației

Arhitectura aplicatiei prezentate este reprezentata pe 3 nivele:

1.Baza de date

La nivelul bazei de date este continuta logica aplicatiei

2.Server-ul

La nivelul serverului este asigurata conexiunea intre baza de date si aplicatia mobila. Tot la nivelul serverului se implementeaza diverse prelucrari de dat.

3.Aplicatia mobila

Aplicatia mobila reprezinta interfata cu utilizatorul.
Cea mai comună configurație este ca baza de date și serverul de aplicație să fie pe același server. 
1. Baza de date folosită – Microsoft SQL Server – reprezinta produsul celor de la Microsoft, care garanteaza o capacitate de stocare extensibila, securitatea datelor, instrumente de analiza si management a datelor, multiple posibilitati de accesare / import / export a datelor, în diferite formate, respectiv integrare cu alte surse de date. 
2. Serverul de aplicație – in cadrul acestui nivel se realizeaza majoritatea prelucrarilor de date. 
3. Aplicația mobila – reprezinta interfata cu utilizartorul.In cadrul acestui nivel se realizeaza mai putine prelucrari de date si mai multe validari de dat.Interfata este una bogata in optiuni,ea permitand flexibilitate in utilizare. 
Tehnologiile folosite la nivelul serverului de aplicație și la nivelul clientului sunt: ADO.Net, Android pentru partea de logica a aplicației.
Avantajul arhitecturii pe trei nivele, față de o arhitectura client – server, este că majoritatea procesărilor se fac pe serverul de aplicație și pe baza de date, nu pe aplicatia folosita de client și pe baza de date. Aceasta permite o scalabilitate mult mai bună a aplicației în condițiile unui volum de tranzacții în creștere. Este necesară doar adăugarea de servere suplimentare pentru creșterea capacitatii de procesare.

Pentru dezvoltarea aplicatiei s-a mers pe modelul in cascada:

Figure 1

analiza cerințelor:

formularea obiectivelor proiectului;

identificarea restricțiilor

specifice problemei rezolvate;

financiare;

legale;

sociale.

formularea specificațiilor:

elaborarea unui document ȋn care sunt precizate riguros funcțiile produsului.

proiectarea produsului:

proiectarea structurilor de date;

arhitectura software ȋn concordanță cu arhitectura SI;

detalierea algoritmilor;

proiectarea interfețelor;

determinarea cerințelor hardware;

alegerea tehnologiilor de implementare.

Din punct de vedere software, serverul va rula pe o platformă Microsoft care va presupune existența unei baze de date. Android este un mediu de programare ce oferă utilizatorului cadrul necesar și uneltele necesare pentru dezvoltarea aplicațiilor mobile. Android este o tehnologie ce oferă suport dezvoltării de aplicații distribuite, independente de platformă.

implementarea și testarea:

implementarea structurilor/bazelor de date;

scrierea codului;

testarea fiecărui modul pentru identificarea erorilor și a nivelului ȋn care acesta corespunde specificațiilor.

Baza de date este o colecție de apariții ale mai multor tipuri de înregistrări logice , conținând relații între înregistrări agregate de date și date elementare. Proiectarea unei baze de date se abordează în mod unitar, pornind de la universul care se modelează, în scopul definirii schemei conceptuale a datelor. În acest scop este necesară identificarea datelor care vor forma baza de date și a caracteristicilor definitorii ale acestor date. Baza de date este creată în Microsoft SQL Server cu scopul de a ajuta la gestiunea cartilor din biblioteca. Astfel, baza de date a fost populată cu date privind carti,reviste,articole pentru a testa funcționalitatea sa. Testarea software, prin definiție, urmărește focalizarea pe procesul de identificare a posibilelor erori de program, erori care ar putea avea un impact negativ asupra produsului.

integrarea și testarea de sistem:

se testeaza interacțiunea dintre componente;

se verifică concordanța ȋntre funcțiile realizate de produs și cerințele impuse;

se validează produsul din punctul de vedere al executantului;

se trimite produsul la beneficiar pentru testele de acceptanță;

se trece la ȋncărcarea bazelor de date;

se trece la exploatarea ȋn condiții reale.

mentenanța:

de ȋntreținere;

de adaptare.

de dezvoltare.

Procesul de mentenanță apare ca o necesitate, deoarece aplicația software se poate expune unor schimbări în decursul ciclului de existență, și constă în modificarea codului, ajustarea programului, precum și perfecționarea lui ulterioară.

Scopul procesului de mentenanță este de a modifica programul software asigurând în același timp integritatea lui.

Prin intermediul acestui proces se efectuează controlul funcționării aplicației software, se înregistrează problemele pentru analiză, se întreprind acțiuni de avertizare privind erorile depistate și de corectare a lor. Pentru ca nu există aplicație perfectă și pentru că atât timp cât aplicația este implementată conform unor cerințe non-standard, dupa lansarea acesteia urmează o serie de îmbunătățiri. La început s-a dorit doar vizualizarea ștatelor de funcțiuni pe o interfață web, apoi s-a cerut și posibilitatea ca utilizatorul să poată salva informațiile în format excel pentru a fi printate.

Diagrama USE-CASE

O diagramă a cazurilor de utilizare (use case diagram) prezintă o colecție de cazuri de utilizare si actori care:

• oferă o descriere generală a modului in care va fi utilizat sistemul

• furnizează o privire de ansamblu a funcționalitaților ce se doresc a fi oferite de sistem

• arată cum interacționează sistemului cu unul sau mai mulți actori

• asigură faptul că sistemul va produce ceea ce s-a dorit.

In continuare este prezentată diagrama use-case pentru aplicația noastră.Utilizatorul aplicației are drepturi depline asupra bazei de date.Toate operațiile care se pot face asupra bazei de date,pot fi facute de catre utilizatorul aplicației.

Figure 2

III.Descrierea bazei de date

“Structured Query Language (SQL – limbajul structurat deinterogare) este limbajul standard folosit pentru manipularea si regăsirea datelor din aceste baze de date

relationale.Prin SQL, un programator sau un administrator de baze de date poate face urmatoarele lucruri:

să modifice structura unei baze de date ;

să modifice valori de configurare folosite pentru securitatea sistemului;

să adauge utilizatorilor drepturi asupra bazelor de date sau tabelelor;

să interogheze o bază de date asupra unor informații;

să actualizeze conținutul bazei de date.”

3.1Modelul Entitate-Relatie

Modelul E-R se bazează pe modelarea lumii reale folosind colecții de obiecte, numite entități și pe legăturile (relationships) dintre entități. Entitatea este un obiect sau lucru din lumea reală care se diferențiază de alte obiecte.

Se numește entitate orice obiect, fenomen sau concept care poate fi deosebit de alte obiecte, fenomene sau concepte asemănătoare prin valorile unor caracteristici numite atribute.”(0) Entitățile sunt descrise în baza de date de o mulțime de atribute.

O legătură este o asociere între mai multe entități.

Proprietățile generale ale legăturilor:

Orice legătură are o semantică bine definită;

Orice legătură este bidirecțională;

Orice legătură tip are un nume;

Legătura tip poate fi definită peste una sau mai multe entități tip;

Între aceleași entități tip pot fi definite mai multe legături tip cu semantică diferită;

Pot să existe entități ale unei entități tip care nu participă la nici o realizare a unei legături tip;

Legătura tip poate să aibă atribute specifice.

Figure 3

3.2 Modelul relational

Modelul relațional infatiseaza baza de date ca o colecție de relații, fiecărei relatii fiindu-i asociat un nume unic.

O relație poate fi privita ca un tabel de valori, liniile tabelului reprezentând o colecție de valori interconectate.

Domeniul reprezintă o mulțime de valori atomice. Se consideră valori atomice acele valori ce nu pot fi descompuse fără a se pierde semnificația valorii.

Un domeniu este specificat de tipul de date al valorilor care formează domeniul, de numele său, care ajută în interpretarea valorilor sale.

Proprietăți ale relațiilor:

Orice relație are un nume unic într-o bază de date.

Orice atribut are un nume unic într-o relație.

Ordinea atributelor într-o relație nu are importanță.

Ordinea tuplurilor într-o relație nu are importanță.

Schema este un invariant al unei relații date.

Relație este variantă în timp.

În afara valorilor specifice fiecărui domeniu, în bazele de date relaționale se acceptă și o valoare specială, numită valoarea nulă și notată null. Prin null se desemnează o valoare momentan necunoscută sau o valoare care nu are semnificație într-un anumit context.

Legături între relații:

Față de de alte modele implementabile ale bazelor de date, unde legăturile între obiectele bazei de date se efectuează la nivel fizic prin lanțuri de pointeri, în cazul modelului relațional, legăturile se efectuează la nivel logic prin mecanismul cheilor externe.

Cheia externă (secundară) reprezinta un atribut (simplu sau compus) utilizat numai în scopul căutării unor tupluri.

Tipuri de legături între relații:

Legături unu la unu (1:1) sunt create, de obicei, pentru a îndepărta valorile nule dintr-o relație. Sunt destul rar folosite în modelul relațional.

Legături unu-la-mulți (1:m, 1:∞) sunt foarte des folosite între relații, în modelul relațional. Unui tuplu dintr-o relație îi corespund mai multe tupluri în cealaltă relație.

Legături mulți-la-mulți (m:n, ∞:∞) indică faptul ca unui tuplu dintr-o relație îi corespund mai multe tupluri ale celeilalte relații și invers.

Figure 4

3.3.Scripturi SQL

Motivul principal pentru care modelul relațional a devenit foarte utilizat în SGBD-urile comerciale îl reprezintă limbajul SQL.

Limbajul SQL reprezintă un stardard pentru bazele de date relaționale și din acest motiv migrarea aplicațiilor cu baze de date pentru alte tipuri de SGBD-uri nu mai este necesară.

Există totuși diferențe între SGBD-urile comerciale.Dar dacă se vor folosi doar părțile care aparțin standardului,și dacă sistemele sunt relaționale atunci conversia între SGBD devine mai simplă.

Unul dintre marile avantaje ale existenței unui standard îl reprezintă posibilitatea de a scrie comenzi în aplicații care conțin baze de date care să acceseze date stocate pe mai multe SGBD-uri păstrând limbajul bazei de date,dacă ele suportă standardul SQL.

Limbajul poate încorpora comenzi SQL în alte limbaje de programare, cum ar fi Java, C, C++.

Script SQL:

create database biblioteca;

use biblioteca;

create table Autor_tbl

(

ID_Autor int not null primary key identity(1,1),

Nume_Autor varchar(30) not null,

Initiala_Autor varchar(30) not null,

Prenume_Autor varchar(30) not null,

Observatii_Autor varchar(100) not null

);

create table Carte_tbl

(

ID_Carte int not null primary key identity(1,1),

ISBN varchar(30),

Titlu_Carte varchar(50) not null,

An_Aparitie_Carte varchar(10),

Limba_Carte varchar(20),

Volum_Carte int,

Editie_Carte varchar(10),

Observatii_Carte varchar(100)

);

create table Utilizator_tbl

(

ID_Utilizator int not null primary key identity(1,1),

CNP_Utilizator varchar(13),

Nume_Utilizator varchar(30),

Prenume_Utilizator varchar(50),

Email_Utilizator varchar(40) not null,

Observatii_Utilizator varchar(100)

);

create table Editura_tbl

(

ID_Editura int not null primary key identity(1,1),

Nume_Editura varchar(30) not null,

Localitate_Editura varchar(20),

Observatii_Editura varchar(100)

);

create table Articol_tbl

(

ID_Articol int not null primary key identity(1,1),

Nume_Articol varchar(30) not null,

Data_Publicare_Articol varchar(15),

Observatii_Articol varchar(100)

);

create table Revista_tbl

(

Id_Revista int not null primary key identity(1,1),

Nume_Revista varchar(20) not null,

Numar_Revista int not null,

Data_Publicare_Revista varchar(15),

Observatii_Revista varchar(100)

);

create table Telefon_tbl

(

ID_Telefon int not null primary key identity(1,1),

Numar_telefon int not null,

Observatii_Telefon varchar(100)

);

create table Adresa_tbl

(

ID_Adresa int not null primary key identity(1,1),

Localitate_Adresa varchar(30),

Judet_Adresa varchar(15),

Strada_Adresa varchar(30),

Bloc_Adresa varchar(10),

Apartament_Adresa int,

Observatii_Adresa varchar(100)

);

create table Scriitor_tbl

(

ID_Scriitor int not null primary key identity(1,1),

ID_Autor int not null,

ID_Carte int not null,

Autor_Principal varchar(50),

Observatii_Scriitor varchar(100)

);

create table Imprumuta_tbl

(

ID_Imprumut int not null primary key identity(1,1),

ID_Utilizator int not null,

ID_Carte int not null,

Data_Imprumut varchar(15) not null,

Data_Returnare varchar(15) not null,

Observatii_Imprumut varchar(100)

);

create table Editie_tbl

(

ID_Editie int not null primary key identity(1,1),

ID_Editura int not null,

ID_Carte int not null,

Observatii_Editie varchar(100)

);

create table Locatie_tbl

(

ID_Locatie int not null primary key identity(1,1),

ID_Adresa int not null,

ID_Utilizator int not null,

Observatii_Locatie varchar(100)

);

create table Contact_tbl

(

ID_Contact int not null primary key identity(1,1),

ID_Telefon int not null,

ID_Utilizator int not null,

Observatii_Contact varchar(100)

);

create table Continut_tbl

(

ID_Continut int not null primary key identity(1,1),

ID_Articol int not null,

ID_Revista int not null,

Observatii_Continut varchar(100)

);

alter table Scriitor_tbl

add foreign key (ID_Autor) references Autor_tbl(ID_Autor);

alter table Scriitor_tbl

add foreign key (ID_Carte) references Carte_tbl(ID_Carte);

alter table Imprumuta_tbl

add foreign key (ID_Utilizator) references Utilizator_tbl(ID_Utilizator);

alter table Imprumuta_tbl

add foreign key (ID_Carte) references Carte_tbl(ID_Carte);

alter table Editie_tbl

add foreign key (ID_Editura) references Editura_tbl(ID_Editura);

alter table Editie_tbl

add foreign key (ID_Carte) references Carte_tbl(ID_Carte);

alter table Locatie_tbl

add foreign key (ID_Adresa) references Adresa_tbl(ID_Adresa);

alter table Locatie_tbl

add foreign key (ID_Utilizator) references Utilizator_tbl(ID_Utilizator);

alter table Contact_tbl

add foreign key (ID_Utilizator) references Utilizator_tbl(ID_Utilizator);

alter table Contact_tbl

add foreign key (ID_Telefon) references Telefon_tbl(ID_Telefon);

alter table Continut_tbl

add foreign key (ID_Articol) references Articol_tbl(ID_Articol);

alter table Continut_tbl

add foreign key (ID_Revista) references Revista_tbl(ID_Revista);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie1 varchar(15);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie2 varchar(15);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie3 varchar(15);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie4 varchar(15);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie5 varchar(15);

VI.Descrierea Serviciului WEB

4.1. Meniu Serviciu WEB

Meniul serviciului WEB este reprezentat de operațiile care se pot efectua asupra bazei de date.Atunci când pornim Serviciul WEB,se va afișa pe ecranul dispozitivului mobil sau pe ecranul PC-ului o ferestra care conține următoarele operații:CautăCărți,InsertAdresa, InsertArticol,InsertAutor,InsertCarte,InsertContact,InsertConținut,InsertEdiție,InsertEditură, InsertImprumut,InsertLocație,InsertRevistă,InsertScriitor,InsertTelefon,InsertUser,StergeCarte, VerificăImprumut,ViewBooks și ViewUsers.

Figure 5

4.2.Descrierea metodelor Serviciului WEB

Pentru a putea ințelege mai bine figura anterioară vom prezenta in continuare metodele folosite in crearea serviciului WEB.

Metoda CautăCarți conține operațiile de căutare care se pot face in baza de date.Cand apelăm această metodă se va deschide o fereastra cu urmatoarele campuri:ISBN,titlu, anApariție,limbă ,observații precum și campurile destinate cuvintelor cheie. Daca apasam pe butonul Invoke se face căutarea in baza de date in funcție de ce criteriu am completat și se va afișa rezultatul pe ecran.Nu este obligatoriu sa completăm un criteriu.

public List<string> CautaCarti(string titlu, string anAparitie, string limba, string observatii, string isbn, string cuvantcheie1, string cuvantcheie2, string cuvantcheie3, string cuvantcheie4, string cuvantcheie5)

{

List<string> rez_cautare = new List<string>();

string cmdString = "";

Conexiunea la baza de date se realizează folosind connection string.

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

Pentru interogari am folosit command string și am efectuat interogari asupra bazei de date.

#region setare querry

if (titlu == "" && anAparitie == "" && limba == "" && observatii == "" && isbn == "")

{

cmdString = "select * from Carte_tbl;";

}

else if (titlu != "" && anAparitie == "" && limba == "" && observatii == "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'";

}

else if (titlu == "" && anAparitie != "" && limba == "" && observatii == "" && isbn == "")

{

cmdString = "select * from Carte_tbl where An_Aparitie_Carte =" + "'" + anAparitie + "'";

}

else if (titlu == "" && anAparitie == "" && limba != "" && observatii == "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Limba_Carte =" + "'" + limba + "'";

}

else if (titlu == "" && anAparitie == "" && limba == "" && observatii != "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Observatii_Carte =" + "'" + observatii + "'";

}

else if (titlu == "" && anAparitie == "" && limba == "" && observatii == "" && isbn != "")

{

cmdString = "select * from Carte_tbl where ISBN =" + "'" + isbn + "'";

}

else if (titlu != "" && anAparitie != "" && limba == "" && observatii == "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and An_Aparitie_Carte =" + "'" + anAparitie + "'";

}

else if (titlu != "" && anAparitie == "" && limba != "" && observatii == "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and Limba_Carte =" + "'" + limba + "'";

}

else if (titlu != "" && anAparitie == "" && limba == "" && observatii != "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and Observatii_Carte =" + "'" + observatii + "'";

}

else if (titlu != "" && anAparitie == "" && limba == "" && observatii == "" && isbn != "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and ISBN =" + "'" + isbn + "'";

}

else if (titlu == "" && anAparitie != "" && limba != "" && observatii == "" && isbn == "")

{

cmdString = "select * from Carte_tbl where An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and Limba_Carte =" + "'" + limba + "'";

}

else if (titlu == "" && anAparitie != "" && limba == "" && observatii != "" && isbn == "")

{

cmdString = "select * from Carte_tbl where An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and Observatii_Carte =" + "'" + observatii + "'";

}

else if (titlu == "" && anAparitie != "" && limba == "" && observatii == "" && isbn != "")

{

cmdString = "select * from Carte_tbl where An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and ISBN =" + "'" + isbn + "'";

}

else if (titlu == "" && anAparitie == "" && limba != "" && observatii != "")

{

cmdString = "select * from Carte_tbl where Limba_Carte =" + "'" + limba + "'" + " and Observatii_Carte =" + "'" + observatii + "'";

}

else if (titlu == "" && anAparitie == "" && limba != "" && observatii == "" && isbn != "")

{

cmdString = "select * from Carte_tbl where Limba_Carte =" + "'" + limba + "'" + " and ISBN =" + "'" + isbn + "'";

}

else if (titlu == "" && anAparitie == "" && limba == "" && observatii != "" && isbn != "")

{

cmdString = "select * from Carte_tbl where Observatii_Carte =" + "'" + observatii + "'" + " and ISBN =" + "'" + isbn + "'";

}

else if (titlu != "" && anAparitie != "" && limba != "" && observatii == "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and Limba_Carte =" + "'" + limba + "'";

}

else if (titlu != "" && anAparitie != "" && limba == "" && observatii != "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and Observatii_Carte =" + "'" + observatii + "'";

}

else if (titlu != "" && anAparitie != "" && limba == "" && observatii == "" && isbn != "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and ISBN =" + "'" + isbn + "'";

}

else if (titlu == "" && anAparitie != "" && limba != "" && observatii != "" && isbn == "")

{

cmdString = "select * from Carte_tbl where An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and Limba_Carte =" + "'" + limba + "'" + " and Observatii_Carte =" + "'" + observatii + "'";

}

else if (titlu == "" && anAparitie != "" && limba != "" && observatii == "" && isbn != "")

{

cmdString = "select * from Carte_tbl where An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and Limba_Carte =" + "'" + limba + "'" + " and ISBN =" + "'" + isbn + "'";

}

else if (titlu != "" && anAparitie != "" && limba != "" && observatii != "" && isbn == "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and Limba_Carte =" + "'" + limba + "'" + " and An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and Observatii_Carte =" + "'" + observatii + "'";

}

else if (titlu != "" && anAparitie != "" && limba != "" && observatii == "" && isbn != "")

{

cmdString = "select * from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + " and Limba_Carte =" + "'" + limba + "'" + " and An_Aparitie_Carte =" + "'" + anAparitie + "'" + " and ISBN =" + "'" + isbn + "'";

}

if (cuvantcheie1 == "" && cuvantcheie2 == "" && cuvantcheie3 == "" && cuvantcheie4 == "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl;";

}

else if (cuvantcheie1 != "" && cuvantcheie2 == "" && cuvantcheie3 == "" && cuvantcheie4 == "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 != "" && cuvantcheie3 == "" && cuvantcheie4 == "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 == "" && cuvantcheie3 != "" && cuvantcheie4 == "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 == "" && cuvantcheie3 == "" && cuvantcheie4 != "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 == "" && cuvantcheie3 == "" && cuvantcheie4 == "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 != "" && cuvantcheie3 == "" && cuvantcheie4 == "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 == "" && cuvantcheie3 != "" && cuvantcheie4 == "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 == "" && cuvantcheie3 == "" && cuvantcheie4 != "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 == "" && cuvantcheie3 == "" && cuvantcheie4 == "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 != "" && cuvantcheie3 != "" && cuvantcheie4 == "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 != "" && cuvantcheie3 == "" && cuvantcheie4 != "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 != "" && cuvantcheie3 == "" && cuvantcheie4 == "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 == "" && cuvantcheie3 != "" && cuvantcheie4 != "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'" + " and Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 == "" && cuvantcheie3 != "" && cuvantcheie4 == "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 == "" && cuvantcheie3 == "" && cuvantcheie4 != "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 != "" && cuvantcheie3 != "" && cuvantcheie4 == "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 != "" && cuvantcheie3 == "" && cuvantcheie4 != "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 != "" && cuvantcheie3 == "" && cuvantcheie4 == "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 != "" && cuvantcheie3 != "" && cuvantcheie4 != "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'" + " and Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 != "" && cuvantcheie3 != "" && cuvantcheie4 == "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 != "" && cuvantcheie3 != "" && cuvantcheie4 != "" && cuvantcheie5 == "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'" + " and Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 != "" && cuvantcheie3 != "" && cuvantcheie4 == "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 == "" && cuvantcheie2 != "" && cuvantcheie3 != "" && cuvantcheie4 != "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'" + " and Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

else if (cuvantcheie1 != "" && cuvantcheie2 != "" && cuvantcheie3 != "" && cuvantcheie4 != "" && cuvantcheie5 != "")

{

cmdString = "select * from Carte_tbl where Cuvant_Cheie1 =" + "'" + cuvantcheie1 + "'" + " and Cuvant_Cheie2 =" + "'" + cuvantcheie2 + "'" + " and Cuvant_Cheie3 =" + "'" + cuvantcheie3 + "'" + " and Cuvant_Cheie4 =" + "'" + cuvantcheie4 + "'" + " and Cuvant_Cheie5 =" + "'" + cuvantcheie5 + "'";

}

Pentru afișarea rezultatelor am folosit un Data Table.

#endregion

try

{

conn.Open();

SqlCommand cmd = new SqlCommand(cmdString, conn);

SqlDataAdapter dap = new SqlDataAdapter(cmdString, conn);

DataTable dat = new DataTable();

dap.Fill(dat);

foreach (DataRow row in dat.Rows)

{

rez_cautare.Add(row["ISBN"].ToString());

rez_cautare.Add(row["Titlu_Carte"].ToString());

rez_cautare.Add(row["An_Aparitie_Carte"].ToString());

rez_cautare.Add(row["Volum_Carte"].ToString());

rez_cautare.Add(row["Limba_Carte"].ToString());

rez_cautare.Add(row["Editie_Carte"].ToString());

rez_cautare.Add(row["Observatii_Carte"].ToString());

rez_cautare.Add(row["Cuvant_Cheie1"].ToString());

rez_cautare.Add(row["Cuvant_Cheie2"].ToString());

rez_cautare.Add(row["Cuvant_Cheie3"].ToString());

rez_cautare.Add(row["Cuvant_Cheie4"].ToString());

rez_cautare.Add(row["Cuvant_Cheie5"].ToString());

În cazul în care nu a fost găsită cartea ne apare un mesaj “Cartea nu a fost gasită”,iar dacă a fost găsită cel puțin o carte,această este afișată.

}

if (dat.Rows.Count == 0)

{

rez_cautare.Add("Cartea nu a fost gasita");

}

}

catch (Exception e)

{

Debug.WriteLine(e);

}

finally

{

conn.Close();

}

return rez_cautare;

}

Metoda InsertAdresă conține operațiile de adăugare cărți în baza de date.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:Județ,Localitate,Stradă, Bloc,Apartament și Observații.După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.

Figure 6

Metoda InsertArticol conține operațiile de adăugare articole în bază de date.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:Nume,Dată Publicare și Observații.După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.

Figure 7

Metoda InsertAutor conține operațiile de adăugare autori în baza de date.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:Nume,Inițială, Prenume și Observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.

Figure 8

Metoda InsertCarte conține operațiile de adăugare a cărților în baza de date.Când apelăm această metodă,se va deschide o fereastră cu următoarele câmpuri:ISBN,Titlu,An apariție,Limbă,Volum,Ediție,Observații și câmpurile pentru cele cinci cuvinte cheie. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.

Figure 9

Metoda InsertContact conține operațiile de introducere a datelor de contact ale unui utilizator.Această metodă conține datele din baza de date ale unui utilizator și datele din baza de date referitoare la numere de telefon.Când apelăm această metodă,se va deschide o fereastră cu următoarele câmpuri:id_utilizator,id_telefon și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.

Figure 10

Metoda InsertContinut conține operațiile de introducere a datelor unui articol și al unei reviste,dacă un articol aparține unei reviste.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:id_articol,id_revistă și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.

Figure 11

Metoda InsertEditie conține operațiile de introducere a datelor editurilor și cărților,ce carte corespunde unei anumite edituri sau mai multor edituri,ce cărți conțin anumite edituri. Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:id_editură, id_carte și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 12

Metoda InsertEditura conține operațiile de introducere a datelor despre edituri.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:nume,localitate și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 13

Metoda InsertImprumut conține operațiile de introducere a datelor referitoare la împrumuturi.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:id_carte,id_utiliator,dată_împrumut,dată_returnare și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 14

Metoda InsertLocatie conține operațiile de introducere a datelor referitoare la adresă sau adresele utilizatorilor.Când apelăm aceasat metodă se va deschide o fereastră cu următoarele câmpuri:id_adresă,id_utilizator și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 15

Metoda InsertRevista conține operațiile de introducere a datelor referitoare le revistele deținute în bibliotecă.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:nume,număr,data_publicare și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 16

Metoda InsertScriitor conține operațiile de introducere a datelor despre autori și cărțile pe care aceștia le-au scris.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:id_autor,id_carte,autor_principal și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 17

Metoda InsertTelefon conține operațiile de introducere a numerelor de telefon ale utilizatorilor(persoanele care au fost introduse în tabela User și care au împrumutat cărți).Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:număr și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 18

Metoda InsertUser conține operațiile de introducere a datelor referitoare la persoanele care doresc să împrumute cărți.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:cnp,nume,prenume,email și observații. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Inserarea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Inserarea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 19

Metoda StergeCarte conține operațiile de eliminare a cărților din bază de date.Când apelăm această metodă se va deschide o fereastră cu următoarele câmpuri:titlu și id.Aceste câmpuri reprezintă criteriile după care se poate realiza ștergerea unei cărți. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se va afișa “Stergerea a fost făcută cu succes!” în cazul în care câmpurile au fost completate corect sau “Stergerea nu a fost făcută!” în cazul în care câmpurile nu au fost completate corect.În cazul în care nu am completat nici un câmp,pe ecran va apărea un mesaj de eroare.

Figure 20

Metodă VerificaImprumut conține operațiile de vizualizare,verificare a cărților împrumutate.Apelând această metodă,se deschide o fereastră cu un singur camp:data.Acest câmp reprezintă data la care ar trebui returnată cartea.Apelând această metodă se vor afișa cărțile care trebuiesc aduse la data respectivă. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se vor afișa impumuturile în cazul în care câmpurile au fost completate corect sau eroare cazul în care nu am completat nici un câmp.

Figure 21

Metoda ViewBooks conține operațiile de vizualizare a cărților din bibliotecă.Apelând această metodă,se va deschide o fereastră care conține următoarele câmpuri:isbn,titlu,volum, an,limbă.Aceste câmpuri reprezintă criterii în funcție de care se vor afișa anumite cărți. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se vor afișa cărțile în cazul în care câmpurile au fost completate corect sau toate cărțile cazul în care nu am completat nici un câmp.

Figure 22

Metoda ViewUsers conține operațiile de vizualizare a utilizatorilor care au împrumutat cart.Apelând această metodă,se va deschide o fereastră care conține următoarele câmpuri:nume,prenume,email.Aceste câmpuri reprezintă criterii în funcție de care se vor afișa anumite utilizatorii. După ce am completat câmpurile,apăsând butonul Invoke ne va apărea o fereastră în care se vor afișa utilizatorii în cazul în care câmpurile au fost completate corect sau toți utilizatorii cazul în care nu am completat nici un câmp.

Figure 23

V.Descrierea aplicatiei

5.1.Meniu

Meniul aplicației este destul de simplu.Atunci când deschidem aplicația se va afișa pe ecranul dispozitivului mobil o fereastră care conține următoarele butoane:Insert,Delete,View, Search și Exit.

Figure 24

Butonul de insert conține toate operațiile de inserție care se pot face în această aplicație și anume:Insert address,insert articol,insert autor,insert carte,insert contact,insert conținut,insert ediție,insert editură,insert împrumut,insert locație,insert revistă,insert scriitor,insert telefon,insert user și exit.

Figure 25

Butonul Delete conține o singură operație și anume Delete book.Pe lângă acest buton mai găsim un buton Back care ne permite să revenim la meniul anterior.

Figure 26

Butonul View permite efectuarea a trei operații.Operația de vizualizare a împrumuturilor , View Împrumut,operația de vizualizare a cărților deținute de utilizator,View Books,și operația de vizualizarea a persoanelor care au împrumutat cărți de la posesor,View User.Pe lângă aceste funcționalități mai găsim un buton Back,care ne permite să revenim la meniul anterior.

Figure 27

Butonul Search ne permite să efectuăm operația de căutare a unei cărți.În cazul în care o anumită persoană dorește să afle dacă deținem o anumită carte,o simplă apăsare a butonului Search Book ne permite efectuarea unei căutări în baza de date.Butonul Back ne permite revenirea la meniul anterior.

Figure 28

Ultimul Buton din meniu,Exit,ne permite,după cum spune și numele,să ieșim din aplicație.

5.2 Diagrame de clase

“O clasă reprezintă descrierea unui grup de obiecte care au:

proprietăți (atribute),

comportament,

relații cu alte obiecte,

semantic ”

“În UML clasele sunt reprezentate sub formă de dreptunghiuri cu trei compartimente pentru:

numele clasei,

compartimentul din mijloc afișează atributele clasei,

compartimentul inferior conține operațiile clasei”

Class diagram reprezinta un tip de diagramă folosita pentru descrierea structurii statice, adică a entităților sau claselor existente într-un sistem.

utilizat de către dezvoltatori pentru specificarea claselor dar poate fi foarte util și pentru specificarea structurii unor sisteme sau subsistem dintr-un business real.

arata relatiile dintre clase de tipul: mostenire, agregare si asociere, precum si operatiile si atributele aferente fiecareia.

Clasa are instanțe, sau realizări. Aceste instanțe sunt obiectele clasei. Prin conceptul de clasă se descriu structura și comportarea obiectelor clasei. Structura conține atributele fiecărui obiect din clasă.

În reprezentarea clasei atributele și operațiile sunt declarate în compartimentele speciale:

atributele: numele atributului: tipul atributului = valoare implicită

operațiile: numele operației (parametri): tipul valorii returnate

Figure 29

5.3 Descrierea detaliata a claselor

Clasa Autor.

Clasa Autor are ca parametrii de intrare IDAutor() care primește valori de tip integer.Acest câmp reprezintă identificatorul unic al clasei și nu poate fi nul.Nume_Autor primește valori de tip string.În acest câmp se indroduce numele autorului.Inițiala_autor primește valori de tip string.În acest câmp se introduce inițiala autorului.Prenume_Autor primește valori de tip string.În acest câmp se introduce prenumele autorului.Observații_Autor primește valori de tip string.În acest câmp se introduc observații despre autor,dacă există observații de făcut.Acest câmp poate fi nul.

InsertAutor()

Metoda InsertAutor() permite introducerea datelor despre autori,IdAutor, Nume_Autor,Inițiala_Autor,Prenume_Autor și Observații și returnează “Inserarea a fost făcută cu success!” în cazul în care toate câmpurile au fost completate corect.În cazul în care câmpurile nu au fost completate corect,metoda returnează “Inserarea nu a fost făcută!”.

Clasa Scriitor

Clasa Scriitor() are ca parametrii de intrare IDAutor care primește valori de tip integer și care trebuie să fie în clasa Autor().Acest câmp nu poate fi nul.IDCarte primește valori de tip integer și trebuie să fie în clasa Carte().Acest câmp nu poate fi nul.Observații primește valori de tip string.În acest câmp indroducem observații despre scriitor în cazul în care există.Acest câmp poate fi nul.

InsertScriitor()

Metoda InsertScriitor() permite introducerea datelor despre scriitor,id-ul scriitorului,id-ul autorului,id-ul cărții pe care acesta a scris-o precum și observații referitoare la scriitor și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Adresa

Clasa Adresă() are ca parametrii de intrare IDAdresa care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.Județ primește valori de tip string.În acest câmp se indroduce județul în care locuiește user-ul.Localitate primește valori de tip string.În acest câmp se introduce localitatea din care este user-ul.Strada primește valori de tip strîng.În acest câmp se introduce strada pe care locuiește user-ul.Bloc primește valori de tip string.În acest câmp se introduce blocul în care locuiește user-ul.Apartament primește valori de tip string.În acest câmp se introduce apartamentul în care locuiește user-ul.Observații primește valori de tip string.În acest câmp indroducem observații despre adresa la care locuiește user-ul în cazul în care există.Acest câmp poate fi nul.

InsertAddress()

Metoda InsertAddress() permite introducerea datelor despre adresa user-ului,Județul în care locuiește,localitatea,strada pe care locuiește,blocul și apartamentul precum și observații referitoare la adresă și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Pentru realizarea grafică a aplicației pentru dispozitivele mobile s-a folosit următoarea secvența de cod scrisă în XML:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="match_parent"

android:layout_height="match_parent">

<TextView

android:id="@+id/textView0"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Insert Address"

android:textAppearance="?android:attr/textAppearanceLarge"

android:longClickable="false"

android:layout_gravity="center_horizontal" />

<TextView

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Localitate"

android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText

android:id="@+id/txtLocalitate"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

<requestFocus />

</EditText>

<TextView

android:id="@+id/textView2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Judet"

android:textAppearance="?android:attr/textAppearanceLarge" />

<Spinner

android:id="@+id/spinner1"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

<!– <EditText

android:id="@+id/txtJudet"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

<requestFocus />

</EditText> –>

<TextView

android:id="@+id/textView3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Strada"

android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText

android:id="@+id/txtStrada"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

<requestFocus />

</EditText>

<TextView

android:id="@+id/textView4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Bloc"

android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText

android:id="@+id/txtBloc"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

<requestFocus />

</EditText>

<TextView

android:id="@+id/textView5"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Apartament"

android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText

android:id="@+id/txtApartament"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

<requestFocus />

</EditText>

Conectarea aplicației la serviciul WEB și selectarea operației pe care dorim să o efectuăm se realizează prin intermediul următoarei secvențe de cod:

public class ActivityTwo extends Activity {

public final String SOAP_ACTION1 = "http://tempuri.org/InsertAdresa";

public final String OPERATION_NAME = "InsertAdresa";

public final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";

private static String METHOD_NAME1 = "InsertAdresa";

public final String SOAP_ADDRESS = "http://192.168.126.1/BibliotecaWebService/WebService1.asmx";

Câmpurile pentru introducerea datelor,precum și butoanele sunt realizate foosind următoarea secvența de cod:

Button butonAdresa, btnBack;

EditText txtLocalitate, txtJudet, txtStrada, txtBloc, txtApartament, txtObservatii;

private static Spinner judet;

Se observă că pentru completarea județului s-a folosit un spinner(drop-down -list). Acest spinner este o listă care cuprinde toate județele.Astfel,județul poate fi selectat din listă fără a mai fi nevoie să scriem județul.Descrierea spinner-ului este următoarea:

public void declara(){

ArrayList<String> entries = new ArrayList<String>(Arrays.asList(

"Alegeti Judetul:", "Alba", "Arad","Arges", "Bacau","Bihor","Bistrita-Nasaud","Botosani","Braila","Brasov","Buzau","Calarasi","Caras-Severin","Cluj","Constanta","Covasna","Dambovita","Dolj","Galati","Giurgiu","Gorj","Harghita","Hunedoara","Ialomita","Iasi","Ilfov","Maramures","Mehedinti","Mures","Neamt","Olt","Prahova","Salaj","Satu Mare","Sibiu","Suceava","Teleorman","Timis","Tulcea","Valcea","Vaslui","Vrancea","Bucuresti"));

judet = (Spinner) findViewById(R.id.spinner1);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,

android.R.layout.simple_spinner_item, entries);

judet.setAdapter(adapter);

}

Pentru afișarea formularului de completare a datelor s-a folosit următoarea secvență de cod:

public class ServiceCall extends AsyncTask<String, Void, String> {

@Override

protected String doInBackground(String… params) {

String gf = "";

SoapObject request = new SoapObject(

WSDL_TARGET_NAMESPACE, OPERATION_NAME);

String l_localitate = txtLocalitate.getText()

.toString();

if (l_localitate.equals(null)){

l_localitate = "";

}

String l_judet = judet.getSelectedItem()

.toString();

if (l_judet.equals(null)){

l_judet = "";

}

String l_strada = txtStrada.getText()

.toString();

if (l_strada.equals(null)){

l_strada = "";

}

String l_bloc = txtBloc.getText()

.toString();

if (l_bloc.equals(null)){

l_bloc = "";

}

String l_apartament = txtApartament.getText()

.toString();

if (l_apartament.equals(null)){

l_apartament = "";

}

String l_observatii = txtObservatii.getText()

.toString();

if (l_observatii.equals(null)){

l_observatii = "";

}

try {

request.addProperty("localitate", l_localitate);

request.addProperty("judet", l_judet);

request.addProperty("strada", l_strada);

request.addProperty("bloc", l_bloc);

request.addProperty("apartament", l_apartament);

request.addProperty("observatii", l_observatii);

gf = sendSoapRequest(request, OPERATION_NAME,

SOAP_ADDRESS);

}

catch (Exception ex)

{

ex.printStackTrace();

}

return gf;

}

@Override

protected void onPostExecute(String result) {

}

@Override

protected void onPreExecute() {

}

@Override

protected void onProgressUpdate(Void… values) {

}

}

Pentru a putea lega câmpurile și butoanele din layout-ul grafic în aplicație,am folosit următoarea secvență de cod:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_two);

butonAdresa = (Button) findViewById(R.id.Adresabtn);

btnBack = (Button) findViewById(R.id.btnBack2);

txtLocalitate = (EditText) findViewById(R.id.txtLocalitate);

// txtJudet = (EditText) findViewById(R.id.txtJudet);

txtStrada = (EditText) findViewById(R.id.txtStrada);

txtBloc = (EditText) findViewById(R.id.txtBloc);

txtApartament = (EditText) findViewById(R.id.txtApartament);

txtObservatii = (EditText) findViewById(R.id.txtObservatii2);

Funcționalitățile butoanelor Back și Insert Adresa sunt descrise în următoarea secvența de cod:

btnBack.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

System.exit(0);

}

});

butonAdresa.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

try {

String m = new ServiceCall().execute("1").get();

Toast.makeText(ActivityTwo.this,m, Toast.LENGTH_SHORT).show();

clear();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ExecutionException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

String encodedCredentials;

}

La apăsarea butonului Back,aplicația va ieși din activitatea curentă și va reveni la meniul anterior: System.exit(0);.

La apăsarea butonului Insert Adresă,datele completate sunt trimise și stocate în baza de date.După ce am apăsat pe Insert Adresă,câmpurile completate dorim să fie necompletate.Pentru aceasta am folosit următoarea funcție:

public void clear (){

judet.setSelection(0);

txtLocalitate.setText("");

txtStrada.setText("");

txtBloc.setText("");

txtApartament.setText("");

txtObservatii.setText("");

}

Pentru ca toate operațiile care se pot efectua în aplicația mobilă să fie efectuate corect este necesar că toate activitățile să fie declarate.Acestea sunt declarate în AndroidManifest.

Scriptul folosit în AndroidManifest este următorul:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.biblioteca"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="21" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.INTERNET"/>

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name=".MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".ActivityTwo" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".ActivityThree" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity4" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity5" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity6" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity7" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity8" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity9" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity10" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity11" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity12" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity13" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity14" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity15" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity16" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity17" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity18" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity19" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity20" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity android:name=".InsActivity"></activity>

<activity android:name=".DelActivity"></activity>

<activity android:name=".ViewActivity"></activity>

<activity android:name=".SearchActivity"></activity>

</application>

</manifest>

Clasa Articol

Clasa Articol() are ca parametrii de intrare IDArticol care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.NumeArticol primește valori de tip string.În acest câmp se indroduce numele articolului pe care îl deține în biblioteca personală.Dată_Publicare primește valori de tip string.În acest câmp se introduce data la care a fost publicat articolul. Observații primește valori de tip string.În acest câmp indroducem observații despre atricolul deținut în bibliotecă în cazul în care există.Acest câmp poate fi nul.

InsertArticol()

Metoda InsertArticol() permite introducerea datelor despre articolul deținut, numele articolului,data la care a fost publicat precum și observații referitoare la articol și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Carte

Clasa Carte() are ca parametrii de intrare IDCarte care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.ISBN primește valori de tip integer.În acest câmp se indroduce ISBN-ul cărții.Titlu primește valori de tip string.În acest câmp se introduce titlul cărții.AnAparitie primește valori de tip string.În acest câmp se introduce anul apariției cărții.Limbă primește valori de tip string.În acest câmp se introduce limba în care a fost scrisă carte.Volum primește valori de tip string.În acest câmp se introduce volumul cărții în cazul în care are mai multe volume.Ediție primește valori de tip string.În acest câmp se introduce ediția cărții în cazul în care cartea a apărut în ediții diferite.Observații primește valori de tip string.În acest câmp indroducem observații despre cartea pe care o deținem în bibliotecă în cazul în care există.Acest câmp poate fi nul.CuvantCheie1, CuvantCheie2,CuvantCheie3, CuvantCheie4 și CuvantCheie5 primesc valori de tip string.În aceste câmpuri introducem cuvinte cheie despre carte.

InsertBook()

Metoda InsertBook() permite introducerea datelor despre cartea pe care o deținem, ISBN-ul cărții,titlul,anul apariției,limba în care a fost scrisă cartea,volumul și ediția cărții, observații referitoare la carte precum și cuvintele cheie ale cărții și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metodă va returna “Inserarea nu a fost făcută!”.

Clasa User

Clasa User() are ca parametrii de intrare IDUser care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.CNP primește valori de tip integer.În acest câmp se introduce CNP-ul persoanei care dorește să împrumute o carte.Nume primește valori de tip string.În acest câmp se introduce numele persoanei care dorește să împrumute o carte.Prenume primește valori de tip string.În acest câmp se introduce prenumele persoanei care dorește să împrumute o carte.Email primește valori de tip string.În acest câmp se introduce email-ul persoanei care dorește să împrumute o carte.Observații primește valori de tip string.În acest câmp indroducem observații despre persoana care a împrumutat cartea.Acest câmp poate fi nul.

InsertUser()

Metoda InsertUser() permite introducerea datelor despre persoanele care doresc să împrumute cărți, numele persoanei,prenumele persoanei,email-ul precum și observații referitoare la acea persoană și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Contact

Clasa Contact() are ca parametrii de intrare IDContact care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.IDTelefon care primește valori de tip integer și care trebuie să fie în clasa Telefon().Acest câmp nu poate fi nul. IDUtilizator primește valori de tip integer și trebuie să fie în clasa Utilizator().Acest câmp nu poate fi nul.Observații primește valori de tip string.În acest câmp indroducem observații despre contact în cazul în care există.Acest câmp poate fi nul.

InsertContact

Metoda InsertContact() permite introducerea datelor de contact ale persoanelor care doresc să împrumute cărți din biblioteca noastră,id-ul telefonului,id-ul utilizatorului și observațiile privind datele de contact și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Continut

Clasa Conținut() are ca parametrii de intrare IDContinut care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.IDRevista care primește valori de tip integer și care trebuie să fie în clasa Revistă().Acest câmp nu poate fi nul. IDArticol primește valori de tip integer și trebuie să fie în clasa Articol().Acest câmp nu poate fi nul.Observații primește valori de tip string.În acest câmp indroducem observații despre conținutul revistei în cazul în care există.Acest câmp poate fi nul.

InsertContinut()

Metoda InsertContinut() permite introducerea datelor referitoare la articolele existente într-o revistă deținută în bibliotecă,id-ul revistei,id-ul articolului conținut în revista respectivă și observațiile privind datele conținute și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Editie

Clasa Ediție() are ca parametrii de intrare IDEditie care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.IDCarte care primește valori de tip integer și care trebuie să fie în clasa Carte().Acest câmp nu poate fi nul. IEditura primește valori de tip integer și trebuie să fie în clasa Editură().Acest câmp nu poate fi nul.Observații primește valori de tip string.În acest câmp indroducem observații despre edituri în cazul în care există.Acest câmp poate fi nul.

InsertEditie()

Metoda InsertEditie() permite introducerea datelor referitoare la cărțile care au fost redactate într-o editură,id-ul cărții,id-ul editurii în care a fost redactată cartea respectivă și observațiile privind datele conținute și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Imprumut

Clasa Împrumut() are ca parametrii de intrare IDImprumut care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.IDUser primește valori de tip integer.În acest câmp se introduce ID-ul persoanei care dorește să împrumute o carte.IDCarte primește valori de tip întreg.În acest câmp se introduce id-ul cărții pe care un ușer dorește să o împrumute.DataImprumut primește valori de tip string.În acest câmp se introduce data la care un user a împrumutat o carte de la noi.DataReturnare primește valori de tip string.În acest câmp se introduce numele data la care acel utilizator trebuie să ne returneze cartea împrumutată.Observații primește valori de tip string.În acest câmp indroducem observații despre împrumutul efectuat.Acest câmp poate fi nul.

InsertImprumut()

Metoda InsertImprumut() permite introducerea datelor despre împrumuturile pe care le efectuăm,id-ul utilizatorului care dorește să împrumute cărți,id-ul cărții împrumutate,data la care s-a efectuat împrumutul,data la care trebuie să fie returnată cartea precum și observații referitoare la împrumut și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Editura

Clasa Editură() are ca parametrii de intrare IDEditura care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.În acest câmp se introduce id-ul editurii.Nume primește valori de tip string.În acest câmp se introduce numele editurii.Localitate primește valori de tip string.În acest câmp se introduce localitatea unde este situată editura respective.Observații primește parametrii de tip string.În acest câmp se introduce observații despre editură,în cazul în care există.

InsertEditura()

Metoda InsertEditura() permite introducerea datelor despre editurile cărților pe care le avem în bibliotecă,numele editurii,localitatea unde este situată editura precum și observații referitoare la edituri și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Scriitor

Clasa Scriitor() are ca parametrii de intrare IDScriitor care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.În acest câmp se introduce id-ul scriitorului.IDCarte primește valori de tip integer.În acest câmp se introduce id-ul cărții scrise de un anumit autor.IDAutor primește valori de tip integer.În acest câmp se introduce id-ul autorului.AutorPrincipal primește parametrii de tip string.În acest câmp se indroduce numele autorului principal în situația în care cartea are un autor principal. Observații primește parametrii de tip string.În acest câmp se introduce observații despre scriitori,în cazul în care există.

InsertScriitor()

Metoda InsertScriitor() permite introducerea datelor despre autorii fiecărei cărți din bibliotecă,id-ul cărții,id-ul editurii,numele autorului principal precum și observații referitoare la scriitori și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Locație

Clasa Locație() are ca parametrii de intrare IDLocatie care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.În acest câmp se introduce id-ul locatiei.IDAdresa primește valori de tip integer.În acest câmp se introduce id-ul adresei la care locuiește o persoană care a împrumutat cărți din bibliotecă.IDUtilizator primește valori de tip integer.În acest câmp se introduce id-ul utilizatorului a cărui adresă dorim să o introducem în baza de date.. Observații primește parametrii de tip string.În acest câmp se introduce observații despre locația utilizatorului,în cazul în care există.

InsertLocatie()

Metoda InsertLocatie() permite introducerea datelor despre adresa fiecărei persoane care a împrumutat cărți din bibliotecă,id-ul adresei,id-ul utilizatorului precum și observații referitoare la locație și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Telefon

Clasa Telefon() are ca parametrii de intrare IDTelefon care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.În acest câmp se introduce id-ul telefonului.NumarTelefon primește valori de tip string.În acest câmp se introduce numărul de telefon al persoanei care dorește să împrumute cărți.Observații primește parametrii de tip string.În acest câmp se introduce observații despre numărul de telefon al utilizatorului sau observații privind intervalul în care poate fi contactat,în cazul în care există.

InsertTelefon()

Metoda InsertTelefon() permite introducerea datelor despre numărul de telefon al fiecărei persoane care a împrumutat cărți din bibliotecă,numărul de telefon al utilizatorului precum și observații referitoare la numărul de telefon și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

Clasa Revistă

Clasa Revistă() are ca parametrii de intrare IDRevista care primește valori de tip integer.Acest câmp reprezintă identificatorul clasei și nu poate fi nul.În acest câmp se introduce id-ul revistei.Nume primește valori de tip string.În acest câmp se introduce numele revistei pe care o deținem în bibliotecă.Număr primește valori de tip integer.În acest câmp se introduce numărul revistei deținute în bibliotecă.DataPublicare primește parametrii de tip string.În acest câmp se introduce data la care a fost publicată revista.Observații primește parametrii de tip string.În acest câmp se introduce observații despre reviste,în cazul în care există.

InsertRevista()

Metoda InsertRevista() permite introducerea datelor despre revistele pe care le deținem în bibliotecă,numele revistei,numărul revistei,data la care a fost publicată revista precum și observații referitoare la revistă și returnează “Inserarea a fost făcută cu success!” în cazul în care câmpurile au fost completate corect.În cazul în care câmpurile nu au fost competate corect,metoda va returna “Inserarea nu a fost făcută!”.

VI.Testare

Pentru verificarea funcționalității aplicației s-au folosit următoarele tipuri de teste:

Teste unitare

Teste de integrare

Teste funcționale

Teste de acceptanță

Testarea unitară reprezintă o modalitate de testare care verifică dacă unitățile individuale de cod au comportamentul așteptat. Se consideră o unitate o componentă software minimală care poate fi testată. În cazul programării orientate obiect metodele sunt considerate cele mai mici elemente care pot fi supuse testării unitare. Scopul testării unitare este de a izola fiecare unitate de restul sistemului și de a stabili dacă specificațiile corespunzătoare fiecărei unități au fost corect implementate. Printre beneficiile oferite de testarea unitară se enumeră faptul că poate fi utilizată într-o abordare de jos în sus pentru a facilita testarea la integrare.

Testele unitare au fost făcute cu ajutorul instrucțiunii System.out.println. Am folosit această instrucțiune pentru a afișa anumite mesaje în consolă și pentru a afișa valorile anumitor variabile în consolă.

Testarea bazelor de date presupune verificarea executării corecte a interogărilor și operațiilor de adăugare și actualizare a datelor, precum, și verificarea conexiunilor dintre aplicatieși baza de date. Prin testarea performantelor se măsoară comportamentul aplicatiei în diverse condiții. În prezent există o mulțime de instrumente pentru testarea automata a aplicațiilor distribuite bazate pe web.

Cazurile de test pentru testarea corectitudinii datelor returnate de interogare au fost făcute în următorul fel: am efectuat aceleași interogari din aplicație,din Serviciu WEB și din Microsoft SQL Server 2012 și am observat că rezultatele nu diferă în nici un fel.

VII.Concluzii si propuneri de imbunatatire

Sistemul de operare Android a devenit la ora actuală cel mai răspândit sistem de operare pentru dispozitivele mobile.Această popularitate se datorează faptului că poate fi modificat și adaptat dorințelor utilizatorului dar și datorită faptului că numărul aplicațiilor este unu foarte mare.

Aplicația prezentă în această lucrare înmagazinează majoritatea caracteristicilor unei biblioteci.Printre aceste caracterictici amintim:introducerea datelor referitoare la cărți,reviste, articole,personae care doresc să împrumute cărți,date referitoare la contactul persoanelor care au împrumutat cărți,vizualizarea cărților,evident împrumuturilor,eliminarea cărților care nu se mai află în bibliotecă.

Pentru păstrarea datelor cu privire la cărți,persoane,reviste,articole precum și pentru evident împrumuturilor s-a creat o bază de date.Baza de date a fost concepută în Microsoft SQL Server 2012,una dintre cele mai răspândite tehnologii precum și una dintre cele mai simple și ușor de folosit.

Întrucât aplicația trebuie să funcționeze în rețea este necesară existent unui serviciu WEB.Serviciul WEB a fost dezvoltat în C#,iar mediul de dezvoltare a fost Microsoft Visual Studio 2013.Am ales să folosesc C# din dorința de a învața acest limbaj de programare,din dorința de a folosi ceva nou,inedit,ceva ce nu s-a studiat în facultate,dar și datorită faptului că în C# pot fi dezvoltate aplicații software care pot rula atât pe computer personale cât și pe dispozitive mobile(smartphone și tabletă).

Pentru a îmbunătăți această aplicație am putea introduce mai multe funcționalități care să ne simplifice managementul împrumuturilor.O funcționalitate ar fi introducerea unor mesaje de avertizare.Atunci când un împrumut urmează să expire,să primim un mesaj de notificare care să ne anunțe cine trebuie să returneze imprumutul și ce carte trebuie returnată.Acest lucru s-ar putea face prin Google Cloud Messaging.

În concluzie,aplicația prezentată este un exemplu real de bibliotecă virtuală, tehnologiile folosite în dezvoltarea aplicației fiind tehnologii de ultimă generație,tehnologii cunoscute și folosite de majoritatea oamenilor.

Bibliografie

http://www.cs.ubbcluj.ro/~tzutzu/Didactic/AnalizaGestSisteme/Curs%2004%20-%20Diagrama%20de%20clase.pdf (31.05.2015)

http://ro.wikipedia.org/wiki/Testarea_software (02.06.2015)

Burdescu Dan, Ionescu Augustin-Iulian, Stanescu Liana Curs baze de date Editura Universității, Craiova, 2004

Ben Forta, SQL în lecții de 10 minute, Editura Teora 2004

Ana Intuneric, Cristina Sichim, Daniela Tarasa-Aplicatii Windows in Visual C# 2008 Express Edition. Aplicatii cu baze de date SQL Server 2008

Bill Phillips,Brian Hardy-Android Programming: The Big Nerd Ranch Guide

Erik Hellman-Android Programming

Jennifer Greene,Andrew Stellman-Head First C#

https://ro.wikipedia.org/wiki/Android_(sistem_de_operare) (24.06.2015)

http://hardcs.ro/forum/index.php?/topic/51-android/ (24.06.2015)

https://developer.android.com/training/index.html (24.06.2015)

http://www.tutorialspoint.com/android/ (24.06.2015)

http://www.vogella.com/tutorials/android.html (24.06.2015)

http://www.codeproject.com/Articles/863/Your-first-C-Web-Service (24.06.2015)

http://www.c-sharpcorner.com/1/133/web-services.aspx (24.06.2015)

http://cs.ucv.ro/staff/aionescu/pbd.php (25.06.2015)

Marin Fotache- Proiectarea bazelor de date. Normalizare si postnormalizare. Implementari SQL si Oracle

Anexe

A.Codul Sursa

Baza de date:

create database biblioteca;

use biblioteca;

create table Autor_tbl

(

ID_Autor int not null primary key identity(1,1),

Nume_Autor varchar(30) not null,

Initiala_Autor varchar(30) not null,

Prenume_Autor varchar(30) not null,

Observatii_Autor varchar(100) not null

);

create table Carte_tbl

(

ID_Carte int not null primary key identity(1,1),

ISBN varchar(30),

Titlu_Carte varchar(50) not null,

An_Aparitie_Carte varchar(10),

Limba_Carte varchar(20),

Volum_Carte int,

Editie_Carte varchar(10),

Observatii_Carte varchar(100)

);

create table Utilizator_tbl

(

ID_Utilizator int not null primary key identity(1,1),

CNP_Utilizator varchar(13),

Nume_Utilizator varchar(30),

Prenume_Utilizator varchar(50),

Email_Utilizator varchar(40) not null,

Observatii_Utilizator varchar(100)

);

create table Editura_tbl

(

ID_Editura int not null primary key identity(1,1),

Nume_Editura varchar(30) not null,

Localitate_Editura varchar(20),

Observatii_Editura varchar(100)

);

create table Articol_tbl

(

ID_Articol int not null primary key identity(1,1),

Nume_Articol varchar(30) not null,

Data_Publicare_Articol varchar(15),

Observatii_Articol varchar(100)

);

create table Revista_tbl

(

Id_Revista int not null primary key identity(1,1),

Nume_Revista varchar(20) not null,

Numar_Revista int not null,

Data_Publicare_Revista varchar(15),

Observatii_Revista varchar(100)

);

create table Telefon_tbl

(

ID_Telefon int not null primary key identity(1,1),

Numar_telefon int not null,

Observatii_Telefon varchar(100)

);

create table Adresa_tbl

(

ID_Adresa int not null primary key identity(1,1),

Localitate_Adresa varchar(30),

Judet_Adresa varchar(15),

Strada_Adresa varchar(30),

Bloc_Adresa varchar(10),

Apartament_Adresa int,

Observatii_Adresa varchar(100)

);

create table Scriitor_tbl

(

ID_Scriitor int not null primary key identity(1,1),

ID_Autor int not null,

ID_Carte int not null,

Autor_Principal varchar(50),

Observatii_Scriitor varchar(100)

);

create table Imprumuta_tbl

(

ID_Imprumut int not null primary key identity(1,1),

ID_Utilizator int not null,

ID_Carte int not null,

Data_Imprumut varchar(15) not null,

Data_Returnare varchar(15) not null,

Observatii_Imprumut varchar(100)

);

create table Editie_tbl

(

ID_Editie int not null primary key identity(1,1),

ID_Editura int not null,

ID_Carte int not null,

Observatii_Editie varchar(100)

);

create table Locatie_tbl

(

ID_Locatie int not null primary key identity(1,1),

ID_Adresa int not null,

ID_Utilizator int not null,

Observatii_Locatie varchar(100)

);

create table Contact_tbl

(

ID_Contact int not null primary key identity(1,1),

ID_Telefon int not null,

ID_Utilizator int not null,

Observatii_Contact varchar(100)

);

create table Continut_tbl

(

ID_Continut int not null primary key identity(1,1),

ID_Articol int not null,

ID_Revista int not null,

Observatii_Continut varchar(100)

);

alter table Scriitor_tbl

add foreign key (ID_Autor) references Autor_tbl(ID_Autor);

alter table Scriitor_tbl

add foreign key (ID_Carte) references Carte_tbl(ID_Carte);

alter table Imprumuta_tbl

add foreign key (ID_Utilizator) references Utilizator_tbl(ID_Utilizator);

alter table Imprumuta_tbl

add foreign key (ID_Carte) references Carte_tbl(ID_Carte);

alter table Editie_tbl

add foreign key (ID_Editura) references Editura_tbl(ID_Editura);

alter table Editie_tbl

add foreign key (ID_Carte) references Carte_tbl(ID_Carte);

alter table Locatie_tbl

add foreign key (ID_Adresa) references Adresa_tbl(ID_Adresa);

alter table Locatie_tbl

add foreign key (ID_Utilizator) references Utilizator_tbl(ID_Utilizator);

alter table Contact_tbl

add foreign key (ID_Utilizator) references Utilizator_tbl(ID_Utilizator);

alter table Contact_tbl

add foreign key (ID_Telefon) references Telefon_tbl(ID_Telefon);

alter table Continut_tbl

add foreign key (ID_Articol) references Articol_tbl(ID_Articol);

alter table Continut_tbl

add foreign key (ID_Revista) references Revista_tbl(ID_Revista);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie1 varchar(15);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie2 varchar(15);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie3 varchar(15);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie4 varchar(15);

ALTER TABLE Carte_tbl

ADD Cuvant_Cheie5 varchar(15);

Serviciu WEB:

using System;

using System.Collections.Generic;

using System.Data;

using System.Data.SqlClient;

using System.Diagnostics;

using System.Linq;

using System.Web;

using System.Web.Services;

namespace BibliotecaWebService

{

/// <summary>

/// Summary description for WebService1

/// </summary>

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.

// [System.Web.Script.Services.ScriptService]

public class WebService1 : System.Web.Services.WebService

{

#region Inserari

[WebMethod]

public string InsertCarte(string isbn, string titlu, string anAparitie, string limba, string volum, string editie, string observatii, string cuvantcheie1, string cuvantcheie2, string cuvantcheie3, string cuvantcheie4, string cuvantcheie5)

{

string result = "";

int vol;

if (volum == "")

{

vol = 1;

}

else

{

vol = Convert.ToInt16(volum);

}

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "insert into Carte_tbl values(@isbn,@titlu,@an,@limba,@volum,@editie,@observatii,@cuvantcheie1,@cuvantcheie2,@cuvantcheie3,@cuvantcheie4,@cuvantcheie5)";

try

{

SqlCommand sqlCommand = new SqlCommand(cmdString, conn);

sqlCommand.CommandType = CommandType.Text;

sqlCommand.Parameters.Add("@isbn", SqlDbType.Text).Value = isbn;

sqlCommand.Parameters.Add("@titlu", SqlDbType.Text).Value = titlu;

sqlCommand.Parameters.Add("@an", SqlDbType.Text).Value = anAparitie;

sqlCommand.Parameters.Add("@limba", SqlDbType.Text).Value = limba;

sqlCommand.Parameters.Add("@volum", SqlDbType.Int).Value = vol;

sqlCommand.Parameters.Add("@editie", SqlDbType.Text).Value = editie;

sqlCommand.Parameters.Add("@observatii", SqlDbType.Text).Value = observatii;

sqlCommand.Parameters.Add("@cuvantcheie1", SqlDbType.Text).Value = cuvantcheie1;

sqlCommand.Parameters.Add("@cuvantcheie2", SqlDbType.Text).Value = cuvantcheie2;

sqlCommand.Parameters.Add("@cuvantcheie3", SqlDbType.Text).Value = cuvantcheie3;

sqlCommand.Parameters.Add("@cuvantcheie4", SqlDbType.Text).Value = cuvantcheie4;

sqlCommand.Parameters.Add("@cuvantcheie5", SqlDbType.Text).Value = cuvantcheie5;

conn.Open();

sqlCommand.ExecuteNonQuery();

conn.Close();

result = "Inserarea a fost facuta cu succes!";

}

catch (Exception ex)

{

Debug.WriteLine(ex);

result = "Inserarea nu a fost facuta";

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return result;

}

[WebMethod]

public string InsertImprumut(int id_user, int id_carte, string dataImprumut, string dataReturnare, string observatii)

{

string result = "";

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "insert into Imprumuta_tbl values(@id_user,@id_carte,@dataImprumut,@dataReturnare,@observatii)";

try

{

SqlCommand sqlCommand = new SqlCommand(cmdString, conn);

sqlCommand.CommandType = CommandType.Text;

sqlCommand.Parameters.Add("@id_user", SqlDbType.Int).Value = id_user;

sqlCommand.Parameters.Add("@id_carte", SqlDbType.Int).Value = id_carte;

sqlCommand.Parameters.Add("@dataImprumut", SqlDbType.Text).Value = dataImprumut;

sqlCommand.Parameters.Add("@dataReturnare", SqlDbType.Text).Value = dataReturnare;

sqlCommand.Parameters.Add("@observatii", SqlDbType.Text).Value = observatii;

conn.Open();

sqlCommand.ExecuteNonQuery();

conn.Close();

result = "Inserarea a fost facuta cu succes!";

}

catch (Exception ex)

{

Debug.WriteLine(ex);

result = "Inserarea nu a fost facuta";

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return result;

}

[WebMethod]

public string InsertUser(string cnp, string nume, string prenume, string email, string observatii)

{

string result = "";

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "insert into Utilizator_tbl values(@cnp,@nume,@prenume,@email,@observatii)";

try

{

SqlCommand sqlCommand = new SqlCommand(cmdString, conn);

sqlCommand.CommandType = CommandType.Text;

sqlCommand.Parameters.Add("@cnp", SqlDbType.Text).Value = cnp;

sqlCommand.Parameters.Add("@nume", SqlDbType.Text).Value = nume;

sqlCommand.Parameters.Add("@prenume", SqlDbType.Text).Value = prenume;

sqlCommand.Parameters.Add("@email", SqlDbType.Text).Value = email;

sqlCommand.Parameters.Add("@observatii", SqlDbType.Text).Value = observatii;

conn.Open();

sqlCommand.ExecuteNonQuery();

conn.Close();

result = "Inserarea a fost facuta cu succes!";

}

catch (Exception ex)

{

Debug.WriteLine(ex);

result = "Inserarea nu a fost facuta";

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return result;

}

[WebMethod]

public string InsertAutor(string nume, string initiala, string prenume, string observatii)

{

string result = "";

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "insert into Autor_tbl values(@nume,@initiala,@prenume,@observatii)";

try

{

SqlCommand sqlCommand = new SqlCommand(cmdString, conn);

sqlCommand.CommandType = CommandType.Text;

sqlCommand.Parameters.Add("@nume", SqlDbType.Text).Value = nume;

sqlCommand.Parameters.Add("@initiala", SqlDbType.Text).Value = initiala;

sqlCommand.Parameters.Add("@prenume", SqlDbType.Text).Value = prenume;

sqlCommand.Parameters.Add("@observatii", SqlDbType.Text).Value = observatii;

conn.Open();

sqlCommand.ExecuteNonQuery();

conn.Close();

result = "Inserarea a fost facuta cu succes!";

}

catch (Exception ex)

{

Debug.WriteLine(ex);

result = "Inserarea nu a fost facuta";

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return result;

}

[WebMethod]

public string InsertAdresa(string localitate, string judet, string strada, string bloc, int apartament, string observatii)

{

string result = "";

int x = Convert.ToInt32(apartament);

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "insert into Adresa_tbl values(@localitate,@judet,@strada,@bloc,@apartament,@observatii)";

try

{

SqlCommand sqlCommand = new SqlCommand(cmdString, conn);

sqlCommand.CommandType = CommandType.Text;

sqlCommand.Parameters.Add("@localitate", SqlDbType.Text).Value = localitate;

sqlCommand.Parameters.Add("@judet", SqlDbType.Text).Value = judet;

sqlCommand.Parameters.Add("@strada", SqlDbType.Text).Value = strada;

sqlCommand.Parameters.Add("@bloc", SqlDbType.Text).Value = bloc;

sqlCommand.Parameters.Add("@apartament", SqlDbType.Int).Value = x;

sqlCommand.Parameters.Add("@observatii", SqlDbType.Text).Value = observatii;

conn.Open();

sqlCommand.ExecuteNonQuery();

conn.Close();

result = "Inserarea a fost facuta cu succes!";

}

catch (Exception ex)

{

Debug.WriteLine(ex);

result = "Inserarea nu a fost facuta";

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return result;

}

[WebMethod]

public string VerificaImprumut(string data)

{

string rezultat = "";

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "select Data_Returnare,Nume_Utilizator,Titlu_Carte from Imprumuta_tbl,Utilizator_tbl,Carte_tbl where Imprumuta_tbl.ID_Utilizator=Utilizator_tbl.ID_Utilizator and Imprumuta_tbl.ID_Carte=Carte_tbl.ID_Carte and Data_Returnare=" + "'" + data + "'";

try

{

conn.Open();

SqlCommand cmd = new SqlCommand(cmdString, conn);

SqlDataAdapter dap = new SqlDataAdapter(cmdString, conn);

DataTable dat = new DataTable();

dap.Fill(dat);

foreach (DataRow row in dat.Rows)

{

rezultat += row["Titlu_Carte"].ToString();

rezultat += ",";

rezultat += row["Nume_Utilizator"].ToString();

rezultat += ",";

rezultat += row["Data_Returnare"].ToString();

rezultat += ",";

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

rezultat = "Eroare la cautare!!!";

}

finally

{

conn.Close();

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return rezultat;

}

[WebMethod]

public string StergeCarte(string titlu, string id)

{

string result = "";

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "";

if (titlu != "" && id == "")

{

try

{

SqlCommand sqlCommand = new SqlCommand();

conn.Open();

sqlCommand.CommandText = "delete from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'";

sqlCommand.Connection = conn;

sqlCommand.ExecuteNonQuery();

conn.Close();

result = "Stergerea cartii a fost facuta cu succes!";

}

catch (Exception ex)

{

Debug.WriteLine(ex);

result = "Stergerea nu a fost facuta";

}

}

else if (titlu == "" && id != "")

{

try

{

int dd;

dd = Convert.ToInt16(id);

SqlCommand sqlCommand = new SqlCommand();

conn.Open();

sqlCommand.CommandText = "delete from Carte_tbl where ID_Carte =" + "'" + id + "'";

sqlCommand.Connection = conn;

sqlCommand.ExecuteNonQuery();

conn.Close();

result = "Stergerea cartii a fost facuta cu succes!";

}

catch (Exception ex)

{

Debug.WriteLine(ex);

result = "Stergerea nu a fost facuta";

}

}

else if (titlu != "" && id != "")

{

try

{

SqlCommand sqlCommand = new SqlCommand();

conn.Open();

sqlCommand.CommandText = "delete from Carte_tbl where Titlu_Carte =" + "'" + titlu + "'" + "and ID_Carte =" + "'" + id + "'";

sqlCommand.Connection = conn;

sqlCommand.ExecuteNonQuery();

conn.Close();

result = "Stergerea cartii a fost facuta cu succes!";

}

catch (Exception ex)

{

Debug.WriteLine(ex);

result = "Stergerea nu a fost facuta";

}

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return result;

}

[WebMethod]

public string ViewBooks(string isbn, string titlu, string volum,string an, string limba)

{

string rezultat = "";

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "select ISBN,Titlu_Carte,Volum_Carte,An_Aparitie_Carte,Limba_Carte from Carte_tbl";

try

{

conn.Open();

SqlCommand cmd = new SqlCommand(cmdString, conn);

SqlDataAdapter dap = new SqlDataAdapter(cmdString, conn);

DataTable dat = new DataTable();

dap.Fill(dat);

foreach (DataRow row in dat.Rows)

{

//rezultat += "First book:";

rezultat += row["ISBN"].ToString();

rezultat += ",";

rezultat += row["Titlu_Carte"].ToString();

rezultat += ",";

rezultat += row["Volum_Carte"].ToString();

rezultat += ",";

rezultat += row["An_Aparitie_Carte"].ToString();

rezultat += ",";

rezultat += row["Limba_Carte"].ToString();

rezultat += ",";

rezultat += "\n";

rezultat += "Next book:";

}

if (rezultat == "" || rezultat == null)

{

rezultat = "Nu exista date ";

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

rezultat = "Cartea nu a fost gasita!!!";

}

finally

{

conn.Close();

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return rezultat;

}

[WebMethod]

public string ViewUsers(string nume,string prenume,string email)

{

string rezultat = "";

try

{

string conStr = "server=localhost;database=biblioteca;Integrated Security = true;";

SqlConnection conn = new SqlConnection(conStr);

string cmdString = "select Nume_Utilizator,Prenume_Utilizator,Email_Utilizator from Utilizator_tbl";

try

{

conn.Open();

SqlCommand cmd = new SqlCommand(cmdString, conn);

SqlDataAdapter dap = new SqlDataAdapter(cmdString, conn);

DataTable dat = new DataTable();

dap.Fill(dat);

foreach (DataRow row in dat.Rows)

{

//rezultat += "First book:";

rezultat += row["Nume_Utilizator"].ToString();

rezultat += ",";

rezultat += row["Prenume_Utilizator"].ToString();

rezultat += ",";

rezultat += row["Email_Utilizator"].ToString();

rezultat += ",";

rezultat += "\n";

rezultat += "Next user:";

}

if (rezultat == "" || rezultat == null)

{

rezultat = "Nu exista date ";

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

rezultat = "Utilizatorul nu a fost gasit!!!";

}

finally

{

conn.Close();

}

}

catch (Exception ex)

{

Debug.WriteLine(ex);

}

return rezultat;

}

}

}

Aplicatia Android:

1.Layout:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<Button

android:id="@+id/Insertbtn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert" />

<Button

android:id="@+id/Deletebtn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Delete" />

<Button

android:id="@+id/Viewbtn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="View" />

<Button

android:id="@+id/Searchbtn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Search" />

<Button

android:id="@+id/Exitbtn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Exit" />

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent">

<Button

android:id="@+id/Adresabtn_ins"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Address" />

<Button

android:id="@+id/Articolbtn_ins"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Articol" >

</Button>

<Button

android:id="@+id/Autorbtn_ins"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Autor" >

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Carte"

android:id="@+id/Cartebtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Contact"

android:id="@+id/Contactbtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Continut"

android:id="@+id/Continutbtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Editie"

android:id="@+id/Editiebtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Editura"

android:id="@+id/Editurabtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Imprumut"

android:id="@+id/Imprumutabtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Locatie"

android:id="@+id/Locatiebtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Revista"

android:id="@+id/Revistabtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Scriitor"

android:id="@+id/Scriitorbtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert Telefon"

android:id="@+id/Telefonbtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Insert User"

android:id="@+id/Userbtn_ins">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Back"

android:id="@+id/Backbtn_ins">

</Button>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Delete Book"

android:id="@+id/Deletebtn_del">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Back"

android:id="@+id/Backbtn_del">

</Button>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Search Book:"

android:id="@+id/Searchbtn_search">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Back"

android:id="@+id/Backbtn_search">

</Button>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="View Imprumut"

android:id="@+id/Imprumutbtn_view">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="View Books"

android:id="@+id/Bookbtn_view">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="View User"

android:id="@+id/Usersbtn_view">

</Button>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Back"

android:id="@+id/Backbtn_view">

</Button>

</LinearLayout>

Android Manifest:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.biblioteca"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="21" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.INTERNET"/>

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name=".MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".ActivityTwo" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".ActivityThree" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity4" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity5" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity6" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity7" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity8" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity9" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity10" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity11" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity12" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity13" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity14" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity15" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity16" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity17" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity18" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity19" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:label="@string/app_name"

android:name=".Activity20" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity android:name=".InsActivity"></activity>

<activity android:name=".DelActivity"></activity>

<activity android:name=".ViewActivity"></activity>

<activity android:name=".SearchActivity"></activity>

</application>

</manifest>

Clase Java:

package com.example.biblioteca;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity{

Button btnInsert;

Button btnDelete;

Button btnView;

Button btnSearch;

Button btnExit;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btnInsert = (Button) findViewById(R.id.Insertbtn);

Button btnDelete = (Button) findViewById(R.id.Deletebtn);

Button btnView = (Button) findViewById(R.id.Viewbtn);

Button btnSearch = (Button) findViewById(R.id.Searchbtn);

Button btnExit = (Button) findViewById(R.id.Exitbtn);

btnInsert.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(MainActivity.this, InsActivity.class);

startActivity(intent);

}

});

btnDelete.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(MainActivity.this, DelActivity.class);

startActivity(intent);

}

});

btnView.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(MainActivity.this, ViewActivity.class);

startActivity(intent);

}

});

btnSearch.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(MainActivity.this, SearchActivity.class);

startActivity(intent);

}

});

btnExit.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

System.exit(0);

}

});

}

}

package com.example.biblioteca;

import android.content.Intent;

import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class InsActivity extends Activity {

/** Called when the activity is first created. */

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.ins);

Button btnAdresa = (Button) findViewById(R.id.Adresabtn_ins);

Button btnArticol = (Button) findViewById(R.id.Articolbtn_ins);

Button btnAutor = (Button) findViewById(R.id.Autorbtn_ins);

Button btnCarte = (Button) findViewById(R.id.Cartebtn_ins);

Button btnContact = (Button) findViewById(R.id.Contactbtn_ins);

Button btnContinut = (Button) findViewById(R.id.Continutbtn_ins);

Button btnEditie = (Button) findViewById(R.id.Editiebtn_ins);

Button btnEditura = (Button) findViewById(R.id.Editurabtn_ins);

Button btnImprumuta = (Button) findViewById(R.id.Imprumutabtn_ins);

Button btnBack = (Button) findViewById(R.id.Backbtn_ins);

Button btnLocatie = (Button) findViewById(R.id.Locatiebtn_ins);

Button btnRevista = (Button) findViewById(R.id.Revistabtn_ins);

Button btnScriitor = (Button) findViewById(R.id.Scriitorbtn_ins);

Button btnTelefon = (Button) findViewById(R.id.Telefonbtn_ins);

Button btnUser = (Button) findViewById(R.id.Userbtn_ins);

btnAdresa.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, ActivityTwo.class);

startActivity(intent);

}

});

btnArticol.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, ActivityThree.class);

startActivity(intent);

}

});

btnAutor.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity4.class);

startActivity(intent);

}

});

btnCarte.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity5.class);

startActivity(intent);

}

});

btnContact.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity6.class);

startActivity(intent);

}

});

btnContinut.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity7.class);

startActivity(intent);

}

});

btnEditie.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity8.class);

startActivity(intent);

}

});

btnEditura.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity9.class);

startActivity(intent);

}

});

btnImprumuta.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity10.class);

startActivity(intent);

}

});

btnLocatie.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity11.class);

startActivity(intent);

}

});

btnRevista.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity12.class);

startActivity(intent);

}

});

btnScriitor.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity13.class);

startActivity(intent);

}

});

btnTelefon.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity14.class);

startActivity(intent);

}

});

btnUser.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(InsActivity.this, Activity15.class);

startActivity(intent);

}

});

btnBack.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

System.exit(0);

}

});

}

}

package com.example.biblioteca;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class DelActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.del);

Button btnDelete = (Button) findViewById(R.id.Deletebtn_del);

Button btnBack = (Button) findViewById(R.id.Backbtn_del);

btnDelete.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(DelActivity.this, Activity16.class);

startActivity(intent);

}

});

btnBack.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

System.exit(0);

}

});

}

}

package com.example.biblioteca;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class SearchActivity extends Activity{

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.search);

Button btnSearch = (Button) findViewById(R.id.Searchbtn_search);

Button btnBack = (Button) findViewById(R.id.Backbtn_search);

btnSearch.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(SearchActivity.this, Activity20.class);

startActivity(intent);

}

});

btnBack.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

System.exit(0);

}

});

}

}

package com.example.biblioteca;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class ViewActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.view);

Button btnImprumut = (Button) findViewById(R.id.Imprumutbtn_view);

Button btnBook = (Button) findViewById(R.id.Bookbtn_view);

Button btnUsers = (Button) findViewById(R.id.Usersbtn_view);

Button btnBack = (Button) findViewById(R.id.Backbtn_view);

btnImprumut.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(ViewActivity.this, Activity17.class);

startActivity(intent);

}

});

btnBook.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(ViewActivity.this, Activity18.class);

startActivity(intent);

}

});

btnUsers.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(ViewActivity.this, Activity19.class);

startActivity(intent);

}

});

btnBack.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

System.exit(0);

}

});

}

}

Similar Posts