/*
có 7 bước chính khi làm việc với danh sách liên kết
1.khai báo 1 node // node *p;
2.khởi tạo 1 node// p!=NULL
3.khai báo 1 danh sách
4.khởi tạo 1 danh sách
5*.thêm đầu()
6*. thêm cuối()
7.nhập danh sách(sử dụng chức năng thêm cuối hoặc thêm dầu để thêm vào chứ nó không giống mảng nhak )
8.xuất danh sách
<bước 5,6 chọn 1 trong 2 khi nhập nhak>
*/
#include<iostream>/// thư viện thần thoại
using namespace std;
#include<string>//còn bên c là string.h nek
struct nv
{
string manhanvien, tennhanvien, tinhtranggiadinh,trinhdovanhoa,ketquacongviec;
double socon;
double soluongcanban;
double songaynghicophep,songaynghikhongphep,songaylamthemtrongthang;
};
void Nhap(nv &a)/// nhập có thay đổi danh sách nên có tham chiếu zô nha
{
cin.ignore();// giống lệnh fflush(stdin);// nhé
cout << "\nNhap ma so nhan vien: "; getline(cin, a.manhanvien);
cout << "\nNhap vao ten nhan vien: "; getline(cin, a.tennhanvien);
cout << "\nTinh trang gia dinh: "; getline(cin, a.tinhtranggiadinh);
cout << "\nNhap so luong con trong gia dinh: "; cin >> a.socon;
cin.ignore();
cout << "\nTrinh do van hoa:"; getline(cin, a.trinhdovanhoa);
cout << "\nLuong can ban : "; cin >> a.soluongcanban;
cout << "\nSo ngay nghi co phep: "; cin >> a.songaynghicophep;
cout << "\nSo ngay nghi khong phep: "; cin >> a.songaynghikhongphep;
cout << "\nSo ngay làm them: "; cin >> a.songaylamthemtrongthang;
cin.ignore();
cout << "\nket qua cong viec cua ban la: "; getline(cin, a.ketquacongviec);
cout << "enter nhap tiep!";
}
void Xuat(nv a)//xuất không có thay đổi j nên ta không cần tham chiếu cho nó bạn nghe
{
cout << "\n ma so nhan vien: " << a.manhanvien;
cout << "\nten nhan vien: " << a.tennhanvien;
cout << "\nTinh trang gia dinh: " << a.tinhtranggiadinh;
cout << "\nso luong con trong gia dinh: " << a.socon;
cout << "\nTrinh do van hoa:" << a.trinhdovanhoa;
cout << "\nLuong can ban : " << size_t(a.soluongcanban);
cout << "\nSo ngay nghi co phep: " << a.songaynghicophep;
cout << "\nSo ngay nghi khong phep: " << a.songaynghikhongphep;
cout << "\nSo ngay làm them: " << a.songaylamthemtrongthang;
cout << "\nket qua cong viec: " << a.ketquacongviec;
}
struct node// khai báo 1 node
{
nv data;// khai báo biến data với kiểu dữ liệu nv xem ở struct đầu bài nghe
struct node *pnext;/// khởi tạo con trỏ
};
node* getnode(nv x)/// muốn đưa được vào list thì ta phải cho dữ liệu chẳn hạn như biến x vào node và thôi miên //biến x thành node
// thì mới thêm vào //list dk nhé
//// vì list chỉ thêm khi nó là node bạn nhé
{
node *p = new node;// khởi tạo và cấp phát con trỏ node bên c++ nhé // bạn có thể dùng malloc bên c cũng được không vấn đề bạn nhé
if (p == NULL) // nếu ta không thêm thì không có j nên nó là rỗng nhé
{
return NULL;
}
else
{
p->data = x;/// dữ liệu bằng dữ liệu cần thêm
p->pnext = NULL;/// trỏ đến cuối bằng null
return p;// trả về node sau khi khởi tạo
}
}
struct list//khai báo danh sách
{
node *phead;
node *ptail;
};
void init(list &l)// khởi tạo danh sách nó giống như ta khởi tạo biến a vậy
/////////////////// int a;/// khai báo biến a
////////////////// a=9;// khởi tạo a=9
{
l.phead = l.ptail = NULL;
}//them đầu
void addhead(list &l,node *p)
{
if (l.phead == NULL)
{
l.phead = l.ptail = p;
}
else
{
p->pnext = l.phead;
l.phead = p;
}
}
void addtail(list &l, node *p)// thêm cuối
{
if (l.phead == NULL)
{
l.phead = l.ptail = p;
}
else
{
l.ptail->pnext = p;
l.ptail = p;
}
}
void input(list &l,int n)
{// trước khi nhập thì bạn phải khởi tạo danhs sách cho nó !(nó đồng nghĩa với việc sau khi khai báo biến a song thì khởi tạo binế a=1 gàá trị thì mới sài được nha) vì nếu 1 node sẵn có thì thêm 1 node vào vị trí đã có thì danh sách sẽ .... bùng :^_^ // đùa thuj ^_^/// nhập không được nữa nhé
init(l);//
for (int i = 1; i <= n; i++)
{
nv a;// khai báo biến a kiểu nv định nghĩa ở đầu bài nha
Nhap(a);// nhập nó zô
node *p = getnode(a);/// đưa a vô node
addtail(l, p);/// thêm vào danh sách vì list chỉ thêm khi nó là node nghen
}
}
/// hàm tính lương các bạn biết rùi chứ gì xem và cảm nhận nhak
double tinhluong(node *p )
{
return p->data.soluongcanban+ ( p->data.socon > 2 ?0.05*p->data.soluongcanban : 0) +
(p->data.trinhdovanhoa == "CH" ?0.1*p->data.soluongcanban : 0) +
(p->data.songaylamthemtrongthang > 0 ? 0.04*p->data.soluongcanban / p->data.songaylamthemtrongthang : 0) +
(p->data.songaynghikhongphep > 0 ?(-0.05)*p->data.soluongcanban / p->data.songaynghikhongphep : 0);
}
void output(list &l,int n)
{
int diem = 0;
for (node *p = l.phead; p; p = p->pnext)///
{
/*
vòng for này nó cũng giống như vòng for(int i=0;i<n;i++)
*/
cout << "\nthong tin nhan vien thu: " <<++diem;
Xuat(p->data);
cout << "\nTien luong cua nhan vien nay la: "<< rsize_t(tinhluong(p));///
////////////// giải thích thêm size_t // chức năng nó lấy ra những con số ma thuật khi nó bị ẩn trong máy
}
}
void them(list &l)
{
node *p = new node;
if (l.phead == NULL)
{
l.phead =l.ptail = p;
}
else
{
nv n;
cout << "\nNhap thong tin nhan vien muon them vao: ";
cout<<"\nenter de nhap thong tin !";
Nhap(n);
p = getnode(n);
addtail(l, p);
}
}
// ê hàm này đọc và cảm nhận tình cảm của nó nha
void xoa(list &l, string ma)
{
node *j = new node;
{
for (node *p = l.phead; p; p = p->pnext)
{
if (p->data.manhanvien == ma)
{
node *g = j->pnext;
j->pnext = g->pnext;
delete g;
return;
}
j = p;
}
}
}
void tim(list l, node *p)
{
for (node *k = l.phead; k; k->pnext)
{
if(k->data.manhanvien == p->data.manhanvien)
{
cout << "\nThong tin nhan vien duoc tim thay la: ";
Xuat(k->data);
return;// tìm xong xuất ra nếu không có mình không đảm bảo
}
}
cout << "\nKhong tim thay nhan vien nao xin kiem tra lai !";
return;
}
void sua(list &l, node *p)
{
node *j = new node;
for (node *k = l.phead; k; k = k->pnext)
{
if (k->data.manhanvien == p->data.manhanvien)
{
Nhap(j->data);
Xuat(j->data);
return;
}
j = k;
}
cout << "\nKhong co ma nhan vien nay xin kiem tra lai!";
return;
}
int main()
{
list l;
int n;
cout << "\nNhap so luong nhan vien: "; cin >> n;
input(l,n);
output(l,n);
////
//cout << "\nThem nhan vien: ";
//them(l);
//output(l, n);
nv k;
//cout << "\nNhap ma nhan vien ban muon xoa !";
//getline(cin, k.manhanvien);
//node *f = getnode(k);
//xoa(l, "3");
//cout << "\nDanh sach sau khi xoa la: ";
//output(l, n);
///////////// tim nhan vien
cout << "\nNhap ma nhan vien ban muon tim !";
getline(cin, k.manhanvien);
node *f = getnode(k);
tim(l, f);
/*nv m;
cout << "\nNhap ma so ban muon sua : "; getline(cin, m.manhanvien);
node *f = getnode(m);
sua(l, f);*/
//output(l, n);
system("pause");
return 0;
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.