Sunteți pe pagina 1din 17

ACADEMIA DE STUDII ECONOMICE

Facultatea de Cibernetic, Statistic i Informatic Economic


!OIECT A"#O!ITMI $N !O#!AMA!E
Fiiere or%ani&ate relati'
#!UA()*+,
Fiiere organizate relativ
Prelucrarea fisierelor binare care necesita actualizare trebuie sa asigure posibilitatea
stergerii articolelor si sa elimine riscul de suprascriere a articolelor adaugate.Pentru aceasta
,trebuie proiectate structure particulare de articole si concepute operatii de gestiune specific.
Organizarea fisierelor care asigura identificarea articolelor prin numarul lor relative se
numeste organizare relativa.
In exemplul ce urmeaza aplicatia realizata permite gestiunea cartilor dintr-o librarie.
Fisierul principal de date contine cod carte, titlu , autor, editura,categorie,an_aparitie, prt
si cantitate. , cu urmatoarea structura cod(int cod, titlu( c!ar titlu"#$%, autor(c!ar
autor"#$%,editura(c!ar editura"#$%,an_aparitie(int an_aparitie , prt (int prt , cantitate (int
cantitate ,categorie(c!ar categorie "#$%.
typedef struct {int is,cod;
char titlu [30];
char autor [30];
char editura [30];
char categorie[30]
int an_aparitie ;
int pret;
int cantitate ;}
carte;

&tilizatorul are la dispozitie un meniu cu mai multe optiuni'
1. Creare
2. daugare Carte
3. !tergere carte
". #odificare carte
$. Copiere in fis te%t
&. fisare carti
'. (aport pe an_aparitie si
). Cautare autor
*. Cautare titlu
0. +esire,n,n-.

(odul sursa al meniului este '
/oid 0eniu1.
{
printf 1-,n,n,n,n, 2rogra0 3estiune 4i5rarie,n -.;
printf1-,n,n,n-.;
printf1-6666666666666666666666666666666666,n-.;
printf1-legeti o operatie7,n,n-.;
printf1-1. Creare ,n,n-.;
printf1-2. daugare Carte ,n,n-.;
printf1-3. !tergere carte ,n,n-.;
printf1-". #odificare carte,n,n-.;
printf1-$. Copiere in fis te%t,n,n-.;
printf1-&. fisare carti ,n,n-.;
printf1-'. (aport ,n,n-.;
printf1-). Cautare autor,n,n-.;
printf1-*. Cautare titlu,n,n-.;
printf1-0. +esire,n,n-.;
printf1-6666666666666666666666666666666666,n-.;
}
functie ce /a fi apelata in progra0ul principal 7
/oid 0ain1.
{
8+49 6f;
int opt;
0eniu1.;
printf1-+ntroduceti optiunea7 -.;
scanf_s1-:d-,;opt.;
<hile1opt.
{
s<itch1opt.
{
case 17
printf1-i ales sa cree=i fisierul pentru gestiunea cartilor,n-.;
creare1.;
5rea>;
case 27
printf1- i ales sa adaugi o carte ,n-.;
adaugare1.;
5rea>;
case 37
printf1-i ales sa stergi o carte ,n-.;
stergere 1.;
5rea>;
case "7
0odificare_carti1.;
5rea>;
case $7
copiere_in_fis_te%t1.;
5rea>;
case &7
afisare_carti1.;
5rea>;
case '7 raport1.;
5rea>;
case )7
cautare_autor1.;
5rea>;
case *7
cautare_titlu1.;
5rea>;
default7
printf1-?ptiune ine%istenta@ (eincearca@-.;
5rea>;
}
0eniu1.;
printf1-+ntroduceti optiunea7 -.;
scanf_s1-:d-,;opt.;
}
}
)imba*ul ( nu ofer+ o func,ie standard pentru calcularea num+rului de articole dintr-un fi-ier binar,
deoarece, din punctul de vedere al limba*ului, fi-ierele nu con,in articole. .in punctul de vedere al
utilizatorului, cunosc/nd dimensiunea unui articol, se poate calcula num+rul de articol de fi-ier, 0mp+r,ind
lungimea acestuia la lungimea unui articol (ambele m+surate 0n num+r de octe,i. )ungimea fi-ierului este
egal+ cu pozi,ia curent+, atunci c/nd pointerul de citire se afl+ la sf/r-itul fi-ierului. Pentru aflarea
num+rului de articole, se folose-te secven,a urm+toare'
int nr_art18+496 f, int l.
{long po=Aftell1f.;
fsee>1f,0,2.;
int cAftell1f.Bl;
fsee>1f,po=,0.;
return c;}
poz retine pozitia curenta in fisier ,apoi ne pozitionam la sfarsitul fisierului .In variabila c se
memoreaza nr de articole prin impartirea lungimii zonei totale de memorie la lungimea unui
articol
1(234234
&rmatoarea functie ne permite sa populam cu date fisierul creat 5e desc!ide fisierul in modul
67b.5e introduce de la tastatura codul articolului.
(u a*utorul unei structuri 67!ile6 vom verifica sfarsitul fisierului 6feof(f6. (at timp nu se
a*unge la sfarsitul inserarii (inserarea se opreste intreducand combinatia de taste 6ctrl8z6 se
continua prelucrarea .aca valoarea 6n6 introdusa de la tastura este mai mare decat numarul de
articole de*a adaugate ,setam indicatorul de stare pe is9$ si ne pozitionam la sfarsitul fisierului si
scriem articole in fisier pana la pozitia n..upa ce se realizeaza extinderea fisierului ma
pozitionez dupa primele n-1 articole si citesc asticolul. .aca is 91 se afiseaza un mesa* :(artea
cu articolul n exista,altfel citesc si scriu articolul.
/oid creare1.
{
8+496 f;
char nu0ef[30];int n,i ;
carte % ;
printf1-Cu0e fisier 7-.;fflush1stdin.; gets1nu0ef.;
fAfopen1nu0ef,-<5D-.;
printf1-,n Cod articol7-.;
scanf 1-:d-,;n.;
<hile1@feof1stdin..
{ if 1nEAnr_art1f,si=eof1carte...
{ %.isA0;
fsee>1f,0,2.;
for 1iAnr_art1f,si=eof1carte..;iFAn ;iDD.
f<rite1;%,si=eof1carte.,1,f.;
}
fsee>1f,1n.6si=eof1carte.,0.;
fread1;%,si=eof1carte.,1,f.;
if1%.is. printf1-,n Cartea cu codul :d e%ista in 5a=a de
date,n-,n.;
else{
fsee>1f,1n.6si=eof1carte.,0.;
%.codAn;
printf 1-,n Gitlu-.; fflush1stdin.;gets1%.titlu.;
printf 1-,n utor-.; gets1%.autor.;
printf 1-,n 9ditura-.; gets1%.editura.;
printf1H,nCategorie7I.;gets1%.categorie.;
printf 1-,n n aparitie-.; scanf_s1-:d-,;%.an_aparitie.;
printf 1-,n 2ret [(?C] 7-.; scanf_s 1-:u-,;%.pret.;
printf1-,n Cantitate7-.; scanf_s1-:d-,;%.cantitate.;
%.isA1;
f<rite1;%,si=eof1carte.,1,f.;
}
printf 1-introduceti cod articol sau ctrl =-.;
scanf 1-:d-,;n.;

}
fclose1f.;
}
4.4&;423'
Functia este asemanatoare cu (234234 singura diferenta fiind modul de desc!idere (rb8<
4ceasta functie permite adaugarea de noi inregistrari in fisier . .upa ce se desc!ide fisierul si se
determina numarul de articole din acesta , se cere introducerea codului articolului nou de adaugat
..aca codul este mai mare decat numarul de articole , indicatorul de stare este setat pe $ si ne
pozitionam la sfarsitul fisierului adaugand articole in fisier pana la pozitia n. 4ltfel ma
pozitionez pe articolul anterior , daca indicatorul de stare este 1 se afiseaza un mesa* : (artea cu
codul n exista in baza de date= .aca indicatorul de stare nu este 1 prelucrez articolul si adaug
informatii despre carte.
/oid adaugare1.
{
8+496 f;
char nu0ef[30];int n,i ;
carte % ;
printf1-Cu0e fisier 7-.;fflush1stdin.; gets1nu0ef.;
fAfopen1nu0ef,-r5D-.;
printf1-,n Cod articol7-.;
scanf 1-:d-,;n.;
<hile1@feof1stdin..
{ if 1nEnr_art1f,si=eof1carte...
{ %.isA0;
fsee>1f,0,2.;
for 1iAnr_art1f,si=eof1carte..;iFAn ;iDD.
f<rite1;%,si=eof1carte.,1,f.;
}
fsee>1f,1nJ1.6si=eof1carte.,0.;
fread1;%,si=eof1carte.,1,f.;
if1%.is. printf1-,n Cartea cu codul :d e%ista in 5a=a de
date,n-,n.;
else{
fsee>1f,1nJ1.6si=eof1carte.,0.;
%.codAn;
printf 1-,n Gitlu-.; fflush1stdin.;gets1%.titlu.;
printf 1-,n utor-.; gets1%.autor.;
printf 1-,n 9ditura-.; gets1%.editura.;
printf1H,nCategorie7I.;gets1%.categorie.;
printf 1-,n n aparitie-.; scanf_s1-:d-,;%.an_aparitie.;
printf 1-,n 2ret [(?C] 7-.; scanf_s 1-:u-,;%.pret.;
printf1-,n Cantitate7-.; scanf_s1-:d-,;%.cantitate.;
%.isA1;
f<rite1;%,si=eof1carte.,1,f.;
}
printf 1-introduceti cod articol sau ctrl =-.;
scanf 1-:d-,;n.;

}
fclose1f.;
}
4FI54234'
Functia va lista toate datele despre fiecare carte in parte. .upa ce se precizeaza fisierul care se
doreste a fi listat , ma pozitionez la inceputul fisierului. 5e testeaza indicatorul de stare , daca
acesta este 1 se afiseaza informatiile despre carte.
/oid afisare_carti 1.
{
8+49 6 f; char nu0ef[20];
printf1- Keschideti fisierul -.;
fflush1stdin.;gets1nu0ef.;
fAfopen1nu0ef,-r5-.;
carte %;
if1f.
{
fsee>1f,0,0.;
printf1-,n,n-.;
<hile 1fread1;%,si=eof1carte.,1,f.AA1.
if1%.is@A0.{printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7I,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1-,n66666666666666666-.;
}
}
fclose 1f.;
}
5>32;323
4ceasta functie realizeaza stergerea din baza de date a unei carti si a tuturor informatiilor
referitoare la aceasta. .upa ce se desc!ide fisierul cu care se doreste a lucra si se introduce codul
(npt cartea care dorim sa o stergem , verificam daca codul este mai mare decat numarul de
articole si daca da se afiseaza un mesa* corespunzator. 4ltfel ma pozitionez pe n, citesc articolele
din fisier. .aca indicatorul de stare este 1 ma pozitionez pe inregistrarea anterioara si setez
indicatorul pe$, scriu articolul in fisier si afisez un mesa* care sa confirme ca stergerea a fost
efectuata cu succes.
/oid stergere1.
{
8+49 6f;
char nu0ef[20];
carte %;
int n;
printf1-,n JE Keschideti fisierul7 -.;fflush1stdin.;gets1nu0ef.;
fAfopen1nu0ef,-r5D-.;
if1f.
{printf1-!tergeti cartea cu codul7 -.; scanf1-:d-,;n.;
if1nEAnr_art1f,si=eof1carte... printf1-Cartea cu codul :d nu
e%ista ,n-,n.;
else
{
fsee>1f,n6si=eof1carte.,0.;
fread1;%,si=eof1carte.,1,f.;
if1@%.is. printf1-Cartea cu codul :d nu e%ista ,n-,n.;
else
{
fsee>1f,ftell1f.Jsi=eof1carte.,0.;
%.isA0;
f<rite1;%,si=eof1carte.,1,f.;
printf1-Cartea a fost sters cu succes@-.;
}
printf1-Kati codul produsului sau CtrlDL pentru
iesire7-.;
scanf_s1-:u-,;n.;
}
fclose1f.;
}
else
{
printf1-9roare la deschidere a fisierului :s-,nu0ef.;
}
}
?O.IFI(423'
4ceasta functie realizeaza modificarea cartilor in functie de o optiune aleasa. 5e pot modifica pe
rand doar titlul, autorul,cantitatea,anul de aparitie sau editura..upa ce a fost desc!is fisierul cu
care se doreste sa se lucreze si a fost determinat numarul de articole, se cere introducerea codului
pentru cartea care dorim sa o modificam. 5e verifica daca n @ numarul de articole, daca da se
afiseaza un mesa* : cartea nu exista :, daca nu ne pozitionam pe articol ,il citim .aca is91 afisam
detaliile despre carte . 5e afiseaza apoi un mesa* in care utilizatorul este intrebat ce anume
doreste sa modifice. (u a*utorul unui case sunt implementate cele A optiuni.
/oid 0odificare_carti1.
{
8+49 6f;
char nu0ef[20];
carte %;
int n,op;
printf1-,nJE Keschideti fisierul7 -.;
fflush1stdin.;gets1nu0ef.;
fAfopen1nu0ef,-r5D-.;
if1f.
{
printf1-#odificati cartea cu codul7 -.; scanf1-:d-,;n.;
if1nEAnr_art1f,si=eof1carte... printf1-Cartea cu codul :d nu e%ista @-.;
else
{
fsee>1f,n6si=eof1carte.,0.;
fread1;%,si=eof1carte.,1,f.;
if1@%.is. printf1-Cartea cu codul :d nu e%ista @-.;
else
{
printf1-Ketalii carti M:d7 -, n.;
printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7I,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1-,n66666666666666666-.;
fsee>1f,n6si=eof1carte.,0.;
printf1-,n Koriti sa 0odificati7 -.;
printf1-,n 1.G+G4NO ,n-.;
printf1-,n 2 NG?(N4O ,n-.;
printf1-,n 3.9K+GN(O ,n-.;
printf1-,n ".C 2(+G+9O ,n-.;
printf1-,n $.2(9GO ,n-.;
printf1-,n &.CCG+GG9 ,n-.;
printf1H,n '.CG93?(+9,nI.;
printf1-,n +ntroduceti optiunea,n-.;
scanf1-:d-, ;op.;
s<itch1op.
{ case 17
%.codAn;
printf1-,n Cout Gitlu7 -.;
fflush1stdin.;gets1%.titlu.;
%.isA1;
f<rite1;%,si=eof1carte.,1,f.;
printf1-,n Ketaliile cartii au fost
0odificate,n,n-.;
printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7:J10sI,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1H,n6666666666666666I.;
5rea>;
case 27 %.codAn;
printf1-,n Coul utor7 -.;
fflush1stdin.;gets1%.autor.;
%.isA1;
f<rite1;%,si=eof1carte.,1,f.;
printf1-,n Ketaliile cartii au fost
0odificate,n,n-.;
printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7:J10sI,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1-,n66666666666666666-.;
5rea>;
case 37 %.codAn;
printf1-,n Coua 9ditura7 -.;
fflush1stdin.;gets1%.editura.;
%.isA1;
fwrite(&x,sizeof(carte),1,f);
printf("\n Detaliile cartii au fost
modificate\n\n");
printf("\n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7:J10sI,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1-,n66666666666666666-.;

5rea>;
case "7 %.codAn;
printf1-,n n aparitie7-.;
scanf1-:d-,;%.an_aparitie.;
%.isA1;
f<rite1;%,si=eof1carte.,1,f.;
printf1-,n Ketaliile cartii au fost
0odificate,n,n-.;
printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7:J10sI,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1-,n66666666666666666-.;,

5rea>;}
case $7 %.codAn;
printf 1-,nCoul 2ret [(?C] 7-.;
scanf1-:d-,;%.pret.;
%.isA1;
f<rite1;%,si=eof1carte.,1,f.;
printf1-,n Ketaliile cartii au fost
0odificate,n,n-.;
printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7:J10sI,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1-,n66666666666666666-.;

5rea>;}
case &7 %.codAn;
printf1-,n Coua Cantitate7-.;
scanf1-:d-,;%.cantitate.;
%.isA1;
f<rite1;%,si=eof1carte.,1,f.;
printf1-,n Ketaliile cartii au fost
0odificate,n,n-.;
printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7:J10sI,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1-,n66666666666666666-.;
5rea>;
case '7 %.codAn;
printf1-,n Coua Categorie7-.;
gets1%.categorie.;
%.isA1;
f<rite1;%,si=eof1carte.,1,f.;
printf1-,n Ketaliile cartii au fost
0odificate,n,n-.;
printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1H,nCategorie7:J10sI,%.categorie.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;
printf1-,n66666666666666666-.;
5rea>;
default7printf1-ti apasat o tasta
necorespun=atoare ,n-.;
5rea>;
}
}
}
fclose1f.;
}
else
{
printf1- 9(?(9 @ 8isierul nu e%ista :s-,nu0ef.;
}
}
(OPI323
4ceasta functie realizeaza copierea articolelor din f isierul f in fisierul g . .upa ce se desc!ide
fisierul f, atata timp cat nu e sfarsit de fisier ,articolele sunt copiate in g.
/oid copiere_in_fis_te%t1.
{8+49 6f,6g;
char nu0e_f1[20],nu0e_f2[20];
carte y;
printf1-,n Kati nu0ele fisierului de copiat7 -.;fflush1stdin.;gets1nu0e_f1.;
if1@1fAfopen1nu0e_f1,-r5D-... printf 1-,n 8isierul :s nu poate fi deschis-,
nu0e_f1.;
else
{
printf1-,n Kati nu0ele noului fisier1de tip .t%t.-.;gets1nu0e_f2.;
gAfopen1nu0e_f2,-<-.;
fprintf1g,-,n cod titlu autor editura an_aparitie
cantitate pret,n-.;
fread1;y,si=eof1y.,1,f.;
<hile1@feof1f..
{
if1y.is@A0. fprintf1g,-,n :d :s :s :s :d :d
:d,n-,y.cod, y.titlu, y.autor,y.editura, y.an_aparitie,y.cantitate, y.pret.;
fread1;y,si=eof1carte.,1,f.;
}
fclose1f.;
}
fclose1g.;
}
24PO2>'
8unctia ne afisea=a cartile pe categorie si in functie de an. nii sunt
sortati in 0od crescator.2t fiecare an este calculata 0edia .poi ne folosi0
de /aria5ila su0a_categorie pe care o i0parti0 la nu0arul de ani care au
0ediaanE0, pentru a afla 0edia pe categorie
/oid raport1.
{
8+49 6f,6g;
char nu0ef[20],nu0eg[20];
carte 5[30],a[30],%,au%;
int i,P,>,gasit,su0aan,su0a_categorie,l,nr,nranicat;
printf1-,n JE Keschideti fisierul7 -.;
fflush1stdin.;gets1nu0ef.;
fAfopen1nu0ef,-r5-.;
if1@f. printf1-,n 9roare la deschidere a fisierului :s-,nu0ef.;
else
{
iA0;
PA0;
fsee>1f,0,0.;
<hile1fread1;%,si=eof1carte.,1,f..
{
>A0;
gasitA0;
<hile11>FAi. ; 1gasitAA0..
{
if1strc0p1%.categorie,5[>].categorie.AA0. gasitA1;
else >DD;
}
if1>Ei. strcpy15[iDD].categorie,%.categorie.;
>A0;
gasitA0;
<hile11>FAP. ; 1gasitAA0..
{
if1a[>].an_aparitieAA%.an_aparitie. gasitA1;
else >DD;
}
if1>EP. a[PDD].an_aparitieA%.an_aparitie;
} BB end of <hile
do
{
gasitA0;
for1>A0;>FiJ1;>DD.
if1strc0p15[>].categorie,5[>D1].categorie.E0.
{
au%A5[>];
5[>]A5[>D1];
5[>D1]Aau%;
gasitA1;
}
}
<hile1gasit.;
do
{
gasitA0;
for1>A0;>FPJ1;>DD.

if1a[>].an_aparitieFa[>D1].an_aparitie.
{
au%Aa[>];
a[>]Aa[>D1];
a[>D1]Aau%;
gasitA1;
}
}
<hile1gasit.;
for1>A0;>Fi;>DD.
{
su0a_categorieA0;
nranicatA0;
printf1-,n666666666666666666666666666666666666666,n-.;
printf1-,n:d. :s ,n-,>D1,5[>].categorie.;
for1lA0;lFP;lDD.
{
printf1-,n 6 nul :d ,n-,a[l].an_aparitie.;
fsee>1f,0,0.;
su0aanA0;
nrA0;
<hile1fread1;%,si=eof1carte.,1,f..
{
if11%.an_aparitieAAa[l].an_aparitie. ;
1strc0p1%.categorie,5[>].categorie.AA0..
{
printf1-,n,t :J20s :&d -,%.titlu,%.cantitate.;
su0aanDA%.cantitate;
nrDD;
}
}
printf1-,n-.;
if1su0aanE0. {su0aanAsu0aanBnr; nranicategDD;}
else su0aanA0;
printf1-,n#edie an7 :d,n-,su0aan.;
su0a_categorieDAsu0aan;
}
printf1-,n-.;
printf1-,nJJJ#edie categorie :s7 :d
,n-,5[>].categorie,su0a_categorieBnranigen.;
}
fclose1f.;
}
}
(autare autor respectiv cautare titlu.
.upa ce se desc!ide fisierul se cere introducerea autorului( titlu dupa care se doreste realizarea
cautarii.Be pozitionam la inceputul fisierului .4tata timp cat nu e sfarsit de fisier si is91 se
realizeaza o comparare de stringuri .In momentul in care sCa gasit autorul intrCun articol , sunt
afisate informatiile referitoare la acest articol
/oid cautare_autor1.
{
8+49 6 f;
carte %;
char aut[20],nu0ef[20];
printf1-Keschideti fisierul7 -.;
fflush1stdin.;gets1nu0ef.;
fAfopen1nu0ef,-rD5-.;
if1f.
{
printf1-+ntroduceti autorul7 -.;gets1aut.;
fsee>1f,0,0.;
printf1-,n Cartile cu autorul :s sunt7 ,n,n-,aut.;
<hile1fread 1;%,si=eof1carte.,1,f.AA1.
{
if11%.is.;1strc0p1aut,%.autor.AA0..
{
printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;

printf1-,n6666666666666666666666666666666666666-.;
}

}
fclose 1f.;
}
else
{
printf1-9roare la deschidere a fisierului :s-,nu0ef.;
}
}
/oid cautare_titlu1.
{
8+49 6f;
carte %;
char nu0ef[30], tit[30];
printf1-+ntroduceti nu0ele fisierului pe care doriti sa il utili=ati7-.;
fflush1stdin.; gets1nu0ef.;
fAfopen1nu0ef,-rD5-.;
if1f.
{
printf1-+ntroduceti titlul7 -.;gets1tit.;
fsee>1f,0,0.;
printf1-,n Cartile cu titlul :s sunt7 ,n,n-,tit.;
<hile1fread 1;%,si=eof1carte.,1,f.AA1.
{
if11%.is.;1strc0p1tit,%.titlu.AA0..
{ printf1-,n Cod7 :d-,%.cod.;
printf1-,n Gitlu 7 :J10s-,%.titlu .;
printf1-,n utor7 :J10s-,%.autor.;
printf1-,n 9ditura7 :J10s-,%.editura.;
printf1-,n n aparitie7 :d-,%.an_aparitie.;
printf 1-,n 2ret [(?C] 7:d-,%.pret.;
printf1-,n Cantitate7:d-,%.cantitate.;

printf1-,n6666666666666666666666666666666666666-.;
}

}
fclose 1f.;
}
else
{
printf1-9roare la deschidere a fisierului :s-,nu0ef.;
}
}