Anda di halaman 1dari 150

MEMBUAT APLIKASI JAVA

DEKSTOP

Aplikasi Penjualan

Lengkap dengan UML, Java,


Netbeans 7.2, IReport

Windu Gata & Grace Gata

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.

Adanya kemajuan teknologi informasi penyusunan dan pengaturan pola


kerja yang tertata dengan baik dan rapi memungkinkan penyajian,
pencarian, dan pengecekan data internal suatu organisasi ataupun
perusahaan selalu siap kapanpun dibutuhkan sehingga tidak lagi dibatasi
oleh waktu.

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 .

Didalam buku ini bahasannya tidak hanya mengambangkan aplikasi,


tetapi diterangkan pula penggunaan perangkat UML (Unified Modelling
Languange) dalam menganalisa dan membangun Aplikasi.

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

Object-Oriented Analysis and Design (OOAD), yang dalam bahasa


indonesianya adala Analis dan Desian Berorientasi Objek merupakan
pendekatan rekayasa perangkat lunak dimana model-model didalamnya
merupakan interaksi objek. Setiap objek mewakili beberapan entitas
kepentingan dalam sistem yang dimodelkan, ditandai dalam kelasnya,
wilayah-wilayahnya (elemen data), dan prilakunya. Berbagai model
dapat dibuat untuk menunjukkan struktur statis, prilaku dinamis, dan
penyebaran objek yang berkolaburasi pada saat sistem dijalankan
[http://en.wikipedia.org/wiki/Object-oriented_analysis_and_design, saat
akses 13 des 2012].

Menurut Jeffrey L. Written et al pada bukunya menjelaskan dalam


bukunya, yang dimaksudkan dengan analisa dan desain berorientasi
objek adalah sebuah pendekatan untuk :

4
- Mempelajari obyek-obyek yang ada untuk mengetahui apakah
obyek tersebut dapat digunakan berulang kali atau dapat
disesuaikan untuk keperluan yang baru.

- Menggambarkan obyek yang baru atau memodifikasi obyek, yang


akan dikombinasi dengan obyek-obyek yang sudah ada ke dalam
sebuah aplikasi bisnis komputer yang bermanfaat.

II.1. UML (Unified Modelling Language)

Hasil pemodelan pada OOAD terdokumentasikan dalam bentuk Unified


Modeling Language (UML). UML adalah bahasa spesifikasi standar yang
dipergunakan untuk mendokumentasikan, menspesifikasikan dan
membangun perangkat lunak. UML merupakan metodologi dalam
mengembangkan sistem berorientasi objek dan juga merupakan alat
untuk mendukung pengembangan sistem. UML saat ini sangat banyak
dipergunakan dalam dunia industri yang merupakan standar bahasa
pemodalan umum dalam industri perangkat lunak dan pengembangan
sistem.

Alat bantu yang digunakan dalam perancangan berorientasi objek


berbasiskan UML adalah sebagai berikut :

- Use Case Diagram

Use case Diagram merupakan pemodelan untuk kelakuan (behavior)


sistem informasi yang akan dibuat. Use Case mendeskripsikan sebuah
interaksi antara satu atau lebih aktor dengan sistem informasi yang
akan dibuat. Dapat dikatakan Use Case digunakan untuk mengetahui

5
fungsi apa saja yang ada didalam sistem informasi dan siapa saja yang
berhak menggunakan fungsi-fungsi tersebut.

Simbol-simbol yang digunakan dalam Use Case Diagram, yaitu:

Table II.1 Diagram Use Case

Gambar Keterangan

Use Case menggambarkan fungsionalitas


yang disediakan sistem sebagai unit-unit
yang bertukar pesan antar unit dengan
aktor, biasanya dinyatakan dengan
menggunakan kata kerja di awal nama
use case.

Actor atau Aktor adalah abstraction dari


orang atau sistem yang lain yang
mengaktifkan fungsi dari target sistem.
Untuk mengidentifikasikan aktor, harus
ditentukan pembagian tenaga kerja dan
tugas – tugas yang berkaitan dengan
peran pada konteks target sistem. Orang
atau sistem bisa muncul dalam beberapa
peran. Perlu dicatat bahwa aktor
berinteraksi dengan use case, tetapi tidak
memiliki kontrol terhadap use case.

Asosiasi antara aktor dan use case,


digambarkan dengan garis tanpa panah
yang mengindikasikan siapa atau apa
yang meminta interaksi secara langsung

6
dan bukannya mengindikasikan aliran
data.

Asosiasi antara aktor dan use case yang


menggunakan panah terbuka untuk
mengindikasikan bila aktor berinteraksi
secara pasif dengan sistem.

Include, merupakan didalam use case lain


(required) atau pemanggilan use case
oleh use case lain, contohnya adalah
pemanggilan sebuah fungsi program.

Extend, merupakan perluasan dari use


case lain jika kondisi atau syarat
terpenuhi.

- Diagram Aktivitas (Activity Diagram)

Activity diagram menggambarkan workflow (aliran kerja) atau


aktivitas dari sebuah sistem atau proses bisnis. Simbol-simbol yang
digunakan dalam Activity diagram, yaitu:

Tabel II.2 Diagram Aktivitas

Gambar Keterangan

Start Point, diletakkan pada pojok


kiri atas dan merupakan awal
aktifitas.

7
End Point, akhir aktifitas

Activities, menggambarkan suatu


proses/kegiatan bisnis.

Fork (percabangan), digunakan


untuk menunjukkan kegiatan yang
dilakukan secara peralel atau untuk
menggabungkan dua kegiatan
pararel menjadi satu.

Join (penggabungan) atau Rake,


digunakan untuk menunjukkan
adanya dekomposisi.

Decision Points, menggambarkan


pilihan untuk pengambilan
keputusan, true atau false.

New Sw imlane Swimlane, pembagian activity


diagram untuk menunjukkan siapa
melakukan apa.

8
- Diagram Urutan (Sequence Diagram)

Sequence diagram menggambarkan kelakuan obyek pada use case


dengan mendeskripsikan waktu hidup obyek dan pesan yang
dikirimkan dan diterima antar obyek. Simbol-simbol yang digunakan
dalam Sequence diagram, yaitu:

Tabel II.3. Diagram Urutan

Gambar Keterangan

Entity Class, merupakan bagian dari


sistem yang berisi kumpulan kelas berupa
entitas-entitas yang membentuk
: NewClass gambaran awal sistem dan menjadi
landasan untuk menyusun basis data.

Boundary Class, berisi kumpulan kelas


yang menjadi interface atau interaksi
antara satu atau lebih aktor dengan
: NewClass2 sistem, seperti tampilan form entry dan
form cetak.

Control Class, suatu obyek yang berisi


logika aplikasi yang tidak memiliki
tanggung jawab kepada entitas,
x : NewClass3
: NewClass : NewClass2 x : NewClass3
contohnya adalah kalkulasi dan aturan
bisnis yang melibatkan berbagai obyek.
Control object mengkoordinir pesan
antara boundary dengan entitas.

Message, simbol mengirim pesan antar

9
: NewClass : NewClass2 x : NewClass3

: NewClass : NewClass2 x : NewClass3


class.

Recursive, menggambarkan pengiriman


pesan yang dikirim untuk dirinya sendiri.

Activation, Activation mewakili sebuah


: NewClass : NewClass2 x : NewClass3
eksekusi operasi dari obyek, panjang
kotak ini berbanding lurus dengan durasi
aktivasi sebuah operasi.

Lifeline, garis titik-titik yang terhubung


dengan obyek, sepanjang lifeline
terdapat activation.

- Class Diagram (Diagram Kelas)

Merupakan hubungan antar kelas dan penjelasan detail tiap-tiap


kelas didalam model desain dari suatu sistem, juga memperlihatkan
aturan-aturan dan tanggung jawab entitas yang menentukan
perilaku sistem. Class diagram juga menunjukan atribut-atribut dan
operasi-operasi dari sebuah kelas dan constraint yang berhubungan
dengan obyek yang dikoneksikan.

Classdiagram secara khas meliputi : Kelas (Class), Relasi,


Associations, Generalization dan Aggregation, Atribut (Attributes),
Operasi (Operations/Method), dan Visibility, tingkat akses objek
eksternal kepada suatu operasi atau atribut.

10
Hubungan antar Kelas mempunyai keterangan yang disebut
dengan Multiplicity atau kardinaliti.

Tabel II.4

Multiplicity Penjelasan

1 Satu dan hanya satu

0..* Boleh tidak ada atau 1 atau lebih

1..* 1 atau lebih

0..1 Boleh tidak ada, maksimal 1

n..n Batasan antara. Contoh : 2..4 mempunyai arti


minimal 2 maksimum 4

Contoh Class Diagram seperti pada gambar II.1

Gambar 2.1 Contoh Classdiagram


11
Pengertian atau cara pembacaan Classdiagram pada gambar 2.1,
adalah sebagai berikut :

 Terdapat 4 (empat) kelas, yaitu Student, Enrollment,


Seminar, Professor, dan Seminar.

 Pada salah satu kelas yaitu kelas Student terdapat 6 (enam)


atribut, yaitu : Name, Address, Phone Number, Email
Address, Student Number, dan Average Mark.

 Operasi pada kelas Student adalah Is Eligible to enroll, dan


get Seminars Taken

 Kelas Student mempunyai relasi terhadap kelas Enrollment.


Relasi tersebut menunjukkan 1 Student dapat melakukan
Enrollment sebanyak minimum 1 kali (1) sampai tak
terhingga (1..*) sedangkan 1 Enrollment hanya memiliki 1
Student.

 Gambar diagram memiliki keterangan “Some Seminars May


not Have An Instructor”

II.2 PENJUALAN

Pada hakikatnya maksud dari penjualan adalah Keberhasilan suatu


perusahaan pada umumnya dinilai berhasil dilihat dari kemampuannya
dalam memperoleh laba. Dengan laba yang diperoleh, perusahaan akan
dapat mengembangkan dan memperluas bidang usahanya. Untuk
mencapai tujuan tersebut, perusahaan mengandalkan kegiatannya
dalam bentuk penjualan, semakin besar volume penjualan semakin
besar pula laba yang akan diperoleh perusahaan. Perusahaan pada

12
umumnya mempunyai tiga tujuan dalam penjualan yaitu mencapai
volume penjualan, mendapatkan laba tertentu, dan menunjukkan
pertumbuhan perusahaan.

Sedangkan pengertian Penjualan menurut istilah yang ada dalam


literatur adalah sebagai berikut :

- IAI (Ikatan Akuntan Indonesia), dalam standar no 23 adalah Standar


