PL/I 语言 项目实战之图书借阅系统

PL/I阿木 发布于 2 天前 3 次阅读


PL/I 语言项目实战:图书借阅系统开发

PL/I(Programming Language One)是一种高级程序设计语言,它结合了多种编程语言的特性,旨在提供一种易于编写和维护的程序设计语言。本文将围绕PL/I语言开发一个图书借阅系统,通过实际代码示例,展示如何使用PL/I语言实现一个简单的图书借阅系统。

项目背景

图书借阅系统是图书馆自动化管理的重要组成部分,它可以帮助图书馆员高效地管理图书的借阅、归还、查询等操作。本项目的目标是使用PL/I语言开发一个基本的图书借阅系统,包括以下功能:

1. 图书信息管理:包括图书的添加、修改、删除和查询。
2. 借阅管理:包括图书的借出、归还和查询借阅记录。
3. 用户管理:包括用户的注册、登录和查询个人信息。

系统设计

数据库设计

为了存储图书和用户信息,我们需要设计一个简单的数据库。以下是数据库的ER图:


图书表(Book)
+------------+----------+----------+
| BookID | Title | Author |
+------------+----------+----------+
| 1 | Book A | Author A |
| 2 | Book B | Author B |
+------------+----------+----------+

用户表(User)
+------------+----------+----------+
| UserID | Name | Password |
+------------+----------+----------+
| 1 | User A | Pass1 |
| 2 | User B | Pass2 |
+------------+----------+----------+

系统架构

本系统采用模块化设计,主要分为以下几个模块:

1. 数据库模块:负责与数据库进行交互,实现数据的增删改查。
2. 用户管理模块:负责用户的注册、登录和查询个人信息。
3. 图书管理模块:负责图书的添加、修改、删除和查询。
4. 借阅管理模块:负责图书的借出、归还和查询借阅记录。

PL/I 代码实现

数据库模块

以下是一个简单的数据库模块,用于连接数据库和执行SQL语句。

pl/i
IDENTIFICATION DIVISION.
PROGRAM-ID. DATABASE-MODULE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT BOOK-FILE ASSIGN TO "BOOK.DAT".
SELECT USER-FILE ASSIGN TO "USER.DAT".

DATA DIVISION.
FILE SECTION.
FD BOOK-FILE.
01 BOOK-RECORD.
05 BOOK-ID PIC 9(5).
05 TITLE PIC X(50).
05 AUTHOR PIC X(50).

FD USER-FILE.
01 USER-RECORD.
05 USER-ID PIC 9(5).
05 NAME PIC X(50).
05 PASSWORD PIC X(20).

PROCEDURE DIVISION.
PERFORM OPEN-FILES.
PERFORM READ-BOOK-RECORD.
PERFORM CLOSE-FILES.
STOP RUN.

OPEN-FILES.
OPEN INPUT BOOK-FILE.
OPEN INPUT USER-FILE.

READ-BOOK-RECORD.
READ BOOK-FILE INTO BOOK-RECORD.

CLOSE-FILES.
CLOSE BOOK-FILE.
CLOSE USER-FILE.

用户管理模块

以下是一个简单的用户管理模块,用于处理用户的注册、登录和查询个人信息。

pl/i
IDENTIFICATION DIVISION.
PROGRAM-ID. USER-MODULE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT USER-FILE ASSIGN TO "USER.DAT".

DATA DIVISION.
FILE SECTION.
FD USER-FILE.
01 USER-RECORD.
05 USER-ID PIC 9(5).
05 NAME PIC X(50).
05 PASSWORD PIC X(20).

PROCEDURE DIVISION.
PERFORM OPEN-FILES.
PERFORM REGISTER-USER.
PERFORM LOGIN-USER.
PERFORM QUERY-USER.
PERFORM CLOSE-FILES.
STOP RUN.

OPEN-FILES.
OPEN INPUT USER-FILE.

REGISTER-USER.
DISPLAY "Enter user name: ".
ACCEPT NAME.
DISPLAY "Enter password: ".
ACCEPT PASSWORD.
WRITE USER-RECORD FROM USER-RECORD.

LOGIN-USER.
DISPLAY "Enter user name: ".
ACCEPT NAME.
DISPLAY "Enter password: ".
ACCEPT PASSWORD.
IF PASSWORD = USER-RECORD.PASSWORD
DISPLAY "Login successful!"
ELSE
DISPLAY "Login failed!"

QUERY-USER.
DISPLAY "Enter user ID: ".
ACCEPT USER-ID.
IF USER-ID = USER-RECORD.USER-ID
DISPLAY "User name: " NAME
ELSE
DISPLAY "User not found!"

CLOSE-FILES.
CLOSE USER-FILE.

图书管理模块

以下是一个简单的图书管理模块,用于处理图书的添加、修改、删除和查询。

