[x]
Posted via EE Mobile

Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again.

Question
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

9.3

Runtime Error

Asked by mustish1 in COBOL Programming Language

Hi: Can any one please tell me where that error is. I make three files to create data file in OUTPUT mode and then i run the main file but the main file gives runtime error.

Thanks.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
IDENTIFICATION DIVISION.
 PROGRAM-ID. VCHBLD01.
*---------------------------------
* Create a Voucher file for the
* bills payment system
*---------------------------------
 ENVIRONMENT DIVISION.
 INPUT-OUTPUT SECTION.
 FILE-CONTROL.
     SELECT VOUCHER-FILE
     	ASSIGN TO "VOUCHER"
     	ORGANIZATION IS INDEXED
     	RECORD KEY IS VOUCHER-NUMBER
     	ACCESS MODE IS DYNAMIC.
 DATA DIVISION.
 FILE SECTION.
 	FD  VOUCHER-FILE
 		LABEL RECORDS ARE STANDARD.
 	01	VOUCHER-RECORD.
 		05  VOUCHER-NUMBER           PIC 9(5).
 		05  VOUCHER-VENDOR           PIC 9(5).
 		05  VOUCHER-INVOICE          PIC X(15).
 		05  VOUCHER-FOR              PIC X(30).
 		05  VOUCHER-AMOUNT           PIC S9(6)V99.
 		05  VOUCHER-DATE             PIC 9(8).
 		05  VOUCHER-DUE              PIC 9(8).
 		05  VOUCHER-DEDUCTIBLE       PIC X.
 		05  VOUCHER-SELECTED         PIC X.
 		05  VOUCHER-PAID-AMOUNT      PIC S9(6)V99.
 		05  VOUCHER-PAID-DATE        PIC 9(8).
 		05  VOUCHER-CHECK-NO         PIC 9(6).
 
 WORKING-STORAGE SECTION.
 
 PROCEDURE DIVISION.
 PROGRAM-BEGIN.
     OPEN OUTPUT VOUCHER-FILE.
     CLOSE VOUCHER-FILE.
 
 PROGRAM-EXIT.
     EXIT PROGRAM.
 
 PROGRAM-DONE.
     STOP RUN.
------------------------------------------------------------------------
 IDENTIFICATION DIVISION.
 PROGRAM-ID. VNDBLD01.
*------------------------------------------------
* Create an Empty Vendor File.
*------------------------------------------------
 ENVIRONMENT DIVISION.
 INPUT-OUTPUT SECTION.
 FILE-CONTROL.
 
     SELECT VENDOR-FILE
         ASSIGN TO "vendor"
         ORGANIZATION IS INDEXED
         RECORD KEY IS VENDOR-NUMBER
         ACCESS MODE IS DYNAMIC.
 
 DATA DIVISION.
 FILE SECTION.
 
 FD  VENDOR-FILE
     LABEL RECORDS ARE STANDARD.
 01  VENDOR-RECORD.
     05  VENDOR-NUMBER                    PIC 9(5).
     05  VENDOR-NAME                      PIC X(30).
     05  VENDOR-ADDRESS-1                 PIC X(30).
     05  VENDOR-ADDRESS-2                 PIC X(30).
     05  VENDOR-CITY                      PIC X(20).
     05  VENDOR-STATE                     PIC X(2).
     05  VENDOR-ZIP                       PIC X(10).
     05  VENDOR-CONTACT                   PIC X(30).
     05  VENDOR-PHONE                     PIC X(15).
 
 WORKING-STORAGE SECTION.
 
 PROCEDURE DIVISION.
 PROGRAM-BEGIN.
     OPEN OUTPUT VENDOR-FILE.
     CLOSE VENDOR-FILE.
 
 PROGRAM-DONE.
     STOP RUN.
-----------------------------------------------
 IDENTIFICATION DIVISION.
 PROGRAM-ID. CTLBLD01.
*---------------------------------
* Create a Control file for the
* bills payment system and write
* the initial record.
*---------------------------------
 ENVIRONMENT DIVISION.
 INPUT-OUTPUT SECTION.
 FILE-CONTROL.
 
     SELECT CONTROL-FILE
     	ASSIGN TO "CONTROL"
     	ORGANIZATION IS INDEXED
     	RECORD KEY IS CONTROL-KEY
     	ACCESS MODE IS DYNAMIC.
 
 DATA DIVISION.
 FILE SECTION.
 
  FD  CONTROL-FILE
     	LABEL RECORDS ARE STANDARD.
  01  CONTROL-RECORD.
     	05  CONTROL-KEY              PIC 9.
     	05  CONTROL-LAST-VOUCHER     PIC 9(5).
 
 WORKING-STORAGE SECTION.
 
 PROCEDURE DIVISION.
 PROGRAM-BEGIN.
     OPEN OUTPUT CONTROL-FILE.
     MOVE 1 TO CONTROL-KEY.
     MOVE ZEROES TO CONTROL-LAST-VOUCHER.
     WRITE CONTROL-RECORD.
     CLOSE CONTROL-FILE.
 
 PROGRAM-EXIT.
     EXIT PROGRAM.
 
 PROGRAM-DONE.
     STOP RUN.
