0% au considerat acest document util (0 voturi)
166 vizualizări6 pagini

#Include #Include #Include #Define: "%D"

Programul gestionează o firmă și angajații ei, oferind opțiuni de adăugare, afișare, căutare și modificare a angajaților. Datele fiecărui angajat includ nume, prenume, vârstă, salariu și funcție/vechime. Există opțiuni pentru a ordona și filtra angajații.

Încărcat de

Andrei Bumba
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
166 vizualizări6 pagini

#Include #Include #Include #Define: "%D"

Programul gestionează o firmă și angajații ei, oferind opțiuni de adăugare, afișare, căutare și modificare a angajaților. Datele fiecărui angajat includ nume, prenume, vârstă, salariu și funcție/vechime. Există opțiuni pentru a ordona și filtra angajații.

Încărcat de

Andrei Bumba
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

/*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("[Link]\[Link] unui nou angajat in firma\[Link]
angajati\[Link] angajat dupa nume si prenume\[Link] angajatilor care au o
varsta mai mare decat o varsta citita de la tastatura\[Link] prenume in
litere mari daca incep cu vocala\[Link] angajati cu salariul egal cu o putere
a lui 2\[Link] angajati descrescator dupa salar\[Link] angajati in ordine
alfabetica dupa prenume\[Link] care are pe diagonala principala varsta
angajatilor si in rest 0\[Link] 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