fork download
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. PROG5.
  3. *
  4. ENVIRONMENT DIVISION.
  5. *
  6. INPUT-OUTPUT SECTION.
  7. FILE-CONTROL.
  8. SELECT STORE-FILE-IN
  9. ASSIGN TO KEYBOARD
  10. ORGANIZATION IS LINE SEQUENTIAL.
  11. SELECT STORE-FILE-OUT
  12. ASSIGN TO DISPLAY
  13. ORGANIZATION IS LINE SEQUENTIAL.
  14. *
  15. *
  16. *
  17. *
  18. *
  19. DATA DIVISION.
  20. *
  21. *
  22. FILE SECTION.
  23. *
  24. *
  25. FD STORE-FILE-IN.
  26. *
  27. 01 STORE-RECORD-IN PIC X(25).
  28. *
  29. FD STORE-FILE-OUT.
  30. *
  31. 01 STORE-RECORD-OUT PIC X(120).
  32. *
  33. WORKING-STORAGE SECTION.
  34. *
  35. 01 WS-MORE-INPUT PIC X(01) VALUE "Y".
  36. *
  37. 01 WS-ERROR-FLAG PIC X(01) VALUE "Y".
  38. *
  39. 01 WS-ERROR-FIELDS PIC 9(01) VALUE 0.
  40. *
  41. 01 WS-GOOD-RECORD PIC X(01) VALUE "Y".
  42. *
  43. 01 WS-RECORD-COUNT PIC 9(01) VALUE 0.
  44. *
  45. 01 WS-STORE-RECORD-IN.
  46. 05 PIC X(01).
  47. 05 DISTRICT-CODE-IN PIC X(02).
  48. 88 VALID-DISTRICT-CODE VALUE "20" THRU "80".
  49. 88 DISTRICT-CODE-BLANK VALUE SPACES.
  50. 05 PIC X(01).
  51. 05 STORE-CODE-IN.
  52. 88 STORE-CODE-BLANK VALUE SPACES.
  53. 10 STORE-CODE-1-IN PIC X(01).
  54. 10 STORE-CODE-2-IN PIC X(01).
  55. 88 VALID-STORE-CODE VALUE "C" THRU "L".
  56. 10 STORE-CODE-3-IN PIC X(01).
  57. 05 PIC X(01).
  58. 05 DEPARTMENT-CODE-IN.
  59. 88 DEPARTMENT-CODE-BLANK VALUE SPACES.
  60. 10 DEPT-CODE-1-IN PIC X(02).
  61. 10 DEPT-CODE-2-IN PIC X(03).
  62. 05 PIC X(01).
  63. 05 TRANSACTION-TYPE-IN PIC X(02).
  64. 88 TRANSACTION-TYPE-BLANK VALUE SPACES.
  65. 05 PIC X(01).
  66. 05 TRANSACTION-AMOUNT-IN-X PIC X(07).
  67. 88 TRANSACTION-AMOUNT-BLANK VALUE SPACES.
  68. 05 TRANSACTION-AMOUNT-IN-9
  69. REDEFINES
  70. TRANSACTION-AMOUNT-IN-X PIC 9(05)V99.
  71. *
  72. 01 WS-HEADING-LINE-1.
  73. 05 PIC X(08) VALUE "DISTRICT".
  74. 05 PIC X(01) VALUE SPACES.
  75. 05 PIC X(05) VALUE "STORE".
  76. 05 PIC X(01) VALUE SPACES.
  77. 05 PIC X(10) VALUE "DEPARTMENT".
  78. 05 PIC X(01) VALUE SPACES.
  79. 05 PIC X(11) VALUE "TRANSACTION".
  80. 05 PIC X(10) VALUE SPACES.
  81. 05 PIC X(05) VALUE "ERROR".
  82. *
  83. 01 WS-HEADING-LINE-2.
  84. 05 PIC X(02) VALUE SPACES.
  85. 05 PIC X(04) VALUE "CODE".
  86. 05 PIC X(03) VALUE SPACES.
  87. 05 PIC X(04) VALUE "CODE".
  88. 05 PIC X(05) VALUE SPACES.
  89. 05 PIC X(04) VALUE "CODE".
  90. 05 PIC X(04) VALUE SPACES.
  91. 05 PIC X(04) VALUE "TYPE".
  92. 05 PIC X(01) VALUE SPACES.
  93. 05 PIC X(06) VALUE "AMOUNT".
  94. 05 PIC X(10) VALUE SPACES.
  95. 05 PIC X(04) VALUE "CODE".
  96. *
  97. 01 WS-DETAIL-LINE.
  98. 05 PIC X(03) VALUE SPACES.
  99. 05 DISTRICT-OUT PIC X(03).
  100. 05 PIC X(04) VALUE SPACES.
  101. 05 STORE-OUT PIC X(03).
  102. 05 PIC X(04) VALUE SPACES.
  103. 05 DEPARTMENT-OUT PIC X(05).
  104. 05 PIC X(05) VALUE SPACES.
  105. 05 TRANSACTION-TYPE-OUT PIC X(02).
  106. 05 PIC X(02) VALUE SPACES.
  107. 05 TRANSACTION-AMOUNT-OUT PIC X(07).
  108. 05 PIC X(01) VALUE SPACES.
  109. 05 ERROR-OUT PIC X(50).
  110. *
  111. 01 WS-ACCUMULATORS.
  112. 05 WS-GOOD-RECORDS PIC 9(03) VALUE 0.
  113. 05 WS-BAD-RECORDS PIC 9(03) VALUE 0.
  114. 05 WS-TRANSACTION-TOTAL PIC 9(10)V99 VALUE 0.
  115. *
  116. 01 WS-SUMMARY-LINE-1.
  117. 05 PIC X(03) VALUE SPACES.
  118. 05 PIC X(05) VALUE "TOTAL".
  119. 05 PIC X(01) VALUE SPACES.
  120. 05 PIC X(04) VALUE "GOOD".
  121. 05 PIC X(01) VALUE SPACES.
  122. 05 PIC X(13) VALUE "TRANSACTIONS:".
  123. 05 PIC X(03) VALUE SPACES.
  124. 05 GOOD-RECORDS-OUT PIC ZZ9.
  125. *
  126. 01 WS-SUMMARY-LINE-2.
  127. 05 PIC X(04) VALUE SPACES.
  128. 05 PIC X(05) VALUE "TOTAL".
  129. 05 PIC X(01) VALUE SPACES.
  130. 05 PIC X(03) VALUE "BAD".
  131. 05 PIC X(01) VALUE SPACES.
  132. 05 PIC X(13) VALUE "TRANSACTIONS:".
  133. 05 PIC X(03) VALUE SPACES.
  134. 05 BAD-RECORDS-OUT PIC ZZ9.
  135. *
  136. 01 WS-SUMMARY-LINE-3.
  137. 05 PIC X(05) VALUE "TOTAL".
  138. 05 PIC X(01) VALUE SPACES.
  139. 05 PIC X(02) VALUE "OF".
  140. 05 PIC X(01) VALUE SPACES.
  141. 05 PIC X(04) VALUE "GOOD".
  142. 05 PIC X(01) VALUE SPACES.
  143. 05 PIC X(13) VALUE "TRANSACTIONS:".
  144. 05 PIC X(03) VALUE SPACES.
  145. 05 TRANSACTION-TOTAL-OUT PIC $$$,$$9.99.
  146. *
  147. *
  148. *
  149. *
  150. *
  151. PROCEDURE DIVISION.
  152. *
  153. *
  154. MAIN-CONTROL-PARA.
  155. PERFORM INITIALIZATION-PARA
  156. PERFORM READ-PARA
  157. PERFORM HEADINGS-PARA
  158. PERFORM MAIN-LOOP-PARA
  159. UNTIL WS-MORE-INPUT = "N"
  160. PERFORM SUMMARY-PAGE-PARA
  161. PERFORM TERMINATION-PARA
  162. .
  163. *
  164. *
  165. INITIALIZATION-PARA.
  166. OPEN INPUT STORE-FILE-IN
  167. OUTPUT STORE-FILE-OUT
  168. .
  169. *
  170. *
  171. READ-PARA.
  172. READ STORE-FILE-IN
  173. INTO WS-STORE-RECORD-IN
  174. AT END MOVE "N" TO WS-MORE-INPUT
  175. .
  176. *
  177. *
  178. HEADINGS-PARA.
  179. WRITE STORE-RECORD-OUT FROM WS-HEADING-LINE-1
  180. AFTER ADVANCING 1 LINE
  181. WRITE STORE-RECORD-OUT FROM WS-HEADING-LINE-2
  182. AFTER ADVANCING 1 LINE
  183. .
  184. *
  185. *
  186. MAIN-LOOP-PARA.
  187. IF WS-RECORD-COUNT = 4
  188. PERFORM PAGE-HEADINGS-PARA
  189. END-IF
  190. PERFORM DETAIL-LINE-PARA
  191. PERFORM READ-PARA
  192. .
  193. *
  194. *
  195. PAGE-HEADINGS-PARA.
  196. MOVE SPACES TO STORE-RECORD-OUT
  197. WRITE STORE-RECORD-OUT AFTER ADVANCING 5 LINES
  198. PERFORM HEADINGS-PARA
  199. MOVE 0 TO WS-RECORD-COUNT
  200. .
  201. *
  202. *
  203. DETAIL-LINE-PARA.
  204. MOVE SPACES TO STORE-RECORD-OUT WS-DETAIL-LINE
  205. WRITE STORE-RECORD-OUT
  206. AFTER ADVANCING 1 LINE
  207. MOVE DISTRICT-CODE-IN TO DISTRICT-OUT
  208. MOVE STORE-CODE-IN TO STORE-OUT
  209. MOVE DEPARTMENT-CODE-IN TO DEPARTMENT-OUT
  210. MOVE TRANSACTION-TYPE-IN TO TRANSACTION-TYPE-OUT
  211. MOVE TRANSACTION-AMOUNT-IN-X TO TRANSACTION-AMOUNT-OUT
  212. WRITE STORE-RECORD-OUT FROM WS-DETAIL-LINE
  213. AFTER ADVANCING 1 LINE
  214. PERFORM CHECK-VALUES-PARA
  215. UNTIL WS-ERROR-FIELDS = 5
  216. PERFORM ACCUMULATE-TOTALS-PARA
  217. .
  218. *
  219. *
  220. CHECK-VALUES-PARA.
  221. MOVE "Y" TO WS-ERROR-FLAG
  222. MOVE SPACES TO WS-DETAIL-LINE
  223. IF WS-ERROR-FIELDS = 0
  224. PERFORM DISTRICT-CODE-PARA
  225. ELSE
  226. IF WS-ERROR-FIELDS = 1
  227. PERFORM STORE-CODE-PARA
  228. ELSE
  229. IF WS-ERROR-FIELDS = 2
  230. PERFORM DEPARTMENT-CODE-PARA
  231. ELSE
  232. IF WS-ERROR-FIELDS = 3
  233. PERFORM TRANSACTION-TYPE-PARA
  234. ELSE
  235. IF WS-ERROR-FIELDS = 4
  236. PERFORM TRANSACTION-AMOUNT-PARA
  237. END-IF
  238. END-IF
  239. END-IF
  240. END-IF
  241. END-IF
  242. PERFORM ERROR-FLAG-CHECK-PARA
  243. ADD 1 TO WS-ERROR-FIELDS
  244. .
  245. *
  246. *
  247. DISTRICT-CODE-PARA.
  248. MOVE DISTRICT-CODE-IN TO DISTRICT-OUT
  249. IF VALID-DISTRICT-CODE
  250. MOVE "N" TO WS-ERROR-FLAG
  251. END-IF
  252. IF DISTRICT-CODE-BLANK
  253. MOVE "DISTRICT CODE IS BLANK" TO ERROR-OUT
  254. ELSE
  255. IF DISTRICT-CODE-IN NOT NUMERIC
  256. MOVE "DISTRICT CODE IS NOT NUMERIC" TO ERROR-OUT
  257. ELSE
  258. MOVE "DISTRICT CODE IS INCORRECT" TO ERROR-OUT
  259. END-IF
  260. END-IF
  261. .
  262. *
  263. *
  264. STORE-CODE-PARA.
  265. MOVE STORE-CODE-IN TO STORE-OUT
  266. IF VALID-STORE-CODE
  267. MOVE "N" TO WS-ERROR-FLAG
  268. END-IF
  269. IF STORE-CODE-BLANK
  270. MOVE "STORE CODE IS BLANK" TO ERROR-OUT
  271. ELSE
  272. IF STORE-CODE-2-IN NOT ALPHABETIC
  273. MOVE "SECOND POSITION OF STORE CODE IS NOT
  274. ALPHABETIC" TO ERROR-OUT
  275. ELSE
  276. MOVE "SECOND POSITION OF STORE CODE IS INCORRECT" TO ERROR-OUT
  277. END-IF
  278. END-IF
  279. .
  280. *
  281. *
  282. DEPARTMENT-CODE-PARA.
  283. MOVE DEPARTMENT-CODE-IN TO DEPARTMENT-OUT
  284. IF DEPARTMENT-CODE-BLANK
  285. MOVE "DEPARTMENT CODE IS BLANK" TO ERROR-OUT
  286. ELSE
  287. IF DEPARTMENT-CODE-IN NOT NUMERIC
  288. MOVE "DEPARTMENT CODE IS NOT NUMBER" TO ERROR-OUT
  289. ELSE
  290. IF DEPT-CODE-1-IN = DISTRICT-CODE-IN
  291. MOVE "N" TO WS-ERROR-FLAG
  292. ELSE
  293. MOVE "DEPARTMENT CODE IS INCORRECT" TO ERROR-OUT
  294. END-IF
  295. END-IF
  296. END-IF
  297. .
  298.  
  299. *
  300. *
  301. TRANSACTION-TYPE-PARA.
  302. MOVE TRANSACTION-TYPE-IN TO TRANSACTION-TYPE-OUT
  303. IF TRANSACTION-TYPE-BLANK
  304. MOVE "TRANSACTION TYPE IS BLANK" TO ERROR-OUT
  305. ELSE
  306. IF TRANSACTION-TYPE-IN = "NS" OR "RT" OR "CN"
  307. MOVE "N" TO WS-ERROR-FLAG
  308. ELSE
  309. MOVE "TRANSACTION TYPE IS INVALID" TO ERROR-OUT
  310. END-IF
  311. END-IF
  312. .
  313. *
  314. *
  315. TRANSACTION-AMOUNT-PARA.
  316. IF TRANSACTION-AMOUNT-BLANK
  317. MOVE "TRANSACTION AMOUNT IS BLANK" TO ERROR-OUT
  318. ELSE
  319. IF TRANSACTION-AMOUNT-IN-9 NOT NUMERIC
  320. MOVE "TRANSACTION AMOUNT IS NOT NUMERIC" TO ERROR-OUT
  321. ELSE
  322. IF TRANSACTION-AMOUNT-IN-9 > 20000
  323. MOVE "TRANSACTION AMOUNT IS INVALID" TO ERROR-OUT
  324. ELSE
  325. MOVE "N" TO WS-ERROR-FLAG
  326. END-IF
  327. END-IF
  328. END-IF
  329.  
  330. .
  331. *
  332. *
  333. ERROR-FLAG-CHECK-PARA.
  334. IF WS-ERROR-FLAG = "Y"
  335. WRITE STORE-RECORD-OUT FROM WS-DETAIL-LINE
  336. AFTER ADVANCING 1 LINE
  337. MOVE "N" TO WS-GOOD-RECORD
  338. END-IF
  339. .
  340. *
  341. *
  342. ACCUMULATE-TOTALS-PARA.
  343. IF WS-GOOD-RECORD = "Y"
  344. ADD 1 TO WS-GOOD-RECORDS
  345. ADD TRANSACTION-AMOUNT-IN-9 TO WS-TRANSACTION-TOTAL
  346. ELSE
  347. ADD 1 TO WS-BAD-RECORDS
  348. END-IF
  349. MOVE "Y" TO WS-GOOD-RECORD
  350. MOVE 0 TO WS-ERROR-FIELDS
  351. ADD 1 TO WS-RECORD-COUNT
  352. .
  353. *
  354. *
  355. SUMMARY-PAGE-PARA.
  356. MOVE WS-GOOD-RECORDS TO GOOD-RECORDS-OUT
  357. MOVE WS-BAD-RECORDS TO BAD-RECORDS-OUT
  358. MOVE WS-TRANSACTION-TOTAL TO TRANSACTION-TOTAL-OUT
  359. WRITE STORE-RECORD-OUT FROM WS-SUMMARY-LINE-1
  360. AFTER ADVANCING 5 LINES
  361. WRITE STORE-RECORD-OUT FROM WS-SUMMARY-LINE-2
  362. AFTER ADVANCING 1 LINE
  363. WRITE STORE-RECORD-OUT FROM WS-SUMMARY-LINE-3
  364. AFTER ADVANCING 1 LINE
  365. .
  366. *
  367. *
  368. TERMINATION-PARA.
  369. CLOSE STORE-FILE-IN
  370. STORE-FILE-OUT
  371. STOP RUN
  372. .