-------------------------------------------
 IDENTIFICATION DIVISION.
 PROGRAM-ID. VCHMNT01.
 ENVIRONMENT DIVISION.
 INPUT-OUTPUT SECTION.
 FILE-CONTROL.
		SELECT VENDOR-FILE
			ASSIGN TO "vendor"
			ORGANIZATION IS INDEXED
			RECORD KEY IS VENDOR-NUMBER
			ALTERNATE KEY IS VENDOR-NAME WITH DUPLICATES
			ACCESS MODE IS DYNAMIC.
		
		SELECT VOUCHER-FILE
			ASSIGN TO "VOUCHER"
			ORGANIZATION IS INDEXED
			RECORD KEY IS VOUCHER-NUMBER
			ACCESS MODE IS DYNAMIC.
 
     SELECT CONTROL-FILE
     		ASSIGN TO "CONTROL"
     		ORGANIZATION IS INDEXED
     		RECORD KEY IS CONTROL-KEY
     		ACCESS MODE IS DYNAMIC.
 
 DATA DIVISION.
 FILE SECTION.
 
    FD  	VENDOR-FILE
     		LABEL RECORDS ARE STANDARD.
    01  	VENDOR-RECORD.
     		05  VENDOR-NUMBER            PIC 9(5).		
     		05  VENDOR-NAME              PIC X(30).
     		05  VENDOR-ADDRESS-1         PIC X(30).
     		05  VENDOR-ADDRESS-2         PIC X(30).
     		05  VENDOR-CITY              PIC X(20).
     		05  VENDOR-STATE             PIC X(2).
     		05  VENDOR-ZIP               PIC X(10).
     		05  VENDOR-CONTACT           PIC X(30).
     		05  VENDOR-PHONE             PIC X(15).
 
    FD  	VOUCHER-FILE
     		LABEL RECORDS ARE STANDARD.
    01  	VOUCHER-RECORD.
     		05  VOUCHER-NUMBER           PIC 9(5).
     		05  VOUCHER-VENDOR           PIC 9(5).
     		05  VOUCHER-INVOICE          PIC X(15).
     		05  VOUCHER-FOR              PIC X(30).
     		05  VOUCHER-AMOUNT           PIC S9(6)V99.
     		05  VOUCHER-DATE             PIC 9(8).
     		05  VOUCHER-DUE              PIC 9(8).
     		05  VOUCHER-DEDUCTIBLE       PIC X.
     		05  VOUCHER-SELECTED         PIC X.
     		05  VOUCHER-PAID-AMOUNT      PIC S9(6)V99.
     		05  VOUCHER-PAID-DATE        PIC 9(8).
     		05  VOUCHER-CHECK-NO         PIC 9(6).
 
    FD  CONTROL-FILE
     		LABEL RECORDS ARE STANDARD.
    01  CONTROL-RECORD.
     		05  CONTROL-KEY              PIC 9.
     		05  CONTROL-LAST-VOUCHER     PIC 9(5).
     		
 WORKING-STORAGE SECTION.
 
 77  MENU-PICK                    PIC 9.
     88  MENU-PICK-IS-VALID       VALUES 0 THRU 4.
 
 	77  THE-MODE                     PIC X(7).
 	77  WHICH-FIELD                  PIC 9.
 	77  OK-TO-DELETE                 PIC X.
 	77  VOUCHER-RECORD-FOUND         PIC X.
 	77  CONTROL-RECORD-FOUND         PIC X.
 	77  VENDOR-RECORD-FOUND          PIC X.
 	77  A-DUMMY                      PIC X.
 	77  ADD-ANOTHER                  PIC X.
 
 	77  VOUCHER-NUMBER-FIELD         PIC Z(5).
 	77  VOUCHER-AMOUNT-FIELD         PIC 99999999.
 	77  VOUCHER-PAID-AMOUNT-FIELD    PIC ZZZ,ZZ9.99-.
 
 	77  ERROR-MESSAGE                PIC X(79) VALUE SPACE.
	77  UPPER-ALPHA       PIC X(26) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
  77  LOWER-ALPHA       PIC X(26) VALUE "abcdefghijklmnopqrstuvwxyz".
	77  FORMATTED-DATE     PIC 99999999.
	77  DATE-MMDDCCYY      PIC 9(8).
	77  DATE-QUOTIENT      PIC 9999.
	77  DATE-REMAINDER     PIC 9999.
	77  VALID-DATE-FLAG    PIC X.
		88  DATE-IS-INVALID  VALUE "N".
		88  DATE-IS-ZERO     VALUE "0".
		88  DATE-IS-VALID    VALUE "Y".
		88  DATE-IS-OK       VALUES "Y" "0".
	01  DATE-CCYYMMDD      PIC 9(8).
	01  FILLER REDEFINES DATE-CCYYMMDD.
		05  DATE-YYYY      PIC 9999.
		05  DATE-MM        PIC 99.
		05  DATE-DD        PIC 99.
	77  DATE-PROMPT        PIC X(50) VALUE SPACE.
	77  DATE-ERROR-MESSAGE PIC X(50) VALUE SPACE.
  77  ZERO-DATE-IS-OK    PIC X VALUE "N".
  
 PROCEDURE DIVISION.
 PROGRAM-BEGIN.
     PERFORM OPENING-PROCEDURE.
     PERFORM MAIN-PROCESS.
     PERFORM CLOSING-PROCEDURE.
 
 PROGRAM-EXIT.
     EXIT PROGRAM.
 
 PROGRAM-DONE.
     STOP RUN.
 
 OPENING-PROCEDURE.
     OPEN I-O VOUCHER-FILE.
     OPEN I-O VENDOR-FILE.
     OPEN I-O CONTROL-FILE.
 
 CLOSING-PROCEDURE.
     CLOSE VOUCHER-FILE.
     CLOSE VENDOR-FILE.
     CLOSE CONTROL-FILE.
 
 MAIN-PROCESS.
     PERFORM GET-MENU-PICK.
     PERFORM MAINTAIN-THE-FILE
         UNTIL MENU-PICK = 0.
 
