Senin, 01 Agustus 2022

Kebijakan Privasi Anterin Dong

 

Kebijakan Privasi

Kami menjaga privasi pelanggan dengan serius dan kami hanya akan mengumpulkan dan menggunakan informasi pribadi Anda seperti uraian di bawah ini.

Perlindungan data adalah hal yang menyangkut kepercayaan dan privasi Anda sangatlah penting bagi kami. Oleh karena itu, kami hanya akan menggunakan nama anda dan informasi lain yang berhubungan dengan Anda sesuai dengan kebijakan privasi ini. Kami hanya akan mengumpulkan informasi yang penting bagi kami dan kami hanya akan mengumpulkan beberapa informasi yang dibutuhkan untuk melakukan urusan dengan Anda.

Kami hanya akan menyimpan informasi Anda selama dibutuhkan diwajibkan oleh hukum atau selama informasi tersebut berhubungan dengan tujuan-tujuan yang ada saat informasi dikumpulkan.

Kebijakan privasi kami mengikuti kebijakan perundangan-undangan yang berlaku. Bila Anda memiliki komentar dan masukan, kami dengan senang hati menerimanya melalui alamat email kami di mathovonic96@gmail.com.

 

Pengumpulan Informasi Privasi secara Personal

Anterin Dong tidak menjual, menyebarkan atau memperdagangkan informasi pribadi milik pelanggan yang didapatkan online kepada pihak ketiga.

Informasi pribadi atau privasi yang dikumpulkan secara online hanya diperlihatkan dalam perusahaan kami dan hanya dipergunakan Anterin Dong dalam rangka pemberian layanan kepada Anda secara internal.

Saat Anda membuat akun Anterin Dong, informasi pribadi yang mungkin akan kami kumpulkan termasuk namun tidak terbatas pada:

Nama

Alamat Email

Nomor Telepon

KTP

Informasi privasi yang kami dapatkan dari Anda akan digunakan untuk:

Memberikan kepada Anda informasi yang berhubungan dengan produk-produk

Menjalankan proses pemesanan Anda dan untuk memberikan Anda pelayanan dan informasi yang ditawarkan oleh aplikasi kami dan yang Anda harapkan

Lebih dari itu, kami akan menggunakan informasi yang Anda berikan untuk urusan administrasi akun Anda dengan kami; untuk verifikasi dan mengelola transaksi keuangan yang berhubungan dengan pembayaran yang Anda buat secara online; mengaudit data yang diunduh dari website kami; memperbaiki susunan dan/atau isi dari halaman-halaman aplikasi kami dan menyesuaikannya dengan kebutuhan pengguna aplikasi; mengidentifikasi pengunjung aplikasi kami; melakukan riset mengenai data demografis pengguna aplikasi kami; mengirimkan Anda informasi yang kami anggap akan berguna untuk Anda yang Anda minta dari kami, termasuk informasi tentang produk-produk dan pelayanan-pelayanan kami, asalkan Anda telah mengindikasikan bahwa Anda tidak keberatan dihubungi mengenai hal-hal ini.

Bila anda mendaftar sebagai pengguna aplikasi Anterin Dong, kami juga akan menggunakan informasi pribadi Anda untuk mengirimkan kepada Anda bahan-bahan promosi atau pemasaran dari waktu ke waktu. Anda dapat berhenti berlangganan layanan kami kapan saja dengan menggunakan fungsi cabut subscription berhenti berlangganan di dalam bahan pemasaran elektronik.

Pembayaran yang Anda lakukan melalui aplikasi ini akan diproses oleh agen kami Anterin Dong. Anda harus memberikan kepada kami dan agen kami atau aplikasi ini informasi yang akurat dan tidak menyesatkan dan Anda harus selalu memperbarui dan memberitahukan kami bila ada perubahan.

Rincian pemesanan Anda akan kami simpan untuk alasan keamanan namun tidak akan bisa Anda dapatkan langsung dari kami. Namun, Anda dapat mengakses informasi tersebut dengan cara melakukan login ke akun Anda melalui aplikasi ini. Disini Anda dapat melihat rincian tentang pemesanan yang pernah Anda lakukan, pemesanan yang masih terbuka atau yang hendak dikirimkan. Anda juga bisa mengelola rincian alamat, informasi bank dan newsletter yang mungkin Anda berlangganan dengan. Anda setuju bahwa Anda menganggap akses data pribadi ini secara konfidensial adalah rahasia dan Anda tidak akan membiarkan pihak ketiga memiliki kemampuan untuk akses data pribadi tersebut tanpa ada izin. Kami tidak akan memiliki bertanggung jawab atas penyalahgunaan password kecuali penyalahgunaan tersebut adalah kelalaian kami.

Memperbarui Informasi Privasi Anda

Anda dapat memperbarui informasi Privasi Anda kapan saja dengan cara mengakses aplikasi Anterin Dong.

Keamanan Informasi Pribadi Anda

Anterin Dong memastikan bahwa informasi yang dikumpulkan akan disimpan dengan aman. Kami menyimpan informasi pribadi Anda dengan cara:

Membatasi akses ke dalam informasi pribadi Anda

Mengurus dan mengelola produk-produk teknologi kami untuk mencegah akses komputer yang tidak memiliki izin

Secara aman menghancurkan informasi pribadi Anda saat kami tidak lagi membutuhkannya untuk tujuan catatan retensi

 

Meminta akses lokasi saat menggunakan aplikasi

Saat menggunakan aplikasi, akan ada pemberitahuan aktivasi lokasi untuk keperluan tracking Anterin Dong dan pengguna saat pemesanan barang

Jika aplikasi tidak digunakan maka akses lokasi pada aplikasi secara otomatis akan mati

 

Penyingkapan Informasi Pribadi

Kami tidak akan membagikan informasi Anda dengan organisasi lain selain organisasi yang berkaitan dengan kami dan pihak ketiga yang bersangkutan dengan pengiriman barang-barang yang telah Anda beli dari aplikasi Anterin Dong. Dalam situasi yang dikecualikan, Anterin Dong mungkin akan membutuhkan Anda untuk menyingkapkan informasi pribadi Anda, termasuk saat dimana adanya sesuai perintah pengadilan atau undang-undang yang berlaku bukti bahwa penyingkapan informasi dapat mencegah ancaman hidup atau kesehatan, atau untuk kepentingan hukum. Anterin Dong memiliki komitmen untuk mematuhi the Privacy Act and the National Privacy Principles kebijakan perundang undangan yang berlaku.

Bila Anda percaya bahwa privasi Anda telah dilanggar oleh Anterin Dong, harap hubungi kami di mathovonic96@gmail.com dan kami akan menyelesaikan masalah tersebut.

Pengumpulan Data Komputer

Saat Anda mengunjungi Anterin Dong, server perusahaan kami akan mengumpulkan informasi yang smartphone Anda kirim saat Anda membuka aplikasi secara otomatis. Data ini mungkin akan termasuk:

