Sunteți pe pagina 1din 5

#include<iostream>

#include<stdio.h>
using namespace std;

struct Angajat
{
int cod;
char nume[50];
int* piese;
int nrDeZile;
};
struct nod
{
Angajat ang;
nod* next;
};
Angajat InitializareAngajat()
{
Angajat ang;
printf("Introduceti codul angajatului: "); scanf("%d", &ang.cod);
printf("Introduceti numele angajatului: "); scanf("%s", &ang.nume);
printf("Introduceti numarul de zile care a lucrat %s: ", ang.nume); scan
f("%d", &ang.nrDeZile);
ang.piese = new int[ang.nrDeZile];
for (int i = 0; i < ang.nrDeZile; i++)
{
printf("Introduceti numarul de piese care a realizat %s in ziua
%d: ", ang.nume, i);
scanf("%d", &ang.piese[i]);
}
return ang;
}
void afisareMuncitor(Angajat ang)
{
printf("\nAFISARE ANGAJAT\n\n");
printf("Cod angajat:%d\n", ang.cod);
printf("Numele angajatului este:%s\n", ang.nume);
printf("%s a lucrat %d zile", ang.nume, ang.nrDeZile);
for (int i = 0; i < ang.nrDeZile; i++)
{
printf("%s a realizat in ziua[%d] %d piese\n", ang.nume, i, ang.
piese[i]);
}
printf("\n");
}
nod* Adauga(nod* cap)
{
int numarAnagajti = 0;
printf("\nIntroduceti numarul de anagajti pe care vreti sa fie inserati
in coada: "); scanf("%d", &numarAnagajti);
for (int i = 0; i < numarAnagajti; i++)
{

Angajat ang = InitializareAngajat();


nod* nou = new nod;
nou->next = NULL;
nou->ang = ang;
if (cap == NULL)
{
cap = nou;
}
else
{
nod* p = cap;
while (p->next != NULL)
{
p = p->next;
}
p->next = nou;
}
}
return cap;
}
void afisareCoada(nod* lista)
{
nod* p = lista;
if (lista == NULL)
{
printf("Lista este goala!!!");
return;
}
else
{
while (p != NULL)
{
printf("Cod angajat: %d \n", p->ang.cod);
p = p->next;
}
}
}
int CalculTotalPiese(nod* coada, int codAngajat)
{
int nrTotalPiese = 0;
if (coada == NULL)
{
printf("Lista este goala!!!");
return 0;
}
else
{
nod* p = coada;
while (p != NULL)
{
if (p->ang.cod == codAngajat)
{
for (int i = 0; i < p->ang.nrDeZile; i++)
{
nrTotalPiese += p->ang.piese[i];
}
}

p = p->next;
}
return nrTotalPiese;
}
}
nod* AdaugaAngajati(char* numefisier, nod* coada)
{
FILE* f = fopen(numefisier, "r");
if (f)
{
while (!feof(f))
{
Angajat ang;
fscanf(f, "%d", &ang.cod);
fscanf(f, "%s", &ang.nume);
fscanf(f, "%d", &ang.nrDeZile);
ang.piese = new int[ang.nrDeZile];
for (int i = 0; i < ang.nrDeZile; i++)
{
fscanf(f, "%d", &ang.piese[i]);
}
nod* nou = new nod;
nou->next = NULL;
nou->ang = ang;
if (coada == NULL)
{
coada = nou;
}
else
{
nod* p = coada;
while (p->next != NULL)
{
p = p->next;
}
p->next = nou;
}
}
return coada;
}
else
{
printf("Fisierul nu exista sau nu a putut fi deschis!!!");
return coada;
}
}
int* MuncitoriCoduri(int zi)
{
int adauga = 0; int numarMuncitori = 0; int numarMuncitoriZI = 0;//numar
ul de muncitori care au lucrat in ziua respectiva(zi)
printf("Introduceti numarul de muncitori care se inregistreaza:"); scanf
("%d", &numarMuncitori);
Angajat* ang = new Angajat[numarMuncitori];
for (int i = 0; i < numarMuncitori; i++)
{
ang[i] = InitializareAngajat();
if (ang[i].nrDeZile >= zi)
numarMuncitoriZI++;

}
int* vectorCoduri = new int[numarMuncitoriZI + 1];
int j = 1; vectorCoduri[0] = numarMuncitoriZI;
for (int i = 0; i < numarMuncitori; i++)
{
if (ang[i].nrDeZile >= zi)
vectorCoduri[j] = ang[i].cod;
j++;
}
return vectorCoduri;
}
void AfisareCoduri(int* vector)
{
int lungime = vector[0];
printf("Codurile angajatilor care au lucrat in ziua specificata mai sus
sunt:\n");
//printf("%d", vector[0]);
//printf("
%d", vector[1]);
for (int i = 1; i <= lungime; i++)
{
printf("Angajat[%d]:%d\n", i, vector[i]);
}
}
nod* ExtrageAngajat(nod* coada, int cod)
{
nod* p = coada; Angajat ang;
while (p != NULL)
{
if (coada->ang.cod == cod)
{
//coada = coada->next;
FILE* f = fopen("Angajati.bin", "wb");
fwrite(&p->ang.cod, sizeof(int), 1, f);
fwrite(&p->ang.nume, sizeof(char[50]), 1, f);
fwrite(&p->ang.nrDeZile, sizeof(int), 1, f);
for (int i = 0; i < p->ang.nrDeZile; i++)
{
fwrite(&p->ang.piese[i], sizeof(int), 1, f);
}
coada = coada->next;
return coada;
}
if (p->next->ang.cod == cod)
{
FILE* f = fopen("Angajati.bin", "wb");
fwrite(&p->ang.cod, sizeof(int), 1, f);
fwrite(&p->ang.nume, sizeof(char[50]), 1, f);
fwrite(&p->ang.nrDeZile, sizeof(int), 1, f);
for (int i = 0; i < p->ang.nrDeZile; i++)
{
fwrite(&p->ang.piese[i], sizeof(int), 1, f);
}
nod* aux = p->next;
p->next = p->next->next;
return coada;
}

p = p->next;
}
}
void main()
{
//Angajat ang1 = InitializareAngajat();
//afisareMuncitor(ang1);
nod* lista = NULL;
//lista = Adauga(lista);
//afisareCoada(lista);
//int nrTotalPiese = CalculTotalPiese(lista, 100);
//printf("%d", nrTotalPiese);
lista = AdaugaAngajati("Angajati.txt", lista);
//afisareCoada(lista);
//int* vector = MuncitoriCoduri(3);
//AfisareCoduri(vector);
lista = ExtrageAngajat(lista, 103);
afisareCoada(lista);
}

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