*---------------------------------
* MENU
*---------------------------------
 GET-MENU-PICK.
     PERFORM DISPLAY-THE-MENU.
     PERFORM ACCEPT-MENU-PICK.
     PERFORM RE-ACCEPT-MENU-PICK
         UNTIL MENU-PICK-IS-VALID.
 
 DISPLAY-THE-MENU.
     PERFORM CLEAR-SCREEN.
     DISPLAY "    PLEASE SELECT:".
     DISPLAY " ".
     DISPLAY "          1.  ADD RECORDS".
     DISPLAY "          2.  CHANGE A RECORD".
     DISPLAY "          3.  LOOK UP A RECORD".
     DISPLAY "          4.  DELETE A RECORD".
     DISPLAY " ".
     DISPLAY "          0.  EXIT".
     PERFORM SCROLL-LINE 8 TIMES.
 
 ACCEPT-MENU-PICK.
     DISPLAY "YOUR CHOICE (0-4)?".
     ACCEPT MENU-PICK FROM CONSOLE.
 
 RE-ACCEPT-MENU-PICK.
     DISPLAY "INVALID SELECTION - PLEASE RE-TRY.".
     PERFORM ACCEPT-MENU-PICK.
 
 CLEAR-SCREEN.
     PERFORM SCROLL-LINE 25 TIMES.
 
 SCROLL-LINE.
     DISPLAY " ".
 
 MAINTAIN-THE-FILE.
     PERFORM DO-THE-PICK.
     PERFORM GET-MENU-PICK.
 
 DO-THE-PICK.
     IF MENU-PICK = 1
         PERFORM ADD-MODE
     ELSE
     IF MENU-PICK = 2
         PERFORM CHANGE-MODE
     ELSE
     IF MENU-PICK = 3
         PERFORM INQUIRE-MODE
     ELSE
     IF MENU-PICK = 4
         PERFORM DELETE-MODE.
 
*---------------------------------
* ADD
*---------------------------------
 ADD-MODE.
     MOVE "ADD" TO THE-MODE.
     MOVE "Y" TO ADD-ANOTHER.
     PERFORM GET-NEW-RECORD-KEY.
     PERFORM ADD-RECORDS
        UNTIL ADD-ANOTHER = "N".
 
 GET-NEW-RECORD-KEY.
     PERFORM ACCEPT-NEW-RECORD-KEY.
     PERFORM RE-ACCEPT-NEW-RECORD-KEY
         UNTIL VOUCHER-RECORD-FOUND = "N".
 
     PERFORM DISPLAY-VOUCHER-NUMBER.
 
 ACCEPT-NEW-RECORD-KEY.
     PERFORM INIT-VOUCHER-RECORD.
     PERFORM RETRIEVE-NEXT-VOUCHER-NUMBER.
 
     PERFORM READ-VOUCHER-RECORD.
 
 RE-ACCEPT-NEW-RECORD-KEY.
     PERFORM ACCEPT-NEW-RECORD-KEY.
 
 RETRIEVE-NEXT-VOUCHER-NUMBER.
     PERFORM READ-CONTROL-RECORD.
     ADD 1 TO CONTROL-LAST-VOUCHER.
     MOVE CONTROL-LAST-VOUCHER TO VOUCHER-NUMBER.
     PERFORM REWRITE-CONTROL-RECORD.
 
 ADD-RECORDS.
     PERFORM ENTER-REMAINING-FIELDS.
     PERFORM WRITE-VOUCHER-RECORD.
     PERFORM GET-ADD-ANOTHER.
 
 GET-ADD-ANOTHER.
     PERFORM ACCEPT-ADD-ANOTHER.
     PERFORM RE-ACCEPT-ADD-ANOTHER
        UNTIL ADD-ANOTHER = "Y" OR "N".
 
 ACCEPT-ADD-ANOTHER.
     DISPLAY "ADD ANOTHER VOUCHER(Y/N)?".
     ACCEPT ADD-ANOTHER FROM CONSOLE.
 
     INSPECT ADD-ANOTHER
         CONVERTING LOWER-ALPHA
         TO         UPPER-ALPHA.
 
     IF ADD-ANOTHER = "Y"
         PERFORM GET-NEW-RECORD-KEY.
 
 RE-ACCEPT-ADD-ANOTHER.
     DISPLAY "YOU MUST ENTER YES OR NO".
     PERFORM ACCEPT-ADD-ANOTHER.
 
 ENTER-REMAINING-FIELDS.
     PERFORM ENTER-VOUCHER-VENDOR.
     PERFORM ENTER-VOUCHER-INVOICE.
     PERFORM ENTER-VOUCHER-FOR.
     PERFORM ENTER-VOUCHER-AMOUNT.
     PERFORM ENTER-VOUCHER-DATE.
     PERFORM ENTER-VOUCHER-DUE.
     PERFORM ENTER-VOUCHER-DEDUCTIBLE.
     PERFORM ENTER-VOUCHER-SELECTED.
 
