Cuprins
- 1. Introducere
- a. Definirea problemei
- b. Obiectivul problemei
- c. Necesitate
- d. Utilitate Economica
- 2. Structura programului
- 3. Structurile de date utilizate
- a. Definiţii si descriere
- b. Implementare
- c. Operaţiile elementare utilizate
- 4. Descrierea implementării operaţiilor de baza
- 5. Concluzii
- 6. Bibliografie
- 7. Anexa – codul sursă
Extras din proiect
1. Introducere
Proiectul constă în realizarea unui program care are ca scop gestiunea unui magazin de vinuri, în vederea regăsirii ,introcucerii,modificarii si stergerii vinurilor din magazin,prin diferite functii .
a. Definirea problemei
Se cere realizarea unui program care oferă utilizatorului posibilitatea de a gestiona un magazin de vinuri,in functie de necesitatea acestuia(adaugare,stergere,modificare,cautare,listare).
b. Obiectivul problemei
Obiectivul acestui program urmareste rularea unor comenzi care vor efectua prelucrari asupra bazei de date a magazinului.
c. Necesitatea
Avand in vedere ca am cunostinte care au diferite tipuri de magazine, am observat ca au greutai in a mentine gestiunea acestora. Astfel consider util un astfel de program in gestiunea diferitelor magazine,nu foarte dezvoltate,implicit unul de vinuri
d. Utilitatea economica este aceea de a permite gestionarea de vinuri în cadrul unui magazin de profil.
2. Structura programului
Programul realizează citirea de la tastatura a datelor studenţilor, introducerea lor într-o structură dinamică de date, de tip lista dublu înlănţuită sau intr-un arbore binar de cautare. După citirea datelor, de la tastatura sau din fisier, utilizatorul poate alege între afişarea vinurilor introduse,pe ecran sau in fisier txt, căutarea de informaţii despre vinuri în baza de date, modificare a informatiilor vinurilor, ştergerea vinurilor din baza de date,folosind liste duble sau arbori binari de cautare.
3. Structurile de date utilizate
a. Definiţii şi descriere
Pentru simularea structurii bazei de date am folosit doua structuri de date de tip articol ce conţin:
structura DATA:zi, luna, an; structura VIN:cod, nume, categorie, vechime, culoare, pret, data_intarare(de tip DATA), cantitate; o structură de tip listă dublu înlănţuită, ce conţine în nodurile sale informaţia din fiecare articol de tip VIN introdus;o structura de tip arbore binar de cautare ce contine in nodurile sale informatia din fiecare articol de tip VIN introdus.
Articolul este o structură de date eterogenă, cu acces direct la elementele sale, între care există o relaţie de ordine ierarhică.
Lista dublu înlănţuită este o structură secvenţială de date, fiecare element conţinând informaţia propriu-zisă şi doi pointeri: unul către elementul următor şi altul către elementul precedent.
Un arbore binar este o mulţime de noduri în care fiecare nod are 0,1 sau 2 succesori, fiecare nod are un singur predecesor, cu excepţia rădăcinii care nu are niciunul, succesorii fiecărui nod sunt ordonaţi (fiul stâng, fiul drept; dacă este unul singur trebuie menţionat care).
b. Implementare
Pentru a implementa ideea proiectului, a fost folosită o structură de tip listă dublu înlănţuită si una de tip arbore binar de cautare, ambele cu informaţie de tip articol, citita de la tastatura sau din fisier txt.
Articolul utilizat pentru a memora datele fiecărui student, are următoarea structură:
struct DATA
{
int zi,luna,an;
};
struct VIN
{
int cod;
char nume[20];
char categorie[20];
int vechime;
char culoare[20];
int pret;
DATA data_intrare;
int cantitate;
};
Structura nodurilor din lista dublu înlănţuită este următoarea:
struct nod
{
VIN x;
nod *urm,*ant;
};
Structura nodurilor arborele binar este următoarea:
struct arbore
{
VIN x;
arbore *ls,*ld;
};
c. Operaţii elementare utilizate
Operaţiile elementare utilizate în lucrul cu structurile de date de mai sus sunt:
Pentru listă dublu înlănţuită:
- inserarea la sfârşit de informatie(citita de la tastatura sau din fiser txt)
- inserare la inceput
- căutarea unui nod dupa o informaţie dată
- modificarea unui nod dupa o informaţie dată
- ştergerea unui nod dupa o informaţie dată
- afişarea
- afişarea într-un fişier text
Pentru arbore:
- inserarea de informatie(citita de la tastatura sau din fiser txt)
- căutarea unui nod dupa o informaţie dată
- modificarea unui nod dupa o informaţie dată
- ştergerea unui nod dupa o informaţie dată
- afişarea
Pentru articolul de tip student
- citirea de la tastatură
- citirea din fişier
4. Descrierea implementării operaţiilor de bază
Programul utilizează următoarele proceduri:
Functia de creare a unui articol de tip VIN
VIN creare_vin()
{
cout<<"nn-----------Creare element de tip VIN--------------";
char nume[20],categorie[20],culoare[20];
int v ,p,z,l,a,c,n; VIN y;
fflush(stdin);
cout<<"nDati numele vinului: ";gets(nume);
fflush(stdin);
cout<<"nDati categoria: ";gets(categorie);
fflush(stdin);
cout<<"nDati vechimea: ";cin>>v;
if(!cin){ cerr<<" Eroare de citire a variabilei vechime!"; cin.clear(); fflush(stdin); cout<<"nDati din nou vechimea(intreg): ";cin>>v; fflush(stdin);}
fflush(stdin);
cout<<"nDati culoarea: ";gets(culoare);
fflush(stdin);
cout<<"nDati pretul: "; cin>>p;
if(!cin){ cerr<<" Eroare de citire a variabilei pret!"; cin.clear(); fflush(stdin); cout<<"nDati din nou pretul(intreg): "; cin>>p; fflush(stdin);}
printf("nData intrarii (zz/ll/aaaa): "); scanf("%d/%d/%d",&z,&l,&a);
cout<<"nDati cantitatea: "; cin>>c;
if(!cin){ cerr<<" Eroare de citire a variabilei cantitate!"; cin.clear();fflush(stdin); cout<<"nDati cantitatea(intreg): "; cin>>c; fflush(stdin); }
fflush(stdin);
cout<<"nDati Codul: "; cin>>n;
if(!cin){ cerr<<" Eroare de citire a variabilei cod!"; cin.clear();fflush(stdin); cout<<"nDati codul(intreg): "; cin>>n; fflush(stdin); }
y.cantitate=c;
strcpy(y.categorie,categorie);strcpy(y.culoare,culoare);y.data_intrare.zi=z;
y.data_intrare.luna=l; y.data_intrare.an=a; strcpy(y.nume,nume); y.pret=p;
y.vechime=v; y.cod=n;
return y;
}
Funcţia de citire a unui vector de vinuri alocat dinamic, din fisier txt
void citire_fisier(VIN *vin)
{
cout<<"nn------------Citire de elemente de tip VIN din fisier----------";
fstream f("vin1.txt");
if(f)
{
int n;
f>>n; f.get();
for(int i=0;i<n;i++)
{
fflush(stdin);
char *buf=new char[20];
f.getline(buf,20);
strcpy(vin[i].nume,buf);
fflush(stdin);
int cod;
f>>cod; f.get();
vin[i].cod=cod;
fflush(stdin);
char *buf2=new char[20];
f.getline(buf2,20);
strcpy(vin[i].categorie,buf2);
fflush(stdin);
int varsta;
f>>varsta; f.get();
vin[i].vechime=varsta;
fflush(stdin);
char *buf3=new char[20];
f.getline(buf3,20);
strcpy(vin[i].culoare,buf3);
fflush(stdin);
int pret;
f>>pret; f.get();
vin[i].pret=pret;
fflush(stdin);
int z,l,a;
f>>z>>l>>a; f.get();
vin[i].data_intrare.zi=z;
vin[i].data_intrare.luna=l;
vin[i].data_intrare.an=a;
fflush(stdin);
int c;
f>>c; vin[i].cantitate=c;
f.get();
}
}
else cout<<"n Nu exista fisierul vin1.txt";
}
Funcţia de inserare la sfârşit a unui articol de tip VIN într-o lista dublu înlănţuită:
Funcţia realizează inserarea unei informaţii de tip VIN la sfârşitul listei sau crearea listei, în cazul în care vârful acesteia este vid.
nod * inserare_sfarsit_lista(nod *cap,VIN y)
{
nod *nou=(nod *)malloc(sizeof(nod));
strcpy(nou->x.nume,y.nume);
strcpy(nou->x.categorie,y.categorie);
nou->x.vechime=y.vechime;
strcpy(nou->x.culoare,y.culoare);
nou->x.pret=y.pret;
nou->x.data_intrare.zi=y.data_intrare.zi;
nou->x.data_intrare.luna=y.data_intrare.luna;
nou->x.data_intrare.an=y.data_intrare.an;
nou->x.cantitate=y.cantitate;
nou->x.cod=y.cod;
nou->ant=NULL; nou->urm=NULL
Preview document
Conținut arhivă zip
- Structuri de Date - Gestiunea Activitatii unei Asociatii Studetesti.doc