From 95c17554f236b2abfe6d8b933a2241ceabed7035 Mon Sep 17 00:00:00 2001 From: mms37 Date: Thu, 2 Jun 2022 16:36:44 -0700 Subject: [PATCH] all done except json --- .../Main.class | Bin 1515 -> 1550 bytes .../PackageInfo.class | Bin 1658 -> 3011 bytes .../TextMenu.class | Bin 4479 -> 7089 bytes src/Main.java | 5 ++ src/PackageInfo.java | 28 ++++++- src/TextMenu.java | 73 +++++++++++++----- 6 files changed, 81 insertions(+), 25 deletions(-) diff --git a/out/production/cmpt213.assignment1.packagedeliveriestracker/Main.class b/out/production/cmpt213.assignment1.packagedeliveriestracker/Main.class index ff63d604819754824805435ca8d99f7605831ce3..fcc10477b281f16ee798d031365e7decd68f01fb 100644 GIT binary patch delta 253 zcmXAkJxfAy6o;SmUf%}?K`8IFgkI30a0m<~L2!#&)M{{vAZlu9Q=5_;1i5WNRzS z5e;!7I;CF@791MN){YE&)@ladTHTPb)-WWjHO=a3t_5LEmAhn>6T||~Ewvt4r^g15 zH!e>IB7dClii#G~djcy@g^{vW}& Gd;AAXKQa*b#_5v^OyrY-2EkP*xDi7D72dC}#-ew)}t5MxYL6u$f*ALO?bb0|x^S5b`pJ zFz_+RGw?G^wq})atYVO2Xk?IP=wOgx=x2~+n8u*UFq1)vApodF3+PsPhH{2bhA;*u l26cvfhH!=mprJtbGej~(0cj3~Nt4&G%CWM6z~u9+_5j!QCp!QD diff --git a/out/production/cmpt213.assignment1.packagedeliveriestracker/PackageInfo.class b/out/production/cmpt213.assignment1.packagedeliveriestracker/PackageInfo.class index 0ffbf3606691de321455756e1bc72f8e943f1966..78e18735757a536e27fcddb9ad1ed7b46ea782fc 100644 GIT binary patch literal 3011 zcma)8-B%k`5dU3BvPrrWL_SKX7AvhJlt%k4^qUk*1&V^yQmZb>CE1efrke$d-`^ka zKBy1A)(0Q-9HBjUj>l*JsOsM?ynV#~$bcd!~)tl2MT3)}k#C zv5c}5XrHJVnQ!3C8_)#vz@Zx#&ML{S>xYOxjdB5_Z5r7<#G}!98;;w z2y_N#dC3cKPt7IKkC${DR{=L$_Nv;S)Nu-@nLXFuc7qW$4xW&m#mgFob&TK~vs(*1 zyX+XQX?*BDIMSdyc*l{4I%rduRcbq&jglFHM=gv|uPBX$65C_+e>yz>pB|^?2*#+Lr?J)v(~?um zDqY^igTg~J}4@@|cet?~6TA*J?dYu%oXp98M9y+?y^Hb&xDd6h=e$`Jf5qA@&Y4D z&e+RNPL7!>$!(!}IHu}=tSh$dR$a%aOiH(C=c}zT+)rW+?`e2n74ruI{k4)YtrdGo zW_;iMUK%rUuI&)C@53b&2>M2^8CJd|tNjzUy|i2j8a|xUP%w3hvuhREK>T({ehaY> zD=;x?lu9$ED|uaf#6U$KQ(NtGWZB^GvI=p0!ln+mHb+Q)S;q01z=SHk;XaX^;!vt8 zVp5P_)YE@P>d?|2v7oLq^((tvw zvriV~ZRcak=@sYoBQS>;R}Nxcd`)V&dMjtDw{nVlD@Uida!_)OQ!k1)`M$;7&uB)1 z>yh+Bi1gq(wDi$+w4_t(XiM*luA?K}sjZ_s-4kC&?{A)+dA<+P4miCdJR^Y)>_sQ3 zE{^GL9K=2xCUu(<*P!uz1aILES4Amrg-0oWn>J?r*5PfLx$_ zfqtrhW9eQ(S_4ykf&l{zJmp#F@};&xi>a?4+7Rlh4{TiuZ0UrccW?s-H}L$@ZzMhy@3-)`8>jzDQ>%eK)n6@14P>| z4o4LFd|LRl@#)~x+Y=euz~#huKcS1;?jO;r_M5m0Jn-p97~jMVU=!1Tg0R_3UYF;< zaU^kq)pU}db*C_d(_RQCedmG@k|;YdCvZgZ&Q=h-!#$Gs#1YFa9_4OPF$$*|S?ltC!)f?J_fRFUZJ=AR~$N;9rPu yU}k4JlA-cQ1hGWm(90%N;d<*bR=9RBj#Zld(0hOEy+6h0{3S{57x)U_pyyw9L922A delta 558 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 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."); } - }