Saturday, December 24, 2016

FInal Project Vending Machine

Deskripsi Perancangan Sistem


1.      Proses Simulasi Beli Barang 
Disinilah psroses simulasi dimulai, system akan berjalan. Simulasi menggunakan pemrograman web.
2.      Pilih Barang 
Setelah barang dipilih, proses selanjutnya adalah memasukkan ID E-Money. Barang yang kita pilih disertai dengan kode.
      3.      Masukkan ID E-Money
      Pada proses ini , ID dimasukkan agar bisa melanjutkan ke proses selanjutnya.
4.      Ambil Barang
Jika jumlah saldo E-Money yang dimasukkan sesuai, proses akan berhasil. Dan barang yang dipilih akan keluar.
5.      Cek Barang
Proses mengecek barang dapat dilakuakan, karena simulasi vending machine ini menggunakan database.
6.      Restock Barang 
Jumlah barang juga dapat diatur di database, pada tampilan vending machine terdapat jumlah barang yang akan berkurang jika kita melakukan transaksi pembelian terhadap barang yang kita pilih.
     7. Login Petugas
     Sebelum Petugas bisa mengecek atau mengisi ulang barang, harus login terlebih dahulu

Use Case Diagram



 Sequence Diagram

     1.        Beli Barang

          2.       Pilih Barang


               3.       Isi Ulang Barang

        4.      Cek Barang

        5.       Login



Class Diagram


Component Diagram






Monday, November 28, 2016

Mediator Pattern

Mediator Pattern

Definisi
Mediator Pattern mendefinisikan sebuah objek yang mengontrol bagaimana satu set objek berinteraksi. Pattern ini termasuk dalam kategori behavioral karena dapat mengubah perilaku program yang berjalan.
Sebuah program biasanya terdiri dari sejumlah kelas. Jadi logika dan perhitungan didistribusikan diantara kelas-kelas ini. Dikarenakan oleh lebih banyak kelas yang dikembangkan di dalam program, terutama selama pemeliharaan, masalah komunikasi antara kelas-kelas ini dapat menjadi lebih kompleks. Hal ini membuat program lebih sulit untuk membaca dan memelihara. Selain itu, hal ini dapat membuat sulit untuk mengubah program, karena setiap perubahan dapat mempengaruhi kode dalam beberapa kelas lainnya.
Dengan menggunakan pola mediator, komunikasi antara objek dirumuskan dengan objek mediator. Suatu objek tidak lagi berkomunikasi secara langsung dengan satu sama lain, melainkan berkomunikasi melalui mediator. Jadi, kelas klien dapat menggunakan mediator untuk mengirim pesan ke klien lain, dan dapat menerima pesan dari klien lain melalui kelas mediator. Hal ini mengurangi ketergantungan antara komunikasi objek, sehingga menurunkan coupling.
Jadi, Mediator Pattern digunakan untuk mengurangi kompleksitas komunikasi antara beberapa objek atau kelas. Pattern ini menyediakan kelas mediator yang biasanya menangani semua komunikasi antara kelas yang berbeda dan mendukung pemeliharaan kode secara mudah dengan loose coupling.
Implementasi 
Contoh sederhana implementasi Mediator Pattern yaitu pada chat room, dimana beberapa user dapat mengirim pesan ke chat room dan chat room bertanggung jawab untuk menampilkan pesan ke seluruh user.
Langkah pertama adalah membuat 2 kelas, yaitu ChatRoom dan User. Objek User akan menggunakan metode ChatRoom untuk membagikan pesan. Kelas MediatorPattern akan menggunakan Objek User untuk menampilkan komunikasi diantara mereka.
class-diagram-chatroom
Class Diagram Chat Room
Berikut ini merupakan Source Code dari implementasi Mediator Pattern pada chat room dengan menggunakan Java.
1. Membuat kelas mediator (ChatRoom.java)
import java.util.Date;

