Từ kiến thức đã học trên lớp cùng với việc tìm hiểu các thông tin liên quan đến thang máy trên Internet như là các cấu trúc của thang máy, thuật toán được dùng trong việc xử lí thang máy
Trang 1──────── * ───────
BÀI TẬP LỚN
MÔN: KỸ THUẬT LẬP TRÌNH
<PE 05>
Sinh viên thực hiện : Hà Đức Thắng
Phan Tuấn Phúc
Võ Tá Hoàng
Vũ Phi Long
Giáo viên hướng dẫn : TS Vũ Thị Hương Giang
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 1 5
1.2.2 Chức năng 2 5
1.3 Thiết kế chương trình 5
1.4 Thiết kế dữ liệu 5
1.5 Thiết kế giải thuật 5
1.5.1 Giải thuật 1 6
1.5.2 Giải thuật 2 6
CHƯƠNG 2 CÀI ĐẶT CHƯƠNG TRÌNH 7
2.1 Các kỹ thuật lập trình đã áp dụng 7
2.2 Kết quả chương trình 7
2.3 Giao diện chương trình 8
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 9
TÀI LIỆU THAM KHẢO 10
PHỤ LỤC 11
Trang 3LỜI NÓI ĐẦU
Bài tập lớn môn Kĩ thuật lập trình của lớp KSCLC là:
”Mô tả hoạt động của hệ thống thang máy tòa nhà D6”
Tòa nhà D6 gồm có 5 tầng và hệ thống thang máy của tòa nhà này là tổ hợp của 2 thang Qua sự khảo sát hệ thống thang máy của các tòa nhà khác như hệ thống thang máy của thư viện Tạ Quang Bửu, nhóm PE05 đã cố gắng mô tả gần đúng nhất hệ thống thang máy của nhà D6 với của thư viện Tạ Quang Bửu
Từ kiến thức đã học trên lớp cùng với việc tìm hiểu các thông tin liên quan đến thang máy trên Internet như là các cấu trúc của thang máy, thuật toán được dùng trong việc xử lí thang máy hay các yêu cầu cần phải xử lí trong bài toán thang máy, nhóm đã thu thập được các thông tin cần thiết để đề ra phương án giải quyết bài toán thang máy của nhóm và bắt đầu phân công công việc cụ thể cho từng thành viên và thường xuyên gặp gỡ trao đổi và kiểm tra tiến độ công việc
Sau khi đã hoàn thành xong phần code xử lí chính cho thang máy, nhóm bắt tay vào nghiên cứu phần giao diện cho thang máy để có thể quan sát một cách tốt nhất quá trình hoạt động của thang, qua đó có thể nhận ra các cách thức để tối ưu hóa quá trình di chuyển của thang máy
Mặc dù thời gian có hạn cùng với kinh nghiệm lập trình còn hạn chế nhưng nhóm PE05 đã cố gắng hết sức để hoàn thành bài tập một cách tốt nhất
Trong quá trình code, do quan điểm chủ quan hoặc sơ suất, chương trình có thể có một số lỗi trong quá trình hoạt động, rất mong nhận được các ý kiến đóng góp của thầy cô và các bạn
Xin chân thành cảm ơn
Nhóm PE05
Trang 4PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
TUẦN 9:
- Từng thành viên trong nhóm tự tìm hiểu các thông tin về thang máy, sau
đó nhóm tập trung lại để thảo luận và tìm ra phương án tốt nhất và phù hợp nhất với khả năng của nhóm để bắt tay vào thực hiện
- Sau khi đã thống nhất phương án thực hiện, nhóm bắt đầu đề xuất các cấu trúc dữ liệu và các hàm cần thiết cho chương trình và phân công thực hiện
TUẦN 10:
Các thành viên trong nhóm tập trung hoàn thành các công việc được giao
Cụ thể như sau:
Hà Đức Thắng : Thực hiện hàm nhập dữ liệu cho thang
Võ Tá Hoàng : Thực hiện hàm kiểm tra dữ liệu nhập và xử lí dữ liệu nhập
Phan Tuấn Phúc: Thực hiện hàm xử lí quá trình chạy của thang
Vũ Phi Long : Thực hiện hàm kiểm tra quá trình chạy của thang
TUẦN 11:
- Nhóm PE05 tập trung lại để tổng hợp các kết quả và tổng hợp các hàm vào trong một chương trình thống nhất.\
- Sau khi thang đã hoạt động và đáp ứng các yêu cầu của bài toán, nhóm tiếp tục nghiên cứu phần giao diện và tối ưu quá trình hoạt động của 2 thang Phân công cụ thể như sau:
Hà Đức Thắng : Vẽ khung chính của hệ thống thang máy
Võ Tá Hoàng : Thực hiện hàm di chuyển cho từng thang
Vũ Phi Long : Thực hiện hàm đóng mở cửa cho từng thang
Phan Tuấn Phúc: Thực hiện hàm tối ưu hóa hoạt động
TUẦN 12:
- Kiểm tra lại quá trình hoạt động của thang, chỉnh sửa code cho hợp lí và kiểm thử
- Cuối cùng là phân công viết báo cáo
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
Qua các quan sát thực tế và những lần thảo luận nhóm, nhóm đã đi đến việc thống nhất cấu trúc của thang máy để có thể lập trình một cách thuận tiện Cùng với việc tham khảo trên mạng nhóm đã thống nhất về quá trình chạy của thang,
sự kết hợp giữa hai thang sao cho đạt được hiệu quả tối ưu nhất
Bài toán là mô phỏng quá trình hoạt động của thang đôi cho tòa nhà D6, hệ thống thang máy bao gồm 2 thang Mỗi thang vừa có thể hoạt động độc lập một cách chính xác, vừa có thể kết hợp với nhau để có thể phục vụ hành khách một cách tối ưu nhất
Về phần giao diện trong và ngoài thang, nhóm đã cố gắng mô phỏng một cách chính xác nhất Đó là ở bên ngoài thang chỉ có thể cung cấp thông tin về tầng hiện thời khách đang chờ và hướng mà người khách đó sẽ đi Ở bên trong sẽ chỉ
có tầng mà khách muốn đến
1.2 Biểu đồ IPO
1.2.1 Chức năng 1: Nhận yêu cầu từ bên ngoài thang
Tầng mà khách đang đứng
và chiều mà khách muốn
đi
Thêm tầng và hướng vào các vector tương ứng
Vector tầng và hướng đã được thêm các giá trị
1.2.2 Chức năng 2: Nhận tiếp yêu cầu từ bên ngoài
Tầng mà khách đang đứng
và chiều mà khách muốn
đi
Thêm tầng và hướng vào các vector tương ứng
Vector tầng và hướng đã được thêm các giá trị
Vector tầng và hướng đã
được thêm các giá trị
tương ứng sau khi khách
gọi
Sắp xếp lại các vector theo đúng trình tự di chuyển của thang trong thực tế
Vector tầng và hướng đã được sắp xếp lại một cách
chính xác
Trang 61.2.3 Chức năng 3: Nhận yêu cầu tầng mà khách muốn đến:
Tầng mà khách muốn đến
khi đã vào trong thang
Thêm tầng muốn đến cảu khác vào vector điểm đến
Vector điểm đến đã được thêm các giá trị
Vector điểm đến đã được
thêm các giá trị
Sắp xếp lại vector tuyến đường của thang theo đúng trình tự di chuyển của thang trong thực tế
Vector tuyến đường đã được sắp xếp lại một cách
chính xác
1.2.4 Chức năng 4: Di chuyển
Tuyến đường của thang Di chuyển thang theo
tuyến Thang đến tầng đích
1.2.5 Chức năng 5: Đóng mở cửa
Thang đến tầng đích Mở đóng cửa Đón trả xong khách
1.3 Thiết kế chương trình
int main()
Trang 7Mục đích các hàm xem phần phụ lục.
1.4 Thiết kế dữ liệu
Đầu tiên, quá trình hoạt động của thang phụ thuộc rất nhiều vào vị trí hiện tại của thang và hướng thang đang di chuyển nên nhóm đã dùng struct để mô tả trạng thái của thang
void
left()
Thang
trái
void right() Thang phải
void Arange() Thang trái
EditStart Route
Arrange
Trang 8Từ đó việc yêu cầu thang cũng bao gồm tầng gọi, hướng di chuyển và tầng đến cho nên yêu cầu cũng được thiết kế theo kiểu dữ liệu struct
Đối với quá trình chạy của thang, từ hoạt động thực tế là thang sẽ phục vụ khách theo thứ tự gọi thang, điều này có nghĩa là khách nào gọi thang trước sẽ
được ưu tiên phục vụ trước Từ đó nhóm đã nghĩ đến một kiểu dữ liệu mà tương
tự với ngăn xếp và hàng đợi, cuối cùng nhóm đã đi đến thống nhất sử dụng Vector để lưu thông tin các tầng mà thang máy phải đến do Vector có cả tính chất của queue và stack Hơn nữa, Vector có ưu điểm hơn so với Array là cơ chế sắp xếp và chèn đơn giản hơn rất nhiều
1.5 Thiết kế giải thuật
1.5.1 Giải thuật 1
Giải thuật về sắp xếp vector startPoints lưu các tầng mà thang được gọi Do vector route là vector lưu các tầng mà thang phải đến phụ thuộc vào vector startPoints nên cần phải sắp xếp lại vector startPoints Việc sắp xếp có sử dụng đến thuật toán sắp xếp lựa chọn Cụ thể như sau:
- Khi size của vector startPoints lớn hơn 1 thì phải sắp xếp tất cả các tầng
có lệnh gọi và cùng hướng di chuyển theo thứ tự tùy thuộc vào việc di chuyển của thang
- Sử dụng thuật toán sắp xếp lựa chọn có cải tiến để có thể sắp xếp vector trong khoảng 2 vị trí bất kì
1.5.2 Giải thuật 2
Giải thuật về sắp xếp vector route là vector lưu các tầng phải đến của thang
- Với các giá trị của tầng phải đón và tầng cần đến, sẽ sắp xếp vector route
để thang chạy hiệu quả
- Hàm sắp xếp có sử dụng hàm chèn theo thứ tự từ trái sang hoặc lớn nhất
từ phải sang
Trang 9CHƯƠNG 2 CÀI ĐẶT CHƯƠNG TRÌNH
2.1 Các kỹ thuật lập trình đã áp dụng
<Liệt kê các kỹ thuật lập trình đã sử dụng để làm bài tập lớn >
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
I Các kỹ
thuật làm việc
với biến
1 Đặt tên biến có tính gợi nhớ để dễ kiểm soát chương trình
Đối với tất cả các biến
2 Sử dụng linh hoạt biến toàn cục và biến cục bộ Đối với các hàm có sử dụng biến toàn cục hay cục bộ
3 Chú thích các biến khi khai báo Đối với các biến quan trọng
II Các kỹ
thuật viết mã
chương trình
hiệu quả
1 Sử dụng các vòng lặp for
và while một cách linh hoạt
Đối với các hàm vẽ thang và các hàm chạy song song
2 Sử dụng switch và if else đối với những cấu trúc đa lựa chọn
Các hàm phụ thuộc vào hướng của thang, các hàm cần xử lí nhiều trường hợp
3 Soạn thảo code theo chuẩn
để dễ dàng theo dõi Đối với tất cả các hàm III Các kỹ
thuật thiết kế
chương trình
1 Sử dụng thư viện cho phép chạy nhiều hàm song song
Các hàm xử lí riêng cho từng thang
2 Chia bài toán thành nhiều chương trình con, hàm con rút ngán code
Đối với hầu hết các hàm đều
sử dụng các hàm con
IV Các kỹ
thuật xây dựng
hàm/thủ tục
1 Đặt tên và vị trí phù hợp cho từng hàm Đối với hầu hết các hàm
2 Sử dụng các phương pháp tham chiếu biến hợp lí Đối với hầu hết các hàm
V Các kỹ
thuật bẫy lỗi và
lập trình phòng
ngừa
1 Luôn kiểm tra size của vector trước khi thực hiện phép toán trên vector đó
Đối với các hàm sắp xếp
2 Theo dõi sự thay đổi của biến để dễ dàng kiểm soát
Đối với các hàm sắp xếp
VI Phong
cách lập trình
1 Đặt tên biến gợi nhớ Đối với tất cả các biến
2 Căn lề và sử dụng các dấu ngoặc để phân biệt các đoạn chương trình
Đối với hầu hết các hàm
3 Chú thích đầy đủ Đối với tất cả các biến và
hàm
Trang 102.2 Kết quả chương trình
Chức
năng Chữ ký (Khai báo chức năng) Tình trạng khi nộp bài( 0 : chưa làm
1 : chưa chạy
2 : chạy thông và chưa bắt
hết ngoại lệ 3: chạy thông và có bắt hết
ngoại lệ)
Người thực hiện : ai làm
gì
(X: cài đặt Y: kiểm thử)
Hoàng cài đặt Long kiểm thử
Phúc cài đặt Thắng kiểm thử
thử
Long cài đặt Phúc kiểm thử
2.3 Giao diện chương trình
Trang 12KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Ưu điểm:
- Mô tả được cấu trúc ngoài thang trong thang
- Chạy khá giống với thang máy thật
Nhược điểm:
- Chưa nhập được nhiều tầng đến một lúc
- Thỉnh thoảng còn gặp lỗi
Sẽ khắc phục các nhược điểm trong bài bảo vệ
Trang 13TÀ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] GENETIC ALGORITHM FOR CONTROLLERS IN ELEVATOR
GROUPS: ANALYSIS AND SIMULATION DURING LUNCHPEAK
TRAFFIC
Download ở link sau: http://io.us.es/componentes/p.cortes/pdfs/asoc%2002-146%20(gahca).pdf
Trang 14PHỤ LỤC
1 Hương dẫn cài đặt
- Cài thư viện graphics.h
- Thêm các linker cần thiết
Làm theo link sau:
http://consoleapp.blogspot.com/2011/01/su-dung-thu-vien-graphicsh-voi-dev-c.html
2 Hướng dẫn sử dụng
- Muốn gọi thang thì click chuột vào của sổ đồ họa sau đó nhấn phím ‘s’
Có thể gọi nhiều thang bằng cách trên
- Sau khi click vào của sổ đồ họa nhấn phím ‘s’ thì click sang của sổ
console để nhập tầng Quy ước khi nhập tầng:
n : lên tầng n
- n : xuống tầng n
- Khi thang đón xong khì phải click vào cửa sổ đồ họa và nhấn phím ‘d’ để nhập tầng muốn đến
Danh sách các hàm khi trong sơ đồ phân cấp:
void left(void* data ); // ham chay thang trai
void right(void* data); // ham chay thang phai
void Arrange (void* data);// ham xu lí don va nhap tang goi
void EditStart ( ElevatorState &eleState, bool& edit, vector<unsigned
int>& startPoints, vector<unsigned int>& direction);
// ham sap xep route
void RouteArrange( ElevatorState &eleState, vector<unsigned int>&
startPoints, vector<unsigned int>& destPoints,
vector<unsigned int>& route, vector<unsigned int>&
direction);
// ham di chuyen thang
Trang 15ElevatorState &eleState,
vector<unsigned int>& startPoints,
vector<unsigned int>& destPoints,
vector<unsigned int>& route,
vector<unsigned int>& direction);
// ham dong mo cua
void DoorAction(int& x1, int& y1, int& x2, int& y2, int &cua1, int &cua2);