Sunteți pe pagina 1din 8

/*1.

Scrieti un program care tine evidenta cartilor dintr-o biblioteca, pentru


fiecare carte specificându-se: titlul, autorul, anul aparitiei, numarul de pagini,
domeniul.
1. Adaugarea unei carti
5 2. Salvarea cartilor intr-un fisier
3. Afisarea cartilor dintr-un domeniu citit de la tastatura
4. Afisarea cartilor dintr-un fisier
5. Cautarea unei carti dupa titlu
6. Stergerea unei carti
10 7. Sortarea cartilor dupa titlu
8. Ieșire*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
15 typedef struct biblioteca {
char titlu[30], autor[30], domeniu[10];
int an_ap, nr_pag;
}B;
void adaugare(B *b, int *n)
20 {
(*n)++;
gets();
printf("Titlu: ");
gets((b + *n)->titlu);
25 printf("Autor: ");
gets((b + *n)->autor);
printf("Domeniu: ");
gets((b + *n)->domeniu);
printf("Anul aparitiei: ");
30 scanf("%d", &(b + *n)->an_ap);
printf("Numar de pagini: ");
scanf("%d", &(b + *n)->nr_pag);
}
void salvare(B *b, int n)
35 {
int i;
FILE *f;
f = fopen("salvare.txt", "wt");
if (f == NULL)
40 printf("Eroare!");
else
{
for (i = 0; i <= n; i++)
fprintf(f, "%s\n%s\n%s\n%d\n%d\n", (b + i)->titlu, (b + i)->autor, (b
45 + i)->domeniu, (b + i)->an_ap, (b + i)->nr_pag);
fclose(f);
}
}
void domeniu(B *b, int n)
50 {
int i, ok = 0;
char d[10];
gets();
printf("Introduceti domeniul dorit: ");
55 gets(d);
system("cls");
for (i = 0; i <= n; i++)
if (strcmp((b + i)->domeniu, d) == 0)
{
printf("Titlu: %s\nAutor: %s\nDomeniu: %s\nAnul aparitiei: %d\nNumar
de pagini: %d\n\n", (b + i)->titlu, (b + i)->autor, (b + i)->domeniu, (b + i)-
>an_ap, (b + i)->nr_pag);
5 ok++;
}
if (ok == 0)
printf("Nu exista carti din domeniul %s!\n\n",d);
}
10 void afisare_fis()
{
int ok = 0;
char b[30];
FILE *f;
15 f = fopen("salvare.txt", "rt");
if (f == NULL)
printf("Eroare!\n\n");
else
{
20 while (fgets(b,30,f)!=NULL)
{
switch (ok)
{
case 0:printf("Titlu: %s", b);
25 break;
case 1:printf("Autor: %s", b);
break;
case 2:printf("Domeniu: %s", b);
break;
30 case 3:printf("Anul aparitiei: %s", b);
break;
case 4:printf("Numar pagini: %s\n\n", b);
ok = -1;
break;
35 }
ok++;
}
fclose(f);
}
40 }
void titlu(B *b, int n)
{
int i, ok = 0;
char t[30];
45 gets();
printf("Introduceti titlul cartii: ");
gets(t);
for(i=0;i<=n;i++)
if(strcmp((b+i)->titlu,t)==0)
50 {
printf("Titlu: %s\nAutor: %s\nDomeniu: %s\nAnul aparitiei: %d\nNumar
de pagini: %d\n\n", (b + i)->titlu, (b + i)->autor, (b + i)->domeniu, (b + i)-
>an_ap, (b + i)->nr_pag);
ok++;
55 }
if (ok == 0)
printf("Aceasta carte carte nu exista!\n\n");
}
void stergere(B *b, int *n)
{
int i, j, k = 0, nr;
for (i = 0; i <= *n; i++)
5 printf("Cartea numarul %d:\nTitlu: %s\nAutor: %s\nDomeniu: %s\nAnul
aparitiei: %d\nNumar de pagini: %d\n\n", i + 1, (b + i)->titlu, (b + i)->autor, (b
+ i)->domeniu, (b + i)->an_ap, (b + i)->nr_pag);
printf("Introduceti numarl cartii pe care doriti sa o stergeti: ");
scanf("%d", &nr);
10 for (j = nr-1; j <= *n ; j++)
*(b + j) = *(b + j + 1);
*n = *n - 1;
}
int functie(const void *a, const void *b)
15 {
struct biblioteca *ia = (struct biblioteca *)a;
struct biblioteca *ib = (struct biblioteca *)b;
return strcmp(ia->titlu, ib->titlu);
}
20 int main()
{
B b[30];
int n = -1, opt;
do
25 {
system("cls");
printf("1.Adaugare carte\n2.Salvarea cartilor intr-un fisier\n3.Afisarea
cartilor dintr-un domeniu citit de la tastatura\n4.Afisarea cartilor dintr-un
fisier\n5.Cautarea unei carti dupa titlu\n6.Stergera unei carti\n7.Sortarea
30 cartilor dupa titlu\n8.Iesire\nOptiunea dumneavoastra: ");
scanf("%d", &opt);
switch (opt)
{
case 1:
35 system("cls");
adaugare(b, &n);
system("cls");
printf("Carte adaugata!\n\n");
system("pause");
40 break;
case 2:
system("cls");
salvare(b, n);
printf("Carti salvate!\n\n");
45 system("pause");
break;
case 3:
system("cls");
domeniu(b, n);
50 system("pause");
break;
case 4:
system("cls");
afisare_fis();
55 system("pause");
break;
case 5:
system("cls");
titlu(b, n);
system("pause");
break;
case 6:
5 system("cls");
stergere(b, &n);
system("cls");
printf("Carte stearsa!\n\n");
system("pause");
10 break;
case 7:
system("cls");
qsort(b, n + 1, sizeof(B), functie);
salvare(b, n); //cartile sunt sortate alfabetic,salvate in fisier
15 si afisate
afisare_fis();
system("pause");
break;
case 8:
20 system("cls");
printf("Program terminat!\n\n");
return 0;
break;
default:
25 system("cls");
printf("Optiune invalida!\n\n");
system("pause");
break;
}
30 } while (1);
}
/*2. Scrieti un program care tine evidenta calculatoarelor dintr-un magazin,
pentru fiecare
calculator specificânduse: serie_calculator, tip_procesor, memorie, hdd, monitor.
35 1. Adaugarea unui calculator
2. Afisarea calculatoarelor.
3. Salvarea calculatoarelor intr-un fisier
4. Afisarea calculatoarelor cu un anumit procesor.
5. Afisarea calculatoarelor dintr-un fisier
40 6. Cautarea unui calculator dupa serie_calculator.
7. Stergerea unui calculator dupa serie.
8. Stergerea calculatorelor dupa hdd si memorie.
9. Sortarea calculatorelor după monitor.
10. Ieșire*/
45 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define citire(x) scanf("%d", &x)
typedef struct calculator {
50 char serie[20], procesor[20], hdd[20], monitor[20];
int memorie;
}C;
void adaugare(C *pc, int *n)
{
55 (*n)++;
gets();
printf("Introduceti seria: ");
gets((pc + *n)->serie);
printf("Introduceti procesor: ");
gets((pc + *n)->procesor);
printf("Introduceti hdd: ");
gets((pc + *n)->hdd);
5 printf("Introduceti monitor: ");
gets((pc + *n)->monitor);
printf("Introduceti memorie(GB): ");
citire((pc + *n)->memorie);
}
10 void afisare(C *pc, int n)
{
int i;
for (i = 0; i <= n; i++)
printf("Calculator %d\nSerie: %s\nProcesor: %s\nHDD: %s\nMonitor:
15 %s\nMemorie: %d GB\n\n", i + 1, (pc + i)->serie, (pc + i)->procesor, (pc + i)-
>hdd, (pc + i)->monitor, (pc + i)->memorie);
}
void salvare(C *pc, int n)
{
20 int i;
FILE *f;
f = fopen("salvare.txt", "wt");
if (f == NULL)
printf("Eroare!\n\n");
25 else
{
for (i = 0; i <= n; i++)
fprintf(f, "%s\n%s\n%s\n%s\n%d\n", (pc + i)->serie, (pc + i)-
>procesor, (pc + i)->hdd, (pc + i)->monitor, (pc + i)->memorie);
30 fclose(f);
}
}
void afis_proc(C *pc, int n)
{
35 char p[20];
int i;
gets();
printf("Introduceti tipul de procesor: ");
gets(p);
40 for (i = 0; i <= n; i++)
if (strcmp((pc + i)->procesor, p) == 0)
printf("Serie: %s\nProcesor: %s\nHDD: %s\nMonitor: %s\nMemorie: %d
GB\n\n", (pc + i)->serie, (pc + i)->procesor, (pc + i)->hdd, (pc + i)->monitor,
(pc + i)->memorie);
45
}
void afisare_fisier()
{
char a[30];
50 int ok = 0;
FILE *f;
f = fopen("salvare.txt", "rt");
if (f == NULL)
printf("Eroare!\n\n");
55 else
{
while (fgets(a, 30, f) != NULL)
{
switch (ok)
{
case 0:printf("Serie: %s", a);
break;
5 case 1:printf("Procesor: %s", a);
break;
case 2:printf("HDD: %s", a);
break;
case 3:printf("Monitor: %s", a);
10 break;
case 4:
printf("Memorie: %s\n\n", a);
ok = -1;
break;
15 }
ok++;
}
fclose(f);
}
20 }
void cautare_serie(C *pc, int n)
{
char s[20];
int i;
25 gets();
printf("Introduceti seria calculatorului: ");
gets(s);
for (i = 0; i <= n; i++)
if (strcmp((pc + i)->serie, s) == 0)
30 printf("Serie: %s\nProcesor: %s\nHDD: %s\nMonitor: %s\nMemorie: %d
GB\n\n", (pc + i)->serie, (pc + i)->procesor, (pc + i)->hdd, (pc + i)->monitor,
(pc + i)->memorie);
}
void stergere_serie(C *pc, int *n)
35 {
int i, j, k = 0;
char s[20];
gets();
printf("Introduceti seria: ");
40 gets(s);
for (i = 0; i <= (*n - k); i++)
if (strcmp((pc + i)->serie, s) == 0)
{
k++;
45 for(j=i;j<=(*n-k);j++)
*(pc + i) = *(pc + i + 1);
i--;
}
*n = *n - k;
50 }
void stergere_hdd_mem(C *pc, int *n)
{
int i, j, m, k = 0;
char h[20];
55 gets();
printf("Introduceti HDD: ");
gets(h);
printf("Introduceti memorie: ");
citire(m);
for (i = 0; i <= (*n - k); i++)
if ((strcmp((pc + i)->hdd, h) == 0) && (pc + i)->memorie == m)
{
5 k++;
for (j = i; j < (*n - k); j++)
*(pc + i) = *(pc + i + 1);
i--;
}
10 *n = *n - k;
}
int functie(const void *a, const void *b)
{
struct calculator *ia = (struct calculator *)a;
15 struct calculator*ib = (struct calculator *)b;
return strcmp(ia->monitor, ib->monitor);
}
int main()
{
20 int n = -1, opt;
C pc[30];
do
{
system("cls");
25 printf("1.Adaugare calculator\n2.Afisarea calculatoarelor\n3.Salvare
calculatoare intr-un fisier\n4.Afisarea calculatoarelor cu un anumit
procesor\n5.Afisarea calculatoarelor dintr-un fisier\n6.Cautarea unui calculator
dupa serie\n7.Stergerea unui calculator dupa serie\n8.Stergerea calculatoarelor
dupa hdd si memorie\n9.Sortarea calculatoarelor dupa monitor\n10.Iesire\nOptiunea
30 dumneavoastra: ");
citire(opt);
switch (opt)
{
case 1:
35 system("cls");
adaugare(pc, &n);
system("cls");
printf("Calculator adaugat!\n\n");
system("pause");
40 break;
case 2:
system("cls");
afisare(pc, n);
system("pause");
45 break;
case 3:
system("cls");
salvare(pc, n);
printf("Calculatoare salvate!\n\n");
50 system("pause");
break;
case 4:
system("cls");
afis_proc(pc, n);
55 system("pause");
break;
case 5:
system("cls");
afisare_fisier();
system("pause");
break;
case 6:
5 system("cls");
cautare_serie(pc, n);
system("pause");
break;
case 7:
10 system("cls");
stergere_serie(pc, &n);
system("cls");
printf("Calculatoarele ramase sunt:\n\n");
afisare(pc, n);
15 system("pause");
break;
case 8:
system("cls");
stergere_hdd_mem(pc, &n);
20 system("cls");
printf("Calculatoarele ramase sunt:\n\n");
afisare(pc, n);
system("pause");
break;
25 case 9:
system("cls");
qsort(pc, n + 1, sizeof(C), functie);
afisare(pc, n);
system("pause");
30 break;
case 10:
system("cls");
printf("Program terminat!\n\n");
return 0;
35 break;
default:
system("cls");
printf("Optiune invalida!\n\n");
system("pause");
40 break;
}
} while (1);
}

S-ar putea să vă placă și