CSCI 428 – Fall 2023
Final Project
100 points + 10 bonus points
Note: This is an individual project. Each student MUST complete the work on his/her own. Any code sharing/plagiarism is not tolerated. Show your name and CWID in the background in your captured image as required in all assignments; not providing your name and CWID information in the captured image may result in zero points.
Overview
In this project, you will design and implement an object-oriented programming project by selecting your own topic [1]. The project should demonstrate your understanding and application of object-oriented programming principles, including encapsulation, inheritance, composition, and polymorphism.
The goal is to explore how to design various classes through encapsulation, inheritance, composition, and polymorphism. Your project should consist of multiple classes that interact with each other through well-defined interfaces. It should have a clear problem statement and provide a well-structured solution that is easy to understand. Your project must include a user interface, which can be console-based, or a graphical user interface (GUI) using JavaFX.
What to Submit (Deliverables)
− One doc file “CSCI428-project-XX.doc” including one UML class diagram of the final project, 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.
− Java class files for all programs. In well-defined programs, proper comments are required. For programs without comments, they will be deducted greatly in grading.
− 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”.
− Optional. Anything you want to attract the attention of the instructor in grading.
Technical requirements
−
Provide a clear problem
statement and solution.
−
Use Object-oriented design
principles to model the entities in the solution.
−
You should strive for clean
and concise code that is easy to understand and modify.
−
Implement the project using
Java (no other languages)
−
Use appropriate data structures (e.g., arrays, ArrayList,
LinkedList, Set, or Map) to store and manipulate data.
−
Involve the creation of at
least 3 classes that interact with each other.
−
Design
a test program to test your classes and designs. The test program should have
a list including all objects of classes you have defined in this project. You
should create objects in this program by calling different constructors and
prompting the user to enter values. Use a loop to display all the objects of
different classes and output their information (values of the data
fields).
−
Draw
a UML class diagram with the classes and from an implementation perspective.
That is, this diagram contains the details of its respective implementation
level [2-4] using one of the online free UML diagram tools [6-8]
−
Implement a user inference that can be console-based or a
graphical user interface. One example JavaFX GUI application is provided for
your reference.
Grading Rubric
−
30 points for the workable classes and functions without
any syntax or runtime errors.
−
15 points for appropriate
comments and screenshots of GUI outputs of the programs.
−
15 points for providing UML diagram showing the
dependencies between the defined classes by referring to the examples at
[2-4]
−
5 points for defining default constructors and constructors
with multiple parameters to initialize data fields properly.
−
5 points for using the keywords super,
extends, implements, this properly, reading and writing data from/to
files correctly.
−
5 points for calling superclass’s
constructors and methods.
−
5 points for overriding the
superclass’s methods.
−
5 points for using of
abstraction (class(s)) and encapsulation (method(s))
−
5 points for using
inheritance (that “is a” relationship) and composition (that “has a” relationship)
−
5 points for using dynamic binding and proper data
structures (arrays and Java collections (like ArrayList, LinkedList, Set, or
Map))
−
5 points for code testing
and design validation
Challenges
− 10 bonus points for extending your solution/design. Note: You still must finish all tasks required by this project.
− Implement a user interface using JavaFX [5]
Reference
[1] Interesting Java Project Ideas and Topics. https://www.upgrad.com/blog/javaproject–ideas–topics–for–beginners/
[2] UML Class Notation. https://www.visual–paradigm.com/guide/uml–unifiedmodeling–language/uml–class–diagram–tutorial/
[3] UML-Class Diagram. https://www.tutorialspoint.com/uml/uml_class_diagram.htm [4] Inheritance.
https://icarus.cs.weber.edu/~dab/cs1410/textbook/10.Multiclass_Programs/inheri tance.html
[5] JavaFX tutorial. https://www.javatpoint.com/javafx–tutorial
[6] Diagrams.net. https://app.diagrams.net/
[7] VisualParadigam. https://online.visual–paradigm.com/diagrams/solutions/freeuml–tool/
[8] SmartDraw. https://www.smartdraw.com/uml–diagram/uml–diagram–tool.htm
Appendix:
/**Example JAVAFX GUI Application
*
This code creates a GUI that allows the user to enter their
name and age, and then displays their age in months when they click the
“Submit” button. The GUI uses a GridPane layout to display the
labels and text fields, and a HBox to hold the button. When the button is
clicked, the input values are retrieved from the text fields, the age is
converted to months, and a message is printed to the console.
*
*/
package
com.example.examplegui;
import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import
java.io.IOException;
public
class HelloApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
//FXMLLoader fxmlLoader = new
FXMLLoader(HelloApplication.class.getResource(“hello-view.fxml”));
//Scene
scene = new Scene(fxmlLoader.load(), 320, 240);
//
Create labels and text fields for user input
Label nameLabel = new
Label(“Name:”);
TextField nameField = new TextField();
Label ageLabel = new Label(“Age:”);
TextField
ageField = new TextField();
// Create a button to process the data
Button
btn = new
Button();
btn.setText(“Submit”); btn.setOnAction(event
-> {
// Get the input values and process them String
name = nameField.getText();
int
age = Integer.parseInt(ageField.getText());
int
ageInMonths = age * 12;
System.out.println(“Hello
” + name + “! You are ” + ageInMonths +
” months old.”);
});
// Create a horizontal box to hold the button HBox hbox = new HBox(btn); hbox.setPadding(new Insets(10));
// Create a grid pane to hold the labels and text
fields
GridPane
grid = new
GridPane();
grid.setHgap(10); grid.setVgap(10);
grid.setPadding(new Insets(10)); grid.add(nameLabel, 0,
0); grid.add(nameField, 1,
0); grid.add(ageLabel, 0,
1); grid.add(ageField, 1,
1); grid.add(hbox, 1,
2);
// Create a Scene and set the GridPane as its
root Scene scene =
new Scene(grid, 300,
150);
stage.setTitle(“Hello!”); stage.setScene(scene); stage.show();
}
public
static void main(String[] args) {
launch();
}
}
—————x———— Good Luck ————x————–