0% found this document useful (0 votes)
59 views14 pages

Lab 3 Structuri

The document describes a C++ program that manages data about artists. It includes header files and source code files that define a struct with fields for an artist's details and implement functions for menu navigation, data input, output, sorting, deletion and addition. The program stores artist information in an array, allows the user to view, modify and search the structured data, and sorts the array by name, prename, year of birth or style.

Uploaded by

Pelin Arditi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
59 views14 pages

Lab 3 Structuri

The document describes a C++ program that manages data about artists. It includes header files and source code files that define a struct with fields for an artist's details and implement functions for menu navigation, data input, output, sorting, deletion and addition. The program stores artist information in an array, allows the user to view, modify and search the structured data, and sorts the array by name, prename, year of birth or style.

Uploaded by

Pelin Arditi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 14

1.

Sarcină:
Crearea şi prelucrarea unei structuri cu minimum şapte cîmpuri.

2. Program:
// FISIER str3.cpp

# include<stdio.h>
# include<conio.h>
# include<stdlib.h>
# include<string.h>
# include "lab3_a.h"

void main()
{ clrscr();
int a,n;
printf("\n\t\t\t\b\b\b\b\bGestionarea datelor despre artisti");
printf("\n\t\t\b\bExecutor Negara Dan grupa IAE - 081,FCIM,UTM\n");
while(1)
{
printf("\n MENIU\n\r");
printf("\t\t\t\b\b|-----------------------------|\n");
printf("\t\t\t\b\b| Alege o optiune: |\n");
printf("\t\t\t\b\b| |\n");
printf("\t\t\t\b\b| 1 - Introducerea datelor |\n");
printf("\t\t\t\b\b| 2 - Afisarea structurii |\n");
printf("\t\t\t\b\b| 3 - Sortare |\n");
printf("\t\t\t\b\b| 4 - Stergerea nume |\n");
printf("\t\t\t\b\b| 5 - Adaugare |\n");
printf("\t\t\t\b\b| 6 - Cautare |\n");
printf("\t\t\t\b\b| 0 - Iesirea din program |\n");
printf("\t\t\t\b\b|-----------------------------|\n");
scanf("%d",&a);
switch(a)
{ case 1:n=introducere();break;
case 2:afisare(n);break;
case 3:sortare(n);break;
case 4:n=stergere(n);break;
case 5:n=adaugare(n);break;
case 6:cautare(n); break;
case 0:exit(1);
default:printf("Introdu optie de la 0 la 5\n");break;

}printf("\n Spre MENIU - tasteaza orice tasta\n"); getch();


}}
//FISIER lab3_a.h

struct music
{ char nume[10];
char prenume[10];
char sex[2];
int an_n;
int an_m;
char stil[11];
char tara[10];
int nr_alb;
} a, aa[50], artist[80];

#include "d:/borlandc/bin/introd_a.cpp"
#include "d:/borlandc/bin/afis_a.cpp"
#include "d:/borlandc/bin/delete_a.cpp"
#include "d:/borlandc/bin/sort_a.cpp"
#include "d:/borlandc/bin/add_a.cpp"
#include "d:/borlandc/bin/caut_a.cpp"
// FISIER introd_a.cpp

//introducere

int introducere()
{
int i,n;
printf("\nDati nr de inregistrari:\t"); scanf("%d",&n);
for(i=0;i<n;i++){
gets(artist[i].nume);
printf("\nNumele: "); gets(artist[i].nume);
printf("Prenumele: "); gets(artist[i].prenume);
printf("Sexul: "); gets(artist[i].sex);
printf("Anii de viata:\n anul nasterii: "); scanf("%d", &artist[i].an_n);
printf(" anul mortii: "); scanf("%d", &artist[i].an_m);
gets(artist[i].stil);
printf("Stilul: "); gets(artist[i].stil);
printf("Tara resedinta: "); gets(artist[i].tara);
printf("Nr de albumuri: "); scanf("%d", &artist[i].nr_alb);
}
return n;
}

// FISIER afis_a.cpp

//afisare

