Lab 3 Structuri
Lab 3 Structuri
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;
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
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); }
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 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 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.