アイテムの販売
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 52/66。
チャレンジ
簡単5つの入力を受け取ります。最初の入力は販売するアイテム名です。2番目の入力は販売する数量です。3番目の入力は、在庫にあるアイテム名のカンマ区切りリストです。4番目の入力は、各アイテムに対応する価格のカンマ区切りリストです。5番目の入力は、各アイテムに対応する数量のカンマ区切りリストです。アイテム名をキーとし、価格と数量を含むタプル (f64, i32) を値とする在庫データを格納するための HashMap を構築してください。その後、要求された数量のアイテムの販売を試みてください。
要件:
std::collectionsからHashMapをインポートする- 最初の入力(販売するアイテム名)を読み込み、空白をトリミングする
- 2番目の入力(販売する数量)を読み込み、空白をトリミングする
- 販売する数量を
i32にパースする - 3番目の入力(カンマ区切りのアイテム名)を読み込み、空白をトリミングする
- 4番目の入力(カンマ区切りの価格)を読み込み、空白をトリミングする
- 5番目の入力(カンマ区切りの数量)を読み込み、空白をトリミングする
- 在庫用にミュータブルな
HashMap<String, (f64, i32)>を作成する - アイテム名をカンマで分割する
- 価格をカンマで分割し、それぞれを
f64にパースする - 数量をカンマで分割し、それぞれを
i32にパースする - 各アイテムを、対応する価格と数量のタプルと共に在庫に挿入する
.get()を使用して、要求されたアイテムが在庫に存在するか確認するmatch式を使用して、.get()から返されたOptionを処理するSomeアームの場合:- タプルから価格と現在の数量を取り出す
- 現在の数量が販売する数量以上であるか確認する
- はいの場合:
- 現在の数量から販売する数量を引いて、新しい数量を計算する
- アイテムの価格に販売する数量を掛けて、合計金額を計算する
.insert()を使用して、新しい数量で在庫を更新する- 次のように出力する:
Sold [quantity_to_sell] [item_name] - 次のように出力する:
Total: $[total_price] - 次のように出力する:
Remaining stock: [new_quantity]
- いいえ(在庫不足)の場合:
- 次のように出力する:
Insufficient stock for [item_name] - 次のように出力する:
Available: [current_quantity]
- 次のように出力する:
Noneアームの場合、次のように出力する:[item_name] is not in stock
入力:
- 1行目: 販売するアイテム名 (例:
Mouse) - 2行目: 販売する数量 (例:
10) - 3行目: カンマ区切りのアイテム名 (例:
Laptop,Mouse,Keyboard) - 4行目: カンマ区切りの価格 (例:
999.99,25.50,75.00) - 5行目: カンマ区切りの数量 (例:
15,50,30)
出力:
- アイテムが存在し、十分な在庫がある場合:
- 1行目:
Sold [quantity_to_sell] [item_name] - 2行目:
Total: $[total_price] - 3行目:
Remaining stock: [new_quantity]
- 1行目:
- アイテムは存在するが、在庫が不足している場合:
- 1行目:
Insufficient stock for [item_name] - 2行目:
Available: [current_quantity]
- 1行目:
- アイテムが存在しない場合:
[item_name] is not in stock
自分で試してみよう
use std::collections::HashMap;
use std::io;
fn main() {
// 入力を読み込む
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: 以下にコードを記述してください
// 在庫を保存するためのHashMapを作成する
// 入力を処理して在庫を構築する
// アイテムが存在するか確認し、販売を処理する
}