Trong quá trình thang máy hoạt động, nếu buồng thang đang ở một vị trí nào đó khác với tầng mà hành khách vừa gọi, thang sẽ di chuyển đến tầng đó theo thứ tự ưu tiên như sau : Nếu than
Trang 1VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
──────── * ───────
BÀI TẬP LỚN
MÔN: KỸ THUẬT LẬP TRÌNH
<NHÓM PE01>
Sinh viên thực hiện : Nguyễn Tiến Thành(20092434)
Nguyễn Phúc Quang(20092089)
Lê Anh Tiến(20092698)
Nguyễn Công Bình(20093380) Cát Huy Thành(20092409)
Lớp : THCN – KSCLC– K54
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
Ngày nay, khi đất nước ta đang trên đà phát triển mạnh, rất nhiều nhà cao tầng
đã mọc lên trên khắp đất nước để đáp ứng với xu hướng công nghiệp hóa, hiện đại hóa của đất nước Với các nhà nhiều tầng có chiều cao lớn thì việc trang bị thang máy là bắt buộc để phục vụ việc đi lại trong tòa nhà Nếu vấn đề vận chuyển người trong những tòa nhà này không được giải quyết thì các dự án xây dựng các tòa nhà cao tầng không thành hiện thực Hơn thế, việc trang bị thang máy sẽ giúp cho việc di chuyển trong tòa nhà trở nên dễ dàng và thuận tiện hơn rất nhiều
Tuy vậy, thang máy là một thiết bị vận chuyển đòi hỏi tính an toàn nghiêm ngặt,
nó liên quan trực tiếp đến tài sản và tính mạng con người Vì vậy yêu cầu chung đối với thang máy khi thiết kế, chế tạo, lắp đặt, vận hành, sử dụng và sửa chữa là phải tuân thủ một cách nghiêm ngặt các yêu cầu về kỹ thuật an toàn được quy định trong các tiêu chuẩn, quy trình, quy phạm
Dựa trên nhu cầu và mong muốn của mọi người trong tòa nhà, chúng em xin được phát triển phần mềm quản lý thang máy để ứng dụng cho tòa nhà D6 trường đại học Bách Khoa Hà Nội Phần mềm được xây dựng dựa trên nền tảng của hệ thống thang máy của thư viện Tạ Quang Bửu trường đại học Bách Khoa
Hà Nội
Nhóm PE01-THCN-KSCLC-K54
Trang 4PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
Công việc trong nhóm được phân ra làm nhóm nhỏ hơn để mọi người có thể trợ giúp nhau cùng làm việc hiệu quả hơn.
Các nhóm nhỏ:
i Nguyễn Tiến Thành, Nguyễn Công Bình: các bạn này phụ trách việc mô tả bài toán và xây dựng biểu đồ IPO cho bài toán Hạn nộp là trong 1 tuần và các bạn
đã hoàn thành đúng thời hạn.
ii Cát Huy Thành: bạn này thực hiện nhiệm vụ thiết kế chương trình Hạn nộp là 1 tuần và bạn cũng đã hoàn thành đúng thời hạn.
iii Nguyễn Phúc Quang, Lê Anh Tiến: các bạn này phụ trách việc thiết kế giải thuật và cài đặt chương trình Hạn nộp là trong 2 tuần và các bạn đã hoàn thành đúng hạn.
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
Hệ thống thang máy cho tòa nhà D6 sẽ áp dụng cho các tầng 2, 3, 4, 5 Trong quá trình thang máy hoạt động, nếu buồng thang đang ở một vị trí nào đó khác với tầng mà hành khách vừa gọi, thang sẽ di chuyển đến tầng đó theo thứ tự ưu tiên như sau :
Nếu thang di chuyển cùng chiều với lệnh gọi thang và di chuyển ngang qua tầng mà hành khách khách đang đứng gọi, thì khi đến tầng dược gọi, thang sẽ dừng lại và đón khách
Nếu thang đang di chuyển theo chiều ngược với chiều hành khách muốn
đi, hoặc cùng chiều nhưng không đi ngang qua, thì sau khi đáp ứng hết các nhu cầu của chiều đó, thang sẽ quay trở lại đón khách
Nếu buồng thang đang ở ngay tại tầng mà hành khách vừa gọi, buồng thang sẽ mở cửa đón khách
Khi đã vào bên trong buồng thang, muốn đến tầng nào, khách ấn nút chỉ định tầng đó, thang máy sẽ lập tức di chuyển và tuần tự dừng tại các tầng mà nó đi qua Cửa buồng thang và cửa tầng được thiết kế đóng mở tự động Khi buồng thang di chuyển đến một tầng nào đó, sau khi ngừng hẳn, cửa buồng thang và cửa tầng sẽ tự động mở để khách có thể ra (vào) buồng thang, sau vài giây cửa
sẽ tự động đóng lại Sau đó thang máy sẽ thực hiện lệnh tiếp theo
Trang 61.2 Biểu đồ IPO
1.2.1 Chức năng 1
Nhận lệnh của người dùng từ ngoài thang
Vị trí các tầng có yêu
cầu gọi thang và hướng
mà người dùng muốn di
chuyển
Đọc và lưu trữ vào mảng len[] hay mảng xuong[]
Mảng gồm các tầng yêu cầu phân riêng theo hướng mà người dùng muốn di chuyển
1.2.2 Chức năng 2
Nhận lệnh của người dùng từ trong thang
Vị trí tầng mà người
dùng muốn đến
Đọc vị trí tầng mà người dùng muốn đến và dùng các hàm để so sánh điều kiện và đưa ra được mảng trong[] phù hợp với yêu cầu của người dùng
Mảng trong[] thỏa điều kiện:
trong[i] = 1 khi
có người muốn ra tầng i
trong[i] = 0 khi không có người muốn ra ở tầng i
1.2.3 Chức năng 3
Di chuyển thang máy
Vị trí tầng và điểm đến
của thang máy
Thay đổi liên tục vị trí tầng để tiến dần đến điểm đến của thang máy
Vị trí tầng bằng với điểm đến
Trang 71.3 Thiết kế chương trình
1.4
Người dùng gọi thang từ tầng i
Thang 1 đến đón khách
Thang 1 đưa khách
đến điểm khách
muốn, trên đường
đi sẽ đón thêm các
khách khác muốn
đi theo cùng chiều
di chuyển của thang
Thang 2 đến đón khách
Thang 2 đưa khách đến điểm khách muốn, trên đường
đi sẽ đón thêm các khách khác muốn
đi theo cùng chiều
di chuyển của thang
Thang 1 có độ ưu tiên cao hơn
Có người gọi thang
Thang đứng yên và đợi lệnh gọi tiếp theo
Sai
Đúng
Trang 81.4 Thiết kế dữ liệu
Mô tả dữ liệu:
Các dữ liệu trong thang máy đều được sử dụng theo cấu trúc mảng
Cụ thể:
Thang máy nhận tín hiệu vào từ các file text:
- BenNgoaiThang.txt
- BenTrongThang1.txt
- BenTrongThang2.txt
Các tín hiệu này được lưu ở 4 mảng:
Hai mảng lưu các tín hiệu gọi từ bên ngoài:
- Mảng len[i] với i là vị trí của tầng
Giá trị của len[i] thể hiện trạng thái của tầng
- Mảng xuong[i] với i là vị trí của tầng
Giá trị của xuong[i] thể hiện trạng thái của tầng
Hai mảng lưu các tín hiệu từ trong thang máy:
- Mảng trong1[i] với i là vị trí của tầng, lưu tín hiệu trong thang máy 1: trong[i] = 1 khi có người muốn ra tầng i;
trong[i] = 0 khi không có người muốn ra ở tầng i;
- Mảng trong2[i] tương tự với thang máy thứ 2
Trang 91.5 Thiết kế giải thuật
1.5.1 Giải thuật 1: Hai thang máy quét tín hiệu nhận điểm đến
Ta sẽ ưu tiên cho thang 1 chọn điểm đến trước theo qui tắc:
Khi thang máy đi lên, thang sẽ duyệt theo mảng len[], trong1[] Nếu điểm đến chọn từ mảng len[], sau khi chọn, toàn bộ những phần tử có yêu cầu nằm trong quãng đường chuyển động của mảng len[] sẽ gán giá trị là 1 (thể hiện tầng
đã nằm trong trách nhiệm của thang1) Giá trị mảng trong1[] không thay đổi
Khi thang máy đi xuống, thang duyệt theo mảng xuong[] và trong1[] Giá trị của các mảng sau khi duyệt xong đặt tương
tự như trên
Khi thang máy đứng yên Thang máy sẽ quét cả 3 mảng len[], xuong[], trong[] Giá trị mảng sau khi duyệt đặt như trên
Thang máy 2 duyệt như thang 1, khác ở chỗ: Thang máy 2 chỉ duyệt các phần tử len[], xuong[] mà giá trị của nó bằng 3 Sau khi nhận điểm đến, giá trị của phần tử đặt lại là 2
Ví dụ:
7
1
Tần
g
Bảng 1 Bảng 2
Nếu tín hiệu váo như bảng 1 Thang máy 1 đang đi lên, sẽ chọn tầng 2, 5,6 Giá trị sau khi chọn vẽ ở bảng 2
Thang máy 2 chọn các giá trị 3 còn lại sao cho phù hợp Ở bảng trên, thang đã biến đổi toàn bộ giá trị bên cột xuống sang giá trị 2
Nhờ cách phân biệt giá trị này, các tín hiệu được lặp lại một cách hệ thống, không bị lặp lại
1 1 2 2 1
L X
Trang 101.5.2 Giải thuật 2: Cách thang máy đón khách
Dựa vào tín giá trị của các mảng:
Đối với thang 1, khi đi lên, sẽ dừng ở các tầng mà len[] có giá trị bằng 1 Sau mỗi lần dừng, giá trị len[]=0; hoặc sẽ dừng ở các tầng có tín hiệu trong1[] = 1, cũng trả lại giá trị của nó bằng 0 sau khi dừng
Thang 1 khi đi xuống cũng xét tương tự nhưng với mảng giá trị xuong[]
Đối với thang 2, xet điểm đón khách tương tự như thang 1 Khác ở chỗ: Giá trị len[], xuong[] mà thang 2 phải dừng là 2 Sau khi dừng cũng đặt lại giá trị phần
tử về 0
Nhờ cách đặt giá trị này, hai thang đã kết hợp với nhau để đón khách trọn vẹn, không bỏ sót
1.5.3 Giải Thuật 3: Cách thang máy chuyển động
Thang máy chuyển động thực chất là chuỗi hiển thị các vị trí của tầng thông qua hàm tienden(vị trí, điểm đến)
Hàm tienden trả lại giá trị là vị trí sao cho thang sẽ tiến dần điểm đến
Quá trình cập nhật chọn lựa điểm đến, gán vị trí với hàm tiến đến đã tạo được lộ trình đi cho thang máy
Ưu điểm Cách chuyển động này giúp ta dễ dàng mở rộng về giao diện cho thang máy, tăng chất lượng phần mềm
Trang 11CHƯƠ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
I Các kỹ
thuật làm việc
với biến
1 Khai báo biến với tên gọi mang tính chất dễ nhớ
Biến địa phương và biến toàn cục trong chương trình
2 Sử dụng biến trung gian Áp dụng cho các biến đếm
hoặc dùng để lưu trữ lại giá trị của một biến khác mà ta không muốn thao tác trực tiếp trên biến đó
3 Sử dụng biến con trỏ Áp dụng để lưu trữ giá trị
như trên một mảng
II Các kỹ
thuật viết mã
chương trình
hiệu quả
1 Gióng hàng hợp lý, thống nhất
Áp dụng trong toàn bộ chương trình
2 Dùng các đoạn trống để đánh dấu phân cấp chương trình
Áp dụng trong toàn bộ chương trình
3 Sử dụng () và các biểu thức dạng nguyên bản trong cấu trúc rẽ nhánh
Áp dụng trong toàn bộ chương trình
III Các kỹ
thuật thiết kế
chương trình
1 Sử dụng các chương trình con
Các chương trình con chủ yếu được gọi trong quá trình xử lý hàm main() và một số hàm cần thiết khác
2 Thiết kế chương trình theo kiểu: top – down
Chia bài toán thang máy
ra thành nhiều bài toán nhỏ hơn : xử lí bên ngoài thang, trong thang 1, trong thang 2
Tìm giải pháp cho từng bài toán nhỏ đó rồi gộp lại để xử lý bài toán
Trang 12IV Các kỹ
thuật xây dựng
hàm/thủ tục
1 Tên các hàm mang tính chất gợi nhớ và bắt đầu bằng chữ in thường
Áp dụng trong toàn bộ chương trình
2 Sử dụng dữ liệu có cấu trúc để tăng tốc độ của chương trình
Áp dụng trong toàn bộ chương trình
…
V Các kỹ
thuật bẫy lỗi
và lập trình
phòng ngừa
1 Dùng hàm bao gói
2 Dùng dữ liệu có cấu trúc
để đơn giản hóa tham số đầu vào
3 Các hàm đều nhất quán với nhau
4 Kiểm tra điều kiện biên của các tham số đầu vào
VI Phong
cách lập trình
1 Viết đầy đủ chú thích cho các phần của chương trình
2 Gióng hàng các cặp mở đóng ngoặc cùng cấp
…
Trang 132.2 Kết quả chương trình
Chức
năng
(đán
h số
theo
men
u từ
1-14)
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ử)
1 Nhận yêu cầu từ ngoài
thang
3
2 Nhận yêu cầu từ trong
thang
3
3 Cho thang chạy theo chiều
lên
3
4 Cho thang chạy theo chiều
xuống
3
5 Xử lý tình huống cần xét
đến sự ưu tiên khi có nhiều
lệnh gọi cùng lúc
3
Trang 142.3 Giao diện chương trình
Ví dụ trường hợp: thang 1 chạy từ 2 lên 9 đến tầng 3 thì có người tàng 5 muốn lên, vào thang, người này xuống tầng 8.
Trang 16KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Trong quá trình làm bài tập lớn Chúng em đã rút ra được những điều rất tốt cho bản thân và đồng thời cũng giúp ích cho môn học rất nhiều Sau đây là một vài điều mà chúng em tự đánh giá về quá trình làm bài tập lớn của nhóm mình:
Ưu điểm:
i Chương trình rõ rang, dễ hiểu
ii Mô tả trực quan thao tác của người dùng khi ở trong thang và ngoài thang
iii Có thể phát triển với số tầng tùy ý
Nhược điểm:
i Chương trình vẫn chạy trên nền console, chưa tích hợp đồ họa
để thân thiện với người dùng hơn
ii Vẫn còn một số chức năng phụ trợ chưa được thiết kế
Hướng phát triển thêm của chương trình:
Tích hợp giao diện đồ họa vào chương trình để thân thiện với người dùng hơn
Thiết kế thêm một số tính năng phụ trợ như: đóng, mở cửa khẩn cấp, giới hạn số người dùng đồng thời,…
Trang 17TÀ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] http://www.thegioithangmay.vn/
[3] http://congtythangmay.info/
Trang 18PHỤ LỤC
Chương trình vẫn chưa được hoàn thiện như ý Chúng em sẽ cố gắng hoàn thiện thêm một số chi tiết vào buổi thuyết trình