📄 个人档案文件管理系统(汇编课程设计).txt
字号:
个人档案文件管理系统(汇编课程设计)
; 一个简单的个人档案文件管理系统,功能:显示报表(L), 插入记录(I),查询(S), 删除记录(D)和退出(Q)。
; 个人档案有姓名,年龄,性别,身高,体重,程序中各字段长度都取为10,使用的是文件控制块(FCB)的磁盘存取方式,程序自动创建名为STUDENT.MAO的磁盘文件。
DATA SEGMENT
MYFCB LABEL BYTE ;file's FCB
FDRIVER DB 0
FNAME DB 'STUDENTS'
FEXT DB 'MAO'
FBLOCK DW 0
RECSIZE DW 50
FSIZE DW 2 DUP(?)
FDATE DW ?
FPATH DB 10 DUP(?)
RECID DB 0
RECBK DW 2 DUP(?)
SEL DB 'List Insert Search Delect Quit >>$'
PROMPT DB 13,10,'Name Age SEX Height Weight $'
NAMES DB 13,10,' 1. NAME :$'
AGE DB 13,10,' 2. AGE :$'
SEX DB 13,10,' 3. SEX :$'
HEIGHT DB 13,10,' 4. HEIGHT :$'
WEIGHT DB 13,10,' 5. WEIGHT :$'
ERRMSG DB 13,10,' *** ERROR ! ***$'
WHICH DB 13,10,'SELECT A WAY(1--5) :$'
STRING DB 13,10,'INPUT THE VALUE :$'
NOTHIS DB 13,10,'NO THIS STUDENT !$'
DELOK DB 13,10,'THE RECORD DELET SUCCESS !$'
FLAG DB 0
WAY DB ?
STATE DB ?
VALUE DB 10 DUP(' ')
PRINT DB 13,10
MYDTA LABEL BYTE
N DB 10 DUP(' ')
A DB 10 DUP(' ')
S DB 10 DUP(' ')
H DB 10 DUP(' ')
W DB 10 DUP(' ')
DB '$'
DATA ENDS
SHOW MACRO ADDR
MOV AH,9
LEA DX,ADDR
INT 21H
ENDM
GETSTR MACRO ADDR
LOCAL EXT,CHAR,SPACE
MOV BX,0
SPACE:
MOV &ADDR&[BX],0
INC BX
CMP BX,10
JL SPACE
MOV BX,0
CHAR:
MOV AH,1
INT 21H
CMP AL,13
JZ EXT
CMP AL,10
JZ EXT
CMP BX,9
JG CHAR
MOV &ADDR&[BX],AL
INC BX
JMP CHAR
EXT:
ENDM
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
MAIN PROC FAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,1AH
LEA DX,MYDTA
INT 21H
JMP INIT
MAINLOOP:
MOV AH,1
INT 21H
CMP AL,' '
JNE MAINLOOP
INIT:
MOV AH,6 ;Init screen
MOV AL,0
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV BH,7
INT 10H
MOV AH,2
MOV DH,1
MOV DL,1
MOV BH,0
INT 10H
SHOW SEL ;Show menu And the select
INPUT:
MOV AH,0
INT 16H
CMP AH,26H ;IS 'L'?
JNZ NEXT1
CALL LIST
JMP MAINLOOP
NEXT1:
CMP AH,17H ;IS 'I'?
JNZ NEXT2
CALL INSERT
JMP MAINLOOP
NEXT2:
CMP AH,1FH ;IS 'S'?
JNZ NEXT3
MOV STATE,'S'
CALL SEARCH
JMP MAINLOOP
NEXT3:
CMP AH,20H ;IS 'D'?
JNZ NEXT4
MOV STATE,'D'
CALL SEARCH
JMP MAINLOOP
NEXT4:
CMP AH,10H ;IS 'Q'?
JNZ INPUT
RET
MAIN ENDP
LIST PROC NEAR ;List the recorder of every student
CALL OPENF
MOV RECID,0
CMP FLAG,0
JZ CONTINUE
RET
CONTINUE: SHOW PROMPT
LISTLOOP:
MOV AH,14H ;Read
LEA DX,MYFCB
INT 21H
CMP AL,01
JNE N1
JMP FINISH
N1:
CMP AL,0
JE N2
JMP FINISH
N2:
SHOW PRINT
JMP LISTLOOP
FINISH:
CALL CLOSEF
RET
LIST ENDP
INSERT PROC NEAR ;Insert recorder
CALL OPENF
MOV RECID,0
CMP FLAG,0
JZ READL
RET
READL: ;Read until at the end
MOV AH,14H
LEA DX,MYFCB
INT 21H
CMP AL,01
JE WRITES
CMP AL,0
JE READL
WRITES: ;Input the information
SHOW NAMES
GETSTR N
SHOW AGE
GETSTR A
SHOW SEX
GETSTR S
SHOW HEIGHT
GETSTR H
SHOW WEIGHT
GETSTR W
MOV AH,15H ;Write in
LEA DX,MYFCB
INT 21H
CALL CLOSEF
RET
INSERT ENDP
SEARCH PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CALL OPENF
MOV RECID,0
CMP FLAG,0
JZ START
RET
START:
SHOW NAMES
SHOW AGE
SHOW SEX
SHOW HEIGHT
SHOW WEIGHT
SHOW WHICH
INWAY: ;Select search by which field
MOV AH,1
INT 21H
CMP AL,'1'
JL INWAY
CMP AL,'5'
JG INWAY
SUB AL,31H
MOV WAY,AL
SHOW STRING
GETSTR VALUE ;Input the value to search
SHOW PROMPT
CMPLOOP: ;Search
MOV AH,14H
LEA DX,MYFCB
INT 21H
CMP AL,01
JNZ NEXT
JMP EXITS
NEXT:
CLD
MOV AL,10
MUL WAY
LEA SI,VALUE
LEA DI,N
ADD DI,AX
MOV CX,10
REPE CMPSB
JNZ CMPLOOP
SHOW PRINT
MOV FLAG,1
MOV CL,RECID
CMP STATE,'D'
JNE RETURN
DEL:
MOV AH,14H ; NOTE: Delete is in the module of Search
LEA DX,MYFCB
INT 21H
CMP AL,0
JNZ W_END
SUB RECID,2
MOV AH,15H
LEA DX,MYFCB
INT 21H
INC RECID
JMP DEL
W_END:
CLD
LEA DI,MYDTA
MOV CX,50
MOV AL,0
REP STOSB
SUB RECID,1
MOV AH,15H
MOV MYDTA,1AH
LEA DX,MYFCB
INT 21H
SHOW DELOK
RETURN:
MOV RECID,CL
JMP CMPLOOP
EXITS:
CALL CLOSEF
CMP FLAG,0
JNZ EXT
SHOW NOTHIS
EXT:
MOV FLAG,0
POP DX
POP CX
POP BX
POP AX
RET
SEARCH ENDP
OPENF PROC NEAR ;Open OR Create (if 'MYFCB' inexistence)
MOV AH,0FH
LEA DX,MYFCB
INT 21H
OR AL,AL
JNZ CREATE
RET
CREATE:
MOV AH,16H
LEA DX,MYFCB
INT 21H
OR AL,AL
JNZ SETFLAG
RET
SETFLAG:
MOV FLAG,1
SHOW ERRMSG
RET
OPENF ENDP
CLOSEF PROC NEAR
MOV AH,10H
LEA DX,MYFCB
INT 21H
RET
CLOSEF ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -