PEMBAHASAN
3.1. Tinjauan Perusahaan
Perusahaan yang ada di indonesia memiliki 2 jenis perusahaan yaitu usaha
yang didirikan oleh perorangan maupun kelompok. Salah satu usaha yang mempunyai kelebihan yaitu dengan modal kecil adalah perusahaan perorangan seperti dalam perdagangan. Kelebihan dari perusahaan perorangan adalah tidak dibutuhkannya modal besar serta bertanggungjawab pada diri sendiri. Toko Bangunan Cahaya Mutiara sebagai salah satu usaha dalam bidang perdagangan dengan menyediakan bahan bangunan berkualitas. Pada bagian ini akan dipaparkan sejarah perusahaan berserta struktur organisasi dan fungsinya.
3.1.1. Sejarah Perusahaan
Toko Bangunan Cahaya Mutiara merupakan toko perbelanjaan bahan bangunan terlengkap. Toko Bangunan Cahaya Mutiara ini didirikan, oleh bapak Edy Hermawan pada tanggal 20 Januari 1972 kurang lebih sudah 39 tahun yang berlokasi di Jl. Cikampek Baru Pundong Blok 3/17 Cikampek Karawang sini salah satu toko perbelanjaan bahan bangunan yang lengkap. Berawal dari sebuah toko bahan bangunan material biasa hingga kini menjadi toko perbelanjaan bahan bangunan lengkap yang bergerak dibidang retail distribusi dan pemasok untuk proyek-proyek besar di Karawang. Toko Bangunan Cahaya Mutiara selalu mengutamakan mutu dan pelayanan serta memberikan banyak keuntungan dan kelebihan bagi pelanggannya .
3.1.2. Struktur Organisasi dan Fungsi
Struktur organisasi merupakan pembagian kegiatan kerja, menunjukkan bagaimana fungsi atau kegiatan syang berbeda-beda dihubungkan sampai batas tertentu, menunjukkan hierarki dan struktur wewenang organisasi serta memperlihatkan hubungan pelapornya. Dengan struktur organisasi yang baik, tugas-tugas digolongkan sedemikian rupa sehingga dapat dilaksanakan secara efektif, terarah dan hasil-hasilnya dapat terkendali.
Bentuk struktur organisasi:
Sumber: Toko Bangunan Cahaya Mutiara adalah
Gambar III.1
Struktur Organisasi Toko Cahaya Mutiara
Fungsi dari tiap-tiap bagian adalah sebagai berikut : 1. Pemilik
a. Mengatur dan mengawasi kerja karyawan.
b. Berkoordinasi dengan karyawan dan mencari solusi atas masalah. c. Memastikan barang layak untuk dijual.
2. Bagian Admin
a. Mengontrol pemasukan dan pengeluaran keuangan perusahaan b. Menyusun hasil usaha dalam satu periode tertentu
3. Bagian Pengiriman
a. Mengecek ketersediaan barang
b. Menyiapkan barang yang akan dibeli oleh pelanggan. c. Melakukan pengiriman barang ke pelanggan
4. Kasir
a. Bertanggung jawab atas segala transaksi penjualan barang.
b. Memberikan pertanggungjawaban kepada pemilik atas segala transaksi yang telah terjadi dalam bentuk pembuatan laporan.
c. Melayani pelanggan
3.2. Tinjauan Kasus
Berbagai masalah timbul dalam sebuah perusahaan, dengan adanya permasalahan tersebut maka diperlukan tinjauan kasus untuk mengetahui lebih jelas atau lebih detailnya suatu permasalahan yang terjadi. Pada bagian ini akan dipaparkan tinjauan kasus, di mana pada bagian ini akan dijabarkan proses sistem berjalan, permasalahan pokok, hingga pemecahan masalah.
3.2.1. Proses Bisnis Sistem Berjalan
1. Proses Pemesanan Barang
pelanggan datang langsung ke toko, kemudian menanyakan ketersediaan barang yang akan dibeli beserta menanyakan harga, kemudian bagian kasir akan
memberikan daftar barang beserta harga yang dimaksud, setelah terjadi kesepakatan, pelanggan melakukan pemesanan semua barang yang diinginkan. 2. Proses Pembayaran
Setelah pelanggan melakukan pemesanan, kasir kemudian membuat daftar pemesanan dalam sebuah nota transaksi beserta total yang harus dibayarkan oleh pelanggan kemudian menyerahkan nota tersebut ke pelanggan. Setelah menerima nota transaksi tersebut pelanggan melakukan pembayaran di tempat secara tunai. 3. Proses Pengiriman Barang
Jika barang yang dipesan tidak dapat dibawa sendiri oleh pelanggan, maka toko akan mengantarkan barang melalui bagian pengiriman ke alamat yang dituju dengan memberikan salinan nota transaksi kepada bagian pengiriman untuk memastikan semua barang yang dipesan dapat diantarkan.
4. Proses Pembuatan Laporan
Pada akhir bulan, bagian kasir melakukan pengumpulan nota transaksi dan mencocokkan dengan data yang ada pada logbook, kemudian membuat rekapitulasi semua nota transaksi dan menyalinnya semua dalam sebuah laporan.
3.2.2. Activity Diagram
1. Activity Diagram Proses Pemesanan Barang
act Pemesanan
Kasir Pelanggan
Mulai
Menanyakan Ketersediaan Barang dan Harga
Memberikan Daftar Barang dan Harga
Melakukan Pemesanan Barang
Selesai
Gambar III.2
Activity Diagram Proses Pemesanan Barang
2. Activity Diagram Proses Pembayaran
act Pembayaran Pelanggan Kasir Mulai Membuat Nota Pemesanan Memberikan Nota Ke
Pelanggan Menerima Nota
Melakukan Pembayaran Menerima Pembayaran
Selesai
Gambar III.3
3. Activity Diagram Proses Pengiriman Barang act Pengiriman Pelanggan Petugas Kasir Mulai
Memberikan Salinan Nota Transaksi Ke Petugas
Memuat Barang Sesuai Nota Transaksi Mengirimkan Barang Ke Konsumen Menerima Barang Pesanan Selesai Gambar III.4
Activity Diagram Proses Pengiriman Barang
4. Activity Diagram Proses Pembuatan Laporan
act Laporan Pemilik Kasir Mulai Mengumpulkan Nota Transaksi Mencocokan dengan catatan di logbook Membuat Laporan Penjualan Menerima dan Memeriksa Rekap Penjualan Selesai Menyerahkan Laporan Penjualan ke Pemilik Gambar III.5
3.2.3. Dokumen Masukan
1. Nama Dokumen : Daftar Barang dan Harga
Fungsi : Untuk mengetahui daftar barang yang tersedia dan harga
Sumber : Kasir
Tujuan : Pelanggan
Media : Kertas
Frekuensi : Setiap ada permintaan
Jumlah : -
Bentuk : Lampiran A-1
3.2.4. Dokumen Keluaran
1. Nama Dokumen : Nota Transaksi
Fungsi : Sebagai Bukti Transaksi
Sumber : Kasir
Tujuan : Pelanggan
Media : Kertas
Frekuensi : Setiap ada transaksi
Jumlah : 3 Rangkap
Bentuk : Lampiran B-1
2. Nama Dokumen : Laporan Penjualan
Fungsi : Sebagai rekap penjualan barang selama 1 bulan
Sumber : Kasir
Tujuan : Pemilik
Media : Kertas
Jumlah : -
Bentuk : Lampiran B-2
3. Nama Dokumen : Logbook
Fungsi : Mencatat transaksi harian toko
Sumber : Kasir
Tujuan : Internal
Media : Kertas
Frekuensi : Setiap ada transaksi
Jumlah : -
Bentuk : Lampiran B-3
3.2.5. Permasalahan Pokok
Semakin meningkatnya kuantitas transaksi bisnis yang terjadi setiap harinya, maka dibutuhkan kecepatan dan ketepatan dalam proses transaksi tersebut, namun, hal itu tidak lepas dari permasalahan yang dihadapi sehari-harinya oleh toko. Berikut beberapa permasalahan yang dihadapi oleh toko:
1. Pencatatan transaksi masih ditulis tangan oleh kasir dan ditulis dalam logbook catatan transaksi.
2. Nota transaksi belum tersusun dengan baik sehingga untuk mencocokkan transaksi dalam logbook, kasir masih harus mencari nota transaksi yang dimaksud.
3. Stok barang masuk dan keluar tidak dapat diketahui secara real-time sebab, ketika barang keluar tidak dicatat dalam kartu stok.
4. Pembuatan laporan penjualan masih relatif memakan waktu lama sebab kasir harus melakukan rekapitulasi ulang semua transaksi.
3.2.6. Pemecahan Masalah
Perlu ada pemecahan masalah untuk meminimalkan kesalahan dan memberikan solusi terhadap permasalahan yang terjadi. Adapun pemecahan masalah yang disarankan, antara lain:
1. Transaksi dicatat dalam sistem komputer dengan menggunakan sistem basis data agar data terorganisasi dengan baik serta dapat dengan mudah dikelola.
2. Melakukan penyusunan nota transaksi ke dalam ordner atau sejenisnya dikelompokkan per bulan agar memudakan kasir dalam pencarian nota transaksi. 3. Dibuatkan sebuah sistem yang dapat menambahkan atau mengurangi stok secara
real-time.
4. Dibuatkan sebuah aplikasi yang dapat mencatat transaksi secara real-time dan dapat menghasilkan keluaran berupa laporan pada waktu yang sama.
3.3. Analisis Kebutuhan Software
Dalam merancang sebuah sistem informasi diperlukan sebuah analisis kebutuhan sistem terlebih dahulu agar kebutuhan sistem informasi dapat sesuai dengan ekspektasi. Pada bagian ini akan dipaparkan beberapa hal, antara lain: analisis kebutuhan, use case diagram dan activity diagram.
3.3.1. Analisis Kebutuhan
Analisis kebutuhan merupakan bagian terpenting dari sebuah perancangan sistem, proses ini dimaksudkan agar kebutuhan sistem dapat sesuai dengan yang diharapkan oleh end-user atau pengguna. Berikut analisis kebutuhan pengguna dalam perancangan sistem informasi penjualan tunai pada Toko Bangunan Cahaya Mutiara:
1. Pemilik a. Login
b. Mengelola Pengguna c. Melihat Laporan Transaksi d. Melihat Laporan Stok Barang e. Melihat Laporan Jurnals 2. Kasir
a. Login
b. Mengelola Barang c. Mengelola Penjualan d. Mencetak Nota Transaksi e. Melihat Laporan Transaksi f. Melihat Laporan Stok Barang
3.3.2. Use Case Diagram
1. Use Case Diagram Pemilik A. Gambar Use Case
uc Use Case Diagram Pemilik
Pemilik Login Mengelola Pengguna Melihat Laporan Melihat Laporan Stok Barang Melihat Laporan Transaksi Logout Melihat Laporan Jurnal «include» «include» Gambar III.6
B. Deskripsi Use Case
1) Deskripsi Use Case Diagram Menambah Pengguna
Tabel III.1
Deskripsi Use Case Diagram Menambah Pengguna
Tujuan Pemilik dapat menambah data pengguna
Deskripsi Sistem ini memungkinkan aktor
menambah pengguna baru.
Aktor Pemilik
Kondisi Awal Pemilik sudah login dan sudah membuka
form pengguna
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan data pengguna
2. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 3. Menyimpan data pengguna ke basis
data
4. Menampilkan pesan berhasil
disimpan
Skenario Alternatif
1. Memasukkan data pengguna baru
4. Memperbaiki masukan yang salah.
2. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
3. Menampilkan pesan peringatan
kesalahan bahwa data yang
dimasukkan tidak sesuai yang
diharapkan
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 6. Menyimpan data pengguna ke basis
data
7. Menampilkan pesan berhasil
disimpan
Kondisi Akhir Sistem dapat menyimpan data pengguna
2) Deskripsi Use Case Diagram Mengubah Pengguna
Tabel III.2
Deskripsi Use Case Diagram Mengubah Pengguna
Tujuan Pemilik dapat mengubah data pengguna
Deskripsi Sistem ini memungkinkan aktor
mengubah pengguna.
Aktor Pemilik
Kondisi Awal Pemilik sudah login dan sudah membuka
form pengguna
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama pengguna yang dicari
4. Melakukan perubahan pada data pengguna
2. Mencari data pengguna yang akan diubah.
3. Menampilkan data pengguna
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 6. Menyimpan data pengguna ke basis
data
7. Menampilkan pesan berhasil
disimpan
Skenario Alternatif
1. Memasukkan nama pengguna yang dicari
4. Melakukan perubahan pada data pengguna
7. Memperbaiki masukan yang salah
2. Mencari data pengguna yang akan diubah.
3. Menampilkan data pengguna
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
6. Menampilkan pesan peringatan
bahwa data yang dimasukkan tidak valid
8. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 9. Menyimpan data pengguna ke basis
data
disimpan
Kondisi Akhir Sistem dapat menyimpan data pengguna
yang telah diubah 3) Deskripsi Use Case Diagram Mencari Pengguna
Tabel III.3
Deskripsi Use Case Diagram Mencari Pengguna
Tujuan Pemilik dapat mencari data pengguna
Deskripsi Sistem ini memungkinkan aktor mencari
pengguna.
Aktor Pemilik
Kondisi Awal Pemilik sudah login dan sudah membuka
form pengguna
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama pengguna yang dicari
2. Mencari data pengguna di basis data. 3. Menampilkan daftar pengguna yang
sesuai.
Kondisi Akhir Sistem dapat mencari data pengguna
4) Deskripsi Use Case Diagram Menghapus Pengguna
Tabel III.4
Deskripsi Use Case Diagram Menghapus Pengguna
Tujuan Pemilik dapat menghapus data pengguna
Deskripsi Sistem ini memungkinkan aktor
menghapus pengguna.
Aktor Pemilik
Kondisi Awal Pemilik sudah login dan sudah membuka
form pengguna
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama pengguna yang dicari
3. Memilih data pengguna 5. Memilih Ya
2. Mencari data pengguna yang akan diubah.
4. Menampilkan konfirmasi hapus 6. Menghapus data pengguna dari basis
data
7. Menampilkan pesan berhasil dihapus
Kondisi Akhir Sistem dapat menghapus data pengguna
5) Deskripsi Use Case Diagram Melihat Laporan
Tabel III.5
Deskripsi Use Case Diagram Melihat Laporan
Tujuan Pemilik dapat melihat laporan
Deskripsi Sistem ini memungkinkan admin melihat
laporan yang diinginkan
Aktor Pemilik
Kondisi Awal Pemilik sudah login
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan periode laporan 2. Klik Lihat
2. Use Case Diagram Kasir A. Gambar Use Case
uc Use Case Diagram Kasir
Pemilik Login Mengelola Barang Melihat Laporan Melihat Laporan Stok Barang Melihat Laporan Transaksi Logout Mengelola Transaksi Penjualan Cetak Nota Transaksi Mengelola Akun
Perkiraan Mengelola Jurnal
Melihat Laporan Jurnal «include» «include» «include» «include» «include» «extend» Gambar III.7
Use Case Diagram Kasir 2. Deskripsi Use Case
1) Deskripsi Use Case Diagram Menambah Barang
Tabel III.6
Deskripsi Use Case Diagram Menambah Barang
Tujuan Kasir dapat menambah data barang
Deskripsi Sistem ini memungkinkan aktor
menambah barang baru.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form barang
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan data barang
2. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 3. Menyimpan data barang ke basis
data
disimpan 5.
Skenario Alternatif
1. Memasukkan data barang baru
4. Memperbaiki masukan yang salah.
2. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
3. Menampilkan pesan peringatan
kesalahan bahwa data yang
dimasukkan tidak sesuai yang
diharapkan
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 6. Menyimpan data barang ke basis
data
7. Menampilkan pesan berhasil
disimpan
Kondisi Akhir Sistem dapat menyimpan data barang
baru
2) Deskripsi Use Case Diagram Mengubah Barang
Tabel III.7
Deskripsi Use Case Diagram Mengubah Barang
Tujuan Kasir dapat mengubah data barang
Deskripsi Sistem ini memungkinkan aktor
mengubah barang.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form barang
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama barang
yang dicari
4. Melakukan perubahan pada data barang
2. Mencari data barang yang akan diubah.
3. Menampilkan data barang
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 6. Menyimpan data barang ke basis
7. Menampilkan pesan berhasil disimpan
Skenario Alternatif
1. Memasukkan nama barang
yang dicari
4. Melakukan perubahan pada
data barang
7. Memperbaiki masukan yang salah
2. Mencari data barang yang akan diubah.
3. Menampilkan data barang
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
6. Menampilkan pesan peringatan
bahwa data yang dimasukkan tidak valid
8. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 9. Menyimpan data barang ke basis data
10. Menampilkan pesan berhasil
disimpan
Kondisi Akhir Sistem dapat menyimpan data barang
yang telah diubah 3) Deskripsi Use Case Diagram Mencari Barang
Tabel III.8
Deskripsi Use Case Diagram Mencari Barang
Tujuan Kasir dapat mencari data barang
Deskripsi Sistem ini memungkinkan aktor mencari
barang.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form barang
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama barang
yang dicari
2. Mencari data barang di basis data. 3. Menampilkan daftar barang yang
sesuai.
4) Deskripsi Use Case Diagram Menghapus Barang
Tabel III.9
Deskripsi Use Case Diagram Menghapus Barang
Tujuan Kasir dapat menghapus data barang
Deskripsi Sistem ini memungkinkan aktor
menghapus barang.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form barang
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama barang
yang dicari
3. Memilih data barang 5. Memilih Ya
2. Mencari data barang yang akan diubah.
4. Menampilkan konfirmasi hapus 6. Menghapus data barang dari basis
data
7. Menampilkan pesan berhasil dihapus
Kondisi Akhir Sistem dapat menghapus data barang
5) Deskripsi Use Case Diagram Menambah Akun Perkiraan
Tabel III.10
Deskripsi Use Case Diagram Menambah Akun Perkiraan
Tujuan Kasir dapat menambah akun perkiraan
Deskripsi Sistem ini memungkinkan aktor
menambah akun perkiraan baru.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form akun perkiraan
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan data akun
perkiraan
2. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
3. Menyimpan data akun perkiraan ke basis data
4. Menampilkan pesan berhasil
disimpan
Skenario Alternatif
1. Memasukkan data akun
perkiraan baru
4. Memperbaiki masukan yang salah.
2. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
3. Menampilkan pesan peringatan
kesalahan bahwa data yang
dimasukkan tidak sesuai yang
diharapkan
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 6. Menyimpan data akun perkiraan ke
basis data
7. Menampilkan pesan berhasil
disimpan
Kondisi Akhir Sistem dapat menyimpan data akun
perkiraan baru
6) Deskripsi Use Case Diagram Mengubah Akun Perkiraan
Tabel III.11
Deskripsi Use Case Diagram Mengubah Akun Perkiraan
Tujuan Kasir dapat mengubah data akun
perkiraan
Deskripsi Sistem ini memungkinkan aktor
mengubah akun perkiraan.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form akun perkiraan
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama akun
perkiraan yang dicari
4. Melakukan perubahan pada data akun perkiraan
2. Mencari data akun perkiraan yang akan diubah.
3. Menampilkan data akun perkiraan
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
6. Menyimpan data akun perkiraan ke basis data
7. Menampilkan pesan berhasil
disimpan
Skenario Alternatif
1. Memasukkan nama akun
perkiraan yang dicari
4. Melakukan perubahan pada
data akun perkiraan
7. Memperbaiki masukan yang salah
2. Mencari data akun perkiraan yang akan diubah.
3. Menampilkan data akun perkiraan
5. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 6. Menampilkan pesan peringatan bahwa
data yang dimasukkan tidak valid
8. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 9. Menyimpan data akun perkiraan ke
basis data
10. Menampilkan pesan berhasil disimpan
Kondisi Akhir Sistem dapat menyimpan data akun
perkiraan yang telah diubah 7) Deskripsi Use Case Diagram Mencari Akun Perkiraan
Tabel III.12
Deskripsi Use Case Diagram Mencari Akun Perkiraan
Tujuan Kasir dapat mencari data akun perkiraan
Deskripsi Sistem ini memungkinkan aktor mencari
akun perkiraan.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form akun perkiraan
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama akun
perkiraan yang dicari
2. Mencari data akun perkiraan di basis data.
3. Menampilkan daftar akun perkiraan yang sesuai.
Kondisi Akhir Sistem dapat mencari data akun perkiraan 8) Deskripsi Use Case Diagram Menghapus Akun Perkiraan
Tabel III.13
Deskripsi Use Case Diagram Menghapus Akun Perkiraan
Tujuan Kasir dapat menghapus data akun
perkiraan
Deskripsi Sistem ini memungkinkan aktor
menghapus akun perkiraan.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form akun perkiraan
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan nama akun
perkiraan yang dicari
3. Memilih data akun perkiraan 5. Memilih Ya
2. Mencari data akun perkiraan yang akan diubah.
4. Menampilkan konfirmasi hapus 6. Menghapus data akun perkiraan dari
basis data
7. Menampilkan pesan berhasil dihapus
Kondisi Akhir Sistem dapat menghapus data akun
perkiraan
9) Deskripsi Use Case Diagram Menambah Transaksi Penjualan
Tabel III.14
Deskripsi Use Case Diagram Menambah Transaksi Penjualan
Tujuan Kasir dapat menambah transaksi
penjualan
Deskripsi Sistem ini memungkinkan aktor
menambah transaksi penjualan baru.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form transaksi penjualan
Aksi Aktor Reaksi Sistem
Skenario Normal
penjualan
2. Masukkan barang yang dibeli
3. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 4. Menyimpan data transaksi penjualan
ke basis data
5. Menampilkan pesan berhasil
disimpan
Skenario Alternatif
1. Memasukkan data transaksi
penjualan baru
2. Masukkan barang yang dibeli
5. Memperbaiki masukan yang salah.
3. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
4. Menampilkan pesan peringatan
kesalahan bahwa data yang
dimasukkan tidak sesuai yang
diharapkan
6. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 7. Menyimpan data transaksi penjualan
ke basis data
8. Menampilkan pesan berhasil
disimpan
Kondisi Akhir Sistem dapat menyimpan data transaksi
penjualan
10) Deskripsi Use Case Diagram Mencari Transaksi Penjualan
Tabel III.15
Deskripsi Use Case Diagram Mencari Transaksi Penjualan
Tujuan Kasir dapat mencari data transaksi
penjualan
Deskripsi Sistem ini memungkinkan aktor mencari
transaksi penjualan.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form transaksi penjualan
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan periode transaksi penjualan yang dicari
2. Mencari data transaksi penjualan di basis data.
3. Menampilkan daftar transaksi penjualan yang sesuai.
Kondisi Akhir Sistem dapat mencari data transaksi
penjualan
11) Deskripsi Use Case Diagram Mencetak Nota Transaksi Penjualan
Tabel III.16
Deskripsi Use Case Diagram Mencetak Nota Transaksi Penjualan
Tujuan Kasir dapat mencetak nota transaksi
penjualan
Deskripsi Sistem ini memungkinkan aktor
mencetak nota transaksi penjualan.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form transaksi penjualan
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Pilih transaksi penjualan
2. Tampilkan nota transaksi.
Kondisi Akhir Sistem dapat mencetak nota transaksi
penjualan
12) Deskripsi Use Case Diagram Menambah Jurnal
Tabel III.17
Deskripsi Use Case Diagram Menambah Jurnal
Tujuan Kasir dapat menambah jurnal
Deskripsi Sistem ini memungkinkan aktor
menambah jurnal baru.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form jurnal
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan data jurnal 2. Masukkan akun terkait
3. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
4. Menyimpan data jurnal ke basis data
5. Menampilkan pesan berhasil
disimpan
Skenario Alternatif
1. Memasukkan data jurnal baru 2. Masukkan akun terkait
5. Memperbaiki masukan yang salah.
3. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak
4. Menampilkan pesan peringatan
kesalahan bahwa data yang
dimasukkan tidak sesuai yang
diharapkan
6. Memeriksa apakah masukan sesuai dengan yang diharapkan atau tidak 7. Menyimpan data jurnal ke basis data
8. Menampilkan pesan berhasil
disimpan
Kondisi Akhir Sistem dapat menyimpan data jurnal
13) Deskripsi Use Case Diagram Mencari Jurnal
Tabel III.18
Deskripsi Use Case Diagram Mencari Jurnal
Tujuan Kasir dapat mencari data jurnal
Deskripsi Sistem ini memungkinkan aktor mencari
jurnal.
Aktor Kasir
Kondisi Awal Kasir sudah login dan sudah membuka
form jurnal
Aksi Aktor Reaksi Sistem
Skenario Normal
1. Memasukkan periode jurnal yang dicari
2. Mencari data jurnal di basis data. 3. Menampilkan daftar jurnal yang
sesuai.
3.3.3. Activity Diagram
1. Activity Diagram Login
act Activity Diagram Login
Sistem Pemilik/ Kasir
Mulai
ID Pengguna dan Password
Klik Login Validasi Login
Sesuai?
Tampilkan Pesan Kesalahan
Tampilkan Form Menu Utama Selesai Form Login Tidak Ya Gambar III.8
2. Activity Diagram Mengelola Pengguna
act Activity Diagram Mengelola Pengguna
Sistem Pemilik
Mulai
Buka Form Pengguna
Pilih
Cari Data Mencari Data di Basis Data
Data Ada?
Pilih Data
Pilih
Hapus Hapus Data Pengguna
Ubah Tampilkan Data
Input Data Validasi Valid? Pesan Kesalahan Simpan Data Tambah Pilih Simpan Batal Selesai Ya Ya Tidak Tidak Gambar III.9
3. Activity Diagram Mengelola Barang
act Activity Diagram Mengelola Barang
Sistem Kasir
Mulai
Buka Form Barang
Pilih
Cari Data Mencari Data di Basis Data
Data Ada?
Pilih Data
Pilih Hapus Hapus Data Barang
Ubah Tampilkan Data
Input Data Validasi Valid? Pesan Kesalahan Simpan Data Tambah Pilih Simpan Batal Selesai Tidak Tidak Ya Ya Gambar III.10
4. Activity Diagram Mengelola Akun Perkiraan
act Activity Diagram Mengelola Akun Perkiraan
Sistem Kasir
Mulai
Buka Form Akun
Pilih
Cari Data Mencari Data di Basis Data
Data Ada?
Pilih Data
Pilih Hapus Hapus Data Akun
Ubah Tampilkan Data
Input Data Validasi Valid? Pesan Kesalahan Simpan Data Tambah Pilih Simpan Batal Selesai Ya Ya Tidak Tidak Gambar III.11
5. Activity Diagram Mengelola Transaksi Penjualan
act Activity Diagram Mengelola Transaksi
Sistem Kasir
Mulai
Pilih
Tambah
Input Data Transaksi
Simpan
Cari
Validasi
Valid?
Simpan Data Cari Data di Basis Data
Tampilkan Data
Batal
Selesai
Data Ada? Buka Form Transaksi
Pesan Kesalahan Input Barang Yang
Dijual
Input Lagi?
Pilih
Pillih Data Transaksi
Cetak Bukti Cetak Bukti Ke Printer
Tidak Tidak
Ya Ya
Gambar III.12
6. Activity Diagram Mengelola Jurnal act Activity Diagram Mengelola Jurnal
Sistem Kasir
Mulai
Pilih
Tambah
Input Data Jurnal
Simpan
Cari
Validasi
Valid?
Simpan Data Cari Data di Basis Data
Tampilkan Data
Batal
Selesai Data Ada? Buka Form Jurnal
Pesan Kesalahan Input Akun Input Lagi? Pilih Tidak Tidak Ya Ya Tidak Ya Gambar III.13
7. Activity Diagram Melihat Laporan act Activity Diagram Melihat Laporan
Sistem Pemilik
Mulai
Input Periode Laporan
Klik Lihat Tampilkan Laporan
Selesai Cetak Laporan Form Laporan
Gambar III.14
Activity Diagram Melihat Laporan
3.4. Desain
Setelah melakukan analisis kebutuhan sistem, tahap selanjutnya yang dilakukan adalah desain. Design ini mencakup perancangan database, antara lain
entity relationship diagram, logical record structure, serta spesifikasi file, rancangan
UML meliputi class diagram, sequence diagram, component diagram, serta
deployment diagram. Setelah itu baru melakukan implementasi dengan melakukan
3.4.1. Entity Relationship Diagram (ERD)
Gambar III.15
3.4.2. Logical Record Structure (LRS)
Gambar III.16
Logical Record Structure
3.4.3. Spesifikasi File
1. Spesifikasi File Pengguna
Nama File : Pengguna
Akronim : Pengguna
Fungsi : Menyimpan data pengguna
Tipe File : File Master
Organisasi File : Index Suquential
Akses File : Random
Media : Hardisk
Panjang Record : 100 Karakter
Software : MySQL
Tabel III.19
Spesifikasi File Pengguna
No Elemen Data Akronim Tipe Panjang Keterangan
1. Id pengguna id_pengguna CHAR 20 Primary Key
2. Nama
pengguna
nama_pengguna VARCHAR 35
3 Password password VARCHAR 30
4 Hak akses hak_akses VARCHAR 15
2. Spesifikasi File Barang
Nama File : barang
Akronim : barang
Fungsi : Menyimpan data barang
Tipe File : File Master
Organisasi File : Index Suquential
Akses File : Random
Media : Hardisk
Panjang Record : 157 Karakter
Kunci Field : kode_brg
Software : MySQL
Tabel III.20 Spesifikasi File Barang
No Elemen Data Akronim Tipe Panjang Keterangan
1. Kode Barang kode_brg CHAR 5 Primary Key
2. Nama Barang nama_brg VARCHAR 35
3 Stok Barang stok_brg INT 5
4 Satuan Satuan VARCHAR 4
5 Ukuran ukuran VARCHAR 100
3. Spesifikasi File Penjualan
Nama File : penjualan
Akronim : penjualan
Fungsi : Menyimpan data barang yang dijual
Tipe File : File Transaksi
Organisasi File : Index Suquential
Akses File : Random
Media : Hardisk
Panjang Record : 170 Karakter
Kunci Field : no_penjualan
Software : MySQL
Tabel III.21
Spesifikasi File Penjualan
No Elemen Data Akronim Tipe Panjang Keterangan
1. No Penjualan no_penjualan CHAR 15 Primary Key
2. Tanggal
Penjualan
tgl_penjualan DATE
3 Nama Pembeli Nama_pembeli VARCHAR 35
4 Alamat Pembeli Alamat_pembeli VARCHAR 100
5 Id Pengguna id_pengguna CHAR 20 Foreign Key
4. Spesifikasi File Detail Penjualan
Nama File : detail_penjualan
Akronim : detail_penjualan
Fungsi : Menyimpan data detail barang yang dijual
Tipe File : File Transaksi
Organisasi File : Index Suquential
Akses File : Random
Panjang Record : 28 Karakter
Kunci Field : -
Software : MySQL
Tabel III.22
Spesifikasi File Detail Penjualan
No Elemen Data Akronim Tipe Panjang Keterangan
1. No Penjualan no_penjualan CHAR 12 Foreign Key
2. Kode Barang kode_brg CHAR 5 Foreign Key
3 Junlah Jual jml_jual INT 4
4. Harga Jual harga_jual INT 7
5. Spesifikasi File Akun Perkiraan
Nama File : Akun Perkiraan
Akronim : akun_perkiraan
Fungsi : Menyimpan data akun perkiraan
Tipe File : File Master
Organisasi File : Index Suquential
Akses File : Random
Media : Hardisk
Panjang Record : 66 Karakter
Kunci Field : kode_akun
Software : MySQL
Tabel III.23
Spesifikasi File Akun Perkiraan
No Elemen Data Akronim Tipe Panjang Keterangan
1. Kode Akun kode_akun CHAR 5 Primary Key
2. Nama Akun nama_akun VARCHAR 30
3 Jenis Akun jenis_akun VARCHAR 25
6. Spesifikasi File Jurnal
Nama File : jurnal
Akronim : jurnal
Fungsi : Menyimpan data jurnal umum
Tipe File : File Transaksi
Organisasi File : Index Suquential
Akses File : Random
Media : Hardisk
Panjang Record : 148 Karakter
Kunci Field : no_jurnal
Software : MySQL
Tabel III.24 Spesifikasi File Jurnal
No Elemen Data Akronim Tipe Panjang Keterangan
1. No Jurnal no_jurnal CHAR 8 Primary Key
2. Tanggal Jurnal tgl_jurnal DATE
3 No Referensi no_ref VARCHAR 20
4 Keterangan keterangan VARCHAR 100
5 Id pengguna id_pengguna CHAR 20 Foreign Key
7. Spesifikasi File Detail Jurnal
Nama File : detail_jurnal
Akronim : detail_jurnal
Fungsi : Menyimpan data detail jurnal umum
Tipe File : File Transaksi
Organisasi File : Index Suquential
Akses File : Random
Panjang Record : 31 Karakter
Kunci Field : -
Software : MySQL
Tabel III.25
Spesifikasi File Detail Jurnal
No Elemen Data Akronim Tipe Panjang Keterangan
1. No Jurnal no_jurnal CHAR 8 Foreign Key
2. Kode Akun kode_akun CHAR 5 Foreign Key
3 Debet Debet INT 9
4. Kredit Kredit INT 9
3.4.4. Class Diagram
Gambar III.17
Class Diagram
class Class Model
AkunPerkiraan - jenis_akun: String - kode_akun: String - Koneksi: Connection - nama_akun: String - PesanError: String - saldo_normal: String + AkunPerkiraan() + cariAkunByKode(String): AkunPerkiraan + cariAkunByNama(String): List<AkunPerkiraan> + getJenis_akun(): String + getKode_akun(): String + getNama_akun(): String + getSaldo_normal(): String + hapusAkun(String): Integer + listPerkiraan(): List<AkunPerkiraan> + setJenis_akun(String): void + setKode_akun(String): void + setNama_akun(String): void + setSaldo_normal(String): void + tambahAkun(): Integer + ubahAkun(String): Integer «property get» + getKoneksi(): Connection + getPesanError(): String Barang - harga_brg: Integer - jml_brg: Integer - kode_brg: String - Koneksi: Connection - nama_brg: String - PesanError: String - satuan: String - stok_brg: Integer + Barang() + cariBarangByKode(String): Barang + cariBarangByNama(String): List<Barang> + getHarga_brg(): Integer + getJml_brg(): Integer + getKode_brg(): String + getNama_brg(): String + getSatuan(): String + getStok_brg(): Integer + hapusBarang(String): Integer + kodeBarangBaru(): String + listBarang(): List<Barang> + setHarga_brg(Integer): void + setJml_brg(Integer): void + setKode_brg(String): void + setNama_brg(String): void + setSatuan(String): void + setStok_brg(Integer): void + tambahBarang(): Integer + ubahBarang(String): Integer «property get» + getKoneksi(): Connection + getPesanError(): String «property set» + setKoneksi(Connection): void DetailPenjualan - harga_jual: Integer - jml_jual: Integer - kode_brg: String - Koneksi: Connection - no_penjualan: String - PesanError: String + DetailPenjualan() + getHarga_jual(): Integer + getJml_jual(): Integer + getKode_brg(): String + getNo_penjuaalan(): String + getNo_penjualan(): String + listDetailPenjualan(String): List<DetailPenjualan> + setHarga_jual(Integer): void + setJml_jual(Integer): void + setKode_brg(String): void + setNo_penjualan(String): void + tambahDetailPenjualan(): Integer «property get» + getKoneksi(): Connection + getPesanError(): String «property set» + setKoneksi(Connection): void JurnalDetail - debet: double - kode_akun: String - Koneksi: Connection - kredit: double - no_jurnal: String - PesanError: String + getDebet(): double + getKode_akun(): String + getKredit(): double + getNo_jurnal(): String + JurnalDetail() + listDetailJurnal(String): List<JurnalDetail> + setDebet(double): void + setKode_akun(String): void + setKredit(double): void + setNo_jurnal(String): void + tambahDetailJurnal(): Integer «property get» + getKoneksi(): Connection + getPesanError(): String Jurnal - id_pengguna: String - keterangan: String - koneksi: Connection - no_jurnal: String - no_ref: String - PesanError: String - tgl_jurnal: Date + cariJurnalByNo(String): Jurnal + cariJurnalPeriode(Date, Date): List<Jurnal> + getId_pengguna(): String + getKeterangan(): String + getKoneksi(): Connection + getNo_jurnal(): String + getNo_ref(): String + getTgl_jurnal(): Date + Jurnal() + listJurnal(): List<Jurnal> + noJurnalBaru(): String + setId_pengguna(String): void + setKeterangan(String): void + setNo_jurnal(String): void + setNo_ref(String): void + setTgl_jurnal(Date): void + tambahJurnal(): Integer «property get» + getPesanError(): String «property set» + setPesanError(String): void Pengguna - hak_akses: String - id_pengguna: String - Koneksi: Connection - nama_pengguna: String - password: String - PesanError: String + cariPenggunaById(String): Pengguna + cariPenggunaByNama(String): List<Pengguna> + getHak_akses(): String + getId_pengguna(): String + getNama_pengguna(): String + getPassword(): String + hapusPengguna(String): Integer + listPengguna(): List<Pengguna> + Pengguna() + setHak_akses(String): void + setId_pengguna(String): void + setNama_pengguna(String): void + setPassword(String): void + tambahPengguna(): Integer + ubahPengguna(String): Integer «property get» + getKoneksi(): Connection + getPesanError(): String Penjualan - alamat_pembeli: String - id_pengguna: String - Koneksi: Connection - nama_pembeli: String - no_penjualan: String - PesanError: String - tgl_penjualan: Date + cariPenjuaalanByNo(String): Penjualan + cariPenjualanPeriode(Date, Date): List<Penjualan> + getAlamat_pembeli(): String + getId_pengguna(): String + getNama_pembeli(): String + getNo_penjualan(): String + getTgl_penjualan(): Date + listPenjualan(): List<Penjualan> + noPenjualanBaru(): String + Penjualan() + setAlamat_pembeli(String): void + setId_pengguna(String): void + setNama_pembeli(String): void + setNo_penjualan(String): void + setTgl_penjualan(Date): void + tambahPenjualan(): int «property get» + getKoneksi(): Connection + getPesanError(): String 0..* 1 1 0..* 1 0..* 1 1..* 0..* 1 1..* 1
3.4.5. Sequence Diagram
1. Sequence Diagram Login
sd Sequence Diagram Login
Pengguna
Form Login Controller Login
Pengguna
Form Utama
opt Error
[Pesan Kesalahan]:
[Buka Form Utama]: FormLogin()
[Result cariPenggunaById]: bloginActionPerformed(evt)
[Input Id dan Password]:
cariPenggunaById(Id) [Klik Login]:
«create» [Buka Form Login]:
Gambar III.18
2. Sequence Diagram Mengelola Pengguna sd Sequence Diagram Mengelola Pengguna
Pemilik
Form Pengguna Control Pengguna
Pengguna
opt Error opt Error
alt Ubah Data
alt Hapus Data
ubahPengguna(Id) cariPenggunaById(Id) [Klik Tambah]: [Perbaharui Data]: bsimpanActionPerformed(evt) bsimpanActionPerformed(evt) [Input Data Pengguna]:
[Buka Form Pengguna]:
[Klik Hapus]: tampilData() aktif() [Validasi Data]: [Klik Edit]: [Klik Simpan]: bhapusActionPerformed(evt) bubahActionPerformed(evt) FormPengguna() «create» setData() [Validasi Data]: «create» hapusPengguna(Id) [Result cariIdPengguna]: [Pesan Kesalahan]: [Klik Simpan]: setData()
[Pilih Data Pengguna]: [Pilih Data Pengguna]:
btambahActionPerformed(evt)
[Pesan Kesalahan]:
tambahPengguna() bersihForm()
Gambar III.19
3. Sequence Diagram Mengelola Barang sd Sequence Diagram Mengelola Barang
Kasir
Form Barang Control Barang
Barang
alt Ubah Data
alt Hapus Data
opt Error opt Error
[Pilih Data Barang]: [Klik Simpan]: setData() [Validasi Data]: aktif() tampilData() [Klik Edit]:
[Tampil Kode Barang]:
bubahActionPerformed(evt)
[Pilih Data Barang]:
kodeBarangBaru() FormBarang()
«create»
[Klik Simpan]: [Input Data Barang]:
hapusBarang(kode) [Result cariBarangByKode]: bersihForm() [Klik Hapus]: [Result kodeBarangBaru]: setData() bsimpanActionPerformed(evt) bsimpanActionPerformed(evt) tambahBarang() [Buka Form Barang]:
[Perbaharui Data]: [Pesan Kesalahan]: bhapusActionPerformed(evt) [Klik Tambah]: [Validasi Data]: ubahBarang(kode) «create» cariBarangByKode(kode) btambahActionPerformed(evt) [Pesan Kesalahan]: Gambar III.20
4. Sequence Diagram Mengelola Akun Perkiraan sd Sequence Diagram Mengelola Akun Perkiraan
Kasir
Form Akun Control Akun
Akun
alt Ubah Data
alt Hapus Data
opt Error opt Error
[Perbaharui Data]:
[Result cariAkunByKode]:
bhapusActionPerformed(evt) [Pilih Data Akun]:
[Buka Form Akun]:
aktif() bsimpanActionPerformed(evt) bubahActionPerformed(evt) ubahAkun(kode) [Validasi Data]: setData() setData() [Klik Simpan]: bsimpanActionPerformed(evt) btambahActionPerformed(evt) cariAkunByKode(kode) [Input Data Akun]:
tambahAkun() hapusAkun(kode) [Validasi Data]: [Klik Tambah]: tampilData() [Klik Hapus]: [Klik Edit]: «create» [Pesan Kesalahan]: FormAkun() «create» [Klik Simpan]: bersihForm()
[Pilih Data Barang]:
[Pesan Kesalahan]:
Gambar III.21
5. Sequence Diagram Mengelola Penjualan
sd Sequence Diagram Mengelola Penjualan
Kasir
Form Penjualan Control Penjualan
Barang
Penjualan
Detail Penjualan
loop Input Data Barang [Tambah Lagi?]
loop [Data barang = 0]
opt Error
ubahBarang(kode) [Input Kode Barang]:
[Validasi Data]:
tambahDetailBarangMasuk() [Input Data Penjualan]:
[Buka Form Penjuaan]:
[Tampil Data Barang]:
bsimpanActionPerformed(evt) [Tampil No Penjualan]: [Klik Simpan]: bersihForm() tambahBarangMasuk() btambahActionPerformed(evt) [Result noPenjualanBaru]: FormPenjualan() «create» cariKodeBarang(kode) setDataPenjualan() «create» noPenjualanBaru() setDataDetail() [Klik Tambah]: «create» [Pesan Kesalahan]: aktif() [Result cariKodeBarang]: keyPressed(evt) «create» [Input Jumlah]: Gambar III.22
3.4.6. Component Diagram cmp Component Model Penjualan Barang Pengguna Jurnal Akun Aplikasi Penjualan Tunai Entry Penjualan Jurnal Detail Penjualan Detail Entry Jurnal Gambar III.23 Component Diagram 3.4.7. Deployment Diagram deployment Deployment Aplikasi Aplikasi Penjualan Tunai Jasper Report Database Server MySQL Server Java
Java Runtime Environment Versi 8.1 tb_cahaya_mutiara «use» <<dependency>> MySqlJDBC Driver Gambar III.24 Deployment Diagram
3.4.8. User Interface 1. Form Login
Gambar III.25
Form Login
2. Form Menu Utama
Gambar III.26
3. Form Pengguna Gambar III.27 Form Pengguna 4. Form Barang Gambar III.28 Form Barang
5. Form Akun
Gambar III.29
Form Akun
6. Form Tampil Penjualan
Gambar III.30
7. Form Input Penjualan
Gambar III.31
Form Penjualan Input
8. Form Jurnal
Gambar III.32
9. Form Laporan
Gambar III.33
Form Laporan
3.5. Implementasi
Tahapan terakhir dalam perancangan sistem informasi ini adalah implementasi. Implementasi merupakan tahapan paling terpenting, sebab pada tahapan dapat diketahui sistem informasi yang diimplementasikan apakah bersesuaian atau tidak dengan rancangan yang telah dibuat.
3.5.1. Code Generation 1. Model Penjualan package models; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Date; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List;
public class Penjualan {
private String no_penjualan; private Date tgl_penjualan; private String nama_pembeli; private String alamat_pembeli; private String id_pengguna; private String PesanError; public Penjualan() { try { Class.forName("com.mysql.jdbc.Driver"); Koneksi = DriverManager.getConnection("jdbc:mysql://localhost/tb_cahaya_mutiara", "root", "");
} catch (ClassNotFoundException | SQLException ex) { this.PesanError = ex.getMessage();
} }
public Connection getKoneksi() { return Koneksi;
}
public String getNo_penjualan() { return no_penjualan;
}
public void setNo_penjualan(String no_penjualan) { this.no_penjualan = no_penjualan;
}
public Date getTgl_penjualan() { return tgl_penjualan;
}
public void setTgl_penjualan(Date tgl_penjualan) { this.tgl_penjualan = tgl_penjualan;
}
public String getNama_pembeli() { return nama_pembeli;
}
public void setNama_pembeli(String nama_pembeli) { this.nama_pembeli = nama_pembeli;
public String getAlamat_pembeli() { return alamat_pembeli;
}
public void setAlamat_pembeli(String alamat_pembeli) { this.alamat_pembeli = alamat_pembeli;
}
public String getId_pengguna() { return id_pengguna;
}
public void setId_pengguna(String id_pengguna) { this.id_pengguna = id_pengguna;
}
public String getPesanError() { return PesanError;
}
public List<Penjualan> listPenjualan() { Statement st = null;
ResultSet rs = null; try {
this.PesanError = "";
String Cmd = "SELECT * FROM penjualan"; List<Penjualan> lpb = new ArrayList(); st = Koneksi.createStatement();
rs = st.executeQuery(Cmd); while (rs.next()) {
Penjualan pb = new Penjualan();
pb.setNo_penjualan(rs.getString("no_penjualan")); pb.setTgl_penjualan(rs.getDate("tgl_penjualan")); pb.setNama_pembeli(rs.getString("nama_pembeli")); pb.setAlamat_pembeli(rs.getString("alamat_pembeli")); pb.setId_pengguna(rs.getString("id_pengguna")); lpb.add(pb); } st.close(); rs.close(); return lpb;
} catch (SQLException ex) {
this.PesanError = ex.getMessage(); return null;
} }
public List<Penjualan> cariPenjualanPeriode(Date tgl1, Date tgl2) { PreparedStatement ps = null;
ResultSet rs = null; try {
this.PesanError = "";
String Cmd = "SELECT * FROM penjualan WHERE tgl_penjualan BETWEEN ? AND ?";
List<Penjualan> lpb = new ArrayList(); ps = Koneksi.prepareStatement(Cmd); ps.setDate(1, tgl1);
ps.setDate(2, tgl2); rs = ps.executeQuery();
Penjualan pb = new Penjualan(); while (rs.next()) { pb.setNo_penjualan(rs.getString("no_penjualan")); pb.setTgl_penjualan(rs.getDate("tgl_penjualan")); pb.setNama_pembeli(rs.getString("nama_pembeli")); pb.setId_pengguna(rs.getString("id_pengguna")); lpb.add(pb); } ps.close(); rs.close(); return lpb;
} catch (SQLException ex) { ex.printStackTrace();
this.PesanError = ex.getMessage(); return null;
} }
public int tambahPenjualan() { PreparedStatement ps = null; try {
this.PesanError = "";
String Cmd = "INSERT INTO penjualan (no_penjualan, tgl_penjualan, nama_pembeli, id_pengguna) VALUES (?,?,?,?)";
ps = Koneksi.prepareStatement(Cmd); ps.setString(1, this.no_penjualan); ps.setDate(2, this.tgl_penjualan); ps.setString(3, this.nama_pembeli); ps.setString(4, this.id_pengguna);
Integer res = ps.executeUpdate(); ps.close();
return res;
} catch (SQLException ex) {
this.PesanError = ex.getMessage(); return -1;
} }
public Penjualan cariPenjuaalanByNo(String No) { this.PesanError = "";
try {
String Cmd = "SELECT * FROM penjualan WHERE no_penjualan=?"; PreparedStatement ps = Koneksi.prepareStatement(Cmd); ps.setString(1, No); ResultSet rs = ps.executeQuery(); if (rs.next()) { this.setNo_penjualan(rs.getString("no_penjualan")); this.setTgl_penjualan(rs.getDate("tgl_penjualan")); this.setNama_pembeli(rs.getString("nama_pembeli")); this.setAlamat_pembeli(rs.getString("alamat_pembeli")); this.setId_pengguna(rs.getString("id_pengguna")); } else { this.setNo_penjualan(null); this.setTgl_penjualan(null); this.setNama_pembeli(""); } return this;
} catch (SQLException ex) { ex.printStackTrace(); this.PesanError = ex.getMessage(); return null; } }
public String noPenjualanBaru(){ try {
SimpleDateFormat sdf = new SimpleDateFormat("MM-yyyy");
String now[] = sdf.format(new java.util.Date()).split("-"); String bulan = now[0];
String tahun = now[1];
String Cmd = "SELECT * FROM penjualan WHERE
MONTH(tgl_penjualan)=? AND YEAR(tgl_penjualan)=? ORDER BY
SUBSTRING(no_penjualan, 1,4) DESC LIMIT 1"; this.PesanError = "";
PreparedStatement ps = Koneksi.prepareStatement(Cmd); ps.setString(1, bulan); ps.setString(2, tahun); ResultSet rs = ps.executeQuery(); if (rs.next()) { String Id = rs.getString("no_penjualan").substring(0, 4); Id = String.format("%04d", Integer.parseInt(Id) + 1) + "/PJ/" +bulan+"/"+tahun; return Id; } else { return "0001/PJ/" +bulan+"/"+tahun; }
} catch (SQLException ex) {
this.PesanError = ex.getMessage(); return ""; } } } 2. Form Penjualan package forms; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import javax.swing.DefaultCellEditor; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.table.TableColumn; import models.DetailPenjualan; import models.Barang; import tb_cahaya_mutiara.TB_Cahaya_Mutiara; import javax.swing.table.DefaultTableModel; import models.Penjualan;
/**
* Creates new form FormPenjualan */
String NoPenjualan = ""; String Status = "";
int total = 0; int row = -1;
Barang barang = new Barang();
Penjualan penjualan = new Penjualan();
DetailPenjualan detail_penjualan = new DetailPenjualan(); DefaultTableModel model;
TableColumn cKode, cJumlah;
JTextField textKode = new JTextField(); JTextField textJumlah = new JTextField();
NumberFormat nf = new DecimalFormat("Rp #,#00.00");
public FormPenjualanInput(java.awt.Frame parent, boolean modal) { super(parent, modal);
initComponents();
Toolkit tk = Toolkit.getDefaultToolkit(); Dimension d = tk.getScreenSize(); int x, y;
x = (int) ((d.getWidth() - getSize().width) / 2); y = (int) ((d.getHeight() - getSize().height) / 2); setLocation(x, y);
model = (DefaultTableModel) tbldetail.getModel(); textKode.setFont(new Font("BellGothic BT", 0, 16)); textJumlah.setFont(new Font("BellGothic BT", 0, 16));
tbldetail.getTableHeader().setFont(new Font("BellGothic BT", 1, 16)); tbldetail.setRowHeight(30);
cKode = (TableColumn) tbldetail.getColumnModel().getColumn(0); cJumlah = (TableColumn) tbldetail.getColumnModel().getColumn(4); cKode.setCellEditor(new DefaultCellEditor(textKode));
cJumlah.setCellEditor(new DefaultCellEditor(textJumlah)); textKode.addKeyListener(new KeyAdapter() {
if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_F1) {
if (e.getKeyCode() == KeyEvent.VK_F1) {
textKode.setText(new FormCariBarang(null, true).getBarang()); }
row = tbldetail.getSelectedRow();
textKode.setText(textKode.getText().toUpperCase()); if (!"".equals(textKode.getText())) {
getDataBarang(textKode.getText(), row);
for (int i = 0; i < model.getRowCount() - 1; i++) { String kode = model.getValueAt(i, 0).toString();
if (kode.equalsIgnoreCase(textKode.getText()) && row != i) { model.setValueAt(null, row, 0); model.setValueAt(null, row, 1); model.setValueAt(null, row, 2); model.setValueAt(null, row, 3); model.setValueAt(null, row, 4); model.setValueAt(null, row, 5); textKode.setText(null);
JOptionPane.showMessageDialog(rootPane, "Data sudah ada!", "Info", JOptionPane.ERROR_MESSAGE); break; } } } } } }); textJumlah.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) {
if (!Character.isDigit(e.getKeyChar()) && e.getKeyChar() !=
KeyEvent.VK_BACK_SPACE && e.getKeyChar() != KeyEvent.VK_DELETE) { textJumlah.setEditable(false);
JOptionPane.showMessageDialog(rootPane, "Input hanya boleh berupa angka!", "Error", JOptionPane.ERROR_MESSAGE);
} else {
textJumlah.setEditable(true); }
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_TAB) {
try {
int subtotal = Integer.parseInt(textJumlah.getText()) * Integer.parseInt(model.getValueAt(row, 3).toString()); model.setValueAt(subtotal, row, 5); hitungTotal(); if (textJumlah.getText().equals("")) { textJumlah.setText("1"); }
} catch (Exception ex) { } } } }); tbldetail.setSelectionBackground(new Color(255, 117, 67)); tbldetail.setSelectionForeground(Color.white);
DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date dt = new java.util.Date();
ttgl_penjualan.setText(df.format(dt));
tno_penjualan.setText(penjualan.noPenjualanBaru()); model.setRowCount(1);
}
private void getDataBarang(String kode, int row) { barang = barang.cariBarangByKode(kode); if (barang.getNama_brg() == null) {
JOptionPane.showMessageDialog(rootPane, "Data barang yang anda cari tidak ada!", "Error", JOptionPane.ERROR_MESSAGE);
model.setValueAt(null, row, 0); model.setValueAt(null, row, 1); model.setValueAt(null, row, 2); model.setValueAt(null, row, 3); model.setValueAt(null, row, 4); } else { model.setValueAt(kode.toUpperCase(), row, 0); model.setValueAt(barang.getNama_brg(), row, 1); model.setValueAt(barang.getUkuran(), row, 2); model.setValueAt(barang.getHarga_brg(), row, 3); } }
java.util.Date dt = new java.util.Date();
java.sql.Date sdate = new java.sql.Date(dt.getTime()); penjualan.setNo_penjualan(tno_penjualan.getText()); penjualan.setNo_penjualan(tno_penjualan.getText()); penjualan.setTgl_penjualan(sdate); penjualan.setNama_pembeli(tnama_pembeli.getText()); penjualan.setAlamat_pembeli(talamat_pembeli.getText()); penjualan.setId_pengguna(TB_Cahaya_Mutiara.id_pengguna); }
private void hitungTotal() { int total = 0;
for (int i = 0; i < model.getRowCount(); i++) { try {
total += Integer.parseInt(model.getValueAt(i, 5).toString()); } catch (Exception ex) {
} } this.total = total; ttotal.setText(nf.format(total)); } @SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable();
jTextField8 = new javax.swing.JTextField();
jDateChooser2 = new com.toedter.calendar.JDateChooser(); jPanel3 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane(); tbldetail = new javax.swing.JTable();
ttotal = new javax.swing.JTextField(); jLabel14 = new javax.swing.JLabel(); jLabel13 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel();
talamat_pembeli = new javax.swing.JTextField(); tnama_pembeli = new javax.swing.JTextField(); ttgl_penjualan = new javax.swing.JTextField(); tno_penjualan = new javax.swing.JTextField(); jLabel7 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel(); bsimpan = new javax.swing.JButton(); bbatal = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
jTable1.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" } )); jScrollPane1.setViewportView(jTable1); jTextField8.setText("jTextField8"); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); jPanel3.setBackground(new java.awt.Color(216, 67, 21));
jLabel1.setFont(new java.awt.Font("BellGothic BT", 0, 48)); // NOI18N jLabel1.setForeground(new java.awt.Color(255, 255, 255));
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); jLabel1.setText("Input Penjualan Barang");
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING ) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING ) .addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap() .addComponent(jLabel1)
.addContainerGap(20, Short.MAX_VALUE)) );
tbldetail.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N tbldetail.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] { },
new String [] {
"Kode Barang", "Nama Barang", "Ukuran", "Harga", "Jumlah Jual", "Subtotal"
} ) {
boolean[] canEdit = new boolean [] { true, false, false, false, true, false };
public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex];
} });
tbldetail.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { tbldetailFocusGained(evt);
} });
tbldetail.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tbldetailMouseClicked(evt);
} });
tbldetail.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { tbldetailKeyPressed(evt); } }); jScrollPane2.setViewportView(tbldetail); ttotal.setEditable(false); ttotal.setBackground(new java.awt.Color(255, 255, 255));
ttotal.setFont(new java.awt.Font("BellGothic BT", 0, 40)); // NOI18N ttotal.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
jLabel14.setFont(new java.awt.Font("BellGothic BT", 1, 24)); // NOI18N jLabel14.setText("T O T A L");