Project JAVA GUI Sistem Inventaris Sederhana untuk Toko Retail

Project JAVA GUI Sistem Inventaris Sederhana untuk Toko Retail

Project JAVA dengan GUI: Sistem Inventaris Sederhana untuk Toko Retail (Lengkap Langkah-Langkah)

Sistem inventaris adalah komponen penting dalam manajemen toko retail. Dengan sistem ini, pemilik toko dapat melacak stok barang, mencatat transaksi, dan mencegah kehilangan produk.

Dalam artikel ini, kita akan membangun Sistem Inventaris Sederhana menggunakan Java dengan GUI (Graphical User Interface). Project ini cocok untuk pemula yang ingin belajar pemrograman Java sekaligus memahami konsep manajemen data.

Fitur yang akan dibangun:
✔ Tambah, Edit, Hapus Barang
✔ Cari Barang berdasarkan Nama/Kode
✔ Update Stok Otomatis
✔ Antarmuka Pengguna yang Mudah

Apa Itu Sistem Inventaris?

Sistem inventaris adalah perangkat lunak yang membantu mengelola:

  • Stok barang (jumlah, harga, kategori)
  • Transaksi masuk/keluar
  • Laporan penjualan

Dengan sistem ini, bisnis retail dapat berjalan lebih efisien dan terorganisir.

Langkah-Langkah Membuat Sistem Inventaris dengan Java GUI

1. Persiapan Tools

Pastikan Anda telah menginstal:

  • Java Development Kit (JDK) 8+
  • IDE (IntelliJ IDEA, Eclipse, atau NetBeans)
  • Java Swing (untuk GUI)

2. Membuat Struktur Project

Buat project baru di IDE dengan struktur berikut:

📂 InventorySystem  
├── 📄 Product.java (Class Model)  
├── 📄 InventoryManager.java (Class Logic)  
└── 📄 MainApp.java (GUI Main Class)

3. Membuat Class Model (Product.java)

java
public class Product {
    private String id;
    private String name;
    private double price;
    private int stock;

    // Constructor
    public Product(String id, String name, double price, int stock) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.stock = stock;
    }

    // Getter & Setter
    public String getId() { return id; }
    public String getName() { return name; }
    public double getPrice() { return price; }
    public int getStock() { return stock; }

    public void setStock(int stock) { this.stock = stock; }
}

4. Membuat Class Logic (InventoryManager.java)

java
import java.util.ArrayList;
import java.util.List;

public class InventoryManager {
    private List<Product> products = new ArrayList<>();

    // Tambah produk baru
    public void addProduct(Product product) {
        products.add(product);
    }

    // Hapus produk
    public boolean removeProduct(String id) {
        return products.removeIf(p -> p.getId().equals(id));
    }

    // Cari produk
    public Product findProduct(String keyword) {
        return products.stream()
                .filter(p -> p.getId().equals(keyword) || p.getName().equalsIgnoreCase(keyword))
                .findFirst()
                .orElse(null);
    }

    // Update stok
    public void updateStock(String id, int newStock) {
        Product product = findProduct(id);
        if (product != null) {
            product.setStock(newStock);
        }
    }

    // Dapatkan semua produk
    public List<Product> getAllProducts() {
        return products;
    }
}

5. Membuat GUI (MainApp.java)

