DEKSTOP
Aplikasi Penjualan
1
BAB I
PENDAHULUAN
Pada saat ini dalam tiap kegiatan dan aktivitas sudah banyak yang
mempergunakan fasilitas komputer untuk mempermudah dalam hal
melakukan transaksi, sehingga data yang didapat dapat diolah dengan
baik serta dapat menghasilkan informasi yang dibutuhkan oleh top
manajemen secara langsung. Perubahan menuju pekerjaan yang
berbasis sistem komputerisasi yang efisien, sehingga persaingan bisnis
yang sangat ketat saat ini menuntut adanya alat bantu atau sistem
pekerjaan yang mudah, cepat, tepat, akurat, dan efisien.
2
Dengan bantuan kemajuan teknologi informasi dapat diciptakan sistem
terpadu yang dapat membantu pengelolaan pekerjaan dalam dunia
usaha. Teknologi informasi dapat membantu menghemat penggunaan
kertas dalam penyimpanan arsip karena penyimpanan arsip sudah dalam
bentuk file yang dikemas dalam media digital sehingga arsip dapat
bertahan lama dan berstruktur.
Buku ini akan membahasa bagaimana cara dalam membuat aplikasi yang
paling sering dipergunakan yaitu aplikasi penjualan dengan
menggunakan Bahasa Pemrograman Java berbasiskan tampilan
desktop. Pembuatan aplikasi penjualan dilakukan secara cepat dan
mudah dengan menggunakan teori Pemrograman Berorientasi Objek
sehingga akan dapat menambah wawasan dalam membangun tugas
akhir di lingkungan kampus dan dapat diterapkan pula dalam banyak hal
khususnya dari segi riil penjualan baik barang dan jasa .
Buku ini juga disertakan perangkat lunak bantu (tools) berbasis Ms.
Windows (executable / .EXE) yang dapat digunakan, seperti MYSQL
sebagai database, Bahasa JAVA sebagai Bahasa Pemrogaman,
NETBEANS sebagai perangkat editor bahasa pemrograman JAVA, dan
IREPORT sebagai alat bantu pembuat laporan. Lakukanlah instalasi
semua aplikasi tersebut satu persatu, yaitu : 1. Mysql, 2. Java
Development Kit (JDK), 3. Netbeans, dan 4. IREPORT.
3
BAB II
ANALISA DESAIN BERORIENTASI
OBJEK
4
- Mempelajari obyek-obyek yang ada untuk mengetahui apakah
obyek tersebut dapat digunakan berulang kali atau dapat
disesuaikan untuk keperluan yang baru.
5
fungsi apa saja yang ada didalam sistem informasi dan siapa saja yang
berhak menggunakan fungsi-fungsi tersebut.
Gambar Keterangan
6
dan bukannya mengindikasikan aliran
data.
Gambar Keterangan
7
End Point, akhir aktifitas
8
- Diagram Urutan (Sequence Diagram)
Gambar Keterangan
9
: NewClass : NewClass2 x : NewClass3
10
Hubungan antar Kelas mempunyai keterangan yang disebut
dengan Multiplicity atau kardinaliti.
Tabel II.4
Multiplicity Penjelasan
II.2 PENJUALAN
12
umumnya mempunyai tiga tujuan dalam penjualan yaitu mencapai
volume penjualan, mendapatkan laba tertentu, dan menunjukkan
pertumbuhan perusahaan.
Hasil analisa yang dibuat pada buku ini, dibuat dalam bentuk yang sangat
sederhana bukan dalam bentuk penjualan yang komplek. Adapun
tahapan yang dilakukan dalam analisa adalah Deskripsi Bisnis Proses dan
pembuatan model UML yang terdiri dari 8 (delapan) diagram. 8 diagram
tersebut adalah Use Case, Class Diagram, Activity Diagram, State
Diagram, Sequence Diagram, Collaboration Diagram, Package Diagram,
dan Component Diagram. Tetapi yang dibahas dalam buku ini adalah Use
Case Diagram, Class Diagram, Activity Diagram, Sequence Diagram,
State Diagram dan Collaboration Diagram.
14
- Proses Penjualan
- Proses pembayaran
15
Gambar 2.3 Use Case Penjualan
16
II.3.3 Class Diagram
Kelas yang terbentuk dari hasil analisa pada proses bisnis penjualan
adalah sebagai berikut :
18
- kasir memberikan kwitansi kepada pelanggan sebagai tanda
pelunasan.
20
II.3.6 State Diagram
- jika ada maka data barang yang diminta akan ditampilkan beserta
harganya.
21
II.3.7 Collaboration Diagram
23
BAB III
PEMBUATAN DATABASE DAN OBJEK
TABEL
Di dalam buku ini, database yang digunakan adalah Mysql versi mysql-
5.5.28-win32 yang dapat diunduh pada http://www.mysql.com atau
dengan mendapatkan instalasinya di CD. Pastikan di komputer anda
telah terinstalasi Mysql. Penggunaan tabel di Mysql mempunyai banyak
model tabel, yaitu : MyIsam, InnoDB, dan lain-lain. Tetapi yang
digunakan didialam buku ini adalah InnoDB. Dengan hasil desain adalah
sebagai berikut :
25
Gambar 3.1 Desain Table Penjualan
26
Gambar 3.2 Layar Command
28
Perangkat yang digunakan dalam membangun objek, buku ini
menggunakan perangkat bantu berupa editor Netbeans 7.2 yang
diunduh dari http://www.netbeans.org yang disediakan juga dalam CD.
Lakukan instalasi apabila belum terdapat icon Netbeans pada Desktop.
Jalankan aplikasi Netbeans tersebut sehingga akan tampil seperti
gambar dibawah ini :
29
Ikuti langkah satu persatu dalam membuat objek dari tabel yang berasal
dari database penjualan pada komputer lokal, sebagai berikut :
30
Gambar 3.3 Pilhan New Project – Penamaan Projek
31
a. Klik kanan pada projek AppPenjualan dan pilihlah menu
Properties
32
Gambar 3.6 Projek AppPenjualan
33
Gambar 3.8 Projek AppPenjualan
34
1. Kilik kanan pada projek AppPenjualan pilihlah New
OtherPersistance Persistance Unit, kemudian tekan tombol
35
3. Pilihlah MySql Connector, kemudian tekan
36
Juga pada jendela Persistance Unit tekan tombol . Hasil
akhir pembuatan Persistance Unit adalah seperti pada gambar
dibawah ini :
37
Gambar 3.14 Java Package
tombol
2. Buatlah objek model (POJO) atau entitas dengan klik kanan pada
package apppenjualan.data New Entity Class From Database
38
Gambar 3.16 Menambahkan Kelas Entitas dari database
39
Gambar 3.17 Menambahkan Semua Kelas Entitas dari database.
40
Gambar 3.18 Entity Classes.
Setiap entitas atau model POJO yang dibentuk akan dikontrol oleh kelas
Controller. Dimana setiap proses bisnis atau manipulasi data dilakukan
dalam Method atau Operation.
41
Gambar 3.19 Pembuatan Package untuk Kelas Kontrol
tombol
import apppenjualan.data.Barang;
import java.io.Serializable;
42
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
43
} finally {
if (em != null) {
em.close();
}
}
}
Tambah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
// Entry Barang
BarangController brgcontrol = new BarangController(emf);
Mengubah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
Menghapus Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
//Delete Barang
BarangController brgcontrol = new BarangController(emf);
try {
brgcontrol.destroy("B0001");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
import java.io.Serializable;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import apppenjualan.data.Pelanggan;
45
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.persist(pelanggan);
em.getTransaction().commit();
} catch (Exception ex) {
if (findPelanggan(pelanggan.getKodepelanggan()) != null) {
throw new Exception("Pelanggan " + pelanggan + " already exists.", ex);
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}
46
}
}
}
Tambah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
// Entry Pelanggan
PelangganController plgcontrol = new PelangganController(emf);
47
}
Mengubah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
//Edit Pelanggan
PelangganController plgcontrol = new PelangganController(emf);
Pelanggan plg = plgcontrol.findPelanggan("P0001");
plg.setNamapelanggan("Pelanggannya 0001");
try {
plgcontrol.edit(plg);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
Menghapus Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
//Delete Pelanggan
PelangganController plgcontrol = new PelangganController(emf);
try {
plgcontrol.destroy("P0001");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
package apppenjualan.control;
import apppenjualan.data.Barang;
import apppenjualan.data.Faktur;
import java.io.Serializable;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import apppenjualan.data.Fakturdetail;
import java.text.DecimalFormat;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
48
import javax.persistence.EntityManagerFactory;
em.persist(faktur);
Collection<Fakturdetail> lstfakturdetail =
faktur.getFakturdetailCollection();
for (Fakturdetail fd : lstfakturdetail) {
em.persist(fd);
//kurangi stok barang dari transaksi
Barang brg = fd.getKodeBarang();
if (brg != null) {
brg.setStok(brg.getStok() - fd.getQty());
em.merge(brg);
}
}
em.getTransaction().commit();
49
//stok barang
Faktur ffind = findFaktur(faktur.getNomorFaktur());
if (ffind != null) {
for (Fakturdetail fdfind :
ffind.getFakturdetailCollection()) {
//Tambahin Stok Barang dari data sebelumnya
Barang brg = fdfind.getKodeBarang();
if (brg != null) {
brg.setStok(brg.getStok() + fdfind.getQty());
em.merge(brg);
}
}
}
em.merge(faktur);
Collection<Fakturdetail> lstfakturdetail =
faktur.getFakturdetailCollection();
for (Fakturdetail fd : lstfakturdetail) {
//Kurangin Stok Barang dari Transaksi
Barang brg = em.find(Barang.class,
fd.getKodeBarang().getKodebarang());
brg.setStok(brg.getStok() - fd.getQty());
em.merge(brg);
if (fd.getId() != null) {
em.merge(fd);
}else{
em.persist(fd);
}
}
em.getTransaction().commit();
} catch (Exception ex) {
String msg = ex.getLocalizedMessage();
if (msg == null || msg.length() == 0) {
String id = faktur.getNomorFaktur();
if (findFaktur(id) == null) {
throw new Exception(
"The faktur with id "
+ id + " no longer exists.");
}
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}
50
try {
em = getEntityManager();
em.getTransaction().begin();
Faktur faktur;
try {
faktur = em.getReference(Faktur.class, id);
faktur.getNomorFaktur();
} catch (EntityNotFoundException enfe) {
throw new Exception(
"The faktur with id " + id +
" no longer exists.", enfe);
}
em.remove(faktur);
Collection<Fakturdetail> lstfakturdetail =
faktur.getFakturdetailCollection();
for (Fakturdetail fd : lstfakturdetail) {
Barang brg = fd.getKodeBarang();
brg.setStok(brg.getStok() + fd.getQty());
em.remove(fd);
}
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
}
51
em.close();
}
}
try {
em = getEntityManager();
Query q = em.createQuery
("SELECT f FROM Faktur f Order By f.nomorFaktur Desc ");
q.setMaxResults(1);
Faktur f = (Faktur) q.getSingleResult();
if (f != null){
DecimalFormat nfF0000 = new DecimalFormat("F0000");
String nomor = f.getNomorFaktur().substring(1);
nomorfaktur = nfF0000.format(
Double.parseDouble(nomor) + 1);
}
} finally {
em.close();
}
return nomorfaktur;
}
52
Cara menggunakan listing diatas adalah sebagai berikut :
Tambah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
// Entry Faktur
FakturController fkrcontrol = new FakturController(emf);
fkr.setFakturdetailCollection(colfkdt);
try {
fkrcontrol.create(fkr);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
Mengubah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
//Edit Faktur
FakturController fkrcontrol = new FakturController(emf);
Faktur fkr = fkrcontrol.findFaktur("F0001");
53
fkr.setTanggalFaktur(new Date());
try {
fkrcontrol.edit(fkr);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
Menghapus Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
//Delete Faktur
FakturController fkrcontrol = new FakturController(emf);
try {
fkrcontrol.destroy("F0002");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
package apppenjualan.control;
import java.io.Serializable;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import apppenjualan.data.Faktur;
import apppenjualan.data.Kwitansi;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
54
private EntityManagerFactory emf = null;
55
try {
kwitansi = em.getReference(Kwitansi.class, id);
kwitansi.getNomorKwitansi();
} catch (EntityNotFoundException enfe) {
throw new Exception("The kwitansi with id " + id + " no longer exists.", enfe);
}
Faktur nomorFaktur = kwitansi.getNomorFaktur();
if (nomorFaktur != null) {
nomorFaktur.getKwitansiCollection().remove(kwitansi);
nomorFaktur = em.merge(nomorFaktur);
}
em.remove(kwitansi);
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
}
56
EntityManager em = getEntityManager();
try {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
Root<Kwitansi> rt = cq.from(Kwitansi.class);
cq.select(em.getCriteriaBuilder().count(rt));
Query q = em.createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
} finally {
em.close();
}
}
try {
em = getEntityManager();
Query q = em.createQuery("SELECT k FROM Kwitansi k Order By k.nomorKwitansi
Desc ");
q.setMaxResults(1);
Kwitansi k = (Kwitansi) q.getSingleResult();
if (k != null){
DecimalFormat nK0000 = new DecimalFormat("K0000");
String nomor = k.getNomorKwitansi().substring(1);
nomorkwitansi = nK0000.format(Double.parseDouble(nomor) + 1);
}
}catch (Exception e){
} finally {
em.close();
}
return nomorkwitansi;
}
public boolean checkNomorFaktur(Faktur f) {
boolean cek = false;
EntityManager em = null;
try {
em = getEntityManager();
Query q = em.createQuery("SELECT k FROM Kwitansi k where k.nomorFaktur
= :nomorfaktur ");
q.setParameter("nomorfaktur", f);
Kwitansi k = (Kwitansi) q.getSingleResult();
if (f != null){
cek = true;
}
}catch(Exception e) {
cek = false;
} finally {
em.close();
57
}
return cek;
}
Tambah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
// Entry Kwitansi
KwitansiController kwicontrol = new KwitansiController(emf);
try {
kwicontrol.create(kwi);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
Mengubah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
//Edit Kwitansi
KwitansiController kwicontrol = new KwitansiController(emf);
Kwitansi kwi = kwicontrol.findKwitansi("K0001");
kwi.setTanggalKwitansi(new Date());
try {
kwicontrol.edit(kwi);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
Menghapus Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
//Delete Kwitansi
KwitansiController kwicontrol = new KwitansiController(emf);
try {
kwicontrol.destroy("K0001");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
58
59
BAB IV
PEMBUATAN MENU
Dalam buku ini, pembuatan menu digunakan pada form utama (lihat
pada buku I “Asyiknya Mengenal Java”). Tidak hanya menu yang akan
ditambahkan ke dalam aplikasi, melainkan penggunaan gambar (icon)
dan kelas interface.
60
Gambar 4.1 Pembuatan Package untuk Kelas Form /Tampilan
tombol
62
e. JButton name : jbtnNew, Text : New, icon :
images/icon_newfile.gif
63
public void delete();
public void findData();
public void showData();
public void printData();
}
NavigatorFormInt navformint ;
64
8. Tambahkan program dibawah ini dengan klik kanan pada JbtnSave
Events actionPerformed
private void jbtnSaveActionPerformed(java.awt.event.ActionEvent evt) {
navformint = (NavigatorFormInt)
jdesktoppane.getSelectedFrame();
navformint.saveData();
JOptionPane.showMessageDialog(null, "Simpan Selesai");
}
10. Tambahkan program dibawah ini dengan klik kanan pada JbtnPrint
Events actionPerformed
private void jbtnPrintActionPerformed(java.awt.event.ActionEvent evt) {
navformint = (NavigatorFormInt)
jdesktoppane.getSelectedFrame();
navformint.printData();
}
import apppenjualan.form.FrmMain;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
65
public class AppPenjualan {
66
BAB V
PEMBUATAN FORM
MASTER
67
Terdapat tabel Pelanggan, Faktur, Faktur Detail, Kwitansi, dan Barang.
Dari tabel-tabel tersebut yang merupakan tabel master adalah
Pelanggan dan barang, sedangkan tabel Faktur, Faktur Detail, dan
Kwitansi.
68
2. Desainlah FrmBarang seperti dibawah ini :
69
3. Tekanlah tombol untuk melakukan penambahan program
pada form FrmBarang
Pada sebelah kiri akan muncul gambar lampu bohlam warna kuning,
kliklah, kemudian pilihlah implements All Abstract Methods.
70
@Override
public void findData() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void showData() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void printData() {
throw new UnsupportedOperationException("Not supported yet.");
}
71
@Override
public void saveData() {
if (!jtxtKodeBarang.getText().trim().equals("")) {
brg = brgctrl.findBarang(jtxtKodeBarang.getText());
if (brg == null) {
//jika barang tidak diketemukan maka tambah data
brg = new Barang();
setData();
try {
brgctrl.create(brg);
} catch (Exception ex) {}
JOptionPane.showMessageDialog(
null, "Penambahan Data Selesai");
}else{
//jika barang diketemukan maka update data
setData();
try {
brgctrl.edit(brg);
} catch (Exception ex) {}
JOptionPane.showMessageDialog(
null, "Simpan Selesai");
}
}else{
JOptionPane.showMessageDialog(
null, "Kode Barang Tidak Boleh Kosong");
}
}
73
1. Bukalah FrmMain untuk memulai
2. Kilk pada Tab Source dan tambahkan instan frmbarang dari kelas di
baris ke 16 :
FrmBarang frmbarang;
74
Gambar 5.8 Instan FrmBarang
75
BAB VI
PEMBUATAN FORM
PENJUALAN
Setelah anda berhasil membuat Form Master, yaitu Form Barang dan
Form Pelanggan, marilah kita melangkah kepada pembuatan Form
Transaksi yang pertama yaitu Form Penjualan. Adapun langkah-langkah
yang harus dilakukan adalah sebagai berikut :
76
Gambar 6.1 Form Penjualan
77
Gambar 6.2 FormatterFactory jfmtTanggalFaktur
78
Gambar 6.3 jtblFaktur : Table Contents
jfmtTanggalFaktur.setText(dfddmmyyyy.format(new Date()));
tmodelfaktur = (DefaultTableModel) jtblFaktur.getModel();
obj = new Object[jtblFaktur.getRowCount()];
clearTable();
tmodelfaktur.addRow(obj);
}
if (ffind == null){
try {
fctrl.create(f);
jtxtNomorFaktur.setText(f.getNomorFaktur());
JOptionPane.showMessageDialog
(null, "Penyimpanan Faktur Berhasil");
} catch (Exception ex) {
JOptionPane.showMessageDialog
(null, "Penyimpanan Faktur Gagal : " + ex.getMessage());
}
}else{
try {
fctrl.edit(f);
JOptionPane.showMessageDialog
(null, "Penyimpanan Berhasil" );
} catch (Exception ex) {
81
ex.printStackTrace();
JOptionPane.showMessageDialog
(null, "Penyimpanan Faktur Gagal : " + ex.getMessage());
}
}
findData();
82
clearTable();
if (f == null) {
newData();
}else{
jtxtNomorFaktur.setText(f.getNomorFaktur());
jfmtTanggalFaktur.setText
(dfddmmyyyy.format(f.getTanggalFaktur()));
if (f.getKodePelanggan() != null) {
jtxtKodePelanggan.setText
(f.getKodePelanggan().getKodepelanggan());
jtxtNamaPelanggan.setText
(f.getKodePelanggan().getNamapelanggan());
}
for (Fakturdetail fd : f.getFakturdetailCollection()) {
tmodelfaktur.addRow(obj);
tmodelfaktur.setValueAt(
fd.getId(),
tmodelfaktur.getRowCount() - 1, 0);
tmodelfaktur.setValueAt(
fd.getKodeBarang().getKodebarang(),
tmodelfaktur.getRowCount() - 1, 1);
tmodelfaktur.setValueAt(
fd.getKodeBarang().getNamabarang(),
tmodelfaktur.getRowCount() - 1, 2);
tmodelfaktur.setValueAt(
fd.getHarga(),
tmodelfaktur.getRowCount() - 1, 3);
tmodelfaktur.setValueAt(
fd.getQty(),
tmodelfaktur.getRowCount() - 1, 4);
}
hitungTotal();
tmodelfaktur.addRow(obj);
}
}
int qty = 0;
try{
qty = Integer.parseInt(tmodelfaktur.getValueAt(i, 4)+"");
}catch(Exception e){}
fdetail.setQty(qty);
}
84
17. Tambahkan fungsi enter pada jtxtNomorFaktur dengan melakukan
klik kanan pada jtxtNomorFaktur Events Key KeyPressed.
Dan tambahkan program didalamnya.
private void jtxtNomorFakturKeyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
findData();
}
}
if (
tmodelfaktur.getValueAt
(tmodelfaktur.getRowCount()-1, 1)
!= null
){
//jika nomor faktur tidak kosong
//dan baris terakhir tidak kosong maka tambah baris
tmodelfaktur.addRow(obj);
}
if (col == 4) {
85
jtblFaktur.changeSelection
(tmodelfaktur.getRowCount()-1, 1, false, false);
}
hitungTotal();
2. Kilk pada Tab Source dan tambahkan instan frmpenjualan dari kelas
di baris ke 18 :
FrmPenjualan frmpenjualan;
86
Gambar 6.6 Menambahkah ActionPerfomed pada menu jmniPenjualan
87
BAB VII
PEMBUATAN FORM
KWITANSI
88
Gambar 7.1 Desain Form Kwitansi
90
3. Tambahkan implements NavigatorFormInt pada source FrmPenjualan
dan tekan lampu kuning untuk menambah semua implements (add
all implements)
clearTable();
}
91
6. Buatlah method clearTable() seperti dibawah ini :
private void clearTable() {
int row = tmodelfaktur.getRowCount();
while(row > 0){
row--;
tmodelfaktur.removeRow(row);
}
}
92
if (f.getKodePelanggan() != null) {
jtxtKodePelanggan.setText(
f.getKodePelanggan().getKodepelanggan());
jtxtNamaPelanggan.setText(
f.getKodePelanggan().getNamapelanggan());
}
for (Fakturdetail fd : f.getFakturdetailCollection()) {
tmodelfaktur.addRow(obj);
tmodelfaktur.setValueAt(fd.getId(),
tmodelfaktur.getRowCount() - 1, 0);
tmodelfaktur.setValueAt(
fd.getKodeBarang().getKodebarang(),
tmodelfaktur.getRowCount() - 1, 1);
tmodelfaktur.setValueAt(
fd.getKodeBarang().getNamabarang(), tmodelfaktur.getRowCount() - 1,
2);
tmodelfaktur.setValueAt(
fd.getHarga(),
tmodelfaktur.getRowCount() - 1, 3);
tmodelfaktur.setValueAt(
fd.getQty(),
tmodelfaktur.getRowCount() - 1, 4);
}
hitungTotal();
}
}
jtxtGrandTotal.setText(dftitik.format(grandtotal));
}
93
private void jtxtNomorFakturKeyPressed(
java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
jtxtNomorKwitansi.setText("");
jfmtTanggalKwitansi.setText(
dfddmmyyyy.format(new Date()));
checkDataFaktur();
}
}
94
null, "Faktur Tidak Boleh Kosong");
}else{
f = ffind;
Kwitansi kfind = kctrl.findKwitansi(
jtxtNomorKwitansi.getText());
if (kfind == null){
k = new Kwitansi();
k.setNomorKwitansi(
kctrl.createNomorKwitansi());
}else{
k = kfind;
}
setData();
if (kfind == null){
try {
kctrl.create(k);
jtxtNomorKwitansi.setText(
k.getNomorKwitansi());
JOptionPane.showMessageDialog(
null, "Penyimpanan Kwitansi Berhasil");
} catch (Exception ex) {
JOptionPane.showMessageDialog(
null,
"Penyimpanan Kwitansi Gagal : " +
ex.getMessage());
}
}else{
try {
kctrl.edit(k);
JOptionPane.showMessageDialog(
null, "Penyimpanan Kwitansi Berhasil" );
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(
null,
"Penyimpanan Kwitansi Gagal : " +
ex.getMessage());
}
}
}
}
95
17. Rubahlah method delete() dengan program dibawah ini :
@Override
public void delete() {
try {
kctrl.destroy(jtxtNomorKwitansi.getText());
JOptionPane.showMessageDialog
(null, "Penghapusan Selesai");
} catch (Exception ex) {
JOptionPane.showMessageDialog
(null,
"Penghapusan tidak bisa karena " + ex.getMessage());
}
newData();
}
findDataFaktur();
}
}
96
Setelah pembuatan Form FrmKwitansi telah selesai dilakukan, maka
langkah berikutnya adalah menggabungkan FrmKwitansi dengan
FrmMain agar FrmKwitans dapat digunakan. Adapun langkah-langkah
yang dilakukan adalah sebagai berikut :
2. Kilk pada Tab Source dan tambahkan instan frmpenjualan dari kelas
di baris ke 19 :
FrmKwitansi frmkwitansi;
98
BAB VIII
INSTALASI IREPORT
PADA NETBEANS 7.2
99
menggunakan bahasa pemrograman PHP turut menggunakannya dalam
pembuatan laporan.
100
Gambar 8.2. Layar Desain IReport
101
Gambar 8.3 Cara Kerja iReport
Pada cakram padat (CD) yang disertakan pada buku ini terdapat paket
iReport (iReport-5.0.0-plugin.zip) yang akan kita gunakan untuk
pembuatan desain laporan pada Netbeans 7.2. Adapun langkah instalasi
iReport plugin pada NetBeans 7.2 adalah sebagai berikut :
102
Gambar 8.4. NetBeans : Tool – PlugIn
103
Gambar 8.5. Tab Downloaded Plugins
104
Gambar 8.6. Update Plugins – PILIH CANCEL
6. Pilih tombol
105
Gambar 8.7. Pluggin Intalled
106
Gambar 8.8. Proses akhir instalasi
107
Gambar 8.9. Proses penguduhan plugin
9. Tekan tombol
108
Gambar 8.10 Tampilan Peringatan Instalasi
109
BAB IX
MEMBUAT LAPORAN
MASTER
110
Gambar 9. Other
111
Gambar 9.2 Membuat direktori atau folder
112
Langkah kedua adalah membuat laporan Data Barang pada direktori
report. Adapun langkah-langkahnya adalah sebagai berikut :
113
Gambar 9.5 Nama dan lokasi laporan : Barang.jrxml
114
Catatan :
menekan tombol
115
- Isilah konfigurasi seperti pada gambar di bawah :
5. Tekan dua kali (double click) pada tabel Barang sehingga tabel barang
116
Gambar 9.6 Pilihan Tabel Barang
6. Tekan tombol
117
7. Tekan tombol untuk mengambil keselurhan Field yang telah
diambil
Hasil yang didapatkan adalah semua field yang ada di sebelah kiri
berpindah ke sebelah kanan seperti pada gambar 9.9. Langkah
118
Gambar 9.9 iReport : Semua Field pada posisi sebelah kanan
119
Gambar 9.10 iReport : Group by
120
10. Rubahlah desain laporan seperti dibawah ini (gunakan klik dua kali
pada objek), sebagai berikut :
121
Setelah pendesainan laporan barang, langkah berikutnya adalah
memasukkan pustaka (library) iReport yaitu jasperreports-5.0.0.jar,
groovy-all-1.7.5.jar, commons-logging-1.1.jar, commons-javaflow-
20060411.jar, commons-digester-2.1.jar, commons-digester-2.1.jar,
commons-collections-3.2.1.jar, dan commons-beanutils-1.8.2.jar.
Semua pustaka iReport yang dibutuhkan ada pada cd yang disertai buku
ini. Adapun langkah-langkah yang harus dilakukan aalah :
122
- Tambahkan semua pustaka iReport dengan menekan tombol
tombol
123
Gambar 9.15 Menambahkan pustaka iReport
124
Setelah berhasil melewati langkah-langkah diatas, maka kita memasuki
kelangkah berikutnya, yaitu membuat program untuk laporan
Barang.jrxml dengan langkah-langkah sebagai berikut :
try {
em = AppPenjualan.emf.createEntityManager();
em.getTransaction().begin();
Connection connect = em.unwrap(Connection.class);
JasperPrint jprint =
JasperFillManager.fillReport(sourcefilename,
new HashMap(), connect);
JasperViewer viewer = new JasperViewer(jprint, false);
viewer.setFitPageZoomRatio();
viewer.setVisible(true);
em.getTransaction().commit();
connect.close();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(
null, "Tidak Bisa Print : " + e.getMessage());
}finally{
if (em != null) {
em.close();
}
}
}
125
5. Pilihlah tombol Print , dan program akan menampilkan
126
BAB X
MEMBUAT LAPORAN
PENJUALAN
127
Gambar 10.1 iReport Layout
128
4. Pada layar Query tekan tombol
129
Gambar 10.4 Pilihan Tabel Barang
130
Gambar 10.5 Edit Relasi Pelanggan Faktur
131
Gambar 10.6 Join Edit
tombol
132
9. Tekan tombol untuk mengambil keselurhan Field yang telah
diambil
Hasil yang didapatkan adalah semua field yang ada di sebelah kiri
berpindah ke sebelah kanan seperti pada gambar 9.9. Langkah
133
10. Pada tampilan Group pilih faktu_NomorFaktur pada group 1,
134
Gambar10.11 iReport : Group by
135
b. Static Text, Text : Faktur, Font :Times New Roman Size 22
136
a. Klik kanan pada Variables pada iReport Inspector, pilih Add
Variable
137
Gambar 10.14 Rename variable1
c. Klik pada total baris, dan klik Variable Expression pada window
properties, isilah dengan $F{fakturdetail_Qty} *
$F{fakturdetail_Harga}
138
Gambar 10.16 variable expression pada totalbaris
e. Drag and Drop total baris disamping QTY dan berikanlah Text
Static, Text : Total diatasnya
139
Gambar 10.17 Total Baris
140
g. Drag and Drop variabel grandtotal ke dalam faktur_NomorFaktur
Group Footer, seperti dibawah ini :
141
Gambar 10.17 Add Parameter
142
Gambar 10.18 Edit Query
143
Gambar 10.19 iReport : Hasil Laporan Penjualan
144
String sourcefilename = file.getAbsolutePath()
+ "\\report\\Penjualan.jasper";
/*langsung cetak*/
//JasperPrintManager.printReport(jprint, false);
em.getTransaction().commit();
connect.close();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Tidak Bisa Print : " + e.getMessage());
}finally{
if (em != null) {
em.close();
}
}
}
145
Gambar 10.20 Hasil Laporan Barang
146
Daftar Pustaka
Jeffery L. Whitten, etl; Metode Desain & Analis Sistem, ed. 6, McGraw
Hill Education
Haigh A., Object Oriented Analysis & Design, Osborne MC. Graw Hill,
2001
Siegel, Joel G dan Jae K. Shim yang diterjemahkan oleh Moh Kurdi
(1999), Kamus Istilah Akuntansi, Jakarta : PT Elex Media Komputindo, hal
404.
Http://www.java.com
Http://www.netbeans.org
Http://community.jaspersoft.com/project/ireport-designer
Http://en.wikipedia.org/wiki/Object-oriented_analysis_and_design
Http://www.uml.org
http://library.usu.ac.id/download/fe/akuntansi-rustam2
147
148
PROFIL
Penulis bernama Windu Gata, terlahir
di Jakarta tanggal 09 Juli 1976 dari
kedua orang tua pensiunan Pegawai
Negeri.
Saat ini Penulis sedang mengenyam
pendidikan S3 pada fakultas
Manajemen Pendidikan Universitas
Jakarta. Memperoleh gelar Magister
Komputer pada tahun 2008 di
Universitas Budi Luhur, dan pada
tahun 1999 selesai menyelesaikan
gelar Sarjana Komputer di STMIK Budi
Luhur
Sejak tahun 1995, penulis sangat
menyukai komputer, sehingga saat ini sudah menjadi mendarah daging.
Ilmu Komputer yang diminati adalah perangkat lunak. Berbagai macam
program aplikasi telah dibuat diberbagai perusahaan dalam dan luar
negeri dan saat ini penulis berkarir sebagai Sistem Solution Manager di
perusahaan kosmetika Martha Tilaar.
Selain berkarir di dunia industri, saat ini penulis merupakan Dosen
analisa, database, dan pemrograman dibidang komputer jenjang S1 dan
S2 pada STMIK Nusa Mandiri dan Universitas Budi Luhur.
Saat ini penulis berkeinginan untuk menuliskan semua pengalaman baik
sebagai seorang dosen maupun sebagai praktisi, sehingga tulisan
tersebut bermanfaat bagi pembaca.
Cara menghubungi saya :
Telepon : 02198377620, 081908017075
Email dan Yahoo Messenger : windu_gata@yahoo.com
Facebook : http://www.facebook.com/windu.gata
Web: http://windu1976.multiply.com/ http://windu1976.blogspot.com/
====== Hiduplah Indonesia Raya =====
149
Penulis ke 2 bernama Grace
Gata, Lahir di Jakarta tanggal
19 April 1975, menamatkan
kuliah S1 dan S2 di
Universitas Budi Luhur yang
berlokasi di Jakarta Selatan.
Memperoleh Magister
Komputer pada tahun 2010
dan mendapatkan gelar
Sarjana Komputer tahun
2003.
150