Proiect Fisiere Relative - Algoritmi in Programare

Imagine preview
(6/10 din 4 voturi)

Acest proiect trateaza Proiect Fisiere Relative - Algoritmi in Programare.
Mai jos poate fi vizualizat un extras din document (aprox. 2 pagini).

Arhiva contine 5 fisiere doc, cpp, exe, txt, dat de 14 pagini (in total).

Iti recomandam sa te uiti bine pe extras si pe imaginile oferite iar daca este ceea ce-ti trebuie pentru documentarea ta, il poti descarca. Ai nevoie de doar 6 puncte.

Domeniu: Limbaje de Programare

Extras din document

Proiectul contine un meniu pt creearea si accesarea datelor despre elevii olimpici, memorate intr-un fisier relativ. Se defineste structura elev care contine campurile: nume (de tip sir de caractere), prenume (de tip sir de caractere),

nrmat (numar matricol), varsta (de tip intreg), clasa (de tip intreg), olimp(olimpiada (de tip sir de caractere)), premiul (de tip intreg). "Is" reprezinta indicatorul de stare, folosit in fisierul relativ pentru a determina daca

exista sau nu intregistrare pe pozitia respectiva.

typedef struct {int is;

char nume[30];

char prenume[20];

int nrmat;

int varsta;

int clasa;

char olimp[20];

int premiul;

}elev;

Functia nrart cu 2 parametrii, va returna numarul de articole memorate in fisierul transmis ca parametru. In variabila s se memoreaza cu ajutorul functiei ftell(f), pozitia curenta in fisier (în numãr de octeti fata de începutul fisierului). Ne pozionam la sfarsitul fisierului prin functia fseek(f,0,2), 2 semnifica sfarsitul de fisier si 0 reprezinta deplasamentul fata de sfarsitul de fisier. In p se memoreaza pozitia actuala, si aflandu-ne la sfarsitul fisierului in p se va memora

lungimea totala a zonei de memorie asociata tuturor articolelor din fisier. Numarul de articole din fisier este determinat prin impartirea lungimii totale a zonei de memorie asociata tuturor articolelor la lungimea unui singur articol

(prin parametrul l va fi transmisa lungimea zonei de memorie asociate articolului elev prin operatorul sizeof(elev) ).

int nrart(FILE *f, int l)

{int p,n;int s;

s=ftell(f);

fseek(f,0,2);

p=ftell(f);

n=p/l;

fseek(f,s,0);

return(n);

}

Functia CREARE creaza fisierul binar "elev.dat". Fisierul se deschide in modul wb+ care suprascrie un fisier existent sau creeaza unul nou, fiind permise atât citiri cât si scrieri pentru fisier binar.Daca fisierul poate sau nu poate fi creat se va afisa un mesaj corespunzator.

void creare(FILE *f)

{

if (f=fopen("elev.dat","wb+"))

printf("n fisierul a fost creat n");

else printf("n fisierul nu poate fi creat");

fclose(f);

}

Functia ADAUGARE adauga date in fisier. Se deschide fisierul in modul rb+ pentru consultare si actualizare fisier binar. Se citeste de la tastatura numarul relativ, n, reprezentand pozitia de pe lista a unui elev. Intr-o structura while se verifica sfarsitul de fisier cu functia feof(f). Cat timp nu s-a ajuns la sfarsitul

inserarii (ctrl+z) se face prelucrarea: avem 2 cauzuri- n citit sa fie mai mare decat numarul de articole deja adaugate in fisier, caz in care adaugarea se face la sfarsit, sau n sa fie mai mic, caz in care se face un fel de inserare in fisier.

Daca avem n in primul caz ne pozitionam la sfarsitul fisierului, se face o preformare dinamica (se scriu articole cu indicatorul de stare is=0 pana la pozitia n, pe care vrem sa adaugam noul articol. Se citesc de la tastatura caracteristicile campurilor articolului in variabila e de tip elev si se scrie artcolul in fiser cu functia fwrite(articolul e, pe o lungime sizeof(elev), 1 singura data, in fisierul f). In cazul in care n este mai mic decat numarul de articole din fisier, ne pozitionam in fisier dupa primele n-1 articole, verificam daca indicatorul de stare este 0, adica nu exista articol pe pozitia respectiva, se citeste si se scrie articolul pe pozitia n. Daca avem articol pe pozitia respectiva se va da un mesaj corespunzator.

void adaugare(FILE *f)

{

elev e; int n,i;

f=fopen("elev.dat","rb+");

printf("n Pentru a adauga date in fisier dati n, pentru a incheia CTRL+Z");

printf("n n=");scanf("%d",&n);

while (!feof(stdin))

{

if (n>nrart(f,sizeof(elev)))

{

fseek(f,0,2);

e.is=0;

for (i=nrart(f,sizeof(elev))+1;i<n;i++){e.is=0;

fwrite(&e,sizeof(elev),1,f);}

e.is=1;

printf("nume: "); fflush(stdin);scanf("%s",&e.nume);

printf("prenume: "); scanf("%s",&e.prenume);

printf("nr. mat: ");scanf("%d",&e.nrmat);

printf("varsta: ");scanf("%d",&e.varsta);

printf("clasa: "); scanf("%d",&e.clasa);

printf("olimpiada: ");scanf("%s",&e.olimp);

printf("premiul: ");scanf("%d",&e.premiul);

Fisiere in arhiva (5):

  • alg raluca .cpp
  • alg raluca .exe
  • elev.dat
  • elev1.txt
  • proiect alg raluca.doc

Alte informatii

ase-informatica ec-an 2 proiectu contine crearea fis rel, adaugare in fis rel, stergere, modificare, cautare si altele, toate intr-un meniu. arhiva contine sursa in c++, executabilul, descrierea completa in word si un fisier exemplu pentru rulare.