源码放于:https://github.com/evilinf/certificate
最近做完一个课设,这门语言很老,开发系统很low,所以学习的人少,知道的人也少,这门语言不难,我把我觉得我系统中觉得好的部分呈现出来
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. LAB8.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
COPY STU090A. //拷贝MAPSET的接口的数据定义,以向map传输数据
COPY STU090D.
COPY DFHAID.
01 TSTAMP PIC S9(15) COMP-3. //系统时间初始放置的数据名
01 RCODE PIC S9(4) COMP. //操作之后的返回码
01 RETURNS PIC 9(12). //加总和
01 SDATE. //起始日期数据组合项
02 SYEA PIC 9(4).
02 FILLER PIC X.
02 SMON PIC 9(2).
02 FILLER PIC X.
02 SDAY PIC 9(2).
01 EDATE. //终止日期数据组合项
02 EYEA PIC 9(4).
02 FILLER PIC X.
02 EMON PIC 9(2).
02 FILLER PIC X.
02 EDAY PIC 9(2).
01 CERREC. //VSAM文件记录接收组合项
02 CERNUM PIC 9(4). //凭证编号
02 FDATE. //凭证填制日期
03 FMON PIC 9(2).
03 FILLER PIC X.
03 FDAY PIC 9(2).
03 FILLER PIC X.
03 FYEA PIC 9(4).
02 SUBDE PIC X(20). //借方科目
02 NUMDE PIC 9(8). //借方金额
02 SUBCR PIC X(20). //贷方科目
02 NUMCR PIC 9(8). //贷方金额
02 FILLOR PIC X(8). //填制人
02 ADUITOR PIC X(8). //审核人
LINKAGE SECTION.
01 DFHCOMMAREA. //公共域传值,用于接收上个页面传过来的值
02 CNAME PIC X(8). //登录者
02 CRIGHT PIC X. //登录者权限
PROCEDURE DIVISION.
EVALUATE TRUE //功能键判断
WHEN EIBAID = DFHPF12
MOVE LOW-VALUE TO SUMDATAO //将SUMDATA的接口赋初值,以防止出现不想要的字符
PERFORM SEND-SUMDATA //执行对应的段
WHEN EIBAID = DFHENTER
PERFORM PROCESS-COMPUTE
WHEN EIBAID = DFHPF1
EXEC CICS RETURN END-EXEC //退出系统
WHEN EIBAID = DFHPF3
PERFORM RETURN-FUN
END-EVALUATE.
SEND-SUMDATA. //发送当前的map 为了防止程序死,所以每种情况下一定会有个cics的return语句
MOVE LOW-VALUE TO SUMDATAO.
EXEC CICS SEND MAP(‘SUMDATA’) MAPSET(‘STU090D’) ERASE //发送map时记得加erase参数,目的是发送map前先清屏
END-EXEC.
EXEC CICS RETURN TRANSID(‘0908’) COMMAREA(DFHCOMMAREA)
END-EXEC.
PROCESS-COMPUTE.
EXEC CICS RECEIVE MAP(‘SUMDATA’) MAPSET(‘STU090D’) END-EXEC. //接收map
MOVE SDATEI TO SDATE. //将页面输入的起始时间传给起始数据名
MOVE EDATEI TO EDATE.
MOVE 0 TO RETURNS. //赋初值 returns = 0
EXEC CICS STARTBR FILE(‘PINGZ090’) RIDFLD(CERNUM) //遍历VSAM文件开始,文件名PINGZ090,键值:CERNUM
RESP(RCODE) END-EXEC
IF RCODE EQUAL DFHRESP(NORMAL) //如果防止初始文件成功,开始遍历
PERFORM UNTIL RCODE EQUAL DFHRESP(ENDFILE) //用循环遍历
EXEC CICS READNEXT FILE(‘PINGZ090’) INTO(CERREC)
RIDFLD(CERNUM) RESP(RCODE) END-EXEC
IF FYEA = SYEA AND FYEA = EYEA AND FMON = SMON AND //对当前日期是否在起始日期之间的判定
FMON = EMON AND FDAY >= SDAY AND FDAY <= EDAY
ADD NUMDE TO RETURNS //如果在这之间,就将借方金额给returns
END-IF
IF FYEA = SYEA AND FYEA = EYEA AND FMON > SMON AND
FMON = EMON AND FDAY <= EDAY
ADD NUMDE TO RETURNS
END-IF
IF FYEA = SYEA AND FYEA = EYEA AND FMON = SMON AND
FMON < EMON AND FDAY >= SDAY
ADD NUMDE TO RETURNS
END-IF
IF FYEA = SYEA AND FYEA = EYEA AND FMON > SMON AND
FMON < EMON
ADD NUMDE TO RETURNS
END-IF
IF FYEA > SYEA AND FYEA = EYEA AND FMON <= EMON
ADD NUMDE TO RETURNS
END-IF
IF FYEA = SYEA AND FYEA < EYEA AND FMON >= SMON
ADD NUMDE TO RETURNS
END-IF
IF FYEA > SYEA AND FYEA < EYEA
ADD NUMDE TO RETURNS
END-IF
END-PERFORM
EXEC CICS ENDBR FILE(‘PINGZ090’) END-EXEC //结束对文件的浏览
MOVE RETURNS TO RETURNSO //将最后的加总值用于显示
END-IF
EXEC CICS SEND MAP(‘SUMDATA’) MAPSET(‘STU090D’) END-EXEC.
EXEC CICS RETURN TRANSID(‘0908’) COMMAREA(DFHCOMMAREA)
END-EXEC.
RETURN-FUN. //返回功能选择界面
MOVE LOW-VALUE TO SELECTFO.
EXEC CICS SEND MAP(‘SELECTF’) MAPSET(‘STU090A’)
ERASE END-EXEC.
EXEC CICS RETURN TRANSID(‘0902’) COMMAREA(DFHCOMMAREA)
END-EXEC.