Post on 06-Nov-2020
23
BAB III
PEMBAHASAN
3.1. Tinjauan Perusahaan
Tinjauan perusahaan dilakukan di Apotek Aghnia untuk mendapatkan
gambaran tentang proses bisnis yang sedang berjalan, dan mendapatkan
informasi lain seperti struktur organisasi dan fungsi serta visi dan misi
perusahaan.
3.1.1. Sejarah Perusahaan
Apotek Aghnia didirikan pada tahun 2016 oleh Bapak H. Abdul
Rohim yang beralamat di Dawuan, Karawang. Apotek Aghnia terbentuk
akibat kesadaran masyarakat juga aparat desa dan kecamatan akan pentingnya
sarana kesehatan disana.
Apotek Aghnia memiliki visi sebagai berikut :
1. Memberikan pelayanan kesehatan yang tepat dan ramah.
2. Memberikan informasi kesehatan kepada masyarakat.
3. Menyediakan obat-obatan yang terjangkau dengan mutu yang terjamin.
Sedangkan Misi dari Apotek Aghnia adalah menjadi apotek keluarga
yang berorientasi kepada pelanggan dengan mengutamakan pelayanan
kefarmasian secara profesional.
24
3.1.2. Struktur Organisasi
Adapun struktur organisasi Apotek Aghnia adalah sebagai berikut :
Sumber : Apotek Aghnia Karawang
Gambar III.I
Struktur Organisasi Apotek Aghnia
Adapun fungsi dari masing-masing bagan struktur sesuai dengan
uraian tugas-tugasnya adalah sebagai berikut:
1. Pemilik
Tugas pemilik yaitu mengawasi dan bertanggung jawab penuh terhada
segala aktivitas yang terjadi di Apotek Aghnia.
2. Kasir
Bertugas mempersiapkan segala obat yang diperlukan untuk bagian
penjualan. Melayani permintaan dan pembelian obat. Dan menyusun
laporan kepada Pemilik Apotek.
3. Bagian Gudang
Bertugas untuk mengecek persediaan obat yang tersedia di Apotek
Aghnia.
Pemilik Apotek
Bapak H. Abdul Rohim
Kasir
Siti Marlina
Gudang
Mia Amalia
25
3.2. Tinjauan Kasus
Dalam tinjauan kasus ini, penulis akan menguraikan gambaran prosedur yang
sedang berjalan dari sistem persediaan obat pada Apotek Aghnia.
3.2.1. Proses Bisnis Sistem Berjalan
Secara umum sistem persediaan obat pada Apotek Aghnia melewati proses
sebagai berikut :
1. Proses Pengecekan Obat
Kasir setiap awal minggu membuat daftar permintaan obat untuk
stok penjualan. Bagian gudang kemudian memeriksa stok obat-
obatan dengan melihat buku stok. Apabila stok obat-obatan cukup
maka Bagian gudang memberikan surat obat keluar dari gudang.
Akan tetapi apabila stok obat berkurang atau kosong maka Bagian
gudang akan membuat dokumen surat pesanan dan mengirimkan
langsung kepada supplier.
2. Proses Pengiriman
Setelah proses pemesanan obat yang dimaksud selesai maka
supplier akan mengirimkan obat-obat ke Apotek Aghnia yang
kemudian akan diterima oleh Bagian gudang.
3. Proses Penerimaan Pesanan
Bagian gudang akan menerima obat yang dikirmkan oleh supplier.
Bagian gudang akan melakukan pengecekan obat yang diterima
sesuai dengan faktur pengiriman dari supplier.
26
4. Proses Pembuatan Laporan
Jika pengecekan telah sesuai maka bagian gudang akan melakukan
pembaruan stok obat dengan mencatat jumlah obat yang masuk.
27
3.2.2. Activity Diagram Sistem Berjalan
Gambar III.2.
Activity Diagram Sistem Berjalan
28
3.2.3. Dokumen Masukan
Adapun bentuk-bentuk dokumen yang digunakan oleh Apotek Aghnia
adalah sebagai berikut:
1. Nama Dokumen : Faktur Pengiriman
Fungsi : Untuk mengetahui Daftar Obat yang Dikirim
Sumber : Supplier
Tujuan : Bagian Gudang
Media : Kertas
Frekuensi : Setiap Ada Pengiriman Obat
Bentuk : A2
29
3.2.4. Dokumen Keluaran
Adapun dokumen-dokumen keluaran yang digunakan di Apotek
Aghnia Farma adalah sebagai berikut:
1. Nama Dokumen : Surat Obat Keluar
Fungsi : Untuk Mengetahui Daftar Obat Yang Keluar
Sumber : Bagian Gudang
Tujuan : Kasir
Media : Kertas
Jumlah : 1 Lembar
Frekuensi : Setiap Kali Obat Keluar Gudang
Bentuk : B1
2. Nama Dokumen : Surat Pemesanan Obat
Fungsi : Untuk Memesan Obat Ke Supplier
Sumber : Bagian Gudang
Tujuan : Supplier
Media : Kertas
Jumlah : 1 Lembar
30
Frekuensi : Setiap Kali Melakukan Pemesanan Obat
3. Nama Dokumen : Laporan Stok
Fungsi : Untuk Mengetahui Daftar Obat
Sumber : Bagian Gudang
Tujuan : Kasir
Media : Kertas
Jumlah : 1 Lembar
Frekuensi : Setiap Kali Pembaruan Stok
Bentuk : B3
3.2.5. Permasalahan Pokok
Permasalahan yang ada di Apotek Aghnia adalah sebagai berikut:
1. Banyaknya pengeluaran yang tidak sesuai dengan pencatatan
menyebabkan lambatnya pembaruan persediaan obat sehingga
kurang akurat.
2. Dokumen yang disimpan dalam bentuk kertas menyebabkan
dokumen hilang atau rusak.
31
3. Belum adanya pembagian kerja menyebabkan terlambatnya
penyusunan laporan.
3.2.6. Pemecahan Masalah
Adapun pemecahan masalah dari permasalahan diatas adalah sebagai
berikut:
1. Disarankan untuk menggunakan sistem yang sudah terkomputerisasi
agar pencatatan sesuai dengan stok obat yang tersedia.
2. Selain bentuk dokumen penulis menyarankan untuk menggunakan
media database sebagai tempat penyimpanan agar terhindar dari
resiko hilang ataupun rusak.
3. Diharapkan ada pembagian kerja untuk Admin dan Bagian Gudang
mengingat pentingnya sistem persediaan obat agar laporan yang
dihasilkan lebih akurat.
3.3. Analisa Kebutuhan Software
Dalam menganalisa kebutuhan software penulis membuat gambaran
melalui Analisis Kebutuhan yang akan diuraikan sebagai berikut:
3.3.1. Analisa Kebutuhan
Berikut ini adalah analisa kebutuhan pengguna terhadap sistem
persediaan obat pada Apotek Aghnia:
A. Kebutuhan Bagian Gudang (user)
1. Gudang Login
32
2 Gudang mengakses menu utama
A. Gudang mengakses menu master
1. Gudang mengelola data obat
2. Gudang mengelola data supplier
B. Gudang mengakses menu transaksi
1. Gudang mengelola transaksi pembelian obat
C.Gudang mengakses menu laporan
3. User Logout
B. Kebutuhan Bagian Kasir
1. Kasir melakukan Login
2. Kasir dapat mengakses menu Utama
A. Gudang mengakses menu master
1. Kasir mengelola data user
2. Kasir mengelola data obat
B. Kasir mengakses menu transaksi
1. Kasir mengelola transaksi penjualan obat
C. Kasir mengakses menu laporan
3. Kasir melakukan Logout
33
3.3.2. Use Case Diagram
A. User
1. User Login
Gambar III.3
Use Case Diagram Login
Tabel III.1
Deskripsi Use Case Diagram Login
Use Case Narative Login
Tujuan User dapat login kedalam sistem
Deskripsi Sistem ini memungkinkan aktor untuk
mengakses sitem persediaan obat
34
Skenario Utama
Aktor User
Kondisi Awal Aktor Membuka Aplikasi
Aksi Aktor Reaksi Sistem
1. Aktor memilih Sistem akan menampilkan textbox untuk mengisi kode
tombol Login user dan password
2
. Aktor memilih Sistem akan membatalkan untuk login
tombol Batal
Kondisi Akhir Jika perintah sesuai maka sistem akan masuk
kedalam aplikasi pembelian
2. User Mengakses Menu Utama
Gambar III.4
Use Case Diagram Menu Utama
35
Tabel III.2
Deskripsi Use Case Diagram Menu Utama
Use Case Narrative Menu Utama
Tujuan User dapat melakukan pengolahan data yang ada di
menu master, menu transaksidan menu laporan.
Deskripsi Sistem ini memungkinkan aktor untuk mengolah
sistem persediaan obat
Skenario Utama
Aktor User
Kondisi Awal Aktor melakukan login dan telah berada di sistem
pembelian
Aksi Aktor Reaksi Sistem
3. Aktor memilih menu
master
3. Aktor memilih tombol
Menu Trasnsaksi
3. Aktor memilih tombol
Menu Laporan
Sistem menampilkan menu master
Sistem menampilkan menu transaksi
Sistem menampilkan menu laporan
Kondisi Akhir Jika perintah sesuai maka sistem akan menampilkan
seuai dengan yang diinginkan.
A. Menu Transaksi Pembelian
36
Gambar III.5
Use Case Diagram Transaksi Pembelian
Tabel III.3
Deskripsi Use Case Diagram Transaksi Pembelian
Use Case Narrative Menu Master
Tujuan Gudang dapat melakukan pengolahan pembelian
yang ada di menu transaksi
Deskripsi Sistem memungkinkan aktor untuk mengolah
sistem persediaan obat
Skenario Utama
Aktor Gudang
Kondisi Awal Aktor melakukan login dan telah berada disistem
pembelian
Aksi Aktor Reaksi Sistem
Aktor memilih
tombol Transaksi
Sistem menampilkan submenu master :
1. Gudang mengelola data pembelian
37
Kondisi Akhir Jika perintah sesuai maka sistem akan
menampilkan sesuai yang diinginkan
B. Mengakses Menu Transaksi Penjualan
Gambar III.6
Use Case Diagram Menu Transaksi Penjualan
Tabel III.4
Deskripsi Use Case Diagram Menu Transaksi
Use Case Narrative Menu Transaksi
Tujuan Kasir dapat melakukan pengolahan data yang
ada di menu transaksi
Deskripsi Sistem ini memungkinkan kasir untuk
mengolah sistem persediaan obat
Skenario Utama
Aktor Kasir
Kondisi Awal Aktor telah melakukan login dan berada di
sistem penjualan
Aksi Aktor Reaksi Sistem
Aktor memilih tombol menu transaksi Sistem menampilkan submenu transaksi :
1. User mengelola transaksi pengeluaran obat
Kondisi Akhir Jika perintah sesuai maka sistem akan
menampilkan yang diinginkan
3. User Logout
38
Gambar III.7
Use Case Diagram Menu Logout
Tabel III.5
Deskripsi Use Case Diagram Menu Logout
Use Casa Narrative Logout
Tujuan User dapat logout atau keluar dari sistem
Deskripsi Sistem ini memungkinkan aktor untuk
keluar dari sitem
Skenario Utama
Aktor User
Kondisi Awal Aktor telah berada di sistem pembelian
Aksi Aktor Reaksi Sistem
1. Aktor memilih tombol
Logout
2. Aktor memilih tombol
batal
Sistem akan menampilkan textbox
peringatan
Sistem akan membatalkan untuk logout
Kondisi Akhir Jika perintah sesuai maka sistem keluar
dan kembali ke menu Login
39
3.3.3. Activity Diagram
1. User Login
40
Gambar III.8
Activity Diagram Login
2. Gudang Mengakses Menu Transaksi Pembelian
41
Gambar III.9
Activity Diagram Menu Transaksi Pembelian
3. User Mengakses Menu Master
42
Gambar III.10
Activity Diagram Menu Master
43
4. User Mengakses Menu Transaksi Penjualan
Gambar III.11
Activity Diagram Menu Transaksi
5. User Mengakses Menu Laporan
44
Gambar III.12
Activity Diagram Menu Laporan
6. User Mengakses Menu Logout
45
Gambar III.13
Activity Diagram Menu Logout
3.4. Desain
46
Didalam tahap desain ini penulis menjabarkan tentang Entity Relationship
Digram (ERD), Logical Record Structure (LRS), Logical Record Structure
(LRS), Spesifikasi File, Sequence Diagram, Deployment Diagram dan User
Interface dari sistem yang diusulkan.
3.4.1. Entity Relationship Digram (ERD)
mastersupplier
*kd_sup
nm_sup
tlp
memiliki pembelian
Detail_transaksi
almt
Kd_sup
tgl*notrans
total
memiliki
memilikipenjualan*notrans
tgl
nama_cos
alamat_cos
total
memiliki masterobat
jmobat
hgjual
hgbeli
jnobat
nmobat
*kd_obat
1 M
1
1
1
M1 M
Gambar III.14 Entity Relationship Digram (ERD)
3.4.2. Logical Record Structure (LRS)
47
mastersupplier
PK kd_sup
nm_sup
tlp
almt
pembelian
PK notrans
tgl
kd_sup
total
detail_transaksi
notrans
kd_obat
hg
jumlah
subtotal
penjualan
PK notrans
tgl
nama_cos
alamat_cos
total
masterobat
PK kd_obat
nmobat
jnobat
hgbeli
hgjual
jmobat1 M1
1
M1
M
1
Gambar III.15
Logical Record Structure (LRS)
3.4.3. Spesifikasi File
Spesifikasi file merupakan rancangan tabel yang akan digunakan disistem
usulan tsesuai dengan pembahasan diatas.
1. Spesifikasi File Data User
Nama file : Data User
Fungsi : Digunakan untuk mengelola data user
Akronim : user.myd
Tipe file : Master
Media file : Harddisk
Organisasi file : Index sequential
48
Akses file : Random
Panjang record : 16 Byte
Field key : kodeuser
Software : MySQL
Tabel III.6
Spesifikasi File User
No Elemen Data Akronim Type Panjang Keterangan
1 Kode User kodeuser Varchar 15 Primary key
2 Nama User namauser Varchar 25
3 Password password Varchar 10
4 Level level Varchar 5
2. Spesifikasi File Data Obat
Nama file : Data Obat
Fungsi : Digunankan untuk mengelola data obat
Akronim : masterobat.myd
Tipe file : Master
Media file : Harddisk
Organisasi file : Index sequential
Akses file : Random
Panjang record : 16 Byte
Field key : kodeobat
Software : MySQL
49
Tabel III.7
Spesifikasi File Obat
No Elemen Data Akronim Type Panjang Keterangan
1 Kode Obat kodeobat Varchar 15 Primary key
2 Nama Obat namaobat Varchar 30
3 Harga Beli hargabeli Int 10
4 hargajual hargajual Int 10
5 Jumlah jumlah Int 7
3. Spesifikasi File Data Supplier
Nama file : Data supplier
Fungsi : Digunakan untuk mengelola data supplier
Akronim : mastersupplier.myd
Tipe file : Master
Media file : Harddisk
Organisasi file : Index sequential
Akses file : Random
Panjang record : 16 Byte
Filed key : kodesupplier
Software : MySQL
50
Tabel III.8
Spesifikasi File Supplier
No Elemen Data Akronim Type Panjang Keterangan
1 Kode Supplier kodesupplier Varchar 20 Primary key
2 Nama Supplier namasupplier Varchar 25
3 Email email Varchar 20
4 No Supplier nosupplier Varchar 15
5 Alamat alamat Text
4. Spesifikasi File Penerimaan Obat
Nama file : Penerimaan Obat
Fungsi : Digunakan untuk mengelola penerimaan obat
Akronim : penerimaan_obat.myd
Tipe file : Transaksi
Media file : Harddisk
Organisasi file : Index sequential
Akses file : Random
Panjang record : 20 Byte
Field key : kodepenerimaan
Software : MySQL
51
Tabel III.9
Spesifikasi File Transaksi Penerimaan Obat
No Elemen Data Akronim Type Panjang Keterangan
1 Kod Penerimaan kodepenerimaan Varchar 15 Primarry Key
2 Tanggal tanggal Date
3 Kode User kodeuser Varchar 5
4 Kode upplier kodesupplier Varchar 5 Foreign Key
5 Total total double
5. Spesifikasi File Transaksi Pengeluaran Obat
Nama file : Detail Pengeluaran Obat
Fungsi : Digunakan mengelola detail pengeluaran obat
Akronim : detail_penerimaan.myd
Tipe file : Transaksi
Media file : Harddisk
Organisasi file : Index sequential
Akses file : Random
Panjang record : 42 Byte
Field key : kodepengeluaran
Software : MySQL
Tabel III.17
Spesifikasi File Detail Pengeluaran Obat
No Elemen Data Akronim Type Panjang Keterangan
1 Kode Pengeluaran kodepengeluaran Varchar 15 Primary Key
2 Kode Obat kodeobat Varchar 5 Foreign Key
3 Jumlah jumlah Int 11
52
4 Subtotal subtotal Int 11
3.4.4. Sequence Diagram
Menu Control Form
Sistem User Penerimaan Penerimaan
Tambah penerimaan() get (form penerimaan)
set (form penerimaan)
get (kodepenerimaan)
get (kodesupplier) get (kodepenerimaan)
get (kodesupplier)
get (kodeobat)
get (nama_barang)
set (form yang telah diisi)
set (form yang telah diisi)
Simpan()
get (simpan)
Proses penyimpanan()
get (simpan)
set (data telah disimpan)
set (data telah disimpan)
Tambah()
get (tambah)
Batal()
get (tambah)
get (batal)
get (batal)
Gambar III.16
Sequence Diagram
53
3.4.5. Deployment Diagram
Gambar III.17
Deployment Dagram
54
3.4.6. User Interface
User interface merupakan rancangan antarmuka yang ditampilkan
berdasarkan rancangan usulan yang telah penulis uraikan diatas.
1. LOGIN
Gambar.III.18
Login
2. MENU UTAMA
Gambar.III.19
Menu Utama
55
3. MASTER USER
Gambar.III.20
Master User
56
4. MASTER OBAT
Gambar.III.21
Master Obat
57
5. MASTER SUPPLIER
Gambar.III.22
Master Supplier
58
6. TRANSAKSI PENERIMAAN BARANG
Gambar.III.23
Transaksi Penerimaan Barang
59
7. TRANSAKSI PENJUALAN
Gambar.III.24
Transaksi Penjualan
60
3.5. Implementasi
Implementasi terdiri dari code generation dan pengujian blackbox testing.Hal ini
bertujuan untuk menguji rancangan program dengan skenario pengujian agar sesuai
dengan ahsil yang diharapkan.
3.5.1. Code Generation
package apk_aghnia;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.awt.event.KeyEvent;
import java.util.HashMap;
public class Pembelian extends javax.swing.JInternalFrame {
koneksi kon = new koneksi();
private Object[][] Pembelian=null;
private String[] label={"No Transaksi", "Kode Obat","Kode
Suplier","Harga","Jumlah Beli","Total", "Tanggal"};
/**
* Creates new form Pembelian
*/
public Pembelian() {
initComponents();
kon.setKoneksi();
nonaktif();
BacaTabelPembelian();
tstok1.setVisible(false);
tstok2.setVisible(false);
}
public Date date=new Date();
public SimpleDateFormat noformat=new
SimpleDateFormat("yyyy-MM-dd");
private void bersih()
{
n_fkr.setText("");
tkd_splr.setText("");
tgl.setText("");
t_nm.setText("");
61
t_tlp.setText("");
t_email.setText("");
t_almt.setText("");
t_kdobt.setText("");
t_nmobt.setText("");
t_jns.setText("");
t_hrg.setText("");
t_jml.setText("");
tstok1.setText("");
t_subtot.setText("0");
}
private void nonaktif()
{
b_tmbh.setEnabled(true);
b_simpan.setEnabled(false);
b_batal.setEnabled(false);
tkd_splr.setEnabled(false);
t_nm.setEnabled(false);
t_tlp.setEnabled(false);
t_email.setEnabled(false);
t_almt.setEnabled(false);
t_kdobt.setEnabled(false);
t_nmobt.setEnabled(false);
t_jns.setEnabled(false);
t_hrg.setEnabled(false);
t_jml.setEnabled(false);
t_subtot.setEnabled(false);
jButton1.setEnabled(false);
jButton2.setEnabled(false);
}
private void aktif()
{
b_tmbh.setEnabled(false);
b_simpan.setEnabled(true);
b_batal.setEnabled(true);
jButton1.setEnabled(true);
jButton2.setEnabled(true);
n_fkr.setEnabled(true);
t_kdobt.setEnabled(true);
t_nmobt.setEnabled(true);
t_jns.setEnabled(true);
t_hrg.setEnabled(true);
t_jml.setEnabled(true);
t_subtot.setEnabled(true);
}
void setTanggal() {
tgl.setText(noformat.format(date));
62
}
private String nomor() {
String urutan = null;
try {
kon.rs = kon.st.executeQuery("Select right (notrans,3)+1
from pembelian as nomor order by notrans desc");
if (kon.rs.next()) {
urutan = kon.rs.getString(1);
while (urutan.length() < 3) {
urutan = "0" + urutan;
}
urutan = "INV-" + noformat.format(date) + urutan;
} else {
urutan = "INV-" + noformat.format(date) + "001";
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
return urutan;
}
private void setTabel() {
int row = tbl_pembelian.getSelectedRow();
n_fkr.setText((String) tbl_pembelian.getValueAt(row, 0));
t_kdobt.setText((String) tbl_pembelian.getValueAt(row, 1));
tkd_splr.setText((String) tbl_pembelian.getValueAt(row, 2));
t_hrg.setText((String) tbl_pembelian.getValueAt(row, 3));
t_jml.setText((String) tbl_pembelian.getValueAt(row, 4));
t_subtot.setText((String) tbl_pembelian.getValueAt(row, 5));
tgl.setText((String) tbl_pembelian.getValueAt(row, 6));
}
private void BacaTabelPembelian() {
try {
String sql = "Select * From pembelian LEFT OUTER JOIN
detail_transaksi on detail_transaksi.notrans=pembelian.notrans";
kon.rs = kon.st.executeQuery(sql);
ResultSetMetaData m = kon.rs.getMetaData();
int kolom = m.getColumnCount();
int baris = 0;
while (kon.rs.next()) {
baris = kon.rs.getRow();
}
Pembelian = new Object[baris][kolom];
int x = 0;
kon.rs.beforeFirst();
while (kon.rs.next()) {
Pembelian[x][0] = kon.rs.getString("pembelian.notrans");
Pembelian[x][1] =
kon.rs.getString("detail_transaksi.kd_obat");
63
Pembelian[x][2] = kon.rs.getString("pembelian.kd_sup");
Pembelian[x][3] =
kon.rs.getString("detail_transaksi.hg");
Pembelian[x][4] =
kon.rs.getString("detail_transaksi.jumlah");
Pembelian[x][5] = kon.rs.getString("pembelian.total");
Pembelian[x][6] = kon.rs.getString("pembelian.tgl");
x++;
}
tbl_pembelian.setModel(new DefaultTableModel(Pembelian,
label));
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
}
}
private void aksi() {
try {
String sql = "insert into pembelian values('" +
n_fkr.getText() + "','" + tgl.getText() + "','" + tkd_splr.getText() +
"','" + t_subtot.getText() + "')";
kon.st.executeUpdate(sql);
String sql1 = "update masterobat set kd_obat='" +
t_kdobt.getText() + "'," + "nmobat='" + t_nmobt.getText() + "'," +
"jnobat='" + t_jns.getText() + "'," + "jmobat='" + tstok2.getText() +
"' where kd_obat='" + t_kdobt.getText() + "'";
kon.st.executeUpdate(sql1);
String sql2 = "insert into detail_transaksi values('" +
n_fkr.getText() + "','" + t_kdobt.getText() + "','" + t_hrg.getText() +
"','" + t_jml.getText() + "','" + t_subtot.getText() + "')";
kon.st.executeUpdate(sql2);
JOptionPane.showMessageDialog(null, "Data Pembelian
berhasil disimpan & Data Obat telah terupdate");
bersih();
BacaTabelPembelian();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
}
}
private void HapusData() {
try {
String sql = "Delete from pembelian where notrans='" +
n_fkr.getText() + "'";
kon.st.executeUpdate(sql);
String sql1 = "Delete from detail_transaksi where notrans='"
+ n_fkr.getText() + "'";
kon.st.executeUpdate(sql1);
64
JOptionPane.showMessageDialog(null, "Data Berhasil
Dihapus");
bersih();
BacaTabelPembelian();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
}
}
private void tambah() {
int a = Integer.parseInt(tstok1.getText());
int b = Integer.parseInt(t_jml.getText());
int c;
c = a + b;
tstok2.setText(Integer.toString(c));
}
/**
* This method is called from within the constructor to initialize
the form.
* WARNING: Do NOT modify this code. The content of this
method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
n_fkr = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
tgl = new javax.swing.JTextField();
jPanel2 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jLabel10 = new javax.swing.JLabel();
t_kdobt = new javax.swing.JTextField();
jLabel11 = new javax.swing.JLabel();
t_nmobt = new javax.swing.JTextField();
jLabel12 = new javax.swing.JLabel();
t_jns = new javax.swing.JTextField();
jLabel13 = new javax.swing.JLabel();
t_hrg = new javax.swing.JTextField();
jLabel14 = new javax.swing.JLabel();
t_jml = new javax.swing.JTextField();
jLabel15 = new javax.swing.JLabel();
t_subtot = new javax.swing.JTextField();
b_tmbh = new javax.swing.JButton();
65
jButton2 = new javax.swing.JButton();
b_simpan = new javax.swing.JButton();
b_batal = new javax.swing.JButton();
jPanel4 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
tkd_splr = new javax.swing.JTextField();
t_nm = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
t_tlp = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
t_email = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
t_almt = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tbl_pembelian = new javax.swing.JTable();
tstok1 = new javax.swing.JLabel();
tstok2 = new javax.swing.JLabel();
setBackground(new java.awt.Color(204, 255, 204));
setPreferredSize(new java.awt.Dimension(872, 684));
getContentPane().setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
jPanel1.setBackground(new java.awt.Color(204, 255, 204));
jPanel1.setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel1.setText("No Faktur :");
jPanel1.add(jLabel1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(10, 14, 79, -1));
n_fkr.setEditable(false);
jPanel1.add(n_fkr, new
org.netbeans.lib.awtextra.AbsoluteConstraints(93, 11, 115, -1));
jLabel2.setText("Tanggal :");
jPanel1.add(jLabel2, new
org.netbeans.lib.awtextra.AbsoluteConstraints(226, 14, 53, -1));
tgl.setEditable(false);
tgl.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
tglActionPerformed(evt);
}
});
66
jPanel1.add(tgl, new
org.netbeans.lib.awtextra.AbsoluteConstraints(283, 11, 109, -1));
getContentPane().add(jPanel1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(0, 40, 856, 40));
jPanel2.setBackground(new java.awt.Color(204, 255, 204));
jPanel2.setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel4.setFont(new java.awt.Font("Times New Roman", 1,
18)); // NOI18N
jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENT
ER);
jLabel4.setText("PEMBELIAN OBAT");
jPanel2.add(jLabel4, new
org.netbeans.lib.awtextra.AbsoluteConstraints(294, 0, 260, -1));
getContentPane().add(jPanel2, new
org.netbeans.lib.awtextra.AbsoluteConstraints(0, 11, 856, -1));
jPanel3.setBackground(new java.awt.Color(204, 255, 204));
jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(n
ull, "Data Obat",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new
java.awt.Font("Times New Roman", 1, 14))); // NOI18N
jPanel3.setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel10.setText("Kode Obat");
jPanel3.add(jLabel10, new
org.netbeans.lib.awtextra.AbsoluteConstraints(16, 45, 62, -1));
t_kdobt.setEditable(false);
jPanel3.add(t_kdobt, new
org.netbeans.lib.awtextra.AbsoluteConstraints(96, 37, 101, -1));
jLabel11.setText("Nama");
jPanel3.add(jLabel11, new
org.netbeans.lib.awtextra.AbsoluteConstraints(16, 77, 52, -1));
t_nmobt.setEditable(false);
jPanel3.add(t_nmobt, new
org.netbeans.lib.awtextra.AbsoluteConstraints(96, 74, 150, -1));
67
jLabel12.setText("Jenis");
jPanel3.add(jLabel12, new
org.netbeans.lib.awtextra.AbsoluteConstraints(16, 115, 44, -1));
t_jns.setEditable(false);
t_jns.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
t_jnsActionPerformed(evt);
}
});
jPanel3.add(t_jns, new
org.netbeans.lib.awtextra.AbsoluteConstraints(96, 112, 150, -1));
jLabel13.setText("Harga Beli");
jPanel3.add(jLabel13, new
org.netbeans.lib.awtextra.AbsoluteConstraints(16, 153, 62, -1));
t_hrg.setEditable(false);
jPanel3.add(t_hrg, new
org.netbeans.lib.awtextra.AbsoluteConstraints(96, 150, 150, -1));
jLabel14.setText("Jumlah");
jPanel3.add(jLabel14, new
org.netbeans.lib.awtextra.AbsoluteConstraints(16, 191, 45, -1));
t_jml.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
t_jmlActionPerformed(evt);
}
});
jPanel3.add(t_jml, new
org.netbeans.lib.awtextra.AbsoluteConstraints(96, 188, 150, -1));
jLabel15.setText("Total");
jPanel3.add(jLabel15, new
org.netbeans.lib.awtextra.AbsoluteConstraints(12, 220, 70, 20));
t_subtot.setEditable(false);
jPanel3.add(t_subtot, new
org.netbeans.lib.awtextra.AbsoluteConstraints(96, 220, 150, -1));
b_tmbh.setText("Tambah");
b_tmbh.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
68
b_tmbhActionPerformed(evt);
}
});
jPanel3.add(b_tmbh, new
org.netbeans.lib.awtextra.AbsoluteConstraints(20, 280, -1, 31));
jButton2.setText("...");
jButton2.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
jButton2ActionPerformed(evt);
}
});
jPanel3.add(jButton2, new
org.netbeans.lib.awtextra.AbsoluteConstraints(205, 36, 43, -1));
b_simpan.setText("Simpan");
b_simpan.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
b_simpanActionPerformed(evt);
}
});
jPanel3.add(b_simpan, new
org.netbeans.lib.awtextra.AbsoluteConstraints(100, 280, -1, 31));
b_batal.setText("Batal");
b_batal.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
b_batalActionPerformed(evt);
}
});
jPanel3.add(b_batal, new
org.netbeans.lib.awtextra.AbsoluteConstraints(170, 280, 66, 31));
getContentPane().add(jPanel3, new
org.netbeans.lib.awtextra.AbsoluteConstraints(0, 290, 260, 350));
jPanel4.setBackground(new java.awt.Color(204, 255, 204));
jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(n
ull, "Data Supplier",
javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
69
javax.swing.border.TitledBorder.DEFAULT_POSITION, new
java.awt.Font("Times New Roman", 1, 12))); // NOI18N
jPanel4.setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel5.setText("Kode Supplier");
jPanel4.add(jLabel5, new
org.netbeans.lib.awtextra.AbsoluteConstraints(27, 42, -1, -1));
tkd_splr.setEditable(false);
jPanel4.add(tkd_splr, new
org.netbeans.lib.awtextra.AbsoluteConstraints(110, 39, 101, -1));
t_nm.setEditable(false);
jPanel4.add(t_nm, new
org.netbeans.lib.awtextra.AbsoluteConstraints(110, 70, 150, -1));
jLabel6.setText("Nama");
jPanel4.add(jLabel6, new
org.netbeans.lib.awtextra.AbsoluteConstraints(30, 70, 45, -1));
jLabel7.setText("Telpon");
jPanel4.add(jLabel7, new
org.netbeans.lib.awtextra.AbsoluteConstraints(30, 100, 37, -1));
t_tlp.setEditable(false);
jPanel4.add(t_tlp, new
org.netbeans.lib.awtextra.AbsoluteConstraints(110, 100, 150, -1));
jLabel8.setText("Email");
jPanel4.add(jLabel8, new
org.netbeans.lib.awtextra.AbsoluteConstraints(314, 42, 45, -1));
t_email.setEditable(false);
jPanel4.add(t_email, new
org.netbeans.lib.awtextra.AbsoluteConstraints(409, 39, 172, -1));
jLabel9.setText("Alamat");
jPanel4.add(jLabel9, new
org.netbeans.lib.awtextra.AbsoluteConstraints(314, 106, 56, -1));
t_almt.setEditable(false);
t_almt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
t_almtActionPerformed(evt);
}
});
70
jPanel4.add(t_almt, new
org.netbeans.lib.awtextra.AbsoluteConstraints(410, 80, 183, 68));
jButton1.setText("...");
jButton1.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
jButton1ActionPerformed(evt);
}
});
jPanel4.add(jButton1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(217, 38, 43, -1));
getContentPane().add(jPanel4, new
org.netbeans.lib.awtextra.AbsoluteConstraints(10, 90, 700, 180));
tbl_pembelian.setBackground(new java.awt.Color(204, 255,
204));
tbl_pembelian.setModel(new
javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
tbl_pembelian.addMouseListener(new
java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tbl_pembelianMouseClicked(evt);
}
});
tbl_pembelian.addKeyListener(new
java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
tbl_pembelianKeyPressed(evt);
}
});
jScrollPane1.setViewportView(tbl_pembelian);
getContentPane().add(jScrollPane1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(270, 310, 574, 330));
71
getContentPane().add(tstok1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(750, 180, 30, 30));
getContentPane().add(tstok2, new
org.netbeans.lib.awtextra.AbsoluteConstraints(790, 130, 30, 30));
pack();
}// </editor-fold>
private void tglActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void t_almtActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
}
private void t_jnsActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
}
private void b_tmbhActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
bersih();
aktif();
setTanggal();
n_fkr.setText(nomor());
tstok2.setText("");
}
public String kdo;
public String nmo;
public String jno;
public String hrgo;
public String jmlo;
private void jButton2ActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
boolean closeable = true;
DataObat CariData = new DataObat(null, closeable);
CariData.beli = this;
CariData.kode="1";
CariData.setVisible(true);
t_kdobt.setText(kdo);
t_nmobt.setText(nmo);
t_jns.setText(jno);
t_hrg.setText(hrgo);
72
tstok1.setText(jmlo);
}
public String kds;
public String nms;
public String tel;
public String ema;
public String ala;
private void jButton1ActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
boolean closeable = true;
DataSuplier CariData = new DataSuplier(null, closeable);
CariData.beli = this;
CariData.setVisible(true);
tkd_splr.setText(kds);
t_nm.setText(nms);
t_tlp.setText(tel);
t_email.setText(ema);
t_almt.setText(ala);
}
private void
b_simpanActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
tambah();
aksi();
nonaktif();
}
private void b_batalActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
bersih();
nonaktif();
}
private void
tbl_pembelianMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
setTabel();
}
private void tbl_pembelianKeyPressed(java.awt.event.KeyEvent
evt) {
// TODO add your handling code here:
if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
73
if (JOptionPane.showConfirmDialog(this, "Yakin Akan
Dihapus?", "konfirmasi", JOptionPane.YES_NO_OPTION) ==
JOptionPane.YES_OPTION) {
HapusData();
nonaktif();
b_tmbh.setEnabled(true);
} else {
JOptionPane.showMessageDialog(this, "Data Batal
Dihapus", "Konfirmasi",
JOptionPane.INFORMATION_MESSAGE);
b_tmbh.setEnabled(true);
nonaktif();
bersih();
return;
}
}
}
private void t_jmlActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
int h = Integer.parseInt(t_hrg.getText());
int s = Integer.parseInt(t_jml.getText());
int ttl;
ttl = h * s;
t_subtot.setText(Integer.toString(ttl));
}
// Variables declaration - do not modify
private javax.swing.JButton b_batal;
private javax.swing.JButton b_simpan;
private javax.swing.JButton b_tmbh;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
74
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextField n_fkr;
private javax.swing.JTextField t_almt;
private javax.swing.JTextField t_email;
private javax.swing.JTextField t_hrg;
private javax.swing.JTextField t_jml;
private javax.swing.JTextField t_jns;
private javax.swing.JTextField t_kdobt;
private javax.swing.JTextField t_nm;
private javax.swing.JTextField t_nmobt;
private javax.swing.JTextField t_subtot;
private javax.swing.JTextField t_tlp;
private javax.swing.JTable tbl_pembelian;
private javax.swing.JTextField tgl;
private javax.swing.JTextField tkd_splr;
private javax.swing.JLabel tstok1;
private javax.swing.JLabel tstok2;
// End of variables declaration
}
3.5.2. Blackbox Testing
Tabel III.11
Blackbox Testing
Kelas Uji Skenario Uji Hasil Kesimpulan
Login Benar Masukan Kode User
dan Password Benar
Login
Berhasil
Sesuai
Login Salah Masukan Kode User
dan Password Salah
Login Gagal Sesuai
Logout Memilih Menu
Logout
Keluar Sistem Sesuai
Transaksi
Penerimaan
Obat
Memilih Menu
Transaksi lalu
memilih
Penerimaaan Obat
Kemudian dapat
Menambah,
Menyimpan,
mengubah,
Menghapus dan
Mencetak Laporan
Menampilkan
Form
Transaksi
Penerimaan
Obat dan
dapat
menyimpan,
mengupdate,
menghapus
Sesuai
75
3.5.3. Spesifikasi Hardware dan Software
Tabel III.12
Spesifikasi Hardware dan Software
Kebutuhan Keterangan
Sistem Operasi Windows 8.1 Profesional 64-bit
Processor Intel® Core™ i3-4005U
RAM 1.93 GB
Harddisk 500 GB
Monitor 14” LED
Keyboard 108 key
Mouse USB
Printer Epson LQ310+II Dotmatrix
Bahasa Pemrograman : Java
Software Aplikasi Pendukung : NetBeans IDE 8.1
DBMS : MySQL
Transaksi
Pengeluaran
Obat
Memilih Menu
Transaksi
lalu memilih
Pengeluaran
Obat Kemudian
dapat
Menambah,
Menyimpan,
mengubah,
Menghapus dan
Mencetak Laporan
Menampilkan
Form
Transaksi
Pengeluaran
Obat
dan dapat
menyimpan,
mengupdate,
menghapus
danmencetak
laporan
Sesuai