public class ChatRoom {
   public static void showMessage(User user, String message){
      System.out.println(new Date().toString() + " [" + user.getName() + "] : " + message);
   }
}

2. Membuat kelas user (User.java)
public class User {
   private String name;

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public User(String name){
      this.name  = name;
   }

   public void sendMessage(String message){
      ChatRoom.showMessage(this,message);
   }
}

3. Gunakan objek User untuk menampilkan komunikasi diantara mereka (MediatorPattern.java)
public class MediatorPattern {
   public static void main(String[] args) {
      User robert = new User("Robert");
      User john = new User("John");

      robert.sendMessage("Hi! John!");
      john.sendMessage("Hello! Robert!");
   }
}

Output Implementasi dan Cara Menjalankan






Contoh Penggunaan Software – Industri
Selain implementasi pada chat room, contoh penggunaan Mediator Pattern dalam bidang industri adalah pada industri penerbangan, yaitu bandara. Menara kontrol di bandara mengaplikasikan Mediator Pattern dalam mengontrol penerbangan secara baik. Pilot pesawat yang hendak berangkat maupun mendarat di bandara akan berkomunikasi dengan menara kontrol daripada berkomunikasi dengan pesawat yang lain. Kendala seperti pesawat mana yang boleh untuk lepas landas maupun mendarat ditentukan dan dikontrol oleh menara kontrol.
mediator_example
 Penggunaan Mediator Pattern pada Menara Kontrol Bandara
Referensi
  1. https://en.wikipedia.org/wiki/Mediator_pattern
  2. https://www.tutorialspoint.com/design_pattern/mediator_pattern.htm
  3. https://sourcemaking.com/design_patterns/mediator

Monday, October 24, 2016

Coffee Machine

#include <stdio.h>
#include <string.h>
#include <assert.h>

// We make Selection a class:
// Provides conversions to and from ints and strings.
class Selection
{
public:
enum {BLACK, WHITE, SWEET, BOTH, BOUILLION, NUM_SELECT};
Selection(int c)
{
assert(0 <= c && c < NUM_SELECT);
choice = c; }
Selection(const char* s)
{
for (int i = 0; i < NUM_SELECT; ++i)
if (strcmp(text[i], s) == 0)
{
choice = i;
return;
}
throw "Selection: Tidak ada dalam pilihan";
}
const char* toString() const {return text[choice];}
int priceOf() const {return price[choice];}
operator int() const {return choice;}

private:
int choice;
static int price[NUM_SELECT];
static const char* text[NUM_SELECT];
};

// Static data for Selection class:
int Selection::price[Selection::NUM_SELECT] = {35,35,35,35,25};
const char* Selection::text[Selection::NUM_SELECT] =
{
"black", "white", "sweet", "both", "boullion"
};

// CashBox class:
// Tracks the amount of credit.
class CashBox
{
public:
CashBox() {credit = 0;}
void deposit(int amount)
{
credit += amount; printf("\tCashBox: Depositing %d cents.",amount);
printf("\tYou now have %d cents credit.\n",credit);
}
void returnCoins()
{
printf("\tCashBox: Returning %d cents\n",credit);
credit = 0;
}
bool haveYou(int amount) const {return credit >= amount;}
void deduct(int amount)
{
credit -= amount;
returnCoins();
}
private:
int credit;
};

// Mixer class:
// Doesn't do much!
class Mixer
{
public: void make(const Selection& s)
{
printf("\tMixer: Membuat %s\n", s.toString()); }
};

