Kalkulator untuk bayar tip di restaurant

Hargailah para pekerja2 di hotel2, di cafe, di warung2 termasuk ata_Pika_muku, dengan membiasakan diri untuk memberi tip. Di negara lain seperti Amerika, membayar tip adalah wajib hukumnya. Semoga kita juga tidak kalah untuk bisa membayar sedekah seperti yang di lakukan orang Amerika tsb.
 Ini adalah kalkulator yang bisa di pasang di HP, agar mudah menghitung berapa tip yang harus di bayar dan sekalian sebagai batu loncatan untuk belajar membuat aplikasi berbasis android.

Minggu lalu, di halaman XML saya telah mengulas tentang android user interface(UI). Kali ini saya akan menceritaka bagaimana object-object yang ada pada interface tersebut dapat bekerja sesuai tujuan pembuatannya. Untuk itu mari kita membuat sebuah class yang bekerja untuk menjalankan logika matematika dari aplikasi ini. Demi mempermudahkan komunikasi maka saya memberi nama aplikasinya 'Mesin Hitung' sehingga dengan demikian nama class java yang kita akan bangun sebagai dasar logika aplikasi ini adalah MesinHitung.java
Perhatian...!!untuk menamakan class di bahasa program java haruslah hata-hati. Nama class java tak di perbolehkan ada spasi dan harus di tulis mulai dengan huruf besar, jangan tanya mengapa karena itu adalah hukum java.

Untuk memulai menulis sebuah class pertama kita harus deklarasikan nama paket(package), hal itu sangat penting karena paket itulah yang akan membungkus aplikasi kita sehingga bisa di masukan dan atau di download ke banyak HP di seluruh dunia (wallahhh....ke seluruh dunia? ...mimpi dolohh, yang penting ada mimpi man).
Cara menulis atau menamakan paket adalah di luar jangkauan tulisan ini, namun biasanya nama paket adalah kebalikan dari nama domain, atau nama dengan struktur DSV(dot separated value) umpamanya com.namaDomainAnda.aplikasi.gameKu tapi terserah, setiap developer memiliki cara sendiri bagaimana struktur file sistim-nya masing2. Saya sendiri tidak pakai domain, tapi cukup menggunakan sistim file internal saya sendiri, yang logika-nya mengikuti logika saya sendiri. Masih ada alasan lain mengapa nama paket di atur sedemikian rupa tapi hal itu di luar scope tulisan ini. Kalau develop pakai eclipse maka nama paket terimport ke dalam halaman class secara otomatis karena paket telah di isi dan di namakan sejak build process. Silahkan baca disini untuk proses menamakan paket. Berikut adalah nama paket aplikasi saya menurut logika dan sistim saya sendiri.
package com.vik_sintus.projects.MesinHitung;
/** di wilayah ini nantinya di isi dengan class bawaan android ketika di butuhkan*/
Di awal development, kadang kita tidak tahu dengan pasti object apa saja yang akan kita butuhkan untuk membangun sebuah class, namun eclipse dan android akan memberikan peringatan dengan 'error warning' apabila kita menggunakan object yang belum terimport dan juga object yang belum terdeklarasi, kedalam project. Dengan nada marah(ada tanda silang merah) eclipse akan menyatakan bahwa tulisan kode-nya ada yang salah, tapi walau dia marah eclipse tetap memberikan kita jalan keluar dan memberikan kita banyak kemudahan, misalnya hanya dengan klik pada tanda error maka eclipse akan mempersembahkan kita dengan berbagai pilihan object yang mungkin kita butuhkan untuk memperbaiki kesalahan tsb dan juga memberikan kita banyak rekomendasi kira2 langkah apa yang harus di ambil untuk memperbaiki kesalahan pada kode java yang kita tulis.

Setelah meletak-kan paket di paling atas halaman mari kita lanjutkan membangun MesinHitung.java
package com.vik_sintus.projects.MesinHitung;


public class MesinHitung extends Activity {
/** semua isi class akan berada di sini*/
}
Kode di atas adalah benar tapi eclipse dan android akan menyatakan salah dengan pesan error-nya. Hal itu karena class MesinHitung ingin memakai class Activity bawaan android yang harus di import ke halaman MesinHitung.java. Dan setelah di import maka kode java akan menjadi benar dan nampak sbb:
package com.vik_sintus.projects.MesinHitung;

