• Tidak ada hasil yang ditemukan

BAB III PEMBAHASAN. mencuci pakaian maka dibutuhkan sistem yang dapat membantu dalam pengolahan

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB III PEMBAHASAN. mencuci pakaian maka dibutuhkan sistem yang dapat membantu dalam pengolahan"

Copied!
60
0
0

Teks penuh

(1)

32

BAB III

PEMBAHASAN

3.1. Tinjauan Perusahaan

Pada setiap perusahaan, baik itu perusahaan dagang ataupun perusahaan jasa umumnya memiliki suatu sistem yang dapat membantu pelaksanaan kegiatan operasionalnya, seperti perusahaan jasa pada laundry yang kegiatan utamanya adalah mencuci pakaian maka dibutuhkan sistem yang dapat membantu dalam pengolahan data, sampai dengan laporan transaksi pendapatan jasa laundry. Untuk dapat membantu suatu sistem dengan baik serta dapat menghasilkan informasi yang cepat, tepat, dan akurat maka dibuatkan alat bantu yang dapat menunjang proses kegiatan perusahaan seperti halnya Komputer.

3.1.1. Sejarah Perusahaan

Mentari Laundry berdiri pada tanggal 14 Juli 2019. Mentari laundry merupakan salah satu usaha penyedia layanan jasa menyuci dan menyeterika pakaian yang memang bergerak dalam bidang usaha jasa di Jl. SMK PGRI Bayur , Kelurahan Jomin Barat, Kecamatan Kotabaru, Kabupaten Karawang. Suatu usaha yang di rintis oleh Bapak Muhammad Sigit Maulana dan telah berjalan selama 1 tahun. Saat ini Mentari Laundry telah memiliki 30 pelanggan tetap. Jasa yang ditawarkan pun cukup bergam, mulai dari cuci paket kiloan, cuci khusus seperti jas, cuci selimut, setrika dan lain-lain.

Bermula dari sang pemilik Bapak Sigit sering melaundry bajunya sendiri dan mempunyai keinginan untuk membuka lapangan usaha yang memiliki prospect cerah karena itu ia memutusakan berbisnis laundry kiloan dan dryclean yang lebih praktis dan akan semakin dibutuhkan mengingat gaya hidup masyarakat yang serba praktis

(2)

dan enggan mengurus pakaian kotor. Dengan 2 strategi pemasaran dan profesionalisme pelayanan yang memuaskan, Mentari Laundry berhasil menghadapi para pesaingnya yang terbilang ketat

3.2.1. Struktur Organisasi dan Fungsi

Sebuah Organisasi atau perusahaan harus mempunyai suatu struktur organisasi yang digunakan untuk memudahkan pengkoordinasian dan penyatuan usaha, untuk menunjukkan kerangka-kerangka hubungan di antara fungsi, bagian-bagian maupun tugas dan wewenang serta tanggung jawab. Serta untuk menunjukan rantai (garis) perintah dan perangkapan fungsi yang diperlukan dalam suatu organisasi. Sama halnya dengan Mentari Laundry Cikampek mempunyai struktur organisasi manajemen sebagai berikut:

Sumber : Mentari Laundry Cikampek

Gambar III.1

(3)

Fungsi dari tiap-tiap bagian adalah sebagai berikut : 1. Pemilik

Sebagai pemimpin sekaligus pemilik modal dan mengawasi agar berjalannya jasa laundry ini tidak ada kendala .

2. Kasir

Bertugas menerima pakaian yang akan di cuci dan di setrika, menimbang dan membuat nota pembayaran, kemudian mencatat semua transaksi yang terjadi di Mentari laundry.

3. Bagian Oprasional

Bertugas mencuci dan menyetrika pakaian, kemudian merapikan dan mengemas pakian berdasarkan nota.

3.2. Tinjauan Kasus

3.2.1. Proses Bisnis Sistem Berjalan

Proses bisnis sistem yang sedang berjalan bertujuan untuk mengetahui lebih jelas bagaimana kerja suatu sistem dan mengetahui masalah yang dihadapi sistem.

Adapun proses bisnis sistem yang sedang berjalan pada Mentari Laundry adalah : 1. Proses Penyerahan Pakaian

Pelanggan datang ke mentari laundry sambil membawa pakaian yang akan dilaundry, dan menyerahkan kepada kasir untuk dihitung total berat dari pakaian tersebut. Kasir menerima pakaian yang akan dilaundry dari pelanggan lalu menimbang berat pakaian tersebut, kemudian kasir menawarkan pada pelanggan 3 jenis layanan jasa laundry. Dan menawarkan 2 jenis paket layanan jasa laundry. 2. Proses Pencatatan

kasir mencatat data pelanggan, jenis layanan jasa, jenis paket jasa laundry dan total harga yang harus dibayar oleh pelanggan di nota rangkap dua . Kemudian kasir

(4)

memberikan nota berwarna putih kepada pelanggan untuk bukti bahwa pelanggan tersebut melaundry pakaiannya di mentari laundry. Dan copy nota berwarna pink dipakai untuk menandai pakaian pelanggan yang akan dilaundry.

3. Proses Melaundry

Kasir menyerahkan pakaian pelanggan yang sudah ditimbang dan di tandai dengan copy nota berwarna pink kepada bagian oprasional untuk dilaundry, sesuai jenis dan paket layanan jasa laundry yang dipilih. Bagian oprasional menerima dan mulai proses melaundry. Setelah selesai bagian oprasional memberitahukan kepada kasir bahwa proses laundry telah selesai, kemudian kasir menghubungi pelanggan bahwa proses laundry sudah selesai, dan sambil menginformasikan pada pelanggan agar membawa nota berwarna putih untuk bukti pencucian.

4. Proses Pembayaran

Pelanggan datang lagi ke mentari laundry sambil membawa bukti (nota berwarrna putih) dan langsung menyerahkan nota tersebut pada kasir untuk diperikasa, kasir menerima nota berwarna putih dan memberikan pakaian yang sudah di laundry kepada pelanggan, kemudian pelanggan membayar jasa laundry sesuai harga yang tertera di nota berwarna putih dan kasirpun menerima pembayaran dari pelanggan. 5. Proses Penyerahan Buku Catatan Transaksi

Kasir menyimpan nota berwarna putih untuk dijadikan arsip, karna di Mentari Laundry dalam proses pencatatan laporan harian masih memakai sistem manual , jadi kasir mencatat seluruh transaksi tersebut di buku catatan untuk dijadikan laporan harian dan menyerahkan buku catatan transaksi tersebut kepada pemilik mentari laundry.

(5)

3.2.2. Activity Diagram Sistem Berjalan 1. Proses Penyerahan Pakaian

Gambar III. 2

(6)

2. Proses Pencatatan Data Pelanggan

Gambar III.3

(7)

3. Proses Melaundry

Gambar III.4

(8)

4. Proses Pembayaran

Gambar III.5

(9)

5. Proses Penyerahan Buku Catatan Transaksi

Gambar III.6

Activity Diagram Proses Penyerahan Buku Catatan Transaksi 3.2.3. Spesifikasi Dokumen Masukan

