Application Assignment – Using lntelliJ and Gradle, you will create a GUI-based desktop application to allow a user to manage multiple “todo”- type lists.

Application Assignment 1, Part 2 – Using lntelliJ and Gradle, you will create a GUI-based desktop application to allow a user to manage multiple “todo”-type lists.

For [Part 1] of this assignment, you should have focused on the design elements: UML Class

Diagrams, GUI mock-ups, and pseudocode

Now that you have a completed design, [Part 2] of this assignment will focus on the implementation elements: production and test code. During this process, you will discover problems with your initial design. When these discoveries are made, you will need to go back and refine your initial design to address the problems. These changes must be included in your final submission.

In addition to the assigned readings and videos, you will find the following links useful for this assignment:

• Oracle UI Controls Docs _(httP-s://docs.oracle.com/javafx/2/ui controls/jfxP-ub-ui controls.htm).

• OgenJFX Docs _(httP-s://oP-enjfx.io/javadoc/16/).

• FXDocs _(httP-s://fxdocs.github.io/docs/html5/).

• More tutorials _(httP-://tutorials.jenkov.com/javafx/index.html).

• Tutorials on YouTube _(httP-s://www.youtube.com/P-laylist?

list=PL4h6yP-QTi3RR bhBk6PtlfD83YkaJXXxw).

You will also find the following links useful if you need to hand-tune your UI:

• Link 1 from OgenJFX _(httP-s:/loP-enjfx.io/javadoc/16/javafx.fxml/javafx/fxml/docfiles/introduction to fxml.html).

• Link 2 from OgenJFX _(httP-s://oP-enjfx.io/javadoc/16/javafx.graP-hics/javafx/scene/docfiles/cssref.html).

Directions

Your application shall satisfy the following requirements (note that, as in the real world, these may have changed since [Part 1]):

1. The application shall manage a single list of items

o The list shall have the capacity to store at least 100 unique items

2. An item shall have a description

o A description shall be between 1 and 256 characters in length

3. An item shall have a due date

o A due date shall be a valid date within the Gregorian Calendar

o A due date shall be displayed to users in the format: YYYY-MM-DD

4. A user shall be able to add a new item to the list

5. A user shall be able to remove an item from the list

6. A user shall be able to clear the list of all items

7. A user shall be able to edit the description of an item within the list

8. A user shall be able to edit the due date of an item within the list

9. A user shall be able to mark an item in the list as either complete or incomplete

10. A user shall be able to display all of the existing items in the list

11. A user shall be able to display only the incomplete items in the list

12. A user shall be able to display only the completed items in the list

13. A user shall be able to save the list (and all of its items) to external storage

14. A user shall be able to load a list (and all of its items) from external storage

15. The developer shall provide a help screen with directions on how to use the application.

o The help screen shall describe how to execute each behavioral requirement provided by the application (e.g. add an item, remove an item, edit an item, etc)

o This help screen shall be provided as either a dedicated window within the application, or a markdown file called ‘readrne.rnd on your GitHub repository for the project.)

You shall create a single lntelliJ project (using Gradle) and GitHub repository and ensure that your solution code has been pushed to the appropriate repository prior to the submission of this assignment.

• Your GitHub repository must follow the naming convention of <lastname>-cop3330- assignment4part.2

• You will want to copy over all of your files from [Part 1] into this new repository and then add all implementation code for [Part 2] as additional commits.

o Your github history will allow us to show the evolution of your solution. You should commit and push your code each time you complete a requirement (including successful testing).

You shall use a .gitignorefile to ensure that your .gradle and build folders are not stored within git.

• Your repository should contain the following files and directories (with all expected subdirectories and files):

/.idea/

/uml/

/gradle/

/src/

/.gitignore

/build.gradle

/gradlew

/gradlew.bat

/settings.gradle

You shall place your code within a package named ucf.assignments.

• As an example, my main java file would be located in /src/main/java/ucf/assignments/App.java

and the file itself would start with the statement package ucf.assignments;

You shall include the following comment at the top of each of your * .java files (with the appropriate name substituted in place):

/*

* UCF COP3330 Fall 2021 Assignment 4 Solution

l

* Copyright 2021 first_name last_name

*/

You shall create a Class Diagram for your application using PlantUML. This diagram must be pushed to your Git repository along with your java code.

• Each class within your diagram must list both the attributes and the methods defined within that class.

• You must store your *.puml files in a ‘urnl’ folder at the root level of your project (you will need to create this folder yourself).

You shall create your application Graphical User Interface (GUI) using SceneBuilder and store the associated *.fxml files within your project’s ‘resources’ folder.

You shall include pseudocode in each of your methods.

• This pseudocode will help you determine where and how your code should be broken up into classes and methods. If you have a comment describing what multiple statements accomplish, those statements probably need to be extracted into a method. If you find that your class has multiple

methods which form subgroups that each do something completely different, you probably need to extra one of those subgroups into a new class.

You shall follow good programming practices, as outlined in the course notes for Module 2. For example, use meaningful variable names, break your solution up into classes and functions when it makes sense, and keep your classes and functions short.

• You must decompose your solution into multiple classes, each of which will possess a single responsibility and will contain a series of highly cohesive methods (with each method having a single responsibility). You will receive no credit if your entire solution is placed within the main method.

You shall write your Java code in accordance with either the Oracle or Google Java coding standard: Oracle Standard _(httP-s://www.oracle.com/java/technologies/javase/codeconventions-contents.html)_or Google Standard _(httP-s://google.github.io/styleguide/javaguide.html).

You shall use JUnit 5 to incorporate automated unit testing into your solutions.

• You must create a unit test for each behavior specified in the application requirements.

• You must include pseudocode in each test.

Your application and unit tests shall be completely implemented and run without errors on the grader’s machine.

Submission

You will submit a link to your GitHub page. Please ensure that your repository is private until 12 hours after the due date, at which point you may make it public. If you need myself or a TA to look at your code, you may share your repository with us – just ask us for our GitHub user names.

• It should go without saying that if we suspect you have copied code from another student, you will be referred to the office of student conduct and receive a Z grade for the course.

If we cannot access your repository, or if you provide an invalid link, you will receive a O – please double check your submission once it has been made.

Late submissions will receive a O as per the syllabus.

Note: All of your design artifacts from [Part 1] should be part of [Part 2], except where they have been updated to reflect changes in your design.

Grading Criteria

Points will be allocated according to the attached rubric. Full points will only be awarded if your implementation is: based on your design, satisfies the requirements, passes your test cases, and abides by the rules of clean code as outlined in the module notes. Elements that are entirely missing or woefully incomplete will receive no credit (for instance, only having a single class in your solution).

Scores may be reduced in the event of incomplete submissions or failure to follow directions.

Bonus Credit

If your application allows the user to sort the list by due date, you will earn 1 extra point for the test and 1 extra point for the implementation.

Application Assignment 1 [Part 2]

I Criteria Ratings Pts

GitHub project is correctly named

I ;

2 pts Opts

I

GitHub project structure is correct.

The correct folders are present or ignored as per assignment directions. Source code is within the correct package.

UML class diagram reflects a well planned design.

Full Marks No Marks 2 pts

2 pts Opts
Full Marks No Marks 2 pts

10 pts 5 pts Opts

Full credit will be given only if each class has a single responsibility, as evidenced Full Partial No

by the attribute and method identifiers. Partial credit will be given if classes relate Marks Marks Marks 10 pts

to multiple distinct responsibilities. No credit will be given if there are only one or

two classes (i.e. you need more than just the launcher and controller).

GUI reflects a well planned design.

10 pts 5 pts Opts

Full credit will be given if each required behavior is accessible from the GUI and I Full Partial No

the overall layout reflects the guidelines and practices as described in Microsoft Marks Marks Marks

Guideline _(httP-s://docs.microsoft.com/en-us/windowslaP-P-Sldesign/Links)_toan

external site. or AJmle Guideline _(httP-S ://develoP-er.aP-P-le.com/design/human- interface-guidelines/macos/overview/themes/Links}_to an external site .. Partial credit will be given for a GUI that is difficult to use and/or navigate. No credit will

be given if the GUI fails to support the application requirements.

10 pts

Application implementation reflects a well planned design and follows the “clean code” guidelines described in the course notes and the book Clean Code.

10 pts 5 pts Opts

Full Partial No

Partial credit will be given if your code is hard to read, hard to understand, hard to Marks Marks Marks 10 pts

follow, or yields incorrect results. No credit will be given if your application is

incomplete or does not run on the grader’s machine.

Each required behavior has an associated JUnit test, and those tests pass when run against the solution.

10 pts 5 pts Opts
I Full

Marks

Partial

Marks

No

Marks

I

Partial credit will be given if any tests are missing or fail when they are run. No credit will be given if all tests are missing or if all tests fail when they are run.

10 pts

Application design (diagrams, GUI, and pseudocode) has been updated to reflect any changes in the requirements.

I

A user guide is provided either from within the application or as a readme.md file on GitHub

I

6 pts Opts

Full Marks No Marks 6 pts

5 pts Opts

Full Marks No Marks 5 pts

I I

Total Points: 55

https://webcourses.ucf.edu/courses/1384956/assignments/7190201

7/7