Tải bản đầy đủ (.pdf) (32 trang)

THUẬT TOÁN THAM LAM

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 (1.79 MB, 32 trang )

TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

Niên luận Cơ sở ngành Kỹ thuật phần mềm

Đề tài
BÀI TOÁN XẾP LỊCH LÀM VIỆC BÁN COFFEE
BẰNG THUẬT TOÁN THAM LAM

Giảng viên hướng dẫn

Sinh viên thực hiện

Nguyễn Công Danh

Quách Lý Đôl

MSCB: 1451

MSSV: B1704724
Lớp: DI1796A1

Học kỳ 1, năm học 2020-2021


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN CƠ SỞ NGÀNH KTPM
(Học kỳ : 01, Năm học 2020-2021)


TÊN ĐỀ TÀI: BÀI TOÁN XẾP LỊCH LÀM VIỆC BÁN COFFE
GIÁO VIÊN HƯỚNG DẪN:
STT
HỌ VÀ TÊN
MSCB
1
Nguyễn Công Danh
1451
SINH VIÊN THỰC HIỆN:
HỌ VÀ TÊN
Quách Lý Đôl

MSSV

THƯỞNG
(Tối đa 1,0 điểm)

ĐIỂM
(thang điểm 10)

B1704724

I. HÌNH THỨC (0,5 điểm)
Bìa (tối đa 0,25 điểm)
▪ Đầy đủ các thông tin
▪ Đúng định dạng
Bố cục (tối đa 0.25 điểm)
▪ Trang đánh giá kết quả thực hiện niên luận 1
▪ Mục lục: cấu trúc chương, mục và tiểu mục
▪ Phụ lục (nếu có)

▪ Tài liệu tham khảo
II. NỘI DUNG (3,5 điểm)
Giới thiệu (tối đa 0,5 điểm)
▪ Mô tả bài toán (0,25 điểm)
▪ Mục tiêu cần đạt, hướng giải quyết (0,25 điểm)
Lý thuyết (tối đa 0,5 điểm)
▪ Các khái niệm sử dụng trong chương trình (0,25 điểm)
▪ Kết quả vận dụng lý thuyết trong đề tài

(0,25 điểm)

Ứng dụng (tối đa 2,0 điểm)
▪ Phân tích yêu cầu, xây dựng các cấu trúc dữ liệu (0.5 điểm)
▪ Sơ đồ chức năng, lưu đồ giải thuật giải quyết vấn đề (1.0 điểm)
▪ Giới thiệu sử dụng chương trình (0,5 điểm)
Kết luận (tối đa 0,5 điểm)
Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

2


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

▪ Nhận xét kết quả đạt được
▪ Hạn chế
▪ Hướng phát triển
III. CHƯƠNG TRÌNH DEMO (5,0 điểm)
Giao diện thân thiện với người dùng (1,0 điểm)

Hướng dẫn sử dụng (0,5 điểm)
Kết quả thực hiện đúng với kết quả của phần ứng dụng (tối đa 3,5 điểm)
▪ Kết quả đúng (2,0 điểm)
▪ Cách thức thực hiện hợp lý

(1,0 điểm)

▪ Chức năng bổ sung, sáng tạo

(0,5 điểm)

Cần Thơ, ngày ......... tháng ….. năm 2020
GIÁO VIÊN CHẤM

Nguyễn Công Danh

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

3


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

MỤC LỤC
CHƯƠNG 1.

TỔNG QUAN ----------------------------------------------------------------------- 7


1.1.

GIỚI THIỆU --------------------------------------------------------------------------------------------- 7

1.2.

MƠ TẢ BÀI TỐN ------------------------------------------------------------------------------------ 7

1.3.

MỤC TIÊU CẦN ĐẠT ĐƯỢC ------------------------------------------------------------------------ 8

1.4.

HƯỚNG GIẢI QUYẾT -------------------------------------------------------------------------------- 8

1.5.

KẾ HOẠCH THỰC HIỆN ------------------------------------------------------------------------------ 8

CHƯƠNG 2.
2.1.

MỘT SỐ KHÁI NIỆM LIÊN QUAN ĐẾN GIẢI THUẬT THAM LAM-------------------------- 9

2.1.1
2.1.2
2.1.3
2.1.4


2.2.

CƠ SỞ LÝ THUYẾT ---------------------------------------------------------------- 9
Nguyên tắc tham lam------------------------------------------------------------------------------------ 9
Tính lựa chọn tham lam -------------------------------------------------------------------------------- 9
Xữ lý dữ liệu từ file Excel ------------------------------------------------------------------------------ 10
Thuật toán tham lam ----------------------------------------------------------------------------------- 12

VẬN DỤNG VÀO BÀI TOÁN ----------------------------------------------------------------------- 12

CHƯƠNG 3.

ỨNG DỤNG ---------------------------------------------------------------------- 16

3.1.

PHÂN TÍCH U CẦU BÀI TỐN ----------------------------------------------------------------- 16

3.2.

XÂY DỰNG CẤU TRÚC DỮ LIỆU ----------------------------------------------------------------- 17

3.2.1

3.3.

KIẾN TRÚC HỆ THỐNG ----------------------------------------------------------------------------- 20

3.3.1
3.3.2

3.3.3
3.3.4
3.3.5

3.4.

CHƯƠNG 4.

Giao diện khởi động chương trình ------------------------------------------------------------------ 22
Chức năng hướng dẫn sử dụng ---------------------------------------------------------------------- 23
Nhập file danh sách ------------------------------------------------------------------------------------- 24
Nhập file lịch làm nhân viên -------------------------------------------------------------------------- 25
Chỉnh sửa lịch làm trên bảng ------------------------------------------------------------------------- 27
Xem danh sách nhân viên ----------------------------------------------------------------------------- 29
Xuất bảng kết quả sang file Excel để sử dụng --------------------------------------------------- 30