Success #stdin #stdout 0.01s 6172KB
stdin
 44 8C3 44666 RT 1191222
 94 4E4 94738 XX 0087654
 38 4P9 83333    3899999
    8A4 22222 CN 3000000
 71 333       RT 0000150
 41 6D2 41444 CN 0077777
 9A     9A999 NS 6666TTT
 38 222 83419 RR
 11 2D9 11654 CN 0004444
 22 4D7 22824 NS 0012345
 38 3F9 38388 RT 0000222
 7  9-3 72    R  08
 20 4D3 123G9 RT 1111111
              SS
 88 888 BBBBB    9000000  
stdout
DISTRICT STORE DEPARTMENT TRANSACTION          ERROR
  CODE   CODE     CODE    TYPE AMOUNT          CODE

   44     8C3    44666     RT  1191222

   94     4E4    94738     XX  0087654
   94                                  DISTRICT CODE IS INCORRECT
                           XX          TRANSACTION TYPE IS INVALID

   38     4P9    83333         3899999
          4P9                          SECOND POSITION OF STORE CODE IS INCORRECT
                 83333                 DEPARTMENT CODE IS INCORRECT
                                       TRANSACTION TYPE IS BLANK
                                       TRANSACTION AMOUNT IS INVALID

          8A4    22222     CN  3000000
                                       DISTRICT CODE IS BLANK
          8A4                          SECOND POSITION OF STORE CODE IS INCORRECT
                 22222                 DEPARTMENT CODE IS INCORRECT
                                       TRANSACTION AMOUNT IS INVALID





DISTRICT STORE DEPARTMENT TRANSACTION          ERROR
  CODE   CODE     CODE    TYPE AMOUNT          CODE

   71     333              RT  0000150
          333                          SECOND POSITION OF STORE CODE IS NOT 
 ALPHABETIC
                                       DEPARTMENT CODE IS BLANK

   41     6D2    41444     CN  0077777

   9A            9A999     NS  6666TTT
   9A                                  DISTRICT CODE IS NOT NUMERIC
                                       STORE CODE IS BLANK
                 9A999                 DEPARTMENT CODE IS NOT NUMBER
                                       TRANSACTION AMOUNT IS NOT NUMERIC

   38     222    83419     RR
          222                          SECOND POSITION OF STORE CODE IS NOT 
 ALPHABETIC
                 83419                 DEPARTMENT CODE IS INCORRECT
                           RR          TRANSACTION TYPE IS INVALID
                                       TRANSACTION AMOUNT IS BLANK





DISTRICT STORE DEPARTMENT TRANSACTION          ERROR
  CODE   CODE     CODE    TYPE AMOUNT          CODE

   11     2D9    11654     CN  0004444
   11                                  DISTRICT CODE IS INCORRECT

   22     4D7    22824     NS  0012345

   38     3F9    38388     RT  0000222

   7      9-3    72        R   08
          9-3                          SECOND POSITION OF STORE CODE IS NOT 
 ALPHABETIC
                 72                    DEPARTMENT CODE IS NOT NUMBER
                           R           TRANSACTION TYPE IS INVALID
                                       TRANSACTION AMOUNT IS NOT NUMERIC





DISTRICT STORE DEPARTMENT TRANSACTION          ERROR
  CODE   CODE     CODE    TYPE AMOUNT          CODE

   20     4D3    123G9     RT  1111111
                 123G9                 DEPARTMENT CODE IS NOT NUMBER

                           SS
                                       DISTRICT CODE IS BLANK
                                       STORE CODE IS BLANK
                                       DEPARTMENT CODE IS BLANK
                           SS          TRANSACTION TYPE IS INVALID
                                       TRANSACTION AMOUNT IS BLANK

   88     888    BBBBB         9000000
   88                                  DISTRICT CODE IS INCORRECT
          888                          SECOND POSITION OF STORE CODE IS NOT 
 ALPHABETIC
                 BBBBB                 DEPARTMENT CODE IS NOT NUMBER
                                       TRANSACTION TYPE IS BLANK
                                       TRANSACTION AMOUNT IS INVALID




   TOTAL GOOD TRANSACTIONS:     4
    TOTAL BAD TRANSACTIONS:    11
TOTAL OF GOOD TRANSACTIONS:   $12,815.66