bab iii pembahasan - repository.bsi.ac.id · sampai menengah keatas. seiring dengan perkembangan...
TRANSCRIPT
24
BAB III
PEMBAHASAN
3.1. Tinjauan Perusahaan
Apotek Harum sebagai perusahaan resmi yang bertanggung jawab dalam
menyalurkan obat-obatan resmi dari supplier yang telah lulus di departemen
kesehatan dan bertanggungg jawab untuk memberi pelayanan yang terbaik kepada
setiap pasien yang kritis dan menuntut layanan yang serba profesional. Hal ini
juga menjadi salah satu faktor pendukung untuk mendapatkan kepercayaan
konsumen.
Untuk melaksanakan kegiatan-kegiatannya, maka Apotek Harum
memerlukan sumber daya manusia yang ahli dalam bidangnya. Kegiatan yang
dilakukan di apotek harum selain menjual obat-obatan dengan resep, juga
melayani penjualan obat tanpa resep serta memberi penjelasan kepada pasien
tentang pemakaian obat dengan dosis yang benar sesuai dengan penyakit yang
diderita.
3.1.1. Sejarah Perusahaan
Atas prakarsa Bapak Kukuh Setiawan Nugroho, S. Far, Apt didirikan
Apotek Harum pada bulan agustus 2016 dengan Surat Izin Apotek (SIA) dengan
nomor 503/23.43/SIA/KEP/VIII/2016 dan Surat Ijin Praktik (SIPA) dengan
nomor 19860104/SIPA.3305/2016/1006 beralamat di desa sarwogadung RT 02
RW 1 Kecamatan Mirit, Kebumen dan dipimpin oleh Bapak Kukuh Setiawan
Nugroho, S Far, Apt. Disamping itu juga dibantu oleh asisten apoteker dan bagian
administrasi dalam kegiatan usaha.
25
Dalam melaksanakan kegiatan transaksi sehari-hari Apotek Harum selalu
berusaha menyediakan obat yang lengkap, mulai harga yang menengah kebawah
sampai menengah keatas. Seiring dengan perkembangan kebutuhan masyarakat
akan layanan bidang kesehatan Apotek Harum membuka praktek dokter umum
BPJS dan Kader BPJS atau bisa menerima pembayaran BPJS karena sudah
kerjasama dengan BPJS khusus desa sarwogadung dan abean.
3.1.2. Struktur Organisasi dan Fungsi
Struktur organisasi merupakan suatu kerangka untuk mewujudkan sutau
pola tetap dari hubungan antara kedudukan dan peranan dalam suatu lingkar kerja
sama. Struktur organisasi mutlak diperlukan agar dapat diketahui dengan jelas
bagaimana hubungan antara bagian serta tugas, wewenang, dan tanggung
jawabnya disetiap bagian struktur organisasi mempunyai tanggung jawab dan
kewajiban-kewajiban terhadap pengembangan perusahaan.
Setiap bagian dalam struktur organisasi harus mampu bekerja secara
professional, dan harus dapat berinteraksi dengan bagian lainnya sehingga didapat
kerjasama yang optimal antar fungsi.
Berikut ini merupakan struktur organisasi apotek harum.
Sumber : Apotek Harum
Gambar III.1. Struktur Organisasi Apotek Harum
26
Adapun fungsi dan tugas masing-masing personil atau divisi adalah
sebagai berikut:
1. Pemilik (Apoteker)
a. Mengangkat dan memberhentikan karyawan
b. Memantau perkembangan Apotek Harum
c. Bertanggug jawab penuh terhadap seluruh kegiatan operasional dan
kelangsungan usaha pada Apotek Harum dan memberi keputusan
terakhir dalam menangani masalah yang terjadi
2. Asisten Apoteker
a. Bertanggung jawab dalam pengolahan obat-obatan
b. Memberikan informasi dan petunjuk pemakaian obat dan melakukan
penyiapan obat yang sesuai anjuran kepada customer.
c. Menentukan keterangan pada obat
d. Memeriksa persediaan obat
3. Bagian administrasi
a. Mengenal produk dan barang yang akan dijual secara baik
b. Melayani customer dengan permintaan obat yang dibutuhkan
c. Mencatat keluar masuknya obat
d. Mencatat laporan transaksi penjualan.
e. Menerima uang hasil penjualan obat setiap harinya.
f. Mengumpulkan serta mengarsipkan nota dan faktur penjualan
g. Bertugas dalam melayani transaksi penjualan kepada konsumen.
27
3.2. Tinjauan Kasus
3.2.1. Proses Bisnis Sistem Berjalan
1. Prosedur penjualan obat dengan resep
Prosedur penjualan obat dengan resep yang sedang berjalan adalah sebagai
berikut (Gambar III.2.): Customer datang menyerahkan resep kepada administrasi.
Administrasi menerima resep serta mendata customer dan resepnya. Kemudian
dihitung harga resep untuk mengetahui total bayar untuk diinformasikan kepada
customer, jika customer setuju dengan harga maka dibuat nota kemudian resep
diserahkan kepada asisten apoteker. Tetapi jika tidak setuju maka resep kembali
pada customer. Asisten apoteker menyediakan atau meracik dan mengemas obat
sesuai dengan resep serta memberikan petunjuk pemakaian obat. Kemudian obat
dan nota disiapkan serta diserahkan kepada customer. Customer menerima obat
sesuai aturan pakai dan melakukan pembayaran. Administrasi membuat laporan
penjualan dan diserahkan kepada apoteker atau pemilik Apotek Harum.
2. Prosedur penjualan obat bebas (nonresep)
Prosedur penjualan obat bebas (nonresep) yang sedang berjalan adalah
sebagai berikut (Gambar III.3.): Customer datang menyerahkan data obat bebas
(nonresep). Administrasi menerima data obat bebas (nonresep), dan mengecek
ketersediaan obat. Jika tidak ada, data obat bebas dikembalikan ke customer.
Tetapi jika obat ada lalu dihitung harga obat kemudian diinformasikan ke
customer. Kemudian administrasi membuat faktur penjualan dan kwitansi untuk
diserahkan kepada asisten apoteker. Asisten apoteker menyediakan obat
berdasarkan faktur penjualan, kemudian obat dan faktur penjualan diserahkan ke
28
customer. Administrasi membuat laporan penjualan kemudian diserahkan kepada
apoteker atau pemilik Apotek Harum.
3.2.2. Activity Diagram Penjualan
1. Activity Diagram Penjualan Obat Dengan Resep
act activ ity diagram resep
PemilikAsisten apotekerAdminCustomer
start
menyerahkan resep menerima resep
menyerahkan resep
mendata customer
dan resep obat
hitung harga
resep
membuat nota
setuju
menerima resep
meracik dan
mengemas obat
sesuai resep
menerima nota dan obat
sesuai aturan pakai
membuat laporan
penjualan dan laporan
data obat
menerima laporan
penjualan dan
laporan data obat
end
tidak
menyerahkan nota
dan memberikan
petunjuk obat
sesuai aturan
pakai
menyerahkan pembayaran menerima pembayaran
Gambar III.2.
Activity Diagram Penjualan Obat Dengan Resep
29
2. Activity Diagram Penjualan Obat Nonresep atau Bebas
act activ ity diagram nonresep
PemilikAdminCustomer
start
membeli obat ke bagian
administrasimelayani customer
mendata customer dan
obat bebas
menghitung harga obat
cek
ketersediaan
obat
tersedia
tidak
memberi informasi
harga ke customer
menerima informasi
harga dari admin
menyerahkan
pembayaran
membuat faktur
penjualan
membuat kwitansi
menerima laporan
penjualan dan
laporan data obat
menerima obat serta
faktur penjualan dan
kwitansi
membuat laporan
penjualan dan laporan
data obat
end
menerima pembayaran
Gambar III.3.
Activity Diagram Penjualan Obat Nonresep Atau Bebas
30
3.2.3. Dokumen Masukan
Dokumen masukan adalah segala bentuk dokumen yang berasal dari
lingkungan luar sistem yang berupa dokumen-dokumen yang akan diolah dalam
suatu proses agar dapat menghasilkan keluaran yang diinginkan. Adapun
dokumen-dokumen masukan tersebut adalah sebagai berikut:
1. Kartu Stok
Nama Dokumen : Kartu stok obat
Fungsi : Sebagai simpanan data stok obat
Sumber : Asisten apoteker
Tujuan : Bagian administrasi
Media : Kertas
Jumlah : Satu lembar
Frekuensi : Setiap terjadi transaksi penjualan obat
Format : Lampiran A.1
2. Resep
Nama Dokumen : Resep
Fungsi : Catatan obat hasil pemeriksaan dokter
Sumber : Customer
Tujuan : Administrasi
Media : Kertas
Jumlah : Satu lembar
Frekuensi : Setiap terjadi transaksi penjualan obat
Format : Lampiran A.2
31
3.2.4. Dokumen Keluaran
Dokumen keluaran adalah segala bentuk dokumen perusahaan yang
mendukung kegiatan manajemen serta merupakan dokumen hasil pencatatan atau
laporan. Adapun dokumen-dokumen keluaran tersebut adalah sebagai berikut:
1. Kwitansi
Nama Dokumen : Kwitansi
Fungsi : Sebagai bukti pembayaran
Sumber : Customer
Tujuan : Administrasi
Media : Kertas
Jumlah : Satu lembar
Frekuensi : Setiap terjadi transaksi penjualan
Format : Lampiran B.1
2. Faktur penjualan
Nama Dokumen : Faktur penjualan
Fungsi : Untuk menuliskan bukti transaksi penjualan
Sumber : Administrasi
Tujuan : Customer
Media : Kertas
Jumlah : Satu lembar
Frekuensi : Setiap terjadi transaksi penjualan obat untuk
instansi
Format : Satu lembar
32
3. Nota
Nama Dokumen : Nota
Fungsi : Sebagai tanda bukti pembayaran dan sejumlah obat
Sumber : Administrasi
Tujuan : Customer
Media : Kertas
Jumlah : Satu lembar
Frekuensi : Setiap terjadi transaksi penjualan obat untuk umum
Format : Lampiran B.3
3.2.5. Permasalahan Pokok
Adapun masalah yang ditemukan pada apotek harum adalah masih
menggunakan cara manual dalam prosesnya seperti:
1. Data obat dalam bentuk kartu stok yang terlalu banyak menjadi tercecer.
2. Pencatatan riwayat customer yang tidak tersimpan mengakibatkan
kurangnya hubungan yang baik dengan pelanggan.
3. Adanya penyimpanan bukti transaksi berupa faktur penjualan dan nota
dalam bentuk arsip menyebabkan kesulitan bagi karyawan dalam
pencarian data-data transaksi terutama pada saat data atau dokumen
semakin banyak.
4. Kesulitan proses pembuatan laporan membutuhkan waktu yang relatif
lama, karena harus membuat rekapitulasi dari dokumen-dokumen
transaksi, dan laporan yang disajikan kurang akurat.
5. Laporan penjualan dan persediaan obat menjadi tidak akurat dan lupa
tercatat oleh pegawai atau kasir serta hilangnya data.
33
3.2.6. Pemecahan Masalah
Dari permasalahan-permasalahan tersebut diatas maka penulis merancang
untuk sistem penjualan pada obat Apotek Harum dengan pengolahan data yang
berbasis komputerisasi dengan menggunakan pemrograman java desktop dapat
memudahkan dan mempercepat proses pekerjaan dalam memberikan informasi
yang lebih efektif, efisien, dan tepat waktu serta resiko kehilangan data relatif
kecil karena tersimpan dalam database.
3.3. Analisis Kebutuhan Sofware
3.3.1. Tahapan Analisis
Analisa kebutuhan software untuk sistem penjualan obat dengan beberapa
prosedur diantaranya:
Halaman Admin:
1. Admin dapat login dengan memasukkan username dan password.
2. Admin dapat membuka menu file master.
3. Admin dapat mengelola data obat.
4. Admin dapat mengelola data user.
5. Admin dapat mengelola data customer.
6. Admin dapat mengelola data perkiraan.
7. Admin dapat membuka menu transaksi.
8. Admin dapat mengelola data penjualan.
9. Admin dapat mengelola data resep.
10. Admin dapat mengelola data jurnal.
11. Admin dapat membuka menu laporan.
12. Admin dapat mengelola data laporan penjualan.
34
13. Admin dapat membuka data kartu stok.
14. Admin dapat keluar.
3.3.2. Use Case Diagram Halaman Admin
uc Use case diagram
admin
Login
menu file
master
menu transaksi
laporan
Auseraname
data perkiraan
password
data obat
data customer
data penjualan
data resep
data jurnal
Laporan kartu stok
laporan penjualan
keluar
data_user
«extend»«include»«extend»
«include»
«include»
«include»
«include»
«extend»
«include»
«extend»
«include»
«include»
«include»
«include»
«include»
Gambar III.4.
Use case Diagram Halaman Admin
35
Tabel III.1.
Deskripsi Use Case Diagram Halaman Admin
Use Case Narative
Tujuan Admin dapat melakukan login dan mengelola menu yang
ada di dalam sistem informasi penjualan barang.
Deskripsi Sistem ini memungkinkan aktor untuk mengelola sistem
informasi penjualan barang mulai dari input data sampai
dengan pembuatan laporan.
Skenario Utama
Aktor Admin
Kondisi awal Aktor membuka sistem informasi penjualan obat
pada Apotek Harum.
Aksi actor Reaksi sistem
1. Aktor memilih tombol
menu login
Sistem akan menampilkan texbox untuk mengisi
username dan password
2. Aktor memilih tombol
menu file master
Sistem akan menampilkan sub menu data user,
data obat, data perkiraan dan data customer
3. Aktor memilih tombol
menu transaksi
Sistem akan menampilkan sub menu data
penjualan, data jurnal dan data resep.
4. Aktor memilih tombol
laporan
Sistem akan menampilkan sub menu laporan
penjualan dan kartu stok.
5. Aktor memilih dan
klik tombol keluar
Keluar dari program
6. Kondisi akhir Jika perintah sesuai maka sistem akan masuk ke
dalam aplikasi penjualan barang dan menampilkan
apa yang diingankan oleh aktor.
36
3.3.3. Activity Diagram
1. Activity Diagram Login
act activ itiy diagram login
sistemadmin
tampil form login cek username dan password
tampil menu
utama tampil pesan
username/password
anda salah,
silahkan coba lagi
valid?
input
usernameinput
password
Gambar III.5.
Activity Diagram Login
37
2. Activity Diagram Menu Utama
act activ ity diagram menu utama
sistemadmin
start
menampilkan form login
input
username
input
password
cek username dan password
valid ?
menampilkan menu utama
valid
menampilkan
pesan username
dan password
salah
invalid
menu file
mastermenu
transaksi
menu
laporan
Gambar III.6.
Activity Diagram Menu Utama
38
3. Activity Diagram Menu File Master
act activ ity diagram menu file master
admin sistem
pilih menu file master menampilkan menu file master
data obat data customer data perkiraandata user
Gambar III.7.
Activity Diagram Menu File Master
39
4. Activity Diagram Data User
act data user
sistemadmin
pilih data user menampilkan menu data user
input data user
klik tombol simpan data disimpan
klik data yang akan di ubah
data diubah
klik tombol keluar
klik tombol hapus
data di hapus
Gambar III.8.
Activity Diagram Data User
40
5. Activity Diagram Data Obat
act data obat
sistemadmin
pilih menu data obat menampilkan data obat
input data obat
klik tombol simpan data disimpan
klik tombol reset data direset
klik tombol ubah
data diubah
klik tombol hapus
data di hapus
klik tombol cetak
data dicetak
klik tombol keluar
Gambar III.9.
Activity Diagram Data Obat
41
6. Activity Diagram Data Perkiraan
act activ ity diagram data perkiraan
sistemadmin
memilih menu file master menampilkan menu dalam file master
klik menu data perkiraan
menampilkan data perkiraan
input data perkiraan
klik tombol simpan data berhasil disimpan
klik data perkiraan yang akan
diubah
menampilkan data obat yang akan diubah
klik tombol ubah
data diubah
klik tombol reset
data direset
klik tombol keluar
Gambar III.10.
Activity Diagram Data Perkiraan
42
7. Activity Diagram Data Customer
act Act data customer
sistemadmin
pilih data customermenampilkan menu data customer
input data customer menampilkan data customer
data berhasil disimpan
klik tombol simpan
klik data yang akan di ubah
data diubah
klik reset
data direset
klik data yang akan di hapus
data di hapus
klik tombol keluar
Gambar III.11.
Activity Diagram Data Customer
43
8. Activity Diagram Menu Transaksi
act Data transaksi
sistemadmin
pilih menu transaksi menampilkan menu transaksi
data penjualandata resep data jurnal
pilihan
Gambar III.12.
Activity Diagram Menu Transaksi
44
9. Activity Diagram Data Penjualan
act data penjualan scra detail
sistemAdmin
pilih menu data penjualan menampilkan menu data penjualan
input data penjualan
klik tombol simpandata penjualan disimpan
klik tombol reset
data penjualan direset
klik tombol cetak
data penjualan dicetak
klik tombol keluar
klik data penjualan yang akan
diinput detailnya
menampilkan menu detail
penjualan
input data detail penjualan
klik tombol simpan data detail penjualan disimpan
klik tombol ubah
data detail penjualan diubah
klik tombol reset
data detail penjualan direset
klik tombol hapus
data detail penjualan dihapus
klik tombol hapus transaksi
transaksi dihapus
klik tombol cetak
data detail penjualan dicetak
klik tombol tutup
data detail penjualan ditutup
Gambar III.13.
Activity Diagram Data Penjualan
45
10. Activity Diagram Data Resep
act data resep
sistemadmin
input data resep
pilih menu resep menampilkan menu resep
klik tombol simpan data disimpan
klik tombol reset
data direset
klik tombol cetak
data di cetak
klik tombol hapus
data di hapus
klik tombol keluar
Gambar III.14.
Activity Diagram Data Resep
46
11. Activity Diagram Data Jurnal
act data jurnal
sistemadmin
pilih menu data jurnal menampilkan menu data jurnal
input data jurnal
klik tombol simpan data disimpan
klik tombol ubah
data diubah
klik tombol reset
data direset
klik tombol hapus
data di hapus
klik tombol cetak
data dicetak
klik tombol keluar
Gambar III.15.
Activity Diagram Data Jurnal
47
12. Activity Diagram Menu Laporan
act activ ity diagram laporan
sistemadmin
memilih menu laporan menampilkan menu laporan
pilihan
kartu stok laporan penjualan
Gambar III.16.
Activity Diagram Menu Laporan
48
13. Activity Diagram Laporan Penjualan
act laporan penjualan
sistemadmin
pilih menu laporan penjualan menampilkan menu laporan penjualan
pilih tanggal awal sampai
akhir periode
klik tombol tampil menampilkan laporan penjualan
klik tombol cetak
data di cetak
klik tombol keluar
Gambar III.17.
Activity Diagram Laporan Penjualan
49
14. Activity Diagram Kartu Stok
act activ ity diagram kartu stok
sistemadmin
pilih data kartu stok menampilkan menu kartu stok
klik tombol tambah
menampilkan data stok
input data stok
klik tombol simpan data berhasil disimpan
klik data stok yang akan
diubah
menampilkan data stok yang akan diubah
klik tombol ubah
data diubah
klik tombol reset
pilih data yang akan di
hapus
data direset
klik tombol hapusdata di hapus
klik tombol cetak
data dicetak
Gambar III.18.
Activity Diagram Kartu Stok
50
3.4. Desain
3.4.1. Entity Relationship Diagram (ERD)
erd erd penjualan obat
customer
kd_cust
nm_cust
alamat
no_telp
kd_penj
nm_obat
satuan
data penjualan
tgl_penj
kd_obat
status
catatan
subtotal
data_perkiraan
nm_perkiraan
kd_perkiraan
jns_perkiraan
saldo
data_jurnal tgl_jurnal
debitkredit
kd_cust
ket_jurnal
kd_jurnal
saldo
username
password
kd_user
tgl_dibuat
user
resep
detail penjualan
obat
kartu stok
kd_penj
kd_penj
kd_obat
id_detail
jumlah
kd_reseptgl_resep
nm_pasien
kd_stok stok_obat
kd_obat exp
jns_obat 1
M
M
M
M
1
1
1
M
1
M
MM
M
11
1
1
1
1
1
M
totalmelayani
memliki
dicatat
melakukan
memiliki
diterima
mengecek
memiliki
memiliki
dicatat
Gambar III.19.
Entity Relationship Diagram (ERD) Sistem Informasi Akuntansi
Penjualan Obat
51
3.4.2. Logical Record Structure (LRS)
class LRS penj
kartu stok
- exp
- kd_obat
- kd_stok**
- stok_obat*
customer
- alamat
- kd_cust*
- nm_cust
- no_telp**
obat
- jns_obat**
- kd_obat*
- nm_obat
- satuan
data penjualan
- catatan
- kd_cust
- kd_obat**
- kd_penj*
- status
- sub_total
- tgl_penj
detail penjualan
- id_detail**
- jumlah
- kd_obat**
- Kd_penj
- total
resep
- kd_resep*
- nama_pasien
- tgl_resep
data jurnal
- debit
- kd_jurnal*
- ket_jurnal
- kredit
- saldo
- tgl_jurnal
data perkiraan
- jns_perkiraan
- kd_perkiraan*
- nm_perkiraan
- saldo
data user
- kd_user*
- password
- tgl_dibuat
- username
1M
1
1
1
1
1
M
1
1
1 1 M
1
M
M
M
M 1
1
Gambar III.20.
Logical Record Structure (LRS) Sistem Informasi Akuntansi
Penjualan Obat
52
3.4.3. Spesifikasi File
Spesifikasi file menjelaskan tentang file-file yang akan digunakan dalam
database. Berikut adalah file-file yang akan digunakan:
1. Spesifikasi file data user
Nama Database : Db_penjualan
Nama File : data user
Akronim : user
Tipe File : File master
Akses File : Random
Panjang Record : 40 karakter
Kunci Field : Kd_obat
Software : My Sql
Tabel III.2.
Spesifikasi File Data User
No. Elemen data Nama field Type Size Keterangan
1. Username Username Varchar 5
2. Password Password Varchar 15 Primary key
3. Tanggal dibuat tgl_dibuat Date -
4. Kode user kd_user Varchar 20
53
2. Spesifikasi file obat
Nama Database : Db_penjualan
Nama File : data obat
Akronim : obat
Tipe File : File master
Akses File : Random
Panjang Record : 100 karakter
Kunci Field : Kd_obat
Software : My Sql
Tabel III.3.
Spesifikasi File Data Obat
3. Spesifikasi file data perkiraan
Nama Database : Db_Penjualan
Nama File : data jurnal
Akronim : jurnal
Tipe File : File master
No. Elemen data Nama field Type Size Keterangan
1. Kode obat kd_obat Char 10 Primary key
2. Nama obat nm_obat Varchar 50
3. Satuan satuan Varchar 6
4. Jenis obat jns_obat Varchar 20
5. Harga Harga Int 11
6. Stok Stok Int 3
54
Akses File : Random
Panjang Record : 65 karakter
Software : My Sql
Tabel III.4.
Spesifikasi File Perkiraan
No. Elemen data Nama field Type Size Keterangan
1. kode. perkiraan kd_perkiraan Varchar 15 Primary key
2. Nama pekiraan nm_perkiraan Varchar 25
3. Jenis perkiraan jns_perkiraan Varchar 15
4. Saldo saldo Int 10
4. Spesifikasi file data customer
Nama Database : Db_Penjualan
Nama File : data customer
Akronim : customer
Tipe File : Transaksi
Akses File : Random
Panjang Record : 67 karakter
Kunci Field : Kd_penj
Software : My Sql
55
Tabel III.5.
Spesifikasi File Data Customer
No. Elemen data Nama field Type Size Keterangan
1. Kode customer kd_cust Char 10
2. Nama customer nm_cust Varchar 15
3. Alamat Alamat Varchar 30
4. No telpon No_telp Varchar 12 Foreign key
5. Spesififkasi File Kartu Stok
Nama Database : DbPenj Obat
Nama File : kartu stok
Akronim : kartu stok
Tipe File : Transaksi
Akses File : Random
Panjang Record : 30 karakter
Kunci Field : Kd_penj
Software : My Sql
Tabel III.6.
Spesifikasi File Kartu Stok
No. Elemen data Nama field Type Size Keterangan
1. Kode stok kd_stok Char 10
2. Kode Obat kd_obat Varchar 15 Primary key
3. Stok_obat stok_obat Int 5
4. Expired exp Date -
56
6. Spesifikasi file data penjualan
Nama Database : Db_Penjualan
Nama File : data penjualan
Akronim : penjualan
Tipe File : Transaksi
Akses File : Random
Panjang Record : 102 karakter
Kunci Field : Kd_penj
Software : My Sql
Tabel III.7.
Spesifikasi File Data Penjualan
No. Elemen data Nama field Type Size Keterangan
1. Kode penjualan kd_penj Varchar 10 Foreign key
2. Tanggal
penjualan
tgl_penj Date - Primary key
3. Kode customer kd_cust Varchar 20
4. Catatan catatan Varchar 35
5. Subtotal subtotal Int 7
6. Status status Varchar 30
57
7. Spesifikasi file detail penjualan
Nama Database : Db_Penjualan
Nama File : detail penjualan
Akronim : detail penjualan
Tipe File : Transaksi
Akses File : Random
Panjang Record : 65 karakter
Kunci Field : Kd_penj
Software : My Sql
Tabel III.8.
Spesifikasi File detail penjualan
No. Elemen Data Nama field Type Size Keterangan
1. Id detail id_detail Int 9 Primary key
2. Kode penjualan kd_penj Varchar 10
3. Kode obat kd_obat Varchar 15
4. Jumah jumlah Int 20
5. Total total Int 11
58
8. Spesifikasi file resep
Nama Database : DbPenj Obat
Nama File : penjualan
Akronim : pejualan
Tipe File : Transaksi
Akses File : Random
Panjang Record : 115 karakter
Kunci Field : Kd_penj
Software : My Sql
Tabel III.9.
Spesifikasi File Resep
No. Elemen data Nama field Type Size Keterangan
1. Kode resep kd_resep Char 10 Primary key
2. Nama pasien nm_pasien Varchar 105
3. Tanggal resep tgl_resep Date -
59
9. Spesifikasi file data jurnal
Nama Database : Db_Penjualan
Nama File : data jurnal
Akronim : jurnal
Tipe File : Transaksi
Akses File : Random
Panjang Record : 151 karakter
Kunci Field : no_jurnal
Software : My Sql
Tabel III.10.
Spesifikasi File Tabel Jurnal
No. Elemen data Nama field Type Size Keterangan
1. Kode jurnal kd_jurnal Varcahr 10 Primary key
2. Tanggal tgl_jurnal Date -
3. Debit Debit Varchar 40
4. Kredit kredit Varchar 40
5. Saldo saldo Int 11
6. Keterangan ket_jurnal Varchar 50
60
3.4.4. Sequence Diagram
1. Sequence Diagram Login
sd sq diagram login
admin
form login control login menu utama
input username()
login berhasil()
get(login)
validasi()
masuk()
gagal login()
input password()
set(login)
Gambar.III.21.
Sequence Diagram Login
61
2. Sequence Diagram Data Penjualan
sd sequence diagram penjualan
admin
control data
penjualan
from data
penjualan
penjualan
set(kd_penj)
cetak()
masuk()
keluar()
set(tgl_penj
set(catatan)
get(catatan)
set(subtotal)
get(tgl_penj)
get(subtotal)
display(kd_penj)
get(kd_cust)
simpan()
reset()
set(kd_cust)
get(kd_penj)
Gambar.III.22.
Sequence Diagram Data Penjualan
62
3. Sequence Diagram Detail Penjualan
sd sq diagram data detail penjualan
admin
form data detail
penjualan
control data detail
penjualan
data detail
penjualan
reset()
get(jns_obat)
ubah()
get(nm_obat)
cetak()
set(jumlah)
get(kd_obat)
set(jns_obat)
set(kd_obat)
get(total)
set(hrg_obat)
hapus transaksi()
get(hrg_obat)
tutup()
simpan()
set(total)
display(id_detail)
set(nm_obat)
hapus()
get(jumlah)
masuk()
Gambar.III.23.
Sequence Diagram Data Detail Penjualan
63
4. Sequence Diagram Laporan Penjualan
sd sq laporan penjualan
admin
form laporan
penjualan
control data
laporan penjualan
laporan penjualan
cetak()
get(periode)
tampil()
set(periode)
keluar()
masuk()
display penjualan()
Gambar.III.24.
Sequence Diagram Laporan Penjualan
64
5. Sequence Diagram Kartu Stok
sd sequence diagram kartu stok
admin
form kartu stok control data kartu
stok
kartu stok
set(jns_obat)
keluar()
display(kd_stok)
cetak()
get(stok_obat)
masuk()
set(exp)
get(nm_obat)
reset()
get(jns_obat)
get(exp)
ubah()
set(kd_stok)
simpan()
get(kd_stok)
set(stok_obat)
set(nm_obat)
hapus()
Gambar.III.25.
Sequence Diagram Kartu Stok
65
3.4.5. Deployment Diagram
deployment deployment
Aplikasi Serv er
Sistem informasi
penjualan obat
XAMPP
Personal Computer
My Sql
Komputer
HTTP<<Conection>>
<<JDBC>>
Db_penjualan
Gambar III.26.
Deployment Diagram Sistem Informasi Akuntansi Penjualan Obat
66
3.4.6. User Interface
1. Menu login
Gambar III.27.
Menu Login
2. Menu utama
Gambar III.28.
Menu Utama
67
3. Menu file master
Gambar III.29.
Menu File Master
4. Form data user
Gambar III.30.
Menu Data User
68
5. Form data obat
Gambar III.31.
Menu Data Obat
6. Form data perkiraan
Gambar III.32.
Menu Data Perkiraan
69
7. Form data customer
Gambar III.33.
Menu Data Customer
8. Menu transaksi
Gambar III.34.
Menu Transaksi
70
9. Form data penjualan
Gambar III.35.
Menu Data Penjualan
71
10. Form data detail penjualan
Gambar III.36.
Menu Data Detail Penjualan
72
11. Form data resep
Gambar III.37.
Menu Data Resep
12. Form data jurnal
Gambar III.38.
Menu Data Jurnal
73
13. Menu laporan
Gambar III.39.
Menu Laporan
14. Laporan Penjualan
Gambar III.40.
Menu Data Laporan Penjuala
74
15. Form kartu stok
Gambar III.41.
Menu Data Kartu Stok
3.5. Implementasi
3.5.1. Code Generation
1. Data penjualan
package multifromfram;
import Apotek_harum_GUI.menu_utama;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
75
import net.sf.jasperreports.view.JasperViewer;
/**
*
* @author L E N O V O
*/
public class data_penjualan extends javax.swing.JFrame {
String header[]={"Kode penjualan","Tanggal penjualan","Kode
customer","Catatan","Subtotal","Status"};
Connection con;
Statement st;
koneksi kon=new koneksi();
private DefaultTableModel tabMode;
String query;
String nama,skrg;
private Dimension dimensi = Toolkit.getDefaultToolkit().getScreenSize();
public data_penjualan() {
initComponents();
bersih();
TampilDataTabel();
cmbCust(); this.setLocation(dimensi.width/2 -
this.getWidth()/2,dimensi.height/2 - this.getHeight()/2);
}
/**
* 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() {
lbl_kodepenjualan = new javax.swing.JLabel();
txt_kodepenjualan = new javax.swing.JTextField();
bt_tambah = new javax.swing.JButton();
bt_simpan = new javax.swing.JButton();
lbl_tglpenjualan = new javax.swing.JLabel();
lbl_jumlah = new javax.swing.JLabel();
lbl_jenisobat = new javax.swing.JLabel();
txt_catatan = new javax.swing.JTextField();
txtDate = new com.toedter.calendar.JDateChooser();
lbl_kodecustomer = new javax.swing.JLabel();
76
cmb_status = new javax.swing.JComboBox<>();
jPanel1 = new javax.swing.JPanel();
lbl_datapenjualan = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
myTabel = new javax.swing.JTable();
cmb_kodecustomer = new javax.swing.JComboBox<>();
txt_tanggalpenjualan = new javax.swing.JTextField();
lbl_jumlah1 = new javax.swing.JLabel();
txt_namacustomer = new javax.swing.JTextField();
bt_keluar = new javax.swing.JButton();
bt_cetak = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CL
OSE);
lbl_kodepenjualan.setText("Kode penjualan");
txt_kodepenjualan.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txt_kodepenjualanActionPerformed(evt);
}
});
bt_tambah.setText("RESET");
bt_tambah.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bt_tambahActionPerformed(evt);
}
});
bt_simpan.setText("SIMPAN");
bt_simpan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bt_simpanActionPerformed(evt);
}
});
lbl_tglpenjualan.setText("Tanggal penjualan");
lbl_jumlah.setText("Nama Customer");
lbl_jenisobat.setText("Status");
txtDate.addPropertyChangeListener(new
java.beans.PropertyChangeListener() {
77
public void propertyChange(java.beans.PropertyChangeEvent evt)
{
txtDatePropertyChange(evt);
}
});
lbl_kodecustomer.setText("Kode customer");
cmb_status.setModel(new
javax.swing.DefaultComboBoxModel<>(new String[] { "resep",
"nonresep (bebas)" }));
cmb_status.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmb_statusActionPerformed(evt);
}
});
jPanel1.setBorder(new
javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAI
SED));
lbl_datapenjualan.setFont(new java.awt.Font("Times New Roman",
1, 18)); // NOI18N
lbl_datapenjualan.setText("DATA PENJUALAN");
javax.swing.GroupLayout jPanel1Layout = new
javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.
LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(192, 192, 192)
.addComponent(lbl_datapenjualan)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.
LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(lbl_datapenjualan)
.addContainerGap(14, Short.MAX_VALUE))
);
78
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Data
Penjualan"));
myTabel.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null}
},
new String [] {
"Kode penjualan", "Tanggal penjualan", "Kode customer ",
"Catatan", "Subtotal", "Status"
}
));
myTabel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
myTabelMouseClicked(evt);
}
});
jScrollPane1.setViewportView(myTabel);
tabMode=new DefaultTableModel(null,header);
myTabel.setModel(tabMode);
javax.swing.GroupLayout jPanel2Layout = new
javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.
LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.
LEADING)
79
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 120,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(22, Short.MAX_VALUE))
);
cmb_kodecustomer.setModel(new
javax.swing.DefaultComboBoxModel<>(new String[] { "--PILIH--" }));
cmb_kodecustomer.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmb_kodecustomerActionPerformed(evt);
}
});
lbl_jumlah1.setText("Catatan");
bt_keluar.setText("KELUAR");
bt_keluar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bt_keluarActionPerformed(evt);
}
});
bt_cetak.setText("CETAK");
bt_cetak.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bt_cetakActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(layout.createSequentialGroup()
.addGap(25, 25, 25)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING, false)
80
.addComponent(lbl_tglpenjualan,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lbl_kodepenjualan,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.TRAILING, false)
.addComponent(lbl_jumlah,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lbl_kodecustomer,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lbl_jumlah1,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(lbl_jenisobat,
javax.swing.GroupLayout.PREFERRED_SIZE, 88,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(23, 23, 23)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING)
.addComponent(cmb_status,
javax.swing.GroupLayout.PREFERRED_SIZE, 227,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txt_namacustomer,
javax.swing.GroupLayout.PREFERRED_SIZE, 227,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txt_catatan,
javax.swing.GroupLayout.PREFERRED_SIZE, 227,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.TRAILING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(txt_tanggalpenjualan,
javax.swing.GroupLayout.PREFERRED_SIZE, 193,
javax.swing.GroupLayout.PREFERRED_SIZE)
81
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addComponent(txtDate,
javax.swing.GroupLayout.PREFERRED_SIZE, 29,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(cmb_kodecustomer, 0,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(txt_kodepenjualan)))))
.addContainerGap(219, Short.MAX_VALUE))
.addComponent(jPanel1,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(bt_simpan)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addComponent(bt_tambah,
javax.swing.GroupLayout.PREFERRED_SIZE, 71,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(316, 316, 316)
.addComponent(bt_keluar,
javax.swing.GroupLayout.DEFAULT_SIZE, 91, Short.MAX_VALUE))
.addComponent(jPanel2,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(bt_cetak)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(jPanel1,
javax.swing.GroupLayout.PREFERRED_SIZE,
82
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(txt_kodepenjualan,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbl_kodepenjualan,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING)
.addComponent(txtDate,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(lbl_tglpenjualan,
javax.swing.GroupLayout.PREFERRED_SIZE, 19,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txt_tanggalpenjualan,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(lbl_kodecustomer,
javax.swing.GroupLayout.PREFERRED_SIZE, 20,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cmb_kodecustomer,
javax.swing.GroupLayout.PREFERRED_SIZE,
83
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(10, 10, 10)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(txt_namacustomer,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbl_jumlah,
javax.swing.GroupLayout.PREFERRED_SIZE, 20,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(txt_catatan,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbl_jumlah1,
javax.swing.GroupLayout.PREFERRED_SIZE, 20,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(lbl_jenisobat,
javax.swing.GroupLayout.PREFERRED_SIZE, 20,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cmb_status,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(bt_simpan)
.addComponent(bt_tambah)
.addComponent(bt_keluar))
.addGap(18, 18, 18)
84
.addComponent(jPanel2,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNREL
ATED)
.addComponent(bt_cetak)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void cmb_statusActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
}
private void
txt_kodepenjualanActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void bt_tambahActionPerformed(java.awt.event.ActionEvent
evt) {
bersih(); // TODO add your handling code here:
}
private void bt_simpanActionPerformed(java.awt.event.ActionEvent
evt) {
Simpan(); // TODO add your handling code here:
}
private void txtDatePropertyChange(java.beans.PropertyChangeEvent
evt) {
try{
String tampilan ="yyyy-MM-dd" ;
SimpleDateFormat fm = new SimpleDateFormat(tampilan);
String tanggal = String.valueOf(fm.format(txtDate.getDate()));
txt_tanggalpenjualan.setText(tanggal);
}catch(Exception e){} // TODO add your handling code here:
}
private void
cmb_kodecustomerActionPerformed(java.awt.event.ActionEvent evt) {
String kb=cmb_kodecustomer.getSelectedItem().toString();
85
String nm_cust="";
query = "Select * From `tb_customer` where `kd_cust` like '"+kb+"'";
ResultSet rs;
try {
rs = st.executeQuery(query);
if(rs.next()) {
nm_cust = rs.getString("nm_cust");
}
} catch (SQLException ex) {}
txt_namacustomer.setText(nm_cust);
}
private void myTabelMouseClicked(java.awt.event.MouseEvent evt) {
String
kd=String.valueOf(myTabel.getValueAt(myTabel.getSelectedRow(),0));
this .dispose();
new data_detailpenjualan(kd).show();
// TODO add your handling code here:
}
private void bt_keluarActionPerformed(java.awt.event.ActionEvent evt)
{
this.dispose();
new menu_utama().show(); // TODO add your handling code
here:
}
private void bt_cetakActionPerformed(java.awt.event.ActionEvent evt)
{
try{
String namaFile="report/penjualan.jasper";
HashMap parameter=new HashMap();
Connection
kon=DriverManager.getConnection("jdbc:mysql://localhost:3306/db_penj
ualan","root","");
File laporanFile=new File(namaFile);
JasperReport jasperReport=(JasperReport)
JRLoader.loadObject(laporanFile.getPath());
JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport,
parameter, kon);
JasperViewer.viewReport(jasperPrint,false);
JasperViewer.setDefaultLookAndFeelDecorated(true);
}catch (Exception ex){
} // TODO add your handling code here:
}
86
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting
code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the
default look and feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Metal".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(data_penjualan.class.getName()).log(ja
va.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(data_penjualan.class.getName()).log(ja
va.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(data_penjualan.class.getName()).log(ja
va.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(data_penjualan.class.getName()).log(ja
va.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new data_penjualan().setVisible(true);
}
});
}
87
// Variables declaration - do not modify
private javax.swing.JButton bt_cetak;
private javax.swing.JButton bt_keluar;
private javax.swing.JButton bt_simpan;
private javax.swing.JButton bt_tambah;
private javax.swing.JComboBox<String> cmb_kodecustomer;
private javax.swing.JComboBox<String> cmb_status;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lbl_datapenjualan;
private javax.swing.JLabel lbl_jenisobat;
private javax.swing.JLabel lbl_jumlah;
private javax.swing.JLabel lbl_jumlah1;
private javax.swing.JLabel lbl_kodecustomer;
private javax.swing.JLabel lbl_kodepenjualan;
private javax.swing.JLabel lbl_tglpenjualan;
private javax.swing.JTable myTabel;
private com.toedter.calendar.JDateChooser txtDate;
private javax.swing.JTextField txt_catatan;
private javax.swing.JTextField txt_kodepenjualan;
private javax.swing.JTextField txt_namacustomer;
private javax.swing.JTextField txt_tanggalpenjualan;
// End of variables declaration
void Simpan(){
String kd_penj= txt_kodepenjualan.getText();
String tgl_penj=txt_tanggalpenjualan.getText();
String kd_cust = cmb_kodecustomer.getSelectedItem().toString();
String catatan= txt_catatan.getText();
String subtotal= "0";
String status = cmb_status.getSelectedItem().toString();
try{
kon.QUERY("INSERT INTO `tb_penjualan`(`kd_penj`, `tgl_penj`,
`kd_cust`, `catatan`,`subtotal`,`status`) VALUES
('"+kd_penj+"','"+tgl_penj+"','"+kd_cust+"','"+catatan+"','"+subtotal+"','"+
status+"')","Simpan");
TampilDataTabel();
bersih();
}catch(Exception sqle){
JOptionPane.showMessageDialog(rootPane,"Data Gagal
Simpan"+sqle.getMessage());
}
}
88
void Ubah(){
String kd_penj = txt_kodepenjualan.getText();
String tgl_penj = txt_tanggalpenjualan.getText();
String kd_cust = cmb_kodecustomer.getSelectedItem().toString();
String catatan= txt_catatan.getText();
String subtotal = "";
String status= cmb_status.getSelectedItem().toString();
try{
kon.QUERY("UPDATE `tb_penjualan` SET
`kd_penj`='"+kd_penj+"',`tgl_penj`='"+tgl_penj+"',`kd_cust`='"+kd_cust+
"',`catatan`='"+catatan+"' WHERE `kd_penj`='"+kd_penj+"'","Ubah");
TampilDataTabel();
bersih();
}catch(Exception sqle){
JOptionPane.showMessageDialog(rootPane,"Data Gagal
Simpan"+sqle.getMessage());
}
}
void Hapus(){
String kd_penj = txt_kodepenjualan.getText();
try{
kon.QUERY("DELETE FROM `tb_penjualan` WHERE
`kd_penj`='"+kd_penj+"'","Hapus");
TampilDataTabel();
bersih();
}catch(Exception sqle){
JOptionPane.showMessageDialog(rootPane,"Data Gagal
Hapus"+sqle.getMessage());
}
}
void KodeOtomatis(){
String kd_penj="";//
try{
con=kon.open();
st=con.createStatement();
query="SELECT * FROM tb_penjualan order by kd_penj desc";
ResultSet rs=st.executeQuery(query);
if(rs.next()){
89
kd_penj=rs.getString("kd_penj");
}
}catch(SQLException sqle){kd_penj="";}
if(kd_penj.length() <1){kd_penj="000000";}
String ur=kd_penj.substring(3,6);
int u=Integer.parseInt(ur)+1;
System.out.println(ur+"=="+u);
if(u<10){ur="00"+u;}
else if(u<100){ur="0"+u;}
else {ur=""+u;}
kd_penj="PNJ"+ur;
txt_kodepenjualan.setText(kd_penj);
}
void bersih(){
txt_kodepenjualan.setText("");
txt_tanggalpenjualan.setText("");
cmb_kodecustomer.setSelectedItem("");
txt_catatan.setText("");
cmb_status.setSelectedItem(0);
bt_simpan.setEnabled(true);
KodeOtomatis();
txtDate.setDateFormatString("yyyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
skrg=sdf.format(new Date());
txt_tanggalpenjualan.setText(skrg);
}
void TampilDataTabel(){
removeTable();
try{
con=kon.open();
st=con.createStatement();
query="SELECT * FROM tb_penjualan order by kd_penj asc";
ResultSet rs=st.executeQuery(query);
while(rs.next()){
String kd_penj=rs.getString("kd_penj");
String tgl_penj=rs.getString("tgl_penj");
String kd_cust=rs.getString("kd_cust");
String catatan=rs.getString("catatan");
String subtotal=rs.getString("subtotal");
String status=rs.getString("status");
String data[]={kd_penj,tgl_penj,kd_cust,catatan,subtotal,status};
tabMode.addRow(data);
}
}catch(SQLException sqle){
90
JOptionPane.showMessageDialog(null,"Data Gagal Masuk
Tabel"+sqle);
}
}
void removeTable(){
try{
for(int t=tabMode.getRowCount();t>0;t--)
{tabMode.removeRow(0);}
}catch(Exception ex){ System.out.println(ex);
}
}
void Lihat(){
txt_kodepenjualan.setText(String.valueOf(myTabel.getValueAt(myTabel.
getSelectedRow(),0)));
txt_tanggalpenjualan.setText(String.valueOf(myTabel.getValueAt(myTab
el.getSelectedRow(),1)));
cmb_kodecustomer.setSelectedItem(String.valueOf(myTabel.getValueAt(
myTabel.getSelectedRow(),2)));
txt_catatan.setText(String.valueOf(myTabel.getValueAt(myTabel.getSelec
tedRow(),3)));
cmb_status.setSelectedItem(String.valueOf(myTabel.getValueAt(myTabel
.getSelectedRow(),5)));
bt_simpan.setEnabled(false);
}
void cmbCust(){
String[]ar=new String[1000];
int n=0;
try {
con = kon.open();
st = con.createStatement();
query = "SELECT * FROM tb_customer order by kd_cust asc ";
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
String kd_cust = rs.getString("kd_cust");
ar[n]=kd_cust;n++;
}
}
catch(Exception ee){}
String []ar2=new String[n];
for(int i=0;i<n;i++){
91
ar2[i]=ar[i];
}
cmb_kodecustomer.setModel(new
javax.swing.DefaultComboBoxModel(ar2));
}
}
3.5.2. Blackbox Testing
1. Blackbox Testing Form Login
Tabel III.11.
Hasil Pengujian Blackbox Testing Form Login
No. Skenario
pengujian
Test case Hasil yang
diharapkan
Hasil
pengujian
Kesimpulan
1. Input username
dan password
(data benar)
Username:
input
username
(benar)
Password:
input
password
(benar)
sistem
menampilkan
menu utama
Sesuai
harapan
Valid
2. Input username
dan password
(data salah)
Username:
input
username
(salah)
Password:
input
password
(salah)
Sistem tidak
akan
menampilkan
menu utama
Sesuai
harapan
Valid
92
2. Blackbox Testing Data penjualan
Tabel III. 12.
Hasil Pengujian Blackbox Testing Data Penjualan
No. Skenario
pengujian
Test case Hasil yang
diharapkan
Hasil
pengujian
Kesimpulan
1. Kode penjualan
secara otomatis
muncul, tanggal
penjualan wajib
diisi
Tanggal
penjualan:
diklik
sistem
menampilkan
data tanggal
bulan dan
tahun
Sesuai
harapan
Valid
2. Mengklik pilihan
kode customer
mengetikan nama
customer dan
catatan boleh
tidak diisi.
Kode
customer
: tampil
dan
dipilih
Sistem akan
menampilkan
kode customer
Sesuai
harapan
Valid
3. Status wajib
dipilih untuk
mengetahui
dengan resep atau
nonresep.
Status:
muncul
pilihan
resep dan
nonresep
(bebas)
Sistem akan
menampilkan
pilihan status
resep dan
nonresep
(bebas)
Sesuai
harapan
Valid
4. Mengklik tombol
simpan maka
akan menyimpan
data
Muncul
pesan:
data
disimpan
Sistem akan
menyimpan
data
Sesuai
harapan
Valid
5. Mengklik tombol
reset maka data
yang akan diinput
terhapus dan tidak
tersimpan.
Secara
otomatis
input data
: bersih
Sistem akan
membersihkan
data yang
tidak jadi
diinput .
Sesuai
harapan
Valid
6. Mengklik tombol
cetak maka data
dicetak.
Klik
tombol
cetak:
data
dicetak
Sistem akan
mencetak data
yang dipilih.
Sesuai
harapan
Valid
7. Mengklik tombol
keluar maka data
keluar dari form
Klik
tombol
keluar:
Sistem akan
keluar dari
form data
Sesuai
harapan
Valid
93
data penjualan.
keluar
dari form
data
penjualan
penjualan.
3. Blackbox Testing Data Detail Penjualan
Tabel III.13.
Hasil Pengujian Blackbox Testing Data Detail Penjualan
No. Skenario
pengujian
Test case Hasil yang
diharapkan
Hasil
pengujian
Kesimpulan
1. Mengklik pilihan
Kode obat secara
otomatis muncul,
dan dipilih
Kode
obat
penjualan
: diklik
Sistem
menampilkan
kode obat
Sesuai
harapan
Valid
2. Meninput nama
obat, jenis obat,
harga obat jumlah
dan total
Tampil
inputan
data
Sistem
menampilkan
form untuk
diisi
Sesuai
harapan
Valid
3. Mengklik tombol
simpan maka
akan menyimpan
data
Muncul
pesan
:data
disimpan
Sistem akan
menyimpan
data
Sesuai
harapan
Valid
4. Mengklik tombol
ubah maka akan
mengubah data
Muncul
pesan
:data
diubah
Sistem akan
mengubah
data
Sesuai
harapan
Valid
5. Mengklik tombol
reset maka data
yang akan diinput
terhapus dan tidak
tersimpan.
Secara
otomatis
input data
: bersih
Sistem akan
membersihkan
data yang
tidak jadi
diinput.
Sesuai
harapan
Valid
6. Mengklik tombol
hapus maka data
di hapus
Muncul
pesan
:data
dihapus
Sistem akan
menghapus
data
Sesuai
harapan
Valid
7. Mengklik tombol
hapus transaksi
Muncul
pesan
Sistem akan
menghapus
Sesuai
harapan
Valid
94
maka data
transaksi di hapus
:data
transaksi
dihapus
data
tranksaksi
8. Mengklik tombol
cetak maka data
dicetak.
Klik
tombol
cetak:
data
dicetak
Sistem akan
mencetak data
yang dipilih.
Sesuai
harapan
Valid
9. Mengklik tombol
tutup maka data
keluar dari form
data detail
penjualan.
Klik
tombol
tutup:
keluar
dari form
data
penjualan
Sistem akan
keluar dari
form data
detail
penjualan.
Sesuai
harapan
Valid
3.5.3. Spesifikasi Hardware dan Sofware
Kebutuhan Keterangan
Hardware
Processor AMD E-1 2100 APU with Radeon ™ HD graphics (2 CPU s)
RAM 2048 MB
Harddisk 1.00 GB
Monitor Generic Pnp Monitor
Keyboard Standard PS/2 Keyboard
Printer Laser jet
Mouse Standard Mouse
Software
System Operasi Windows 7, Windows 10
Web Browser Mozila Firefox, Internet Exploer, Google Crome
Database Server Java Application, Enterprise Architect, NetBeans IDE 8.1