Skip to content

Instantly share code, notes, and snippets.

@JunichiIto
Last active September 6, 2021 16:49
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JunichiIto/201e7e70b64d9f6b576b6b6d6ffc9dc5 to your computer and use it in GitHub Desktop.
Save JunichiIto/201e7e70b64d9f6b576b6b6d6ffc9dc5 to your computer and use it in GitHub Desktop.
Suica版自動販売機問題の問題文です。

Suica版自動販売機問題

下記の課題を改変したプログラミング問題です。

TDD Boot Camp(TDDBC) - TDDBC大阪3.0/課題

ステップ0 Suicaのチャージ

  • Suicaには100円以上の任意の金額をチャージできる
  • Suicaは現在のチャージ残高を取得できる。
  • 注意:実際のSuicaはチャージ可能な金額の単位が決まっているが、仕様が複雑になるので、ここでは任意の金額をチャージできることにする

ステップ1 ジュースの管理

  • 自動販売機は値段と名前の属性からなるジュースを1種類格納できる。初期状態で、コーラ(値段:120円、名前”コーラ”)を5本格納している。
  • 自動販売機は格納されているジュースの情報(値段と名前と在庫)を取得できる。
  • 注意:責務を持ちすぎていませんか?責任を持ちすぎていたら分割しましょう

ステップ2 購入

  • 自動販売機は在庫の点で、コーラが購入できるかどうかを取得できる。
  • ジュース値段以上のチャージ残高がある条件下で購入操作を行うと、自動販売機はジュースの在庫を減らし、売り上げ金額を増やし、Suicaのチャージ残高を減らす。
  • チャージ残高が足りない場合もしくは在庫がない場合、購入操作を行っても何もしない。
  • 自動販売機は現在の売上金額を取得できる。
  • 注意:責務が集中していませんか?責務が多すぎると思ったら分けてみましょう

ステップ3 機能拡張

  • ジュースを3種類管理できるようにする。
    • 在庫にレッドブル(値段:200円、名前”レッドブル”)5本を追加する。
    • 在庫に水(値段:100円、名前”水”)5本を追加する。
  • 自動販売機は在庫の点で購入可能なドリンクのリストを取得できる。
  • ステップ2と同様の方法でレッドブルと水を購入できる

ステップ4 利用者属性の管理

  • Suicaは利用者の年齢と性別を保存できる
  • Suicaは利用者の年齢を取得できる
  • Suicaは利用者の性別を取得できる
  • 注意:本来なら生年月日を保存すべきだが、年齢の計算が複雑になるので、ここでは年齢を保存する

ステップ5 売り上げ管理

  • 自動販売機はジュースが購入されたタイミングで、販売日時とSuica利用者の年齢と性別を記録する
  • 自動販売機はどのジュースが何歳の男性or女性に購入されたか、販売履歴を取得できる

更新履歴

2020.7.11

  • ステップ5で販売履歴に「いつ」を記録しなくていいように変更。(システム日時が絡むとテストコードが複雑になるため)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment