Pages

Rabu, 17 Juli 2013

Form Penjualan Barang Aplikasi Minimarket - Java MySQL


     Pada form ini, dibuat untuk melakukan penjualan barang. Nantinya, form ini akan terdapat dua buah tabel. Tabel yang pertama adalah tabel daftar barang, yaitu untuk melihat barang apa saja yang ada, dimana barang tersebut akan ditampilkan ketika stok-nya lebih dari nol, jika stok kurang maka tidak akan ditampilkan. Setelah dibeli, barang akan di tampung pada tabel kedua. Untuk itu simak lebih teliti pada panduan berikut ini :
1. Buatlah sebuah JForm, desain bebas akan tetapi juga dapat mengikuti desain form seperti berikut :


2. Dan beri nama masing-masing txtfield, jDateChooser, button, table, serta jLabel. Selanjutnya, dalam form ini, ketika user belum melakukan transaksi baru. ada beberapa fungsi yang di setEnabled False pada kondisi awal, yaitu :
private void kondisiawal() {
        btninsert.setEnabled(false);
        btndelete.setEnabled(false);
        txt_idbarang.setEnabled(false);
        txt_jmlh.setEnabled(false);
        tbl_barangbeli.setEnabled(false);
        txt_tot.setEnabled(false);
        txt_bayar.setEnabled(false);
        clear();
        btntransaksibaru.setEnabled(true);
        idPenjualan = "";
    }
Sedangkan setelah kondisi transaksi aktif akan di setEnabled True, yaitu :
 private void kondisiAktif() {
        btninsert.setEnabled(true);
        btndelete.setEnabled(true);
        txt_jmlh.setEnabled(true);
        tbl_barangbeli.setEnabled(true);
        btntransaksibaru.setEnabled(false);
        txt_bayar.setEnabled(true);
        clear();
    }
3. Setelah itu kita akan membuat kode tanggal secara otomatis pada saat button transaksi baru di klik. Sebelumnya kita juga pernah melakukannya pada transaksi pengadaan sebelumnya. Masih ingat? jika tidak saya akan memberikan source code diman source code tersebut termasuk bernama InsertTabelPenjualan ( ):
 private String insertTabelPenjualan() {
        try {
            Date date = new Date();
            SimpleDateFormat dateformat=new SimpleDateFormat ("yyyy-MM-dd");
            String tanggal=dateformat.format(date);
            txttanggal.setDate(date);

            SimpleDateFormat dateformat2=new SimpleDateFormat ("dd.MM.yyyy");
            String tanggal2=dateformat2.format(date);
            int count = 100;
            String sqltanggal = "select tanggal_penjualan,id_penjualan from penjualan";
            resultSet = statement.executeQuery(sqltanggal);
            while (resultSet.next()) {
                String data1 = resultSet.getString(1);
                String data2 = resultSet.getString(2);
                if (data1.equals(tanggal)) {
                    if (count == Integer.valueOf(data2.substring(14, 17))) {
                        count++;
                    }
                }
            }
            idPenjualan = "TJ." + tanggal2 + "." + count;
            String sql = "insert into penjualan values('" + idPenjualan + "','"+Form_Login.userLogin+"','" + tanggal + "',0)";
            statement.executeUpdate(sql);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
        return idPenjualan;
    }
Keterangan : source code diatas akan menampilkan kode tanggal secara otomatis. sehingga tidak perlu melakukan inputan.

4. Berikutnya adalah , langkah untuk membuat bagaimana jika terjadi transaksi maka terdapat stok barang yang berkurang dan langsung ditampilkan pada tabel. Maka perlu adanya update stok barang. Jika terjadi cancel dalam melakukan transaksi, maka stok barang harus bertambah, sehingga kita membutuhkan update stok barang. kemudian laba akan dihitung pada tiap transaksi. Berikut source code untuk menghitung laba :
Source code memperoleh laba :
 private double hitungLaba() throws SQLException {
        Vector vektorIdPengadaan = new Vector();
        Vector vektorIdBarang = new Vector();
        Vector jum = new Vector();
        Vector hargaBeli = new Vector();
        Vector hargaJual = new Vector();
        double laba = 0;
        try {
            String sql = "select r.id_pengadaan,r.id_barang,r.harga_beli_satuan,b.harga_jual,r.belum_terjual "
                    + "from rel_pengadaan_barang r,barang b "
                    + "where r.id_barang=b.id_barang AND r.id_barang='" + txt_idbarang.getText() + "' and r.belum_terjual>0";
            resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                vektorIdPengadaan.addElement(resultSet.getString(1));
                vektorIdBarang.addElement(resultSet.getString(2));
                hargaBeli.addElement(resultSet.getDouble(3));
                hargaJual.addElement(resultSet.getDouble(4));
                jum.addElement(resultSet.getInt(5));
            }
            int jumlah;
            int jumlahJual = Integer.valueOf(txt_jmlh.getText());
            for (int i = 0; i < vektorIdPengadaan.size(); i++) {
                jumlah = jum.elementAt(i) - jumlahJual;
                if (jumlah >= 0) {
                    try {
                        String query = "update rel_pengadaan_barang set belum_terjual=" + jumlah + " where id_pengadaan='" + vektorIdPengadaan.elementAt(i) + "' and id_barang='" + vektorIdBarang.elementAt(i) + "'";
                        statement.executeUpdate(query);
                        laba = laba + (hargaJual.elementAt(i) - hargaBeli.elementAt(i)) * jumlahJual;
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(null, e.getMessage());
                    }
                    break;
                } else {
                    try {
                        String query1 = "update rel_pengadaan_barang set belum_terjual=" + 0 + " where id_pengadaan='" + vektorIdPengadaan.elementAt(i) + "' and id_barang='" + vektorIdBarang.elementAt(i) + "'";
                        statement.executeUpdate(query1);
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(null, e.getMessage());
                    }
                    laba = laba + (hargaJual.elementAt(i) - hargaBeli.elementAt(i)) * jum.elementAt(i);
                    jumlahJual = -1 * jumlah;
                }
            }
        } catch (NumberFormatException n) {
            JOptionPane.showMessageDialog(null, n.getMessage());
        }
        return laba;
    }
