Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » scoala » informatica
- AGENITA DE VOIAJ

- AGENITA DE VOIAJ


GRUP SCOLAR STEFANESTI

 



AGENITA DE VOIAJ

Sisteme de gestiune a bazelor de date

Sistemul de gestiune a bazelor de date (SGBD) este un ansamblu de programe (produs software) , carea realizeaza interfata dintre o baza de date si utilizatorii acesteia . SGBD asigura urmatoarele obiective : independenta datelor fata de programe , facilitati de descriere si utilizare a datelor , securitatea datelor , partajabilitatea datelor intre utilizatori.

Pentru ca un sistem software sa fie SGBD , el trebui sa aisgure obiecitvele de mai sus prin patru functii proprii : definirea datelor , manipularea datelor , utilizarea datelor , administrarea datelor .

  1. Functia de definire a datelor permite descrierea structurii bazei de date cu ajutorul limbajului de definire a datelor (LDD). Se descriu entitatile (colectiile de date) , caracteristicile (campurile) acestora , precum si legaturile dintre entitati.
  2. Functia de manipulare a datelor permite incarcarea / validarea datelor , actualizarea datelor si interogarea (regasirea datelor) . Toate aceste operatii se realizeaza cu ajutorul limbajului de manipulare a datelor (LMD).
  3. Functia de utilizare a datelor asigura interfetele necesare comunicarii utilizatorilor cu baza de date. Categoriile de utilizatori sunt : programatori de aplicatie (SGBD le ofera limbaje si interfete) , administratorul bazei de date (SGBD ii ofera instrumente specializate) , alte categorii de utilizatori (SGBD le ofera instrumente si interfete specifice).
  4. Functia de administrare a bazei de date permite gestionarea corecta a bazei de date , atat in procesul de realizare a bazei , cat si apoi in procesul de exploatare a bazei . SGBD ofera pentru utilizatorul special , care este administratorul bazei de date , instrumente pentru proiectarea si intretinerea bazei de date . Aceste instrumente sunt utile pentru : inscarcarea structurii bazei de date , reorganizarea bazei de date , jurnalizarea si refacerea bazei de date in caz de incidente , analiza statistica asupra bazei de date.

Pe langa instrumentele specifice puse la dispozitie de SGBD pentru administratorul bazei de date , acesta isi poate crea , in colaborare cu programatorii de aplicatie , o serie de alte interfete , necesare gestionarii optime a bazei de date.

Arhitectura unui SGBD evidentiaza componentele acestuia si legaturile dintre ele . Pe parcursul evolutiei SGBD - urilor au fost elaborate standarde de arhitecturi , precum si numeroase late propuneri . Tendinta actuala este de a structura componentele unui SGBD intr-o arhitectura pe trei niveluri : nucleul , interfetele , instrumentele .

Nucleul SGBD contine principalele mecanisme care asigura functiile sistemului . Acest lucru este asigurat in mare parte de limbajele sistemului (LDD , LMD).

Interfetele sunt componente destinate , in special , dezvoltarilor aplicatiilor cu baze de date . Aici sunt incluse generatoarele , interfetele cu alte limbaje de programare , elementele de proiectare asistata CASE (Computer Aided Software Engeneering).

Instrumentele sunt componente destinate intretinerii si administrarii bazei de date. Ele sunt destinate tuturor categoriilor de utilizatori ai bazei de date , dar in mod special administratorului . Aici sunt incluse depanatoare , editoare , browsere , produse de retea , utilitare de diferite tipuri.

Programele de aplicatie sunt scrise , in cea mai mare parte , in limbajele de programare oferite de SGBD - uri . Cele doua tipuri de limbaje , LDD si LMD , permit scrierea programelor pentru descrierea si manipularea datelor prin istructiuni (scrierea codului sursa) sa prin interfete (generarea codului sursa) .

