1
Case Study: Mô phỏng sân bay
Nhậndạng các lớp
•Lớp Plane, các phương thức?
–Khởitạo
–Hạ cánh
–Cất cánh
•LớpRunway:
–Chứa thành phầnthể hiện hàng đợi củacác
máy bay đang đợicất cánh hoặchạ cánh.
•Lớp Random:
–trạng thái ngẫu nhiên củaviệccất cánh và hạ
cánh củamáybay
Cài đặt
const int END_TIME = 30; // time to run simulation
const int QUEUE_LIMIT = 60; // size of Runway
queues
const double ARRIVAL_RATE = 0.5, DEPARTURE_RATE =
0.5;
int main( ) // Airport simulation program
/* Pre: The user must supply the number of time intervals the
simulation is to run, the expected number of planes arriving,
the expected number of planes departing per time interval,
and the maximum allowed size for runway queues.
Post: The program performs a random simulation of the airport,
showing the status of the runway at each time interval, and
prints out a summary of airport operation at the conclusion.
Uses: Classes Runway, Plane, Random and functions run_idle,
initialize
.
*
/
1. {
2. int flight_number = 0;
3. Random random;
4. Runway small_airport(queue_limit);
5. for (int current_time = 0; current_time < END_TIME;
current_time++)
6. {
7. // loop over time intervals
8. int number_arrivals =
random.poisson(ARRIVAL_RATE);
9. // current arrival requests
10. for (int i = 0; i < number_arrivals; i++) {
11.
Plane current_plane(flight_number++, current_time,
arriving);
12. if (small_airport.can_land(current_plane) !=
success)
13
current plane
refuse
()
;
18. int number_departures =
random.poisson(DEPARTURE_RATE);
19. // current departure requests
20. for (int j = 0; j < number_departures; j++) {
21. Plane current_plane(flight_number++, current_time,
departing);
22. if (small_airport.can_depart(current_plane) != success)
23. current_plane.refuse( );
24. }
25. Plane moving_plane;
26. switch (small_airport.activity(current_time, moving_plane)) {
27. // Let at most one Plane onto the Runway at current_time.
28. case land:
29. moving_plane.land(current_time);
30. break;
31. case takeoff:
32. moving_plane.fly(current_time);
33. break;
34. case idle:
35. run_idle(current_time);
36
}
// end of switch
Class Runway
•Cầnquản lý hai hàng đợi
–Cất cánh và hạ cánh
• Ưu tiên máy bay đợihạ cánh
•Yêucầuthống kê:
–Số máy bay đượcxử lý
–Thờigianđợi trung bình
–Số máy bay bị từ chối
2
1. enum Runway_activity {idle, land, takeoff};
2. class Runway {
3. public:
4. Runway(int limit);
5. Error_code can_land(const Plane ¤t);
6. Error_code can_depart(const Plane ¤t);
7. Runway_activity activity(int time, Plane &moving);
8. void shut_down(int time) const;
9. private:
10. Queue landing;
11. Queue takeoff;
12. int queue_limit;
13. int num_land_requests; // number of planes asking to land
14. int num_takeoff_requests; // number of planes asking to take off
15. int num_landings; // number of planes that have landed
16. int num_takeoffs; // number of planes that have taken
off
17. int num_land_accepted; // number of planes queued to land
18. int num_takeoff_accepted; // number of planes queued to take
off
19. int num_land_refused; // number of landing planes refused
20. int num_takeoff_refused; // number of departing
planes refused
21
int
land wait
;
//
total time of planes waiting to land
Định nghĩalớpPlane
1. enum Plane_status {null, arriving, departing};
2. class Plane {
3. public:
4. Plane( );
5. Plane(int flt, int time, Plane_status status);
6. void refuse( ) const;
7. void land(int time) const;
8. void fly(int time) const;
9. int started( ) const;
10.private:
11. int flt_num;
12. int clock_start;
13. Plane_status state;
14.};