CSCI 428 – Spring 2021 Final Project

100 points + 10 bonus points

Note: This is an individual assignment. Each student MUST complete the work on his/her own. Any code sharing/plagiarism is not tolerated.


This project consists of three tasks. The goal is to explore how to design various class through encap- sulation, inheritance, composition, and polymorphism, to examine how to create GUI applications using JavaFX. Glance at “What to Submit” when you start working on a task so that you know what information to provide from each task.

Submission Example







What to Submit

1. One doc file “CSCI428-project-XX.doc” including the text source code and screenshots of the outputs of all programs. Please replace XX with your first name and last name. You can copy/paste the text source code from Eclipse,IntelliJIDEA, or other IDEs into the doc file. Hopefully, based on the screen snapshots of the output, you can show that your programs passed tests and were well.

2. Java class files for all programs. In well-defined programs, proper comments are required. For programs without comments, they will be deducted greatly in grade.

– For task 1, there are 6 java files (including,,, Existing-,, and and 1 text file named “Data.txt”.

– For task 2, there is just 1 java file,

3. Note that if any program or code does not work, you can explain the status of the program or code and then attach your explanation and description in a file “README.txt”.

4. Optional. Anything you want to attract the attention of instructor in grading.



Task 1 (50 points): (Online Address Book Application) Using classes, design an online address book to keep track of the names, addresses, phone numbers, and birthdays of family mem- bers, close friends, and certain business associates. Your program should be able to handle a maximum of 500 entries.

(a) Define the class Address that can store a street address, city, state, and zip code. Use the appropriate methods to print and store the address. Also, use constructors to automatically initialize the data members.

(b) Define the class ExistingPerson using the class Person (provided in the student folder), the class Date (provided in the student folder), and the class Address. Add a field to this class to classify the person as a family member, friend, or business associate. Also, add another field to store the phone number. Add (or override) methods to print and store the appropriate information. Use constructors to automatically initialize the data members.

(c) Define the class AddressBook using previously defined classes. An object of type Address- Book should be able to process a maximum of 500 entries.

(d) Use the test file to guide your design and test your classes, where XX should be replaced with your first name and last name. Note the class Task1XX is not finished in a good shape and you are suggested to add more statements if needed.

The program should perform the following operations:

(d-i) Load the data into the address book from a disk.

(d-ii) Sort the address book by last name.

(d-iii) Search for a person by last name.

(d-iv) Print the address, phone number, and date of birth (if available) of a given person.

(d-v) Print the names of the people whose birthdays are in a given month or between two given dates.

(d-vi) Print the names of all the people between two last names.

Grading Rubric

– 5 points for each class (e.g. Address, ExistingPerson, and AddressBook) with the function toString.

– 5 points for using the Keyword super in the classes ExistingPerson in order to access superclass members in the class Person.

– 5 points for meeting the requirement on the capacity (500 entries)

– 10 points for the test program.

Task 2 (50 points): Write two GUI programs using JavaFX to finish the following sub-tasks:

(a) Draw a detailed clock: Modify the ClockPane class provided to draw the clock with more details on the hours and minutes, as shown in Figure 1. Save the java file as

(a) Displays two clocks. The hour, minute, and second values are 4, 20, 45 for the first clock and 22, 46, 15 for the second clock, as shown in Figure 2. Save the java file as

The figures below show example GUI of this program for subtask 1 and subtask2.

If time allows, you can also create animation for a running clock for 10 bonus points.

Grading Rubric



Figure 1: A detailed clock Figure 2: Two clocks

– (10 points) for classes with necessary functions and key details

– (10 points) for the workable classes and functions without any syntax or runtime errors.

– (10 points) for appropriate comments

Challenges in This Project

1. For 10% extra credit, you are welcome to explore the design of each task. Note: You still have to finish all tasks required by this project.

2. You should install the IntelliJIDEA to facilitate the development of Task 2.

—————x———— Good Luck ————x————–