Keuangan No. 23 adalah sebagai berikut : “Arus masuk bruto dari
manfaat ekonomi yang timbul dari aktivitas normal perusahaan
selama satu periode bila arus kas masuk itu mengakibatkan kenaikan
ekuitas, yang tidak berasal dari kontribusi penanam modal.”

- Menurut Joel G. Siegel dan Joe K. Shim, “Penjualan adalah


penerimaan yang diperoleh dari pengiriman barang dagangan atau
dari penyerahan pelayanan dalam bursa sebagai barang
pertimbangan. Pertimbangan ini dapat dalam bentuk tunai maupun
peralatan kas atau harta lainnya. Pendapatan dapat diperoleh pada
saat penjualan, karena terjadi pertukaran, harga jual dapat
diperoleh pada saat penjualan, karena terjadi pertukaran, harga jual
dapat ditetapkan dan bebannya diketahui”.

- Menurut Marwan, “Penjualan adalah suatu usaha yang terpadu


untuk mengembangkan rencana-rencana strategis yang diarahkan
pada usaha pemuasaan kebutuhan dan keinginan pembeli, guna
mendapatkan penjualan yang menghasilkan laba.”

- Menurut Winardi, “Penjualan adalah suatu transfer hak atas


benda-benda.

Dari beberapa pengertian di atas dapat ditarik suatu kesimpulan


pengertian penjualan secara umum adalah suatu unit kerja yang
berfungsi untuk memaksimalkan laba. Jumlah transaksi penjualan yang
13
terjadi biasanya cukup besar dibandingkan dengan jenis transaksi lain.
Penjualan merupakan sumber pendapatan utama perusahaan.

II.3 Hasil Analisa Sistem

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.

II.3.1 Deskripsi Bisnis Proses

Deskripsi bisnisi proses yang dibahas melingkupi :

- Proses Update Master

Fakturis melakukan proses update master dan update master


barang dengan cara melakukan proses update barang yang bersifat
kapan saja bisa dilakukan perubahan.

14
- Proses Penjualan

Pelanggan akan datang melakukan pembelian barang yang dijual,


kemudian data tersebut dientri oleh Fakturis ke dalam proses
penjualan, selanjutnya dalam setiap aktivitas penjualan tersebut
dicetak suatu faktur oleh fakturis sebagai bukti barang yang akan
diserahkan kepada pelangan.

- Proses pembayaran

Selanjutnya pelanggan akan melakukan pembayaran barang di kasir,


jika sudah melunasi barang tersebut maka kasir akan mencetak
kwitansi sebagai bukti pelunasan barang yang diberikan ke
pelanggan.

II.3.2 Use Case

Dari deskripsi di atas dapat digambarkan dengan menggunakan Diagram


Use Case sperti pada gambar 2.2.

15
Gambar 2.3 Use Case Penjualan

Untuk lebih jelasnya mengenai gambar tersebut adalah sebagai berikut :

- Terdapat 3 Aktor, yaitu Fakturis, Pelanggan, dan Kasir

- Fakturis berhubungan secara langsung ke pada case Update Data,


sehingga Fakturis dapat melakukan pemuktahiran data Barang dan
Pelanggan

- Pelanggan (berhubungan tidak langsung) dapat meminta fakturis


(yang melakukan operasi komputer) untuk melakukan pemasukan
data penjualan sekaligus melakukan pencetakan Faktur.

- Berdasarkan faktur yang didapatkan oleh Pelanggan, maka


pelanggan melakukan pembayaran ke Kasir dan mendapat Kwitansi
yang dicetak oleh Kasir.

16
II.3.3 Class Diagram

Kelas yang terbentuk dari hasil analisa pada proses bisnis penjualan
adalah sebagai berikut :

Gambar 2.4 Diagram Kelas Penjualan

Penjelasan gambar tersebut diatas adalah :

- Pelanggan boleh tidak melakukan pembelian atau melakukan


pembelian satu kali atau sebanyak mungkin. Sedangkan dalam
faktur harus terisi kode pelanggan

- Faktur tidak akan tercatat dalam kwitansi apabila belum melakukan


pembayaran, tetapi akan tercatat pada kwitansi setelah melakukan
pembayaran. Sedangkan dalam Kwitansi haruslah tercatat
NomorFaktur. Id pada FakturDetail merupakan kunci

- FakturDetail merupakan Agregrasi Komposit (Faktur memiliki


FakturDetail atau FakturDetail tidak akan ada kalau Kelas Faktur
tidak ada) dan
17
- Dalam Faktur detail haruslah tertera KodeBarang minimal satu atau
lebih

II.3.4 Activity Diagram

Gambar 2.5 Diagram Aktivitas

Penjelasan untuk gambar activity diagram tersebut adalah :

- Terdapat alur dari kegiatan penjualan yaitu dimulai dari pelangan


menyerahkan belanjaan kepada fakturis,

- lalu dientry data belanjaan tersebut selanjutnya dicetak faktur oleh


fakturis yang kemudian diberikan ke pelanggan,

- setelah menerima faktur, pelanggan melakukan pembayaran melalui


kasir yang datanya langsung dientry untuk dicetak kwitansi,

18
- kasir memberikan kwitansi kepada pelanggan sebagai tanda
pelunasan.

II.3.5 Sequence Diagram

Gambar 2.6 Contoh Sequence Diagram untuk Entry Faktur

Penjelasan gambar Sequence Diagram untuk entry faktur, yaitu :

- kasir merupakan aktor yang berinteraksi langsung dengan tampilan


layar dari entry faktur, yang pertama dilakukan adalah membuka
form faktur yang kemudian melakukan entry kode pelanggan, dalam
tampilan form entry tersebut akan dapat secara otomatis tampil
kode pelanggan dengan cara membaca di dalam entitas pelanggan,
sehingga akan terkirim pesan dari kode pelanggan terakhir yang
sudah dientri sebelumnya.

- Selanjutnya melakukan pemasukan data barang dalam form faktur


dengan cara mengirimkan pesan ke kontrol barang dan mencari data
19
barang di entitas barang yang kemudian mengirimkan pesan kembali
sehingga tampil data barang yang diinginkan.

- Kemudian dimasukkan jumlah pembelian barang dan dilakukan


penghitungan total pembelian barang.

- Setelah semua data entry faktur sudah dilakukan maka


penyimpanan data faktur dalam entitas faktur dan detil faktur, serta
program melakukan pengurangan stok.

- Pencetakan faktur dilakukan dengan menggunakan printer

20
II.3.6 State Diagram

Gambar 2.6 Contoh Sequence Diagram untuk Entry Faktur

Penjelasan sequence diagram untuk entry faktur diatas, yaitu :

- Kegiatan pertama kali dimulai saat dilakukan pengentrian faktur


dengan memasukkan entry pelanggan yang kemudian dilanjutkan
dengan entry data barang yang dicek apakah datanya sudah ada
dalam master barang,

- jika ada maka data barang yang diminta akan ditampilkan beserta
harganya.

- Selanjutnya dilakukan penghitungan total dan penyimpanan faktur,


untuk penyimpanan data dan cetak faktur dilakukan secara
bersamaan, maka berakhirlah kegiatan pengentrian faktur.

21
II.3.7 Collaboration Diagram

Gambar 2.7 Contoh Collaboration Diagram untuk Entry Faktur

Penjelasan untuk collaboration diagram entry faktur, yaitu :

- Aktor kasir membuka form entry faktur, kontrol akan menampilkan


form,

- selanjutnya kasir akan memasukkan kode pelanggan yang akan


dicari ke dalam entitas pelanggan,

- kasir memasukkan kode barang yang datanya juga akan dicocokkan


dengan data yang ada dalam entitas barang,
22
- untuk penyimpanan data akan menambah informasi baru ke dalam
entitas faktur dan detil faktur serta terjadi pengurangan stok barang,
bukti faktur kemudian dicetak melalui printer.

23
BAB III
PEMBUATAN DATABASE DAN OBJEK
TABEL

Database merupakan kumpulan data yang saling berhubungan.


Hubungan antar data dapat ditunjukkan dengan adanya field kunci dari
setiap tabel yang ada. Dalam satu file atau tabel terdapat record-record
yang sejenis, sama besar, sama bentuk, yang merupakan satu kumpulan
entitas yang seragam. Satu record terdiri dari field yang saling
berubungan menunjukkan bahwa field tersebut satu pengertian yang
lengkap dan disimpan dalam satu record.

Basis data mempunyai beberapa kriteria penting, yaitu :

1. bersifat data oriented dan bukan program oriented.

2. Dapat digunakan oleh beberapa program aplikasi tanpa perlu


mengubah basis datanya.

3. Dapat dikembangkan dengan mudah, baik volume maupun


strukturnya.
24
4. Dapat memenuhi kebutuhan sistem-sistem baru secara mudah

5. Dapat digunakan dengan cara-cara yang berbeda

Prinsip utama database adalah pengaturan data dengan tujuan utama


fleksibilitas dan kecepatan pada saat pengambilan data kembali. Adapun
ciri-ciri basis data diantaranya adalah sebagai berikut :

1. Efisiensi meliputi kecepatan, ukuran dan ketepatan.

2. Data dalam jumlah besar.

3. Berbagi pakai (dipakai bersama –sama / sharebility).

4. Mengurangi bahkan menghilangkan terjadinya duplikasi dan


ketidakkonsistenan data.

BAB III.1 Pembuatan Database

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

Setelah berhasil melakukan instalasi mysql, maka pada sistem operasi


MS. Windows 7 dapat menjalankan perintah di layar command

Gambar 3.2 perintah mengaktifkan command pada MS. Windows 7

Setelah layar Command telah muncul, maka anda dapat mengetikkan


perintah mysql pada layar Command tersebut.

26
Gambar 3.2 Layar Command

Adapun cara- cara dalam melakukan pembutan database, adalah sebagai


berikut :

1. Buatlah database penjualan dengan perintah :


mysql> Create database penjualan;

2. Masuk ke dalam database penjualan dengan perintah:


mysql> use penjualan;

3. Gunakan perintah dibawah ini untuk membuat tabel barang :