Bentuk dokumen masukan merupakan dokumen atau data yang digunakan sebagai acuan dalam pembuatan atau pengisian data program aplikasi. Dalam komputerisasi monitoring pelayanan jasa laundry terdapat data-data yang dibutuhkan sebagai dokumen masukan.

Adapun bentuk dokumen masukan sebagai berikut : 1. Nama Dokumen : Buku Catatan Transaksi

Fungsi : Untuk mencatat data transaksi termasuk data pelanggan Sumber : Kasir

Tujuan : Arsip Media : Buku Jumlah : 2 Lembar

(10)

Frekuensi : Setiap ada transaksi Format : Lihat lampiran A.1 2. Nama Dokumen : Nota Berwarna Putih Fungsi : Sebagai Bukti Pembayaran Sumber : Kasir

Tujuan : Arsip Media : Kertas Jumlah : 1 Lembar

Frekuensi : Setiap adanya pembayaran Format : Lihat lampiran A.2

3.2.4. Spesifikasi Dokumen Keluaran

Bentuk dokumen keluaran merupakan dokumen atau data yang dibuat berdasarkan atau keluarannya. Untuk mendapatkan hasil optimal maka sangat dibutuhkan pembuatan output untuk suatu program agar pemakai (user) yang menggunakannya lebih cepat memahami hasil kerja dari suatu program. Dalam proses pengolahan data pelayanan jasa akan menghasilkan bentuk keluaran dan laporan, diantaranya sebagai berikut :

1. Nama Dokumen : Copy Nota Berwarna Pink Fungsi : Sebagai bukti pembayaran Sumber : Kasir

Tujuan : Pelanggan Media : Kertas Jumlah : 1 Lembar

Frekuensi : Setiap melakukan pembayaran Format : Lihat lampiran B.1

(11)

3.2.5. Permasalahan Pokok

Setelah penulis mempelajari dan mengamati sistem informasi pendapatan jasa laundry di Mentari Laundry Cikampek, penulis menyimpulkan bahwa sistem berjalan dan pelaksanaannya belum efisien karena sistem tersebut masih bersifat manual dan belum terkomputerisasi. Adapun masalah pokok pada sistem tersebut adalah sebagai berikut :

1. Masalah pencatatan dan pengecekan data pelayanan jasa laundry yang masih menggunakan sistem manual menyebabkan banyak terjadi kesalahan yang disebabkan oleh tangan manusia dan menyebabkan catatan yang hilang atau data yang sama dicatat berulang kali sehingga data menjadi menumpuk dan waktu yang dibutuhkan sangat lama.

2. Proses transaksi pembayaran juga kadang terjadi kesalahan atau kekeliruan dalam pencatatan dan pada akhirnya berdampak pada laporan pendapatan yang tidak akurat sehingga berujung pada kerugian laundry.

3. Lantaran mesin cuci, mesin pengering dan setrika dipakai setiap hari, kerusakan pasti akan terjadi. Biaya untuk perbaikannyapun tak sedikit.

3.2.6. Pemecahan Masalah

Untuk mengatasi atau mengurangi permasalahan yang terjadi di Mentari Laundry Cikampek ini maka penulis mengajukan alternatif pemecahan masalah yaitu sebagai berikut:

1. Dengan adanya sistem komputerisasi , karyawan bisa langsung memasukan , mengecek atau menyimpan data pelanggan ke dalam file komputer tanpa harus mencari-cari data sebelumnya. Hanya dengan mengetikan kata kunci pada komputer tersebut. Sehingga memudahkan karyawan dalam membuat laporan setiap harinya.

(12)

2. Dengan dibuatkannya sistem yang terkomputerisasi, memudahkan karyawan dalam melakukan transaksi pembayaran pelayanan jasa. Hanya dengan mencari jenis pelayanan jasa yang tertera dalam program tersebut lalu menimbang barang cucian tersebut karyawan langsung bisa menyebutkan total yang harus dibayar oleh pelanggan. Sehingga bisa meningkatkan efektifitas dan efisiensi kerja.

3. Perusahaan bisa memperlajari cara memperbaiki mesin cuci, mesin pengering dan setrika. Dengan begitu, ketika terjadi kerusakan yang tak terlalu parah, Perusahaan bisa memperbaikinya sendiri.

2.3. Analisis Kebutuhan Software

Analisis kebutuhan software merupakan langkah awal untuk menentukan gambaran perangkat yang akan dihasilkan ketika pengembang melaksanakan sebuah proyek pembuatan perangkat lunak.

2.3.1. Analisis Kebutuhan

Adapun analisa yang dibutuhkan dalam membuat software yaitu: Halaman Bagian Kasir

A.1. Dapat Melakukan Login

A.2. Dapat Mengelola Data Pelanggan A.3. Dapat Mengelola Data Akun A.4. Dapat Mengelola Transaksi A.5. Dapat Mengelola Layanan

A.6. Dapat Mengelola Jurnal Penerimaan Kas A.7. Dapat Mencetak Laporan Transaksi

A.8. Dapat Mencetak Laporan Jurnal Penerimaan Kas A.9. Dapat Mencetak Laporan Pendapatan

(13)

A.10. Dapat Melakukan Logout Halaman Bagian Pemilik B.1. Dapat Melakukan Login B.2. Dapat Mengelola Data User

B.3. Dapat Mencetak Laporan Transaksi

B.4. Dapat Mencetak Laporan Jurnal Penerimaan Kas B.5. Dapat Mencetak Laporan Pendapatan Jasa B.6. Dapat Melakukan Logout

2.3.2. Use Case Diagram

Gambar III.7 Use Case Diagram

(14)

Tabel.III.1

Skenario Use Case Kasir Mengelola Data Pelanggan

Use Case Name Mengelola Data Pelanggan

Requirement Bagian Kasir mengelola Data Pelanggan

Goal Kasir dapat menambah Data Pelanggan

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data Pelanggan tersimpan, terupdate

Filed end condition Gagal menyimpan, mengupdate atau menghapus

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih Form data pelanggan 2. System menampilkan form data pelanggan 3. Bagian Kasir memilih tambah

4. System menampilkan kode pelanggan otomatis 5. Bagian Kasir menginput Nama Pelanggan,

Alamat dan No Telephone

6. Bagian Kasir menyimpan ata pelanggan 7. System akan menyimpan data pelanggan

Alternate Flow/ Invariant 1 1. Kasir melihat Data Pelanggan

2. Sistem menampilkan daftar data pelanggan. 3. Bagian Kasir dapat mengubah data pelanggan 4. Bagian Kasir dapat membatalkan data pelanggan 5. Bagian Kasir dapat menghapus data pelanggan

Tabel III.2

Skenario Use Case Kasir Mengelola Data Akun

Use Case Name Mengelola Data Akun

Requirement Bagian Kasir mengelola Data Akun

Goal Kasir dapat menambah Data Akun

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data Akun tersimpan, terupdate

Filed end condition Gagal menyimpan, mengupdate atau menghapus

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih form data Akun 2. System menampilkan form data akun 3. Bagian Kasir memilih tambah

4. Bagian Kasir menginput kode akun, nama akun. 5. Bagian Kasir memilih jenis akun dan saldo

normal.

6. Bagian Kasir menyimpan data akun 7. System akan menyimpan data akun

Alternate Flow/ Invariant 1 1. Bagian Kasir melihat data akun 2. Sistem menampilkan daftar data akun 3. Bagian Kasir dapat menghapus data akun 4. Bagian Kasir dapat mengubah data akun 5. Bagian Kasir dapat membatalkan data akun

(15)

Tabel III.3

Skenario Use Case Kasir Mengelola Transaksi

Use Case Name Mengelola Transaksi

Requirement Bagian Kasir mengelola transaksi

Goal Kasir dapat menambah transaksi

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data Transaksi tersimpan, terupdate

Filed end condition Gagal menyimpan, mengupdate atau menghapus

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih form transaksi 2. System menampilkan form transaksi 3. Bagian Kasir memilih tambah 4. Sistem menampilkan tanggal otomatis 5. Bagian Kasir mencari data pelanggan

6. Bagian Kasir menginput keterangan dan kode layanan

7. Bagian kasir memilih jenis layanan

8. System menampilkan nama layanan, harga, jumlah dan subtotal secara otomatis.

9. Bagian Kasir menyimpan transaksi 10. System akan menyimpan transaksi

Alternate Flow/ Invariant 1 1. Kasir melihat transaksi

2. Sistem menampilkan daftar transaksi yang telah terjadi maupun yang sedang terjadi

3. Bagian Kasir dapat mengelola pembayaran 4. Bagian Kasir dapat mencetak nota transaksi

Tabel III.4

Skenario Use Case Kasir Mengelola Data Layanan

Use Case Name Mengelola Layanan

Requirement Bagian Kasir mengelola data layanan

Goal Kasir dapat menambah data layanan

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data Layanan tersimpan, terupdate

Filed end condition Gagal menyimpan, mengupdate atau menghapus

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih form layanan 2. System menampilkan form layanan 3. Bagian Kasir memilih tambah 4. Sistem menampilkan kode otomatis

5. Bagian Kasir menginput nama layanaan dan jenis paket layanan

6. Bagian Kasir menyimpan data layanan 7. System akan menyimpan data layanan

Alternate Flow/ Invariant 1 1. Kasir melihat data layanan

2. Sistem menampilkan daftar data layanan 3. Bagian Kasir dapat membatalkan data layanan 4. Bagian Kasir dapat menghapus data layanan 5. Bagian Kasir dapat mengubah data layanan

(16)

Tabel III.5

Skenario Use Case Kasir Mengelola Jurnal Penerimaan Kas Use Case Name Mengelola Jurnal Penerimaan Kas

Requirement Bagian Kasir mengelola jurnal penerimaan kas

Goal Kasir dapat menambah data jurnal penerimaan kas

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data jurnal penerimaan kas tersimpan, terupdate

Filed end condition Gagal menyimpan, mengupdate atau menghapus

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih form jurnal penerimaan kas

2. System menampilkan form jurnal penerimaan kas

3. Bagian Kasir memilih tambah

4. Sistem menampilkan tanggal dan no jurnal otomatis

5. Bagian Kasir memilih akun kas

6. Bagian Kasir menginput no bukti, keterangan, 7. Sistem menampilkan total secara otomatis 8. Bagian Kasir mencari kode akun

9. System menampilkan nama akun dan nominal secara otomatis.

10. Bagian Kasir menyimpan data jurnal penerimaan kas

11. System akan menyimpan data jurnal penerimaan kas

Alternate Flow/ Invariant 1 1. Kasir melihat form jurnal penerimaan kas 2. Sistem menampilkan data jurnal penerimaan kas

Tabel III.6

Skenario Use Case Kasir Mencetak Laporan Jurnal Penerimaan Kas Use Case Name Mencetak Laporan Jurnal Penerimaan Kas Requirement Bagian Kasir mencetak laporan jurnal penerimaan

kas

Goal Kasir dapat mencetak Laporan

jurnal penerimaan kas

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data Laporan jurnal penerimaan kas tercetak

Filed end condition Gagal mencetak

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih menu laporan 2. System menampilkan form laporan

3. Bagian Kasir memillih tanggal dari tanggal sekian sampai tanggal sekian.

4. Sistem menampilkan pilihan

5. Bagian Kasir memilih laporan jurnal penerimaan kas

6. Bagian Kasir mencetak laporan jurnal penerimaan kas.

(17)

7. Sistem menampilkan laporan tercetak

Alternate Flow/ Invariant 1 1. Kasir melihat menu laporan 2. Sistem menampilkan pilihan.

Tabel III.7

Skenario Use Case Kasir Mencetak Laporan Transaksi Use Case Name Mencetak Laporan Transaksi

Requirement Bagian Kasir mencetak laporan Transaksi

Goal Kasir dapat mencetak Laporan

Transaksi

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data Laporan Transaksi tercetak Filed end condition Gagal mencetak

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih menu laporan 2. System menampilkan form laporan

3. Bagian Kasir memillih tanggal dari tanggal sekian sampai tanggal sekian.

4. Sistem menampilkan pilihan

5. Bagian Kasir memilih laporan transaksi 6. Bagian Kasir mencetak laporan transaksi 7. Sistem menampilkan laporan transaksi

tercetak

Alternate Flow/ Invariant 1 1. Kasir melihat menu laporan 2. Sistem menampilkan pilihan.

Tabel III.8

Skenario Use Case Kasir Mencetak Laporan Pendapatan

Use Case Name Mencetak Laporan Pendapatan

Requirement Bagian Kasir mencetak laporan Pendapatan

Goal Kasir dapat mencetak Laporan

Pendapatan

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data Laporan Pendapatan tercetak

Filed end condition Gagal mencetak

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih menu laporan 2. System menampilkan form laporan

3. Bagian Kasir memillih tanggal dari tanggal sekian sampai tanggal sekian.

4. Sistem menampilkan pilihan

5. Bagian Kasir memilih laporan Pendapatan 6. Bagian Kasir mencetak laporan pendapatan 7. Sistem menampilkan laporan transaksi

pendapatan

Alternate Flow/ Invariant 1 1. Kasir melihat menu laporan 2. Sistem menampilkan pilihan.

(18)

Tabel III.9

Skenario Use Case Pemilik Mengelola Data User

Use Case Name Mengelola Data User

Requirement Bagian Pemilik mengelola Data User

Goal Pemilik dapat menambah Data User

Pre-conditions Pemilik telah login ke system pendapapatan jasa laundry

Post-conditions Data User tersimpan, terupdate

Filed end condition Gagal menyimpan, mengupdate atau menghapus

Primary Actors Bagian Pemilik

Main Flow/ Basic Path 1. Bagian Pemilik Memilih Form data user 2. System menampilkan form data user 3. Bagian Pemilik memilih tambah

4. Bagian Kasir menginput Id User, Nama User, Password.

5. Bagian Pemilik memil

6. Bagian pemilik menyimpan data user 7. System akan menyimpan data user

Alternate Flow/ Invariant 1 1. Pemilik melihat data user

2. Sistem menampilkan daftar data user 3. Bagian pemilik dapat mengubah data user 4. Bagian Kasir dapat membatalkan data user 5. Bagian Kasir dapat menghapus data user

Tabel III.10

Skenario Use Case Pemilik Mencetak Laporan Jurnal Penerimaan Kas Use Case Name Mencetak Laporan Jurnal Penerimaan Kas Requirement Bagian Pemilik mencetak laporan jurnal

