Extras din proiect
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, prêt si cantitate. , cu urmatoarea structura cod(int cod), titlu( char titlu[30]), autor(char autor[30]),editura(char editura[30]),an_aparitie(int an_aparitie ), prêt (int prêt) , cantitate (int cantitate ),categorie(char categorie [30]).
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;
Utilizatorul are la dispozitie un meniu cu mai multe optiuni:
1. Creare
2. Adaugare Carte
3. Stergere carte
4. Modificare carte
5. Copiere in fis text
6. Afisare carti
7. Raport pe an_aparitie si
8. Cautare autor
9. Cautare titlu
0. Iesirenn")
Codul sursa al meniului este :
void meniu()
{
printf ("nnnn Program Gestiune Librarien ");
printf("nnn");
printf("**********************************n");
printf("Alegeti o operatie:nn");
printf("1. Creare nn");
printf("2. Adaugare Carte nn");
printf("3. Stergere carte nn");
printf("4. Modificare cartenn");
printf("5. Copiere in fis textnn");
printf("6. Afisare carti nn");
printf("7. Raport nn");
printf("8. Cautare autornn");
printf("9. Cautare titlunn");
printf("0. Iesirenn");
printf("**********************************n");
}
functie ce va fi apelata in programul principal :
void main()
{
FILE *f;
int opt;
meniu();
printf("Introduceti optiunea: ");
scanf_s("%d",&opt);
while(opt)
{
switch(opt)
{
case 1:
printf("Ai ales sa creezi fisierul pentru gestiunea cartilorn");
creare();
break;
case 2:
printf(" Ai ales sa adaugi o carte n");
adaugare();
break;
case 3:
printf("Ai ales sa stergi o carte n");
stergere ();
break;
case 4:
modificare_carti();
break;
case 5:
copiere_in_fis_text();
break;
case 6:
afisare_carti();
break;
case 7: raport();
break;
case 8:
cautare_autor();
break;
case 9:
cautare_titlu();
break;
default:
printf("Optiune inexistenta! Reincearca!");
break;
}
meniu();
printf("Introduceti optiunea: ");
scanf_s("%d",&opt);
}
}
Limbajul C nu oferă o funcţie standard pentru calcularea numărului de articole dintr-un fişier binar, deoarece, din punctul de vedere al limbajului, fişierele nu conţin articole. Din punctul de vedere al utilizatorului, cunoscând dimensiunea unui articol, se poate calcula numărul de articol de fişier, împărţind lungimea acestuia la lungimea unui articol (ambele măsurate în număr de octeţi). Lungimea 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_art(FILE* f, int l)
{long poz=ftell(f);
fseek(f,0,2);
int c=ftell(f)/l;
fseek(f,poz,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
Preview document
Conținut arhivă zip
- Algoritmi - Fisiere Organizate Relativ.doc
- final.cpp