<<

RESERVASI TIKET ONLINE MENGGUNAKAN SMS GATEWAY UNTUK MEMESAN TIKET BIOSKOP BERBASIS ANDROID

TUGAS AKHIR

IDA VANESSA TURNIP 152406084

PROGRAM STUDI D3 TEKNIK INFORMATIKA DEPARTEMEN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA MEDAN 2018

UNIVERSITAS SUMATERA UTARA RESERVASI TIKET ONLINE MENGGUNAKAN SMS GATEWAY UNTUK MEMESAN TIKET BIOSKOP BERBASIS ANDROID

TUGAS AKHIR

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh gelar Ahli Madya

IDA VANESSA TURNIP 152406084

PROGRAM STUDI D3TEKNIK INFORMATIKA DEPARTEMEN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA MEDAN

UNIVERSITAS SUMATERA UTARA

2018 PERNYATAAN ORISINALITAS

RESERVASI TIKET ONLINE MENGGUNAKAN SMS GATEWAY UNTUK MEMESAN TIKET BIOSKOP BERBASIS ANDROID

LAPORAN TUGAS AKHIR

Saya mengakui bahwa Tugas Akhir ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dari beberapa ringkasan yang masing-masing disebutkan sumbernya.

Medan, Agustus 2018

Ida Vanessa Turnip 152406084

i

UNIVERSITAS SUMATERA UTARA

ii

UNIVERSITAS SUMATERA UTARA

RESERVASI TIKET ONLINE MENGGUNAKAN SMS GATEWAY UNTUK MEMESAN TIKET BIOSKOP BERBASIS ANDROID

ABSTRAK

Bioskop adalah salah satu tempat hiburan yang menjadi sasaran masyarakat. Untuk menonton sebuah film di bioskop diperlukan sebuah tiket yang biasanya harus dibeli di loket bioskop. Calon penonton sering kali mengantri panjang untuk memperoleh tiket tersebut. Masalah tersebut membuat penulis tertarik untuk membuat aplikasi mobile yang berguna untuk mempercepat dan mempermudah pemesanan tiket bioskop, serta dapat memberikan informasi film dan bioskop dengan tepat. Aplikasi mobile untuk pemesanan tiket bioskop ini berjalan pada perangkat mobile yang menggunakan sistem operasi android. Aplikasi ini menggunakan web service yang dibuat menggunakan bahasa pemrograman java. Dengan adanya aplikasi ini dapat mempermudah penonton dalam mendapatkan tiket bioskop dimana pun dan kapan pun hanya dengan menggunakan perangkat mobile dengan akses internet.

Kata kunci: Bioskop, e-ticket, mobile, mobile ticket, mobile ticket application, pemesanan tiket bioskop.

iii

UNIVERSITAS SUMATERA UTARA

ONLINE TICKET RESERVATION USING SMS GATEWAY TO ORDER ANDROID-BASED CINEMA TICKETS.

ABSTRACT

Movie theaters is the one of the most visited public entertaintment. If we want to watch movie in theater, we need a ticket that can be bought in the theater’s ticket counter. Moviegoer often has to wait in log line to buy the ticket. That problem is seems to be interesting for writer’s, and writer’s interested to developing a mobile applications that help ticket reservation easier and more quickly, and displaying movie’s information appropriately. This mobile application for movie’s ticket reservations can be used in any mobile devices which uses Android Operating System. This applications use web services for data exchanging between server and mobile application. Web services that used is builed with java programming language. With this application, moviegoers can buy movie tickets anywhere at any time just requires mobile devices with internet access.

Keywords : buy online ticket, cinema, e-ticket , film, mobile, mobile ticket, mobile ticketing, online ticket reservation.

iv

UNIVERSITAS SUMATERA UTARA

PENGHARGAAN

Puji syukur penulis ucapkan kepada Tuhan Yang Maha Esa atas anugerah dan kasih-Nya sehingga penulis dapat menyelesaikan penyusunan Tugas Akhir ini dengan judul Reservasi Tiket Online Menggunakan SMS Gateway Untuk Memesan Tiket Bioskop Berbasis Android. Terima kasih penulis sampaikan kepada bapak Poltak Sihombing, M.Kom selaku Pembimbing yang telah memberi pengarahan dan bimbingan baik kritik dan saran kepada penulis selama penyusunan Tugas Akhir ini dari awal hingga selesai. Terima kasih kepada bapak Dr.Suyanto, M.Kom selaku Dosen Penasehat Akademik yang telah membimbing penulis selama duduk dibangku perkuliahan. Terima kasih kepada Ibu Dra. Normalina Napitupulu, M.Sc. dan Bapak Drs. James Piter Marbun, M.Kom selaku Ketua dan Sekretaris Program Studi D3 Teknik Informatika FMIPA USU, Dekan Dan Wakil Dekan FMIPA USU, Seluruh Staf dan Dosen Program Studi D3 Teknik Informatika FMIPA USU, Pegawai FMIPA USU dan teman-teman kuliah terkhusus Kom C 2015. Penulis mengucapkan terima kasih kepada kedua orangtua penulis Ayahanda Roiman Turnip dan Ibunda Rolan Siringo-Ringo serta keluarga yang telah memberikan doa dan dukungan untuk penulis. Dan semua pihak yang telah banyak membantu penulis dalam menyelesaikan Tugas Akhir ini yang tidak dapat disebutkan satu persatu. Semoga Tuhan Yang Maha Esa membalasnya.

Medan, Agustus 2018

Ida Vanessa Turnip

v

UNIVERSITAS SUMATERA UTARA

DAFTAR ISI

Halaman PERNYATAAN ORISINALITAS i PENGESAHAN TUGAS AKHIR ii ABSTRAK iii ABSTRACT iv PENGHARGAAN v DAFTAR ISI vi DAFTAR TABEL viii DAFTAR GAMBAR ix DAFTAR LAMPIRAN x

BAB 1 PENDAHULUAN 1.1 Latar Belakang 1 1.2 Rumusan Masalah 3 1.3 Batasan Masalah 3 1.4 Tujuan Penelitian 3 1.5 Manfaat Penelitian 4 1.6 Metodologi Penelitian 4 1.7 Sistematika Penulisan 6

BAB 2 LANDASAN TEORI 2.1 Landasan Teori 8 2.1.1 Sejarah Java 9 2.2 Android 10 2.2.1 Sejarah Android 10 2.2.2 Jenis-Jenis Android 12 2.2.3 Fitur Sistem Operasi Android 15 2.24 Sistem Arsitektur Sistem Operasi Android 16 2.3 Web Service 17 2.4 UML 18 2.4.1 Use Case Diagram 18 2.4.2 Activity Diagram 20 2.4.3 Class Diagram 24 2.4.4 Sequence Diagram 26 2.5 Entity Relationship Diagram 26 2.6 Data Diagram 27 2.7 Flowchart 29 2.8 MySQL 32

vi

UNIVERSITAS SUMATERA UTARA

2.9 Metode Pengujian 33

BAB 3 ANALISA DAN PERMODELAN 3.1 Analisa Sistem 34 3.2 Analisa Sistem Berjalan 34 3.3 Kebutuhan sistem 35 3.4 Perancangan Sistem 35 3.4.1 Diagram konteks 36 3.4.2 Data Flow Diagram (DFD) 37 3.4.3 Flowchart 44 3.4.4 Entity Relationship Diagram (ERD) 46 3.4.5 Use Case Diagram 47 3.4.6 Activity Diagram 50 3.4.7 Class Diagram 52 3.4.8 Sequence Diagram 53

BAB 4 PERANCANGAN DAN IMPLEMENTASI 4.1 Pengertian Implementasi Sistem 58 4.2 Perancangan Sistem 59 4.3 Tujuan Perancangan Sistem 59 4.4 Implementasi Tampilan Antarmuka Aplikasi 59

BAB 5. PENUTUP 5.1 Kesimpulan 48 5.2 Saran 48

DAFTAR PUSTAKA 49 LAMPIRAN 50

vii

UNIVERSITAS SUMATERA UTARA

DAFTAR TABEL

Nomor Judul Halaman Tabel

2.1 Komponen ERD 26 2.2 Processing Symbol 29 2.3 Input Output Symbol 30 2.4 Flow Direction Symbol 31

viii

UNIVERSITAS SUMATERA UTARA

DAFTAR GAMBAR

Nomor Judul Halaman Gambar

2.1. Simbol Use Case 18 2.2 Simbol Actor 19 2.3 Simbol Use Case Relationship 19 2.4 Simbol The Boundary 20 2.5 Simbol Initial Node 20 2.6 Simbol Actions 21 2.7 Simbol Flow 21 2.8 Simbol Decision 22 2.9 Simbol Merge 22 2.10 Simbol Fork 23 2.11 Simbol Join 23 2.12 Simbol Activity Final 24 3.1 Diagram Konteks 36 3.4 DFD Level 0 39 3.5 DFD Level 1 Proses 1.0 40 3.6 DFD Level 1 Proses 2.0 41 3.7 DFD Level 1 Proses 3.0 42 3.8 DFD Level 1 Proses 4.0 43 3.11 Entity Relationship Diagram 46 3.15 Activity Diagram Cari Lokasi 50 3.16 Activity Diagram Cari Film dan Trailer Movie 50 3.17 Activity Diagram Beli Tiket 51 3.18 Activity Diagram Melakukan Pembayaran 51 3.19 Class Diagram Ticketing System 52 3.20 Sequence Diagram Melakukan Login 53 3.21 Sequence Diagram Melakukan Pencarian 54 3.22 Sequence Diagram Merubah Password 56 3.23 Sequence Diagram Modifikasi Data 57 4.1 Tampilan Splash Screen 60 4.2 Tampilan Login 60 4.3 Tampilan Daftar 61 4.4 Tampilan Layar Halaman Movie 62 4.5 Tampilan Menu Utama 63 4.6 Tampilan Form Menu Movie 64 4.7 Tampilan Aplikasi Menu Tiket 65 4.8 Tampilan Menu Rate 66 4.9 Tampilan Aplikasi Menu Info 66 4.10 Halaman Pemesanan 67

ix

UNIVERSITAS SUMATERA UTARA

DAFTAR LAMPIRAN

Nomor Judul Halaman Gambar

Lampiran A : Listing Program 70 Lampiran B : Surat Keterangan Hasil Uji Program Tugas Akhir 71 Mahasiswa Lampiran C : Kartu Bimbingan Tugas Akhir Mahasiswa 72 Lampiran D : Surat Keterangan Dosen Pembimbing 73

x

UNIVERSITAS SUMATERA UTARA

BAB 1 PENDAHULUAN

1.1 Latar Belakang Perkembangan teknologi dan komunikasi saat ini begitu pesat, seiring dengan pesatnya laju perkembangan ini dituntut adanya informasi yang cepat, tepat dan akurat sehingga mengakibatkan persaingan dan pesatnya perkembangan teknologi dan informasi yang ada menuntut suatu sistem yang lebih baik, cepat dan handal dalam menyelesaikan masalah. Keinginan masyarakat untuk memperoleh kemudahan dan melakukan kegiatan sehari-hari mendorong pesatnya kemajuan teknologi. Banyak teknologi yang ditujukan untuk memberikan kemudahan yang diinginkan, seperti misalnya internet. Fakta yang tidak bisa ditolak saat ini adalah kenyataan hampir segala hal dapat diperoleh di internet. Dengan kemajuan teknologi internet memungkinkan seseorang untuk memperoleh informasi dan melakukan transaksi dengan bebas tanpa dibatasi oleh ruang dan waktu. Meskipun demikian, teknologi ini masih belum dimanfaatkan sepenuhnya.

Di zaman yang modern pada saat sekarang ini, perkembangan dunia perfilman sudah berkembang dengan cepat. Ini dapat dilihat dengan semakin banyaknya dunia perfilman yang menghasilkan film-film yang bermutu. Ini dapat dilihat dari antusias masyarakat yang ingin menyaksikan film-film tersebut di bioskop. Bioskop adalah sebuah sarana hiburan masyarakat untuk menonton film- film terbaru dalam negeri maupun luar negeri. Antusiasme masyarakat akan kehadiran bioskop pun juga besar. Setiap hari bioskop selalu dipenuhi oleh pengunjung yang akan menonton film-film terbaru yang ada, dan untuk mempertahankan loyalitas pelanggan, berbagai fasilitas dibioskop pun terus ditingkatkan. Namun, perusahaan bioskop masih memiliki kendala dalam proses pembelian tiket bioskop. Semakin banyaknya masyarakat yang mencari hiburan dengan menonton film di bioskop saat ini, maka pemesanan tiket film di bioskop menjadi masalah yang penting.

1

UNIVERSITAS SUMATERA UTARA

Ada sebagian masyarakat yang rela mengantri dari pagi untuk mendapatkan tiket, bahkan terkadang sudah mengantri pun belum tentu berhasil mendapatkan tiket. Hal ini tentu saja membawa dampak kerugian karena waktu yang digunakan untuk mengantri dapat menjadi lebih efektif dengan melakukan hal-hal lain yang lebih bermanfaat. Dengan pemesanan tiket bioskop semakin hari semakin banyak maka diperlukan sistem untuk dapat mempermudah masyarakat dalam memesan tiket film di bioskop. Saat ini pemesanan tiket bioskop sudah dapat dilakukan secara online dengan membuka halaman web atau mobile dengan cara mengirimkan sms dan membeli secara langsung dengan datang ke bioskop.

Pemesanan tiket bioskop dengan menggunakan mobile saat ini masih menggunakan SMS. SMS harus dikirim sesuai dengan format tertentu, sehingga masyarakat tidak kesulitan untuk menghafal format penulisan ketika mengirim SMS dan memesan tiket menggunakan mobile. Selain itu, dengan pemesanan tiket via mobile sampai saat ini masyarakat tidak dapat memilih sendiri posisi tempat duduk yang diinginkan sehingga customer lebih banyak memilih untuk membeli tiket secara langsung dengan datang ke bioskop.

Pemesanan tiket bioskop dengan web sangat membantu customer dalam memesan tiket bioskop. Dengan pemesanan tiket menggunakan web, akan sangat membantu customer dapat memilih bioskop, film, jam tayang dan posisi tempat duduk sesuai keinginan. Tetapi pemesanan tiket bioskop dengan menggunakan web memiliki kelemahan dalam besaran data yang ditransfer dari server ke client sehingga cenderung prosesnya lambat. Penelitian ini menghasilkan aplikasi berbasis mobile yang memiliki kombinasi keuntungan teknologi mobile dengan web, sehingga pelanggan mendapatkan dengan cepat dan lengkap.

2

UNIVERSITAS SUMATERA UTARA

1.2 Rumusan Masalah Perumusan masalah berdasarkan latar belakang masalah penelitian dibagi- bagi menjadi berikut :

1. Bagaimana cara agar pemesanan tiket bioskop dapat memesan tiket dengan cara mudah dan cepat dimanapun pembeli berada.

2. Bagaimana cara agar pemesan tiket dengan bebas memilih posisi tempat duduk yang pembeli inginkan dengan cepat.

3. Bagaimana mengetahui informasi mengenai alamat bioskop serta film apa saja yang ditampilkan dengan cepat dan mudah.

1.3 Batasan Masalah Dalam pengerjaan aplikasi mobile pemesanan tiket bioskop, terdapat batasan masalah sebagai berikut : 1. Hanya membuat aplikasi mobile untuk pemesanan tiket bioskop, aplikasi untuk mengatur data dalam basis data, dan aplikasi untuk pencetakan tiket.

2. Aplikasi hanya dapat dijalankan pada mobile yang menggunakan sistem operasi android dan memiliki akses internet.

3. Aplikasi hanya dapat digunakan oleh member.

4. Pemesanan tiket tidak dapat dibatalkan.

1.4 Tujuan Penelitian Penulis membagi-bagi tujuan pembuatan tugas akhir berdasarkan latar belakang diatas menjadi beberapa tujuan yaitu : 1. Membuat aplikasi mobile untuk pemesanan tiket bioskop yang mudah dipakai oleh pengguna.

3

UNIVERSITAS SUMATERA UTARA

2. Pemesan tiket dapat memilih secara langsung posisi tempat duduk yang pembeli inginkan dengan melihat denah tempat duduk pada aplikasi mobile untuk pemesanan tiket bioskop.

3. Aplikasi mobile untuk pemesanan tiket bioskop dapat melihat informasi mengenai bioskop, film-film yang sedang ditayangkan dan jadwal film.

1.5 Manfaat Penelitian Adapun manfaat yang dapat diperoleh dari penyusunan tugas akhir ini adalah : 1. Bagi penulis, penelitian ini akan meningkatkan wawasan mengenai sistem informasi jadwal penayangan bioskop dan pemesanan serta pembayaran tiket secara online.

2. Bagi akademis, laporan tugas akhir dapat dijadikan sebagai referensi bagi mahasiswa lainnya yang ingin mengangkat topik mengenai aplikasi cinema.

3. Bagi masyarakat, perangkat lunak yang dirancang dapat digunakan sebagai perangkat pendukung dalam proses penerimaan informasi mengenai film-film yang mereka sukai.

1.6 Metodologi Penelitian Metode penelitian yang digunakan dalam Tugas Akhir ini terdiri dari: 1. Metode Pengumpulan data Teknik pengumpulan data dilakukan dengan cara :

a. Studi Pustaka yaitu mengumpulkan data dengan cara membaca, mempelajari dan menganalisa beberapa buku yang berkaitan dengan aplikasi mobile android, informasi bioskop, java, MySQL.

4

UNIVERSITAS SUMATERA UTARA

