2001/05/01版
| 当バージョンでは 運送業者選択ラジオボタンの追加。終了ボタンの追加。エラーチェック(完全ではありませんが) 開発環境 Vine Linux 2.0 Tinycobol-0.50 |
||
![]() |
![]() |
今回は運送業者選択のラジオボタンを追加いたしました。処理としてはラジオボタンの選択で各運送会社のCOBOLプログラムが呼び出されるイメージです。 エラーチェックに関しては何も入力されていない場合はエラーメッセージ(以下の画面参照)を出力しフォーカスをエラー項目にセットしております。 (但し現バージョンでは各サイズで10Aのような文字を入力してもエラーにならりません。このエラーチェックはCOBOLソースでチェックする予定になっております) (左が初期画面で右が数値入力後のイメージです。) |
![]() |
上記入力後、実行ボタンを押すと左記のようにエラーがメッセージボックスで表示されます。 | |
以下にソースを紹介いたします。 |
||
まずはCOBOLでyamato.cobです。 IDENTIFICATION DIVISION. PROGRAM-ID. YAMATO. ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 WK-OUT PIC X(20). 01 CMDLINE-PARM. 05 CMDLINE-ERROR PIC 9(04) VALUE 0. 05 FILLER PIC X(01) VALUE ' '. 05 CMDLINE-ARGC-NUMBER PIC 9(04) VALUE 0. 05 FILLER PIC X(01) VALUE ' '. 05 CMDLINE-ARGC-MAX-NUMBER PIC 9(04) VALUE 255. 05 FILLER PIC X(01) VALUE ' '. 05 CMDLINE-ARGV-MAX-LENGTH PIC 9(04) VALUE 15. 05 FILLER PIC X(01) VALUE ' '. 05 CMDLINE-VALUES. 07 CMDLINE-ARG OCCURS 255 TIMES. 09 CMDLINE-ARGV PIC X(15). 01 A PIC X(15). 01 C PIC S9(12)V9(3). 01 JSW PIC 9. 01 WK-KWKKA. 03 WK-TATE PIC S9(12)V9(3). 03 WK-YOKO PIC S9(12)V9(3). 03 WK-TAKA PIC S9(12)V9(3). 03 WK-OMOS PIC S9(12)V9(3). 01 WK-SIZE1 PIC S9(12)V9(3). 01 WK-SIZE2 PIC S9(12)V9(3). 01 WK-SIZE PIC S9(12)V9(3). 01 WK-3HEN PIC S9(12)V9(3). 01 WK-DKIN PIC ZZ,ZZZ,ZZ9. 01 WK-OUT PIC X(10). 01 WK-INDEX PIC 9(3). PROCEDURE DIVISION. A-000. ACCEPT CMDLINE-PARM FROM COMMAND-LINE. MOVE CMDLINE-ARGV(2) TO A. MOVE ZERO TO C. CALL "SUBX" USING A C JSW. MOVE C TO WK-TATE. MOVE CMDLINE-ARGV(3) TO A. MOVE ZERO TO C. CALL "SUBX" USING A C JSW. MOVE C TO WK-YOKO. MOVE CMDLINE-ARGV(4) TO A. MOVE ZERO TO C CALL "SUBX" USING A C JSW. MOVE C TO WK-TAKA. MOVE CMDLINE-ARGV(5) TO A. MOVE ZERO TO C CALL "SUBX" USING A C JSW. MOVE C TO WK-OMOS. MOVE CMDLINE-ARGV(6) TO WK-INDEX. COMPUTE WK-3HEN = WK-TATE + WK-YOKO + WK-TAKA. IF WK-3HEN NOT > 61 MOVE 60 TO WK-SIZE1 ELSE IF WK-3HEN NOT > 81 MOVE 80 TO WK-SIZE1 ELSE IF WK-3HEN NOT > 100 MOVE 100 TO WK-SIZE1 ELSE IF WK-3HEN NOT > 120 MOVE 120 TO WK-SIZE1 ELSE IF WK-3HEN NOT > 140 MOVE 140 TO WK-SIZE1 ELSE IF WK-3HEN NOT > 160 MOVE 160 TO WK-SIZE1 ELSE MOVE "取扱不可" TO WK-OUT GO TO A-999. * IF WK-OMOS NOT > 2000 MOVE 60 TO WK-SIZE2 ELSE IF WK-OMOS NOT > 5000 MOVE 80 TO WK-SIZE2 ELSE IF WK-OMOS NOT > 10000 MOVE 100 TO WK-SIZE ELSE IF WK-OMOS NOT > 15000 MOVE 120 TO WK-SIZE2 ELSE IF WK-OMOS NOT > 20000 MOVE 140 TO WK-SIZE2 ELSE IF WK-OMOS NOT > 25000 MOVE 160 TO WK-SIZE2 ELSE MOVE "取扱不可" TO WK-OUT GO TO A-999. * IF WK-SIZE1 > WK-SIZE2 MOVE WK-SIZE1 TO WK-SIZE ELSE MOVE WK-SIZE2 TO WK-SIZE. EVALUATE WK-INDEX WHEN 0 IF WK-SIZE = 60 MOVE 1470 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 1680 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1890 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 2100 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 2310 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 2520 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 1 WHEN 2 WHEN 3 IF WK-SIZE = 60 MOVE 1050 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 1260 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1470 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1680 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1890 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 2100 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 4 WHEN 5 WHEN 6 IF WK-SIZE = 60 MOVE 950 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 1160 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1370 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1580 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1790 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 2000 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 7 WHEN 8 WHEN 9 WHEN 10 WHEN 11 WHEN 12 WHEN 13 WHEN 14 IF WK-SIZE = 60 MOVE 840 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 1050 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1260 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1470 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1680 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 1890 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 15 WHEN 16 IF WK-SIZE = 60 MOVE 840 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 1050 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1260 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1470 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1680 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 1890 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 17 WHEN 18 WHEN 19 IF WK-SIZE = 60 MOVE 740 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 950 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1160 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1370 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1580 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 1790 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 20 WHEN 21 WHEN 22 WHEN 23 IF WK-SIZE = 60 MOVE 740 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 950 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1160 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1370 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1580 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 1790 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 24 WHEN 25 WHEN 26 WHEN 27 WHEN 28 WHEN 29 IF WK-SIZE = 60 MOVE 740 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 950 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1160 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1370 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1580 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 1790 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 30 WHEN 31 WHEN 32 WHEN 33 WHEN 34 IF WK-SIZE = 60 MOVE 740 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 950 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1160 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1370 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1580 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 1790 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 35 WHEN 36 WHEN 37 WHEN 38 IF WK-SIZE = 60 MOVE 840 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 1050 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1260 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1470 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1680 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 1890 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN 39 WHEN 40 WHEN 41 WHEN 42 WHEN 43 WHEN 44 WHEN 45 IF WK-SIZE = 60 MOVE 840 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 1050 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 1260 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 1470 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 1680 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 1890 TO WK-DKIN MOVE WK-DKIN TO WK-OUT WHEN OTHER IF WK-SIZE = 60 MOVE 1370 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 80 MOVE 1890 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 100 MOVE 2420 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 120 MOVE 2940 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE IF WK-SIZE = 140 MOVE 3470 TO WK-DKIN MOVE WK-DKIN TO WK-OUT ELSE MOVE 3990 TO WK-DKIN MOVE WK-DKIN TO WK-OUT END-EVALUATE. A-999. DISPLAY WK-OUT. EXIT-PROGRAM. |
Tcl/Tkです。hello.tcl (ちなみに当方Tcl/Tkに関しては全くの初心者ですのでセオリー通りに作成出来ていなく、お恥ずかしいのですが 一応紹介いたします。) #! /usr/bin/wish #option add *font kanji16 set ken {北海道 青森県 秋田県 岩手県 宮城県 山形県 福島県 茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 山梨県 長野県 新潟県 富山県 石川県 福井県 静岡県 愛知県 岐阜県 三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県 岡山県 広島県 山口県 鳥取県 島根県 徳島県 香川県 愛媛県 高知県 福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 沖縄県} listbox .lis -selectmode single -height 15 -width 8 -background white -yscrollcommand {.scrl set} scrollbar .scrl -command {.lis yview} foreach i ${ken} { .lis insert end $i } set ent1 "" set ent2 "" set ent3 "" set ent4 "" frame .midasi frame .tate frame .yoko -bg red frame .taka -bg red frame .omos -bg red label .midasi.la1 -text 宅配便送料算出 label .tate.inputlabel -bg #990000 -fg white -text 縦のサイズ -width 10 entry .tate.inputentry -width 8 -relief sunken -textvariable ent1 label .yoko.inputlabel -bg #000099 -fg white -text 横のサイズ -width 10 entry .yoko.inputentry -width 8 -relief sunken -textvariable ent2 label .taka.inputlabel -bg #009900 -fg white -text 高さ -width 10 entry .taka.inputentry -width 8 -relief sunken -textvariable ent3 label .omos.inputlabel -bg black -fg white -text 重量(グラム) -width 10 entry .omos.inputentry -width 8 -relief sunken -textvariable ent4 radiobutton .rad1 -text "クロネコヤマト宅急便" -variable sw -value "A" -selectcolor blue radiobutton .rad2 -text "ゆうパック" -variable sw -value "B" -selectcolor red radiobutton .rad3 -text "定形外郵便" -variable sw -value "C" -selectcolor yellow button .enter -text 実行 -command {enter [.tate.inputentry get] [.yoko.inputentry get] [.taka.inputentry get] [.omos.inputentry get] [.lis curselection] $sw} button .syuryo -text 終了 -command exit pack .midasi.la1 pack .tate.inputlabel .tate.inputentry -in .tate -side left pack .yoko.inputlabel .yoko.inputentry -in .yoko -side left pack .taka.inputlabel .taka.inputentry -in .taka -side left pack .omos.inputlabel .omos.inputentry -in .omos -side left pack .midasi .tate .yoko .taka .omos -side top pack .lis -side left pack .scrl -side left -fill y pack .rad1 .rad2 .rad3 .enter .syuryo -side top -anchor w proc enter {arg1 arg2 arg3 arg4 arg5 arg6} { if {$arg1 < 1 } { tk_messageBox -message "縦サイズ エラー" focus .tate.inputentry } elseif {$arg2 < 1} { tk_messageBox -message "横サイズ エラー" focus .yoko.inputentry } elseif {$arg3 < 1} { tk_messageBox -message "高さサイズ エラー" focus .taka.inputentry } elseif {$arg4 < 1} { tk_messageBox -message "重さ エラー" focus .omos.inputentry } elseif {$arg5 < 0} { tk_messageBox -message "地域未選択 エラー" focus .omos.inputentry } elseif {$arg6 == "A"} { set command "./yamato $arg1 $arg2 $arg3 $arg4 $arg5" set result [eval exec $command] tk_messageBox -message $result focus .tate.inputentry } elseif {$arg6 == "B"} { set command "./yupack $arg1 $arg2 $arg3 $arg4 $arg5" set result [eval exec $command] tk_messageBox -message $result focus .tate.inputentry } else { set command "./tegai $arg1 $arg2 $arg3 $arg4 $arg5" set result [eval exec $command] tk_messageBox -message $result focus .tate.inputentry } } |