Sunteți pe pagina 1din 5

Lucrare de laborator Nr.

10
Tema lucrrii: " Fisiere si structuri n C/C++"

Scopul lucrarii:
Studierea si utilizarea tehnicilor de baza ale limbajului pentru prelucrarea si
modificarea structurilor si fisierilor.

Descrierea programului
Pentru a inscrie o variabila de tip structura in fisier se aplica urmatoarea secventa:
fwrite(& struct,dimensiunea,n,f(p)). Unde & struct este adresa structurii si apelind
numele variabilei de tip structura cu operatorul de adresa care comunica
compilatorului adresa celulei de start din memorie unde este salvata structura.
Iar dimensiunea semnifica marimea structurii. Pentru a determina marimea
structurii se foloseste functia sizeof(s) unde s este variabila de tip structura, n este
numarul de structuri care vor fi ulterior incarcate in fisier, de obicei este 1, si f(p)
este variabila pointer de tip fisier. La fel se aplica si la sintaxa de declarare a
procedeului fread (& struct,dimensiunea,n,f(p)).

Varianta 3

Mod Coala

Nr. document.

Elaborat
Verificat

Brinza Nicolai
V. Derevlenco

CPAE 525.3 07 10 ME
Semnat.

Data
Litera

Structuri si Fisiere n
C/C++

Coala

Coli

UTM.FIMET.TLC-131

Listingul Programului
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
struct CellMarket
{ char N[25]; float P; float G;};
FILE *f;
void Add( CellMarket *p, int n)
{ for(int i=0;i<n;i++)
{cout<<"\nIndroduceti denumirea:";cin>>(p+i)->N;
cout<<"Introduceti pretul:"; cin>>(p+i)->P;
cout<<"Indicati greutatea:"; cin>>(p+i)->G;}
}
void Afis( CellMarket *p, int n)
{for(int i=0;i<n;i++)
{ cout<<"\n"<<i+1<<".Denumirea: "<<(p+i)->N<<"

Pretul:"<<(p+i)->P<<"

Greutatea:"<<(p+i)->G;}
}
void CDa( CellMarket *p, int n)
{ f=fopen("cellmarket.txt","r");
char d[25];
cout<<"Introduceti denumirea aleasa:"; cin>>d; int i=0;
while(fread((p+i),sizeof(*(p+i)),1,f)==1)
{if(strcmp(d,(p+i)->N)==0)
{ cout<<"Denumirea: "<<(p+i)->N<<"

Pretul:"<<(p+i)->P<<"

Greutatea:"<<(p+i)->G; i++;}
} fclose(f);
}
void CDb( CellMarket *p, int n)
{float min=p->P; float max=p->P;

int s=0,k=0;

Coala
Mod Coala Nr. document

Semnat.

Data

CPAE 525.3 07 10 ME
3

for(int i=0;i<n;i++)
{ if(min>(p+i)->P) {min=(p+i)->P;s++;} }
for(int i=0;i<n;i++)
{ if(max<(p+i)->P) {max=(p+i)->P;k++;}}
*(p+n)=*(p+s); *(p+s)=*(p+k); *(p+k)=*(p+n);
}

void CDc( CellMarket *p, int n)


{
float c=p->P;
for(int j=0;j<n;j++)
{

for(int i=0;i<n-1;i++)

{ if(c>(p+i)->P) { *(p+n)=*(p+i); *(p+i)=*(p+i+1); *(p+i+1)=*(p+n);}


}
}
}
void Save( CellMarket *p, int n)
{ f=fopen("cellmarket.txt","w");
for(int i=0;i<n;i++)
{fwrite((p+i),sizeof(*(p+i)),1,f);}
fclose(f);}
void Save1( CellMarket *p, int n)
{ f=fopen("cellmarket.txt","a");
for(int i=0;i<n;i++)
{fwrite((p+i),sizeof(*(p+i)),1,f);}
fclose(f);}

void Read( CellMarket *p)


{f=fopen("cellmarket.txt","r");
int i=0;
while(fread((p+i),sizeof(*(p+i)),1,f)==1)
{ cout<<"\n"<<i+1<<".Denumirea: "<<(p+i)->N<<"

Pretul:"<<(p+i)->P<<"

Greutatea:"<<(p+i)->G; i++;} fclose(f);}


void Adaug( CellMarket *p)
{ int k;
cout<<"Introdu numarul de casute pentru adaugare: "; cin>>k;

Coala
Mod Coala Nr. document

Semnat.

Data

CPAE 525.3 07 10 ME
3

f=fopen("cellmarket.txt","a");
for(int i=0;i<k;i++)
{ cout<<"\nIndroduceti denumirea:";cin>>(p+i)->N;
cout<<"Introduceti pretul:"; cin>>(p+i)->P;
cout<<"Indicati greutatea:"; cin>>(p+i)->G;
fwrite((p+i),sizeof(*(p+i)),1,f);}
fclose(f); }
void Modific( CellMarket *p)
{ int v;
cout<<"Introduceti casuta pe care doriti sa o modificati:"; cin>>v;
cout<<"\nIndroduceti denumirea:";cin>>(p+v-1)->N;
cout<<"Introduceti pretul:"; cin>>(p+v-1)->P;
cout<<"Indicati greutatea:"; cin>>(p+v-1)->G;}
void main()
{CellMarket C[100]; int q,t;
cout<<"Introduceti numarul de inscrieri:"; cin>>q;
Add(C,q); Save(C,q);
printf("\n\n1)Cautarea detaliilor dupa denumire. \n2)Schimbarea cu locul a
inscrierile cu pretul minim

cu cel maxim. \n3)De aranjat insrierile crescator

dupa pretul produsului. \n4)De adaugat informatie suplimentara in fisier.


\n5)De modificat informatia deja existenta.\n\nAti ales: ");
scanf("%d",&t);
switch(t)
{
case 1: { clrscr();

CDa(C,q); break;}

case 2: { clrscr();

CDb(C,q);Save1(C,q); Afis(C,q);break;}

case 3: { clrscr();

CDc(C,q); Save1(C,q); Afis(C,q);break;}

case 4: { clrscr();

Adaug(C);Save1(C,q);Read(C);Afis(C,q); break;}

case 5: { clrscr(); Read(C); Modific(C); Save(C,q);}


}
getch();}

Rezultatul executiei!

Coala
Mod Coala Nr. document

Semnat.

Data

CPAE 525.3 07 10 ME
3

Concluzie:
Datorita metodelor de rezolvare a problemei,informatia de volum
mare poate fi incarcata in structura si cu ajutorul fisierurilor se poate salva
informatia pina cand nu este solicitata, Folosirea structurilor si pointerilor
precum si fisierilor conduce la ntrun program scade considerabil gradul
de complicitate a programului si vizualizarea mai clara a informatiei
incarcate.

Coala
Mod Coala Nr. document

Semnat.

Data

CPAE 525.3 07 10 ME
3

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