Jump to content

Recommended Posts

  • Moderators
Posted

Sa se scrie un program in C care gestioneaza cartile unei biblioteci.Se va realiza un meniu prin care:

-Se vor introduce date despre carti: titlul, numele si prenumele autorului, domeniul (tehnic/literar la cererea utilizatorului); pentru cartile din domeniul literar se va preciza pretul, iar pentru cele din domeniul tehnic daca au mai fost editate sau nu.

-Se vor lista datele despre carti, in ordinea alfabetica descrescatoare a numelui si prenumelui autorului.

-Se vor lista cartile din domeniul tehnic in ordinea crescatoare a pretului.

-Se vor lista in ordinea alfabetica a numelui si prenumelui autorului cartile din domeniu literar care au mai fost editate.

-Se va afisa numarul cartilor cu un pret mai mic decat o suma indicata de utilizator.

Functia de ordonare alfabetica va fi aceeasi pentru cele doua cerinte.

Functia de citire a datelor va returna catre functia apelata cel putin 3 entitati (prin valoarea sa si prin parametri).

Pentru rezolvarea problemei se vor folosi functii cu transfer de parametri, citirea/scrierea se face de la tastatura si intr-un fisier;se cere validarea datelor care necesita acest lucru.

Rezolvare:


# include <stdio.h>

# include <string.h>

# include <conio.h>

typedef struct

{  char titlu[50];

    char autor[50];

    char dom[50];

    char pret[50];

    char editare[50];

 } bib;


 void citire (bib x[50],int *n)

 { printf("Titlul cartii: ");

   fflush(stdin);

   gets(x[*n].titlu);

   printf("Autorul cartii: ");

   fflush(stdin);

   gets(x[*n].autor);

   printf("Domeniul cartii: ");

   fflush(stdin);

   gets(x[*n].dom);

   printf("Pretul cartii: ");

   fflush(stdin);

   gets(x[*n].pret);

   printf("Editarea cartii: ");

   fflush(stdin);

   gets(x[*n].editare);

   (*n)++;}


 void afisare(bib x[50],int n)

 { int i; FILE *f;

 f=fopen("exam1.txt","wb");

 for (i=0;i<n;i++)

   { printf("\n");

     printf("Titlul cartii este %s\n",x[i].titlu); 

     printf("Autorul cartii este %s\n",x[i].autor);

     printf("Domeniul cartii este %s\n",x[i].dom);

     printf("Pretul cartii este %s\n",x[i].pret);

     printf("Editarea cartii %s\n",x[i].editare);

     if (f==NULL)

 printf("Fisierul nu poate fi deschis");

 else

 fwrite(&x[i],sizeof(bib),1,f);

 }

 fclose(f);

 }

 void ord1 (bib x[50],int n,int b)

 { int i,ok; bib temp;

 do

   {ok=0;

    for (i=0;i<n-1;i++)

     if (strcmp(x[i+1].autor,x[i].autor)>0)

       { temp=x[i];

         x[i]=x[i+1];

         x[i+1]=temp;

         ok=1;}

 }

 while (ok!=0); 

 }


 void ord2 (bib x[50], int n,bib z[50])

 {int i,ok,j; bib temp; char dm[50];

 strcpy(dm,"tehnic");

 j=0;

 for (i=0;i<n;i++)

   if (strcmp(x[i].dom,dm)==0)

    { z[j]=x[i];

      j++;}

 do

   {ok=0;

    for (i=0;i<j-1;i++)

      if (strcmp(z[i].pret,z[i+1].pret)>0)

       { temp=z[i];

         z[i]=z[i+1];

         z[i+1]=temp;

         ok=1;}

         }

 while (ok!=0); 

 afisare (z,j);

 }       

 void ord3 (bib x[50], int n,int b, bib y[50])

 {int i,ok,j; bib temp; char dm[50],ed[50];

 if (b==0)

   do

   {ok=0;

    for (i=0;i<n-1;i++)

     if (strcmp(x[i+1].autor,x[i].autor)>0)

       { temp=x[i];

         x[i]=x[i+1];

         x[i+1]=temp;

         ok=1;}

 }

 while (ok!=0); 

      else

      {   

 strcpy(dm,"literar");

 strcpy(ed,"da");

 j=0;

 for (i=0;i<n;i++)

   if ((strcmp(x[i].dom,dm)==0) && (strcmp(x[i].editare,ed)==0))

    {y[j]=x[i];

     j++;}

 do

   {ok=0;

    for (i=0;i<j-1;i++)

      if (strcmp(y[i].autor,y[i+1].autor)>0)

       { temp=y[i];

         y[i]=y[i+1];

         y[i+1]=temp;

         ok=1;}

         }

 while (ok!=0);

 afisare (y,j);

 } 

 }       


 void pretmic(bib x[50],int n)

 {    char pret[50]; int i,c;

      c=0;

      printf("Pretul introdus: ");

      fflush(stdin);

      gets(pret);

      for (i=0;i<n;i++)

       if (strcmp(x[i].pret,pret)<0)

         c++;

      printf("\n");

      printf("Sunt %d carti",c);   

 }


 int main()

 { int op,n,b;

   bib x[50],z[50],y[50];

 n=0;

 do

 { 

   printf("\n1.Introducere carti\n");

   printf("2.Afisare\n");

   printf("3.Listare ord alfabetica descrescatoare\n");

   printf("4.Listare in ordine crescatoare a pretului\n");

   printf("5.Ord alfabetica dupa autori\n");

   printf("6.Pret mic\n");

   printf("0.Exit\n");

   printf("Introduceti optiunea voastra ");

   scanf("%d",&op);

   switch(op)

   { case 1: citire(x,&n); break;

     case 2: afisare(x,n); break;

     case 3: b=0;ord3(x,n,b,y); afisare(x,n); break;

     case 4: ord2(x,n,z); break;

     case 5: b=1;ord3(x,n,b,y); break;

     case 6: pretmic(x,n); break;

     case 0: break;}

 }

 while (op!=0);

 return 0;

 }

sursa: tutorialehd.info

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.