*---------------------------------
* CHANGE
*---------------------------------
 CHANGE-MODE.
     MOVE "CHANGE" TO THE-MODE.
     PERFORM GET-EXISTING-RECORD.
     PERFORM CHANGE-RECORDS
        UNTIL VOUCHER-NUMBER = ZEROES.
 
 CHANGE-RECORDS.
     PERFORM GET-FIELD-TO-CHANGE.
     PERFORM CHANGE-ONE-FIELD
         UNTIL WHICH-FIELD = ZERO.
     PERFORM GET-EXISTING-RECORD.
 
 GET-FIELD-TO-CHANGE.
     PERFORM DISPLAY-ALL-FIELDS.
     PERFORM ASK-WHICH-FIELD.
 
 ASK-WHICH-FIELD.
     PERFORM ACCEPT-WHICH-FIELD.
     PERFORM RE-ACCEPT-WHICH-FIELD
         UNTIL WHICH-FIELD < 8.
 
 ACCEPT-WHICH-FIELD.
     DISPLAY "ENTER THE NUMBER OF THE FIELD".
     DISPLAY "TO CHANGE (1-7) OR 0 TO EXIT".
     ACCEPT WHICH-FIELD FROM CONSOLE.
 
 RE-ACCEPT-WHICH-FIELD.
     DISPLAY "INVALID ENTRY".
     PERFORM ACCEPT-WHICH-FIELD.
 
 CHANGE-ONE-FIELD.
     PERFORM CHANGE-THIS-FIELD.
     PERFORM GET-FIELD-TO-CHANGE.
 
 CHANGE-THIS-FIELD.
     IF WHICH-FIELD = 1
         PERFORM ENTER-VOUCHER-VENDOR.
     IF WHICH-FIELD = 2
         PERFORM ENTER-VOUCHER-INVOICE.
     IF WHICH-FIELD = 3
         PERFORM ENTER-VOUCHER-FOR.
     IF WHICH-FIELD = 4
         PERFORM ENTER-VOUCHER-AMOUNT.
     IF WHICH-FIELD = 5
         PERFORM ENTER-VOUCHER-DATE.
     IF WHICH-FIELD = 6
         PERFORM ENTER-VOUCHER-DUE.
     IF WHICH-FIELD = 7
         PERFORM ENTER-VOUCHER-DEDUCTIBLE.
 
     PERFORM REWRITE-VOUCHER-RECORD.
 
*---------------------------------
* INQUIRE
*---------------------------------
 INQUIRE-MODE.
     MOVE "DISPLAY" TO THE-MODE.
     PERFORM GET-EXISTING-RECORD.
     PERFORM INQUIRE-RECORDS
        UNTIL VOUCHER-NUMBER = ZEROES.
 
 INQUIRE-RECORDS.
     PERFORM DISPLAY-ALL-FIELDS.
     PERFORM GET-EXISTING-RECORD.
 
*---------------------------------
* DELETE
*---------------------------------
 DELETE-MODE.
     MOVE "DELETE" TO THE-MODE.
     PERFORM GET-EXISTING-RECORD.
     PERFORM DELETE-RECORDS
        UNTIL VOUCHER-NUMBER = ZEROES.
 
 DELETE-RECORDS.
     PERFORM DISPLAY-ALL-FIELDS.
 
     PERFORM ASK-OK-TO-DELETE.
 
     IF OK-TO-DELETE = "Y"
         PERFORM DELETE-VOUCHER-RECORD.
 
     PERFORM GET-EXISTING-RECORD.
 
 ASK-OK-TO-DELETE.
     PERFORM ACCEPT-OK-TO-DELETE.
 
     PERFORM RE-ACCEPT-OK-TO-DELETE
        UNTIL OK-TO-DELETE = "Y" OR "N".
 
 ACCEPT-OK-TO-DELETE.
     DISPLAY "DELETE THIS RECORD (Y/N)?".
     ACCEPT OK-TO-DELETE.
     INSPECT OK-TO-DELETE
      CONVERTING LOWER-ALPHA TO UPPER-ALPHA.
 
 RE-ACCEPT-OK-TO-DELETE.
     DISPLAY "YOU MUST ENTER YES OR NO".
     PERFORM ACCEPT-OK-TO-DELETE.
 
*---------------------------------
* Routines shared by all modes
*---------------------------------
 INIT-VOUCHER-RECORD.
     MOVE SPACE TO VOUCHER-INVOICE
                   VOUCHER-FOR
                   VOUCHER-DEDUCTIBLE
                   VOUCHER-SELECTED.
     MOVE ZEROES TO VOUCHER-NUMBER
                    VOUCHER-VENDOR
                    VOUCHER-AMOUNT
                    VOUCHER-DATE
                    VOUCHER-DUE
                    VOUCHER-PAID-AMOUNT
                    VOUCHER-PAID-DATE
                    VOUCHER-CHECK-NO.
 
*---------------------------------
* Routines shared Add and Change
*---------------------------------
 ENTER-VOUCHER-VENDOR.
     PERFORM ACCEPT-VOUCHER-VENDOR.
     PERFORM RE-ACCEPT-VOUCHER-VENDOR
         UNTIL VOUCHER-VENDOR NOT = ZEROES AND
               VENDOR-RECORD-FOUND = "Y".
 
 ACCEPT-VOUCHER-VENDOR.
     DISPLAY "ENTER VENDOR".
     ACCEPT VOUCHER-VENDOR FROM CONSOLE.
     PERFORM EDIT-CHECK-VOUCHER-VENDOR.
     PERFORM DISPLAY-VOUCHER-VENDOR.
 
 RE-ACCEPT-VOUCHER-VENDOR.
     DISPLAY ERROR-MESSAGE.
     PERFORM ACCEPT-VOUCHER-VENDOR.
 
 EDIT-CHECK-VOUCHER-VENDOR.
     PERFORM EDIT-VOUCHER-VENDOR.
     PERFORM CHECK-VOUCHER-VENDOR.
 
 EDIT-VOUCHER-VENDOR.
 
 CHECK-VOUCHER-VENDOR.
     PERFORM VOUCHER-VENDOR-REQUIRED.
     IF VOUCHER-VENDOR NOT = ZEROES
         PERFORM VOUCHER-VENDOR-ON-FILE.
 
 VOUCHER-VENDOR-REQUIRED.
     IF VOUCHER-VENDOR = ZEROES
         MOVE "VENDOR MUST BE ENTERED"
           TO ERROR-MESSAGE.
 
 VOUCHER-VENDOR-ON-FILE.
     MOVE VOUCHER-VENDOR TO VENDOR-NUMBER.
     PERFORM READ-VENDOR-RECORD.
     IF VENDOR-RECORD-FOUND = "N"
         MOVE "VENDOR NOT ON FILE"
           TO ERROR-MESSAGE.
 
 ENTER-VOUCHER-INVOICE.
     PERFORM ACCEPT-VOUCHER-INVOICE.
     PERFORM RE-ACCEPT-VOUCHER-INVOICE
         UNTIL VOUCHER-INVOICE NOT = SPACE.
 
 ACCEPT-VOUCHER-INVOICE.
     DISPLAY "ENTER INVOICE NUMBER".
     ACCEPT VOUCHER-INVOICE.
     INSPECT VOUCHER-INVOICE
         CONVERTING LOWER-ALPHA
         TO         UPPER-ALPHA.
 
 RE-ACCEPT-VOUCHER-INVOICE.
     DISPLAY "INVOICE MUST BE ENTERED".
     PERFORM ACCEPT-VOUCHER-INVOICE.
 
 ENTER-VOUCHER-FOR.
     PERFORM ACCEPT-VOUCHER-FOR.
     PERFORM RE-ACCEPT-VOUCHER-FOR
         UNTIL VOUCHER-FOR NOT = SPACE.
 
 ACCEPT-VOUCHER-FOR.
     DISPLAY "WHAT FOR?".
     ACCEPT VOUCHER-FOR FROM CONSOLE.
     INSPECT VOUCHER-FOR
         CONVERTING LOWER-ALPHA
         TO         UPPER-ALPHA.
 
 RE-ACCEPT-VOUCHER-FOR.
     DISPLAY "A DESCRIPTION MUST BE ENTERED".
     PERFORM ACCEPT-VOUCHER-FOR.
 
 ENTER-VOUCHER-AMOUNT.
     PERFORM ACCEPT-VOUCHER-AMOUNT.
     PERFORM RE-ACCEPT-VOUCHER-AMOUNT
         UNTIL VOUCHER-AMOUNT NOT = ZEROES.
 
 ACCEPT-VOUCHER-AMOUNT.
     DISPLAY "ENTER INVOICE AMOUNT".
     ACCEPT VOUCHER-AMOUNT-FIELD FROM CONSOLE.
     MOVE VOUCHER-AMOUNT-FIELD TO VOUCHER-AMOUNT.
 
 RE-ACCEPT-VOUCHER-AMOUNT.
     DISPLAY "AMOUNT MUST NOT BE ZERO".
     PERFORM ACCEPT-VOUCHER-AMOUNT.
 
 ENTER-VOUCHER-DATE.
     MOVE "N" TO ZERO-DATE-IS-OK.
     MOVE "ENTER INVOICE DATE(MM/DD/CCYY)?"
            TO DATE-PROMPT.
     MOVE "AN INVOICE DATE IS REQUIRED"
            TO DATE-ERROR-MESSAGE.
     PERFORM GET-A-DATE.
     MOVE DATE-CCYYMMDD TO VOUCHER-DATE.
 
 ENTER-VOUCHER-DUE.
     MOVE "N" TO ZERO-DATE-IS-OK.
     MOVE "ENTER DUE DATE(MM/DD/CCYY)?"
            TO DATE-PROMPT.
     MOVE "A DUE DATE IS REQUIRED"
            TO DATE-ERROR-MESSAGE.
     PERFORM GET-A-DATE.
     MOVE DATE-CCYYMMDD TO VOUCHER-DUE.
 
 ENTER-VOUCHER-DEDUCTIBLE.
     PERFORM ACCEPT-VOUCHER-DEDUCTIBLE.
     PERFORM RE-ACCEPT-VOUCHER-DEDUCTIBLE
         UNTIL VOUCHER-DEDUCTIBLE = "Y" OR "N".
 
 ACCEPT-VOUCHER-DEDUCTIBLE.
     DISPLAY "IS THIS TAX DEDUCTIBLE?".
     ACCEPT VOUCHER-DEDUCTIBLE FROM CONSOLE.
     INSPECT VOUCHER-DEDUCTIBLE
         CONVERTING LOWER-ALPHA
         TO         UPPER-ALPHA.
 
 RE-ACCEPT-VOUCHER-DEDUCTIBLE.
     DISPLAY "MUST BE YES OR NO".
     PERFORM ACCEPT-VOUCHER-DEDUCTIBLE.
 
 ENTER-VOUCHER-SELECTED.
     MOVE "N" TO VOUCHER-SELECTED.
 
*---------------------------------
* Routines shared by Change,
* Inquire and Delete
*---------------------------------
 GET-EXISTING-RECORD.
     PERFORM ACCEPT-EXISTING-KEY.
     PERFORM RE-ACCEPT-EXISTING-KEY
         UNTIL VOUCHER-RECORD-FOUND = "Y" OR
               VOUCHER-NUMBER = ZEROES.
 
 ACCEPT-EXISTING-KEY.
     PERFORM INIT-VOUCHER-RECORD.
     PERFORM ENTER-VOUCHER-NUMBER.
     IF VOUCHER-NUMBER NOT = ZEROES
         PERFORM READ-VOUCHER-RECORD.
 
 RE-ACCEPT-EXISTING-KEY.
     DISPLAY "RECORD NOT FOUND"
     PERFORM ACCEPT-EXISTING-KEY.
 
 ENTER-VOUCHER-NUMBER.
     DISPLAY "ENTER VOUCHER NUMBER TO "
             THE-MODE.
     ACCEPT VOUCHER-NUMBER FROM CONSOLE.
 
 DISPLAY-ALL-FIELDS.
     DISPLAY " ".
     PERFORM DISPLAY-VOUCHER-NUMBER.
     PERFORM DISPLAY-VOUCHER-VENDOR.
     PERFORM DISPLAY-VOUCHER-INVOICE.
     PERFORM DISPLAY-VOUCHER-FOR.
     PERFORM DISPLAY-VOUCHER-AMOUNT.
     PERFORM DISPLAY-VOUCHER-DATE.
     PERFORM DISPLAY-VOUCHER-DUE.
     PERFORM DISPLAY-VOUCHER-DEDUCTIBLE.
     IF VOUCHER-PAID-DATE = ZEROES
         PERFORM DISPLAY-VOUCHER-SELECTED.
     IF VOUCHER-PAID-DATE NOT = ZEROES
         PERFORM DISPLAY-VOUCHER-PAID-AMOUNT
         PERFORM DISPLAY-VOUCHER-PAID-DATE
         PERFORM DISPLAY-VOUCHER-CHECK-NO.
     DISPLAY " ".
 
 DISPLAY-VOUCHER-NUMBER.
     DISPLAY "   VOUCHER NUMBER: " VOUCHER-NUMBER.
 
 DISPLAY-VOUCHER-VENDOR.
     PERFORM VOUCHER-VENDOR-ON-FILE.
     IF VENDOR-RECORD-FOUND = "N"
         MOVE "**Not found**" TO VENDOR-NAME.
     DISPLAY "1. VENDOR: "
             VOUCHER-VENDOR " "
             VENDOR-NAME.
 
 DISPLAY-VOUCHER-INVOICE.
     DISPLAY "2. INVOICE: " VOUCHER-INVOICE.
 
 DISPLAY-VOUCHER-FOR.
     DISPLAY "3. FOR: " VOUCHER-FOR.
 
 DISPLAY-VOUCHER-AMOUNT.
     MOVE VOUCHER-AMOUNT TO VOUCHER-AMOUNT-FIELD.
     DISPLAY "4. AMOUNT: " VOUCHER-AMOUNT-FIELD.
 
 DISPLAY-VOUCHER-DATE.
     MOVE VOUCHER-DATE TO DATE-CCYYMMDD.
     PERFORM FORMAT-THE-DATE.
     DISPLAY "5. INVOICE DATE: " FORMATTED-DATE.
 
 DISPLAY-VOUCHER-DUE.
     MOVE VOUCHER-DUE TO DATE-CCYYMMDD.
     PERFORM FORMAT-THE-DATE.
     DISPLAY "6. DUE DATE: " FORMATTED-DATE.
 
 DISPLAY-VOUCHER-DEDUCTIBLE.
     DISPLAY "7. DEDUCTIBLE: " VOUCHER-DEDUCTIBLE.
 
 DISPLAY-VOUCHER-SELECTED.
     DISPLAY "   SELECTED FOR PAYMENT: " VOUCHER-SELECTED.
 
 DISPLAY-VOUCHER-PAID-AMOUNT.
     MOVE VOUCHER-PAID-AMOUNT TO VOUCHER-PAID-AMOUNT-FIELD.
     DISPLAY "   PAID: " VOUCHER-PAID-AMOUNT-FIELD.
 
 DISPLAY-VOUCHER-PAID-DATE.
     MOVE VOUCHER-PAID-DATE TO DATE-CCYYMMDD.
     PERFORM FORMAT-THE-DATE.
     DISPLAY "   PAID ON: " FORMATTED-DATE.
 
 DISPLAY-VOUCHER-CHECK-NO.
     DISPLAY "   CHECK: " VOUCHER-CHECK-NO.
 
