Upload
others
View
11
Download
0
Embed Size (px)
Citation preview
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
akan diproses untuk setiap pilihan menu yang ada.
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
Menu ini adalah menu untuk menghapus 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.
Gambar 2.3.4 Rancangan Hapus Data
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 meng-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 getSupportActionBar().setTitle("Tambah Baru");
//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 metode 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);
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() {
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();
}
});
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;
}
}
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 {
@Override
public 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) {
super.onViewCreated(view, 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);
}
});
}
}
2.5. Uji coba Program
Untuk melakukan uji coba pada aplikasi ini, penulis menggunakan
emulator Genymotion pada computer. Spesifikasi computer yang penulis gunakan
adalah sebagai berikut :
Operating System Windows 10 Enterprise 2016 LTSB
Processor Intel Core i3-6006U 2.0 GHz 2
Memory RAM 4 GB
Emulator Genymotion
Tampilan pada emulator genymotion akan mempresentasikan tampilan
aplikasi. Di aplikasi tersebut terdapat menu edit data, tambah data, hapus data,
filter data, tampilan data, dan keluar. Integrated Development Environment (IDE)
yang penulis gunakan adalah Android Studio.
2.6. Implementasi Aplikasi
Implementasi aplikasi yaitu menguji coba aplikasi yang telah
dikembangkan. Aplikasi harus dijalankan dan install terlebih dahulu dengan
emulator yang tedapat pada Android Studio untuk menjalankan aplikasi ini adalah
sebagai berikut :
Untuk meng-install emulator aplikasi langkah-langkahnya adalah sebagai berikut
:
1. Download dan install Genymotion pada website resminya
https://www.genymotion.com.
2. Setelah sudah download dan install, download virtual box dan register
menggunakan gmail.
3. Jika sudah kembali ke android studio pilih menu file,setting, pilih
plugin, browse repository, cari Genymotion dan install.
4. Setelah itu pilih Genymotion manager , lalu pilih device yang sudah di
buat, dan start.
5. Run program dari android studio maka hasil program akan muncul pada
emulator.
KESIMPULAN
Dari hasil pembahasan penulisan ilmiah dengan tema perancangan aplikasi
pencatatan keuangan menggunakan android studio, penulis dapat mengambil
beberapa kesimpulan. Penulis menyimpulkan bahwa aplikasi yang diberi nama
Kassapp ini telah mampu untuk menampilkan catatan pengeluaran kedalam
emulator yang mudah dibaca pengguna menggunakan list.
SARAN
Aplikasi pencatatan keuangan yang dibuat oleh penulis masih memerlukan
pengembangan dan modifikasi. Modifikasi dapat dilakukan pada kode/ algoritma
program ataupun pada tampilan layar-layar yang ada pada aplikasi ini. Untuk
memodifikasi kode program, sebaiknya diusahakan mencari alternatif algoritma
yang lebih baik, yang dapat membuat hasil kompilasi lebih kecil dan memiliki
performa yang lebih baik. Untuk tampilan layar, sebaiknya diusahakan untuk
membuat tampilan yang lebih menarik, atraktif dan lebih informatif agar
pengguna aplikasi pencatatan keuangan ini tidak merasa bosan dan jenuh. Untuk
pengembangan selanjutnya dapat ditambahkan koneksi internet dan didaftarkan ke
playstore sehingga aplikasi pencatatan keuangan ini dapat digunakan oleh dua
orang atau lebih.
DAFTAR PUSTAKA
Anonim. API Management. 2013. http://aws.amazon.com/.
Anonim. Keuntungan Android Studio Dalam Pengembangan Aplikasi
Android. 3 Mei 2019. https://www.logique.co.id/.
Anonim. Pemograman Java ME.htm,2003.
http://faisalwiryasantika.tripod.com.index.
Dwiyana Pangesthi. Pengertian Manajemen Secara Etimologi. 16 April
2020. https://www.brilio.net/wow/11-pengertian-manajemen-menurut-
para-ahli-dan-secara-umum-200416e.html.
Fathurrahman. Belajar Mengenal Codingan Layout Android XML. 27
Maret 2017. http://okedroid.com/2017/03/belajar/mengenal-
codingan-layout-android-xml.html.
I Gusti Ngurah Anom Cahyadi Putra. 2016. Perancangan Aplikasi
Keuangan Mahasiswa Berbasis Mobile. (Vol.IX, No.2, 9-14) Fakultas
Matematika Dan Ilmu Pengetahuan Alam,Universitas Udayana.
Novryan, Akhmad Budi. 2016. Implementasi Aplikasi Keuangan Pribadi
Berbasis Android. Institut Bisnis dan Informatika Kwik Kian Gie.
Ujang Juhardi, Khairullah. 2019. Sistem Pencatatan Dan Pengolahan
Keuangan Pada Aplikasi Manajemen Keuangan E-Dompet Berbasis
Android. (Vol.2,No.1,24-29) Fakultas Teknik Universitas
Muhammadiyah Bengkulu