019-007-002

トランザクションとロールバック:レシピ材料管理

初級

問題説明

トランザクションとロールバック:レシピ材料管理

この問題では: try-catch-finallyを使って小麦粉と砂糖の在庫を更新し、在庫不足時はロールバックして全変更を取り消し、結果を標準出力に表示するプログラムを作成します。

学習目標: 例外処理を使ったトランザクションとロールバックの概念を理解する

レシピ材料の在庫を更新するプログラムを作成します。複数の材料の在庫を減らす操作を実行し、途中で在庫不足が発生した場合は全ての変更を取り消します(ロールバック)。finally句を使って、最終的な在庫状態を常に表示します。この仕組みにより、部分的な在庫更新を防ぎ、データの整合性を保ちます。

入力

1行目: 小麦粉の初期在庫(g)
2行目: 砂糖の初期在庫(g)
3行目: レシピで使用する小麦粉(g)
4行目: レシピで使用する砂糖(g)

出力

正常時:

=== Recipe Transaction ===
Flour: [初期]g → [使用後]g
Sugar: [初期]g → [使用後]g
━━━━━━━━━━━━━━━━
Transaction: Committed
Status: Recipe prepared

ロールバック時:

=== Recipe Transaction ===
Flour: [初期]g → Operation failed
Sugar: [初期]g → Not executed
━━━━━━━━━━━━━━━━
Transaction: Rolled back
Flour: [初期]g (restored)
Sugar: [初期]g (restored)
Error: [エラーメッセージ]

テストケース例

※ 出力例はプログラミングの国際標準に準拠し英語で表示しています

正常系
入力:
1000
500
300
200
期待される出力:
=== Recipe Transaction ===
Flour: 1000g → 700g
Sugar: 500g → 300g
━━━━━━━━━━━━━━━━
Transaction: Committed
Status: Recipe prepared
正常系
入力:
200
500
300
200
期待される出力:
=== Recipe Transaction ===
Flour: 200g → Operation failed
Sugar: 500g → Not executed
━━━━━━━━━━━━━━━━
Transaction: Rolled back
Flour: 200g (restored)
Sugar: 500g (restored)
Error: Insufficient flour
境界値
入力:
1000
100
300
200
期待される出力:
=== Recipe Transaction ===
Flour: 1000g → 700g
Sugar: 100g → Not executed
━━━━━━━━━━━━━━━━
Transaction: Rolled back
Flour: 1000g (restored)
Sugar: 100g (restored)
Error: Insufficient sugar
正常系
入力:
500
500
100
100
期待される出力:
=== Recipe Transaction ===
Flour: 500g → 400g
Sugar: 500g → 400g
━━━━━━━━━━━━━━━━
Transaction: Committed
Status: Recipe prepared
❌ テストに失敗したケースがあります
❌ エラー発生

あなたの解答

現在のモード: 自分のコード
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// ここにコードを書いてください

sc.close();
}
}
0 B / 5 MB

残り 9 回実行可能