// Selector class:
// Checks credit; Dispenses product.
class Selector
{
public:
Selector(CashBox* pC, Mixer* pM)
{
pCashBox = pC;
pMixer = pM;
}
void select(const Selection& s)
{
int amount = s.priceOf();
if (pCashBox->haveYou(amount))
{
pMixer->make(s);
pCashBox->deduct(amount);
}
else puts("\tSelector: Uang anda tidak mencukupi");
}
private:
CashBox* pCashBox;
Mixer* pMixer;
};
// CoffeeMachine class:
// Owns CashBox, Mixer, and Selector.
class CoffeeMachine
{ public: CoffeeMachine()
{
pCashBox = new CashBox;
pMixer = new Mixer;
pSelector = new Selector(pCashBox, pMixer);
}
bool doOneAction()
{
// Reads commands and executes them.
char line[16]; if (gets(line)) { char action[7];
sscanf(line, "%s", action);
if (strcmp(action, "insert") == 0)
{
int value;
sscanf(line, "%*s %d", &value);
pCashBox->deposit(value);
}
else if (strcmp(action,"select") == 0)
{
char choice[9];
sscanf(line, "%*s %s", choice);
pSelector->select(choice); }
else if (strcmp(action,"quit") == 0)
return false; return true;
}
else return false;
}
private:
CashBox* pCashBox;
Mixer* pMixer;
Selector* pSelector;
};
// Test program
main()
{
try
{ CoffeeMachine cm; while (cm.doOneAction()); }
catch (const char* s)
{
puts(s);
}
return 0;
}








ref : http://heim.ifi.uio.no/~mmo/generic/papers/coffee/Coffee-1.html

Monday, September 26, 2016

Use Case Diagram ATM dan Sequence



Di atas merupakan contoh Use Case Diagram sederhana dari sebuah ATM. 
sumber: ppt ppl tahun lalu & google

System Startup : 
Mesin atm sudah connect ke bank dan nasabah dapat memakai mesin tsb.

System Shutdown :
Sistem akan dimatikan ketika operator sudah memastikan bahwasanya tidak ada lagi nasabah yang menggunakan mesin ATM


Login : Di mana nasabah harus memasukkan kartu atm dan pin untuk nantinya terhubung ke session

Session  : 
Setelah kartu ATM berhasil dibaca dan nasabah memasukkan PIN maka akan muncul pesan INVALID PIN jika pin yang dimasukkan salah dan akan lanjut ke Transaksi

Transaksi : 
Transaksi yang dilakukan berupa Informasi Saldo,Transfer,Pembayaran,Tarik Tunai,dan Ganti PIN

Informasi Saldo :
informasi saldo merupakan suatu informasi pada rekening seorang nasabah terkait saldo yang ia miliki. 

Transfer : 
pada transaksi transfer terbagi menjadi dua yaitu transfer antar sesama bank atau transfer beda bank, jika transfer berbeda bank maka perlu dimasukkan kode bank
tujuan dan apabila tujuan nya antar sesama bank maka tidak perlu memasukkan kode bank, cukup memasukkan no rekening tujuan saja.

Pembayaran : 
terdapat beberapa menu lagi diantaranya (pembayaran tiket, voucher telpon, pendidikan, dll) silahkan memilih salah satu menu
yang tersedia pada menu pembayran, dan ketika transaksi selesai maka mesin akan mencetak nota sebagai bukti transaksi.

Tarik tunai  :  
proses untuk menarik uang, biasanya pada menu tampilan utama sudah tersedia jumlah uang yang ingin ditarik (100 ribu, 300 ribu, 1.5 juta)


Ganti pin : 
untuk mengganti PIN ATM sebelumnya kan dimintai memasukkan PIN yang lama untuk verifikasi lalu baru bisa mengubah menjadi PIN baru


Jika ditelusuri lebih lanjut sequencenya maka akan menjadi seperti ini :

System Startup :



Saat system startup maka operator akan menyalakan ATM kemudian sistem ATM bertugas mengambil data tunai nasabah tersebut sehingga harus melakukan koneksi ke Bank untuk mengambil datanya.

System Shutdown:

Operator mematikan mesin ATM dan juga meng-terminate koneksi ATM tersebut dengan Bank