Alamat IP Komputer Anda

Tipe HP Anda

Tracking Lokasi Anda saat ini

Waktu yang Anda habiskan di halaman-halaman tersebut, barang dan informasi yang dicari di aplikasi kami, waktu akses dan tanggal, dan statistik lainnya.

Informasi yang dikumpulkan akan digunakan untuk analisa dan evaluasi untuk membantu kami memperbaiki aplikasi kami, dan pelayanan-pelayanan dan produk-produk yang kami beri. Data-data ini tidak akan digunakan berhubungan dengan informasi pribadi lainnya.

Sebagai bagian di atas, Anterin Dong dapat menggunakan fitur Google Analytics berdasarkan pada Tampilan Iklan, termasuk (walaupun tidak terbatas) pada hal berikut: Remarketing, Google Display Network Impression Reporting, integrasi DoubleClick Campaign Manager, dan Demografi Google Analytics serta Bunga Pelaporan. Dengan menggunakan Google Ads Setting (https://www.google.com/settings/ads) , Anda dapat memilih Display Advertising dari Google Analytics dan menyesuaikan iklan Jaringan Display Google.

Anterin Dong juga menggunakan Remarketing dengan Google Analytics untuk mengiklankan secara online; vendor pihak ketiga , termasuk Google, dapat menampilkan iklan online Anterin Dong di Internet. Anterin Dong dan vendor pihak ketiga, termasuk Google, menggunakan cookies pihak pertama (seperti cookie Google Analytics) dan cookies pihak ketiga (seperti cookies DoubleClick ) bersama-sama untuk menginformasikan, mengoptimalkan, dan melayani iklan berdasarkan kunjungan terakhir pengunjung aplikasi Anterin Dong, serta melaporkan bagaimana hasil dari tayangan iklan, kegunaan lain dari layanan iklan, dan interaksi dengan tayangan iklan tersebut dan layanan iklan yang terkait dengan kunjungan ke Anterin Dong.

Perubahan dalam Kebijakan Privasi

Anterin Dong memiliki hak untuk merubah dan memodifikasi kebijakan privasi kapan saja. Rencana perubahan kebijakan privasi tersebut akan dipublikasikan di website kami 7 (tujuh) hari sebelum diberlakukan.

Keluhan mengenai Pelanggaran Hak Privasi

Bila Anda tidak puas dengan cara kami menangani pertanyaan atau keluhan Anda, harap langsung hubungi kami di mathovonic96@gmail.com

Kamis, 19 Oktober 2017

PPL C UML Diagrams - Library Management System (tugas 2)

(18/10/17) Rabu ini bertepatan dengan deadline pengumpulan tugas individu Diagram UML - Sistem Manajemen Perpustakaan meliputi:
a. Use Case Diagram
b. Activity Diagram
c. Deskripsi alur normal, alur alternatif, dan eksepsi (jika ada) untuk kejadian Issuing Book dan Returning Book
d. Class Diagram
e. Sequence Diagram untuk Issuing Book dan Returning Book.

***=================================================================*** 
 

TM08 KPL Kosong

(18/10/17) Dikarenakan dosen kelas kami Pak Rizky sedang ada tugas dinas ke luar kota maka kelas minggu ini kosong dan pertemuan selanjutnya adalah minggu depan. Mengenai kelas pengganti akan diinformasikan kembali minggu depan.

Senin, 16 Oktober 2017

TM08 SIG

(16/10/17) Kelas SIG hari ini mempelajari Geoprocessing. Mempelajari beragam peta tematik Surabaya. Tugas mencari topik untuk mengimplementasikan Geoprocessing. Contoh di kelas: Mencari lahan yang cocok untuk menanam coklat, menggunakan beberapa peta tematik

TM08 PPL C

(16/10/17) UTS Tulis untuk kelas C, 6 soal waktu 75 menit dimulai pukul 08.00

TM07 Robotik

(13/10/17) Seperti yang sudah dijadwalkan, hari ini adalah demo untuk Tugas 1 - Line Follower.
Demo dilaksanakan di dalam kelas bergantian antar kelompok.
Kelompok saya (Kelompok 8, saya, Chris, Lucha, Stone, Wida) kebagian maju pertama (setelah kalah hompimpa dan suit sama kelompok-kelompok lain:" gacha ampas). Video demo robot menyusul.

TM07 TKTI :) (masih bertahan)

(12/10/17) Kelas hanya dihadiri oleh asdos (mahasiswa S2) dikarenakan Bu Licha berhalangan hadir (Prof Riyan juga tidak hadir).
Diumumkan bahwa UTS untuk kelas TKTI bersifat takehome test :))) hmmm baca aja sendiri yaaa :)))


UTS ini dikerjakan berkelompok sesuai kelompok domain yang dibagikan sejak pertemuan pertama TKTI. Tidak untungnya, kelompok Production yang tersisa hanyalah saya seorang dari 5 atau 6 mahasiswa entah saya lupa :))) yang lain sudah gugur (read: ngedrop).

TM07 Techno40

(12/10/17) Kelas kali ini mengerjakan resume yang akan diambil sebagai nilai UTS oleh Pak Wardoyo.
Penugasan resume: setiap mahasiswa membuat resume yang membahas poin-poin penting (setidaknya 3 poin) dari kuliah tamu TM06 (07/10/17) serta mengaitkannya dengan usulan ide individu yang telah dikumpulkan.

TM07 Viskom

(12/10/17) Viskom pertemuan ke-7 membahas integrasi MATLAB dan OpenCV

TM07 KPL

(11/10/17) Pada pertemuan kali ini, seperti yang sudah disepakati sebelumnya. Kelompok 9 (kelompokku sendiri) dan Kelompok 1 kebagian giliran untuk presentasi mengenai Design Pattern. Kelompok 9 mempresentasikan bab Command Pattern. Dan Kelompok 1 mempresentasikan bab Observer Pattern.

Sabtu, 14 Oktober 2017

TM07 SIG

(09/10/17) Pertemuan kali ini membahas tugas 1 digitizing, penugasan individu yang diberikan pada pertemuan sebelumnya. Disini Pak Hari menjelaskan bagian bagian tugas yang masih perlu revisi. Ditambah dengan penugasan kelanjutan dari tugas 1, yakni Map Composing, untuk menghasilkan peta jadi yang siap cetak.

TM07 PPL C

(09/10/17) Tidak ada pertemuan tatap muka di kelas, diganti dengan penugasan individu, sbb:
1. Studi kasus Library seperti di link www.programsformca.com/2012/03/uml-diagrams-library-mgmt-system.html
2. Gunakan PowerDesigner untuk membuat diagram pemodelan berikut:
a. Use Case Diagram
b. Activity Diagram
c. Buatlah deskripsi alur normal, alur alternatif, dan eksepsi (jika ada) untuk kejadian Issuing Book dan Returning Book
d. Class Diagram
e. Sequence Diagram untuk Issuing Book dan Returning Book.
3. Class Diagram dan Sequence Diagram silahkan dimodifikasi sendiri sesuai dengan alur yang dibuat di jawaban 2c.
4. File pemodelan dan alur (.doc/,pdf) jadikan ke dalam satu folder dan dicompress, beri nama [NRP].rar
5. Unggah tugas ke Elearning IF paling lambat Rabu, 18/10/2017.

--= Pengumuman UTS =--
1. UTS tulis diselenggarakan minggu depan TM ke-8 sesuai dengan jadwal kelas biasanya.
2. Materi mulai dari TM ke-1 sampai Sequence Diagram yang telah dipraktekkan di kelas di TM ke-6.
3. Mahasiswa wajib datang di kelas tepat waktu, (kelas C Senin pagi jam 7.30, kelas A Senin pagi jam 10, kelas B Rabu sore jam 15.30)
4. Bagi mahasiswa yang ijin/berhalangan mengikuti UTS harap memberitahukan ke dosen H-1minggu.
Terima kasih.

Jumat, 13 Oktober 2017

Kepingin Mendokumentasi Tiap Minggu Perkuliahan!!!

Halo, sudah memasuki minggu ke-7 *semester 7* perkuliahan di Teknik Informatika, kampus perjuangan ITS Surabaya nih. Baru kepikiran buat nge-post setiap materi perkuliahan yang saya dapat dari awal TM01 tentunya. Semoga kesampaian ya, hehehe. Mungkin yang akan saya masukkan hanyalah poin-poin saja atau sekedar topik atau file yang berkaitan materi pada hari itu, yah karena saya manusia dan saya tak sesempurna itu buat mendokumentasi setiap apa yang disampaikan dosen di kelas:P. Stay tune><

Senin, 05 Juni 2017

MPPL Pembuatan Aplikasi Sistem Informasi SBMPTN Tahun 2017 (Final Project)

Evaluasi Akhir Semester (EAS) MPPL Kelas B diberikan dalam bentuk penugasan dokumen dan demo hasil. Penugasan diberikan pada hari Senin tanggal 29 Mei 2017, dan demo dijadwalkan pada pertemuan selanjutnya hari Senin tanggal 5 Juni 2017. Penugasan meliputi:
1. Buatlah TOR/ KAK untuk aplikasi yang akan dibangun
2. Buatlah Perencanaan Proyek untuk Aplikasi Seleksi
3. Buatlah monitoring proyek dengan menggunakan kurva S

Anggota Kelompok:
-Andre Exaudi Jeremy Rumapea. 5114100031.
-Monica Indah Habsari. 5114100060
-Christyanto Liman. 5114100087

A. Kerangka Acuan Kerja (KAK)
 

Selasa, 09 Mei 2017

PBO ATM Case Study Part 2 (tugas 5)


Tugas kali ini diambil dari buku Java How to Program 9th edition. Merupakan part 2 dari tugas atm case study. Langsung saja berikut ini programnya:


Source code class ATM:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class ATM
{
    private boolean userAuthenticated;  // whether user is authenticated
    private int currentAccountNumber;   // current user's account number
    private Screen screen;  // ATM's screen
    private Keypad keypad;  // ATM's keypad
    private CashDispenser cashDispenser;    // ATM's cash dispenser
    private DepositSlot depositSlot;        // ATM's deposit slot
    private BankDatabase bankDatabase;      // account information database
   
    // constants corresponding to main menu options
    private static final int BALANCE_INQUIRY = 1;
    private static final int WITHDRAWAL = 2;
    private static final int DEPOSIT = 3;
    private static final int EXIT = 4;
   
    // no-argument ATM constructor initializes instance variables
    public ATM(){
        userAuthenticated = false;  // user is not authenticated to start
        currentAccountNumber = 0;   // no current account number to start
        screen = new Screen();      // create screen
        keypad = new Keypad();      // create keypad
        cashDispenser = new CashDispenser();    // create cash dispenser
        depositSlot = new DepositSlot();        // create deposit slot
        bankDatabase = new BankDatabase();      // create account info database
    }   // end no argument ATM constructor
   
    // start ATM
    public void run(){
        // welcome and authenticate user; perform transactions
        while(true){
            // loop while user is not yet authenticated
            while(!userAuthenticated){
                screen.displayMessageLine("\nWelcome!");
                authenticateUser();     // authenticate user
            }   // end while
           
            performTransactions();      // user is now authenticated
            userAuthenticated = false;  // reset before next ATM session
            currentAccountNumber = 0;   // reset before next ATM session
            screen.displayMessageLine("\nThank You!\nGoodbye!");
        }   // end while
    }   // end method run
   
    // attempts to authenticate user against database
    private void authenticateUser(){
        screen.displayMessage("\nPlease enter your account number : ");
        int accountNumber = keypad.getInput();  // input account number
        screen.displayMessage("\nEnter your PIN : ");   // prompt for PIN
        int pin = keypad.getInput();    // input PIN
       
        // set userAuthenticated to boolean value returned by database
        userAuthenticated = bankDatabase.authenticateUser(accountNumber, pin);
       
        // check whether authentication succeeded
        if(userAuthenticated){
            currentAccountNumber = accountNumber;   // save user's account
        }   // end if
        else{
            screen.displayMessageLine("Invalid Account Number or PIN.");
            screen.displayMessageLine("Please Try Again.");
        }
    }   // end method authenticateUser
   
    // display the main menu and perform transactions
    private void performTransactions(){
        // local variable to store transaction currently being processed
        Transaction currentTransaction = null;
        boolean userExited = false;     // user has not chosen to exit
       
        // loop while user has not chosen option to exit system
        while(!userExited){
            // show main menu and get user selection
            int mainMenuSelection = displayMainMenu();
           
            // decide how to proceed based on user's menu selection
            switch(mainMenuSelection){
                // user choose to perform one of three transaction types
                case BALANCE_INQUIRY :
                case WITHDRAWAL :
                case DEPOSIT :
               
                    // initialize as new object choosen type
                    currentTransaction = createTransaction(mainMenuSelection);
                   
                    currentTransaction.execute();   // execute transaction
                    break;
               
                case EXIT :
                // user choose to terminate session
                    screen.displayMessageLine("\nExiting the system...");
                    userExited = true;      // this ATM session should end
                    break;
                   
                default :
                // user did not enter an integer between 1-4
                    screen.displayMessageLine("\nYou did not enter a valid selection.");
                    screen.displayMessageLine("Please try again.");
                    break;
            }   // end switch
        }   // end while
    }   // end method performTransactions
   
    // display the main menu and return an input selection
    private int displayMainMenu(){
        screen.displayMessageLine("\nMain Menu :");
        screen.displayMessageLine("1 - View my balance");
        screen.displayMessageLine("2 - Withdraw cash");
        screen.displayMessageLine("3 - Deposit funds");
        screen.displayMessageLine("4 - Exit\n");
        screen.displayMessage("Enter a choice : ");
        return keypad.getInput();   // return user's selection
    }   // end method of displayMainMenu
   
    // return object of specified Transaction subclass
    private Transaction createTransaction(int type){
        Transaction temp = null;        // temporary Transaction variable
       
        // determine which type of Transaction to create
        switch(type){
            case BALANCE_INQUIRY :
            // create new BalanceInquiry transaction
                temp = new BalanceInquiry(currentAccountNumber, screen, bankDatabase);
                break;
               
            case WITHDRAWAL :
            // create new Withdrawal transaction
                temp = new Withdrawal(currentAccountNumber, screen, bankDatabase, keypad, cashDispenser);
                break;
               
            case DEPOSIT :
            // create new Deposit transaction
                temp = new Deposit(currentAccountNumber, screen, bankDatabase, keypad, depositSlot);
                break;
        }   // end switch
       
        return temp;    // return newly created object
    }   // end method createTransaction
}   // end class ATM