KẾT LUẬN – ĐÁNH GIÁ -------------------------------------------------------- 31

KẾT QUẢ ĐẠT ĐƯỢC ------------------------------------------------------------------------------- 31

4.1.1
4.1.2

4.2.

Kiến trúc client server là ------------------------------------------------------------------------------- 20
Server là---------------------------------------------------------------------------------------------------- 20
Đặc điểm--------------------------------------------------------------------------------------------------- 21
Client là ---------------------------------------------------------------------------------------------------- 21
Đặc điểm: -------------------------------------------------------------------------------------------------- 21


GIỚI THIỆU CHƯƠNG TRÌNH VÀ HƯỚNG DẪN SỬ DỤNG ------------------------------- 22

3.4.1
3.4.2
3.4.3
3.4.4
3.4.5
3.4.6
3.4.7

4.1.

Tổ chức dữ liệu cần thiết ------------------------------------------------------------------------------ 17

Về kiến thức ---------------------------------------------------------------------------------------------- 31
Về sản phẩm phần mềm ------------------------------------------------------------------------------- 31

ƯU ĐIỂM – HẠN CHẾ ------------------------------------------------------------------------------- 32

4.2.1
4.2.2

Ưu điểm ---------------------------------------------------------------------------------------------------- 32
Hạn chế ---------------------------------------------------------------------------------------------------- 32

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

4



Niên luận cơ sở ngành Kỹ Thuật Phần Mềm
4.3.

Bài toán xếp lịch làm viêc bán coffee

HƯỚNG PHÁT TRIỂN ------------------------------------------------------------------------------- 32

TÀI LIỆU THAM KHẢO ------------------------------------------------------------------------------- 32

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

5


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

DANH MỤC HÌNH
HÌNH 1.1: HÌNH ẢNH MINH HỌA LỊCH ĐĂNG KÝ MỘT TUẦN ................................................................................. 7
HÌNH 2.1: BIỂU DIỄN ĐỌC FILE EXCEL CỦA MỘT NHÂN VIÊN ............................................................................... 12
HÌNH 2.2: FILE EXCEL ĐĂNG KÝ LỊCH LÀM CỦA NHÂN VIÊN ................................................................................. 13
HÌNH 2.3: THAM LAM BƯỚC KHỞI TẠO ............................................................................................................... 14
HÌNH 2.4: THAM LAM BƯỚC 1 ............................................................................................................................ 14
HÌNH 2.5: THAM LAM BƯỚC 2 ............................................................................................................................ 15
HÌNH 2.6: THAM LAM BƯỚC 3 ............................................................................................................................ 16
HÌNH 3.1: HÌNH ẢNH CHO GIẢI THUẬT XẾP LỊCH LÀM VIỆC ................................................................................. 19
HÌNH 3.2: HÌNH ẢNH SƠ ĐỒ CHỨC NĂNG ............................................................................................................ 20
HÌNH 3.3: HÌNH ẢNH CHO MÀN HÌNH KHI KHỞI ĐỘNG CHƯƠNG TRÌNH ............................................................ 22

HÌNH 3.4: HÌNH ẢNH CHO NÚT HELP ................................................................................................................... 24
HÌNH 3.5: HÌNH ẢNH CHO DỮ LIỆU NHÂN VIÊN TRONG FILE NHANVIEN.TXT ..................................................... 24
HÌNH 3.6: HÌNH ẢNH CHO NHẬP FILE NHÂN VIÊN ............................................................................................... 24
HÌNH 3.7: HÌNH ẢNH NHÂP FILE LICH LÀM NHÂN VIÊN ....................................................................................... 27
HÌNH 3.8: ĐIỀU CHỈNH LỊCH BĂNG CÁCH CHỌN CHỈNH SỬA ............................................................................... 28
HÌNH 3.9: XEM DANH SÁCH NHÂN VIÊN CHỌN NHÂN VIÊN ................................................................................ 30
HÌNH 3.10 CHỨC NĂNG XUẤT KẾT QUẢ SANG FILE EXCEL ................................................................................... 31

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

6


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

CHƯƠNG 1.

Bài toán xếp lịch làm viêc bán coffee

TỔNG QUAN

1.1. GIỚI THIỆU
Ngày nay sự phát triển của thị trường đồ uống tại Việt Nam đã kéo theo sự xuất hiện
ngày căng nhiều của các quán cafe start up. Tuy nhiên, không phải quán cafe nào mở ra
cũng duy trì và phát triển được hoạt động của minh. Đây là “cuộc chơi “ không hề dễ dàng.
Nhiều vấn đề mà người kinh doanh cần phải quan tâm đến là: Vốn bỏ ra, vị trí mặt bằng,
cách vận hành,quản lý nhân viên,...Mà đặc biệt ở đây là việc quản lý nhân viên, bộ phân
lớn nhân viên của các quán cafe hiện này xuất thân từ sinh viên, vì vậy việc quản lý và sắp
xếp lịch làm vô cùng phức tạp và tốn nhiều thời giạn…
Sắp xếp lịch làm cho nhân viên một cách hiệu quả là một kỹ năng quan trọng mà