Login dan Session :
session
Pada saat login, setelah kartu ATM dimasukkan maka nasabah diharuskan memasukkan PIN untuk lanjnut ke Session. Setelah PIN terbaca masuk ke Session maka nasabah baru bisa melakukan transaksi. Nasabah bisa melakukan transaksi lebih dari sekali, jika tidak maka kartu langsung dapat dikeluarkan

Transaksi :

Proses transaksi dapat dilakukan saat dapat pesan yang spesifik untuk melakukan proses selanjutnya dari nasabah lalu ATM akan menampilkan saldo yang diambil dari data Bank setelah nasabah melakukan transaksi yang terakhir dan mencetak resi. Kemudian yang terakhir, proses ini dapat diulang berkali-kali jadi nanti akan muncul pesan "ingin melakukan transaksi lain" "iya atau tidak". Jika Ya, maka nasabah dapat melakukan transaksi lain, jika Tidak, maka kartu akan dikeluarkan.


Tuesday, September 13, 2016

Use Case Diagram Air Conditioner

Use Case Diagram adalah salah satu contoh dari Unified Modelling Language atau disebut UML yang saat ini sedang kita pelajari.

Use Case Diagram sendiri berfungsi untuk menggambarkan suatu interaksi antara satu atau lebih aktor dengan suatu sistem yang akan dibuat.

Kali ini, kita akan menggunakan contoh Air Conditioner

Kira-kira ada 6 interaksi yang bisa terjadi pada ac umumnya dengan menggunakan remote control.

Friday, May 13, 2016

CI dengan Grocery Crud

Setelah kemarin sudah mencoba membuat web dengan Code Igniter, sekarang kita akan menggunakan plugin bernama Grocery Crud.

1. Pertama, download Grocery Crud di sini http://www.grocerycrud.com/downloads
pilih yang latest version saja.
Kemudian pindahkan satu-satu filenya sesuai dengan foldernya ke dalam folder web localhost yang diinginkan.

website_folder/ 
–––– application/ 
–––––––– config/ 
–––––––––––– autoload.php 
–––––––––––– ... 
–––––––––––– doctypes.php 
–––––––––––– foreign_chars.php 
–––––––––––– grocery_crud.php 
–––––––––––– ... 
–––––––– controllers/ 
–––––––––––– examples.php 
–––––––––––– index.html 
–––––––––––– welcome.php 
–––––––– libraries/ 
–––––––––––– grocery_crud.php 
–––––––––––– index.html 
–––––––– models/ 
–––––––––––– grocery_crud_model.php 
–––––––––––– index.html 
–––––––– views/ 
–––––––––––– example.php 
–––––––––––– index.html 
–––––––––––– welcome_message.php 
–––– assets/ 
–––––––– grocery_crud/ 
–––––––––––– css/ 
–––––––––––– js/ 
–––––––––––– texteditor/ 
–––––––––––– themes/ 
–––––––– uploads/ 
–––––––– index.html 

–––– system/ 
–––– user_guide/ 
–––– change_log.txt 
–––– example_database.sql 
–––– index.php 
–––– licence-grocery-crud.txt 
–––– license.txt

2. lalu pada database.php ubahlah sesuai nama dbms
 
