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;
    }
}

PBO Ticket Machine (tugas 3)

Studi Kasus Ticket Machine

Ticket Machine adalah sebuah mesin seperti ATM, yang berfungsi melayani penjualan tiket kereta api dari satu tujuan ke tujuan yang lain. Mesin ini berisi informasi harga tiket ke berbagai tujuan, menghitung kembalian, dan mencetak bukti pembelian tiket.

Class TicketMachine
/**
 * TicketMachine
 * Monica I H
 * PBO
 */
public class TicketMachine
{
    // The price of a ticket from this machine.
   private int price;
    //The amount of money entered by a customer so far.
   private int balance;
    // The total amount of money collected by this machine.
   private int total;
   
   public TicketMachine (int ticketCost)
   {
       price=ticketCost;
       balance=0;
       total=0;
   }
   
   public int getPrice()
   {
       return price;
   }
   
   public int getBalance()
   {
       return balance;
   }
   
   public void insertMoney(int amount)
   {
       balance=balance+amount;
   }
   
   public void printTicket()
   {
        // Simulate the printing of a ticket.
       System.out.println("##################");  
       System.out.println("# The BlueJ Line");  
       System.out.println("# Ticket");  
       System.out.println("# " + price + " cents.");  
       System.out.println("##################");  
       System.out.println();
       
        // Update the total collected with the balance.
       total=total+balance;
        // Clear the balance.
       balance=0;
   }
}

Main Program

/**
 * TicketMachine-Main
 * Monica I H
 * PBO
 */
import java.util.Scanner;
public class IntMain
{
    public static int main()
    {
        Scanner scan= new Scanner(System.in);  
        int cost,menu;  
        System.out.println("Masukkan harga tiket: ");  
        cost=scan.nextInt();
        TicketMachine ticket=new TicketMachine(cost);
        while (true)
        {
            System.out.println("1. Get Price");  
            System.out.println("2. Get Balance");  
            System.out.println("3. Insert Money");  
            System.out.println("4. Print Ticket");
            System.out.println("5. Exit");
            menu=scan.nextInt();  
                switch(menu)
                {
                    case 1:  
                        cost=ticket.getPrice();  
                        System.out.println(cost);  
                        break;  
                    case 2:  
                        System.out.println(ticket.getBalance());  
                        break;  
                    case 3:  
                        int money=scan.nextInt();  
                        ticket.insertMoney(money);  
                        break;  
                    case 4:  
                        ticket.printTicket();  
                        break;  
                    case 5:
                        return 0;
                }
        }
    }
}

Output:

Senin, 13 Maret 2017

MPPL Contoh Proposal Penawaran (tugas 3)

draft

MPPL Contoh Kerangka Acuan Kerja (KAK) Pembuatan Aplikasi Pengendalian Internal (tugas 2)

PEMBUATAN APLIKASI PENGENDALIAN INTERNAL KEGIATAN PENGEMBANGAN LAYANAN INFORMASI ADMINISTRASI KEPEGAWAIAN SERTA SINKRONISASI KEBIJAKAN BIDANG KEPEGAWAIAN DI JAWA TENGAH


Latar Belakang
        Badan Kepegawaian Daerah (BKD) Provinsi Jawa Tengah mempunyai tugas pokok membantu Gubernur dalam penyelenggaraan Pemerintahan Daerah di bidang Manajemen PNS Daerah. Dalam rangka pelaksanaan tugasnya, BKD mempunyai fungsi sebagai perencana, pengembang, dan pelayan administrasi kepegawaian bagi Pegawai Negeri Sipil Daerah (PNSD) di lingkungan Pemerintah Provinsi Jawa Tengah. Fungsi-fungsi tersebut dapat terwujud bila didukung sistem tata kerja yang jelas, rinci serta dukungan SDM berkualitas dan handal yang dapat bekerja sama mencapai tujuan organisasi dalam mendukung rangka mendukung pengambilan keputusan dan kendali dalam organisasi. Sesuai pasal 34 Undang-Undang Nomor 43 Tahun 1999 tentang perubahan atas Undang-Undang Nomor 8 Tahun 1974 tentang Pokok-Pokok Kepegawaian bahwa untuk kelancaran pelaksanaan manajemen Pegawai Negeri Sipil Daerah dibentuk Badan Kepegawaian Daearah yang merupakan perangkat daerah. Selanjutnya pada Keputusan Presiden Nomor 159 Tahun 2000 tentang Pedoman Pembentukan Badan Kepegawaian Daerah bahwa yang dimaksud dengan Badan kepegawaian Daerah adalah perangkat daerah yang melaksanakan manajemen Pegawai Negeri Sipil dalam membantu tugas pokok Pejabat Pembina Kepegawaian Daerah.

