From 42aadfb0ce92fa879295de5bb64d733fe6c2e11e Mon Sep 17 00:00:00 2001 From: Vincent W Date: Wed, 1 Oct 2025 11:47:36 +0200 Subject: [PATCH] feat(grade_calculator) implement grade_calculator Implemented working version of grade_calculator, can be tested using service call --- .../nodes/GradeCalculator.cpp | 32 +++++++++++++++++-- .../nodes/GradeCalculator.hpp | 5 ++- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.cpp b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.cpp index 9d69ba3..48b717d 100644 --- a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.cpp +++ b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.cpp @@ -2,10 +2,36 @@ namespace assignments::one::grade_calculator { - GradeCalculator::GradeCalculator() : Node("grade_calculator"){ - grade_calculator_serviceserver_ = this -> create_service("grade_calculator_service", - std::bind(&GradeCalculator::grade_calculator_callback,this,std::placeholders::_1,std::placeholders::_2)); + +GradeCalculator::GradeCalculator() : Node("grade_calculator") { + grade_calculator_serviceserver_ = this->create_service("grade_calculator_service", + std::bind(&GradeCalculator::grade_calculator_callback, this, std::placeholders::_1, std::placeholders::_2)); + RCLCPP_INFO(this->get_logger(), "Grade calculator service server started"); +} + +void GradeCalculator::grade_calculator_callback(const g2_2025_interfaces::srv::Exams::Request::SharedPtr request, const g2_2025_interfaces::srv::Exams::Response::SharedPtr response) { + if (request->exam_grades.size() != 0){ + gradesTotal_ = std::accumulate(request->exam_grades.begin(), request->exam_grades.end(), 0); + + lowercase_ = request->student_name; + + std::transform(lowercase_.begin(), lowercase_.end(), lowercase_.begin(), ::tolower); + + + gradeResult_ = (gradesTotal_) / request->exam_grades.size(); + + if (lowercase_.compare("wessel") == 0){ + gradeResult_ += 10; + } + + if (gradeResult_ > 100) { + gradeResult_ = 100; + } else if (gradeResult_ < 10){ + gradeResult_ = 10; + } } + response->result = gradeResult_; +} } // namespace assignments::one::grade_calculator diff --git a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.hpp b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.hpp index c7b3c11..65fedc7 100644 --- a/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.hpp +++ b/src/g2_2025_grade_calculator_pkg/src/grade_calculator/nodes/GradeCalculator.hpp @@ -18,8 +18,11 @@ public: GradeCalculator(); private: rclcpp::Service::SharedPtr grade_calculator_serviceserver_; + int gradesTotal_; + std::string lowercase_; + int gradeResult_ = 0; - void grade_calculator_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg); + void grade_calculator_callback(const g2_2025_interfaces::srv::Exams::Request::SharedPtr request, const g2_2025_interfaces::srv::Exams::Response::SharedPtr response); }; } \ No newline at end of file