2008年01月15日

ham_mail.gif 挨拶コマンドテーブル作成!

データーを、別ファイルにしてプログラムを変更しました。
ファイルをダウンロード

■ sample.txt の中身は、こんな感じです。

0600,1159,「おはよう!只今の時間は~
1200,1759,「こんにちは。只今の時間は~
1800,2159,「こんばんわ。只今の時間は~
2200,2359,「お休みなさい。只今の時間は~
0000,0559,「グーグー・・・只今の時間は~
9999,9999,終了

■ このデーターを格納する構造体は、
typedef struct _smp_data {
  int sta_time; //開始時間
  int end_time; //終了時間
  char message[256]; //文字列
} smp_data_t;

sample.txt の一行目のデーターを、smp_data の構造体メンバーが対応します。
sta_time に、0600
end_time に、1159
message に、「おはよう!只今の時間は~
を、代入して行きます。

※ file_main.cpp で、全部の行を構造体配列に格納します。

while( !feof(fp) )
{
fscanf_s( fp, "%d,%d,%s", &msg_data[i].sta_time, &msg_data[i].end_time,&msg_data[i].message, 255 );
i++;
}

これで、0600は、6時00分、1159は、11時59分となり、その間で表示する挨拶文は、
message の、「おはよう!只今の時間は~ ・・・となります。
※最後の行、9999 は終端データーとして使用しています。

■ さて先日の time_main.cpp を下記のように変更しました。

for(i=0;;i++) {

  if(msg_data[i].sta_time == 9999 ) break; // 9999 ならデーターの終端

  i_hm = newtime.tm_hour * 100 + newtime.tm_min; // 6時35分なら、635となる。

  if(i_hm >= msg_data[i].sta_time && msg_data[i].end_time >= i_hm )
  {
    printf( msg_data[i].message, newtime.tm_hour, newtime.tm_min, newtime.tm_sec);
    break;
  }
}

これで、プログラムとデーターが完全に分離できました。
以後、メッセイジの変更や、時間の変更は、
この sample.txt を編集すれば、対応可能になります。

現場で求められるアプローチは、まずデーター(現在はスクリプトデーター)と、
プログラムをしっかり分けて構築することです。

その結果、プログラムからは定数が減り、変数のみになります。

是非、みなさんも、いろいろ工夫して下さい。
簡単なテキストアドベンチャーのシステムを作ってみるだけでも、
かなりスキルアップに繋がりますよ!

※システム系のプログラムでも、データーベースを多用しますが同様です。

投稿者 shiozumi : 16:03 | コメント (0) | トラックバック (0)

このエントリーのトラックバックURL

http://blog.e-smile.ne.jp/cgi-bin/mt/mt-tb.cgi/196

コメント

コメントを送ってください




ログイン情報を記憶しますか?

(スタイル用のHTMLタグが使えます)