2001/4/14版(最初)
| とりあえずTcl/Tkからイベントが発生した時にCOBOLのプログラムを起動させ、COBOLで処理させた後Tcl/Tkに戻る 形でアウトラインが作成出来ました。以下紹介いたします。 | ||
![]() |
![]() |
まずTcl/Tkで左記のような画面作成いたしまた。 仕様としては宅急便の縦・横・高さ・重量・地域(今のところは関西地方が発送元固定となっております)を入力し、宅急便の料金を算出すると言う 別にあっても なくても良いようなプログラムです(^^; 縦のサイズ・横のサイズ・高さ・重量を タブもしはマウスで移動させ数値の入力を行います。地域に関してはリストボックスになっておりますので選択を行います。 その後実行ボタンを押すと、COBOLプログラムに制御が移り COBOLプログラム中で運賃算出が行われる仕組みになっております。 (左が初期画面で右が数値入力後のイメージです。) |
![]() |
上記入力後、実行ボタンを押すと左記のように運賃がメッセージボックスで表示されます。 | |
今のところ作成途中で計算ロジックは未完成 エラーチェックなし 画面の体裁未整え 終了方法未検討 等 まだようやく動いた状態ですが 以下にソースを紹介いたします。 |
||
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST01C.
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-SIZE PIC S9(12)V9(3).
01 WK-DKIN PIC Z,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-SIZE = WK-TATE + WK-YOKO + WK-TAKA.
IF WK-INDEX = 0
IF WK-SIZE < 61
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
IF WK-SIZE < 160
MOVE 2520 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE "取扱不可" TO WK-OUT.
IF WK-INDEX = "1" OR "2" OR "3"
IF WK-SIZE < 61
MOVE 1050 TO WK-DKIN
ELSE
IF WK-SIZE < 80
MOVE 1260 TO WK-DKIN
ELSE
IF WK-SIZE < 100
MOVE 1470 TO WK-DKIN
ELSE
MOVE 200 TO WK-DKIN.
DISPLAY WK-OUT.
EXIT PROGURAM. |
数値変換サブルーチンSUBXに関してはSPEC社から発売されている「実習MS−DOS LEVELUCOBOL入門」を参照してください。 |
#! /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 "0"
set ent2 "0"
set ent3 "0"
set ent4 "0"
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 20 -relief sunken -textvariable ent1
label .yoko.inputlabel -bg #000099 -fg white -text 横のサイズ -width 10
entry .yoko.inputentry -width 20 -relief sunken -textvariable ent2
label .taka.inputlabel -bg #009900 -fg white -text 高さ -width 10
entry .taka.inputentry -width 20 -relief sunken -textvariable ent3
label .omos.inputlabel -bg black -fg white -text 重量 -width 10
entry .omos.inputentry -width 20 -relief sunken -textvariable ent4
set ent1 [.tate.inputentry get]
set ent2 [.yoko.inputentry get]
set ent3 [.taka.inputentry get]
set ent4 [.omos.inputentry get]
#set data [$lis get [$lis curselection]]
button .enter -text 実行 -command {
set index [.lis curselection]
set data [.lis get $index]
set command "./test01c $ent1 $ent2 $ent3 $ent4 $index"
set result [eval exec $command]
tk_messageBox -message $result
}
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 .enter -side top -anchor w -pady 30m -padx 14m
|