Kita telah mengenal modul sqlite3, query berparameter, transaction, pola akses data, sampai testing database. Sekarang saatnya merangkai seluruh materi tersebut menjadi satu program yang benar-benar dipakai setiap hari: pencatat keuangan pribadi berbasis terminal. Program ini menampilkan menu, menunggu perintah pengguna, dan menyimpan setiap transaksi ke berkas keuangan.db sehingga data bertahan antar eksekusi — dijaga constraint di level database, bukan hanya di kode Python.

Empat kemampuan inti yang kita bangun:

  • catat — menyimpan pemasukan dan pengeluaran lewat query berparameter,
  • lihat — menampilkan transaksi terbaru dalam tabel rapi,
  • laporan — merangkum total masuk, keluar, saldo, serta rincian per kategori setiap bulan,
  • aman — seluruh perilaku diuji dengan pytest dan berkas database dapat dibackup serta dipulihkan.

Seluruh kode sumber setiap tahap tersedia pada bagian Berkas Sumber di bawah halaman setiap bagian.

Tampilan Program Akhir #

Sebelum menulis kode, mari kita tetapkan perilaku akhir program. Sesi berikut memulai dari berkas kosong, mencatat satu pemasukan dan satu pengeluaran, melihat daftar transaksi, lalu mencetak laporan bulanan:

bash
rm -f keuangan.db
echo "1
2025-06-01
Gaji
5500000
Gaji bulanan
2
2025-06-03
Makan
45000
Makan siang
3
4
2025-06
5" | python3 main.py

Output yang Dihasilkan:

text
=== Pencatat Keuangan ===
1. Catat pemasukan
2. Catat pengeluaran
3. Lihat transaksi terakhir
4. Laporan bulanan
5. Keluar
Pilihan: --- Catat Pemasukan ---
Tanggal (YYYY-MM-DD, Enter = hari ini): Kategori: Jumlah (Rp): Catatan (opsional): Transaksi tersimpan dengan id 1.
=== Pencatat Keuangan ===
1. Catat pemasukan
2. Catat pengeluaran
3. Lihat transaksi terakhir
4. Laporan bulanan
5. Keluar
Pilihan: --- Catat Pengeluaran ---
Tanggal (YYYY-MM-DD, Enter = hari ini): Kategori: Jumlah (Rp): Catatan (opsional): Transaksi tersimpan dengan id 2.
=== Pencatat Keuangan ===
1. Catat pemasukan
2. Catat pengeluaran
3. Lihat transaksi terakhir
4. Laporan bulanan
5. Keluar
Pilihan:  id  tanggal     jenis    kategori              jumlah
  2  2025-06-03  keluar   Makan               Rp45.000
  1  2025-06-01  masuk    Gaji             Rp5.500.000
=== Pencatat Keuangan ===
1. Catat pemasukan
2. Catat pengeluaran
3. Lihat transaksi terakhir
4. Laporan bulanan
5. Keluar
Pilihan: Bulan laporan (YYYY-MM): === Laporan Bulan 2025-06 ===
Total pemasukan  : Rp5.500.000
Total pengeluaran: Rp45.000
Saldo            : Rp5.455.000

Pengeluaran terbesar:
1. Makan         Rp45.000 (1 transaksi)

Rincian per kategori:
Makan           1 transaksi  keluar  Rp45.000
Gaji            1 transaksi  masuk   Rp5.500.000
=== Pencatat Keuangan ===
1. Catat pemasukan
2. Catat pengeluaran
3. Lihat transaksi terakhir
4. Laporan bulanan
5. Keluar
Pilihan: Sampai jumpa!

Perintah echo di atas meniru ketikan pengguna: setiap baris di dalam tanda kutip mewakili satu masukan yang diakhiri tombol Enter. Setelah program berakhir, berkas keuangan.db menyimpan kedua transaksi tersebut, dan eksekusi berikutnya menambahkan transaksi baru ke baris yang sama.

Tujuan Pembelajaran #

  • Menerapkan pola akses data: satu modul db.py sebagai satu-satunya tempat membuka koneksi dan menjalankan SQL.
  • Menjaga integritas data dengan CHECK constraint di level database, bukan hanya validasi di kode program.
  • Menulis query berparameter untuk setiap INSERT dan SELECT tanpa kecuali.
  • Membangun menu CLI interaktif dengan validasi masukan dua lapis: format diperiksa Python, aturan bisnis ditolak database.
  • Menyusun laporan agregat dengan GROUP BY, CASE, dan strftime.
  • Menguji lapisan data dengan pytest serta fixture tmp_path.
  • Mencadangkan dan memulihkan berkas database dengan backup API dan PRAGMA integrity_check.

Prasyarat #

Materi berikut perlu dikuasai sebelum memulai proyek ini:

  • Membuat Tabel dengan CREATE TABLE dan Constraint pada Tabel dari section SQL Dasar
  • Fungsi Agregat, Mengelompokan Hasil dengan GROUP BY dan HAVING, serta Ekspresi CASE dari section Query Lanjutan
  • Bekerja dengan Tanggal dan Waktu dari section Fungsi dan Fitur Lanjutan
  • Modul sqlite3 pada Python, Koneksi dan Cursor, Row Factory, Query Berparameter, Transaksi dengan Python, Penanganan Error sqlite3, Pola Akses Data, dan Testing Database dari section SQLite dengan Python
  • Backup dan Restore dari section Administrasi Database

Proyek ini juga memakai Python dasar — perulangan while, function, module, serta try/except — sama seperti prasyarat section SQLite dengan Python.

Tahapan Pengerjaan #

Proyek dikerjakan dalam empat bagian berurutan. Setiap bagian menghasilkan program yang dapat dijalankan penuh pada tahapannya:

  1. Bagian 1: Struktur Tabel dan Koneksi — tabel transaksi dengan CHECK constraint, lalu modul db.py yang membuka koneksi dan menjalankan skema.
  2. Bagian 2: Mencatat Transaksi — menu CLI, INSERT berparameter, dan penanganan error masukan pengguna.
  3. Bagian 3: Laporan Bulanan — ringkasan masuk, keluar, dan saldo per bulan beserta rincian per kategori.
  4. Bagian 4: Testing dan Backup — test pytest untuk skema, laporan, dan backup, lalu backup serta restore dengan verifikasi integritas.

Mulailah dari Bagian 1 dan ikuti urutannya karena setiap bagian dibangun di atas berkas bagian sebelumnya.