Unele module de program pot fi realizate de programatorii de aplivatie in limbajele de programare universale pe care le accepta ( ca interfete de programare ) diferitele SGBD - uri. De exemplu FoxPRo adminte interfata cu cu limbajul C si cu limbajul de asamblare.

Programele de aplicatie sunt compuse atat din module procedurale ( pentru prelucrari , interfete om - masina ) , cat si module neprocedurale ( pentru accesul la baza de date ).

Modulele procedurale sunt scrise in limbaje imperative , care permit dezvoltarea celor trei structuri fundamentale din programarea structurala : secventiala , alternativa , repetitiva. Astfel de limbaje de programare sunt cele universale ( Basic , Pascal , C , etc. ) sau cele proprii unor SGBD - uri ( FoxPro , dBase , Progress ).

Modulele neprocedurale sunt scrise in limbaje descriptive care permit dezvoltarea doar a unor structuri secventiale de program. Astfel de limbaje de programare sunt cele relationale ( SQL , QBE ) sau cele orientate obiect ( Smalltalk ).

Exemple de tipuri de module de program de aplicatie : pentru incarcare / validare de date , pentru actualizare , pentru regasire , pentru construirea de meniuri .

Pentru dezvoltarea programelor de aplicatie , in vederea cresterii eficientei muncii de programare , se folosesc atat tehnicile de programare clasice ( structurala , modulara ) , cat si cele mai noi ( orientata obiect , vizuala ) . Tot pentru cresterea productivitatii programarii se pot genera module de program de aplicatie cu intrumentele oferite de SGBD - uri ( exemple : generatoare de meniuri , de videoformate , de rapoarte , de grafice , etc. ).

Avantajul generatoarelor este ca usureaza munca de programare s ca permit dezvoltarea rapida a aplicatiilor cu baze de date . Dezavantajul este ca rezulta o flexibilitate mai redusa a aplicatiilor.

Sisteme de gestiune a bazelor de date relationale

Sistemele relationale au ca orice SGBD caracteristicile comune prezentate anterior . Pe langa acestea , fiecare tip de SGBD , deci si cele relationale , au o serie de caracteristici specifice . Aceste elemente specifice pentru SGBD relationale (SGBDR) vor fi trecute in revista , pe scurt , in cele ce urmeaza

Conceptele din teoria relationala , prezentate anterior , sunt implementatea in VFP. O parte dintre ele au denumiri diferite , dar continutul este acelasi . De asemenea , stiind faptul ca organizarea datelor in baze de date din memoria externa a evoluat din organizarea in fisiere , exista analogii in ceea ce priveste notiunile utilizate.

Un SGBD este relational daca utilizeaza pentru organizarea datelor in memori externa modelul de date relational si limbajele relationale . Sistemele relationale fac parte din generatia a doua de SGBD - uri.

Evaluarea unui SGBDR se poate face riguros pe cele 13 reguli ale lui E.F. Codd. Deoarece acestea sunt foarte restrictive , in practica se foloseste un set de cerinte mnimale desprinse din regulile lui Codd:

a)      intreaga baza de date se reprezinta prin tabele (relatii );

b)     operatiile cu tabele nu fac apel la pointeri , fisiere inverse ;

c)      operatorii relationali de proiectie , selecti , jonctiune trebuie sa fie implementati fara limitari interne;

d)     toti operatorii de baza din algebra relationala trebuie sa fie implementati fara limitari interne;

e)      sunt suportate restrictiile de integritate referitoare la unicitatea cheii (UNIQUE) si cea referentiala (FOREIGN KEY) . In functie de modul cum sunt asigurate cerintele de mai sus , se poate face evaluarea unui SGBD astfel : comple relational(a,b,c,d) , minimal relational (a,b,c) , presudorelational (a,c) , cu interfata relationala ( a , c partial - doar pentru interogare).

Arhitectura unui SGBDR respecta structurarea pe trei niveluri , cu urmatoarele aspecte specifice :