nhà quản lý và giam sác cần thanh thạo. Việc xếp lịch làm việc khơng có tổ chức sẽ gây sự
thất vọng trong nhân viên, điều này có thể dẩn đến việc nhân viên bỏ việc hoặc tốn thêm
chi phí tuyển dụng. Theo một cuộc khảo sát, các nhà quản lý tuyên bố rằng họ dành khoảng
một phần tư thời gian để lên lịch cho nhân viên của minh. Với thời gian ngắn và độ phức
tạp khi lên lịch lam việc cho nhân viên, việc xảy ra lỗi là đương nhiên. Nắm bắt được nhu
cầu của các nhà quản lý trên, một phần mềm lập lịch công việc được ra đời, phần mềm sử
dụng giải thuật tham lam, nhầm chia nhỏ và tối ưu bài toán. Giải thuật trên sẽ mang lại
hiệu qua cao nhất cho người dùng.

1.2. MƠ TẢ BÀI TỐN
Xuất phát từ bài toán xếp lịch làm cho nhân viên bán quán cafe, trong đó quán cafe C có n
nhân viên nhất định, mỗi nhân viên sẽ có một mức lương riêng do quản lý quy định. Mỗi
tuần n nhân viên sẽ gửi lịch làm của mình cho quán cafe C, mỗi tuần lịch của nhân viên có
thể thay đổi hoặc không. Một tuần bắt đầu từ thứ 2 và kết thực vào chủ nhật, mỗi thứ được
chia thanh ba ca sáng, chiều, tối, mỗi ca có hai nhân viên làm việc.
Hình 1.1: Hình ảnh minh họa lịch đăng ký một tuần
Thứ 2

Thứ 3

Thứ 4

Thứ 5

Thứ 6

Chủ
nhật

Thứ 7


Buổi
Sáng

A,B,C

A,B,D

C,D

A,B

C,D

A,D

A,B,C,D

Chiều

B,D

A,C

B,C,D

A,B,D

A,C,D


B,D

A,D

B,C,D

B,C,D

A,B,C

C

A,B,C,D A,C,D

Tối

A

Bài toán được đặt ra: làm sau để sắp xếp lịch làm của các nhân viên sau cho tổng số
ca một tuần là gần bằng nhau.

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

7


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee


Bài tốn nói trên được gọi là bài toán sắp xếp lịch làm việc dựa trên thuật tốn tham
lam. Trong đề tài này sẽ trình bày các khái niệm cơ bản về thuật toán sắp xếp tham lam để
làm nền tảng cho việc tìm hiểu sâu sắc hơn về việc hoạch định sắp xếp phù hợp.
1.3. MỤC TIÊU CẦN ĐẠT ĐƯỢC
Mục tiêu về kiến thức:
-

Hiểu được những kiến thức cơ bản của giải thuật tham lam.
Hiểu được bài tốn sắp xếp.
Biết sử dụng ngơn ngữ lập trình để giải quyết bài tốn đặt ra.
Có khả năng đưa bài toán thực tế thành bài toán sắp xếp.
Có khả năng sắp xếp, đóan trước các tình huống có thể xảy ra để đưa ra giải thuật
sắp xếp tối ưu nhất.
Mục tiêu về sản phẩm:

- Xây dựng giao diện đồ họa cho phép người dùng nhập vào các file Excel lich làm
của nhân viên.
- Hiển thị kết quả sắp xếp được trên giao diện (Hiển thị tên nhân viên làm từng ca và
tổng chi phí bỏ ra).
1.4. HƯỚNG GIẢI QUYẾT
- Nghiên cứu bài tốn tìm sắp xếp dựa trên thuật tốn tham lam và chuyển nó về bài
tốn có thể giải trên máy tính.
- Viết tài liệu phân tích bài tốn và cách cài đặt giải thuật và cở sở dữ liệu làm cơ sở
cho lập trình.
- Sử dụng ngơn ngữ Java để cài đặt thuật tốn và đưa ra kết quả trên giao diện.
1.5. KẾ HOẠCH THỰC HIỆN
Tuần 1 – 2: Tìm hiểu về đề tài.
Tuần 3: Mơ tả bài tốn.
Tuần 4 – 5: Xây dựng lưu đồ thuật toán chi tiết ứng dụng vào phần mềm.
Tuần 6: Xây dựng chức năng phần mềm.

Tuần 7 – 8: Thiết kế giao diện.
Tuần 9 – 11: Thiết kế chức năng.
Tuần 12: Kiểm thử sản phẩm.
Tuần 13: Viết báo cáo

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

8


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.1.

MỘT SỐ KHÁI NIỆM LIÊN QUAN ĐẾN GIẢI THUẬT THAM LAM

Nguyên tắc tham lam
Các thuật toán tham ăn cũng giống như các thuật toán qui hoạch động thường được
sử dụng để giải các bai tốn tối ưu (tìm nghiệm của bài tốn tốt nhất theo một tiêu chí nào
đó). Các thuật tốn qui hoạch động ln cho một nghiệm tối ưu.
Các thuật toán tham ăn thực hiện các lựa chọn tối ưu cục bộ với hy vọng các lựa
chọn đó sẽ dẫn đến một nghiệm tối ưu toan cục cho bài toán cần giải quyết. Các thuật toán
tham ăn thường dễ cài đặt, nhanh (độ phức tạp thời gian thường là hàm tuyến tính hoặc
cùng lắm là bậc 2), dễ gỡ lỗi và ít sử dụng bộ nhớ. Nhưng thật không may là không phải
lúc nào chúng cũng cho các lời giải tối ưu.
Thực hiện lựa chọn theo kiểu tham lam (Greedy Choice).
Mỗi khi cần quyết định xem sẽ chọn lựa chọn nào chúng ta sẽ chọn các lựa chọn tốt

