تمرين إعادة البناء
CSV Sales Summary
أعد كتابة ملخص مبيعات يقرأ CSV بسيطاً ويجمع الإيرادات حسب المنتج.
rust
~15 دقيقة
مبتدئ
أعد بناء الكود
Rebuild
هذا هو الكود. اكتبه بنفسك.
الكود المرجعي
use std::collections::BTreeMap;
use std::env;
use std::fs;
use std::io;
fn main() -> io::Result<()> {
let path = env::args()
.nth(1)
.unwrap_or_else(|| "sales.csv".to_string());
let csv = fs::read_to_string(path).unwrap_or_else(|_| sample_sales());
let mut totals: BTreeMap<String, i64> = BTreeMap::new();
for line in csv.lines().skip(1) {
let fields: Vec<_> = line.split(',').map(str::trim).collect();
if fields.len() != 4 {
continue;
}
let product = fields[1].to_string();
let quantity = fields[2].parse::<i64>().unwrap_or(0);
let unit_halalas = fields[3].parse::<i64>().unwrap_or(0);
*totals.entry(product).or_insert(0) += quantity * unit_halalas;
}
for (product, total_halalas) in totals {
println!("{product}: {}", format_money(total_halalas));
}
Ok(())
}
fn sample_sales() -> String {
"date,product,quantity,unit_halalas\n2026-01-02,Dates,3,2500\n2026-01-02,Coffee,2,1800\n2026-01-03,Dates,1,2500\n".to_string()
}
fn format_money(halalas: i64) -> String {
format!("{}.{:02} SAR", halalas / 100, halalas.abs() % 100)
}اكتب هنا