Skip to content

Instantly share code, notes, and snippets.

@rizqyhi
Last active May 22, 2017 15:54
Show Gist options
  • Save rizqyhi/770129be86e706c0bcc251489fb94c72 to your computer and use it in GitHub Desktop.
Save rizqyhi/770129be86e706c0bcc251489fb94c72 to your computer and use it in GitHub Desktop.
Pak Amir punya perpus...
<?php
/*
21 May 2017
created by Arif Akbarul Huda.
PENGANTAR
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`.
*/
/**
* @rizqyhi
*/
class Person
{
private $name;
private $phone;
private $isVerified = false;
public function __construct($name, $phone)
{
$this->name = $name;
$this->phone = $phone;
}
public function getName()
{
return $this->name;
}
public function getPhoneNumber()
{
return $this->phone;
}
public function setAsVerifiedPerson()
{
$this->isVerified = true;
}
public function isVerified()
{
return $this->isVerified;
}
}
class AuthManager
{
private $members = [];
public function registering(Person $person)
{
$this->members[$person->getName()] = $person;
}
public function verifiyingPerson(Person $personTobeVerify)
{
if ($this->isRegistered($personTobeVerify))
$this->members[$personTobeVerify->getName()]->setAsVerifiedPerson();
}
public function isRegistered(Person $person)
{
return isset($this->members[$person->getName()]);
}
}
class Book
{
private $title;
private $author;
public function __construct($title, $author)
{
$this->title = $title;
$this->author = $author;
}
public function getTitle()
{
return $this->title;
}
public function getAuthor()
{
return $this->author;
}
}
class LoanManager
{
private $loanHistory;
public function borrowed(Person $person, Book $book)
{
if ($this->isAllowed($person)) {
$this->loanHistory[$person->getName()] = $book;
return 1;
}
return 0;
}
public function isAllowed(Person $person)
{
return $person->isVerified() && empty($this->loanHistory[$person->getName()]);
}
}
echo "===================BAGIAN 1 (30)===========================\n";
$authManager = new AuthManager;
$loanManager = new LoanManager;
$parjono = new Person("Parjono", "08245108573");
$sulaiman = new Person("Sulaiman", "085647284634");
$triyono = new Person("Triyono", "081723957392");
$udin = new Person("Udin", "089923833392");
printf("person 1 : %s, %s\n", $parjono->getName(), $parjono->getPhoneNumber());
printf("person 2 : %s, %s\n", $sulaiman->getName(), $sulaiman->getPhoneNumber());
printf("person 3 : %s, %s\n", $triyono->getName(), $triyono->getPhoneNumber());
printf("person 4 : %s, %s\n", $udin->getName(), $udin->getPhoneNumber());
echo "----------------------------------------------\n";
$pemrogramanAndroid = new Book("Pemrograman Android", "Gunawan S.");
$dataMining = new Book("Data Mining", "Akbarul Huda");
$pengantarSistemCerdas = new Book("Pengantar Sistem Cerdas", "Arif Akbarul");
$robotikaMenggunakanArduino = new Book("Robitika Menggunakan Arduino", "Nabila Hafsya Z.");
$mahirPemrogramanWeb = new Book("Mahir Pemrograman Web", "Hafsya Z.");
printf("book 1: %s, %s\n", $pemrogramanAndroid->getTitle(), $pemrogramanAndroid->getAuthor());
printf("book 2: %s, %s\n", $dataMining->getTitle(), $dataMining->getAuthor());
printf("book 3: %s, %s\n", $pengantarSistemCerdas->getTitle(), $pengantarSistemCerdas->getAuthor());
printf("book 4: %s, %s\n", $robotikaMenggunakanArduino->getTitle(), $robotikaMenggunakanArduino->getAuthor());
printf("book 5: %s, %s\n", $mahirPemrogramanWeb->getTitle(), $mahirPemrogramanWeb->getAuthor());
echo "----------------------------------------------\n";
echo "===================BAGIAN 2 (30)===========================\n";
printf("status verifikasi %s : %d\n", $parjono->getName(), $parjono->isVerified());
printf("status verifikasi %s : %d\n", $sulaiman->getName(), $sulaiman->isVerified());
printf("status verifikasi %s : %d\n", $triyono->getName(), $triyono->isVerified());
printf("status verifikasi %s : %d\n", $udin->getName(), $udin->isVerified());
echo "----------------------------------------------\n";
//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);
printf("status verifikasi %s : %d\n", $parjono->getName(), $parjono->isVerified()); //result:1
printf("status verifikasi %s : %d\n", $sulaiman->getName(), $sulaiman->isVerified()); //result:1
printf("status verifikasi %s : %d\n", $triyono->getName(), $triyono->isVerified()); //result:0
printf("status verifikasi %s : %d\n", $udin->getName(), $udin->isVerified()); //result:0
echo "----------------------------------------------\n";
echo "===================BAGIAN 3 (40)===========================\n";
//parjono meminjam buku Pemrograman android.
$result1 = $loanManager->borrowed($parjono, $pemrogramanAndroid);
printf("status transaksi 1 peminjaman %d\n", $result1);//result:1
//beberapa hari kemudian parjono pinjam buku yang lain, namun buku yg pertama belum dikembalikan.
$result2 = $loanManager->borrowed($parjono, $dataMining);
printf("status transaksi 2 peminjaman %d\n", $result2);//result:0
//pada hari yg sama, Sulaiman juga meminjam buku
$result3 = $loanManager->borrowed($sulaiman, $mahirPemrogramanWeb);
printf("status transaksi 3 peminjaman %d\n", $result3);//result:1
//tiba-tiba ada Triyono yg terburu2 juga ingin meminjam buku, padahal belum diverifikasi oleh Wildan
$result4 = $loanManager->borrowed($triyono, $pengantarSistemCerdas);
printf("status transaksi 4 peminjaman %d\n", $result4);//result:0
//begitu juga dengan Udin, belum resmi menjadi anggota, tapi langsung ingin pinjam buku
$result5 = $loanManager->borrowed($udin, $pengantarSistemCerdas);
printf("status transaksi 5 peminjaman %d\n", $result5);//result:0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment