Untitled

 avatar
unknown
plain_text
a year ago
10 kB
2
Indexable
#include <iostream>
#include <vector>
#include <algorithm>


using namespace std;

class NhanVienVanPhong
{
private: //Thanh phan du lieu  -> Khai bao bien =>Thuoc tinh
	int maNV;
	string hoTen;
	float luongCB;
	float luongHT;
	int soNG;
public://Thanh phan xu ly -> Khai bao ham => Phuong thuc
	NhanVienVanPhong() {}; //tao ra constructor khong tham so
	NhanVienVanPhong(int, string, float, int);
	//In thong tin nhan vien
	void printfNVVP();
	//Tinh luong nhan vien
	float tinhluongHT();
	//Tim nhan vien theo ma
	int getmaNVVP();
	//Tim luong co ban
	float getluongCB();
	//Cap nhat luong co ban
	void setluongCB(float);
	//Tim luong hang thang
	float getluongHT();

};
typedef NhanVienVanPhong NVVP;

//Trien khai
NhanVienVanPhong::NhanVienVanPhong(int maNV, string hoTen, float luongCB, int soNG)
{
	this->maNV = maNV;
	this->hoTen = hoTen;
	this->luongCB = luongCB;
	this->soNG = soNG;
	this->luongHT = 0;
}
void NVVP::printfNVVP()
{
	cout << this->maNV << " " << this->hoTen << " " << this->luongCB << " " << this->soNG << " Luong HT: " << this->luongHT << endl;
}

float NVVP::tinhluongHT()
{
	//Lương HT = luongCB + soNG*250.000
	//Luong hang thang = luong co ban + so ngay * 250.000
	//Neu so ngay lam viec be hon 15 thi phu cap them 20%
	float luong = 0;
	luong = this->luongCB + this->soNG * 250000;
	if (this->soNG < 15)
	{
		luong = luong + luong * 0.2;
	}
	return this->luongHT = luong;

}

int NVVP::getmaNVVP()
{
	return this->maNV;
}

float NVVP::getluongCB()
{
	return this->luongCB;
}

void NVVP::setluongCB(float newluongCB)
{
	this->luongCB = newluongCB;
}

float NVVP::getluongHT()
{
	return this->luongHT;
}
class NhanVienSanXuat
{
private: //Thanh phan du lieu -> Khai bao bien => Thuoc tinh
	int maNV;
	string hoTen;
	float luongCB;
	float luongHT;
	int soSP;
public://Thanh phan xu ly -> Khai bao ham => Phuong thuc
	NhanVienSanXuat() {}; //tao ra constructor khong tham so
	NhanVienSanXuat(int, string, float, int);
	//In thong tin nhan vien
	void printfNVSX();
	//Tinh luong nhan vien
	float tinhluongHT();
	//Tim nhan vien theo ma
	int getmaNVSX();
	//Cap nhat luong co ban
	void setluongCB(float);
	//Tim luong hang thang
	float getluongHT();
	//Tim so san pham
	int getsoSP();
};
typedef NhanVienSanXuat	NVSX;
//TRiển khai
NVSX::NhanVienSanXuat(int maNV, string hoTen, float luongCB, int soSP)
{
	this->maNV = maNV;
	this->hoTen = hoTen;
	this->luongCB = luongCB;
	this->soSP = soSP;
	this->luongHT = 0;
}
void  NVSX::printfNVSX()
{
	printf("[%d,%s,%f,%f,%d]\n", this->maNV,
		this->hoTen.c_str(),
		this->luongCB,
		this->luongHT,
		this->soSP);
}
//Tính lương nhân viên sản xuất
float NVSX::tinhluongHT()
{
	//Luong hang thang = luong co ban + so san pham * 175.000
	//Neu luong tu 10 trieu tro len thi thuong 10%. Neu so san pham duoi 10 thi tro cap them 30%
	int luong = this->luongCB;
	luong = luong + soSP * 175000;
	if (luong > 10000000)
	{
		luong = luong + luong * 0.1;
	}
	if (soSP < 10)
	{
		luong = luong + luong * 0.3;
	}
	return this->luongHT = luong;
}
//Tim nhan vien theo ma
int NVSX::getmaNVSX()
{
	return this->maNV;
}
//Cap nhat luong co ban
void NVSX::setluongCB(float newluongCB)
{
	this->luongCB = newluongCB;
}
//Tim luong hang thang
float NVSX::getluongHT()
{
	return this->luongHT;
}
//Tim so san pham
int NVSX::getsoSP()
{
	return this->soSP;
}

class CongTy
{
	int maCT;
	string tenCT;

	NVVP mangVP[100];
	int soVP;

	vector<NVSX> vtSX;

public:
	CongTy(int, string);

	//1. Tao du lieu nhan vien. Biet cong ty co toi da 200 nhan vien
	void initDSNV();

	//2. Xuat cac nhan vien trong cong ty
	void printfDSNV();

	//3. Tinh luong trong cong ty
	float tinhluongHT();

