diff options
| author | Carlos Maiolino <[email protected]> | 2025-07-10 22:24:20 +0200 |
|---|---|---|
| committer | Carlos Maiolino <[email protected]> | 2025-07-10 22:24:20 +0200 |
| commit | 869e68986aa8f69af6e7842260a68d1e5c6f796f (patch) | |
| tree | 63b6b5ffc3d19414233d4629a533c0d9bf3cbf72 /CPP/Basics/Ex2 | |
| parent | 20834dcc57537cd95260a4a22f5d91a027adfd35 (diff) | |
Add a bunch of code
Signed-off-by: Carlos Maiolino <[email protected]>
Diffstat (limited to 'CPP/Basics/Ex2')
| -rw-r--r-- | CPP/Basics/Ex2/CodeDemo.cpp | 43 | ||||
| -rw-r--r-- | CPP/Basics/Ex2/Makefile | 4 | ||||
| -rw-r--r-- | CPP/Basics/Ex2/records.cpp | 188 | ||||
| -rw-r--r-- | CPP/Basics/Ex2/records.h | 63 |
4 files changed, 298 insertions, 0 deletions
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 <iostream>
+#include <vector>
+#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 <iostream>
+#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 <vector>
+#include <string>
+
+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<Student> students;
+ std::vector<Course> courses;
+ std::vector<Grade> 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 */
|