2. Metode pengembangan perangkat lunak Metode pengembangan perangkat lunak yang digunakan adalah metode Waterfall (Pressman, 2002). Adapun tahap-tahap dalam metode tersebut adalah sebagai berikut : a. Requirement Definition Mengumpulkan kebutuhan secara lengkap dan kemudian didefinisikan kebutuhan apa saja yang harus dipenuhi oleh program yang akan dibangun. Pada fase ini, harus dikerjakan secara lengkap agar bisa menghasilkan desain yang lengkap. b. System and Software Design Desain dikerjakan apabila semua kebutuhan telah dikumpulkan secara lengkap. c. Implementation and Unit Testing Desain program yang telah dibuat kemudian diterjemahkan kedalam bahasa program yang telah ditentukan. Program yang dibangun langsung diuji baik secara unit. d. Integration and System Testing Penyatuan unit-unit program kemudian diuji secara keseluruhan (system testing). e. Operation and Maintenance Mengoperasikan program pada lingkungan sebenarnya dan melakukan pemeliharaan, seperti penyesuaian karena adaptasi dengan situasi dan kebutuhan sebenarnya.

1.7 Sistematika Penulisan Sistematika pembahasan laporan tugas akhir tentang pembuatan aplikasi mobile untuk pemesanan tiket bioskop dibagi menjadi beberapa bab, yaitu:

BAB 1 : PENDAHULUAN

5

UNIVERSITAS SUMATERA UTARA

Bab ini menjelaskan latar belakang masalah yang sebagai alasan yang mendasari pembuatan aplikasi mobile untuk pemesanan tiket bioskop, pendahuluan dan gambaran mengenai latar belakang, rumusan, tujuan, batasan masalah dari karya ilmiah yang dikerjakan penulis.

BAB 2 : LANDASAN TEORI Bab ini berisi landasan teori yang digunakan penulis beserta ilmu dan teknologi yang digunakan bila ada dalam mengerjakan laporan tugas akhir dan pembuatan aplikasi yaitu teori mengenai Java, Android, Web Service, UML, Use Case Diagram, Activity Diagram, Class Diagram, Sequence Diagram, ERD, DFD, Flowchart, MySQL, Testing.

BAB 3 : ANALISA DAN PERMODELAN Bab ini berisi hasil analisis dan perancangan sistem yang dibuat, yaitu Diagram Konteks, Data Flow Diagram (DFD), Flowchart, Entity Relationship Diagram (ERD), Use Case Diagram, Activity Diagram, Class Diagram, dan Sequence Diagram.

BAB 4 : PERANCANGAN DAN IMPLEMENTASI Bab ini berisi kumpulan screenshot dari aplikasi dan penjelasan- penjelasan setiap fungsi.

BAB 5 : KESIMPULAN DAN SARAN Bab ini berisi simpulan dalam pembuatan aplikasi beserta saran- saran yang disampaikan untuk membantu pengembangan sistem di masa datang

6

UNIVERSITAS SUMATERA UTARA

BAB 2 LANDASAN TEORI

2.1 Java

Menurut Bambang (2005), OOP (Object Oriented Programming - Pemrogram Berorientasi Objek) merupakan semua aspek yang terdapat di Java adalah Objek. Java merupakan salah satu bahasa pemrograman berbasis objek secara murni. Semua tipe data diturunkan dari kelas dasar yang disebut Object. Hal ini sangat memudahkan dan mengalokasi sebuah program dengan basis Java secara cepat, tepat, mudah dan terorganisir. Kelebihan ini menjadikan Java sebagai salah satu bahasa pemograman termudah, bahkan untuk fungsi- fungsi yang advance seperti komunikasi antara komputer sekalipun. Dalam OOP mempunyai ciri-ciri dan beberapa konsep penting, seperti Object, Class, Method, Enkapsulasi, Inheritance, dan Polimorfisme.

Java merupakan bahasa pemrograman yang dikembangkan dengan menggunakan bahasa C. Java diciptakan oleh James Gosling dan Patrick Naughton dalam suatu proyek dari Sun Microsystems sekitar tahun 1991. Java menurut definisi dari Sun adalah nama untuk sekumpulan teknologi untuk membuat dan menjalankan perangkat lunak pada komputer standalone ataupun pada lingkungan jaringan. Java 2 adalah generasi kedua dari Java platform (generasi awalnya adalah Java Development Kit). Java terdiri diatas sebuah mesin intrepeter yang diberi nama Java Virtual Machine (JVM). JVM inilah yang akan membaca bytecode dalam file .class dari suatu program sebagai representasi langsung program yang berisi bahasa mesin. Oleh karena itu, bahasa Java disebut sebagai bahasa pemrograman yang portable karena dapat dijalankan pada berbagai sistem operasi, asalkan pada sistem operasi tersebut terdapat JVM.

7

UNIVERSITAS SUMATERA UTARA

Platform Java terdiri kumpulan library, JVM, kelas-kelas loader yang dipaket dalam sebuah lingkungan rutin Java, dan sebuah compiler, debugger dan kakas lain yang dipaket dalam Java Development Kit (JDK). Java 2 adalah generasi yang sedang berkembang dari platform Java. Agar sebuah program Java dapat dijalankan, maka file dengan ekstensi .java harus dikompilasi menjadi file bytecode. Untuk menjalankan bytecode tersebut dibutuhkan JRE (Java Runtime Environment) yang memungkinkan pemakai untuk menjalankan program Java, hanya menjalankan tidak untuk membuat kode baru lagi. JRE berisi JVM dan library Java yang digunakan. Platform Java memiliki tiga buah edisi yang berbeda, yaitu :

a. Java 2 Standard Edition (J2SE) J2SE adalah inti dari bahasa pemrograman Java. JDK (Java Development Kit) adalah salah satu tool dari J2SE untuk mengompilasi dan menjalankan program Java. Di dalamnya terdapat tool untuk mengompilasi program Java dan JRE. J2SE lebih difokuskan pada pemrograman Deskop dan Aplet (aplikasi yang dapat dijalankan di browser web). Contoh browser web adalah , , Mozila, Opera, dan lain-lain.

b. Java 2 Enterprise Edition (J2EE) J2EE merupakan edisi perluasan dari J2SE (Superset dari J2SE), aplikasi yang dibuat dengan edisi ini untuk aplikasi bersekala besar (Enterprise), seperti pemrograman memakai database dan diatur di server. Teknologi yang masuk dalam edisi ini adalah EJBs (Enterprise Java Beans), XML (Extensible Markup Language), Servlet, JSP (Java Server Pages), CORBA (Common Object Request Broker Architektur), dan lain-lain.

c. Java 2 Micro Edition (J2ME) J2ME merupakan subset dari J2SE yang digunakan untuk menangani pemrograman didalam perangkat-perangkat kecil PDA, handphone, pager, dan lain-lain.

8

UNIVERSITAS SUMATERA UTARA

2.1.1 Sejarah Java Bahasa pemrograman Java terlahir dari The Green Project, yang berjalan selama 18 bulan, dari awal tahun 1991 hingga musim panas 1992. Proyek tersebut belum menggunakan versi yang dinamakan Oak. Proyek ini dimotori oleh Patrick Naughton, Mike Sheridan, dan James Gosling, beserta Sembilan pemrogram lainnya dari Sun Microsystems. Salah satu hasil proyek ini adalah maskot Duke yang dibuat oleh Joe Palrang. Pertemuan proyek berlangsung di sebuah gedung perkantoran Sand Hill Road di Menlo Park. Sekitar musim panas 1992 proyek ini ditutup dengan menghasilkan sebuah program Java Oak pertama, yang ditujukan sebagai pengendali sebuah peralatan dengan teknologi layar sentuh (touch screen), seperti pada PDA sekarang ini. Teknologi baru ini dinamai “*7” (Star Seven). Setelah era Star Seven selesai, sebuah anak perusahaan Tv kabel tertarik ditambah beberapa orang dari proyek The Green Project. Mereka memusatkan kegiatannya pada sebuah ruangan kantor di 100 Hamilton Avenue, Palo Alto. Perusahaan baru ini bertambah maju; jumlah karyawan meningkat dalam waktu singkat dari 13 menjadi 70 orang. Pada rentang waktu ini juga ditetapkan pemakaian Internet sebgai medium yang menjembatani kerja dan ide di antara mereka. Pada awal tahun 1990-an, Internet masih merupakan rintisan, yang dipakai hanya di kalangan akademisi dan militer. Mereka menjadikan perambah (browser) Mosaic sebagai landasan awal untuk membuat perambah Jaya pertama yang dinamai Web Runner, terinspirasi dari film 1980-an, Blade Runner. Pada perkembangan rilis pertama, Web Runner berganti nama menjadi Hot Java. Pada sekitar bulan Maret 1995, untuk pertama kalinya kode sumber Java versi 1.0a2 dibuka. Kesuksesan mereka diikuti dengan untuk pemberitaan pertama kali pada surat kabar San Jose Mercury News pada tanggal 23 Mei 1995. Sayang terjadi perpecahan di antara mereka suatu hari pada pukul 04.00 di sebuah ruangan hotel Sheraton Palace. Tiga dari pimpinan utama proyek, Eric Schmidt

9

UNIVERSITAS SUMATERA UTARA

dan George Paolini dari Sun Microsystems bersama Marc Andreessen, membentuk Netscape. Nama Oak, diambil dari pohon oak yang tumbuh di depan jendela ruangan kerja “Bapak Java”, James Gosling. Nama Oak ini tidak dipakai untuk versi release Java karena sebuah perangkat lunak lain sudah terdaftar dengan merek dagang tersebut, sehingga diambil nama penggantinya menjadi “Java”. Nama ini diambil dari kopi murni yang digiling langsung dari biji (kopi tubruk) kesukaan Gosling. Konon kopi ini berasal dari pulau Jawa. Jadi nama bahasa pemrograman Java tidak lain berasal dari kata Jawa (bahasa Inggris untuk Jawa adalah Java).

2.2 Android Perkembangan teknologi smartphone saat ini sangat pesat sekali, hal itu tidak dipungkiri oleh munculnya sistem operasi baru yang khusus dirancang untuk telepon selular yaitu bernama Android. Android secara umum dikenal sebagai sistem operasi telepon selular yang berbasis Linux. Android pertama kali dikembangkan oleh perusahaan telepon selular yang berlokasi di California, AS yaitu bernama Android Inc tahun 2000. Android adalah sistem operasi yang berbasis Linux untuk telepon seluler seperti telepon pintar dan komputer tablet. Android menyediakan platform terbuka bagi para pengembang untuk menciptakan aplikasi mereka sendiri untuk digunakan oleh bermacam peranti bergerak.

2.2.1 Sejarah Android

Android adalah sebuah sistem informasi untuk perangkat mobile berbasis linux yang mencakup sistem operasi, middleware dan aplikasi. Android menyediakan platform terbuka bagi para pengembang untuk menciptakan aplikasi mereka. Awalnya, Inc. membeli Android Inc. yang merupakan pendatang baru yang membuat peranti lunak untuk ponsel / smartphone. Kemudian untuk mengembangkan Android, dibentuklah Open Handset Alliance, konsorsium dari 34 perusahaan peranti keras, perangkat lunak, dan telekomunikasi, termasuk Google, HTC, Intel, Motorola, Qualcomm, T-Mobile, dan Nvidia.

10

UNIVERSITAS SUMATERA UTARA

Pada saat perilisan perdana Android, 5 November 2007, Android bersama Open Handset Alliance menyatakan mendukung pengembangan open source pada perangkat moile. Di lain pihak, Google merilis kode-kode Android di bawah lisensi Apache, sebuah lisensi perangkat lunak dan open platform perangkat seluler. Di dunia ini terdapat dua jenis distributor sistem operasi Android. Pertama yang mendapat dukungan penuh dari Google atau Google Mail Service (GMS) dan yang kedua adalah yang benar-benar bebas distribusinya tanpa dukungan langsung Google atau di kenal sebagai Open Handset Distribution (OHD).

Sekitar September 2007 Google mengenalkan Nexus One, salah satu jenis smartphone yang menggunakan Android sebagai sistem operasinya. Telepon seluler ini di produksi oleh HTC corporation dan tersedia di pasaran pada 5 Januari 2010. Pada 9 Desember 2008 , diumumkan anggota baru yang Communications, di produksi oleh Asustek Computer Inc, Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, dan Vodafone Group Plc. Seiring pembentukan Open Handset Alliance, OHA mengumumkan produk perdana mereka Android, perangkat mobile yang merupakan modifikasi kernel Linux 2.6. Sejak android dirilis telah dilakukan berbagai pembaruan berupa perbaikan bug dan penambahan fitur baru.

Pada masa saat ini sebagian besar vendor-vendor smartphone sudah memproduksi smartphone berbasis android, vendor-vendor itu antara lain HTC, Motorola, Samsung, LG, HKC, Huawei, Archos, Webstation Camangi, Dell, Nexus, SciPhone, WayteQ, Sony Ericsson, LG, Acer, Philips, T-Mobile, Nexian, IMO, Asus dan masih banyak lagi vendor smartphone di dunia yang memproduksi android. Hal ini, karena android itu adalah sistem operasi yang open source sehingga bebas didistribusikan dan dipakai oleh vendor manapun.

Tidak hanya menjadi sistem operasi di smartphone, saat ini Android menjadi pesaing utama dari Apple pada sistem operasi Tablet PC. Pesatnya pertumbuhan Android selain faktor yang disebutkan diatas adalah karena Android itu sendiri adalah platform yang sangat lengkap baik itu sistem operasinya, Aplikasi dan Tool pengembangan, Market aplikasi Android serta dukungan yang

11

UNIVERSITAS SUMATERA UTARA

sangat tinggi dari komunitas Open Source di dunia, sehingga Android terus berkembang pesat baik dari segi teknologi maupun dari jumlah device yang ada di dunia.

2.2.2 Jenis – Jenis Android

Saat ini OS Android telah menjadi banyak versi dengan penjelasan sebagai berikut :

1. Android versi 1.1 Pada 9 Maret 2009, Google merilis Android versi 1.1. Android versi ini dilengkapi dengan pembaruan estetis pada aplikasi, jam, alarm, voice search (pencarian suara), pengiriman pesan dengan Gmail, dan pemberitahuan email.

2. Android versi 1.5 (Cupcake) Pada pertengahan Mei 2009, Google kembali merilis telepon seluler dengan menggunakan Android dan SDK (Software Development Kit) dengan versi 1.5 (Cupcake). Terdapat beberapa pembaruan termasuk juga penambahan fitur dalam seluler versi ini yakni kemampuan merekam dan menonton video dengan modus kamera, meng-upload video ke Youtube dan gambar ke Picasa langsung dari telepon, dukungan Bluetooth, A2DP, kemampuan terhubung secara otomatis ke headset Bluetooth, animasi layar, dan keyboard pada layar yang dapat disesuaikan dengan sistem.