Maksud dan Tujuan
Maksud
Aplikasi pengendalian internal dibuat untuk:
a. Mencatat realisasi keuangan yang terintegrasi dari aplikasi Sistem Informasi Keuangan Internal (SIKI) dan realisasi fisik serta target fisik yang sudah ditetapkan oleh Biro Bangda.
b. Mencatat jadwal pelaksanaan kegiatan yang akan datang, sehingga masing-masing bidang dapat mempunyai reminder/pengingat tentang list kegiatan yang sudah mendekati jadwal pelaksanaan ataupun yang sudah melebihi jadwal pelaksanaan.
c. Membuat laporan triwulan yang dikirimkan ke Bappeda.
 
Tujuan
Tujuan Pembuatan Aplikasi Pengendalian Internal ini adalah :
a. Mengintegrasikan Data Program dan Kegiatan dari Sistem Penganggaran e-Budgeting/SIMDA2016.
b. Menambahkan breakdown data program dan kegiatan untuk masing-masing sub kegiatan perbidang yang ada di BKD.
c. Membreakdown masing-masing sub kegiatan menjadi rincian pelaksanaan kegiatan disertai dengan target output PNS dan PNS yang bertanggung jawab sebagai pelaksana dari rincian tersebut.

Metode Kerja
        Kegiatan Pembuatan Aplikasi Pengendalian Internal pada Badan Kepegawaian Daerah Provinsi Jawa Tengah dalam bentuk tahapan-tahapan kegiatan, yang dilaksanakan sebagai berikut:
1. Tim Perancangan/DesainSistem (PendampinganPenyedia Jasa),
2. Tim Pembuatan/Pemrograman Aplikasi (Pendampingan Penyedia Jasa),
3. Pelaporan.

Lingkup Kegiatan
        Kegiatan Pembuatan Aplikasi Pengendalian Internal pada Badan Kepegawaian Daerah Provinsi Jawa Tengah ini dilaksanakan dalam bentuk pembuatan modul-modul aplikasi berbasis web melalui tahap-tahap analisis, desain, koding, uji coba dan implementasi.

Perancangan Sistem
-Metodologi
        Kegiatan Pembuatan Aplikasi Pengendalian Internal pada Badan Kepegawaian Daerah Provinsi Jawa Tengah dilaksanakan dalam bentuk pembuatan sebuah program aplikasi berbasis web melalui tahapan-tahapan sebagai berikut:
Komponen Sistem :
a. Arsitektur sistem : berbasis Web Application
b. Database MySQL dan Pemrograman dengan PHP
c. Server Aplikasi (Operating System Linux)
d. Komputer client dengan Web Browser (OS. Linux dan Windows)

-Desain Aplikasi
        Aplikasi Pengendalian Internal pada Badan Kepegawaian Daerah Provinsi Jawa Tengahdidesain dengan menggunakan pendekatan Desain Web berbasiskan Framework. Pendekatan ini bertujuan untuk mempermudah di dalam development system dan menghasilkan system yang user friendly bagi user, sehingga menghasilkan aplikasi yang mudah di pahami dan mudah digunakan untuk membantu system kerja di dalam monitoring kegiatan dan program yang ada.

-Otoritas Pengguna
        Pada Aplikasi Pengendalian Internal pada Badan Kepegawaian Daerah Provinsi Jawa Tengah setiap user login mempunyai tipe user yang menentukan hak akses terhadap modul-modul yang ada. Setelah melalui proses validasi login, operator yang mempunyai hak akses terhadap modul ini dapat menjalankan proses-proses untuk input, edit, dan membuat laporan dalam format PDF yang dapat dicetak melalui printer.
Otoritas pengguna tersebut yaitu:
a. Administrator BKD
Memiliki semua hak akses, manajemen pengguna, manajemen setting aplikasi dan database.
b. Operator BKD
Memiliki hak untuk inputdata program dan kegiatan, edit, menampilkan data, laporan dan seluruh dana perencanaan program dan kegiatan yang akan di susun di lingkungan BKD Pemerintah Provinsi Jawa Tengah.
c. User BKD
Memiliki hak untuk mengakses aplikasi sesuai dengan bidangnya masing-masing.