*---------------------------------
* File I-O Routines
*---------------------------------
 READ-VOUCHER-RECORD.
     MOVE "Y" TO VOUCHER-RECORD-FOUND.
     READ VOUCHER-FILE RECORD
       INVALID KEY
          MOVE "N" TO VOUCHER-RECORD-FOUND.
 
*or  READ VOUCHER-FILE RECORD WITH LOCK
*      INVALID KEY
*         MOVE "N" TO VOUCHER-RECORD-FOUND.
 
*or  READ VOUCHER-FILE RECORD WITH HOLD
*      INVALID KEY
*         MOVE "N" TO VOUCHER-RECORD-FOUND.
 
 WRITE-VOUCHER-RECORD.
     WRITE VOUCHER-RECORD
         INVALID KEY
         DISPLAY "RECORD ALREADY ON FILE".
 
 REWRITE-VOUCHER-RECORD.
     REWRITE VOUCHER-RECORD
         INVALID KEY
         DISPLAY "ERROR REWRITING VENDOR RECORD".
 
 DELETE-VOUCHER-RECORD.
     DELETE VOUCHER-FILE RECORD
         INVALID KEY
         DISPLAY "ERROR DELETING VENDOR RECORD".
 
 READ-VENDOR-RECORD.
     MOVE "Y" TO VENDOR-RECORD-FOUND.
     READ VENDOR-FILE RECORD
       INVALID KEY
          MOVE "N" TO VENDOR-RECORD-FOUND.
 
 READ-CONTROL-RECORD.
     MOVE 1 TO CONTROL-KEY.
     MOVE "Y" TO CONTROL-RECORD-FOUND.
     READ CONTROL-FILE RECORD
         INVALID KEY
          MOVE "N" TO CONTROL-RECORD-FOUND
          DISPLAY "CONTROL FILE IS INVALID".
 
 REWRITE-CONTROL-RECORD.
     REWRITE CONTROL-RECORD
         INVALID KEY
         DISPLAY "ERROR REWRITING CONTROL RECORD".
 
 GET-A-DATE.
     PERFORM ACCEPT-A-DATE.
     PERFORM RE-ACCEPT-A-DATE
         UNTIL DATE-IS-OK.
 
 ACCEPT-A-DATE.
     IF DATE-PROMPT = SPACE
         DISPLAY "ENTER A DATE (MM/DD/YYYY)"
     ELSE
         DISPLAY DATE-PROMPT.
 
     ACCEPT FORMATTED-DATE FROM CONSOLE.
 
     PERFORM EDIT-CHECK-DATE.
 
 RE-ACCEPT-A-DATE.
     IF DATE-ERROR-MESSAGE = SPACE
         DISPLAY "INVALID DATE"
     ELSE
         DISPLAY DATE-ERROR-MESSAGE.
 
     PERFORM ACCEPT-A-DATE.
 
 EDIT-CHECK-DATE.
     PERFORM EDIT-DATE.
     PERFORM CHECK-DATE.
     MOVE DATE-MMDDCCYY TO FORMATTED-DATE.
 
 EDIT-DATE.
     MOVE FORMATTED-DATE TO DATE-MMDDCCYY.
     PERFORM CONVERT-TO-CCYYMMDD.
 
