Sunteți pe pagina 1din 11

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei

Departamentul Informatică și Ingineria Sistemelor

RAPORT
Lucrarea de laborator nr. 6 la
Programarea Calculatoarelor

A efectuat:
st. gr. RM-201 Cojocaru Alexandra

A verificat:
Stratulat Ștefan

Chişinău -2020
Lucrarea de laborator nr. 6
Теmа: Prelucrarea tabloului de structuri şi utilizarea fişierelor în
limbajul C

Scopul lucrării: Programarea algoritmilor pentru prelucrarea tabloului


de structuri prin utilizarea funcţiilor, pointerilor, alocării dinamice a
memoriei şi a fişierelor în limbajul C.

Condiţia problemei (sarcini de lucru)


Sarcină:
Pentru tabloul unidimensional dat cu elemente de tip structură
(conform variantelor) să se afişeze la ecran următorul meniu de
opţiuni:
1. Alocarea dinamică a memoriei pentru tabloul de
structuri.
2. Introducerea elementelor tabloului de la tastatură.
3. Căutarea elementului tabloului.
4. Sortarea tabloului.
5. Redactarea elementului tabloului.
6. Adăugarea unui element nou la sfârşit.
7. Eliminarea elementului indicat din tablou.
8. Inserarea unui element nou.
9. Salvarea elementelor tabloului în fişier. 10. Citirea elementelor tabloului din
fişier.
11. Extragerea elementelor tabloului la ecran.
12. Eliberarea memoriei alocate pentru tablou.
0. Ieșire din program.
Să se elaboreze funcţiile pentru implementarea opţiunilor meniului.

Varianta 4. Structura Cinematograf cu câmpurile: denumirea, adresa, telefonul,


numărul de locuri, preţul biletelor

Descrierea variabilelor:
a) date de intrare: Cinema - variabila simple de tip Structura
b) date de ieşire: Cinema - variabila de tip Structura

Codul (textul) programului în limbajul C:


1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct cinema
{ char
denumire[50];
char adresa[50];
char nr_telefon[8];
int nr_locuri;
int pret;
} Cinema;

void citesteArrayOfCinema(Cinema *S, int


n); int cautaCinema(Cinema*S,int n,char*
num); void sorteazaCinema(Cinema *S, int
n); void modificaCinema(Cinema*S, int k);
Cinema* adaugaCinema(Cinema* S, int *pn,Cinema a);
Cinema* stergeCinema(Cinema* S, int *pn,int k); Cinema*
insereazaCinema(Cinema* S, int *pn,Cinema a,int k); void
printeazaArrayOfCinema(Cinema *S, int n); int
salveaza(Cinema* S, int n, char *fname);
int incarca(Cinema* S, int n, char* fname);