java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class MainApp extends JFrame {
    private InventoryManager manager = new InventoryManager();
    private JTable table;
    private JTextField idField, nameField, priceField, stockField;

    public MainApp() {
        setTitle("Sistem Inventaris Toko Retail");
        setSize(800, 500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        // Form Input
        JPanel inputPanel = new JPanel(new GridLayout(4, 2, 10, 10));
        idField = new JTextField();
        nameField = new JTextField();
        priceField = new JTextField();
        stockField = new JTextField();

        inputPanel.add(new JLabel("Kode Barang:"));
        inputPanel.add(idField);
        inputPanel.add(new JLabel("Nama Barang:"));
        inputPanel.add(nameField);
        inputPanel.add(new JLabel("Harga:"));
        inputPanel.add(priceField);
        inputPanel.add(new JLabel("Stok:"));
        inputPanel.add(stockField);

        // Tombol Aksi
        JButton addButton = new JButton("Tambah");
        JButton deleteButton = new JButton("Hapus");
        JButton searchButton = new JButton("Cari");

        JPanel buttonPanel = new JPanel();
        buttonPanel.add(addButton);
        buttonPanel.add(deleteButton);
        buttonPanel.add(searchButton);

        // Tabel Data
        String[] columns = {"Kode", "Nama", "Harga", "Stok"};
        table = new JTable(new Object[0][4], columns);
        JScrollPane scrollPane = new JScrollPane(table);

        // Layout
        add(inputPanel, BorderLayout.NORTH);
        add(scrollPane, BorderLayout.CENTER);
        add(buttonPanel, BorderLayout.SOUTH);

        // Event Listeners
        addButton.addActionListener(this::addProduct);
        deleteButton.addActionListener(this::deleteProduct);
        searchButton.addActionListener(this::searchProduct);
    }

    private void addProduct(ActionEvent e) {
        try {
            String id = idField.getText();
            String name = nameField.getText();
            double price = Double.parseDouble(priceField.getText());
            int stock = Integer.parseInt(stockField.getText());

            manager.addProduct(new Product(id, name, price, stock));
            refreshTable();
            JOptionPane.showMessageDialog(this, "Produk berhasil ditambahkan!");
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(this, "Input tidak valid!", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void deleteProduct(ActionEvent e) {
        String id = JOptionPane.showInputDialog(this, "Masukkan Kode Barang:");
        if (id != null && manager.removeProduct(id)) {
            refreshTable();
            JOptionPane.showMessageDialog(this, "Produk dihapus!");
        } else {
            JOptionPane.showMessageDialog(this, "Produk tidak ditemukan!", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void searchProduct(ActionEvent e) {
        String keyword = JOptionPane.showInputDialog(this, "Cari (Kode/Nama):");
        Product product = manager.findProduct(keyword);
        if (product != null) {
            JOptionPane.showMessageDialog(this, 
                "Hasil Pencarian:\n" +
                "Kode: " + product.getId() + "\n" +
                "Nama: " + product.getName() + "\n" +
                "Harga: " + product.getPrice() + "\n" +
                "Stok: " + product.getStock());
        } else {
            JOptionPane.showMessageDialog(this, "Produk tidak ditemukan!", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void refreshTable() {
        List<Product> products = manager.getAllProducts();
        Object[][] data = new Object[products.size()][4];
        for (int i = 0; i < products.size(); i++) {
            Product p = products.get(i);
            data[i] = new Object[]{p.getId(), p.getName(), p.getPrice(), p.getStock()};
        }
        table.setModel(new javax.swing.table.DefaultTableModel(data, new String[]{"Kode", "Nama", "Harga", "Stok"}));
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new MainApp().setVisible(true));
    }
}

6. Menjalankan Program

  1. Compile & Run di IDE atau terminal:
    bash
    javac MainApp.java
    java MainApp
  2. Fitur yang tersedia:
    • Tambah produk baru
    • Hapus produk
    • Cari produk
    • Lihat daftar stok


Pengembangan Lebih Lanjut

  • Simpan data ke file/database (MySQL, SQLite).
  • Tambahkan fitur transaksi penjualan.
  • Buat laporan PDF menggunakan library seperti Apache PDFBox.

Kesimpulan

Dengan project ini, Anda telah belajar:
✅ Membuat CRUD (Create, Read, Update, Delete) di Java.
✅ Menggunakan Java Swing untuk GUI.
✅ Membangun sistem inventaris sederhana.

Siap digunakan untuk toko retail kecil! 🛒

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *