codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
/********************************************************************************************* Xây dựng CTDL queue cài đặt bằng DSLK đơn để mô phỏng qui trình cho thuê máy ở một phòng NET với các yêu cầu: - Danh sách các máy trống A – Dùng kiểu queue, mỗi nút chứa số máy; - Danh sách khách đang chờ nhận máy Q – Dùng kiểu queue, mỗi nút chứa họ tên người thuê. - Danh sách khách đang thuê máy H - Dùng kiểu DSLK đơn, mỗi nút có họ tên khách, giờ bắt đầu thuê máy, số máy. - Các chức năng cần phải có: o Đăng ký thuê máy: Còn máy trong A thì thêm khách vào H và lấy máy vừa cho thuê ra khỏi queue A. Nếu A trống thì thêm khách vào queue Q. o Trả máy: Thêm máy trả vào queue A, bỏ người đó khỏi danh sách thuê H. o Phục vụ: Kiểm tra A và Q để phục vụ và cập nhật lại A, Q, H. **********************************************************************************************/ #include<iostream> #include<string.h> using namespace std; struct NodeA{ int soMay; NodeA *sau; }; struct QueueA{ NodeA *dau, *cuoi; }; struct NodeQ{ char hoTen[33]; NodeQ *sau; }; struct QueueQ{ NodeQ *dau, *cuoi; }; struct NodeH{ char tenKhach[33]; int soMay, gio, phut; NodeH *sau; }; struct ListH{ NodeH *dau, *cuoi; }; void ThemA(QueueA &A, int x) { NodeA *data = new NodeA[1];//cấp phát bộ nhớ cho đủ 1 phần tử data->soMay = x; data->sau = NULL; if (A.cuoi == NULL) A.cuoi = A.dau = data; else { A.cuoi->sau = data; A.cuoi = data; } } void XuatA(QueueA A) { NodeA *data; data = A.dau; if (data == NULL) cout << "Het may!"; else { cout << "========Danh sach may trong========" << endl; while (data != NULL) { cout << data->soMay << "\t"; data = data->sau; } cout << endl; /*for (data = A.dau; data != NULL; data = data->sau) cout << data->soMay << "\t";*/ } } void ThemH(ListH &H, int soMay, char tenKhach[33]) { NodeH *data = new NodeH[1]; data->soMay = soMay; strcpy(data->tenKhach, tenKhach); cout << "Nhap vao gio va phut: " << endl; cin >> data->gio >> data->phut; data->sau = NULL; if (H.dau == NULL) H.dau = H.cuoi = data; else { H.cuoi->sau = data; H.cuoi = data; } cout << "Khach " << data->tenKhach << " thue may thanh cong!" << endl;; } void ThemQ(QueueQ &Q) { NodeQ *data = new NodeQ[1]; cout << "Nhap ten cua khach: " << endl; cin.ignore(1); cin.getline(data->hoTen, 33); data->sau = NULL; if (Q.dau == NULL) Q.dau = Q.cuoi = data; else { Q.cuoi->sau = data; Q.cuoi = data; } cout << "Da them khach " << data->hoTen << " vao danh sach cho may!" << endl; } int XoaA(QueueA &A)//Hàm trả về giá trị là số nút bị xóa { NodeA *xoa; xoa = A.dau; int x = xoa->soMay; A.dau = A.dau->sau; delete xoa; return x; } void ThueMay(QueueA &A, QueueQ &Q, ListH &H) { if (A.dau == NULL) { cout << "Het may!" << endl << "Khach co muon cho hay khong (0/1)" << endl; int cho; cin >> cho; if (cho == 0) return; else { ThemQ(Q); } } else { int soMay; soMay = XoaA(A); char tenKhach[33]; cout << "Nhap vao ten khach: " << endl; cin.ignore(1); cin.getline(tenKhach, 33); ThemH(H, soMay, tenKhach); } } void XuatQ(QueueQ Q) { NodeQ *data; data = Q.dau; if (data == NULL) cout << "Khong co khach nao dang cho ca!"<<endl; else { cout << "========Danh sach khach cho========" << endl; cout << "STT\tHo Va Ten" << endl; for (int i = 1; data != NULL; i++, data = data->sau) cout << i << "\t" << data->hoTen << endl; } } void XuatH(ListH H) { NodeH *data; data = H.dau; if (data == NULL) cout << "Khong co khach nao dang dung may!" << endl; else { cout << "========Danh sach khach dang dung may========" << endl; cout << "STT\tHo Va Ten\tSo May\tThoi Gian" << endl; for (int i = 1; data != NULL; i++, data = data->sau) cout << i << "\t" << data->tenKhach << "\t" << data->soMay << "\t" << data->gio << ":" << data->phut << endl; } } int isset(ListH H, int soMay)//Kiểm tra xem trong H có số máy nào có số máy truyền vào không { NodeH *data; data = H.dau; while (data != NULL) { if (data->soMay == soMay) return 1; data = data->sau; } return 0; } void XoaH(ListH &H, int soMay) { NodeH *data; data = H.dau; if (data->soMay == soMay) { H.dau = H.dau->sau; delete data; } else { while (data != H.cuoi&&data->sau->soMay != soMay) { data = data->sau; NodeH *xoa; xoa = data->sau; data->sau = xoa->sau; if (xoa == H.cuoi) H.cuoi = data; delete xoa; } } } void TraMay(QueueA &A, ListH &H) { int soMay; cout << "Nhap so may tra: "; cin >> soMay; if (isset(H, soMay) == 1) { XoaH(H, soMay); ThemA(A, soMay); cout << "Tra may thanh cong!" << endl; } else cout << "So may nhap khong co trong danh sach thue may!" << endl; } int main() { QueueA MayTrong; MayTrong.dau = MayTrong.cuoi = NULL; QueueQ KhachCho; KhachCho.dau = KhachCho.cuoi = NULL; ListH KhachThue; KhachThue.dau = KhachThue.cuoi = NULL; int i, n; cout << "Cho biet so luong may cua tiem: "; cin >> n; for (i = 1; i <= n; i++) ThemA(MayTrong, i);//Thêm vào danh sách máy trống giá trị i int chucNang; ChucNang: cout << "========Lua chon chuc nang========" << endl; cout << "Chon 0 de thoat khoi chuong trinh" << endl; cout << "Chon 1 de xem danh sach may trong" << endl; cout << "Chon 2 de thue may" << endl; cout << "Chon 3 de xem danh sach khach dang cho may" << endl; cout << "Chon 4 de xem danh sach khach dang dung may" << endl; cout << "Chon 5 de tra may" << endl; cin >> chucNang; switch (chucNang) { case 0:return 0; case 1:XuatA(MayTrong); goto ChucNang; case 2:ThueMay(MayTrong, KhachCho, KhachThue); goto ChucNang; case 3:XuatQ(KhachCho); goto ChucNang; case 4:XuatH(KhachThue); goto ChucNang; case 5:TraMay(MayTrong, KhachThue); goto ChucNang; default:cout << "Chuc nang nay khong co!"; goto ChucNang; } }
Private
[
?
]
Run code
Submit