Source code class Screen:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class Screen
{
    // display a message without a carriage return
    public void displayMessage(String message){
        System.out.print(message);
    }   // end method displayMessage
   
    // display a message with a carriage return
    public void displayMessageLine(String message){
        System.out.println(message);
    }   // end method displayMessageLine
   
    // displays a dollar amount
    public void displayDollarAmount(double amount){
        System.out.printf("$%,.2f", amount);
    }   // end method displayDollarAmount
}   // end class Screen

Source code class Keypad:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
import java.util.Scanner;
 
public class Keypad
{
    private Scanner input;  // reads data from the command line
   
    // no-argument constructor initializes the Scanner
    public Keypad(){
        input = new Scanner(System.in);
    }   // end no-argument Keypad constructor
   
    // return an integer value entered by user
    public int getInput(){
        return input.nextInt();     // we assume that user enters an integer
    }   // end method getInput
}   // end class Keypad

Source code class CashDispenser:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class CashDispenser
{
    // the default initial number of bills in the cash dispenser
    private final static int INITIAL_COUNT = 500;
    private int count;      // number of $20 bills remaining
   
    // no-argument CashDispenser constructor initializes count to default
    public CashDispenser(){
        count = INITIAL_COUNT;  // set count attribute to default
    }   // end CashDispenser constructor
   
    // simulates dispensing of specified amount of cash
    public void dispenseCash(int amount){
        int billsRequired = amount / 20;    // number of $20 bills required
        count -= billsRequired;     // update the count of bills
    }   // end method dispenseCash
   
    // indicates whether cash dispenser can dispense desired amount
    public boolean isSufficientCashAvailable(int amount){
        int billsRequired = amount / 20;
       
        if(count >= billsRequired){
            return true;    // enough bills required
        }
        else{
            return false;   // not enough bills required
        }
    }   // end method isSufficientCashAvailable
}   // end class CashDispenser

Source code class DepositSlot:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class DepositSlot
{
    // indicate whether envelope was received (always returns true)
    // because this is only a software simulation of a real deposit slot
    public boolean isEnvelopeReceived(){
        return true;    // deposit envelope was received
    }   // end method isEnvelopeReceived
}   // end class DepositSlot

Source code class Account:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class Account
{
    private int accountNumber;      // account number
    private int pin;        // PIN for authentication
    private double availableBalance;    // funds available for withdrawal
    private double totalBalance;        // funds available + pending deposits
   
    // Account constructor initializes attributes
    public Account(int theAccountNumber, int thePIN, double theAvailableBalance, double theTotalBalance){
        accountNumber = theAccountNumber;
        pin = thePIN;
        availableBalance = theAvailableBalance;
        totalBalance = theTotalBalance;
    }   // end Account constructor
   
    // determines whether a user-specified PIN matches PIN in Account
    public boolean validatePIN(int userPIN){
        if(userPIN == pin){
            return true;    // means the PIN input is match with the user's PIN
        }
        else{
            return false;   // means the PIN input is not match with the user's PIN
        }
    }   // end method validatePIN
   
    // returns available balance
    public double getAvailableBalance(){
        return availableBalance;
    }
   
    // returns the total balance
    public double getTotalBalance(){
        return totalBalance;
    }
   
    // credits an amount to the account
    public void credit(double amount){
        totalBalance += amount;     // add to total balance
    }
   
    // debits an amount from the account
    public void debit(double amount){
        availableBalance -= amount;     // substract from available balance
        totalBalance -= amount;         // substract from total balance
    }
   
    // returns account number
    public int getAccountNumber(){
        return accountNumber;
    }
}   // end class Account

Source code class BankDatabase:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class BankDatabase
{
    private Account[] accounts;     // array of Accounts
   
    // no-argument BankDatabase constructor initializes accounts
    public BankDatabase(){
        accounts = new Account[2];      // just 2 accounts for testing
        accounts[0] = new Account(12345, 54321, 1000.0, 1200.0);
        accounts[1] = new Account(98765, 56789, 200.0, 200.0);
    }   // end no-argument BankDatabase constructor
   
    // retrieve Account object containing specified account number
    private Account getAccount(int accountNumber){
        // loop through accounts searching for matching account number
        for(Account currentAccount : accounts){
            // return current account if match found
            if(currentAccount.getAccountNumber() == accountNumber) return currentAccount;
        }   // end for
       
        return null;    // if no matching account was found, return null
    }   // end method
   
    // determine whether user-specified account number and PIN match
    // those of an account in the database
    public boolean authenticateUser(int userAccountNumber, int userPIN){
        // attempt to retrieve the account with the account number
        Account userAccount = getAccount(userAccountNumber);
       
        if(userAccount != null){
            return userAccount.validatePIN(userPIN);
        }
        else{
            return false;   // account number not found, so return false
        }  
    }   // end method
   
    // return available balance of Account with specified account number
    public double getAvailableBalance(int userAccountNumber){
        return getAccount(userAccountNumber).getAvailableBalance();
    }   // end method
   
    public double getTotalBalance(int userAccountNumber){
        return getAccount(userAccountNumber).getTotalBalance();
    }   // end method
   
    public void credit(int userAccountNumber, double amount){
        getAccount(userAccountNumber).credit(amount);
    }   // end method
   
    public void debit(int userAccountNumber, double amount){
        getAccount(userAccountNumber).debit(amount);
    }   // end method
}   // end class BankDatabase

Source code class Transaction:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public abstract class Transaction
{
    private int accountNumber;      // indicates account involved
    private Screen screen;          // ATM's screen
    private BankDatabase bankDatabase;  // account info database
   
    // Transaction constructor invoked by subclasses using super()
    public Transaction(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase){
        accountNumber = userAccountNumber;
        screen = atmScreen;
        bankDatabase = atmBankDatabase;
    }   // end Transaction constructor
   
    // return account number
    public int getAccountNumber(){
        return accountNumber;
    }   // end method
   
    // return reference to screen
    public Screen getScreen(){
        return screen;
    }   // end method
   
    // return reference to bank database
    public BankDatabase getBankDatabase(){
        return bankDatabase;
    }   // end method
   
    // perform the transaction (overridden by each subclass)
    abstract public void execute();
}   // end class Transaction