*---------------------------------
* USAGE:
*  MOVE date(ccyymmdd) TO DATE-CCYYMMDD.
*  PERFORM CONVERT-TO-MMDDCCYY.
*
* RETURNS:
*  DATE-MMDDCCYY.
*---------------------------------
 CONVERT-TO-MMDDCCYY.
     COMPUTE DATE-MMDDCCYY =
             DATE-CCYYMMDD * 10000.0001.
 
*---------------------------------
* USAGE:
*  MOVE date(mmddccyy) TO DATE-MMDDCCYY.
*  PERFORM CONVERT-TO-CCYYMMDD.
*
* RETURNS:
*  DATE-CCYYMMDD.
*---------------------------------
 CONVERT-TO-CCYYMMDD.
     COMPUTE DATE-CCYYMMDD =
             DATE-MMDDCCYY * 10000.0001.
 
 
*---------------------------------
 CHECK-DATE.
     MOVE "Y" TO VALID-DATE-FLAG.
     IF DATE-CCYYMMDD = ZEROES
         IF ZERO-DATE-IS-OK = "Y"
             MOVE "0" TO VALID-DATE-FLAG
         ELSE
             MOVE "N" TO VALID-DATE-FLAG
     ELSE
     IF DATE-MM < 1 OR DATE-MM > 12
         MOVE "N" TO VALID-DATE-FLAG
     ELSE
     IF DATE-DD < 1 OR DATE-DD > 31
         MOVE "N" TO VALID-DATE-FLAG
     ELSE
     IF (DATE-DD > 30) AND
        (DATE-MM = 2 OR 4 OR 6 OR 9 OR 11)
         MOVE "N" TO VALID-DATE-FLAG
     ELSE
     IF DATE-DD > 29 AND DATE-MM = 2
         MOVE "N" TO VALID-DATE-FLAG
     ELSE
     IF DATE-DD = 29 AND DATE-MM = 2
         DIVIDE DATE-YYYY BY 400 GIVING DATE-QUOTIENT
                REMAINDER DATE-REMAINDER
         IF DATE-REMAINDER = 0
             MOVE "Y" TO VALID-DATE-FLAG
         ELSE
             DIVIDE DATE-YYYY BY 100 GIVING DATE-QUOTIENT
                    REMAINDER DATE-REMAINDER
             IF DATE-REMAINDER = 0
                 MOVE "N" TO VALID-DATE-FLAG
             ELSE
                 DIVIDE DATE-YYYY BY 4 GIVING DATE-QUOTIENT
                        REMAINDER DATE-REMAINDER
                 IF DATE-REMAINDER = 0
                     MOVE "Y" TO VALID-DATE-FLAG
                 ELSE
                     MOVE "N" TO VALID-DATE-FLAG.
*---------------------------------
* USAGE:
*  MOVE date(ccyymmdd) TO DATE-CCYYMMDD.
*  PERFORM FORMAT-THE-DATE.
*
* RETURNS:
*  FORMATTED-DATE
*  DATE-MMDDCCYY.
*---------------------------------
 FORMAT-THE-DATE.
     PERFORM CONVERT-TO-MMDDCCYY.
     MOVE DATE-MMDDCCYY TO FORMATTED-DATE.
[+][-]03/29/09 07:50 AM, ID: 24012918Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]03/29/09 08:29 AM, ID: 24013057Accepted Solution

View this solution now by starting your 30-day free trial. Setting up your free trial is quick, easy, and secure. We will return you to this solution, unlocked, when you're done.

About this solution

Zone: COBOL Programming Language
Sign Up Now!
Solution Provided By: woolmilkporc
Participating Experts: 1
Solution Grade: A
 
[+][-]03/29/09 08:45 AM, ID: 24013112Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]03/29/09 08:53 AM, ID: 24013152Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]03/29/09 08:59 AM, ID: 24013176Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
 
Loading Advertisement...
20091111-EE-VQP-89 - Hierarchy / EE_QW_3_20080625