本日の課題
ソフトウェア開発の手順を簡単に解説します。
この授業で開発するソフトウェアは「住所録」で
す。開発手順を考えましょう。
「住所録」のデータ構造を決定し,データ入力
部を作りましょう。
ソフトウェア開発手順
企画立案
要求仕様書の作成

目的,要求の定義と分析
システム設計

プログラムの機能分割,接続方法
プログラム設計仕様書の作成

各関数の構造設計,データ構造の設計
コーディング
テストとデバッグ
保守・運用
「住所録」ソフトの開発
要求仕様


目的:住所や電話番号の管理
要求:データの入力・保存・追加・削除・訂正・検索
システム設計


機能分割:
データ入力,データ追加,データ削除,データ保存,
データ読み込み,整列,検索
接続法:
各機能(関数)へデータのアドレスを渡す
以後,各機能について,プログラム設計仕様を
考えながら実現していきます。
データ入力部の実現
どのように入力するか?
キーボードからの入力
 ファイルからの入力
 他のソフトウェアからのインポート

データ構造はどうするか?
何人分ものデータを扱う=「配列」
 一人のデータにいくつもの小項目がある=「構造体」

構造体の考え方
intやcharなどの基本データ型を好きなよう
に組み合わせて,新しいデータ型として扱
います。
1つの名前だけで,関連したいくつもの変
数を一度に扱うことが出来ます。
密接な関係を持ついくつかの変数を,1つ
の構造体名の元に組織化する働きです。
例えば…
学生の名前と,英語と数学の点数を100
人分管理することを考えましょう。どのよう
に管理しますか?
char name[100][20];
int eigo[100];
int suugaku[100];
それでは…
出席番号38番の学生のデータを,作業領
域である,配列0番の要素にコピーすると
したら,どのような作業になりますか?
strcpy(name[0], name[38]);
eigo[0] = eigo[38];
suugaku[0] = suugaku[38];
3行書く必要がある。間違う可能性が高くなる。
構造体を利用すれば
構造体変数gakusei[100]が宣言されてい
るとすれば…
gakusei[0] = gakusei[38];
たったこれだけで,名前も英語の点数も数
学の点数も同時にコピーが完了します!
では,構造体はどのように定義
するのでしょう?
「名前」「英語」「数学」という3つのデータを扱うための
構造体「student」を考えます。
「student型」というデータ型を新しく作る,と思ってください。
タグ
struct student{
char name[20];
};
int
eigo;
int
suugaku;
メンバ
注意:プリプロセスでの宣言になります。
では,構造体変数gakusei[100]は,
どのように宣言するのでしょう?
新しいデータ型と考えよう
struct student gakusei[100];
gakusei[]は,それぞれの配列要素が,構造体宣言
された複数のメンバ(name, eigo, suugaku)を持ち
ます。では,それぞれのメンバにアクセス(利用)す
るにはどうしたらよいでしょうか?
メンバの参照
•構造体宣言された変数,gakusei[38]のメンバeigo
を参照するには,次のように「.」を用います。
•ただし,構造体変数がポインタ変数の場合は異な
ります。ポインタの項で説明します。
gakusei[38].eigo
演習①
student型で変数を宣言し,その変数のメ
ンバにキーボードから値を入力するプログ
ラムを作成して下さい。
ensyu1.cをダウンロードして,プログラムリ
ストを追加,完成して下さい。
演習②
構造体配列を宣言し,配列の一つの要素
にメンバの値を入力し,他の要素に構造体
コピーすることにより,メンバ全てがコピー
されることを確認して下さい。
ensyu2.cをダウンロードしてリストを追加し
て下さい。
ensyu1.cの結果を利用しても良いです。
では,住所録。
住所録データとして,メンバ変数には何を
用意すればよいでしょうか? また,それは
どのようなデータ型で宣言すればよいで
しょうか?
演習のプログラムを参考にして,住所録
データを入力して,確認のために画面に出
力するプログラムを作りましょう。
address.cをダウンロードして,リストを追加
してください。
注意点
郵便番号や電話番号は数字です。小数で
はありませんが,整数型で良いでしょう
か?また,ハイフン(-)はどう処理すれば良
いでしょうか? 0で始まる場合は?
「今,何件目の入力を行っているか?」が
分かるようなメッセージが出力されれば,
より分かりやすいプログラムとなります。そ
ういった工夫も心がけましょう。
考えてみましょう
プログラム作成時には,何件の入力が行われる
か不明ですから,通常,配列の要素数は余裕を
持って宣言しておきます。
さてそれでは,実際の入力の際,「入力が終了し
た。入力のループを終了したい」という処理は,
どのように実現すれば良いでしょうか?
ヒント:無限ループを設定して,ある条件が満たさ
れたときにループをbreakする,という考え方です。
ダウンロード

本日の課題