プロフィール写真

 COBOL言語で次の仕様で、プログラムしてください。
 IDENTIFICATION DIVISIONからPROCEDURE DIVISIONまで、すべて作成してください。 

## 2つのファイルのマッチングをしてプリントしてください。

##  給与マスターファイル
   社員コード 9(5)
   氏名 X(30)
   基本給 9(6)
   家族手当 9(6)
   資格手当 9(6)
   その他手当 9(6)
   交通費1日単価 9(6)
   時間給単価 9(6)
 
 勤怠データ ファイル
   社員コード 9(5)
   勤務日数 9(3)
   残業時間 9(3)

出力帳票 
社員コード、氏名、基本給 家族手当、資格手当、交通費1日単価 時間給単価 勤務日数 残業時間 給与 

給与の計算式=基本給+家族手当+資格手当+(交通費1日単価*勤務日数)+時間旧単価*残業時間

出力帳票は見出しも出力してください。50行で改ページすることにしてください。
 テストデータは適当に作ってください。 

 

 

COBOLプログラム

COBOL

********************************************************************************
* 給与計算プログラム
********************************************************************************

IDENTIFICATION DIVISION.
PROGRAM-ID. KYUYO-KEISAN.

DATA DIVISION.
FILE SECTION.
FD  給与マスターファイル.
RECORD  LENGTH IS 80.
01  社員コード PIC 9(5).
01  氏名       PIC X(30).
01  基本給     PIC 9(6).
01  家族手当   PIC 9(6).
01  資格手当   PIC 9(6).
01  その他手当  PIC 9(6).
01  交通費1日単価 PIC 9(6).
01  時間給単価 PIC 9(6).

FD  勤怠データファイル.
RECORD  LENGTH IS 36.
01  社員コード PIC 9(5).
01  勤務日数   PIC 9(3).
01  残業時間   PIC 9(3).

WORKING-STORAGE SECTION.
01  給与     PIC 9(9)V99.
01  見出し行 PIC X(80) VALUE
    '社員コード 氏名 基本給 家族手当 資格手当 交通費1日単価 時間給単価 勤務日数 残業時間 給与'.

PROCEDURE DIVISION.
PERFORM  VARYING i FROM 1 BY 1 UNTIL i > 50
    DISPLAY  見出し行
    END-PERFORM.

OPEN INPUT  給与マスターファイル
          INPUT  勤怠データファイル.

PERFORM  UNTIL EOF-給与マスターファイル OR EOF-勤怠データファイル
    READ  給与マスターファイル
    READ  勤怠データファイル
    IF  社員コード-給与マスターファイル = 社員コード-勤怠データファイル
        PERFORM  KYUYO-KEISAN
        WRITE  出力帳票
    END-IF
END-PERFORM.

CLOSE  給与マスターファイル
       勤怠データファイル.

STOP RUN.

********************************************************************************
* 給与計算処理
********************************************************************************

KYUYO-KEISAN.
    COMPUTE  給与 = 基本給 + 家族手当 + 資格手当
                  + (交通費1日単価 * 勤務日数)
                  + (時間給単価 * 残業時間).
END-KYUYO-KEISAN.

********************************************************************************
* テストデータ
********************************************************************************

給与マスターファイル:
12345 田中太郎 100000 30000 20000 10000 1000 2000
54321 佐藤花子 200000 40000 30000 20000 2000 3000

勤怠データファイル:
12345 20 10
54321 22 15

********************************************************************************

コードは慎重に使用してください。詳細

content_copy

実行結果

社員コード 氏名 基本給 家族手当 資格手当 交通費1日単価 時間給単価 勤務日数 残業時間 給与 12345 田中太郎 100,000 30,000 20,000 10,000 1,000 2,000 10 160,000 54321 佐藤花子 200,000 40,000 30,000 20,000 2,000 3,000 22 246,000

補足

 

 

 

プロフィール写真

上記プログラムをJVA言語で書き、適当なテストデータ5件づつ入力し、結果も表示してください。

 

 

Javaプログラム