import android.app.Activity;

public class MesinHitung extends Activity {
/** semua isi class akan berada di sini*/
}
Kode pembukaan di atas hanya menyatakan kepada java bahwa class yang saya buat bernama MesinHitung dan ingin bergandengan tangan dengan class Activity. Isi dari class Activity adalah di luar scope tulisan ini, karena class Activity adalah bagian dari android OS(operating system)
NOTE: yang warna hijau adalah komentar dan tidak akan di eksekusi oleh komputer.

Minggu lalu juga kita telah meletakan 14 buah objects pada halaman main.xml. (bagi yg ingin mencoba develop aplikasi ini, maka saya akan letakan semua file yg di butuhkan di akhir tulisan ini). Dari ke 14 objects tersebut ada 6 objects untuk manampakan tulisan, 2 objects untuk tombol dan 6 objects untuk melakukan logika perhitungan dan cara kerja matematika dari aplikasi ini. Ke 6 objects yang mengandung logika matematika tersebut akan di panggil ke class java untuk di poles agar menjadi pintar. Ke 6 objects tersebut antara lain
3 buah untuk input
3 baris bagian bawah untuk menunjukan hasil
Sedangkan 2 buah tombol yaitu tombol 'Hitung" dan tombol "Ulang" akan di panggil juga, tapi hanya untuk nampang dan merespond ketika di klik saja.

Masing2 dari 6 objects tersebut akan membutuhkan 1 data object yang berjenis angka atau berjenis mata uang. Di dalam bahasa program java data seperti itu identik dengan tipe 'double' data.
Misalnya kalau kita ketik Rp1000 di layar hp, Rp1000 dalam hal ini bukan tipe 'double' karena itu hanya untuk menunjukan angka Rp1000. Oleh karena itu agar Rp1000 dapat memiliki logika hitung maka kita harus membuatkan dia sebuah object bayangan untuk mendampingi object data yang terlihat di layar. Perhatikan 6 objects baru dengan tipe 'double' pada kode berikut, mereka berpasangan dengan 3 objects 'EditText' dan 3 objects 'TextView'. Saya menyatakan ke 6 object itu sebagai object baru karena mereka tidak berada di halaman main.xml yang kita buat minggu lalu. Ke 6 object ini di buat atau di hadirkan semata untuk kepentingan logika. Pemahaman atas kehadiran ke 6 object baru tsb adalah kunci utama untuk memahami logika dan proses kerja aplikasi ini. Bahkan pemahaman akan hal tsb sangat membantu untuk memahami proses pembangunan aplikasi android secara menyeluruh.
package com.vik_sintus.projects.MesinHitung;

import android.app.Activity;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// berikut 6 objects baru untuk memegang nilai/angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;
/** isi class selngkapnya akan berada di sini*/
}
Secara sederhana EditText adalah untuk membuat tempat yang bisa di ketik di layar HP. Pengguna akan mengisi ketiga tempat text tersebut dan kemudian tekan tombol 'Hitung' sehingga HP dapat menghitung. Mengapa tidak di hitung pakai otak saja? anda benar... tapi di sini kita hanya ingin mengenal bagaimana komputer bisa melakukan komputasi serta melakukan logika menghitung dll. Siapa tahu dari hal yang kecil ini dapat membawa ilmu baru untuk membangun hal-hal yang baru. who knows-lah
Sedangkan Button di pergunakan persis seperti namanya, ia di pakai untuk produksi tombol sedangkan TextView di pakai hanya untuk menampakan text ke layar, text = teks, view = lihat. TextView=melihat teks

Semua objects yang akan dipakai telah di deklarasi seperti terlihat di atas. Selanjutnya konstruksi halaman MesinHitung.java dengan gaya dan cara android.
package com.vik_sintus.projects.MesinHitung;

import android.app.Activity;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        membuatObyekBerlogika();
    }
