Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE CIBERNETICA,STATISTICA
SI INFORMATICA ECONOMICA
ALGORITMI IN PROGRAMARE
GESTIUNEA UNUI MAGAZIN
VESTIMENTAR
VIJA RADU
AN II,SERIA A,GRUPA 1026
Prezentare proiect
Tema proiectului:
Sa se realizeze in limbajul C un program multifunctional pentru gestiunea
fisierelor.
5. Modificarea datelor din fisier in functie de nevoile concrete ale temei alese.
void meniu()
{
printf("\t**************************************************\n");
printf("\t*** Alege o optiune din cele enumerate mai jos ***\n");
printf("\t**************************************************\n\n\n");
printf("\t 1. Creare date produse vestimentare \n");
printf("\t 2. Afisare date produsevestimentare\n");
printf("\t 3. Listare date produse vestimentare\n");
printf("\t 4. Adaugare date fisier \n");
printf("\t 5. Consultare in acces direct\n");
printf("\t 6. Consultare in acces secvential\n");
printf("\t 7. Modificare date fisier \n");
printf("\t 8. Grade de total la produse vestimentare \n");
printf("\t 0. Iesire \n");
}
Structura este:
fseek(f,0,2) ;
int n=ftell(f)/l;
fseek(f,poz_ cur,0);
return n;
}
Functia CREARE creaza fisierul binar relativ "prod.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;
int n,i;
char prod[50],s1[20];
char fis[20];
fflush(stdin);
printf("\n Nume Fisier: => ");gets(s1);
f=fopen(s1,"wb");
if (!f)
{
printf("Fisierul o sa fie creat!!");
}
else
{
fclose(f);
printf("\n Fisierul exista deja!");
printf("\n Continuati ?");
printf("\n(Yes=1|No=0) => ");scanf("%d",&i);
if(i==0)
{
return;
}
}
printf("Dati numele fisierului :");
fflush(stdin);
scanf("%s",&fis);
while(!(f=fopen(fis,"w+b"))){
printf("\nNu poate fi creat fisierul specificat\n");
printf("Dati numele fisierului :");
fflush(stdin);
scanf("%s",&fis);
}
p.is=1;
fseek(f,n*sizeof(Produse),0);
fwrite(&p,sizeof(Produse),1,f);
fseek(f,1,1);
}
printf("\nMai doriti sa adaugati produse? (Y=da,N=nu");
r=getche();
}
fclose(f);
}
Functia AFISARE listeaza articolele din fisier pe ecran. Fisierul binar se
dechide in modul rb- consultare fisier binar. Intr-o structura while care verifica
sfarsitul fisierului (feof(f)) se citesc articolele (verificand indicatorul de stare x.is!
=0) pe rand din fisierul f, in variabila x de tip prod, se afiseaza pe ecran.
void afisare()
{ FILE *f;
int n,i;
char prod[50],s1[20];
char fis[20];
fflush(stdin);
f=fopen(s1,"wb");
if (!f)
else
fclose(f);
if(i==0)
return;
fflush(stdin);
scanf("%s",&fis);
while(!(f=fopen(fis,"w+b"))){
fflush(stdin);
scanf("%s",&fis);
while(toupper(r) == 'Y')
Produse p;
int exista=0;
int nr_art=nr_articole(f,sizeof(Produse));
if(n>=nr_art)
fseek(f,0,2);
Produse q;
q.is=0;
for(int i=nr_art;i<n;i++)
{fwrite(&q,sizeof(Produse),1,f);
fseek(f,1,1);
}
fseek(f,n*sizeof(Produse),0);
else
{fseek(f,n*sizeof(Produse),0);
fread(&p,sizeof(Produse),1,f);
if(p.is==1) exista=1;
else
fflush(stdin);
p.is=1;
fseek(f,n*sizeof(Produse),0);
fwrite(&p,sizeof(Produse),1,f);
fseek(f,1,1);
}
fclose(f);
void adaugare_fisier()
{
FILE *f;
int n;
char prod[50];
char fis[20];
}
Listarea fisierului
FILE *f,*g;
char prod[50];
Produse p;
int i;
char fis[20];
char fis1[20];
fflush(stdin);
scanf("%s",&fis);
while(!(f=fopen(fis,"rb+"))){
fflush(stdin);
scanf("%s",&fis);
}
printf("Vreti sa afisare pe ecran sau intr-un fisier ?\n e - pt ecran, f -
pt fisier\n");
fflush(stdin);
scanf("%c",&choice);
fread(&(p),sizeof(Produse),1,(f));
while(!feof(f))
if(p.is)
{
printf("\n %d %s %8d %6d
",p.cod_articol_vestimentar,p.nume,p.pret,p.stoc);
fread(&(p),sizeof(Produse),1,(f));
else
fflush(stdin);
scanf("%s",&fis1);
while(!(g=fopen(fis1,"w"))){
fflush(stdin);
scanf("%s",&fis1);
//g=fopen("prod1.txt","w");
while(!feof(f))
if(p.is)
fprintf(g,"\n %d %s %d
",p.cod_articol_vestimentar,p.nume,p.pret,p.stoc);
fread(&(p),sizeof(Produse),1,(f));
fclose(g);
fclose(f);
getch();
Cautare se face intr-o structura while, atata timp cat nu s-a ajuns la sfarsitul
fisierului si nu s-a gasit produsul (verificarea se face cu ajutorul variabilei este care
are valoarea 0 daca nu s-a gasit eprodusul si ia valoarea 1 cand categoria de pret
s-a gasit intr-unlul dintre articolele existente in fisier).
void consultaresecv()
{ FILE *f,*g;
Produse p;
fflush(stdin);
printf("\n Introduceti numele fisierului : ");
char numef[30];
gets(numef);
f=fopen(numef,"rb");
if(!f)
printf(" \n eroare ");
else
{ int gasit;
char numeg[30];
fflush(stdin);
printf("\n Introduceti numele fisierului in care doriti sa creati lista: ");
gets(numeg);
g=fopen(numeg,"w+");
if(!g)
printf(" \n eroare ");
else
{ char categ[30];
printf("\n Introduceti categoria de produse ");
gets(categ);
while(!feof(stdin))
{
fseek(f,0,0);
fread(&p,sizeof(Produse),1,f);
fprintf(g,"\n %s categoria \n",categ);
fprintf(g," Denumire | Furnizor | Val totala \n");
gasit=0;
while(!feof(f))
{
if(strcmp(categ,p.categorie)==0 && p.is==1)
{fprintf(g,"\n %s %d %d " , p.nume,p.stoc,p.cant*p.pret );
gasit=1;}
fread(&p,sizeof(Produse),1,f);
}
if (gasit==0)
fclose(f);
}
Listare produse
void listare_fisier()
{
FILE *f,*g;
char prod[50];
Produse p;
int i;
char choice= 'c';
char fis[20];
char fis1[20];
printf("Dati numele fisierului de date :");
fflush(stdin);
scanf("%s",&fis);
while(!(f=fopen(fis,"rb+"))){
printf("\nNu poate fi accesat fisierul specificat\n");
printf("Dati numele fisierului de date :");
fflush(stdin);
scanf("%s",&fis);
}
fflush(stdin);
scanf("%c",&choice);
}
fread(&(p),sizeof(Produse),1,(f));
while(!feof(f))
{
if(p.is)
{
printf("\n %d %s %d %8d %6d
",p.cod_art,p.nume,p.cant,p.pret,p.stoc);
}
fread(&(p),sizeof(Produse),1,(f));
}
}
else
{ printf("Dati numele fisierului in care vreti sa salvati\n");
fflush(stdin);
scanf("%s",&fis1);
while(!(g=fopen(fis1,"w"))){
printf("\nNu poate fi accesat fisierul specificat\n");
printf("Dati numele fisierului in care vreti sa
salvati\n");
fflush(stdin);
scanf("%s",&fis1);
}
fread(&(p),sizeof(Produse),1,(f));
while(!feof(f))
{
if(p.is)
{
fprintf(g,"\n %d %s %d %d %d
",p.cod_art,p.nume,p.cant,p.pret,p.stoc);
}
fread(&(p),sizeof(Produse),1,(f));
}
fclose(g);
printf("\nSalvat ....");
fclose(f);
getch();
//--
void modif_fisier()
{
FILE *f;
char prod[20];
Produse p;
int n,i,j,e;
char fis[20];
printf("Dati numele fisierului de date :");
fflush(stdin);
scanf("%s",&fis);
while(!(f=fopen(fis,"rb+"))){
printf("\nNu poate fi accesat fisierul specificat\n");
printf("Dati numele fisierului de date :");
fflush(stdin);
scanf("%s",&fis);
}
while(n>=nr_articole(f,sizeof(Produse)))
{
printf("\nNu exista produsul cu numarul articol %d",n);
printf("\nCod articol: ");
fflush(stdin);
scanf("%d",&n);
}
fseek(f,n*sizeof(Produse),SEEK_SET);
fread(&(p),sizeof(Produse),1,(f));
if(!p.is)printf("\nNu exista produsul cu numarul articol %d",n);
else
printf("\nPretul nou: ");
fflush(stdin);
scanf("%d",&j);
while((j<0)||(j>p.pret))
{
printf("Pret incorect");
printf("\nDati alt pret: ");
fflush(stdin);
scanf("%d",&j);
}
p.pret=j;
fseek(f,n*sizeof(Produse),SEEK_SET);
fwrite(&(p),sizeof(Produse),1,(f));
}
fclose(f);
}
void TotalProducts()
{
FILE *f;
char prod[50];
Produse p;
int n,i;
char fis[20];
int cate = 0;
fread(&(p),sizeof(Produse),1,(f));
while(!feof(f))
{
if(p.is)
{
cate ++;
}
fread(&(p),sizeof(Produse),1,(f));
}
fflush(stdin);
printf("\n In total au fost gasite %i produse ", cate);
getch();
fclose(f);
}
Meniul este realizat printr-o structură alternativă de tip SWITCH, având
9 ramuri care execută funcţiile programului (subprograme). Dacă opţiunea
introdusă nu se regaseşte printre valorile valide, se va tipari un mesaj de
eroare: “Aţi introdus o optiune greşită!” .
void meniu()
printf("\t**************************************************\n");
printf("\t*** Alege o optiune din cele enumerate mai jos ***\n");
printf("\t**************************************************\n\n\n");
printf("\t 1. Creare date produse \n");
printf("\t 2. Afisare date produse\n");
printf("\t 3. Consultare acces direct\n");
printf("\t 4. Consultare acces secvential \n");
printf("\t 5. Adaugare date produse \n");
printf("\t 6. Problema grade de total \n");
printf("\t 7. Listare fisier tex\n");
printf("\t 8. Creare date produse pentru fisier indexat\n");
printf("\t 0. Iesire \n");
}
void main()
{
int exit=0;
meniu();
while(exit!=1)
{
int opt;
fflush(stdin);
printf("\n\t Introduceti optiunea: => ");scanf("%d",&opt);
if(opt<0)
{
opt=10;
}
switch (opt)
{
case 1:
creare();
break;
case 2:
afisare();
break;
case 3:
listare_fisier();
break;
case 4:
adaugare_fisier();
break;
case 5:
caut_nr_rel();
break;
case 6:
consultaresecv();
break;
case 7:
modif_fisier();
break;
case 8:
TotalProducts();
break;
case 9:
SmallPrice();
break;
case 0:
exit=1;
break;
default :
printf("\n\t === Optiune inexistenta ===");
break;
}
meniu();
}
}