📄 score.asm
字号:
;汇编课程设计
;设计题目:
;
;学生成绩管理系统
;其中“I”表示插入,“L”表示浏览,“Q”表示查询,“E”表示退出,
;“D”表示删除,“M”表示修改,“c”表示统计各分数段人数,
;“p”表示打印.以上各功能应该能单独运行,和连续运行。
;
;
;打印、浏览:
;删除、插入:
;查询、修改:
;统计及退出:
;*************************************
include score.mac
;*************************************
data segment
menu db ' ************* STUDENT SCORE MANAGEMENT ****************',0dh,0ah
db ' *********************************************************',0dh,0ah
db ' ** I.Insert the information **',0dh,0ah
db ' ** D.Delete the information **',0dh,0ah
db ' ** B.Browse the information **',0dh,0ah
db ' ** P.Print the information **',0dh,0ah
db ' ** Q.Query the information **',0dh,0ah
db ' ** M.Modify the information **',0dh,0ah
db ' ** C.Count the score **',0dh,0ah
db ' ** E.Exit **',0dh,0ah
db ' ** **',0dh,0ah
db ' *********************************************************',0dh,0ah
db ' PLEASE INPUT YOUR CHOICE:$'
tr db 0dh,0ah,'$' ;回车
mess1 db 'subprogram insert is called!$'
mess2 db 'subprogram delete is called!$'
mess3 db 'subprogram browse is called!$'
mess4 db 'subprogram print is called!$'
mess5 db 'subprogram query is called!$'
mess6 db 'subprogram modify is called!$'
mess7 db 'subprogram count is called!$'
;**********************insert*************************
inmess1 db 0dh,0ah,'please input the information...$'
inmess2 db 0dh,0ah,'number :$'
inmess3 db 0dh,0ah,'name :$'
inmess4 db 0dh,0ah,'math :$'
inmess5 db 0dh,0ah,'english :$'
inmess6 db 0dh,0ah,'computer :$'
inmess7 db 0dh,0ah,'chose y to continue,n to exit:$'
;********************printit**************************
TIT DB '-----------------------------------------------------------',13,10,' '
DB '| NUMBER | NAME | SCORE (Math,English,Computer) |',13,10,' '
DB '-----------------------------------------------------------',13,10,'$'
ENTER DB 13,10,' $'
BLANK DB ' $'
;-----------------数据库的统计----------------------------
NUM DB '0210340611 $','0210340612 $','0210340622 $','0210340624 $'
DB 48 DUP(10 DUP(' '),' $') ;50*13
SNAME DB 'SU HUI $','WANG YU $','ZHAO HAO $','ZHOU XING $'
DB 48 DUP(10 DUP(' '),' $') ;50*13
MATH_SCORE DB '85 $','100$','82 $','79 $'
DB 48 DUP(2 DUP(' '),' $') ;50*3
ENGLISH_SCORE DB '92 $','68 $','72 $','100$'
DB 48 DUP(2 DUP(' '),' $') ;50*3
COMPUTER_SCORE DB '78 $','96 $','100$','87 $'
DB 48 DUP(2 DUP(' '),' $') ;50*3
ALL_NUM DW 0
;-----------------分数段的统计----------------------------
S5 DB 48,'$'
S6 DB 48,'$'
S7 DB 48,'$'
S8 DB 48,'$'
S9 DB 48,'$'
S5T DB 13,10,13,10,' THE NUM OF SCORE( 0,60) : ','$'
S6T DB 13,10,' THE NUM OF SCORE(60,70) : ','$'
S7T DB 13,10,' THE NUM OF SCORE(70,80) : ','$'
S8T DB 13,10,' THE NUM OF SCORE(80,90) : ','$'
S9T DB 13,10,' THE NUM OF SCORE(90,100): ','$'
STIT DB 13,10,' Input chose m(math),e(English),c(computer): $'
;********************delete*************************
delmess db 'Please input the number which you want to delete:$'
;********************query****************************
qmess1 db 'Please input a name:$'
qmess2 db 'Please input a number:$'
qmess3 db 'There is no information you want!',0dh,0ah
db 'Press any to contiue...$'
qmess4 db 'sucess!$'
qmess5 db 'Input a to query by name!',0dh,0ah
db 'Input u to query by number!',0dh,0ah
db 'Input b to go back!',0dh,0ah
db 'Please give you a choice:$'
;******************************************************
data ends
;******************************************************
code segment
main proc far
assume cs:code,ds:data
;---------------------------------------
start:
mov ax,data
mov ds,ax
;---------------------------------------
show:
MOV CX,0
MOV SI,0
COUNT_NUM:
LEA BX,NUM[SI]
MOV AX,[BX]
ADD SI,0DH
INC CX
CMP AX,2020H
JNZ COUNT_NUM
DEC CX
MOV ALL_NUM,CX
call showmenu
mov ah,01h
int 21h
gosub 'i','I',toi
gosub 'd','D',tod
gosub 'b','B',tob
gosub 'p','P',top
gosub 'q','Q',toq
gosub 'm','M',tom
gosub 'c','C',toc
gosub 'e','E',exit
jmp show
toi:
call insert
jmp show
tod:
call delete
jmp show
tob:
call browse
key
jmp show
top:
call printa
key
jmp show
toq:
call query
jmp show
tom:
call modify
jmp show
toc:
call count
key
jmp show
exit:
mov ax,4c00h
int 21h
;---------------------------------------
main endp
;**********************以下是子程序*****************************
;***************************************************************
showmenu proc
;显示主菜单
pushall
call cls
print menu
popall
ret
showmenu endp
;******************************************
cls proc ;清屏
pushall
mov ah,06h
mov al,0
mov bh,7
mov ch,0
mov cl,0
mov dh,24
mov dl,79
int 10h
mov dx,0
mov bh,0
mov ah,2
int 10h
popall
ret
cls endp
;******************************************
insert proc
pushall
call cls
mov si,CX
dec si
incontinue:
print inmess1
inc si
mov bp,si
loop_n:
print inmess2
mov ax,0dh
mul si
mov si,ax
mov ah,0Ah
int 21h
mov bx,dx
mov dx,[bx+1]
cmp dl,10
ja loop_n
cmp dl,0
jz loop_n
inputnum:
inc bx
mov dh,[bx+1]
mov NUM[si],dh
inc si
dec dl
jnz inputnum
mov si,bp
loop_s:
print inmess3
mov ax,0dh
mul si
mov si,ax
mov ah,0Ah
int 21h
mov bx,dx
mov dx,[bx+1]
cmp dl,10
ja loop_s
cmp dl,0
jz loop_s
inputname:
inc bx
mov dh,[bx+1]
mov SNAME[si],dh
inc si
dec dl
jnz inputname
mov si,bp
loop_math:
print inmess4
mov ax,4h
mul si
mov si,ax
mov ah,0Ah
int 21h
mov bx,dx
mov dx,[bx+1]
cmp dl,3
ja loop_math
cmp dl,0
jz loop_math
inputmath:
inc bx
mov dh,[bx+1]
mov MATH_SCORE[si],dh
inc si
dec dl
jnz inputmath
mov si,bp
loop_eng:
print inmess5
mov ax,4h
mul si
mov si,ax
mov ah,0Ah
int 21h
mov bx,dx
mov dx,[bx+1]
cmp dl,3
ja loop_eng
cmp dl,0
jz loop_eng
;**********************************************
jmp inputeng
break:
jmp incontinue
;**********************************************
inputeng:
inc bx
mov dh,[bx+1]
mov ENGLISH_SCORE[si],dh
inc si
dec dl
jnz inputeng
mov si,bp
loop_com:
print inmess6
mov ax,4h
mul si
mov si,ax
mov ah,0Ah
int 21h
mov bx,dx
mov dx,[bx+1]
cmp dl,3
ja loop_com
cmp dl,0
jz loop_com
inputcom:
inc bx
mov dh,[bx+1]
mov COMPUTER_SCORE[si],dh
inc si
dec dl
jnz inputcom
mov si,bp
print tr
print inmess7
mov ah,01h
int 21h
cmp al,'y'
jz break
popall
ret
insert endp
;***********************************************************
delete proc
pushall
call cls
print tr
print delmess
mov ah,0ah ;输入要删除的学号
int 21h
call query
cmp si,-1
jz delexit
push si
mov ax,50
sub ax,si
mov dl,13
mul dl
mov cx,ax
mov ax,si
mul dl
mov si,ax
qianyi1:
mov dl,num[si]
mov num[si-13],dl
mov dl,sname[si]
mov sname[si-13],dl
add si,1
loop qianyi1
pop si
mov ax,50
sub ax,si
mov dl,4
mul dl
mov cx,ax
mov ax,si
mul dl
mov si,ax
qianyi2:
mov dl,math_score[si]
mov math_score[si-4],dl
mov dl,english_score[si]
mov english_score[si-4],dl
mov dl,computer_score[si]
mov computer_score[si-4],dl
add si,1
loop qianyi2
delexit:
popall
ret
delete endp
;***********************************************************
;------------------------------SUB 浏览所有信息的子程序
BROWSE PROC
PUSHALL
MOV CX,ALL_NUM ;统计的总人数
MOV SI,0
LEA DX,ENTER
MOV AH,09h
INT 21H
LEA DX,TIT
INT 21H
LOOP1: CALL PRINT1
MOV AH,07H ; INPUT ANY KEY TO contiue
INT 21H
INC SI
LOOP LOOP1
LEA DX,TIT
MOV AH,09h
INT 21H
POPALL
RET
BROWSE ENDP
;***********************************************************
;------------------------------SUB 打印所有信息的子程序
PRINTA PROC
PUSHALL
MOV CX,ALL_NUM ;统计的总人数
MOV SI,0
LEA DX,ENTER
MOV AH,09h
INT 21H
LEA DX,TIT
INT 21H
LOOP2: CALL PRINT1
INC SI
LOOP LOOP2
LEA DX,TIT
MOV AH,09h
INT 21H
POPALL
RET
PRINTA ENDP
;------------------------------END 打印所有信息的子程序
;------------------------------SUB 打印一个学生信息的子程序 参数SI代表学生信息的偏移量
PRINT1 PROC
PUSHALL
; MOV SI,1
LEA DX,ENTER
MOV AH,09h
INT 21H
MOV BX,SI
MOV AX,0DH
MUL SI
MOV SI,AX
LEA DX,NUM[SI]
MOV AH,09h
INT 21H
LEA DX,BLANK
MOV AH,09h
INT 21H
LEA DX,SNAME[SI]
MOV AH,09h
INT 21H
LEA DX,BLANK
MOV AH,09h
INT 21H
MOV SI,BX
MOV AX,04H
MUL SI
MOV SI,AX
LEA DX,MATH_SCORE[SI]
MOV AH,09h
INT 21H
LEA DX,BLANK
INT 21H
LEA DX,ENGLISH_SCORE[SI]
INT 21H
LEA DX,BLANK
INT 21H
LEA DX,COMPUTER_SCORE[SI]
INT 21H
LEA DX,ENTER
MOV AH,09h
INT 21H
POPALL
RET
PRINT1 ENDP
;------------------------------END 打印一个学生信息的子程序
;***********************************************************
query proc
pushall
qinput: call cls
print qmess5
mov ah,01h
int 21h
cmp al,'a'
jz nameq
cmp al,'u'
jz numq
cmp al,'b'
jz point1
jmp qinput
nameq: call cls
print qmess1
mov ah,0ah
int 21h
add dx,2
mov di,dx
lea si,sname
namep1: mov cx,13
cld
repe cmpsb
cmp cx,0
jz getnum
cmp cx,0
jz getnum
add si,13
inc di
cmp di,50
jnz namep1
print qmess3
key
jmp qinput
numq: call cls
print qmess2
mov ah,0ah
int 21h
add dx,2
mov di,dx
lea si,num
;*******************************
jmp nump1
point1: jmp back
;*******************************
nump1: mov cx,13
cld
repe cmpsb
cmp cx,0
jz getnum
cmp cx,0
jz getnum
add si,13
inc di
cmp di,50
jnz nump1
print qmess3
key
jmp qinput
getnum: mov si,bx
call cls
print qmess4
key
jmp qinput
back: call showmenu
mov ah,01h
int 21h
popall
ret
query endp
;***********************************************************
modify proc
pushall
call cls
print mess6
key
popall
ret
modify endp
;***********************************************************
;------------------------------SUB 统计学生成绩的子程序
COUNT PROC
PUSHALL
MOV CX,ALL_NUM ;统计的总人数
MOV S5,48
MOV S6,48
MOV S7,48
MOV S8,48
MOV S9,48
AGAIN:
PRINT STIT
KEY
CMP AL,'m'
JZ COUNT_MATH
CMP AL,'e'
JZ COUNT_ENGLISH
CMP AL,'c'
JZ COUNT_COMPUTER
JMP AGAIN
COUNT_MATH:
LEA BX,MATH_SCORE
JMP compare
COUNT_ENGLISH:
LEA BX,ENGLISH_SCORE
JMP compare
COUNT_COMPUTER:
LEA BX,COMPUTER_SCORE
compare:
mov ax,[bx]
CMP AX,3031H
JZ TEN
CMP AL,36H
jl five
CMP AL,37H
jl six
CMP AL,38H
jl seven
CMP AL,39H
jl eight
jnL nine
TEN:
ADD BX,2
MOV AL,[BX]
SUB BX,2
CMP AL,30H
JNZ FIVE
nine:
inc s9
jmp short change_addr
eight:
inc s8
jmp short change_addr
seven:
inc s7
jmp short change_addr
six:
inc s6
jmp short change_addr
five:
inc s5
change_addr:
add bx,4
loop compare
PRINT S5T
PRINT S5
PRINT S6T
PRINT S6
PRINT S7T
PRINT S7
PRINT S8T
PRINT S8
PRINT S9T
PRINT S9
POPALL
RET
COUNT ENDP
;------------------------------END 统计学生成绩的子程序
;***********************************************************
code ends
;*************************************
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -