summaryrefslogtreecommitdiff
path: root/CPP/Basics
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/Basics')
-rw-r--r--CPP/Basics/CodeDemo.cpp34
-rw-r--r--CPP/Basics/Ex2/CodeDemo.cpp43
-rw-r--r--CPP/Basics/Ex2/Makefile4
-rw-r--r--CPP/Basics/Ex2/records.cpp188
-rw-r--r--CPP/Basics/Ex2/records.h63
-rw-r--r--CPP/Basics/Makefile4
-rw-r--r--CPP/Basics/basics.cpp150
-rw-r--r--CPP/Basics/calc.txt9
-rw-r--r--CPP/Basics/cow.cpp24
-rw-r--r--CPP/Basics/cow.h32
-rw-r--r--CPP/Basics/files.cpp66
-rw-r--r--CPP/Basics/flow.cpp117
-rw-r--r--CPP/Basics/functions.cpp41
-rw-r--r--CPP/Basics/main.cpp25
-rw-r--r--CPP/Basics/people.txt12
-rw-r--r--CPP/Basics/records/Course.cpp19
-rw-r--r--CPP/Basics/records/Grade.cpp19
-rw-r--r--CPP/Basics/records/Student.cpp14
-rw-r--r--CPP/Basics/records/record.h41
-rw-r--r--CPP/Basics/records/records.cpp17
20 files changed, 922 insertions, 0 deletions
diff --git a/CPP/Basics/CodeDemo.cpp b/CPP/Basics/CodeDemo.cpp
new file mode 100644
index 0000000..c84d8c0
--- /dev/null
+++ b/CPP/Basics/CodeDemo.cpp
@@ -0,0 +1,34 @@
+// Learning C++
+// Exercise 06_01
+// Opening a text file for reading, by Eduardo Corpeño
+
+#include <iostream>
+#include <string>
+#include <fstream>
+
+using namespace std;
+
+ifstream inFile;
+string str;
+int number;
+char letter;
+
+int main(){
+ inFile.open("people.txt");
+ if (inFile.fail())
+ cout << endl << "File not found!" << endl;
+ else{
+ while (!inFile.eof()){
+ getline(inFile, str);
+ cout << str << ", ";
+ getline(inFile,str);
+ number = stoi(str);
+ cout << number << ", ";
+ getline(inFile, str);
+ letter = str[0];
+ cout << letter << endl;
+ }
+ inFile.close();
+ }
+ return (0);
+}
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 */
diff --git a/CPP/Basics/Makefile b/CPP/Basics/Makefile
new file mode 100644
index 0000000..7735e38
--- /dev/null
+++ b/CPP/Basics/Makefile
@@ -0,0 +1,4 @@
+all:
+ gcc -o main cow.cpp main.cpp -lstdc++
+clean:
+ rm main files flow functions
diff --git a/CPP/Basics/basics.cpp b/CPP/Basics/basics.cpp
new file mode 100644
index 0000000..1ddd96c
--- /dev/null
+++ b/CPP/Basics/basics.cpp
@@ -0,0 +1,150 @@
+#include <iostream>
+#include <string>
+#include <cstring> // includes C string.h
+#include <typeinfo>
+#include <cstdint>
+
+#define CAPACITY 5000
+//#define LENGTH 4
+
+/*
+ * cout = Character out
+ * cin = Character in
+ * :: == Scope resolution operator
+ * << == insertion operator
+ */
+
+using namespace std;
+
+void average() {
+ int arr[5];
+
+ arr[0] = 4;
+ arr[1] = 3;
+ arr[2] = 5;
+ arr[3] = 2;
+ arr[4] = 4;
+
+ int i = 0;
+ float avg = 0;
+
+ for (i = 0; i < 5; i++)
+ avg += arr[i];
+
+ avg /= 5;
+
+ std::cout << "Average: " << avg << std::endl;
+}
+
+void tcast() {
+ float f = -7.44f;
+ int32_t s;
+ uint32_t u;
+
+ s = f; // Implicit type casting from float to int32
+ u = s; // Implicit casting from int32 to uint32, we'll end up seeing 2's
+ // complement version of variable s, but interpreted as an
+ // unsigned int.
+
+ std::cout << "float: " << f << endl;
+ std::cout << "int32: " << s << endl;
+ std::cout << "uint32: " << u << endl;
+}
+
+void strings() {
+ const int LENGTH = 25;
+ char ch_arr1[LENGTH] = "Howdy! I'm a string... ";
+ char ch_arr2[] = "Sup bro?";
+
+ string std_str1 = "Hi everyone! ";
+ string std_str2 = "How's everybody doing?";
+
+ // Concatenate strings the traditional way
+ strcat(ch_arr1, ch_arr2);
+ std::cout << ch_arr1 << std::endl;
+ // Concatenate strings the C++ way using operator overloading
+ std::cout << std_str1 + std_str2 << std::endl;
+ std::cout << "Operator overloaded" << std::endl;
+}
+
+void t_inference() {
+ auto a = 8;
+ auto b = 214312351235739;
+ auto c = 3.14f;
+ auto d = 3.14;
+ auto e = true;
+ auto f = 'd';
+
+ std::cout << "STARTING Type Inference" << std::endl;
+ std::cout << "Type of a: " << typeid(a).name() << std::endl;
+ std::cout << "Type of b: " << typeid(b).name() << std::endl;
+ std::cout << "Type of c: " << typeid(c).name() << std::endl;
+ std::cout << "Type of d: " << typeid(d).name() << std::endl;
+ std::cout << "Type of e: " << typeid(e).name() << std::endl;
+ std::cout << "Type of f: " << typeid(f).name() << std::endl;
+}
+
+void varplay() {
+ int a, b = 5;
+
+ float c = 2.4f;
+ double d = 9.234545;
+ long double ld = 9.234545;
+ char e = 'e';
+ bool myBool = false;
+ string str = "This is a big string I don't care how it is handled";
+
+ std::cout << "Size of int: " << sizeof(a) << " sizeof float: " <<
+ sizeof(c) << " sizeof double: " << sizeof(d) <<
+ " sizeof long double: " << sizeof(ld) << " sizeof char: " <<
+ sizeof(e) << " sizeof bool: " << sizeof(myBool) << std::endl;
+
+ std::cout << "This is my string: " << str << std::endl;
+}
+
+int main() {
+ string str;
+
+#ifdef CAPACITY
+ int32_t cap = CAPACITY;
+ uint32_t small = 37;
+
+ const int LENGTH = 4;
+ int myArr[LENGTH];
+
+ myArr[0] = 3;
+ myArr[1] = 4;
+ myArr[2] = 5;
+ myArr[3] = 6;
+ cap += small;
+#endif
+
+ std::cout << "Please enter your first name: ";
+ cin >> str;
+
+ std::cout << "Hello " << str << ", welcome to the world!" << std::endl;
+
+ // Just relies on using namespace
+ cout << "Hello World, with namespace" << endl;
+
+// varplay();
+ t_inference();
+
+#ifdef DEBUG
+ std::cout << "DEBUGGING..." << std::endl;
+ std::cout << "Array size: " << LENGTH << std::endl;
+ std::cout << "Arr[0] = " << myArr[0] << std::endl;
+ std::cout << "Arr[1] = " << myArr[1] << std::endl;
+ std::cout << "Arr[2] = " << myArr[2] << std::endl;
+ std::cout << "Arr[3] = " << myArr[3] << std::endl;
+#endif
+
+#ifdef CAPACITY
+ std::cout << "Current CAPS: " << cap << std::endl;
+#endif
+
+ strings();
+ tcast();
+ average();
+ return 0;
+}
diff --git a/CPP/Basics/calc.txt b/CPP/Basics/calc.txt
new file mode 100644
index 0000000..8f57534
--- /dev/null
+++ b/CPP/Basics/calc.txt
@@ -0,0 +1,9 @@
+Ronaldo
+25
+J
+Cretino
+23
+C
+Mano dos Pano
+23
+M
diff --git a/CPP/Basics/cow.cpp b/CPP/Basics/cow.cpp
new file mode 100644
index 0000000..96a47d6
--- /dev/null
+++ b/CPP/Basics/cow.cpp
@@ -0,0 +1,24 @@
+#include "cow.h"
+
+// Constructor
+cow::cow(std::string name_i, int age_i, unsigned char purpose_i) {
+ name = name_i;
+ age = age_i;
+ purpose = purpose_i;
+}
+
+std::string cow::get_name() {
+ return name;
+}
+
+int cow::get_age() {
+ return age;
+}
+
+unsigned char cow::get_purpose() {
+ return purpose;
+}
+
+void cow::set_age(int age_i) {
+ age = age_i;
+}
diff --git a/CPP/Basics/cow.h b/CPP/Basics/cow.h
new file mode 100644
index 0000000..b9cdaae
--- /dev/null
+++ b/CPP/Basics/cow.h
@@ -0,0 +1,32 @@
+#ifndef COW_H
+#define COW_H
+
+#include <string>
+
+enum cow_p {
+ DAIRY,
+ MEAT,
+ HIDE,
+ PET,
+};
+
+// By default class members are private
+class cow {
+
+private:
+ std::string name;
+ int age;
+ unsigned char purpose;
+
+public:
+ // Constructor
+ cow(std::string name_i, int age_i, unsigned char purpose_i);
+
+ std::string get_name();
+ int get_age();
+ unsigned char get_purpose();
+
+ void set_age(int age_i);
+};
+
+#endif /* COW_H */
diff --git a/CPP/Basics/files.cpp b/CPP/Basics/files.cpp
new file mode 100644
index 0000000..1242224
--- /dev/null
+++ b/CPP/Basics/files.cpp
@@ -0,0 +1,66 @@
+#include <iostream>
+#include <string>
+#include <fstream>
+
+using namespace std;
+
+void read_from_file()
+{
+ ifstream myFile;
+ string str, str2;
+ int number;
+ char letter;
+
+ myFile.open("people.txt");
+
+ if (myFile.fail()) {
+ cout << endl << "File not found!" << endl;
+ } else {
+ while (!myFile.eof()) {
+ getline(myFile, str);
+ cout << str << ", ";
+ getline(myFile, str);
+ number = stoi(str);
+ cout << number << ", ";
+ getline(myFile, str);
+ cout << str << endl;
+ }
+ myFile.close();
+ }
+}
+
+void write_to_file()
+{
+ ofstream outFile;
+ float a = 4.333f;
+ float b = 5.302f;
+
+ outFile.open("calc.txt");
+ if (outFile.fail()) {
+ cout << endl << "Couldn't open the file!" << endl;
+ } else {
+ outFile << "Ronaldo" << endl;
+ outFile << "25" << endl;
+ outFile << "J" << endl;
+ outFile << "Cretino" << endl;
+ outFile << "23" << endl;
+ outFile << "C" << endl;
+ outFile << "Mano dos Pano" << endl;
+ outFile << "23" << endl;
+ outFile << "M" << endl;
+ outFile.close();
+ cout << "File written successfully!" << endl;
+
+ }
+}
+int main(void)
+{
+
+ write_to_file();
+ read_from_file();
+
+ // Reading a whole line from the terminal
+// getline(cin, str2);
+// cout << str2 << endl;
+ return 0;
+}
diff --git a/CPP/Basics/flow.cpp b/CPP/Basics/flow.cpp
new file mode 100644
index 0000000..82b7062
--- /dev/null
+++ b/CPP/Basics/flow.cpp
@@ -0,0 +1,117 @@
+#include <iostream>
+#include <vector>
+
+void ifs(void) {
+ int a = 1024;
+ bool flag = false;
+ char letter = 'E';
+
+ if (a > 1000)
+ std::cout << "Warning: over 1k" << std::endl;
+
+ if (a % 2)
+ std::cout << "a is odd" << std::endl;
+ else
+ std::cout << "a is even" << std::endl;
+
+ std::cout << "The letter " << letter << " is ";
+
+ if (letter != 'a' && letter != 'e' && letter != 'i' &&
+ letter != 'o' && letter != 'u' &&
+ letter != 'A' && letter != 'E' && letter != 'I' &&
+ letter != 'O' && letter != 'U')
+ std::cout << "not ";
+ std::cout << "a vowel" << std::endl;
+
+ if (flag)
+ std::cout << "The flag is true." << std::endl;
+}
+
+void switches() {
+
+ float num1, num2, result;
+ char op;
+
+ std::cout << "Enter operand 1: " << std::endl;
+ std::cin >> num1;
+ std::cout << "Enter operand 2: " << std::endl;
+ std::cin >> num2;
+ std::cout << "Choose operation: + - * /: " << std::endl;
+ std::cin >> op;
+
+ switch (op) {
+ case '+':
+ result = num1 + num2;
+ break;
+ case '-':
+ result = num1 - num2;
+ break;
+ case '*':
+ result = num1 * num2;
+ break;
+ case '/':
+ result = num1 / num2;
+ break;
+ default:
+ std::cout << "Invalid Operation." << std::endl;
+ return;
+ }
+ std::cout << "The result is: " << result << std::endl;
+}
+
+void LWhile() {
+
+
+ // Declare and initialize a vector and an iterator
+ // in this case iterator is a type inside vector class
+ std::vector<int> numbers = {12, 25, 31, 55, 24, 32, 99};
+ std::vector<int>::iterator ptr = numbers.begin();
+
+ // We can use auto type to avoid the mess up above:
+ auto ptr_auto = numbers.begin();
+ int i = 0;
+
+ while (ptr != numbers.end()) {
+ std::cout << *ptr << " ";
+ ptr = std::next(ptr, 1);
+ }
+ std::cout << std::endl;
+ do {
+ std::cout << numbers[i] << ":" << *ptr_auto << " ";
+ i++;
+ ptr_auto = std::next(ptr_auto, 1);
+ }while(i < numbers.size());
+ std::cout << std::endl;
+}
+
+void LFor() {
+ std::vector<int> numbers = {12, 25, 31, 55, 24, 32, 99};
+ std::vector<int>::iterator ptr = numbers.begin();
+ float avg = 0;
+
+ for(int i = 0; i < numbers.size() ; i++)
+ avg += numbers[i];
+
+ avg /= numbers.size();
+ std::cout << "The average is: " << avg << std::endl;
+
+ // C++11 Iterator based for
+ avg = 0;
+
+ // The iterator will copy the data from each element within the vector,
+ // to the iterator variable (iter) here. We may want to access by
+ // reference instead of copying it
+ // READ AS: for each iter in numbers
+ for(int iter : numbers)
+ avg += iter;
+ avg /= numbers.size();
+ std::cout << "The average is: " << avg << std::endl;
+}
+
+int main(void) {
+ ifs();
+ switches();
+ LWhile();
+ LFor();
+ return 0;
+}
diff --git a/CPP/Basics/functions.cpp b/CPP/Basics/functions.cpp
new file mode 100644
index 0000000..5a26992
--- /dev/null
+++ b/CPP/Basics/functions.cpp
@@ -0,0 +1,41 @@
+#include <iostream>
+
+// C++ can pass arguments are references
+
+// by value
+int square(int x)
+{
+ return x * x;
+}
+
+// swap by value (passing pointers)
+void swap(int *x, int *y)
+{
+ int temp = *x;
+ *x = *y;
+ *y = temp;
+}
+
+// Swap by reference - function overload
+void swap(int& x, int& y)
+{
+ int temp = x;
+ x = y;
+ y = temp;
+}
+
+
+int main(void) {
+
+ int a = 9, b;
+ b = square(a);
+ std::cout << "Square of a: " << b << std::endl;
+ std::cout << "A: " << a << " B: " << b << std::endl;
+ swap(&a, &b);
+ std::cout << "Swapping by addr value:" << std::endl;
+ std::cout << "New A: " << a << " New B: " << b << std::endl;
+ swap(a, b);
+ std::cout << "Swapping by reference:" << std::endl;
+ std::cout << "New A: " << a << " New B: " << b << std::endl;
+ return 0;
+}
diff --git a/CPP/Basics/main.cpp b/CPP/Basics/main.cpp
new file mode 100644
index 0000000..1b6d751
--- /dev/null
+++ b/CPP/Basics/main.cpp
@@ -0,0 +1,25 @@
+#include <iostream>
+#include <string>
+#include "cow.h"
+
+int main(void) {
+ cow *my_cow;
+ my_cow = new cow("Hildy", 7, PET);
+
+ std::cout << my_cow->get_name() << " is a type - " <<
+ (int)my_cow->get_purpose() <<
+ std::endl;
+
+ std::cout << my_cow->get_name() << " is " <<
+ my_cow->get_age() << " years old" <<
+ std::endl;
+
+
+ my_cow->set_age(24);
+ std::cout << my_cow->get_name() << " is NOW " <<
+ my_cow->get_age() << " years old" <<
+ std::endl;
+
+ delete my_cow;
+ return 0;
+}
diff --git a/CPP/Basics/people.txt b/CPP/Basics/people.txt
new file mode 100644
index 0000000..b426faf
--- /dev/null
+++ b/CPP/Basics/people.txt
@@ -0,0 +1,12 @@
+Jenny Drake
+25
+J
+George P. Burdell
+62
+G
+Jane Rogers
+34
+J
+Joe Petersen
+30
+J \ No newline at end of file
diff --git a/CPP/Basics/records/Course.cpp b/CPP/Basics/records/Course.cpp
new file mode 100644
index 0000000..0c39e3e
--- /dev/null
+++ b/CPP/Basics/records/Course.cpp
@@ -0,0 +1,19 @@
+#include "record.h"
+
+Course::Course(int c_id, std::string c_name, unsigned char c_credits) {
+ id = c_id;
+ name = c_name;
+ credits = c_credits;
+}
+
+int Course::get_id(void) {
+ return id;
+}
+
+int Course::get_credits() {
+ return credits;
+}
+
+std::string Course::get_name() {
+ return name;
+}
diff --git a/CPP/Basics/records/Grade.cpp b/CPP/Basics/records/Grade.cpp
new file mode 100644
index 0000000..8a300e6
--- /dev/null
+++ b/CPP/Basics/records/Grade.cpp
@@ -0,0 +1,19 @@
+#include "record.h"
+
+Grade::Grade(int g_student_id, int g_course_id, char g_grade) {
+ student_id = g_student_id;
+ course_id = g_course_id;
+ grade = g_grade;
+}
+
+int Grade::get_student_id() {
+ return student_id;
+}
+
+int Grade::get_course_id() {
+ return course_id;
+}
+
+char Grade::get_grade() {
+ return grade;
+}
diff --git a/CPP/Basics/records/Student.cpp b/CPP/Basics/records/Student.cpp
new file mode 100644
index 0000000..d8cccaf
--- /dev/null
+++ b/CPP/Basics/records/Student.cpp
@@ -0,0 +1,14 @@
+#include "record.h"
+
+Student::Student(int s_id, std::string s_name) {
+ id = s_id;
+ name = s_name;
+}
+
+int Student::get_id(void) {
+ return id;
+}
+
+std::string Student::get_name(void) {
+ return name;
+}
diff --git a/CPP/Basics/records/record.h b/CPP/Basics/records/record.h
new file mode 100644
index 0000000..ff0a9e7
--- /dev/null
+++ b/CPP/Basics/records/record.h
@@ -0,0 +1,41 @@
+#ifndef RECORDS_H
+#define RECORDS_H
+#include <string>
+
+class Student {
+private:
+ int id;
+ std::string name;
+public:
+ Student(int s_id, std::string s_name);
+ int get_id();
+ std::string get_name();
+};
+
+
+class Course {
+private:
+ int id;
+ std::string name;
+ unsigned char credits;
+public:
+ Course(int c_id, std::string c_name, unsigned char c_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 g_student_id, int g_course_id, char g_grade);
+ int get_student_id();
+ int get_course_id();
+ char get_grade();
+
+};
+#endif
diff --git a/CPP/Basics/records/records.cpp b/CPP/Basics/records/records.cpp
new file mode 100644
index 0000000..1052504
--- /dev/null
+++ b/CPP/Basics/records/records.cpp
@@ -0,0 +1,17 @@
+#include <iostream>
+#include "record.h"
+
+using namespace std;
+
+Student my_student(1,"Hilda Jones");
+Course my_course(7,"Physics 101",3);
+Grade my_grade(1,7,'B');
+
+int main(){
+ cout << "Student: " << my_student.get_name() << endl;
+ cout << "Course: " << my_course.get_name() << endl;
+ cout << "Credits: " << my_course.get_credits() << endl;
+ cout << "Grade: " << my_grade.get_grade() << endl;
+ return (0);
+}
+