/** isi class selngkapnya akan berada di sini*/
}
Kode di atas akan membuat eclipse marah dengan menunjukan 'error warning' muncul tanda silang warna merah. Hal itu di sebabkan oleh karena kita menyinggung class 'Bundle' dan class 'R'. Kita di suruh untuk mengimport dulu kedua class tsb dan setelah keduanya terimport kedalam project, maka class java akan menjadi benar. Kehadiran class 'R' itu sendiri cukup kompleks, ia di generate secara otomatis oleh android  sedangakan class 'Bundle" adalah termasuk salah satu class bawaan sistim android . Dengan demikian kehadiran dan penampilan dari masing2 class tersebut pada halaman mesinHitung.java agak berbeda. Coba perhatikan tampang class tersebut pada code berikut, class "Bundle" terimport dari class bawaan sistim android 'import android.os.Bundle;' sedangkan class "R" terimport dan terbungkus dari paket yang saya buat 'import com.vik_sintus.projects.MesinHitung.R;'.
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;
//
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        membuatObyekBerlogika();
    }
/** isi class selngkapnya akan berada di sini*/
}
Perhatikan import com.vik_sintus.projects.MesinHitung.R; semua objects yang kita buat akan ter-registrasi secara otomatis di class "R" itulah sebanya perlu di import kehalaman java. Sedangkan "R" menurut rumour adalah singkatan dari Resource. Mengapa tak di sebut Resource saja? itu urusan pembuat program, saya sendiri juga tak tahu mengapa harus pakai "R" saja.

Ada dua hal penting pada pembukaan konstruksi halaman java seperti terlihat di kode paling bawah pada kode MesinHitung.java di atas. setContentView adalah metode bawaan android, dalam hal ini ia menyatakan lihatlah isi dari aplikasi ini di R.layout.main maksudnya lihat bentuk aplikasi ini di folder bernama 'layout' dan filenya bernama 'main.xml' yang kita buat pada artikel minggu lalu.
Kemudian dari pihak kita sendiri menyatakan hey bahasa programan java halaman java ini juga akan saya pakai untuk membuat sebuah metode agar semua object-object yang saya telah deklarasikan dapat memiliki logika java, Untuk itu maka kita harus menciptakan metode(method) sendiri, seperti terlihat pada kode terakhir pada kode di atas, saya sebut saja metodenya membuatObyekBerlogika(); anda boleh menamakan metode sesuai dengan logika anda sendiri. Kalau bukan demikian maka HP hanya akan melihat tulisan kode kita secara literal alias tak ada, atau tak bisa di pakai untuk logika menghitung.

Setelah metodenya telah terdeklarasi maka perlu di bangun atau di konstruksi cara kerja method yang kita maksudkan
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
    }
/** isi class selngkapnya akan berada di sini*/
}
Pengaturan seperti terlihat di kode di atas adalah 'self explanatory-lah'. dalam metode tsb kita hanya menyatakan kepada bahasa program java, hey 'tulisBerapaJumlah' yang saya deklrasikan di sini maksudnya adalah sebuah object yang terbuat dari 'EditText' dan dapat di lihat di 'R' yang identitasnya adalah 'tulisBerapaJumlah'. Ingat bahwa bahasa program java dan bahasa progam lain-nya adalah semuanya sangat pintar, tapi semuanya juga tuli dan bisu dan tak punya perasaan. Bagaimana anda komunikasi dengan seorang yang bisu dan juga tuli dan mati rasa? begitulah kalau mau berkomunikasi dengan bahasa programan.
Kode di atas akan ada error warning dari eclipse karena ada class object yang kita pasang tapi belum terimport ke dalam halaman. Setelah class yang kita butuhkan terimport maka kodenya menjadi benar dan akan terliaht sbb
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;
import android.widget.TextView;


public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
    }
/** isi class selngkapnya akan berada di sini*/
}
Berikutnya kita memasang tombol yang hidup dan berlogika, tombol 'Hitung' untuk menghitung dan tombol 'Ulang' untuk menghitung ulang. Untuk pekerjaan seperti itu maka kita akan menggunakan jasa metode bawaan dari android yang bernama setOnClickListener yang bekerja untuk menghidupkan tombol dan juga metode onClick untuk printahkan android apa yang di lakukan saat pengguna hp menekan tombol.
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;


public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
   // berikut untuk menghidupkan tombol
   tombolHitung.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       hitung(); 
       }
      }
     );
   tombolHitungUlang.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       ulangi(); 
       }
      }
     );

   }
