At the end of this specific task, students should be able to:

• Create and work with Loops
• Handle and manipulate strings
• (Learning Units 4 and 5).
It is good practice to leave your main branch as your long live branch, this means that the code on
this branch is always in perfect working order and tested. We make use of feature branches in
order to ensure that any code we push to GitHub does not break our main branch. You can create
a feature branch by running the following command.
git checkout -b KhanbanTasks (you can use any branch name)
** You are welcome to make use of GitHub desktop or your IDE to push code to GitHub if you
are not comfortable with using the command line.
You can now add the following functionality to your application:
1. The users should only be able to add tasks to the application if they have logged in
successfully.
2. The applications must display the following welcome message: “Welcome to EasyKanban”.
3. The user should then be able to choose one of the following features from a numeric menu:
21; 22; 23 2023
© The Independent Institute of Education (Pty) Ltd 2023 Page 10 of 22
a. Option 1) Add tasks
b. Option 2) Show report - this feature is still in development and should display the
following message: “Coming Soon”.
c. Option 3) Quit
4. The application should run until the users selects quit to exit.
5. Users should define how many tasks they wish to enter when the application starts, the
application should allow the user to enter only the set number of tasks.
6. Each task should contain the following information:
Task Name The name of the task to be performed: “Add
Login Feature”
Task Number Tasks start with the number 0, this number is
incremented and autogenerated as more
tasks are added .
Task Description A short description of the task, this description
should not exceed 50 characters in length.
The following error message should be
displayed if the task description is too long:
“Please enter a task description of less than
50 characters”
OR
“Task successfully captured” if the message
description meets the requirements.
Developer Details The first and last name of the developer
assigned to the task.
Task Duration The estimated duration of the task in hours.
This number will be used for calculations and
should make use of an appropriate data type.
Task ID The system must autogenerate a TaskID which
contains the first two letters of the Task
Name, a colon (:), the Task Number, a colon (:)
and the last three letters of the developer
21; 22; 23 2023
© The Independent Institute of Education (Pty) Ltd 2023 Page 11 of 22
assigned to the task’s name. The ID should be
displayed in all caps:
AD:0:INA
Task Status The user should be given a menu to select the
following task statuses from:
• To Do
• Done
• Doing
7. The full details of each task should be displayed on the screen (using JOptionPane) after it
has been entered and should show all the information requested in the table above in the
following order: Task Status, Developer Details, Task Number, Task Name, Task
Description, Task ID and Duration;
7. The total number of hours across all tasks should be accumulated and displayed once all
the tasks has been entered.
Create a Task class that contains the following messages:
Method Name Method Functionality
Boolean: checkTaskDescription() This method ensures that the task description
is not more than 50 characters.
String: createTaskID() This method creates and returns the taskID
String: printTaskDetails() This method returns the task full task details
of each task.
Int: returnTotalHours() This method returns the total combined hours
of all entered tasks.
21; 22; 23 2023
© The Independent Institute of Education (Pty) Ltd 2023 Page 12 of 22
8. Please use the following the following test data to create unit tests.
Test Data:
Num Tasks 2
Test Data for Task 1
Task Name “Login Feature”
Task Number Auto generated.
Task Description “Create Login to authenticate users”
Developer Details Robyn Harrison
Task Duration 8hrs
TaskID Auto generated
Task Status To Do
Test Data for Task 2
Task Name “Add Task Feature”
Task Number Auto generated.
Task Description “Create Add Task feature to add task users”
Developer Details Mike Smith
Task Duration 10hrs
TaskID Auto generated
Task Status Doing
9. Create the following unit tests:
Test AssertEquals:
Task Description should not be more
than 50 Characters
Test for both success and failure
The system should return:
Success
“Task successfully captured”
Failure:
“Please enter a task description of less than 50
characters”
21; 22; 23 2023
© The Independent Institute of Education (Pty) Ltd 2023 Page 13 of 22
TaskID is correct The system should return:
AD:1:BYN When supplied with the data from Test
case 1
The system should test the remainder of the TaksIDs
in a loop (refer to video):
CR:0:IKE, CR:1:ARD, CR:2:THA, CR:3:ND
Total Hours Correctly accumulated in
loop
Additional test data:
1)Test Data for Task1 and Task2.
2: Num Tasks: 5, Durations: 10,12,55,11,1
The system should return:
1) 18 on the last iteration of the loop
2) 89 for the additional data
Part 3 — Store Data and Display Task Report (Marks: 65)
At the end of this specific task, students should be able to:
• Handle and manipulate strings
• Create and work with Arrays
You will now add the final features to your app , write and automate the unit tests and submit
your final project. Extend your application to allow for the following:
1. Users should be able to use to populate the following arrays:
Array Contents
Developer Contains the names of all the developers
assigned to tasks
Task Names Contains the names of all the created tasks
Task ID Contains the generated taskID’s for all tasks
Task Duration Contains the Duration of all tasks
Task Status Contains the Status of all tasks
21; 22; 23 2023
© The Independent Institute of Education (Pty) Ltd 2023 Page 14 of 22
2. Users should be able to use these arrays to:
a. Display the Developer, Task Names and Task Duration for all tasks with the status of
done.
b. Display the Developer and Duration of the class with the longest duration.
c. Search for a task with a Task Name and display the Task Name, Developer and Task
Status.
d. Search for all tasks assigned to a developer and display the Task Name and Task
Status.
e. Delete a task using the Task Name.
f. Display a report that lists the full details of all captured tasks.
3. Use the following test Data for your unit tests and to populate your arrays:
Test Data Task 1
Developer Mike Smith
Task Name Create Login
Task Duration 5
Task Status To Do
Test Data Task 2
Developer Edward Harrison
Task Name Create Add Features
Task Duration 8
Task Status Doing
Test Data Task 3
Developer Samantha Paulson
Task Name Create Reports
Task Duration 2
Task Status Done
21; 22; 23 2023
© The Independent Institute of Education (Pty) Ltd 2023 Page 15 of 22
Test Data Task 4
Developer Glenda Oberholzer
Task Name Add Arrays
Task Duration 11
Task Status To Do
4. Create the following unit tests:
Test: (assertEquals) Test Data and expected system responses.
Developer array correctly populated:
The developer array contains the expected
test data.
Test Data: Developer entry for Test data for
tasks 1-4
The system returns:
"Mike Smith", "Edward Harrington"
, "Samantha Paulson", "Glenda Oberholzer"
Display Developer and Duration for task with
longest duration.
Test Data: Task 1-4
The system returns:
“Glenda Oberholzer, 11;
Search for tasks Test Data: “Create Login
The system returns:
“ Mike Smith, Create Login”
Search all tasks assigned to Developer Test Data: Samantha Paulson
The system returns:
Create Reports
Delete Task from array Test Data: "Create Reports"
The system returns:
Entry “Create reports” successfully deleted
Display Report
The system returns:

