Jump to content

Program Care Gestioneaza Cartile Unei Biblioteci


Courage

Recommended Posts

  • Moderators

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • 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.