📄 version1.05.asm
字号:
INCLUDE VERSION1.05.txt
STACK SEGMENT
DB 50 DUP(?)
STACK ENDS
DATA SEGMENT
STR1 DB ' -----------SIMPLE GRADE MANAGEMENT SYSTEM---------------',0AH,0DH,'$'
STR2 DB ' INSERT (I) STUDENT INFORMATION',0ah,0dh,'$'
STR3 DB ' UPDATE (U) NUMBER:',0AH,0DH,'$'
STR4 DB ' DELETE (D) NAME:',0AH,0DH,'$'
STR5 DB ' QUERY (Q) SCORE1:',0AH,0DH,'$'
STR6 DB ' SORT (S) SCORE2:',0AH,0DH,'$'
STR7 DB ' LIST ALL (L) SCORE3:',0AH,0DH,'$'
STR8 DB ' EXIT (E)',0AH,0DH,'$'
STR9 DB '--------------INPUT YOUR SELECT: INFO:',0AH,0DH,'$'
STR10 DB 'NUMBER NAME S1 S2 S3 SUM',0AH,0DH,'$'
TIP DB 'IS THERE ANYONE ELSE?(Y/N)','$'
_TIP DB 'NOTICE THE CAPS LOCK KEY AND INPUT UPPER CHARACTORS?$'
W_ERR DB 'WRITE FILE ERROR$'
O_ERR DB 'OPEN FILE ERROR$'
C_ERR DB 'CLOSE FILE ERROR$'
R_ERR DB 'READ FILE ERROR$'
_QUERY DB 'QUERY BY NAME OR NUMBER? (INPUT 1,2 TO CHOSE)$'
_CREATEFILE DB 'CREATE NEW FILE (C)$'
_OPENFILE DB 'OPEN EXIST FILE (O)$'
_EXIT DB ' EXIT (E)$'
MSG DB 'PRESS ANY KEY TO MAIN MENU. $'
SORTMSG DB 'SORRY, THIS FUNCTION IS NOT REALIZED BEACAUSE OF THE LIMITED TIME$'
FNAME DB "E:\masm5-3\score.txt"
BUFFER1 DB 28 DUP(?)
BUFFER2 DB 30 DUP(?)
FILEHANDLE DW ?
TEMP0 DB ?
TEMP1 DB ?
TEMP2 DW ?
TEMP3 DW ?
SUM1 DW ?
SUM2 DW ?
SUM3 DW ?
COUNT DB 0
DEL DB 27 DUP(' ')
DATA ENDS
SCORE STRUC
NUMBER DB 10 DUP(' ')
NAME DB 6 DUP(' ')
SCORE1 DB 0,0,0
SCORE2 DB 0,0,0
SCORE3 DB 0,0,0
SUM DW ?
SCORE ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
LOADDS DATA
CLRSCRN
PUTS 4,20,_CREATEFILE,1EH
PUTS 7,20,_OPENFILE,1EH
PUTS 9,25,_EXIT,1EH
SET_P3
MOV AH,7
INT 21H
CMP AL,'O'
JZ MENU_SORT
CMP AL,'E'
JZ MENU_EXITF
;JMP MANAGE
;NEWFILE FNAME,FILEHANDLE,N_ERROR
;MOV AH,7
;INT 21H
;
;MOV BEFFER1[BX],AL
MANAGE:
SET_P0
CLRSCRN
SHOW STR1
NEWLINE
SHOW STR2
SHOW STR3
SHOW STR4
SHOW STR5
SHOW STR6
SHOW STR7
SHOW STR8
NEWLINE
SHOW STR9
;--------------CHOSE MENU--------------------------------
MENU:
CLEAR1
CLEAR2
SET_P3
MOV AH,7
INT 21H
CMP AL,'I'
JZ MENU_INSERT
CMP AL,'L'
JZ MENU_LIST
CMP AL,'U'
JZ MENU_UPDATE
CMP AL,'D'
JZ MENU_DELETE
CMP AL,'Q'
JZ MENU_QUERY
CMP AL,'S'
JZ MENU_SORT
CMP AL,'E'
JZ MENU_EXITF
PUTS 15,10,_TIP,1EH
MOV AH,7
INT 21H
JMP MENU
;----------------INSERT---------------------------------
MENU_INSERT:
PUSHREG
MOV FILEHANDLE,0
OPENFILE FNAME,FILEHANDLE,O_ERR
CMP AL,0
JZ O_ERROR
INSERTING:
CLEAR1
CLEAR2
SET_P1 3
CALL GET_REC
TOFILEEND FILEHANDLE
WRITEFILE 27,BUFFER1,FILEHANDLE,W_ERR
CMP AL,0
JZ W_ERROR
PUTS 15,3,TIP,1EH
MOV AH,7
INT 21H
CMP AL,'Y'
JZ INSERTING
CLOSEFILE FILEHANDLE,C_ERR
CMP AL,0
JNZ C_ERROR
O_ERROR:
PUTS 16,3,O_ERR,1EH
JMP QUIT_INSERT
W_ERROR:
PUTS 16,3,W_ERR,1EH
JMP QUIT_INSERT
C_ERROR:
PUTS 16,3,C_ERR,1EH
JMP QUIT_INSERT
R_ERROR:
PUTS 16,3,R_ERR,1EH
QUIT_INSERT:
POPREG
JMP MENU
;-------------------LIST---------------------------------
MENU_LIST:
PUSHREG
MOV FILEHANDLE,0
OPENFILE FNAME,FILEHANDLE,O_ERR
CMP AL,0
JZ O_ERROR
CLEAR1
CLEAR2
SET_P2
SHOW STR10
LISTING: READFILE 27,BUFFER1,FILEHANDLE,R_ERR
CMP AL,0
JZ QUIT_LIST
SHOW_ITEM BUFFER1
JMP LISTING
QUIT_LIST:
CLOSEFILE FILEHANDLE,C_ERR
CMP AL,0
JZ C_ERROR
PUTS 19,50,MSG,1EH
MOV AH,7
INT 21H
POPREG
JMP MENU
;--------------QUERY-BY NUMBER----------------------------------
MENU_QUERY:
PUTS 16,10,_QUERY,1EH
MOV AH,7
INT 21H
CMP AL,'1'
JZ MENU_QUERY_BYNAME
CMP AL,'2'
JZ MENU_QUERY_BYNUMBER
JMP MENU
MENU_QUERY_BYNUMBER:
PUSHREG
CLEAR1
CLEAR2
SET_P1 10
GETIN BUFFER1,10
OPENFILE FNAME,FILEHANDLE,O_ERR
CMP AL,0
JZ Q_O_ERROR
MOV BX,FILEHANDLE
SEARCH:
READFILE 27,buffer2,FILEHANDLE,R_ERR
LEA SI,buffer2
LEA DI,BUFFER1
MOV CX,10
MATCH:
MOV AL,BYTE PTR[SI]
CMP AL,BYTE PTR[DI]
JNZ SEARCH
INC SI
INC DI
LOOP MATCH
MOV [BUFFER2+27],'$'
NEWLINE
NEWLINE
SHOW_ITEM BUFFER2
PUTS 17,3,MSG,1EH
MOV AH,7
INT 21H
JMP Q_QUIT
Q_O_ERROR:
PUTS 17,3,O_ERR,1EH
Q_QUIT:
CLOSEFILE FILEHANDLE,C_ERR
POPREG
JMP MENU
;--------------QUERY-BY NAME----------------------------------
MENU_QUERY_BYNAME:
PUSHREG
CLEAR1
CLEAR2
SET_P1 10
GETIN BUFFER1,10
OPENFILE FNAME,FILEHANDLE,O_ERR
CMP AL,0
JZ QN_O_ERROR
MOV BX,FILEHANDLE
SEARCHNAME:
READFILE 27,buffer2,FILEHANDLE,R_ERR
LEA SI,buffer2+10
LEA DI,BUFFER1
MOV CX,6
MATCHNAME:
MOV AL,BYTE PTR[SI]
CMP AL,BYTE PTR[DI]
JNZ SEARCHNAME
INC SI
INC DI
LOOP MATCHNAME
MOV [BUFFER2+27],'$'
NEWLINE
NEWLINE
SHOW_ITEM BUFFER2
PUTS 17,3,MSG,1EH
MOV AH,7
INT 21H
JMP QN_QUIT
QN_O_ERROR:
PUTS 17,3,O_ERR,1EH
QN_QUIT:
CLOSEFILE FILEHANDLE,C_ERR
POPREG
JMP MENU
;-----------------MODIFY-----------------------------------
MENU_UPDATE:
PUSHREG
OPENFILE FNAME,FILEHANDLE,O_ERR
CLEAR1
CLEAR2
SET_P1 3
CALL GET_REC ;STORED IN BUFFER1
MOV BX,FILEHANDLE
READM:
READFILE 27,BUFFER2,FILEHANDLE,R_ERR
LEA SI,BUFFER2
LEA DI,BUFFER1
MOV CX,10
MATCHM:
MOV AL,BYTE PTR[SI]
CMP AL,BYTE PTR[DI]
JNZ READM
INC SI
INC DI
LOOP MATCHM
MOV BX,FILEHANDLE
MOV AH,42H
MOV AL,1
MOV CX,0FFFFH
MOV DX,-27
INT 21H
WRITEFILE 27,BUFFER1,FILEHANDLE,W_ERR
CLOSEFILE FILEHANDLE,C_ERR
PUTS 18,3,MSG,1EH
MOV AH,7
INT 21H
SET_P3
POPREG
JMP MENU
;-------------------DELETE-------------------------------------
MENU_DELETE:
PUSHREG
clear1
set_p1 10
GETIN BUFFER1,10
OPENFILE FNAME,FILEHANDLE,O_ERR
READD:
READFILE 27,BUFFER2,FILEHANDLE,R_ERR
LEA SI,BUFFER2
LEA DI,BUFFER1
MOV CX,10
MECH:
MOV AL,BYTE PTR[SI]
CMP AL,BYTE PTR[DI]
JNZ READD
INC SI
INC DI
LOOP MECH
MOV BX,FILEHANDLE
MOV AH,42H
MOV AL,1
MOV CX,0FFFFH
MOV DX,-27
INT 21H
WRITEFILE 27,DEL,FILEHANDLE,W_ERR
CLOSEFILE FILEHANDLE,C_ERR
PUTS 17,3,MSG,1EH
MOV AH,7
INT 21H
set_p3
POPREG
JMP MENU
;------------------SORT----------------------------------------------
MENU_SORT:
PUSHREG
PUTS 15,4,SORTMSG,1EH
PUTS 17,24,MSG,1EH
MOV AH,7
INT 21H
POPREG
JMP MENU
;------------------EXITF----------------------------------------------
MENU_EXITF:
clear2
RETURN
RET
MAIN ENDP
;---------------------------------------------------
GET_REC PROC NEAR
PUSHREG
GETIN BUFFER2,10
MOV BX,0
MOV CX,10
COUTINUE: MOV AL,BUFFER2[BX]
MOV BUFFER1[BX],AL
INC BX
LOOP COUTINUE
SET_P1 4
GETIN BUFFER2,6
MOV SI,0
COUTINUE1: MOV AL,BUFFER2[SI]
MOV BUFFER1[BX],AL
INC BX
INC SI
CMP SI,6
JNZ COUTINUE1
SET_P1 5
GETIN BUFFER2,3
MOV SI,0
COUTINUE2: MOV AL,BUFFER2[SI]
MOV BUFFER1[BX],AL
INC BX
INC SI
CMP SI,3
JNZ COUTINUE2
SET_P1 6
GETIN BUFFER2,3
MOV SI,0
COUTINUE3: MOV AL,BUFFER2[SI]
MOV BUFFER1[BX],AL
INC BX
INC SI
CMP SI,3
JNZ COUTINUE3
SET_P1 7
GETIN BUFFER2,3
MOV SI,0
COUTINUE4: MOV AL,BUFFER2[SI]
MOV BUFFER1[BX],AL
INC BX
INC SI
CMP SI,3
JNZ COUTINUE4
INC BX
PUSH BX
;-------------ADD SUM SCORE-------------------
MOV TEMP1,0
MOV TEMP2,0
MOV TEMP3,0
MOV TEMP0,0
CMP BUFFER1[16],30H
JB NEXT1
MOV AL,BUFFER1[16]
SUB AL,30H
MOV TEMP1,AL ;TEMP1 1
CMP BUFFER1[17],39H
JA GOON1
CMP BUFFER1[17],30H
JB GOON1
MOV AL,BUFFER1[17]
SUB AL,30H
CBW
MOV TEMP3,AX
MOV AL,TEMP1
MOV BL,10
MUL BL
ADD AX,TEMP3
MOV TEMP1,AL ;TEMP1 2
CMP BUFFER1[18],39H
JA GOON1
CMP BUFFER1[18],30H
JB GOON1
MOV AL,BUFFER1[18]
SUB AL,30H
CBW
MOV TEMP3,AX
MOV AL,TEMP1
MOV BL,10
MUL BL
;ADD AX,TEMP3
MOV SUM1,AX
ADD TEMP2,AX
JMP NEXT1
GOON1: MOV AL,TEMP1
CBW
MOV SUM1,AX
;ADD TEMP2,AX
NEXT1:
CMP BUFFER1[19],30H
JB NEXT2
MOV AL,BUFFER1[19]
SUB AL,30H
MOV TEMP1,AL ;TEMP1 1
CMP BUFFER1[20],39H
JA GOON2
CMP BUFFER1[20],30H
JB GOON2
MOV AL,BUFFER1[20]
SUB AL,30H
CBW
MOV TEMP3,AX
MOV AL,TEMP1
MOV BL,10
MUL BL
ADD AX,TEMP3
MOV TEMP1,AL ;TEMP1 2
CMP BUFFER1[21],39H
JA GOON2
CMP BUFFER1[21],30H
JB GOON2
MOV AL,BUFFER1[21]
SUB AL,30H
CBW
MOV TEMP3,AX
MOV AL,TEMP1
MOV BL,10
MUL BL
;ADD AX,TEMP3
MOV SUM2,AX
ADD TEMP2,AX
JMP NEXT2
GOON2: MOV AL,TEMP1
CBW
MOV SUM2,AX
;ADD TEMP2,AX
NEXT2:
CMP BUFFER1[22],30H
JB NEXT3
MOV AL,BUFFER1[22]
SUB AL,30H
MOV TEMP1,AL ;TEMP1 1
CMP BUFFER1[23],39H
JA GOON3
CMP BUFFER1[23],30H
JB GOON3
MOV AL,BUFFER1[23]
SUB AL,30H
CBW
MOV TEMP3,AX
MOV AL,TEMP1
MOV BL,10
MUL BL
ADD AX,TEMP3
MOV TEMP1,AL ;TEMP1 2
CMP BUFFER1[24],30H
JB GOON3
CMP BUFFER1[24],39H
JA GOON3
MOV AL,BUFFER1[24]
SUB AL,30H
CBW
MOV TEMP3,AX
MOV AL,TEMP1
MOV BL,10
MUL BL
ADD AX,TEMP3
MOV SUM3,AX
;ADD TEMP2,AX
JMP NEXT3
GOON3: MOV AL,TEMP1
CBW
MOV SUM3,AX
;ADD TEMP2,AX
NEXT3:
MOV AX,SUM1
MOV DX,SUM2
ADD AX,DX
MOV DX,SUM3
ADD AX,DX
POP BX
MOV BUFFER1[25],AL
INC BX
MOV BUFFER1[26],AH
POPREG
RET
GET_REC ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -