diff --git a/out/production/cmpt213.assignment1.packagedeliveriestracker/Main.class b/out/production/cmpt213.assignment1.packagedeliveriestracker/Main.class index ff63d60..fcc1047 100644 Binary files a/out/production/cmpt213.assignment1.packagedeliveriestracker/Main.class and b/out/production/cmpt213.assignment1.packagedeliveriestracker/Main.class differ diff --git a/out/production/cmpt213.assignment1.packagedeliveriestracker/PackageInfo.class b/out/production/cmpt213.assignment1.packagedeliveriestracker/PackageInfo.class index 0ffbf36..78e1873 100644 Binary files a/out/production/cmpt213.assignment1.packagedeliveriestracker/PackageInfo.class and b/out/production/cmpt213.assignment1.packagedeliveriestracker/PackageInfo.class differ diff --git a/out/production/cmpt213.assignment1.packagedeliveriestracker/TextMenu.class b/out/production/cmpt213.assignment1.packagedeliveriestracker/TextMenu.class index 2203af1..75a2eed 100644 Binary files a/out/production/cmpt213.assignment1.packagedeliveriestracker/TextMenu.class and b/out/production/cmpt213.assignment1.packagedeliveriestracker/TextMenu.class differ diff --git a/src/Main.java b/src/Main.java index ec3b7ea..6a5eb99 100644 --- a/src/Main.java +++ b/src/Main.java @@ -22,10 +22,15 @@ do{ else{ switch(option){ case 1: menu.list(packageList); + break; case 2: menu.add(packageList); + break; case 3: menu.remove(packageList); + break; case 4: menu.overDueList(packageList); + break; case 5: menu.upcomingList(packageList); + break; case 6: menu.markDelivered(packageList); } } diff --git a/src/PackageInfo.java b/src/PackageInfo.java index 4557b55..26fe838 100644 --- a/src/PackageInfo.java +++ b/src/PackageInfo.java @@ -1,10 +1,13 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Locale; -public class PackageInfo { +import static java.lang.Math.abs; + +public class PackageInfo implements Comparable{ private String name; private String note; private double price; @@ -25,12 +28,29 @@ private String name; return name; } + public boolean getDelivered() { + return delivered; + } + + public LocalDateTime getExpectedDate() { + return expectedDate; + } + + public void setDelivered(boolean delivered) { + this.delivered = delivered; + } + + @Override + public int compareTo(PackageInfo p){ + return this.expectedDate.compareTo(p.getExpectedDate()); + } + @Override public String toString() { DateFormat date = new SimpleDateFormat("yyyy-mm-dd hh:mm"); - //date.setCalendar(expectedDate); + LocalDateTime today = LocalDateTime.now(); + Duration diff = Duration.between(expectedDate.toLocalDate(), today.toLocalDate()); String isDelivered = delivered ? "yes" : "no"; -//add remaining date - return "Name: " + name + "\n" + "Notes: " + note + "\n" + "Price: " + price + "\n" + "Weight: " + weight + "\n" + "Expected Delivery Date: " + expectedDate + "\n" + "Delivered? " + isDelivered; + return "Name: " + name + "\n" + "Notes: " + note + "\n" + "Price: " + price + "\n" + "Weight: " + weight + "\n" + "Expected Delivery Date: " + expectedDate + "\n" + "Delivered? " + isDelivered + "\n" + ((diff.toDays() > 0 && !delivered)? diff.toDays() + " days remaining" : abs(diff.toDays()) + " days overdue"); } } diff --git a/src/TextMenu.java b/src/TextMenu.java index bc7f7e2..fda127c 100644 --- a/src/TextMenu.java +++ b/src/TextMenu.java @@ -1,3 +1,4 @@ +import javax.swing.text.html.HTMLDocument; import java.net.SocketOption; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -6,10 +7,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.time.format.SignStyle; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Scanner; +import java.util.*; public class TextMenu { private final String title = "title"; @@ -31,7 +29,7 @@ public void display(){ for (int i=0; i<= tag+3; i++){ System.out.print("#"); } - DateFormat today = new SimpleDateFormat("yyyy-mm-dd"); + DateFormat today = new SimpleDateFormat("yyy-MM-dd"); Calendar cal=Calendar.getInstance(); System.out.println("\nToday is: " + today.format(cal.getTime())); for (int i = 0; i < options.length; i++){ @@ -62,18 +60,18 @@ else{ System.out.println("notes:"); String pNotes = scan.nextLine(); boolean checkDate = false; - DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-mm-dd hh-mm"); + DateTimeFormatter format = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm"); LocalDateTime pDate=LocalDateTime.now(); while (checkDate == false){ - //try { + try { System.out.println("enter date as yyyy-mm-dd hh-mm:"); pDate = LocalDateTime.parse(scan.nextLine(), format); checkDate = true; - //} - //catch (DateTimeParseException e) { - //System.out.println("invalid date format"); - //} + } + catch (DateTimeParseException e) { + System.out.println("invalid date format"); + } } double pPrice; do { @@ -110,19 +108,50 @@ else{ } } - public void overDueList(ArrayList packageList){ + //due=true returns overdue packages, else upcoming packages + public ArrayList sortList(ArrayList pList, boolean due){ + ArrayList sortedList = new ArrayList<>(); + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter format = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm"); + LocalDateTime today = LocalDateTime.parse(now.format(format)); + for (int i = 0; i < pList.size(); i++) { + PackageInfo p = pList.get(i); + if (!p.getDelivered()) { + if (due && today.isAfter(p.getExpectedDate())) { + sortedList.add(p); + } + else if (!due && today.isBefore(p.getExpectedDate())){ + sortedList.add(p); + } + } + } +Collections.sort(sortedList); + return sortedList; + } + public void overDueList(ArrayList packageList){ +ArrayList overdue = sortList(packageList, true); +if (overdue.size() == 0){ + System.out.println("no overdue packages to show"); + return; +} +this.list(overdue); } public void upcomingList(ArrayList packageList){ - + ArrayList upcoming = sortList(packageList, false); + if (upcoming.size() == 0){ + System.out.println("no upcoming packages to show"); + return; + } + this.list(upcoming); } public ArrayList getUndelivered(List packageList){ ArrayList undelivered = new ArrayList<>(); - for (PackageInfo package: packageList){ - if (package.getDelivered() == false){ - undelivered.add(package); + for (int i = 0; i < packageList.size(); i++){ + if (packageList.get(i).getDelivered() == false){ + undelivered.add(packageList.get(i)); } } return undelivered; @@ -130,21 +159,23 @@ return undelivered; public void markDelivered(ArrayList packageList){ ArrayList undelivered=getUndelivered(packageList); - if (packageList.size() == 0){ + if (undelivered.size() == 0){ + System.out.println("No undelivered packages to show"); return; } + this.list(undelivered); Scanner scan = new Scanner(System.in); int n; do { System.out.println("enter item number you want to mark delivered (0 to cancel):"); n = scan.nextInt(); } - while (n < 0 || n > packageList.size()); + while (n < 0 || n > undelivered.size()); if (n > 0){ - System.out.println(packageList.get(n-1).getName() + " has been removed from the list."); - packageList.remove(n-1); + PackageInfo p = undelivered.get(n-1); + packageList.get(packageList.indexOf(p)).setDelivered(true); + System.out.println(p.getName() + " has been delivered."); } - }