PEMBUATAN APLIKASI PENCATATAN KEUANGAN
MENGGUNAKAN ANDROID STUDIO
Rosdiana, Enno Febriana
Fakultas Teknologi Industri
Jurusan Teknik Informatika
Universitas Gunadarma, 2020
ABSTRAKSI
Perkembangan dan peningkatan teknologi smartphone terbilang sangat
cepat. Dengan banyaknya tawaran kemudahan dan keuntungan penggunaan alat
ini, menyebabkan banyak orang yang tertarik untuk memilikinya,dan produsen
smartphone pun berlomba untuk melakukan inovasi, hingga lahirlah teknologi
pemrograman yang memungkinkan smartphone dapat menambah aplikasi diluar
aplikasi standarnya.
Pada kesempatan ini, penulis mempunyai tujuan yaitu membuat aplikasi
android yang mampu menampilkan catatan pengeluaran ke dalam bentuk yang
mudah dibaca pengguna, menggunakan list. Membuat aplikasi berbasis android
yang menampilkan detail catatan pemasukan dan pengeluaran berdasarkan
kategori, tanggal atau jumlah parameter pencarian didapat dari pengguna.
Penulis dapat memanfaatkan media untuk membuat sebuah aplikasi pencatatan
keuangan menggunakan android studio, dimana diharapkan aplikasi tersebut
berguna untuk mencatat dan mengelola pemasukan dan pengeluaran keuangan
sehari-hari menggunakan android kapan saja.
Kata Kunci : Android, Keuangan, Pencatatan Keuangan, Smartphone.
PENDAHULUAN
Pencatatan keuangan merupakan salah satu cara mengetahui seberapa
besar pendapatan dibelanjakan ke dalam beberapa kategori daftar kebutuhan
dalam suatu periode waktu. Dengan melakukan hal tersebut, seseorang berusaha
untuk memahami dan mengendalikan keuangannya. Pada individu yang
pendapatan per bulannya relatif tetap, seperti mahasiswa yang dikirimi uang
bulanan oleh orang tua, pencatatan keuangan sangat penting untuk mengetahui
kemana dan seberapa besar uang yang mereka belanjakan, untuk menghindari
lebih besar pengeluran daripada pendapatan yang diterima, yang mengakibatkan
meminta uang tambahan kepada orang tua atau mengutang ke berbagai pihak.
Pencatatan keuangan yang paling dasar bisa dilakukan dengan menggunakan pena
dan buku catatan, cara ini menawarkan kesederhanaan namun mempunyai tingkat
kesalahan yang tinggi serta tidak ada kemampuan untuk mengelola dan
memanipulasi pengeluaran yang telah dicatat, misal mengetahui total pengeluaran
kategori Belanja OnlineShop pada bulan Februari 2020, dan lain-lain. Cara ini
menawarkan pengelolaan dan presentasi data yang jauh lebih baik daripada
pencatatan manual, namun membutuhkan perangkat keras dan lunak komputer
untuk melakukan fungsinya sehingga lebih demanding dari segi kepraktisan dan
ekonomi.
Melihat perkembangan perangkat keras dan perangkat lunak smartphone
yang memungkinkan tasks lebih kompleks daripada sekedar berkomunikasi sara
dan teks yang bisa dilakukan oleh smartphone, aplikasi pencatatan keuangan
personal dapat diimplementasikan pada smartphone berplatform Android.
Aplikasi Android bisa menjadi cara alternatif pencatatan pengeluaran dari cara
-cara yang sudah ada. Karena pencatatan keuangan merupakan salah satu -cara
mengukur seberapa efektif alokasi pendapatan serta usaha untuk mengontrol
keuangan individu masing-masing.
Berdasarkan permasalahan diatas, maka penulis mencoba membuat
aplikasi
dengan
judul
“Pembuatan aplikasi pencatatan keuangan
menggunakan android studio”.
METODE PENELITIAN
Pada penulisan ini, penulis membutuhkan perangkat keras dan perangkat
lunak. Perangkat yang dibutuhkan adalah satu (1) unit komputer pribadi lengkap
dengan spesifikasi perangkat keras
Operating System Windows 10 Enterprise
2016 LTSB, Memory 4 GB, Processor Intel Core i3-6006U 2.0 GHz 2.
Perangkat Lunak yang dibutuhkan adalah Android SDK Manager, Genymotion.
Pembuatan aplikasi dilakukan dalam beberapa tahap:
1.
Membuat algoritma program.
Pembuatan algoritma program yang akan menjelaskan urutan
langkah-langkah dalam pembuatan aplikasi pencatatan keuangan.
2.
Merancang tampilan aplikasi.
Perancangan tampilan aplikasi pada emulator yang akan digunakan untuk
berinteraksi dengan
user
.
3.
Menulis
source code
.
Membuat kode program berdasarkan kedua tahap sebelumnya untuk
diimplementasikan pada emulator.
4.
Tahap penyusunan akhir.
Kode program yang telah dibuat pada tahap sebelumnya akan dieksekusi
dan dijalankan untuk menganalisa kesesuaiannya dengan ketiga tahap awal
yang dilakukan.
PEMBAHASAN
1.
Gambaran Umum Aplikasi
Dalam aplikasi terdapat 2 buah item yaitu pemasukan dan pengeluaran.
Dalam aplikasi ini yang perlu dilakukan adalah memasukan uang bulanan terlebih
dahulu. Setelah user memasukan uang, user dapat memasukan jumlah
pengeluaran yang terpakai. Jika terjadi kesalahan user dapat mengedit atau
menghapus pemasukan tersebut. Perhitungan pemasukan terjadi dengan
banyaknya user memasukan data. Jika user ingin menambahkan data user dapat
pilih button plus. Jika user ingin mengganti data yang lama dengan data yang baru
user dapat pilih menu edit. Jika user ingin menghapus data user dapat pilih menu
hapus. Jika user ingin keluar dari aplikasi maka user pilih menu close untuk
keluar dan data akan tersimpan secara otomatis.
Didalam penulisan ilmiah ini penulis membuat prototype program aplikasi
ini menggunakan Android Studio, dengan harapan agar dapat memudahkan
pengguna dalam memperoleh informasi seputar buku yang tersedia di sebuah toko
buku. Karena dengan aplikasi ini nantinya diharapkan dapat menghasilkan
informasi seputar buku yang tersedia di sebuah toko buku secara langsung, tanpa
harus browsing website terlebih dahulu, serta dapat menghemat biaya pengguna
dalam memperoleh informasi seputar buku yang tersedia di toko buku tersebut.
2.
Struktur Navigasi Aplikasi
2.1.
Struktur Navigasi
Gambar 2.1. Navigasi Aplikasi
Struktur navigasi yang digunakan adalah struktur navigasi linier.
Penjelasannya adalah sebagai berikut :
1.
Ketika program pertama kali dijalankan maka akan menampilkan halaman
semua data. Dihalaman aplikasi ini terdapat menu-menu yaitu tambah data,
filter data,edit data dan hapus data.
2.
Jika user memilih menu tambah data maka akan ditampilkan halaman aplikasi
yaitu menambahkan data yang akan dimasukan.
3.
Jika user memilih menu filter data maka akan ditampilkan halaman aplikasi
untuk mendapatkan hasil terkini.
4.
Jika user memilih menu edit data maka akan ditampilkan halaman aplikasi
proses data yang sudah dimasukkan, jika ada kesalahan user dapat mengedit
data tersebut.
2.2.
Flowchart Program
Agar lebih memudahkan dalam pembuatan program, maka terlebih dahulu
penulis membuat flowchart (diagram alur) yang akan menggambarkan alur
program secara umum. Flowchart tersebut dapat digambarkan sebagai berikut :
Gambar 2.2. Flowchart Program
User
dapat memilih menu yang tersedia, dan pada tahap ini pilihan
user
2.2.1.
Alur Penekanan Button
Dalam layar aplikasi,
user
dapat berinteraksi dengan aplikasi melalui
button yang terdapat dalam android. Setiap button yang terdapat pada android
diberikan fungsi yang berbeda untuk memenuhi semua kemungkinan interaksi
yang diperlukan dalam aplikasi. Untuk lebih jelasnya, alur penekanan button
dapat dilihat pada gambar berikut ini :
Gambar 2.2.1. Alur Penekanan Button
1.
Button plus untuk menambahkan data.
2.
Button edit untuk mengedit data.
3.
Button hapus untuk menghapus data.
4.
Button simpan untuk menyimpan data.
5.
Button panah, merupakan button yang berada diatas kiri layar android.
Penekanan terhadap button ini berguna untuk mengakses menu tampilan awal
dalam aplikasi, dan posisi penambahan data secara otomatis akan kembali ke
tampilan awal.
6.
Button filter, merupakan button yang berada diatas kanan layar android.
Penekanan terhadap button ini adalah penampilan data-data yang dimasukan
sebelumnya, yaitu dapat memilih data sesuai tanggal yang diinginkan.
2.2.2.
Flowchart Tampilan Awal dalam Aplikasi
Tampilan awal dalam aplikasi memiliki kemiripan dengan menu utama.
Tampilan awal ini dibuat agar
user
dapat melakukan perubahan yang diinginkan
dalam aplikasi seperti penambahan data, edit data, hapus data, filter data ataupun
untuk keluar dari aplikasi.
Tampilan awal dalam aplikasi dapat diakses dengan menekan button
panah kiri. Alur program untuk tampilan awal dalam aplikasi dapat dilihat pada
gambar
berikut :
Gambar 2.2.2. Flowchart Tampilan Awal Dalam Aplikasi
2.3.
Perancangan Tampilan Aplikasi
Dalam merancang sebuah aplikasi, tampilan merupakan suatu hal yang
cukup penting. Aplikasi dengan tampilan yang menarik dan mudah dimengerti
tentunya akan memberikan nilai tambah pada aplikasi itu sendiri. Untuk membuat
aplikasi KasApp ini penulis merancang tampilan awal dalam aplikasi, tampilan
edit data, tambah data, hapus data, dan filter data.
2.3.1.
Rancangan Menu Options dalam Aplikasi
Pada aplikasi permainan yang dibuat, penulis menggunakan beberapa buah
menu yang tujuannya adalah untuk memudahkan dan membantu pengguna
aplikasi dalam mengakses fasilitas dalam aplikasi yang disediakan. Menunya
adalah sebagai berikut:
1. Tambah data
Menu ini adalah menu untuk menambahkan data.
2. Edit data
Menu ini adalah menu untuk mengganti data lama menjadi data yang baru.
3. Hapus data
4. Filter data
Menu ini adalah menu untuk memilih data sesuai tanggal yang diinginkan
oleh
user
.
5. Tampilan awal
Menu ini adalah untuk menampilkan data pemasukan dan pengeluaran
yang didapat oleh
user
.
6.
Keluar
Menu ini adalah menu keluar aplikasi apabila sudah selesai dalam aplikasi
tersebut.
Rancangan tampilan menu dapat dilihat pada gambar seperti berikut ini :
Gambar 2.3.1. Rancangan Halaman Awal dalam Aplikasi
Rancangan tampilan menu tersebut disesuaikan dengan tampilan menu
yang terdapat pada android Android Honeycomb, Android Ice Cream Sandwich,
Android Jellybean, Android Kitakat, Android Lolipop, Android Marsmallow,
dimana menu tersusun secara vertikal dan disertai dengan blok (arsiran) pada
menu, untuk menandai menu yang akan dipilih. Untuk bernavigasi, dapat
dipergunakan button plus untuk mulai menambahkan data, serta button panah kiri
untuk kembali ke tampilan sebelumnya.
2.3.2.
Rancangan Tambah Data
Menu ini adalah awal untuk penambahan data Pada menu ini
user
harus
memasukkan data yang telah ditentukan. Data yang harus dimasukkan adalah
uang pemasukan dan pengeluaran yang sudah terpakai. Untuk menyelesaikan
menu ini data tersebut harus sama dengan nominal bagi pemasukan, pengeluaran,
harga barang dan jenis barang agar data tersusun dengan rapih dan benar.
Gambar 2.3.2. Rancangan Tambah Data
2.3.3.
Rancangan Edit Data
Pada menu ini data yang sudah dimasukan bisa di edit.
Gambar 2.3.3. Rancangan Edit Data
2.3.4.
Rancangan Hapus Data
Pada menu ini data yang sudah dimasukkan bisa dihapus.
2.3.5.
Rancangan Filter Data
Pada menu ini bisa memilih data sesuai tanggal yang diinginkan
user
.
Gambar 2.3.5. Rancangan Filter Data
2.3.6.
Rancangan Halaman Data
Pada halaman ini
user
dapat melihat data yang telah didapat saat diinput.
Informasi yang ditampilkan adalah banyaknya data yang diinput
user.
Rancangannya ditunjukan pada gambar 3.10.
Gambar 3.3.6 Rancangan Halaman Data
2.4.
Pembuatan Program
Pada pemrograman java (android), setiap fungsi yang ingin dibuat harus
dituliskan didalam sebuah kelas, karena pada dasarnya android menganut prinsip
pemrograman API (
Application Programming Interface
). Pada pembuatan
aplikasi
KassApp
ini, penulis membagi fungsi yang terdapat dalam aplikasi ini
kedalam beberapa kelas, dimana setiap kelas dibuat berdasarkan karakteristik
layar yang dipergunakan dalam aplikasi. Dengan kata lain, setiap layar yang ada
dibangun dari kelas tersendiri. Penjelasan tentang kelas yang dibuat dan isinya
akan dijelaskan pada subbab terpisah.
2.4.1.
Splashscreen.java
Kelas ini merupakan kelas pembuka aplikasi yang utama. Splashscreen
digunakan untuk tampilan tambahan yang muncul saat pertama kali kita membuka
suatu aplikasi. Kelas ini didefinisikan sebagai berikut :
package app.kasapp;
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent;
import android.os.Bundle;
public class Splashscreen extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splashscreen); //Thread
Thread timer = new Thread() { public void run(){ try{ sleep(2000); // 1000 = 1 detik }catch (InterruptedException e) { e.printStackTrace(); }finally { //Intent
Intent intent = new
Intent(Splashscreen.this, MainActivity.class); startActivity(intent); //Close Activity finish(); } } }; timer.start(); } }
Perintah
Thread
diatas merupakan suatu struktur pengendali program
yang
dapat
dijalankan secara background,
dan
cara kerjanya
adalah
seperti listener. Dan untuk perintah
Intent
diatas merupakan perpindahan
halaman dari splashscreen ke mainactivity.
2.4.2.
MainActivity.java
Kelas ini mengatur tampilan layar dan sistem aplikasi. Class ini
yang handle sebuah halaman user interface pada aplikasi android dan
meng-extends kelas Main activity untuk pembuatan output. Untuk mendeklarasikannya
digunakan perintah sebagai berikut :
Import helper.SqliteHelper;
public class MainActivity extends AppCompatActivity { TextView text_masuk, text_keluar, text_saldo;
ListView list_kas;
String query_kas, query_total; SqliteHelper sqliteHelper; Cursor cursor;
Perintah diatas yaitu untuk mengatur database pada program dan untuk
pemanggilan
TextView
,
ListView
,
String
,
SqliteHelper
dan
Cursor
.
ArrayList<HashMap<String, String>> aruskas = new
ArrayList<>();
public static TextView text_filter;
public static String transaksi_id, tgl_dari, tgl_ke;
public static boolean filter;
@Override
protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)
findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
transaksi_id =""; tgl_dari=""; tgl_ke = "";
filter = false;
Perintah diatas merupakan proses mem-filter data dari mulai tanggal yang kita
pilih hingga tanggal akhir saat proses pemasukan data.
text_masuk=(TextView)findViewById(R.id.text_masuk); text_keluar = (TextView)findViewById(R.id.text_keluar); text_saldo = (TextView) findViewById(R.id.text_saldo); list_kas = (ListView) findViewById(R.id.list_kas); text_filter = (TextView)
findViewById(R.id.text_filter);
Perintah diatas mendeklarasikan
text_masuk, text_keluar, text_saldo,
list_kas,
text_filter.
sqliteHelper = new SqliteHelper(this);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
// code here
startActivity(new Intent(MainActivity.this, AddActivity.class));
//Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
//.setAction("Action", null).show(); }
}); }
@Override
public void onResume(){
super.onResume();
query_kas = "SELECT *, strftime('%d/%m/%Y', tanggal) AS tgl FROM transaksi ORDER BY transaksi_id DESC";
Perintah untuk total pemasukan dan pengeluaran adalah sebagai berikut:
query_TOTAL:
query_total = "SELECT SUM(jumlah) AS total, (SELECT SUM
(jumlah) FROM transaksi WHERE status = 'MASUK') as masuk," + "(SELECT SUM (jumlah) FROM transaksi WHERE status = 'KELUAR') as keluar FROM transaksi";
if (filter){
Perintah untuk tanggal transaksi adalah sebagai berikut:
query_KAS:
query_kas = "SELECT *, strftime('%d/%m/%Y', tanggal) AS tgl
FROM transaksi " + "WHERE (tanggal >= '" + tgl_dari + "') AND (tanggal <=
'" + tgl_ke + "') ORDER BY transaksi_id ASC";
Perintah untuk penggabungan antara tanggal dan total pemasukan pengeluaran
adalah sebagai berikut:
query_TOTAL:
query_total = "SELECT SUM(jumlah) AS total, " + "(SELECT SUM (jumlah) FROM transaksi WHERE status = 'MASUK' AND (tanggal >= '" +
tgl_dari + "') AND (tanggal <= '" + tgl_ke + "'))," + "(SELECT SUM (jumlah) FROM transaksi WHERE status = 'KELUAR' AND (tanggal >= '" +
tgl_dari + "') AND (tanggal <= '" + tgl_ke + "')) " + "FROM transaksi
WHERE (tanggal >= '" + tgl_dari + "') AND (tanggal <= '" + tgl_ke + "')";
}
KasAdapter(); }
private void KasAdapter(){
aruskas.clear(); list_kas.setAdapter(null);
SQLiteDatabase
database = sqliteHelper.getReadableDatabase();
cursor = database.rawQuery(query_kas, null);
cursor.moveToFirst();
for (int i=0; i < cursor.getCount(); i++ ){ cursor.moveToPosition(i);
Log.d("status", cursor.getString(1));
Perintah dibawah merupakan hashmap yaitu sebuah class yang berisi sekumpulan
pasangan nilai (value) dan kunci (key) untuk menampilkan data. Perintah untuk
membuatnya terdapat pada method sebagai berikut :
HashMap<String, String> map = new HashMap<>(); map.put("transaksi_id", cursor.getString(0)); map.put("status", cursor.getString(1)); map.put("jumlah", cursor.getString(2)); map.put("keterangan", cursor.getString(3)); //map.put("tanggal", cursor.getString(4)); map.put("tanggal", cursor.getString(5)); aruskas.add(map); }
Hashmap diatas terdiri dari
transaksi_id
,
status
,
jumlah
,
keterangan
dan
tanggal
.
SimpleAdapter simpleAdapter = new SimpleAdapter(this, aruskas,
R.layout.list_kas,
new String[] { "transaksi_id", "status", "jumlah", "keterangan", "tanggal" },
new int[] {R.id.text_transaksi_id, R.id.text_status,
R.id.text_jumlah, R.id.text_keterangan,
R. id.text_tanggal } );
list_kas.setAdapter(simpleAdapter);
list_kas.setOnItemClickListener(new
AdapterView.OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
transaksi_id = ((TextView)
view.findViewById(R.id.text_transaksi_id)).getText().toString();
Log.d("transaksi_id", transaksi_id);
ListMenu(); }
});
KasTotal(); }
private void KasTotal(){
NumberFormat rupiah =
NumberFormat.getInstance(Locale.GERMANY);
SQLiteDatabase database = sqliteHelper.getReadableDatabase();
cursor = database.rawQuery(query_total, null); cursor.moveToFirst(); text_masuk.setText(rupiah.format (cursor.getDouble(1) )); text_keluar.setText(rupiah.format (cursor.getDouble(2) )); text_saldo.setText( rupiah.format (cursor.getDouble(1) - cursor.getDouble(2) ) );
if (!filter) { text_filter.setText("SEMUA"); }
filter = false;
}
private void ListMenu(){ final Dialog dialog = new
Dialog(MainActivity.this);
dialog.setContentView(R.layout.list_menu);
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATC
H_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); dialog.show();
Perintah dibawah ini untuk membuat pilihan menu edit dan hapus. Berikut
perintah syntax nya:
TextView text_edit = (TextView)dialog.findViewById(R.id.text_edit); TextView text_hapus = (TextView)dialog.findViewById(R.id.text_hapus); text_edit.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) { dialog.dismiss(); startActivity(new Intent(MainActivity.this, EditActivity.class)); } }); text_hapus.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
dialog.dismiss();
Hapus();
} }); }
Perintah untuk hapus data adalah sebagai berikut:
private void Hapus(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Konfirmasi");
builder.setMessage("Yakin Untuk Menghapus Transaksi
Ini?");
builder.setPositiveButton( "Yes",
new DialogInterface.OnClickListener() {
Perintah diatas merupakan code untuk penghapusan data jika data yakin ingin
dihapus pilih YES.
@Override
public void onClick(DialogInterface dialog, int which) { SQLiteDatabase database = sqliteHelper.getWritableDatabase();
database.execSQL("DELETE FROM transaksi WHERE transaksi_id ='"
+transaksi_id+ "'");
Toast.makeText(MainActivity.this,
"Data Transaksi Berhasil Dihapus",
Toast.LENGTH_LONG).show();
KasAdapter(); }
Toast diatas merupakan salah satu widget yang digunakan untuk menampilkan
pesan berupa text. Toast memiliki fungsi untuk memberitahukan informasi pada
user, mengenai konten atau aksi yang di eksekusinya, bisa berupa konfirmasi,
pesan error atau pemberitahuan lainnya. Perintah diatas merupakan source code
untuk jika pengapusan berhasil maka akan muncul komentar bahwa data transaksi
berhasil dihapus.
builder.setNegativeButton(
"No",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss(); }
}); builder.show(); }
Perintah diatas merupakan code untuk penghapusan data jika data yakin ingin
dihapus pilih NO.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.menu_main, menu); return true;
}
Perintah
getMenuInflater().inflate(R.menu.
menu_main
,
menu);
berfungsi untuk memanggil menu option tampilan yang muncul ketika
ditekan tombol menu pada device android.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in
AndroidManifest.xml.
int id = item.getItemId(); //noinspection SimplifiableIfStatement
if (id == R.id.action_filter) {
startActivity(new Intent(MainActivity.this,FilterActivity.class)); return true; } return super.onOptionsItemSelected(item); } }
Perintah
onOptionsItemSelected
berfungsi agar berhasil dalam menangani
sebuah item menu dan dideklarasikan dengan menambahkan
return true;
.
3.4.3. AddActivity.java
Kelas ini mengatur komponen penting aplikasi android, dan cara aktivitas
diluncurkan dan disatukan adalah bagian mendasar dari model aplikasi platform.
sistem android memulai kode dalam instance activity dengan memanggil metode
callback yang sesuai dengan tahapan tertentu dari siklus prosesnya. Perintah untuk
membuatnya terdapat pada method sebagai berikut :
public class AddActivity extends AppCompatActivity { RadioGroup radio_status;
EditText edit_jumlah, edit_keterangan;
Button btn_simpan; RippleView rip_simpan;
String status;
SqliteHelper sqliteHelper;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_add); status = "";
sqliteHelper = new SqliteHelper(this);
radio_status = (RadioGrup) findViewById(R.id.radio_status); edit_jumlah = (EditText) findViewById(R.id.edit_jumlah); edit_keterangan = (EditText) findViewById(R.id.edit_keterangan); btn_simpan = (Button) findViewById(R.id.btn_simpan); rip_simpan = (RippleView) findViewById(R.id.rip_simpan);
FindViewById
berfungsi untuk menentukan tampilan objek yang sifatnya
penting saat membuat relative layout. Relative layout merupakan layout yang
mengatur tata letak komponen atau widget aplikasi android dengan cara relative
(secara bebas) tidak hanya vertikal atau horizontal saja.
radio_status.setOnCheckedChangeListener(new
RadioGroup.OnCheckedChangeListener() { @Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { switch (checkedId) { case R.id.radio_masuk: status = "MASUK"; break; case R.id.radio_keluar: status = "KELUAR"; break; }
Log.d("Log status", status); }
Untuk membuat record pilihan penyimpanan data baru menggunakan perintah
RadioGroup.OnCheckedChangeListener()
.
Radio
button
group
ini
berfungsi untuk merelasikan antara 2 radio button agar bisa di seleksi salah satu
saja.
rip_simpan.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener(){ @Override
public void onComplete(RippleView rippleView) { if(status.equals("")||
edit_jumlah.getText().toString().equals("")|| edit_keterangan.getText().toString().equals("")){
Toast.makeText(AddActivity.this, "Isi Data Data Dengan Benar”, Toast.LENGTH_LONG).show();
} else {
Perintah dibawah ini untuk memasukan status,jumlah dan keterangan pada
aplikasi. Perintah untuk membuatnya terdapat pada method sebagai berikut :
SQLiteDatabase database =
sqliteHelper.getWritableDatabase(); database.execSQL(
"INSERT INTO transaksi (status, jumlah, keterangan) VALUES ('" + status + "', '" + edit_jumlah.getText().toString() + "',
'"+edit_keterangan.getText().toString()+"')");
Toast.makeText(AddActivity.this, "Data Transaksi Berhasil Disimpan
",
Toast.LENGTH_LONG).show();
finish(); }
} });
Perintah dibawah ini berfungsi untuk meng-edit dan menyimpan data. Kegunaan
untuk
edit_jumlah
dan
edit_keterangan
yaitu kita bisa mengganti data
yang lama menjadi data yang baru. Perintah untuk membuatnya terdapat pada
method sebagai berikut :
btn_simpan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { String jumlah = edit_jumlah.getText().toString(); String keterangan = edit_keterangan.getText().toString(); } });
Perintah dibawah ini berfungsi untuk menambahkan data baru.
Perintah untuk
membuatnya terdapat pada method sebagai berikut :
//Set Title
//Back Icon
getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
//Click Back Icon
@Override
public boolean onSupportNavigateUp(){
finish(); return true; }
}
2.4.3.
SqliteHelper.java
File ini merupakan salah satu fitur yang digunakan di dalam aplikasi
android studio untuk membuat tabel yang dapat menyimpan berbagai data seperti
string dan integer.
Untuk membuat record penyimpanan baru di aplikasi ini digunakan
perintah
public void OnCreate(SQLiteDatabase db){
. Nama record
penyimpanan aplikasi ini adalah transaksi. Untuk membaca nilai database tersebut
digunakan perintah berikut:
package helper;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;
public class SqliteHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "uangKas";
private static final int DATABASE_VERSION = 1; public SqliteHelper(Context context) {
super(context, DATABASE_NAME, null,
DATABASE_VERSION);
// TODO Auto-generated constructor stub }
Untuk membuat database terlebih dahulu berikan nama database. Untuk nama
database dibawah ini yaitu transaksi.
@Override
public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL(
"CREATE TABLE transaksi (transaksi_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, status TEXT," +
"jumlah DOUBLE, keterangan TEXT, tanggal DATE DEFAULT CURRENT_DATE );"
); }
Fungsi
AUTOINCREMENT
yaitu data otomatis akan terurut, status untuk
menyimpan adanya masuk dan keluar data, jumlah menggunakan tipe data double
berfungsi jika adanya angka yang sama, keterangan menggunakan text, dan
tanggal menggunakan
DATE DEFAULT CURRENT_DATE
yang otomatis
mengambil tanggal pada aplikasi.
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub // Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS transaksi"); }
}
2.4.4.
EditActivity.java
Kelas ini mengatur untuk mengedit data pada aplikasi. Class ini hampir
sama dengan Untuk mendeklarasikannya digunakan perintah sebagai berikut :
import helper.SqliteHelper;
public class EditActivity extends AppCompatActivity { MainActivity M = new MainActivity();
RadioGroup radio_status;
RadioButton radio_masuk, radio_keluar;
EditText edit_jumlah, edit_keterangan;
RippleView rip_simpan;
EditText edit_tanggal;
String tanggal, status;
DatePickerDialog datePickerDialog; SqliteHelper sqliteHelper;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit);
Program dibawah ini berfungsi untuk menyimpan tanggal ke sqlite yyyy-mm-dd.
Perintah untuk membuatnya terdapat pada method sebagai berikut :
status = ""; tanggal = ""; radio_status = (RadioGroup) findViewById(R.id.radio_status); radio_masuk = (RadioButton) findViewById(R.id.radio_masuk); radio_keluar = (RadioButton) findViewById(R.id.radio_keluar); edit_jumlah = (EditText) findViewById(R.id.edit_jumlah); edit_keterangan = (EditText)
findViewById(R.id.edit_keterangan);
rip_simpan = (RippleView)
findViewById(R.id.rip_simpan);
edit_tanggal = (EditText)
findViewById(R.id.edit_tanggal);
Perintah dibawah ini untuk input pemilihan data yang masuk dan keluar pada
aplikasi, Perintah untuk membuatnya terdapat pada method sebagai berikut :
sqliteHelper = new SqliteHelper(this);
SQLiteDatabase database = sqliteHelper.getReadableDatabase();
cursor = database.rawQuery("SELECT *,
strftime('%d/%m/%Y', tanggal) AS tgl FROM transaksi WHERE transaksi_id=
'" + M.transaksi_id +"'", null);
cursor.moveToFirst();
status = cursor.getString(1);
switch (status) {
case "MASUK" : radio_masuk.setChecked(true); break;
case "KELUAR" : radio_keluar.setChecked(true); break;
}
Pada
radio_masuk
user dapat memilih untuk pemasukan data yang diinput,
sedangkan
radio_keluar
user dapat memilih untuk pengeluaran data yang
diinput.
radio_status.setOnCheckedChangeListener(new
RadioGroup.OnCheckedChangeListener() { @Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
switch (checkedId) {
case R.id.radio_masuk:
status = "MASUK";
break;
case R.id.radio_keluar:
status = "KELUAR"; break;
}
Log.d("Log status", status);
} }); edit_jumlah.setText( cursor.getString(2) ); edit_keterangan.setText( cursor.getString(3) ); tanggal = cursor.getString(4); edit_tanggal.setText( cursor.getString(5) );
Program dibawah ini untuk menambahkan kalendar pada aplikasi digunakan code
sebagai berikut:
Calendar calendar = Calendar.getInstance(); final int year = calendar.get(Calendar.YEAR);
final int month = calendar.get(Calendar.MONTH); final int day = calendar.get(Calendar.DAY_OF_MONTH);
Variable diatas dideklarasikan untuk menentukan tanggal yang akan diinput user
sesuai data yang dimasukan dan dikeluarkan pada aplikasi.
edit_tanggal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { datePickerDialog = new DatePickerDialog(EditActivity.this, new DatePickerDialog.OnDateSetListener() { @Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
NumberFormat numberFormat = new DecimalFormat("00");
tanggal = numberFormat.format(year) + "-" + numberFormat.format((month + 1)) + "-" +
numberFormat.format(dayOfMonth);
edit_tanggal.setText(numberFormat.format(dayOfMonth) + "/" +
numberFormat.format((month + 1)) + "/" + numberFormat.format(year)); }
}, year, month, day); datePickerDialog.show(); } }); rip_simpan.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() { @Override
public void onComplete(RippleView rippleView) { if (status.equals("") ||
edit_jumlah.getText().toString().equals("") || edit_keterangan.getText().toString().equals("") ) {
Toast.makeText(EditActivity.this, "Isi Data
Dengan Benar ",
Toast.LENGTH_LONG).show(); } else {
Perintah
dibawah
ini
menggunakan
metode
insert
open
helper
memanggil
SQLiteDatabase
, metode
SQLiteDatabase
ini berfungsi
untuk
mempermudah user menyisipkan baris ke dalam database.
SQLiteDatabase database =
sqliteHelper.getWritableDatabase();
database.execSQL( "INSERT INTO transaksi (status,
jumlah, keterangan) VALUES ('" + status + "', '" +
edit_jumlah.getText().toString() + "', " +
"'"+edit_keterangan.getText().toString()+"')" );
Perintah dibawah ini menggunakan
m
etode update dari open helper memanggil
metode update database, sehingga user tidak perlu menulis query SQL seluruhnya.
database.execSQL( "UPDATE transaksi SET status='"+
status +"', jumlah='"+ edit_jumlah.getText().toString() +
"',keterangan='"+ edit_keterangan.getText().toString() +"', tanggal='"+
tanggal + "' WHERE transaksi_id= '" + M.transaksi_id + "'" );
Untuk memberitahukan Informasi pada user, mengenai aksi yang akan di
eksekusi, berupa konfirmasi, pesan error atau pemberitahuan lainnya bisa
menggunakan Toast seperti code dibawah ini:
Toast.makeText(EditActivity.this, "Perubahan Data Transaksi Berhasil Disimpan ", Toast.LENGTH_LONG).show(); finish(); } } }); //Set Title getSupportActionBar().setTitle("Edit"); //Back Icon getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override
public boolean onSupportNavigateUp(){ finish();
return true; }
}
2.4.5.
FilterActivity.java
Kelas ini berguna untuk menyaring data yang banyak agar mudah user
dalam mencari atau mengelompokkan data berdasarkan tanggal yang user
inginkan.
public class FilterActivity extends AppCompatActivity { MainActivity M = new MainActivity();
EditText edit_dari, edit_ke; RippleView rip_simpan;
DatePickerDialog datePickerDialog; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filter); edit_dari = (EditText) findViewById(R.id.edit_dari); edit_ke = (EditText) findViewById(R.id.edit_ke); rip_simpan = (RippleView) findViewById(R.id.rip_simpan);
final int year = calendar.get(Calendar.YEAR); final int month = calendar.get(Calendar.MONTH); final int day =
calendar.get(Calendar.DAY_OF_MONTH);
edit_dari.setOnClickListener(new View.OnClickListener() {
Perintah dibawah ini menggunakan
DatePickerDialog
sebagai komponen user
interface. User dapat memilih tanggal, bulan dan tahun. Berikut code yang akan
ditampilkan:
@Override
public void onClick(View v) { datePickerDialog = new
DatePickerDialog(FilterActivity.this,new DatePickerDialog.OnDateSetListener() { @Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
NumberFormat numberFormat = new
DecimalFormat("00"); M.tgl_dari = numberFormat.format(year) + "-" + numberFormat.format((month + 1)) + "-" + numberFormat.format(dayOfMonth); edit_dari.setText(numberFormat.format(dayOfMonth) + "/" + numberFormat.format((month + 1)) + "/" + numberFormat.format(year)); }
}, year, month, day); datePickerDialog.show(); }
});
edit_ke.setOnClickListener(new View.OnClickListener() {
Ketika user sedang memasukan data atau mengedit data user dapat mengubah
tanggal,bulan,dan tahun menggunakan
DatePickerDialog
.
@Override
public void onClick(View v) { datPickerDialog = new
DatePickerDialog(FilterActivity.this,new DatePickerDialog.OnDateSetListener() { @Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
NumberFormat numberFormat = new
DecimalFormat("00"); M.tgl_ke = numberFormat.format(year) + "-" + numberFormat.format((month + 1)) + "-" + numberFormat.format(dayOfMonth); edit_ke.setText(numberFormat.format(dayOfMonth) + "/" + numberFormat.format((month + 1)) + "/" + numberFormat.format(year)); }
}, year, month, day); datePickerDialog.show(); }
});
RippleView.OnRippleCompleteListener() { @Override
public void onComplete(RippleView rippleView) {
if (M.tgl_ke.equals("") || M.tgl_dari.equals("")){
Toast.makeText(FilterActivity.this, "Isi Data Dengan Benar", Toast.LENGTH_LONG).show(); } else { M.filter = true; M.text_filter.setText(edit_dari.getText().toString() + " - " + edit_ke.getText().toString() ); finish(); } } }); //Set Title getSupportActionBar().setTitle("Filter"); //Back Icon getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
//Click Back Icon @Override
public boolean onSupportNavigateUp(){ finish();
return true; }
}
Dari program diatas user tidak hanya bisa memasukan dan mengedit tanggal tetapi
user juga dapat memfilter data menggunakan tanggal,bulan dan tahun yang sudah
diinput sesuai dengan keinginan user.
2.4.6.
FirstFragment.java
Kelas ini dapat menampilkan satu activity di aplikasi pada satu waktu
tertentu sehingga tidak dapat membagi aplikasi dan mengontrol bagian yang
berbeda secara terpisah. Dengan bantuan fragment, user dapat membagi aplikasi
di berbagai bagian dan mengontrol bagian-bagian yang berbeda secara terpisah.
Perintah untuk membuatnya terdapat pada method sebagai berikut :
public class FilterActivity extends AppCompatActivity { MainActivity M = new MainActivity();
EditText edit_dari, edit_ke;
RippleView rip_simpan;
DatePickerDialog datePickerDialog; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filter); edit_dari = (EditText) findViewById(R.id.edit_dari); edit_ke = (EditText) findViewById(R.id.edit_ke); rip_simpan = (RippleView)
findViewById(R.id.rip_simpan);
Calendar calendar = Calendar.getInstance(); final int year = calendar.get(Calendar.YEAR); final int month = calendar.get(Calendar.MONTH); final int day =
calendar.get(Calendar.DAY_OF_MONTH);
edit_dari.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) { datePickerDialog = new DatePickerDialog(FilterActivity.this, new DatePickerDialog.OnDateSetListener() { @Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
NumberFormat numberFormat = new
DecimalFormat("00"); M.tgl_dari = numberFormat.format(year) + "-" + numberFormat.format((month + 1)) + "-" + numberFormat.format(dayOfMonth); edit_dari.setText(numberFormat.format(dayOfMonth) + "/" + numberFormat.format((month + 1)) + "/" + numberFormat.format(year)); }
}, year, month, day); datePickerDialog.show(); }
});
edit_ke.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
datePickerDialog = new
DatePickerDialog(FilterActivity.this, new
DatePickerDialog.OnDateSetListener() { @Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
NumberFormat numberFormat = new
DecimalFormat("00"); M.tgl_ke = numberFormat.format(year) + "-" + numberFormat.format((month + 1)) + "-" + numberFormat.format(dayOfMonth); edit_ke.setText(numberFormat.format(dayOfMonth) + "/" + numberFormat.format((month + 1)) + "/" + numberFormat.format(year)); }
}, year, month, day); datePickerDialog.show(); }
});
rip_simpan.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() {
@Override
public void onComplete(RippleView rippleView) {
if (M.tgl_ke.equals("") || M.tgl_dari.equals("")){
Toast.makeText(FilterActivity.this, "Isi Data Dengan Benar", Toast.LENGTH_LONG).show(); } else { M.filter = true; M.text_filter.setText(edit_dari.getText().toString() + " - " + edit_ke.getText().toString() ); finish(); } } }); //Set Title getSupportActionBar().setTitle("Filter"); //Back Icon getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
//Click Back Icon @Override
public boolean onSupportNavigateUp(){ finish();
return true; }
}
2.4.7.
SecondFragment.java
Kelas ini dapat menampilkan satu activity di aplikasi pada satu waktu
tertentu sehingga tidak dapat membagi aplikasi dan mengontrol bagian yang
berbeda secara terpisah. Perintah untuk membuatnya terdapat pada method
sebagai berikut :
package app.kasapp; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.navigation.fragment.NavHostFragment; public class SecondFragment extends Fragment { @Overridepublic View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState ) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_second, container,
false); }
public void onViewCreated(@NonNull View view, Bundle
savedInstanceState) {
view.findViewById(R.id.button_second).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { NavHostFragment.findNavController(SecondFragment.this).navigate(R. id.action_SecondFragment_to_FirstFragment); } }); } }