実 習 3 ページコントロール
ページコントロール 実習3 第5図のような書籍データを読み、処理条件にしたがい第6図のように 印字するプログラムを完成させなさい。 第5図のような書籍データを読み、処理条件にしたがい第6図のように 印字するプログラムを完成させなさい。 入力形式 出力形式 入力ファイル名: B-FILE 入力レコード名: B-REC 出力ファイル名: L-FILE 出力レコード名: L-REC 書籍コード (SCODE) X(4) 書 名 (SYOMEI) X(10) 著 者 (TYOSYA) X(10) ページ Z9 コード ショメイ チョシャ XXXX XXXXXXXXXX XXXXXXXXXX XXXX XXXXXXXXXX XXXXXXXXXX --------------------------------------- ページ Z9 コード ショメイ チョシャ XXXX XXXXXXXXXXX XXXXXXXXXX XXXX XXXXXXXXXXX XXXXXXXXXX ~ ~ ~ (第5図) 処理条件 (1)各ページの先頭にはページ数、見 出しを印字する。 (2)明細行は1ページに10行まで印 字し、改ページする。 ~ ~ ~ (第6図)
入力データ ファイル名 実習3data.txt SCODE SYOMEI TYOSYA 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 ペンシュウジ 1 ペンシュウジ 2 ペンシュウジ 3 タノシイ ダンス1 BASICモンダイ コンピュータ キソ ワープロニュウモン マクロ ニュウモン COBOLモンダイ ハードウェア ソフトウェア ヤサシイ OS 2シュシケンタイサク WINDOWS タノシイCD-ROM ボキ 3キュウ ボキ 2キュウ ボキ 1キュウ マーケティング シュザン 3キュウ シュザン 2キュウ シュザン 1キュウ シュショク タイサク ペンシュウジ 4 ペンシュウジ 5 ペンシュウジ 6 タノシイ ダンス2 シスアドモンダイ サトウ マサキ タケカワ ヒデキ フルカワ トシアキ コバヤシ カツヤ ヤマダ タロウ ヤマダ イチロウ ヤマダ ジロウ ヤマダ サブロウ ヤマダ シロウ ヤマダ ゴロウ スズキ イチロウ ズズキ ジロウ ズズキサブロウ スズキ シロウ スズキ ゴロウ タナカ イチロウ タナカ ジロウ タナカ サブロウ タナカ シロウ タナカ ゴロウ ワタナベ イチロウ ワタナベ ジロウ ワタナベサブロウ ファイル名 実習3data.txt
入力形式・出力形式・処理条件 から記憶領域を定義する
記憶領域の定義 記憶装置 FD:B-FILE 01:B-REC 入力領域 SCODE XXXX SYOMEI XXXXXXXXXX TYOSYA XXXXXXXXXX TU XX 作業領域 01:MEISAI 01:PAGESU M-SCODE XXXX M-SYOMEI XXXXXXXXXX M-TYOSYA XXXXXXXXXX 99 01:MIDASI 01:GYOSU コード ショメイ チョシャ 99 01:E-FLG 01:PAGE-R XXX ページ P-PAGE Z9 出力領域 FD:L-FILE 01:L-REC X(72)
記憶領域の定義から データ部の記述をする
データ部の記述① DATA DIVISION. FILE SECTION. FD B-FILE. 01 B-REC. 02 SCODE PIC X(4). 02 SYOMEI PIC X(10). 02 TYOSYA PIC X(10). 02 PIC X(2). FD L-FILE. 01 L-REC PIC X(72). 入 力 領 域 出力 領域
データ部の記述② WORKING-STORAGE SECTION. 01 E-FLG PIC X(3). 01 PAGESU PIC 9(2). 01 GYOSU PIC 9(2). 01 PAGE-R. 02 PIC X(29) VALUE SPACE. 02 PIC X(7) VALUE "ページ ". 02 P-PAGE PIC Z9. 01 MIDASI. 02 PIC X(5) VALUE SPACE. 02 PIC X(4) VALUE "コード". 02 PIC X(7) VALUE SPACE. 02 PIC X(4) VALUE "ショメイ". 02 PIC X(10) VALUE SPACE. 02 PIC X(4) VALUE "チョシャ". 独立項目 の記述 ページ行 の記述 作 業 領 域 見出行の記述
データ部の記述③ 01 MEISAI. 02 PIC X(5) VALUE SPACE. 02 M-SCODE PIC X(4). 02 M-SYOMEI PIC X(10). 02 M-TYOSYA PIC X(10). 明細行の記述 作 業 領 域
処理手順を考える
入力ファイル・出力ファイルを開く COBOLのプログラムでは、最初の処理は入力用、出力用のファイルを開くことである。 ファイルを開くとは、ファイルを使用できる状態にすることである。
① 初期値を設定 初期値 1 初期値 10 初期値 OFF 入力装置 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 ① 初期値を設定 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE SYOMEI TYOSYA TU 作業領域 01:MEISAI 01:PAGESU M-SCODE M-SYOMEI M-TYOSYA 01 初期値 1 01:MIDASI 01:GYOSU 初期値 10 コード ショメイ チョシャ 10 01:E-FLG 01:PAGE-R OFF 初期値 OFF ページ P-PAGE 出力領域 FD:L-FILE 01:L-REC X(72)
繰り返し処理 入力データを読み終えるまで(E-FLG = “ON”となるまで)以下の手続きを繰り返す。 ② 入力データを読む。 ③ 行数が10に等しくなってるか判断する。 YESの場合は、以下の改ページ処理を行う。 ④ ページ数をページ行に転記する。 ⑤ 改ページ後ページ行を印字する。 ⑥ 見出行を印字する。 ⑦ ページ数に1を加算する。 ⑧ 行数に0(ゼロ)を設定する。 NOの場合は、何もせず次の処理を行う。 ⑨ 各項目を明細行に転記する。 ⑩ 明細行を印字する。 ⑪ 行数をカウントする。
② 入力データを読む 入力データ 入力装置 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 ② 入力データを読む 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU M-SCODE M-SYOMEI M-TYOSYA 01 01:MIDASI 01:GYOSU コード ショメイ チョシャ 10 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 出力領域 FD:L-FILE 01:L-REC X(72)
③ 行数が10に等しくなっているか判断する YESの場合、ページ処理を実施 NOの場合、何もしない 入力データ 改ページ処理には、 ③ 行数が10に等しくなっているか判断する 入力装置 入力データ YESの場合、ページ処理を実施 NOの場合、何もしない 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU M-SCODE M-SYOMEI M-TYOSYA 01 01:MIDASI 01:GYOSU GYOSU = 10 ? YES コード ショメイ チョシャ 10 10 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー ジ行を印字 ●見出行を印字 ●ページ数に1加算 ●行数に0を設定 出力領域 FD:L-FILE 01:L-REC X(72)
④ ページ数をページ行に転記 入力データ 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー 入力装置 入力データ ④ ページ数をページ行に転記 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ 1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU M-SCODE M-SYOMEI M-TYOSYA 01 01:MIDASI 01:GYOSU コード ショメイ チョシャ 10 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 1 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー ジ行を印字 ●見出行を印字 ●ページ数に1加算 ●行数に0を設定 出力領域 FD:L-FILE 01:L-REC X(72)
⑤ 改ページ後にページ行を印字する 入力データ 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー 入力装置 入力データ ⑤ 改ページ後にページ行を印字する 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ 1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU M-SCODE M-SYOMEI M-TYOSYA 01 01:MIDASI 01:GYOSU コード ショメイ チョシャ 10 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 1 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー ジ行を印字 ●見出行を印字 ●ページ数に1加算 ●行数に0を設定 出力領域 FD:L-FILE 01:L-REC X(72) ページ 1
⑥ 見出行を印字する 入力データ 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー ジ行を印字 入力装置 入力データ ⑥ 見出行を印字する 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ 1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU M-SCODE M-SYOMEI M-TYOSYA 01 01:MIDASI 01:GYOSU コード ショメイ チョシャ 10 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 1 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー ジ行を印字 ●見出行を印字 ●ページ数に1加算 ●行数に0を設定 出力領域 FD:L-FILE 01:L-REC X(72) ページ 1 コード ショメイ チョシャ
⑦ ページ数に1を加算する 入力データ 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー ジ行を印字 入力装置 入力データ ⑦ ページ数に1を加算する 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ 1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU PAGESU + 1 → PAGESU 01 02 M-SCODE M-SYOMEI M-TYOSYA 02 01 01:MIDASI 01:GYOSU コード ショメイ チョシャ 10 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 1 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー ジ行を印字 ●見出行を印字 ●ページ数に1加算 ●行数に0を設定 出力領域 FD:L-FILE 01:L-REC X(72) ページ 1 コード ショメイ チョシャ
⑧ 行数に0(ゼロ)を設定する 入力データ 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー 入力装置 入力データ ⑧ 行数に0(ゼロ)を設定する 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ 1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU PAGESU + 1 → PAGESU 01 02 M-SCODE M-SYOMEI M-TYOSYA 02 01 01:MIDASI 01:GYOSU コード ショメイ チョシャ 10 00 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 1 改ページ処理には、 以下の処理がある。 ●ページ数をページ 行に転記 ●改ページ後にペー ジ行を印字 ●見出行を印字 ●ページ数に1加算 ●行数に0を設定 出力領域 FD:L-FILE 01:L-REC X(72) ページ 1 コード ショメイ チョシャ
⑨ 各項目を明細行に転記する 入力データ 入力装置 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 ⑨ 各項目を明細行に転記する 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ 1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU PAGESU + 1 → PAGESU 01 02 M-SCODE M-SYOMEI M-TYOSYA 02 0001 ペンシュウジ 1 サトウ マサキ 01:MIDASI 01:GYOSU コード ショメイ チョシャ 00 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 1 出力領域 FD:L-FILE 01:L-REC X(72) ページ 1 コード ショメイ チョシャ
⑩ 明細行を印字する 入力データ 入力装置 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 ⑩ 明細行を印字する 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ 1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU PAGESU + 1 → PAGESU 01 02 M-SCODE M-SYOMEI M-TYOSYA 02 0001 ペンシュウジ 1 サトウ マサキ 01:MIDASI 01:GYOSU コード ショメイ チョシャ 00 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 1 出力領域 FD:L-FILE 01:L-REC X(72) ページ 1 コード ショメイ チョシャ 0001 ペンシュウジ 1 サトウ マサキ
⑪ 行数をカウントする 入力データ 01 入力装置 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 ⑪ 行数をカウントする 記憶装置 演算装置 FD:B-FILE 01:B-REC 入力領域 SCODE 0001 SYOMEI ペンシュウジ 1 TYOSYA サトウ マサキ TU 作業領域 01:MEISAI 01:PAGESU PAGESU + 1 → PAGESU 01 02 M-SCODE M-SYOMEI M-TYOSYA 02 0001 ペンシュウジ 1 サトウ マサキ 01:MIDASI 01:GYOSU GYOSU + 1 → GYOSU 00 01 コード ショメイ チョシャ 00 01 01:E-FLG 01:PAGE-R OFF ページ P-PAGE 1 出力領域 FD:L-FILE 01:L-REC X(72) ページ 1 コード ショメイ チョシャ 0001 ペンシュウジ 1 サトウ マサキ
入力ファイル・出力ファイルを閉じる COBOLのプログラムでは、最後の処理は入力用、出力用のファイルを閉じることである。