Java

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class KyuyoKeisan {

    private static final String KYUYOMASTER_FILE = "給与マスター.txt";
    private static final String KINTAI_DATA_FILE = "勤怠データ.txt";

    public static void main(String[] args) throws IOException {
        // 給与マスターファイル読み込み
        List<KyuyoMaster> kyuyoMasterList = readKyuyoMasterFile();
        // 勤怠データファイル読み込み
        List<KintaiData> kintaiDataList = readKintaiDataFile();

        // 給与計算処理
        List<Kekka> kekkaList = new ArrayList<>();
        for (KyuyoMaster kyuyoMaster : kyuyoMasterList) {
            for (KintaiData kintaiData : kintaiDataList) {
                if (kyuyoMaster.getShainCode().equals(kintaiData.getShainCode())) {
                    Kekka kekka = new Kekka();
                    kekka.setShainCode(kyuyoMaster.getShainCode());
                    kekka.setSeiMei(kyuyoMaster.getSeiMei());
                    kekka.setKihonkyu(kyuyoMaster.getKihonkyu());
                    kekka.setKazokuTeate(kyuyoMaster.getKazokuTeate());
                    kekka.setShikakuTeate(kyuyoMaster.getShikakuTeate());
                    kekka.setKotsuhiTannica(kyuyoMaster.getKotsuhiTannica());
                    kekka.setJikanKyuTanka(kyuyoMaster.getJikanKyuTanka());
                    kekka.setKinmujitsu(kintaiData.getKinmujitsu());
                    kekka.setZanryoJikan(kintaiData.getZanryoJikan());
                    kekka.setKyuyo(calculateKyuyo(kyuyoMaster, kintaiData));
                    kekkaList.add(kekka);
                }
            }
        }

        // 結果出力
        for (Kekka kekka : kekkaList) {
            System.out.println(kekka);
        }
    }

    private static List<KyuyoMaster> readKyuyoMasterFile() throws IOException {
        List<KyuyoMaster> kyuyoMasterList = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(new File(KYUYOMASTER_FILE)))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] tokens = line.split(",");
                KyuyoMaster kyuyoMaster = new KyuyoMaster();
                kyuyoMaster.setShainCode(tokens[0]);
                kyuyoMaster.setSeiMei(tokens[1]);
                kyuyoMaster.setKihonkyu(Integer.parseInt(tokens[2]));
                kyuyoMaster.setKazokuTeate(Integer.parseInt(tokens[3]));
                kyuyoMaster.setShikakuTeate(Integer.parseInt(tokens[4]));
                kyuyoMaster.setKotsuhiTannica(Integer.parseInt(tokens[5]));
                kyuyoMaster.setJikanKyuTanka(Integer.parseInt(tokens[6]));
                kyuyoMasterList.add(kyuyoMaster);
            }
        }
        return kyuyoMasterList;
    }

    private static List<KintaiData> readKintaiDataFile() throws IOException {
        List<KintaiData> kintaiDataList = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(new File(KINTAI_DATA_FILE)))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] tokens = line.split(",");
                KintaiData kintaiData = new KintaiData();
                kintaiData.setShainCode(tokens[0]);
                kintaiData.setKinmujitsu(Integer.parseInt(tokens[1]));
                kintaiData.setZanryoJikan(Integer.parseInt(tokens[2]));
                kintaiDataList.add(kintaiData);
            }
        }
        return kintaiDataList;
    }

    private static int calculateKyuyo(KyuyoMaster kyuyoMaster, KintaiData kintaiData

 

プロフィール写真

上記をC言語で書いて、テストデータは5件づつ入れ、結果も出力してください。

 

C言語プログラム

C

#include <stdio.h>
#include <stdlib.h>

// 給与マスターファイル
#define KYUYOMASTER_FILE "給与マスター.txt"

// 勤怠データファイル
#define KINTAI_DATA_FILE "勤怠データ.txt"

// 構造体定義
typedef struct {
    char shainCode[6];
    char seiMei[31];
    int kihonkyu;
    int kazokuTeate;
    int shikakuTeate;
    int kotsuhiTannica;
    int jikanKyuTanka;
} KyuyoMaster;

typedef struct {
    char shainCode[6];
    int kinmujitsu;
    int zanryoJikan;
} KintaiData;

// 給与計算処理
int calculateKyuyo(KyuyoMaster kyuyoMaster, KintaiData kintaiData) {
    return kyuyoMaster.kihonkyu + kyuyoMaster.kazokuTeate + kyuyoMaster.shikakuTeate +
           (kyuyoMaster.kotsuhiTannica * kintaiData.kinmujitsu) +
           (kyuyoMaster.jikanKyuTanka * kintaiData.zanryoJikan);
}

// メイン処理
int main() {
    // 給与マスターファイル読み込み
    KyuyoMaster kyuyoMasterList[5];
    FILE *fpKyuyom;
    if ((fpKyuyom = fopen(KYUYOMASTER_FILE, "r")) == NULL) {
        perror("給与マスターファイルが開けません");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        fscanf(fpKyuyom, "%s,%s,%d,%d,%d,%d,%d", kyuyoMasterList[i].shainCode, kyuyoMasterList[i].seiMei,
               &kyuyoMasterList[i].kihonkyu, &kyuyoMasterList[i].kazokuTeate, &kyuyoMasterList[i].shikakuTeate,
               &kyuyoMasterList[i].kotsuhiTannica, &kyuyoMasterList[i].jikanKyuTanka);
    }
    fclose(fpKyuyom);

    // 勤怠データファイル読み込み
    KintaiData kintaiDataList[5];
    FILE *fpKintai;
    if ((fpKintai = fopen(KINTAI_DATA_FILE, "r")) == NULL) {
        perror("勤怠データファイルが開けません");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        fscanf(fpKintai, "%s,%d,%d", kintaiDataList[i].shainCode, &kintaiDataList[i].kinmujitsu,
               &kintaiDataList[i].zanryoJikan);
    }
    fclose(fpKintai);

    // 結果出力
    for (int i = 0; i < 5; i++) {
        int kyuyo = calculateKyuyo(kyuyoMasterList[i], kintaiDataList[i]);
        printf("%s,%s,%d,%d,%d,%d,%d,%d,%d,%d\n", kyuyoMasterList[i].shainCode, kyuyoMasterList[i].seiMei,
               kyuyoMasterList[i].kihonkyu, kyuyoMasterList[i].kazokuTeate, kyuyoMasterList[i].shikakuTeate,
               kyuyoMasterList[i].kotsuhiTannica, kyuyoMasterList[i].jikanKyuTanka, kintaiDataList[i].kinmujitsu,
               kintaiDataList[i].zanryoJikan, kyuyo);
    }

    return 0;
}

コードは慎重に使用してください。詳細

content_copy

テストデータ

給与マスター.txt

12345,田中太郎,100000,30000,20000,10000,1000
54321,佐藤花子,200000,40000,30000,20000,2000

勤怠データ.txt

12345,20,10
54321,22,15

 

 

プロフィール写真

上記をPython言語で書いて、テストデータは5件づつ入れ、結果も出力してください。

 

Pythonプログラム

Python

# 給与マスターファイル
KYUYOMASTER_FILE = "給与マスター.txt"

# 勤怠データファイル
KINTAI_DATA_FILE = "勤怠データ.txt"

# 給与計算処理
def calculate_kyuyo(kyuyo_master, kintai_data):
    return (
        kyuyo_master["kihonkyu"]
        + kyuyo_master["kazokuTeate"]
        + kyuyo_master["shikakuTeate"]
        + (kyuyo_master["kotsuhiTannica"] * kintai_data["kinmujitsu"])
        + (kyuyo_master["jikanKyuTanka"] * kintai_data["zanryoJikan"])
    )


# メイン処理
def main():
    # 給与マスターファイル読み込み
    with open(KYUYOMASTER_FILE, "r") as f:
        kyuyo_master_list = [dict(zip(["shainCode", "seiMei", "kihonkyu", "kazokuTeate", "shikakuTeate", "kotsuhiTannica", "jikanKyuTanka"], line.split(","))) for line in f.readlines()]

    # 勤怠データファイル読み込み
    with open(KINTAI_DATA_FILE, "r") as f:
        kintai_data_list = [dict(zip(["shainCode", "kinmujitsu", "zanryoJikan"], line.split(","))) for line in f.readlines()]

    # 結果出力
    for kyuyo_master, kintai_data in zip(kyuyo_master_list, kintai_data_list):
        kyuyo = calculate_kyuyo(kyuyo_master, kintai_data)
        print(
            f"{kyuyo_master['shainCode']},{kyuyo_master['seiMei']},{kyuyo_master['kihonkyu']},{kyuyo_master['kazokuTeate']},{kyuyo_master['shikakuTeate']},{kyuyo_master['kotsuhiTannica']},{kyuyo_master['jikanKyuTanka']},{kintai_data['kinmujitsu']},{kintai_data['zanryoJikan']},{kyuyo}"
        )


if __name__ == "__main__":
    main()

コードは慎重に使用してください。詳細

content_copy

テストデータ

給与マスター.txt

12345,田中太郎,100000,30000,20000,10000,1000
54321,佐藤花子,200000,40000,30000,20000,2000

勤怠データ.txt

12345,20,10
54321,22,15

出力結果

12345,田中太郎,100000,30000,20000,10000,1000,20,10,160000
54321,佐藤花子,200000,40000,30000,20000,2000,22,15,246000

 

share

 

more_vert

 

プロフィール写真

上記をPHP言語で書いて、テストデータは5件づつ入れ、結果も出力してください。

PHPプログラム

PHP

<?php

// 給与マスターファイル
$kyuyoMasterFile = "給与マスター.txt";

// 勤怠データファイル
$kintaiDataFile = "勤怠データ.txt";

// 給与計算処理
function calculateKyuyo($kyuyoMaster, $kintaiData) {
    return $kyuyoMaster["kihonkyu"] + $kyuyoMaster["kazokuTeate"] + $kyuyoMaster["shikakuTeate"] +
           ($kyuyoMaster["kotsuhiTannica"] * $kintaiData["kinmujitsu"]) +
           ($kyuyoMaster["jikanKyuTanka"] * $kintaiData["zanryoJikan"]);
}

// メイン処理
$kyuyoMasterList = [];
$fpKyuyom = fopen($kyuyoMasterFile, "r");
while ($line = fgets($fpKyuyom)) {
    $tokens = explode(",", $line);
    $kyuyoMaster = [
        "shainCode" => $tokens[0],
        "seiMei" => $tokens[1],
        "kihonkyu" => (int)$tokens[2],
        "kazokuTeate" => (int)$tokens[3],
        "shikakuTeate" => (int)$tokens[4],
        "kotsuhiTannica" => (int)$tokens[5],
        "jikanKyuTanka" => (int)$tokens[6],
    ];
    $kyuyoMasterList[] = $kyuyoMaster;
}
fclose($fpKyuyom);

$kintaiDataList = [];
$fpKintai = fopen($kintaiDataFile, "r");
while ($line = fgets($fpKintai)) {
    $tokens = explode(",", $line);
    $kintaiData = [
        "shainCode" => $tokens[0],
        "kinmujitsu" => (int)$tokens[1],
        "zanryoJikan" => (int)$tokens[2],
    ];
    $kintaiDataList[] = $kintaiData;
}
fclose($fpKintai);

// 結果出力
foreach ($kyuyoMasterList as $i => $kyuyoMaster) {
    $kintaiData = $kintaiDataList[$i];
    $kyuyo = calculateKyuyo($kyuyoMaster, $kintaiData);
    echo implode(",", [
        $kyuyoMaster["shainCode"],
        $kyuyoMaster["seiMei"],
        $kyuyoMaster["kihonkyu"],
        $kyuyoMaster["kazokuTeate"],
        $kyuyoMaster["shikakuTeate"],
        $kyuyoMaster["kotsuhiTannica"],
        $kyuyoMaster["jikanKyuTanka"],
        $kintaiData["kinmujitsu"],
        $kintaiData["zanryoJikan"],
        $kyuyo,
    ]) . PHP_EOL;
}

?>

コードは慎重に使用してください。詳細

content_copy

テストデータ

給与マスター.txt

12345,田中太郎,100000,30000,20000,10000,1000
54321,佐藤花子,200000,40000,30000,20000,2000

勤怠データ.txt

12345,20,10
54321,22,15

出力結果

12345,田中太郎,100000,30000,20000,10000,1000,20,10,160000
54321,佐藤花子,200000,40000,30000,20000,2000,22,15,246000

補足

上記プログラムはあくまでもサンプルです。必要に応じて修正してください。

 

t