summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorJacob Shimp <jrs9538@g.rit.edu>2025-10-08 21:48:53 -0400
committerJacob Shimp <jrs9538@g.rit.edu>2025-10-08 21:48:53 -0400
commit871f353b9d8765594983b8b85d541f0c27447f68 (patch)
tree82c3d06fb8e21fe1bb6a29ac3ba51106c1d900c3 /src/main
parent4a720e851d188688571e2f5c7f46b6389e9a429f (diff)
downloaddesignproject-design-6-871f353b9d8765594983b8b85d541f0c27447f68.tar.gz
designproject-design-6-871f353b9d8765594983b8b85d541f0c27447f68.tar.bz2
designproject-design-6-871f353b9d8765594983b8b85d541f0c27447f68.zip
implemented all other menu options
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/design/controller/userinput/menus/StatisticsMenu.java64
-rw-r--r--src/main/java/design/model/statistics/HoleStats.java31
-rw-r--r--src/main/java/design/model/statistics/RoundStats.java2
-rw-r--r--src/main/java/design/model/statistics/StatisticsDecorator.java10
4 files changed, 81 insertions, 26 deletions
diff --git a/src/main/java/design/controller/userinput/menus/StatisticsMenu.java b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
index 16d875a..669d270 100644
--- a/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
+++ b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java
@@ -4,8 +4,13 @@ import design.controller.userinput.Menu;
import design.controller.userinput.MenuOption;
import design.model.Course;
import design.model.Golfer;
+import design.model.Hole;
+import design.model.Play;
+import design.model.Round;
import design.model.statistics.CourseStats;
+import design.model.statistics.HoleStats;
import design.model.statistics.LifetimeStats;
+import design.model.statistics.RoundStats;
import design.model.statistics.Statistics;
import design.model.statistics.YearlyStats;
import design.runtime.Session;
@@ -22,6 +27,7 @@ public class StatisticsMenu extends Menu {
return "statistics menu";
}
+ @SuppressWarnings("resource")
private Statistics getUserYear(Statistics baseStats){
Scanner sc = new Scanner(System.in);
@@ -32,33 +38,48 @@ public class StatisticsMenu extends Menu {
return yearStats;
}
+ @SuppressWarnings("resource")
private Statistics getUserCourse(Statistics baseStats){
Scanner sc = new Scanner(System.in);
-
- System.out.println("Enter course name to search: ");
- String courseName = sc.nextLine();
- System.out.println("Enter location of course");
- String courseLocation = sc.nextLine();
-
- Course course = matchCourse(courseName, courseLocation);
- Statistics courseStats = new CourseStats(baseStats, course);
- return courseStats;
- }
- private Course matchCourse(String courseName, String courseLocation){
- for(Course course : golfer.getCourses()){
- if(course.getName().toLowerCase().equals(courseName.toLowerCase()) && course.getLocation().toLowerCase().equals(courseLocation.toLowerCase())){
- return course;
- }
+ Course[] courses = golfer.getCourses();
+ for(int i = 0; i < courses.length; i++){
+ System.out.println((i+1) + ".) Name: " + courses[i].getName() + ". Location: " + courses[i].getLocation());
}
- return null;
+ System.out.println("Select the course number corresponding to the course. ");
+ int selection = Integer.parseInt(sc.nextLine());
+ return new CourseStats(baseStats, courses[selection - 1]);
}
+ @SuppressWarnings("resource")
private Statistics getUserRound(Statistics baseStats){
- return null;
+ Scanner sc = new Scanner(System.in);
+ Round[] rounds = baseStats.getRounds();
+ for(int i = 0; i < rounds.length; i++){
+ System.out.println((i+1) + ".) Date: " + rounds[i].getDateTime().toLocalDate() + ". Time: " + rounds[i].getDateTime().toLocalTime() + ". Final Score: " + rounds[i].getTotalSwings() + ". Total Distance: " + rounds[i].getTotalDistance());
+ }
+ System.out.println("Select the round number: ");
+ int selection = Integer.parseInt(sc.nextLine());
+ return new RoundStats(baseStats, rounds[selection - 1]);
}
- private Statistics getUserHole(Statistics baseStatistics){
- return null;
+ @SuppressWarnings("resource")
+ private Statistics getUserHole(Statistics baseStats){
+ Scanner sc = new Scanner(System.in);
+ Round round = baseStats.getRounds()[0]; // Only 1 round
+ Play[] plays = round.getPlays();
+ for(Play play : plays){
+ System.out.println("Hole number: " + play.getHoleNumber());
+ }
+ System.out.println("Enter the hole number: ");
+ int holeNum = Integer.parseInt(sc.nextLine());
+
+ Course course = round.getCourse();
+ for(Hole hole : course.getHoles()){
+ if(hole.getNumber() == holeNum){
+ return new HoleStats(baseStats, hole);
+ }
+ }
+ return baseStats;
}
@Override
@@ -67,6 +88,7 @@ public class StatisticsMenu extends Menu {
new MenuOption("return to main menu", () -> new MainMenu().present()),
new MenuOption("view lifetime statistics", () -> {
Statistics stats = new LifetimeStats(golfer);
+
System.out.printf("Total swings: %d\n", stats.get_score());
System.out.printf("Total distance: %.1f\n", stats.get_distance());
this.present();
@@ -96,6 +118,7 @@ public class StatisticsMenu extends Menu {
System.out.printf("Total swings: %d\n", roundStats.get_score());
System.out.printf("Total distance: %.1f\n", roundStats.get_distance());
+ this.present();
}),
new MenuOption("view hole statistics", () -> {
Statistics baseStats = new LifetimeStats(golfer);
@@ -106,7 +129,8 @@ public class StatisticsMenu extends Menu {
System.out.printf("Total swings: %d\n", holeStats.get_score());
System.out.printf("Total distance: %.1f\n", holeStats.get_distance());
+ this.present();
})
);
}
-}
+} \ No newline at end of file
diff --git a/src/main/java/design/model/statistics/HoleStats.java b/src/main/java/design/model/statistics/HoleStats.java
index 2c023b4..6f6104a 100644
--- a/src/main/java/design/model/statistics/HoleStats.java
+++ b/src/main/java/design/model/statistics/HoleStats.java
@@ -3,6 +3,7 @@ package design.model.statistics;
import java.util.Arrays;
import design.model.Hole;
+import design.model.Play;
import design.model.Round;
public class HoleStats extends StatisticsDecorator{
@@ -16,7 +17,35 @@ public class HoleStats extends StatisticsDecorator{
@Override
public Round[] getRounds(){
return Arrays.stream(super.getRounds())
- .filter(round -> round.getCourse().getHoles().stream().anyMatch(hole -> hole.equals(target_hole)))
+ .filter(round -> round.getCourse().getHoles().contains(target_hole))
.toArray(Round[]::new);
}
+
+ @Override
+ public int get_score() {
+ // Sum swings only on the target hole
+ int totalSwings = 0;
+ for (Round round : super.getRounds()) {
+ for (Play play : round.getPlays()) {
+ if (play.getHoleNumber() == target_hole.getNumber()) {
+ totalSwings += play.getSwingCount();
+ }
+ }
+ }
+ return totalSwings;
+ }
+
+ @Override
+ public double get_distance() {
+ // Sum distances only on the target hole
+ double totalDistance = 0;
+ for (Round round : super.getRounds()) {
+ for (Play play : round.getPlays()) {
+ if (play.getHoleNumber() == target_hole.getNumber()) {
+ totalDistance += play.getDistance();
+ }
+ }
+ }
+ return totalDistance;
+ }
}
diff --git a/src/main/java/design/model/statistics/RoundStats.java b/src/main/java/design/model/statistics/RoundStats.java
index 598ca59..4ce89b0 100644
--- a/src/main/java/design/model/statistics/RoundStats.java
+++ b/src/main/java/design/model/statistics/RoundStats.java
@@ -15,7 +15,7 @@ public class RoundStats extends StatisticsDecorator{
@Override
public Round[] getRounds(){
return Arrays.stream(super.getRounds())
- .filter(round -> round == target_round)
+ .filter(round -> round.getDateTime().equals(target_round.getDateTime()) && round.getTotalSwings() == target_round.getTotalSwings() && round.getTotalDistance() == target_round.getTotalDistance())
.toArray(Round[]::new);
}
}
diff --git a/src/main/java/design/model/statistics/StatisticsDecorator.java b/src/main/java/design/model/statistics/StatisticsDecorator.java
index 91ca452..ed83a9e 100644
--- a/src/main/java/design/model/statistics/StatisticsDecorator.java
+++ b/src/main/java/design/model/statistics/StatisticsDecorator.java
@@ -1,5 +1,7 @@
package design.model.statistics;
+import java.util.Arrays;
+
import design.model.Round;
public abstract class StatisticsDecorator implements Statistics{
@@ -12,11 +14,11 @@ public abstract class StatisticsDecorator implements Statistics{
return wrapped_statistics.getRounds();
}
@Override
- public int get_score(){
- return wrapped_statistics.get_score();
+ public int get_score() {
+ return Arrays.stream(getRounds()).mapToInt(Round::getTotalSwings).sum();
}
@Override
- public double get_distance(){
- return wrapped_statistics.get_distance();
+ public double get_distance() {
+ return Arrays.stream(getRounds()).mapToDouble(Round::getTotalDistance).sum();
}
}