Source code class BalanceInquiry:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class BalanceInquiry extends Transaction
{
    // BalanceInquiry constructor
    public BalanceInquiry(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase){
        super(userAccountNumber, atmScreen, atmBankDatabase);
    }   // end BalanceInquiry constructor
   
    // performs the transaction
    @Override
    public void execute(){
        // get references to bank database and screen
        BankDatabase bankDatabase = getBankDatabase();
        Screen screen = getScreen();
       
        // get the available balance for the account involved
        double availableBalance = bankDatabase.getAvailableBalance(getAccountNumber());
       
        // get the total balance for the account involved
        double totalBalance = bankDatabase.getTotalBalance(getAccountNumber());
       
        // display the balance information on the screen
        screen.displayMessageLine("\nBalance Information : ");
        screen.displayMessage(" - Available Balance : ");
        screen.displayDollarAmount(availableBalance);
        screen.displayMessage("\n - Total Balance : ");
        screen.displayDollarAmount(totalBalance);
        screen.displayMessageLine("");
    }   // end method execute
}   // end class BalanceInquiry

Source code class Withdrawal:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class Withdrawal extends Transaction
{
    private int amount;     // amount to withdraw
    private Keypad keypad;  // references to keypad
    private CashDispenser cashDispenser;    // references to cash dispenser
   
    // constant corresponding to menu option to cancel
    private final static int CANCELED = 6;
   
    // Withdrawal constructor
    public Withdrawal(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase, Keypad atmKeypad, CashDispenser atmCashDispenser){
        // initializes superclass variables
        super(userAccountNumber, atmScreen, atmBankDatabase);
       
        // initializes references to keypad and cash dispenser
        keypad = atmKeypad;
        cashDispenser = atmCashDispenser;
    }   // end Withdrawal constructor
   
    // perform transaction
    @Override
    public void execute(){
        boolean cashDispensed = false;  // cash was not dispensed yet
        double availableBalance;        // amount available for withdrawal
       
        // get references to bank database and screen
        BankDatabase bankDatabase = getBankDatabase();
        Screen screen = getScreen();
       
        // loop until cash is dispensed or the user cancels
        do{
            // obtain a chosen withdrawal amount from the user
            amount = displayMenuOfAmounts();
           
            // check whether user choose a withdrawal amount or canceled
            if(amount != CANCELED){
                // get available balance of account involved
                availableBalance = bankDatabase.getAvailableBalance(getAccountNumber());
               
                // check whether the user has enough money in the account
                if(amount <= availableBalance){
                   
                    // check whether the cash dispenser has enough money
                    if(cashDispenser.isSufficientCashAvailable(amount)){
                       
                        // update the account involved to reflect the withdrawal
                        bankDatabase.debit(getAccountNumber(), amount);
                       
                        cashDispenser.dispenseCash(amount);     // dispense cash
                        cashDispensed = true;   // cash was dispensed
                       
                        // instructs user to take cash
                        screen.displayMessageLine("\nYour cash has been dispensed. Please take your cash now.");
                    }   // end if
                    else{
                        // cash dispenser does not have enough cash
                        screen.displayMessageLine("\nInsufficient cash available in the ATM.");
                        screen.displayMessageLine("\nPlease choose a smaller amount.");
                    }   // end if
                }   // end if
                else{
                    // not enough money available in user's account
                    screen.displayMessageLine("\nInsufficient funds in your account.");
                    screen.displayMessageLine("\nPlease choose a smaller amount.");
                }   // end if
            }   // end if
            else{
                // user choose cancel menu option
                screen.displayMessageLine("\nCancelling transactions...");
                return;     // return to main menu because user canceled
            }   // end if
        }   while(!cashDispensed);
    }   // end method execute
   
    // display a menu of withdrawal amounts and the options to cancel
    // return the chosen amount or 0 if the user chooses to cancel
    private int displayMenuOfAmounts(){
        int userChoice = 0;     // local variable to store return value
       
        Screen screen = getScreen();    // get screen references
       
        // array of amounts to correspond to menu numbers
        int[] amounts = {0, 20, 40, 60, 100, 200};
       
        // loop while no valid choice has been made
        while(userChoice == 0){
            // display the withdrawal menu
            screen.displayMessageLine("\nWithdrawal Menu : ");
            screen.displayMessageLine("1 - $20");
            screen.displayMessageLine("2 - $40");
            screen.displayMessageLine("3 - $60");
            screen.displayMessageLine("4 - $100");
            screen.displayMessageLine("5 - $200");
            screen.displayMessageLine("6 - Cancel Transaction");
            screen.displayMessage("\nChoose a withdrawal amount : ");
           
            int input = keypad.getInput();      // get user input through keypad
           
            // determine how to proceed based on the input value
            switch(input){
                // if the user choose a withdrawal amount
                // i.e choose option 1, 2, 3, 4 or 5
                // return the corresponding amount from amounts's array
                case 1 :
                case 2 :
                case 3 :
                case 4 :
                case 5 :
                    userChoice = amounts[input];        // save user's choice
                    break;
               
                case CANCELED :
                    // the user choose to cancel
                    userChoice = CANCELED;      // save user's choice
                    break;
               
                default :
                    // the user did not enter value between 1-6
                    screen.displayMessageLine("\nInvalid selection.");
                    screen.displayMessageLine("Try again.");
            }   // end switch
        }   // end while
       
        return userChoice;      // return withdrawal amount or CANCELED
    }   // end method displayMenuOfAmounts
}   // end class Withdrawal

Source code class Deposit:

/**
 * OOP dalam mesin ATM
 * 
 * Monica I H 
 * 08 Mei 2017
 */
public class Deposit extends Transaction
{
    private double amount;      // amount to deposit
    private Keypad keypad;      // references to keypad
    private DepositSlot depositSlot;    // references to deposit slot
    private final static int CANCELED = 0;  // constant for cancel option
   
    // Deposit constructor
    public Deposit(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase, Keypad atmKeypad, DepositSlot atmDepositSlot){
        // initializes superclass variables
        super(userAccountNumber, atmScreen, atmBankDatabase);
       
        // initialize references to keypad and deposit slot
        keypad = atmKeypad;
        depositSlot = atmDepositSlot;
    }   // end Deposit constructor
   
