Tải bản đầy đủ (.docx) (18 trang)

Bài tập lớn cấu trúc dữ liệu giải thuật it05

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (317.53 KB, 18 trang )

TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
TRUNG TÂM ĐÀO TẠO ELEARNING

----------------------

TÊN SINH VIÊN:

BÀI TỐN QUẢN LÝ TH
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


CHỦ ĐỀ 07: Viết chương trình quản lý các đối tượng để thực hiện cho “Bài tốn quản lý
th 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, Hố đơn th
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, xố đố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 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
*Tồ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-01NguyenVanHung
*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

1


7. 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 TỐ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 TỐ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, xố, 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. Thố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

2



#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";


3


int 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

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

printf("**

5. Phong co gia thap nhat

printf("**

6. Tim kiem phong

printf("**

7. Phong co gia cao nhat

printf("**

0. Thoat

**\n");

**\n");
**\n");
**\n");
**\n");


**\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();

4


break;
case 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);
}

5


else {
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;

6



case 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!");


7


_getch();
break;
}
}
}

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);

8


}

void 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");
}

9


void 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");

10


}
}
}

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);
}

11


int 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

12


2. 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

13


4. 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

14


7. 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

15


16


VI. 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


17



×