1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÀI TẬP LỚN MÔN KỸ THUẬT LẬP TRÌNH

22 227 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 403,5 KB

Nội dung

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 1

Giáo viên hướng dẫn : TS Vũ Thị Hương Giang

Hà Nội, 2 tháng 5 năm 2012

Trang 2

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 đó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 3

LỜ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 4

PHÂ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 5

CHƯƠ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 6

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

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

Thang 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 9

Cấ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 10

Private 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 11

Trong 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 12

Biể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 14

Biể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 15

CHƯƠ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 16

4 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

(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 17

2.3.1 Chức năng chọn tầng đến với quyền Admin

Trang 18

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

KẾ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 21

TÀ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

Ngày đăng: 14/01/2019, 17:04

TỪ KHÓA LIÊN QUAN

w