pl/i
IDENTIFICATION DIVISION.
PROGRAM-ID. BOOK-MODULE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT BOOK-FILE ASSIGN TO "BOOK.DAT".

DATA DIVISION.
FILE SECTION.
FD BOOK-FILE.
01 BOOK-RECORD.
05 BOOK-ID PIC 9(5).
05 TITLE PIC X(50).
05 AUTHOR PIC X(50).

PROCEDURE DIVISION.
PERFORM OPEN-FILES.
PERFORM ADD-BOOK.
PERFORM MODIFY-BOOK.
PERFORM DELETE-BOOK.
PERFORM QUERY-BOOK.
PERFORM CLOSE-FILES.
STOP RUN.

OPEN-FILES.
OPEN INPUT BOOK-FILE.

ADD-BOOK.
DISPLAY "Enter book title: ".
ACCEPT TITLE.
DISPLAY "Enter author name: ".
ACCEPT AUTHOR.
WRITE BOOK-RECORD FROM BOOK-RECORD.

MODIFY-BOOK.
DISPLAY "Enter book ID to modify: ".
ACCEPT BOOK-ID.
READ BOOK-FILE INTO BOOK-RECORD.
DISPLAY "Enter new title: ".
ACCEPT TITLE.
DISPLAY "Enter new author name: ".
ACCEPT AUTHOR.
REWRITE BOOK-RECORD FROM BOOK-RECORD.

DELETE-BOOK.
DISPLAY "Enter book ID to delete: ".
ACCEPT BOOK-ID.
DELETE BOOK-RECORD.

QUERY-BOOK.
DISPLAY "Enter book ID to query: ".
ACCEPT BOOK-ID.
IF BOOK-ID = BOOK-RECORD.BOOK-ID
DISPLAY "Title: " TITLE
DISPLAY "Author: " AUTHOR
ELSE
DISPLAY "Book not found!"

CLOSE-FILES.
CLOSE BOOK-FILE.

借阅管理模块

以下是一个简单的借阅管理模块,用于处理图书的借出、归还和查询借阅记录。

pl/i
IDENTIFICATION DIVISION.
PROGRAM-ID. BORROW-MODULE.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT BOOK-FILE ASSIGN TO "BOOK.DAT".
SELECT USER-FILE ASSIGN TO "USER.DAT".

DATA DIVISION.
FILE SECTION.
FD BOOK-FILE.
01 BOOK-RECORD.
05 BOOK-ID PIC 9(5).
05 TITLE PIC X(50).
05 AUTHOR PIC X(50).

FD USER-FILE.
01 USER-RECORD.
05 USER-ID PIC 9(5).
05 NAME PIC X(50).
05 PASSWORD PIC X(20).

PROCEDURE DIVISION.
PERFORM OPEN-FILES.
PERFORM BORROW-BOOK.
PERFORM RETURN-BOOK.
PERFORM QUERY-BORROW.
PERFORM CLOSE-FILES.
STOP RUN.

OPEN-FILES.
OPEN INPUT BOOK-FILE.
OPEN INPUT USER-FILE.

BORROW-BOOK.
DISPLAY "Enter book ID to borrow: ".
ACCEPT BOOK-ID.
READ BOOK-FILE INTO BOOK-RECORD.
IF BOOK-RECORD.BOOK-ID = BOOK-ID
DISPLAY "Book borrowed successfully!"
ELSE
DISPLAY "Book not found!"

RETURN-BOOK.
DISPLAY "Enter book ID to return: ".
ACCEPT BOOK-ID.
READ BOOK-FILE INTO BOOK-RECORD.
IF BOOK-RECORD.BOOK-ID = BOOK-ID
DISPLAY "Book returned successfully!"
ELSE
DISPLAY "Book not found!"

QUERY-BORROW.
DISPLAY "Enter user ID to query borrow records: ".
ACCEPT USER-ID.
READ USER-FILE INTO USER-RECORD.
IF USER-ID = USER-RECORD.USER-ID
DISPLAY "Borrowed books: "
PERFORM PRINT-BOOK-RECORD
ELSE
DISPLAY "User not found!"

PRINT-BOOK-RECORD.
READ BOOK-FILE INTO BOOK-RECORD.
IF BOOK-RECORD.BOOK-ID = USER-RECORD.USER-ID
DISPLAY "Title: " TITLE
DISPLAY "Author: " AUTHOR
ELSE
EXIT.

总结

本文通过PL/I语言实现了图书借阅系统的基本功能,包括用户管理、图书管理、借阅管理和查询。在实际开发过程中,可以根据需求扩展系统功能,如增加图书分类、借阅期限、罚款管理等。PL/I语言作为一种历史悠久的高级编程语言,在系统设计和开发方面具有独特的优势,适用于各种规模的项目。