nucleul contine un limbaj relational si un limbaj procedural ( propriu sau gazda ) ; cel mai utilizat limbaj relational , singurul standardizat international , este SQL ;

interfetele contin generatoare pentru dezvoltarea aplicatiilor ( videoformate , ecrane , rapoarte , grafice ) , elemente de CASE pentru proiectarea asistata a aplicatiilor , interfete cu alte sisteme de baza de date sau cu limbaje de programare universale ;

instrumentele contin utilitare pentru intretinerea bazei de date , puse la dispozitia administratorului bazei de date si a ạtor utilizatori.

Caracteristicile unui SGBDR pot fi identificate la nivel global si particular.

Caracteristicile globale rezulta din faptul ca sistemel relationale sunt o categorie distincta de SGBD - uri :

limbajele relationale permit definirea datelor - LDD si manipularea datelor LMD. Exemple de limbaje relationale : SQL , QUEL , QBE, ISBL;

controlul integritatii semantice se face in conformitate cu restrictiile de integritate impuse la descrierea datelor prin mecanisme specifice de control;

asigurarea coerentei datelor prin tratarea unitatii de lucru , care este tranzactia , cu mecanisme specifice ;

optimizarea cererilor de regasire pentru cresterea performantelor prin implementarea unor interfete automate ;

utilitare specializate pentru diferitele categorii de utilizatori.

Caracteristicile particulare rezulta din faptul ca fiecare SGBDR are caracteristici individuale comparativ cu alte SGBDR - uri similare . Aceste caracteristici sunt de fapt criterii de comparatie intre diferite SGBDR .Prezentam aceste caracteristici particulare grupate astfel :

