Giter Club home page Giter Club logo

ip's Introduction

Duke

This project is part of a module for CS2103 Software Engineering in NUS.

It is a todo list that runs on javafx.

Changelog: https://github.com/therizhao/ip/blob/master/CHANGELOG.md

How to run the program?

  1. Download the latest release
  2. Execute it

How are commits done?

How is the Changelog generated?

To generate the changelog, run the follow steps

  1. Run npm i in cli (to download standard-version package)
  2. Run npm run release in cli
    • Git tag of the new version will be auto-added
    • Changelog will be auto-updated

ip's People

Contributors

therizhao avatar j-lum avatar damithc avatar jiachen247 avatar

Stargazers

 avatar

Watchers

James Cloos avatar

ip's Issues

A-JavaDoc

Add JavaDoc comments

Add JavaDoc comments to the code.

Minimal: Add header comments to at least half of the non-private classes/methods.
Stretch goal: Add header comments to all non-private classes/methods, and non-trivial private methods.

C-Tagging

Provide a way to tag items e.g., tag a task as #fun.

A-Gradle: Use Gradle

A-Gradle
โ†ณ Automate project builds using Gradle

Use Gradle to automate some of the build tasks of the project.

Refer to the Gradle tutorial @se-edu to learn how to use Gradle.

Gradle support is provided as a separate branch (named add-gradle-support) in the Duke repo. Therefore, you can follow the scenario 2 in the above guide.

Minimal: Set up gradle so that you can build and run Duke using gradle.
Recommended: Set up gradle to run unit tests.
Stretch Goal: Use gradle to automate more things in your project.

Duke A-CodeQuality: Improve Code Quality

Critically examines the code and refactor to improve the code quality where necessary.

When adding this increment, follow closely the 'Code Quality' topics you have learned so far, rather than merely follow your own intuition about code quality.

Level 8. Dates and Times

Teach Duke how to understand dates and times. For example, if the command is deadline return book /by 2/12/2019 1800, Duke should understand 2/12/2019 1800 as 2nd of December 2019, 6pm, instead of treating it as just a String.

Minimal: Store deadline dates as a java.time.LocalDate in your task objects. Accept dates in a format such as yyyy-mm-dd format (e.g., 2019-10-15) and print in a different format such as MMM dd yyyy e.g., (Oct 15 2019).
Stretch goal: Use dates and times in more meaningful ways. e.g., add a command to print deadlines/events occurring on a specific date.

A-MoreOOP

Link: https://nus-cs2103-ay2021s1.github.io/website/schedule/week3/project.html#a-moreoop

Refactor the code to extract out closely related code as classes.

Minimal: Extract the following classes:
Ui: deals with interactions with the user
Storage: deals with loading tasks from the file and saving tasks in the file
Parser: deals with making sense of the user command
TaskList: contains the task list e.g., it has operations to add/delete tasks in the list
For example, the code of the main class could look like this:

public class Duke {

private Storage storage;
private TaskList tasks;
private Ui ui;

public Duke(String filePath) {
    ui = new Ui();
    storage = new Storage(filePath);
    try {
        tasks = new TaskList(storage.load());
    } catch (DukeException e) {
        ui.showLoadingError();
        tasks = new TaskList();
    }
}

public void run() {
    //...
}

public static void main(String[] args) {
    new Duke("data/tasks.txt").run();
}

}
Stretch Goal: Consider extracting more classes. e.g., *Command classes (i.e., AddCommand, DeleteCommand, ExitCommand etc.) that inherits from an abstract Command class, so that you can write the main logic of the App as follows:
public void run() {
ui.showWelcome();
boolean isExit = false;
while (!isExit) {
try {
String fullCommand = ui.readCommand();
ui.showLine(); // show the divider line ("_______")
Command c = Parser.parse(fullCommand);
c.execute(tasks, ui, storage);
isExit = c.isExit();
} catch (DukeException e) {
ui.showError(e.getMessage());
} finally {
ui.showLine();
}
}
}
You can get some inspiration from how the code of the addressbook-level2 is organized.

A-CheckStyle: Use CheckStyle

A-CheckStyle
โ†ณ Use CheckStyle

Use checkStyle to detect coding style violations.

Refer the tutorial Using Checkstyle @SE-EDU/guides to learn how to use Checkstyle.

A-Packages

Divide classes into packages

Organize the classes into suitable java packages.

Minimal: put all classes in one package e.g., duke
Stretch goal: divide into multiple packages as the number of classes increase e.g., duke.task, duke.command

A-CodingStandard

Tweak the code to comply with a given coding standard. From this point onward, ensure any new code added are compliant with the given coding standard.

Level-10: GUI

Level 10. GUI
Add a GUI to Duke. Use the JavaFX technology to implement the GUI.

Refer to the JavaFX tutorial @SE-EDU/guides to learn how to get started with JavaFX.

A-Jar

Link: https://nus-cs2103-ay2021s1.github.io/website/schedule/week3/project.html#a-jar

Package the app as an executable JAR file so that it can be distributed easily.

You can assume the user will run the jar file in the following way only:

Copy the jar file into an empty folder
Open a command window in that folder
Run the command java -jar {filename}.jar e.g., java -jar Duke.jar (i.e., run the command in the same folder as the jar file)
Refer to the tutorial Working with JAR files @SE-EDU/guides to find how to create JAR files.

Do not commit the JAR file created. Instead, you can make the JAR file available in the following manner.

Go to your fork on GitHub and create a new release.
In the page where you fill the details of th release,
give an appropriate version number e.g., v0.1
attach the JAR file where it says Attach binaries by dropping them ....

Level 7: Save

Level 7. Save

Link: https://nus-cs2103-ay2021s1.github.io/website/schedule/week3/project.html#level-7-save

  • Save the tasks in the hard disk automatically whenever the task list changes. Load the data from the hard disk when Duke starts up.
  • You may hard-code the file name and location e.g., [project_root]/data/duke.txt

The format of the file is up to you. Example:

T | 1 | read book
D | 0 | return book | June 6th
E | 0 | project meeting | Aug 6th 2-4pm
T | 1 | join sports club

Your code must handle the case where the file doesn't exist at the start. Reason: when someone else takes your Duke and runs it for the first time, the required file might not exist in their computer. Similarly, if you expect the data file to be in as specific folder (e.g., ./data/), you must also handle the 'folder does not exist yet' case.

A-UserGuide

Add a User Guide to the project. Here is one simple way to do it.

Update the given docs\README.md. See this guide to GitHub flavored Markdown (GFMD).
Go to the settings page of your Duke fork and enable GitHub pages to publish from the docs folder (you can select a theme too).
Go to http://{your username}.github.io/{repo name}/ to view the user guide of your product. Note: it could take 5-10 minutes for GitHub to update the page.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.