Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <conio.h>
- using namespace std;
- class NhanVien {
- protected:
- string _ma_nv;
- string _ho_ten;
- string _chuc_vu;
- string _gioi_tinh;
- string _que_quan;
- int _nam_vao_lam;
- public:
- string Get_MaNV() {
- return _ma_nv;
- }
- virtual void NhapThongTin_NV() {
- fflush(stdin);
- cout << "Ma nhan vien: ";
- getline(cin, _ma_nv);
- cout << "Ho ten: ";
- getline(cin, _ho_ten);
- cout << "Chuc vu: ";
- getline(cin, _chuc_vu);
- cout << "Que quan: ";
- getline(cin, _que_quan);
- cout << "Nam vao lam: ";
- cin >> _nam_vao_lam;
- cout << "Gioi tinh : ";
- fflush(stdin);
- getline(cin,_gioi_tinh);
- }
- virtual void XuatThongTin_NV() {
- cout << "Ma nhan vien: " << _ma_nv << endl;
- cout << "Ho ten: " << _ho_ten << endl;
- cout << "Chuc vu: " << _chuc_vu << endl;
- cout << "Que quan: " << _que_quan << endl;
- cout << "Nam vao lam: " << _nam_vao_lam << endl;
- cout << "Gioi tinh : " << _gioi_tinh<<endl;
- }
- virtual int TinhLuong() = 0;
- };
- class NVSanXuat : public NhanVien {
- int _so_sp;
- public:
- void NhapThongTin_NV() {
- NhanVien::NhapThongTin_NV();
- cout << "So san pham: ";
- cin >> _so_sp;
- }
- void XuatThongTin_NV() {
- NhanVien::XuatThongTin_NV();
- cout << "So san pham: " << _so_sp << endl;
- }
- int TinhLuong() {
- return (_so_sp * 10000 + 100000 + (2017 - _nam_vao_lam) * 20000);
- }
- };
- class NVVanPhong : public NhanVien {
- int _muc_luong;
- int _so_ngay_nghi;
- public:
- void NhapThongTin_NV() {
- NhanVien::NhapThongTin_NV();
- cout << "Muc luong: ";
- cin >> _muc_luong;
- cout << "So ngay nghi: ";
- cin >> _so_ngay_nghi;
- }
- void XuatThongTin_NV() {
- NhanVien::XuatThongTin_NV();
- cout << "Muc luong: " << _muc_luong << endl;
- cout << "So ngay nghi: " << _so_ngay_nghi << endl;
- }
- int TinhLuong() {
- return (_muc_luong + 100000 - _so_ngay_nghi * 10000 + (2017 - _nam_vao_lam) * 20000);
- }
- };
- class DSNhanVien {
- vector<NhanVien *> _ds;
- int MenuNV() {
- system("cls");
- int c = 0;
- cout << "---------------MENU--------------" << "\n1. Nhan vien san xuat\n2. Nhan vien van phong";
- while (true) {
- cout << "\n\tLua chon (1|2): ";
- cin >> c;
- if (c == 1 || c == 2)
- break;
- }
- return c;
- }
- int Menu() {
- system("cls");
- int c = 0;
- cout << "---------------MENU--------------" << "\n1. Them nhan vien\n2. Xem danh sach nhan vien\n3. Tim nhan vien";
- while (true) {
- cout << "\n\tLua chon (1|2|3): ";
- cin >> c;
- if (c == 1 || c == 2 || c == 3)
- break;
- }
- return c;
- }
- int MenuNhanVien() {
- int c = 0;
- cout << "---------------MENU--------------" << "\n1. Sua nhan vien\n2. Xoa nhan vien\n3. Chen nhan vien\n4. Tiep theo";
- while (true) {
- cout << "\n\tLua chon (1|2|3|4): ";
- cin >> c;
- if (c == 1 || c == 2 || c == 3 || c == 4)
- break;
- }
- return c;
- }
- public:
- void NhapDSNV() {
- NhanVien *nv = NULL;
- while (true) {
- switch (MenuNV()) {
- case 1:
- nv = new NVSanXuat;
- break;
- case 2:
- nv = new NVVanPhong;
- break;
- }
- nv->NhapThongTin_NV();
- _ds.push_back(nv);
- cout << "An ESC de ket thuc";
- if (getch() == 27)
- break;
- }
- }
- // xu?t nhân viên t? v? trí iterator truy?n vào. ý nghia là n?u g?i hàm này c?n ph?i có di?m xu?t phát
- void XuatDSNV(vector<NhanVien *>::iterator start) {
- NhanVien *nv;
- for (vector<NhanVien *>::iterator it = start; it != _ds.end(); it++) {
- system("cls");
- // hi?n th? thông tin ra màn hình và hi?n th? menu option
- (*it)->XuatThongTin_NV();
- cout << "Luong: " << (*it)->TinhLuong() << endl;
- switch (MenuNhanVien()) {
- case 1:
- // c?p nh?t lai thông tin
- (*it)->NhapThongTin_NV();
- break;
- case 2:
- // xóa v? trí t? it, sau khi xóa gi?m it di 1 don v? d? k?t thúc vòng for nó c?ng l?i 1 don v? (it++),
- // nhu v?y thì nó quay l?i v? trí v?a m?i xóa d? ki?m tra cái m?i du?c c?p nhât thay v? trí xóa
- _ds.erase(it);
- it--;
- break;
- case 3:
- // ki?m tra lo?i nhân viên c?n nh?p
- switch (MenuNV()) {
- case 1:
- nv = new NVSanXuat;
- break;
- case 2:
- nv = new NVVanPhong;
- break;
- }
- // nh?p thông tin cho nhân viên dó và chèn vào v? trí c?a it
- // d? tránh l?i v?i it thì return thay cho it-- hay it++
- nv->NhapThongTin_NV();
- _ds.insert(it, nv);
- return;
- }
- }
- }
- // tr? v? v? trí iterator có mã nhân viên b?ng mã nhân viên truy?n vào
- vector<NhanVien *>::iterator TimNV(string ma_nv) {
- vector<NhanVien *>::iterator it;
- for (it = _ds.begin(); it != _ds.end(); it++) {
- if ((*it)->Get_MaNV() == ma_nv)
- break;
- }
- return it;
- }
- // hàm này s? ch?y liên t?c cho d?n khi ?n ESC
- void Loop() {
- while (true) {
- // hi?n th? menu ch?n
- switch (Menu()) {
- case 1:
- // nh?p lu?ng nhân viên không gi?i h?n cho d?n khi ?n ESC
- NhapDSNV();
- continue;
- case 2:
- // xu?t danh sách nhân viên b?t d?u t? v? trí d?u danh sách
- XuatDSNV(_ds.begin());
- break;
- case 3:
- // Tìm ki?m nhân viên v?i ma_nv
- fflush(stdin);
- string ma_nv;
- cout << "Ma nhan vien: ";
- getline(cin, ma_nv);
- vector<NhanVien *>::iterator start = TimNV(ma_nv);
- // start == _ds.end t?c là không có nhân viên nào trùng v?i ma_nv c?n tìm
- if (start == _ds.end()) {
- cout << "Khong tim thay" << endl;
- }
- // tru?ng h?p còn l?i là tìm th?y và b?t d?u xu?t danh sách t? v? trí tìm th?y tr? di
- else {
- XuatDSNV(start);
- }
- break;
- }
- cout << "Nhan ESC de ket thuc";
- if (getch() == 27)
- break;
- }
- }
- };
- int main() {
- DSNhanVien ds;
- ds.Loop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement