Write My Paper Button

WhatsApp Widget

CSCI 428 – Fall 2023- 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

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————–