MỤC LỤC MỤC LỤC 2 LỜI NÓI ĐẦU 3 PHÂN CÔNG THÀNH VIÊN TRONG NHÓM 4 CHƯƠNG 1. PHÂN TÍCH YÊU CẦU VÀ THIẾT KẾ GIẢI PHÁP 5 1.1. Mô tả yêu cầu bài toán 5 1.2. Biểu đồ IPO 5 1.2.1. Chức năng của người điều khiển 5 1.2.2. Chức năng của người sử dụng 6 1.3. Thiết kế chương trình 7 1.4. Thiết kế dữ liệu 9 1.5. Thiết kế giải thuật 11 1.5.1. Giải thuật đóngmở cửa 11 1.5.2. Giải thuật tìm kiếm thang máy thực hiện lệnh 12 CHƯƠNG 2. CÀI ĐẶT CHƯƠNG TRÌNH 15 2.1. Các kỹ thuật lập trình đã áp dụng 15 2.2. Kết quả chương trình 16 2.3. Giao diện chương trình 16 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 20 TÀI LIỆU THAM KHẢO 21 PHỤ LỤC 22
Trang 1Giáo viên hướng dẫn : TS Vũ Thị Hương Giang
Hà Nội, 2 tháng 5 năm 2012
Trang 2MỤC LỤC
MỤC LỤC 2
LỜI NÓI ĐẦU 3
PHÂN CÔNG THÀNH VIÊN TRONG NHÓM 4
CHƯƠNG 1 PHÂN TÍCH YÊU CẦU VÀ THIẾT KẾ GIẢI PHÁP 5
1.1 Mô tả yêu cầu bài toán 5
1.2 Biểu đồ IPO 5
1.2.1 Chức năng của người điều khiển 5
1.2.2 Chức năng của người sử dụng 6
1.3 Thiết kế chương trình 7
1.4 Thiết kế dữ liệu 9
1.5 Thiết kế giải thuật 11
1.5.1 Giải thuật đóng/mở cửa 11
1.5.2 Giải thuật tìm kiếm thang máy thực hiện lệnh 12
CHƯƠNG 2 CÀI ĐẶT CHƯƠNG TRÌNH 15
2.1 Các kỹ thuật lập trình đã áp dụng 15
2.2 Kết quả chương trình 16
2.3 Giao diện chương trình 16
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 20
TÀI LIỆU THAM KHẢO 21
PHỤ LỤC 22
Trang 3LỜI NÓI ĐẦU
Trong xã hội khan hiếm về tài nguyên sức người, thời gian và không gian hiện nay,
việc áp dụng các tiến bộ tin học vào các lĩnh vực của đời sống là hết sức cần thiết Theo quan điểm đó, trong lĩnh vực xây dựng cơ sở hạ tầng, để tiết kiệm công sức, thời gian đi lại và không gian cho cho việc sử dụng cầu thang bộ, thang máy trở nên được quan tâm trong các tòa nhà nhiều tầng
Nhìn theo góc độ tin học, “thang máy” là một phần đặc biệt trông đối tượng hàng đợi Nhưng nó không đơn giản chỉ là FIFO
Tùy vào nhu cầu thực tế, đối tượng hàng đợi này được mô tả khác nhau theo thứ tự phục vụ của hàng đợi Đối với các tòa nhà tren 15 tầng sử dụng 3 thang máy, đối đượng hóa hàng đợi sẽ khác với hệ thống thang máy trong tòa nhà 4 tầng sử dụng thang đôi, cụ thể là tòa nhà 4 tầng D6 trường Đại học Bách khoa Hà nội, cái tên mà chúng tôi sẽ nhắc đến nhiều trong tài liệu này
Sản phẩm chúng tôi mô phỏng không chỉ để phục vụ cho riêng 1 tòa nhà có số tầng
cụ thể, số thang cụ thể, thứ tự ưu tiên cụ thể và điều quan trọng là đáp ứng những yêu cầu cơ bản của người hướng dẫn chúng tôi, cô giáo Vũ Thị Hương Giang Mục địch của chúng tôi là xậy dựng một cách thức chung để tiếp cận với những đội tượng hàng đợi thang máy
Trong quá trình phát triển chương trình này, bản thân mỗi thành viên trong nhóm cũng chưa thấu hiểu về đối tượng hàng đợi thang máy và những kĩ năng lập trình hướng đối tượng trên C++ nên còn nhiều thiếu sót Vì vậy việc soạn ra một tài liệu đúng chuẩn mô tả quá trình phát triển, kiểm thử và mô tả về sản phẩm sẽ giúp ích nhiều cho quá trình phát triển của nhóm và việc nâng cấp về sau cho nhóm và những người có nhu cầu sử dụng lại phần mềm
Xin cảm ơn cô Vũ Thị Hương Giang người hướng dẫn của nhóm, thầy Huỳnh Quyết Thắng, thầy Nguyễn Đức Nghĩa đã trang bị cho chúng tôi những kiến thức cơ bản để có thể thực hiện chương trình này
Nhóm PE10
Lớp KSCLC K54
Đại học Bách Khoa Hà nội
Trang 4PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
Công việc Người thực hiện Thời gian
đến 28/3/2012
Thiết kế giả pháp Hợp thức hóa thiết kế
Cài đặt thiết kế
Class elevator Nguyền Bá Thủy 29/3 đến 4/4Class floor Vũ Đình Ba 29/3 đến 4/4Class systemControl Phạm Thanh Tùng 5/4 đến 10/4Main(), đồ họa Võ Tiến Tú 5/4 đến 10/4
Viết tài liệu Võ Tiến Tú 16/4 đến 19/4
Trang 5CHƯƠNG 1 PHÂN TÍCH YÊU CẦU VÀ THIẾT KẾ GIẢI PHÁP
1.1 Mô tả yêu cầu bài toán
Mô phỏng hệ thống thang máy đôi cho tòa nhà D6
1.1.1 Yêu cầu được giao:
i) Thang đôiii) Phân biệt chức năng của người sử dụng và người quản líiii) Có giao diện nhập và hiển thị
Tên thang Bật đèn báo động Thông báo đã thực hiện
1.2.1.2.Tắt đèn báo động
Tên thang Tắt đèn báo động Thông báo đã thực hiện
1.2.1.3 Chọn tầng cần đến
Tên thangTên tầng Nhập yêu cầu vào hàng
đợi
Thông báo đã nhập yêu
cầu
Trang 61.2.1.4.Yêu cầu mở cửa
Tên thang Kiểm tra có đang đóng cửa không
Nếu đang đóng cửa thì nhập yêu
cầu vào hàng đợi Thông báo đã nhập yêu
cầu
1.2.1.5.Xóa các yêu cầu
Yêu cầu xóa Xóa các phần tử trong hàng đợi Thông báo đã thực hiện
1.2.1.6 Chuyển quyền sử dụng cho người sử dụng
Yêu cầu chuyển
quyền sử dụng
Chuyển quyền sử dụng Thông báo đã thực hiện
1.2.2 Các chức năng của người sử dụng
1.2.2.1 Bật đèn báo động
Tên thang Bật đèn báo động Thông báo đã thực hiện
1.2.2.2.Gọi đi lên
Tên tầng hiện tại Nhập yêu cầu vào hàng
đợi
Thông báo đã nhập yêu
cầu
1.2.2.3.Gọi đi xuống
Tên tầng hiện tại Nhập yêu cầu vào hàng
đợi
Thông báo đã nhập yêu
cầu
Trang 71.2.2.5.Yêu cầu mở cửa
Tên thang Kiểm tra có đang di chuyển
khôngKiểm tra có đang đóng cửa khôngNếu không đi chuyển và đangđóng cửa thì nhập yêu cầu vào
hàng đợi
Thông báo đã nhập yêu cầu
1.3 Thiết kế chương trình
Sau khi tìm hiểu, chúng tôi quyết định thiết kế chương trình theo hướng đối tượng
Vì bản chất hệ thống điều khiển thang máy gồm 3 phần: thang máy, các lời yêu cầu,
bộ điều khiển
Các yêu cầu chia làm 2 loại:
1 Yêu cầu có thời gian thực hiện O(1), các yêu cầu này sẽ gọi các phương thức tương ứng ở đối tượng thang máy:
i) Bật/tắt báo động
ii) Xóa các yêu cầu chưa thực hiện trước đó
iii) Chuyển quyền sử dụng cho người sử dụng
2 Yêu cầu có thời gian thực hiện O() hoặc có thể bị hủy, các yêu cầu này sẽ được trừu tượng hóa để lưu trong đối tượng hàng đợi:
i) Yêu cầu đóng/mở cửa
ii) Gọi lên, gọi xuống, chọn tầng đến
Đèn bất là 1, đèn tắt là 0
Biến lưu trạng thái đang đi
Đang đi lên là 1, đang đi xuống là -1
Trang 8Thang máy
Thuộc tính chuyển hoặc trạng thái di
chuyển trước đóTầng hiện tại Từ 1 đến 4Biến đềm thời
gian di chuyển Thang đang đứng yên là 0, khi di chuyển sẽ tăng từ 1 đến 5Biến đếm quá
trình đóng/mở cửa
Cửa đóng là 0 cửa mở là 6, đang trong quá trình trình đóng/mở thì giảm từ 6 về
0 / tăng từ 0 đên 6Biến chỉ đang
trong quá trình đóng cửa
Đang trong quá trình đóng cửa là 1, ngược lại là 0 Nếu đang đóng cửa thì yêu cầu mở cửa sẽ có hiệu lực
Trọng lượng bên trong thang
Không thể do người sử dụng hay người quản trị nhập Trọng lượng được nhập
từ ngoài chương trình
Phương thức
Truyền các thuộc tínhBật/tắt báo độngĐóng/mở cửa Cập nhật trọng lượng sau khi đong/mở
cửa
Di chuyển Đi chuyển lên hoặc xuống 1 tâng Có
kiểm tra quá tải khi di chuyểnHàng đợi Thuộc
tính Mảng ghi yêu cầu gọi lên Có yêu cấu là 1, không có yêu cầu là 0 Có yêu cầu chọn tầng thì ghi vào vị trí
tương ứng với tầng chọn giá trị 1
Mảng ghi yêu cầu gọi xuốngPhương
thức Truyền các thuộc tính
Thực hiện các yêu cầu gọi lên, gọi xuống, chọntầng cần đếnXóa các yêu cầu
Bộ điều khiển Phương
thức Gọi hành động tiếp theo Các yêu cầu gọi lên/xuống, chọn tầng cần đền, mở cửa sẽ được quyết định khi
nào thực hiện
Kế thừa đối tượng Hàng đợi và Thang máy
Trang 9Cấu trúc phân cấp của chương trình:
: Chỉ luồng điều khiển
: Chỉ luồng kế thừa thuộc tính
ClasssystemControl
Classelevator Class floor
Main ( )
Trang 10Private ThreadOpenDoor1/2 ( ) DWORD WINAPIProtected getAlert (int E) Bool
Protected getState (int E) IntProtected getFloor (int E) IntProtected getcountTimeFloor (int E) IntProtected getisClosingDoor (int E) boolProtected getcountTimeDoor IntProtected closeDoor (int E) VoidProtected move (int E, int D) VoidProtected openDoor (int E) VoidProtected turnoffAlert (int E) VoidProtected turnonAlert (int E) void
floor
Private CallUp Bool[4][2] 0Private CallDown Bool[4][2] 0Protected getCallUp (int E, int F) Bool
Protected getCallDown (int E, int F) BoolProtected getCallDes (int E, int F) Bool
Protected reset ( ) VoidProtected del (int E, int F) VoidProtected callUp (int F) VoidProtected callDown (int F) VoidProtected refuse (int F, int S, int true E) Void
system
control
Private Flag Bool 1
Private DesFloor Int[2] 0Private StateFloor Int[2] 0Private ThreadCallAction ( ) DWORD WINAPIPrivate findTarget (int E, int S, int D) Int
Private ElevatorTarget ( ) IntPrivate resetSystem ( ) VoidPrivate changeFlag ( ) VoidPrivate TurnonAlert (int E) VoidPrivate TurnoffAlert (int E) VoidPrivate openDoor (int E) VoidPrivate callDes (int E, int F) VoidPrivate callUp (int F) VoidPrivate callDown (int F) VoidE: Elevator S: StatusFloor
F: Floor
D: Direction
Trang 11Trong phần này, chúng tôi sẽ nêu ra 2 giải thuật cơ bản là giải thuật mở cửa khithang máy đang đóng cửa của thang máy và giải thuật tìm thang máy thực hiện lệnhcủa bộ điều khiển.
1.5.1 Giải thuật đóng/mở cửa
Biểu đồ luồng đóng/mở cửa ( hàm closeDoor và openDoor trong class elevator)
Trang 12Biểu đồ luồng mở cửa:
1.5.2 Giải thuật tìm thang máy thực hiện lệnh
Tùy vào điều kiện ưu tiên mà cách thực hiện của hàm ElevatorTarget khác nhau Đốivới cách ưu tiên chiều di chuyển và khoảng cách thì nó hoạt động như sau
Trước hết hãy xem hàm findTarget ( )
Hàm int findTarget (int Elevator, int StatusFloor, int Direction) :
i) Thực hiện tìm theo chiều Direction (chiều lên hoặc chiều xuống) cho thang máy Elevator (thang 1 hoặc thang 2) 1 tầng có StatusFloor (có gọi lên hoặc có gọi xuống)
ii) Nếu tìm thấy thì lưu tầng đó vào Floor[Elevator] và lưu StatusFloor vào
isClosingDoor[E]=0tmp = countTimeDoor[E]countTimeDoor[E]= -1
tmp<
6tmp++
Đợi 1s
Trang 14Biểu đồ luồng hàm int ElevatorTarget ( ) pha sánh trong class systemControl, điều kiện để đến pha này là Elevator tìm được bằng 0 hoặc 1 Xét Elevator = 0, nếu
Trả về -1
Kết thúc so sánh
Trang 15CHƯƠNG 2 CÀI ĐẶT CHƯƠNG TRÌNH
2.1 Các kỹ thuật lập trình đã áp dụng
STT Mô tả kỹ thuật / quy tắc Mô tả đối tượng áp dụng
(hàm, biến, biểu thức, câu lệnh) và phạm vi áp dụng
Các biến trong các class và main
2 Các biến đếm, biến trung gian: đặt tên bằng 1 chữ cái: biến đếm i,j
Các biến trong các class và main
Trong toàn bộ hàm và từng đoạn chương trình
2 Sử dụng else if trong cấu trúc đa lựa chọn Trong các hàm
3 Gióng hàng trong các biểu thức điều kiện để tránh nhầm lẫn
Trong toàn bộ hàm và từng đoạn chương trình
2 Tạo file header File PE10_Cursor
3 Đóng gói, bao bọc Trong các class
2 Tham chiếu con trỏ, truyền giá trị với biến int va bool Trong toàn chương trình
3 Inline funtion Các hàm đơn giản trong các
Hàm scanf trong hàm main
2 Kiểm tra các điều kiện đặc biệt trước khi xử lí Toàn bộ chương trình
3 Assertion Các hàm quan trọng và các
thread trong chương trình
Trang 164 Ghi lỗi riêng ra file Khi xuất hiện lỗi ở Assertion
2 Chú thích đầy đủ Toàn bộ chương trình
3 Gióng hàng giữa các câu lệnh Toàn bộ chương trình
4 Gióng hàng các cặp mở đóng ngoặc nhọn cùng cấp Toàn bộ chương trình
5 Dùng dòng trống để chia code thành các đoạn chính Toàn bộ chương trình
ngoại lệ)
Người thựchiện : ai làm
gì
(X: cài đặt Y: kiểm thử)
4 Yêu cầu mở cửa 2 Ba – Tùng
5 Xóa các yêu cầu 3 Ba – Thủy
6 Chuyển quyền sử dụng 3 Tùng – Tú
Trang 172.3.1 Chức năng chọn tầng đến với quyền Admin
Trang 182.3.2 Chức năng gọi thang đi lên của User
Sẽ ưu tiên cho thang số 2 thực hiện lênh:
Trang 19Để tránh sự cố khi đóng cửa, hành động đóng cửa bị hủy và hành động mở cửa được thực hiện.
Trang 20KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Chương trình thiết kế theo hướng đối tượng nên có ưu điểm là cấu trúc rõ ràng, dễdàng mở rộng với các chức năng nhập số người và khống chế số người, thêm tầng,thêm thang …
Do mô hình hóa được các câu lệnh phức tạp nên vẫn đề cần xem xét quan trọng nhấtchỉ tập trung vào thead ThreadCallAction và hàm ElevatorTarget nếu muốn cải tiếnthuận toán theo cách di chuyển chẵn lẻ hay khống chế tầng di chuyển …
Áp dụng tốt các phương pháp bẫy lỗi và lập trình phòng ngừa nên chương trình vẫnchạy tốt nếu những biến đầu vào lỗi
Thiết kế trên 1 cửa sổ nên người sử dụng dễ theo dõi, không cần phải cài đặt thư viện
đồ họa của C
Do sử dụng nhiều thread đồng thời nên chương trình phụ thuộc nhiều vào phần cứngcủa hệ thống, độ trế thời gian phải được xem xét tới Cách khắc phục:
a Thay đổi các thuộc tính của class elevator ngay từ khi gọi thread
b Tính đến trế thời gian, dùng hàm Sleep(10) (đã thựu hiện)
Nhược điểm cuối cùng là giao diện nhập dữ liệu cùng với giao diện in ra nên có trườnghợp xảy ra lẫn con trỏ in ra hoặc nhập vào Cách khắc phục:
Tạo giao diện đồ họa riêng (do khó khăn trong sử dụng đồ họa C nên nhóm
chưa đủ thời gian để sửa đổi giao diện)
Từ những ưu điểm và nhược điểm trên, nhóm chúng tôi cảm thấy còn nhiều điều cầnkhắc phục Tuy nhiên, sẽ là hài lòng nếu xem xét đây như bước đầu của sản phẩm vớinhững thiết kế thuật toán rõ ràng và dễ cập nhập
Trang 21TÀI LIỆU THAM KHẢO
[1] Slide môn Kỹ thuật lập trình của cô Vũ Thị Hương Giang
[2] Slide môn Cấu trúc dữ liệu và giải thuật của thầy Nguyễn Đức Nghĩa
[3] Slide môn Đồ án phần mềm của thầy Huỳnh Quyết Thắng
[4] The Art Of Computer Programming 3rd ed Vol1 - Donald Knuth