Data penjualan, log server, hasil survei — sebagian besar data dunia nyata berpindah tempat dalam bentuk CSV (comma-separated values): teks polos berbaris-baris dengan kolom yang dipisah koma, yang bisa dibuka di mana saja tanpa aplikasi khusus. Proyek keempat kita membangun alat analisis CSV: program yang membaca berkas data penjualan, memvalidasi setiap barisnya, menghitung statistik per produk, lalu mencetak laporan ringkas siap baca. Ukurannya kecil, tetapi latihannya menyentuh keahlian inti pemrosesan data sungguhan — parsing teks, validasi input, agregasi per kunci, dan format laporan.
Tiga keputusan desain menopang proyek ini. Pertama, logika ditulis sebagai function murni yang melaporkan kegagalan lewat tipe kembalian (std::optional dan std::expected), sehingga seluruh alur bisa diuji tanpa menyentuh stdin. Kedua, validasi berprinsip fail-closed: baris yang meragukan ditolak dan dilaporkan lengkap dengan nomor barisnya, tidak pernah diam-diam masuk ke perhitungan. Ketiga, dataset ditanam di dalam kode sebagai salinan cadangan dari data/penjualan.csv, sehingga setiap contoh self-contained dan seluruh keluaran proyek ini deterministik — aman dijadikan angka emas saat pengujian.
Kita membangunnya dalam empat bagian:
- Bagian 1: Membaca File CSV — memahami format CSV, menanamkan dataset, dan menulis parser koma sederhana beserta batasannya.
- Bagian 2: Memvalidasi Data —
std::from_charsyang ketat, tujuh gerbang validasi berurutan, dan pelaporan nomor baris untuk setiap baris yang ditolak. - Bagian 3: Menghitung Statistik — agregasi per produk dengan
std::map: total transaksi, unit, pendapatan, rata-rata, serta harga minimum dan maksimum. - Bagian 4: Menghasilkan Laporan — laporan berformat rapi dengan
iomanip, bedah alur program dari ujung ke ujung, dan test harness dengan 35 pemeriksaan.
Perilaku yang Diharapkan #
Program final menyajikan seluruh hasil di atas dalam satu laporan:
g++ -std=c++23 -Wall -Wextra analisis-csv-final.cpp -o analisis-csv
./analisis-csvOutput yang Dihasilkan:
==============================================
LAPORAN ANALISIS PENJUALAN (CSV)
==============================================
Baris valid : 6
Baris ditolak : 0
Produk Transaksi Unit Pendapatan Rata-rata HargaMin HargaMaks
------------------------------------------------------------------------------
Buku Tulis 2 17 61250 30625.00 3500 3750
Penghapus 1 30 45000 45000.00 1500 1500
Pensil 2B 2 45 90000 45000.00 2000 2000
Pulpen Gel 1 15 67500 67500.00 4500 4500
------------------------------------------------------------------------------
TOTAL 6 107 263750 43958.33 1500 4500Perhatikan struktur ceritanya: ringkasan pembacaan di atas menyebut berapa baris diterima dan ditolak, tabel per produk menjawab pertanyaan “produk mana yang paling menghasilkan”, dan baris TOTAL memberi angka keseluruhan yang bisa dicek ulang. Seluruh kode sumber final tersedia di src/analisis-csv.cpp beserta harness uji tests/uji-analisis.cpp yang memeriksa parser, gerbang validasi, pelaporan nomor baris, dan angka emas statistik. Mari kita mulai dari tahap paling dasar: membaca berkas CSV-nya.
Pahami format CSV, tanamkan dataset penjualan, dan bangun parser koma sederhana lengkap dengan batasannya sebelum masuk ke validasi.
Buka → # Bagian 2: Memvalidasi DataTolak baris rusak dengan pesan yang menyebut nomor baris: std::from_chars yang ketat, tujuh gerbang validasi berurutan, dan prinsip fail-closed.
Buka → # Bagian 3: Menghitung StatistikAgregasikan baris valid per produk memakai std::map: total transaksi, unit, pendapatan, rata-rata, serta harga minimum dan maksimum.
Buka → # Bagian 4: Menghasilkan LaporanRakit semuanya menjadi laporan berformat rapi dengan iomanip, bedah alur program dari ujung ke ujung, lalu kunci perilakunya dengan test harness.
Buka →