caracteristici functie de facilitatile de descriere a datelor ( modul de implementare a modelului relational , utilizarea comceptului de baza de date , definirea metodelor , actualizarea schemei relatiei , restrictiile de integritate ce pot fi dclarate ;

caracteristici functie de facilitatile de manipulare a datelor ( limbajul relational implementat pentru manipularea datelor , modurile de acces la date , calculul aritmetic , tratarea valorii NULL , optimizarea cererilor de regasire , actualizarea realtiilor de baza si virtuale , programarea orientata obiect ;

caracteristici functie de utilizare si administrare ( generatoare de diferite tipuri : videoformate , meniuri , rapoarte , grafice , aplicatii ; elemente de CASE , analize statistice , acces la distanta , autorizarea accesului , utilitate de intretinere).

Exemple de SGBDR : Oracle , DB2 , Informix , Ingres , SQL Server , Visual FoxPro , Acces , Progress , Paradox , dBase.

DESCRIEREA APLICATIEI

Agentia de voiaj este o aplicatie realizata in Microsoft Visual FoxPro 6.0 si are ca scop simularea unei baze de date specifice unei agentii de voiaj. Contine patru sectiuni principale : angajati , trasee , finante si rezervari , cu urmatoarele functii : adaugare , modificare , stergere , vizualizare. Lansarea in executie a aplicatiei se face cu Agentia de voiaj.app iar modificarea acesteia cu Agentia de voiaj.pjx.

STRUCTURA BAZEI DE DATE

Tabele:

ANGAJATI - stocheaza informatii despre angajati

NUME C 15 numele

DATA_N D 8 data nasterii

LOC C 20 locul nasterii

CNP C 13 cnp - ul

FUNCTIE C 20 functia

DATA_A D 8 data angajarii

SALARIU N 5 salariu

ADRESA C 4 adresa

NR C 10 numarul de telefon

TRASEE - stocheaza informatii despre trasee

RUTA C 30 plecarea si destinatia

OPRIRI M 4 opririle pe traseu

PLECARE C 5 ora de plecare

SOSIRE C 5 ora de sosire


SOFER C 20 soferul

LISTA C 50 camp folosit pentru lista de pe formular

REZERVARI - stocheaza informatii despre rezervari

NUME C 15 numele

CNP C 13 cnp - ul

RUTA C 50 ruta

LOC C 2 locul in autocar

DATA D 8 data rezervarii

FINANTE - stocheaza informatii despre finante

AN C 4 anul

LUNA C 15 luna

MOTORINA N 5 cheltuieli pe motorina

INTRETIN N 5 intretinere autovehicule

SALARII N 5 salarii

ALTELE N 5 alte cheltuieli

CHELTUIELI N 5 total cheltuieli

INCASARI N 5 total incasari

PROFIT N 5 profit

La rularea aplicatiei se lanseaza in executie formularul main care contine urmatorele butoane:

info - lanseaza in executie formularul info   care contine informatii despre aplicatie

angajati - lanseaza formularul angajati care permite adaugarea de noi angajati , si modificarea datelor celor existenti . Contine butoanele :

a.          adauga - adauga un angajat in baza de date:

if empty (thisform.text1.value)

messagebox('Introduceti numele !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text2.value)

messagebox('Introduceti data nasterii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text3.value)

messagebox('Introduceti locul nasterii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text4.value)

messagebox('Introduceti cnp - ul !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text5.value)

messagebox('Introduceti functia !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text6.value)

messagebox('Introduceti data angajarii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text7.value)

messagebox('Introduceti salariul !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text8.value)

messagebox('Introduceti adresa !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text9.value)

messagebox('Introduceti numarul de telefon !',16,'Agentie de voiaj')

return

endif

use angajati

set exact on

locate for thisform.text1.value = nume

if found()

messagebox('Numele figureaza deja in baza de date !',16,'Agentie de voiaj')

return

else

append blank

replace nume with thisform.text1.value

replace data_n with thisform.text2.value

replace loc with thisform.text3.value

replace cnp with thisform.text4.value

replace functie with thisform.text5.value

replace data_a with thisform.text6.value

replace salariu with thisform.text7.value

replace adresa with thisform.text8.value

replace nr with thisform.text9.value

messagebox('Inregistrarea a fost adaugata !',48,'Agentie de voiaj')

endif

use

thisform.init()

thisform.list1.click()

b.          reseteaza - reseteaza toate campurile:

thisform.text1.value = ''

thisform.text2.value =

thisform.text3.value = ''

thisform.text4.value = ''

thisform.text5.value = ''

thisform.text6.value =

thisform.text7.value = 0

thisform.text8.value = ''

thisform.text9.value = ''

c.           sterge - sterge angajatul selectat:

if empty(thisform.list1.value)

messagebox('Selectati un angajat !',16,'Agentie de voiaj')

return

endif

use angajati

set exact on

locate for thisform.list1.value = nume

delete

pack

messagebox('Inregistrarea a fost stearsa !',48,'Agentie de voiaj')

use

thisform.init()

thisform.list1.click()

d.          modifica - modifica datele angajatului selectat:

if empty (thisform.text1.value)

messagebox('Introduceti numele !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text2.value)

messagebox('Introduceti data nasterii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text3.value)

messagebox('Introduceti locul nasterii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text4.value)

messagebox('Introduceti cnp - ul !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text5.value)

messagebox('Introduceti functia !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text6.value)

messagebox('Introduceti data angajarii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text7.value)

messagebox('Introduceti salariul !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text8.value)

messagebox('Introduceti adresa !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text9.value)

messagebox('Introduceti numarul de telefon !',16,'Agentie de voiaj')

return

endif

use angajati

set exact on

locate for thisform.text1.value = nume

replace nume with thisform.text1.value

replace data_n with thisform.text2.value

replace loc with thisform.text3.value

replace cnp with thisform.text4.value

replace functie with thisform.text5.value

replace data_a with thisform.text6.value

replace salariu with thisform.text7.value

replace adresa with thisform.text8.value

replace nr with thisform.text9.value

messagebox('Inregistrarea a fost modificata !',48,'Agentie de voiaj')

use

thisform.list1.click()

e.           inapoi - inchide formular curent si lanseaza formularul main:

thisform.release

do form main

finante - ruleaza formularul finante care permite adaugarea de noi inregistrari sau vizualizarea celor existente . Contine butoanele :

a.          adauga - adauga noi inregistrari:

if empty(thisform.text1.value)

messagebox('Introduceti un an !',16,'Agentia de voiaj')

return

endif

if empty(thisform.combo1.value)

messagebox('Selecatati o luna !',16,'Agentia de voiaj')

return

endif

use finante

set exact on

locate for thisform.text1.value = an and thisform.combo1.value = luna

if found()

messagebox('Exista inregistrari pe luna selectata !',16,'Agentie de voiaj')

return

else

append blank

replace an with thisform.text1.value

replace luna with thisform.combo1.value

replace motorina with thisform.text2.value

replace intretin with thisform.text3.value

replace salarii with thisform.text4.value

replace altele with thisform.text5.value

replace cheltuieli with thisform.text6.value

replace incasari with thisform.text7.value

replace profit with thisform.text8.value

messagebox('Inregistrarea a fost salvata !',48,'Agentia de voiaj')

endif

use

b.          reseteaza - reseteaza campurile de pe formular:

thisform.text1.value = ''

thisform.combo1.value = ''

thisform.text8.value = 0

thisform.text2.value = 0

thisform.text3.value = 0

thisform.text4.value = 0

thisform.text5.value = 0

thisform.text6.value = 0

thisform.text7.value = 0

c.           vizualizeaza - afiseaza inregistrarile de pe luna selectata:

if empty(thisform.text9.value)

messagebox('Introduceti un an !',16,'Agentia de voiaj')

return

endif

if empty(thisform.combo2.value)

messagebox('Selecatati o luna !',16,'Agentia de voiaj')

return

endif

use finante

set exact on

locate for thisform.text9.value = an and thisform.combo2.value = luna

if found()

thisform.text10.value = motorina

thisform.text11.value = intretin

thisform.text12.value = salarii

thisform.text13.value = altele

thisform.text14.value = cheltuieli

thisform.text15.value = incasari

thisform.text16.value = profit

else

messagebox('Nu exista inregistrari pe luna selectata !',16,'Agentie de voiaj')

return

endif

use

d.          inapoi - inchide formularul curent si ruleaza formularul main :

thisform.release

do form main

trasee - ruleaza formularul trasee care permite adaugarea de noi trasee , stergerea sau modificarea celor existente. Contine butoanele :

a.          adauga - adauga un traseu nou :

if empty (thisform.text1.value)

messagebox('Introduceti ruta !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text2.value)

messagebox('Introduceti ora plecarii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text3.value)

messagebox('Introduceti introduceti ora sosirii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text4.value)

messagebox('Introduceti soferul cursei !',16,'Agentie de voiaj')

return

endif

if empty (thisform.edit1.value)

messagebox('Introduceti opririle din timpul cursei !',16,'Agentie de voiaj')

return

endif

use trasee

set exact on

locate for thisform.text1.value = ruta and thisform.text2.value = plecare

if found()

messagebox('Cursa figureaza deja in baza de date !',16,'Agentie de voiaj')

return

else

append blank

replace ruta with thisform.text1.value

replace plecare with thisform.text2.value

replace sosire with thisform.text3.value

replace sofer with thisform.text4.value

replace opriri with thisform.edit1.value

replace lista with thisform.text5.value

messagebox('Inregistrarea a fost adaugata !',48,'Agentie de voiaj')

endif

use

thisform.init()

thisform.list1.click()

b.          reseteaza - reseteaza toate campurile :

thisform.text1.value = ''

thisform.text2.value = ''

thisform.text3.value = ''

thisform.text4.value = ''

thisform.edit1.value = ''

c.           sterge - sterge traseul selectat:

if empty(thisform.list1.value)

messagebox('Selectati o cursa !',16,'Agentie de voiaj')

return

endif

use trasee

set exact on

locate for thisform.list1.value = lista

delete

pack

messagebox('Inregistrarea a fost stearsa !',48,'Agentie de voiaj')

use

thisform.init()

thisform.list1.click()

d.          modifica - modifica traseul selectat:

if empty (thisform.list1.value)

messagebox('Selectati o ruta !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text1.value)

messagebox('Introduceti ruta !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text2.value)

messagebox('Introduceti ora plecarii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text3.value)

messagebox('Introduceti introduceti ora sosirii !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text4.value)

messagebox('Introduceti soferul cursei !',16,'Agentie de voiaj')

return

endif

if empty (thisform.edit1.value)

messagebox('Introduceti opririle din timpul cursei !',16,'Agentie de voiaj')

return

endif

use trasee

set exact on

locate for thisform.list1.value = lista

replace ruta with thisform.text1.value

replace plecare with thisform.text2.value

replace sosire with thisform.text3.value

replace sofer with thisform.text4.value

replace opriri with thisform.edit1.value

replace lista with thisform.text5.value

messagebox('Inregistrarea a fost modificata !',48,'Agentie de voiaj')

use

thisform.init()

thisform.list1.click()

e.           inapoi - inchide formularul curent

rezervari - ruleaza formularul rezervari care permite efectuare de noi rezervari si modificarea celor existente. Contine butoanele :

a.       adauga - adauga o noua rezervare:

if empty (thisform.text1.value)

messagebox('Introduceti numele !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text2.value)

messagebox('Introduceti cnp - ul !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text3.value)

messagebox('Introduceti ruta rezervata !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text4.value)

messagebox('Introduceti locul !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text4.value)

messagebox('Introduceti data rezervarii !',16,'Agentie de voiaj')

return

endif

use rezervari

set exact on

locate for thisform.text1.value = nume and thisform.text3.value = ruta

if found()

messagebox('Rezervarea figureaza deja in baza de date !',16,'Agentie de voiaj')

return

else

append blank

replace nume with thisform.text1.value

replace cnp with thisform.text2.value

replace ruta with thisform.text3.value

replace loc with thisform.text4.value

replace data with thisform.text5.value

messagebox('Inregistrarea a fost adaugata !',48,'Agentie de voiaj')

endif

use

thisform.init()

thisform.list2.click()

b.       reseteaza - reseteaza toate campurile :

thisform.text1.value = ''

thisform.text2.value = ''

thisform.text3.value = ''

thisform.text4.value = ''

thisform.text5.value = ''

c.        sterge - sterge o rezervare:

if empty(thisform.list2.value)

messagebox('Selectati un nume !',16,'Agentie de voiaj')

return

endif

use rezervari

set exact on

locate for thisform.list2.value = nume

delete

pack

messagebox('Inregistrarea a fost stearsa !',48,'Agentie de voiaj')

use

thisform.init()

thisform.list2.click()

d.       modifica - modifica o rezervare

if empty(thisform.list1.value)

messagebox('Selectati un nume !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text1.value)

messagebox('Introduceti numele !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text2.value)

messagebox('Introduceti cnp - ul !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text3.value)

messagebox('Introduceti ruta rezervata !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text4.value)

messagebox('Introduceti locul !',16,'Agentie de voiaj')

return

endif

if empty (thisform.text4.value)

messagebox('Introduceti data rezervarii !',16,'Agentie de voiaj')

return

endif

use rezervari

set exact on

locate for thisform.text1.value = nume and thisform.text3.value = ruta

replace nume with thisform.text1.value

replace cnp with thisform.text2.value

replace ruta with thisform.text3.value

replace loc with thisform.text4.value

replace data with thisform.text5.value

messagebox('Inregistrarea a fost adaugata !',48,'Agentie de voiaj')

use

thisform.init()

thisform.list2.click()

e.        inapoi - inchide formularul

iesire - asigura iesirea din aplicatie si din mediul FoxPro:

quit.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.