Menu
CoddyTech

Menjual Barang

Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 52 dari 66.

challenge icon

Tantangan

Mudah

Kamu akan menerima lima input. Input pertama adalah nama barang yang akan dijual. Input kedua adalah jumlah yang akan dijual. Input ketiga adalah list nama barang dalam inventaris yang dipisahkan dengan koma. Input keempat adalah list harga yang sesuai dengan setiap barang, dipisahkan dengan koma. Input kelima adalah list jumlah setiap barang, dipisahkan dengan koma. Buat HashMap untuk menyimpan data inventaris, dengan nama barang sebagai key dan nilai berupa tuple yang berisi harga dan jumlah (f64, i32). Lalu, coba jual jumlah barang yang diminta.

Persyaratan:

  • Impor HashMap dari std::collections
  • Baca input pertama (nama barang yang akan dijual) dan hapus whitespace di sekitarnya
  • Baca input kedua (jumlah yang akan dijual) dan hapus whitespace di sekitarnya
  • Parse jumlah yang akan dijual menjadi i32
  • Baca input ketiga (nama barang yang dipisahkan dengan koma) dan hapus whitespace di sekitarnya
  • Baca input keempat (harga yang dipisahkan dengan koma) dan hapus whitespace di sekitarnya
  • Baca input kelima (jumlah barang yang dipisahkan dengan koma) dan hapus whitespace di sekitarnya
  • Buat HashMap<String, (f64, i32)> yang mutable untuk inventaris
  • Pisahkan nama barang berdasarkan koma
  • Pisahkan harga berdasarkan koma dan parse masing-masing menjadi f64
  • Pisahkan jumlah barang berdasarkan koma dan parse masing-masing menjadi i32
  • Masukkan setiap barang ke inventaris bersama harga dan jumlahnya yang sesuai sebagai tuple
  • Gunakan .get() untuk memeriksa apakah barang yang diminta ada dalam inventaris
  • Gunakan ekspresi match untuk menangani Option yang dikembalikan oleh .get()
  • Di arm Some:
    • Ambil harga dan jumlah saat ini dari tuple
    • Periksa apakah jumlah saat ini lebih besar dari atau sama dengan jumlah yang akan dijual
    • Jika ya:
      • Hitung jumlah baru dengan mengurangi jumlah yang akan dijual dari jumlah saat ini
      • Hitung harga total dengan mengalikan harga barang dengan jumlah yang akan dijual
      • Gunakan .insert() untuk memperbarui inventaris dengan jumlah baru
      • Cetak: Sold [quantity_to_sell] [item_name]
      • Cetak: Total: $[total_price]
      • Cetak: Remaining stock: [new_quantity]
    • Jika tidak (stok tidak cukup):
      • Cetak: Insufficient stock for [item_name]
      • Cetak: Available: [current_quantity]
  • Di arm None, cetak: [item_name] is not in stock

Input:

  • Baris pertama: Nama barang yang akan dijual (misalnya, Mouse)
  • Baris kedua: Jumlah yang akan dijual (misalnya, 10)
  • Baris ketiga: Nama barang yang dipisahkan dengan koma (misalnya, Laptop,Mouse,Keyboard)
  • Baris keempat: Harga yang dipisahkan dengan koma (misalnya, 999.99,25.50,75.00)
  • Baris kelima: Jumlah barang yang dipisahkan dengan koma (misalnya, 15,50,30)

Output:

  • Jika barang ada dan stoknya cukup:
    • Baris pertama: Sold [quantity_to_sell] [item_name]
    • Baris kedua: Total: $[total_price]
    • Baris ketiga: Remaining stock: [new_quantity]
  • Jika barang ada tetapi stoknya tidak cukup:
    • Baris pertama: Insufficient stock for [item_name]
    • Baris kedua: Available: [current_quantity]
  • Jika barang tidak ada: [item_name] is not in stock

Coba sendiri

use std::collections::HashMap;
use std::io;

fn main() {
    // Baca input
    let mut item_to_sell = String::new();
    io::stdin().read_line(&mut item_to_sell).expect("Failed to read line");
    let item_to_sell = item_to_sell.trim();
    
    let mut quantity_to_sell_input = String::new();
    io::stdin().read_line(&mut quantity_to_sell_input).expect("Failed to read line");
    let quantity_to_sell: i32 = quantity_to_sell_input.trim().parse().expect("Invalid number");
    
    let mut item_names_input = String::new();
    io::stdin().read_line(&mut item_names_input).expect("Failed to read line");
    let item_names_input = item_names_input.trim();
    
    let mut prices_input = String::new();
    io::stdin().read_line(&mut prices_input).expect("Failed to read line");
    let prices_input = prices_input.trim();
    
    let mut quantities_input = String::new();
    io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
    let quantities_input = quantities_input.trim();
    
    // TODO: Tulis kodemu di bawah ini
    // Buat HashMap untuk menyimpan inventaris
    // Proses input dan susun inventaris
    // Periksa apakah barang tersedia dan proses penjualannya
    
}

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Rust online