nhất vào thời điểm hiện tại (mỗi khi cần chúng ta sẽ chọn một cách tham lam để maximize
lợi nhuận của chúng ta).Tất nhiên các lựa chọn như vậy không bao giờ cũng dẫn đến một
kết quả đung. Chẳng hạn cho dãy số <3, 4, 5, 17, 7, 8, 9> cần chọn ra dãy con của nó sau
cho dãy con đó là một dãy đơn điệu tăng. Dễ dàng thấy kết quả đung là <3, 4, 5, 7, 8, 9>.
Tuy nhiên theo các chọn tham ăn sau khi chọn xong 3 phần tử đầu là 3, 4, 5 sẽ chọn tiếp
phần tử 17, phần tử hợp thành một dãy tăng dài hơn đối với các phần tử đã chọn trước đó
và kết quả sẽ là <3, 4, 5, 17>, tất nhiên kết quả này khơng phải là kết quả đúng.
Tính lựa chọn tham lam
Thành phần then chốt trước tiên là tính lựa chọn tham lam: một giải pháp tối ưu toan
cục có thể đạt được bằng cách lựa chọn tối ưu cục bộ (tham lam). Nói một cách khác, khi
có nhiều sự lựa chọn thì ta lựa chọn phương án nào tốt nhất ở hiện tại trong bài toán hiện
tại, mà không cần quan tâm đến kết quả cảu bài tốn con của nó.
Đây là chỗ khác nhau giữa các thuật toán tham lam quy hoạch động. Trong quy
hoạch động tại mỗi bước ta thực hiện một lựa chọn, những lựa chọn phụ thược vào các giải
pháp cho các bài tốn con. Do đó, ta giải quyết một cách tiêu biểu các bài toán quy hoạch
động theo kiểu từ dưới lên, nghĩa là lần lượt xữ lý những bài toán con nhỏ hơn đến những
bài toán con lớn hơn. Trong giải thuật tham lam, ta thực hiện cách chọn bất kỳ dường như
tốt nhất ngay lập tức và sau đó giải quyết bài toán con xuất hiện sau khi lựa chọn được thực
hiện. Lựa chọn được thực hiện bởi một thuật tốn tham lam có lẽ phụ thuộc vào các lựa
chọn cho đến giờ, nhung nó khơng hề phụ thuộc vào những lựa chọn bất kỳ trong tương
lai hay những giải pháp cho các bài tốn con. Vì vậy, khơng giống quy hoạch động, nó giải
quyết các bài tốn con từ dưới lên, một chiến lược tham lam thường giải quyết theo kiểu
từ trên xuống, thực hiện một lựa chọn tham lam sau một chọn lựa khác, liên tục rút gọn
từng trường hợp bài toán đã cho thanh bài toán nhỏ hơn.

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

9



Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

Dĩ nhiên, ta phải chứng minh rằng một lựa chọn tham lam tại mỗi bước đưa ra một
giải pháp tối ưu tòan cục, và đây là nơi cần có sự thơng minh. Sự chứng minh kiểm tra một
giải thuật có thể sửa đổi để sử dụng lựa chọn tham lam,kết quả trong một bài toán tương tự
nhưng bài tốn nhỏ hơn.
Thuộc tính lựa chọn tham lam thường đạt được hiệu lực trong việc thực hiện lựa
chọn của ta trong bài tốn con. Ví dụ, trong bài tốn chọn hoạt động, giả sử rằng ta có các
hoạt động được sắp xếp sẳn theo thứ tự tăng dần mà được xử lý trước khi đưa vào hay sử
dụng một cấu trúc dữ liệu thích hợp (thường một hàng đợi ưu thế), ta có thể thực hiện các
lựa chọn tham lam nhanh chóng, vì vậy đưa ra một thuật toán hiệu quả.
Xữ lý dữ liệu từ file Excel
1. Apache POI la gì?
Apache POI là một thư viện mã nguồn mở Java, được cung cấp bởi Apache, nó là
một thư viện đầy sức mạnh giúp bạn làm việc với các tài liệu của Microsoft như
Word,Exce,Powerpoint,Visio,...
POI là viết tắt của "Poor Obfuscation Implementation". Các định dạng file của
Microsoft được giấu kín. Những kỹ sư của Apache phải cố gắng để tìm hiểu nó, và họ thấy
rằng Microsoft đã tạo ra các định dạng phức tạp một cách không cần thiết. Và cái tên thư
viện bắt nguồn từ sự hài ước.
Apache POI hỗ trợ bạn làm việc với các định dạng của Microsoft, các class của nó
thường có tiếp đầu ngữ HSSF, XSSF, HPSF, ... Nhìn vào tiếp đầu ngữ của một class bạn
có thể biết được class đó hỗ trợ loại định dạng nào.
Chẳng hạn để làm việc với các định dạng Excel (XLS) bạn cần các class:








HSSFWorkbook
HSSFSheet
HSSFCellStyle
HSSFDataFormat
HSSFFont
...
2. ArrayList trong java

ArrayList là một lớp triển khai của List Interface trong Collections Framework nên
nó sẽ có một vài đặc điểm và phương thức tương đồng với List. Như đã nói trong bài Tổng
quan về Collection trong Java, ArrayList là một Collection kiểu danh sách sử dụng cấu trúc
mảng để lưu trữ phần tử. Thứ tự các phần tử dựa theo thứ tự lúc thêm vào và giá trị của các
phần tử này có thể trùng nhau.
Như vậy, cả ArrayList và LinkedList đều là lớp triển khai của List Interface. Vậy
khi nào chúng ta sẽ sử dụng ArrayList và khi nào chúng ta sẽ sử dụng LinkedList? Chúng
ta sẽ sử dụng ArrayList khi ứng dụng của chúng ta cần truy xuất phần tử nhiều hơn cập
Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

10


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

nhật và xóa phần tử và chúng ta sẽ sử dụng LinkedList khi ứng dụng của chúng ta cần
cập nhật và xóa phần tử nhiều hơn là truy cập phần tử

