Sunteți pe pagina 1din 6

/*Să se scrie un program care ţine evidenţa angajatilor dintr-o firma.

Pentru
fiecare angajat se specifică în parte: nume, prenume, varsta, salar. Dacă salarul
angajatului este mai mare decat 3000 se va specifica functia angajatului, iar daca
este mai mic sau egal de 3000 se va specifica vechimea angajatului.
5 Să se facă un meniu care să conţină următoarele operaţii:
0. Iesire.
1. Adăugarea unui nou angajat in firma.
2. Afişarea angajatilor din firma.
3. Afișarea angajatului căutat după nume și prenume.
10 4. Afișarea angajaților care au vârsta mai mare decât o vârstă precizată de
utilizator de la tastatură.
5. Să se transforme toate prenumele angajaților în litere mari dacă prenumele
începe cu o vocală.
6. Să se afișeze angajații care au salariul egal cu o putere a lui 2.
15 7. Afişarea angajatilor din firmă în ordine descrescătoare după salar folosind
funcția qsort.
8. Afişarea angajatilor din firmă în ordine alfabetică după prenume folosind
algoritmul bubble sort.
9. Să se pună pe diagonala principală a unei matrice vârsta angajaților, iar pe
20 restul elementelor se va pune 0. Se știe că ordinal matricei este dat de numărul
angajaților.
10. Ștergerea tuturor angajaților care au vârsta mai mare de 65 de ani.*/
#include<stdio.h>
#include<stdlib.h>
25 #include<string.h>
#define citire(x) scanf("%d", &x)
typedef struct firma {
char nume[20], prenume[20], functie[20];
int varsta, salar, vechime;
30 }A;
void adaugare(A *a, int *n)
{
(*n)++;
gets();
35 printf("Nume: ");
gets((a + *n)->nume);
printf("Prenume: ");
gets((a + *n)->prenume);
printf("Varsta: ");
40 citire((a + *n)->varsta);
printf("Salar: ");
citire((a + *n)->salar);
if ((a + *n)->salar > 3000)
{
45 gets();
printf("Functie: ");
gets((a + *n)->functie);
}
else
50 {
printf("Vechime: ");
citire((a + *n)->vechime);
}
}
55 void afisare(A *a, int n)
{
int i;
for (i = 0; i <= n; i++)
{
printf("Angajatul %d:\n", i + 1);
printf("Nume: %s\nPrenume: %s\nVarsta: %d\nSalar: %d\n", (a + i)->nume, (a
+ i)->prenume, (a + i)->varsta, (a + i)->salar);
5 if ((a + i)->salar > 3000)
printf("Functie: %s\n\n", (a + i)->functie);
else
printf("Vechime: %d\n\n", (a + i)->vechime);
}
10 }
void cautare(A *a, int n)
{
int i;
char nu[20], p[20];
15 gets();
printf("Introduceti nume: ");
gets(nu);
printf("Introduceti prenume: ");
gets(p);
20 for(i=0;i<=n;i++)
if ((strcmp((a + i)->nume, nu) == 0) && (strcmp((a + i)->prenume, p) ==
0))
{
printf("Nume: %s\nPrenume: %s\nVarsta: %d\nSalar: %d\n", (a + i)-
25 >nume, (a + i)->prenume, (a + i)->varsta, (a + i)->salar);
if ((a + i)->salar > 3000)
printf("Functie: %s\n\n", (a + i)->functie);
else
printf("Vechime: %d\n\n", (a + i)->vechime);
30 break;
}
}
void varsta(A *a, int n)
{
35 int i, v;
printf("Introduceti varsta: ");
citire(v);
for (i = 0; i <= n; i++)
if((a + i)->varsta>v)
40 {
printf("Angajatul %d:\n", i + 1);
printf("Nume: %s\nPrenume: %s\nVarsta: %d\nSalar: %d\n", (a + i)->nume, (a
+ i)->prenume, (a + i)->varsta, (a + i)->salar);
if ((a + i)->salar > 3000)
45 printf("Functie: %s\n\n", (a + i)->functie);
else
printf("Vechime: %d\n\n", (a + i)->vechime);
}
}
50 void transformare(A *a, int n)
{
int i;
char voc[] = "aeiou";
for (i = 0; i <= n; i++)
55 if (strchr(voc,(a + i)->prenume[0]))
(a + i)->prenume[0] -= 32;
}
void salariu_2(A *a, int n)
{
int c, k, i, j;
for (j = 0; j <= n; j++)
{
5 c = 0;
for (i = 31; i >= 0; i--)
{
k = ((a + j)->salar >> i) & 1;
if (k)
10 c++;
}
if (c == 1)
{
printf("Nume: %s\nPrenume: %s\nVarsta: %d\nSalar: %d\n", (a + j)-
15 >nume, (a + j)->prenume, (a + j)->varsta, (a + j)->salar);
if ((a + j)->salar > 3000)
printf("Functie: %s\n\n", (a + j)->functie);
else
printf("Vechime: %d\n\n", (a + j)->vechime);
20 }

}
}
int functie_p(const void *a, const void *b)
25 {
int c;
struct firma *ia = (struct firma *)a;
struct firma *ib = (struct firma *)b;
if (ia->salar > ib->salar)
30 c = -1;
else if (ia->salar < ib->salar)
c = 1;
else
c = 0;
35 return c;
}
void alfabetic(A *a, int n)
{
int i, ok, aux;
40 char auxiliar[20];
do
{
ok = 1;
for (i = 0; i < n; i++)
45 if (strcmp((a + i)->prenume, (a + i + 1)->prenume) == 1)
{
if ((a + i)->salar > 3000)
{
strcpy(auxiliar, (a + i)->functie);
50 strcpy((a + i)->functie, (a + i + 1)->functie);
strcpy((a + i + 1)->functie, auxiliar);
}
else
{
55 aux = (a + i)->vechime;
(a + i)->vechime = (a + i + 1)->vechime;
(a + i + 1)->vechime = aux;
}
strcpy(auxiliar, (a + i)->nume);
strcpy((a + i)->nume, (a + i + 1)->nume);
strcpy((a + i + 1)->nume, auxiliar);
5
strcpy(auxiliar, (a + i)->prenume);
strcpy((a + i)->prenume, (a + i + 1)->prenume);
strcpy((a + i + 1)->prenume, auxiliar);

10 aux = (a + i)->varsta;
(a + i)->varsta = (a + i + 1)->varsta;
(a + i + 1)->varsta = aux;

aux = (a + i)->salar;
15 (a + i)->salar = (a + i + 1)->salar;
(a + i + 1)->salar = aux;

ok = 0;
}
20 } while (ok == 0);
}
void matrice(A *a, int n)
{
int i, j;
25 for (i = 0; i <= n; i++)
{
for (j = 0; j <= n; j++)
if (i == j)
printf("%d ", (a + i)->varsta);
30 else
printf("0 ");
printf("\n");
}
}
35 void stergere(A *a, int *n)
{
int i, j, k = 0;
for(i=0;i<=(*n-k);i++)
if ((a + i)->varsta > 65)
40 {
k++;
for (j = i; j <= (*n - k); j++)
*(a + j) = *(a + j + 1);
i--;
45 }
*n = *n - k;
}
int main()
{
50 int opt, n = -1;
A a[30];
do
{
system("cls");
55 printf("0.Iesire\n1.Adaugarea unui nou angajat in firma\n2.Afisare
angajati\n3.Cautare angajat dupa nume si prenume\n4.Afisarea angajatilor care au o
varsta mai mare decat o varsta citita de la tastatura\n5.Transformare prenume in
litere mari daca incep cu vocala\n6.Afisare angajati cu salariul egal cu o putere
a lui 2\n7.Afisare angajati descrescator dupa salar\n8.Afisare angajati in ordine
alfabetica dupa prenume\n9.Matrice care are pe diagonala principala varsta
angajatilor si in rest 0\n10.Stergerea tuturor angajatilor care au varsta mai mare
de 65 de ani\nOptiunea dumneavoastra: ");
5 citire(opt);
switch (opt)
{
case 0:
system("cls");
10 printf("Program terminat!\n\n");
return 0;
break;
case 1:
system("cls");
15 adaugare(a, &n);
system("cls");
printf("Angajat adaugat!\n\n");
system("pause");
break;
20 case 2:
system("cls");
afisare(a, n);
printf("\n\n");
system("pause");
25 break;
case 3:
system("cls");
cautare(a, n);
system("pause");
30 break;
case 4:
system("cls");
varsta(a, n);
system("pause");
35 break;
case 5:
system("cls");
transformare(a, n);
afisare(a, n);
40 printf("\n\n");
system("pause");
break;
case 6:
system("cls");
45 salariu_2(a, n);
system("pause");
break;
case 7:
system("cls");
50 qsort(a, n + 1, sizeof(A), functie_p);
afisare(a, n);
system("pause");
break;
case 8:
55 system("cls");
alfabetic(a, n);
afisare(a, n);
printf("\n\n");
system("pause");
break;
case 9:
system("cls");
5 matrice(a, n);
system("pause");
break;
case 10:
system("cls");
10 stergere(a, &n);
afisare(a, n);
system("pause");
break;
default:
15 system("cls");
printf("Optiune invalida!\n\n");
system("pause");
break;
}
20 } while (1);
}

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