penerimaan kas

Goal Pemilik dapat mencetak Laporan

jurnal penerimaan kas

Pre-conditions Pemilik telah login ke system pendapapatan jasa laundry

Post-conditions Data Laporan jurnal penerimaan kas tercetak

Filed end condition Gagal mencetak

Primary Actors Bagian Pemilik

Main Flow/ Basic Path 1. Bagian Pemilik Memilih menu laporan 2. System menampilkan form laporan

3. Bagian Pemilik memillih tanggal dari tanggal sekian sampai tanggal sekian.

4. Sistem menampilkan pilihan

5. Bagian Pemilik memilih laporan jurnal penerimaan kas

6. Bagian Pemilik mencetak laporan jurnal penerimaan kas.

7. Sistem menampilkan laporan tercetak

Alternate Flow/ Invariant 1 1. Pemilik melihat menu laporan 2. Sistem menampilkan pilihan.

(19)

Tabel III.11

Skenario Use Case Pemilik Mencetak Laporan Pendapatan

Use Case Name Mencetak Laporan Pendapatan

Requirement Bagian Pemilik mencetak laporan Pendapatan

Goal Pemilik dapat mencetak Laporan

Pendapatan

Pre-conditions Pemilik telah login ke system pendapapatan jasa laundry

Post-conditions Data Laporan Pendapatan tercetak

Filed end condition Gagal mencetak

Primary Actors Bagian Pemilik

Main Flow/ Basic Path 1. Bagian Pemilik Memilih menu laporan 2. System menampilkan form laporan

3. Bagian Pemilik memillih tanggal dari tanggal sekian sampai tanggal sekian.

4. Sistem menampilkan pilihan

5. Bagian Pemilik memilih laporan Pendapatan 6. Bagian Pemilik mencetak laporan pendapatan 7. Sistem menampilkan laporan transaksi

pendapatan

Alternate Flow/ Invariant 1 1. Pemilik melihat menu laporan 2. Sistem menampilkan pilihan.

Tabel III.12

Skenario Use Case Pemilik Mencetak Laporan Transaksi Use Case Name Mencetak Laporan Transaksi

Requirement Bagian Kasir mencetak laporan Transaksi

Goal Kasir dapat mencetak Laporan

Transaksi

Pre-conditions Kasir telah login ke system pendapapatan jasa laundry

Post-conditions Data Laporan Transaksi tercetak Filed end condition Gagal mencetak

Primary Actors Bagian Kasir

Main Flow/ Basic Path 1. Bagian Kasir Memilih menu laporan 2. System menampilkan form laporan

3. Bagian Kasir memillih tanggal dari tanggal sekian sampai tanggal sekian.

4. Sistem menampilkan pilihan

5. Bagian Kasir memilih laporan transaksi 6. Bagian Kasir mencetak laporan transaksi 7. Sistem menampilkan laporan transaksi

tercetak

Alternate Flow/ Invariant 1 1. Kasir melihat menu laporan 2. Sistem menampilkan pilihan.

(20)

2.3.3. Activity Diagram

Gambar III.8

(21)

Gambar III.9

(22)

Gambar III.10

(23)

2.4. Desain

2.4.1. Entity Relationship Diagram (ERD)

Gambar III.11 Entity Relationship Diagram

(24)

2.4.2. Logical Record Structure (LRS)

Gambar III.12 Logical Record Structure

Keterangan : PK = Primary Key FK = Foreign Key

(25)

2.4.3. Spesifikasi File

Spesifikasi file yang ada pada program aplikasi merupakan susunan atau struktur tabel yang telah dibuat melalui proses normalisasi, sehingga tabel-tabel tersebut saling berhubungan dalam sebuah database yang bernama mentari_laundry berikut ini tabel-tabel yang ada didalam database tersebut:

1. Spesifik File Pelanggan Nama File : Pelanggan

Fungsi : Untuk menyimpan data pelanggan Tipe File : File Master

Akses File : Random

Media : Hardisk

Panjang Record : 155

Field Key : kode_pelanggan

Tabel III.13

Spesifikasi File Pelanggan

No Elemen Data Akronim Tipe Panjang Satatus

1 Kode pelanggan kode_pelanggan Char 7 PK 2 Nama pelanggan nama_pelanggan Varchar 35

3 Alamat pelanggan alamat_pelanggan Varchar 100 4 No telp no_telp Varchar 13

2. Spesifik File Transaksi Nama File : Transaksi

Fungsi : Untuk menyimpan data Transaksi Tipe File : File Transaksi

(26)

Media : Hardisk Panjang Record : 33

Field Key : no_transaksi

Tabel III.14

Spesifikasi File Laporan Bagian Transaksi

No Elemen Data Akronim Tipe Panjang Status

1 No transaksi no_transaksi Char 12 FK 2 Kode pelanggan kode_pelanggan Char 3 FK 3 Jenis Jenis_layanan Varchar 9

4 Harga harga_layanan Int 6 5 Jumlah Jumlah Int 3

3. Spesifik File Pembayaran

Nama File : Laporan Pendapatan

Fungsi : Untuk menyimpan data pembayaran Tipe File : File Laporan

Akses File : Random

Media : Hardisk

Panjang Record : 50

Field Key : no_pembayaran

Tabel III.15

Spesifikasi File Laporan bagian Pembayaran

No Elemen Data Akronim Tipe Panjang Status

1 No pembayaran no_pembayaran Char 12 PK 2 No transaksi no_transaksi Char 12 FK 3 Tanggal pembayaran Tanggal_pembayaran Date

(27)

4 Jumlah pembayaran jumlah_pembayaran Int 6 5 Id user id_user Varchar 20

4. Spesifik File Jurnal

Nama File : Laporan Jurnal Penerimaan Kas

Fungsi : Untuk menyimpan data Laporan Jurnal Penerimaan Kas Tipe File : File Laporan

Akses File : Random

Media : Hardisk

Panjang Record : 148 Kunci File d : no_jurnal

Tabel III.16

Spesifikasi File Laporan Bagian Jurnal

No Elemen Data Akronim Tipe Panjang Status

1 No jurnal no_jurnal Char 8 PK 2 Tanggal jurnal tgl_jurnal Date

3 No bukti no_bukti Varchar 20 4 Keterangan Keterangan Varchar 100

5 Id user id_user Varchar 20 FK

5. Spesifik File Laporan Transaksi Nama File : Laporan Transaksi

Fungsi : Untuk menyimpan data Laporan Transaksi Tipe File : File Laporan

(28)

Media : Hardisk Panjang Record : 145

Field Key : no_transaksi

Tabel III.17

Spesifikasi File Laporan Bagian Transaksi

No Elemen Data Akronim Tipe Panjang Status

1 No transaksi no_transaksi Char 12 PK 2 Kode

pelanggan

kode_pelanggan Char 7 FK

3 Id user Id_user Varchar 20 PK 4 Tanggal

Transaksi

Tanggal_transaksi Date

5 Keterangan Keterangan Varchar 100 6 Total transaksi total_transaksi Int 6 7 Status Transaksi status_transaksi Enum(„Di Proses‟,‟Selesai‟)

(29)

