構造化プログラミングとは、大きな問題を分解し、分解された処理ごとに設計・実装し、分解された処理を繋げることでプログラムを完成するプログラミング手法である。
構造化プログラミング課題として、以下に説明する簡単な商品在庫管理システムを取り上げる。
課題の商品在庫管理システム (図1) は、1)在庫データの初期化 2)在庫データの更新処理 3)最終在庫データの表示 の処理に分割する。
さらに、2)在庫データの更新処理は、2.1)在庫変更の入力 2.2)在庫データの更新 2.3)最新在庫データの表示に分割する。
在庫データは、0から始まる商品番号毎の在庫数を1次元整数配列 (図2) で管理する。配列は商品種類分の長さを持つ。商品が5種類の場合、配列の長さは5であり、要素0には商品0の在庫数、要素1には商品1の在庫数、要素2には商品2の在庫数と続く。
在庫変更データは、0から始まる商品番号と在庫の増減の組を要素数2の1次元整数配列 (図3) として表す。変更データ{0,2}は商品0が2個増えることを表し、変更データ{1,-1}は商品1が1個減ることを表す。
図1. 課題の商品在庫管理システムのモジュール図
図2. 課題の商品在庫管理配列
図3. 課題の商品変更データ配列
import java.io.BufferedReader; import java.io.InputStreamReader; public class Kadai12_1 { public static void main(String[] args) throws Exception{ int[] item = input(); System.out.println("商品 "+item[0]+" 増減= "+item[1]); } //課題1 在庫変更データの入力 static int[] input() throws Exception{ BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); System.out.print("商品番号?"); int itemnumber = Integer.parseInt(buf.readLine()); System.out.print("個数増減?"); int itemchange = Integer.parseInt(buf.readLine()); //ここで要素数2の1次元整数配列を生成し //在庫変更データを設定した後 //戻り値として配列を返したい } }上記例題を参考に、標準入力から読み込んだ商品番号と増減を要素数2の1次元整数配列に設定し、戻り値として返すようにメソッド input()を修正したプログラム Kadai12_1.javaを作成せよ。 実行例(修正後)
商品番号?0 個数増減?2 商品 0 増減= 2※水色はキーボード(標準入力)からのユーザ入力
public class Kadai12_2 { public static void main(String[] args){ int[] inventory = { 1, 0, 3, 2, 4 }; //在庫データ生成 output(inventory); //在庫データ表示 } //課題2 在庫データの表示 static void output(int[] inventory){ System.out.println("商品在庫:"); //ここで配列 inventory を forループで巡回し //在庫にある商品番号(要素番号)と個数を全て表示する } }上記例題を参考に、引数で渡された在庫データの1次元整数配列を巡回し、商品番号(要素番号)と個数を全て表示するようにメソッド output(int[])を修正し、プログラム Kadai12_2.javaを完成させよ。 実行例(修正後)
商品在庫: 商品 0 個数= 1 商品 1 個数= 0 商品 2 個数= 3 商品 3 個数= 2 商品 4 個数= 4
nkf -e Kadai12_1.java | mpage -2f -bA4 | lpr -Pプリンタ名上記がうまくいかない場合は mpage を省く
nkf -e Kadai12_1.java | lpr -Pプリンタ名