    // perform transaction
    @Override
    public void execute(){
        BankDatabase bankDatabase = getBankDatabase();      // get reference
        Screen screen = getScreen();        // get reference
       
        amount = promptForDepositAmount();  // get deposit amount from user
       
        // check whether the user entered a deposit amount or canceled
        if(amount != CANCELED){
            // request deposit envelope containing specified amount
            screen.displayMessage("\nPlease insert a deposit envelope containing ");
            screen.displayDollarAmount(amount);
            screen.displayMessage(".");
           
            // receive deposit envelope
            boolean envelopeReceived = depositSlot.isEnvelopeReceived();
           
            // check whether deposit envelope was received
            if(envelopeReceived){
                screen.displayMessageLine("\nYour envelope has been received.");
                screen.displayMessage("NOTE: The money just deposited will not be available until we verify the amount");
                screen.displayMessage("of any enclosed cash and your checks clear.");
               
                // credit account to reflect the deposit
                bankDatabase.credit(getAccountNumber(), amount);
            }   // end if
            else{
                // deposit envelope not received
                screen.displayMessageLine("\nYou did not insert an envelope");
                screen.displayMessageLine("So, the ATM has canceled your transaction.");
            }   // end else
        }   // end if
        else{
            // user canceled instead of entering amount
            screen.displayMessageLine("\nCanceling transaction...");
        }   // end else
    }   // end method execute
   
    // prompt user to enter a deposit amount in cents
    private double promptForDepositAmount(){
        Screen screen = getScreen();    // get references to screen
       
        // display the prompt
        screen.displayMessage("\nPlease enter a deposit amount in CENTS (or 0 to cancel)");
        int input = keypad.getInput();  // receive input of deposit amount
       
        // check whether the user canceled or entered a valid amount
        if(input == CANCELED) return CANCELED;
        else{
            return (double) input / 100;        // return dollar amount
        }   // end else
    }   // end method
}   // end class Deposit

Selasa, 04 April 2017

PBO Mesin Antrian Bank (Evaluasi Tengah Semester Genap)

Penugasan ETS Mata Kuliah PBO Kelas A 2016/2017 kali ini adalah untuk membuat mesian antrian bank.
Bank merupakan  tempat berkumpulnya masyarakat untuk menyimpan atau pun mengambil uang. Sebelum melakukan transaksi biasanya nasabah diminta mengambil nomor antrian di mesin pencetak antrian.
Mesin pencetak antrian bank adalah system yang berfungsi untuk mengelola nomor urut antrian nasabah bank. Mesin ini mempunyai fungsi, mempermudah teller dan customer service, atau layanan lain pada bank tersebut, memanggil nasabah dan melayani sesuai dengan keperluan nasabah, pada masing-masing layanan.

Source code main function:
/**
 * Mesin Antrian Bank ETS
 * 
 * Monica I H 
 * 04 April 2017
 */
import java.util.Scanner;
public class main
{
     public static void main (String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int count_teller = 0, count_cs = 0, x = 0 ;
        
        while(x>=0)
        {
            System.out.println("Pilih jenis layanan :\n-1 Pilih untuk Layanan Teller\n-2 Pilih untuk Layanan CS");
            x = scan.nextInt();
            customer baru = new customer(x);
        if(x == 1)
        {
             baru.getLayanan(x, count_teller);
             count_teller++;
        }
        else if(x == 2)
        {
            baru.getLayanan(x, count_cs);
            count_cs++;
        }
        baru.getNo_teller(x);
        baru.getNo_cs(x);
        }
    }
} 
Source code class Customer:
/**
 * Mesin Antrian Bank ETS
 * 
 * Monica I H
 * 04 April 2017
 */
public class customer
{
    private int layanan, no_teller, no_cs;
    public customer(int x)
    {
       layanan = x;
    }

    public int getNo_teller(int x)
    {
        no_teller = x;
        no_teller++;
        return no_teller;
        
    }
    
    public int getNo_cs(int x)
    {
        no_cs = x;
        no_cs++;
        return no_cs;
    }
    
    public int getLayanan(int x, int count)
    {
         if(x == 1)
        {
            System.out.printf("\n\t\tNomor Antrian anda: %d",getNo_teller(count));
            System.out.println("\n\t\tLayanan : Transaksi Teller\n");            
        }
        
        else if(x == 2)
        {
            System.out.printf("\n\t\tNomor Antrian anda: %d",getNo_cs(count));
            System.out.println("\n\t\tLayanan : Customer Service\n");
        }
            
        return x;
    }
}
Output program:

Senin, 03 April 2017

MPPL Studi Kelayakan SI PPDB (Evaluasi Tengah Semester Genap)

      Kali ini kami dari kelas MPPL-B kedapatan tugas membuat studi kelayakan tentang web sekolah asal kami (SMA).
https://sman2kediri.sch.id/

STUDI KELAYAKAN SISTEM INFORMASI PPDB  SMAN 2 KOTA KEDIRI

I. PENDAHULUAN
      Permasalahan Pendidikan di Indonesia merupakan topik yang tak akan pernah ada habisnya untuk dibahas dan dikembangkan. Seiring pesatnya perkembangan dunia IT, dari tahun ke tahun, sistem pendidikan negeri ini selalu memberikan inovasi baru yang dimaksudkan untuk meningkatkan mutu pendidikan di Indonesia. Seperti halnya, Ujian Nasional yang telah semenjak tahun lalu telah menggunakan sistem ujian berbasis komputer, CBT (Computer Based Test), tahun ini secara besar-besaran pemerintah menggalakkan sistem Penerimaan Peserta Didik Baru secara online, yang merupakan salah satu produk dari rangkaian project besar Sistem Informasi Aplikasi Pendidikan (SIAP) yang telah dirintis sejak tahun 2009.
      Pada tahun 2017 ini, tercatat lebih dari 30 kota/kabupaten di Jawa Timur telah menerapkan sistem Penerimaan Peserta Didik Baru secara online lewat situs web yang disediakan setiap kota/kabupaten terkait. PPDB SMAN 2 Kota Kediri dapat dilakukan melalui situs https://kediri.siap-ppdb.com/. Di Kota Kediri, pendaftaran untuk SMAN 1 dan SMAN 2 memiliki jalur tersendiri, sehingga ketika membuka website PPDB Kota Kediri. Peserta didik harus menuju link khusus untuk kedua SMA tersebut.

II BAHAN DAN METODE

A. Konsep Dasar Sistem
      Sistem Informasi adalah kombinasi dari teknologi informasi dan aktivitas orang yang menggunakan teknologi itu untuk mendukung operasi dan manajemen. Dalam arti yang sangat luas, istilah sistem informasi yang sering digunakan merujuk kepada interaksi antara orang, proses algoritmik, data, dan teknologi. Dalam pengertian ini, istilah ini digunakan tidak hanya merujuk pada penggunaan organisasi Teknologi Informasi dan Komunikasi (TIK), tetapi juga untuk cara dimana orang berinteraksi dengan teknologi ini dalam mendukung proses bisnis.

B. Studi Kelayakan
        Studi Kelayakan (Feasibility Study) adalah pengamatan awal yang dilakukan untuk menilai layak tidaknya suatu usaha untuk dilakukan, suatu proyek untuk dijalankan, atau suatu produk untuk dibuat. Pada dasarnya studi kelayakan dilakukan untuk memulai suatu bisnis baru ataupun mengembangkan bisnis yang sudah ada sebelumnya. 

