首先,这是完整的源代码: http: //pastebin.com/5teGNrPC
*>
IDENTIFICATION DIVISION.
PROGRAM-ID. CAddress.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TelephoneBookFile
ASSIGN TO "phonebook.db"
ORGANIZATION IS INDEXED
RECORD KEY IS user-record-key
ACCESS MODE IS DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD TelephoneBookFile
LABEL RECORDS ARE STANDARD.
01 User-Record-File.
05 user-record-key PIC X(35).
05 user-record-first-name PIC X(24).
05 user-record-last-name PIC X(50).
05 user-record-address PIC X(50).
05 user-record-city PIC X(16).
05 user-record-zip PIC X(8) .
05 user-record-country PIC X(20).
05 user-record-telephone PIC X(16).
WORKING-STORAGE SECTION.
77 menu-hoofd-invoer PICTURE 9(1) VALUE 9.
88 menu-invoer-correct VALUE 0 THRU 5.
88 menu-invoer-incorrect VALUE 6 THRU 9.
88 menu-invoer-afsluiten VALUE 0.
88 menu-invoer-record-toevoegen VALUE 1.
88 menu-invoer-nieuw-bestand VALUE 5.
77 Error-Msg PICTURE X(30) VALUE " ".
77 Green-Msg PICTURE X(30) VALUE " ".
77 file-status PICTURE X(3) VALUE " ".
88 file-status-eof VALUE "EOF".
01 User-Record.
05 user-first-name PIC X(24).
05 user-last-name PIC X(50).
05 user-address PIC X(50).
05 user-city PIC X(16).
05 user-zip PIC X(8) .
05 user-country PIC X(20).
05 user-telephone PIC X(16).
77 Yes-No-Correct-Field PICTURE X(1) VALUE " ".
88 yes-no-field-yes VALUE "Y" "y".
88 yes-no-field-no VALUE "N" "n".
88 yes-no-field-correct VALUE "C" "c".
77 Record-Count PIC 9(5) VALUE 0.
77 Error-Screen-Msg PIC X(45) VALUE SPACES.
77 Navigate-Field PICTURE X(1) VALUE " ".
88 Navigate-Next VALUE "N" "n".
88 Navigate-Prev VALUE "P" "p".
88 Navigate-Exit VALUE "X" "x".
77 Error-Continue-Flag PIC X(1) VALUE " ".
88 Error-Continue-OK VALUE "C" "c".
SCREEN SECTION.
01 MainMenu.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE " CAddress - A COBOL Address Book".
05 LINE 2 COLUMN 1 VALUE " -------------------------------".
05 LINE 4 COLUMN 1 VALUE " Make your choice: ".
05 LINE 5 COLUMN 1 VALUE " ~~~~~~~~~~~~~~~~~ ".
05 LINE 7 COLUMN 1 VALUE " 1) Add record".
05 LINE 8 COLUMN 1 VALUE " 2) Delete record".
05 LINE 9 COLUMN 1 VALUE " 3) Look up record".
05 LINE 10 COLUMN 1 VALUE " 4) Show records".
05 LINE 11 COLUMN 1 VALUE " 5) Create new file".
05 LINE 13 COLUMN 1 VALUE " 0) Exit".
05 LINE 15 COLUMN 1 VALUE " Choice? ".
05 LINE 15 COLUMN 25 PICTURE X(30) FROM Error-Msg FOREGROUND-COLOR 4.
05 LINE 24 COLUMN 1 VALUE " (c) YvanSoftware ".
01 InvoerMenu.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE " CAddress - A COBOL Address Book".
05 LINE 2 COLUMN 1 VALUE " -------------------------------".
05 LINE 4 COLUMN 1 VALUE " Input Data".
05 LINE 5 COLUMN 1 VALUE " ~~~~~~~~~~".
05 LINE 7 COLUMN 1 VALUE " First name :" FOREGROUND-COLOR 2.
05 LINE 8 COLUMN 1 VALUE " Last name :" FOREGROUND-COLOR 2.
05 LINE 9 COLUMN 1 VALUE " Address :" FOREGROUND-COLOR 2.
05 LINE 10 COLUMN 1 VALUE " City :" FOREGROUND-COLOR 2.
05 LINE 11 COLUMN 1 VALUE " ZIP :" FOREGROUND-COLOR 2.
05 LINE 12 COLUMN 1 VALUE " Country :" FOREGROUND-COLOR 2.
05 LINE 13 COLUMN 1 VALUE " Telephone :" FOREGROUND-COLOR 2.
05 LINE 15 COLUMN 1 VALUE " Save? y(es)/n(o)/c(orrect) " FOREGROUND-COLOR 4.
05 LINE 24 COLUMN 1 VALUE " (c) YvanSoftware ".
01 UitvoerScherm.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE " CAddress - A COBOL Address Book".
05 LINE 2 COLUMN 1 VALUE " -------------------------------".
05 LINE 4 COLUMN 1 VALUE " Find Data".
05 LINE 5 COLUMN 1 VALUE " ~~~~~~~~~~".
05 LINE 7 COLUMN 1 VALUE " First name :" FOREGROUND-COLOR 2.
05 LINE 8 COLUMN 1 VALUE " Last name :" FOREGROUND-COLOR 2.
05 LINE 9 COLUMN 1 VALUE " Address :" FOREGROUND-COLOR 2.
05 LINE 10 COLUMN 1 VALUE " City :" FOREGROUND-COLOR 2.
05 LINE 11 COLUMN 1 VALUE " ZIP :" FOREGROUND-COLOR 2.
05 LINE 12 COLUMN 1 VALUE " Country :" FOREGROUND-COLOR 2.
05 LINE 13 COLUMN 1 VALUE " Telephone :" FOREGROUND-COLOR 2.
* Col 45 Input
05 LINE 15 COLUMN 1 VALUE " Navigate? n(ext)/p(revious)/x(exit) " FOREGROUND-COLOR 4.
05 LINE 24 COLUMN 1 VALUE " (c) YvanSoftware ".
01 FoutScherm.
05 BLANK SCREEN.
05 LINE 4 COLUMN 15 VALUE "====================(ERROR)======================" BACKGROUND-COLOR 4 FOREGROUND-COLOR 7.
05 LINE 5 COLUMN 15 VALUE " " BACKGROUND-COLOR 4 FOREGROUND-COLOR 7.
05 LINE 6 COLUMN 15 VALUE " " BACKGROUND-COLOR 4 FOREGROUND-COLOR 7.
05 LINE 7 COLUMN 15 VALUE " " BACKGROUND-COLOR 4 FOREGROUND-COLOR 7.
05 LINE 8 COLUMN 15 VALUE " " BACKGROUND-COLOR 4 FOREGROUND-COLOR 7.
05 LINE 10 COLUMN 15 VALUE " INPUT C TO CONTINUE " BACKGROUND-COLOR 4 FOREGROUND-COLOR 7.
05 LINE 6 COLUMN 18 PICTURE X(45) FROM Error-screen-msg BACKGROUND-COLOR 4 FOREGROUND-COLOR 7 BLINK.
PROCEDURE DIVISION.
main.
PERFORM Show-MainMenu UNTIL menu-invoer-afsluiten.
STOP RUN.
.
Show-MainMenu.
DISPLAY MainMenu
ACCEPT menu-hoofd-invoer LINE 15 COLUMN 22.
IF menu-invoer-incorrect
THEN
MOVE " Incorrect input" TO Error-Msg
MOVE " " TO Green-Msg
END-IF.
IF menu-invoer-record-toevoegen
THEN
PERFORM Show-InvoerMenu
END-IF
IF menu-invoer-nieuw-bestand
THEN
PERFORM Show-NewFile
END-IF.
.
Show-InvoerMenu.
DISPLAY InvoerMenu.
ACCEPT user-first-name LINE 7 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-last-name LINE 8 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-address LINE 9 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-city LINE 10 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-zip LINE 11 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-country LINE 12 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-telephone LINE 13 COLUMN 18
WITH FOREGROUND-COLOR 4.
PERFORM AskForSave.
.
Show-NewFile.
DISPLAY InvoerMenu.
ACCEPT user-first-name LINE 7 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-last-name LINE 8 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-address LINE 9 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-city LINE 10 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-zip LINE 11 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-country LINE 12 COLUMN 18
WITH FOREGROUND-COLOR 4.
ACCEPT user-telephone LINE 13 COLUMN 18
WITH FOREGROUND-COLOR 4.
PERFORM AskForSaveNew.
AskForSave.
ACCEPT Yes-No-Correct-Field LINE 15 COLUMN 35
WITH FOREGROUND-COLOR 2.
IF Yes-No-Field-Correct
THEN
PERFORM Show-InvoerMenu
END-IF.
IF Yes-No-Field-No
THEN
PERFORM Show-MainMenu
END-IF.
IF Yes-No-Field-Yes
THEN
PERFORM Save-Record
END-IF.
IF NOT Yes-No-Field-No AND NOT Yes-No-Field-Yes AND NOT Yes-No-Field-Correct
THEN
PERFORM AskForSave
END-IF.
.
Save-Record.
OPEN I-O TelephoneBookFile.
PERFORM AddRecordKey.
MOVE user-first-name TO user-record-first-name.
MOVE user-last-name TO user-record-last-name .
MOVE user-address TO user-record-address .
MOVE user-city TO user-record-city .
MOVE user-zip TO user-record-zip .
MOVE user-country TO user-record-country .
MOVE user-telephone TO user-record-telephone .
WRITE User-Record-File INVALID KEY PERFORM ExistsAlready.
CLOSE TelephoneBookFile
.
AskForSaveNew.
ACCEPT Yes-No-Correct-Field LINE 15 COLUMN 35
WITH FOREGROUND-COLOR 2.
IF Yes-No-Field-Correct
THEN
PERFORM Show-NewFile
END-IF.
IF Yes-No-Field-No
THEN
PERFORM Show-MainMenu
END-IF.
IF Yes-No-Field-Yes
THEN
PERFORM Save-Record-NewFile
END-IF.
IF NOT Yes-No-Field-No AND NOT Yes-No-Field-Yes AND NOT Yes-No-Field-Correct
THEN
PERFORM AskForSave
END-IF.
.
Save-Record-NewFile.
OPEN OUTPUT TelephoneBookFile.
PERFORM AddRecordKey.
MOVE user-first-name TO user-record-first-name.
MOVE user-last-name TO user-record-last-name .
MOVE user-address TO user-record-address .
MOVE user-city TO user-record-city .
MOVE user-zip TO user-record-zip .
MOVE user-country TO user-record-country .
MOVE user-telephone TO user-record-telephone .
WRITE User-Record-File.
CLOSE TelephoneBookFile.
.
AddRecordKey.
STRING user-first-name(1:5) user-last-name(1:5)
user-address(1:5) user-city(1:5)
user-zip(1:5) user-country(1:5)
user-telephone(1:5)
DELIMITED BY SIZE
INTO user-record-key
.
ExistsAlready.
MOVE "Record already exists" TO Error-Screen-Msg
PERFORM ErrorScreen
.
ErrorScreen.
DISPLAY FoutScherm
ACCEPT Error-Continue-Flag LINE 24 COLUMN 80
IF NOT Error-Continue-OK
THEN
Perform ErrorScreen
END-IF.
.
END PROGRAM CAddress.
我收到了一个奇怪的 COBOL 错误,但我找不到它的含义。它显示打开错误(请参见以下屏幕截图)。
如果我首先使用“新文件”,然后添加一条记录,则不会发生这种情况。
这是应用程序二进制文件和它生成的一些日志文件。
非常感谢,
伊万
PS:是富士通 NetCobol 方言。