A full report containing all captured tasks with all details, including Task Status, Developer Details, Task Number, Task Name, Task Description, Task ID and Duration.

To complete this task, you will need to follow the steps below:

1. Create and work with Loops:
- Familiarize yourself with loops in your programming language of choice (e.g., for loop, while loop).
- Understand how loops can be used to iterate through a set of tasks.

2. Handle and manipulate strings:
- Learn how to manipulate strings in your programming language of choice (e.g., concatenate, split, trim).
- Understand how to check the length of a string and display error messages based on its length.

3. Create a feature branch:
- If you are using GitHub, create a feature branch to work on without affecting the main branch.
- Run the command "git checkout -b KhanbanTasks" (you can choose any branch name).

4. Add functionality to the application:
- Users can only add tasks if they have logged in successfully.
- Display a welcome message: "Welcome to EasyKanban".
- Allow the user to choose from a numeric menu: option 1) Add tasks, option 2) Show report (Coming Soon), option 3) Quit.
- Run the application until the user selects quit to exit.
- Prompt the user to enter the number of tasks they wish to enter and restrict them to that number.
- For each task, prompt the user to enter task details such as task name, task number, task description, developer details, task duration, and task status.
- Display the full details of each task using the JOptionPane library.
- Accumulate and display the total number of hours across all tasks.

5. Create a Task class:
- Implement a Task class with the following methods:
- checkTaskDescription(): This method checks if the task description is less than 50 characters.
- createTaskID(): This method generates and returns the task ID.
- printTaskDetails(): This method returns the full task details of each task.
- returnTotalHours(): This method returns the total combined hours of all entered tasks.

6. Create unit tests:
- Use the provided test data to create unit tests for the Task class.
- Test the checkTaskDescription() method for both success and failure cases.
- Test if the Task ID is generated correctly based on the task details.
- Test if the total hours are correctly accumulated in a loop.

7. Store data and display task report:
- Extend your application to use arrays to store task-related data (e.g., developers, task names, task durations, task statuses).
- Implement functionalities to display specific information based on user queries (e.g., show tasks done, longest duration task).
- Implement functionalities to search for tasks by task name or developer and display relevant information.
- Implement functionality to delete a task from the arrays.
- Implement functionality to display a full report of all captured tasks.

8. Use the provided test data and expected system responses to create unit tests for these added functionalities.

Remember to follow best practices, write clean code, and automate your unit tests before submitting your final project. Good luck!