#include <iostream>
#include <iomanip>
#include <string>
#include <conio.h>
using namespace std;
class NGUOI {
protected:
string maso; // Ky tu dau tien la BC: Bien che, HD: Hop dong
float luong;
string hoten;
public:
void nhap();
void in();
string getmaso() {
return maso;
}
float getluong() {
return luong;
}
string getten(){
return hoten;
}
};
void NGUOI::nhap() {
cout << endl << "Nhap ma so (BC: bien che, HD: hop dong): ";
cin >> maso;
cout << endl << "Nhap ho ten: ";
cin.ignore();
getline(cin, hoten);
}
void NGUOI::in() {
cout << endl << setw(10) << maso << setw(30) << hoten << setw(10) << luong;
}
class BIENCHE : virtual public NGUOI {
private:
float hsl, phucap;
public:
void nhapBC() {
cout << endl << "Nhap he so luong: ";
cin >> hsl;
cout << endl << "Nhap phu cap: ";
cin >> phucap;
luong = hsl * 180000 + phucap;
}
};
class HOPDONG : virtual public NGUOI {
private:
float ngaycong, tiencong, hsvg;
public:
void nhapHD() {
cout << endl << "Nhap ngay cong: ";
cin >> ngaycong;
cout << endl << "Nhap tien cong/ngay: ";
cin >> tiencong;
cout << endl << "Nhap he so vuot gio: ";
cin >> hsvg;
luong = ngaycong <= 26 ? ngaycong * tiencong : (26 + (ngaycong - 26) * hsvg) * tiencong;
}
};
class VIENCHUC : public BIENCHE, public HOPDONG {
private:
static int tsvc;
static float tsluong;
static float tsluongbc;
public:
VIENCHUC(){
tsvc++;
}
~VIENCHUC(){
tsvc--;
tsluong -= luong;
}
void nhap_vc() {
nhap(); // Goi ham nhap o lop nguoi
if (maso[0] == 'b' || maso[0] == 'B'){
nhapBC();
tsluongbc += luong;
}
else
nhapHD();
tsluong += luong;
}
static void sapxep(VIENCHUC **list) {
for (VIENCHUC *i = *list; i != NULL; i = i->next) {
for (VIENCHUC *j = i->next; j != NULL; j = j->next) {
if (i->getluong() < j->getluong()) {
swap(*i, *j);
}
}
}
}
static void in_ts(){
cout<<endl<<"Tong so vien chuc: "<<tsvc<<" . Tong so luong: "<<tsluong;
cout<<endl<<"Tong so luong cua Bien che: "<<tsluongbc;
}
void operator>(VIENCHUC a){
if(luong > a.luong){
cout<<endl<<"Vien chuc "+ a.getten()+ " co so tien lon hon Vien trong danh sach";
}
else
cout<<endl<<"Vien chuc "+ a.getten()+ " co so tien nho hon Vien chuc trong danh sach";
}
VIENCHUC *next;
};
int VIENCHUC::tsvc=0;
float VIENCHUC::tsluong = 0.0;
float VIENCHUC::tsluongbc =0.0;
int main() {
//thuat toan tao danh sanh lien ket don
VIENCHUC *list = NULL, *last = NULL, *node =NULL;
char tiep = 'c';
while(tiep == 'c'){
node = new VIENCHUC;
node->nhap_vc();
node->next = NULL;
if(list==NULL){
list = node;
last = node;
}else{
last->next = node;
last = node;
}
cout<<endl<<"Nhap tiep hay khong(c:tiep): ";
tiep = getch();
}
cout << "\n Danh sach nhan vien truoc khi sap xep:" << endl;
VIENCHUC *current = list;
while (current != NULL) {
current->in();
current = current->next;
}
VIENCHUC::sapxep(&list);
cout << "\n Danh sach nhan vien sau khi sap xep:" << endl;
current = list;
while (current != NULL) {
current->in();
current = current->next;
}
VIENCHUC::in_ts();
}
Thuật toán sapxep theo danh sách liên kết đơn
Bạn đang muốn hỏi gì? Hay đây chỉ là bài chia sẻ của bạn?
mình đang hỏi xem có cách nào để thuât toán sapxep hoạt động không mình thử mọi cách mà nó không hoạt động dược
Mình đoán là swap hoạt động không như bạn mong muốn, bạn debug ở chỗ đấy đi