3. Android versi 1.6 (Donut) Donut (versi 1.6) dirilis pada September dengan menampilkan proses pencarian yang lebih baik dibanding sebelumnya, penggunaan baterai indikator dan control applet VPN. Fitur lainnya adalah galeri yang memungkinkan pengguna untuk memilih foto yang akan dihapus; kamera, camcorder dan galeri yang diintegrasikan, CDMA/EVDO, 802.1x, VPN, Gestures, dan Text-to-speech engine, kemampuan dial kontak , teknologi text to change speech (tidak tersedia pada semua ponsel, pengadaan resolusi VWGA.

12

UNIVERSITAS SUMATERA UTARA

4. Android versi 2.0/2.1 (Éclair) Pada 3 Desember 2009 kembali diluncurkan ponsel Android dengan versi 2.0/2.1 (Éclair), perubahan yang dilakukan adalah mengoptimalkan hardware, peningkatan Google Maps 3.1.2, perubahan UI dengan browser baru dan dukungan HTML5, daftar kontak kontak baru, dukungan flash untuk kamera 3.2 MP, digital Zoom, dan Bluetooth 2.1.

5. Android versi 2.2 (Froyo: Frozen Yogurt) Pada bulan mei 2010 Android versi 2.2 Rev 1 diluncurkan. Android inilah yang sekarang sangat banyak beredar di pasaran, salah satunya adalah dipakai di Samsung FX tab yang sudah ada di pasaran. Fitur yang tersedia di Android versi ini sudah kompleks di antaranya adalah :

 Kerangka aplikasi memungkinkan penggunaan dan penghapusan komponen yang tersedia.  Dalvik Virtual Machine dioptimalkan untuk perangkat mobile.  Grafik: grafik di 2D dan grafis 3D berdasarkan libraries OpenGL.  SQLite: untuk penyimpanan data.  Mendukung media: audio, video, dan berbagai format gambar (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).  GSM, Bluetooth, EDGE, 3G, dan Wifi (hardware independent).  Kamera, Global Positioning System (GPS), kompas, dan accelerometer (tergantung hardware).

6. Android versi 2.3 (Gingerbread) Android versi 2.3 diluncurkan pada Desember 2010, hal-hal yang direvisi dari versi sebelumnya adalah kemampuan seperti berikut:

 SIP-based VoIP  Near Field Communications (NFC)

13

UNIVERSITAS SUMATERA UTARA

 Gyroscope dan sensor  Multiple cameras support  Mixable audio effects  Download manager

7. Android versi 3.0 (Honeycomb) Pada bulan Mei 2011 Android versi 3.0 atau Android Honeycomb dirilis. Android Honeycomb merupakan sebuah sistem operasi Android yang tujuannya memang dikhususkan bagi penggunaan tablet berbasis Android. Halaman pengguna (user interface) yang digunakan pada Android versi ini juga sangat berbeda dengan yang digunakan pada smartphone Android. Hal tersebut tentu saja disebabkan oleh tampilan layar yang lebih besar pada tablet serta untuk mendukung penggunaan hardware dengan spesifikasi yang lebih tinggi yang digunakan pada perangkat tersebut.

8. Android versi 4.0 (ICS: Ice Cream Sandwich) Android ICS atau Ice Cream Sandwich juga dirilis pada tahun yang sama dengan Honeycomb, yaitu pada bulan Oktober 2011. Kini, Android Ice Cream Sandwich merupakan salah satu sistem operasi yang paling banyak digunakan oleh para pengembang smartphone yang sudah memiliki nama besar seperi Samsung, Sony, Acer dengan smartphone ICS Acer Liquid Gallant E350 terbarunya serta produsen-produsen kelas berat lainnya untuk digunakan pada produk-produk terbaru mereka. Begitu banyak fitur-fitur terbaru yang disematkan pada sistem operasi ini, antara lain yaitu versi yang memaksimalkan fotografi, grafis dan resolusi gambar, kualitas video, sistem pengenal wajah dan masih banyak lainnya.

9. Android versi 4.1 (Jelly Bean)

14

UNIVERSITAS SUMATERA UTARA

Android Jelly Bean merupakan versi Android yang terbaru pada saat ini. Salah satu gadget yang menggunakan sistem operasi Jelly Bean adalah Google Nexus 7 yang diprakarsai oleh ASUS, vendor asal Taiwan yang juga menjadi teman satu kampong halaman dengan Acer. Fitur terbaru dari sistem operasi Android Jelly Bean ini salah satunya adalah peningkatan kemampuan on-screen keyboard yang lebih responsive, pencarian data kontak dengan fitur Voice Search dan lain sebagainya.

2.2.3 Fitur Sistem Operasi Android Android merupakan sistem operasi open source dan bebas untuk di customize. Oleh karena itu, tidak ada konfigurasi standar untuk software dan hardware pada perangkat berbasis Android, namun Android mendukung beberapa fitur dasar yaitu :

a. Storage – menggunakan SQLite, karena SQLite merupakan database yang ringan untuk penyimpanan data. b. Connectivy – mendukung GSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth, Wifi, LTE, WiMAX. c. Messaging – mendukung SMS dan MMS. d. – berdasarkan pada open source , bersama dengan chrome’s Javascript engine. e. Media Support – mendukung beberapa media seperti AAC, HE-AAC, MPEG-4 SP, AMR, AMR-WB, WAV, MP3, JPG, PNG. f. Hardware Support – accelerometer sensor, kamera, digital kompas, proximity sensor, GPS g. Multi-touch – mendukung multi-touch screens h. Multi-tasking – mendukung aplikasi multi-tasking i. Flash support – android 2.3 mendukung flsh 10.1 j. Tethering – mendukung untuk sharing internet.

2.2.4 Sistem Arsitektur Sistem Operasi Android

15

UNIVERSITAS SUMATERA UTARA

Secara garis besar Arsitektur Android dapat dijelaskan dan digambarkan sebagai berikut :

a. Application dan Widgets Application dan Widgets ini adalah layer dimana kita berhubungan dengan aplikasi saja, dimana biasanya kita download aplikasi kemudian kita lakukan instalasi dan jalankan aplikasi tersebut. Di layer terdapat aplikasi ini termasuk klien e-mail, program SMS, kalender, peta, browser, kontak, dan lain-lain. Semua aplikasi ditulis menggunakan bahasa pemrograman Java.

b. Applications Frameworks Android adalah “Open Development Platform” yaitu Android menawarkan kepada pengembang atau member kemampuan kepada pengembang untuk membangun aplikasi yang bagus dan inovatif. Pengembang bebas untuk mengakses perangkat keras, akses informasi resources, menjalankan service background, mengatur alarm, dan menambahkan status notification, dan sebagainya. Pengembang memiliki akses penuh menuju API framework seperti yang dilakukan oleh aplikasi yang kategori inti. Arsitektur aplikasi dirancang supaya kita dengan mudah dapat menggunakan kembali komponen yang sudah digunakan (reuse). Sehingga bisa disimpulkan Applications Frameworks ini adalah layer dimana para pembuat aplikasi melakukan pengembangan/ pembuatan aplikasi yang akan dijalankan di sistem operasi android, karena pada layer inilah aplikasi dapat dirancang dan dibuat, seperti content-providers yang berupa sms dan panggilan telepon.

c. Libraries Libraries ini adalah layer dimana fitur-fitur Android berada, biasanya para pembuat aplikasi mengakses libraries untuk menjalankan aplikasinya.

d. Android Run Time

16

UNIVERSITAS SUMATERA UTARA

Layer yang membuat aplikasi Android dapat dijalankan dimana dalam prosesnya menggunakan Implementasi Linux. Dalvik Virtual Machine (DVM) merupakan mesin yang membentuk dasar kerangka aplikasi Android.

e. Linux Kernel Linux Kernel adalah layer dimana inti dari operating system dari android itu berda. Berisi file-file sistem yang mengatur sistem processing, memory, resource, drivers, dan sistem-sistem operasi android lainnya.

2.3 Web Service

Web service merupakan sesuatu yang berbeda jika dibandingkan dengan website. Website sendiri dirancang dengan tampilan atau user interface yang baik sedangkan web service tidak. Web service tidak dirancang untuk berinteraksi langsung dengan pengguna. Sesuai dengan namanya, web service hanya menyediakan layanan saja. Sehinggga, web service sendiri dapat disebut sebagai sebuah aplikasi yang dibuat agar dapat dipanggil atau diakses oleh aplikasi lain melalui internet dengan menggunakan format pertukaran data sebagai pengiriman pesan. Web service juga memungkinkan untuk dipanggil dengan menggunakan protokol lain seperti SMTP (Simple Mail Transfer Protocol), namun yang paling umum digunakan ialah HTTP. Karena web service menggunakan protokol HTTP, tentu PHP sebagai bahasa pemrograman web menjadi salah satu kekuatan dalam bahasa pemrograman yang mengelola web service. Banyak teknik dan metode untuk menghasilkan web service dengan PHP, pembuatan web service dengan format XML dan JSON yang diambil dari database MySQL lewat bahasa pemrograman PHP.

2.4 Unified Modeling Language (UML)

17

UNIVERSITAS SUMATERA UTARA

Menurut Whitten & Bentley (2007, pp. 317), UML (Unified Modeling Language) merupakan bahasa standar yang digunakan untuk memvisualisasikan, menspesifikasikan, membangun, dan mendokumentasikan object-object dari sistem piranti lunak dengan bentuk permodelan yang sangat membantu dalam proses pembangunan struktur dan pengembangan suatu sistem.

2.4.1 Use Case Diagram

Menurut Whitten & Bentley (2007, pp. 246), Use case diagram adalah suatu alat yang digunakan dalam permodelan use case untuk mengidentifikasi dan mendeskripsikan fungsi dari sebuah sistem. Use case diagram menggambarkan siapa yang akan menggunakan sistem dan bagaimana cara user untuk dapat berinteraksi dengan sistem tersebut.

Elemen – elemen yang terdapat dalam use case diagram :

a. Use case Use case diwakili oleh bentuk elips dengan nama use case yang terletak didalam elips itu sendiri. Sebuah use case akan merepresentasikan tujuan dari sistem.

Gambar 2.1 Simbol Use Case

b. Actor

18

UNIVERSITAS SUMATERA UTARA

Aktor diwakili oleh bentuk stick figure yang merepresentasikan pengguna yang akan berinteraksi dengan sistem. Aktor yang dimaksud tidak selalu mewakili manusia, namun dapat juga mewakili sebuah organisasi.

Gambar 2.2 Simbol Aktor

c. Use Case Relationship Relationship diwakili oleh sebuah garis antara dua simbol pada use case diagram. Pengertian dari relationship dapat berbeda tergantung oleh garis yang digambarkan dan jenis simbol yang terhubung.

Gambar 2.3 Simbol Use Case Relationship

d. The Boundary The boundary adalah daerah yang membatasi antara use case dengan actor dan diwakili oleh bentuk persegi panjang. The boundary digunakan untuk menggambarkan cakupan dari sistem.

19

UNIVERSITAS SUMATERA UTARA

Gambar 2.4 Simbol The Boundary

2.4.2 Activity Diagram Activity diagram adalah diagram yang digunakan untuk menggambarkan alur proses bisnis secara grafis, langkah-langkah use case, ataupun logika dari sifat objek. (Whitten & Bentley, 2007, pp. 390) Activity diagram memiliki beberapa notasi, yaitu : a. Initial node Initial node digambarkan dengan titik padat yang merupakan awal dari sebuah proses.

Gambar 2.5 Simbol Initial Node

b. Actions Actions digambarkan dengan segi empat dengan sudut tumpul yang mendefinisikan urutan aktifitas yang akan dilakukan.

20

UNIVERSITAS SUMATERA UTARA

Gambar 2.6 Simbol Actions

c. Flow Flow digambarkan dengan sebuah panah yang menunjukkan jalur dari satu aktivitas ke aktivitas lainnya.

Gambar 2.7 Simbol Flow

d. Decision Decision digambarkan dengan bentuk belah ketupat yang memiliki satu arus yang masuk dan dua atau lebih arus yang keluar. Arus keluar ditandai untuk menunjukkan suatu kondisi tertentu.

21

UNIVERSITAS SUMATERA UTARA

Gambar 2.8 Simbol Decision

e. Merge Merge digambarkan dengan bentuk belah ketupat dengan dua atau lebih arus masuk dan satu arus keluar. Merge menggabungkan dua atau lebih arus yang sebelumnya dipisahkan oleh decision.

Gambar 2.9 Simbol Merge

f. Fork Fork digambarkan dengan bar berwarna hitam dengan satu arus masuk dan dua atau lebih arus keluar. Tindakan pada arus parallel di bawah fork dapat terjadi dengan urutan apapun atau secara bersamaan.

Gambar 2.10 Simbol Fork

g. Join

22

UNIVERSITAS SUMATERA UTARA

Join digambarkan dengan bar berwarna hitam dengan dua atau lebih arus masuk dan satu arus keluar, mencatat berakhirnya proses yang telah berjalan bersamaan sebelumnya. Semua tindakan yang masuk harus diselesaikan sebelum proses selanjutnya dikerjakan.

Gambar 2.11 Simbol Join

h. Activity final Activity final digambarkan dengan titik padat yang terdapat di dalam sebuah lingkaran. Activity final menandakan bahwa proses telah berakhir. Satu activity diagram boleh memiliki lebih dari satu final.

Gambar 2.12 Simbol Activity Final

2.4.3 Class Diagram Menurut Whitten & Bentley (2007, pp. 375), Class diagram merupakan diagram yang menggambarkan struktur objek dari sistem serta menunjukkan kelas-kelas objek yang terdapat didalam sistem yang memiliki hubungan antar kelas objek. Notasi yang terdapat didalam class diagram antara lain :

23

UNIVERSITAS SUMATERA UTARA

1. Class Class digambarkan dengan bentuk kotak dan dibagi menjadi 3 bagian yaitu: nama class, atribut, method.

2. Relationship Class diagram memiliki macam-macam relationship, antara lain: a. Association Association digunakan untuk menggambarkan hubungan antara satu class dengan class lainnya sehingga class tersebut dapat berinteraksi.

b. Compotition Compotition digunakan untuk menggambarkan sebuah class yang merupakan bagian dari class lain dan class tersebut tidak dapat berdiri sendiri. c. Aggregation Aggregation digunakan untuk menggambarkan sebuah class yang dapat berdiri sendiri walaupun class tersebut merupakan bagian dari class lain. d. Generalization Generalization menggambarkan sebuah hubungan class turunan dari sebuah super class.

3. Visibility Visibility digunakan untuk atribut atau method pada class diagram. Terdapat 3 (tiga) jenis visibility, yaitu: a. Public Public digunakan untuk atribut atau method yang dapat diakses dan digunakan oleh class lain. Public digambarkan dengan simbol plus (+). b. Protected Protected digunakan untuk atribut atau method yang hanya dapat diakses dan digunakan oleh class itu sendiri dan class turunannya. Protected digambarkan dengan simbol hash (#). c. Private

24

UNIVERSITAS SUMATERA UTARA

Private digunakan untuk atribut atau method yang dapat diakses dan digunakan oleh class itu sendiri. Private digambarkan dengan simbol minus (-).

4. Multiplicity Multiplicity adalah sebuah angka yang mengindikasikan berapa banyak objek dari suatu kelas yang berelasi dengan objek pada kelas lain.

2.4.4 Sequence Diagram Menurut Whitten & Bentley (2007, p382), Sequence diagram adalah diagram yang menggambarkan bagaimana objek berinteraksi dengan objek lainnya melalui pesan dalam suatu eksekusi dari sebuah use case atau sebuah operasi. Sequence diagram juga mengilustrasikan bagaimana pesan dikirim dan diterima oleh objek dan terjadi didalam suatu sequence.

2.5 Entity Relationship Diagram (ERD)

Entity Relationship Diagram merupakan suatu model untuk menjelaskan hubungan antar-data dalam basis data berdasarkan objek-objek dasar data yang mempunyai hubungan antar-relasi.

Menurut salah satu para ahli, Brady dan Loonam (2010), Entity Relationship Diagram (ERD) merupakan salah satu teknik yang digunakan untuk memodelkan kebutuhan data dari suatu organisasi.

Komponen penyusun ERD adalah sebagai berikut :

25

UNIVERSITAS SUMATERA UTARA

Tabel 2.1 Komponen ERD

2.6 Data Flow Diagram (DFD) Menurut Kenneth. E. Kendal dan Julie E. Kendall (2003:263) “Data Flow Diagram (DFD) adalah representasi grafik dari sebuah sistem, yang menggambarkan pandangan sejauh mungkin mengenai masukan, proses dan keluaran sistem”. Serangkaian diagram aliran data berlapis juga dapat digunakan untuk mempresentasikan dan menganalisis prosedur-prosedur mendetail dalam sistem yang lebih besar. DFD dapat digunakan untuk membuat dokumentasi dari sistem informasi yang sudah ada atau untuk menyusun dokumentasi untuk sistem informasi yang baru. Bentuk komponen DFD yang sering digunakan pada gambar berikut :

Bentuk Komponen Data Flow Diagram

Penjelasan dari gambar diatas adalah sebagai berikut :

26

UNIVERSITAS SUMATERA UTARA

1. Komponen Proses Bujur sangkar dengan sudut membulat digunakan untuk menunjukkan adanya proses transformasi. Proses-proses tersebut selalu menunjukkan suatu perubahan data. Jadi aliran data meninggalkan suatu proses selalu diberi label yang berbeda dengan aliran data yang masuk. Ada beberapa hal yang harus diperhatikan mengenai proses diantaranya yaitu : a. Proses harus memiliki input dan output. b. Proses dapat dihubungkan dengan komponen terminator, data store atau proses melalui alur data. c. Sistem/bagian/divisi/departemen yang sedang dianalisis oleh professional proses digambarkan dengan komponen proses.

2. Komponen Aliran Data Aliran data digambarkan dengan panah yang digunakan untuk menerangkan perpindahan data / paket data dari satu bagian ke bagian lainnya dengan panah mengarah ke tujuan data. Aliran data dapat berupa kata, pesan, formulir atau informasi. Aliran data yang muncul secara simultan bisa digambarkan hanya dengan menggunakan tanda pararel. Kerena sebuah tanda panah menunjukkan seseorang, tempat atau sesuatu, maka harus diberi nama dengan kata benda.

3. Komponen Entitas Digunakan untuk menggambarkan suatu entitas eksternal (bagian lain, sebuah perusahaan, seseorang atau sebuah mesin) yang dapat mengirim data atau menerima data dari sistem. Entitas disebut juga sumber atau tujuan data dan dianggap eksternal terhadap sistem yang sedang digambarkan. Setiap entitas diberi label dengan nama yang sesuai.

4. Komponen Penyimpanan (data store) Bujur sangkar yang digambarkan dengan dua garis pararel yang tertutup oleh sebuah garis pendek disisi kiri dan ujungnya terbuka disisi sebelah kanan. Simbol ini digambarkan hanya dengan lebar secukupnya saja sehingga

27

UNIVERSITAS SUMATERA UTARA

memungkinkan menandai bentuk huruf-huruf diantara garis-garis pararel yang ada.

2.7 Flowchart Flowchart adalah penggambaran secara grafik dari langkah-langkah dan urutan prosedur dari suatu program. Flowchart menolong analisis dan programmer untuk memecahkan masalah kedalam segmen-segmen yang lebih kecil dan menolong dalam menganalisis alternatif-alternatif lain dalam pengoperasian. Flowchart biasanya mempermudah penyelesaian suatu masalah khususnya masalah yang perlu dipelajari dan dievaluasi lebih lanjut.

Flowchart memiliki simbol-simbol yang digunakan untuk menggambarkan urutan program seperti terdapat pada tabel berikut: 1. PROCESSING SYMBOLS Processing Symbols merupakan simbol yang menunjukkan jenis operasi pengolahan dalam suatu prosedur.

Tabel 2.2 Processing Symbols

Simbol yang menunjukkan pengolahan yang dilakukan Process komputer

Simbol untuk kondisi yang akan menghasilkan beberapa Decision kemungkinan jawaban / aksi

Simbol untuk mempersiapkan penyimpanan yang akan Predefined Process digunakan sebagai tempat pengolahan didalam storage

28

UNIVERSITAS SUMATERA UTARA

Simbol untuk permulaan atau akhir darti suatu program Terminal

Simbol untuk pemasukan data secara manual on-line keyboard Manual Input

2. INPUT OUTPUT SYMBOLS Simbol yang dipakai untuk menyatakan jenis peralatan yang digunakan sebagai media input atau output.

Tabel 2.3 Input Output Symbols

Simbol yang menyatakan proses input dan output tanpa Input-Output tergantung dengan jenis peralatannya

Simbol yang menyatakan input berasal dari dokumen dalam Document bentuk kertas atau output di cetak dikertas

29

UNIVERSITAS SUMATERA UTARA

Disk and On-line Storage Simbol untuk menyatakan input berasal dari disk atau output di simpan ke disk

3. FLOW DIRECTION SYMBOLS Flow Direction Symbols yaitu simbol yang dipakai untuk menghubungkan antara simbol yang satu dengan simbol lainnya atau disebut juga connecting line.

Tabel 2.4 Flow Direction Symbols

Arus / Flow Penghubung antara prosedur / proses

Simbol keluar / masuk prosedur Connector atau proses dalam lembar / halaman yang sama

30

UNIVERSITAS SUMATERA UTARA

Simbol keluar / masuk prosedur Off-line Connector atau proses dalam lembar / halaman yang lain

2.8 MySQL Menurut Raharjo (20011, 21) MySQL merupakan software RDMS (server database) yang dapat mengelola database dengan sangat cepat, dapat menampung data dengan jumlah besar, dapat diakses oleh banyak user (multi- user), dan dapat melakukan suatu proses secara sinkronisasi atau bersamaan (multi-thearead). Sedangkan menurut sidik (2012, 333) adalah software yang database yang memiliki performasi query dari databasenya sangat cepat, dan jarang terjadi bermasalah. MySQL adalah software database server dapat mengelola dengan sangat cepat dan dapat menampung kapasitas data yang banyak. Selain itu, MySQL sifatnya yang open source maka menjadikan MySQL sangat popular dikalangan programmer web. Ada beberapa alasan mengapa memilih MySQL sebagai server database untuk aplikasi-aplikasi yang dikembangkan menurut Raharjo (2011, 22): 1. Fleksibel MySQL dapat digunakan untuk mengembangkan aplikasi desktop maupun aplikasi web dengan menggunakan teknologi yang bervariasi. 2. Performa tinggi MySQL memiliki mesin query dengan performa tinggi, dengan demikian proses transaksi yang dilakukan dengan sangat cepat. 3. Gratis

31

UNIVERSITAS SUMATERA UTARA

MySQL digunakan secara gratis. 4. Proteksi data yang handal MySQL menyediakan fasilitas manajemen user, enkripsi data, dan lain-lain sebagainya. 5. Komunitas luas Karena MySQL banyak penggunanya sehingga memiliki komunitas yang luas. Hal ini berguna jika kita menemui permasalah dalam proses pengolahan data menggunakan MySQL.

2.9 Metode Pengujian a. Black Box Pengujian Black Box adalah pengujian aspek fundamental sistem tanpa memperhatikan struktur logika internal perangkat lunak. Metode ini digunakan untuk mengetahui apakah perangkat lunak berfungsi dengan benar. Pengujian black box merupakan metode perancangan data uji yang didasarkan pada spesifikasi perangkat lunak. Data uji dieksekusi pada perangkat lunak dan kemudian keluar dari perangkat lunak dicek apakah telah sesuai yang diharapkan. Pengujian Black Box berusaha menemukan kesalahan dalam kategori : 1. Fungsi-fungsi yang tidak benar atau hilang. 2. Kesalahan interface. 3. Kesalahan dalam struktur data atau akses database eksternal. 4. Kesalahan kinerja. 5. Inisialisasi dan kesalahan terminasi.

b. White box White box testing yang terkadang disebut juga glass box testing adalah sebuah filosofi rancangan uji kasus yang menggunakan struktur kontrol yang menjelaskan bagian dari komponen-level rancangan untuk memperoleh uji kasus

32

UNIVERSITAS SUMATERA UTARA

(Pressman, 2005). Dengan menggunakan metode white box testing, para software engineer dapat memperoleh uji kasus yang meliputi: 1. Menjamin bahwa semua jalur independen dalam sebuah modul telah dilaksanakan setidaknya sekali. 2. Melaksanakan semua keputusan logis pada sisi yang benar dan salah. 3. Mengeksekusi semua putaran pada batasannya dan dalam batasan operasionalnya. 4. Menjalankan struktur data internal untuk memastikan validitasnya.

33

UNIVERSITAS SUMATERA UTARA

BAB 3 ANALISA DAN PERMODELAN

3.1 Analisa Sistem Analisa sistem dapat didefinisikan sebagai penguraian dari suatu system informasi yang utuh ke dalam bagian-bagian komponennya dengan maksud untuk mengidentifikasikan dan mengevaluasi permasalahan-permasalahan, kesempatan- kesempatan, hambatan-hambatan yang terjadi dan kebutuhan-kebutuhan yang diharapkan sehingga dapat diusulkan perbaikan perbaikannya.

3.2 Analisa Sistem Berjalan Sistem yang sedang berjalan saat ini adalah masyarakat harus mengantri panjang di loket untuk mendapatkan tiket film yang mereka sukai. Hal ini tentunya sangat merepotkan dan hal ini juga menyebabkan masyarakat harus datang terlebih dahulu untuk membeli tiket film. Oleh karena itu, dengan adanya sebuah program yang mampu mempermudah pembelian tiket film tersebut serta membantu masyarakat dalam hal mendapatkan informasi seputar film dan cara pemesanan. Sistem yang akan dirancang ini hanya memerlukan telepon genggam yang mendukung fasilitas SMS untuk terhubung ke komputer server sehingga pengguna dapat sewaktu-waktu mendapatkan informasi bioskop tersebut hanya dengan mengirimkan SMS.

3.3 Kebutuhan Sistem Kebutuhan dari sistem ini adalah dapat memberikan informasi kepada calon pelanggan yaitu berupa judul film, jadwal pemutaran film, jumlah kursi yang tersedia, sekaligus melakukan pemesanan dan pembayaran tiketnya. Secara manual cara-cara tersebut dapat diperoleh dengan kita mendatangi loket bioskop dan bertanya dengan penjaga loket untuk melakukan pemesanan dan pembayarannya. Sistem yang dikembangkan diharapkan memudahkan pengguna untuk mendapatkan informasi dan

34

UNIVERSITAS SUMATERA UTARA

layanan seputar informasi bioskop secara cepat tanpa harus datang ke loket antrian dan juga melakukan pemesanan serta pembayaran tiket, sehingga dapat menghemat waktu dan lebih efisien. Untuk itu diperlukan perancangan sistem yang dapat memenuhi kebutuhan tersebut.

3.4 Perancangan Sistem Sistem yang akan dibangun nantinya adalah sebuah sistem SMS Gateway yang mampu mempermudah pembelian tiket film di bioskop. Sistem yang akan dirancang adalah dengan mengirimkan SMS, masyarakat dapat memperoleh informasi film serta melakukan pembelian tiket film di bioskop tanpa harus mengantri panjang diloket. Untuk mendapatkan informasi tersebut pengguna hanya memerlukan telepon genggam yang mendukung fasilitas SMS kemudian mengirim SMS ke nomor tertentu (ponsel terminal) dengan format-format yang telah ditentukan untuk kemudian mendapatkan balasan secara otomatis berupa informasi seputar film dan bagaimana cara pemesanan. Pada tahapan perancangan ini dijelaskan mengenai Diagram Konteks, Data Flow Diagram (DFD), Flowchart, Entity Relationship Diagram (ERD), Use Case Diagram, Activity Diagram, Class Diagram, dan Sequence Diagram.

3.4.1 Diagram Konteks Diagram konteks adalah suatu diagram yang menggambarkan sistem dalam suatu lingkungan dan hubungan dengan entitas luar. Lingkungan tersebut menggambarkan sistem secara keseluruhan dan proses sistem tersebut. Selain itu juga diagram konteks merupakan suatu diagram yang dapat memperlihatkan daerah objek studi dan aliran datanya dibuat untuk tingkat atas.

35

UNIVERSITAS SUMATERA UTARA

Gambar 3.1 Diagram Konteks

Keterangan Gambar 3.1 : 1. Administrator dapat melakukan pengolahan data anggota, baik input maupun output-nya. 2. Administrator dapat melakukan pengolahan data film, baik input maupun output-nya. 3. Administrator dapat melakukan pengolahan data harga tiket, baik input maupun output-nya. 4. Administrator dapat melakukan pengolahan data pengguna (user), baik input maupun output-nya. 5. Administrator dapat melihat hasil rekap laporan penjualan dari sistem. 6. Staff penjualan dapat melakukan transaksi penjualan tiket ke dalam sistem. 7. Pimpinan dapat melihat hasil rekap laporan penjualan dari sistem.

3.4.2 Data Flow Diagram (DFD)

36

UNIVERSITAS SUMATERA UTARA

DFD digunakan untuk menggambarkan sistem sebagai sebuah jaringan dari proses-proses secara fungsional yang dihubungkan satu dengan yang lainnya oleh aliran data. DFD terdiri dari proses penyimpanan data, aliran data dan entity luar, dan DFD merupakan diagram konteks dalam bentuk yang lebih kecil, data flow diagram (DFD) menguraikan proses yang terjadi didalam sistem sampai ke proses yang lebih detail. Pada sistem informasi pemesanan pemesanan tiket online bioskop seperti yang diuraikan diatas, dapat diuraikan lagi menjadi beberapa DFD yang lebih kecil lagi.

Berikut rancangan sistem melalui DFD :

Gambar 3.2 DFD Level 1 yang diusulkan

37

UNIVERSITAS SUMATERA UTARA

Gambar 3.3 DFD Level 2 yang diusulkan

38

UNIVERSITAS SUMATERA UTARA

a. DFD Level 0

Gambar 3.4 DFD Level 0

Keterangan gambar 3.4 : Administrator, dapat melakukan pengolahan data, seperti melakukan : a. Manajemen Anggota (disimpan dalam tabel as_anggota) b. Manajemen Harga Tiket (disimpan dalam tabel as_bioskop) c. Manajemen Film (disimpan dalam tabel as_film) d. Manajemen Laporan Penjualan Tiket (dari tabel bioskop, film, dan transaksi)

39

UNIVERSITAS SUMATERA UTARA

b. DFD Level 1

Gambar 3.5 DFD Level 1 Proses 2.1

Keterangan gambar 3.5 : 1. Proses 1.1, Administrator melakukan tambah data anggota kemudian disimpan ke dalam tabel anggota (as_anggota). 2. Proses 1.2, Administrator melakukan view data anggota melalui tabel anggota (as_anggota) lalu tabel anggota (as_anggota) akan menampilkan data anggota kepada administrator. 3. Proses 1.3, Administrator melakukan perubahan data anggota dari tabel anggota (as_anggota) setelah tabel anggota (as_anggota) menampilkan informasi data anggota ke administrator. 4. Proses 1.4, Administrator melakukan penghapusan data anggota dari tabel anggota (as_anggota).

c. DFD Level 1 Proses 2.0

40

UNIVERSITAS SUMATERA UTARA

Gambar 3.6 DFD Level 1 Proses 2.0

Keterangan gambar 3.6 : 1. Proses 2.1, Administrator melakukan tambah data harga tiket kemudian disimpan ke dalam tabel harga tiket (as_bioskop). 2. Proses 2.2, Administrator melakukan view data harga tiket melalui tabel harga tiket (as_bioskop), kemudian tabel harga tiket (as_bioskop) akan menampilkan data harga tiket kepada administrator. 3. Proses 2.3, Administrator melakukan perubahan data harga tiket dari tabel harga tiket (as_bioskop) setelah tabel harga tiket (as_bioskop) menampilkan informasi data harga tiket ke administrator. 4. Proses 2.4, Administrator melakukan penghapusan data harga tiket dari tabel harga tiket (as_bioskop).

d. DFD Level 1 Proses 3.0

41

UNIVERSITAS SUMATERA UTARA

Gambar 3.7 DFD Level 1 Proses 3.0

Keterangan gambar 3.7 : 1. Proses 3.1, Administrator melakukan tambah data film kemudian disimpan ke dalam tabel film (as_film). 2. Proses 3.2, Administrator melakukan view data film melalui tabel film (as_film), kemudian tabel film (as_film) akan menampilkan data film kepada administrator. 3. Proses 3.3, Administrator melakukan perubahan data film dari tabel film (as_film) setelah tabel film (as_film) menampilkan informasi data film ke administrator. 4. Proses 3.4, Administrator melakukan penghapusan data film dari tabel film (as_film).

e. DFD Level 1 Proses 4.0

42

UNIVERSITAS SUMATERA UTARA

Gambar 3.8 DFD Level 1 Proses 4.0

Keterangan gambar 3.8 : 1. Proses 4.1, Administrator melakukan tambah data user kemudian disimpan ke dalam tabel user (as_user). 2. Proses 4.2, Administrator melakukan view data user melalui tabel user (as_user), kemudian tabel user (as_user) akan menampilkan data user kepada administrator. 3. Proses 4.3, Administrator melakukan perubahan data user dari tabel user (as_user) setelah tabel user (as_user) menampilkan informasi data user ke administrator. 4. Proses 4.4, Administrator melakukan penghapusan data user dari tabel user (as_user).

43

UNIVERSITAS SUMATERA UTARA

3.4.3 Flowchart Flowchart (diagram alir) adalah sebuah diagram yang merepsesentasikan sebuah algoritma atau proses yang menggunakan simbol-simbol grafis untuk memperlihatkan langkah-langkah ataupun urutan proses-proses yang dilakukan oleh program dalam menyelesaikan masalah. Dengan kata lain, flowchart dapat mendeskripsikan urutan prosedur-prosedur yang terkombinasi yang membentuk suatu sistem.

a. Flowchart Administrator

Gambar 3.9 Flowchart untuk Administrator

Keterangan gambar 3.9 :

44

UNIVERSITAS SUMATERA UTARA

1. Semua diawali proses login. 2. Setelah login, admin dapat melakukan input film. 3. Jika data film yang akan diinput valid ? Misalnya kolom yang disediakan terisi, maka akan disimpan dalam database. Namun jika data yang dimasukkan tidak valid, maka kita akan dikembalikan ke form input film. 4. Setelah masuk ke dalam database, maka Finish.

b. Flowchart Staff Penjualan

Gambar 3.10 Flowchart untuk Staff Penjualan

Keterangan gambar 3.10 :

45

UNIVERSITAS SUMATERA UTARA

1. Semua diawali proses login. 2. Setelah login, staff penjualan dapat melakukan input transaksi penjualan. 3. Jika data transaksi penjualan yang diinputkan valid ? Misalnya kolom yang disediakan terisi, maka akan disimpan dalam database. Namun jika data yang dimasukkan tidak valid, maka kita akan dikembalikan ke form input transaksi penjualan. 4. Setelah masuk ke dalam database, maka Finish.

3.4.4 Entity Relationship Diagram (ERD) Entity Relationship Diagram (ERD) adalah suatu diagram yang berfungsi untuk menggambarkan hubungan entitas yang satu dengan entitas lain dalam suatu sistem dimana diagram ini menjelaskan hubungan entitas yang ada melalui atribut yang dimiliki oleh entitas tersebut. Dari keseluruhan proses alur DFD maupun Flowchart, maka kita dapat mengambil kesimpulan untuk model ERD-nya, yaitu seperti gambar 3.11.

Gambar 3.11 Entity Relationship Diagram (ERD)

46

UNIVERSITAS SUMATERA UTARA

3.4.5 Use Case Diagram Tujuan pemodelan use case ini untuk mendapatkan dan menganalisis informasi persyaratan yang cukup untuk mempersiapkan model yang mengkomunikasikan apa yang diperlukan dari perspektif pengguna, tetapi bebas dari detail spesifik tentang bagaimana sistem akan dibangun dan diimplementasikan. Adapun langkah-langkah pemodelan use case dalam penelitian ini adalah sebagai berikut :

Gambar 3.12 Use Case Package Sistem Pemesanan Tiket Bioskop Mobile

Keterangan gambar 3.12 :

Pengguna dari sistem adalah admin atau customer. Customer akan menggunakan sistem untuk memesan tiket melalui mobile device, sedangkan Admin bertanggung jawab untuk mengelola data pada website.

47

UNIVERSITAS SUMATERA UTARA

Gambar 3.13 Use Case Pemesanan Tiket pada Mobile Device

Keterangan gambar 3.13

Customer dapat melihat film yang sedang tayang dan memesan tiket bioskop, ataupun mengatur profile pribadi seperti pengubahan password dan melihat detail transaksi.

48

UNIVERSITAS SUMATERA UTARA

Gambar 3.14 Use Case Mengelola Data pada Website

Keterangan gambar 3.14 :

Admin dapat melakukan pengelolaan data pada website berupa pengelolaan data film dan bioskop, serta pengelolaan member.

3.4.6 Activity Diagram Untuk menunjukkan aktifitas dari beberapa bagian dari struktur organisasi yang terlibat di dalam sistem. Didalam activity diagram ini terdapat tiga proses kegiatan sistem yang akan dirancang. Berikut akan dijelaskan activity diagram proses sistem yang akan dirancang.

49

UNIVERSITAS SUMATERA UTARA

1. Cari Lokasi

Gambar 3.15 Activity Diagram Cari Lokasi

2. Activity Diagram Cari Film and Trailer Movie

Gambar 3.16 Activity Diagram View Movie and Trailer Movie

50

UNIVERSITAS SUMATERA UTARA

3. Melakukan Proses Beli Tiket Film

User Sistem

Input Judul FIlm

pilih kota

pilih bioskop

tentukan tanggal

Tentukan jam Simpan data pemesanan

Gambar 3.17 Activity Diagram Beli Ticket

4. Melakukan Pembayaran

Gambar 3.18 Activity Diagram Melakukan Pembayaran

51

UNIVERSITAS SUMATERA UTARA

3.4.7 Class Diagram Untuk menunjukkan kelas-kelas objek dan hubungan yang terlibat dalam use case. Seperti DFD, class diagram adalah model logis yang berevolusi menjadi model fisik dan akhirnya menjadi sebuah sistem informasi yang berguna.

<>Window:Movie <>Window:Ticket <>Window:Booking

Movie Ticket Booking -movie_id 1 -ticket_id 1..* -booking_id -movie_img -movie_id +get_booking_detail() -movie_name -cinema_id 1 -movie_desc -seat_id -movie_trailer -time Seat +update_movie() 1 -date 1 +get_update_detail() -price -seat_id +cekupdate() +add_ticket() -seat_status +view() +input_ticket() 1..1 +get_seat_detail() +update_trailer_movie() +print_ticket() +get_movie_detail() +update_trailer() 1 1..* +get_update_trailer_detail() +cek_trailer_update() 1 DetailTransactionTicket 1..* -transaction_id -ticket_id Cinema +add_ticket() Location 1..* 1 -cinema_id +input_ticket() -location_id -cinema_name +print_ticket() -location_name -location_id +get_location_detail() +get_cinema_detail()

<>Window:Location <>Window:Cinema

Gambar 3.19 Class Diagram Ticketing System

52

UNIVERSITAS SUMATERA UTARA

3.4.8 Sequence Diagram Diagram Sequence digunakan untuk menunjukkan komunikasi dinamis antara objek-objek selama eksekusi suatu pekerjaan (Pressman, 2010). Diagram Sequence menunjukkan urutan sementara dimana pesan-pesan dikirim diantara objek-objek untuk menyelesaikan pekerjaan tersebut. Diagram sequence dapat digunakan untuk menunjukkan interaksi-interaksi pada suatu use case atau pada suatu skanario dari suatu sistem perangkat lunak.

1. Melakukan Login

Gambar 3.20 Sequence Diagram Melakukan Login

Skenario 3.20 :

53

UNIVERSITAS SUMATERA UTARA

a. Admin membuka aplikasi dan memilih menu Login. b. Asisten jaga mengisi username dan password c. Dilakukan pengecekan kesesuaian data user dengan kata username dan password yang ada dalam database.

2. Melakukan Pencarian

Gambar 3.21 Sequence Diagram Melakukan Pencarian

Skenario 3.21 :

54

UNIVERSITAS SUMATERA UTARA

a. Admin membuka aplikasi dan memilih menu pencarian.

b. Jika admin ingin melakukan pencarian berdasarkan Product, maka : 1. Admin memilih kategori pencarian berdasarkan Product.

2. Admin mengisi Product yang ingin dicari.

3. Aplikasi menampilkan Product sesuai inputan admin. c. Jika admin ingin melakukan pencarian berdasarkan Schedule, maka : 1. Admin memilih kategori pencarian berdasarkan Schedule.

2. Admin mengisi Schedule yang ingin dicari.

3. Aplikasi menampilkan Schedule sesuai inputan admin. d. Jika admin melakukan pencarian berdasarkan SeatClass, maka : 1. Admin memilih kategori pencarian berdasarkan SeatClass.

2. Admin mengisi SeatClass yang ingin dicari.

3. Aplikasi menampilkan SeatClass sesuai inputan admin.

e. Jika admin melakukan pencarian berdasarkan Place, maka : 1. Admin memilih kategori pencarian berdasarkan Place.

2. Admin mengisi Place yang ingin dicari.

3. Aplikasi menampilkan Place sesuai inputan Admin.

55

UNIVERSITAS SUMATERA UTARA

3. Merubah Password

Gambar 3.22 Sequence Diagram Merubah Password

Skenario 3.22 : a. Admin membuka aplikasi dan memilih menu Merubah Password. b. Admin menginput password lama (Old Password), password baru (New Password) dan konfirmasi password baru (Confirm New Password). c. Dilakukan pengiriman data ke database untuk dilakukan pengecekan password lama. d. Jika password lama sesuai maka password lama diganti password baru.

56

UNIVERSITAS SUMATERA UTARA

4. Modifikasi Data

Gambar 3.23 Sequence Diagram Modifikasi Data

Skenario 3.23 : a. Admin membuka aplikasi dan memilih menu Modifikasi Data. b. Admin menginput data yang ingin dimasukkan berdasarkan kategori Product, Schedule, SeatClass, SeatPosition, dan Place. c. Sistem mengecek kevaliditasan data yang dimasukkan. d. Setelah data tersebut dinyatakan valid, sistem akan menyimpan dan menampilkan status pesan berhasil diubah.

57

UNIVERSITAS SUMATERA UTARA

BAB 4 PERANCANGAN DAN IMPLEMENTASI SISTEM

4.1 Pengertian Implementasi Sistem Implementasi sistem adalah suatu proses untuk menempatkan sistem informasi baru ke dalam sistem yang sudah ada (sistem lama). Pada kesempatan ini saya akan membahas tahapan dalam melakukan implementasi sistem informasi. Ada 4 tahap dalam implementasi sistem, yaitu membuat dan menguji basis data dan jaringan, membuat dan menguji program, memasang dan menguji sistem baru, serta mengirim sistem baru ke dalam sistem lama. Implementasi sistem adalah langkah-langkah atau prosedur-prosedur yang dilakukan dalam menyelesaikan desaian sistem yang telah disetujui, untuk menguji, menginstal dan memulai sistem baru atau sistem yang diperbaiki untuk menggantikan sistem yang lama. Implementasi yang telah sesuai harus diuji coba sehingga dapat diketahui kehandalan dari sistem yang ada telah sesuai dengan apa yang diinginkan. Tujuan implementasi sistem ini adalah : 1. Menyelesaikan desain sistem yang ada dalam dokumen desain sistem yang disetujui, menyusun dokumen baru atau dokumen-dokumen yang diperbaiki. 2. Menulis, menguji dan mendokumentasikan program-program dan prosedur prosedur yang diperbaiki oleh desain sistem yang disetujui. 3. Memastikan bahwa user dapat mengoperasikan sistem baru. 4. Memperhitungkan bahwa sistem memenuhi permintaan user yaitu dengan menguji sistem secara menyeluruh. 5. Memastikan bahwa konversi sistem yang baru berjalan secara benar yaitu dengan merencanakan, mengontrol dan melakukan instalasi sistem baru secara benar.

58

UNIVERSITAS SUMATERA UTARA

4.2 Perancangan Sistem Setelah analisis sistem dilakukan, selanjutnya membuat suatu tahap perancangan sistem. Dimana perancangan sistem digambarkan mengenai rancangan sistem yang akan dibangun sebelum dilakukan pengkodean kedalam suatu bahasa pemrograman. Dalam perancangan suatu sistem tidak terlepas dari analisis, karena dari hasil analisis sistem baru dapat dibuat suatu perancangan sistem.

4.3 Tujuan Perancangan Sistem Tujuan dari pembuatan perancangan sistem ini adalah untuk mengatasi kekurangan-kekurangan yang ada pada sistem sebelumnya yang sedang berjalan sehingga dapat menghasilkan informasi yang lebih mudah didapatkan dalam menunjang proses penjualan tiket, efisien serta efektif.

4.4 Implementasi Tampilan Antarmuka Aplikasi Implementasi antar muka berguna sebagai tampilan bagi pengguna sistem. Tujuan implementasi tampilan Antarmuka Aplikasi ini adalah untuk menerapkan perancangan yang telah dilakukan terhadap sistem sehingga user dapat memberi masukan demi berkembangnya sistem yang telah dibangun. Implementasi tampilan dari aplikasi terdiri dari beberapa form disetiap bagiannya. Form tersebut mempunyai fungsi-fungsinya sendiri. Form tersebut akan berjalan berurutan sesuai dengan sistem yang telah dibuat : a. Splash Screen Splash screen adalah tampilan pertama program yang muncul sementara sebelum masuk ke menu utama. Berikut tampilan Splash Screen Aplikasi :

59

UNIVERSITAS SUMATERA UTARA

Gambar 4.1 Tampilan Splash Screen

b. Form Login Halaman login adalah tampilan awal ketika member memasuki aplikasi mobile pemesanan tiket bioskop. Halaman login terdapat dua buah textbox no.hp dan password. textbox no.hp berguna untuk memasukkan nomor hp member dan textbox password untuk memasukan password pengguna dan tombol login untuk memeriksa apakah member berhak menggunakan aplikasi ini. Jika login berhasil maka aplikasi akan menampilkan halaman menu.

Gambar 4.2 Tampilan Login

60

UNIVERSITAS SUMATERA UTARA

c. Form Daftar Form daftar digunakan untuk User yang belum mempunyai akun untuk login ke Aplikasi. User yang ingin mendaftarkan diri harus mengisi beberapa data diri mereka yang kemudian akan tersimpan ke dalam database. Berikut Tampilan Form Daftar Aplikasi :

Gambar 4.3 Tampilan Daftar

d. Form Movie Pada halaman ini user dapat melihat film, gambar, dan video dari suatu film. Lalu juga terdapat deskripsi dari film tersebut, yang menjelaskan cerita singkat tentang film yang sedang ditayangkan, serta video trailer film yang menunjukkan pemutaran singkat film di bioskop tersebut. Berikut adalah tampilan layar halaman movie :

61

UNIVERSITAS SUMATERA UTARA

Gambar 4.4 Tampilan Layar Halaman Movie

e. Form About atau Tampilan Utama Form about adalah tampilan awal Aplikasi setelah halaman movie yang berisi bagian-bagian utama untuk mengetahui keseluruhan isi Aplikasi. Dalam Form Menu Utama terdapat empat menu utama yaitu Menu Movie, Menu Ticket, Menu Rate, dan Menu Info. Berikut adalah tampilan menu utama :

62

UNIVERSITAS SUMATERA UTARA

Gambar 4.5 Tampilan Menu Utama

f. Form Menu Movie Form Menu Movie untuk mengetahui jadwal film dan melakukan proses pemesanan. Pada halaman info movie terdapat dua yaitu Now Playing dan Coming Soon. Di menu Now Playing akan ditampilkan film-film yang sedang tayang pada saat itu, dan Coming soon adalah film yg akan segera tayang pada saat itu. Pada setiap film akan ditampilkan gambar, judul film, dan genre film. Member dapat memilih setiap film dengan menekan pada daftar film yang tersedia dan aplikasi akan menampilkan halaman yang berisi dari detail film yang dipilih oleh member. Berikut adalah tampilannya :

63

UNIVERSITAS SUMATERA UTARA

Gambar 4.6 Tampilan Form Menu Movie

64

UNIVERSITAS SUMATERA UTARA

g. Form Tampilan Tiket Tampilan halaman tiket untuk mengecek pemesanan yang telah dilakukan oleh user sebelumnya dan sebagai tanda bukti pemesanan tiket pada proses pembayaran selanjutnya. Berikut adalah tampilan tiket tersebut :

Gambar 4.7 Tampilan Aplikasi Menu Tiket

h. Form Tampilan Rate Tampilan halaman rate untuk user melakukan penilaian pelayanan kepada pihak bioskop dengan tiga pilihan kepuasan yaitu Puas, Biasa aja, serta Kurang Puas. Berikut ini tampilan menu rate :

65

UNIVERSITAS SUMATERA UTARA

Gambar 4.8 Tampilan Menu Rate

i. Form Tampilan Info Tampilan halaman info sebagai bantuan user dalam mengoperasikan aplikasi, agar tidak mengalami kesulitan saat menjalankannya. Berikut ini tampilan Menu Info Aplikasi :

Gambar 4.9 Tampilan Aplikasi Menu Info

66

UNIVERSITAS SUMATERA UTARA

j. Form Pemesanan Pada halaman pesanan akan ditampilkan ketika member memilih jadwal film. Halaman ini menampilkan denah dari studio film tersebut dan member dapat memilih tempat duduk yang ia inginkan. Tempat duduk yang sudah terisi akan ditandai sehingga member tidak dapat memilih kembali tempat duduk tersebut. Kemudian member dapat memilih pesan pada menu sehingga aplikasi akan menampilkan halaman detail pesanan.

Gambar 4.10 Halaman Pemesanan

67

UNIVERSITAS SUMATERA UTARA

BAB 5 KESIMPULAN DAN SARAN

5.1 Kesimpulan Dari hasil pembahasan yang telah dilakukan dan berdasarkan hasil penelitian yang sudah dilakukan menghasilkan beberapa simpulan sebagai berikut : 1. Aplikasi pemesanan tiket bioskop mobile dapat mempersingkat waktu yang diperlukan untuk pemesanan tiket bioskop, sehingga aplikasi pemesanan tiket bioskop mobile yang telah dibuat dapat membantu calon pembeli untuk memesan tiket bioskop. 2. Aplikasi pemesanan tiket bioskop mobile dapat menampilkan denah tempat duduk sebuah studio/theater ketika melakukan proses pemesanan tiket bioskop, sehingga pengguna dapat secara langsung memilih nomor kursi yang pengguna inginkan. 3. Aplikasi pemesanan tiket bioskop mobile tidak hanya berguna untuk melakukan proses pemesanan tiket bioskop saja tetapi aplikasi ini juga dapat menampilkan informasi seperti lokasi bioskop, harga tiket setiap bioskop, menampilkan informasi film yang sedang ditayangkan, dan menampilkan informasi film segera tayang. Dengan ditampilkannya informasi yang lengkap calon pembeli dapat lebih mudah menentukan film apa yang pembeli ingin saksikan.

5.2 Saran Berdasarkan hal-hal yang telah dicapai dalam pembuatan aplikasi ini, diperoleh beberapa saran yaitu : 1. Pada hari-hari libur nasional, tiket bioskop mengalami kenaikan harga. Aplikasi yang telah dibuat belum menyediakan fitur penanganan terhadap kenaikan harga pada hari libur tersebut. Untuk ke depannya, sebaiknya aplikasi dikembangkan lagi sehingga pengguna dapat mengganti harga pada hari-hari tertentu dengan mudah.

68

UNIVERSITAS SUMATERA UTARA

2. Aplikasi yang dibuat hanya dapat berjalan pada system operasi android, sebaiknya aplikasi dikembangkan sehingga dapat digunakan oleh berbagai macam system operasi mobile lainnya. 3. Diharapkan adanya transaksi pembelian online langsung dengan melakukan pembayaran ke Bank dimana sistem sinkron langsung ketika pelanggan sudah melakukan proses pembayaran. 4. Pembuatan desain laporan pada aplikasi yang dibuat masih sederhana sehingga diharapkan laporan dapat dikembangkan menjadi lebih bagus. 5. Diharapkan aplikasi ini dapat diimplementasikan dengan baik sesuai dengan prosedur yang ada.

69

UNIVERSITAS SUMATERA UTARA

DAFTAR PUSTAKA

Akhmad Dharma Kasman.2015.Aplikasi Pemesanan Tiket Online Berbasis Web Dan Android.Cirebon.CV.ASFA Solution Bambang, H. (2003). Esensi-Esensi Bahasa Pemrograman Java. Bandung: Informatika Bandung. E. Kendall, Kenneth dan Julie, 2003, Analisis Sistem dan Perancangan Sistem, Penerbit PT. Prenhallindo, Jakarta. Habibi G., dkk, 2012. Aplikasi Pemesanan Tiket Nonton Bioskop Berbasis Android. Jurnal Teknik Informatika, Vol.1, September 2012

Imbar, R.V. & S, Bernard Renaldy. (2006). Pemrograman Web Commerce dengan Oracle & ASP Bandung: Informatika Bandung. Jogiyanto HM., 2009, Analisis dan Desain Sistem Informasi, Penerbit Andi, Yogyakarta. Kadir, A. (2004). Dasar Pemrograman Web Dinamis dengan JSP. ANDI. Pugh, E., & Gradecki, J. D. (2004). Professional Hibernate. Wiley Publishing. Rickyanto, I. (2004). Pemrograman Web dengan Java Servlet. ANDI Suria O., 2013. Pembangunan Sistem Reservasi Film Dan Ruang Pada Bioskop Mini Berbasis Web dan Android. Skripsi Teknik Informatika. Tim EMS.2015.Pemrograman Android Dalam Sehari.Jakarta.PT.Elex Media. Witono T. dan Susanto R., 2012. Aplikasi Pemesanan Tiket Bioskop Berbasis Mobile. Jurnal Teknik Informatika, Vol.7, No.143, September 2012, 143-151. Yakub. 2012. Pengantar Sistem Informasi.Yogyakarta : Graha ilmu.

70

UNIVERSITAS SUMATERA UTARA

LISTING PROGRAM

A. adapter 1. JadwalAdapter package ilkom.usu.com.tiket.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.text.DecimalFormat; import java.util.List; import ilkom.usu.com.tiket.R; import ilkom.usu.com.tiket.model.Jadwal; public class JadwalAdapter extends RecyclerView.Adapter {

Context context; List mValues; OnJadwalClickedListener onJadwalClickedListener;

public JadwalAdapter(Context context, OnJadwalClickedListener onJadwalClickedListener, List items) { this.context = context; mValues = items;

this.onJadwalClickedListener = onJadwalClickedListener; }

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.jadwal_row, parent, false); return new ViewHolder(view); }

@Override public void onBindViewHolder(ViewHolder holder, int position) { final Jadwal jadwal = mValues.get(position);

holder.studio.setText(""+jadwal.getStudio()); double amount = Double.parseDouble(jadwal.getHarga()); DecimalFormat formatter = new DecimalFormat("#,###"); holder.harga.setText(formatter.format(amount) + "\n/orang"); holder.jam.setText(jadwal.getJam()); holder.tanggal.setText(jadwal.getTanggal());

holder.mView.setOnClickListener(v -> { if (onJadwalClickedListener != null) onJadwalClickedListener.onJadwalClicked(jadwal); });

}

@Override

71

UNIVERSITAS SUMATERA UTARA

public int getItemCount() { return mValues.size(); }

class ViewHolder extends RecyclerView.ViewHolder {

View mView; TextView jam; TextView tanggal; TextView harga; TextView studio;

ViewHolder(View view) { super(view);

mView = view.findViewById(R.id.mview); jam = view.findViewById(R.id.txtJam); tanggal = view.findViewById(R.id.txtTanggal); harga = view.findViewById(R.id.txtHarga); studio = view.findViewById(R.id.txtStudio);

}

}

public interface OnJadwalClickedListener {

void onJadwalClicked(Jadwal jadwal); } }

