- 締切済み
Cを勉強している友人からこんな題をみせられたのですが・・
アドレス帳の作成 名前、電話番号、メールアドレスをキーボードから入力し、 CSVファイル形式のファイルに書き込む。 アドレス(名前、電話番号、メールアドレス)は最大 10件まで登録可能であること。 11件目を登録しようとすると、 CSVファイルを作成し、プログラム終了させる。 名前の入力がない場合(名前の文字数が 0の場合)、登録終了とし、登録済みのデータで CSVファイルを作成し、プログラムを終了させる。 仕様 入力仕様 (1)名前 入力可能文字半角のみのアルファベット文字、空白文字入力最大数 32文字入力可能。 (2)電話番号 入力可能文字半角の数値 入力最大数 16文字入力可能。 入力数が 0の場合、エラーとする。 (3)メールアドレス 入力可能文字半角アルファベット文字、@、ピリオド (.)、入力最大数 32文字入力可能。入力数が 0の場合、エラーとする。 ※電話番号、メールアドレスは、正規表現のチェックを行わなくてもよい。 ファイルフォーマット仕様 (1)ファイル名 address.csvとする。 (2) 1レコード分 名前 ,電話番号 ,メールアドレス 名前、電話番号、メールアドレスをカンマ [,]で区切り、改行を入れる (3)最大 10レコード分作成する。 (4)ファイルは上書きしてもよい。 プログラム仕様 (1)アドレス(名前、電話番号、メールアドレス)は構造体を使用、構造体名は 次の名前にすること。構造体名 struct adress 構造体のメンバー名は、以下のものにすること。 name名前 telno電話番号 mailメールアドレス (2)構造体を typedefして名前を ST_ADRESSとすること。 (3)名前、電話番号、メールアドレスの最大入力数を #defineで定義すること。 (4)最大登録数 (10件)を#defineで定義すること (5)名前、電話番号、メールアドレスの入力は教本にあるgetline関数を改造し使用すること。 (6)名前入力を開始する前に入力を促すプロンプトとして「 NAME>」を表示させること。 (7)電話番号入力を開始する前に入力を促すプロンプトとして 「TELNO>」を表示させること。 (8)メールアドレス入力を開始する前に入力を促すプロンプトとして 「MAIL ADRESS>」を表示させること。 (9)名前の入力チェック関数 check_nameを完成させること。 (10)電話番号の入力チェック関数 check_telnoを完成させること。 (11)メールアドレスの入力チェック関数 check_mailを完成させること。 (12)名前、電話番号、メールアドレスの入力毎で入力チェックを行い、エラーの場合、エラー メッセージを出力し、名前の入力に戻ること。 電話番号、メールアドレスの入力がない場合、名前入力に戻ること。 (13) 10件分の構造体のポインタ配列を用意すること。 配列名は pAdrとし、外部変数とすること。 (14) アドレス(名前、電話番号、メールアドレス)を示す 1件分の構造体を引数にし、メモリを確保し、確保した構造体のポインタを返す関数 alloc_data を完成させること。 (15) alloc_dataの戻り値である構造体をのポインタを構造体のポインタ配列に格納すること。 (16) ファイルに書き込む前に名前で昇順にソートすること ソート方法は、クイックソートを使用すること。 (17) ファイル仕様書どおりに CSV形式でファイルに書き込むこと。 関数 write_fileを完成させること (18) ファイル書き込み後、メモリ確保している領域をすべて解放させる 関数 free_dataを完成させること。 私はCの勉強を始めたばかりです。友人からの質問に答えられるレベルでは無く悔しい思いをしています^^; 皆様だったら上記の内容をどのようにコーディングしますでしょうか?私も自分なりに調べながら上記の内容を作成し、他の人の書いたコードと見比べたいと思っています。 時間の余裕のある方、よろしくお願いします。これは質問ではないですね^^;
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
#1 に同意. ど~せ自分でコードを書くんだから, 自分のコードを完成させてから他人の書いたコードを見ても問題ないよね. その「友人」の (あるいは友人を騙ったあなたの) 課題だったりして.