Documente Academic
Documente Profesional
Documente Cultură
{
FILE *lista;
lista=fopen(nume,"a"); //deschide fiierul temporar pentru
adugare
oferta of;
cprintf("Cate inregistrari doresti sa adaugi? ");
unsigned char nr;
cscanf("%d",&nr);
int i;
for(i=0;i<nr;i++)
{
cprintf("\nOferta %3i: investitie: ",i+1);
cscanf("%f",&(of.inv));
cprintf("\n
profit: ");
cscanf("%f",&(of.prf));
of.str=0;
fwrite(&of,sizeof(oferta),1,lista); //scrie n fiier
}
fclose(lista);
//nchide fiierul
}
BACKTRACKING
Prezentarea structurilor de date utilizate
Unul dintre tipurile de date folosite n program este
structura:
typedef struct{float inv;
float prf;
float str;} oferta;
typedef struct{float inv;
float prf;} ofefis;
O structur este un conglomerat de tipuri de date. Fiecare
element al unei structuri poate avea propriul su tip
care poate diferi de tipul oricarui alt element.
Structura din program e compus din 3 variabile:
inv este o variabila de tip float i stocheaz investiia;
prf este o variabil de tip float i stocheaz profitul;
str este o variabil de tip float i are valoarea 1 n cazul
n care nregistrarea este marcat ca fiind tears i 0 n
caz contrar.
Tipul de date float ocupa 4 bytes de memorie, iar domeniul
de valori este de la 3.4E-38 la 3.4E+38.
Cu ajutorul comenzi typedef se poate defini un nou tip de
date numit oferta.
void sterge(char*nume)
//marcheaz sau demarcheaz nregistrri ca sterse
FILE *lista;
lista=fopen(nume,"r+"); //deschide fiierul temporar
//pentru citire i modificare
int i;
cprintf("A cata inregistrare vrei sa o marchezi (demarchezi)
pentru stergere? ");
cscanf("%d",&i);
fseek(lista,sizeof(oferta)*(i-1),SEEK_SET); //caut
//nregistrarea dorit
oferta of;
fread(&of,sizeof(oferta),1,lista);
cprintf("\n Nr. Investitie Profit\n\r");
if(of.str) cprintf("*");
else
cprintf(" ");
printf("%3d%12.2f%10.2f\n\r",i,of.inv,of.prf);
cprintf("Doresti sa marchez (demarchezi) pentru stergere"
"inregistrarea afisata? ");
char confirm;
cscanf("%c%c",&confirm,&confirm);
while((confirm!='d')&&(confirm!='n'))
{
cprintf("\n\rd sau n?");
cscanf("%c",&confirm);
}
if(confirm=='d')
{
fseek(lista,sizeof(oferta)*(i-1),SEEK_SET);
of.str=!of.str;
fwrite(&of,sizeof(oferta),1,lista);
}
fclose(lista);
//nchide fiierul
}
void stergefisier(char*nume)
{
FILE *lista;
FILE *listas;
char *numes;
char tipnume[12];
strcpy(tipnume,"temp");
void adauga(char*nume)
//adaug nregistrri n fiierul tempor
1
{
cprintf("\n\rOferta %3i: investitie: ",i);
cscanf("%f",&(of.inv));
cprintf("\n
profit: ");
cscanf("%f",&(of.prf));
of.str=0;
rewind(lista);
fseek(lista,sizeof(oferta)*(i-1),SEEK_SET);
fwrite(&of,sizeof(oferta),1,lista);
for(j=0;j<(i-1);j++) fread(&aux,sizeof(oferta),1,lista);
fwrite(&of,sizeof(oferta),1,lista);
}
fclose(lista);
//nchide fiierul
}
void imprim(char*nume, char*imprimanta)
//imprim nregistrrile
{
cprintf("Care este portul imprimantei la care trebuie"
" sa trimit datele?\n\r");
cprintf("
implicit: %s\n\r",imprimanta);
fflush(stdin);
//citete portul imprimantei
char fis[12];
strcpy(fis,"");
gets(fis);
if (!(stricmp("",fis)==0)) strcpy(imprimanta,fis);
cprintf("\n\rEste imprimanta pregatita? ");
char confirm;
cscanf("%c",&confirm);
while((confirm!='d')&&(confirm!='n'))
{
cprintf("\n\rd sau n?");
cscanf("%c",&confirm);
}
if(confirm=='d')
{
FILE *print;
FILE *lista;
print=fopen(imprimanta,"w");
//deschide fiierul ataat imprimantei
lista=fopen(nume,"r"); //deschide fiierul temporar
int i;
i=0;
while(!feof(lista))
{
oferta of;
i+=1;
if(i==1) fprintf(print," Nr. Investitie Profit\n\r");
//transmite datele la imprimant
else
{
if(of.str) fprintf(print,"*");
else
fprintf(print," ");
fprintf(print,"%3d%12.2f%10.2f\n\r",i-1,
of.inv, of.prf);
}
fread(&of,sizeof(oferta),1,lista);
}
fclose(print);
//nchide fiierele deschise
fclose(lista);
}
}