2. MoviesAdapter package ilkom.usu.com.tiket.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView;

import com.squareup.picasso.Picasso; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import ilkom.usu.com.tiket.R; import ilkom.usu.com.tiket.model.Movie; public class MoviesAdapter extends RecyclerView.Adapter {

Context context; List mValues; OnMovieClickedListener onMovieClickedListener; int view;

public MoviesAdapter(Context context, OnMovieClickedListener onMovieClickedListener, List items,int view) { this.context = context; mValues = items;

72

UNIVERSITAS SUMATERA UTARA

this.view = view;

this.onMovieClickedListener = onMovieClickedListener; }

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(this.view, parent, false); return new ViewHolder(view); }

@Override public void onBindViewHolder(final ViewHolder holder, int position) { final Movie movie = mValues.get(position);

Log.d("tes",movie.getPoster()); Picasso.get().load(movie.getPoster()) .into(holder.mMovieImage);

holder.mView.setOnClickListener(v -> { if (onMovieClickedListener != null) onMovieClickedListener.onMovieClicked(movie); }); }

@Override public int getItemCount() { return mValues.size(); }

public class ViewHolder extends RecyclerView.ViewHolder {

public View mView; public ImageView mMovieImage;

public ViewHolder(View view) { super(view); mView = view.findViewById(R.id.movie_grid_item); mMovieImage = view.findViewById(R.id.movie_grid_item_image); } }

