From e38926567ae1bb5bcd042d384b6f146f89567fc7 Mon Sep 17 00:00:00 2001 From: anirisaihan Date: Mon, 6 Oct 2025 16:31:40 -0400 Subject: [PATCH 1/3] Task 3a Complete --- src/main/java/api/MongoGradeDataBase.java | 1 + src/main/java/usecase/GetAverageGradeUseCase.java | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/main/java/api/MongoGradeDataBase.java b/src/main/java/api/MongoGradeDataBase.java index 77e76548..6fd77f1e 100644 --- a/src/main/java/api/MongoGradeDataBase.java +++ b/src/main/java/api/MongoGradeDataBase.java @@ -268,6 +268,7 @@ public Team getMyTeam() { // HINT 1: Look at the formTeam method to get an idea on how to parse the response // HINT 2: You may find it useful to just initially print the contents of the JSON // then work on the details of how to parse it. + return null; } } diff --git a/src/main/java/usecase/GetAverageGradeUseCase.java b/src/main/java/usecase/GetAverageGradeUseCase.java index 25140b18..b5b51823 100644 --- a/src/main/java/usecase/GetAverageGradeUseCase.java +++ b/src/main/java/usecase/GetAverageGradeUseCase.java @@ -29,6 +29,14 @@ public float getAverageGrade(String course) { // TODO Task 3a: Complete the logic of calculating the average course grade for // your team members. Hint: the getGrades method might be useful. + for (String member : team.getMembers()) { + var grades = gradeDataBase.getGrade(member,course); + if (grades != null) { + sum += grades.getGrade(); + } + count++; + } + if (count == 0) { return 0; } From 27a55e6fda5f320d511417081a46594bf411e199 Mon Sep 17 00:00:00 2001 From: Marksman77777 Date: Mon, 6 Oct 2025 16:32:42 -0400 Subject: [PATCH 2/3] task3b --- src/main/java/api/MongoGradeDataBase.java | 28 ++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/api/MongoGradeDataBase.java b/src/main/java/api/MongoGradeDataBase.java index 77e76548..7f53488b 100644 --- a/src/main/java/api/MongoGradeDataBase.java +++ b/src/main/java/api/MongoGradeDataBase.java @@ -261,13 +261,35 @@ public Team getMyTeam() { .addHeader(CONTENT_TYPE, APPLICATION_JSON) .build(); - final Response response; - final JSONObject responseBody; + try { + final Response response = client.newCall(request).execute(); + final JSONObject responseBody = new JSONObject(response.body().string()); + + if (responseBody.getInt(STATUS_CODE) == SUCCESS_CODE) { + final JSONObject team = responseBody.getJSONObject("team"); + final JSONArray membersArray = team.getJSONArray("members"); + final String[] members = new String[membersArray.length()]; + for (int i = 0; i < membersArray.length(); i++) { + members[i] = membersArray.getString(i); + } + + return Team.builder() + .name(team.getString(NAME)) + .members(members) + .build(); + } + else { + throw new RuntimeException(responseBody.getString(MESSAGE)); + } + } + catch (IOException | JSONException event) { + throw new RuntimeException(event); + } + // TODO Task 3b: Implement the logic to get the team information // HINT 1: Look at the formTeam method to get an idea on how to parse the response // HINT 2: You may find it useful to just initially print the contents of the JSON // then work on the details of how to parse it. - return null; } } From 8718e2c253701e319b02117bcdf53092e2b13229 Mon Sep 17 00:00:00 2001 From: fruitea123 Date: Tue, 7 Oct 2025 04:33:34 +0800 Subject: [PATCH 3/3] finish task4 --- src/main/java/app/Config.java | 7 ++++++ src/main/java/app/gui/Application.java | 35 ++++++++++++++++++++------ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/main/java/app/Config.java b/src/main/java/app/Config.java index 12df0fd5..92283659 100644 --- a/src/main/java/app/Config.java +++ b/src/main/java/app/Config.java @@ -66,4 +66,11 @@ public GetAverageGradeUseCase getAverageGradeUseCase() { } // TODO Task 4: add code for the new GetTopGradeUseCase following the same pattern as the other use cases above. + /** + * Get the GetAverageGradeUseCase object. + * @return GetAverageGradeUseCase object. + */ + public GetTopGradeUseCase getTopGradeUseCase() { + return new GetTopGradeUseCase(gradeDataBase); + } } diff --git a/src/main/java/app/gui/Application.java b/src/main/java/app/gui/Application.java index ff61dddc..f84d9910 100644 --- a/src/main/java/app/gui/Application.java +++ b/src/main/java/app/gui/Application.java @@ -21,12 +21,7 @@ import api.MongoGradeDataBase; import app.Config; import entity.Grade; -import usecase.FormTeamUseCase; -import usecase.GetAverageGradeUseCase; -import usecase.GetGradeUseCase; -import usecase.JoinTeamUseCase; -import usecase.LeaveTeamUseCase; -import usecase.LogGradeUseCase; +import usecase.*; /** * GUI class to run the GUI for the Grade App. @@ -55,6 +50,7 @@ public static void main(String[] args) { final JoinTeamUseCase joinTeamUseCase = config.joinTeamUseCase(); final LeaveTeamUseCase leaveTeamUseCase = config.leaveTeamUseCase(); final GetAverageGradeUseCase getAverageGradeUseCase = config.getAverageGradeUseCase(); + final GetTopGradeUseCase getTopGradeUseCase = config.getTopGradeUseCase(); // this is the code that runs to set up our GUI SwingUtilities.invokeLater(() -> { @@ -70,7 +66,7 @@ public static void main(String[] args) { final JPanel logGradeCard = createLogGradeCard(frame, logGradeUseCase); final JPanel formTeamCard = createFormTeamCard(frame, formTeamUseCase); final JPanel joinTeamCard = createJoinTeamCard(frame, joinTeamUseCase); - final JPanel manageTeamCard = createManageTeamCard(frame, leaveTeamUseCase, getAverageGradeUseCase); + final JPanel manageTeamCard = createManageTeamCard(frame, leaveTeamUseCase, getAverageGradeUseCase, getTopGradeUseCase); cardPanel.add(defaultCard, "DefaultCard"); cardPanel.add(getGradeCard, "GetGradeCard"); @@ -324,13 +320,14 @@ public void actionPerformed(ActionEvent e) { // TODO Task 4: modify this method so that it takes in a getTopGradeUseCase // Note: this will require you to update the code that calls this method. private static JPanel createManageTeamCard(JFrame jFrame, LeaveTeamUseCase leaveTeamUseCase, - GetAverageGradeUseCase getAverageGradeUseCase) { + GetAverageGradeUseCase getAverageGradeUseCase, GetTopGradeUseCase getTopGradeUseCase) { final JPanel theCard = new JPanel(); theCard.setLayout(new GridLayout(ROWS, COLS)); final JTextField courseField = new JTextField(20); // make a separate line. final JButton getAverageButton = new JButton("Get Average Grade"); // TODO Task 4: Add another button for "Get Top Grade" (check the getAverageButton for example) + final JButton getTopButton = new JButton("Get Top Grade"); final JButton leaveTeamButton = new JButton("Leave Team"); final JLabel resultLabel = new JLabel(); @@ -358,6 +355,27 @@ public void actionPerformed(ActionEvent e) { // TODO Task 4: Add action listener for getTopGrade button, follow example of getAverageButton + getTopButton.addActionListener(new ActionListener() { + /** + * Invoked when an action occurs. + * + * @param e the event to be processed + */ + @Override + public void actionPerformed(ActionEvent e) { + final String course = courseField.getText(); + + try { + final float top = getTopGradeUseCase.getTopGrade(course); + JOptionPane.showMessageDialog(jFrame, "Top Grade: " + top); + courseField.setText(""); + } + catch (JSONException ex) { + JOptionPane.showMessageDialog(jFrame, ex.getMessage()); + } + } + }); + leaveTeamButton.addActionListener(new ActionListener() { /** * Invoked when an action occurs. @@ -381,6 +399,7 @@ public void actionPerformed(ActionEvent e) { theCard.add(getAverageButton); theCard.add(leaveTeamButton); theCard.add(resultLabel); + theCard.add(getTopButton); return theCard; }