CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

COBOLでGUIアプリは可能か?その2

2024-07-05 23:45:32 | COBOL


identification division.
program-id. CALL-TEST.
data division.
working-storage section.
01 numeri PIC 9(4).
procedure division.
move 0721 to numeri.
call 'sub1' using by value numeri.
display "Hello After C".
stop run.

jsコードは省略。


COBOLでGUIアプリは可能か?

2024-07-05 23:18:12 | COBOL
COBOLでGUIアプリを作りたい。例えば四則演算電卓のCOBOLソースを書いて。

【ChatGPT】
COBOL自体は古いプログラミング言語であり、GUIアプリケーションの開発には通常向いていません。COBOLでGUIを作成する場合、外部のライブラリやツールキットを利用する必要があります。例えば、COBOLコードを使ってJavaやC#のGUIコンポーネントを操作する方法が考えられます。

ここでは、COBOLのGUIアプリケーションの例として、四則演算電卓の簡単なサンプルを示します。この例では、COBOLプログラムがバックエンドのロジックを処理し、GUI部分はJavaを使って実装しています。以下にその例を示します。

【COBOLソースコード (Calculator.cbl)】

IDENTIFICATION DIVISION.

PROGRAM-ID. Calculator.


DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-NUM1 PIC 9(5)V9(2).

01 WS-NUM2 PIC 9(5)V9(2).

01 WS-RESULT PIC 9(5)V9(2).


LINKAGE SECTION.

01 LK-NUM1 PIC 9(5)V9(2).

01 LK-NUM2 PIC 9(5)V9(2).

01 LK-OPERATION PIC X.

01 LK-RESULT PIC 9(5)V9(2).


PROCEDURE DIVISION USING LK-NUM1 LK-NUM2 LK-OPERATION LK-RESULT.

MOVE LK-NUM1 TO WS-NUM1

MOVE LK-NUM2 TO WS-NUM2

EVALUATE LK-OPERATION

WHEN '+'

COMPUTE WS-RESULT = WS-NUM1 + WS-NUM2

WHEN '-'

COMPUTE WS-RESULT = WS-NUM1 - WS-NUM2

WHEN '*'

COMPUTE WS-RESULT = WS-NUM1 * WS-NUM2

WHEN '/'

IF WS-NUM2 NOT = 0

COMPUTE WS-RESULT = WS-NUM1 / WS-NUM2

ELSE

MOVE 0 TO WS-RESULT

END-IF

WHEN OTHER

MOVE 0 TO WS-RESULT

END-EVALUATE

MOVE WS-RESULT TO LK-RESULT

GOBACK.

END PROGRAM Calculator.

Gooブログの糞仕様でJavaのコードは書けないらしい。
【Java GUIコード (CalculatorGUI.java)】
i m p o r t j a v a . a w t . * ; i m p o r t j a v a . a w t . e v e n t . * ; i m p o r t j a v a x . s w i n g . * ; i m p o r t j a v a . n i o.file.*; p ublic class C alculatorGUI { static{ S ystem.loadLibrary("Calculator"); } p ublic native float calculate(float num1, float num2, char operation); p ublic static void main(String[] args) { JFrame frame = new JFrame("COBOL Calculator"); f rame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f rame.setSize(300, 300); JTextField num1Field = new JTextField(10); JTextField num2Field = new JTextField(10); JTextField r esultField = new JTextField(10); r esultField.setEditable(false); String[] operations = {"+", "-", "*", "/"}; J ComboBox<String> operationBox = new J ComboBox<>(operations); J Button c alculateButton = new J Button("Calculate"); c alculateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try {float num1 = F loat.parseFloat(num1Field.getText()); float num2 = F loat.parseFloat(num2Field.getText()); c har operation = ((String) operationBox.getSelectedItem()).charAt(0); CalculatorGUI calc = new C alculatorGUI(); float result = c alc.calculate(num1, num2, operation); r esultField.setText(String.valueOf(result));} c atch (NumberFormatException ex) { r esultField.setText("Error"); } } }); J Panel panel = new JPanel(); p anel.add(new JLabel("Num 1:")); p anel.add(num1Field); p anel.add(new J Label("Operation:")); p anel.add(operationBox); p anel.add(new J Label("Num 2:")); p anel.add(num2Field); p anel.add(calculateButton); p anel.add(new JLabel("Result:")); p anel.add(resultField); f rame.add(panel); f rame.setVisible(true); } }

ビルドと実行手順

  1. COBOLコードをコンパイルして、動的ライブラリ(例:.so.dllなど)を生成します。
  2. Javaコードをコンパイルして実行します。

これらの手順は環境によって異なりますが、以下は一般的な手順です。

1.COBOLコードのコンパイル:

cobc -m -o Calculator.so Calculator.cbl

2.Javaコードのコンパイルと実行:
javac CalculatorGUI.java
java -Djava.library.path=. CalculatorGUI

この例では、COBOLの計算ロジックをJavaのGUIから呼び出しています。COBOLとJavaのインターフェースを作成するために、Java Native Interface (JNI) を使用しています。これにより、COBOLの強力なバックエンドロジックとJavaの柔軟なGUIを組み合わせたアプリケーションが作成できます。