	//4. Tim nhan vien theo ma nhan vien
	NVVP maNVVP(int);
	NVSX maNVSX(int);

	//5. Cap nhat luong co ban theo ma nhan vien
	void luongCBmaNVVP(float, NVVP&);
	void luongCBmaNVSX(float, NVSX&);

	//6. Tim nhan vien co luong cao nhat
	void luongCaoNhat();

	//7. Tim nhan vien co so san pham ban ra thap nhat
	NVSX soSPthapnhat();

	//8. Tim 10 nhan vien co luong cao nhat
	void top10luong();

};
typedef CongTy ct;
//Trien khai
CongTy::CongTy(int maCT, string tenCT)
{
	this->maCT = maCT;
	this->tenCT = tenCT;
}

//1. Tao du lieu nhan vien
void ct::initDSNV()
{
	NVVP vp1(123, "Nguyen Van A", 9e6, 20);
	NVVP vp2(124, "Albert Einstein", 10e6, 25);
	NVVP vp3(125, "Isaac Newton", 9.5e6, 22);
	NVVP vp4(126, "Marie Curie", 9e6, 23);
	NVVP vp5(127, "Stephen Hawking", 8.5e6, 21);
	NVVP vp6(128, "Nikola Tesla", 8e6, 20);
	NVVP vp7(129, "Galileo Galilei", 7.5e6, 19);
	NVVP vp8(130, "Ada Lovelace", 7e6, 18);
	NVVP vp9(131, "Alan Turing", 6.5e6, 17);
	NVVP vp10(132, "Charles Darwin", 6e6, 16);
	NVVP vp11(133, "Leonardo da Vinci", 5.5e6, 15);
	NVVP vp12(134, "Hypatia", 5e6, 14);
	NVVP vp13(135, "Aristotle", 4.5e6, 13);
	NVVP vp14(136, "Marie Sklodowska Curie", 4e6, 18);

	mangVP[0] = vp1;
	mangVP[1] = vp2;
	mangVP[2] = vp3;
	mangVP[3] = vp4;
	mangVP[4] = vp5;
	mangVP[5] = vp6;
	mangVP[6] = vp7;
	mangVP[7] = vp8;
	mangVP[8] = vp9;
	mangVP[9] = vp10;
	mangVP[10] = vp11;
	mangVP[11] = vp12;
	mangVP[12] = vp13;
	mangVP[13] = vp14;


	this->soVP = 13;

	NVSX sx1(221, "Nguyen Van B", 6e6, 90);
	NVSX sx2(222, "Max Planck", 7.5e6, 80);
	NVSX sx3(223, "Richard Feynman", 7e6, 85);
	NVSX sx4(224, "Niels Bohr", 6.5e6, 75);
	NVSX sx5(225, "Erwin Schrodinger", 6e6, 70);
	NVSX sx6(226, "Werner Heisenberg", 5.5e6, 65);
	NVSX sx7(227, "Enrico Fermi", 5e6, 60);
	NVSX sx8(228, "Paul Dirac", 4.5e6, 55);
	NVSX sx9(229, "Lise Meitner", 4e6, 50);
	NVSX sx10(230, "Louis de Broglie", 3.5e6, 45);
	NVSX sx11(231, "Richard Feynman", 3e6, 40);
	NVSX sx12(232, "Niels Bohr", 2.5e6, 35);
	NVSX sx13(233, "Marie Curie", 2e6, 30);
	NVSX sx14(234, "Rosalind Franklin", 1.5e6, 25);


	this->vtSX.push_back(sx1);
	this->vtSX.push_back(sx2);
	this->vtSX.push_back(sx3);
	this->vtSX.push_back(sx4);
	this->vtSX.push_back(sx5);
	this->vtSX.push_back(sx6);
	this->vtSX.push_back(sx7);
	this->vtSX.push_back(sx8);
	this->vtSX.push_back(sx9);
	this->vtSX.push_back(sx10);
	this->vtSX.push_back(sx11);
	this->vtSX.push_back(sx12);
	this->vtSX.push_back(sx13);
	this->vtSX.push_back(sx14);
}


//2. Xuat cac nhan vien trong cong ty
void ct::printfDSNV()
{
	cout << "\nIn ds nv van phong tu mang: " << endl;
	for (int i = 0; i < soVP; i++)
	{
		mangVP[i].printfNVVP();
	}
	cout << "\nIn ds nv san xuat tu mang: " << endl;
	for (int i = 0; i < this->vtSX.size(); i++)
	{
		this->vtSX[i].printfNVSX();
	}
}

//3. Tinh luong nhan vien trong cong ty
float ct::tinhluongHT()
{
	cout << "In danh sach nhan vien van phong tu mang: " << endl;
	for (int i = 0; i < this->soVP; i++)
	{
		mangVP[i].tinhluongHT();
	}
	cout << "\nIn danh sach nhan vien san xuat tu mang: " << endl;
	for (int i = 0; i < this->vtSX.size(); i++)
	{
		this->vtSX[i].tinhluongHT();
	}
}

