Skip to content

Instantly share code, notes, and snippets.

@dhiyaulhaqZA
Created May 21, 2017 16:23
Show Gist options
  • Save dhiyaulhaqZA/ee67ef456997c808bcae30530a0799a1 to your computer and use it in GitHub Desktop.
Save dhiyaulhaqZA/ee67ef456997c808bcae30530a0799a1 to your computer and use it in GitHub Desktop.
Code Challange
/**
* Created by dhiyaulhaqza on 5/21/17.
*/
/*
Pak Amir adalah orang terpandang didesanya yang memiliki hobi membaca.
Dirumahnya tersimpan ratusan koleksi buku.
Supaya bermanfaat, Pak Amir membuat perpustakaan pribadi dan warga sekitar boleh meminjam.
Perpustakaan tersebut disambut sangat baik oleh warga sekitar.
Untuk mengelola administrasi peminjaman, Pak Amir mempekerjakan dua orang anak buah yaitu Wildan dan Tuti.
Wildan bertanggung jawab mengelola pendaftaran dan memverifikasi anggota perpustakaan.
Sedangkan Tuti berperan sebagai manager transaksi peminjaman yang tugasnya adalah mencatat setiap transaksi peminjaman.
Supaya diakui sebagai anggota perpustakaan, seseorang harus mendaftarkan diri kepada Wildan dengan mencantumkan nama dan nomor telepon.
Wildan berhak melakukan verifikasi setiap pengunjung perpustakaan, memastikan bahwa orang tersebut sudah terdaftar sebagai anggota.
Setelah resmi menjadi anggota, seseorang boleh meminjam kapanpun dengan syarat hanya boleh meminjam satu buah buku dalam sekali transaksi.
Caranya, orang tersebut harus datang ke Tuti dengan membawa satu buah buku yang akan dipinjam.
Selanjutnya Tuti akan memastikan bahwa orang tersebut tidak sedang meminjam buku lain.
Kalau diketauhi ternyata masih memiliki pinjaman, maka seseorang tidak diperbolehkan meminjam buku lagi.
Sebaliknya, jika statusnya tidak sedang meminjam maka Tuti akan mencatat dalam buku transaksi peminjaman.
Dalam sebuah sistem, seorang pengunjung direpresentasikan dengan `Person`.
Peran Wildan direpresentasikan dengan `AuthManager` sedangkan peran Tuti direpresentasikan dengan `LoanManager`.
*/
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
class Person{
private:
string name;
string phoneNumber;
bool mIsVerified;
public:
Person(string name, string phoneNumber){
this -> name = name;
this -> phoneNumber = phoneNumber;
};
string getName(){
return name;
};
string getPhoneNumber(){
return phoneNumber;
}
void setAsVerifiedPerson(){
mIsVerified = true;
};
bool isVerified(){
return mIsVerified;
};
bool operator <(const Person& rhs) const{
return this->name < rhs.name;
};
};
class AuthManager {
private:
set<Person> persons;
public:
void registering(Person person){
persons.insert(person);
};
void verifiyingPerson(Person& personTobeVerify){
if (isRegistered(personTobeVerify))
{
personTobeVerify.setAsVerifiedPerson();
}
};
bool isRegistered(Person person){
return persons.find(person) != persons.end();
};
};
class Book {
private:
string title;
string author;
public:
Book(string title, string author){
this -> title = title;
this -> author = author;
};
string getTitle(){
return title;
}
string getAuthor(){
return author;
}
bool operator <(const Book& rhs) const{
return this->title < rhs.title;
}
};
class LoanManager{
private:
map<Person,Book> loanHistory;
public:
bool borrowed(Person person, Book book){
bool isAllow = isAllowed(person);
if(isAllow) {
loanHistory.insert(make_pair(person,book));
} return isAllow;
};
bool isAllowed(Person person){
return (loanHistory.find(person) == loanHistory.end()) && person.isVerified();
};
};
int main(){
//=======================================================
// BAGIAN 1 : POIN 30
//=======================================================
cout<<"===================BAGIAN 1 (30)==========================="<<endl;
AuthManager authManager;
LoanManager loanManager;
Person parjono = Person("Parjono","08245108573");
Person sulaiman = Person("Sulaiman","085647284634");
Person triyono = Person("Triyono","081723957392");
Person udin = Person("Udin","089923833392");
cout<<"person 1 : "<< parjono.getName()<<" , "<< parjono.getPhoneNumber() <<endl;//result : parjono
cout<<"person 2 : "<< sulaiman.getName()<<" , "<< sulaiman.getPhoneNumber() <<endl;//result : sulaiman
cout<<"person 3 : "<< triyono.getName()<<" , "<< triyono.getPhoneNumber() <<endl;//result : triyono
cout<<"person 4 : "<< udin.getName()<<" , "<< udin.getPhoneNumber() <<endl;//result : udin
cout<<"----------------------------------------------"<<endl;
Book pemrogramanAndroid = Book("Pemrograman Android","Gunawan S.");
Book dataMining = Book("Data Mining","Akbarul Huda");
Book pengantarSistemCerdas = Book("Pengantar Sistem Cerdas","Arif Akbarul");
Book robotikaMenggunakanArduino = Book("Robitika Menggunakan Arduino","Nabila Hafsya Z.");
Book mahirPemrogramanWeb = Book("Mahir Pemrograman Web","Hafsya Z.");
cout<<"book 1: "<<pemrogramanAndroid.getTitle()<<" , "<<pemrogramanAndroid.getAuthor()<<endl;
cout<<"book 2: "<<dataMining.getTitle()<<" , "<<dataMining.getAuthor()<<endl;
cout<<"book 3: "<<pengantarSistemCerdas.getTitle()<<" , "<<pengantarSistemCerdas.getAuthor()<<endl;
cout<<"book 4: "<<robotikaMenggunakanArduino.getTitle()<<" , "<<robotikaMenggunakanArduino.getAuthor()<<endl;
cout<<"book 5: "<<mahirPemrogramanWeb.getTitle()<<" , "<<mahirPemrogramanWeb.getAuthor()<<endl;
cout<<"----------------------------------------------"<<endl;
/*
=======================================================
BAGIAN 2 : POIN 30
Keterangan nilai status peminjaman :
true(1) = valid/verified
false(0) = not valied/not verified
=======================================================
*/
cout<<"===================BAGIAN 2 (30)==========================="<<endl;
cout<<"status verifikasi "<<parjono.getName()<<" : "<<parjono.isVerified()<<endl;//result:0
cout<<"status verifikasi "<<sulaiman.getName()<<" : "<<sulaiman.isVerified()<<endl;//result:0
cout<<"status verifikasi "<<triyono.getName()<<" : "<<triyono.isVerified()<<endl;//result:0
cout<<"status verifikasi "<<udin.getName()<<" : "<<udin.isVerified()<<endl;//result:0
cout<<"----------------------------------------------"<<endl;
//parjono, sulaiman, dan triyono mendaftarkan diri sebagai anggota
authManager.registering(parjono);
authManager.registering(sulaiman);
authManager.registering(triyono);
/*
beberapa hari kemudian parjono ingin meminjam buku. Wildan harus memastikan
bahwa parjono dan sulaiman adalah benar-benar anggota perpustakaan.
*/
authManager.verifiyingPerson(parjono);
authManager.verifiyingPerson(sulaiman);
authManager.verifiyingPerson(udin);
cout<<"status verifikasi "<<parjono.getName()<<" : "<<parjono.isVerified()<<endl;//result:1
cout<<"status verifikasi "<<sulaiman.getName()<<" : "<<sulaiman.isVerified()<<endl;//result:1
cout<<"status verifikasi "<<triyono.getName()<<" : "<<triyono.isVerified()<<endl;//result:0
cout<<"status verifikasi "<<udin.getName()<<" : "<<udin.isVerified()<<endl;//result:0
cout<<"----------------------------------------------"<<endl;
/*
=======================================================
BAGIAN 3 : POIN 40
Keterangan nilai status peminjaman :
true(1) = berhasil
false(0) = gagal
=======================================================
*/
cout<<"===================BAGIAN 3 (40)==========================="<<endl;
//parjono meminjam buku Pemrograman android.
bool result1 = loanManager.borrowed(parjono,pemrogramanAndroid);
cout<<"status transaksi 1 peminjaman "<<result1<<endl;//result:1
//beberapa hari kemudian parjono pinjam buku yang lain, namun buku yg pertama belum dikembalikan.
bool result2 = loanManager.borrowed(parjono,dataMining);
cout<<"status transaksi 2 peminjaman "<< result2 <<endl;//result:0
//pada hari yg sama, Sulaiman juga meminjam buku
bool result3 = loanManager.borrowed(sulaiman,mahirPemrogramanWeb);
cout<<"status transaksi 3 peminjaman "<< result3 <<endl;//result:1
//tiba-tiba ada Triyono yg terburu2 juga ingin meminjam buku, padahal belum diverifikasi oleh Wildan
bool result4 = loanManager.borrowed(triyono,pengantarSistemCerdas);
cout<<"status transaksi 4 peminjaman "<< result4 <<endl;//result:0
//begitu juga dengan Udin, belum resmi menjadi anggota, tapi langsung ingin pinjam buku
bool result5 = loanManager.borrowed(udin,pengantarSistemCerdas);
cout<<"status transaksi 5 peminjaman "<< result5 <<endl;//result:0
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment