Definirea unei structuri pentru a reprezenta un angajat

Definirea unei structuri pentru a reprezenta un angajat

Înțelegerea problemei:

Ne propunem să creăm o reprezentare a unui angajat într-un program. Pentru aceasta, vom folosi structurile, care ne permit să grupăm diverse tipuri de date sub un singur nume. În cazul nostru, vrem să grupăm informații precum numele, prenumele, salariul, data angajării și departamentul pentru a descrie un angajat.

Soluție:

C++

#include <iostream>
#include <string>

using namespace std;

// Structura pentru a reprezenta data
struct Data {
    int zi;
    int luna;
    int an;
};

// Structura pentru a reprezenta un angajat
struct Angajat {
    string nume;
    string prenume;
    float salariu;
    Data dataAngajarii;
    string departament;
};

Explicație:

  1. Includere biblioteci:
    • iostream: Pentru input/output (citire și afișare).
    • string: Pentru a utiliza tipul de date string pentru nume și prenume.
  2. Structura Data:
    • Definim o structură internă Data pentru a reprezenta data angajării. Aceasta conține trei membri întregi: zi, luna și an.
  3. Structura Angajat:
    • Definim structura principală Angajat.
    • nume și prenume: De tip string pentru a stoca numele și prenumele angajatului.
    • salariu: De tip float pentru a stoca salariul.
    • dataAngajarii: De tip Data, referință către structura internă definită anterior.
    • departament: De tip string pentru a stoca numele departamentului.

Exemplu de utilizare:

C++

int main() {
    Angajat angajat1;

    angajat1.nume = "Ion";
    angajat1.prenume = "Popescu";
    angajat1.salariu = 3000;
    angajat1.dataAngajarii.zi = 15;
    angajat1.dataAngajarii.luna = 10;
    angajat1.dataAngajarii.an = 2023;
    angajat1.departament = "IT";

    cout << "Numele angajatului: " << angajat1.nume << " " << angajat1.prenume << endl;
    cout << "Salariu: " << angajat1.salariu << " lei" << endl;
    cout << "Data angajarii: " << angajat1.dataAngajarii.zi << "." << angajat1.dataAngajarii.luna << "." << angajat1.dataAngajarii.an << endl;
    cout << "Departament: " << angajat1.departament << endl;

    return 0;
}

Validarea datelor

Să implementăm o funcție pentru a valida dacă o dată este validă, adică dacă ziua este între 1 și 31, luna între 1 și 12 și anul este pozitiv. Vom adăuga această funcție ca metodă a structurii Data.

C++

bool Data::esteValida() {
    if (zi < 1 || zi > 31 || luna < 1 || luna > 12 || an <= 0) {
        return false;
    }
    // Aici putem adăuga verificări mai complexe pentru zilele din fiecare lună și ani bisecți
    return true;
}

Metode pentru structura Angajat

Să definim o metodă pentru a calcula vechimea angajatului, presupunând că avem o funcție globală obtineDataCurenta() care returnează data curentă.

C++

int Angajat::calculeazaVechime() {
    // Implementarea ar trebui să țină cont de anul bisect și de numărul de zile din fiecare lună
    // Pentru simplitate, vom considera un an cu 365 de zile
    Data dataCurenta = obtineDataCurenta();
    int vechimeInAni = dataCurenta.an - dataAngajarii.an;
    // ... calcule mai precise pentru a lua în considerare lunile și zilele
    return vechimeInAni;
}

Vector de structuri

Pentru a reprezenta o listă de angajați, putem folosi un vector de structuri Angajat:

C++

#include <vector>

vector<Angajat> listaAngajati;

// Adăugarea unui nou angajat în listă
Angajat angajatNou;
// ... inițializează câmpurile lui angajatNou
listaAngajati.push_back(angajatNou);

Cod complet cu extensii

C++

#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct Data {
    int zi;
    int luna;
    int an;
    bool esteValida() {
        // ... implementarea funcției esteValida
    }
};

struct Angajat {
    string nume;
    string prenume;
    float salariu;
    Data dataAngajarii;
    string departament;

    int calculeazaVechime() {
        // ... implementarea funcției calculeazaVechime
    }
};

// Funcție pentru a obține data curentă (simplificată)
Data obtineDataCurenta() {
    Data data;
    // ... implementare pentru a obține data curentă
    return data;
}

int main() {
    // ... codul principal
}