mysql> CREATE TABLE `barang` (
`kodebarang` varchar(5) NOT NULL,
`namabarang` varchar(20),
`Stok` int(11),
`HargaStandard` double,
PRIMARY KEY (`kodebarang`),
UNIQUE KEY `kodebarang` (`kodebarang`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

4. Gunakan perintah dibawah ini untuk membuat tabel pelanggan:


CREATE TABLE `pelanggan` (
`kodepelanggan` VARCHAR(5) NOT NULL,
`namapelanggan` VARCHAR(20) DEFAULT NULL,
`Alamat` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`kodepelanggan`)
) ENGINE=INNODB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
5. Gunakan perintah dibawah ini untuk membuat tabel faktur :
27
CREATE TABLE `faktur` (
`NomorFaktur` VARCHAR(5) NOT NULL,
`KodePelanggan` VARCHAR(5) DEFAULT '',
`TanggalFaktur` DATE DEFAULT NULL,
PRIMARY KEY (`NomorFaktur`),
KEY `FK_faktur` (`KodePelanggan`),
CONSTRAINT `FK_faktur` FOREIGN KEY (`KodePelanggan`) REFERENCES
`pelanggan` (`kodepelanggan`)
) ENGINE=INNODB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

6. Gunakan perintah dibawah ini untuk membuat FakturDetail :


CREATE TABLE `fakturdetail` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`NomorFaktur` VARCHAR(5) NOT NULL,
`KodeBarang` VARCHAR(5) NOT NULL,
`Qty` INT(11) DEFAULT NULL,
`Harga` DOUBLE DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_fakturdetail` (`NomorFaktur`),
KEY `FK_fakturdetail_barang` (`KodeBarang`),
CONSTRAINT `FK_fakturdetail` FOREIGN KEY (`NomorFaktur`) REFERENCES
`faktur` (`NomorFaktur`),
CONSTRAINT `FK_fakturdetail_barang` FOREIGN KEY (`KodeBarang`)
REFERENCES `barang` (`kodebarang`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
COLLATE=latin1_general_ci;

7. Gunakan perintah dibawah ini untuk membuat tabel Kwitansi :


CREATE TABLE `kwitansi` (
`NomorKwitansi` VARCHAR(5) NOT NULL,
`TanggalKwitansi` DATE DEFAULT NULL,
`NomorFaktur` VARCHAR(5) DEFAULT NULL,
PRIMARY KEY (`NomorKwitansi`),
KEY `FK_kwitansi` (`NomorFaktur`),
CONSTRAINT `FK_kwitansi` FOREIGN KEY (`NomorFaktur`) REFERENCES `faktur`
(`NomorFaktur`)
) ENGINE=INNODB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

BAB III.2 Pembuatan Objek Tabel

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 :

Gambar 3.3 Aplikasi Editor Java Netbean 7.2

Gambar 3.3 Aplikasi Editor Java Netbean 7.2

29
Ikuti langkah satu persatu dalam membuat objek dari tabel yang berasal
dari database penjualan pada komputer lokal, sebagai berikut :

BAB III.2.1 Membuat Projek Penjualan

Buatlah projek penjualan pada Netbeans, dengan langkah-langkah


dibawah ini :

1. Tekan tombol untuk membuat project penjualan.

2. Pilihlah Java Application, kemudian pilih tombol

Gambar 3.3 Pilhan New Project – Java Application

3. Berikanlah nama projek : AppPenjualan, kemudian tekan

30
Gambar 3.3 Pilhan New Project – Penamaan Projek

Maka lengkalah kita dalam membuat projek AppPenjualan seperti


pada gambar dibawah ini :

Gambar 3.4 Projek AppPenjualan

4. Masukkan pustaka (Library) Mysql, seperti dibawah ini :

31
a. Klik kanan pada projek AppPenjualan dan pilihlah menu
Properties

Gambar 3.5 Projek AppPenjualan

b. Pilihlah Categories – Libraries, kemudian pilih tombol

32
Gambar 3.6 Projek AppPenjualan

c. Pilihlah Mysql Library, kemudian tekan

Gambar 3.7 Projek AppPenjualan

33
Gambar 3.8 Projek AppPenjualan

Tekan tombol untuk menyelesaikan

BAB III.2.2 Membuat Persistance (Java Persistance API)

Java Persistance API, kadang disebut dengan JPA, merupakan framework


dari Bahasa Pemrograman java dalam mengatur penggunaan data
berelasi dalam aplikasi yang menggunakan Java Standar dan enterprise.

Adapun langkah-langkah dalam menggunakan JPA pada NetBeans,


sebagai berikut :

34
1. Kilik kanan pada projek AppPenjualan pilihlah New
OtherPersistance  Persistance Unit, kemudian tekan tombol

Gambar 3.9 Pilihan Persistance Unit

2. Pilihlah Table Generetion Strategy : None dan Database Connection


: New Database Connection

Gambar 3.10 New Database Connection

35
3. Pilihlah MySql Connector, kemudian tekan

Gambar3.11 Pilihan MySql JDBC Connector

4. Isilah databasenya dengan penjualan dan pastikan Remember

Password tercentang dan tekan tombol

Gambar3.12 Pilihan Customize Connection

36
Juga pada jendela Persistance Unit tekan tombol . Hasil
akhir pembuatan Persistance Unit adalah seperti pada gambar
dibawah ini :

Gambar 3.13 Persistance.xml

BAB III.2.3 Membuat Objek POJO (Plain Old Java Objek)


atau Entitas

Setelah koneksi Persistance telah dibuat maka langkah selanjutnya kita


akan membuat Objek dari table-tabel yang ada di database penjualan.

Adapun langkah-langkahnya adalah sebagai berikut :

1. Buatlah Package data pada Package AppPenjualan, dengan memilih


New  Java Package

37
Gambar 3.14 Java Package

Berikanlah nama package apppenjualan.data, kemudian tekan

tombol

Gambar 3.15 Nama dan lokasi Package

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

Setelah keluar form Entity Class From Database, tekan tombol

untuk memasukkan semua tabel pada database


penjualan dalam pembentukan objek model POJO atau entitas

tersebut, kemudian tekan tombol .

39
Gambar 3.17 Menambahkan Semua Kelas Entitas dari database.

Tekan tombol untuk menyelesaikan penambahan entitas

40
Gambar 3.18 Entity Classes.

BAB III.2.4 Membuat Controller dari objek POJO

Setiap entitas atau model POJO yang dibentuk akan dikontrol oleh kelas
Controller. Dimana setiap proses bisnis atau manipulasi data dilakukan
dalam Method atau Operation.

Adapun cara pembuatan kelas kontrol adalah sebagai berikut :

1. Buatlah Package dengan nama control di dalam Package


apppenjualan dengan melakukan klik kanan pada apppenjualan 
New  Java Package

41
Gambar 3.19 Pembuatan Package untuk Kelas Kontrol

Berikanlah nama package apppenjualan.control, kemudian tekan

tombol

Gambar 3.20 Pembuatan Package untuk Kelas Kontrol

2. Buatlah kelas kontrol untuk kelas Barang dengan nama


BarangController.java diatas Package apppenjualan.control dengan
cara klik kanan pada apppenjualan.control  New  Java Class,
kemudian berilah nama BarangController. Apabila
BarangController.java telah terbentuk gantilah semua kodingnya
dengan listing dibawah ini :
package apppenjualan.control;

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;

public class BarangController implements Serializable {

public BarangController(EntityManagerFactory emf) {


this.emf = emf;
}
private EntityManagerFactory emf = null;

public EntityManager getEntityManager() {


return emf.createEntityManager();
}

public void create(Barang barang) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.persist(barang);
em.getTransaction().commit();
} catch (Exception ex) {
if (findBarang(barang.getKodebarang()) != null) {
throw new Exception("Barang " + barang + " already exists.", ex);
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}

public void edit(Barang barang) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.merge(barang);
em.getTransaction().commit();
} catch (Exception ex) {
String msg = ex.getLocalizedMessage();
if (msg == null || msg.length() == 0) {
String id = barang.getKodebarang();
if (findBarang(id) == null) {
throw new Exception("The barang with id " + id + " no longer exists.");
}
}
throw ex;

43
} finally {
if (em != null) {
em.close();
}
}
}

public void destroy(String id) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
Barang barang;
try {
barang = em.getReference(Barang.class, id);
barang.getKodebarang();
} catch (EntityNotFoundException enfe) {
throw new Exception("The barang with id " + id + " no longer exists.", enfe);
}
em.remove(barang);
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
}

public Barang findBarang(String id) {


EntityManager em = getEntityManager();
try {
return em.find(Barang.class, id);
} finally {
em.close();
}
}

Cara menggunakan listing diatas adalah sebagai berikut :

Tambah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");
// Entry Barang
BarangController brgcontrol = new BarangController(emf);

Barang brg = new Barang();


brg.setKodebarang("B0001");
brg.setNamabarang("Barang 01");
brg.setStok(10);
brg.setHargaStandard(22000D);
try {
44
brgcontrol.create(brg);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}

Mengubah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");

BarangController brgcontrol = new BarangController(emf);


Barang brg = brgcontrol.findBarang("B0001");
brg.setNamabarang("Barangnya B0001");
try {
brgcontrol.edit(brg);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}

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());
}

3. Buatlah kelas kontrol untuk kelas Pelanggan dengan


nama PelangganController.java diatas Package
apppenjualan.control dengan cara klik kanan pada
apppenjualan.control  New  Java Class, kemudian berilah
nama PelangganController. Apabila PelangganController.java
telah terbentuk gantilah semua kodingnya dengan listing dibawah
ini :
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.Pelanggan;

45
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

public class PelangganController implements Serializable {

public PelangganController(EntityManagerFactory emf) {


this.emf = emf;
}
private EntityManagerFactory emf = null;

public EntityManager getEntityManager() {


return emf.createEntityManager();
}

public void create(Pelanggan pelanggan) throws Exception, Exception {

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();
}
}
}

public void edit(Pelanggan pelanggan) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.merge(pelanggan);
em.getTransaction().commit();
} catch (Exception ex) {
String msg = ex.getLocalizedMessage();
if (msg == null || msg.length() == 0) {
String id = pelanggan.getKodepelanggan();
if (findPelanggan(id) == null) {
throw new Exception("The pelanggan with id " + id + " no longer exists.");
}
}
throw ex;
} finally {
if (em != null) {
em.close();

46
}
}
}

public void destroy(String id) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
Pelanggan pelanggan;
try {
pelanggan = em.getReference(Pelanggan.class, id);
pelanggan.getKodepelanggan();
} catch (EntityNotFoundException enfe) {
throw new Exception("The pelanggan with id " + id + " no longer exists.", enfe);
}
em.remove(pelanggan);
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
public Pelanggan findPelanggan(String id) {
EntityManager em = getEntityManager();
try {
return em.find(Pelanggan.class, id);
} finally {
em.close();
}
}

Cara menggunakan listing diatas adalah sebagai berikut :

Tambah Data
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AppPenjualanPU");

// Entry Pelanggan
PelangganController plgcontrol = new PelangganController(emf);

Pelanggan plg = new Pelanggan();


plg.setKodepelanggan("P0001");
plg.setNamapelanggan("Pelanggan 01");
plg.setAlamat("Alamat Pelanggan");
try {
plgcontrol.create(plg);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());

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());
}

4. Buatlah kelas kontrol untuk kelas Faktur dengan nama


FakturController.java diatas Package apppenjualan.control dengan
cara klik kanan pada apppenjualan.control  New  Java Class,
kemudian berilah nama FakturController. Apabila
FakturController.java telah terbentuk gantilah semua kodingnya
dengan listing dibawah ini :

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;

public class FakturController implements Serializable {

public FakturController(EntityManagerFactory emf) {


this.emf = emf;
}
private EntityManagerFactory emf = null;

public EntityManager getEntityManager() {


return emf.createEntityManager();
}

public void create(Faktur faktur) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();

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();

} catch (Exception ex) {


if (findFaktur(faktur.getNomorFaktur()) != null) {
throw new Exception(
"Faktur " + faktur + " already exists.", ex);
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}

public void edit(Faktur faktur) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();

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();
}
}
}

public void destroy(String id) throws Exception {


EntityManager em = null;

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();
}
}
}

public List<Faktur> findFakturEntities() {


return findFakturEntities(true, -1, -1);
}

public List<Faktur> findFakturEntities


(int maxResults, int firstResult) {
return findFakturEntities
(false, maxResults, firstResult);
}

private List<Faktur> findFakturEntities(boolean all, int


maxResults, int firstResult) {
EntityManager em = getEntityManager();
try {
CriteriaQuery cq =
em.getCriteriaBuilder().createQuery();
cq.select(cq.from(Faktur.class));
Query q = em.createQuery(cq);
if (!all) {
q.setMaxResults(maxResults);
q.setFirstResult(firstResult);
}
return q.getResultList();
} finally {

51
em.close();
}
}

public Faktur findFaktur(String id) {


EntityManager em = getEntityManager();
try {
return em.find(Faktur.class, id);
} finally {
em.close();
}
}

public int getFakturCount() {


EntityManager em = getEntityManager();
try {
CriteriaQuery cq =
em.getCriteriaBuilder().createQuery();
Root<Faktur> rt = cq.from(Faktur.class);
cq.select(em.getCriteriaBuilder().count(rt));
Query q = em.createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
} finally {
em.close();
}
}

public String createNomorFaktur() {

String nomorfaktur = "F0001";


EntityManager em = null;

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);

Faktur fkr = new Faktur();


fkr.setNomorFaktur("F0002");
fkr.setTanggalFaktur(new Date());

//untuk Kode Pelanggan


fkr.setKodePelanggan(new PelangganController(emf).findPelanggan("P0001"));

//untuk faktur detail


Collection<Fakturdetail> colfkdt = new ArrayList<>();

Barang brg1 = new BarangController(emf).findBarang("B0001");


Fakturdetail fkrdt1 = new Fakturdetail();
fkrdt1.setNomorFaktur(fkr);
fkrdt1.setKodeBarang(brg1);
fkrdt1.setQty(1);
fkrdt1.setHarga(10000D);
colfkdt.add(fkrdt1);

Barang brg2 = new BarangController(emf).findBarang("B0002");


Fakturdetail fkrdt2 = new Fakturdetail();
fkrdt2.setNomorFaktur(fkr);
fkrdt2.setKodeBarang(brg2);
fkrdt2.setQty(1);
fkrdt2.setHarga(20000D);
colfkdt.add(fkrdt2);

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());

for (Fakturdetail fkrdt : fkr.getFakturdetailCollection()) {


fkrdt.setQty(4);
}

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());
}

5. Buatlah kelas kontrol untuk kelas Kwitansi dengan nama


KwitansiController.java diatas Package apppenjualan.control
dengan cara klik kanan pada apppenjualan.control  New  Java
Class, kemudian berilah nama KwitansiController. Apabila
KwitansiController.java telah terbentuk gantilah semua kodingnya
dengan listing dibawah ini :

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;

public class KwitansiController implements Serializable {

public KwitansiController(EntityManagerFactory emf) {


this.emf = emf;
}

54
private EntityManagerFactory emf = null;

public EntityManager getEntityManager() {


return emf.createEntityManager();
}

public void create(Kwitansi kwitansi) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.persist(kwitansi);
em.getTransaction().commit();
} catch (Exception ex) {
if (findKwitansi(kwitansi.getNomorKwitansi()) != null) {
throw new Exception("Kwitansi " + kwitansi + " already exists.", ex);
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}

public void edit(Kwitansi kwitansi) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.merge(kwitansi);
em.getTransaction().commit();
} catch (Exception ex) {
String msg = ex.getLocalizedMessage();
if (msg == null || msg.length() == 0) {
String id = kwitansi.getNomorKwitansi();
if (findKwitansi(id) == null) {
throw new Exception("The kwitansi with id " + id + " no longer exists.");
}
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}

public void destroy(String id) throws Exception {


EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
Kwitansi kwitansi;

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();
}
}
}

public List<Kwitansi> findKwitansiEntities() {


return findKwitansiEntities(true, -1, -1);
}

public List<Kwitansi> findKwitansiEntities(int maxResults, int firstResult) {


return findKwitansiEntities(false, maxResults, firstResult);
}

private List<Kwitansi> findKwitansiEntities(boolean all, int maxResults, int firstResult) {


EntityManager em = getEntityManager();
try {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(Kwitansi.class));
Query q = em.createQuery(cq);
if (!all) {
q.setMaxResults(maxResults);
q.setFirstResult(firstResult);
}
return q.getResultList();
} finally {
em.close();
}
}

public Kwitansi findKwitansi(String id) {


EntityManager em = getEntityManager();
try {
return em.find(Kwitansi.class, id);
} finally {
em.close();
}
}

public int getKwitansiCount() {

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();
}
}

public String createNomorKwitansi() {

String nomorkwitansi = "K0001";


EntityManager em = null;

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);

Kwitansi kwi = new Kwitansi();


kwi.setNomorKwitansi("K0001");
kwi.setNomorFaktur(new FakturController(emf).findFaktur("F0001"));
kwi.setTanggalKwitansi(new Date());

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.

Pembuatan Form Utama dan Menu


Adapun langkah pembuatannya adalah sebagai berikut

1. Buatlah Package dengan nama form di dalam Package


apppenjualan dengan melakukan klik kanan pada apppenjualan 
New  Java Package

60
Gambar 4.1 Pembuatan Package untuk Kelas Form /Tampilan

Berikanlah nama package apppenjualan.form, kemudian tekan

tombol

Gambar 4.2 Pembuatan Package untuk Kelas Kontrol

2. Buatlah Form menggunakan Jframe dengan cara mengklik kanan


pada package apppenjualan.form new  Jframe Form, dan
berikanlah nama FrmMain.

3. Pada CD terdapat direktori images, gandakan (copy) pada direktori

Gambar 4.3 Directory Src

4. Modifikasilah FrmMain dengan tampilin seperti dibawah ini :


61
Gambar 4.3 FrmMain

a. JMenuBar  name : jmnubar.

b. JMenu  name : jmnuMaster, Text : Master. Menu ini


ditempatkan sebagai bagian dari jmnubar.

 JMenuItem  name : jmniBarang, Text : Barang

 JMenuItem  name : jmniPelanggan, Text : Pelanggan.

c. JMenu  name : jmnuTransaksi, Text : Transaksi. Menu ini


ditempatkan sebagai bagian dari jmnubar.

 JMenuItem  name : jmniPenjualan, Text : Penjualan

 JMenuItem  name : jmniKwiTansi, Text : Kwitansi

d. JToolBar  name : jtoolbar. Ditempatkan pada FrmMain


(Jframe) pada bagian atas.

62
e. JButton  name : jbtnNew, Text : New, icon :
images/icon_newfile.gif

Gambar 4.4 FrmMain

f. JButton  name : jbtnSave, Text : Save, Icon :


images/icon_save.gif

g. JButton  name : jbtnDelete, Text : Delete, Icon :


images/icon_del.gif

h. JButton  name : jbtnPrint, Text : Print, Icon : images/print.gif

i. JDesktopPane  name : jdesktoppane

5. Buatlah kelas interface dengan nama NavigatorFormInt.java dengan


mengklik kanan pada apppenjualan.form  New  Java Interface.
Kemudian isilah program seperti yang dibawah ini :
package apppenjualan.form;
public interface NavigatorFormInt {
public void clearData();
public void newData();
public void saveData();
public void setData();

63
public void delete();
public void findData();
public void showData();
public void printData();
}

6. Tambahkan program pemanggilan NavigatorFormInt dan method


showForm pada source FrmMain diatas tanda kurung yang ada
dipaling bawah.

NavigatorFormInt navformint ;

private void showForm(Object obj) {


JInternalFrame jf = null;
//jika objek merupakan JInternalFrame
if (obj instanceof JInternalFrame) {
jf = (JInternalFrame) obj;
//Apabila belum pernah ditampilkan maka ditambahkan pada
//jdesktoppane
if (!jf.isVisible()) {
jdesktoppane.add(jf);
}
//tampilkan objek JinternalFrame
jf.setVisible(true);
try {
jf.setMaximum(true);
jf.setSelected(true);
} catch (java.beans.PropertyVetoException e) {
e.printStackTrace();
}
}
}

7. Tambahkan program dibawah ini dengan klik kanan pada JbtnNew 


Events  actionPerformed
private void jbtnNewActionPerformed(java.awt.event.ActionEvent evt) {
navformint = (NavigatorFormInt)
jdesktoppane.getSelectedFrame();
navformint.newData();
}

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");
}

9. Tambahkan program dibawah ini dengan klik kanan pada JbtnDelete


 Events  actionPerformed
private void jbtnDeleteActionPerformed(java.awt.event.ActionEvent evt) {
int jawaban = JOptionPane.showConfirmDialog
(null,
"Delete This Data ?",
"Delete ? ",
JOptionPane.YES_NO_OPTION);
if (jawaban == JOptionPane.YES_OPTION ) {
navformint = (NavigatorFormInt)
jdesktoppane.getSelectedFrame();
navformint.delete();
}
}

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();
}

11. Untuk menampilkan form FrmMain diatas tambahkan new


FrmMain().setVisible(true) pada AppPenjualan.java, seperti dibawah
ini :
package apppenjualan;

import apppenjualan.form.FrmMain;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

65
public class AppPenjualan {

public static EntityManagerFactory emf =


Persistence.createEntityManagerFactory
("AppPenjualanPU");
public static void main(String[] args) {
new FrmMain().setVisible(true);
}
}

66
BAB V

PEMBUATAN FORM
MASTER

Pada Bab II telah menyinggung perancangan database dalam bentuk


kelas diagram penjualan seperti pada gambar dibawah ini :

Gambar 5.1 Kelas Diagram Penjualan

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.

Data master atau Master Data adalah data yang


dibuat terpusat dan tersedia untuk semua aplikasi dan semua pengguna
resmi, master data juga memiliki aspek organisasi karena informasi yang
diatur dalam pandangan yang ditugaskan untuk elemen organisasi.

Dalam buku ini akan diterangkan bagaimana membuat Form tampilan


untuk data master Barang dan Pelanggan. Adapun langkah-langkah
pembuatannya adalah sebagai berikut :

1. Buatlah Form Barang dengan menggunakan JinternalFrame dengan


melakukan klik kanan pada package apppenjualan.form  new 
JInternalFrame (Jika tidak ada pilihlah dari Other  Swing Gui Form
 JinternalFrame). Dan berikanlah nama FrmBarang.

Gambar 5.2 New JInternalFrame

68
2. Desainlah FrmBarang seperti dibawah ini :

Gambar 5.3 Form Barang

a. JInternalFrame, Name : FrmBarang, Title : Master Barang, Form


Size Policy : Generate Resize Code

b. JLabel, Name : jlblHeader, Text : Barang, Font : Tahoma 24 Bold

c. JLabel, Name : jlblKodeBarang, Text : Kode Barang

d. JTextField, Name : jtxtKodeBarang, Text : <kosong>

e. JLabel, Name : jlblNamaBarang, Text : Nama Barang

f. JTextField, Name : jtxtNamaBarang, Text : <kosong>

g. JLabel, Name : jlblStok, Text : Stok

h. JTextField, Name : jtxtStok, Text : 0

i. JLabel, Name : jlblHargaStandard, Text : 0

j. JTextField, Name : jtxtHargaStandard, Text : 0

69
3. Tekanlah tombol untuk melakukan penambahan program
pada form FrmBarang

4. Pada baris 11, tambahkan implements NavigatorFormInt

Gambar 5.4 Penambahan Implements pada FrmBarang

Pada sebelah kiri akan muncul gambar lampu bohlam warna kuning,
kliklah, kemudian pilihlah implements All Abstract Methods.

Gambar 5.5 Implement All Abstract methods

Hasil klik tersebut akan menambahkan method pada source FrmBarang,


seperti berikut :
@Override
public void clearData() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void newData() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void saveData() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void setData() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void delete() {
throw new UnsupportedOperationException("Not supported yet.");
}

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.");
}

5. Pada baris ke 19, tambahkan instan brgctrl dari kelas


BarangController, dan brg dari kelas Barang.
BarangController brgctrl = new
BarangController(AppPenjualan.emf);
Barang brg = new Barang();

Gambar 5.6 Penambahan Controller dan Kelas Barang Pada FrmBarang

6. Rubahlah method clearData() menjadi


@Override
public void clearData() {
jtxtNamaBarang.setText("");
jtxtStok.setText("0");
jtxtHargaStandard.setText("0");
}

7. Rubahlah method newData() menjadi


@Override
public void newData() {
jtxtKodeBarang.setText("");
clearData();
jtxtKodeBarang.requestFocus();
}

8. Rubahlah method saveDate() menjadi

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");
}
}

9. Rubahlah method setData() menjadi


@Override
public void setData() {
brg.setKodebarang(jtxtKodeBarang.getText());
brg.setNamabarang(jtxtNamaBarang.getText());
try{
brg.setStok(Integer.parseInt(jtxtStok.getText()));
}catch(Exception e) {
brg.setStok(0);
}
try{
brg.setHargaStandard(
Double.parseDouble(jtxtHargaStandard.getText()));
}catch(Exception e) {
brg.setHargaStandard(0D);
}
}

10. Rubahlah method delete() menjadi :


@Override
public void delete() {
72
try {
brgctrl.destroy(jtxtKodeBarang.getText());
JOptionPane.showMessageDialog(null, "Penghapusan Selesai");
} catch (Exception ex) {
JOptionPane.showMessageDialog( null,
"Penghapusan tidak bisa karena " + ex.getMessage());
}
clearData();
}

11. Klik kanan pada jtxtKodeBarang, pilihlah Events  Action 


KeyPressed

Gambar 5.7 Penambahan KeyPressed pada jtxtKodeBarang

Tambahkan program didalamnya yang berfungsi untuk melakukan


pencarian setelah ada penekanan ENTER pada field jtxtKodeBarang
seperti dibawah ini :
private void jtxtKodeBarangKeyPressed
(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
findData();
}
}

Setelah pembuatan Form FrmBarang telah selesai dilakukan, maka


langkah berikutnya adalah menggabungkan FrmBarang dengan FrmMain
agar FrmBarang dapat digunakan. Adapun langkah-langkah yang
dilakukan adalah sebagai berikut :

73
1. Bukalah FrmMain untuk memulai

2. Kilk pada Tab Source dan tambahkan instan frmbarang dari kelas di
baris ke 16 :

FrmBarang frmbarang;

Gambar 5.8 Instan FrmBarang

3. Kembali ke ke Tab Design, kemudian pilihlah menu Master  Barang,


kemudian klik kanan pada jmniBarang  Events  Actions 
ActionPerformed.

Gambar 5.9 Menambahkah ActionPerfomed pada menu jmniBarang

Kemudian tambahkan program didalamnnya seperti dibawah ini


private void jmniBarangActionPerformed
(java.awt.event.ActionEvent evt) {
if (frmbarang == null) {
frmbarang = new FrmBarang();
}
showForm(frmbarang);
}

4. Jalankan, dengan menekan tombol Run

74
Gambar 5.8 Instan FrmBarang

5. Lakukan hal sama terhadap pembuatan Form Pelanggan

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 :

1. Buatlah Form dengan menggunakan Jinternal Frame dengan


melakukan klik kanan pada AppPenjualan.Form  New 
JinterlnalFrame. Dan berilah nama FrmPenjualan.

2. Desainlah tampilan seperti gambar dibawah ini :

76
Gambar 6.1 Form Penjualan

a. JInternalFrame, Name : FrmPenjualan, Title : Penjualan

b. JLable, Name : jlblHeader, Text : Penjualan, Font : Tahoma 24


Bold

c. JLable, Name : JlblFaktur, Text : NomorFaktur

d. JTextField, Name : jtxtNomorFaktur, Text : <kosong>

e. JLable, Name : jlblTanggal, Text : Tanggal

f. JTextFormattedField, Name : jfmtTanggalFaktur, Edittable :


false, Text : 01/01/2013, FormatterFactory : dd/MM/YYYY

77
Gambar 6.2 FormatterFactory jfmtTanggalFaktur

g. JLable, Name : jlblKodePelanggan, Text : Pelanggan

h. JTextField, Name : jtxtKodePelanggan, Text : <Kosong>

i. JTextField, Name : jtxtNamaPelanggan, Text : <Kosong>,


Editable : false

j. Jtable, Name : jtblFaktur

Dengan modifikasi : Klik kanan pada jtblFaktur  Table


Contents

78
Gambar 6.3 jtblFaktur : Table Contents

k. JLable, Name : jlblGrandTotal, Text : Grand Total

l. JTextField, Name : jtxtGrandTotal, Text : <Kosong>

3. Tambahkan implements NavigatorFormInt pada source FrmPenjualan


dan tekan lampu kuning untuk menambah semua implements (add
all implements)

Gambar 6.4 implements NavigatorFormInt pada FrmPenjualan

4. Tambahkan instant dibawah tulisan public class FrmPenjualan


dengan program dibawah ini :
//model tanggal co: 01/01/2013
79
DateFormat dfddmmyyyy = new SimpleDateFormat("dd/MM/yyyy");

DecimalFormat dftitik = new DecimalFormat("#,###");


DefaultTableModel tmodelfaktur; //operasional tabel
Object[] obj; //baris tabel

Faktur f = new Faktur();


FakturController fctrl = new FakturController(AppPenjualan.emf);

Pelanggan plg = new Pelanggan();


PelangganController plgctrl = new PelangganController(AppPenjualan.emf);

BarangController bctrl = new BarangController(AppPenjualan.emf);

5. Buatlah method clearTable, yang berfungsi sebagai menghapus baris


pada tabel jtblFaktur
private void clearTable() {
int row = tmodelfaktur.getRowCount();
while(row > 0){
row--;
tmodelfaktur.removeRow(row);
}
}

6. Pada constructor FrmPenjualan() tambah program dibawah ini :


public FrmPenjualan() {
initComponents();

jfmtTanggalFaktur.setText(dfddmmyyyy.format(new Date()));
tmodelfaktur = (DefaultTableModel) jtblFaktur.getModel();
obj = new Object[jtblFaktur.getRowCount()];
clearTable();
tmodelfaktur.addRow(obj);
}

7. Rubah method clearData() dengan program dibawah ini :


@Override
public void clearData() {
jfmtTanggalFaktur.setText(dfddmmyyyy.format(new Date()));
jtxtKodePelanggan.setText("");
jtxtNamaPelanggan.setText("");
clearTable();
}

8. Rubahlah method newData() dengan program dibawah ini :


80
@Override
public void newData() {
jtxtNomorFaktur.setText("");
clearData();
tmodelfaktur.addRow(obj);
jtxtKodePelanggan.requestFocus();
}

9. Rubahlah method saveData() dengan program dibawah ini :


@Override
public void saveData() {
Faktur ffind = fctrl.findFaktur(jtxtNomorFaktur.getText());
if (ffind == null){
f = new Faktur();
f.setNomorFaktur(fctrl.createNomorFaktur());
}else{
f = ffind;
}
setData();
Collection<Fakturdetail> colfkdt =
new ArrayList<Fakturdetail>();
for (int i = 0; i< tmodelfaktur.getRowCount(); i++) {
if (tmodelfaktur.getValueAt(i, 1) != null) {
Fakturdetail fdetail = new Fakturdetail();
fdetail.setNomorFaktur(f);
if (tmodelfaktur.getValueAt(i, 0) != null) {
fdetail.setId(Integer.parseInt(
tmodelfaktur.getValueAt(i, 0)+""));
}
setDataDetail(fdetail, i);
colfkdt.add(fdetail);
}
}
f.setFakturdetailCollection(colfkdt);

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();

10. Rubahlah method setData() dengan program dibawah ini :


@Override
public void setData() {
plg = plgctrl.findPelanggan(jtxtKodePelanggan.getText());
if (plg == null) {
jtxtKodePelanggan.setText("");
jtxtNamaPelanggan.setText("");
}
f.setKodePelanggan(plg);
try {
f.setTanggalFaktur
(dfddmmyyyy.parse(jfmtTanggalFaktur.getText()));
} catch (ParseException ex) {}
}

11. Rubahlah methode delete() dengan program dibawah ini :


@Override
public void delete() {
try {
fctrl.destroy(jtxtNomorFaktur.getText());
JOptionPane.showMessageDialog(null, "Penghapusan Selesai");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,
"Penghapusan tidak bisa karena " + ex.getMessage());
}
clearData();
}

12. Rubahlah method findData() dengan program dibawah ini :


@Override
public void findData() {
f = fctrl.findFaktur(jtxtNomorFaktur.getText());
showData();
}

13. Rubahlah method showData() dengan program dibawah ini :


@Override
public void showData() {

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);
}
}

14. Tambahkan method setDataDetail dan tambahkan program


didalamnya seperti dibawah ini :
private void setDataDetail(Fakturdetail fdetail, int i){
Barang b = bctrl.findBarang(tmodelfaktur.getValueAt(i, 1)+"");
fdetail.setKodeBarang(b);
double harga = 0;
try{
harga = Double.parseDouble(
tmodelfaktur.getValueAt(i, 3)+"");
}catch (Exception e){}
fdetail.setHarga(harga);
int qty = 0;
try{
qty = Integer.parseInt(tmodelfaktur.getValueAt(i, 4)+"");
}catch(Exception e){}
83
fdetail.setQty(qty);
}

15. Tambahkan method hitungTotal() dan tambahkan program


didalammnya seperti dibawah ini :
private void setDataDetail(Fakturdetail fdetail, int i){
Barang b = bctrl.findBarang(tmodelfaktur.getValueAt(i, 1)+"");
fdetail.setKodeBarang(b);
double harga = 0;
try{
harga = Double.parseDouble(tmodelfaktur.getValueAt(i, 3)+"");
}catch (Exception e){}
fdetail.setHarga(harga);

int qty = 0;
try{
qty = Integer.parseInt(tmodelfaktur.getValueAt(i, 4)+"");
}catch(Exception e){}
fdetail.setQty(qty);
}

16. Tambahkan fungsi enter pada jtxtKodePelanggan dengan


melakukan klik kanan pada jtxtKodePelanggan  Events  Key 
KeyPressed. Dan tambahkan program didalamnya :
private void jtxtKodePelangganKeyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
plg = plgctrl.findPelanggan(jtxtKodePelanggan.getText());
if (plg == null) {
JOptionPane.showMessageDialog(null,
jtxtKodePelanggan.getText() +
" Tidak Diketemukan ");
jtxtKodePelanggan.setText("");
jtxtNamaPelanggan.setText("");
jtxtKodePelanggan.requestFocus();
//cursor kembali ke kode
}else{
jtxtKodePelanggan.setText(plg.getKodepelanggan());
jtxtNamaPelanggan.setText(
plg.getNamapelanggan());
jtblFaktur.requestFocus();
}
}
}

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();
}
}

18. Tambahkan program pada jtblFaktur dengan melakukan klik kanan


pada jtblFaktur  Events  PropertyChange  PropertyChange.
private void jtblFakturPropertyChange
(java.beans.PropertyChangeEvent evt) {
//ambil baris dan kolom yang terseleksi
int row = jtblFaktur.getSelectedRow();
int col = jtblFaktur.getSelectedColumn();

if ( row > -1) {


//jika ada yang terseleksi
if (col == 1) {
//jika kode barang (col 1) berubah
Barang brg = bctrl.findBarang
(tmodelfaktur.getValueAt(row, col)+"");
if (brg != null ) {
//jika kode barang (col 1) ketemu
tmodelfaktur.setValueAt
(brg.getKodebarang(), row, col);
tmodelfaktur.setValueAt
(brg.getNamabarang(), row, col + 1);
tmodelfaktur.setValueAt
(brg.getHargaStandard(), row, col + 2);
jtblFaktur.changeSelection(row, col+3, false, false);
}else {
//jika kode barang (col 1) tidak ketemu
tmodelfaktur.setValueAt("", row, col + 1);
tmodelfaktur.setValueAt(0, row, col + 2);
}
}

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();

Setelah pembuatan Form FrmPenjualan telah selesai dilakukan, maka


langkah berikutnya adalah menggabungkan FrmPenjualan dengan
FrmMain agar FrmPenjualan dapat digunakan. Adapun langkah-langkah
yang dilakukan adalah sebagai berikut :

1. Bukalah FrmMain untuk memulai

2. Kilk pada Tab Source dan tambahkan instan frmpenjualan dari kelas
di baris ke 18 :

FrmPenjualan frmpenjualan;

Gambar 6.5 Instan FrmPenjualan

3. Kembali ke ke Tab Design, kemudian pilihlah menu Transaksi


Penjualan, kemudian klik kanan pada jmniPenjualan  Events 
Actions  ActionPerformed.

86
Gambar 6.6 Menambahkah ActionPerfomed pada menu jmniPenjualan

4. Kemudian tambahkan program didalamnnya seperti dibawah ini:


private void jmniPenjualanActionPerformed
(java.awt.event.ActionEvent evt) {
if (frmpenjualan == null) {
frmpenjualan = new FrmPenjualan();
}
showForm(frmpenjualan);
}

Jalankan, dengan menekan tombol Run dan pilihlah menu


transaksi  Penjualan

Gambar 6.7 Form Penjualan

87
BAB VII

PEMBUATAN FORM
KWITANSI

Setelah anda berhasil membuat Form Penjualan langkah selanjutnya


adalah kepada pembuatan Form Kwitansi. Form Kwitansi dibuat sebagai
Form input data kwitansi berdasarkan hasil inputan penjualan. Adapaun
cara pembuatannya adalah sebagai berikut :

1. Buatlah Form dengan menggunakan Jinternal Frame dengan


melakukan klik kanan pada AppPenjualan.Form  New 
JinterlnalFrame. Dan berilah nama Frmkwitansi.

2. Desain Form Kwitansi seperti pada gambar dibawah ini :

88
Gambar 7.1 Desain Form Kwitansi

a. JInternalFrame, Name : FrmKwitansi, Title : Kwitansi

b. Jlabel, Name : jlblHeader, Text : Kwitansi, Font : Tahoma 24 Bold

c. JLabel, Name : jlblNomorKwitansi, Text : Nomor Kwitansi, Text :


<kosong>

d. JTextField, Name : jtxtNomorKwitansi, Text : <kosong>

e. JLabel, Name : jlblTanggalKwitansi, Text : Tanggal Kwitansi

f. JTextFormattedField, Name : jfmtTanggalKwitansi, Edittable :


false, Text : 01/01/2013, FormatterFactory : dd/MM/YYYY

g. JLabel, Name : jlblNomorFaktur, Text : Nomor Faktur

h. JTextField, Name : jtxtNomorFaktur, Text : <kosong>

i. Jlabel, Name : jlblTanggalFaktur, Text : Tanggal Faktur

j. JTextFormattedField, Name : jfmtTanggalFaktur, Edittable : false,


Text : 01/01/2013, FormatterFactory : dd/MM/YYYY

k. Jlabel, Name : jlblKodePelanggan, Text : Kode Pelanggan


89
l. JTextField, Name : jtxtKodePelanggan, Text : <kosong>, editable :
False

m. JTextField, Name : jtxtNamaPelanggan, Text : <kosong>, Editable :


false

n. JTable, Name : jtblFaktur

Dengan modifikasi : Klik kanan pada jtblFaktur  Table Contents

Gambar 7.2 JtblFaktur – Kwitansi : Table Contents

o. JLabel, Name : jlblGrandTotal, Text : Grand Total

p. JTextField, Name : jtxtGrandTotal, Text : <kosong>

90
3. Tambahkan implements NavigatorFormInt pada source FrmPenjualan
dan tekan lampu kuning untuk menambah semua implements (add
all implements)

Gambar 7.3 implements NavigatorFormInt pada FrmKwitansi

4. Tambahkan instant dibawah tulisan public class FrmKwitansi dengan


program dibawah ini :
DateFormat dfddmmyyyy = new SimpleDateFormat("dd/MM/yyyy"); //model tanggal co:
01/01/2013

DecimalFormat dftitik = new DecimalFormat("#,###");


DefaultTableModel tmodelfaktur; //operasional tabel
Object[] obj; //baris tabel

Faktur f = new Faktur();


FakturController fctrl = new
FakturController(AppPenjualan.emf);

Kwitansi k = new Kwitansi();


KwitansiController kctrl = new
KwitansiController(AppPenjualan.emf);

Pelanggan plg = new Pelanggan();


PelangganController plgctrl = new
PelangganController(AppPenjualan.emf);

BarangController bctrl = new


BarangController(AppPenjualan.emf);

5. Pada konstruktor FrmKwitansi() dengan tambahkan program


dibawah ini :
public FrmKwitansi() {
initComponents();
jfmtTanggalKwitansi.setText(
dfddmmyyyy.format(new Date()));
tmodelfaktur = (DefaultTableModel)
jtblFaktur.getModel();
obj = new Object[jtblFaktur.getRowCount()];

clearTable();
}

91
6. Buatlah method clearTable() seperti dibawah ini :
private void clearTable() {
int row = tmodelfaktur.getRowCount();
while(row > 0){
row--;
tmodelfaktur.removeRow(row);
}
}

7. Buatlah method checkDataFaktur() yang berfungsi untuk melakukan


pengecekan data Faktur, apakah sudah atau belum, seperti dibawah
ini :
private void checkDataFaktur() {
Faktur ffind = fctrl.findFaktur(jtxtNomorFaktur.getText());
boolean cekfaktur = kctrl.checkNomorFaktur(ffind);
if (!cekfaktur) {
f = ffind;
showDataFaktur();
}else {
JOptionPane.showMessageDialog(null, "Nomor Faktur : " +
jtxtNomorFaktur.getText() + " Sudah Pernah Diproses");
clearData();
}
}

8. Buatlah method findDataFaktur() yang berfungsi untuk melakukan


pencarian data faktur, seperti di bawah ini :
private void findDataFaktur() {
f = fctrl.findFaktur(jtxtNomorFaktur.getText());
showDataFaktur();
}

9. Buatlah method showDataFaktur() untuk menampilkan data faktur


pada form
private void showDataFaktur() {
clearData();
if (f != null) {
jtxtNomorFaktur.setText(f.getNomorFaktur());
jfmtTanggalFaktur.setText(
dfddmmyyyy.format(f.getTanggalFaktur())
);

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();
}
}

10. Buatlah method hitungTotal() seperti dibawah ini :


public void hitungTotal() {
double grandtotal = 0;
try{
for (int i = 0; i < tmodelfaktur.getRowCount(); i++) {
double total = 0;
total = Double.parseDouble(
tmodelfaktur.getValueAt(i, 3)+ "") *
Double.parseDouble(
tmodelfaktur.getValueAt(i, 4)+"");
tmodelfaktur.setValueAt(total, i, 5);
grandtotal += total;
}
}catch(Exception e) {}

jtxtGrandTotal.setText(dftitik.format(grandtotal));
}

11. Tambahkan program event Enter pada jtxtNomorFaktur dengan cara


klik kanan pada jtxtNomorFaktur  Event  Key  KeyPressed,
seperti dibawah ini

93
private void jtxtNomorFakturKeyPressed(
java.awt.event.KeyEvent evt) {

if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
jtxtNomorKwitansi.setText("");
jfmtTanggalKwitansi.setText(
dfddmmyyyy.format(new Date()));
checkDataFaktur();
}
}

12. Tambahkan program event Enter pada jtxtNomorKwitansi dengan


cara klik kanan pada jtxtNomorKwitansi  Events  New 
KeyPressed
private void jtxtNomorKwitansiKeyPressed(
java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
findData();
}
}

13. Rubahlah method clearData seperti dibawah ini :


@Override
public void clearData() {
jtxtNomorFaktur.setText("");
jfmtTanggalFaktur.setText("");
jtxtKodePelanggan.setText("");
jtxtNamaPelanggan.setText("");
clearTable();
}

14. Rubahlah method newData() seperti dibawah ini :


@Override
public void newData() {
jtxtNomorKwitansi.setText("");
jfmtTanggalKwitansi.setText(dfddmmyyyy.format(new Date()));
clearData();
}

15. Rubah method saveData() seperti dibawah ini :


@Override
public void saveData() {
Faktur ffind = fctrl.findFaktur(jtxtNomorFaktur.getText());
if (ffind == null){
JOptionPane.showMessageDialog(

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());
}
}
}
}

16. Rubahlah method setData() dengan program dibawah ini :


@Override
public void setData() {
try {
k.setTanggalKwitansi(
dfddmmyyyy.parse(jfmtTanggalKwitansi.getText()));
} catch (ParseException ex) {}
k.setNomorFaktur(f);
}

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();
}

18. Rubahlah method findData() seperti program dibawah ini :


@Override
public void findData() {
clearData();

Kwitansi kfind = kctrl.findKwitansi(


jtxtNomorKwitansi.getText());
if (kfind == null) {
newData();
}else{
k = kfind;
showData();
}
}

19. Rubahlah method showData seperti program dibawah ini :


@Override
public void showData() {
if (k == null) {
newData();
}else{
jtxtNomorKwitansi.setText(k.getNomorKwitansi());
jfmtTanggalKwitansi.setText(
dfddmmyyyy.format(k.getTanggalKwitansi()));
jtxtNomorFaktur.setText(
k.getNomorFaktur().getNomorFaktur());

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 :

1. Bukalah FrmMain untuk memulai

2. Kilk pada Tab Source dan tambahkan instan frmpenjualan dari kelas
di baris ke 19 :

FrmKwitansi frmkwitansi;

Gambar 7.4 Instan FrmKwitansi

3. Kembali ke ke Tab Design, kemudian pilihlah menu Transaksi


Kwitansi, kemudian klik kanan pada jmniPenjualan  Events 
Actions  ActionPerformed.

Gambar 7.5 Menambahkah ActionPerfomed pada menu jmniKwitansi

Kemudian tambahkan program didalamnnya seperti dibawah ini:


private void jmniPenjualanActionPerformed
(java.awt.event.ActionEvent evt) {
if (frmpenjualan == null) {
97
frmpenjualan = new FrmPenjualan();
}
showForm(frmpenjualan);
}

4. Jalankan, dengan menekan tombol Run dan pilihlah menu


transaksi  Kwitansi

Gambar 7.5 Form Kwitansi

98
BAB VIII

INSTALASI IREPORT
PADA NETBEANS 7.2

Dalam pembuatan aplikasi salah satu yang dibutuhkan sebagai hasil


akhir adalah membuat laporan dari data yang diolah. Banyak sekali
perangkat bantu yang dapat digunakan dari perangkat yang berbayar
maupun perangkat bantu yang berlisensi terbuka atau yang sering
disebut dengan open source.

Dari sekian banyak perangkat bantu yang berlisensi terbuka terdapat


salah satu perangkat bantu terfavorit untuk para pengembang aplikasi,
yaitu pustaka JasperReport dan iReport yang berfungsi sebagai
perangkat bantu desain dengan menggunakan pustaka JasperReport.

Dalam penggunaannya JasperReport dan iReport seringkali digunakan


oleh pengembang aplikasi berbasis Java, tetapi banyak sekali
pengembang aplikasi berbasis Web seperti pengembang aplikasi yang

99
menggunakan bahasa pemrograman PHP turut menggunakannya dalam
pembuatan laporan.

JasperReport menggunakan XML sebagai dasar dalam melakukan desain,


sedangkan hasil dari desain tersebut dapat disimpan dalam bentuk
HTML, PDF, Excell, Word, dan OpenOffice. Contoh hasil laporan yang
dapat dihasilkan dengan menggunakan pustaka JasperReport seperti
pada gambar 8.1

Gambar 8.1. Hasil laporan Dengan menggunakan JasperReport

Mengapa IReport yang kita butuhkan dalam melakukan rancangan


desain laporan ?. Secara garis besar IReport mempermudah dalam
melakukan pendesainan laporan, sehingga JasperRerport dapat
mengeksekusi hasil desain laporan yang berupa auto generate XML dan
dijalankan pada mesin JAVA. Contoh tampilan dari perangkat bantu
desain IReport sperti pada gambar 8.2 sebagai berikut :

100
Gambar 8.2. Layar Desain IReport

Sebelum melakukan pembuatan desain menggunakan perangkat bantu


iReport, alangkah baiknya kita mengerti cara kerja atau siklushidup (life
cycle) dari iReport tersebut. Pada saat melakukan desain laporan
menggunakan iReport, maka saat melakukan penyimpanan iReport akan
membentuk file JRXML yang menggunakan format dokumen XML yang
berisikan definisi dari tampilan laporan. Sebelum report dijalankan,
iReport akan melakukan kompilasi JRXML kedalam objek binari yang
disebut dengan Jasper File (.jasper). Objek jasper tersebut yang
didistribusikan sebagai file laporan pada aplikasi. iReport juga dapat
dikonfigurasi sesuai dengan kebutuhan untuk penggunaan Data dan
melakukan tes dari hasil desain. Untuk lebih jelasnya seperti pada
gambar 8.3 dibawah ini.

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 :

1. Pastikan sambungan INTERNET terhubung.

2. Ekstrak iReport-5.0.0-plugin.zip pada MyDocument

3. Bukalah NetBeans 7.2

4. Pilihlah menu Tool pada Netbeans, kemudian pilih Plugins

102
Gambar 8.4. NetBeans : Tool – PlugIn

5. Pilih Tab Downloaded pada tampilan PlugIns, kemudian masukkan


semua file ekstraksi kepada dalam plugin. Langkah berikutnya adalah
tekan tombol .

103
Gambar 8.5. Tab Downloaded Plugins

Catatan : apabila muncul seperti gambar 8.6 pilih tombol

pembatalan , kemudian tekan tombol kembali.

104
Gambar 8.6. Update Plugins – PILIH CANCEL

6. Pilih tombol

105
Gambar 8.7. Pluggin Intalled

7. Centanglah I Accept the terms in all of the license agreementsi,


kemudian tekan tombol

106
Gambar 8.8. Proses akhir instalasi

8. NetBeans akan melakukan proses unduh (download) hingga akhir

107
Gambar 8.9. Proses penguduhan plugin

9. Tekan tombol

108
Gambar 8.10 Tampilan Peringatan Instalasi

10. Biarkanlah proses instalasi berlangsung dan tekanlah tombol Finish


untuk mengakhirinya.

Anda telah berhasil melakukan instalasi iReport pada NetBeans.

109
BAB IX

MEMBUAT LAPORAN
MASTER

Setelah melakukan instalasi iReport maka kita dapat melakukan


pembuatan laporan menggunakan iReport. Tahap pertama adalah kita
membuat laporan master bahan dalam bentuk.

Adapun langkah pertama dalam pembuatan laporan adalah membuat


direktori pada projek AppPenjualan, sebagai berikut :

1. Tambahkan direktori report pada projek AppPenjualan. Dengan cara


klik kanan pada tab File, pilih root aplikasi AppPenjualan  New 
Other

110
Gambar 9. Other

2. Setelah tampilan Form New File Muncul pilihlah menu Other 

Folder, kemudian tekan tombol dan berilah nama folder


dengan nama report.

111
Gambar 9.2 Membuat direktori atau folder

Gambar 9.3 Nama Folder

3. Tekan tombol untuk mengakhir pembuatan direktori


report.

112
Langkah kedua adalah membuat laporan Data Barang pada direktori
report. Adapun langkah-langkahnya adalah sebagai berikut :

1. Klik kanan pada direkrori report  New  Report Wizard. Apabila


Report Wizard tidak terdapat pada menu pilihlah Other  Report 
Report Wizard

2. Pilihlah Layout Cherry, kemudian tekan tombol

Gambar 9.4 iReport Layout

3. Berilah nama Barang.jrxml pada iReport, kemudian tekan

113
Gambar 9.5 Nama dan lokasi laporan : Barang.jrxml

4. Pada layar Query tekan tombol

Gambar 9.6 Query iReport

114
Catatan :

-Apabila connection penjualan ada maka buatlah koneksi dengan

menekan tombol

-Pilihlah Database JDBC connection tekan tombol

Gambar 9.6.1 Datasource

115
- Isilah konfigurasi seperti pada gambar di bawah :

Gambar 9.6.2 Konfigurasi JDBC Connection

-Tekan tombol untuk mengakhiri konfigurasi atau menekan

tombol untuk mengecek koneksi tersebut.

5. Tekan dua kali (double click) pada tabel Barang sehingga tabel barang

muncul pada kanan layar, kemudian tekan tombol

116
Gambar 9.6 Pilihan Tabel Barang

6. Tekan tombol

Gambar 9.7 iReport : Query Barang

117
7. Tekan tombol untuk mengambil keselurhan Field yang telah
diambil

Gambar 9.8 iReport : Mengambil Semua Field

Hasil yang didapatkan adalah semua field yang ada di sebelah kiri
berpindah ke sebelah kanan seperti pada gambar 9.9. Langkah

selanjutnya tekan tombol .

118
Gambar 9.9 iReport : Semua Field pada posisi sebelah kanan

8. Pada tampilan Group tekan tombol untuk melanjutkan


desain tampilan.

119
Gambar 9.10 iReport : Group by

9. Tekan tombol sebagai akhir pembuatan laporan dan


akan menghasilkan desai laporan Barang dengan template Cherry

Gambar 9.11 iReport : Group by

120
10. Rubahlah desain laporan seperti dibawah ini (gunakan klik dua kali
pada objek), sebagai berikut :

Gambar 9.11 iReport : Group by

11. Tekan Tombol dan pastikan iReport menampilkan data


Barang

Gambar 9.12 iReport : Hasil Laporan Barang

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 :

1. Gandakan (copy) pada direktori <MyDocument> \NetBeansProjects\


AppPenjualan\lib.

2. Masukkanlah pustaka tersebut ke dalam projek AppPenjualan


dengan langakah-langkah sebagai berikut :

- Klik kanan pada projek AppPenjualan  Properties

- Pilihlah categories  Libraries

Gambar 9.13 Properties -Libraries

122
- Tambahkan semua pustaka iReport dengan menekan tombol

dan pastikan pada direktori <MyDocuments>\


NetBeans\AppPenjualan\lib

Gambar 9.14 Tambah Pustaka

- Tambahkan semua pustaka iReport ke dalamnya dan tekan

tombol

123
Gambar 9.15 Menambahkan pustaka iReport

3. Tekan tombol untuk mengkahirinya

Gambar 9.16 Menambahkan pustaka iReport : tekan OK

124
Setelah berhasil melewati langkah-langkah diatas, maka kita memasuki
kelangkah berikutnya, yaitu membuat program untuk laporan
Barang.jrxml dengan langkah-langkah sebagai berikut :

1. Buka Form FrmBarang dan klik pada tab

2. Rubahlah method printData() seperti di bawah ini :


@Override
public void printData() {
EntityManager em = null;

try {
em = AppPenjualan.emf.createEntityManager();
em.getTransaction().begin();
Connection connect = em.unwrap(Connection.class);

File file = new File("");

String sourcefilename = file.getAbsolutePath()


+ "\\report\\Barang.jasper";

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();
}
}
}

3. Jalankan projek dengan menekan tombol run

4. Plihlah menu Master  Barang

125
5. Pilihlah tombol Print , dan program akan menampilkan

Gambar 9.17 Hasil Laporan Barang

126
BAB X

MEMBUAT LAPORAN
PENJUALAN

Membuat laporan penjualan sama dengan pembuatan laporan Barang


perbedaannya terdapat parameter dan penggunaan tabel yang lebih dari
satu tabel, yaitu : faktur, fakturdetail, pelanggan, dan barang.

Adapun langkah-langkah pembuatan laporan penjualan adalah sebagai


berikut :

1. Klik kanan pada direkrori report  New  Report Wizard. Apabila


Report Wizard tidak terdapat pada menu pilihlah Other  Report 
Report Wizard

2. Pilihlah Layout Cherry, kemudian tekan tombol

127
Gambar 10.1 iReport Layout

3. Berilah nama Penjualan.jrxml pada iReport, kemudian tekan

Gambar 10.2 Nama dan lokasi laporan : Penjualan.jrxml

128
4. Pada layar Query tekan tombol

Gambar 10.3 Query iReport

5. Tekan dua kali (double click) pada tabel faktur, fakturdetail,


pelanggan, dan barang sehingga seluruh tabel muncul pada kanan

layar, kemudian tekan tombol

129
Gambar 10.4 Pilihan Tabel Barang

6. Klik kanan pada garis pelanggan ke faktur kemudian tekan Edit

130
Gambar 10.5 Edit Relasi Pelanggan  Faktur

7. Centang All Rows from Faktur dan tekan tombol dan

tombol di tampilan sebelumnya

131
Gambar 10.6 Join Edit

8. Hasil yang didapat seperti pada gambar 10.7, kemudian tekan

tombol

Gambar 10.7 Query Penjualan

132
9. Tekan tombol untuk mengambil keselurhan Field yang telah
diambil

Gambar 10.8 iReport : Mengambil Semua Field

Hasil yang didapatkan adalah semua field yang ada di sebelah kiri
berpindah ke sebelah kanan seperti pada gambar 9.9. Langkah

selanjutnya tekan tombol .

Gambar 10.9 iReport : Semua Field pada posisi sebelah kanan

133
10. Pada tampilan Group pilih faktu_NomorFaktur pada group 1,

kemudian tekan tombol untuk melanjutkan desain


tampilan.

Gambar 10.10 iReport : Group by

11. Tekan tombol sebagai akhir pembuatan laporan dan


akan menghasilkan desai laporan Barang dengan template Cherry

134
Gambar10.11 iReport : Group by

12. Rubahlah desain laporan seperti dibawah ini , sebagai berikut :

Gambar 10.12 iReport : Desain Laporan Pejualan

a. Static Text, Text : Penjualan, Font : Times New Roman Size 50

135
b. Static Text, Text : Faktur, Font :Times New Roman Size 22

c. Static Text, Text : Faktur, Forecolor : White [255,255,255,255]

d. Text Field, Text Field Expression : $F{faktur_NomorFaktur},


Forecolor : White [255,255,255,255]

e. Text Field, Text Field Expression : $F{faktur_TanggalFaktur},


forecolor : White [255,255,255,255]

f. Static Text, Text : Pelanggan, Forecolor : White [255,255,255,255]

g. Text Field, Text Field Expression : $F{faktur_KodePelanggan},


Forecolor : White [255,255,255,255], Blank When Null : True

h. Text Field, Text Field Expression : $F{pelanggan_namapelanggan},


Forecolor : White [255,255,255,255], Blank When Null : True

i. Text Field, Text Field Expression : $F{pelanggan_Alamat},


Forecolor : White [255,255,255,255], Blank When Null : True

j. Static Text, Text : Kode Barang

k. Static Text, Text : Nama Barang

l. Static Text, Text : Harga

m. Static Text , Text : Qty

n. Text Field, Text Field Expression : $F{fakturdetail_KodeBarang}

o. Text Field, Text Field Expression : $F{barang_namabarang}

p. Text Field, Text Field Expression : $F{fakturdetail_Harga}

q. Text Field, Text Field Expression : $F{fakturdetail_Qty}

13. Buatlah Variabel Total dari hasil perkalian $F{fakturdetail_Harga}


dikalikan $F{fakturdetail_Qty}

136
a. Klik kanan pada Variables pada iReport Inspector, pilih Add
Variable

Gambar 10.13 Add Variable

b. Rubahlah variable1 dengan nama totalbaris, dengan cara klik


kanan variable1  rename

137
Gambar 10.14 Rename variable1

Gambar 10.15 Rename variable1menjadi totalbaris

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

d. Pastikan Properties Variable Class : java.lang.Double

e. Drag and Drop total baris disamping QTY dan berikanlah Text
Static, Text : Total diatasnya

139
Gambar 10.17 Total Baris

f. Buatlah variabel grandtotal dengan Variable Expression


$V{totalbaris}, Calculation : Sum, Reset Type : Group, Reset Group
: faktur_NomorFaktur

Gambar 10.17 Total Baris

140
g. Drag and Drop variabel grandtotal ke dalam faktur_NomorFaktur
Group Footer, seperti dibawah ini :

Gambar 10.17 Total Baris

14. Buatlah parameter dengan cara

a. klik kanan pada parameter didalam Report Inspector.

141
Gambar 10.17 Add Parameter

b. Berilah nama nomorfaktur dengan cara klik kanan parameter1 


rename

c. Klik kanan pada null  Edit Query

Gambar 10.18 Edit Query

d. Tambahkan pada baris paling bawah Query Where


faktur.nomorFaktur = $P{nomorfaktur}, kemudian tekan tombol

142
Gambar 10.18 Edit Query

15. Tekan Tombol . Apabila iReport meminta nomorfaktur


isilah dengan nomor faktur yang diinginkan (contoh : F0001) dan
pastikan iReport menampilkan data

143
Gambar 10.19 iReport : Hasil Laporan Penjualan

Setelah berhasil melewati langkah-langkah diatas, maka kita memasuki


kelangkah berikutnya, yaitu membuat program untuk laporan
Penjualan.jrxml dengan langkah-langkah sebagai berikut :

1. Buka Form FrmPenjualan dan klik pada tab

2. Rubahlah method printData() seperti di bawah ini :


@Override
public void printData() {
EntityManager em = null;
try {
em = AppPenjualan.emf.createEntityManager();
em.getTransaction().begin();
Connection connect = em.unwrap(Connection.class);

File file = new File("");

144
String sourcefilename = file.getAbsolutePath()
+ "\\report\\Penjualan.jasper";

HashMap hashmap = new HashMap();


hashmap.put("nomorfaktur", jtxtNomorFaktur.getText());
JasperPrint jprint = JasperFillManager.fillReport(
sourcefilename,
hashmap, connect);

/*langsung cetak*/
//JasperPrintManager.printReport(jprint, false);

/*jika ingin melihat terlebih dahulu*/


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();
}
}
}

3. Tambahkan printData() pada method saveData()

4. Jalankan projek dengan menekan tombol run

5. Plihlah menu Transaksi Penjualan

6. Isilah nomor faktur yang anda ingin buka (contoh : f0001)

7. Anda dapat melakukan pencetakan pada saat penyimpanan data

atau menggunakan tombol Print , dan program akan


menampilkan

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

M. Heiver, Deitel and J. Deitel Paul, Java Programming, Deitel &


Association Inc.

Siegel, Joel G dan Jae K. Shim yang diterjemahkan oleh Moh Kurdi
(1999), Kamus Istilah Akuntansi, Jakarta : PT Elex Media Komputindo, hal
404.

Asri, Marwan, Marketing, edisi pertama, 1991, Yogyakarta, UUP-AMP,


YKPN

Sholiq. Pemodlan sistem informasi berorientsi obyek dengan UML, edisi


pertama. Yogyakarta : Graha Ilmu

Gata W., Asyiknya Mengenal Java, Gramedia.

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

Joel G. Siegel, Jae K. Shim, Accounting

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.

Saat ini berprofesi sebagai dosen di kampus Universitas Budi Luhur


yang telah membagikan ilmu khususnya dibidang komputer dalam
banyak bahasa pemrograman, selain mengajar di lingkungan S1,
Penulis juga mengajar di lingkungan D3 dengan lebih berkonsentrasi
dalam ilmu aplikasi komputerisasi akuntansi. penulis juga mengajar
di Universitas Mercu Buana.

Sebagai akademisi sangatlah penting untuk memperluas ilmu dan


pengalaman, menulis sebuah buku merupakan salah satu sarana
dalam berbagi ilmu sehingga dapat bermanfaat.

Telpon : 0813 2013 5448

Email : gatasmara@gmail.com, grace.gata@budiluhur.ac.id

150

Anda mungkin juga menyukai