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