Project2 CSC35500 Programming Project 2 Due: 11/11/2021, 11:59 PM Early Submission Deadline: 11/9/2021, 11:59 PM Problem Statement You will be simulating an airport where 8 planes go out on tours...

1 answer below »
This assignment needs to be done in C++ on a linux environment. There's a pdf file going over what the project is. There's a zip file which includes the required files. Lastly there's a video which demonstrates how the program should be running.


Project2 CSC35500 Programming Project 2 Due: 11/11/2021, 11:59 PM Early Submission Deadline: 11/9/2021, 11:59 PM Problem Statement You will be simulating an airport where 8 planes go out on tours repeatedly. Each tour will be for exactly 12 passengers and last approximately 30 seconds. In performing the simulation, you must make sure that no plane tries to leave a gate with less (or more) than 12 passengers and that no plane lands or takes off at the same time as another plane is landing or taking off. The first thing your program should do is read the following from the command line (in the order specified): • the total number of passengers that are in the airport. • the sum total number of tours that all of the planes are to do. (NOT the number of tours that each plane is to do, the total number of tours that all planes will do when their number of completed tours is added together. 
 You should then create 8 new threads, each one representing a (uniquely numbered) plane; the main function should wait for all of the threads to complete and then exit. Each thread represents an airplane, and should repeatedly follow these steps: 1. board. Waits for 12 passengers to get on the plane. Between each available passenger boarding a random delay of between 0 and 2 seconds should be enforced. This can be accomplished by calling sleep(rand()%3) after each passenger boards. 2. The associated plane should then be shown taxi-ing to the runway. See the provided AirportAnimator class ! 3. The associate plane should then use the runway to take off, animating such (see the provided AirportAnimator class!) Of course, the plane should wait for exclusive access to the runway. 4. The plane should then go on tour. This basically just sleeps for between 15 and 45 seconds, and can be accomplished by calling sleep(15+rand()%31). 5. The plane should then request to land. Once exclusive access to the runway is granted land, the plane landing should be animated (See the provided AirportAnimator class!) 6. The plane should then taxi back to its gate. See the provided AirportAnimator class! 7. Each passenger should then deplane and thus Abe returned to the “pool” of available passengers. There should be a 1 second delay between each passenger deplaning. 
 After completing the above steps, you should update the number of completed tours (keeping in mind that two planes could conceivably attempt to do so at the same time) and go back to step 1 only if the number of tours required was not yet completed! Otherwise, the thread should return. Don’t forget to use the provided AirportAnimator class! You should appropriately update the status of the individual planes as each step is being processed. Problem Details • This problem once again requires that you use a Linux machine to complete • You are being provided with code (the Plane class) to display the requested animations. Do not wast time trying to re-invent the wheel! • Should you have to stop your program (via either ctrl-C or ctrl-Z), you may find the resulting terminal in an unusable state. Typing reset (which may not be visible as you type it) should fix the underlying problem. • Submission You should post to Canvas both your C++ source code file and a plain text file (not an MS Word file) called read.me in a zip or tgz file. Make sure the “root” of your submission is a folder (not just a collection of files.) The read.me file should contain: • your name and any other identifying information. • any special details on how to compile your project • any special details on how to run your project - note that you cannot circumvent the project specifications here! • any known bugs your project has, and possible fixes to those bugs (partial credit abounds here). • an overview of how you solved the project. • You may put any other information you like in this file, although you are not required to do so - one common additional set of entries is a “software engineering log” that indicates what you have done every time you sat down and worked on the project. Many programmers find that such actually helps you to finish projects faster! The read.me file MUST also contain the answers to the following questions: 1. Try running your program with only 11 passengers. What happens? Why? 2. Try running your program with 12 passengers. What happens? Why? 3. Try running your program with 50 passengers and 100 tours. What happens? why? 4. Try running your program with 100 passengers and 20 tours. What happens? Why? 5. What is the minimum number of passengers that will guarantee avoidance of deadlock? Why? Grading Breakdown Final Notes • The provided code uses both the ncurses and the pthread libraries. So, you will need to add -lncurses and -lpthread options to the end of your link command during compilation. • Have you started this project yet? If not, start now! • If you have any questions about this project, see me as soon as possible. • Have you started this project yet? If not, start NOW ! Correct Submission 10% Successful Compilation 10% Following Directions 20% Correct Execution 40% Comments/ read.me, including answers to required questions! 20% http://read.me Project2Provided/AirportAnimator.cpp #include "AirportAnimator.hpp" #include #include #include #include #include #include #include #include #include using namespace std; // how far from the left edge of the screen to start drawing the airport static int left_base=8; // internal lock to make sure no two (or more) threads are drawing at same time static pthread_mutex_t __screenLock; // internal utility to lock drawing screen. static void lockScreen() { pthread_mutex_lock(&__screenLock); } // internal utility to unlock drawing screen. static void unlockScreen() { pthread_mutex_unlock(&__screenLock); } void AirportAnimator::init() { // initialize the lock for drawing on the screen. if (pthread_mutex_init(&__screenLock, NULL) != 0) { cerr < "mutex="" init="" has="" failed="" --="" contact="" dr.="" blythe!!!"="">< endl;="" }="" initialize="" screen,="" ignore="" newline="" presses,="" and="" clear="" the="" screen.="" initscr();="" nonl();="" erase();="" draws="" left="" "wall"="" for="" airport="" terminal="" for="" (int="" r="0;"><3; r++)="" mvprintw(r,="" left_base-1,="" "|");="" draw="" in="" gate="" and="" airplane="" for="" each="" airplane.="" for(int="" i="0;"><8; i++)="" {="" draw="" in="" gate="" right="" wall="" for="" (int="" r="0;"><3; r++)="" mvprintw(r,="" left_base+8*i+7,="" "|");="" draw="" in="" gate="" info="" mvprintw(0,="" left_base+="" 8*i,="" "plane:%d",="" i);="" mvprintw(1,="" left_base+="" 8*i,="" "pass:%2d",="" 0);="" mvprintw(2,="" left_base+="" 8*i,="" "[board]");="" calculate="" column="" for="" airplane.="" int="" col="i*8+left_base+2;" draw="" in="" airplane="" mvprintw(3,="" col,="" "="" |");="" mvprintw(4,="" col,="" "/%1d\\",="" i);="" force="" all="" additions="" to="" display.="" refresh();="" }="" draw="" runway="" mvprintw(15,10,="" "="==========================================================");" mvprintw(19,10,="" "="==========================================================");" force="" runway="" to="" display.="" refresh();="" draw="" initial="" number="" of="" tours="" completed="" as="" 0="" updatetours(0);="" }="" void="" airportanimator::end()="" {="" lock="" up="" screen="" lockscreen();="" erase();="" blank="" the="" screen="" endwin();="" return="" to="" regular="" terminal="" unlock="" the="" screen.="" unlockscreen();="" }="" void="" airportanimator::taxiout(int="" plane_num)="" {="" find="" column="" number="" for="" airplane.="" int="" col="plane_num*8+left_base+2;" lock="" up="" screen="" so="" we="" can="" draw="" lockscreen();="" draw="" the="" airplane="" heading="" out="" mvprintw(3,="" col,="" "\\%1d/",="" plane_num);="" mvprintw(4,="" col,="" "="" |");="" refresh();="" let="" others="" draw="" if="" they="" want="" to!="" unlockscreen();="" move="" the="" location="" of="" this="" airpalne="" toward="" runway="" for="" (int="" r="3;"><=12; r++)="" {="" lock="" screen="" so="" we="" can="" draw="" on="" it="" lockscreen();="" redraw="" the="" location="" of="" the="" airplane,="" leaving="" blanks="" "behind"="" it.="" mvprintw(r,="" col,="" "="" ");="" mvprintw(r+1,="" col,="" "\\%1d/",="" plane_num);="" mvprintw(r+2,="" col,="" "="" |");="" refresh();="" let="" others="" draw="" unlockscreen();="" show="" slight="" delay="" for="" each="" bit="" of="" taxi-ing="" the="" airplane="" does.="" usleep(7e5);="" }="" }="" void="" airportanimator::takeoff(int="" plane_num)="" {="" int="" col="plane_num*8+left_base+2;" clear="" out="" plane="" that="" is="" doen="" taxi-ing="" lockscreen();="" mvprintw(13,="" col,="" "="" ");="" mvprintw(14,="" col,="" "="" ");="" refresh();="" window="" *planewin="newwin(3,9," 16,="" 10);="" mvwaddstr(planewin,="" 0,1,="" "="" \\\\");="" stringstream="" fuselage;="" fuselage="">< "="">)" < plane_num="">< "))))";="" mvwaddstr(planewin,="" 1,1,="" fuselage.str().c_str());="" mvwaddstr(planewin,="" 2,1,="" "="" ");="" wrefresh(planewin);="" unlockscreen();="" long="" int="" sleep_time="100000;" for(int="" col="10;"><=65; col++) { int tts=sleep_time; usleep(tts); sleep_time= (int) (sleep_time/1.05); lockscreen(); mvwin(planewin, 16, col); wrefresh(planewin); unlockscreen(); } lockscreen(); wclear(planewin); wrefresh(planewin); delwin(planewin); unlockscreen(); } void airportanimator::land(int plane_num) { lockscreen(); window *planewin = newwin(3,9, 16, 10); mvwaddstr(planewin, 0,0, " //"); stringstream fuselage; col++)="" {="" int="" tts="sleep_time;" usleep(tts);="" sleep_time="(int)" (sleep_time/1.05);="" lockscreen();="" mvwin(planewin,="" 16,="" col);="" wrefresh(planewin);="" unlockscreen();="" }="" lockscreen();="" wclear(planewin);="" wrefresh(planewin);="" delwin(planewin);="" unlockscreen();="" }="" void="" airportanimator::land(int="" plane_num)="" {="" lockscreen();="" window="" *planewin="newwin(3,9," 16,="" 10);="" mvwaddstr(planewin,="" 0,0,="" "="" ");="" stringstream="">
Answered 2 days AfterNov 08, 2021

Answer To: Project2 CSC35500 Programming Project 2 Due: 11/11/2021, 11:59 PM Early Submission Deadline:...

Darshan answered on Nov 10 2021
114 Votes
1.your name and any other identifying information
2.compile project using below command.
g++ plane
Test.cpp AirportAnimator.cpp AirportAnimator.hpp -lncurses -lpthread
3.run using below command
./a.out no_of_passengers no_of_tours
4.there is several bugs in this. First need to make lock the run while landing and take off. Also need to manage passanger counts.
5.It is very difficult to...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here