Biblioteca. Informaţiile despre n cărţi ale unei biblioteci sunt stocate în fişierul textual Carti.txt, fiecare linie a cărui corespunde unei singure cărţi din fondul bibliotecii şi reciproc. O linie a fişierului include atribute ale cărţii respective, separate printr-un spaţiu: CodCarte (Codul cărţii); Num_Pren_Autor (Numele şi prenumele autorului); Titlul (Titlul cărţii); AnEd (Anul editării); Limba (Limba în care este editată cartea); Pret (preţul cărţii); Npag (Numărul de pagini ale cărţii); Tema (Tematica).
1. Să se elaboreze în limbaj de nivel înalt un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului, următoarele prescripţii:
1) Înregistrează o nouă carte;
2) Exclude din fişierul Carti.txt, liniile, ce corespund cărţilor cu tematica indicată de la tastatură;
3) Afişează pe ecran seturile de atribute ale tuturor cărţilor, editate după anul introdus de la tastatură, ordonându-le alfabetic după numele_prenumele autorilor;
3. Creează fişierul textual Romana.txt, ce va înregistra atributele cărţilor scrise în limba română, având titlul indicat de la tastatură;
4. Afişează pe ecran seturile de atribute ale cărţilor cu numărul maximal de pagini; 5. Determină preţul mediu al unei cărţi editate în limbă străină.
Răspunsuri la întrebare
Răspuns:
AM cam asa ceva din cei ceam reusit sa fac
Explicație:
# 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;
}