//4. Tim nhan vien theo ma nhan vien
NVVP ct::maNVVP(int maVP)
{
	cout << "Nhan vien van phong theo ma nhan vien: " << endl;
	for (int i = 0; i < this->soVP; i++)
	{
		if (mangVP[i].getmaNVVP() == maVP)
		{
			return mangVP[i];
		}
	}
}
NVSX ct::maNVSX(int maSX)
{
	cout << "\nNhan vien san xuat theo ma nhan vien: " << endl;
	for (int i = 0; i < this->vtSX.size(); i++)
	{
		if (vtSX[i].getmaNVSX() == maSX)
		{
			return this->vtSX[i];
		}
	}
}

//5. Cap nhat luong co ban theo ma nhan vien
void ct::luongCBmaNVVP(float luong, NVVP& a)
{
	a.setluongCB(luong);
}
void ct::luongCBmaNVSX(float luong, NVSX& b)
{
	b.setluongCB(luong);
}

//6. Tim nhan vien co luong cao nhat
void ct::luongCaoNhat()
{
	float maxluong = 0;
	NVVP VPluongcaonhat;
	NVSX SXluongcaonhat;

	for (int i = 0; i < soVP; i++)
	{

		float luong = mangVP[i].tinhluongHT();
		if (luong > maxluong)
		{
			maxluong = luong;
			VPluongcaonhat = mangVP[i];
		}
	}

	for (int i = 0; i < vtSX.size(); i++)
	{

		float luong = vtSX[i].tinhluongHT();
		if (luong > maxluong)
		{
			maxluong = luong;
			SXluongcaonhat = vtSX[i];
		}
	}

	if (VPluongcaonhat.getluongHT() > SXluongcaonhat.getluongHT())
	{
		VPluongcaonhat.printfNVVP();
	}
	else
	{
		SXluongcaonhat.printfNVSX();
	}
}
//7. Tim nhan vien co so san pham ban ra thap nhat
NVSX ct::soSPthapnhat()
{
	NVSX nhanvienSPthapnhat;
	int soSP = INT_MAX;
	for (int i; i < vtSX.size(); i++)
	{
		if (vtSX[i].getsoSP() < soSP)
		{
			soSP = vtSX[i].getsoSP();
			nhanvienSPthapnhat = vtSX[i];
		}
	}
	return nhanvienSPthapnhat;
}
//8. Tim 10 nhan vien co luong cao nhat
void ct::top10luong()
{
	float luongNhanVien[soVP + vtSX.size()];

	for (int i = 0; i < soVP; i++)
	{
		luongNhanVien[i] = mangVP[i].tinhluongHT();
	}

	for (int i = 0; i < vtSX.size(); i++)
	{
		luongNhanVien[i + soVP] = vtSX[i].tinhluongHT();
	}

	sort(luongNhanVien, luongNhanVien + soVP + vtSX.size(), greater<float>());
	int tongnv = soVP + vtSX.size();
	for (int i = 0; i < min(10, tongnv); i++)
	{
		if (i < soVP)
		{
			cout << "Nhan vien van phong: ";
			mangVP[i].printfNVVP();
		}
		else
		{
			cout << "Nhan vien san xuat: ";
			vtSX[i - soVP].printfNVSX();
		}
	}
}


int main()
{
	//Test 1. Tao ds cho nhan vien cong ty
	CongTy ct(202, "NTV UIT");
	ct.initDSNV();


	cout << "\n\nTest: 2. In danh sanh nhan vien: " << endl;
	ct.printfDSNV();

	cout << "\n\nTest: 3.Tinh luong cho nhan vien cong ty: " << endl;
	ct.tinhluongHT();
	ct.printfDSNV();

	cout << "\nTest: 4. Tim nhan vien theo ma nhan vien: " << endl;
	int maVP = 123;
	int maSX = 231;
	NVVP a1 = ct.maNVVP(maVP);
	a1.printfNVVP();
	NVSX b1 = ct.maNVSX(maSX);
	b1.printfNVSX();

	cout << "\nTest 5: Cap nhat luong co ban theo ma nhan vien: " << endl;

	maVP = 126;
	int luongVP = 1e7;
	NVVP a2 = ct.maNVVP(maVP);
	ct.luongCBmaNVVP(luongVP, a2);
	a2.printfNVVP();

	maSX = 225;
	int luongSX = 8e6;
	NVSX b2 = ct.maNVSX(maSX);
	ct.luongCBmaNVSX(luongSX, b2);
	b2.printfNVSX();

	cout << "\nTest 6: Tim nhan vien co luong cao nhat: " << endl;

	ct.luongCaoNhat();

	cout << "\nTest 7: Nhan vien co so san pham ban ra thap nhat: " << endl;
	NVSX a3 = ct.soSPthapnhat();
	a3.printfNVSX();

	cout << "\nTest 8: Tim 10 nhan vien co luong cao nhat: " << endl;
	ct.top10luong();


	return 0;
}
Editor is loading...
Leave a Comment