PL/I 语言学生信息管理系统全流程开发实战
PL/I(Programming Language One)是一种高级程序设计语言,它结合了多种编程语言的特性,旨在提高编程效率和代码的可读性。本文将围绕PL/I语言开发一个学生信息管理系统,通过全流程的实战,展示如何使用PL/I语言实现一个完整的信息管理系统。
1. 系统需求分析
在开始编码之前,我们需要明确学生信息管理系统的需求。以下是我们需要实现的功能:
- 学生信息录入
- 学生信息查询
- 学生信息修改
- 学生信息删除
- 学生信息统计
2. 系统设计
2.1 数据库设计
为了存储学生信息,我们需要设计一个数据库。以下是学生信息表的结构:
sql
CREATE TABLE Student (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Age INT,
Gender CHAR(1),
Class VARCHAR(50)
);
2.2 系统模块设计
根据需求分析,我们可以将系统分为以下几个模块:
- 数据库连接模块
- 学生信息录入模块
- 学生信息查询模块
- 学生信息修改模块
- 学生信息删除模块
- 学生信息统计模块
3. PL/I 语言编程实战
3.1 数据库连接模块
我们需要创建一个数据库连接模块,用于连接到数据库。
pl1
IDENTIFICATION DIVISION.
PROGRAM-ID. DB-CONNECT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT-FILE ASSIGN TO "STUDENT.DAT"
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUDENT-FILE.
01 STUDENT-RECORD.
05 STUDENT-ID PIC 9(5).
05 STUDENT-NAME PIC X(50).
05 STUDENT-AGE PIC 9(2).
05 STUDENT-GENDER PIC X(1).
05 STUDENT-CLASS PIC X(50).
3.2 学生信息录入模块
接下来,我们实现学生信息录入模块。
pl1
IDENTIFICATION DIVISION.
PROGRAM-ID. STUDENT-ADD.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT-FILE ASSIGN TO "STUDENT.DAT".
DATA DIVISION.
FILE SECTION.
FD STUDENT-FILE.
01 STUDENT-RECORD.
05 STUDENT-ID PIC 9(5).
05 STUDENT-NAME PIC X(50).
05 STUDENT-AGE PIC 9(2).
05 STUDENT-GENDER PIC X(1).
05 STUDENT-CLASS PIC X(50).
WORKING-STORAGE SECTION.
01 WS-NEW-RECORD.
05 WS-NEW-ID PIC 9(5).
05 WS-NEW-NAME PIC X(50).
05 WS-NEW-AGE PIC 9(2).
05 WS-NEW-GENDER PIC X(1).
05 WS-NEW-CLASS PIC X(50).
PROCEDURE DIVISION.
PERFORM DB-CONNECT.
ACCEPT WS-NEW-RECORD.
WRITE STUDENT-RECORD FROM WS-NEW-RECORD.
STOP RUN.
3.3 学生信息查询模块
学生信息查询模块的实现如下:
pl1
IDENTIFICATION DIVISION.
PROGRAM-ID. STUDENT-QUERY.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT-FILE ASSIGN TO "STUDENT.DAT".
DATA DIVISION.
FILE SECTION.
FD STUDENT-FILE.
01 STUDENT-RECORD.
05 STUDENT-ID PIC 9(5).
05 STUDENT-NAME PIC X(50).
05 STUDENT-AGE PIC 9(2).
05 STUDENT-GENDER PIC X(1).
05 STUDENT-CLASS PIC X(50).
WORKING-STORAGE SECTION.
01 WS-QUERY-ID PIC 9(5).
01 WS-FOUND PIC X(1).
PROCEDURE DIVISION.
PERFORM DB-CONNECT.
ACCEPT WS-QUERY-ID.
OPEN INPUT STUDENT-FILE.
READ STUDENT-FILE AT END SET WS-FOUND TO 'N'.
IF WS-FOUND = 'Y' THEN
DISPLAY "Student ID: " STUDENT-ID
" Name: " STUDENT-NAME
" Age: " STUDENT-AGE
" Gender: " STUDENT-GENDER
" Class: " STUDENT-CLASS
ELSE
DISPLAY "Student not found."
END-IF.
CLOSE STUDENT-FILE.
STOP RUN.
3.4 学生信息修改模块
学生信息修改模块的实现如下:
pl1
IDENTIFICATION DIVISION.
PROGRAM-ID. STUDENT-UPDATE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT-FILE ASSIGN TO "STUDENT.DAT".
DATA DIVISION.
FILE SECTION.
FD STUDENT-FILE.
01 STUDENT-RECORD.
05 STUDENT-ID PIC 9(5).
05 STUDENT-NAME PIC X(50).
05 STUDENT-AGE PIC 9(2).
05 STUDENT-GENDER PIC X(1).
05 STUDENT-CLASS PIC X(50).
WORKING-STORAGE SECTION.
01 WS-UPDATE-ID PIC 9(5).
01 WS-NEW-NAME PIC X(50).
01 WS-NEW-AGE PIC 9(2).
01 WS-NEW-GENDER PIC X(1).
01 WS-NEW-CLASS PIC X(50).
PROCEDURE DIVISION.
PERFORM DB-CONNECT.
ACCEPT WS-UPDATE-ID.
OPEN INPUT STUDENT-FILE.
READ STUDENT-FILE AT END SET WS-FOUND TO 'N'.
IF WS-FOUND = 'Y' THEN
CLOSE STUDENT-FILE.
OPEN I-O STUDENT-FILE.
READ STUDENT-FILE AT END SET WS-FOUND TO 'N'.
IF WS-FOUND = 'Y' THEN
ACCEPT WS-NEW-NAME.
ACCEPT WS-NEW-AGE.
ACCEPT WS-NEW-GENDER.
ACCEPT WS-NEW-CLASS.
REPLACE ALL " " BY "" IN WS-NEW-NAME.
REPLACE ALL " " BY "" IN WS-NEW-CLASS.
WRITE STUDENT-RECORD FROM WS-NEW-RECORD.
CLOSE STUDENT-FILE.
DISPLAY "Student information updated."
ELSE
DISPLAY "Student not found."
END-IF
ELSE
DISPLAY "Student not found."
END-IF.
STOP RUN.
3.5 学生信息删除模块
学生信息删除模块的实现如下:
pl1
IDENTIFICATION DIVISION.
PROGRAM-ID. STUDENT-DELETE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT-FILE ASSIGN TO "STUDENT.DAT".
DATA DIVISION.
FILE SECTION.
FD STUDENT-FILE.
01 STUDENT-RECORD.
05 STUDENT-ID PIC 9(5).
05 STUDENT-NAME PIC X(50).
05 STUDENT-AGE PIC 9(2).
05 STUDENT-GENDER PIC X(1).
05 STUDENT-CLASS PIC X(50).
WORKING-STORAGE SECTION.
01 WS-DELETE-ID PIC 9(5).
01 WS-FOUND PIC X(1).
PROCEDURE DIVISION.
PERFORM DB-CONNECT.
ACCEPT WS-DELETE-ID.
OPEN INPUT STUDENT-FILE.
READ STUDENT-FILE AT END SET WS-FOUND TO 'N'.
IF WS-FOUND = 'Y' THEN
DELETE STUDENT-FILE RECORD KEY IS WS-DELETE-ID.
CLOSE STUDENT-FILE.
DISPLAY "Student information deleted."
ELSE
DISPLAY "Student not found."
END-IF.
STOP RUN.
3.6 学生信息统计模块
学生信息统计模块的实现如下:
pl1
IDENTIFICATION DIVISION.
PROGRAM-ID. STUDENT-STAT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT-FILE ASSIGN TO "STUDENT.DAT".
DATA DIVISION.
FILE SECTION.
FD STUDENT-FILE.
01 STUDENT-RECORD.
05 STUDENT-ID PIC 9(5).
05 STUDENT-NAME PIC X(50).
05 STUDENT-AGE PIC 9(2).
05 STUDENT-GENDER PIC X(1).
05 STUDENT-CLASS PIC X(50).
WORKING-STORAGE SECTION.
01 WS-CLASS-STAT.
05 WS-CLASS-COUNT PIC 9(3).
05 WS-CLASS-LIST PIC X(50).
PROCEDURE DIVISION.
PERFORM DB-CONNECT.
OPEN INPUT STUDENT-FILE.
READ STUDENT-FILE.
PERFORM UNTIL END-OF-FILE
ADD 1 TO WS-CLASS-COUNT
IF WS-CLASS-COUNT > 1 THEN
STRING WS-CLASS-LIST DELIMITED BY SIZE
WS-CLASS-LIST
STUDENT-CLASS
END-STRING
ELSE
MOVE STUDENT-CLASS TO WS-CLASS-LIST
END-IF
READ STUDENT-FILE
END-PERFORM.
CLOSE STUDENT-FILE.
DISPLAY "Total number of students: " WS-CLASS-COUNT
" Class list: " WS-CLASS-LIST.
STOP RUN.
4. 总结
通过以上实战,我们使用PL/I语言开发了一个学生信息管理系统。虽然PL/I语言在现代编程中不如其他语言流行,但它在某些特定领域仍有其应用价值。通过这个实战,我们可以了解到PL/I语言在数据库操作、文件处理等方面的强大功能。希望本文能对读者在PL/I语言编程方面有所帮助。
Comments NOTHING