/***********************************/ /* editor.c */ /* アスレチック クラブ メンバー カンリ プログラム */ /***********************************/ #include #include /************************************/ /* キョウツウ テイギ */ /************************************/ #define MEMBER_MAX 200 /* メンバースウ MAX */ #define AKICODE_TBL_NAME "akicode.tbl" /* アキコードヒョウ ファイル メイ */ #define CODEDATA_TBL_NAME "codedata.tbl" /* コード データ タイショウ ヒョウ ファイル メイ */ #define KEISOKU_TBL_NAME "keisoku.tbl" /* ケイソク データ ヒョウ ファイル メイ */ #define TRUE 1 /* シン */ #define FALSE 0 /* ギ */ #define OK 0 /* セイジョウ */ #define CANCEL 1 /* ショリ チュウシ */ #define NG -1 /* イジョウ */ /* ケイソク データ テーブル */ struct KEISOKU_TBL { int kaiin_code; /* カイイン コード */ int count; /* ケイソク カイスウ */ char first_date[ 9 ]; /* ショカイ ヒヅケ */ int first_data; /* ショカイ データ */ char max_date[ 9 ]; /* サイコウ キロク ヒヅケ */ int max_data; /* サイコウ キロク データ */ char soku_date[ 9 ]; /* ケイソク ヒヅケ */ int soku_data[ 10 ]; /* ケイソク データ */ }; /***********************************/ /* キョウツウ データ */ /***********************************/ /* アキコード ヒョウ */ int akicode_tbl[ MEMBER_MAX + 1 ]; /* コードデータ タイショウ ヒョウ */ int codedata_tbl[ MEMBER_MAX ]; /* コジンベツ ケイソク データヒョウ */ struct KEISOKU_TBL kojin_keisoku_tbl; /* ソート ヨウ ケイソク データ ヒョウ */ struct KEISOKU_TBL sort_keisoku_tbl[ MEMBER_MAX ]; static int codedata_tbl_create( void ); static int akicode_tbl_create( void ); int akicode_tbl_read( void ); int kakunin_input( char *msg ); int kojin_data_read( int kaiin_code ); void kojin_data_disp( int kaiin_code, char *msg ); struct KEISOKU_TBL init_kojin_keisoku_tbl( void ); void edit_akicode( void ); void edit_codedata( void ); void edit_keisoku_data( void ); /***********************************/ /* メンバー カンリ プログラム */ /* メイン */ /* パラメータ : ナシ */ /* リターン : ナシ */ /***********************************/ int main( void ) { int loop = TRUE; /* ループ フラグ */ char work[ 128 ]; /* ニュウリョク ワーク */ FILE *fp; /* ファイル ポインタ */ char *fname1 = AKICODE_TBL_NAME; /* アキ コード ヒョウ ファイル */ char *fname2 = CODEDATA_TBL_NAME; /* コード データ タイショウ ヒョウ ファイル */ int i; /* インデックス */ /* アキ コード ヒョウ ファイル OPEN -> NULL ? */ if( (fp = fopen( fname1, "rb" )) == NULL ) { printf( "\n アキ コード ヒョウ ファイル ヲ サクセイ シテイマス。" ); /* アキ コード ヒョウ ファイル サクセイ */ akicode_tbl_create( ); } else { /* アキ コード ヒョウ ファイル CLOSE */ fclose( fp ); } /* コード データ タイショウ ヒョウ ファイル OPEN -> NULL ? */ if( (fp = fopen( fname2, "rb" )) == NULL ) { printf( "\n コード データ タイショウ ヒョウ ファイル ヲ サクセイ シテイマス。" ); /* コード データ タイショウ ヒョウ ファイル サクセイ */ codedata_tbl_create( ); } else { /* コード データ タイショウ ヒョウ ファイル CLOSE */ fclose( fp ); } while( loop ) { /* テーブル ショキ クリア */ akicode_tbl[ 0 ] = 0; for( i = 0; i < MEMBER_MAX; i++) { akicode_tbl[ i + 1 ] = 0; codedata_tbl[ i ] = 0; sort_keisoku_tbl[ i ] = init_kojin_keisoku_tbl(); } kojin_keisoku_tbl = init_kojin_keisoku_tbl(); printf( "ショリ ヲ センタク シテクダサイ \n" ); printf( "1:アキコード ヒョウ \n" ); printf( "2:コードデータ ヒョウ \n" ); printf( "3:ケイソク データ ヒョウ \n" ); printf( "E:シュウリョウ \n" ); printf( "? " ); /* ショリクブン ニュウリョク */ work[ 0 ] = '\0'; scanf( "%s", work ); /* ニュウリョク ケタスウ チェック -> 1イガイ ? */ if( strlen( work ) != 1 ) { printf( "ニュウリョク ミス デス \n" ); continue; } switch( work[ 0 ] ) { case '1': /* アキ コード ヒョウ */ edit_akicode( ); break; case '2': /* コード データ タイショウヒョウ */ edit_codedata( ); break; case '3': /* ケイソク データ ヒョウ */ edit_keisoku_data( ); break; case 'e': /* シュウリョウ */ case 'E': loop = FALSE; break; default: printf( "\n ニュウリョク ミス デス" ); break; } } return OK; } /************************************/ /* メンバー カンリ プログラム */ /* ニュウカイ トウロク ショリ */ /* アキ コード ヒョウ ファイル サクセイ */ /* パラメータ : ナシ */ /* リターン : 0:OK */ /* -1:NG */ /************************************/ static int akicode_tbl_create( void ) { // main.cの同名の関数をコピー } /************************************/ /* メンバー カンリ プログラム */ /* ニュウカイ トウロク ショリ */ /* コード データ タイショウ ヒョウ ファイル サクセイ */ /* パラメータ : ナシ */ /* リターン : 0:OK */ /* -1:NG */ /************************************/ static int codedata_tbl_create( void ) { // main.cの同名の関数をコピー } /************************************/ /* キョウツウ ルーチン */ /************************************/ /************************************/ /* メンバー カンリ プログラム */ /* ニュウカイ トウロク ショリ */ /* アキ コード ヒョウ ファイル READ */ /* パラメータ : ナシ */ /* リターン : 0:OK */ /* -1:NG */ /************************************/ int akicode_tbl_read( void ) { // main.cの同名の関数をコピー } /***********************************/ /* メンバー カンリ プログラム */ /* ニュウリョク カクニン */ /* パラメータ : カクニン メッセージ */ /* リターン : 0:OK */ /* -1:NG */ /***********************************/ int kakunin_input( char *msg ) { // main.cの同名の関数をコピー } /************************************/ /* メンバー カンリ プログラム */ /* ケイソク データ ショキカ */ /* パラメータ : ナシ */ /* リターン : ケイソク データ */ /************************************/ struct KEISOKU_TBL init_kojin_keisoku_tbl( void ) { // main.cの同名の関数をコピー } /************************************/ /* メンバー カンリ プログラム */ /* ニュウカイ トウロク ショリ */ /* アキ コード ヒョウ ファイル コウシン */ /* パラメータ : ナシ */ /* リターン : 0:OK */ /* -1:NG */ /************************************/ static int akicode_tbl_update( void ) { // main.cの同名の関数をコピー } void edit_akicode( void ) { int i, j; int flag = 0; akicode_tbl_read( ); printf("アキコード ヒョウ \n"); printf("ヨウソ 0 : %d \n", akicode_tbl[0]); printf("\n"); for( i = 1; i <= MEMBER_MAX ; i++ ){ printf("ヨウソ %3d:%3d ", i, akicode_tbl[i]); if ( i % 5 == 0 ) { printf("\n"); } } while( 1 ) { printf("ヘンコウスル ヨウソ (-1:exit) ? "); scanf("%d", &i); if ( i == -1 ) { break; } else if ( i <= 0 || i > 200 ) { printf("ムコウナ ヨウソ \n"); continue; } printf("アタイ: "); scanf("%d", &j); akicode_tbl[i] = j; flag = 1; } if (flag == 1) { akicode_tbl_update( ); } return; } void edit_codedata( void ) { FILE *fp; /* ファイル ポインタ */ char *fname = CODEDATA_TBL_NAME; /* コード データ タイショウ ヒョウ ファイル */ int i, j; int flag = 0; /* コード データ タイショウ ヒョウ ファイル OPEN -> NULL ? */ if( (fp = fopen( fname, "w+b" )) == NULL ) { printf( "\n コード データ タイショウ ヒョウ ファイル OPEN エラー" ); return; } /* コード データ タイショウ ヒョウ ファイル READ -> 1イガイ ? */ if( fread( (char *)codedata_tbl, sizeof( codedata_tbl ), 1, fp ) != 1 ) { printf( "\n コード データ タイショウ ヒョウ ファイル READ エラー" ); } printf("コード1データ ヒョウ \n"); for( i = 0; i < MEMBER_MAX ; i++ ){ printf("ヨウソ %3d:%3d ", i+1, codedata_tbl[i]); if ( (i+1) % 5 == 0 ) { printf("\n"); } } while( 1 ) { printf("ヘンコウスル ヨウソ (-1:exit) ? "); scanf("%d", &i); if ( i == -1 ) { break; } else if ( i <= 0 || i > 200 ) { printf("ムコウナ ヨウソ \n"); continue; } printf("アタイ: "); scanf("%d", &j); codedata_tbl[i - 1] = j; flag = 1; } if( flag != 0 ) { /* ファイル ポインタ ヲ セントウ ニ SEEK -> OK デ ナイ ? */ if( fseek( fp, 0L, SEEK_SET ) != OK ) { printf( "\n コード データ タイショウ ヒョウ ファイル SEEK エラー" ); } else if ( fwrite( (char *)codedata_tbl, sizeof( codedata_tbl ), 1, fp ) != 1 ) { printf( "\n コード データ タイショウ ヒョウ ファイル WRITE エラー" ); } } fclose( fp ); return; } void edit_keisoku_data( void ) { int i; /* インデックス */ int j; int count = 0; long fptr; /* ケイソク データ ファイル ポインタ */ FILE *fp; /* ファイル ポインタ */ char *fname = KEISOKU_TBL_NAME; /* ケイソク データ ヒョウ ファイル */ for( i = 0; i < MEMBER_MAX; i++) { sort_keisoku_tbl[i] = init_kojin_keisoku_tbl( ); } /* ケイソク データ ファイル OPEN -> NULL ? */ if( (fp = fopen( fname, "r+b" )) != NULL ) { /*ケイソク データ ファイル READ -> 1イガイ ? */ for (count = 0; count < MEMBER_MAX; count++ ) { /* ガイトウ データ ポインタ セット */ fptr = count * sizeof( struct KEISOKU_TBL ); /* ケイソク データ ヒョウ ファイル SEEK -> OK デ ナイ ? */ if( fseek( fp, fptr, SEEK_SET ) != OK ) { printf( "ケイソク データ ファイル SEEK エラー \n" ); break; } if( fread( (char *)&kojin_keisoku_tbl, sizeof( kojin_keisoku_tbl ), 1, fp ) != 1 ) { break; } sort_keisoku_tbl[count] = kojin_keisoku_tbl; } printf("ケイソク データ ハ %d コ デス。\n", count); printf("ヨウソ カイイン カイスウ ショカイ ヒヅケ データ サイコウ ヒヅケ データ サイシン ヒヅケ \n"); for( i = 0; i < count; i++ ) { printf("%3d %3d %4d %s %4d %s %4d %s \n", i, sort_keisoku_tbl[i].kaiin_code, sort_keisoku_tbl[i].count, sort_keisoku_tbl[i].first_date, sort_keisoku_tbl[i].first_data, sort_keisoku_tbl[i].max_date, sort_keisoku_tbl[i].max_data, sort_keisoku_tbl[i].soku_date); } fclose(fp); } while( 1 ) { printf("ヘンコウスル ヨウソ (-1:exit) ? "); scanf("%d", &i); if ( i == -1 ) { break; } else if ( i < 0 || i >= 200 ) { printf("ムコウナ ヨウソ \n"); continue; } printf("ヨウソ カイイン カイスウ ショカイ ヒヅケ データ サイコウ ヒヅケ データ サイシン ヒヅケ \n"); printf("%3d %3d %4d %s %4d %s %4d %s\n", i, sort_keisoku_tbl[i].kaiin_code, sort_keisoku_tbl[i].count, sort_keisoku_tbl[i].first_date, sort_keisoku_tbl[i].first_data, sort_keisoku_tbl[i].max_date, sort_keisoku_tbl[i].max_data, sort_keisoku_tbl[i].soku_date ); printf("\nケイソク データ\n"); printf("%4d %4d %4d %4d %4d %4d %4d %4d %4d %4d \n", sort_keisoku_tbl[i].soku_data[0], sort_keisoku_tbl[i].soku_data[1], sort_keisoku_tbl[i].soku_data[2], sort_keisoku_tbl[i].soku_data[3], sort_keisoku_tbl[i].soku_data[4], sort_keisoku_tbl[i].soku_data[5], sort_keisoku_tbl[i].soku_data[6], sort_keisoku_tbl[i].soku_data[7], sort_keisoku_tbl[i].soku_data[8], sort_keisoku_tbl[i].soku_data[9]); printf("ナニヲ ヘンコウ シマスカ (0:スベテ 1:ヒヅケ 2:ソクテイ データ -1:キャンセル) ? "); scanf("%d", &j); if ( j == -1 ) { continue; } if ( j == 0 || j == 1 ) { printf("カイイン バンゴウ, カイスウ, ショカイ ヒヅケ, ショカイ データ, サイコウ ヒヅケ, サイコウ データ, サイシン ヒヅケ \n"); scanf("%d%d%s%d%s%d%s", &(sort_keisoku_tbl[i].kaiin_code), &(sort_keisoku_tbl[i].count), &(sort_keisoku_tbl[i].first_date), &(sort_keisoku_tbl[i].first_data), &(sort_keisoku_tbl[i].max_date), &(sort_keisoku_tbl[i].max_data), &(sort_keisoku_tbl[i].soku_date) ); } if ( j == 0 || j == 2 ) { printf("データ x 10 \n"); scanf("%d%d%d%d%d%d%d%d%d%d", &(sort_keisoku_tbl[i].soku_data[0]), &(sort_keisoku_tbl[i].soku_data[1]), &(sort_keisoku_tbl[i].soku_data[2]), &(sort_keisoku_tbl[i].soku_data[3]), &(sort_keisoku_tbl[i].soku_data[4]), &(sort_keisoku_tbl[i].soku_data[5]), &(sort_keisoku_tbl[i].soku_data[6]), &(sort_keisoku_tbl[i].soku_data[7]), &(sort_keisoku_tbl[i].soku_data[8]), &(sort_keisoku_tbl[i].soku_data[9]) ); } if ( count < i+1 ) { count = i+1; } } /* ケイソク データ ファイル OPEN -> NULL ? */ if( (fp = fopen( fname, "w+b" )) == NULL ) { printf( "ケイソク データ ファイル OPEN エラー \n" ); return; } /* ケイソク データ ヒョウ ファイル WRITE -> 1イガイ ? */ if( fwrite( (char *)&sort_keisoku_tbl, count * sizeof( kojin_keisoku_tbl ), 1, fp ) != 1 ) { printf( "\n ケイソク データ ヒョウ ファイル WRITE エラー" ); } /* ケイソク データ ヒョウ ファイル CLOSE */ fclose( fp ); }