Keluaran Kegiatan
        Keluaran yang dihasilkan dari pelaksanaan pekerjaan ini adalah:
1. Perangkat lunak Pembuatan Aplikasi Pengendalian Internal untuk mendukung Kegiatan Pengelolaan dan monitoring Data Program dan Kegiatan di BKD Provinsi Jawa Tengah sehingga dapat diperoleh informasi yang cepat, tepat dan akurat demi terselenggaranya tertib administrasi pengelolaan keuangan dan pertanggung jawaban. 
2. Dokumentasi yang berkaitan dengan pengembangan aplikasi, antara lain kebutuhan sistem, desain sistem, konfigurasi sistem dan arsitektur program.
3. Dokumentasi seluruh sistem dan perangkat lunak berupa buku manual.
4. Dokumentasi SOP (System Operation Procedure) maupun SMP (System Maintenance Procedure)
5. Instalasi aplikasi
6. Pelatihan, pendampingan/asistensi, garansi dan pemeliharaan. Media dokumentasi pada proyek ini dibuat dalam format softcopy danhardcopy. Format yang digunakan dalam dokumentasi dalam bentuk softcopy adalah menggunakan standar format MS Office atau PDF. Dokumen yang diserahkan tersebut harus merupakan versi final dari aplikasi yang telah dikembangan/dibangun melalui tahapan pengujian dan integrasi sistem aplikasi.

Kebutuhan Personil dan Peralatan
        Untuk memperoleh hasil sebagaimana yang diharapkan, sesuai dengan tahapan-tahapan kegiatan dibagi menjadi kelompok kerja (tim), yaitu:
1. Tim Teknis Perancangan
2. Tim Teknis Pemrograman
3. Tim Evaluasi

        Untuk kebutuhan tersebut, maka diperlukan beberapa tenaga ahli yang memenuhi kualifikasi yang memadai dan peralatan, sebagai berikut:

 Jadwal Pelaksanaan
Pembiayaan
        Pembiayaan Pembuatan Aplikasi Pengendalian Internal pada Badan Kepegawaian Daerah dibebankan APBD Perubahan Pemerintah Provinsi Jawa Tengah Tahun Anggaran 2015 DPA Nomor 3679/DPPA/2015 tanggal 13 Oktober 2015 Rekening 120.27.0026.5.2.2.21.05 Kegiatan Pengembangan Layanan Informasi Administrasi Kepegawaian serta Sinkronisasi Kebijakan Bidang Kepegawaian di Jateng mulai dari perencanaan sampai dengan pelaporan.

Tempat
        Tempat Penyerahan hasil Pembuatan Aplikasi Pengendalian Internal adalah di Badan Kepegawaian Daerah Provinsi Jawa Tengah, Jl. Stadion Selatan No. 1 Semarang.

Pelaporan
         Laporan pelaksanaan kegiatan dibuat dalam rangkap 10 (sepuluh) dalam bahasa Indonesia, meliputi:
1. Laporan Awal, berisi :
a. Metodologi/Rencana pelaksanaan pekerjaan
b. Alokasi Tim Ahli dan tenaga pendukung lainnya
c. Jadwal kegiatan penyedia jasa
d. Desain awal aplikasi

Laporan harus diserahkan selambat-lambatnya 7 (tujuh) hari kalender sejak SPMK diterbitkan.
2. Laporan Akhir, berisi :
a. Memuat seluruh proses kegiatan dan pertanggungjawaban karena telah selesainya tahapan-tahapan kegiatan yang sudah dilakukan

b. Dokumentasi lain yang berkaitan dengan kegiatan pengembangan sistem ini.
Laporan harus diserahkan selambat-lambatnya 45 (empat puluh lima) hari kalender sejak SPMK diterbitkan.
3. Manual Book sebanyak 10 (sepuluh) Buku
4. CD Master Aplikasi berisi seluruh laporan dan hasil aplikasi sebanyak 10 (sepuluh) CD

Penutup
          Demikian Kerangka Acuan Kerja (KAK) Pembuatan Aplikasi Pengendalian Internal pada Badan Kepegawaian Daerah Provinsi Jawa Tengah ini disusun sebagai dasar pelaksanaan kegiatan, sehingga BKD Provinsi Jawa Tengah dapat mengatasi permasalahan-permasalahan yang ada, terutama dalam Pembuatan Aplikasi Pengendalian Internalpada Badan Kepegawaian Daerah provinsi Jawa Tengah.

Sumber: bkd.jatengprov.go.id