-Kelayakan Teknik
      Kelayakan teknik memandang dari segi kebutuhan teknologi sistem yang digunakan. Secara garis besar, apabila suatu sistem menggunakan teknologi yang murah, mudah didapatkan, dan mudah digunakan, maka sistem tersebut bisa dinyatakan layak.

-Kelayakan Ekonomi
      Kelayakan ekonomi menimbang suatu sistem berdasarkan cost yang diperlukan untuk membangun sistem tersebut, serta membandingkannya dengan value atau hasil yang diperoleh dengan adanya sistem tersebut. Tak dapat dipungkiri, suatu proyek dikerjakan untuk tujuan memperoleh keuntungan, oleh karena itu kelayakan ekonomi menghitung untung rugi dari pengadaan sistem dan pula berkaitan dengan return investment atau jangka waktu investasi akan kembali.

-Kelayakan Hukum
       Kelayakan hukum mengupas apakah suatu sistem melanggar hukum yang berlaku atau tidak jika tetap dikembangkan. Termasuk apakah informasi dari sistem menyalahi aturan hukum atau tidak.

-Kelayakan Operasional
      Kelayakan operasional membahas apakah pengoperasian sistem di dalam organisasi nanti akan  berjalan baik atau tidak.

-Kelayakan Jadwal
      Kelayakan jadwal menguji apakah sistem berjalan sesuai dengan waktu yang ditentukan diawal atau tidak. Ketepatan jadwal akan menambah nilai kelayakan sistem sehingga tetap perlu diperhatikan.

III HASIL DAN PEMBAHASAN
Studi Kelayakan
      Setelah mengamati lebih dalam SI PPDB online SMAN 2 Kota Kediri. Untuk dapat memastikan apakah pengadaan sistem PPDB online ini perlu dilanjutkan atau tidak, maka telah diputuskan untuk menguji kelayakan SIAP PPDB berdasarkan:
-Kelayakan teknik
-Kelayakan ekonomi
-Kelayakan hukum
-Kelayakan operasional

A. Penilaian Kelayakan Teknik
      SI PPDB berbasis web ini telah mumpuni dari segi teknologi, dalam penggunaannya SI PPDB online tidak memerlukan instalasi aplikasi sehingga sangat mudah, cepat, dan instan untuk digunakan. SI PPDB online bisa diakses melalui mobile phone sekalipun.
1.      Kebutuhan perangkatan keras
     
No
Perangkat keras
1
Processor type   
Intel (R) Core i3
2
Memory
2Gb DDR3 Max 8 GB (2 DIMMs)
3
Hard drive type
500GB Serial ATA (7200 RPm)
4
Network
Gigabit Network
5
Optical drive Type
DVD RW
6
Monitor
Monitor 14”
7
Keyboard
USB Keyboard
8
Mouse
USB Optical Mouse
2.      Kebutuhan perangkat lunak
No
Perangkat Lunak
Kegunaan
1
Windows XP Professional II / Windows 7/Windows 8
Sistem Operasi
2
Internet Explorer, mozila firefox, dll
Web Browser
3
Microsoft word
Digunakan dalam pengetikan untuk surat dan laporan PPDB
4
Microsoft excel
Digunakan dalam penginputan data dan perhitungan data yang berhubungan dengan PPDB
Untuk perangkat keras dan lunak server telah disediakan oleh pihak penyelenggara SIAP yaitu TELKOM.
3.      Kebutuhan perangkat jaringan
Perangkat jaringan telah disediakan oleh pihak TELKOM.
B. Penilaian Kelayakan Ekonomi
      SI PPDB berbasis web yang pada dasarnya merupakan project milik PT. Telkom dan tidak diberikan secara gratis namun ada biaya yang harus dibayarkan atas penggunaan jasa sistem informasi PPDB online ini. Namun jangan salah, produk lain yang ditawarkan oleh PT. Telkom ini tersedia dalam edisi gratis, edisi web sekolah, edisi standar, dan edisi premium. Untuk rincian tiap edisi tersebut silakan cek http://produk.siap-online.com/biaya-layanan/#.WOJ5l7jYq00
Layanan SIAP PPDB Online dapat digunakan oleh Dinas Pendidikan / Kemenag / Yayasan di tingkat Kota/Kabupaten dengan syarat dan ketentuan, berikut:
  1. Pelaksanaan PPDB Online dikoordinasikan oleh Dinas Pendidikan / Kemenag / Yayasan setempat.
  2. Petunjuk Teknis / Aturan dan prosedur PPDB di wilayah Dinas Pendidikan / Kemenag / Yayasan di tingkat Kota/Kabupaten setempat telah disepakati bersama dengan PT. Telkom sesuai standar sistem Telkom SIAP PPDB Online yang berlaku.
  3. Peserta PPDB Online adalah minimal 30 sekolah dalam satu wilayah Dinas Pendidikan / Kemenag / Yayasan di tingkat Kota/Kabupaten.
  4. Biaya pelatihan, sosialisasi dan operasional selama proses persiapan hingga pelaksanaan ditanggung oleh pihak Dinas Pendidikan Kota/Kabupaten setempat.
 C. Penilaian Kelayakan Hukum
      Kelayakan hukum ini tentu tak lepas dari hal-hal seperti kerahasiaan informasi pemilik akun yang terjamin, dan keakuratan data yang dapat dipertanggungjawabkan kebenarannya. Secara lengkap dapat disimak pada laman Ketentuan Layanan SIAP Online yang dapat diakses melalui http://produk.siap-online.com/ketentuan-layanan-siap-online/#.WOJ7ILjYq00.
Sudah meliputi: ketentuan umum, ketentuan penggunaan, ketentuan penggunaan akun, informasi penangguhan dan penghapusan akun, kebijakan promosi, serta kebijakan konten dan perilaku pengguna.

D. Penilaian Kelayakan Operasional
      Kelayakan operasional tak lepas dari kelayakan teknik yang telah dibahas sebelumnya. Untuk dapat beroperasi dengan baik maka sistem membutuhkan teknologi tambahan yang sesuai dengan kriteria yang dibutuhkan. Tak ada batasan pengguna sehingga web akan dengan mudah diakses pengguna baru yang belum terdaftar sebelumnya. Secara operasional pun sistem ini tak ada kendala, sehingga dapat dikatakan layak.

IV KESIMPULAN DAN SARAN

A. Kesimpulan
      Setelah meninjau berbagai faktor kelayakan SI PPDB Online SMAN 2 Kota Kediri, dapat disimpulkan bahwa pengadaan sistem PPDB Online ini perlu dilanjutkan dan dikembangkan agar nantinya seluruh sekolah-sekolah di Indonesia dapat terintegrasi secara langsung sehingga akan menguntungkan baik siswa dan sekolah dalam hal keefektifan dan keefisienan pendaftaran.