2.4.4. Class Diagram

Gambar III. 13 Class Diagram

(30)

2.4.5. Sequence Diagram

Gambar III.14

(31)

2.4.6. Component Diagram Gambar III.15 Component Diagram 2.4.7. Deployment Diagram Gambar III.16 Deployment Diagram

(32)

2.4.8. User Interface 1. Form Login Gambar III.17 Login User 2. Menu Utama Gambar III.18 Menu Utama Kasir

(33)

3. Form User

Gambar III.19 Form Kelola User 4. Form Pelanggan

Gambar III.20 Form Pelanggan

(34)

5. Form Transaksi Gambar III.21 Form Transaksi 6. Menu Laporan Gambar III.22 Menu Laporan

(35)

7. Form Pembayaran Gambar III.23 Form Pembayaran 8. Form Layanan Gambar III.24 Form Layanan

(36)

9. Form Jurnal Penerimaan Kas

Gambar III.25

Form Jurnal Penerimaan Kas 10. Form Data Akun

Gambar III.26 Form Data Akun

(37)

11. Menu Utama Pemilik

Gambar III.27 Menu Utama Pemilik 12. Nota Penerimaan

Gambar III.28 Nota Penerimaan

(38)

13. Nota Pembayaran Gambar III.29 Nota Pembayaran 3.5. Implementasi 3.5.1. Code Generation Codingan Transaksi package form; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.ItemEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import javax.swing.BorderFactory; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import mentarilaundry.MentariLaundry; import model.DetailTransaksi;

(39)

import model.Layanan; import model.Pelanggan; import model.Transaksi; (Codingan Awal Transaksi)

public class FormInputTransaksi extends javax.swing.JDialog { String KodeLayanan = "";

int tx, ty, total = 0;

Transaksi transaksi = new Transaksi();

DetailTransaksi detail_transaksi = new DetailTransaksi(); Layanan layanan = new Layanan();

Pelanggan pelanggan = new Pelanggan(); DefaultTableModel model_detail = null; TableColumn cKode, cJenis, cJumlah; JTextField textKode = new JTextField(); JTextField textJumlah = new JTextField(); JComboBox cmbJenis = new JComboBox(); int row = -1;

/**

* Creates new form FormTransaksi */

public FormInputTransaksi(java.awt.Frame parent, boolean modal) { super(parent, modal);

initComponents();

Toolkit tk = Toolkit.getDefaultToolkit(); Dimension d = tk.getScreenSize(); int x, y;

x = (int) ((d.getWidth() - getSize().width) / 2); y = (int) ((d.getHeight() - getSize().height) / 2); setLocation(x, y);

getContentPane().setBackground(Color.white);

model_detail = (DefaultTableModel) tbldetail_transaksi.getModel(); tbldetail_transaksi.getTableHeader().setFont(new Font("Roboto", 0, 16)); tbldetail_transaksi.setRowHeight(30);

tbldetail_transaksi.getTableHeader().setBackground(new Color(163, 21, 69)); tbldetail_transaksi.getTableHeader().setForeground(Color.WHITE);

(40)

tbldetail_transaksi.setShowVerticalLines(false);

getRootPane().setBorder(BorderFactory.createLineBorder(new Color(163, 21, 69), 2));

UIManager.put("Button.disabledText", new Color(23, 105, 170)); txtNoTransaksi.setText(transaksi.buatNoTransaksi());

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); txtTanggalTransaksi.setText(sdf.format(new java.util.Date())); model_detail.setRowCount(1);

initDetail(); }

(Codingan Private Void) private void initDetail() {

textKode.setFont(new Font("Roboto", 0, 14)); textJumlah.setFont(new Font("Roboto", 0, 14)); cmbJenis.setFont(new Font("Roboto", 0, 14));

cKode = (TableColumn) tbldetail_transaksi.getColumnModel().getColumn(0); cJenis = (TableColumn) tbldetail_transaksi.getColumnModel().getColumn(2);

cJumlah = (TableColumn) tbldetail_transaksi.getColumnModel().getColumn(4); cKode.setCellEditor(new DefaultCellEditor(textKode)); cJenis.setCellEditor(new DefaultCellEditor(cmbJenis)); cJumlah.setCellEditor(new DefaultCellEditor(textJumlah)); textKode.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_F1) {

if (e.getKeyCode() == KeyEvent.VK_F1) {

textKode.setText(new FormCariLayanan(null, true).cariLayanan()); }

row = tbldetail_transaksi.getSelectedRow();

textKode.setText(textKode.getText().toUpperCase()); if (!"".equals(textKode.getText())) {

getLayanan(textKode.getText(), row);

for (int i = 0; i < model_detail.getRowCount() - 1; i++) { try {

String kode = model_detail.getValueAt(i, 0).toString();

(41)

model_detail.setValueAt(null, row, 0); model_detail.setValueAt(null, row, 1); model_detail.setValueAt(null, row, 2); model_detail.setValueAt(null, row, 3); model_detail.setValueAt(null, row, 4); model_detail.setValueAt(null, row, 5); textKode.setText(null); JOptionPane.showMessageDialog(rootPane, "Data sudah ada!", "Info", JOptionPane.ERROR_MESSAGE);

break; }

} catch (Exception ex) { } } cmbJenis.removeAllItems(); if (textKode.getText() != null) { if (layanan.getHarga_express() == 0 && layanan.getHarga_reguler() != 0) { cmbJenis.addItem("Reguler");

} else if (layanan.getHarga_reguler() == 0 && layanan.getHarga_express() != 0) {

cmbJenis.addItem("Express");

} else if (layanan.getHarga_reguler() != 0 && layanan.getHarga_express() != 0) { cmbJenis.addItem("Reguler"); cmbJenis.addItem("Express"); } } } hitungTotal(); } } }); cmbJenis.addItemListener(new java.awt.event.ItemListener() { @Override

public void itemStateChanged(ItemEvent e) { try { if ("Reguler".equalsIgnoreCase(cmbJenis.getSelectedItem().toString())) { model_detail.setValueAt(layanan.getHarga_reguler(), row, 3); } else { model_detail.setValueAt(layanan.getHarga_express(), row, 3);

(42)

}

int jumlah = Integer.parseInt(model_detail.getValueAt(row, 4).toString());

int harga = Integer.parseInt(model_detail.getValueAt(row, 3).toString());

int subtotal = jumlah * harga;

model_detail.setValueAt(subtotal, row, 5); hitungTotal();

} catch (Exception ex) { }

} });

textJumlah.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) {

if (!Character.isDigit(e.getKeyChar()) && e.getKeyChar() != KeyEvent.VK_BACK_SPACE && e.getKeyChar() != KeyEvent.VK_DELETE) {

textJumlah.setEditable(false);

JOptionPane.showMessageDialog(rootPane, "Jumlah hanya boleh berupa angka!", "Error", JOptionPane.ERROR_MESSAGE);

} else {

textJumlah.setEditable(true); }

}

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_TAB) { if (textJumlah.getText().equals("") || textJumlah.getText().equals("0") || textJumlah.getText().equals("-0")) { textJumlah.setText("1"); } try { textJumlah.setText(String.format("%d", Integer.parseInt(textJumlah.getText())));

} catch (Exception ex) { textJumlah.setText("1"); }

int jumlah = Integer.parseInt(textJumlah.getText());

int harga = Integer.parseInt(model_detail.getValueAt(row, 3).toString());

int subtotal = jumlah * harga;

(43)

hitungTotal(); }

} }); }

private void getLayanan(String kode, int row) { layanan = layanan.cariKodeLayanan(kode); if (layanan.getNama_layanan() == null) {

JOptionPane.showMessageDialog(rootPane, "Data layanan yang anda cari tidak ada!", "Error", JOptionPane.ERROR_MESSAGE);

model_detail.setValueAt(null, row, 0); model_detail.setValueAt(null, row, 1); model_detail.setValueAt(null, row, 2); model_detail.setValueAt(null, row, 3); model_detail.setValueAt(null, row, 4); model_detail.setValueAt(null, row, 5); } else { model_detail.setValueAt(kode.toUpperCase(), row, 0); model_detail.setValueAt(layanan.getNama_layanan(), row, 1); model_detail.setValueAt("Reguler", row, 2); model_detail.setValueAt(layanan.getHarga_reguler(), row, 3); model_detail.setValueAt(1, row, 4); model_detail.setValueAt(layanan.getHarga_reguler(), row, 5); } }

private void hitungTotal() { this.total = 0;

for (int i = 0; i < model_detail.getRowCount(); i++) { try {

int subtotal = (int) model_detail.getValueAt(i, 5); this.total += subtotal;

} catch (Exception e) { }

}

NumberFormat nf = new DecimalFormat("Rp #,#00.00"); txtTotal.setText(nf.format(this.total));

} /**

* This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always

(44)

* regenerated by the Form Editor. */

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane(); tbldetail_transaksi = new javax.swing.JTable(); txtNoTransaksi = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

txtTanggalTransaksi = new javax.swing.JTextField(); bsimpan = new javax.swing.JButton();

bbatal = new javax.swing.JButton(); jPanel1 = new javax.swing.JPanel(); lblTutup = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jPanel5 = new javax.swing.JPanel(); jLabel14 = new javax.swing.JLabel();

txtKodePelanggan = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel();

txtNamaPelanggan = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel();

jLabel7 = new javax.swing.JLabel(); txtTotal = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel();

txtKeterangan = new javax.swing.JTextField(); jLabel9 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_C LOSE); setUndecorated(true); addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

public void mouseDragged(java.awt.event.MouseEvent evt) { formMouseDragged(evt);

} });

addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { formMouseClicked(evt);

}

public void mousePressed(java.awt.event.MouseEvent evt) { formMousePressed(evt);

} });

(45)

tbldetail_transaksi.setFont(new java.awt.Font("Roboto", 0, 12)); // NOI18N

tbldetail_transaksi.setModel(new javax.swing.table.DefaultTableModel( new Object [][] {

{null, null, null, null, null, null}, {null, null, null, null, null, null}, {null, null, null, null, null, null}, {null, null, null, null, null, null} },

new String [] {

"Kode Layanan", "Nama Layanan", "Jenis", "Harga", "Jumlah", "Subtotal"

} ) {

boolean[] canEdit = new boolean [] { true, false, true, false, true, false };

public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex];

} }); tbldetail_transaksi.setSelectionBackground(new java.awt.Color(237, 75, 130)); tbldetail_transaksi.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(java.awt.event.MouseEvent evt) { tbldetail_transaksiMouseClicked(evt);

} });

tbldetail_transaksi.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) {

tbldetail_transaksiKeyPressed(evt); } }); jScrollPane1.setViewportView(tbldetail_transaksi); txtNoTransaksi.setEditable(false); txtNoTransaksi.setBackground(new java.awt.Color(255, 255, 255)); txtNoTransaksi.setFont(new java.awt.Font("Roboto", 1, 14)); // NOI18N txtNoTransaksi.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(233, 30, 99)));

jLabel2.setFont(new java.awt.Font("Roboto", 0, 12)); // NOI18N jLabel2.setText("No Transaksi");

(46)

jLabel3.setFont(new java.awt.Font("Roboto", 0, 12)); // NOI18N jLabel3.setText("Tanggal Transaksi "); txtTanggalTransaksi.setEditable(false); txtTanggalTransaksi.setBackground(new java.awt.Color(255, 255, 255)); txtTanggalTransaksi.setFont(new java.awt.Font("Roboto", 1, 14)); // NOI18N txtTanggalTransaksi.setBorder(javax.swing.BorderFactory.createMatteBord er(0, 0, 1, 0, new java.awt.Color(233, 30, 99)));

txtTanggalTransaksi.setSelectionColor(new java.awt.Color(233, 30, 99));

bsimpan.setBackground(new java.awt.Color(233, 30, 99));

bsimpan.setFont(new java.awt.Font("Roboto", 0, 14)); // NOI18N bsimpan.setForeground(new java.awt.Color(255, 255, 255)); bsimpan.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/Save_16px.png"))); // NOI18N bsimpan.setText("Simpan"); bsimpan.setBorder(null); bsimpan.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); bsimpan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bsimpanActionPerformed(evt);

} });

bbatal.setBackground(new java.awt.Color(233, 30, 99));

bbatal.setFont(new java.awt.Font("Roboto", 0, 14)); // NOI18N bbatal.setForeground(new java.awt.Color(255, 255, 255)); bbatal.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/Restart_16px.png") )); // NOI18N bbatal.setText("Batal"); bbatal.setBorder(null); bbatal.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); bbatal.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bbatalActionPerformed(evt);

} });

jPanel1.setBackground(new java.awt.Color(163, 21, 69));

jPanel1.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) {

(47)

jPanel1MousePressed(evt); } }); lblTutup.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/icons8_Multiply_32 px.png"))); // NOI18N lblTutup.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); lblTutup.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { lblTutupMouseClicked(evt);

} });

jLabel6.setFont(new java.awt.Font("Roboto", 0, 16)); // NOI18N jLabel6.setForeground(new java.awt.Color(255, 255, 255)); jLabel6.setText("Mentari Laundry");

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L EADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATE D, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(lblTutup) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L EADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Al ignment.CENTER) .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblTutup))

(48)

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);

jPanel5.setBackground(new java.awt.Color(233, 30, 99));

jLabel14.setFont(new java.awt.Font("Roboto Lt", 0, 48)); // NOI18N jLabel14.setForeground(new java.awt.Color(255, 255, 255));

jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); jLabel14.setText("Transaksi Jasa Laundry");

javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L EADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 659, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(256, Short.MAX_VALUE)) ); jPanel5Layout.setVerticalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L EADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() .addComponent(jLabel14) .addGap(0, 0, Short.MAX_VALUE)) ); txtKodePelanggan.setFont(new java.awt.Font("Roboto", 1, 14)); // NOI18N txtKodePelanggan.setBorder(javax.swing.BorderFactory.createMatteBorder (0, 0, 1, 0, new java.awt.Color(233, 30, 99))); txtKodePelanggan.setSelectionColor(new java.awt.Color(233, 30, 99)); txtKodePelanggan.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) {

txtKodePelangganKeyPressed(evt); }

});

jLabel4.setFont(new java.awt.Font("Roboto", 0, 12)); // NOI18N jLabel4.setText("Pelanggan");

(49)

txtNamaPelanggan.setEditable(false); txtNamaPelanggan.setBackground(new java.awt.Color(255, 255, 255)); txtNamaPelanggan.setFont(new java.awt.Font("Roboto", 1, 14)); // NOI18N txtNamaPelanggan.setBorder(javax.swing.BorderFactory.createMatteBorder (0, 0, 1, 0, new java.awt.Color(233, 30, 99))); txtNamaPelanggan.setSelectionColor(new java.awt.Color(233, 30, 99));

jLabel5.setFont(new java.awt.Font("Roboto", 1, 12)); // NOI18N jLabel5.setText("[F1] Untuk Cari");

jLabel7.setFont(new java.awt.Font("Roboto", 1, 12)); // NOI18N jLabel7.setText("[Del] Untuk Hapus");

txtTotal.setEditable(false);

txtTotal.setBackground(new java.awt.Color(255, 255, 255)); txtTotal.setFont(new java.awt.Font("Roboto", 1, 18)); // NOI18N txtTotal.setHorizontalAlignment(javax.swing.JTextField.RIGHT); txtTotal.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(233, 30, 99)));

jLabel8.setFont(new java.awt.Font("Roboto", 0, 12)); // NOI18N jLabel8.setText("Total");

txtKeterangan.setFont(new java.awt.Font("Roboto", 1, 14)); // NOI18N

txtKeterangan.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(233, 30, 99)));

txtKeterangan.setSelectionColor(new java.awt.Color(233, 30, 99)); jLabel9.setFont(new java.awt.Font("Roboto", 0, 12)); // NOI18N jLabel9.setText("Keterangan");

javax.swing.GroupLayout layout = new

javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING ) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel5, javax.swing.GroupLayout.Alignment.TRAILING,

(50)

javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(bsimpan, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATE D) .addComponent(bbatal, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jLabel2) .addGap(34, 34, 34) .addComponent(txtNoTransaksi, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .LEADING) .addComponent(jLabel3) .addComponent(jLabel4) .addComponent(jLabel9)) .addGap(18, 18, 18)

(51)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .LEADING, false) .addGroup(layout.createSequentialGroup() .addComponent(txtKodePelanggan, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATE D) .addComponent(txtNamaPelanggan, javax.swing.GroupLayout.PREFERRED_SIZE, 284, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(txtTanggalTransaksi, javax.swing.GroupLayout.PREFERRED_SIZE, 227, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(txtKeterangan))) .addGroup(layout.createSequentialGroup() .addComponent(jLabel5) .addGap(18, 18, 18) .addComponent(jLabel7)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel8) .addGap(18, 18, 18) .addComponent(txtTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 227, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING ) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .CENTER)

(52)

.addComponent(txtNoTransaksi, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(12, 12, 12) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .CENTER) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(txtTanggalTransaksi, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATE D) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .CENTER) .addComponent(txtKodePelanggan, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(txtNamaPelanggan, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATE D) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .CENTER) .addComponent(txtKeterangan, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(20, 20, 20) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .BASELINE)

(53)

.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATE D) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 166, Short.MAX_VALUE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .CENTER) .addComponent(txtTotal, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE,30, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(14, 14, 14) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .BASELINE) .addComponent(bsimpan, javax.swing.GroupLayout.PREFERRED_SIZE,45, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(bbatal, javax.swing.GroupLayout.PREFERRED_SIZE,45, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); pack(); }// </editor-fold>

private void bbatalActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:

dispose();

}

private void formMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

}

private void tbldetail_transaksiMouseClicked(java.awt.event.MouseEvent evt) {

(54)

int row = tbldetail_transaksi.getSelectedRow();

this.KodeLayanan = (String) model_detail.getValueAt(row, 0); }

private void bsimpanActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:

if ("".equals(txtNamaPelanggan.getText())) {

JOptionPane.showMessageDialog(rootPane, "Mohon isi data dulu", "Info", JOptionPane.ERROR_MESSAGE);

return; }

if (model_detail.getRowCount() == 1) { try {

String kode = (String) model_detail.getValueAt(0, 0); } catch (Exception e) {

JOptionPane.showMessageDialog(rootPane, "Anda belum memilih layanan apa pun!", "Info", JOptionPane.ERROR_MESSAGE); return; } } transaksi.setNo_transaksi(txtNoTransaksi.getText()); transaksi.setTanggal_transaksi(new java.sql.Date(new java.util.Date().getTime())); transaksi.setKode_pelanggan(txtKodePelanggan.getText()); transaksi.setId_user(MentariLaundry.id_user); transaksi.setTotal_transaksi(total); transaksi.setKeterangan(txtKeterangan.getText()); transaksi.setStatus_transaksi("Di Proses"); if (transaksi.tambahTransaksi() > 0) {

for (int i = 0; i < model_detail.getRowCount(); i++) { try {

String Kode = (String) model_detail.getValueAt(i, 0);

int Harga = Integer.parseInt(model_detail.getValueAt(i, 3).toString());

int Jumlah = Integer.parseInt(model_detail.getValueAt(i, 4).toString()); if (Jumlah > 0) { detail_transaksi.setNo_transaksi(txtNoTransaksi.getText()); detail_transaksi.setJenis_layanan(Kode); detail_transaksi.setKode_layanan(Kode); detail_transaksi.setHarga_layanan(Harga); detail_transaksi.setJumlah(Jumlah);

(55)

detail_transaksi.tambahDetailTransaksi(); }

} catch (Exception ex) { }

}

model_detail.getDataVector().removeAllElements();

JOptionPane.showMessageDialog(rootPane, "Data [Transaksi] baru berhasil disimpan", "Info", JOptionPane.INFORMATION_MESSAGE); } else {

JOptionPane.showMessageDialog(rootPane, "Data [Transaksi] gagal disimpan\n" + transaksi.getError(), "Info", JOptionPane.ERROR_MESSAGE);

return; }

dispose();

}

private void lblTutupMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

dispose();

}

private void jPanel1MousePressed(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

}

private void formMouseDragged(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

setLocation(evt.getXOnScreen() - tx, evt.getYOnScreen() - ty); }

private void formMousePressed(java.awt.event.MouseEvent evt) { tx = evt.getX();

ty = evt.getY(); // TODO add your handling code here: }

private void tbldetail_transaksiKeyPressed(java.awt.event.KeyEvent evt) { if (evt.getKeyCode() == KeyEvent.VK_DELETE) { if (!"".equals(this.KodeLayanan)) { row = tbldetail_transaksi.getSelectedRow(); model_detail.removeRow(row); tbldetail_transaksi.repaint(); if (model_detail.getRowCount() == 0) { model_detail.setRowCount(1);

(56)

} } } if (evt.getKeyCode() == KeyEvent.VK_TAB) { try { double subtotal = Double.parseDouble(model_detail.getValueAt(model_detail.getRowCount() - 1, 5).toString()); if (subtotal > 0) { model_detail.setRowCount(model_detail.getRowCount() + 1); tbldetail_transaksi.repaint(); }

} catch (Exception ex) { }

}

hitungTotal();

// TODO add your handling code here: }

private void txtKodePelangganKeyPressed(java.awt.event.KeyEvent evt) {

// TODO add your handling code here:

if (evt.getKeyCode() == KeyEvent.VK_F1 || evt.getKeyCode() == KeyEvent.VK_ENTER) { if (evt.getKeyCode() == KeyEvent.VK_F1) { txtKodePelanggan.setText(new FormCariPelanggan(null, true).cariPelanggan()); if (txtKodePelanggan.getText() != null) { pelanggan = pelanggan.cariKodePelanggan(txtKodePelanggan.getText()); txtNamaPelanggan.setText(pelanggan.getNama_pelanggan()); tbldetail_transaksi.requestFocus(); } else { txtKodePelanggan.setText(""); txtNamaPelanggan.setText(""); } } } } /**

* @param args the command line arguments */

public static void main(String args[]) { /* Set the Nimbus look and feel */

(57)

//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">

/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

* For details see

http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */

try {

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Metal".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } }

} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(FormInputTransaksi.class.getName()).lo g(java.util.logging.Level.SEVERE, null, ex);

}

//</editor-fold> //</editor-fold> //</editor-fold>

java.awt.EventQueue.invokeLater(new Runnable() { public void run() {

FormInputTransaksi dialog = new FormInputTransaksi(new javax.swing.JFrame(), true);

dialog.addWindowListener(new java.awt.event.WindowAdapter() {

@Override

public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); dialog.setVisible(true); } }); }

// Variables declaration - do not modify private javax.swing.JButton bbatal;

private javax.swing.JButton bsimpan; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3;

(58)

private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel5;

private javax.swing.JScrollPane jScrollPane1; private javax.swing.JLabel lblTutup;

private javax.swing.JTable tbldetail_transaksi; private javax.swing.JTextField txtKeterangan; private javax.swing.JTextField txtKodePelanggan; private javax.swing.JTextField txtNamaPelanggan; private javax.swing.JTextField txtNoTransaksi; private javax.swing.JTextField txtTanggalTransaksi; private javax.swing.JTextField txtTotal;

// End of variables declaration }

3.5.2. Blackbox Testing

Tabel.III.18 Blackbox Testing Login

No Skenario Pengujian Test Case Hasil yang

diharapkan

Hasil Pengujian

Kesimpul an

1 Nama user dan

password tidak diisi kemudian klik tombol login Nama user : (kosong) Password: (kosong) Sistem akan menolak akses dan menampilkan pesan text “ ID User dan Password wajib diisi” Sesuai harapan Valid

2 Mengetikkan nama user

tetapi password tidak diisi atau kosong kemudian klik tombol login Nama user : syifa.agnia Password : (kosong) Sistem akan menolak akses dan menampilkan pesan “ ID User dan Password wajib diisi” Sesuai harapan Valid

3 Nama user tidak diisi , tapi password diisi, kemudian klik tombol login Nama user : (kosong) Password: 12345678 Sistem akan menolak akses dan menampilkan pesan text “ID

Sesuai harapan

(59)

User dan Password Wajib di isi” 4 Mengetikkan salah satu

kondisi salah pada nama user atau password kemudian klik tombol login

Nama user: syifa.agnia Password : 12345 (salah) Sistemakan menolak akses, aka dikebalikan kehalaman login dan menampilkan pesan text “ Maaf username dan password anda keliru” Sesuai harapan Valid

5 Mengetikkan nama user

dan password dengan data yang benasr kemudian klik login

Nama user : syifa.agnia Password: 12345678 Sistem akan menampilkan menu utama Sesuai harapan Valid Tabel III.19

Blackbox Testing Transaksi

No Skenario Pengujian Test Case Hasil yang

diharapkan

Hasil Pengujian

Kesimpul an 1 Klik tambah lalu

input nama pelanggan dan keterangan tanpa menginpt kode pelanggan.lalu input kode layanan dengan pencet tombol f1, akan muncul form layanan, lalu klik simpan Nama pelanggan : Dina Asri Kode Pelanggan: (kosong) Sistem akan menolak menyimpan data dan menampilkan pesan text “ Mohon isi Data dulu” Sesuai harapan Valid

2 Input kode pelanggan , tetapi tidak

menginput nama pelanggan, lalu klik ssimpan Nama Pelanggan: (Kosong) Kode pelanggan : PL-001 Sistem akan menolak menyimpan data dan menampilkan pesan “Mohon isi Data dulu”

Sesuai harapan Valid 3 Input kode pelanggan, nama pelanggan, kode layanan kosong, klik simpan Nama pelanggan : Dina Asri Kode pelanggan: PL-0002 Kode Sistem akan menolak menyimpan dan menampilkan pesan text “ Mohon isi Sesuai harapan Valid

(60)

layanan: (kosong)

Data Dulu” 4 Menginput kode

pelanggan, nama pelanggan dank ode layanan dengan benar lalu klik simpan.

Nama pelanggan: Dina Asri Kode pelanggan: PL-0002 Kode layanan : L-01 Sistem akan menerima dan menyimpan data-data transaksi . Sesuai harapan Valid

3.5.3. Spesifikasi Hardware dan Software Tabel III.20

Spesifikasi Software dan Hardware Kebutuhan

Hardware

Keterangan

System Window 8 64-bit

Processor Intel® , @2,40GHz RAM 4GB Harddisk 500GB Monitor 14” LED Keyboard Standard Printer Cannon Mouse Standard Software

Kebutuhan menjalankan aplikasi secara local Bahasa Script Programming : JAVA 8.1 Web Server : Apache 3.2. DBSM : MySQL Anti Virus : Avira Prime

Gambar

Gambar III.1
Gambar III. 2
Gambar III.3
Gambar III.4
+7

Referensi

Dokumen terkait

diterapkan dan sebaiknya harus benar- benar dikaji dan dipelajari secara mendalam, sehingga didapatkan kemudahan dalam menggunakan sistem baru dan waktu penyesuaian

Dengan pertimbangan yang telah diuraikan, maka UIN Syarif Hidayatullah Jakarta menetapkan kebijakan dan standar mutu suasana akademik yang akan menjadi pedoman dan tolok ukur

Jadi, ketika merancang aktivitas komunikasi dengan media massa, individu yang bertanggung jawab untuk komunikasi Biro Humas, Ditjen Gakkum, dan Ditjen KSDAE maupun individu

Pada pola adsorpsi ini setiap situs aktif yang terdapat pada permukaan adsorben hanya bisa menampung satu atom teradsorpsi, sehingga setelah semua situs telah

Dari data yang diperoleh memperlihatkan laju pertumbuhan PDRB selama periode 1987-2000 sebesar 8,79 persen pertahun, sedangkan dalam periode yang sama ekspor menunjukkan

Menurut Arikunto dalam Iskandar dan Narsim (2015, hlm.48) tes yaitu “serentetan pertanyaaan atau latihan serta alat lain yang digunakan untuk mengukur keterampilan

Tidak jarang juga pembelian konsumen di pengaruhi oleh harga promosi, dalam penelitian ini juga membahas tentang pengaruh orang yang berpemahaman agama

Pembiayaan ZIS produktif yang diberikan oleh Baitul Mal Aceh sangat berdampak baik terhadap kehidupan mereka, karena sebelum mendapat pembiayaan modal usaha dari