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:
- Includere biblioteci:
iostream
: Pentru input/output (citire și afișare).string
: Pentru a utiliza tipul de datestring
pentru nume și prenume.
- Structura
Data
:- Definim o structură internă
Data
pentru a reprezenta data angajării. Aceasta conține trei membri întregi:zi
,luna
șian
.
- Definim o structură internă
- Structura
Angajat
:- Definim structura principală
Angajat
. nume
șiprenume
: De tipstring
pentru a stoca numele și prenumele angajatului.salariu
: De tipfloat
pentru a stoca salariul.dataAngajarii
: De tipData
, referință către structura internă definită anterior.departament
: De tipstring
pentru a stoca numele departamentului.
- Definim structura principală
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
}