public interface OnMovieClickedListener { void onMovieClicked(Movie movie);

}

; }

3. SeatAdapter package ilkom.usu.com.tiket.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.squareup.picasso.Picasso;

73

UNIVERSITAS SUMATERA UTARA

import java.util.List; import ilkom.usu.com.tiket.R; import ilkom.usu.com.tiket.helper.Utils; import ilkom.usu.com.tiket.model.Movie; import ilkom.usu.com.tiket.model.Seat; import ilkom.usu.com.tiket.model.TrailerResult; public class SeatAdapter extends RecyclerView.Adapter {

Context context; List mValues; OnseatClickListener onMovieClickedListener;

public SeatAdapter(Context context, OnseatClickListener onMovieClickedListener, List items) { this.context = context; mValues = items;

this.onMovieClickedListener = onMovieClickedListener; }

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.seat_layout, parent, false); return new ViewHolder(view); }

@Override public void onBindViewHolder(final ViewHolder holder, int position) { final Seat seat = mValues.get(position);

holder.mSeat.setText(Utils.getSeatNumber(seat.getNumber())); if(seat.isBooked()){ holder.mSeat.setBackgroundColor(context.getResources().getColor(R.color.red_e rror)); holder.mView.setEnabled(false); holder.mView.setClickable(false); } if(seat.isSelected()){ holder.mSeat.setBackgroundColor(context.getResources().getColor(R.color.blue_ pressed)); } if(!seat.isBooked() && !seat.isSelected()){ holder.mSeat.setBackgroundColor(context.getResources().getColor(R.color.holo_ green_light)); holder.mView.setEnabled(true); holder.mView.setClickable(true); } holder.mView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onMovieClickedListener != null) onMovieClickedListener.onSeatClicked(holder.getAdapterPosition()); } });

}