3. Cài đặt danh sách lưu dữ liệu
Để lưu dữ liệu đọc từ file , chúng ta cần phải có kiến thức về cấu trúc dữu liệu và
chọn ra cấu trúc dữ liệu phù hợp với mỗi mục tiêu khác nhau để biểu diễn dữ liệu dễ dàng.
Hiện nay có hai phương pháp cơ bản để biểu diễn dữ liệu bằng ma trận và danh sách.
Tuy nhiên để thuận lợi trong việc cài đặt và sử dụng thì chúng ta chú trong danh
sách hơn.
Để lưu trữ dữ liệu từ file ta cài đặt các danh sách như sau:
sang: dùng để lưu dữ các ca đăng ký vào buổi sang.
chieu: dùng để lưu dữ các ca đăng ký vào buổi sang.
toi: dùng để lưu dữ các ca đăng ký vào buổi sáng.
❖ Dùng ArrayList:
Để sử dụng ArrayList trong trường hợp này ca cần khởi tao hàm xây
dựng:lichlam.
Có các biến: thu2, thu3, thu4, thu5, thu6, thu7, cn là các ngày trong tuần.
Lưu dữ liệu file bằng danh sách được mô tả như sau:
-

Trước tiên ta dùng một danh sách:dsll<lichlam>. Và một hàm đọc file Excel
ReadExcelFile config.
Biến Row cho phép chưa giá trị số dông của file được gợi từ
config.getrowcount.
Gọi một dơng lập for trong đó i chay từ 1 đến row.
Phần tử thu2, thu3, thu4, thu5, thu6, thu7, cn sẽ đọc giá trị của mỗi dịng.
Ví dụ: Hình 2.4b là dữ liệu được biểu diển từ dịng thứ nhất của file Hình

2.4a.

a) Thơng tin file Excel của một nhân viên
I


Thu2

Thu3

Thu4

Thu5

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

Thu6

Thu7

Cn

11


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

1

Sang

Sang

Bài toán xếp lịch làm viêc bán coffee

sang


sang

Sang

b) Dữ liêu của danh sách khi đọc dịng thứ nhất
Hình 2.1: Biểu diễn đọc file Excel của một nhân viên
Thuật toán tham lam
Cho danh sách lich làm sang<lichlam>, chieu<lichlam>, toi<lichlam> chọn ra các
nhân viên thích hợp để lịch làm là tốt nhât. Lịch làm tốt nhất khi tổng ca lam của các nhân
viên trong một tuần là gần như bằng nhau.
Giải thuật tham lam sẽ chọn ra nhân viên có số ca cịn lại nhiều nhất.
+ Ý tưởng: khởi tạo một mảng Tam{i,j} để lưu kết quả,cuối cùng chuyển dữ
liệu sang một danh sách kết quả.
+ Giải thuật
Khởi tạo:
- tam[i][j]: với i=2 là số lượng nhân viên được chọn, j=7 là số ngày trong
tuần, khởi tạo các giá trị tam[i][j]=”null”.
- a[j]: là số lượng nhân viên đăng ký trong một ca của mỗi buổi.
-List<hoten,socaconlai> chitiet_nv: danh sách được sắp xếp thoe socaconlai
giảm dần. socaconlai được tính là theo cơng thức (42/(số lượng nhân viên))+1.
-void layca(List<lichlam> buoi,int thu): lấy nhân viên ở buổi buoi và thứ
thu.
Lặp thu lần với thu là thứ mấy của một tuần:
- Chọn thứ thu trong buổi buoi swicth(thu) {case 0:}.
- Chọn
nhân
viên
đầu
danh

sách
chitiet_nv
(chitiet_nv.get(k).gethoten().equals(ca.get(j).getthu2()) và ca có hai nhân
viên đăng ký trở lên (a[0]>2).
- Đưa nhân viên được chọn vào danh sách tam[0][0] nếu tam[0][0] rổng,
ngược lại chuyển vào tam[1][0].
- Giảm socaconlai của nhân viên đó xương một.
- Sắp xếp lại danh sách chitiet_nv.
2.2. VẬN DỤNG VÀO BÀI TOÁN
Để xếp lich làm cho nhân viên bằng giải thuật tham lam thì cần xác định điều kiện
áp dụng của giải thuật là: có số lượng nhân viên đăng ký lớn hơn 2 mỗi ca; biết được số ca
còn lại của nhân viên. Như đã đề cập về ý tưởng của giải thuật này, từ file Excel nhập qua
danh sách thì sẽ tạo ra được danh sách dữ liệu cho giải thuật; sau đó từ danh sách dữ liệu
tính tốn chọn ra nhân viên phù hợp để đưa ra kết quả cuối cùng.(nếu nhân viên thứ
buoi.getrow(j),getthu2 bằng với chitiet_nv.get(k).gethoten() và a[thu]>2 đưa nhân viên
đó vào danh sách tam[thu], khi chọn được hai nhân viên cho thứ thu thì giảm ca cịn lại
trong chitiet_nv.caconlai[k] và sắp xếp lại danh sách chitiet_nv)
Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

12


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

• Ví dụ:xếp lich nhân viên cua thu=0.
Sắp xếp lịch làm nhân viên từ file Excel đăng ký của nhân viên Hình 2.6:

a) Nhân viên A


b) Nhân viên B

c) Nhân viên C

d) Nhân viên D
Hình 2.2: file Excel đăng ký lịch làm của nhân viên
• Bước khởi tạo: khởi tạo k=0,i=0,
chitiet_nhanvien.getrow[k].gethoten=hoten; buoi.getrow[i].getthu2=nvdk;
Hoten Socaconlai
A
11
B
11
C
11
Bước
Khởi tạo

