詳細設計

最近は業務で使用するC++の学習として簡単なプログラムを作っています。

お題はボウリングのスコアを表示するプログラムです。今は基本設計が終わり詳細設計のフローチャートを作成しています。
プログラムとしては入力機能、入力チェック機能、計算機能、表示機能を想定して設計しています。簡単に機能を説明したいと思います。


まず1つ目の入力機能は入力を受け取るだけなので簡単です。

2つ目の入力チェック機能ですが、この部分が一番考える必要があるところです。
今回のプログラムはキーボードからの入力を受け取るように作成しており、スコアが正しく入力されるとは限りません。もしかしたらユーザーは間違えて11と入力したりするかもしれません。全く関係ない"abcde"を入力する可能性もあります。こういった例外入力に対しての処理が必要となってきます。
また、ボウリングではストライクとスペアという特殊なスコアがあります。ストライクは1投目の場合あり得ますが、10フレーム目以外の2投目ではストライクはあり得ません。同様にスペアは2投目の場合あり得ますが、1投目ではありえません。こういった入力にも対応しなければなりません。
さらに10フレーム目の1投目、2投目でストライクまたはスペアが入力された場合、3フレーム目の入力が必要になってきます。
このようにいろいろな場合があるので大変です。

3つ目は計算機能です。
スコアの計算はスペアとストライクがあった場合のボーナスを考慮すればいいだけなのでそこまで難しくはありません。
ちなみに自分はボウリングを小さいころに1回やったきりで、それ以降1回もしておらず、スコアにボーナスがあることを知りませんでした。今回ボウリングのルールを調べてスコアにボーナスがあることを知り、良い機会となりました。

4つ目は表示機能です。
表示機能は順番通りに表示をするだけなので簡単です。


詳細設計を行っていると、2つ目の入力チェック機能で基本設計で想定していなかった例外が増え、考えが至っていなかったことを実感します。
基本設計時に例外が思い浮かべられるように勉強していきたいと思いました。