74

UNIVERSITAS SUMATERA UTARA

@Override public int getItemCount() { return mValues.size(); }

class ViewHolder extends RecyclerView.ViewHolder {

View mView;

TextView mSeat;

ViewHolder(View view) { super(view);

mView = view.findViewById(R.id.view); mSeat = view.findViewById(R.id.txtSeatbtn); } }

public interface OnseatClickListener { void onSeatClicked(int position); }

; }

4. TiketAdapter package ilkom.usu.com.tiket.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import org.w3c.dom.Text; import java.text.DecimalFormat; import java.util.List; import ilkom.usu.com.tiket.R; import ilkom.usu.com.tiket.model.Jadwal; import ilkom.usu.com.tiket.model.Tiket; public class TiketAdapter extends RecyclerView.Adapter {

Context context; List mValues;

public TiketAdapter(Context context, List items) { this.context = context; mValues = items; }

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.tiket_row, parent, false); return new ViewHolder(view); }

75

UNIVERSITAS SUMATERA UTARA

@Override public void onBindViewHolder(ViewHolder holder, int position) { final Tiket tiket = mValues.get(position);

if(tiket.getIsCompleted()==1){ holder.status.setText("selesai"); } else { holder.status.setText("terpesan"); } holder.title.setText(tiket.getMovie()); holder.kursi.setText(tiket.getKursi()); holder.jam.setText(tiket.getJam()); holder.tanggal.setText(tiket.getTanggal()); holder.studio.setText(""+tiket.getStudio()); double amount = tiket.getHarga(); DecimalFormat formatter = new DecimalFormat("#,###"); holder.harga.setText("Rp. " + formatter.format(amount));

}

@Override public int getItemCount() { return mValues.size(); }

class ViewHolder extends RecyclerView.ViewHolder {

TextView title; TextView kursi; TextView jam; TextView tanggal; TextView harga; TextView studio; TextView status;

ViewHolder(View view) { super(view);

status = view.findViewById(R.id.txtStatus); title = view.findViewById(R.id.txtTitle); jam = view.findViewById(R.id.txtJam); kursi = view.findViewById(R.id.txtKursi); tanggal = view.findViewById(R.id.txtTanggal); harga = view.findViewById(R.id.txtHarga); studio = view.findViewById(R.id.txtStudio);

}

} }

5. TrailerAdapter package ilkom.usu.com.tiket.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView;

76

UNIVERSITAS SUMATERA UTARA

import com.squareup.picasso.Picasso; import java.util.List; import ilkom.usu.com.tiket.R; import ilkom.usu.com.tiket.model.Movie; import ilkom.usu.com.tiket.model.TrailerResult; public class TrailerAdapter extends RecyclerView.Adapter {

Context context; List mValues; OnMovieClickedListener onMovieClickedListener;

public TrailerAdapter(Context context, OnMovieClickedListener onMovieClickedListener, List items) { this.context = context; mValues = items;

this.onMovieClickedListener = onMovieClickedListener; }

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.trailer_row, parent, false); return new ViewHolder(view); }

@Override public void onBindViewHolder(final ViewHolder holder, int position) { final TrailerResult trailerResult = mValues.get(position);

Picasso.get().load("https://img.youtube.com/vi/"+ trailerResult.getKey() + "/mqdefault.jpg") .into(holder.mMovieImage); Log.d("tes","https://img.youtube.com/vi/"+ trailerResult.getKey() + "/mqdefault.jpg");

holder.mView.setOnClickListener(v -> { if (onMovieClickedListener != null) onMovieClickedListener.onMovieClicked(trailerResult); }); holder.mTrailerText.setText(trailerResult.getName()); }

@Override public int getItemCount() { return mValues.size(); }

class ViewHolder extends RecyclerView.ViewHolder {

View mView; ImageView mMovieImage; TextView mTrailerText;

ViewHolder(View view) { super(view);

mView = view.findViewById(R.id.trailerview); mMovieImage = view.findViewById(R.id.trailerimage); mTrailerText = view.findViewById(R.id.trailername); }

77

UNIVERSITAS SUMATERA UTARA

}

public interface OnMovieClickedListener {

void onMovieClicked(TrailerResult result);

}

; }

6. ApiClient package ilkom.usu.com.tiket.connection; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.concurrent.TimeUnit; import ilkom.usu.com.tiket.BuildConfig; import ilkom.usu.com.tiket.model.UserResponse; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Call; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.POST; public class ApiClient {

public static final String server = "http://rockerdx.online/"; //public static final String server_testing = "http://192.168.1.189:80/android_api/"; private static TiketApiInterface sMasharaService;

public static TiketApiInterface getTiketApiClient() { if (sMasharaService == null) { OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); httpClientBuilder.connectTimeout(2, TimeUnit.MINUTES); httpClientBuilder.readTimeout(2, TimeUnit.MINUTES); httpClientBuilder.writeTimeout(2, TimeUnit.MINUTES);

if (BuildConfig.DEBUG) { // enable logging for debug builds HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); httpClientBuilder.addInterceptor(loggingInterceptor); } Gson gson = new GsonBuilder() .setDateFormat("yyyy-MM-dd HH:mm:ss").create(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(server) .addConverterFactory(GsonConverterFactory.create(gson)) .callFactory(httpClientBuilder.build()) .build(); sMasharaService = retrofit.create(TiketApiInterface.class); } return sMasharaService; }

78

UNIVERSITAS SUMATERA UTARA

public interface TiketApiInterface {

@FormUrlEncoded @POST("login.php") Call authenticate(@Field("email") String email, @Field("password") String password); @FormUrlEncoded @POST("register.php") Call registration(@Field("email") String email, @Field("password") String password, @Field("name") String name);

} }

7. SessionManager package ilkom.usu.com.tiket.helper; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.util.Log; import ilkom.usu.com.tiket.model.User;

public class SessionManager { // LogCat tag private static String TAG = SessionManager.class.getSimpleName();

// Shared Preferences SharedPreferences pref;

Editor editor; Context _context;

// Shared pref mode int PRIVATE_MODE = 0;

// Shared preferences file name private static final String PREF_NAME = "RockerLogin";

private static final String KEY_IS_LOGGEDIN = "isLoggedIn"; private static final String KEY_NAME = "nameUser"; private static final String KEY_EMAIL = "emailUser"; private static final String KEY_IMAGE = "imageUser";

public SessionManager(Context context) { this._context = context; pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); editor = pref.edit(); }

public String getId(){ return pref.getString(KEY_EMAIL,"null"); }

public String getImage(){ Log.d("tes","get image from " + getId()); return pref.getString(getId(),"null");}

public void setImage(String image){

79

UNIVERSITAS SUMATERA UTARA

editor.putString(getId(), image); Log.d("tes","set image from " + getId()); Log.d("Tes","imageset" + image); editor.commit(); }

public void setLogin(boolean isLoggedIn,String name,String hp,String image) {

editor.putBoolean(KEY_IS_LOGGEDIN, isLoggedIn);

saveData(name,hp); // commit changes setImage(image); editor.commit();

Log.d(TAG, "User login session modified!"); }

public void setLogin(boolean isLoggedIn) {

editor.putBoolean(KEY_IS_LOGGEDIN, isLoggedIn);

editor.commit();

Log.d(TAG, "User login session modified!"); }

public boolean isLoggedIn() { return pref.getBoolean(KEY_IS_LOGGEDIN, false); }

private void saveData(String name,String email){

editor.putString(KEY_NAME, name); editor.putString(KEY_EMAIL, email);

editor.commit();

}

public User getData(){ User temp = new User();

temp.setName(pref.getString(KEY_NAME,"Unknown")); temp.setEmail(pref.getString(KEY_EMAIL,"")); temp.setImage(pref.getString(KEY_IMAGE,""));

return temp; }

}

8. Utils package ilkom.usu.com.tiket.helper; import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.graphics.Color;

80

UNIVERSITAS SUMATERA UTARA

import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.view.View; import java.util.ArrayList; import java.util.List; import ilkom.usu.com.tiket.model.Movie;

public class Utils {

public static String LOG_TAG = "rocker";

public static void animateBackground(final View view, int colorTo, int duration){ int color = Color.TRANSPARENT; Drawable background = view.getBackground(); if (background instanceof ColorDrawable) { color = ((ColorDrawable) background).getColor(); } ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), color, colorTo); colorAnimation.setDuration(duration); // milliseconds colorAnimation.addUpdateListener(animator -> view.setBackgroundColor((int) animator.getAnimatedValue())); colorAnimation.start(); }

public static String getSeatNumber(int pos){

int index =pos%10; String[] seats = {"A","B","C","D","E","F","G","H","I","J"};

double x = pos/10; return seats[index]+(int)x; }

public static List getComingSoon(){ List movies = new ArrayList<>(); Movie movie = new Movie(); movie.setId("299536"); movie.setNamaMovies("Avengers: Infinity War"); movie.setBackdrop("/bOGkgRGdhrBYJSLpXaxhXVstddV.jpg"); movie.setPoster("/7WsyChQLEftFiDOVTGkv3hFpyyt.jpg"); movie.setOverview("As the Avengers and their allies have continued to protect the world from threats too large for any one hero to handle, a new danger has emerged from the cosmic shadows: Thanos. A despot of intergalactic infamy, his goal is to collect all six Infinity Stones, artifacts of unimaginable power, and use them to inflict his twisted will on all of reality. Everything the Avengers have fought for has led up to this moment - the fate of Earth and existence itself has never been more uncertain."); movie.setRating("8.3"); movie.setRelease("2018-04-25"); movies.add(movie); movie = new Movie(); movie.setId("383498"); movie.setNamaMovies("Deadpool 2"); movie.setBackdrop("/3P52oz9HPQWxcwHOwxtyrVV1LKi.jpg"); movie.setPoster("/to0spRl1CMDvyUbOnbb4fTk3VAd.jpg"); movie.setOverview("Wisecracking mercenary Deadpool battles the evil and powerful Cable and other bad guys to save a boy's life."); movie.setRating("7.6"); movie.setRelease("2018-05-15"); movies.add(movie);

81

UNIVERSITAS SUMATERA UTARA

movie = new Movie(); movie.setId("345940"); movie.setNamaMovies("The Meg"); movie.setBackdrop("/ibKeXahq4JD63z6uWQphqoJLvNw.jpg"); movie.setPoster("/xqECHNvzbDL5I3iiOVUkVPJMSbc.jpg"); movie.setOverview("A deep sea submersible pilot revisits his past fears in the Mariana Trench, and accidentally unleashes the seventy foot ancestor of the Great White Shark believed to be extinct."); movie.setRating("6.3"); movie.setRelease("2018-08-09"); movies.add(movie); movie = new Movie(); movie.setId("v"); movie.setNamaMovies("Mission: Impossible - Fallout"); movie.setBackdrop("/5qxePyMYDisLe8rJiBYX8HKEyv2.jpg"); movie.setPoster("/AkJQpZp9WoNdj7pLYSj1L0RcMMN.jpg"); movie.setOverview("When an IMF mission ends badly, the world is faced with dire consequences. As Ethan Hunt takes it upon himself to fulfil his original briefing, the CIA begin to question his loyalty and his motives. The IMF team find themselves in a race against time, hunted by assassins while trying to prevent a global catastrophe."); movie.setRating("7.5"); movie.setRelease("2018-07-25"); movies.add(movie); movie = new Movie(); movie.setId("284054"); movie.setNamaMovies("Black Panther"); movie.setBackdrop("/b6ZJZHUdMEFECvGiDpJjlfUWela.jpg"); movie.setPoster("/uxzzxijgPIY7slzFvMotPv8wjKA.jpg"); movie.setOverview("King T'Challa returns home from America to the reclusive, technologically advanced African nation of to serve as his country's new leader. However, T'Challa soon finds that he is challenged for the throne by factions within his own country as well as without. Using powers reserved to Wakandan kings, T'Challa assumes the Black Panther mantel to join with girlfriend Nakia, the queen-mother, his princess-kid sister, members of the Dora Milaje (the Wakandan 'special forces') and an American secret agent, to prevent Wakanda from being dragged into a world war."); movie.setRating("7.3"); movie.setRelease("2018-02-13"); movies.add(movie);

return movies; }

}

9. Jadwal package ilkom.usu.com.tiket.model; import android.os.Parcel; import android.os.Parcelable; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Jadwal implements Parcelable {

@SerializedName("id") @Expose private String id; @SerializedName("harga") @Expose

82

UNIVERSITAS SUMATERA UTARA

private String harga; @SerializedName("jam") @Expose private String jam; @SerializedName("tanggal") @Expose private String tanggal; @SerializedName("studio") @Expose private Integer studio; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getHarga() { return harga; } public void setHarga(String harga) { this.harga = harga; } public String getJam() { return jam; } public void setJam(String jam) { this.jam = jam; } public String getTanggal() { return tanggal; } public void setTanggal(String tanggal) { this.tanggal = tanggal; } public Integer getStudio() { return studio; } public void setStudio(Integer studio) { this.studio = studio; }

@Override public int describeContents() { return 0; }

@Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.id); dest.writeString(this.harga); dest.writeString(this.jam); dest.writeString(this.tanggal); dest.writeValue(this.studio); }

83

UNIVERSITAS SUMATERA UTARA

public Jadwal() { }

protected Jadwal(Parcel in) { this.id = in.readString(); this.harga = in.readString(); this.jam = in.readString(); this.tanggal = in.readString(); this.studio = (Integer) in.readValue(Integer.class.getClassLoader()); }

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Jadwal createFromParcel(Parcel source) { return new Jadwal(source); }

@Override public Jadwal[] newArray(int size) { return new Jadwal[size]; } }; }

10. JadwalResponse package ilkom.usu.com.tiket.model; import java.util.List; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class JadwalResponse {

@SerializedName("data") @Expose private List data = null; @SerializedName("error") @Expose private Boolean error;

public List getData() { return data; }

public void setData(List data) { this.data = data; }

public Boolean getError() { return error; }

public void setError(Boolean error) { this.error = error; }

}

