個人戦検索システム ****************************************************** 1. 各種データ読み込み 入力:ファイル名とその実体 出力:データ群 2. 要求受取 入力:要求列(原型) 出力:要求列 3. 要求分析 入力:1 と2 の出力 出力:対象所属・対象人・対象棋戦コード 4. 結果表示 入力:3 の出力 出力:HTML ****************************************************** 1. 各種データ読み込み 1-1 所属コード読み込み ファイルは一つ org.dat %org_long (5桁のキー、名前) %org_name (5桁のキー、名前) %org_short (5桁のキー、名前) キーの意味は別項 ・将来の拡張 ファイルの複数化 1-2 個人コード読み込み ファイルは一つ person.dat %person_fname (11桁のキー、姓) %person_pname (11桁のキー、名) 前から5桁目と6桁目の間には - が入る キーの意味は別項 ・将来の拡張 同一人物リスト作成 ファイルの複数化 1-3 場所コード読み込み ファイルは一つ place.dat %place_name (4桁のキー、名前) キーの意味は別項 1-4 棋戦コード読み込み ファイルは一つ kisen.dat %kisen_name (7桁のキー、名前) キーの意味は別項 1-5 棋戦結果読み込み ディレクトリの下のファイル群 result/*.dat 1-5-1 読み込み @result_code 棋戦コード @result_time 回 @result_system 方式 @result_annual 年度の扱い @result_date 年月日・場所(数字列) $result_member[][] 参加者(No.、コード+年) $result_list[][] 結果(方式によりいろいろ) @result_order 順位(数字列) @result_note 備考 @result_title 表題(自動生成) 1-5-2 ソート 年月日によるソート @result_sorted 1-5-1 のNo. を最初の年月日順に並べたもの ****************************************************** 2. 要求受取 2-1 FORM からの受取 受けとるもの…名前リスト、所属リスト、棋戦種別リスト、 棋戦期間、棋戦対象指定、出力方式、出力オプション freq_person 名前リスト (1行) freq_org 所属リスト (1行) freq_kisen1, freq_kisen2, freq_kisen3 棋戦種別 (規模:1. すべて/2. 全国大会のみ) (性別:1. すべて/2. 女流/3. 女流以外) (範囲:17. アマ一般/12. 全学生/11. 大学/13. 高専/ 14. 高校/15. 中学/16. 小学校/99. その他) freq_syear, freq_smonth, freq_eyear, freq_emonth 棋戦期間 (開始年、開始月、終了年、終了月) creq_display, creq_dispopa, creq_dispopb 出力方式、オプションa, b 2-2 FORM の解釈 @freq_person 名前リスト (文字列リスト) @freq_org 所属リスト (文字列リスト) @freq_kisen 棋戦種別リスト (規模、性別、範囲) @freq_date 棋戦期間 (開始年、開始月、終了年、終了月) $creq_display 出力方式 (番号) $creq_dispopa 出力オプション a $creq_dispopb 出力オプション b 出力方式番号 1. 棋戦全体表示 2. 上位者名のみ 3. 個人最終成績 4. 対戦全データ 出力方式オプション a. 上位どれくらいのものを対象とするか(数字)(cf. best16 以上) b. 条件を満たす人がいない棋戦を表示するか(1, 2 のみ) 2-2-1 簡易版(現在) 棋戦種別はなし オプションもなし ・将来の拡張 棋戦種別(アマ/大学/高校…、全国/地方 etc.)を指定可能に オプションを指定可能に ****************************************************** 3. 要求分析 3-1 対象人の決定 $person_all @freq_person が空かどうか(空なら1) $org_all @freq_org が空かどうか(空なら1) @creq_person 名前リスト (コードのリスト) @creq_org 所属リスト (コードのリスト) ($person_all, $org_all) について (1, 1) ... すべての人を@creq_person へ (1, 0) ... まず、@creq_org を作り、それを満たす人をすべて@creq_personへ (0, 1) ... 名前のみでマッチングをして @creq_person を作る (0, 0) ... まず、@creq_org を作り、さらに名前でマッチングして @creq_personへ 3-2 対象棋戦の決定 @creq_kisen ... @result_sorted の中から @freq_kisen, @freq_date を 満たすものを選ぶ (@result_date の一番最初の値を使う) ****************************************************** 4. 結果表示 4-1 マッチング失敗の判定 $org_all == 0 で @creq_org が空のとき 「... or ... or ... という組織は見つかりませんでした」 $person_all == 0 で @creq_person が空のとき 「... or ... or ... は見つかりませんでした」 @creq_kisen が空のとき 「条件を満たす棋戦は見つかりませんでした」 4-2 勝敗表の作成 出力方式が 4 の場合のみ %person_win, %person_lose, %person_draw を作成 4-3 棋戦ごとの表示 各棋戦方式別(5-8参照)のサブプログラム内で出力方式別に処理を行う 4-3-1 データ処理 $find_data その棋戦について表示すべきデータがあるかどうかを チェック @tmp_display 表示内容 4-3-2 データ表示 $find_data が 1 なら @tmp_display の内容を表示 4-4 マッチング結果表示 出力方式が 4 の場合、全員の勝敗、勝率を表示 それ以外の場合、 org_all == 1 && person_all == 1 でなければ @creq_person をすべて表示 対象棋戦と備考の表示 ****************************************************** 5. コードの意味 5-1 地方コード 0 不明 1 北海道 2 東北 3 関東 4 北信越 5 中部 6 関西 7 中四国 8 九州 9 その他 5-2 都道府県コード 00 不明 11 北海道 20 東北・詳細不明 21 青森 22 岩手 23 秋田 24 山形 25 宮城 26 福島 29 東北その他 30 関東・詳細不明 31 茨城 32 栃木 33 群馬 34 埼玉 35 千葉 36 東京 37 神奈川 38 山梨 39 関東その他 40 北信越・詳細不明 41 新潟 42 長野 43 富山 44 石川 45 福井 49 北信越その他 50 中部・詳細不明 51 静岡 52 愛知 53 岐阜 54 三重 59 中部その他 60 関西・詳細不明 61 滋賀 62 京都 63 大阪 64 兵庫 65 奈良 66 和歌山 69 関西その他 70 中四国・詳細不明 71 岡山 72 広島 73 鳥取 74 島根 75 山口 76 香川 77 徳島 78 愛媛 79 高知・中四国その他 80 九州・詳細不明 81 福岡 82 佐賀 83 長崎 84 熊本 85 大分 86 宮崎 87 鹿児島 88 沖縄 89 九州その他 90 全国 99 その他 5-3 所属コード(5桁のキー、名前) 1番目 種別 1 大学 2 大学院 3 高専 4 高校 5 中学 6 小学校 7 企業 8 地区 9 その他 種別 1,2 の場合 2番目 地方コード 3〜5番目 識別コード 種別 3-6 の場合 2〜3番目 都道府県コード 4〜5番目 識別コード 種別 7 の場合 2〜5番目 識別コード 種別 8 の場合 2〜3番目 都道府県コード 4〜5番目 識別コード cf. 83701 神奈川県 83001 特殊地区(東関東、南関東 etc. ) 5-4 個人コード(11桁のキー、姓、名) 1〜5番目 所属コード 6〜9番目 年 (1-6: 入学年、7,8: 生年) 10〜11番目 識別コード 5-5 場所コード(4桁のキー、名前) 1〜2番目 都道府県コード 3〜4番目 識別コード 5-6 棋戦コード(7桁のキー、名前) 1〜2番目 種別 11 大学・高専 12 全学生 13 高専 14 高校 15 中学 16 小学校 17 アマ 18 地区 99 その他 3番目 性別 1 無差別 2 女流 3 男子 4〜5番目 都道府県コード 6〜7番目 識別コード 5-7 年月日(8桁) 5-8 棋戦方式 1 通常トーナメント(3決は任意) 2 リーグ戦 3 スイス式(+上位、下位トーナメント) 4 十傑戦 5 予選リーグ(3人・4人・6人、3回戦まで) +トーナメント(アマ名人戦・アマ竜王戦) 6 予選リーグ(4人、3回戦まで)・予選トーナメント(5人) +トーナメント(アマ名人戦・アマ竜王戦) 7 番勝負 8 アマ王将戦(1○2×予選+トーナメント) 9 敗者復活つきトーナメント(赤旗名人戦) ****************************************************** 6. 各種ファイル書式 6-1 所属コード キー 正式名称 略称1 略称2 表示には略称1が使われる 6-2 個人コード 所属 年 番号 姓 名 6-3 場所コード キー 名前 6-4 棋戦コード キー 名前 6-5 棋戦結果 * 棋戦コード 回 方式 年度表示 年月日 場所 年月日 場所 … 参加者(複数行) + 結果(複数行) + 順位 備考 の繰り返し 6-5-1 通常トーナメント 参加者: 段 省略した段数 エントリNo. 名前コード 学年 (複数行) 結果: 各段勝者エントリNo. 6-5-2 リーグ戦 6-5-3 スイス式(上位、下位トーナメントは任意) 参加者: 参加人数 予選の回戦 エントリNo. 名前コード 学年 (複数行) 結果: 各人結果(人数分) エントリNo. 1回戦相手 結果(o/x) 2回戦相手 結果 … = 上位トーナメント(段数、エントリ、各段勝者) = 下位トーナメント(段数、エントリ、各段勝者) = 5・6位トーナメント(エントリ、各段勝者) 6-5-4 十傑戦 参加者: エントリNo. 名前コード 学年 (複数行) # エントリNo. は(予選の組*10 + 順番) 結果: 予選1回戦 勝者 敗者 … 予選2回戦 勝者 敗者 … 予選3回戦 勝者 敗者 … 本戦トーナメントエントリ 本戦トーナメント準決勝進出者 本戦トーナメント決勝進出者 本戦トーナメント優勝者 5・6位決定戦エントリ 5・6位決定戦進出者 5位 9・10位決定戦エントリ 9・10位決定戦1回戦勝者 9・10位決定戦進出者 9位 6-5-5 2○2×リーグ+トーナメント(アマ名人戦・アマ竜王戦) 参加者: 4人予選リーグ数 6人or3人予選リーグ数 シード人数 種別 エントリNo. 名前コード (複数行) # エントリNo. は(予選の組*10 + 順番) # 種別… 0 ... アマ名人戦(6人リーグ・組内対決) # 1 ... アマ竜王戦(組外対決) # 2 ... 支部名人西地区(3人リーグ) 結果: 予選1回戦 勝者 敗者 … 予選2回戦 勝者 敗者 … 予選3回戦 勝者 敗者 … 本戦トーナメント段数 本戦トーナメントエントリ (シード部分は 00 ) 本戦トーナメント各段勝者No. 6-5-6 5. + 5人トーナメント 参加者: 4人予選リーグ数 6人or3人予選リーグ数 シード人数 種別 エントリNo. 名前コード (複数行) 結果: 予選1回戦 勝者 敗者 … 予選2回戦 勝者 敗者 … 予選3回戦 勝者 敗者 … 予選4回戦 勝者 敗者 本戦トーナメント段数 本戦トーナメントエントリ (シード部分は 00 ) 本戦トーナメント各段勝者No. 6-5-7 番勝負 参加者: 番数 種別 名人or1人目エントリNo. 名前コード 挑戦者or2人目エントリNo. 名前コード 結果: 各局の名人or1人目から見た結果(o/x) 6-5-8 1○2×予選+トーナメント 参加者: 参加人数 エントリNo. 名前コード 学年 (複数行) 結果: 予選1回戦 勝者 敗者 … 予選2回戦 勝者 敗者 … 本戦トーナメント段数 本戦トーナメントエントリ (シード部分は 00 ) 本戦トーナメント各段勝者No. 6-5-9 敗者復活つきトーナメント(赤旗名人戦) 参加者: 段 復活前のエントリNo. 復活後のエントリNo. 復活前の… エントリNo. 名前コード 学年 (複数行) 結果: 各段勝者エントリNo. ****************************************************** 7. 4-3-1 の処理内容