Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Hands on OOP submission by Fakih Anugerah Pratama #82

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.vscode/*
Binary file added bin/main.exe
Binary file not shown.
46 changes: 46 additions & 0 deletions src/Classroom.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#include "Classroom.h"

Classroom::Classroom(Teacher myteacher){
classroomId = time(0) + randint(-10, 10);;
teacher = myteacher;
}

Classroom::Classroom(int myid, Teacher myteacher){
classroomId = myid;
teacher = myteacher;
}

void Classroom::addStudent(Student* student){
studentList.push_back(student);
}

json Classroom::asJSON(){
json data;

data["classID"] = classroomId;

data["teacher"] = teacher.asJSON();

for(auto i:studentList){
data["students"].push_back(i->asJSON());
}

return data;
}

void Classroom::displayClassroom(){
cout << "Classroom ID : " << classroomId << endl;
cout << "Teacher : " << teacher.getName() << endl;
cout << "Students : " << endl;
for(auto i:studentList){
cout << "\tName : " << i->getName() << ", Student ID : " << i->getid() << ", Major : " << i->getStudentMajor() << endl;
cout << "\t\tCitizenship : " << i->getCitizenshipScore() << ", Environmental = " << i->getEnvironmentalScore() << ", Religion = " << i->getReligionScore() << endl;

if(i->getStudentMajor() == "art")
cout << "\t\tArt : " << i->getMajorCourseScore() << endl;
else if(i->getStudentMajor() == "literature")
cout << "\t\tLiterature : " << i->getMajorCourseScore() << endl;
else if(i->getStudentMajor() == "medical")
cout << "\t\tMedical : " << i->getMajorCourseScore() << endl;
}
}
35 changes: 35 additions & 0 deletions src/Classroom.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#ifndef CLASSROOM_H
#define CLASSROOM_H

#include "Student.h"
#include "Teacher.h"

#include <vector>
using namespace std;

class Classroom {
private :
int classroomId;

Teacher teacher;
// vector<Student> studentList;

public :
Classroom(Teacher);
Classroom(int, Teacher);

vector<Student*> studentList;

void addStudent(Student*);

json asJSON();

void storeClassroom();
void displayClassroom();

// public :

};


#endif // !CLASSROOM_H
61 changes: 61 additions & 0 deletions src/DatabaseManager.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include "DatabaseManager.h"

void DatabaseManager::addClassroom(Classroom classroom){
classroomList.push_back(classroom);
}

Classroom DatabaseManager::getClassroom(int id = 0){
return classroomList[id];
}

void DatabaseManager::StoreData(){
ofstream JSONFile("src/data.json");
json data;
// = json::parse(JSONFile);

for (auto i:classroomList){
data.push_back(i.asJSON());
}

JSONFile << data.dump();

JSONFile.close();
}

void DatabaseManager::LoadData(){
classroomList.clear();

ifstream JSONFile("src/data.json");
json data = json::parse(JSONFile);

// cout <<endl << endl << data.dump() << data[0]["classID"] << endl << endl;


for(auto i:data){
// cout << "weya" << i["classID"] << i["teacher"]["identifier"]["id"] << i["teacher"]["identifier"]["name"]<< endl;
classroomList.push_back(Classroom(i["classID"], Teacher(i["teacher"]["identifier"]["id"], i["teacher"]["identifier"]["name"])));
}

int __count = 0;
for(auto i:data){
for(auto j:i["students"]){
if(j["identifier"]["major"] == "art")
classroomList[__count].addStudent(new ArtStudent(j["identifier"]["id"], j["identifier"]["name"], j["scores"]["citizenship"], j["scores"]["environmental"], j["scores"]["religion"], j["scores"]["majorCourse"]));
else if (j["identifier"]["major"] == "literature")
classroomList[__count].addStudent(new LiteratureStudent(j["identifier"]["id"], j["identifier"]["name"], j["scores"]["citizenship"], j["scores"]["environmental"], j["scores"]["religion"], j["scores"]["majorCourse"]));
else if (j["identifier"]["major"] == "medical")
classroomList[__count].addStudent(new MedicalStudent(j["identifier"]["id"], j["identifier"]["name"], j["scores"]["citizenship"], j["scores"]["environmental"], j["scores"]["religion"], j["scores"]["majorCourse"]));
}
__count++;
}
}

void DatabaseManager::ClearData(){
classroomList.clear();
}

void DatabaseManager::displayDatabase(){
for(auto i:classroomList){
i.displayClassroom();
}
}
32 changes: 32 additions & 0 deletions src/DatabaseManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#ifndef DATABASE_H
#define DATABASE_H

#include <vector>
#include <iostream>
#include <fstream>

#include "Classroom.h"
#include "nlohmann/json.hpp"

using namespace std;
using namespace nlohmann;

class DatabaseManager {
private:
vector<Classroom> classroomList;

public :
void addClassroom(Classroom);
Classroom getClassroom(int);

void StoreData();
void LoadData();

void ClearData();

void displayDatabase();

};


#endif // !DATABASE_H
161 changes: 161 additions & 0 deletions src/Student.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
#include "Student.h"

ArtStudent::ArtStudent(string myName, int citizenship, int religion, int environmental, int myart){
id = time(0) + randint(-10, 10);
name = myName;
studentMajor = art;

citizenshipScore = citizenship;
religionScore = religion;
environmentalScore = environmental;
artScore = myart;
}

ArtStudent::ArtStudent(int myid, string myName, int citizenship, int religion, int environmental, int myart){
id = myid;
name = myName;
studentMajor = art;

citizenshipScore = citizenship;
religionScore = religion;
environmentalScore = environmental;
artScore = myart;
}

LiteratureStudent::LiteratureStudent(string myName, int citizenship, int religion, int environmental, int myliterature){
id = time(0) + randint(-10, 10);
name = myName;
studentMajor = literature;

citizenshipScore = citizenship;
religionScore = religion;
environmentalScore = environmental;
literatureScore = myliterature;
}

LiteratureStudent::LiteratureStudent(int myid, string myName, int citizenship, int religion, int environmental, int myliterature){
id = myid;
name = myName;
studentMajor = literature;

citizenshipScore = citizenship;
religionScore = religion;
environmentalScore = environmental;
literatureScore = myliterature;
}

MedicalStudent::MedicalStudent(string myName, int citizenship, int religion, int environmental, int mymedical){
id = time(0) + randint(-10, 10);
name = myName;
studentMajor = art;

citizenshipScore = citizenship;
religionScore = religion;
environmentalScore = environmental;
medicalScore = mymedical;
}

MedicalStudent::MedicalStudent(int myid, string myName, int citizenship, int religion, int environmental, int mymedical){
id = myid;
name = myName;
studentMajor = art;

citizenshipScore = citizenship;
religionScore = religion;
environmentalScore = environmental;
medicalScore = mymedical;
}

string Student::getStudentMajor(){
string mymajor[] = {"art", "literature", "medical"};

return mymajor[studentMajor];
}

int Student::getCitizenshipScore(){
return citizenshipScore;
}

int Student::getEnvironmentalScore(){
return environmentalScore;
}

int Student::getReligionScore(){
return religionScore;
}

int ArtStudent::getMajorCourseScore(){
return artScore;
}

int LiteratureStudent::getMajorCourseScore(){
return literatureScore;
}

int MedicalStudent::getMajorCourseScore(){
return medicalScore;
}


// json Student::asJSON(){
// // json data;

// // data["identifier"]["id"] = id;
// // data["identifier"]["name"] = name;

// // data["scores"]["citizenship"] = citizenshipScore;
// // data["scores"]["religion"] = religionScore;
// // data["scores"]["environmental"] = environmentalScore;


// // return data;
// };

json ArtStudent::asJSON(){
json data;

data["identifier"]["id"] = id;
data["identifier"]["name"] = name;
data["identifier"]["major"] = getStudentMajor(); // enum

data["scores"]["citizenship"] = citizenshipScore;
data["scores"]["religion"] = religionScore;
data["scores"]["environmental"] = environmentalScore;

data["scores"]["majorCourse"] = artScore;

return data;
}

json LiteratureStudent::asJSON(){
json data;

data["identifier"]["id"] = id;
data["identifier"]["name"] = name;
data["identifier"]["major"] = getStudentMajor(); // enum


data["scores"]["citizenship"] = citizenshipScore;
data["scores"]["religion"] = religionScore;
data["scores"]["environmental"] = environmentalScore;

data["scores"]["majorCourse"] = literatureScore;

return data;
}

json MedicalStudent::asJSON(){
json data;

data["identifier"]["id"] = id;
data["identifier"]["name"] = name;
data["identifier"]["major"] = getStudentMajor(); // enum

data["scores"]["citizenship"] = citizenshipScore;
data["scores"]["religion"] = religionScore;
data["scores"]["environmental"] = environmentalScore;

data["scores"]["majorCourse"] = medicalScore;

return data;
}
Loading