/** isi class selngkapnya akan berada di sini*/
}
Untuk melengkapi kode di atas maka perlu untuk mengimport class 'Button' untuk membuat tombol, dan class 'View' untuk membuka halaman ketika tombol di pencet.
Perhatikan tombolHitung dan tombolHitungUlang pada kode di atas. Secara sederhana android menyatakan hey object tombolHitung dengarlah apa yang di lakukan pemilik HP kalau di klik maka kau buka dan hitung yah.
Tadi saya jelaskan bahwa bahasa program adalah pintar tapi tuli dan buta, kita manusia secara otomatis tahu kalau hitung, yah menghitung dong. Namun bahasa program adalah lain cerita, kita harus menjelaskanya secara teliti dan se detail mungkin. Hitung macam apa? yang perlu di hitung tinggal dimana? dan yang perlu di hitung bentuknya seperti apa? Berikut adalah metode(method) hitung() di perjelaskan lagi secra detail proses menghitung yang di maksudkan dalam hitung();.
package com.vik_sintus.projects.MesinHitung;

import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
// berikut untuk menghidupkan tombol  
tombolHitung.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       hitung(); 
       }
      }
     );
   tombolHitungUlang.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       ulangi(); 
       }
      }
     );

   }
// apa yang di lakukan setelah tombol 'Hitung' di klik
private void hitung(){
     //apa yang perlu di hitung? data macam apa? tinggalnya dimana?
     berapaJumlah=Double.parseDouble(tulisBerapaJumlah.getText().toString());
     berapaPersen=Double.parseDouble(tulisBerapaPersen.getText().toString());
     jumlahOrang=Double.parseDouble(tulisBerapaOrang.getText().toString());
     
     //logika matematika-nya
     berapaTip=(berapaJumlah*berapaPersen)/100;
     berapaTotal=berapaJumlah+berapaTip;
     berapaPerOrang=berapaTotal/jumlahOrang;
     
     //hasil perhitungan
     tunjukJumlahTip.setText(Double.toString(berapaTip));
     tunjukJumlahTotal.setText(Double.toString(berapaTotal));
     tunjukBerapaPerOrang.setText(Double.toString(berapaPerOrang));

}
/** isi class selngkapnya akan berada di sini*/
}
Lihat logika hitung() pada kode di atas, Kalau kita manusia menyatakan berapaJumlah maksudnya berapaJumlah tapi komputer lain ceritanya. Kita harus jelaskan berapaJumlah itu apa? tinggalnya di mana? bentuknya bagaimana? Setelah komputernya paham, baru kemudian komputer menjadi lebih pintar dari kita, sebelum itu komputer hanyalah onggokan besi dan kabel.

Metode 'Ulangi()" yaitu untuk menghitung ulang, ia memiliki logika yang sederhana saja, ia hanya menyatakan... kalau klik "Ulang"  maka 3 objects kembali ke '0' dan tiga objects lainnya di isi saja dengan titik seperti ini "..." seperti di tunjukan pada kode berikut. Dengan demikian maka class MesinHitung.java menjadi lengkap sebagai sebuah class java seperti di bawah ini
package com.vik_sintus.projects.MesinHitung;
/**(c)Vik Sintus Projects
*tak di perkenankan pakai kode ini untuk kepentingan komersial,
*boleh d pakai untuk kepentingan belajar saja,
*
*/
import com.vik_sintus.projects.MesinHitung.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MesinHitung extends Activity {
// panggil ke 8 object yg telah di buat di main.xml 
// 3 object berikut utk input 
 private EditText tulisBerapaJumlah;
 private EditText tulisBerapaPersen;
 private EditText tulisBerapaOrang;
// 2 object berikut utk tombol 
 private Button tombolHitung;
 private Button tombolHitungUlang;
// 3 object berikut utk hasil kalkulasi
 private TextView tunjukJumlahTip;
 private TextView tunjukJumlahTotal;
 private TextView tunjukBerapaPerOrang;
// 6 objects baru untuk memegang nilai dan angka
 private double berapaJumlah=0;
 private double berapaPersen=0;
 private double jumlahOrang=0;
 private double berapaTip=0;
 private double berapaTotal=0;
 private double berapaPerOrang=0;

@Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   membuatObyekBerlogika();

private void membuatObyekBerlogika(){
 //berikut adalah objects yang perlu di kontrol (di atur)
   tulisBerapaJumlah=(EditText)findViewById(R.id.tulisBerapaJumlah);
   tulisBerapaPersen=(EditText)findViewById(R.id.tulisBerapaPersen);
   tulisBerapaOrang=(EditText)findViewById(R.id.tulisBerapaOrang);
   tunjukJumlahTip=(TextView)findViewById(R.id.tunjukJumlahTip);
   tunjukJumlahTotal=(TextView)findViewById(R.id.tunjukJumlahTotal);
   tunjukBerapaPerOrang=(TextView)findViewById(R.id.tunjukBerapaPerOrang);
   tombolHitung=(Button)findViewById(R.id.tombolHitung);
   tombolHitungUlang=(Button)findViewById(R.id.tombolHitungUlang);
 // berikut untuk menghidupkan tombol 
   tombolHitung.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       hitung(); 
       }
      }
     );
   tombolHitungUlang.setOnClickListener(new Button.OnClickListener() { 
      @Override
   public void onClick (View v){ 
       ulangi(); 
       }
      }
     );

   }