$active_group = 'default';  
 $query_builder = TRUE;  
 $db['default'] = array(  
      'dsn'     => '',  
      'hostname' => 'localhost',  
      'username' => 'root',  
      'password' => '',  
      'database' => 'employees',  
      'dbdriver' => 'mysqli',  
      'dbprefix' => '',  
      'pconnect' => FALSE,  
      'db_debug' => (ENVIRONMENT !== 'production'),  
      'cache_on' => FALSE,  
      'cachedir' => '',  
      'char_set' => 'utf8',  
      'dbcollat' => 'utf8_general_ci',  
      'swap_pre' => '',  
      'encrypt' => FALSE,  
      'compress' => FALSE,  
      'stricton' => FALSE,  
      'failover' => array(),  
      'save_queries' => TRUE  

3. lalu buat controller baru pada folder controller
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');  
 class Main extends CI_Controller {  
   function __construct()  
   {  
     parent::__construct();  
     $this->load->database();  
   }  
   public function index()  
   {  
     echo "<h1>Hello World</h1>";  
     die();  
   }  
 }>

Nanti hasilnya akan keluar tulisan Hello World pada layar localhost

4.Kemudian buat tabel pada database
CREATE TABLE IF NOT EXISTS `employees` (  
  `employeeNumber` int(11) NOT NULL AUTO_INCREMENT,  
  `lastName` varchar(50) NOT NULL,  
  `firstName` varchar(50) NOT NULL,  
  `extension` varchar(10) NOT NULL,  
  `email` varchar(100) NOT NULL,  
  `officeCode` varchar(10) NOT NULL,  
  `file_url` varchar(250) CHARACTER SET utf8 NOT NULL,  
  `jobTitle` varchar(50) NOT NULL,  
  PRIMARY KEY (`employeeNumber`)  
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1703 ;  
 INSERT INTO `employees` (`employeeNumber`, `lastName`, `firstName`, `extension`, `email`, `officeCode`, `file_url`, `jobTitle`) VALUES  
 (1002, 'Murphy', 'Diane', 'x5800', 'dmurphy@classicmodelcars.com', '1', '', 'President'),  
 (1056, 'Patterson', 'Mary', 'x4611', 'mpatterso@classicmodelcars.com', '1', '', 'VP Sales'),  
 (1076, 'Firrelli', 'Jeff', 'x9273', 'jfirrelli@classicmodelcars.com', '1', '', 'VP Marketing'),  
 (1088, 'Patterson', 'William', 'x4871', 'wpatterson@classicmodelcars.com', '6', '', 'Sales Manager (APAC)'),  
 (1102, 'Bondur', 'Gerard', 'x5408', 'gbondur@classicmodelcars.com', '4', 'pdftest.pdf', 'Sale Manager (EMEA)'),  
 (1143, 'Bow', 'Anthony', 'x5428', 'abow@classicmodelcars.com', '1', '', 'Sales Manager (NA)'),  
 (1165, 'Jennings', 'Leslie', 'x3291', 'ljennings@classicmodelcars.com', '1', '', 'Sales Rep'),  
 (1166, 'Thompson', 'Leslie', 'x4065', 'lthompson@classicmodelcars.com', '1', '', 'Sales Rep'),  
 (1188, 'Firrelli', 'Julie', 'x2173', 'jfirrelli@classicmodelcars.com', '2', 'test-2.pdf', 'Sales Rep'),  
 (1216, 'Patterson', 'Steve', 'x4334', 'spatterson@classicmodelcars.com', '2', '', 'Sales Rep'),  
 (1286, 'Tseng', 'Foon Yue', 'x2248', 'ftseng@classicmodelcars.com', '3', '', 'Sales Rep'),  
 (1323, 'Vanauf', 'George', 'x4102', 'gvanauf@classicmodelcars.com', '3', '', 'Sales Rep'),  
 (1337, 'Bondur', 'Loui', 'x6493', 'lbondur@classicmodelcars.com', '4', '', 'Sales Rep'),  
 (1370, 'Hernandez', 'Gerard', 'x2028', 'ghernande@classicmodelcars.com', '4', '', 'Sales Rep'),  
 (1401, 'Castillo', 'Pamela', 'x2759', 'pcastillo@classicmodelcars.com', '4', '', 'Sales Rep'),  
 (1501, 'Bott', 'Larry', 'x2311', 'lbott@classicmodelcars.com', '7', '', 'Sales Rep'),  
 (1504, 'Jones', 'Barry', 'x102', 'bjones@classicmodelcars.com', '7', '', 'Sales Rep'),  
 (1611, 'Fixter', 'Andy', 'x101', 'afixter@classicmodelcars.com', '6', '', 'Sales Rep'),  
 (1612, 'Marsh', 'Peter', 'x102', 'pmarsh@classicmodelcars.com', '6', '', 'Sales Rep'),  
 (1619, 'King', 'Tom', 'x103', 'tking@classicmodelcars.com', '6', '', 'Sales Rep'),  
 (1621, 'Nishi', 'Mami', 'x101', 'mnishi@classicmodelcars.com', '5', '', 'Sales Rep'),  
 (1625, 'Kato', 'Yoshimi', 'x102', 'ykato@classicmodelcars.com', '5', '', 'Sales Rep'),  
 (1702, 'Gerard', 'Martin', 'x2312', 'mgerard@classicmodelcars.com', '4', '', 'Sales Rep');  

5.Lalu controller tadi yang sudah kita buat, tambahkan lagi datanya menjadi seperti ini
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');  
 class Main extends CI_Controller {  
   function __construct()  
   {  
     parent::__construct();  
     /* Standard Libraries of codeigniter are required */  
     $this->load->database();  
     $this->load->helper('url');  
     /* ------------------ */   
     $this->load->library('grocery_CRUD');  
   }  
   public function index()  
   {  
     echo "<h1>Hello World</h1>";  
     die();  
   }  
   public function employees()  
   {  
     $this->grocery_crud->set_table('employees');  
     $output = $this->grocery_crud->render();  
     echo "<pre>";  
     print_r($output);  
     echo "</pre>";  
     die();  
   }  
 }  

6.Kemudian, pada folder views tambahkan file ini
<!DOCTYPE html>  
 <html lang="en">  
 <head>  
   <meta charset="utf-8" />  
 <?php   
 foreach($css_files as $file): ?>  
   <link type="text/css" rel="stylesheet" href="<?php echo $file; ?>" />  
 <?php endforeach; ?>  
 <?php foreach($js_files as $file): ?>  
   <script src="<?php echo $file; ?>"></script>  
 <?php endforeach; ?>  
 <style type='text/css'>  
 body  
 {  
   font-family: Arial;  
   font-size: 14px;  
 }  
 a {  
   color: blue;  
   text-decoration: none;  
   font-size: 14px;  
 }  
 a:hover  
 {  
   text-decoration: underline;  
 }  
 </style>  
 </head>  
 <body>  
 <!-- Beginning header -->  
   <div>  
     <a href='<?php echo site_url('examples/offices_management')?>'>Offices</a> |   
     <a href='<?php echo site_url('examples/employees_management')?>'>Employees</a> |  
     <a href='<?php echo site_url('examples/customers_management')?>'>Customers</a> |  
     <a href='<?php echo site_url('examples/orders_management')?>'>Orders</a> |  
     <a href='<?php echo site_url('examples/products_management')?>'>Products</a> |   
     <a href='<?php echo site_url('examples/film_management')?>'>Films</a>  
   </div>  
 <!-- End of header-->  
   <div style='height:20px;'></div>   
   <div>  
     <?php echo $output; ?>  
   </div>  
 <!-- Beginning footer -->  
 <div>Footer</div>  
 <!-- End of Footer -->  
 </body>  
 </html>  


7.Pada file controller tadi, tambahkan ini
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');  
 class Main extends CI_Controller {  
   function __construct()  
   {  
     parent::__construct();  
     /* Standard Libraries of codeigniter are required */  
     $this->load->database();  
     $this->load->helper('url');  
     /* ------------------ */   
     $this->load->library('grocery_CRUD');  
   }  
   public function index()  
   {  
     echo "<h1>Welcome to the world of Codeigniter</h1>";//Just an example to ensure that we get into the function  
         die();  
   }  
   public function employees()  
   {  
     $this->grocery_crud->set_table('employees');  
     $output = $this->grocery_crud->render();  
     $this->_example_output($output);      
   }  
   function _example_output($output = null)  
   {  
     $this->load->view('our_template.php',$output);    
   }  
 }  


8.Kemudian, bukalah localhost tersebut maka tampilannya akan seperti ini


Fractal Tree