EAS PBO Antrian loket/customer service di Stasiun Surabaya Gubeng

Saat kita berkunjung ke stasiun, kita bisa melihat ada semacam antrian untuk loket, customer service, boarding pass, dan keluar. Untuk loket dan customer service, biasanya disediakan mesin antrian untuk pelanggan yang akan membeli tiket di loket ataupun yang ada keluhan dan ingin ke customer service.

Disini saya mencoba merancang sistem antrian untuk loket dan customer service di stasiun.
Berikut ini adalah source codenya :

Class StasiunKA
DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. public class StasiunKA
  5. {
  6.    private JFrame mainFrame;
  7.    private JLabel headerLabel;
  8.    private JLabel statusLabel;
  9.    private JPanel controlPanel;
  10.    private LoketTiket a;
  11.    private CustomerService b;
  12.    public StasiunKA(){
  13.        prepareGUI();
  14.        this.a = new LoketTiket();
  15.        this.b = new CustomerService();
  16.    }
  17.    public static void main(String[] args){
  18.        StasiunKA test = new StasiunKA();
  19.        test.showButton();
  20.    }
  21.    private void prepareGUI(){
  22.        mainFrame = new JFrame("Stasiun Kereta Api - Surabaya Gubeng(SGU)");
  23.        mainFrame.setSize(500,200);
  24.        mainFrame.setLayout(new GridLayout(31));
  25.      
  26.        mainFrame.addWindowListener(new WindowAdapter() {
  27.            public void windowClosing(WindowEvent windowEvent){
  28.                System.exit(0);
  29.            }        
  30.        });
  31.        
  32.        headerLabel = new JLabel(""JLabel.CENTER);        
  33.        statusLabel = new JLabel(""JLabel.CENTER);    
  34.        statusLabel.setSize(350,100);
  35.  
  36.        controlPanel = new JPanel();
  37.        controlPanel.setLayout(new FlowLayout());
  38.  
  39.        mainFrame.add(headerLabel);
  40.        mainFrame.add(controlPanel);
  41.        mainFrame.add(statusLabel);
  42.        mainFrame.setVisible(true);  
  43.    }
  44.    private void showButton(){
  45.        headerLabel.setText("Selamat datang di Stasiun Surabaya Gubeng..");
  46.        
  47.        JButton nButton = new JButton("Pelanggan");
  48.        JButton pButton = new JButton("Petugas");
  49.        nButton.addActionListener(new ActionListener(){
  50.            public void actionPerformed(ActionEvent e){      
  51.                String pilihan = JOptionPane.showInputDialog("Silahkan pilih:\n 1. Loket\n 2. Customer Service");
  52.                char c = pilihan.charAt(0);
  53.                if(c=='1'){
  54.                    String pilih = JOptionPane.showInputDialog("Silahkan pilih:\n 1. Pemesanan Go-Show\n 2. Pemesanan KA Lokal\n 3. Pemesanan KA Reguler\n 4. Perubahan/Pembatalan Tiket\n");
  55.                    char x = pilih.charAt(0);
  56.                    if(x=='1')
  57.                        a.ticketT('a');
  58.                    else if(x=='2')
  59.                        a.ticketT('b');
  60.                    else if(x=='3')
  61.                        a.ticketT('c');
  62.                    else if(x=='4')
  63.                        a.ticketT('d');
  64.                    else{
  65.                        String message1 = String.format("Pilihan yang Anda masukkan tidak tersedia");
  66.                        JOptionPane.showMessageDialog(null, message1);
  67.                    }
  68.                }
  69.                else if(c=='2'){
  70.                    b.ticketU();
  71.                }
  72.                else{
  73.                    String message2 = String.format("Pilihan yang Anda masukkan tidak tersedia");
  74.                    JOptionPane.showMessageDialog(null, message2);
  75.                }
  76.            }          
  77.        });
  78.        pButton.addActionListener(new ActionListener(){
  79.            public void actionPerformed(ActionEvent e){
  80.                String pil = JOptionPane.showInputDialog("Silahkan pilih:\n 1. Loket\n 2. Customer Service");
  81.                char c = pil.charAt(0);
  82.                if(c=='1'){
  83.                    String p = JOptionPane.showInputDialog("Silahkan pilih:\n 1. Pemesanan Go-Show\n 2. Pemesanan KA Lokal\n 3. Pemesanan KA Reguler\n 4. Perubahan/Pembatalan Tiket\n");
  84.                    char y = p.charAt(0);
  85.                    if(y=='1')
  86.                        a.screenT('a');
  87.                    else if(y=='2')
  88.                        a.screenT('b');
  89.                    else if(y=='3')
  90.                        a.screenT('c');
  91.                    else if(y=='4')
  92.                        a.screenT('d');
  93.                    else{
  94.                        String message3 = String.format("Pilihan yang Anda masukkan tidak tersedia");
  95.                        JOptionPane.showMessageDialog(null, message3);
  96.                    }
  97.                }
  98.                else if(c=='2'){
  99.                    String z = JOptionPane.showInputDialog("Silahkan pilih:\n 1. Meja 1\n 2. Meja 2");
  100.                    char w = z.charAt(0);
  101.                    if(w=='1')
  102.                        b.screenU('a');
  103.                    if(w=='2')
  104.                        b.screenU('b');
  105.                    else{
  106.                        String message4 = String.format("Pilihan yang Anda masukkan tidak tersedia");
  107.                        JOptionPane.showMessageDialog(null, message4);
  108.                    }
  109.                }
  110.                else{
  111.                    String message4 = String.format("Pilihan yang Anda masukkan tidak tersedia");
  112.                    JOptionPane.showMessageDialog(null, message4);
  113.                }
  114.            }          
  115.        });
  116.        controlPanel.add(nButton);
  117.        controlPanel.add(pButton);
  118.        mainFrame.setVisible(true);  
  119.    }
  120. }


Class CustomerService
DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. import java.util.*;
  2. import java.text.*;
  3. import javax.swing.*;
  4. public class CustomerService
  5. {
  6.    private int nomorCS=0;
  7.    private int antriCS=0;
  8.    private date q;
  9.  
  10.    Date dNow = new Date();
  11.    SimpleDateFormat ft = new SimpleDateFormat("E, dd.MM.yyyy   hh:mm:ss a");
  12.    
  13.    public void ticketU(){
  14.        this.q = new date();
  15.        String message1 = String.format("-------- PT. Kereta Api Indonesia --------\nStasiun Surabaya Gubeng\n\n"+q.getTanggal()+"\n\nNomor Antrian Anda :\nCustomer Service\nCS-%d\n\nMohon tunggu hingga nomor antrian anda dipanggil\nJumlah antrian tersisa: %d\n-------- PT. Kereta Api Indonesia --------", nomorCS+1, nomorCS-antriCS);
  16.        JOptionPane.showMessageDialog(null, message1);
  17.        nomorCS++;
  18.    }
  19.    public void screenU(char x){
  20.        antriCS++;
  21.        if(x=='a'){
  22.            String message2 = String.format("Pelayanan:\nMeja 1\nCS-%d\n\nSisa antrian : %d", nomorCS-(nomorCS-antriCS),nomorCS-antriCS);
  23.            JOptionPane.showMessageDialog(null, message2);
  24.        }
  25.       else if(x=='b'){
  26.            String message2 = String.format("Pelayanan:\nMeja 2\nCS-%d\n\nSisa antrian : %d", nomorCS-(nomorCS-antriCS),nomorCS-antriCS);
  27.            JOptionPane.showMessageDialog(null, message2);
  28.        }
  29.    }
  30. }


