From 869e68986aa8f69af6e7842260a68d1e5c6f796f Mon Sep 17 00:00:00 2001 From: Carlos Maiolino Date: Thu, 10 Jul 2025 22:24:20 +0200 Subject: Add a bunch of code Signed-off-by: Carlos Maiolino --- CPP/Basics/Ex2/CodeDemo.cpp | 43 ++++++++++ CPP/Basics/Ex2/Makefile | 4 + CPP/Basics/Ex2/records.cpp | 188 ++++++++++++++++++++++++++++++++++++++++++++ CPP/Basics/Ex2/records.h | 63 +++++++++++++++ 4 files changed, 298 insertions(+) create mode 100644 CPP/Basics/Ex2/CodeDemo.cpp create mode 100644 CPP/Basics/Ex2/Makefile create mode 100644 CPP/Basics/Ex2/records.cpp create mode 100644 CPP/Basics/Ex2/records.h (limited to 'CPP/Basics/Ex2') diff --git a/CPP/Basics/Ex2/CodeDemo.cpp b/CPP/Basics/Ex2/CodeDemo.cpp new file mode 100644 index 0000000..0afcd7a --- /dev/null +++ b/CPP/Basics/Ex2/CodeDemo.cpp @@ -0,0 +1,43 @@ +// Learning C++ +// Challenge 04_05 +// Calculate a GPA, by Eduardo CorpeƱo + +#include +#include +#include "records.h" + +using namespace std; + +void init_students(); + +StudentRecords SR; +int id; + +int main() +{ + init_students(); + + cout << "Enter a student ID: "; + cin >> id; + + SR.report_card(id); + return 0; +} + +void init_students() +{ + SR.add_student(1,"George P. Burdell"); + SR.add_student(2,"Nancy Rhodes"); + + SR.add_course(1,"Algebra",5); + SR.add_course(2,"Physics",4); + SR.add_course(3,"English",3); + SR.add_course(4,"Economics",4); + + SR.add_grade(1,1,'B'); + SR.add_grade(1,2,'A'); + SR.add_grade(1,3,'C'); + SR.add_grade(2,1,'A'); + SR.add_grade(2,2,'A'); + SR.add_grade(2,4,'B'); +} diff --git a/CPP/Basics/Ex2/Makefile b/CPP/Basics/Ex2/Makefile new file mode 100644 index 0000000..93d17b2 --- /dev/null +++ b/CPP/Basics/Ex2/Makefile @@ -0,0 +1,4 @@ +all: + gcc -o gpa CodeDemo.cpp records.cpp -lstdc++ +clean: + rm gpa diff --git a/CPP/Basics/Ex2/records.cpp b/CPP/Basics/Ex2/records.cpp new file mode 100644 index 0000000..530366a --- /dev/null +++ b/CPP/Basics/Ex2/records.cpp @@ -0,0 +1,188 @@ +#include +#include "records.h" + +using namespace std; + +Student::Student(int the_id, string the_name){ + id = the_id; + name = the_name; +} +int Student::get_id(){ + return id; +} +string Student::get_name(){ + return name; +} + +Course::Course(int the_id, string the_name, unsigned char the_credits){ + id = the_id; + name = the_name; + credits = the_credits; +} +int Course::get_id(){ + return id; +} +string Course::get_name(){ + return name; +} +int Course::get_credits(){ + return credits; +} + + +Grade::Grade(int sid, int cid, char grd){ + student_id = sid; + course_id = cid; + grade = grd; +} +int Grade::get_student_id(){ + return student_id; +} +int Grade::get_course_id(){ + return course_id; +} +char Grade::get_grade(){ + return grade; +} + +/* StudentRecords methods */ + +void StudentRecords::add_student(int sid, string sname) +{ + students.push_back(Student(sid, sname)); +} + +void StudentRecords::add_course(int cid, string cname, + unsigned char ccredits) +{ + courses.push_back(Course(cid, cname, ccredits)); +} + +void StudentRecords::add_grade(int sid, int cid, char grade) +{ + grades.push_back(Grade(sid, cid, grade)); +} + +float StudentRecords::get_num_grade(char letter) +{ + float cur_grade; + switch (letter) { + case 'A': + cur_grade = 4.0f; + break; + case 'B': + cur_grade = 3.0f; + break; + case 'C': + cur_grade = 2.0f; + break; + case 'D': + cur_grade = 1.0f; + break; + case 'F': + cur_grade = 0.0f; + break; + default: + cur_grade = -1; + break; + } + + return cur_grade; +} + +std::string StudentRecords::get_student_name(int sid) +{ + int i = 0; + while (i < students.size() && students[i].get_id() != sid) + i++; + + return students[i].get_name(); +} + +unsigned char StudentRecords::get_course_credits(int cid) +{ + unsigned char creds; + for (Course& c_iter : courses) + if (c_iter.get_id() == cid) { + creds = c_iter.get_credits(); + break; + } + + return creds; +} + +float StudentRecords::get_GPA(int sid) +{ + float points = 0.0f; + float credits = 0.0f; + unsigned char cur_creds; + + for (Grade& g_iter : grades) { + if (g_iter.get_student_id() != sid) + continue; + + cur_creds = get_course_credits(g_iter.get_course_id()); + points += get_num_grade(g_iter.get_grade()) * cur_creds; + credits += cur_creds; + } + + return points / credits; +} + +void StudentRecords::report_card(int sid) +{ + // print a report card on the screen + // name course letter grades and GPA. + std::cout << "REPORT CARD:" << std::endl; + + std::cout << "Student name: " << get_student_name(sid) << std::endl; + + std::cout << "Courses enrolled | Grade" << std::endl; + + for (Grade& sgrade : grades ) { + if (sgrade.get_student_id() != sid) + continue; + + for (Course& scourse : courses) + if (scourse.get_id() == sgrade.get_course_id()) + std::cout << " " << + scourse.get_name() << ": " << + sgrade.get_grade() << std::endl; + } + + std::cout << std::endl; + std::cout << "Student GPA: " << get_GPA(sid) << std::endl; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CPP/Basics/Ex2/records.h b/CPP/Basics/Ex2/records.h new file mode 100644 index 0000000..c0e92c6 --- /dev/null +++ b/CPP/Basics/Ex2/records.h @@ -0,0 +1,63 @@ +#ifndef RECORDS_H +#define RECORDS_H + +#include +#include + +class Student{ +private: + int id; + std::string name; + +public: + Student(int the_id, std::string the_name); + int get_id(); + std::string get_name(); +}; + +class Course{ +private: + int id; + std::string name; + unsigned char credits; + +public: + Course(int the_id, std::string the_name, unsigned char the_credits); + int get_id(); + std::string get_name(); + int get_credits(); +}; + +class Grade{ +private: + int student_id; + int course_id; + char grade; + +public: + Grade(int sid, int cid, char grd); + int get_student_id(); + int get_course_id(); + char get_grade(); +}; + +class StudentRecords { +private: + std::vector students; + std::vector courses; + std::vector grades; + + float get_num_grade(char); + +public: + void add_student(int, std::string); + void add_course(int, std::string, unsigned char); + void add_grade(int, int, char); + + std::string get_student_name(int); + unsigned char get_course_credits(int); + float get_GPA(int); + void report_card(int); +}; + +#endif /* RECORDS_H */ -- cgit v1.2.3