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:
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.pyOutput yang Dihasilkan:
=== 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.pysebagai 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
INSERTdanSELECTtanpa kecuali. - Membangun menu CLI interaktif dengan validasi masukan dua lapis: format diperiksa Python, aturan bisnis ditolak database.
- Menyusun laporan agregat dengan
GROUP BY,CASE, danstrftime. - 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:
- Bagian 1: Struktur Tabel dan Koneksi — tabel
transaksidengan CHECK constraint, lalu moduldb.pyyang membuka koneksi dan menjalankan skema. - Bagian 2: Mencatat Transaksi — menu CLI,
INSERTberparameter, dan penanganan error masukan pengguna. - Bagian 3: Laporan Bulanan — ringkasan masuk, keluar, dan saldo per bulan beserta rincian per kategori.
- 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.
Rancang tabel transaksi dengan CHECK constraint lalu bangun modul koneksi db.py sesuai pola akses data.
Buka → # Bagian 2: Mencatat TransaksiBangun menu CLI untuk mencatat transaksi dengan query berparameter dan penanganan error input pengguna.
Buka → # Bagian 3: Laporan BulananSusun laporan bulanan berisi total masuk, keluar, saldo, dan rincian kategori dengan GROUP BY dan CASE.
Buka → # Bagian 4: Testing dan BackupTutup proyek dengan test pytest untuk skema dan laporan, serta backup dan restore dengan verifikasi integritas.
Buka →