A
K=0,i=0
Hoten=A

B
K=0,i=0
Hoten=A

C
K=0,i=0
Hoten=A


Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

D
K=0,i=0
Hoten=A

Công việc
Khởi tạo
K=0,i=0
13


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Nvdk=A

Bài toán xếp lịch làm viêc bán coffee

Nvdk=A

Nvdk=A

Nvdk=A

Hoten=A và
Nvdk=A

1
2

3
4
5
6
Hình 2.3: Tham lam bước khởi tạo

Bước 1: Xét hoten=nvdk=A nên ta thêm A vào mảng tam[0][0]nếu
tam[0][0] rổng,giảm socaconlai của nhân viên A xuống 1 và tăng k lên 1;
Hoten Socaconlai
A
10
B
11
C
11
Bước

A

B

C

D

Khởi tạo

K=0,i=0
Hoten=A
Nvdk=A


K=0,i=0
Hoten=A
Nvdk=A

K=0,i=0
Hoten=A
Nvdk=A

K=0,i=0
Hoten=A
Nvdk=A

1

Tam[0][0]=A
K=1,i=0
Hoten=B
Nvdk=A

Công việc
Khởi tạo
K=0,i=0
Hoten=A và
Nvdk=A
Lấy
tam[0][0]=A,
k++,i=0,giảm
socaconlai
của A=10


2
3
Hình 2.4: Tham lam bước 1

Bộ mơn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

14


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

Bước 2: Xét hoten<> nvdk nên tăng i lên một đơn vị.
Hoten Socaconlai
A
10
B
11
C
11
Bước

A

B

C


D

Khởi tạo

K=0,i=0
Hoten=A
Nvdk=A

K=0,i=0
Hoten=A
Nvdk=A

K=0,i=0
Hoten=A
Nvdk=A

K=0,i=0
Hoten=A
Nvdk=A

1

Tam[0][0]=A
K=1,i=0
Hoten=B
Nvdk=A

2

Tam[0][0]=A

K=1,i=1
Hoten=B
Nvdk=B

Công việc
Khởi tạo
K=0,i=0
Hoten=A và
Nvdk=A
Lấy
tam[0][0]=A,
k++,i=0,
giảm
socaconlai
của A=10
Tăng i lên
một đơn vị
và tính lại
nvdk=B

3
Hình 2.5: Tham lam bước 2
• Bước 3: Xét hoten=nvdk=B nên ta thêm B vào mảng tam[0][0]nếu tam[0][0]
rổng,mà luc này tam[0][0]=A nên ta thêm B vào tam[1][0],giảm socaconlai
của nhân viên B xuống 1 sắp xếp lại danh sanh chitiet_nv; và goi lại hàm
thamlam này với thu=1.
Hoten Socaconlai
A
10
B

11
C
11
Bước

A

B

C

D

Khởi tạo

K=0,i=0
Hoten=A
Nvdk=A

K=0,i=0
Hoten=A
Nvdk=A

K=0,i=0
Hoten=A
Nvdk=A

K=0,i=0
Hoten=A
Nvdk=A


Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

Công việc
Khởi tạo
K=0,i=0
Hoten=A và
Nvdk=A

15


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

1

Tam[0][0]=A
K=1,i=0
Hoten=B
Nvdk=A

2

K=1,i=1
Hoten=B
Nvdk=B

3

Bài toán xếp lịch làm viêc bán coffee


Tam[1][0]=B
K=1,i=1
Hoten=B
Nvdk=B

Lấy
tam[0][0]=A,
k++,i=0,
giảm
socaconlai
của A=10
Tăng i lên
một đơn vị
và tính lại
nvdk=B
Lấy
tam[1][0]=B,
Giảm
socaconlai
của B=10

Hình 2.6: Tham lam bước 3
Như vậy trong ví dụ trên, ta đã tìm được đường đi ngắn nhất từ đỉnh đầu( đỉnh 1)
đến tất cả các đỉnh cịn lại.
Như vậy trong ví dụ trên, ta đẵ xếp được hai nhân viên A và B vào lịch làm ca sáng
thứ hai.
Cứ như vậy ta lần lược xếp hồn thành các ca trống cịn lại bằng cách gọi lại hàm
layca(list<lichlam> buoi,int thu) này với thu tăng từ 0-6.


CHƯƠNG 3. ỨNG DỤNG
3.1. PHÂN TÍCH U CẦU BÀI TỐN
Đề tài được đặt ra là tìm đường đi ngắn nhất về chiều dài, nhanh nhất về thời gian
hoặc thấp nhất về chi phí... Tất cả đều có thể quy về chung một yêu cầu là hoạch định
đường đi tối ưu. Dữ liệu thực tế từ các bài tốn trên có thể quy đổi thành các dữ liệu của
đồ thị trên máy tính: các đỉnh trên đồ thị là các địa điểm trên bản đồ, cung/cạnh là đường
nối các địa điểm lại với nhau, còn độ dài cung là chiều dài/thời gian/chi phí tùy theo tiêu
chuẩn tìm đường đi mà người dùng đặt ra.

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

16


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

Yêu cầu về kết quả cần có chính là bao phủ của bài tốn và giải thuật, các file cài
đặt cần phải theo một định dạng nhất định. Giải thuật tham lam cùng cách lưu trữ của danh
sách sẽ giúp chúng ta có đượt kết quả tối ưu và hiệu quả nhất.
Đề tài được đặt ra là xếp lich làm nhân viên bán quán cafe
3.2.

XÂY DỰNG CẤU TRÚC DỮ LIỆU

