Chào mọi người!
Em đang code chèn thêm thông tin nhân viên vào danh sách, khi xuất ra kết quả bị sai. Vd trước khi chèn, em nhập thông tin của A B C. Sau đó, em chèn thông tin D vào vị trí thứ 2 thì output ra là ABDD, nhưng kết quả ABDC mới đúng. Cho em hỏi em bị sai lỗi nào ạ? Sao lại thông tin D lại lặp lại cuối mảng ạ?
class NhanVien {
protected:
string hoten;
string loai;
public:
NhanVien(){
}
virtual ~NhanVien() {}
virtual void Nhap() {
cout << "\nNhap ho va ten: ";
cin.ignore();
getline(cin, hoten);
cout << "\nNhap loai nhan vien: ";
getline(cin, loai);
}
virtual void Xuat() {
cout << "\nHo va ten: " << hoten;
cout << "\nLoai: " << loai;
}
friend istream& operator << (istream& is, NhanVien& nv) {
nv.Nhap();
return is;
}
friend ostream& operator >> (ostream& os, NhanVien& nv) {
nv.Xuat();
return os;
}
virtual float Luong() {
return 0;
}
};
class VanPhong :public NhanVien {
private:
int hesochucvu;
public:
void Nhap() {
NhanVien::Nhap();
cout << "\nNhap he so chuc vu: "; cin >> hesochucvu;
}
void Xuat() {
NhanVien::Xuat();
cout << "\nHe so chuc vu: " << hesochucvu;
cout << "\nLuong hang thang: " << fixed << setprecision(0) << Luong();
cout << "\n\n";
}
float Luong() {
return 1000000 * hesochucvu;
}
};
class LapTrinhVien :public NhanVien {
private:
int sophanmem;
public:
void Nhap() {
NhanVien::Nhap();
cout << "\nNhap so phan mem viet duoc: "; cin >> sophanmem;
}
void Xuat() {
NhanVien::Xuat();
cout << "\nSo phan mem viet duoc: " << sophanmem;
cout << "\nLuong hang thang: " << fixed << setprecision(0) << Luong();
cout << "\n\n";
}
float Luong() {
return 5000000 * sophanmem;
}
};
class PhucVu :public NhanVien {
private:
float thuong;
public:
void Nhap() {
NhanVien::Nhap();
cout << "\nNhap tien thuong: "; cin >> thuong;
}
void Xuat() {
NhanVien::Xuat();
cout << "\nTien thuong: " << thuong;
cout << "\nLuong hang thang: " << fixed << setprecision(0) << Luong();
cout << "\n\n";
}
float Luong() {
return 3000000 + thuong;
}
};
class Menu {
private:
vector <NhanVien*> NV;
public:
Menu() {
}
~Menu() {
}
void Nhap() {
int n;
cout << "\nNhap tong so nhan vien: "; cin >> n;
for (int i = 0; i < n; i++) {
cout << "\nNhan vien van phong (1), Lap trinh vien (2), Nhan vien phuc vu (3): ";
int k; cin >> k;
NhanVien* nv;
if (k == 1)
nv = new VanPhong;
else if(k == 2)
nv = new LapTrinhVien;
else
nv = new PhucVu;
nv->Nhap();
NV.push_back(nv);
}
}
void Xuat() {
for (int i = 0; i < NV.size(); i++)
NV.at(i)->Xuat();
}
void ChenThongTin() {
int pos;
cout << "\nNhap vi tri can chen: "; cin >> pos;
cout << "\nNhan vien van phong (1), Lap trinh vien (2), Nhan vien phuc vu (3): ";
int k; cin >> k;
if (k == 1)
NV[pos] = new VanPhong;
else if (k == 2)
NV[pos] = new LapTrinhVien;
else
NV[pos] = new PhucVu;
NV[pos]->Nhap();
NV.insert(NV.begin() + pos ,NV[pos]);
cout << "\nThong tin nhan vien duoc them vao: ";
Menu::Xuat();
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?