int main()
{
Cinema *S,*B, a; char
temp[50], fname[50]; int
n,x,f,k;
while(1)
{ system("cls"); puts("\t MENIU:"); puts("1.
Alocarea dinamica a memoriei p/u tabl. de structuri");
puts("2. Introducerea elementelor tabloului de la tastatura");
puts("3. Cautarea elementului tabloului"); puts("4. Sortarea
elementelor tabloului"); puts("5. Redactarea elementului
tabloului"); puts("6. Adaugarea unui element nou la sfirsit");
puts("7. Eliminarea elementului indicat din tablou "); puts("8.
Inserarea unui element nou "); puts("9. Salvarea elementelor
tabloului in fisier "); puts("10. Citirea elementelor tabloului
din fisier "); puts("11. Afisarea elementelor tabloului la ecran
"); puts("12. Eliberarea memoriei alocate pentru tablou ");
puts("0. Iesire din program ");

printf("\nAlegeti optiunea din meniu: ");


scanf("%d", &x);

switch(x)
{
case 1:
printf("Dati numarul de Cinematografe: ");
scanf("%d", &n);

S= (Cinema*)malloc(n*sizeof(Cinema));
2
if(S==NULL)
{
puts("Memoria nu a fost alocata");
exit (1);
}
puts("Memoria a fost alocata cu succes");
puts("Pentru a continua apasati tasta Enter");
getch(); break; case 2:
puts("Dati datele cinematografelor: ");
citesteArrayOfCinema(S,n);
puts("Pentru a continua apasati tasta
Enter"); getch(); break; case 3:
puts("Dati numele cinematografului de
cautat:"); fflush(stdin); gets(temp);
k=cautaCinema(S,n,temp);
if(k<0)
{
puts("Cinematograful cautat nu a fost gasit in tablou ");
}
else
{
puts("Info despre Cineatograf: "); printf(" Denumire: %s\n Adresa: %s\n
Nr de telefon %s\n Nr de locuri: %d\n Pretul
biletului %d\n",S[k].denumire,S[k].adresa,S[k].nr_telefon,S[k].nr_locuri,S[k].pret);
}

puts("Pentru a continua apasati tasta


Enter"); getch(); break; case 4:
sorteazaCinema(S, n);
puts("Sortaea s-a efectuat cu succes");
puts("Pentru a continua apasati tasta Enter");
getch(); break; case 5:
puts("Dati numele cinematografului de modificat:");
fflush(stdin);
gets(temp);
k=cautaCinema(S,n,temp);
if(k<0)
{ puts("Cinematograful cautat nu a fost gasit in
tablou ");
}
else
{
puts("Info despre Cinema: "); printf(" Denumire: %s\n Adresa: %s\n Nr
de telefon %s\n Nr de locuri: %d\n Pretul
biletului %d\n",S[k].denumire,S[k].adresa,S[k].nr_telefon,S[k].nr_locuri,S[k].pret);
modificaCinema(S,k);
}

puts("Pentru a continua apasati tasta


Enter"); getch(); break; case 6:
puts("Dati info despre cinematograful de
adaugat:"); printf("Dati denumirea
cinematografului: "); fflush(stdin);
3
gets(a.denumire); printf("Dati adresa: ");
fflush(stdin); gets(a.adresa);
printf("Dati numarul de tefon: ");
fflush(stdin);
gets(a.nr_telefon);
printf("Dati numarul de locuri: ");
scanf("%d",&a.nr_locuri);
printf("Dati pretul biletului: ");
scanf("%d",&a.pret);
B=adaugaCinema(S, &n, a);
if(B==NULL)
{
puts("Adaugarea elementului la sfirsit nu a avut loc");
}
else
{
puts("Adaugarea elementului la sfirsit s-a efectuat cu succes");
S=B;
}

puts("Pentru a continua apasati tasta


Enter"); getch(); break; case 7:
puts("Dati denumirea cinematografului de sters:");
fflush(stdin);
gets(temp);
k=cautaCinema(S,n,temp);
if(k<0)
{
puts("Cinematograful de sters nu a fost gasit in tablou ");
}
else
{
puts("Info despre Cinema: "); printf(" Denumire: %s\n Adresa: %s\n Nr
de telefon %s\n Nr de locuri: %d\n Pretul
biletului %d\n",S[k].denumire,S[k].adresa,S[k].nr_telefon,S[k].nr_locuri,S[k].pret);
B=stergeCinema(S, &n, k);
if(B==NULL)
{
puts("Stergerea elementului nu a avut loc");
}
else
{
puts("Stergerea elementului s-a efectuat cu succes");
S=B;
}
}
puts("Pentru a continua apasati tasta Enter");
getch();
break;
case
8:
puts("Dati info despre cinematograful de
inserat:"); printf("Dati denumirea
4
cinematografului: "); fflush(stdin);
gets(a.denumire); printf("Dati adresa: ");
fflush(stdin); gets(a.adresa);
printf("Dati numarul de tefon: ");
fflush(stdin);
gets(a.nr_telefon);
printf("Dati numarul de locuri: ");
scanf("%d",&a.nr_locuri);
printf("Dati pretul biletului: ");
scanf("%d",&a.pret);
printf("Dati pozitia de inserare: ");
scanf("%d", &k);
B=insereazaCinema(S, &n, a,k-1);
if(B==NULL)
{
puts("Inserarea elementului nu a avut loc");
}
else
{
puts("Inserarea elementului s-a efectuat cu succes");
S=B;
}

puts("Pentru a continua apasati tasta Enter");


getch();
break;
case 9:
puts("Dati numele fisierului:");
fflush(stdin);
gets(fname);
f=salveaza(S,n,fname);
if(f==1) puts("Citirea din fisier s-a efectuat cu succes");
else puts("Fisierul pentru a citi info despre cinematografe nu a fost
deschis"); puts("Pentru a continua apasati tasta Enter"); getch();
break; case 10: puts("Dati numele fisierului:");
fflush(stdin);
gets(fname);
f=incarca(S,n,fname);
if(f==1) puts("Citirea din fisier s-a efectuat cu succes");
else puts("Fisierul pentru a citi info despre studenti nu a fost deschis");
puts("Pentru a continua apasati tasta Enter"); getch(); break;
case 11:
puts("Info despre cinematografe: ");
printeazaArrayOfCinema(S, n); puts("Pentru a
continua apasati tasta Enter"); getch();
break; case 12: free(S); S=NULL;
puts("Eliberarea memoriei s-a efectuat cu succes");
puts("Pentru a continua apasati tasta Enter");
getch(); break; case 0:
printf("Doriti sa iesiti din program? (1/0):
"); scanf("%d", &f); if(f==1) return
0;

5
puts("Pentru a continua apasati tasta
Enter"); getch(); break; default:
puts("Aceasta comanda nu exita.\nAlegeti optiunea corecta din meniu!
"); puts("Pentru a continua apasati tasta Enter"); getch();
}

}
}

void citesteArrayOfCinema(Cinema *S, int n)


{
int i;
for(i=0; i<n; i++)
{
printf("Cinematograf %d:\n ", i+1);
printf("Dati denumirea cinematografului: ");
fflush(stdin);
gets(S[i].denumire); printf("Dati
adresa: "); fflush(stdin);
gets(S[i].adresa); printf("Dati
numarul de tefon: ");
fflush(stdin);
gets(S[i].nr_telefon); printf("Dati
numarul de locuri: ");
scanf("%d",&S[i].nr_locuri);
printf("Dati pretul biletului: ");
scanf("%d",&S[i].pret);
}
return;
}

int cautaCinema(Cinema*S,int n,char* temp)


{
int i;
for(i=0; i<n; i++)
{
if(strcmp(S[i].denumire, temp)==0)

{ return
i;
} }
return -1;
}

void sorteazaCinema(Cinema *S, int n)


{
int i,k;
Cinema t;
for(i=0; i<n; i++)
{
for(k=0; k<n-1-i; k++)
{
if(stricmp(S[k].denumire,S[k+1].denumire)>0)
6
{ t=S[k];
S[k]=S[k+1];
S[k+1]=t;
}
}
}
return;
}

void printeazaArrayOfCinema(Cinema *S, int n)


{
int i;
for(i=0; i<n; i++)
{
printf("\n\n Cinematograful: %d\n Denumire: %s\n Adresa: %s\n Nr de telefon %s\n Nr de
locuri: %d\n Pretul biletului
%d\n",i+1,S[i].denumire,S[i].adresa,S[i].nr_telefon,S[i].nr_locuri,S[i].pret);
}
return;
}

void modificaCinema(Cinema*S, int k)


{
int f;
printf("De modificat numele cinematografului? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati numele
cinematografului:"); fflush(stdin);
gets(S[k].denumire);
}
printf("De modificat adresa? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati adresa:");
scanf("%d", &S[k].adresa);
}
printf("De modificat numarul de telefon? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati numarul de telefon:");
scanf("%s", &S[k].nr_telefon);
}
printf("De modificat numarul de locuri? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati numarul de locuri:");
scanf("%d", &S[k].nr_locuri);
7
}
printf("De modificat pretul biletului? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati pretul biletului:");
scanf("%d", &S[k].pret);
}
return;
}

Cinema* adaugaCinema(Cinema* S, int *pn,Cinema a)


{
Cinema * B;
B=(Cinema*)realloc(S,((*pn)+1)*sizeof(Cinema));
if(B==NULL)

{ return
B; }
B[*pn]= a;
*pn=*pn+1;
return B;
}

Cinema* stergeCinema(Cinema* S,int *pn, int k)


{
Cinema *B;
int i;
for(i=k; i<*pn-1; i++)
{
S[i]=S[i+1];
}
B=(Cinema*)realloc(S,((*pn)-1)*sizeof(Cinema));
if(B==NULL)

{ return
B; }
*pn=*pn-1;
return B;
}

Cinema* insereazaCinema(Cinema* S, int *pn,Cinema a,int k)


{
Cinema * B;
int i;
B=(Cinema*)realloc(S,((*pn)+1)*sizeof(Cinema));
if(B==NULL)

{ return
B;
}
for(i=*pn-1; i>=k; i--)
{
8
B[i+1]=B[i];
}
B[k]=a;
*pn=*pn+1;
return B;
}

int salveaza(Cinema* S, int n, char *fname)


{
FILE *fp;
int i;
fp=fopen(fname,"w");
if(fp==NULL)

{ return
0;
}
for(i=0; i<n; i++)
{
fprintf(fp, "%s %s %s %d %d\n",
S[i].denumire,S[i].adresa,S[i].nr_telefon,S[i].nr_locuri,S[i].pret);
}
fclose(fp);
return 1;

int incarca(Cinema* S, int n, char *fname)


{
FILE *fp;
int i;
fp=fopen(fname,"r");
if(fp==NULL)

{ return
0;
}
for(i=0; i<n; i++)
{
fscanf(fp, "%s %s %s %d %d\n",
S[i].denumire,S[i].adresa,S[i].nr_telefon,S[i].nr_locuri,S[i].pret);
}
fclose(fp);
return 1;

9
Analiza rezultatelor și concluzii:
1. Au fost obţinute deprinderi de elaborare, compilare, rulare și testare a unui program în limbajul
de programare C ce contine Structuri.
2. Verificarea rezultatelor obţinute confirmă că programul elaborat lucrează corect.
3. Programul a fost foarte usor rezolvat folosind functiile for, if, fopen, si altele.
4. Programul elaborat nu verifică datele de intrare, ce reprezintă un dezavantaj al algoritmului.
5. Programul elaborat poate fi dezvoltat ulterior prin adăugarea operațiilor de verificare a datelor
de intrare.
6. Am studiat metode de introducere, afisare, modificare a structurilor simple.
.

10

S-ar putea să vă placă și