void afisare(int n)
{ int i;
printf("\n\nTabela de artisti \n\n");

printf("============================================================\n");
printf("|Nr| Nume | Prenume |Sex| Ani viata | Stil | Locatia | CD |\n");

printf("============================================================\n");
for(i=0;i<n;i++){
printf("|%-2d| %-9s | %-10s | %-2s| %4d - %4d | %-11s | %-9s | %-2d |\n", i,
artist[i].nume, artist[i].prenume,
artist[i].sex, artist[i].an_n, artist[i].an_m,
artist[i].stil, artist[i].tara,
artist[i].nr_alb);
printf("------------------------------------------------------------------------------\n"); }

}
// FISIER delete_a.cpp

//stergere

//stergerea unui singur el


int stergere_m(int n)
{ int i,j; char b[15]; gets(b);
printf("Ce nume doriti sa strergeti?\n"); gets(b);
for(i=0;i<n;i++)
{ if(strcmpi(artist[i].nume,b)==0)
{for(j=i;j<n-1;j++) artist[j]=artist[j+1]; n--;} } return n; }

//stergerea a mai multe el


int stergere_p(int n)
{ int i,j, nr; char b[15], p;
printf("Cite nume doriti sa stergeti?\n"); scanf("%d", &nr);
gets(b);
printf("Incepind cu care nume doriti sa stergeti?\n"); gets(b);
printf("spre dreapta(d) sau spre stinga(s)?\n"); p=getche();
if(p=='d')
{ for(i=0;i<n;i++)
{ if(strcmpi(artist[i].nume,b)==0)
{ for(j=i;j<n-nr;j++) artist[j]=artist[j+nr]; n-=nr;}} }
if(p=='s')
{ for(i=0;i<n;i++)
{ if(strcmpi(artist[i].nume,b)==0)
{ for(j=i+1;j<n;j++) artist[j-nr]=artist[j]; n-=nr;}} }
return n; }

int stergere(int n)
{ int x; char g;
while(1){
printf("\n Sterge:\n");
printf(" |-----------------------------|\n");
printf(" | 1 - un nume |\n");
printf(" | 2 - mai multe nume |\n");
printf(" | 0 - REVENIRE IN MENIU |\n");
printf(" |-----------------------------|\n");
scanf("%d",&x);
switch(x)
{ case 1:n=stergere_m(n); break;
case 2:n=stergere_p(n);break;
case 0:break;
default:printf("Introdu optie de la 0 la 4\n");break;}
if(x==0 || x==1 || x==2) break;}
if(x!=0){
while(1){
printf("\nDoriti afisarea structurii?(y/n)\n");
g=getche();
if(g=='y') {afisare(n);break;}
if(g=='n') break; }}
return n;}
// FISIER sort_a.cpp

//sortare
void sortnum (int n)
{ int i,j;
for(i=1;i<n;i++)
for(j=i;j>0;j--) if(strcmpi(artist[j-1].nume,artist[j].nume)>0)
{ a=artist[j-1]; artist[j-1]=artist[j]; artist[j]=a;}
afisare(n); }

void sortpre (int n)


{ int i,j;
for(i=1;i<n;i++)
for(j=i;j>0;j--) if(strcmpi(artist[j-1].prenume,artist[j].prenume)>0)
{ a=artist[j-1]; artist[j-1]=artist[j]; artist[j]=a;}
afisare(n);}

void sortstil (int n)


{ int i,j;
for(i=1;i<n;i++)
for(j=i;j>0;j--) if(strcmpi(artist[j-1].stil,artist[j].stil)>0)
{ a=artist[j-1]; artist[j-1]=artist[j]; artist[j]=a;}
afisare(n); }

void sortan (int n)


{ int i,j;
for(i=1;i<n;i++)
for(j=i;j>0;j--) if(artist[j-1].an_n>artist[j].an_n)
{ a=artist[j-1]; artist[j-1]=artist[j]; artist[j]=a;}
afisare(n); }

void sortare (int n)


