Extras din proiect
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);
Preview document
Conținut arhivă zip
- alg raluca .cpp
- alg raluca .exe
- elev.dat
- elev1.txt
- proiect alg raluca.doc