// apa yang di lakukan setelah tombol 'Hitung' di klik
 private void hitung(){
     //nilai berapa, datang darimana
     berapaJumlah=Double.parseDouble(tulisBerapaJumlah.getText().toString());
     berapaPersen=Double.parseDouble(tulisBerapaPersen.getText().toString());
     jumlahOrang=Double.parseDouble(tulisBerapaOrang.getText().toString());
     
     //logika matematika-nya
     berapaTip=(berapaJumlah*berapaPersen)/100;
     berapaTotal=berapaJumlah+berapaTip;
     berapaPerOrang=berapaTotal/jumlahOrang;
     
     //hasil perhitungan
     tunjukJumlahTip.setText(Double.toString(berapaTip));
     tunjukJumlahTotal.setText(Double.toString(berapaTotal));
     tunjukBerapaPerOrang.setText(Double.toString(berapaPerOrang));

}
//ketika klik tombol Ulang kembali ke 0 dan ...
 private void ulangi(){
     tulisBerapaJumlah.setText("0");
     tulisBerapaPersen.setText("0");
     tulisBerapaOrang.setText("0");
     tunjukJumlahTip.setText("....");
     tunjukJumlahTotal.setText("....");
     tunjukBerapaPerOrang.setText("....");
    }

}
Logika MesinHitung.java selasai, bagi yang ingin membuat aplikasi ini menjadi lengkap dan dapat di install ke HP, maka berikut adalah 3 buah halaman xml untuk melengkapi kode java di atas dan beraksi sebagai interface. Halaman main.xml telah di panggil dari kode di atas coba lihat di bagian  setContentView(R.layout.main); dan dari dalam main.xml akan di panggil beberapa text untuk tampil di layar HP melalui @string .

Ke 3 file xml tsb antara lain
  • main.xml
  • strings.xml dan
  • AndroidManifest.xml

Berikut adalah isi dari main.xml
<?xml version="1.0" encoding="utf-8"?>
<linearlayout 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android">
    
    <linearlayout 
android:id="@+id/linearLayout1" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaJumlah" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaJumlah" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaJumlah" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaJumlah">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout2" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaPersen" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaPersen" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaPersen" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaPersen">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout3" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanBerapaOrang" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanBerapaOrang" 
android:textsize="20sp">
    </textview>
    <edittext 
android:id="@+id/tulisBerapaOrang" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/tulisBerapaOrang">
    </edittext>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout4" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent">
    <button 
android:id="@+id/tombolHitung" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
android:layout_width="wrap_content" 
android:text="@string/tombolHitung" 
android:textsize="20sp">
    </button>
    <button 
android:id="@+id/tombolHitungUlang" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
android:layout_width="wrap_content" 
android:text="@string/tombolHitungUlang" 
android:textsize="20sp">
    </button>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout5" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisJumlahTip" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisJumlahTip">
    </textview>
    <textview 
android:id="@+id/tunjukJumlahTip" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" 
android:text="" 
android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>

    <linearlayout 
android:id="@+id/linearLayout6" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanJumlahTotal" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanJumlahTotal">
    </textview>
    <textview 
android:id="@+id/tunjukJumlahTotal" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" 
android:text="" 
android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>
<linearlayout 
android:id="@+id/linearLayout7" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="fill_parent">
    <textview 
android:id="@+id/tulisanPerOrang" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="@string/tulisanPerOrang">
    </textview>
    <textview 