{
int x;
while(1){
printf("\n Sortare dupa:\n");
printf(" |-----------------------------|\n");
printf(" | 1 - Nume |\n");
printf(" | 2 - Prenume |\n");
printf(" | 3 - Anul nasterii |\n");
printf(" | 4 - Stil |\n");
printf(" | 0 - REVENIRE IN MENIU |\n");
printf(" |-----------------------------|\n");
scanf("%d",&x);
switch(x)
{ case 1:sortnum(n); break;
case 2:sortpre(n);break;
case 3:sortan(n);break;
case 4:sortstil(n);break;
case 0:break;
default:printf("Introdu optie de la 0 la 4\n");break;}
if(x==0 || x==1 || x==2 || x==3 || x==4) break;}}
// FISIER add_a.cpp
//adaugare

int add_end(int n)
{ int i,j, nr;
printf("Cite inregistrari doriti sa adaugati?\n"); scanf("%d", &nr);
for(i=n;i<n+nr;i++)
{ gets(artist[i].nume);
printf("\nNumele: "); gets(artist[i].nume);
printf("Prenumele: "); gets(artist[i].prenume);
printf("Sexul: "); gets(artist[i].sex);
printf("Anii de viata:\n anul nasterii: "); scanf("%d", &artist[i].an_n);
printf(" anul mortii: "); scanf("%d", &artist[i].an_m); gets(artist[i].stil);
printf("Stilul: "); gets(artist[i].stil);
printf("Tara resedinta: "); gets(artist[i].tara);
printf("Nr de albumuri: "); scanf("%d", &artist[i].nr_alb);
} return n+nr;}

int add_m (int n)


{ int i,j; char b[15]; gets(b);
printf("Dupa care nume doriti sa adaugati?\n"); gets(b);
for(i=0;i<=n;i++)
if(strcmpi(artist[i].nume,b)==0)
{for(j=n;j>i;j--) artist[j+1]=artist[j]; n++; break;} i++;
printf("\nNumele: "); gets(artist[i].nume);
printf("Prenumele: "); gets(artist[i].prenume);
printf("Sexul: "); gets(artist[i].sex);
printf("Anii de viata:\n anul nasterii: "); scanf("%d", &artist[i].an_n);
printf(" anul mortii: "); scanf("%d", &artist[i].an_m);
gets(artist[i].stil);
printf("Stilul: "); gets(artist[i].stil);
printf("Tara resedinta: "); gets(artist[i].tara);
printf("Nr de albumuri: "); scanf("%d", &artist[i].nr_alb);
return n;}

int add_p (int n)


{ int i,j, nr; char b[15]; gets(b);
printf("Dupa care nume doriti sa adaugati?\n"); gets(b);
printf("Cite inregistrari doriti sa adaugati?\n"); scanf("%d", &nr);
for(i=0;i<=n;i++)
if(strcmpi(artist[i].nume,b)==0)
{for(j=n;j>i;j--) artist[j+nr]=artist[j]; n+=nr; break;}
for(j=i+1;j<=i+nr;j++)
{ gets(artist[j].nume);
printf("\nNumele: "); gets(artist[j].nume);
printf("Prenumele: "); gets(artist[j].prenume);
printf("Sexul: "); gets(artist[j].sex);
printf("Anii de viata:\n anul nasterii: "); scanf("%d", &artist[j].an_n);
printf(" anul mortii: "); scanf("%d", &artist[j].an_m); gets(artist[j].stil);
printf("Stilul: "); gets(artist[j].stil);
printf("Tara resedinta: "); gets(artist[j].tara);
printf("Nr de albumuri: "); scanf("%d", &artist[j].nr_alb); }
return n;}

int adaugare(int n)
{
int x; char g;
while(1){
printf("\n Adauga:\n");
printf(" |-----------------------------|\n");
printf(" | 1 - la sfirsit |\n");
printf(" | in pozitie concreta: |\n");
printf(" | 2 - un singur nume |\n");
printf(" | 3 - mai multe nume |\n");
printf(" | 0 - REVENIRE IN MENIU |\n");
printf(" |-----------------------------|\n");
scanf("%d",&x);
switch(x)
{ case 1:n=add_end(n); break;
case 2:n=add_m(n);break;
case 3:n=add_p(n);break;
case 0:break;
default:printf("Introdu optie de la 0 la 3\n");break;}
if(x==0 || x==1 || x==2 || x==3) break;}

if(x!=0){
while(1){
printf("\nDoriti afisarea structurii?(y/n)\n");
g=getche();
if(g=='y') {afisare(n);break;}
if(g=='n') break; } }
return n;
}
// FISIER caut_a.cpp

