Продажа товара
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 52 из 66.
Задание
ЛегкоВы получите пять входных данных. Первый ввод — это название товара для продажи. Второй ввод — это количество для продажи. Третий ввод — это список названий товаров в инвентаре, разделенных запятыми. Четвертый ввод — это список цен, соответствующих каждому товару, разделенных запятыми. Пятый ввод — это список количеств, соответствующих каждому товару, разделенных запятыми. Создайте HashMap для хранения данных инвентаря, где ключом является название товара, а значением — кортеж, содержащий цену и количество (f64, i32). Затем попытайтесь продать запрошенное количество товара.
Требования:
- Импортируйте
HashMapизstd::collections - Прочитайте первый ввод (название товара для продажи) и удалите лишние пробелы
- Прочитайте второй ввод (количество для продажи) и удалите лишние пробелы
- Преобразуйте количество для продажи в тип
i32 - Прочитайте третий ввод (названия товаров через запятую) и удалите лишние пробелы
- Прочитайте четвертый ввод (цены через запятую) и удалите лишние пробелы
- Прочитайте пятый ввод (количества через запятую) и удалите лишние пробелы
- Создайте изменяемый
HashMap<String, (f64, i32)>для инвентаря - Разделите названия товаров по запятым
- Разделите цены по запятым и преобразуйте каждую в
f64 - Разделите количества по запятым и преобразуйте каждое в
i32 - Вставьте каждый товар в инвентарь с соответствующей ценой и количеством в виде кортежа
- Используйте
.get(), чтобы проверить, существует ли запрошенный товар в инвентаре - Используйте выражение
matchдля обработкиOption, возвращаемого методом.get() - В ветке
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
Ввод:
- Первая строка: Название товара для продажи (например,
Mouse) - Вторая строка: Количество для продажи (например,
10) - Третья строка: Названия товаров через запятую (например,
Laptop,Mouse,Keyboard) - Четвертая строка: Цены через запятую (например,
999.99,25.50,75.00) - Пятая строка: Количества через запятую (например,
15,50,30)
Вывод:
- Если товар существует и его достаточно на складе:
- Первая строка:
Sold [quantity_to_sell] [item_name] - Вторая строка:
Total: $[total_price] - Третья строка:
Remaining stock: [new_quantity]
- Первая строка:
- Если товар существует, но его недостаточно на складе:
- Первая строка:
Insufficient stock for [item_name] - Вторая строка:
Available: [current_quantity]
- Первая строка:
- Если товара не существует:
[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 для хранения инвентаря
// Обработайте входные данные и создайте инвентарь
// Проверьте, существует ли товар, и обработайте продажу
}Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента