📄 openfile.asm
字号:
INCLUDE filefuc.mac
PUBLIC OPENFILES
PUBLIC INPUTSDATA
PUBLIC SEARCH
PUBLIC CLSPS
;成绩记录结构
GRADE STRUC
STUDENTNUMBER DB 10 ;记录学生成绩学号
DB ?
DB 10 DUP(?)
DB '$'
NAM DB 6 ;记录学生姓名
DB ?
DB 6 DUP(?)
DB '$'
COURSE1 DB 3 ;记录学生成绩
DB ?
DB 3 DUP(?)
DB '$'
COURSE2 DB 3 ;记录学生成绩
DB ?
DB 3 DUP(?)
DB '$'
COURSE3 DB 3 ;记录学生成绩
DB ?
DB 3 DUP(?)
DB '$'
COURSE4 DB 3 ;记录学生成绩
DB ?
DB 3 DUP(?)
DB '$'
SUM DB 3 ;记录学生成绩总分
DB ?
DB 3 DUP(?)
DB '$'
LIST DB 3;记录学生成绩排名
DB ?
DB 3 DUP(?)
DB '$'
GRADE ENDS
;用于覆盖学生成绩记录的结构
GRADES STRUC
STUDENTNUMBER DB 10 DUP(' ')
DB '$'
NAM DB 6 DUP(' ')
DB '$'
COURSE1 DB 3 DUP(' ')
DB '$'
COURSE2 DB 3 DUP(' ')
DB '$'
COURSE3 DB 3 DUP(' ')
DB '$'
COURSE4 DB 3 DUP(' ')
DB '$'
SUM DB 3 DUP(' ')
DB '$'
LIST DB 3 DUP(' ')
DB '$'
GRADES ENDS
STSG SEGMENT STACK 'S'
DW 32 DUP(?)
STSG ENDS
DATA SEGMENT
HANG DB 34
LIA DB 3
MM DW ?
MMS DW ?
DATAPOS DW ?
NO GRADE<>
NOS GRADES<>
MSG2 DB 'OPEN FILE ERROR!','$'
MSG DB 'SOTR ERROR!'
MSG1 DB 'PLEASE INPUT:','$'
MSG3 DB 'THE PAGE IS','$'
FILENAME DB 'F:\first.txt',0
CT EQU $-BUFFER
FILEHANDLE DW 0
CE DB ?
SAS DB 7
DB ?
DB 7 DUP(?)
PAGES DW ?
DATA ENDS
CODE SEGMENT
OPENFILES PROC far
ASSUME CS:CODE,DS:DATA,SS:STSG
PUSHREG
push ds
LOADDS DATA
PUSH BX
MOV DH,23
MOV DL,4
OPENFILE FILENAME,FILEHANDLE;打开文件
cmp AL,119;判断是否打开文件失败
JNZ ksb
MOV DH,23
MOV DL,4
PUTS 2,0,MSG2,1EH
JMP QCK
ksb: MOV AH,48H
MOV BX,18
JNZ NEX
MOV DH,23
MOV DL,2
PUTS DH,DL,MSG,1EH
JMP QCK
NEX: MOV DATAPOS,AX
POP BX
PUTS 24,67,MSG3,7DH
MOV PAGES,BX
ADD BL,49
PUTC 24,79,BL,7DH
MOV BX,PAGES
MOV AX,BX
MOV BX,340
MUL BX
MOV DX,AX
MOV AH,42H
MOV BX,FILEHANDLE
MOV CX,0
MOV AL,0
INT 21H;移动文件指针到固定位置
MOV DI,0
MOV DH,1
OUTS:
MOV DL,2
ADD DH,2
CMP DH,22
JAE QCK
READFILE 10,NO.STUDENTNUMBER,FILEHANDLE;读取文件信息
CMP AL,0;判断是否成功读取文件
JZ QCK
MOV AL,' '
CMP AL,NO.STUDENTNUMBER;判断读取记录学号是否为空
JZ QCK
PUTS DH,DL,NO.STUDENTNUMBER,1EH;显示文件信息
ADD DL,13
READFILE 6,NO.NAM ,FILEHANDLE
PUTS DH,DL,NO.NAM ,1EH
ADD DL,10
READFILE 3,NO.COURSE1,FILEHANDLE
PUTS DH,DL,NO.COURSE1,1EH
ADD DL,10
READFILE 3,NO.COURSE2,FILEHANDLE
PUTS DH,DL,NO.COURSE2,1EH
ADD DL,10
READFILE 3,NO.COURSE3,FILEHANDLE
PUTS DH,DL,NO.COURSE3,1EH
ADD DL,10
READFILE 3,NO.COURSE4,FILEHANDLE
PUTS DH,DL,NO.COURSE4,1EH
ADD DL,10
READFILE 3,NO.SUM,FILEHANDLE
PUTS DH,DL,NO.SUM,1EH
ADD DL,10
READFILE 3,NO.LIST,FILEHANDLE
PUTS DH,DL,NO.LIST,1EH
MOV AX,DATAPOS
MOV ES,AX
LEA SI,NO
MOV CX,63
CLD
REP MOVSB
ADD DI,63
JMP OUTS
QCK:
CLOSEFILE FILEHANDLE
pop ds
POPREG
RET
OPENFILES ENDP
CODE ENDS
CODE2 SEGMENT
ASSUME CS:CODE2
INPUTSDATA PROC FAR;在当前矩形框输入信息
PUSHREG
push DS
PUSH BX
LOADDS DATA
CURSORPOS
MOV MM,0
OPENFILE FILENAME,FILEHANDLE
MOV AL,DL
CMP AL,1
JA PPS
CMP AL,1
JNZ PPSS
ADD MM,7
JMP PPSS
PPS: ADD MM,10
PPSS: MOV AL,DH
MUL HANG
MOV BX,AX
MOV AL,DL
MUL LIA
MOV DX,AX
ADD MM,DX
ADD MM,BX
LEA DX,NO
MOV AH,0AH
INT 21H
POP BX
MOV AX,BX
MOV BX,340
MUL BX
ADD MM,AX
MOV MMS,CX
MOV AH,42H
MOV BX,FILEHANDLE
MOV CX,0
MOV DX,MM
MOV AL,0
INT 21H
JNC AA
AA:
MOV CL,NO+1
XOR CH,CH
WRITEFILE CX,NO+2,FILEHANDLE
MOV CX,MMS
MOV DH,CH
MOV DL,CL
CURSOR
CLOSEFILE FILEHANDLE
pop ds
POPREG
RET
INPUTSDATA ENDP
CODE2 ENDS
CODE3 SEGMENT
ASSUME CS:CODE3
SEARCH PROC FAR
PUSHREG
PUSH DS
LOADDS DATA
MOV PAGES,0
PUTS 23,0,MSG1,7DH
MOV DH,23
MOV DL,13
CURSOR
LEA DX,SAS
MOV AH,0AH
INT 21H
CHONG: MOV BX,PAGES
ADD BL,49
PUTC 24,79,BL,7DH
CALL FAR PTR CLSPS;刷新当前显示页记录为空格
OPENFILE FILENAME,FILEHANDLE
MOV AX,PAGES
MOV BX,340
MUL BX
MOV DX,AX
MOV AH,42H
MOV BX,FILEHANDLE
MOV CX,0
MOV AL,0
INT 21H
MOV DL,2
MOV DH,1
OUTPS:
MOV DL,2
ADD DH,2
CMP DH,22
JAE QCSK
JIESHU: READFILE 10,NO.STUDENTNUMBER,FILEHANDLE
CMP AL,0
JZ QCSK
MOV AL,' '
CMP AL,NO.STUDENTNUMBER
JZ QCSK
READFILE 6,NO.NAM ,FILEHANDLE
READFILE 3,NO.COURSE1,FILEHANDLE
READFILE 3,NO.COURSE2,FILEHANDLE
READFILE 3,NO.COURSE3,FILEHANDLE
READFILE 3,NO.COURSE4,FILEHANDLE
READFILE 3,NO.SUM,FILEHANDLE
READFILE 3,NO.LIST,FILEHANDLE
MOV AL,NO.NAM
MOV BL,SAS+2
CMP AL,BL;判断当前记录中姓名的第一个字符与所查询是否相同
JNZ JIESHU;不相同则读取下一个记录
MOV AL, NO.NAM+1
MOV BL,SAS+3
CMP AL,BL;判断当前记录中姓名的第二个字符与所查询是否相同
JNZ JIESHU
MOV AL, NO.NAM+2
MOV BL,SAS+4
CMP AL,BL;判断当前记录中姓名的第三个字符与所查询是否相同
JNZ JIESHU
MOV AL,NO.NAM+3
MOV BL,SAS+5
CMP AL,BL;判断当前记录中姓名的第四个字符与所查询是否相同
JNZ JIESHU
MOV AL, NO.NAM+4
MOV BL,SAS+6
CMP AL,BL;判断当前记录中姓名的第五个字符与所查询是否相同
JNZ JIESHU
MOV AL, NO.NAM+5
MOV BL,SAS+7
CMP AL,BL;判断当前记录中姓名的第六个字符与所查询是否相同
JNZ JIESHU
PUTS DH,DL,NO.STUDENTNUMBER,1EH
ADD DL,13
PUTS DH,DL,NO.NAM ,1EH
ADD DL,10
PUTS DH,DL,NO.COURSE1,1EH
ADD DL,10
PUTS DH,DL,NO.COURSE2,1EH
ADD DL,10
PUTS DH,DL,NO.COURSE3,1EH
ADD DL,10
PUTS DH,DL,NO.COURSE4,1EH
ADD DL,10
PUTS DH,DL,NO.SUM,1EH
ADD DL,10
PUTS DH,DL,NO.LIST,1EH
JMP OUTPS
QCSK: CLOSEFILE FILEHANDLE
QQ: MOV AH,0
INT 16H
CMP AH, 1
JZ FANHUI
CMP AL,52
JZ NEXTPAGE
CMP AL,53
JZ LASTPAGE
JMP QQ
NEXTPAGE: CMP PAGES,2
JZ QQ
CALL FAR PTR CLSPS
INC PAGES
JMP CHONG
LASTPAGE:CMP PAGES,0
JZ QQ
CALL FAR PTR CLSPS
DEC PAGES
JMP CHONG
FANHUI:
POP DS
POPREG
RET
SEARCH ENDP
CODE3 ENDS
CODE4 SEGMENT
ASSUME CS:CODE3
CLSPS PROC FAR
PUSHREG
push ds
LOADDS DATA
MOV DH,1
OUTMS:;用空格将当前页面记录所在位置用空格覆盖
MOV DL,2;初始化列号
ADD DH,2;行号加2
CMP DH,22;判断是否到最后一行
JAE QCKS
PUTS DH,DL,NOS.STUDENTNUMBER,1EH;用空格将当前记录学号所在位置用空格覆盖
ADD DL,13;列号加
PUTS DH,DL,NOS.NAM ,1EH;用空格将当前记录姓名所在位置用空格覆盖
ADD DL,10;列号加
PUTS DH,DL,NOS.COURSE1,1EH;用空格将当前记录成绩所在位置用空格覆盖
ADD DL,10;列号加
PUTS DH,DL,NOS.COURSE2,1EH;用空格将当前记录成绩所在位置用空格覆盖
ADD DL,10;列号加
PUTS DH,DL,NOS.COURSE3,1EH;用空格将当前记录成绩所在位置用空格覆盖
ADD DL,10;列号加
PUTS DH,DL,NOS.COURSE4,1EH;用空格将当前记录成绩所在位置用空格覆盖
ADD DL,10;列号加
PUTS DH,DL,NOS.SUM,1EH;用空格将当前记录总分所在位置用空格覆盖
ADD DL,10;列号加
PUTS DH,DL,NOS.LIST,1EH;用空格将当前记录排名所在位置用空格覆盖
JMP OUTMS
QCKS:
pop ds
POPREG
RET
CLSPS ENDP
CODE4 ENDS
END OPENFILES
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -