i
Aplikasi Mekanikal dan Elektrikal Estimator Berbasis
Android
(Studi Kasus PT. Mutiara Mitra Indonesia)
TUGAS AKHIR
Oleh :
Ageng Ahmad Mujtahid 3311211077
Disusun untuk memenuhi syarat kelulusan Program Diploma III
PROGRAM STUDI TEKNIK INFORMATIKA POLITEKNIK NEGERI BATAM
BATAM 2015
ii
HALAMAN PENGESAHAN
Aplikasi Mekanikal dan Elektrikal Estimator Berbasis Android
(Studi Kasus PT. Mutiara Mitra Indonesia)
Oleh :
Ageng Ahmad Mujtahid 3311211077
Tugas Akhir ini telah diterima dan disahkan sebagai persyaratan untuk memperoleh gelar
Ahli Madya di
PROGRAM STUDI DIPLOMA 3 TEKNIK INFORMATIKA POLITEKNIK NEGERI BATAM
Batam, 09 Juli 2015 Disetujui oleh;
Pembimbing,
Sudra Irawan, M.Sc NIK. 113110
iii
HALAMAN PERNYATAAN
Dengan ini, saya:
NIM : Ageng Ahmad Mujtahid Nama : 3311211077
adalah mahasiswa Teknik Informatika Politeknik Batam yang menyatakan bahwa tugas akhir dengan judul:
Aplikasi Mekanikal dan Elektrikal Estimator Berbasis Android
(Studi Kasus PT. Mutiara Mitra Indonesia)
disusun dengan:
1. tidak melakukan plagiat terhadap naskah karya orang lain 2. tidak melakukan pemalsuan data
3. tidak menggunakan karya orang lain tanpa menyebut sumber asli atau tanpa ijin pemilik
Jika kemudian terbukti terjadi pelanggaran terhadap pernyataan di atas, maka saya bersedia menerima sanksi apapun termasuk pencabutan gelar akademik.
Lembar pernyataan ini juga memberikan hak kepada Politeknik Batam untuk mempergunakan, mendistribusikan ataupun memproduksi ulang seluruh hasil Tugas Akhir ini.
Batam, 09 Juli 2015
Ageng Ahmad Mujtahid 3311211077
iv
PERSEMBAHAN
Dengan rasa yang penuh bangga Tugas Akhir ini kupersembahkan kepada:
Orang tuaku tercinta Abi Muhammad Jamil dan Umi Nurmilawati yang selama ini telah mendidik, menyemangati dan memotivasi sehingga saya bisa seperti saat sekarang ini.
Kakek dan Nenek saya yang selalu mensupport dan memberikan semangat selama saya melakukan perkuliahan.
Kemudian saya persembahkan juga tugas akhir ini untuk Anisa Fajar Utami partner yang senantiasa membantu dan memeberikan semangat kepada saya.
Dan tidak lupa juga Adek saya Nawar dan Arif lalu Ibu dan Paman saya yang selalu menyemangati saya agar cepat menyelesaikan perkuliahan.
Semoga seterusnya saya dapat menjadi kebanggan kalian. Salam sayang yang terdalam buat kalian.
Yang Kalian banggakan
v
KATA PENGANTAR
Puji syukur penulis ucapkan kehadirat Allah SWT yang telah melimpahkan rahmat dan hidayah-Nya, sehingga dapat menyelesaikan penyusunan Laporan Tugas Akhir sebagai persyaratan untuk memperoleh gelar ahli madya dari Politeknik Negeri Batam.
Penulis menyadari bahwa dalam penyusunan Laporan Tugas Akhir ini tidak lepas dari dukungan berbagai pihak, oleh karena itu pada kesempatan ini penulis menyampaikan terima kasih kepada :
1. Allah SWT yang telah memberikan kesehatan, kemudahan dan kelancaran selama proses penyelesaian Magang Industri.
2. Kedua Orang Tua dan Keluarga yang selalu memberikan dukungan doa, dorongan semangat dan motifasi yang sangat berharga kepada penulis. 3. Bapak Dr. Priyono Eko Sanyoto, selaku Direktur Utama Politeknik Negeri
Batam.
4. Bapak Sudra Irawan, M.Sc, selaku Pembimbing I Tugas Akhir yang telah meluangkan waktu untuk membimbing dan mengarahkan penulis dalam pembuatan Aplikasi dan Laporan Tugas Akhir ini.
5. Bapak Supardianto, S.ST, selaku Pembimbing II Tugas Akhir sekaligus Wali Dosen.
6. Bapak Dwi Ely Kurniawan, M.Kom, selaku Dosen Pengampu mata kuliah Tugas Akhir sekaligus Dosen Penguji saat seminar Tugas Akhir yang banyak memberikan pengarahan perbaikan.
7. Seluruh dosen Teknik Informatika, staff dan karyawan Politeknik Negeri Batam yang telah membatu dari awal hingga proses pengerjaan Tugas Akhir selesai.
8. Anisa Fajar Utami yang selalu memberikan masukan, dorongan dan motivasi kepada penulis selama pembuatan Aplikasi dan Laporan Tugas Akhir ini selesai.
vi
9. Rekan-rekan seperjuangan serta semua pihak yang telah membantu penulis dalam penyusunan laporan tugas akhir.
Penulis menyadari bahwa penyusunan laporan ini tidak lepas dari kesalahan dan masih jauh dari kesempurnaan. Oleh karena itu kritik dan saran yang membangun sangat diharapkan dari pembaca. Harapan penulis, semoga laporan yang memuat pengalaman dan pengetahuan dari aplikasi Tugas Akhir ini dapat bermanfaat bagi pembaca.
Batam, 09 Juli 2015
vii
ABSTRAK
Aplikasi Mekanikal dan Elektrikal Estimator Berbasis Android (Studi Kasus PT. Mutiara Mitra Indonesia)
Indonesia memiliki begitu banyak bangunan. Salah satu instansi yang berjasa atas keberadaannya bangunan adalah kontraktor. PT. Mutiara Mitra Indonesia adalah salah satu kontraktor yang berdomisili di batam. Untuk mendapatkan proyek, PT. Mutiara Mitra Indonesia harus melakukan Estimasi Proyek untuk melakukan penawaran terhadap client. Estimasi Proyek adalah melakukan perhitungan perkiraan harga material keseluruhan dari suatu proyek. Agar mempermudah karyawan PT. Mutiara Mitra Indonesia melakukan Estimasi dimanapun mereka berada. Penulis membuat Aplikasi Mekanikal dan Elektrikal Berbasis Android, Karenakan Android adalah sistem operasi open source yang banyak di gunakan untuk smartphone dan tablet. Sehingga karyawan PT. Mutiara Mitra Indonesia dapat mendata harga material dan membuat surat penawaran dari aplikasi tersebut.
viii
ABSTRACT
Mechanical and Electrical Estimator Application Based Android (Case Study PT. Mutiara Mitra Indonesia)
Indonesia has so many buildings. One of the agencies whose meritorious over its existence buildings is a contractor. PT. Mutiara Mitra Indonesia is one of the contractors reside in batam. To get the project, PT. Mutiara Mitra Indonesia must estimates project to do his bidding against client. Project estimation is performing an approximate calculation material prices the sum total of a project. To ease employees of PT. Mutiara Mitra Indonesia estimates wherever they are. The author create a mechanical and electrical estimator application based on android , Because android is open source operating system much in use to smartphone and tablet. So that employees of PT. Mutiara Mitra Indonesia can record material prices and make a bid from the application.
ix
DAFTAR ISI
HALAMAN PENGESAHAN ... ii
HALAMAN PERNYATAAN ... iii
PERSEMBAHAN ... iv
KATA PENGANTAR ... v
ABSTRAK ... vii
ABSTRACT ... viii
DAFTAR ISI ... ix
DAFTAR GAMBAR ... xii
DAFTAR TABEL ... xiii
BAB I PENDAHULUAN ... 1 1.1 Latar Belakang ... 1 1.2 Rumusan Masalah... 2 1.3 Batasan Masalah ... 2 1.4 Tujuan ... 2 1.5 Sistematika Penulisan ... 3
BAB II LANDASAN TEORI ... 4
2.1 Estimasi ... 4
2.2 Proyek Mekanikal dan Elektrikal ... 4
2.3 Android ... 4 2.3 Android Studio ... 5 2.4 PHP (Hypertext Preprocessor) ... 5 2.5 MySQL ... 6 2.6 Java ... 6 2.7 Bluestacks ... 7 2.8 iReport ... 7
BAB III ANALISIS DAN PERANCANGAN ... 9
3.1 Deskripsi Umum Sistem ... 9
3.2 Analisis Kebutuhan Sistem ... 9
Analisis Kebutuhan Perangkat Keras (Hardware) ... 10
Analisis Kebutuhan Perangkat Lunak (Software) ... 10
3.3 Analisis Kebutuhan Fungsional ... 11
x
3.5 Diagram Use Case ... 11
3.6 Skenario Use Case ... 11
Skenario Use Case Melakukan Register ... 11
Skenario Use Case Melakukan Login ... 12
Skenario Use Case Menambah Data Material ... 12
Skenario Use Case Melakukan Estimate ... 13
Skenario Use Case Mencari Harga Material ... 13
Skenario Use Case Melakukan Recovery Password ... 14
3.7 Diagram Sequence ... 14
Diagram Sequence Melakukan Register ... 14
Diagram Sequence Melakukan Login ... 15
Diagram Sequence Menambah Data Material... 15
Diagram Sequence Melakukan Estimate ... 16
Diagram Sequence Mencari Harga Material ... 16
Diagram Sequence Melakukan Recovery Password ... 17
3.8 Diagram Class ... 17
3.9 Rancangan Antarmuka Aplikasi ... 18
Rancangan Antarmuka Halaman Login ... 18
Rancangan Antarmuka Halaman Register ... 19
Rancangan Antarmuka Halaman Utama ... 19
Rancangan Antarmuka Halaman Form Estimate ... 19
Rancangan Antarmuka Halaman Recovery Password ... 20
Rancangan Antarmuka Halaman Material ... 20
3.10 Rancangan Basis Data ... 21
Entity Relationship Diagram ... 21
Struktur Tabel... 22
BAB IV IMPLEMENTASI DAN PENGUJIAN ... 24
4.1 Implementasi Tampilan Antarmuka ... 24
4.1.1 Tampilan Halaman Dashboard ... 24
4.1.2 Tampilan Halaman Login ... 26
xi
4.1.4 Tampilan Halaman Recovery Password ... 36
4.1.5 Tampilan Halaman Utama ... 41
4.1.6 Tampilan Form Estimate ... 44
4.1.7 Tampilan Halaman Estimate ... 49
4.1.8 Tampilan Form Update Estimate ... 55
4.1.9 Tampilan Halaman Material ... 59
4.2 Hasil Pengujian ... 70
BAB V KESIMPULAN DAN SARAN ... 73
5.1 Kesimpulan ... 73
5.2 Saran ... 73
xii
DAFTAR GAMBAR
Gambar 3. 1 Deskripsi Umum Sistem ... 9
Gambar 3. 2 Diagram Use Case ... 11
Gambar 3. 3 Sequence Diagram Melakukan Register ... 15
Gambar 3. 4 Diagram Sequence Melakukan Login ... 15
Gambar 3. 5 Diagram Sequence Menambah Data Material ... 16
Gambar 3. 6 Diagram Sequence Melakukan Estmate ... 16
Gambar 3. 7 Diagram Sequence Mencari Harga Material ... 17
Gambar 3. 8 Diagram Sequence Melakukan Recovery Password ... 17
Gambar 3. 9 Diagram Class ... 18
Gambar 3. 10 Rancangan Antarmuka Halaman Login ... 18
Gambar 3. 11 Rancangan Antarmuka Halaman Register ... 19
Gambar 3. 12 Rancangan Antarmuka Halaman Utama ... 19
Gambar 3. 13 Rancangan Antarmuka Halaman Form Estimate ... 20
Gambar 3. 14 Rancangan Antarmuka Halaman Recovery Password ... 20
Gambar 3. 15 Rancangan Antarmuka Halaman Material ... 21
Gambar 3. 16 Entity Relationship Diagram ... 22
Gambar 4. 1 Tampilan Halaman Dashboard ... 24
Gambar 4. 2 Tampilan Halaman Login ... 27
Gambar 4. 3 Tampilan Halaman Register ... 32
Gambar 4. 4 Tampilan Halaman Recovery Password ... 36
Gambar 4. 5 Tampilan Halaman Utama ... 42
Gambar 4. 6 Tampilan Halaman Form Estimate ... 45
Gambar 4. 7 Tampilan Halaman Estimate ... 49
Gambar 4. 8 Tampilan Form Update Estimate ... 55
Gambar 4. 9 Tampilan Halaman Material... 59
xiii
DAFTAR TABEL
Tabel 3. 1 Spesifikasi Perangkat Keras Pembuatan Aplikasi ... 10
Tabel 3. 2 Spesifikasi Perangkat Keras Penerapan Aplikasi ... 10
Tabel 3. 3 Analisis Kebutuhan Perangkat Lunak ... 10
Tabel 3. 4 Skenario Use Case Melakukan Register ... 11
Tabel 3. 5 Skenario Use Case Melakukan Login ... 12
Tabel 3. 6 Skenario Use Case Menambah Data Material ... 12
Tabel 3. 7 Skenario Use Case Melakukan Estimate ... 13
Tabel 3. 8 Skenario Use Case Mencari Harga Material ... 13
Tabel 3. 9 Skenario Use Case Melakukan Recovery Password ... 14
Tabel 3. 10 Struktur Tabel User ... 22
Tabel 3. 11 Struktur Tabel Estimasi ... 23
Tabel 3. 12 Struktur Tabel Material ... 23
Tabel 4. 1 Deskripsi Tampilan Halaman Dashboard... 24
Tabel 4. 2 Implementasi Tampilan Halaman Dashboard ... 25
Tabel 4. 3 Deskripsi Tampilan Halaman Login ... 27
Tabel 4. 4 Implementasi Tampilan Halaman Login ... 28
Tabel 4. 5 Deskripsi Tampilan Halaman Register ... 32
Tabel 4. 6 Implementasi Tampilan Halaman Register ... 33
Tabel 4. 7 Deskripsi Tampilan Halaman Recovery Password ... 36
Tabel 4. 8 Implementasi Tampilan Halaman Recovery Password ... 37
Tabel 4. 9 Deskripsi Tampilan Halaman Utama ... 42
Tabel 4. 10 Implementasi Tampilan Halaman Utama ... 42
Tabel 4. 11 Deskripsi Tampilan Form Estimate ... 45
Tabel 4. 12 Implementasi Tampilan Form Estimate ... 45
Tabel 4. 13 Deskripsi Tampilan Halaman Estimate ... 49
Tabel 4. 14 Implementasi Tampilan Halaman Estimate ... 50
Tabel 4. 15 Deskripsi Tampilan Form Update Estimate ... 56
Tabel 4. 16 Implementasi Tampilan Form Update Estimate ... 56
xiv
Tabel 4. 18 Implementasi Tampilan Halaman Material... 60 Tabel 4. 19 Tabel Hasil Pengujian ... 70
1
BAB I
PENDAHULUAN
1.1 Latar Belakang
Dalam dunia konstruksi, melakukan estimasi total harga proyek sangat menentukan suatu perusahaan mendapatkan proyek atau tidak. Pengestimasian yang lambat membuat perusahaan tidak mendapatkan proyek karena perusahaan lain memasukkan penawaran harga terlebih dahulu dengan pengestimasiannya yang lebih cepat. Estimasi adalah salah satu proses utama dalam proyek konstruksi untuk mengetahui jumlah uang yang harus disediakan oleh client sebagai bayaran kepada kontraktor. Pada umumnya, sebuah proyek konstruksi membutuhkan biaya yang cukup besar. Ketidaktepatan yang terjadi dalam penyediaannya akan berakibat kurang baik pada pihak-pihak yang terlibat di dalamnya. Bagi pemenang tender, hasil estimasi biaya diperlukan sebagai pegangan untuk melakukan penagihan pembayaran kepada client apabila pekerjaan telah terselesaikan.
PT. Mutiara Mitra Indonesia (PT. MMI) merupakan perusahaan yang bergerak di bidang mekanikal, elektrikal dan jaringan untuk mendukung kegiatan di bidang pembangunan suatu konstruksi. Untuk mendapatkan pekerjaan, direktur dan pemberi pekerjaan selalu melakukan pembicaraan di luar perusahaan. Direktur meminta waktu kepada pemberi pekerjaan untuk melakukan estimasi harga terhadap proyek tersebut. Dalam perjalanannya, estimasi total biaya proyek yang dilakukan PT. MMI masih melakukan input manual dengan menggunakan aplikasi Microsoft Excel. Pengestimasian dengan menggunakan Microsoft Excel membutuhkan waktu yang lama karena harus menginput harga manual dari setiap upah dan material yang dibutuhkan.
Untuk zaman yang serba instan ini, seharusnya pengestimasian total harga proyek dapat memanfaatkan media elektronik sebagai alternatif secara langsung tanpa batasan waktu dan tempat. Jika membahas alat komukasi pada zaman ini maka akan terlintas kata android, yaitu sistem operasi yang digunakan pada smartphone
2
maupun tablet pc. Analisis Horace H. Dediu dalam blognya asymco.com menyebutkan bahwa populasi android telah lebih mencapai 1 milliar penggunanya (Zaiyuna, 2014).
Permasalahan yang terdapat dalam pengestimasian total harga proyek tersebut dapat diselesaikan dengan membuat aplikasi estimator pada smartphone android. Dikarenakan PT. MMI bergerak di bidang mekanikal dan elektrikal, maka diangkat judul Tugas Akhir yaitu Aplikasi Mekanikal dan Elektrikal Estimator Berbasis Android. Aplikasi ini akan mempermudah karyawan dalam melakukan estimasi total harga proyek.
1.2 Rumusan Masalah
Dari latar belakang yang telah dijelaskan, adapun rumusan masalahnya adalah:
1. Bagaimana membuat dan merancang aplikasi mekanikal dan elektrikal
estimator berbasis android ?
2. Bagaimana membuat dan merancang aplikasi yang dapat melakukan menambah data material ?
3. Bagaimana membuat surat penawaran sebagai output dari hasil estimasi?
1.3 Batasan Masalah
Batasan masalahnya adalah:
1. Aplikasi hanya memberikan harga sesuai detail yang diberikan oleh pengguna.
2. Implementasi pada jaringan lokal.
1.4 Tujuan
Adapun tujuan dari Tugas Akhir ini adalah:
1. Membangun aplikasi mekanikal dan elektrikal estimator berbasis android. 2. Membangun database yang berfungsi untuk menambah data material. 3. Menghasilkan surat penawaran sebagai output dari hasil estimasi.
3
1.5 Sistematika Penulisan
Sistematika penulisan dimaksudkan untuk memberikan gambaran secara lebih terperinci mengenai tiap bab yang ada pada tugas akhir. Sistematika penulisan laporan tugas akhir ini terdiri dari:
Bab I Pendahuluan
Berisi tentang Latar Belakang, Rumusan Masalah, Batasan Masalah, Tujuan Penulisan dan Sistematika Penulisan Laporan dari Tugas Akhir yang dilakukan.
Bab II Landasan Teori
Berisi tentang teori-teori yang berhubungan dengan penelitian dan materi yang digunakan sebagai pendukung selama pengerjaan Tugas Akhir seperti: Estimasi, Proyek Mekanikal dan Elektrikal, Android, Android Studio, PHP (Hypertext
Preprocessor), MySQL, Java, Bluestacks dan iReport.
Bab III Analisis dan Perancangan
Berisi analisis pembuatan aplikasi dan perancangan interface sistem.
Bab IV Hasil dan Pembahasan
Membahas implementasi rancangan sistem yang dibuat, uji hasil implementasi sistem serta hasil analisis pengujian sistem.
Bab V Kesimpulan dan Saran
Berisi kesimpulan dari hasil yang didapat dari pengerjaan Tugas Akhir dan memberikan saran-saran yang bermanfaat untuk pengembangan aplikasi dimasa akan datang.
4
BAB II
LANDASAN TEORI
2.1 Estimasi
Menurut Kamus Besar Bahasa Indonesia, Estimasi adalah perkiraan ataupenilaian dan di sebut juga sebagai pendapat. Estimasi sering digunakan dalam pembuatan penawaran untuk mendapatkan pekerjaan. Estimasi yang digunakan dalam penawaran berupa perhitungan total harga pekerjaan tersebut, yang di dapatkan dari penjumlahan setiap upah pekerjaan dan harga material yang di butuhkan dalam pekerjaan tersebut
2.2 Proyek Mekanikal dan Elektrikal
Menurut Wahyudin (2013), Proyek adalah suatu kegiatan mengkoordinasikan segala sesuatu dengan menggunakan perpaduan sumber daya manusia, teknik, administratif, keuangan untuk mencapai tujuan yang jelas dan dalam periode waktu tertentu.
Mekanikal adalah sebuah prinsip ilmu yang mencakup tentang hal-hal mekanis. Yang intinya memerlukan prinsip mekanis dalam penerapannya. Elektrikal adalah sebuah prinsip ilmu yang mencakup tentang hal-halyang memerlukan tenaga listrik dalam penerapannya. Jadi, Mekanikal dan Elektrikal adalah proyek pendukung bangunan yang memerlukan sebuah sistem mekanis dan tenaga listrik (Mistra, 2008:84).
2.3 Android
Menurut Supardi (2011), Android merupakan sistem operasiperangkat mobile berbasis linux yang mencakup sistem operasi, protokoldanaplikasi. Beberapa pengertian lain Android, yaitu :
a. Merupakan platform terbuka (open source) bagi para pengembang (Programmer) untuk membuat aplikasi.
5
c. Bukan bahasa pemograman, akan tetapi hanya menyediakan lingkungan hidup atau run time environment yang di sebut DVM (Dalvik
VirtualMachine) yang telah dioptimasi untuk perankat dengan sistem
memoriyang kecil.
Android memiliki banyak versi diantaranya adalah Android Versi 1.1, Android Cupcake, Android Donut, Android Éclair, Android Frozen Yoghurt, Android Gingerbread, Android Honeycomb, Android Ice Cream, Android Jelly Bean dan yang terakhir adalah Android Kitkat. Pembaruan antarmuka versi inimemiliki bar status dan navigasi transparan pada layar depan, mesin virtual eksperimental baru, ART serta dukungan Bluetooth message access profile (MAP).
2.3 Android Studio
Android Studio merupakan sebuah IDE (Integrated Development Environment) yang dibuat oleh Google dan dirancang khusus untuk developers androiddalam mengembangkan aplikasi berbasis android berdasarkan IntelliJ IDEA. Android Studio menawarkan :
a. Sistem pembangun fleksibel berbasis Gradle. b. Berbagai jenis dan beberapa generasi berkas APK.
c. Tamplate yang biasa digunakan untuk membangun aplikasi umum.
d. Layout Editor yang di dukung dengan drag dan drop dalam merubah tema. e. Alat untuk melihat kinerja, kegunaan, kesesuaian versi dan masalah
lainnya.
f. ProGuard dan app-signing capabilities.
g. Built-in yang mendukung untuk penggunaan Google Cloud Platform, sehingga mudah untuk mengintegrasikan Google Cloud Messaging dan
App Engine.
2.4 PHP (Hypertext Preprocessor)
Menurut Madcoms (2009), PHP adalah salah satu bahasa pemrograman yang berjalan di dalam server dan mampu membuat web menjadi interaktif dan dinamis. PHP dapat mengolah data dari komputer client dan dari komputer server,
6
sehingga mudah disajikan dalam browser. Program PHP ditulis dalam file plain text (teks biasa) yang berekstensi (.php).
PHP ditulis (diciptakan) oleh Rasmus Lerdorf, seorang software engineer asal Greenland sekitar tahun 1995. Pada awalnya, PHP digunakan Rasmus hanya sebagai pencatat jumlah pengunjung pada website pribadinya. Karena itu bahasa tersebut dinamakan Personal Home Page (PHP) Tools. Tetapi, karena perkembangan yang cukup disukai oleh komunitas nya, maka beliau pun merilis bahasa PHP tersebut ke publik dengan lisensi open-source. Saat ini, PHP adalah server-side scripting yang paling banyak digunakan di website-website di seluruh dunia, dengan versi sudah mencapai versi 5 dan statistiknya terus bertambah (Yuliano,2012).
2.5 MySQL
MySQL adalah sebuah program database server yang mampu menerima dan mengirimkan datanya dengan sangat cepat, multi user, serta menggunakan perintah standar SQL (Structured Query Language). MySQL adalah sebuah program database, sedangkan SQL adalah bahasa perintah (Query) dalam program MySQL (Nugroho, 2005).
2.6 Java
Java adalah bahasa pemograman yang berorientaasi objek (OOP) dan dapat dijalankan pada berbagai platform sistem operasi. Pertama rilis, Java disebut JDK (Java Development Kit), hingga JDK versi 2 atau dikenal dengan Java 2, dibagi menjadi 3 edisi yaitu, J2SE (Java 2 Standard Edition), J2EE (Java 2 Enterprise
Edition), dan J2ME (Java 2 Micro Edition).
a. J2SE merupakan Edisi atau teknologi untuk pemrograman desktop atau apliasi layar (console). J2SE juga merupakan perangkat lunak dasar yang harus dipasang sebelum dapat menggunakan J2EE dan J2ME.
b. J2EE merupakan edisi atau teknologi untuk pemrograman enterprise, seperti pemrograman database, JSP, Beans, dan lain-lainnya.
7
c. J2ME merupakan edisi atau teknologi untuk pemrograman
mobile/handphone dan peralatan kecil (small device).
Setelah Java terpasang, di dalam sistem komputer terdapat JVM (Java Virtual
Machine). Di dalam JVM tersebut terdapat JRE (Java Runtime Environment).
Program yang diketik dengan bahasa java memiliki ekstensi .java, akan menghasilkan file .class setelah terkompilasi. File kelas (.class) dapat dijalankan dengan memanfaatkan JRE.
2.7 Bluestacks
BlueStacks adalah aplikasi yang bisa di gunakan pada sistem operasi Windows dan Mac sebagai emulator untuk android OS. Bluestacks didirikan pada tahun 2011 untuk mendorong batas-batas dari ekosistem mobile. Saat ini lebih dari 85 juta orang di seluruh dunia menggunakan App Player ini untuk menjalankan aplikasi produk mobile apps dan permainan di layar yang lebih besar dengan menggunakan teknologi Layercake. Di sisi advertiser, memiliki platform yang unik yang menggabungkan saluran iklan digital dan tradisional untuk memaksimalkan baik dengan cara tidak ada yang dilakukan sebelumnya (www.bluestacks .com).
2.8 iReport
Menurut Toffoli (2015), iReport adalah tools yang memudahkan Anda membuat laporan. Biasanya iReport di gunakan dalam bahasa pemrograman Java. Dalam gambaran besar, iReport Designer memungkinkan untuk merancang laporan. iReport Designer juga memungkinkan mengkonfigurasi sumber data dan menggunakannya untuk menguji laporan. Dalam banyak kasus, wizard data-driven dapat membantu merancang laporan lebih cepat. iReport Designer meliputi JasperReports engine untuk melihat pratinjau laporan output, pengujian, dan memperbaiki laporan.
iReport Designer adalah media yang kuat untuk merancang laporan. Laporan dapat didesain dari awal atau dari salah satu dari banyak template siap digunakan yang tersedia. iReport Designer membantu semua fase pengembangan laporan
8
diantaranya : desain jrxml, kompilasi Jasper, pelaksanaan laporan , dan ekspor dokumen atau visualisasi .
9
BAB III
ANALISIS DAN PERANCANGAN
3.1 Deskripsi Umum Sistem
Penggambaran deskripsi sistem secara umum dapat dilihat pada Gambar 3.1.
Gambar 3. 1 Deskripsi Umum Sistem
Secara umum, aplikasi yang akan di buat ini dapat menangani beberapa aspek, yaitu:
1. Register, dalam aspek ini, penggunaakan memasukkan data diri kedalam aplikasi, agar aplikasi dapat menyimpan datatersebut kedalam Database. 2. Login, dalam aspek ini, penggunaakan memasukkan ID dan Password
kedalam aplikasi, agar pengguna dapat mengakses aplikasi tersebut.
3. Data Material, dalam aspek ini, pengguna dapat memasukkan data spesifikasi dari material kedalam aplikasi, agar aplikasi dapat menyimpan data tersebut kedalam Database.
4. Estimasi, dalam aspek ini, pengguna dapat merencanakan macam-macam keperluan material yang akan di gunakan untuk suatu proyek,hasil estimasi tersebut berupa total harga proyek yang akan dikerjakan tersebut.
5. Surat Penawaran, dalam aspek ini, pengguna mendapatkan surat penawaran sesuai estimasi yang dilakukan oleh pengguna.
3.2 Analisis Kebutuhan Sistem
Analisis kebutuhan sistem dipergunakan untuk menambah dan membantu jalannya proses pembuatan suatu objek. Dibagian ini akan dibagi menjadi dua
10
bagian yaitu Analisis Kebutuhan Fungsional dan Analisis Kebutuhan Non-fungsional.
Analisis Kebutuhan Perangkat Keras (Hardware)
Untuk merancang aplikasi, dibutuhkan perangkat keras yang mendukung dalam pembuatannya. Perangkat keras yang digunakan dalam pembuatan Aplikasi Estimator Mekanikal dan Elektrikal terdiri dari :
• Spesifikasi perangkat keras untuk proses pembuatan aplikasi dapat dilihat pada Tabel 3.1.
Tabel 3. 1 Spesifikasi Perangkat Keras Pembuatan Aplikasi
Processor Intel(R) Core(TM)2 Duo CPU T5750
Memory 3 GB
Hard Disk 320 GB
Monitor 14”
• Spesifikasi perangkat keras untuk penerapan aplikasi dapat dilihat pada Tabel 3.2.
Tabel 3. 2 Spesifikasi Perangkat Keras Penerapan Aplikasi
Processor Intel(R) Core(TM)2 Duo CPU T5750
Memory 3 GB
Hard Disk 320 GB
Monitor 14”
Analisis Kebutuhan Perangkat Lunak (Software)
Spesifikasi perangkat lunak selama proses pembuatan aplikasi dapat dilihat pada Tabel 3.3.
Tabel 3. 3 Analisis Kebutuhan Perangkat Lunak Sistem Operasi Windows 7 (32 bit)
Bahasa Pemrograman Java, HTML
Basis Data MySQL
Web Server Apache
Editor Aplikasi Android Studio
11
3.3 Analisis Kebutuhan Fungsional
F-001 Aplikasi menangani proses Login dan logout. F-002 Aplikasi dapat membuat akun.
F-003 Aplikasi dapat meakukan Recovery Password. F-004 Aplikasi dapat menambah data material. F-005 Aplikasi dapat melakukan estimate.
3.4 Analisis Kebutuhan Non-fungsional
NF-001 Aplikasi Mekanikal dan Elektrikal Estimator menggunakan Bahasa Inggris.
3.5 Diagram Use Case
Pemodelan kebutuhan sistem dibuat dengan menggunakan bantuan model use
case. Diagram use case ini menggambarkan kebutuhan sistem secara keseluruhan.
Diagram use case yang digunakan dapat dilihat pada Gambar 3.2.
Gambar 3. 2 Diagram Use Case
3.6 Skenario Use Case
Skenario Use Case Melakukan Register
Skenario Use Case Melakukan Register dapat dilihat pada Tabel 3.4. Tabel 3. 4 Skenario Use Case Melakukan Register
Nama Use Case Melakukan Register Aktor Pengguna
Kondisi Awal Pengguna belum memiliki akun Kondisi Akhir Pengguna memiliki akun
Skenario Normal
12
1. Pengguna klik button Register
2. Aplikasi menampilkan form untuk meminta masukkan data user yang baru
3. Pengguna melakukan pengisian
form sesuai dengan data pribadi
lalu klik button Register
4. Aplikasi menyimpan data pengguna yang baru kedalam database.
5. Aplikasi memberikan konfirmasi berhasil atau tidaknya registrasi pengguna.
Skenario Use Case Melakukan Login
Skenario Use Case Melakukan Login dapat dilihat pada Tabel 3.5.
Tabel 3. 5 Skenario Use Case Melakukan Login
Nama Use Case Melakukan Login Aktor Pengguna
Kondisi Awal Pengguna belum Login Kondisi Akhir Pengguna telah Login
Skenario Normal
Aksi Aktor Respons Aplikasi 1. Pengguna mengisi fieldID dan
Password yang sudah tersedia
dan melakukan klik terhadap
button Login
2. Aplikasi membaca serta mencocokkan ID dan Password yang tersimpan di dalam database 3. Jika ID dan Password benar maka
aplikasi akan menampilkan halaman utama
4. Jika ID dan Password salah maka aplikasi akan menampilkan “ID/Password yang anda masukkan salah” dan meminta untuk memasukkan ID dan Password ulang
Skenario Use Case Menambah Data Material
Skenario Use Case Menambah Data Material dapat dilihat pada Tabel 3.6. Tabel 3. 6 Skenario Use Case Menambah Data Material
13
Aktor Pengguna
Kondisi Awal Pengguna sudah Login ke dalam aplikasi
Kondisi Akhir Pengguna dapat menambah data mateeial
Skenario Normal
Aksi Aktor Respons Aplikasi
1. Penggunamelakukan klik terhadap
button Material
2. Aplikasi menampilkan halaman Material
3. Pengguna melakukan pengisian terhadap data material baru
4. Aplikasi memproses dan
menyimpan data material ke dalam Database
Skenario Use Case Melakukan Estimate
Skenario Use Case Melakukan Estimate dapat dilihat pada Tabel 3.7. Tabel 3. 7 Skenario Use Case Melakukan Estimate
Nama Use Case Melakukan Estimate
Aktor Pengguna
Kondisi Awal Pengguna sudah Login ke dalam aplikasi
Kondisi Akhir Menampilkan data estimasi
Skenario Normal
Aksi Aktor Respons Aplikasi
1. Pengguna melakukan klik terhadap button Estimasi
2. Aplikasi menampilkan Form Estimasi
3. Pengguna melakukan pengisian nama-nama material apa saja yang di butuhkan ke dalam form
4. Aplikasi mencari harga material di dalam database kemudian
menyimpan data estimasi 5. Pengguna melakukan klik terhadap
button Look a Estimate
6. Aplikasi mencari data estimasi yang telah di input pengguna dan
menampilkannya.
Skenario Use Case Mencari Harga Material
Skenario Use Case Mencari Harga Material dapat dilihat pada Tabel 3.8.
14
Nama Use Case Mencari Harga Material
Aktor Pengguna
Kondisi Awal Pengguna sudah Login ke dalam aplikasi
Kondisi Akhir Harga material ditampilkan
Skenario Normal
Aksi Aktor Respons Aplikasi
1. Pengguna melakukan klik terhadap
Button Material
2. Aplikasi menampilkan Halaman Material
3. Pengguna mengisi field cari nama dan klik button Cari
4. Aplikasi memproses data dan menampilkan Harga Material
Skenario Use Case Melakukan Recovery Password
Skenario Use Case Melakukan Recovery Password dapat dilihat pada Tabel 3.9.
Tabel 3. 9 Skenario Use Case Melakukan Recovery Password
Nama Use Case Melakukan Recovery Password
Aktor Pengguna
Kondisi Awal Pengguna belum bisa Login
Kondisi Akhir Password ditampilkan
Skenario Normal
Aksi Aktor Respons Aplikasi
1. Pengguna melakukan klik terhadap
Button Lupa Password
2. Aplikasi menampilkan form lupa password
3. Pengguna mengisi form lupa
password
4. Aplikasi memproses data dan menampilkan password pengguna
3.7 Diagram Sequence
Diagram Sequence Melakukan Register
15
Gambar 3. 3 Sequence Diagram Melakukan Register
Diagram Sequence Melakukan Login
Diagram Sequence Melakukan Login dapat dilihat pada Gambar 3.4.
Gambar 3. 4 Diagram Sequence Melakukan Login
Diagram Sequence Menambah Data Material
16
Gambar 3. 5 Diagram Sequence Menambah Data Material
Diagram Sequence Melakukan Estimate
Diagram Sequence Melakukan Estimate dapat dilihat pada Gambar 3.6.
Gambar 3. 6 Diagram Sequence Melakukan Estmate Diagram Sequence Mencari Harga Material
17
Gambar 3. 7 Diagram Sequence Mencari Harga Material
Diagram Sequence Melakukan Recovery Password
Diagram Sequence Membuat dan Mengirim Memo dapat dilihat pada Gambar 3.8.
Gambar 3. 8 Diagram Sequence Melakukan Recovery Password
3.8 Diagram Class
Diagram class aplikasi server memo elektronik berbasis web dapat dilihat pada Gambar 3.9.
18
Gambar 3. 9 Diagram Class
3.9 Rancangan Antarmuka Aplikasi
Rancangan Antarmuka Halaman LoginRancangan Antarmuka Halaman Login dapat dilihat pada Gambar 3.10.
19 Rancangan Antarmuka Halaman Register
Rancangan Antarmuka Halaman Register dapat dilihat pada Gambar 3.11.
Gambar 3. 11 Rancangan Antarmuka Halaman Register Rancangan Antarmuka Halaman Utama
Rancangan Antarmuka Halaman Utama dapat dilihat pada Gambar 3.12.
Gambar 3. 12 Rancangan Antarmuka Halaman Utama Rancangan Antarmuka Halaman Form Estimate
20
Gambar 3. 13 Rancangan Antarmuka Halaman Form Estimate Rancangan Antarmuka Halaman Recovery Password
Rancangan Antarmuka Halaman Recovery Password dapat dilihat pada Gambar 3.14.
Gambar 3. 14 Rancangan Antarmuka Halaman Recovery Password Rancangan Antarmuka Halaman Material
21
Gambar 3. 15 Rancangan Antarmuka Halaman Material
3.10 Rancangan Basis Data
Entity Relationship Diagram
Entity Relationship Diagram adalah pemodelan basis data dengan rangkaian hubungan tabel. Entity Relationship Diagram Aplikasi Server Memo Elektronik dijelaskan pada Gambar 3.20.
22
Gambar 3. 16 Entity Relationship Diagram Struktur Tabel
Struktur tabel memaparkan rancangan isi tabel yang digunakan dalam sistem. Struktur tabel pada aplikasi server memo berbasis web adalah sebagai berikut: 1. Struktur Tabel User
Struktur Tabel User dapat dilihat pada Tabel 3.10. Tabel 3. 10 Struktur Tabel User
23
Struktur Tabel Estimasi dapat dilihat pada Tabel 3.11. Tabel 3. 11 Struktur Tabel Estimasi
3. Struktur Tabel Material
Struktur Tabel Material dapat dilihat pada Tabel 3.12. Tabel 3. 12 Struktur Tabel Material
24
BAB IV
IMPLEMENTASI DAN PENGUJIAN
Setelah melakukan tahap perancangan maka tahap selanjutnya adalah implementasi dan penguijian terhadap produk. Implementasi dari tahap perancangan tersebut adalah sebagai berikut:
4.1 Implementasi Tampilan Antarmuka
4.1.1 Tampilan Halaman Dashboard
Tampilan Halaman Dashboard aplikasi ditunjukkan pada Gambar 4.1.
Gambar 4. 1 Tampilan Halaman Dashboard
Deskripsi Tampilan Halaman Dashboard aplikasi dijelaskan pada Tabel 4.1. Tabel 4. 1 Deskripsi Tampilan Halaman Dashboard
Nama File activity_dashboard.xml Deskripsi
ID_Objek Jenis Keterangan
pasang Button Sebagai perintah terhadap aplikasi untuk menampilkan halaman utama apabila pengguna sudah login atau menampilkan halaman login apabila dalam keadaan logout
25
memberhentikan aplikasi
Implementasi Tampilan Halaman Dashboard aplikasi dijelaskan pada Tabel 4.2. Tabel 4. 2 Implementasi Tampilan Halaman Dashboard
Dashboard.java
public class Dashboard extends Activity implements OnClickListener {
Button exit, pasang; Intent a;
ConnectionDetector cd;
Boolean isInternetPresent = false; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); exit=(Button)findViewById(R.id.exit); pasang =(Button)findViewById(R.id.pasang); cekInternet(); exit.setOnClickListener(this); } @Override
public void onClick(View v) { switch (v.getId()) { case R.id.pasang: a = new Intent(getApplicationContext(), Akunku.class); startActivity(a); break; case R.id.exit: Dialog(); break; default: break; } }
public void Dialog(){
AlertDialog.Builder builder= new AlertDialog.Builder(this);
builder.setMessage("Exit ?");
builder.setPositiveButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int arg1) {
dialog.dismiss(); }
26 });
builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) { finish(); } }); builder.create().show(); } @Override
public void onBackPressed() { Dialog();
}
public void cekInternet(){ cd = new ConnectionDetector(getApplicationContext()); isInternetPresent = cd.isConnectingToInternet(); if (isInternetPresent) { Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_SHORT) .show();
pasang.setOnClickListener(this); }else {
Toast.makeText(getApplicationContext(), "No Internet Access", Toast.LENGTH_SHORT) .show(); }
} }
4.1.2 Tampilan Halaman Login
27
Gambar 4. 2 Tampilan Halaman Login
Deskripsi Tampilan Halaman Login aplikasi dijelaskan pada Tabel 4.3. Tabel 4. 3 Deskripsi Tampilan Halaman Login
Nama File login.xml
Deskripsi
ID_Objek Jenis Keterangan
email EditText Diisi sesuai dengan email password EditText Diisi sesuai dengan password
keterangan TextView Menampilkan output apabila terjadi kesalahan submit Button Sebagai perintah terhadap aplikasi untuk melakukan
login
register Button Sebagai perintah terhadap aplikasi untuk menampilkan halaman Register
lupa Button Sebagai perintah terhadap aplikasi untuk menampilkan halaman Recovery Password
28
Tabel 4. 4 Implementasi Tampilan Halaman Login Login.java
public class Login extends Activity implements OnClickListener {
Button register, login,lupa; Intent a;
EditText email, password; String url, success;
SessionManager session; ConnectionDetector cd;
Boolean isInternetPresent = false; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); session = new SessionManager(getApplicationContext()); Toast.makeText(getApplicationContext(), "User Login Status: " + session.isLoggedIn(),
Toast.LENGTH_LONG).show(); register = (Button) findViewById(R.id.register); login = (Button) findViewById(R.id.submit);
lupa = (Button) findViewById(R.id.lupa); email = (EditText) findViewById(R.id.email); password = (EditText) findViewById(R.id.password); cekInternet(); register.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { Intent myIntent = new
Intent(arg0.getContext(), Register.class); startActivityForResult(myIntent, 0); } }); lupa.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { Intent myIntent = new
Intent(arg0.getContext(), LupaPassword.class);
29 }
}); }
@Override
public void onClick(View v) { switch (v.getId()) { case R.id.submit: url = "http://192.168.43.239/login/login.php?" + "email=" + email.getText().toString() + "&password=" + password.getText().toString(); if (email.getText().toString().trim().length() > 0 && password.getText().toString().trim().length() > 0) { new AmbilData().execute(); } else {
Toast.makeText(this, "Insert your Email and Password",Toast.LENGTH_SHORT).show();
Log.e("error", "Can't get a file 1"); } break; default: break; } }
public class AmbilData extends AsyncTask<String, String, String> {
ArrayList<HashMap<String, String>> contactList = new ArrayList
<HashMap<String, String>>(); ProgressDialog pDialog;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub super.onPreExecute();
pDialog = new ProgressDialog(Login.this); pDialog.setMessage("Loading Data ..."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } @Override
protected String doInBackground(String... arg0) {
JSONParser jParser = new JSONParser(); JSONObject json =
30 jParser.getJSONFromUrl(url); try {
success = json.getString("success"); Log.e("error", "Success No.=" +
success); JSONArray hasil = json.getJSONArray("login"); if (success.equals("1")) { for (int i = 0; i < hasil.length(); i++) { JSONObject c = hasil.getJSONObject(i); String namalengkap = c.getString("namalengkap").trim(); String email = c.getString("email").trim(); session.createLoginSession(namalengkap, email); Log.e("ok", "Get a File"); }
} else {
Log.e("error", "Can't get a File 0");
}
} catch (Exception e) {
Log.e("error", "Can't LOGIN"); }
return null; }
@Override
protected void onPostExecute(String result) { super.onPostExecute(result); pDialog.dismiss(); if (success.equals("1")) { a = new Intent(Login.this, Akunku.class); startActivity(a); finish(); } else {
TextView keterangan = (TextView) findViewById(R.id.keterangan); keterangan.setText("Invalid Email or Password"); password.setText(""); password.requestFocus(); }
31 }
}
@Override
public void onBackPressed() {
Intent i = new Intent(getApplicationContext(), Dashboard.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i);
finish(); }
public void cekInternet() { cd = new ConnectionDetector(getApplicationContext()); isInternetPresent = cd.isConnectingToInternet(); if (isInternetPresent) { Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_SHORT).show(); login.setOnClickListener(this); } else {
Toast.makeText(this, "No Internet Access!!!",Toast.LENGTH_SHORT).show(); Log.e("error", "Disconnected"); } } } login.php <?php include "koneksi.php"; $email = $_GET["email"]; $password = $_GET["password"];
$query = "select * from user where email='$email' and password='$password'"; $hasil = mysql_query($query);
if (mysql_num_rows($hasil) > 0){ $response = array();
$response["login"] = array();
while ($data = mysql_fetch_array($hasil)) { $h['email'] = $data['email'] ; $h['password'] = $data['password'] ; $h['namalengkap'] = $data['namalengkap']; $h['jawaban'] = $data['jawaban']; $h['telepon'] = $data['telepon']; array_push($response["login"], $h); } $response["success"] = "1"; echo json_encode($response);
32 }
else {
$response["success"] = "0";
$response["message"] = "Tidak ada data"; echo json_encode($response);
} ?>
4.1.3 Tampilan Halaman Register
Tampilan Halaman Register aplikasi ditunjukkan pada Gambar 4.3.
Gambar 4. 3 Tampilan Halaman Register
Deskripsi Tampilan Halaman Register aplikasi dijelaskan pada Tabel 4.5. Tabel 4. 5 Deskripsi Tampilan Halaman Register
Nama File register.xml
Deskripsi
ID_Objek Jenis Keterangan
email EditText Diisi sesuai dengan email password EditText Diisi sesuai dengan password namalengkap EditText Diisi sesuai dengan nama lengkap
spinnerKu Spinner Sebagai perintah untuk menampilkan pilihan pertanyaan kepada pengguna
jawaban EditText Diisi sesuai dengan jawaban dari pertanyaan yang di pilih
telepon EditText Diisi sesuai dengan nomor telepon
33
Tabel 4. 6 Implementasi Tampilan Halaman Register Register.java
public class Register extends Activity{ ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
EditText email, password, namalengkap, jawaban, telepon;
private static String url =
"http://192.168.43.239/login/register.php"; private String[] isi_spinner;
String pertanyaan; Button submit; Spinner spinner;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register); isi_spinner = this.getResources().getStringArray(R.array.isi_spinner ); spinner = (Spinner) findViewById(R.id.spinnerKu); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.isi_spinner, android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); email =(EditText)findViewById(R.id.email); password=(EditText)findViewById(R.id.password); namalengkap =(EditText)findViewById(R.id.namalengkap); jawaban=(EditText)findViewById(R.id.jawaban); telepon =(EditText)findViewById(R.id.telepon); submit = (Button)findViewById(R.id.submit); submit.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { new InputData().execute(); } }); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override
public void onItemSelected(AdapterView<?> parent, View v,int position, long id) {
34 Toast.makeText(Register.this, isi_spinner[position], Toast.LENGTH_SHORT).show(); pertanyaan=isi_spinner[position]; } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); }
public class InputData extends AsyncTask<String, String, String>{
String success; @Override
protected void onPreExecute() {
super.onPreExecute(); pDialog = new ProgressDialog(Register.this); pDialog.setMessage("Processing..."); pDialog.setIndeterminate(false); pDialog.show(); } @Override
protected String doInBackground(String... args) { String stremail = email.getText().toString(); String strpassword = password.getText().toString(); String strnamalengkap = namalengkap.getText().toString(); String strpertanyaan=pertanyaan; String strjawaban = jawaban.getText().toString(); String strtelepon = telepon.getText().toString();
List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("email", stremail)); params.add(new BasicNameValuePair("password", strpassword)); params.add(new BasicNameValuePair("namalengkap", strnamalengkap)); params.add(new BasicNameValuePair("pertanyaan", strpertanyaan)); params.add(new
35
BasicNameValuePair("jawaban", strjawaban)); params.add(new
BasicNameValuePair("telepon", strtelepon)); JSONObject json =
jsonParser.makeHttpRequest(url, "POST", params); try { success = json.getString("success"); }catch (Exception e) {Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG).show(); } return null; }
protected void onPostExecute(String file_url) { pDialog.dismiss(); if (success.equals("1")) { Toast.makeText(getApplicationContext(), "Registration Success", Toast.LENGTH_LONG).show(); Intent i = new Intent(getApplicationContext(), Login.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); }else { Toast.makeText(getApplicationContext(), "Registration Failed, "+email.getText().toString()+" Can't
Register", Toast.LENGTH_LONG).show(); }
} }
@Override
public void onBackPressed() {
Intent i = new Intent(getApplicationContext(), Login.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); } } register.php <?php $email = $_POST['email']; $password=$_POST['password']; $namalengkap=$_POST['namalengkap']; $pertanyaan=$_POST['pertanyaan']; $jawaban=$_POST['jawaban']; $telepon=$_POST['telepon'];
36 include "koneksi.php";
$namaTabel = "user";
header('Content-Type: text/xml'); $query = "INSERT INTO $namaTabel
VALUES('$email','$password','$namalengkap','$pertanyaan','$jawaban','$telepon ')";
$hasil = mysql_query($query); if($hasil)
{ $response["success"] = "1";
$response["message"] = "Data sukses diinput"; echo json_encode($response);
} else {$response["success"] = "0";
$response["message"] = "Maaf , terjadi kesalahan"; // echoing JSON response
echo json_encode($response); }
?>
4.1.4 Tampilan Halaman Recovery Password
Tampilan Halaman Recovery Password aplikasi ditunjukkan pada Gambar 4.4.
Gambar 4. 4 Tampilan Halaman Recovery Password
Deskripsi Tampilan Halaman Recovery Password aplikasi dijelaskan pada Tabel 4.7.
Tabel 4. 7 Deskripsi Tampilan Halaman Recovery Password Nama File lupapassword.xml
37 Deskripsi
ID_Objek Jenis Keterangan
email EditText Diisi sesuai dengan email
spinnerKu Spinner Sebagai perintah untuk menampilkan pilihan pertanyaan kepada pengguna
jawaban EditText Diisi sesuai dengan jawaban dari pertanyaan yang di pilih
password TextView Menampilkan output berupa password kepada pengguna
tampilpassword Button Sebagai perintah kepada aplikasi untuk menampilkan password kepada pengguna
Implementasi Tampilan Halaman Recovery Password aplikasi dijelaskan pada Tabel 4.8.
Tabel 4. 8 Implementasi Tampilan Halaman Recovery Password LupaPassword.java
public class LupaPassword extends Activity { ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser(); EditText email,jawaban;
TextView password;
private String[] isi_spinner; Spinner spinner;
String pertanyaan,success,pass; Button tampilpassword;
SessionManager session; Intent a;
private static String url =
"http://192.168.43.239/login/lupapassword.php"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.lupapassword); session = new SessionManager(getApplicationContext()); isi_spinner = this.getResources().getStringArray(R.array.isi_spinner ); spinner = (Spinner) findViewById(R.id.spinnerKu); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.isi_spinner, android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); password =
38 (TextView)findViewById(R.id.password); email=(EditText)findViewById(R.id.email); jawaban=(EditText)findViewById(R.id.jawaban); tampilpassword=(Button)findViewById(R.id.tampilpasswor d); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override
public void onItemSelected(AdapterView<?> parent, View v,int position, long id) {
Toast.makeText(LupaPassword.this, isi_spinner[position], Toast.LENGTH_SHORT).show(); pertanyaan=isi_spinner[position]; } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); tampilpassword.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { new InputData().execute(); }
}); }
public class InputData extends AsyncTask<String, String, String> {
String success; @Override
protected void onPreExecute() {
super.onPreExecute(); pDialog = new ProgressDialog(LupaPassword.this); pDialog.setMessage("Processing..."); pDialog.setIndeterminate(false); pDialog.show(); } @Override
protected String doInBackground(String... args) {
String stremail = email.getText().toString();
String strpertanyaan = pertanyaan; String strjawaban =
39
List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("email", stremail)); params.add(new BasicNameValuePair("pertanyaan", strpertanyaan)); params.add(new BasicNameValuePair("jawaban", strjawaban)); JSONObject json =
jsonParser.makeHttpRequest(url, "POST", params); try { success = json.getString("success"); }catch (Exception e) { Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG).show(); } return null; }
protected void onPostExecute(String file_url) { pDialog.dismiss(); if (success.equals("1")) { Toast.makeText(getApplicationContext(), "Get a Password", Toast.LENGTH_LONG).show(); new AmbilData().execute(); }else { password.setText("");
Toast.makeText(getApplicationContext(), "Can't Get a Password", Toast.LENGTH_LONG).show();
} } }
public class AmbilData extends AsyncTask<String, String, String> {
ArrayList<HashMap<String, String>> contactList = new ArrayList
<HashMap<String, String>>(); ProgressDialog pDialog;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub super.onPreExecute();
pDialog = new
ProgressDialog(LupaPassword.this);
pDialog.setMessage("Loading Data ..."); pDialog.setIndeterminate(false);
40
pDialog.setCancelable(true); pDialog.show();
}
@Override
protected String doInBackground(String... arg0) {
JSONParser jParser = new JSONParser(); JSONObject json =
jParser.getJSONFromUrl(url); try {
success = json.getString("success"); Log.e("error", "nilai sukses=" + success); JSONArray hasil = json.getJSONArray("lupapassword"); if (success.equals("1")) { for (int i = 0; i < hasil.length(); i++) { JSONObject c = hasil.getJSONObject(i); String strpassword = c.getString("password").trim(); pass = strpassword;
Log.e("ok", " Get a File"); }
} else {
Log.e("error", "Can't get a File 0");
}
} catch (Exception e) {
Log.e("error", "Can't get a File 1"); }
return null; }
@Override
protected void onPostExecute(String result) { super.onPostExecute(result);
pDialog.dismiss();
if (success.equals("1")) { password.setText(pass); } else {
TextView keterangan = (TextView) findViewById(R.id.keterangan);
keterangan.setText("Invalid your Email or Answer");
} }
41 }
@Override
public void onBackPressed() {
Intent i = new Intent(getApplicationContext(), Login.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); } } Lupapassword.php <?php include "koneksi.php"; $email =$_POST["email"]; $pertanyaan=$_POST['pertanyaan']; $jawaban=$_POST['jawaban'];
$query = "select * from user where email='$email' and pertanyaan='$pertanyaan' and jawaban='$jawaban'"; $hasil = mysql_query($query);
if (mysql_num_rows($hasil) > 0){ $response = array();
$response["lupapassword"] = array();
while ($data = mysql_fetch_array($hasil)) { $h['email'] = $data['email'] ; $h['password'] = $data['password'] ; $h['namalengkap'] = $data['namalengkap']; $h['pertanyaan'] = $data['pertanyaan']; $h['jawaban'] = $data['jawaban']; $h['telepon'] = $data['telepon']; array_push($response["lupapassword"], $h); } $response["success"] = "1"; echo json_encode($response); } else { $response["success"] = "0";
$response["message"] = "Tidak ada data"; echo json_encode($response);
} ?>
4.1.5 Tampilan Halaman Utama
42
Gambar 4. 5 Tampilan Halaman Utama
Deskripsi Tampilan Halaman Utama aplikasi dijelaskan pada Tabel 4.9. Tabel 4. 9 Deskripsi Tampilan Halaman Utama
Nama File akunku.xml
Deskripsi
ID_Objek Jenis Keterangan
logout Button Sebagai perintah kepada aplikasi untuk melakukan logout id pengguna
estimasi Button Sebagai perintah kepada aplikasi untuk menampilkan halaman Estimate
material Button Sebagai perintah kepada aplikasi untuk menampilkan halaman Material
Implementasi Tampilan Halaman Utama aplikasi dijelaskan pada Tabel 4.10. Tabel 4. 10 Implementasi Tampilan Halaman Utama
Akunku.java
public class Akunku extends Activity { Button logout,estimasi,material; SessionManager session;
ListView lv;
ProgressDialog pDialog; JSONArray contacts = null; String email, namalengkap; @Override
protected void onCreate(Bundle savedInstanceState) {
43 super.onCreate(savedInstanceState); setContentView(R.layout.akunku); session = new SessionManager(getApplicationContext()); Toast.makeText(getApplicationContext(), "User Login Status: " + session.isLoggedIn(),
Toast.LENGTH_LONG).show(); session.checkLogin();
HashMap<String, String> user = session.getUserDetails(); namalengkap = user.get(SessionManager.KEY_NAMALENGKAP); email=user.get(SessionManager.KEY_EMAIL); TextView status = (TextView)findViewById(R.id.status); status.setText(Html.fromHtml("Welcome,<br><b>"+namalen gkap+"</b> ")); estimasi=(Button)findViewById(R.id.estimasi); material=(Button)findViewById(R.id.material); logout = (Button)findViewById(R.id.logout); material.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { Intent myIntent = new
Intent(arg0.getContext(), Material.class); startActivityForResult(myIntent, 0); } }); estimasi.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { Intent myIntent = new
Intent(arg0.getContext(), Estimasi.class); startActivityForResult(myIntent, 0); } }); logout.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { Dialog();
} }); }
44
AlertDialog.Builder builder= new AlertDialog.Builder(this);
builder.setMessage("Logout ?"); builder.setPositiveButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int arg1) {
dialog.dismiss(); } }); builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface arg0, int arg1) { session.logoutUser(); finish(); } }); builder.create().show(); }
@Override public void onBackPressed() { Intent i = new Intent(getApplicationContext(), Dashboard.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); } }
4.1.6 Tampilan Form Estimate
45
Gambar 4. 6 Tampilan Halaman Form Estimate
Deskripsi Tampilan Form Estimate aplikasi dijelaskan pada Tabel 4.11. Tabel 4. 11 Deskripsi Tampilan Form Estimate
Nama File estimasi.xml
Deskripsi
ID_Objek Jenis Keterangan
namaproyek EditText Diisi sesuai nama proyek namamaterial2 AutoCompleteTextView Diisi sesuai nama material jumlahmaterial EditText Diisi sesuai jumlah material
inputmaterial Button Sebagai perintah kepada aplikasi untuk menyimpan data estimasi
lihatestimasi Button Sebagai perintah kepada aplikasi untuk menampilkan halaman Estimate
Implementasi Tampilan Form Estimate aplikasi dijelaskan pada Tabel 4.12. Tabel 4. 12 Implementasi Tampilan Form Estimate
Estimasi.java
public class Estimasi extends Activity implements TextWatcher {
TextView hasil;
AutoCompleteTextView edit; ProgressDialog pDialog; SessionManager session;
46
EditText namaproyek,namamaterial,jumlahmaterial; Button inputmaterial,lihatestimasi;
String email,namaproyek2; private static String url =
"http://192.168.43.239/login/quotation.php"; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.estimasi); session = new
SessionManager(getApplicationContext()); HashMap<String, String> user = session.getUserDetails();
email=user.get(SessionManager.KEY_EMAIL); hasil = (TextView) findViewById(R.id.hasil); edit = (AutoCompleteTextView) findViewById(R.id.namamaterial2); edit.addTextChangedListener(this); edit.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_drop down_item_1line, item)); namaproyek =(EditText)findViewById(R.id.namaproyek); namamaterial =(EditText)findViewById(R.id.namamaterial2); jumlahmaterial=(EditText)findViewById(R.id.jumlahmater ial); inputmaterial = (Button)findViewById(R.id.inputmaterial); lihatestimasi = (Button)findViewById(R.id.lihatestimasi); inputmaterial.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
new InputDatamaterial().execute(); namamaterial.requestFocus(); } }); lihatestimasi.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) { Intent myIntent = new
Intent(arg0.getContext(), Quotation.class); namaproyek
47 namaproyek2=namaproyek.getText().toString(); myIntent.putExtra("namaproyek", namaproyek2); startActivityForResult(myIntent, 0); } }); }
public class InputDatamaterial extends AsyncTask<String, String, String> {
String success; @Override
protected void onPreExecute() {
super.onPreExecute(); pDialog = new ProgressDialog(Estimasi.this); pDialog.setMessage("Processing..."); pDialog.setIndeterminate(false); pDialog.show(); } @Override
protected String doInBackground(String... args) { String strnamaproyek = namaproyek.getText().toString(); String strnamamaterial = namamaterial.getText().toString(); String strjumlahmaterial = jumlahmaterial.getText().toString();
String stremail = email.toString(); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("namaproyek", strnamaproyek)); params.add(new BasicNameValuePair("namamaterial", strnamamaterial)); params.add(new BasicNameValuePair("jumlahmaterial", strjumlahmaterial)); params.add(new BasicNameValuePair("email", stremail)); JSONObject json =
jsonParser.makeHttpRequest(url, "POST", params); try { success = json.getString("success"); }catch (Exception e) { Toast.makeText(getApplicationContext(), "Error!!!", Toast.LENGTH_LONG).show(); }