//cautare

void cautnume(int n)
{ char *nm; int i; gets(nm);
printf("Dati nume de cautare:\t"); gets(nm);
printf("\n");
for(i=0; i<n; i++)
if(strcmpi(artist[i].nume,nm)==0)
printf("|%-2d| %-9s | %-10s | %-2s| %4d - %4d | %-11s | %-9s | %-2d |\n", i,
artist[i].nume, artist[i].prenume,
artist[i].sex, artist[i].an_n, artist[i].an_m,
artist[i].stil, artist[i].tara,
artist[i].nr_alb);
}

void cautnume_p (int n)


{ char *nm; int i,j,nr; gets(nm);
printf("Cite nume doriti sa cautati?\n"); scanf("%d", &nr);
gets(aa[i].nume);
for(i=0; i<nr; i++){
printf("Dati numele %d de cautare:\t", i+1); gets(aa[i].nume);}
printf("\n");
for(j=0; j<nr; j++)
for(i=0; i<n; i++)
if(strcmpi(artist[i].nume,aa[j].nume)==0)
printf("|%-2d| %-9s | %-10s | %-2s| %4d - %4d | %-11s | %-9s | %-2d |\n", i,
artist[i].nume, artist[i].prenume,
artist[i].sex, artist[i].an_n, artist[i].an_m,
artist[i].stil, artist[i].tara,
artist[i].nr_alb);
}

void cautan(int n)
{ char *nm; int i, an;
printf("Dati anul nasterii pu cautare:\t"); scanf("%d",&an);
printf("\n");
for(i=0; i<n; i++)
if(artist[i].an_n==an)
printf("|%-2d| %-9s | %-10s | %-2s| %4d - %4d | %-11s | %-9s | %-2d |\n", i,
artist[i].nume, artist[i].prenume,
artist[i].sex, artist[i].an_n, artist[i].an_m,
artist[i].stil, artist[i].tara,
artist[i].nr_alb);
}
void cautare(int n)
{
int x; char g;
while(1){
printf("\n Cauta:\n");
printf(" |-----------------------------|\n");
printf(" | 1 - dupa nume |\n");
printf(" | 2 - mai multe nume |\n");
printf(" | 3 - dupa an |\n");
printf(" | 0 - REVENIRE IN MENIU |\n");
printf(" |-----------------------------|\n");
scanf("%d",&x);
switch(x)
{ case 1:cautnume(n); break;
case 2:cautnume_p(n);break;
case 3:cautan(n);break;
case 0:break;
default:printf("Introdu optie de la 0 la 3\n");break;}
if(x==0 || x==1 || x==2 || x==3) break;}
}
3. Programul va afişa:

Afişare:
Adăugare:

Căutare:
Ştergere:
Sortare:
4. Concluzie:

Gestionarea datelor prin intermediul structurilor este o metoda eficace, deoarece permite
gestionarea datelor de tip diferit practic în aceeaşi variabilă, spre deosebire de tablouri. Structurile
permit crearea unor baze de date cu diverse cîmpuri conectate logic între ele şi salvate în memoria
operativă (în cazul curent) şi gestionarea acestor date în modul necesar.
La crearea şi prelucrarea structurii în lucrarea de laborator am utilizat algoritmii de sortare,
căutare, ştergere, adăugare, etc. şi posibilităţile de formatare a funcţiilor pentru output, asigurînd o
afişare uşor perceptibilă vizual.
Dificultăţi am întîlnit la structurarea şi operarea cu meniul şi în special cu submeniuri, la
elaborarea unei navigări simple şi corecte în program. Pentru simplificarea utilizarii am introdus
adesea variabile adiţionale pentru a permite utilizatorului efectuarea alegerilor necesare pentru
afişări sau operaţii la alegere sau pentru a permite afişări în limitele monitorului uşor lizibile.
În lucrarea dată am utilizat posibilitatea de stocare a codului în fişiere diferite (sortate după
tematică) şi includerea prin directiva preprocesorului ”#include” fapt ce facilitează operarea cu
programul.

You might also like