B. Saran
      Sebaiknya pada website official SMAN 2 Kota Kediri disertakan petunjuk apabila pengunjung ingin mendaftarkan diri pada PPDB SMAN 2 Kota Kediri dengan menyertakan link PPDB Online Kediri pada laman utama website, karena pengunjung akan kebingungan mencari "jalan" menuju tempat PPDB online apabila tidak mengetahui website khusus PPDB tahun 2017.

V DAFTAR PUSTAKA
Wikipedia. Sistem Informasi.
      https://id.wikipedia.org/wiki/Sistem_informasi
Haerudin, Didin S.Hs. 2011. Feasibility Study (Studi Kelayakan).
      http://hd-style.blogspot.co.id/2011/09/feasibility-study-studi-kelayakan.html
Baskoro, Fajar. 2017. Kelayakan Proyek. Surabaya.
      http://fajarbaskoro.blogspot.co.id/2017/03/mppl17-06-kelayakan-proyek.html

MPPL HIPO model on Project Charter (tugas 4)

5114100060

      Dalam tugas ke-4 kali ini, saya kedapatan bagian untuk menjelaskan tentang HIPO model yang terdapat dalam Project Charter. Langsung saja kita bahas ya!
HIPO merupakan kependekan dari Hierarchical Input Proses Output, adalah alat dokumentasi yang berdasarkan fungsinya untuk meningkatkan efisiensi usaha perawatan program.

Selasa, 14 Maret 2017

PBO Classes and Objects (A Deeper Look II) (tugas 4)

Classes and Objects 8.7 - 8.13

8.7. Date Class Declaration

/**
 * Date
 * Monica I H
 * PBO
 */
public class Date
{
    private int month;
    private int day;
    private int year;
    
    private static final int[] daysPerMonth =
        {0,31,28,31,30,31,30,31,31,30,31,30,31};
        
   public Date(int theMonth, int theDay, int theYear)
   {
       month = checkMonth( theMonth ); 
       year = theYear;
       day = checkDay (theDay);
      
       System.out.printf(
        "Date object constructor for date %s\n", this);
   }
   
   private int CheckMonth(int testMonth)
   {
       if (testMonth > 0 && testMonth <=12)
        return testMonth;
       else
        throw new IllegalArgumentException ("month must be 1-12");
   }
   
   private int checkDay(int testDay)
   {
       if (testDay > 0 && testDay <= daysPerMonth [month])
        return testDay;
        
       if(month == 2 && testDay == 29 && (year % 400 == 0 ||
        (year % 4 == 0 && year % 100 != 0 )))
        return testDay;
        
       throw new IllegalArgumentException(
        "day out-of-range for the specified month and year");
   }
   
   public String toString()
   {
       return String.format("%d/%d/%d", month, day, year);
   }
}

8.8. Employee Class with References to other objects

/**
 * Employee
 * Monica I H
 * PBO
 */
public class Employee
{
   private String firstName;
   private String lastName;
   private Date birthDate;
   private Date hireDate;
   
   public Employee (String first, String last, Date dateOfBirth,
    Date dateOfHire)
    {
        firstName = first;
        lastName = last;
        birthDate = dateOfBirth;
        hireDate = dateOfHire;
    }
   
   public String toString()
   {
       return String.format ("%s, %s Hired: %s Birthday: %s",
        lastName, firstName, hireDate, birthDate);
   }
}

8.9. Composition Demonstration

/**
 * EmployeeTest
 * Monica I H
 * PBO
 */
public class EmployeeTest
{
  public static void main (String[] args)
  {
      Date birth = new Date (7,24,1949);
      Date hire = new Date (3,12,1988);
      Employee employee = new Employee ("Bob", "Blue", birth, hire);
      
      System.out.println(employee);
  }
}


8.10. Declaring an enum type with constructor and explicit instance fields and accessors for these fields

/**
 * Enumeration class Book
 * Monica I H
 * PBO
 */
public enum Book
{
    JHTP( "Java How to Program", "2012" ),
    CHTP( "C How to Program", "2007" ),
    IW3HTP( "Internet & World Wide Web How to Program", "2008" ),
    CPPHTP( "C++ How to Program", "2012" ),
    VBHTP( "Visual Basic 2010 How to Program", "2011" ),
    CSHARPHTP( "Visual C# 2010 How to Program", "2011" );
    
    private final String title;
    private final String copyrightYear;
    
    Book (String bookTitle, String year)
    {
        title = bookTitle;
        copyrightYear = year;
    }
    
    public String getTitle()
    {
        return title;
    }
    
    public String getCopyrightYear()
    {
        return copyrightYear;
    }
}

8.11. Testing an Enum Type

/**
 * EnumTypeTesting
 * Monica I H
 * PBO
 */

import java.util.EnumSet;

public class EnumTest
{
    public static void main(String[] args)
    {
        System.out.println("All books:\n");
        
        for (Book book : Book.values() )
            System.out.printf("%-10s%-45s%s\n", book,
                book.getTitle(), book.getCopyrightYear() );
        
        System.out.println("\nDisplay a range of enum constants:\n");
        
        for (Book book : EnumSet.range(Book.JHTP, Book.CPPHTP))
            System.out.printf("%-10s%-45s%s\n", book,
                book.getTitle(), book.getCopyrightYear() );
    }
}

8.12. Static Variable Used to Maintain a Count of The Number of Employee Object in Memory

/**
 * Employee2
 * Monica I H
 * PBO
 */
public class Employee2
{
    private String firstName;
    private String lastName;
    private static int count=0;
    
    public Employee2(String first, String last)
    {
        firstName = first;
        lastName = last;
        
        ++count;
        System.out.printf("Employee constructor: %s %s; count = %d\n",
            firstName, lastName, count);
    }
    
    public String getFirstName()
    {
        return firstName;
    }
    
    public String getLastName()
    {
        return lastName;
    }
    
    public static int getCount()
    {
        return count;
    }
}

8.13. Static Member Demonstration

/**
 * Employee2Testing
 * Monica I H
 * PBO
 */
public class Employee2Test
{
    public static void main (String[] args)
    {
        System.out.printf("Employees before instantiation: %d\n",
            Employee2.getCount());
            
        Employee2 e1 = new Employee2("Susan", "Baker");
        Employee2 e2 = new Employee2("Bob", "Blue");
        
        System.out.println( "\nEmployees after instantiation: " );
        System.out.printf( "via e1.getCount(): %d\n", e1.getCount());
        System.out.printf( "via e2.getCount(): %d\n", e2.getCount());
        System.out.printf( "via Employee2.getCount(): %d\n",
            Employee2.getCount() );
            
        System.out.printf("\nEmployee 1 : %s %s \nEmployee 2: %s %s \n",
            e1.getFirstName(), e1.getLastName(),
            e2.getFirstName(), e2.getLastName());
            
        e1 = null;
        e2 = null;
    }
}