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
********************************************************************************
* 給与計算プログラム
********************************************************************************
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
補足
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
#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
# 給与マスターファイル
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
<?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