« KNOPPIX Edu | トップページ | Amazonで生鮮食品売ってる・・・ »

2007/09/30

時間割作成プログラム

時間割のようなデータを出してくれるプログラムです。

//時間割を作成
#include <stdio.h>
 
void output(char a[][30], char b[][30], char c[][30], char d[][30], char e[][30], char f[][30]);

int main(void)
{
  int  timetable;   //何時間目かを指定する変数
  char day[4];      //曜日を指定する配列
  int  daynum;      //曜日ナンバーを格納する変数
  char ans[2];
  //---?時限目------------月曜----火曜----水曜----木曜----金曜----
  char first[5][30]  = { "休講", "休講", "休講", "休講", "休講" };
  char second[5][30] = { "休講", "休講", "休講", "休講", "休講" };
  char third[5][30]  = { "休講", "休講", "休講", "休講", "休講" };
  char forth[5][30]  = { "休講", "休講", "休講", "休講", "休講" };
  char fifth[5][30]  = { "休講", "休講", "休講", "休講", "休講" };
  char sixth[5][30]  = { "休講", "休講", "休講", "休講", "休講" }; 

  //---曜日と時間を指定---
  printf("===時間割を作成します。===============================\n");
  printf("===まず曜日と時間を指定します。=======================\n");
  printf("===曜日の指定は次のようにして下さい。=================\n");
  printf("===月曜:mon, 火曜:tue, 水曜:wed, 木曜:thu, 金曜:fri===\n");
  printf("===時間の指定は1〜6で指定して下さい。=================\n");
 repeat:
  printf("===曜日:");   scanf("%s", day);
  printf("===時間:");   scanf("%d", &timetable);

  //---曜日ナンバーを決定---
  if(day[1] == 'o') {
    daynum = 0;
  } else if(day[1] == 'u') {
    daynum = 1;
  } else if(day[1] == 'e') {
    daynum = 2;
  } else if(day[1] == 'h') {
    daynum = 3;
  } else if(day[1] == 'r') {
    daynum = 4;
  }

  //---予定を入力---
  switch(timetable) {
  case 1   : printf("===受講する講義名:"); scanf("%s", first[daynum]);   break;
  case 2   : printf("===受講する講義名:"); scanf("%s", second[daynum]);   break;
  case 3   : printf("===受講する講義名:"); scanf("%s", third[daynum]);   break;
  case 4   : printf("===受講する講義名:"); scanf("%s", forth[daynum]);   break;
  case 5   : printf("===受講する講義名:"); scanf("%s", fifth[daynum]);   break;
  case 6   : printf("===受講する講義名:"); scanf("%s", sixth[daynum]);   break;
  }
  printf("===まだ受講しますか?[y/n]");   scanf("%s", ans);
  if (ans[0] == 'y')   goto repeat;
  
  //---結果をファイルに出力---
  output(first, second, third, forth, fifth, sixth);

  return 0;
}

void output(char a[][30], char b[][30], char c[][30], char d[][30], char e[][30], char f[][30])
{
  int i;
  FILE *fp;

  if( (fp = fopen("my-schedule.txt", "w")) == NULL) {
    printf("\a---File can not open.---\n");
  } else {
    fprintf(fp, "%-14s\t%-14s\t%-14s\t%-14s\t%-14s\t\n", "月曜", "火曜", "水曜", "木曜", "金曜");
    for(i=0 ; i<80 ; i++)   fprintf(fp, "-");
    fprintf(fp, "\n");
    //---時間割を出力---
    for(i=0 ; i<5 ; i++) {
      fprintf(fp, "%-14s\t", a[i]);
    }
    fprintf(fp, "\n\n");
    for(i=0 ; i<5 ; i++) {
      fprintf(fp, "%-14s\t", b[i]);
    }
    fprintf(fp, "\n\n");
    for(i=0 ; i<5 ; i++) {
      fprintf(fp, "%-14s\t", c[i]);
    }
    fprintf(fp, "\n\n");
    for(i=0 ; i<5 ; i++) {
      fprintf(fp, "%-14s\t", d[i]);
    }
    fprintf(fp, "\n\n");
    for(i=0 ; i<5 ; i++) {
      fprintf(fp, "%-14s\t", e[i]);
    }
    fprintf(fp, "\n\n");
    for(i=0 ; i<5 ; i++) {
      fprintf(fp, "%-14s\t", f[i]);
    }
    fprintf(fp, "\n");

    fclose(fp);
  }
}

このプログラムを実行すると、何曜日の何時間目のなんという講義なのかを聞いてきてくれるのですが、例外処理が満足ではないので、入力でミスをするとワケの分からないデータを吐き出してくれます。しかも、入力は漢字で6文字が限界っぽいです。長い講義名だと書式がくずれます。なにかとプログラムに気を使わなくてはいけないのでストレスがたまります。(そんなダメコードを書いたのは私ですけどね)

作成される時間割は以下のようになります。

月曜        	火曜        	水曜        	木曜        	金曜        	
--------------------------------------------------------------------------------
休講        	休講        	休講        	休講        	休講        	

統計力学    	休講        	憲法概説    	休講        	休講        	

相対論      	休講        	計算科学特論	休講        	休講        	

休講        	休講        	休講        	休講        	計算数理概論	

休講        	休講        	休講        	休講        	計算実験特論	

休講        	休講        	休講        	休講        	休講        	

この時間割は休講だらけですね。(実際これくらいを予定していますが)

今後の課題は、機能拡張よりも、このマジックナンバーばかりのダメコードを整理することです。

|

« KNOPPIX Edu | トップページ | Amazonで生鮮食品売ってる・・・ »

C」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/222903/16621134

この記事へのトラックバック一覧です: 時間割作成プログラム:

« KNOPPIX Edu | トップページ | Amazonで生鮮食品売ってる・・・ »