Tổ chức dữ liệu cần thiết
❖ Để lưu trữ bảng kết quả, ta đặt:
+ s[i][j]:mảng chứa kết quả lịch làm của nhân viên đăng ký buổi sáng.
+ c[i][j]:mảng chứa kết quả lịch làm của nhân viên đăng ký buổi chiều.

+ t[i][j]:mảng chứa kết quả lịch làm của nhân viên đăng ký buổi tối.
Ta có danh sách chitiet_nv được sắp xếp giảm dần, qui tắc lấy sắp lịch cho nhân
viên, lây nhân viên mỗi buổi trong từng danh sách sang, chiêu, toi nếu như bằng với nhân
viên trong danh sách chitiet_nv thì chọn hai nhân viên đó đưa và mảng kết quả (mục đích
lấy hai nhân viên đầu tiên có số ca ranh nhiều nhât).
❖ Để dễ dàng cho việc tham lam, ta cài đặt:
+chitietca[i][j]: tổng số nhân viên đăng ký vào buổi i thứ j.
+a[i]:chứa số nhân viên tối đa của một ca trong một buổi, i là thứ.
+soluongnv: là tổng số nhân viên của quán cafe.
+chitiet_nv<chitietnv>: là danh sách chứa tên của tất cả nhân viên và ca tối
đa mà nhân viên đó lam trong một tuần.
+min: là số ca tối thiểu mà nhân viên cần làm trong một tuần, được tính bằng
cơng thức:42/soluongnhv làm tròn lên.
+name: lưu tên của nhân viên mỗi lần nhập.
+tongca: tổng số ca mà nhân viên đăng ký trong một tuần.
Giải thuật sử dụng phương thức nhập dữ liệu từ file:
+filename: lưu đường dẫn của file khi chọn.
Ngoài ra, một số dữ liệu khác cũng được sử dụng:
+sang<lichlam>:danh sách chứa tất cả các nhân viên đăng ký ca sang đọc
từ file.
+ chieu<lichlam>:danh sách chứa tất cả các nhân viên đăng ký ca chiều đọc
từ file.
+ toi<lichlam>:danh sách chứa tất cả các nhân viên đăng ký ca tối đọc từ
file.
Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

17


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm


Bài toán xếp lịch làm viêc bán coffee

+tam[i][j]: mảng trung gian để lưu kết quả vừa tính tốn được.
Thiết kế giải thuật
4. Mô tả các bước sắp xếp lịch làm việc:
Gọi sang, chieu, toi là danh sách chứa tất cả nhân viên đăng ký trong ba buổi sáng
chiều tối và chitiet_nv là danh sách tất cả nhân viên trong quán cafe.
-

-

-

Bước 1: Nhận dữ liệu nhân viên được người dùng nhập vào và kiểm tra điều
kiện:
o Nếu như số lượng ca ít hơn ca tối thiểu (tongcalịch cho nhân viên này, chuyển thẳng đến danh sách kết quả S, C, T.
o Tính lại ca tối thiểu (min=42/(soluongnv-1)).
o Nếu khơng thỏa điều kiên thì nạp dữ liệu vào danh sách sang,chieu,toi.
Bước 2:
o Tính tốn các trường hợp đặt biệt để chia nhỏ bài toán, nếu
(chitietca[i][j]<=2) ta sẽ thêm trực tiếp nhân viên đăng ký ca đó vào lịch
làm.
o Lấy dữ liêu từ danh sách buổi sang nếu i=0, chieu nếu i=1, toi nếu i=2.
o Cài đặt hàm layca_dacbiet(List<lichlam> a,int i,int j) với a là buổi mà
ta cần lấy dữ liệu, i là thứ mà ta cần chọn, j là số nhân viên đăng ký ca
đó.
o Gán name1 bằng nhân viên của thứ i, buổi a, giảm j xuống một đơn vị
(j--) nếu j=1 thì gán name2 nhân viên thứ i, buổi a,cuối cùng return hàm.

Bước 3: bắt đầu xếp lich, cài đặt lại mảng chitietca nếu chitietca[i][j]<=2 thì
gán bằng 2. Cho vòng lập chạy từ i=0 đến i<3:
o Khởi tạo mảng tam[ii][j]=””.
o Xét danh sách buổi sang nếu i=0, chieu nếu i=1, toi nếu i=2:
▪ Ta có hàm layca(List<lichlam> ca,int thu) với ca là buổi
sang/chieu/toi, thu là thứ mấy của tuần tương đương từ 0-6. Hàm
được khởi tạo theo kiểu quay lui.
▪ Chạy hàm layca ca với giá trị như sau layca(sang,0) có thể thay
đổi sang thành chieu, toi tùy theo điều kiện.
▪ Sắp xếp danh sách chitiet_nv, chạy hai vịng lập i(0-soluongnv)
và j(0-soluongnv):
• Kiểm tra thu=0
• So sánh nhân viên thứ j của danh sách chitiet_nv với danh
sách ca nếu như bằng nhau thì:
o đưa nhân viên đó vào mảng tam[0][thu] nếu rổng,
giảm socatoithieu của nhân viên đó xuống một

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

18


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

-

Bài toán xếp lịch làm viêc bán coffee

o Ngược lại đưa nhân viên đó vào mảng tam[1][thu],
giảm socatoithieu của nhân viên đó xuống một gọi

lại hàm layca với thu tăng lên 1 layca(ca,thu+1).
o Đưa dữ liệu từ mãng tam sang dach sách kết quả s/c/t.
Bước 4: quay lại bước 3 cho đến kết thúc.
5. Lưu đồ giải thuật xếp lich làm việc bán quán cafe:

Hình 3.1: Hình ảnh cho giải thuật xếp lịch làm việc

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

19


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

6. Sơ đồ chức năng:

Hình 3.2: Hình ảnh sơ đồ chức năng
3.3.

KIẾN TRÚC HỆ THỐNG
Kiến trúc client server là

Kiến trúc tính tốn trong đó các xử lý và dữ liệu được phân bố trên các máy chủ (server)
và máy khách / trạm (client) một cách hợp lý nhằm khai thác tối đa khả năng của hệ thống và
tăng tính bảo mật của dữ liệu trên server.
Kiến trúc mạng làm việc mà trong đó mỗi máy tính hoặc xử lý trên mạng đóng vai trị như
là một máy client hoặc server.
Mỗi client hoặc server kết nối vào mạng làm việc có thể được gọi là một node


Server là
Máy chủ hay là máy phục vụ.
Các máy tính hoặc xử lý mạnh phục vụ cho việc quản lý các tài nguyên: ổ đĩa (file
server), máy in (printer server), quản lý đường truyền mạng (network server) hoặc thực
hiện các tính tốn back-end khác.
Lưu trữ và bảo vệ dữ liệu.
Xử lý những yêu cầu được gửi đến từ máy khách.
Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

20


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

Đặc điểm
Bị động (slave)
Đợi các yêu cầu từ client gửi đến
Đáp ứng các yêu cầu hoặc gửi những thông điệp phản hồi tùy theo yêu cầu của
client.
Ví dụ:
Database server: là một hệ thống máy tính xử lý các yêu cầu truy vấn về cơ sở dữ
liệu.
Mail server: là một hệ thống máy tính thực hiện các yêu cầu gửi / nhận và lưu trữ
email của các người dùng.
Printer server: là một hệ thống máy tính xử lý các yêu cầu in ấn từ các người
dùng (client)
Client là

Là những ứng dụng chạy trên các máy tính sử dụng các dịch vụ hoặc tài nguyên
mà server có cung cấp.
Phụ thuộc vào server về mặt tài nguyên: tập tin, thiết bị và các xử lý.
Đặc điểm:






Tạo những yêu cầu.
Định dạng dữ liệu
Chủ động (master)
Gửi yêu cầu đến server
Đợi cho đến khi nhận được trả lời từ server

Trong kiến trúc client – server, client biết rõ server nhưng server khơng biết client
là ai.
Ứng dụng được mơ hình hóa như là một tập hợp các dịch vụ được cung cấp bởi
server và một tập hợp các client sử dụng dịch vụ đó.
Ví dụ:
Mail client: là một ứng dụng cho phép thực hiện yêu cầu gửi mail, đọc mail của
người dùng
Web browser: là một ứng dụng cho phép người dùng thực hiện những yêu cầu
hiển thị một tài nguyên word wide web đến một server có cung cấp tài nguyên đó.

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

21



Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

3.4.

Bài toán xếp lịch làm viêc bán coffee

GIỚI THIỆU CHƯƠNG TRÌNH VÀ HƯỚNG DẪN SỬ DỤNG
Giao diện khởi động chương trình

a)