android:id="@+id/tunjukBerapaPerOrang" 
android:layout_height="wrap_content" 
android:layout_marginleft="10sp" 
android:layout_width="wrap_content" 
android:text="" 
android:textcolor="#99FF33" 
android:textstyle="bold">
    </textview>
</linearlayout>
</linearlayout>

Perhatikan pada kode xml di atas ada beberapa @string yang akan di jawab oleh strings.xml di bawah ini. Berikut adalah isi dari strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="nama_aplikasi">BayarTip </string>
    <string name="tulisanBerapaJumlah">Besarnya Bill....Rp</string>
    <string name="tulisBerapaJumlah">0</string>
    <string name="tulisanBerapaPersen">Tipnya Berapa..%</string>
    <string name="tulisBerapaPersen">0</string>
    <string name="tulisanBerapaOrang"> Berapa Orang......</string>
    <string name="tulisBerapaOrang">0</string>
    <string name="tombolHitung">Hitung</string>
    <string name="tombolHitungUlang">Ulang</string>
    <string name="tulisJumlahTip">Jumlah Tip = </string>
    <string name="tulisanJumlahTotal">Jumlah Total = </string>
    <string name="tulisanPerOrang">Per Orang = </string>
</resources>
Berikut adalah isi dari AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.vik_sintus.projects.MesinHitung"
      android:versionCode="1"
      android:versionName="bayarTip 1.0">
    <uses-sdk android:minSdkVersion="3" />

    <application  android:icon="@drawable/logo" 
                  android:label="@string/nama_aplikasi">
        <activity android:name="com.vik_sintus.projects.MesinHitung.MesinHitung"
                  android:label="@string/nama_aplikasi">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter>
        </activity>
       
    </application>
</manifest>

Summary:
Agar dapat bekerja sebagai mesin hitung tip maka class MesinHitung.java di atas membutuhkan 3 buah file xml yaitu:
  • main.xml
  • strings.xml
  • AndroidManifest.xml
Silahkan mencoba
Hasilnya seperti gambar berikut

15 comments:

  1. WoW, keren sekali, baru pertama kalinya saya melihat penjelasan source code dengan semenarik dan sejelas ini. saya sempat frustasi mempelajari code pemrograman, tapi setelah melihat penjelasan diatas, sepertinya membuat saya bersemangat lagi. Anda telah berhasil membuat bahasa pemrograman menjadi menarik buat saya.

    Thank you gan, tambah lagi tutorial yang lain.

    ReplyDelete
    Replies
    1. thank you kawan, tetap semangat, mari kita belajar bersama

      Delete
  2. ada gak aplikasi english tenses plus source codenya..mau belajar itu tuh..buat ancang2 TA ..tolongin dong T.T

    ReplyDelete
    Replies
    1. coba lihat logika sistim-nya di
      http://belajar-android-indonesia.blogspot.com.au/2012/08/kamus-digital.html

      Delete
  3. kalok ada inbox dong ke fb saia Desi Perwita..makasi

    ReplyDelete
  4. hi cybery coba baca2 di
    http://belajar-android-indonesia.blogspot.com.au/2012/08/kamus-digital.html

    ReplyDelete
  5. Ini membuat aplikasi androidnya melalui eclips kan mass .??

    ReplyDelete
    Replies
    1. betul mas masfi, sy pakai eclipse

      Delete
    2. Mas pakenya eclips apa? Saya pake eclips standart (kepler) apakah bisa ??

      Delete
    3. saya pakai indigo mas ... semua eclipse bisa

      Delete
  6. mas pada class MesinHitung.java yang "id" itu kok error?? tidak masuk di R (recource)...terimakasih......gmna caranya mas??

    ReplyDelete
    Replies
    1. hai Afi
      R.java di generate secara otomatis oleh sistim asalkan semua xml file-nya sudah lengkap karena R.java berkaca pada variabel yang telah di pasang pada xml file.

      Kalau semuanya sudah di lengkapi tapi sistimnya masih tak mau bersahabat maka re build atau clean projectnya.
      Kalau hal itu masih juga tak berhasil maka coba di restart eclipse atau IDE apa saja yang di pakai

      Delete
  7. Salam kenal bang vik, saya daman saya ingin jadi pengikut blog km ya,? Cz saya sudah semester 8 jurusan TI, ga jago bikin program.
    Mudah-mudahan bisa jadi bahan refrensi(curhat), wkwkwk... good bang vik ^_^

    ReplyDelete