Assalamualaikum warohmatulloh sahabat Whitecyber semua di seluruh tanah air …
Pada perjumpaan sore hari ini, seperti biasa saya akan berbagi hasil project yang sudah kami kerjakan untuk customer kami. Pada perjumpaan kali ini program yang diminta customer adalah untuk mencatat POIN dari setiap customer yang membeli di tokonya, dan dia minta dibuatkan menggunakan bahasa pemprograman JAVA.
Yuk kita bahasa terlebih dahulu, apa itu POIN dan manfaatnya bagi dunia usaha.
Loyalty program atau program loyalitas merupakan salah satu cara yang dilakukan pebisnis untuk tetap mempertahankan loyalitas pelanggan mereka. Hal ini dilakukan karena mempertahankan pelanggan yang sudah menggunakan produk dan merasa puas akan lebih murah daripada menggaet pelanggan baru yang belum tentu tertarik menggunakan produk.
Dalam artikel ini, kita akan memahami lebih lengkap tentang apa itu loyalty program, manfaat, serta contoh yang mungkin bisa Anda aplikasikan dalam usaha Anda sendiri. Simak penjelasan di bawah ini.
Pengertian Loyalty Program
Mengutip situs marketing91.com, loyalty program atau program loyalitas adalah strategi pemasaran yang digunakan oleh pelaku bisnis untuk mendorong pelanggan agar tetap berbelanja atau tetap menggunakan layanannya. Loyalty program di masa kini semakin berkembang karena semakin banyak pilihan tersedia di pasaran. Pada zaman dulu, ketika pilihan masih sedikit, pelanggan lebih mudah setia pada produk dari satu perusahaan. Tapi saat ini, banyaknya pilihan membuat konsumen punya kesempatan lebih untuk berpindah ke produk dari perusahaan lain.
Manfaat Loyalty Program
Karena alasan di atas, perusahaan saat ini pun harus lebih getol dalam menjalankan loyalty program. Sebelum itu, kita perlu memahami manfaat dari program ini. Berikut manfaat loyalty program mengutip marketing91.com.
- Membantu Meningkatkan Penjualan
Loyalty program memungkinkan penjualan meningkat karena pelanggan tertarik untuk membeli lebih banyak dan mendapatkan reward dari pembelian tersebut. - Mempertahankan Customer Lama
Loyalty program juga utamanya dilakukan untuk mempertahankan customer yang sudah ada. Customer akan bertahan pada produk dari satu perusahaan jika mereka merasa kebutuhan mereka terpenuhi, bahkan ditambah dengan benefit lain. - Bisa Menarik Customer Baru
Melihat loyalty program yang menarik, biasanya audiens akan tertarik untuk mencoba produk dan layanan dari perusahaan. Jadi, program ini pun bisa menarik pelanggan baru dengan lebih mudah daripada promosi biasa tanpa benefit lebih. - Mendukung Return of Investment (ROI)
Pengembalian investasi dinilai lebih cepat jika menggunakan loyalty program yang terencana dengan baik dibandingkan kampanye marketing lain yang memakan biaya lebih besar.
Jenis dan Contoh Loyalty Program
Mengutip marketing91.com, setidaknya ada 7 jenis loyalty program. Berikut penjelasan serta contohnya.
- Program Berlangganan/Subscription
Program ini memungkinkan pelanggan berlangganan ke perusahaan, baik melalui website, email, atau marketplace, dan mendapatkan informasi terbaru dengan segera. Program ini tidak selalu memberikan benefit besar bagi pelanggan, tetapi ada waktu-waktu tertentu di mana hanya yang sudah berlangganan saja yang bisa mendapatkan benefit khusus. Program subscription ini banyak kita temukan pada perusahaan masa kini. Contohnya pelaku usaha yang menawarkan produknya melalui marketplace. Kadang ada penawaran khusus untuk mereka yang berlangganan seperti diskon, gratis ongkir, dan sebagainya. Ketika ada event khusus diskon semacam itu, pelanggan yang telah berlangganan/subscribe biasanya mendapat informasi lebih cepat daripada pengguna biasa.
. - Program Poin
Program ini bisa menjadi salah satu bagian dari program sebelumnya, subscription. Bisa juga berlaku untuk pelanggan secara umum. Konsepnya adalah memberikan poin pada pelanggan setelah melakukan pembelian dengan nominal tertentu. Poin ini kemudian bisa ditukarkan pada pembelian-pembelian berikutnya. Contohnya, pelanggan department store telah melakukan pembelian sebanyak tiga kali dan mendapatkan poin sebanyak 3.000. Nah, poin itu dapat ditukarkan dengan produk yang dibeli pada kesempatan keempat dengan harga diskon atau malah gratis.
. - Program Komunitas
Program ini menarik pelanggan dengan memberikan kesempatan interaksi antara sesama pelanggan. Para pelanggan ini kemudian akan saling berbagi informasi dalam platform yang sama. Saat itulah perusahaan bisa menawarkan produk-produk dengan penawaran spesial tambahan yang menguntungkan bagi pelanggan dalam komunitas tersebut. Contoh program komunitas ini misalnya komunitas skin-care. Produsen skin-care dan kosmetik dapat membangun komunitas untuk produk mereka dan memberikan penawaran khusus pada pelanggan yang tergabung dalam komunitas tersebut. Pelanggan juga bisa membagikan review yang mudah dibaca oleh anggota lainnya.
. - Program Membership Berbayar
Hampir sama dengan program berlangganan dan program komunitas, program ini juga memungkinkan pelanggan bergabung sebagai anggota dan berlangganan. Bedanya, program di atas gratis sedangkan yang ini berbayar. Para pelanggan membayar bulanan untuk bisa menikmati produk atau layanan dari perusahaan. Contoh yang sering ditemukan adalah pada layanan streaming atau OTT. Layanan ini mengharuskan pengguna membayar bulanan atau tahunan untuk bisa menikmati tayangan video dalam platform mereka.
. - Program Progres
Program ini melibatkan pelanggan dalam suatu ‘perkembangan’ selama menggunakan produk atau layanan kita. Jika pelanggan berhasil meraih suatu level, maka mereka akan mendapatkan reward khusus. Contohnya adalah perusahaan sepatu olahraga mengadakan program lari 10 km dalam seminggu, yang dicatat dalam aplikasi brand tersebut. Pelanggan yang mampu memenuhi tantangan program tersebut dan menunjukkan progres yang baik, akan mendapatkan reward dari perusahaan sepatu olahraga.
. - Program Amal / Charity
Jenis selanjutnya adalah amal atau charity. Program ini dilakukan untuk meningkatkan value atau nilai brand dan perusahaan demi menarik customer. Customer biasanya cenderung menyukai brand yang juga berperan dalam kehidupan sosial. Contoh program ini biasanya kita temukan dalam bentuk event charity dari produk makanan untuk orang-orang kelaparan, event charity dari produk obat yang memberi bantuan bagi penderita penyakit kronis tertentu, dan sebagainya.
. - Program Berjenjang
Program yang terakhir ini punya konsep mirip seperti membership. Tetapi ada jenjang-jenjang yang menunjukkan ‘level’ loyalitas pelanggan di dalamnya. Benefit yang didapatkan pelanggan di setiap jenjang juga berbeda. Contohnya seperti bank yang memberlakukan membership standar, premium, dan VIP. Member VIP mendapatkan benefit yang lebih besar dibandingkan member premium dan standar. Ini akan mendorong pelanggan untuk meningkatkan membership-nya, salah satunya melalui transaksi yang lebih besar.
Itulah penjelasan mengenai loyalty program. Adakah yang tertarik dijalankan untuk usaha Anda?
Selamat mencoba dan semoga berhasil.
Nah, setelah kita memahami konsep dan logika berfikirnya sekarang kita sharing softwarenya seperti ini :
.
.
Dengan membuat kategori pelanggan menjadi 3 jenis point :
- Basic
- Gold
- Platinum
Dengan menggunakan kategori ini kita bisa memilih jenis dan cara menghitung yang berbeda dari tiap segment market pelanggan kita. Program penghitungan tidak menggunakan 1 rumus saja tapi dengan metode berbeda di tiap kategori pelanggan.
Salah satu kode programnya sebagai berikut :
=====
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template
*/
package form;
/**
*
* @author GK3v
*/
import Koneksi.KoneksiDatabase;
import java.sql.*;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
public class FrmData extends javax.swing.JFrame {
public Statement st;
public ResultSet rs;
Connection cn = KoneksiDatabase.BukaKoneksi();
int jawab;
public FrmData() {
initComponents();
TampilData();
}
private void Bersih(){
txtNama.setText(“”);
txtPoint.setText(“”);
btnSimpan.setText(“Simpan”);
}
private void CariData(){
try {
st = cn.createStatement();
rs = st.executeQuery(“SELECT * FROM pembeli WHERE ” + cmbCari.getSelectedItem() + ” LIKE ‘%” + txtCari.getText() + “%'” );
DefaultTableModel model = new DefaultTableModel();
model.addColumn(“No.”);
model.addColumn(“Nama”);
model.addColumn(“Level”);
model.addColumn(“Point”);
int no = 1;
model.getDataVector().removeAllElements();
model.fireTableDataChanged();
model.setRowCount(0);
while (rs.next()) {
Object[] data = {
no ++,
rs.getString(“nama”),
rs.getString(“level”),
rs.getString(“point”)
};
model.addRow(data);
tblData.setModel(model);
}
} catch (Exception e) {
}
}
private void TampilData(){
try {
st = cn.createStatement();
rs = st.executeQuery(“SELECT * FROM pembeli”);
DefaultTableModel model = new DefaultTableModel();
model.addColumn(“No.”);
model.addColumn(“Nama”);
model.addColumn(“Level”);
model.addColumn(“Point”);
int no = 1;
model.getDataVector().removeAllElements();
model.fireTableDataChanged();
model.setRowCount(0);
while (rs.next()) {
Object[] data = {
no ++,
rs.getString(“nama”),
rs.getString(“level”),
rs.getString(“point”)
};
model.addRow(data);
tblData.setModel(model);
}
} catch (Exception e) {
}
}
/**
* 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() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
txtNama = new javax.swing.JTextField();
txtPoint = new javax.swing.JTextField();
btnSimpan = new javax.swing.JButton();
btnHapus = new javax.swing.JButton();
btnBatal = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tblData = new javax.swing.JTable();
cbLevel = new javax.swing.JComboBox<>();
jPanel1 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
cmbCari = new javax.swing.JComboBox<>();
txtCari = new javax.swing.JTextField();
label2 = new java.awt.Label();
label3 = new java.awt.Label();
label4 = new java.awt.Label();
label5 = new java.awt.Label();
label6 = new java.awt.Label();
label7 = new java.awt.Label();
label8 = new java.awt.Label();
label9 = new java.awt.Label();
textField2 = new java.awt.TextField();
button1 = new java.awt.Button();
label1 = new java.awt.Label();
label10 = new java.awt.Label();
button2 = new java.awt.Button();
textField1 = new java.awt.TextField();
label11 = new java.awt.Label();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText(“Level”);
jLabel2.setText(“Nama Lengkap”);
jLabel3.setText(“Point”);
btnSimpan.setText(“Simpan”);
btnSimpan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSimpanActionPerformed(evt);
}
});
btnHapus.setText(“Hapus”);
btnHapus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnHapusActionPerformed(evt);
}
});
btnBatal.setText(“Batal”);
btnBatal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBatalActionPerformed(evt);
}
});
tblData.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
“Nama”, “Level”, “Point”
}
));
tblData.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tblDataMouseClicked(evt);
}
});
jScrollPane1.setViewportView(tblData);
cbLevel.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { “Basic”, “Gold”, “Platinum” }));
jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jLabel5.setText(“Cari Data”);
cmbCari.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { “nama”, “level” }));
txtCari.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
txtCariKeyPressed(evt);
}
});
label2.setText(“* Klik 2x tabel diatas untuk memilih orang yang mau bertransaksi hari ini”);
label3.setText(“Nama”);
label4.setText(“Level”);
label5.setText(“Point”);
label6.setAlignment(java.awt.Label.RIGHT);
label6.setText(“-“);
label7.setAlignment(java.awt.Label.RIGHT);
label7.setText(“-“);
label8.setAlignment(java.awt.Label.RIGHT);
label8.setText(“-“);
label9.setText(“Total Belanja”);
button1.setLabel(“Bayar”);
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
button1ActionPerformed(evt);
}
});
label1.setText(“+”);
label10.setText(“label10”);
button2.setLabel(“Cek Bayar”);
button2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
button2ActionPerformed(evt);
}
});
textField1.setText(“textField1”);
label11.setAlignment(java.awt.Label.RIGHT);
label11.setText(“Total Point”);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(cmbCari, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtCari))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(label7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(label6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(label9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(2, 2, 2)
.addComponent(label10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(label8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(textField2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(button1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 109, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(label11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(button2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))))
.addContainerGap(40, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(22, 22, 22)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(cmbCari, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtCari, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(label6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(1, 1, 1)
.addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(label7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(label5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(label11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(textField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(button1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(button2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel3)
.addComponent(jLabel2)
.addComponent(jLabel1))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtNama)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(btnSimpan)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnHapus)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnBatal))
.addComponent(txtPoint, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, Short.MAX_VALUE)))
.addGap(44, 44, 44))
.addGroup(layout.createSequentialGroup()
.addComponent(cbLevel, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(20, 20, 20)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(cbLevel, 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.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(txtNama, 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.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(txtPoint, 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.Alignment.BASELINE)
.addComponent(btnSimpan)
.addComponent(btnHapus)
.addComponent(btnBatal))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
pack();
setLocationRelativeTo(null);
}// </editor-fold>
private void btnSimpanActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
st = cn.createStatement();
if (txtNama.getText().equals(“”) || txtPoint.getText().equals(“”) ){
JOptionPane.showMessageDialog(null, “Data Tidak Boleh Kosong”, “Validasi Data”, JOptionPane.INFORMATION_MESSAGE);
return;
}
if (btnSimpan.getText() == “Simpan”) {
String cek = “SELECT * FROM pembeli WHERE nama = ‘” + txtNama.getText() + “‘”;
rs = st.executeQuery(cek);
if ( rs.next()) {
JOptionPane.showMessageDialog( null, “Ups… Nama ini sudah ada”);
} else {
String sql = “INSERT INTO pembeli VALUES (‘” + txtNama.getText() + “‘,'” + cbLevel.getSelectedItem() + “‘,'” + txtPoint.getText() + “‘)”;
st.executeUpdate(sql);
JOptionPane.showMessageDialog(null, “Data Berhasil Disimpan”);
Bersih();
TampilData();
}
} else {
// aksi ubah data
String update = “UPDATE pembeli SET nama = ‘” + txtNama.getText() + “‘, level = ‘” + cbLevel.getSelectedItem() + “‘, point = ‘” + txtPoint.getText() + “‘ WHERE nama = ‘” + txtNama.getText() + “‘”;
st.executeUpdate(update);
Bersih();
TampilData();
JOptionPane.showMessageDialog(null, “Data Berhasil Diupdate”);
}
} catch (Exception e) {
}
}
private void tblDataMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
txtNama.setText(tblData.getValueAt(tblData.getSelectedRow(), 1).toString());
txtPoint.setText(tblData.getValueAt(tblData.getSelectedRow(), 3).toString());
label6.setText(tblData.getValueAt(tblData.getSelectedRow(), 1).toString());
label7.setText(tblData.getValueAt(tblData.getSelectedRow(), 2).toString());
label8.setText(tblData.getValueAt(tblData.getSelectedRow(), 3).toString());
btnSimpan.setText(“Ubah”);
btnSimpan.setText(“Ubah”);
}
private void btnHapusActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if (txtNama.getText().equals(“”)) {
JOptionPane.showMessageDialog(this, “Silahkan Pilih Data yang mau dihapus !”);
} else {
int jawab = JOptionPane.showConfirmDialog(null, “Data ini akan dihapus, lanjutkan ?”, “Konfirmasi”, JOptionPane.YES_NO_OPTION);
} if (jawab == 0) {
try {
st = cn.createStatement();
String sql = “DELETE FROM pembeli WHERE nama = ‘” + txtNama.getText() + “‘”;
st.executeUpdate(sql);
JOptionPane.showMessageDialog(null, “Data Berhasil Dihapus”);
TampilData();
Bersih();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e);
}
}
}
private void btnBatalActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Bersih();
}
private void txtCariKeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
CariData();
}
private void button1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// aksi ubah point
//int pointawal,hasil;
double pointawal, hasil, pointbaru, angka;
//input nilai
pointawal = Integer.parseInt(label8.getText());
if (label7.getText().equals(“Basic”)) {
JOptionPane.showMessageDialog(null, “Basic”);
angka = Double.parseDouble(textField2.getText()) % 10000;
pointbaru = Math.floor(angka);
} else if (label7.getText().equals(“Gold”)){
JOptionPane.showMessageDialog(null, “Gold”);
//pointbaru = Integer.parseInt(textField2.getText()) / 1000;
} else {
JOptionPane.showMessageDialog(null, “Platinum”);
//pointbaru = Integer.parseInt(textField2.getText()) / 1000;
}
//rumus
hasil = pointawal + pointbaru;
label10.setText(Double.toString(pointbaru));
//output
try {
st = cn.createStatement();
if (label6.getText().equals(“-“) || label7.getText().equals(“-“) || label8.getText().equals(“-“)){
JOptionPane.showMessageDialog(null, “Klik 2x Tabel diatas untuk Pilih Pembeli terlebih dahulu!”, “Validasi Data”, JOptionPane.INFORMATION_MESSAGE);
return;
}
if (btnSimpan.getText() == “Simpan”) {
String cek = “SELECT * FROM pembeli WHERE nama = ‘” + txtNama.getText() + “‘”;
rs = st.executeQuery(cek);
if ( rs.next()) {
JOptionPane.showMessageDialog( null, “Ups… Nama ini sudah ada”);
} else {
String sql = “INSERT INTO pembeli VALUES (‘” + txtNama.getText() + “‘,'” + cbLevel.getSelectedItem() + “‘,'” + txtPoint.getText() + “‘)”;
st.executeUpdate(sql);
JOptionPane.showMessageDialog(null, “Data Berhasil Disimpan”);
Bersih();
TampilData();
}
} else {
// aksi ubah data
String update = “UPDATE pembeli SET nama = ‘” + txtNama.getText() + “‘, level = ‘” + cbLevel.getSelectedItem() + “‘, point = ‘” + Integer.toString(hasil) + “‘ WHERE nama = ‘” + txtNama.getText() + “‘”;
st.executeUpdate(update);
Bersih();
TampilData();
JOptionPane.showMessageDialog(null, “Point Berhasil Diupdate”);
}
} catch (Exception e) {
}
}
private void button2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
int hasilint;
double pointawal, hasil, pointbaru, angka;
//input nilai
pointawal = Double.parseDouble(label8.getText());
if (label7.getText().equals(“Basic”)) {
JOptionPane.showMessageDialog(null, “Basic”);
angka = Double.parseDouble(textField2.getText()) / 10000;
pointbaru = Math.floor(angka);
hasil = pointawal + (pointbaru * 2);
hasilint = ((int) hasil) ;
label10.setText(Double.toString((pointbaru * 2)));
textField1.setText(Integer.toString(hasilint));
} else if (label7.getText().equals(“Gold”)){
JOptionPane.showMessageDialog(null, “Gold”);
angka = Double.parseDouble(textField2.getText()) / 1000;
pointbaru = Math.floor(angka);
hasil = pointawal + (pointbaru);
hasilint = ((int) hasil) ;
label10.setText(Double.toString(pointbaru));
textField1.setText(Integer.toString(hasilint));
} else {
JOptionPane.showMessageDialog(null, “Platinum”);
//pointbaru = Integer.parseInt(textField2.getText()) / 1000;
}
}
/**
* @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 (“Nimbus”.equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(FrmData.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(FrmData.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(FrmData.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(FrmData.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new FrmData().setVisible(true);
}
});
}
// Variables declaration – do not modify
private javax.swing.JButton btnBatal;
private javax.swing.JButton btnHapus;
private javax.swing.JButton btnSimpan;
private java.awt.Button button1;
private java.awt.Button button2;
private javax.swing.JComboBox<String> cbLevel;
private javax.swing.JComboBox<String> cmbCari;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel5;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private java.awt.Label label1;
private java.awt.Label label10;
private java.awt.Label label11;
private java.awt.Label label2;
private java.awt.Label label3;
private java.awt.Label label4;
private java.awt.Label label5;
private java.awt.Label label6;
private java.awt.Label label7;
private java.awt.Label label8;
private java.awt.Label label9;
private javax.swing.JTable tblData;
private java.awt.TextField textField1;
private java.awt.TextField textField2;
private javax.swing.JTextField txtCari;
private javax.swing.JTextField txtNama;
private javax.swing.JTextField txtPoint;
// End of variables declaration
}
=====
Setelah semua selesai, kita tinggal focus ke memperbesar JANGKAUAN pelanggan, dan MEMPERTAHANKAN pelanggan.