Source code untuk update stok barang :
 private void UpdateStok(String ubah) {
        int stokBaru = 0;
        try {
            if(ubah.equals("insert")){
                stokBaru = cekStok() - Integer.parseInt(txt_jmlh.getText());
            }else if(ubah.equals("delete")){
                stokBaru=cekStok()+jml_awal;
            }
            String total = "UPDATE barang set stok ='" + stokBaru + "' where id_barang = '" + id_barang + "'";
            statement.executeUpdate(total);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
            System.out.println("" + e.getMessage());
        }
    }
5. Bagaimana untuk menampilkan data pada tabel pertama dan tabel kedua? Untuk tabel pertama merupakan tabel dimana tabel tersebut untuk melihat stok-stok yang tersedia atau sudah kosong. Langkahnya adalah :
private void selectTabelHargaJual(){
        Object header[] = {"ID BARANG","NAMA BARANG","HARGA JUAL","STOK"};
        DefaultTableModel defaultTable = new DefaultTableModel(null,header);
        tbl_barangjual.setModel(defaultTable);

        int baris = tbl_barangjual.getRowCount();
        for (int i = 0; i < baris; i++) {
            defaultTable.removeRow(i);
        }

        String sql_select = "select id_barang,nama_barang,harga_jual,stok from barang where stok > 0";
        try {
            statement = k.connection.createStatement();
            resultSet = statement.executeQuery(sql_select);

            while(resultSet.next()){
                String idBarang = resultSet.getString(1);
                String namaBarang = resultSet.getString(2);
                String harga_jual = resultSet.getString(3);
                String stok = resultSet.getString(4);

                String kolom[] = {idBarang,namaBarang,harga_jual,stok};
                defaultTable.addRow(kolom);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }
Kemudian tabel kedua merupakan tabel untuk mengetahui pembelian barang :
   private void selectTabelHargaBeli() {
        Object header[] = {"ID PENJUALAN", "ID BARANG", "NAMA BARANG", "HARGA", "JUMLAH", "TOTAL HARGA"};
        DefaultTableModel defaultTable = new DefaultTableModel(null, header);
        tbl_barangbeli.setModel(defaultTable);

        int baris = tbl_barangbeli.getRowCount();
        for (int i = 0; i < baris; i++) {
            defaultTable.removeRow(i);
        }

        String sql_select = "select r.id_penjualan,r.id_barang,b.nama_barang,b.harga_jual,r.jumlah,r.total_harga "
                + "from rel_penjualan_barang r, barang b where r.id_barang = b.id_barang and r.id_penjualan ='" + idPenjualan + "'";
        try {
            statement = k.connection.createStatement();
            resultSet = statement.executeQuery(sql_select);

            while (resultSet.next()) {
                String idjual = resultSet.getString(1);
                String idBarang = resultSet.getString(2);
                String namaBarang = resultSet.getString(3);
                String harga = resultSet.getString(4);
                String jml = resultSet.getString(5);
                String total = resultSet.getString(6);

                String kolom[] = {idjual, idBarang, namaBarang, harga, jml, total};
                defaultTable.addRow(kolom);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
            System.out.println("" + e.getMessage());
        }
    }
6. Kemudian berikutnya untuk melengkapi saya akan tampilkan source code insert dan delete. Dimana kedua fungsi tersebut sangat penting untuk melakukan insert data serta menghapus data jika terjadi kekeliruan peng-entrian data :
Source code insert data :
private void insertRelPenjualan() {
        double total = Integer.parseInt(txt_jmlh.getText()) * Double.parseDouble(txt_hrga.getText());

        try {
            String sql = "INSERT INTO rel_penjualan_barang "
                    + "VALUES('" + txt_idbarang.getText() + "','" + idPenjualan + "','" + txt_jmlh.getText() + "','"+hitungLaba()+"','" + total + "')";
            statement = k.connection.createStatement();
            statement.executeUpdate(sql);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
            System.out.println("" + e.getMessage());
        }
    }
Source code delete data :
private void delete(){
        String sql_delete="DELETE FROM rel_penjualan_barang WHERE ID_PENJUALAN='"+idPenjualan+"' AND ID_BARANG='"+idHapus.getText()+"'";
        try {
            statement=k.connection.createStatement();
            statement.executeUpdate(sql_delete);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Data masih digunakan!!");
            System.out.println(""+e.getMessage());
        }
    }
Kemudian jalankan programnya, dan coba lakukan transaksi :

SetEnabled False ( ) :
Sebelum transaksi baru di klik

SetEnabled True ( ) :
Sesudah transaksi baru di klik

Insert Data  :
Pembelian barang "Pensil" sejumlah 2 

Barang telah masuk dan stok berkurang

Delete data :
Delete pada nama barang : "Pensil"

Stok kembali seperti sebelum di jual

28 komentar:

  1. gan mau tnya klau form data barang master dan form data transaksinya berbeda,, itu gimana cara buat di programnnya saat pemebelian / pembayaran barang di form tabel transaksi nya jumlah barang stock di form tabel data barang master berkurang stock barangnya. misalnya stock barang di form tabel data barang master 10 kemudian berkurang menjadi 8??
    mohon bantuan nya gan

    BalasHapus
  2. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  3. mau tanya gan, terus buat kolom bayar, fungsiya untuk apa ya?

    BalasHapus
  4. permisi gan, saya mau tanyab agan punya scrip untuk tidak mengisi data tanggal agar bisa disimpan, kerna kalau di isi tanggalnya itu bisa di simpan dan normal, ketika tidak diisi itu terjadi error di output, mohon di bantu ya gan, thanks

    BalasHapus
  5. mantapp boss, bisa minta databsenya sqlnya ke email saya jefffrysurbakty@gmal.com

    BalasHapus
  6. mantap , boleh di share aplikasi + databasenya ?

    BalasHapus
  7. Bisa minta source code dan sql?

    BalasHapus
  8. gan cara stok berkurang setelah melakukan transaksi gimana...disitu cuma ada prosedur updateStok tapi didalam prosedur updateStok manggil prosedur cekStok..nah prosedur cekStoknya ada dimana

    BalasHapus
  9. Mau tanya gan gimana kalau ada member sama karyawannya?

    BalasHapus
  10. Mau tanya gan gimana kalau ada member sama karyawannya?

    BalasHapus
  11. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  12. Permisi gan boleh minta source code dan database sql nya tolong kirim ke email saya dimasgg@gmail.com

    BalasHapus
  13. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  14. permisi kak, aku bolrh minta source code dan database sqlnya ga? klo boleh tolong kirim ke email dong kak? 04afrilia@gmail.com makasih kakkkk^^

    BalasHapus
  15. Bang boleh minta file sqlnya, hehehe. dikirim ke email ya bang punten, alifdr7@gmail.com . Makasih bang sebelumnya :)

    BalasHapus
  16. boleh minta filenya bang,fadilimah48@gmail.com

    BalasHapus
  17. Terimakasih atas kunjungan para pembaca di blog yg saya buat, singkat cerita blog ini saya buat untuk memenuhi tugas kuliah yg saya kerjakan di tahun 2013 silam. hem... tetapi kok pada banyak yang tanya lewat akun di ig: panca.prasetiya dan akun fb: panca prasetiya.. mungkin jika sempat saya akan memposting program2 yg telah saya buat untuk membantu para pembaca khususnya di bidang it.. karena tugas ini juga mengantarkan saya sampe lulus untuk menempuh dan memenuhi tugas akhir saya..


    jangan lupa follo ig dan akun fb saya ya guys...


    terimakasih

    malang, 25 oktober 2018


    panca prasetiya

    BalasHapus
  18. Gan minta source code dan databasenya kirim ke email tullah2669@gmail.com

    BalasHapus
  19. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  20. minta source dan database.. ke sofy.dwi25@gmail.com

    BalasHapus
  21. bagus Aplikasinya ,Coba deh download aplikasi netbeans bagus https://rajincopas.blogspot.com/2019/01/download-free-aplikasi-penjualan-barang.html

    BalasHapus
  22. Gan minta sourcode nya kirim ke email awhost95@gmail.com

    BalasHapus
  23. mas minta .jar, lib, dan sql nya... please mas kirim septianbdavid@gmail.com

    BalasHapus
  24. yoks terimakasi refrensi tutorialnya

    BalasHapus
  25. mas boleh minta source codenya kh? bwt belajar...

    BalasHapus
  26. ka boleh minta source codenya, untuk menyelesaikan tugas sekolah. kirim ke S.imel55@yahoo.com

    BalasHapus
  27. Ini ada software toko GRATISSSSS "MiniMart" yang bisa digunakan untuk kontrol stok barang di toko anda.

    Silahkan download langsung software toko GRATISSSSS "MiniMart" di sini :

    https://helloyud.blogspot.com/2016/12/aplikasi-pertokoan-minimart.html

    BalasHapus
Tulis komentar disini!