b)
Hình 3.3: Hình ảnh cho màn hình khi khởi động chương trình
-

-

Khi vừa khởi động phần mềm thì màn hình sẽ xuất hiện như Hình 3.3a nếu như
file danh dách mặc định bị lỗi (D:/nlcs/nhanvien.xlsx) ngược lại sẽ xuất hiện như
Hình 3.3b.
Chú thích 1 là phần chính của chương trinh là nơi hiển thị kết quả cuối cùng của
việc xếp lịch làm viêc.
Trong chú thích số 2 có 6 nút khi người dùng cần nhập file lịch làm của nhân
viên thì chọn nút Upload lích, giao diện chú thích số 3 và số 4 sẽ được bật lên,
tại chú thích 3 cho phép ta chọn nhân viên cần nhập,chọn nút chọn file sẽ hiển
thị nơi chọn file, nhấn nút OK để đồng ý với lựa chọn trên nhân viên được chọn
sẽ hiển thị tại chú thích số 4, tiếp tục nhập khi đã đủ số lượng nhấn nút Lưu tại

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ


22


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

-

Bài toán xếp lịch làm viêc bán coffee

chú thích số 2. Ngồi ra chú thích số 2 cịn có nút Nhân viên cho phép xem danh
sách nhân viên, nút Xuất file Excel cho phép chuyển từ bản chú thích 1 ra file
Excel.
Ở chú thích 5 ta có hai nút File và Help, trong File có nút Thốt(Ctrl+X), trong
nút Help có nú Help Content hướng dẩn cách sử dụng của chương trinh, còn
nút About giới thiệu về tác giả.
Chức năng hướng dẫn sử dụng

a) Hình ảnh nút Help Content

Bộ mơn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

23


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

b) Hình ảnh nút About

Hình 3.4: Hình ảnh cho nút Help
Đối với những ai chưa biết cách sử dụng phần mềm thì có nhấn vào nút Help
Content như chú thích số 1 trong Hình 3.4a.
Nhập file danh sách

Hình 3.5: Hình ảnh cho dữ liệu nhân viên trong file nhanvien.txt

Hình 3.6: Hình ảnh cho nhập file nhân viên

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

24


Niên luận cơ sở ngành Kỹ Thuật Phần Mềm

Bài toán xếp lịch làm viêc bán coffee

Nhập file lịch làm nhân viên

a) Hình ảnh cho dữ liệu lịch làm của nhân viên A trong file a.xlsx

b) Chọn nút unload file số 1 để hiển thị cho phép nhập file, chọn nhân viên
tại 2 và chọn file tại 3

Bộ môn CNPM, Khoa CNTT & TT, Đại học Cần Thơ

25



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×