Part I.
Every year about this time, graduating students begin (at least they should) to think of sending commencement invitations to their friends and loved ones. It is often difficult to keep track of the addresses, and who they have sent inventations to and/or who they need to thank for gifts. You decide that you are going to make a Java program that helps sort through this data. Your program will allow the user to sort and view the data in a variety of ways, as well as search for a particular contact.
In this assignment, your program will read a data file (use BufferedReader) of names, addresses, and other information about the people on our list. The information in the file will have the following format: The first line is a single integer on a line by itself which is the number of contacts in our list. Following that, there is one line for each contact, and the line contains the following information separated by commas: first name, last name, address, whether an invitation was sent to them (true/false), whether a gift was received from them (true/false), and if a thank you note has been sent to them (true/false). For example, here is a sample line from the file:
Abigail,Evans,3967 333rd Ave.,true,false,false
You can download a file for testing from the following link:
[login to view URL]
(Disclaimer: the data in this file was created randomly using a list of common names, and the addresses are generated with random numbers. Any similarity to any person living or dead is purely coincidental.)
All the data in the file will be loaded into a single ArrayList of Contact objects. Each element of the ArrayList will be a reference to a single instance of the class Contact. The Contact class then should have instance variables for the first name, last name, address, a "sent flag", a "gift received flag", and a "thanked flag." The flags can be boolean variables.
Once all the data is loaded into the ArrayList, you can display the data in your GUI. The data will be displayed in a tabular format as shown in the above screenshot. This is accomplished with a JTextArea object embedded within a JScrollPane object. You must make sure that the Font for the JTextArea is a "Monospaced" font, in order to help line up the columns correctly (See the appendix and/or section 13.9 on page 889). Also, in order to line up the columns, you will need to "pad" each column with an appropriate number of spaces. I suggest you write a method with the signature:
private String padTo( String s, int width )
This method will add several spaces to the end of s, enough so that it is width in length. Then it will return the new "padded" String. Note that if s is longer than width characters, the return value should be a substring of s that is width characters long. This method padTo can then be used to help with the display of the data in the JTextArea.
Your program will also have several buttons for sorting/displaying the data. When the user clicks on the "First Name" button, the data will be sorted in the array by first name, and then re-displayed in the JTextArea. When the user clicks on the "Last Name" button, the data will be sorted by last name, and re-displayed in the JTextArea. When the user clicks on the "Not yet invited" button, the order of the data will not change, but only contacts who have not been sent invitations will be shown. When the user clicks on the "Need to thank" button, only contacts who the user has received gifts from but has not sent thank you notes to will be shown (again, the order will not change).
Hi, I'm a Sun Certified Java Programmer with a lot of experience in creating stand-alone applications, including GUIs, and I can create this for you quickly and professionally.