Hiện nay trong khi đời sống con người nâng cao, nhu cầu du lịch ngày càng phát triển thì nhu cầu tìm những khách sạn có phòng nghỉ chất lượng và dịch vụ tốt để nghỉ ngơi thư giãn ngày càng phổ biến. Mặt khác hiện nay trong các khách sạn, các cán bộ làm công tác quản lý thông tin của khách sạn phải quản lý một lượng lớn thông tin về cán bộ công nhân viên, tình trạng phòng… Việc này mất rất nhiều thời gian và công sức của con người nên việc ứng dụng tin học vào công tác quản lý khách sạn theo yêu cầu của người dùng ngày càng trở nên hết sức cần thiết, quan trọng. Chính vì vậy có vậy có phần mềm quản lý khách sạn là vô cùng quan trọng. II. XÁC ĐỊNH CTDL BIỂU DIỄN BÀI TOÁN Quản lý phòng khách sạn: mã phòng, tên phòng, … III. XÁC ĐỊNH CÁC THUẬT TOÁN – CÁC CHỨC NĂNG Tổ chức lưu trữ bài toán bằng : Danh sách liên kết đơn. Các thuật toán • Phương pháp Đổi chỗ trực tiếp (Interchange sort) • Phương pháp Nổi bọt (Bubble sort) • Phương pháp Chèn trực tiếp (Insertion sort) • Phương pháp Chọn trực tiếp (Selection sort) Các chức năng chính như: Tạo list Tạo struct Các hàm xử lý dữ liệu (thêm, sửa, xoá, tìm kiếm…) Các hàm xử lý khác Chương trình khi chạy ban đầu xuất xuất hiện danh sách lựa chọn chức năng: 1. Nhập số lượng phòng 2. Nhập dữ liệu 3. In danh sách phòng 4. Sắp xếp phòng theo giá giảm dần 5. Xếp loại phòng 6. Phòng có giá thấp nhất 7. Tìm kiếm phòng theo tên phòng 8. Phòng có giá cao nhất 9. Thoát chương trình
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
TRUNG TÂM ĐÀO TẠO ELEARNING
-TÊN SINH VIÊN:
BÀI TOÁN QUẢN LÝ THUÊ
PHÒNG KHÁCH SẠN
BÁO CÁO BÀI TẬP LỚN MÔN: CẤU TRÚC DỮ LIỆU
Trang 2
CHỦ ĐỀ 07: Viết chương trình quản lý các đối tượng để thực hiện cho “Bài toán quản lý
thuê phòng khách sạn”
I Nội dung:
* Tổ chức lưu trữ bài toán bằng 01 cấu trúc dữ liệu đã học: Danh sách liên kết đơn, Danh sách liên kết kép, Ngăn xếp, Hàng đợi, Cây hoặc Đồ thị, …
* Chương trình phải quản lý ít nhất 02 đối tượng (gợi ý tham khảo: Phòng, Hoá đơn thuê phòng, Khách hàng, Nhân viên khách sạn, …)
(Sinh viên tự xác định các thông tin cần quản lý của từng đối tượng cho phù hợp)
* Chương trình có đủ tối thiểu các chức năng:
- Nhập – In danh sách đối tượng; Đọc và lưu file: 2 điểm
- Thêm, sửa, xoá đối tượng: 1.5 điểm
- Tìm kiếm đối tượng: 0.5 điểm (Tối thiểu 2 yêu cầu tìm kiếm)
- Sắp xếp đối tượng: 2 điểm (Tối thiểu 4 yêu cầu sắp xếp)
- Các yêu cầu tìm phần tử lớn nhất, nhỏ nhất: 1 điểm (Tối thiểu 4 yêu cầu)
- Các yêu cầu tính tổng, trung bình, đếm: 1 điểm (Tối thiểu 5 yêu cầu)
- Các yêu cầu thống kê theo điều kiện: 1 điểm (Tối thiểu 5 yêu cầu)
=> Chương trình chính gọi lần lượt các chức năng: 1 điểm
Lưu ý: Khuyến khích tổ chức chương trình dưới dạng menu
II Yêu cầu chung về quyển báo cáo và chương trình
*Toàn bộ chương trình và file báo cáo BTL được lưu trong thư mục với tên theo nguyên tắc sau:
Nguyên tắc: CTDL-BTL-<thứ tự đề>-<Họ tên sinh viên> Ví dụ: CTDL
-BTL-01-NguyenVanHung
*Cấu trúc quyển báo cáo:
1 Trang bìa: Tên đề tài, tên nhóm (gồm cả họ tên các thành viên của nhóm), tên lớp
2 Mục lục
3 Giới thiệu đề tài
4 Giới thiệu các thành phần chính của chương trình: Cấu trúc đối tượng quản lý, Các thuật toán được sử dụng của chương trình
5 Giới thiệu các chức năng trong chương trình
6 Kết quả chạy chương trình
Trang 37 Kết luận, hướng phát triển tiếp theo
8 Tài liệu tham khảo
I XÁC ĐỊNH BÀI TOÁN
Hiện nay trong khi đời sống con người nâng cao, nhu cầu du lịch ngày càng phát triển thì nhu cầu tìm những khách sạn có phòng nghỉ chất lượng và dịch vụ tốt để nghỉ ngơi thư giãn ngày càng phổ biến Mặt khác hiện nay trong các khách sạn, các cán bộ làm công tác quản lý thông tin của khách sạn phải quản lý một lượng lớn thông tin về cán bộ công nhân viên, tình trạng phòng… Việc này mất rất nhiều thời gian và công sức của con người nên việc ứng dụng tin học vào công tác quản lý khách sạn theo yêu cầu của người dùng ngày càng trở nên hết sức cần thiết, quan trọng Chính vì vậy có vậy có phần mềm quản lý khách sạn là vô cùng quan trọng
II XÁC ĐỊNH CTDL BIỂU DIỄN BÀI TOÁN
- Quản lý phòng khách sạn: mã phòng, tên phòng, …
III XÁC ĐỊNH CÁC THUẬT TOÁN – CÁC CHỨC NĂNG
Tổ chức lưu trữ bài toán bằng : Danh sách liên kết đơn.
Các thuật toán
Phương pháp Đổi chỗ trực tiếp (Interchange sort)
Phương pháp Nổi bọt (Bubble sort)
Phương pháp Chèn trực tiếp (Insertion sort)
Phương pháp Chọn trực tiếp (Selection sort)
Các chức năng chính như:
- Tạo list
- Tạo struct
- Các hàm xử lý dữ liệu (thêm, sửa, xoá, tìm kiếm…)
- Các hàm xử lý khác
Chương trình khi chạy ban đầu xuất xuất hiện danh sách lựa chọn chức năng:
1 Nhập số lượng phòng
2 Nhập dữ liệu
3 In danh sách phòng
4 Sắp xếp phòng theo giá giảm dần
5 Xếp loại phòng
6 Phòng có giá thấp nhất
7 Tìm kiếm phòng theo tên phòng
8 Phòng có giá cao nhất
9 Thoát chương trình
IV LẬP TRÌNH – CÀI ĐẶT
Tiến hành cài đặt bài tập, Liệt kê cấu trúc chương trình tổng quát và đưa ra một số code xử lý chính
- Tiến hành code
Trang 4#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
struct ThuePHONG {
char ten[30];
float sogiuong;
float gia;
};
typedef ThuePHONG TP;
void nhap(TP& TP);
void nhapN(TP a[], int n);
void xuat(TP TP);
void xuatN(TP a[], int n);
void sapxep(TP a[], int n);
void xeploai(TP a);
void xeploaiN(TP a[], int n);
int xoaTheoID(TP a[], int n);
void TimKiemTP(TP a[], int n);
void DiemTBLonNhat(TP a[], int n);
void DiemTBNhoNhat(TP a[], int n);
int main() {
int key;
char fileName[] = "DSTP.txt";
Trang 5int n;
bool daNhap = false;
do {
printf("\nNhap so luong phong: "); scanf_s("%d", &n);
} while (n <= 0);
TP a[10];
while (true) {
system("cls");
printf("******************************************\n");
printf("** CHUONG TRINH QUAN LY Thue Phong **\n");
printf("** 1 Nhap du lieu **\n");
printf("** 2 In danh sach phong **\n");
printf("** 3 Sap xep theo gia tang dan **\n");
printf("** 4 Xep loai phòng **\n");
printf("** 5 Phong co gia thap nhat **\n");
printf("** 6 Tim kiem phong **\n");
printf("** 7 Phong co gia cao nhat **\n");
printf("** 0 Thoat **\n");
printf("******************************************\n");
printf("** Nhap lua chon cua ban **\n");
scanf_s("%d", &key);
switch (key) {
case 1:
printf("\nBan da chon nhap DS phong!");
nhapN(a, n);
printf("\nBan da nhap thanh cong!");
daNhap = true;
printf("\nBam phim bat ky de tiep tuc!");
_getch();
Trang 6case 2:
if (daNhap) {
printf("\nBan da chon xuat DS phong!");
xuatN(a, n);
} else {
printf("\nNhap DS Phong truoc!!!!");
} printf("\nBam phim bat ky de tiep tuc!");
_getch();
break;
case 3:
if (daNhap) {
printf("\nBan da chon sap xep phong theo gia phong giam dan!");
sapxep(a, n);
xuatN(a, n);
} else {
printf("\nNhap DS Phong truoc!!!!");
} printf("\nBam phim bat ky de tiep tuc!");
_getch();
break;
case 4:
if (daNhap) {
printf("\nBan da chon thoat xep loai phòng!");
xeploaiN(a, n);
}
Trang 7else {
printf("\nNhap DS Phong truoc!!!!");
} printf("\nBam phim bat ky de tiep tuc!");
_getch();
break;
case 5:
if (daNhap) {
//DiemTBNhoNhat(a, n);
float MIN = 10;
int minPos = 0;
for (int j = 0; j < n; j++) {
if (MIN > (int)a[j].gia) {
MIN = a[j].gia;
minPos = j;
} }
printf("\nPhong co gia thap nhat la %s, voi gia %0.2f", a[minPos].ten, a[minPos].gia);
} else {
printf("\nNhap DS Phong truoc!!!!");
}
printf("\nBam phim bat ky de tiep tuc!");
_getch();
break;
Trang 8case 6:
if (daNhap) {
TimKiemTP(a, n);
}
else {
printf("\nNhap DS Phong truoc!!!!");
}
printf("\nBam phim bat ky de tiep tuc!");
_getch();
break;
case 7:
{
if (daNhap) {
DiemTBLonNhat(a, n);
}
else {
printf("\nNhap DS Phong truoc!!!!");
}
printf("\nBam phim bat ky de tiep tuc!");
_getch();
break;
}
case 0:
printf("\nBan da chon thoat chuong trinh!");
_getch();
return 0;
default:
printf("\nKhong co chuc nang nay!");
printf("\nBam phim bat ky de tiep tuc!");
Trang 9break;
} }
}
void nhap(TP& TP) {
printf("\nNhap ten: ");
scanf_s("%s", &TP.ten, 39);
printf("\nNhap so giuong: ");
scanf_s("%f", &TP.sogiuong);
printf("\nNhap gia: ");
scanf_s("%f", &TP.gia);
}
void nhapN(TP a[], int n) {
printf("\n \n");
for (int i = 0; i < n; ++i) {
printf("\nNhap Phong thu %d:", i + 1);
nhap(a[i]);
}
printf("\n \n");
}
void xuat(TP TP) {
printf("\n Ten phong: %s", TP.ten);
printf("\n Gia: %0.2f", TP.gia);
printf("\nSo giuong : %0.2f", TP.sogiuong);
Trang 10void xuatN(TP a[], int n) {
printf("\n \n");
for (int i = 0;i < n;++i) {
printf("\nThong tin TP thu %d:", i + 1);
xuat(a[i]);
}
printf("\n \n");
}
void sapxep(TP a[], int n) {
//Sap xep theo DTB tang dan
TP tmp;
for (int i = 0;i < n;++i) {
for (int j = i + 1; j < n;++j) {
if (a[i].gia > a[j].gia) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
} }
}
}
void xeploai(TP TP) {
if (TP.gia >= 150000) printf("VIP");
else if (TP.gia >= 6.5) printf("VIP2");
else printf("Binh Dan");
}
Trang 11void xeploaiN(TP a[], int n) {
printf("\n \n");
for (int i = 0;i < n;++i) {
printf("\nXep loai cua phòng thu %d la: ", i + 1);
xeploai(a[i]);
}
printf("\n \n");
}
void TimKiemTP(TP a[], int n) {
char Search[30];
printf("\nVui long nhap ten phong ban muon tim kiem:");
scanf_s("%s", &Search, 30); fflush(stdin);
int result;
for (int j = 0; j <= n; j++)
{
result = strcmp(Search, a[j].ten);
if (result == 0) {
printf("\n***Cac thong tin ve ket qua tim kiem duoc: ");
printf("\n\t\ta, Ten Phong: %s", a[j].ten);
printf("\n\t\ta, So giuong: %0.2f", a[j].sogiuong);
printf("\n\t\tc, Gia: %0.2f", a[j].gia);
} else {
printf("\nChua co ket qua tim kiem Hay doi chut");
Trang 12} }
}
void DiemTBLonNhat(TP a[], int n) {
float MAX = 0;
int maxPos = 0;
for (int j = 1; j <= n; j++)
{
if (MAX < a[j].gia) {
MAX = a[j].gia;
maxPos = j;
} }
printf("\nPhong co gia cao nhat la %s, voi gia %0.2f", a[maxPos].ten, MAX); }
void DiemTBNhoNhat(TP a[], int n) {
float MIN = 10.0;
int minPos = 0;
for (int j = 1; j <= n; j++)
{
if (MIN > a[j].gia) {
MIN = a[j].gia;
minPos = j;
} }
printf("\nPhong co gia thap nhat la %s, voi gia %0.2f", a[minPos].ten, MIN);
}
Trang 13int xoaTheoID(TP a[], int n) {
char xoaten[30];
printf("\nNhap ten phòng muon xoa: "); scanf_s("%s", &xoaten, 30);
printf("\nBan da chon xuat DS TP!");
int found = 0;
for (int i = 0; i < n; i++) {
if (a[i].ten == xoaten) {
found = 1;
for (int j = i; j < n; j++) {
a[j] = a[j + 1];
} printf("\nXoa phòng %s ten la: ", &xoaten);
break;
} }
if (found == 0) {
printf("\n Phòng co ten = %s khong ton tai.", &xoaten);
return 0;
}
else {
return 1;
}
}
V KIỂM THỬ - LẬP BỘ TEST
Thực hiện chạy với bộ dữ liệu mẫu (Input-Output) đã xác định ở phần 2
Cho biết kết quả khi chạy từng chức năng tương ứng trên bộ dữ liệu Input đó
Chụp hình ảnh kết quả chương trình tương ứng
1 NHẬP SỐ LƯỢNG PHÒNG
Trang 142 MÀN HÌNH CÁC CHỨC NĂNG CỦA CHƯƠNG TRÌNH
3 GIAO DIỆN MÀN HÌNH NHẬP THÔNG TIN PHÒNG
Trang 154 IN DANH SÁCH PHÒNG
5 SẮP XẾP PHÒNG THEO GIÁ GIẢM DẦN
6 XẾP LOẠI PHÒNG
Trang 167 PHÒNG CÓ GIÁ THẤP NHẤT
8 TÌM KIẾM SINH VIÊN THEO TÊN
9 PHÒNG CÓ GIÁ CAO NHẤT
10 ĐÓNG CHƯƠNG TRÌNH
Trang 18VI TÀI LIỆU THAM KHẢO
- Đỗ Xuân Lôi, “Cấu trúc dữ liệu và giải thuật”, NXB Khoa học và kỹ
thuật.
- Dr Dobb's Algorithms and Data Structures, 1999