Class LoketTiket
DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. import java.util.*;
  2. import java.text.*;
  3. import javax.swing.*;
  4. public class LoketTiket
  5. {
  6.    private int nomorGS=0;
  7.    private int nomorKL=0;
  8.    private int nomorKR=0;
  9.    private int nomorPPT=0;
  10.  
  11.    private int antriGS=0;
  12.    private int antriKL=0;
  13.    private int antriKR=0;
  14.    private int antriPPT=0;
  15.    
  16.    private date q;
  17.    
  18.    public void ticketT(char x){
  19.        this.q = new date();
  20.        if(x=='a'){
  21.            String message1 = String.format("-------- PT. Kereta Api Indonesia --------\nStasiun Surabaya Gubeng\n\n"+q.getTanggal()+"\n\nNomor Antrian Anda :\nPemesanan Go-Show\nGS-%d\n\nMohon tunggu hingga nomor antrian anda dipanggil\nJumlah antrian tersisa: %d\n-------- PT. Kereta Api Indonesia --------", nomorGS+1, nomorGS-antriGS);
  22.            JOptionPane.showMessageDialog(null, message1);
  23.            nomorGS++;
  24.        }
  25.        else if(x=='b'){
  26.            String message2 = String.format("-------- PT. Kereta Api Indonesia --------\nStasiun Surabaya Gubeng\n\n"+q.getTanggal()+"\n\nNomor Antrian Anda :\nPemesanan KA Lokal\nKL-%d\n\nMohon tunggu hingga nomor antrian anda dipanggil\nJumlah antrian tersisa: %d\n-------- PT. Kereta Api Indonesia --------", nomorKL+1, nomorKL-antriKL);
  27.            JOptionPane.showMessageDialog(null, message2);
  28.            nomorKL++;
  29.        }
  30.        else if(x=='c'){
  31.            String message3 = String.format("-------- PT. Kereta Api Indonesia --------\nStasiun Surabaya Gubeng\n\n"+q.getTanggal()+"\n\nNomor Antrian Anda :\nPemesanan KA Reguler\nKR-%d\n\nMohon tunggu hingga nomor antrian anda dipanggil\nJumlah antrian tersisa: %d\n-------- PT. Kereta Api Indonesia --------", nomorKR+1, nomorKR-antriKR);
  32.            JOptionPane.showMessageDialog(null, message3);
  33.            nomorKR++;
  34.        }
  35.        else if(x=='d'){
  36.            String message4 = String.format("-------- PT. Kereta Api Indonesia --------\nStasiun Surabaya Gubeng\n\n"+q.getTanggal()+"\n\nNomor Antrian Anda :\nPerubahan/Pembatalan Tiket\nPPT-%d\n\nMohon tunggu hingga nomor antrian anda dipanggil\nJumlah antrian tersisa: %d\n-------- PT. Kereta Api Indonesia --------", nomorPPT+1, nomorPPT-antriPPT);
  37.            JOptionPane.showMessageDialog(null, message4);
  38.            nomorPPT++;
  39.        }
  40.  
  41.    }
  42.    public void screenT(char y){
  43.        if(y=='a'){
  44.            antriGS++;
  45.            String message6 = String.format("Pelayanan:\nPemesanan Go-Show\nGS-%d\n\nSisa antrian : %d", nomorGS-(nomorGS-antriGS),nomorGS-antriGS);
  46.            JOptionPane.showMessageDialog(null, message6);
  47.        }
  48.        else if(y=='b'){
  49.            antriKL++;
  50.            String message7 = String.format("Pelayanan:\nPemesanan KA Lokal\nKL-%d\n\nSisa antrian : %d", nomorKL-(nomorKL-antriKL),nomorKL-antriKL);
  51.            JOptionPane.showMessageDialog(null, message7);
  52.        }
  53.        else if(y=='c'){
  54.            antriKR++;
  55.            String message8 = String.format("Pelayanan:\nPemesanan KA Reguler\nKR-%d\n\nSisa antrian : %d", nomorKR-(nomorKR-antriKR),nomorKR-antriKR);
  56.            JOptionPane.showMessageDialog(null, message8);
  57.        }
  58.        else if(y=='d'){
  59.            antriPPT++;
  60.            String message9 = String.format("Pelayanan:\nPerubahan/Pembatalan Tiket\nPPT-%d\n\nSisa antrian : %d", nomorPPT-(nomorPPT-antriPPT),nomorPPT-antriPPT);
  61.            JOptionPane.showMessageDialog(null, message9);
  62.        }
  63.  
  64.    }
  65. }


Class date
DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. import java.util.*;
  2. import java.text.*;
  3. public class date
  4. {
  5.    public String getTanggal(){
  6.        Date dNow = new Date();
  7.        SimpleDateFormat ft = new SimpleDateFormat("E, dd.MM.yyyy   hh:mm:ss a");
  8.        return ft.format(dNow);
  9.    }
  10. }



Dan berikut ini adalah skema code programnya


Setelah source codenya di compile, kita coba jalankankan programnya. Berikut ini adalah User Interface programnya. Terdapat 2 menu, yaitu "Pelanggan" dan "Petugas".

Baik pelanggan ataupun petugas, akan diberi pilihan "Loket" dan "Customer Service". Perbedaannya, jika pelanggan mengambil antrian, sedangkan di bagian petugas melayani.

Jika kita memilih "1. Loket", akan diberikan menu seperti dibawah ini. Berlaku untuk pelanggan dan petugas.

Jika kita pilih salah satu menu, disini saya mencontohkan pilihan 1, yaitu Pemesanan Go-Show. Jika sebagai pelanggan, tampilannya akan seperti dibawah ini. Mendapatkan struk antrian yang berisi hari, tanggal, dan jam.

Jika di bagian petugas, akan seperti dibawah ini.

Untuk customer service tidak jauh berbeda seperti di loket, tetapi akan langsung dapat struk antrian tanpa diberikan sub menu seperti di loket.

Untuk mempercepat pelayanan, biasanya terdapat lebih dari satu meja pelayanan. Disini saya menyediakan 2 meja customer service.

Setalah memilih salah satu meja pelayan.

Sekian program yang saya rancang untuk memenuhi tugas EAS mata kuliah Pemrograman Berorientasi Objek