Untitled
unknown
plain_text
2 years ago
8.6 kB
23
Indexable
#include<iostream>
#include<vector>
#include<string>
#include<windows.h>
using namespace std;
void SET_COLOR(int color)
{
WORD wColor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
wColor = (csbi.wAttributes & 0xF0) + (color & 0x0F);
SetConsoleTextAttribute(hStdOut, wColor);
}
}
class IEmployee{
protected:
string Name;
int paymentPerHour;
public:
IEmployee(){}
IEmployee(string Name,int paymentPerHour){
this-> Name = Name;
this->paymentPerHour = paymentPerHour;
}
~IEmployee(){}
int GetpaymentPerHour(){
return this->paymentPerHour;
}
string getname()const{
return this->Name;
}
void setpaymentPerHour(int paymentPerHour){
this->paymentPerHour=paymentPerHour;
}
void setname(string Name){
this->Name=Name;
}
virtual float calculateSalary() = 0;
virtual void Input(){
cin.ignore();
SET_COLOR(3);
cout<<"Enter name : ";getline(cin,Name);
cout<<"Enter paymentPerHour : ";cin>>paymentPerHour;
}
virtual void Output(){
cout<<"This name : "<<Name<<endl;
cout<<"This paymentPerHour : "<<paymentPerHour<<endl;
}
};
class PartTimeEmployee : public IEmployee {
private:
int workingHours;
public:
PartTimeEmployee(){}
PartTimeEmployee(string Name,int paymentPerHour, int workingHours) : IEmployee(Name, paymentPerHour) {
this->workingHours = workingHours;
}
int GetWorkingHours(){
return this->workingHours;}
float calculateSalary(){
return this->workingHours*this->paymentPerHour;
}
void Input(){
IEmployee::Input();
SET_COLOR(2);
cout<<"Enter workingHours : ";
cin>>workingHours;
}
void Output(){
IEmployee::Output();
SET_COLOR(3);
cout<<"This working Hours: "<<this->workingHours<<" hours"<<endl;
cout<<"This calculateSalary : "<<this->calculateSalary()<<endl;
}
};
class FullTimeEmployee : public IEmployee {
private:
public:
FullTimeEmployee(){}
FullTimeEmployee(string Name,int paymentPerHour) : IEmployee(Name, paymentPerHour) {
}
float calculateSalary(){
return this->paymentPerHour*8;
}
void Input(){
IEmployee::Input();
}
void Output(){
IEmployee::Output();
SET_COLOR(3);
cout<<"This calculateSalary : "<<this->calculateSalary()<<endl;
}
};
class EmployeeManager{
private:
vector<IEmployee*> ds;
public:
EmployeeManager(){}
~EmployeeManager(){
for(int i = 0;i<ds.size();i++){
delete ds[i];
}
ds.clear();
}
void NhapDS(){
while(true){
SET_COLOR(4);
cout << "===Lua chon ===" << endl;
SET_COLOR(6);
cout << "1. PartTimeEmployee " << endl;
cout << "2. FullTimeEmployee " << endl;
SET_COLOR(9);
cout<<"3.Xuat danh sach "<<endl;
cout << "0. Thoat" << endl;
int loai;
cout << "Nhap: ";
cin >>loai;
if(loai == 1){
IEmployee *pt = new PartTimeEmployee();
pt->Input();
ds.push_back(pt);
}else if(loai == 2){
IEmployee *ft = new FullTimeEmployee();
ft->Input();
ds.push_back(ft);
}else if(loai == 0){
break;
}else{
cout << "Lua chon khong dung!" << endl;
}
}
}
//void DeleteEmployee(const string& name) {
//
//}
void AddEmployee(int type, string name, int paymentPerHour, int workingHours = 0) {
if (type == 1) {
PartTimeEmployee* pt = new PartTimeEmployee(name, paymentPerHour, workingHours);
ds.push_back(pt);
} else if (type == 2) {
FullTimeEmployee* ft = new FullTimeEmployee(name, paymentPerHour);
ds.push_back(ft);
} else {
SET_COLOR(4);
cout << "Invalid employee type!" << endl;
}
}
void SearchByName(const string& searchName) {
bool found = false;
for (int i = 0; i < ds.size(); i++) {
if (ds[i]->getname() == searchName) {
cout << "Found Employee: " << endl;
ds[i]->Output();
found = true;
}
}
if (!found) {
SET_COLOR(4);
cout << "No employee found with the name: " << searchName << endl;
}
}
float TongTienFullTime() {
float tong = 0;
for (int i = 0; i < ds.size(); i++) {
FullTimeEmployee* ft = dynamic_cast<FullTimeEmployee*>(ds[i]);
//neu chay loi thi sua NULL thanh nullptr
if (ft != NULL) {
tong = tong + ft->calculateSalary();
}
}
return tong;
}
float TongTien(){
float tong = 0;
for(int i = 0; i < ds.size(); i++){
tong = tong + ds[i]->calculateSalary();
}
return (size_t)tong;
}
void bubbleSortByName() {
for (int i = 0; i < ds.size() - 1; i++) {
for (int j = 0; j < ds.size() - i - 1; j++) {
if (ds[j]->getname() > ds[j + 1]->getname()) {
swap(ds[j], ds[j + 1]);
}
}
}
}
void XuatDS(){
SET_COLOR(3);
for(int i = 0; i < ds.size(); i++){
cout << "==Thong tin nhan vien thu " << (i+1) << ": " << endl;
ds[i]->Output();
cout<<"This calulaSalary : "<<this->TongTien()<<endl;
}
}
void Menu(){
while(true){
SET_COLOR(8); cout << "===MENU===" << endl;
SET_COLOR(1); cout << "1. Nhap DS" << endl;
cout << "2. Xuat DS" << endl;
cout<<"3.Show total Salary "<<endl;
cout<<"4.Show total Salary of FullTime Employee"<<endl;
cout<<"5.Sort Employee by name"<<endl;
cout<<"6.SearchByName "<<endl;
cout<<"7.Them nhan vien "<<endl;
cout << "0. Thoat" << endl;
int luachon;
SET_COLOR(6); cout << "Nhap lua chon: ";
cin >> luachon;
if(luachon == 1){
NhapDS();
}else if(luachon == 2){
XuatDS();
}else if(luachon==3){
SET_COLOR(2);
cout<<"=====Show total Salary "<<endl;
cout<<"Total : "<<this->TongTien()<<endl;
}
else if(luachon==4){
SET_COLOR(2);
cout<<"=====Show total Salary of Fulltime Emloyee "<<endl;
cout<<"Total : "<<this->TongTienFullTime()<<endl;
}
else if(luachon==5){
SET_COLOR(2);
cout<<"=====Sort Employee by name "<<endl;
this->bubbleSortByName();
}else if(luachon==6){
SET_COLOR(2); cout<<"=========SearchByName =========="<<endl;
string name;
SET_COLOR(3); cout<< "Enter the name to search: ";
cin.ignore();
getline(cin, name);
SearchByName(name);
}else if(luachon==7){
int loai, paymentPerHour, workingHours;
string name;
SET_COLOR(2);cout << "Chon loai nhan vien (1. PartTime, 2.FullTime): ";
cin >> loai;
cin.ignore();
SET_COLOR(1); cout << "Enter name: ";
getline(cin, name);
cout << "Enter payment per hour: ";
cin >> paymentPerHour;
if (loai == 1) {
cout << "Enter working hours: ";
cin >> workingHours;
AddEmployee(loai, name, paymentPerHour, workingHours);
} else {
AddEmployee(loai, name, paymentPerHour);
}
}else if(luachon==8){
SET_COLOR(3);cout << "Nhap vao ten nhan vien muon xoa: ";
break;
}
else{
SET_COLOR(3); cout << "Lua chon khong dung!" << endl;
}
}}
};
int main(){
EmployeeManager *ql=new EmployeeManager();
ql->Menu();
delete ql;
return 0;
}
Editor is loading...
Leave a Comment