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:

  1. Bagian 1: Membaca File CSV — memahami format CSV, menanamkan dataset, dan menulis parser koma sederhana beserta batasannya.
  2. Bagian 2: Memvalidasi Data — std::from_chars yang ketat, tujuh gerbang validasi berurutan, dan pelaporan nomor baris untuk setiap baris yang ditolak.
  3. Bagian 3: Menghitung Statistik — agregasi per produk dengan std::map: total transaksi, unit, pendapatan, rata-rata, serta harga minimum dan maksimum.
  4. 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:

bash
g++ -std=c++23 -Wall -Wextra analisis-csv-final.cpp -o analisis-csv
./analisis-csv

Output yang Dihasilkan:

text
==============================================
 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      4500

Perhatikan 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.