11. Movie package ilkom.usu.com.tiket.model;

84

UNIVERSITAS SUMATERA UTARA

import android.os.Parcel; import android.os.Parcelable; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Movie implements Parcelable {

@SerializedName("id") @Expose private String id; @SerializedName("nama_movies") @Expose private String namaMovies; @SerializedName("rating") @Expose private String rating; @SerializedName("poster") @Expose private String poster; @SerializedName("backdrop") @Expose private String backdrop; @SerializedName("overview") @Expose private String overview; @SerializedName("release") @Expose private String release;

public String getId() { return id; }

public void setId(String id) { this.id = id; }

public String getNamaMovies() { return namaMovies; }

public void setNamaMovies(String namaMovies) { this.namaMovies = namaMovies; }

public String getRating() { return rating; }

public void setRating(String rating) { this.rating = rating; }

public String getPoster() { return "https://image.tmdb.org/t/p/w200" +poster; }

public void setPoster(String poster) { this.poster = poster; }

public String getBackdrop() { return "https://image.tmdb.org/t/p/w500" +backdrop; }

85

UNIVERSITAS SUMATERA UTARA

public void setBackdrop(String backdrop) { this.backdrop = backdrop; }

public String getOverview() { return overview; }

public void setOverview(String overview) { this.overview = overview; }

public Movie() { }

public String getRelease() {

return release; // return release.substring(0,4); }

public void setRelease(String release) { this.release = release; }

public Movie(String id, String namaMovies, String rating, String poster, String backdrop, String overview, String release) { this.id = id; this.namaMovies = namaMovies; this.rating = rating; this.poster = poster; this.backdrop = backdrop; this.overview = overview; this.release = release; }

@Override public int describeContents() { return 0; }

@Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.id); dest.writeString(this.namaMovies); dest.writeString(this.rating); dest.writeString(this.poster); dest.writeString(this.backdrop); dest.writeString(this.overview); dest.writeString(this.release); }

protected Movie(Parcel in) { this.id = in.readString(); this.namaMovies = in.readString(); this.rating = in.readString(); this.poster = in.readString(); this.backdrop = in.readString(); this.overview = in.readString(); this.release = in.readString(); }

public static final Creator CREATOR = new Creator() { @Override

86

UNIVERSITAS SUMATERA UTARA

public Movie createFromParcel(Parcel source) { return new Movie(source); }

@Override public Movie[] newArray(int size) { return new Movie[size]; } }; }

12. Response package ilkom.usu.com.tiket.model; import java.util.List; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Response {

@SerializedName("data") @Expose private List data = null; @SerializedName("error") @Expose private Boolean error;

public List getData() { return data; }

public void setData(List data) { this.data = data; }

public Boolean getError() { return error; }

public void setError(Boolean error) { this.error = error; }

}

13. ResponseTiket package ilkom.usu.com.tiket.model; import java.util.List; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class ResponseTiket {

@SerializedName("data") @Expose private List data = null; @SerializedName("error") @Expose private Boolean error;

public List getData() {

87

UNIVERSITAS SUMATERA UTARA

return data; }

public void setData(List data) { this.data = data; }

public Boolean getError() { return error; }

public void setError(Boolean error) { this.error = error; }

}

14. Seat package ilkom.usu.com.tiket.model; public class Seat {

int number; boolean isSelected; boolean isBooked;

public int getNumber() { return number; }

public void setNumber(int number) { this.number = number; }

public boolean isSelected() { return isSelected; }

public void setSelected(boolean selected) { isSelected = selected; }

public boolean isBooked() { return isBooked; }

public void setBooked(boolean booked) { isBooked = booked; } }

15. Tiket 16. package ilkom.usu.com.tiket.model;

import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName;

public class Tiket {

@SerializedName("is_completed") @Expose private Integer isCompleted; @SerializedName("harga")

88

UNIVERSITAS SUMATERA UTARA

@Expose private Integer harga; @SerializedName("tanggal") @Expose private String tanggal; @SerializedName("jam") @Expose private String jam; @SerializedName("kursi") @Expose private String kursi; @SerializedName("studio") @Expose private Integer studio; @SerializedName("movie") @Expose private String movie; public Integer getIsCompleted() { return isCompleted; } public void setIsCompleted(Integer isCompleted) { this.isCompleted = isCompleted; } public Integer getHarga() { return harga; } public void setHarga(Integer harga) { this.harga = harga; } public String getTanggal() { return tanggal; } public void setTanggal(String tanggal) { this.tanggal = tanggal; } public String getJam() { return jam; } public void setJam(String jam) { this.jam = jam; } public String getKursi() { return kursi; } public void setKursi(String kursi) { this.kursi = kursi; } public Integer getStudio() { return studio; } public void setStudio(Integer studio) { this.studio = studio; }

89

UNIVERSITAS SUMATERA UTARA

public String getMovie() { return movie; }

public void setMovie(String movie) { this.movie = movie; }

}

17. TrailerResponse package ilkom.usu.com.tiket.model; import java.util.List; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class TrailerResponse {

@SerializedName("id") @Expose private Integer id; @SerializedName("results") @Expose private List results = null;

public Integer getId() { return id; }

public void setId(Integer id) { this.id = id; }

public List getResults() { return results; }

public void setResults(List results) { this.results = results; }

}

18. TrailerResult package ilkom.usu.com.tiket.model; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class TrailerResult {

@SerializedName("id") @Expose private String id; @SerializedName("iso_639_1") @Expose private String iso6391; @SerializedName("iso_3166_1") @Expose

90

UNIVERSITAS SUMATERA UTARA

private String iso31661; @SerializedName("key") @Expose private String key; @SerializedName("name") @Expose private String name; @SerializedName("site") @Expose private String site; @SerializedName("size") @Expose private Integer size; @SerializedName("type") @Expose private String type; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getIso6391() { return iso6391; } public void setIso6391(String iso6391) { this.iso6391 = iso6391; } public String getIso31661() { return iso31661; } public void setIso31661(String iso31661) { this.iso31661 = iso31661; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSite() { return site; } public void setSite(String site) { this.site = site; }

91

UNIVERSITAS SUMATERA UTARA

public Integer getSize() { return size; }

public void setSize(Integer size) { this.size = size; }

public String getType() { return type; }

public void setType(String type) { this.type = type; }

}

19. User package ilkom.usu.com.tiket.model; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class User {

@SerializedName("name") @Expose private String name; @SerializedName("email") @Expose private String email; @SerializedName("created_at") @Expose private String createdAt; @SerializedName("updated_at") @Expose private Object updatedAt;

public String getImage() { return image; }

public void setImage(String image) { this.image = image; }

private String image;

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public String getEmail() { return email; }

public void setEmail(String email) { this.email = email; }

92

UNIVERSITAS SUMATERA UTARA

public String getCreatedAt() { return createdAt; }

public void setCreatedAt(String createdAt) { this.createdAt = createdAt; }

public Object getUpdatedAt() { return updatedAt; }

public void setUpdatedAt(Object updatedAt) { this.updatedAt = updatedAt; }

}

20. UserResponse package ilkom.usu.com.tiket.model; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class UserResponse {

@SerializedName("error") @Expose private boolean error; @SerializedName("uid") @Expose private String uid; @SerializedName("user") @Expose private User user;

@SerializedName("error_msg") @Expose private String error_msg;

public String getError_msg() { return error_msg; }

public void setError_msg(String error_msg) { this.error_msg = error_msg; }

public boolean isError() { return error; }

public void setError(boolean error) { this.error = error; }

public String getUid() { return uid; }

public void setUid(String uid) { this.uid = uid; }

93

UNIVERSITAS SUMATERA UTARA

public User getUser() { return user; }

public void setUser(User user) { this.user = user; }

}

21. AboutActivity package ilkom.usu.com.tiket; import android.content.DialogInterface; import android.content.Intent; import android.os.Build; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.Toast; import com.androidnetworking.AndroidNetworking; import com.androidnetworking.error.ANError; import com.androidnetworking.interfaces.StringRequestListener; import ilkom.usu.com.tiket.connection.ApiClient; import ilkom.usu.com.tiket.helper.SessionManager; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class AboutActivity extends AppCompatActivity {

ImageView imgMovie,ImgTiket,ImgInfo,ImgRate;

SessionManager session;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about);

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

if (Build.VERSION.SDK_INT >= 21) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dot_dark_screen1)); getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.dot_dark_sc reen1)); }

getSupportActionBar().setTitle("About"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

imgMovie = findViewById(R.id.imgMovie);

94

UNIVERSITAS SUMATERA UTARA

ImgTiket = findViewById(R.id.imgTiket); ImgInfo = findViewById(R.id.imgInfo); ImgRate = findViewById(R.id.imgRating);

session = new SessionManager(this);

imgMovie.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(AboutActivity.this,MovieActivity.class)); } }); ImgTiket.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(AboutActivity.this,TiketActivity.class)); } }); ImgInfo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(AboutActivity.this,InfoActivity.class)); } }); ImgRate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(AboutActivity.this,RateActivity.class)); } });

} @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; }

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_about, menu); return super.onCreateOptionsMenu(menu); }

@Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_logout) { AlertDialog.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { builder = new AlertDialog.Builder(AboutActivity.this, android.R.style.Theme_Material_Dialog_Alert); } else { builder = new AlertDialog.Builder(AboutActivity.this); } builder.setTitle("Logout") .setMessage("Anda yakin ingin logout?") .setPositiveButton("Ya", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int

95

UNIVERSITAS SUMATERA UTARA

which) { session.setLogin(false); Intent x = new Intent(AboutActivity.this,LoginActivity.class); x.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(x); } }) .setNegativeButton("Tidak", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }) .setIcon(android.R.drawable.ic_dialog_alert) .show();

}

return super.onOptionsItemSelected(item); }

}

22. InfoActivity package ilkom.usu.com.tiket; import android.os.Build; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; public class InfoActivity extends AppCompatActivity {

Button ok;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_info);

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

if (Build.VERSION.SDK_INT >= 21) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dot_dark_screen1)); getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.dot_dark_sc reen1)); }

getSupportActionBar().setTitle("Tentang aplikasi"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

ok = findViewById(R.id.button);

96

UNIVERSITAS SUMATERA UTARA

ok.setOnClickListener(v -> onBackPressed());

} @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } }

23. LoginActivity package ilkom.usu.com.tiket; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.dd.processbutton.iml.ActionProcessButton; import com.google.gson.Gson; import com.rengwuxian.materialedittext.MaterialEditText; import ilkom.usu.com.tiket.connection.ApiClient; import ilkom.usu.com.tiket.helper.SessionManager; import ilkom.usu.com.tiket.model.User; import ilkom.usu.com.tiket.model.UserResponse; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import static ilkom.usu.com.tiket.helper.Utils.LOG_TAG;

public class LoginActivity extends AppCompatActivity {

SessionManager session; ActionProcessButton btnLogin; Button btnLinkToRegister; MaterialEditText inputPhone; MaterialEditText inputPassword;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login);

btnLogin = findViewById(R.id.btnLogin); btnLinkToRegister = findViewById(R.id.btnLinkToRegisterScreen); inputPhone = findViewById(R.id.email); inputPassword = findViewById(R.id.password);

btnLogin.setMode(ActionProcessButton.Mode.ENDLESS);

session = new SessionManager(getApplicationContext());

97

UNIVERSITAS SUMATERA UTARA

if (session.isLoggedIn()) { Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); finish(); }

btnLogin.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) { String email = inputPhone.getText().toString().trim(); String password = inputPassword.getText().toString().trim();

if (!email.isEmpty() && !password.isEmpty()) { inputPhone.setEnabled(false); inputPassword.setEnabled(false); btnLogin.setEnabled(false); loginProcessWithRetrofit(email,password); btnLogin.setProgress(1); } else { Toast.makeText(getApplicationContext(), "Please enter the credentials!", Toast.LENGTH_LONG) .show(); } } });

btnLinkToRegister.setOnClickListener(view -> { Intent i = new Intent(getApplicationContext(), RegisterActivity.class); startActivity(i); });

} private void loginProcessWithRetrofit(final String phone, String password){

ApiClient.getTiketApiClient().authenticate(phone,password).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { UserResponse userResponse = response.body(); if(!userResponse.isError()) { User user = userResponse.getUser(); Log.d(LOG_TAG, new Gson().toJson(response.body())); session.setLogin(true,user.getName(),userResponse.getUser().getEmail(),sessio n.getImage()); Intent x = new Intent(LoginActivity.this, MainActivity.class); x.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(x); finish(); } else { btnLogin.setProgress(0); inputPhone.setEnabled(true); btnLogin.setEnabled(true); inputPassword.setText(""); inputPassword.setEnabled(true); Toast.makeText(LoginActivity.this,"Failed to login"

98

UNIVERSITAS SUMATERA UTARA

,Toast.LENGTH_SHORT).show(); } }

@Override public void onFailure(Call call, Throwable t) { btnLogin.setProgress(0); inputPhone.setEnabled(true); inputPassword.setText(""); btnLogin.setEnabled(true); inputPassword.setEnabled(true); btnLogin.setEnabled(true); Toast.makeText(LoginActivity.this,"Failed to login",Toast.LENGTH_SHORT).show(); } });

}

}

24. MainActivity package ilkom.usu.com.tiket; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.TextView; import android.widget.Toast; import com.androidnetworking.AndroidNetworking; import com.androidnetworking.error.ANError; import com.androidnetworking.interfaces.ParsedRequestListener; import com.androidnetworking.interfaces.StringRequestListener; import org.angmarch.views.NiceSpinner; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import ilkom.usu.com.tiket.adapter.MoviesAdapter; import ilkom.usu.com.tiket.connection.ApiClient; import ilkom.usu.com.tiket.helper.SessionManager; import ilkom.usu.com.tiket.model.Movie; import ilkom.usu.com.tiket.model.Response; import ilkom.usu.com.tiket.model.User;

99

UNIVERSITAS SUMATERA UTARA

public class MainActivity extends AppCompatActivity implements MoviesAdapter.OnMovieClickedListener{

TextView name; RecyclerView rvMovies; GridLayoutManager mGridLayoutManager; MoviesAdapter adapter;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

rvMovies = findViewById(R.id.rv_movies);

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar);

myToolbar.setLogo(R.drawable.ic_ticket); getSupportActionBar().setTitle(" Tiket Bioskop Ku"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

if (Build.VERSION.SDK_INT >= 21) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dot_dark_screen1)); getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.dot_dark_sc reen1)); }

Log.d("tes",ApiClient.server+"movies.php");

AndroidNetworking.get(ApiClient.server+"movies.php").build().getAsObject(Resp onse.class, new ParsedRequestListener() { @Override public void onResponse(Object response) { Log.d("tes","response") ; Response hasil = (Response) response; if(hasil.getData()!=null) { if(hasil.getData().size()>0) { adapter = new MoviesAdapter(MainActivity.this, MainActivity.this, hasil.getData(),R.layout.movie_grid_item); mGridLayoutManager = new GridLayoutManager(MainActivity.this, 2); rvMovies.setLayoutManager(mGridLayoutManager); rvMovies.setAdapter(adapter); } else Toast.makeText(MainActivity.this,"Jadwal Kosong",Toast.LENGTH_SHORT).show(); } else Toast.makeText(MainActivity.this,"Jadwal Kosong",Toast.LENGTH_SHORT).show(); }

@Override public void onError(ANError anError) { Log.d("tes","error " + anError); } }); }

100

UNIVERSITAS SUMATERA UTARA

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); }

@Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_about) { Intent x = new Intent(MainActivity.this,AboutActivity.class); startActivity(x); return true; }

return super.onOptionsItemSelected(item); }

@Override public void onMovieClicked(Movie movie) { Log.d("tes","error " + movie.getRelease()); Intent intent = new Intent(MainActivity.this,MovieDetailActivity.class); intent.putExtra("movie",movie); startActivity(intent); } }

25. MovieActivity package ilkom.usu.com.tiket; import android.content.Intent; import android.os.Build; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import com.androidnetworking.AndroidNetworking; import com.androidnetworking.error.ANError; import com.androidnetworking.interfaces.ParsedRequestListener; import ilkom.usu.com.tiket.adapter.MoviesAdapter; import ilkom.usu.com.tiket.connection.ApiClient; import ilkom.usu.com.tiket.helper.Utils; import ilkom.usu.com.tiket.model.Movie; import ilkom.usu.com.tiket.model.Response; public class MovieActivity extends AppCompatActivity implements MoviesAdapter.OnMovieClickedListener{

TextView name; RecyclerView rvMovies; RecyclerView rvMovies2;

101

UNIVERSITAS SUMATERA UTARA

MoviesAdapter adapter;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_movie);

rvMovies = findViewById(R.id.rv_movies); rvMovies2 = findViewById(R.id.rv_movies2);

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

if (Build.VERSION.SDK_INT >= 21) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dot_dark_screen1)); getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.dot_dark_sc reen1)); }

