Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
TEMA SI CERINTELE PROIECTULUI
Evidenta bauturilor dintr-o crama. Aplicatia se va realiza in limbajul C folosind fisiere text si fisiere binare. Se va permite crearea fisierelor atat de la tastatura cat si prin citirea unor date din fisiere text (ex: datele produselor din crama pot fi preluate din fisier text).
Aplicatia trebuie sa aiba o interfata cu utilizatorul sub forma unui meniu care sa permite operatii de genul: creare fisiere, adaugare in fisiere, stergere unei inregistrari din fisier, modificarea unei inregistrari din fisier, listarea continutului fiecarui fisier.
SPECIFICATII PROGRAM
La exucutia programului pe ecran apare un meniu principal compus din 6 optiuni :
1-Creare
2-Adaugare
3-Stergere
4-Modificare
5-Listare
0-Exit
Utilizatorul pentru a alege una din optiuni trebuie sa tasteze una din cifrele corespunzatoare fiecarei optiuni din meniu.
Daca utilizatorul tasteaza cifra '1' adica se alege 'Creare' atunci va aparea un alt meniu cu 4 optiuni.
Dupa preferinte utilizatorul poate alege una din cele 4 optiuni tastand cifra corspunzatoare fiecarei optiuni din meniu.
Optiunea '1- Creare fisier apr de la tastatura' realizeaza crearea pe disc a unui fisier binar numit 'crama.dat', apoi permite introducerea datelor in fisier de catre utilizator prin intermediul consolei (tastaturii). Fiecare inregistrare a fisierului trebuie sa contina urmatoarele campuri: nrprod, denumirea,categoria,pretlitru,cantitatetotala. Dupa introducerea acestor date de catre utilizator apare un mesaj prin care utilizatorul este intrebat daca mai doreste sa introduca si alte date. Daca se apasa tasta 'N' atunci procesul de introducere a datelor se incheie si se revine la meniul anterior (meniul de creare). Daca se apasa orice alta tasta se permite introducerea unei noi inregistrari in fisierul 'crama.dat'.
Optiunea '2- Creare fisier bani de la tastatura' realizeaza crearea pe disc a unui fisier binar numit 'bani.dat', apoi permite introducerea datelor in fisier de catre utilizator prin intermediul consolei (tastaturii). Fiecare inregistrare a fisierului trebuie sa contina urmatoarele campuri: nrprod,denumirea,data,cantitatevanduta,baniincasati. Pentru introducerea mai multor date operatia se executa ca conform celor spuse anterior la optiunea '1'.
Optiunea '3- Creare fisier apr dintr-un fisier text' realizeaza crearea pe disc a fisierului binar 'crama.dat', numai ca toate datele nu vor mai fi citite de la tastatura ci vor fi preluate dintr-un fisier text numit 'fisier.txt'. in acest fisier text fiecare inregistrare a fost scrisa pe o linie iar fiecare camp al inregistrarii este despartit de urmatorul prin spatiu. Ca in exemplul urmator:
1 Grasä de Cotnari 30000 250litri
2 Busuioacä de Bohotin 25000 500 litri
3 Pinot Noir 200000 200 litri
4 Bordeaux 1500000 30 litri
5 Muscat Otonel 45000 300 litri
Murfatlar 25000 350 litri
Optiunea '0-Exit' permite revenirea la meniul principal, adica primul meniu din aplicatie.
Daca utilizatorul tasteaza cifra '2' adica se alege 'Adaugare' atunci va aparea un alt meniu ca in figura urmatoare:
Optiunea '1-Adaugare in fisierul apr' pemite adaugarea de la tastatura a unei noi inregistrari in fisierul 'crama.dat' deja creat. Procedeul de adaugare este similar cu cel aratat la crearea fisierului 'crama.dat' de la tastatura.
Optiunea '2-Adaugare in fisierul bani' permite adaugarea de la tastatura a unei noi inregistrari in fisierul 'bani.dat' deja creat. Procedeul de adaugare este similar cu cel aratat la crearea fisierului 'bani.dat'.
Optiunea '0-Exit' revine la meniul principal.
Daca utilizatorul tasteaza cifra '3' in meniul principal, adica se alege 'Stergere' atunci va aparea un alt meniu cu 2 optiuni:
Optiunea '1-Stergere din fisierul apr' permite stergerea unui produs din fisierul 'crama.dat', produsul va fi identificat prin numarul produsului nrprod. In cazul in care nr produsului introdus nu se gaseste printre numerele produselor din fisier apare mesajul :'Acest produs nu exista in crama'.
Optiunea '2-Stergere din fisierul bani' permite stergerea unei inregistrari din fisierul 'bani.dat', inregistrarea va fi identificata prin nr. produsului. In cazul in care inregistrarea nu este identificata, adica nr. produsului a fost introdus incorect apare mesajul: 'Acest produs nu exista.'
Optiunea '0-Exit' revine la meniul principal.
Daca utilizatorul tasteaza cifra '4' din meniul principal, adica se alege 'Modificare' atunci va aparea un alt meniu cu doua optiuni :
Optiunea '1-Modificare din fisierul crama' permite modificarea datelor unui produs din fisierul 'crama.dat', produsul va fi identificat prin nrprod. In cazul in care numarul produsului introdus nu se gaseste printre numerele produselor din fisier apare mesajul :'Acest produs nu exista in crama'. Modificarea se aplica tuturor campurilor din inregistrare.
Optiunea '2-Modificare in fisierul bani' permite modificarea unei inregistrari din fisierul 'bani.dat', inregistrarea va fi identificata prin numarul produsului nrprod. In cazul in care inregistrarea nu este identificata, adica fie nrprod a fost introdus incorect apare mesajul: 'Acest produs nu exista.' Modificarea se aplica tuturor campurilor din inregistrare.
Optiunea '0-Exit' revine la meniul principal.
Daca utilizatorul tasteaza cifra '5' din meniul principal, adica se alege 'Listare' atunci va aparea un alt meniu cu 3 optiuni:
Optiunea '1-Listarea fisierului crama' permite afisarea datelor din fisierul 'crama.dat' ca in figura urmatoare:
Optiunea '2-Listarea fisierului cu bani' permite afisarea datelor din fisierul 'bani.dat'
Optiunea '0-Exit' revine la meniul principal.
Daca utilizatorul tasteaza cifra '0' din meniul principal, adica se alege 'Exit' atunci aplicatia se incheie.
SPECIFICATII AVANSATE
Codul aplicatiei este alcatuit dintr-un singur fisier numit 'fisier.c' scris in limbajul C.
Programul foloseste 2 structuri de date definite numite crama, bani. Fiecare din ele reprezinta structura de date a inregistrarilor din cele 2 fisiere binare folosite in program si anume: 'crama.dat' si 'bani.dat' .
Tabelul ce descrie structura crama este urmatorul:
Denumire camp |
Tip de date |
Tip de date in C |
Marime |
nrprod |
Intreg |
Int | |
denumirea |
Sir de caractere |
Char(15) |
15 caractere |
categoria |
Sir de caractere |
Char(15) |
15 caractere |
Pretlitru |
Intreg |
longInt | |
Cantitatetotala |
Intreg |
longInt |
Tabelul ce descrie structura bani este urmatorul:
Denumire camp |
Tip de date |
Tip de date in C |
Marime |
Nrprod |
Intreg |
Int | |
Denumirea |
Sir de caractere |
Char(15) |
15 caractere |
Ata |
Sir de caractere |
Char(15) |
15 caractere |
Cantitatevanduta |
Intreg |
longInt | |
baniincasati |
Intreg |
longInt |
In program se vor folosi 2 variabile globale f1 si f2 de tip FILE*. O variabila globala apr de tip crama, o variabila globala bn de tip bani. Pentru alegerea optiuniilor din meniul principal si apoi din fiecare submeniu se vor folosi doua variabile globale alege si alege1 de tip caracter (char).
Programul foloseste mai multe functii fiecare realizand o anumita operatie si o functie principala (programul principal):
void creare_fis_apr(void) - functia care permite crearea fisierului 'crama.dat'
void creare_fis_bani(void) - functia care permite crearea fisierului 'bani.dat'
void adaugare_fis_apr(void) - functia care permite adaugarea in fisierul 'crama.dat'
void adaugare_fis_bani(void) - functia care permite adaugarea in fisierul 'bani.dat'
void listare_fis_apr(void) - functia care permite listarea continutului fisierului 'crama.dat'
void listare_fis_bani(void) - functia care permite listarea continutului fisierului 'bani.dat'
void stergere_fis_apr(void) - functia care permite stergerea unei inregistrari in fisierul 'crama.dat'
void stergere_fis_bani(void) - functia care permite stergerea unei inregistrari in fisierul 'bani.dat'
void modifica_fis_apr(void) - functia care permite modificarea unei inregistrari in fisierul 'crama.dat'
void modifica_fis_bani(void) - functia care permite modificarea unei inregistrari in fisierul 'bani.dat'
void creare_apr_Txt() - functia care permite creare fisierului 'crama.dat' din fisierul text 'fisier.txt'
void main(void) - functia programului principal; aceasta functie afiseaza meniul principal al programului precum si submeniurile atasate fiecarei optiuni, si de asemenea permite alegerea unei optiuni, iar in functie de optiunea aleasa se apeleaza una din functiile descrise anterior.
SPECIFICATII DETALIATE
Functia de crearea a fisierului 'crama.dat'
Aceasta functie este functia creare_fis_apr, functia contine o singura variabila locala ch de tip char folosita pentru a permite utilizatorului sa raspunda la intrebarea daca mai doreste sa introduca date in fisier.
In primul rand se deschide fisierul 'crama.dat' pentru creare adica se foloseste optiunea'wb' pentru al doilea parametru al functiei fopen, apoi intr-un ciclu do-while se citesc datele de la tastatura in variabila apr de tip crama si se scriu in fisierul 'crama.dat' cat timp nu se raspunde la intrebarea amintita mai sus cu caracterul 'N' sau 'n', adica cat timp ch!='n'and ch!='N'. Citirea datelor in variabila apr se face camp cu camp. Ca in pseudocodul urmator:
functie creare_fis_apr()cat timp(ch!='n' and ch!='N')
*inchide fisierul 'crama.dat'*
Functia de crearea a fisierului 'bani.dat'
Aceasta functie este functia creare_fis_bani, functia contine o singura variabila locala ch de tip char folosita pentru a permite utilizatorului sa raspunda la intrebarea daca mai doreste sa introduca date in fisier.
In primul rand se deschide fisierul 'bani.dat' pentru creare adica se foloseste optiunea'wb' pentru al doilea parametru al functiei fopen, apoi intr-un ciclu do-while se citesc datele de la tastatura in variabila bn de tip bani si se scriu in fisierul 'bani.dat' cat timp nu se raspunde la intrebarea amintita mai sus cu caracterul 'N' sau 'n', adica cat timp ch!='n'and ch!='N'. Citirea datelor in variabila bn se face camp cu camp. Ca in pseudocodul urmator:
functie creare_fis_bani()cat timp(ch!='n' and ch!='N')
*inchide fisierul 'bani.dat'*
Functia de adaugare in fisierului 'crama.dat'
Aceasta functie este functia adaugare_fis_apr, functia contine o singura variabila locala ch de tip char folosita pentru a permite utilizatorului sa raspunda la intrebarea daca mai doreste sa introduca date in fisier.
Se deschide fisierul 'crama.dat' pentru adaugare adica se foloseste optiunea'ab' pentru al doilea parametru al functiei fopen, se pozitioneaza cursorul in fisier la sfarsitul fisierului adica parametrul 3 al functiei fseek este SEEK_END, apoi intr-un ciclu do-while se citesc datele de la tastatura in variabila apr de tip crama si se scriu in fisierul 'crama.dat' cat timp nu se raspunde la intrebarea amintita mai sus cu caracterul 'N' sau 'n', adica cat timp ch!='n'and ch!='N'. Citirea datelor in variabila apr se face camp cu camp. Ca in pseudocodul urmator:
functie adaugare_fis_apr()cat timp(ch!='n' and ch!='N')
*inchide fisierul 'crama.dat'*
Functia de adaugare in fisierului 'bani.dat'
Aceasta functie este functia adaugare_fis_bani, functia contine o singura variabila locala ch de tip char folosita pentru a permite utilizatorului sa raspunda la intrebarea daca mai doreste sa introduca date in fisier.
Se deschide fisierul 'bani.dat' pentru adaugare adica se foloseste optiunea'ab' pentru al doilea parametru al functiei fopen, se pozitioneaza cursorul in fisier la sfarsitul fisierului adica parametrul 3 al functiei fseek este SEEK_END, apoi intr-un ciclu do-while se citesc datele de la tastatura in variabila bn de tip bani si se scriu in fisierul 'bani.dat' cat timp nu se raspunde la intrebarea amintita mai sus cu caracterul 'N' sau 'n', adica cat timp ch!='n'and ch!='N'. Citirea datelor in variabila not se face camp cu camp. Ca in pseudocodul urmator:
functie adaugare_fis_bani()cat timp(ch!='n' and ch!='N')
*inchide fisierul 'bani.dat'*
Functia de listare a fisierului 'crama.dat'
Aceasta functie este functia listare_fis_apr.
Se deschide fisierul 'crama.dat' pentru citire adica se foloseste optiunea'rb' pentru al doilea parametru al functiei fopen. Se afiseaza un cap de tabel, apoi se citeste in variabila apr o inregistrare din fisier, apoi intr-un ciclu while cat timp nu se ajunge la sfarsitul de fisier se afiseaza datele din campurile variabilei structura apr, iar apoi se citeste o alta inregistrare din fisierul 'crama.dat' si se reia ciclul. Ca in pseudocodul urmator:
functie listare_fis_apr()
*inchide fisierul 'crama.dat'*
Functia de listare a fisierului 'bani.dat'
Aceasta functie este functia listare_fis_bani.
Se deschide fisierul 'bani.dat' pentru citire adica se foloseste optiunea'rb' pentru al doilea parametru al functiei fopen. Se afiseaza un cap de tabel, apoi se citeste in variabila bn o inregistrare din fisier, apoi intr-un ciclu while cat timp nu se ajunge la sfarsitul de fisier se afiseaza datele din campurile variabilei structura bn, iar apoi se citeste o alta inregistrare din fisierul 'bani.dat' dupa care se reia ciclul. Ca in pseudocodul urmator:
functie listare_fis_bani()
*inchide fisierul 'bani.dat'*
Functia de stergere in fisierului 'crama.dat'
Aceasta functie este functia stergere_fis_apr. Functia contine urmatoarele variabile locale: f de tip FILE*, nr de tip integer variabila in care se citeste numarul produsului ce se doreste sters din fisier, v variabila de tip integer folosita ca o variabila booleana care verifica daca inregistrarea a fost sau nu gasita in fisier.
Mai intai se citeste de la tastatura numarul produsului ce se doreste a se sterge.
Se deschide pentru citire fisierul 'crama.dat' si pentru creare un nou fisier numit 'sterg.dat', avand rolul de fisier temporal.
Metoda de stergere folosita in aceasta functie este urmatoarea: se citeste inregistrare cu inregistrare din fisierul 'crama.dat', daca numarul produsului cerut este diferit de numarul produsului din inregistrare atunci inregistrarea curenta se scrie intr-un fisier 'sterg.dat', daca se gaseste un numar de produs egal cu nrprod din inregistrare se face v=1, apoi in ambele cazuri se trece la citirea urmatoarei inregistrari din fisier pana cand se ajunge la sfarsitul fisierului. Daca dupa parcurgerea fisierului 'crama.dat', v are valoarea 0, inseamna ca produsul cautat cu nr. produsului cerut nu exista in fisier.
Deci in fisierul 'sterg.dat' avem acum toate inregistrarile din fisierul 'crama.dat' mai putin cea a carui nr. de produs s-a cerut sa se stearga. In final se sterge fizic de pe disc fisierul 'crama.dat' si apoi se redenumeste fisierul 'sterg.dat' cu numele 'crama.dat'. Algoritmul este aratat in pseudocodul urmator:
functie stergere_fis_apr()
daca(v==0)atunci
scrie 'Acest produs nu exista in crama'
*inchide fisierul 'crama.dat'*
*inchide fisierul 'sterg.dat'*
*sterge fisierul 'crama.dat' de pe disc*
*redenumeste fisierul 'sterg.dat' in 'crama.dat'*
Functia de stergere in fisierului 'bani.dat'
Aceasta functie este functia stergere_fis_bani. Functia contine urmtoarele variabile locale: f de tip FILE*, nr de tip integer variabila in care se citeste numarul produsului ce se doreste sters din fisier, v variabila de tip integer folosita ca o variabila booleana care verifica daca inregistrarea a fost sau nu gasita in fisier .
Mai intai se citeste de la tastatura numarul produsului si data. Inregistrarea care se va sterge se va identifica dupa numar produsului si data.
Se deschide pentru citire fisierul 'bani.dat' si pentru creare un nou fisier numit 'sterg.dat', avand rolul de fisier temporal.
Metoda de stergere folosita in aceasta functie este cea folosita si la functia anterioara doar ca identificarea se face acum dupa doua campuri nrprod si data . Daca dupa parcurgerea fisierului 'bani.dat', v are valoarea 0, inseamna ca inregistrarea cautata cu nr. Produsului si data cautata nu exista in fisier.
Deci in fisierul 'sterg.dat' avem acum toate inregistrarile din fisierul 'bani.dat' mai putin inregistrarea ce se dorea stersa. In final se sterge fizic de pe disc fisierul 'bani.dat' si apoi se redenumeste fisierul 'sterg.dat' cu numele 'bani.dat'. Algoritmul este aratat in pseudocodul urmator:
functie stergere_fis_bani()
daca(v==0)atunci
scrie 'Acesta inregistrare nu exista'
*inchide fisierul 'bani.dat'*
*inchide fisierul 'sterg.dat'*
*sterge fisierul 'bani.dat' de pe disc*
*redenumeste fisierul 'sterg.dat' in 'bani.dat'*
Functia de modificare a fisierului 'crama.dat'
Aceasta functie este functia modifica_fis_apr. Functia contine doua variabile locale nr de tip integer variabila in care se citeste numarul produsului ale carui date se doresc modificate, v variabila de tip integer folosita ca o variabila booleana care verifica daca inregistrarea a fost sau nu gasita in fisier.
Se deschide fisierul 'crama.dat' pentru citire si adaugare adica se foloseste optiunea'rb+' pentru al doilea parametru al functiei fopen. Intr-un ciclu while cat timp nu se ajunge la sfarsitul de fisier si v este diferit de 0 se testeaza daca nr este egal cu nrprod din inregistrare in caz afirmativ se modifica datele inregistrarii curente, intai se citesc noile date in variabila structura apr apoi aceasta se scrie in fisierul 'crama.dat', dupa care v se face 1 si se reia ciclul.
Daca dupa parcurgerea fisierului 'crama.dat', v are valoarea 0, inseamna ca inregistrarea cautata cu nr. produsului nu exista in fisier. In final se inchide fisierul. Pseudocodul este urmatorul:
functie modifica_fis_apr()
*citeste in apr o inregistrare din 'crama.dat'*
}
daca(v==0)atunci
scrie 'Acest produs nu exista'
*inchide fisierul 'produs.dat'*
Functia de modificare a fisierului 'bani.dat'
Aceasta functie este functia modifica_fis_bani. Functia contine trei variabile locale nr de tip integer variabila in care se citeste numarul produsului ale carui date se doresc modificate, v variabila de tip integer folosita ca o variabila booleana care verifica daca inregistrarea a fost sau nu gasita in fisier si data de tip integer, folosita pentru a citi de la tastatura data
Se deschide fisierul 'bani.dat' pentru citire si adaugare adica se foloseste optiunea'rb+' pentru al doilea parametru al functiei fopen. Intr-un ciclu while cat timp nu se ajunge la sfarsitul de fisier si v este diferit de 0 se testeaza daca nr este egal cu nrprod din inregistrare si data este egala cu data din inregistrare in caz afirmativ se modifica datele inregistrarii curente, intai se citesc noile date in variabila structura bn apoi aceasta se scrie in fisierul 'bani.dat', dupa care v se face 1 si se reia ciclul.
Daca dupa parcurgerea fisierului 'bani.dat', v are valoarea 0, inseamna ca inregistrarea cautata cu nr. de legitimatie nu exista in fisier. In final se inchide fisierul. Pseudocodul este urmatorul:
functie modifica_fis_bani()
*citeste in bn o inregistrare din 'bani.dat'*
}
daca(v==0)atunci
scrie 'Aceasta inregistrare nu exista'
*inchide fisierul 'bani.dat'*
Functia de creare a fisierului 'crama.dat' din 'fisier.txt'
Aceasta functie este functia creare_apr_Txt(). Aceasta functie citeste caracter cu caracter o linie din fisierul text 'fisier.txt', o transforma in inregistrare tip structura crama apoi inscrie aceasta inregistrare in fisierul 'crama.dat'. Fiecare linie din fisierul text se scrie intr-un tablou de caractere sau pointer de char numit sir apoi datele sunt incrise in campurile variabilei apr folosind o functie sscanf. Evident fisierul 'fisier.txt' se deschide pentru citire, iar fisierul 'crama.dat' se deschide pentru creare'. In functie se mai folosesc pe langa variabila locala sir si inca 3 variabile locale ft de tip FILE*, ch de tip char folosita pentru a citi fiecare caracter din fisierul 'fisier.txt', si i de tip integer care reprezinta indexul tabloului sir.
functie creare_apr_Txt()
atribuie sir[i]<-'0'
*citeste apr din sir*
*scrie apr in fisierul 'crama.dat'*
*inchide fisierul 'crama.dat'*
*inchide fisierul 'fisier.txt'*
Programul principal
Functia main() implementeaza meniul discutat la specificatiile de program pentru fiecare optiune se deschide un alt submeniu iar pentru fiecare optiune a acestuia se apeleaza una din functiile descrise anterior. Acest lucru este evidentiat in urmatorul pseudocod.
Programul principal
}cat timp(alege1!='0')
'2': repeta
}cat timp(alege1!='0')
'3': repeta
}cat timp(alege1!='0')
'4': repeta
}cat timp(alege1!='0')
'5':repeta
}cat timp(alege1!='0')
}cat timp(alege!='0');
CODUL PROGRAMULUI
//Evidenta fructelor si legumelor dintr-un crama
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct crama;
typedef struct bani;
FILE *f1, *f2;
crama apr;
bani bn;
char alege, alege1;
void creare_fis_apr(void)while((ch!='n')&&(ch!='N'));
fclose(f1);
void creare_fis_bani(void)while((ch!='n')&&(ch!='N'));
fclose(f2);
void adaugare_fis_apr(void)
while((ch!='n')&&(ch!='N'));
fclose(f1);
void adaugare_fis_bani(void)
while((ch!='n')&&(ch!='N'));
fclose(f2);
void listare_fis_apr(void)
getche();
fclose(f1);
void listare_fis_bani(void)
fclose(f2);
getche();
void stergere_fis_apr(void)
fread(&apr,sizeof(crama),1,f1);
if(v==0)
fclose(f1);
fclose(f);
remove('crama.dat');
rename('sterg.dat','crama.dat');
void stergere_fis_bani(void)
fread(&bn,sizeof(bani),1,f1);
}
if(v==0)
fclose(f1);
fclose(f);
remove('bani.dat');
rename('sterg.dat','bani.dat');
void modifica_fis_apr(void)
fread(&apr,sizeof(crama),1,f1);
}
if(v==0)
fclose(f1);
void modifica_fis_bani(void)
fread(&bn,sizeof(bani),1,f1);
}
if(v==0)
fclose(f1);
void creare_apr_Txt()
sir[i]='0';
sscanf(sir,'%d %s %s %ld %sn',&apr.nrprod,apr.denumirea,apr.categoria,&apr.pretkg,apr.cantitatetotala);
fwrite(&apr,sizeof(crama),1,f1);
ch=fgetc(ft);
}
fclose(f1);
fclose(ft);
printf('n Fisierul crama.dat a fost creat din fisierul fisier.txtn');
getch();
void main(void)
}while(alege1!='0');
}break;
case '2':
}while(alege1!='0');
}break;
case '3':
}while(alege1!='0');
}break;
case '4':
}while(alege1!='0');
}break;
case '5':
}while(alege1!='0');
}break;
}
}while(alege!='0');
Politica de confidentialitate |
Copyright © 2024 - Toate drepturile rezervate