Tutoring Services



You are working as a tutor at Tutoring Services, Inc., a tutoring business catering to high school students. You tutor students in various subjects. To make your work easier, you decide to create an application that will help you track each student’s tutoring plan and provide weekly bills. As you are trying to have enough time to practice your programming material, you have decided you will not take on more than eight students.
You need to store every student’s name, school name, and phone number. A valid phone number is only in the format (xxx) xxx-xxxx. An example phone number is (703) 555-1234. The only validation required for the name and school name is that they are required to have a value for you to be able to provide services.
Additionally, you would like to keep track of every subject for which a student needs tutoring services, so the application must store a list of subjects for each student for which the student needs tutoring services, up to six subjects. Proper validation dictates the first letter of the subject must be capitalized while all other letters must not be capitalized. Subjects must only contain letters.
Students are permitted to dictate how many hours a week, up to five hours, but at least one, they would like you to provide tutoring services. Students are charged a base fee of $5 per subject tutored. A rate of $20 per hour is then added onto the base fee. (Example: A student receiving tutoring services for 3 subjects, 2 hours per week will pay $55).
 There are some students who are Honors students and require more detailed tutoring because some of their subjects are Advanced Placement (AP). Your application must have a way to support an Honors student. An Honors student in this application should contain all of the same data elements as a student does, but in addition, you would like to store for each subject, whether or not it is an AP subject. This will allow you the flexibility to calculate a different weekly bill for Honors students. Honors students that have at least two AP subjects must be charged a 10% premium. (Example: An Honors student receiving tutoring services for 3 subjects, 2 of which are designated as AP subjects, 2 hours per week will pay $60.50). A weekly bill for an Honors Student should specify which subjects are AP.
Create an efficient, object-oriented solution with a polished user interface that will allow you to manage your students’ tutoring plans. At the start of the application, a user must be presented with a menu that contains the following options:
Add Student
Print Itemized Weekly Bill
Quit
The “Add Student” option should allow a user to select the type of student they wish to enter (regular student or Honors student) and enter all information about the student, including information about their subject needs. For Honors students, the user should be prompted to identify which subjects are AP subjects after each subject is added. If the user already has entered eight students, the user should see a message indicating he/she has reached the limit of students that can be added.
The “Print itemized Weekly Bill” option should list all students, and prompt the user for which student an itemized weekly bill should be printed. The itemized weekly bill should be well-formatted and display the student’s name, school name, phone number, tutoring subjects, and total cost per week. For Honors students, the weekly bill should further show which, if any, subjects are AP.
 Note: Once a user selects any option other than “Quit Application”, and the option is finished executing, he/she should be returned back to the main menu and re-prompted to enter another option.
Requirements:
Your solution must use object-oriented techniques rather than procedural.
Your solution must include appropriate constants, constructors, accessors (including a toString() method), mutators, and special purpose methods
Your solution must demonstrate use of arrays. You may not use ArrayLists.
You may not use Scanner or System classes for input/output. You must use JOptionPane.
You may not use System.exit, or any variant that exits the program in the middle of the program. The program should only exit once the algorithm has finished completing