getSupportActionBar().setTitle("Info Movie"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

AndroidNetworking.get(ApiClient.server+"movies.php").build().getAsObject(Resp onse.class, new ParsedRequestListener() { @Override public void onResponse(Object response) { Log.d("tes","response") ; Response hasil = (Response) response; if(hasil.getData()!=null) { if(hasil.getData().size()>0) { adapter = new MoviesAdapter(MovieActivity.this, MovieActivity.this, hasil.getData(),R.layout.movie_grid_item_horizontal); rvMovies.setLayoutManager(new LinearLayoutManager(MovieActivity.this,LinearLayoutManager.HORIZONTAL,false)) ; rvMovies.setAdapter(adapter); MoviesAdapter moviesAdapter = new MoviesAdapter(MovieActivity.this, MovieActivity.this, Utils.getComingSoon(),R.layout.movie_grid_item_horizontal); rvMovies2.setLayoutManager(new LinearLayoutManager(MovieActivity.this,LinearLayoutManager.HORIZONTAL,false)) ; rvMovies2.setAdapter(moviesAdapter); } else Toast.makeText(MovieActivity.this,"Jadwal Kosong",Toast.LENGTH_SHORT).show(); } else Toast.makeText(MovieActivity.this,"Jadwal Kosong",Toast.LENGTH_SHORT).show(); }

@Override public void onError(ANError anError) { Log.d("tes","error " + anError); } });

}

102

UNIVERSITAS SUMATERA UTARA

@Override public void onMovieClicked(Movie movie) { Log.d("tes","error " + movie.getRelease()); Intent intent = new Intent(MovieActivity.this,MovieDetailActivity.class); intent.putExtra("movie",movie); startActivity(intent);

}

@Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } }

26. MovieDetailActivity package ilkom.usu.com.tiket; import android.content.Intent; import android.os.Build; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.androidnetworking.AndroidNetworking; import com.androidnetworking.error.ANError; import com.androidnetworking.interfaces.ParsedRequestListener; import com.squareup.picasso.Picasso; import butterknife.BindView; import butterknife.ButterKnife; import ilkom.usu.com.tiket.adapter.JadwalAdapter; import ilkom.usu.com.tiket.adapter.MoviesAdapter; import ilkom.usu.com.tiket.connection.ApiClient; import ilkom.usu.com.tiket.model.Jadwal; import ilkom.usu.com.tiket.model.JadwalResponse; import ilkom.usu.com.tiket.model.Movie; import ilkom.usu.com.tiket.model.Response; public class MovieDetailActivity extends AppCompatActivity implements JadwalAdapter.OnJadwalClickedListener{

ImageView poster; ImageView backdrop; TextView title; TextView rating; TextView sinopsis; TextView release; Button trailer; String id; RecyclerView rvJadwal;

103

UNIVERSITAS SUMATERA UTARA

JadwalAdapter adapter; Movie movie;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_movie_detail);

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

getSupportActionBar().setTitle("Detail Movie"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

if (Build.VERSION.SDK_INT >= 21) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dot_dark_screen1)); getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.dot_dark_sc reen1)); }

poster = findViewById(R.id.poster); title = findViewById(R.id.title); rating = findViewById(R.id.rating); sinopsis = findViewById(R.id.synopsis); backdrop = findViewById(R.id.backdrop); release = findViewById(R.id.release_date); trailer = findViewById(R.id.btn_trailer); rvJadwal = findViewById(R.id.rv_jadwal);

Intent intent = getIntent();

movie = intent.getParcelableExtra("movie"); String url = movie.getPoster();

id = movie.getId(); Picasso.get().load(url).into(poster); Picasso.get().load(movie.getBackdrop()).into(backdrop); title.setText(movie.getNamaMovies()); String ratings = movie.getRating(); release.setText(movie.getRelease()); if(ratings.equals("0")) ratings = "N/A"; rating.setText(ratings); sinopsis.setText(movie.getOverview());

trailer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(!id.isEmpty()) { Intent x = new Intent(MovieDetailActivity.this, TrailerActivity.class); x.putExtra("idMovie",id); startActivity(x); } } });

AndroidNetworking.get(ApiClient.server+"jadwal.php") .addQueryParameter("id_movies",id) .build() .getAsObject(JadwalResponse.class, new ParsedRequestListener() {

104

UNIVERSITAS SUMATERA UTARA

@Override public void onResponse(Object response) { Log.d("tes","response") ; JadwalResponse jResponse = (JadwalResponse) response; if(jResponse.getData()!=null) { adapter = new JadwalAdapter(MovieDetailActivity.this, MovieDetailActivity.this, jResponse.getData()); rvJadwal.setLayoutManager(new LinearLayoutManager(MovieDetailActivity.this)); rvJadwal.setAdapter(adapter); } }

@Override public void onError(ANError anError) { Log.d("tes","error " + anError); } });

}

@Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } @Override public void onJadwalClicked(Jadwal jadwal) { if(movie!=null) { Intent seat = new Intent(MovieDetailActivity.this, SeatsActivity.class); seat.putExtra("jadwal", jadwal); seat.putExtra("movie",movie); startActivity(seat); } else Log.d("tes","null"); } }

27. RateActivity package ilkom.usu.com.tiket; import android.os.Build; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import android.widget.TabHost; import android.widget.Toast; public class RateActivity extends AppCompatActivity {

Button btn1,btn2,btn3;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rate);

btn1 = findViewById(R.id.button2);

105

UNIVERSITAS SUMATERA UTARA

btn2 = findViewById(R.id.button3); btn3 = findViewById(R.id.button4);

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

if (Build.VERSION.SDK_INT >= 21) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dot_dark_screen1)); getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.dot_dark_sc reen1)); }

btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(RateActivity.this,"Terimakasih atas rating anda", Toast.LENGTH_SHORT).show(); finish(); } }); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(RateActivity.this,"Terimakasih atas rating anda", Toast.LENGTH_SHORT).show(); finish(); } }); btn3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(RateActivity.this,"Terimakasih atas rating anda", Toast.LENGTH_SHORT).show(); finish(); } });

getSupportActionBar().setTitle("Rate"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

}

}

28. RegisterActivity package ilkom.usu.com.tiket; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.dd.processbutton.iml.ActionProcessButton; import com.google.gson.Gson; import com.rengwuxian.materialedittext.MaterialEditText; import ilkom.usu.com.tiket.connection.ApiClient;

106

UNIVERSITAS SUMATERA UTARA

import ilkom.usu.com.tiket.model.User; import ilkom.usu.com.tiket.model.UserResponse; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import static ilkom.usu.com.tiket.helper.Utils.LOG_TAG;

public class RegisterActivity extends AppCompatActivity {

private ActionProcessButton btnRegister; private Button btnLinkToLogin; private MaterialEditText inputFullName; private MaterialEditText inputPhone; private MaterialEditText inputPassword;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register);

inputFullName = findViewById(R.id.name); inputPhone = findViewById(R.id.email); inputPassword = findViewById(R.id.password); btnRegister = findViewById(R.id.btnRegister); btnLinkToLogin = findViewById(R.id.btnLinkToLoginScreen);

btnRegister.setMode(ActionProcessButton.Mode.ENDLESS);

btnRegister.setOnClickListener(view -> { String name = inputFullName.getText().toString().trim(); String email = inputPhone.getText().toString().trim(); String password = inputPassword.getText().toString().trim();

if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty()) {

inputFullName.setEnabled(false); inputPhone.setEnabled(false); inputPassword.setEnabled(false); btnRegister.setEnabled(false); btnRegister.setProgress(1);

registerProcessWithRetrofit(email,password,name); } else { Toast.makeText(getApplicationContext(), "Please enter your details!", Toast.LENGTH_LONG) .show(); } });

btnLinkToLogin.setOnClickListener(view -> { Intent i = new Intent(getApplicationContext(), LoginActivity.class); startActivity(i); finish(); }); }

private void registerProcessWithRetrofit(final String phone, String password, String name){

ApiClient.getTiketApiClient().registration(phone,password,name).enqueue(new Callback() {

107

UNIVERSITAS SUMATERA UTARA

@Override public void onResponse(Call call, Response response) { UserResponse userResponse = response.body(); if(userResponse!=null) { if (!userResponse.isError()) { User user = userResponse.getUser();

Log.d(LOG_TAG, new Gson().toJson(response.body())); Log.d(LOG_TAG, user.getName());

Intent x = new Intent(RegisterActivity.this, LoginActivity.class); x.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(x); } else { Log.d("tes", new Gson().toJson(response.body())); Toast.makeText(RegisterActivity.this, userResponse.getError_msg(), Toast.LENGTH_SHORT).show(); btnRegister.setProgress(0); inputFullName.setEnabled(true); inputPhone.setEnabled(true); inputPassword.setEnabled(true); btnRegister.setEnabled(true); Log.d(LOG_TAG, String.valueOf(userResponse.isError())); } } }

@Override public void onFailure(Call call, Throwable t) {

btnRegister.setProgress(0); inputFullName.setEnabled(true); inputPhone.setEnabled(true); inputPassword.setEnabled(true); btnRegister.setEnabled(true);

Toast.makeText(RegisterActivity.this,"Failed to register",Toast.LENGTH_SHORT).show(); } }); } }

29. SeatsActivity package ilkom.usu.com.tiket; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.androidnetworking.AndroidNetworking;

108

UNIVERSITAS SUMATERA UTARA

import com.androidnetworking.error.ANError; import com.androidnetworking.interfaces.StringRequestListener; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; import ilkom.usu.com.tiket.adapter.SeatAdapter; import ilkom.usu.com.tiket.connection.ApiClient; import ilkom.usu.com.tiket.helper.SessionManager; import ilkom.usu.com.tiket.model.Jadwal; import ilkom.usu.com.tiket.model.Movie; import ilkom.usu.com.tiket.model.Seat; import ilkom.usu.com.tiket.model.User; public class SeatsActivity extends AppCompatActivity implements SeatAdapter.OnseatClickListener{

Button btn; Jadwal jadwal; Movie movie; User user; RecyclerView rvSeats; List strings; SeatAdapter adapter; List selected; TextView noTiket; TextView harga;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_seats);

rvSeats = findViewById(R.id.rv_seats); btn = findViewById(R.id.btnPesan); noTiket = findViewById(R.id.txtMovie); harga = findViewById(R.id.txtHarga);

Intent x = getIntent(); SessionManager sessionManager = new SessionManager(this);

movie = x.getParcelableExtra("movie"); jadwal = x.getParcelableExtra("jadwal"); user = sessionManager.getData();

selected = new ArrayList<>(); strings = new ArrayList<>(); AndroidNetworking.get(ApiClient.server+"kursi.php") .addQueryParameter("id_jadwal",jadwal.getId()) .build().getAsString(new StringRequestListener() { @Override public void onResponse(String response) { for(int i=0;i<170;i++){ Seat seat = new Seat(); seat.setNumber(i); seat.setSelected(false); seat.setBooked(false); strings.add(seat); } if(response.length()>0) { List list = new ArrayList(Arrays.asList(response.split(",")));

109

UNIVERSITAS SUMATERA UTARA

for (int x = 0; x < list.size(); x++) { strings.get(Integer.parseInt(list.get(x).trim())).setBooked(true); } } adapter = new SeatAdapter(SeatsActivity.this,SeatsActivity.this,strings); GridLayoutManager mGridLayoutManager = new GridLayoutManager(SeatsActivity.this, 10,GridLayoutManager.HORIZONTAL,false); rvSeats.setLayoutManager(mGridLayoutManager); rvSeats.setAdapter(adapter); }

@Override public void onError(ANError anError) {

} });

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle("Pilih Kursi"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

btn.setOnClickListener(v -> { if(selected.size()>0) { String hp = user.getEmail().substring(1); hp = "62"+hp; String s = TextUtils.join(", ", selected); AndroidNetworking.post(ApiClient.server + "pesan.php") .addBodyParameter("id_jadwal", jadwal.getId()) .addBodyParameter("waktu", String.valueOf(Calendar.getInstance().getTimeInMillis())) .addBodyParameter("kursi", s) .addBodyParameter("hp_user", hp) .build().getAsString(new StringRequestListener() { @Override public void onResponse(String response) { Log.d("tes", response); Toast.makeText(SeatsActivity.this,"Pemesanan berhasil",Toast.LENGTH_SHORT).show(); finish(); }

@Override public void onError(ANError anError) {

} });

} });

}

@Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } @Override public void onSeatClicked(int position) { Seat seat = strings.get(position);

110

UNIVERSITAS SUMATERA UTARA

if(seat.isSelected()) { selected.remove(""+position); } else { selected.add(""+position); } seat.setSelected(!seat.isSelected()); strings.set(position,seat); adapter.notifyDataSetChanged(); String s = TextUtils.join(", ", selected); Log.d("tes",s); noTiket.setText(selected.size() + " Tiket");

double amount = Double.parseDouble(jadwal.getHarga()); amount = amount* selected.size(); DecimalFormat formatter = new DecimalFormat("#,###"); harga.setText("Rp " +formatter.format(amount)); } }

30. SplashActivity package ilkom.usu.com.tiket; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.constraint.ConstraintLayout; import android.support.v7.app.AppCompatActivity; import android.view.View; import ilkom.usu.com.tiket.helper.Utils; public class SplashActivity extends AppCompatActivity {

private static int SPLASH_TIME_OUT = 3000;

ConstraintLayout constraintLayout;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash);

constraintLayout = findViewById(R.id.splash); if (Build.VERSION.SDK_INT >= 21) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_S TABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } new Handler().postDelayed(() -> Utils.animateBackground(constraintLayout, getResources().getColor(R.color.warm_pink), 1000), 1500);

new Handler().postDelayed(() -> goToNextPage(), 3000); }

public void goToNextPage(){ Intent intent = new Intent(SplashActivity.this, LoginActivity.class); startActivity(intent); SplashActivity.this.finish(); } }

111

UNIVERSITAS SUMATERA UTARA

31. TiketActivity package ilkom.usu.com.tiket; import android.os.Build; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.widget.Toast; import com.androidnetworking.AndroidNetworking; import com.androidnetworking.error.ANError; import com.androidnetworking.interfaces.ParsedRequestListener; import ilkom.usu.com.tiket.adapter.MoviesAdapter; import ilkom.usu.com.tiket.adapter.TiketAdapter; import ilkom.usu.com.tiket.connection.ApiClient; import ilkom.usu.com.tiket.helper.SessionManager; import ilkom.usu.com.tiket.helper.Utils; import ilkom.usu.com.tiket.model.Response; import ilkom.usu.com.tiket.model.ResponseTiket; public class TiketActivity extends AppCompatActivity {

TiketAdapter adapter; RecyclerView rvTiket;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tiket);

rvTiket = findViewById(R.id.rv_tiket);

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

if (Build.VERSION.SDK_INT >= 21) { getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dot_dark_screen1)); getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.dot_dark_sc reen1)); }

getSupportActionBar().setTitle("Info Tiket"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

SessionManager sessionManager =new SessionManager(this); String hp = sessionManager.getData().getEmail().substring(1); hp = "62"+hp;

AndroidNetworking.get(ApiClient.server+"tiket.php?hp="+hp).build().getAsObjec t(ResponseTiket.class, new ParsedRequestListener() { @Override public void onResponse(Object response) { Log.d("tes","response") ;

112

UNIVERSITAS SUMATERA UTARA

ResponseTiket hasil = (ResponseTiket) response; if(hasil.getData()!=null) { if(hasil.getData().size()>0) { adapter = new TiketAdapter(TiketActivity.this,hasil.getData()); rvTiket.setLayoutManager(new LinearLayoutManager(TiketActivity.this,LinearLayoutManager.VERTICAL,false)); rvTiket.setAdapter(adapter); } else Toast.makeText(TiketActivity.this,"Jadwal Kosong",Toast.LENGTH_SHORT).show(); } else Toast.makeText(TiketActivity.this,"Jadwal Kosong",Toast.LENGTH_SHORT).show(); }

@Override public void onError(ANError anError) { Log.d("tes","error " + anError); } });

} @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } }

32. TrailerActivity package ilkom.usu.com.tiket; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; import com.androidnetworking.AndroidNetworking; import com.androidnetworking.error.ANError; import com.androidnetworking.interfaces.ParsedRequestListener; import com.androidnetworking.interfaces.StringRequestListener; import ilkom.usu.com.tiket.adapter.TrailerAdapter; import ilkom.usu.com.tiket.model.Movie; import ilkom.usu.com.tiket.model.TrailerResponse; import ilkom.usu.com.tiket.model.TrailerResult; public class TrailerActivity extends AppCompatActivity implements TrailerAdapter.OnMovieClickedListener{

RecyclerView recyclerView; TrailerAdapter adapter;

@Override

113

UNIVERSITAS SUMATERA UTARA

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_trailer);

recyclerView = findViewById(R.id.rv_trailer);

Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

getSupportActionBar().setTitle("Trailers"); myToolbar.setTitleTextColor(getResources().getColor(R.color.white));

Intent x = getIntent();

String id = x.getStringExtra("idMovie");

AndroidNetworking.get("http://api.themoviedb.org/3/movie/"+ id + "/videos?api_key=9c11e1693a8fbaa62bb4172d6f2132c8") .build() .getAsObject(TrailerResponse.class, new ParsedRequestListener() { @Override public void onResponse(Object response) { TrailerResponse trailerResponse = (TrailerResponse) response;

adapter = new TrailerAdapter(TrailerActivity.this,TrailerActivity.this,trailerResponse.getR esults()); recyclerView.setLayoutManager(new LinearLayoutManager(TrailerActivity.this)); recyclerView.setAdapter(adapter); }

@Override public void onError(ANError anError) {

} }); }

@Override public void onMovieClicked(TrailerResult result) { watchYoutubeVideo(this,result.getKey()); }

public static void watchYoutubeVideo(Context context, String id){ Intent appIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:" + id)); Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=" + id)); try { context.startActivity(appIntent); } catch (ActivityNotFoundException ex) { context.startActivity(webIntent); } }

@Override public boolean onSupportNavigateUp() { onBackPressed(); return true; }

114

UNIVERSITAS SUMATERA UTARA

115

UNIVERSITAS SUMATERA UTARA

116

UNIVERSITAS SUMATERA UTARA

117

UNIVERSITAS SUMATERA UTARA