- ベストアンサー
社員名簿から検索する関数
社員番号から名前や電話番号を検索する関数は、どのようにしたら良いのでしょうか? 社員名簿のプログラムに入れます。ユーザーにインプットしてもらうのは、名前、社員番号、電話番号です。最大100人分入る名簿でファイルに保存する必要はありません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 >名前、社員番号で1つの要素をつくり、その集合(配?)から検索したいのですが、配列で考えて良いのでしょうか? その通りです。例えば以下のようにします。 1つの要素として、例えば以下の様な構造体を作成します。 typedef struct _tSHAIN { char name[100]; /*名前*/ int shain_bango; /*社員番号*/ char denwa_bango[20]; /*電話番号:*/ } SHAIN; 社員番号は数字であるとします。 SHAIN tbl[100]; /* 100人分の社員テーブル*/ tbl[n].shain_bango (nは0~99の何れかの値)でテーブル中の社員 を参照できます。 例えば、このテーブルに先頭から20件まで、 データが入っていて、画面から入力された社員番号が このテーブルにあるかどうかを検索するには、 以下のようにします。 int i; int shain_in; /* 社員番号*/ shainに入力データをセット for (i=0;i<20;i++){ if (shain==tbl[i].shain_bango){ 社員番号が見つかった時の処理 break; /* forのループを抜ける*/ } } if (i==20){ 見つからなかったの処理 }
その他の回答 (2)
- hokaido
- ベストアンサー率0% (0/1)
社員番号から名前や電話番号を検索する関数とのことですが、この場合検索は二分探索を使ったほうが効率は良いと思います。ただし、登録を行った後データを、社員番号で昇順または降順にする必要があります。 プログラム的には修正もできる関数も作ったほうが良いと思われます。 また、検索をする場合scanfは控えたほうが良いです。テストプログラムなら良いですが。 fgets等が妥当でしょう。
- tatsu99
- ベストアンサー率52% (391/751)
本件、C言語(又はC++)の練習問題と考えて良いのでしょうか。 上記の前提で、話を進めます。 1.最大100個の要素を持ったテーブルを作成します。 (社員名簿のテーブル) 2.1つの要素は、名前、社員番号、電話番号から構成されるものとします。 3.画面から、名前、社員番号、電話番号を入力します。 このデータをテーブルへ順に先頭から格納します。この処理は、最大100回繰り返しを行えるようにします。 4.データの入力完了後、社員番号を画面から入力します。入力された社員を、テーブルの先頭から順に検索し、一致した社員番号存在すれば、それを表示します。この処理は、何回でも行えるようにします。 上記のようなプログラムを作成してください。
補足
回答ありがとうございました。名前、社員番号で1つの要素をつくり、その集合(配列?)から検索したいのですが、配列で考えて良いのでしょうか?その点が分かりません。テーブルの作成はまだ出てきていませんので、他の方法で考えたいと思います。