Topic: airline reservation system in javaPaper details:The airline reservation system must be able to:• Create and add new airline companies• List all companiesAn airline company must be able to:• Create and add new flights (A flight has a start destination, an end destination, a take-off time and a landing time)• Add passengers to flight (make a booking)• Remove passengers from flights (cancel a booking)• Display all flights• For any flight, display all passengers on that flightThere are two types of passengers:• Standard class who can only be booked on two flights for any one airline• Business class who can be booked onto up to four flights for any one airlineYou should develop a user interface (UI) menu system that allows users to have access to all of the features of your system. (None of the functionality of your airline reservation system should be coded in your UI)The data that is entered into the system should be stored in appropriate data structure(s) and serialized. When the airline reservation system starts the user should be given a choice to load the serialized data or start with a blank system.You must keep in detail comments in your entire code.TestingYou should provide a comprehensive JUnit test suite for the main classes in your program. If you are unsure about which classes to provide testing for you should speak with the module leader for clarification.Advanced FeaturesMarks will be given for the advanced features listed belowDesign Patterns (5%)You are required to use the observer pattern at an appropriate place in your program. It is up to you to decide where is appropriate.Graphical User interface GUI (10%)In addition to your UI you should develop a graphical user interface (GUI). Your GUI should be able control and view all of the features of your airline reservation system. (None of the functionality of your airline reservation system should be coded in your GUIReportYou should write a report explaining your design, paying particular attention to the data structure where you store the data. You should explain why you chose this particular data structure. You should also explain where and why you have used polymorphic programming interfaces and enumerators. Your report should also discuss the main features of your UI and GUI, if using one, and include screen shots.