【发布时间】:2021-09-16 07:20:41
【问题描述】:
我有一个自己的应用程序,您可以在其中模拟图书馆(客户可以借书和还书)。
我有一个 LOAN 文件,其中存储了每笔贷款的 book-id、customer-id、贷款日期和归还日期。
这是我的文件选择:
SELECT LOAN-FILE
ASSIGN TO "LOANS"
ORGANIZATION IS INDEXED
RECORD KEY IS LOAN-ID
ALTERNATE KEY IS LOAN-CUSTOMER WITH DUPLICATES
ALTERNATE KEY IS LOAN-BOOK
ACCESS MODE IS DYNAMIC.
这是我的贷款文件的结构:
FD LOAN-FILE
LABEL RECORDS ARE STANDARD.
01 LOAN-RECORD.
05 LOAN-ID PIC 9(5).
05 LOAN-CUSTOMER PIC 9(5).
05 LOAN-BOOK PIC 9(5).
05 LOAN-DATE PIC 9(8).
05 LOAN-RETURN-DATE PIC 9(8).
我正在尝试使用备用键 LOAN-CUSTOMER 读取文件:
READ-LOAN-DATA.
MOVE "N" TO LOAN-FILE-AT-END.
START LOAN-FILE
KEY NOT < LOAN-CUSTOMER
INVALID KEY
MOVE "Y" TO LOAN-FILE-AT-END.
IF LOAN-FILE-AT-END NOT = "Y"
PERFORM READ-NEXT-LOAN-DATA.
READ-NEXT-LOAN-DATA.
READ LOAN-FILE NEXT RECORD
AT END
MOVE "Y" TO LOAN-FILE-AT-END.
我在此过程中使用该过程:
FIND-LENT-BOOKS-OF-CUSTOMER.
PERFORM READ-CUSTOMER-DATA.
PERFORM DISPLAY-CUSTOMER-DATA.
PERFORM INIT-DATA.
MOVE CUSTOMER-ID TO LOAN-CUSTOMER.
DISPLAY "Loan customer before calling READ-LOAN-DATA "
LOAN-CUSTOMER.
PERFORM READ-LOAN-DATA
UNTIL LOAN-FILE-AT-END = "Y".
PERFORM DISPLAY-LOAN-DATA.
问题是我无法读取我的 LOAN 文件。如果我注释掉我的 START 语句的 INVALID-KEY 那么我会收到错误:文件 LOAN-FILE 的记录键不存在。
在另一个 COBOL 程序中,我可以使用主键 LOAN-ID 读取我的 LOAN 文件。它还显示 LOAN-ID 和 LOAN-CUSTOMER。但是在这里我想使用 LOAN-CUSTOMER 作为带有重复项的备用键,当我的贷款文件中有条目时找不到它。
我在 Linux Mint 虚拟机上使用 COBOL。我已将 Visual Studio Code 安装为文本编辑器和 cobol 编译器,我正在使用 GNU Cobol 3.1.2.0。
所以我的 cobol 设置很简单。我是 COBOL 的新手,对 JCL 或 VSAM 文件没有任何经验。
我的代码有什么问题?我尝试了教程“在 21 天内自学 Cobol”http://testa.roberta.free.fr/My%20Books/Mainframe/Cobol/Teach%20Yourself%20Cobol%20In%2021%20Days%20(2nd%20Ed).pdf(第 445 - 450 页)中的一个示例,它没有任何问题(此代码不同)。 我还尝试了类似于教程之一的实现,并且该实现中也发生了错误。
那么为什么它不从我的 LOANS 文件中读取我的备用密钥,我怎样才能让它与我的数据文件一起使用(在我自己的实现中)?
【问题讨论】: