📄 grade_manage.asm
字号:
call backdisplay
cmp scount,0
jz eisover
cmp scount,0
jz eisover
mov ischange,1
call baktd
call getsnum
mov al,scount
sub al,dl
inc al
xor ah,ah
mov cx,ax
mov al,scount
mov bl,28
mul bl
lea bx,buffers
add bx,ax
mov student1,bx
sub bx,28
mov student2,bx
einsert1:equstu
sub student1,28
sub student2,28
loop einsert1
lea bx,clear
mov student2,bx
equstu
inc scount
mov al,scount
xor ah,ah
mov bl,6
div bl
cmp ah,0
jz einsert2
inc al
einsert2:mov spage,al
call showpage
posred
posset 0,dh,7
mov tcol,1
call newtd
call edttd
eisover:popreg
ret
einsert endp
edelete proc near ;删除当前行
pushreg
call backdisplay
cmp scount,0
jz edelover
mov ischange,1
posred
posset 0,dh,7
mov strcount,10
lea bx,stu_numstr
mov stradr,bx
call getstr
win 0,37h,8,18,12,63
posset 0,10,21
outstr deletesure
outstr stu_numstr
outstr stu_numstr1
edelinchr:inchr
cmp al,'y'
jz edelete4
cmp al,'n'
jnz edelinchr
call backdisplay
jmp edelover
edelete4:
call backdisplay
call getsnum
dec dl
mov al,dl
mov bl,28
mul bl
lea bx,buffers
add bx,ax
mov cl,scount
xor ch,ch
call getsnum
xor dh,dh
sub cx,dx
push bx
mov student1,bx
lea bx,clear
mov student2,bx
equstu
pop bx
cmp scount,1
jnz edelete6
mov scount,0
mov ccount,0
mov tcol,1
mov spage,1
mov cpage,1
call baktd
posset 0,24,0
jmp edelete2
edelete6:cmp cx,0
jz edelete5
edellp: mov student1,bx
mov student2,bx
add student2,28
equstu
add bx,28
loop edellp
edelete5:mov student1,bx
lea bx,clear
mov student2,bx
equstu
dec scount
mov al,scount
xor ah,ah
mov bl,6
div bl
cmp ah,0
jz edelete1
inc al
edelete1:mov bl,spage
mov spage,al
cmp cpage,bl
jnz edelete2
mov al,ccount
cmp al,pcount
jnz edelete2
cmp pcount,1
jnz edelete3
mov ccount,6
dec cpage
call baktd
posset 0,18,7
call newtd
mov tcol,1
jmp edelete2
edelete3:
dec ccount
call baktd
posred
dec dh
dec dh
posset 0,dh,7
mov tcol,1
call newtd
edelete2:
call showpage
edelover:popreg
ret
edelete endp
senglish proc near ;按英语成绩排序
call backdisplay
cmp scount,0
jz sengover
cmp scount,1
jz sengover
call baktd
lea bx,buffers
mov cl,scount
dec cl
xor ch,ch
seng1: push bx
push cx
mov maxnum,0
mov maxstu,bx
mov dx,bx
inc cx
seng2: stotn 16
mov ax,tempnum
cmp ax,maxnum
jna seng3
mov maxnum,ax
mov maxstu,dx
seng3: add dx,28
loop seng2
pop cx
pop bx
mov excstu1,bx
mov ax,maxstu
mov excstu2,ax
excstu
add bx,28
dec cx
cmp cx,0
jnz seng1
mov ccount,1
mov cpage,1
mov tcol,1
call showpage
posset 0,8,7
call newtd
sengover:ret
senglish endp
smath proc near ;按数学成绩排序
call backdisplay
cmp scount,0
jz smathover
cmp scount,1
jz smathover
call baktd
lea bx,buffers
mov cl,scount
dec cl
xor ch,ch
smath1: push bx
push cx
mov maxnum,0
mov maxstu,bx
mov dx,bx
inc cx
smath2: stotn 19
mov ax,tempnum
cmp ax,maxnum
jna smath3
mov maxnum,ax
mov maxstu,dx
smath3: add dx,28
loop smath2
pop cx
pop bx
mov excstu1,bx
mov ax,maxstu
mov excstu2,ax
excstu
add bx,28
dec cx
cmp cx,0
jnz smath1
mov ccount,1
mov cpage,1
mov tcol,1
call showpage
posset 0,8,7
call newtd
smathover:ret
smath endp
scomputer proc near ;按计算机成绩排序
call backdisplay
cmp scount,0
jz scomover
cmp scount,1
jz scomover
call baktd
lea bx,buffers
mov cl,scount
dec cl
xor ch,ch
scom1: push bx
push cx
mov maxnum,0
mov maxstu,bx
mov dx,bx
inc cx
scom2: stotn 22
mov ax,tempnum
cmp ax,maxnum
jna scom3
mov maxnum,ax
mov maxstu,dx
scom3: add dx,28
loop scom2
pop cx
pop bx
mov excstu1,bx
mov ax,maxstu
mov excstu2,ax
excstu
add bx,28
dec cx
cmp cx,0
jnz scom1
mov ccount,1
mov cpage,1
mov tcol,1
call showpage
posset 0,8,7
call newtd
scomover:ret
scomputer endp
stotal proc near ;按总成绩排序
call backdisplay
cmp scount,0
jz stotover
cmp scount,1
jz stotover
call baktd
lea bx,buffers
mov cl,scount
dec cl
xor ch,ch
stot1: push bx
push cx
mov maxnum,0
mov maxstu,bx
mov dx,bx
inc cx
stot2: stotn 25
mov ax,tempnum
cmp ax,maxnum
jna stot3
mov maxnum,ax
mov maxstu,dx
stot3: add dx,28
loop stot2
pop cx
pop bx
mov excstu1,bx
mov ax,maxstu
mov excstu2,ax
excstu
add bx,28
dec cx
cmp cx,0
jnz stot1
mov ccount,1
mov cpage,1
mov tcol,1
call showpage
posset 0,8,7
call newtd
stotover:ret
stotal endp
lnum proc near ;按学号查找
call backdisplay
cmp scount,0
jz lnumover
win 0,37h,8,18,12,63
posset 0,10,21
outstr lnumstr
lnumbs: mov cx,10
lnuminchr:inchr
cmp al,08h
jnz lnumnext1
posset 0,10,47
mov cx,10
lnumlp: putchr ' '
loop lnumlp
posset 0,10,47
jmp lnumbs
lnumnext1:cmp al,30h
jb lnumwarn
cmp al,39h
ja lnumwarn
putchr al
jmp lnumnext
lnumwarn:warn
inc cx
lnumnext:loop lnuminchr
posset 0,10,47
lnumlp2:inchr
cmp al,08h
jnz lnumnext2
posset 0,10,47
mov cx,10
lnumlp1:putchr ' '
loop lnumlp1
posset 0,10,47
jmp lnumbs
lnumnext2:cmp al,0dh
jnz lnumlp2
mov strcount,10
lea bx,cmpstr
mov stradr,bx
call getstr
lea bx,buffers
mov looknum,0
mov cl,scount
xor ch,ch
lnumlp3:push cx
push bx
inc looknum
mov ax,bx
lea bx,cmpstr
mov dx,bx
mov cx,10
lnumlp4:mov bx,ax
push ax
mov byte ptr al,[bx]
mov bx,dx
mov byte ptr ah,[bx]
cmp al,ah
pop ax
jnz lbrk1
inc ax
inc dx
loop lnumlp4
cmp cx,0
jz lnumf
lbrk1: pop bx
add bx,28
pop cx
dec cx
cmp cx,0
jnz lnumlp3
jmp lnumnf
lnumf: pop bx
pop cx
dec looknum
mov al,looknum
xor ah,ah
mov bl,6
div bl
mov cpage,al
inc cpage
inc ah
mov ccount,ah
mov tcol,1
mov al,6
add al,ccount
add al,ccount
call backdisplay
call baktd
posset 0,al,7
call showpage
call newtd
jmp lnumover
lnumnf: call backdisplay
win 0,37h,8,18,12,58
posset 0,10,21
outstr notfound
stay
call backdisplay
lnumover:ret
lnum endp
lname proc near ;按姓名查找
call backdisplay
cmp scount,0
jz lnameover
win 0,37h,8,18,12,63
posset 0,10,21
outstr lnamestr
lnamebs:mov cx,6
lnameinchr:inchr
cmp al,08h
jnz lnamenext1
posset 0,10,48
mov cx,6
lnamelp:putchr ' '
loop lnamelp
posset 0,10,48
jmp lnamebs
lnamenext1:cmp al,0dh
jnz lnamenext2
cmp cx,6
jnz lnamenext3
lnamenext2:cmp al,41h
jb lnamewarn
cmp al,5ah
jna lnamepc
cmp al,61h
jb lnamewarn
cmp al,7ah
ja lnamewarn
lnamepc:putchr al
jmp lnamenext
lnamewarn:warn
inc cx
lnamenext:loop lnameinchr
lnamenext3:posset 0,10,48
lnamenext4:inchr
cmp al,08h
jnz lnamenext6
posset 0,10,48
mov cx,6
lnamenext5:putchr ' '
loop lnamenext5
posset 0,10,48
jmp lnamebs
lnamenext6:cmp al,0dh
jnz lnamenext4
mov strcount,6
lea bx,cmpstr
mov stradr,bx
call getstr
lea bx,buffers
add bx,10
mov looknum,0
mov cl,scount
xor ch,ch
lnamelp3:push cx
push bx
inc looknum
mov ax,bx
lea bx,cmpstr
mov dx,bx
mov cx,6
lnamelp4:mov bx,ax
push ax
mov byte ptr al,[bx]
mov bx,dx
mov byte ptr ah,[bx]
cmp al,ah
pop ax
jnz lnamebrk1
inc ax
inc dx
loop lnamelp4
cmp cx,0
jz lnamef
lnamebrk1:pop bx
add bx,28
pop cx
dec cx
cmp cx,0
jnz lnamelp3
jmp lnamenf
lnamef: pop bx
pop cx
dec looknum
mov al,looknum
xor ah,ah
mov bl,6
div bl
mov cpage,al
inc cpage
inc ah
mov ccount,ah
mov tcol,2
mov al,6
add al,ccount
add al,ccount
call backdisplay
call baktd
posset 0,al,18
call showpage
call newtd
jmp lnameover
lnamenf:call backdisplay
win 0,37h,8,18,12,58
posset 0,10,21
outstr notfound
stay
call backdisplay
lnameover:ret
lname endp
getsnum proc near ;取当前学生在缓存中的序号,返回:dl,序号
push ax
push bx
mov al,cpage
dec al
mov bl,6
mul bl
add al,ccount
mov dl,al
pop bx
pop ax
ret
getsnum endp
stob proc near ;把当前行改动存到相应缓存中,并重新计算总成绩
pushreg
call getsnum
dec dl
mov al,dl
mov dl,28
mul dl
lea bx,buffers
add bx,ax
push bx
cmp tcol,1
jnz stob5
mov strcount,10
jmp stob1
stob5: cmp tcol,2
jnz stob2
add bx,10
mov strcount,6
jmp stob1
stob2: cmp tcol,3
jnz stob3
add bx,16
mov strcount,3
jmp stob1
stob3: cmp tcol,4
jnz stob4
add bx,19
mov strcount,3
jmp stob1
stob4: add bx,22
mov strcount,3
stob1: mov stradr,bx
mov al,strcount
call getstr
pop bx
cmp al,3
jnz stobover
call sum
posred
push dx
posset 0,dh,62
add bx,25
mov stradr,bx
mov strcount,3
call getstr
pop dx
posset 0,dh,dl
stobover:popreg
ret
stob endp
btos proc near ;把相应缓存显示到当前行中
pushreg
posred
push dx
call getsnum
dec dl
mov al,dl
mov dl,28
mul dl
lea bx,buffers
add bx,ax
posred
mov stradr,bx
mov strcount,10
call putstr
add bx,10
posset 0,dh,18
mov stradr,bx
mov strcount,6
call putstr
add bx,6
posset 0,dh,29
mov stradr,bx
mov strcount,3
call putstr
add bx,3
posset 0,dh,40
mov stradr,bx
mov strcount,3
call putstr
add bx,3
posset 0,dh,51
mov stradr,bx
mov strcount,3
call putstr
add bx,3
posset 0,dh,62
mov stradr,bx
mov strcount,3
call putstr
pop dx
posset 0,dh,dl
popreg
ret
btos endp
sum proc near ;求和
pushreg
posred
push dx
posset 0,dh,29
call getnum
mov ax,tempnum
posset 0,dh,40
call getnum
add ax,tempnum
posset 0,dh,51
call getnum
add ax,tempnum
mov tempnum,ax
posset 0,dh,62
call putnum
pop dx
posset 0,dh,dl
popreg
ret
sum endp
showpage proc near ;显示一页,参数:cpage
pushreg
posred
push dx
mov al,ccount
xor ah,ah
push ax
mov ccount,1
posset 0,8,7
mov al,spage
cmp al,cpage
jz showpage1
mov pcount,6
jmp showpage2
showpage1:mov bl,scount
call getsnum
sub bl,dl
inc bl
mov pcount,bl
showpage2:mov cl,pcount
xor ch,ch
cmp cx,0
jz showpage3
splp: call btos
posred
inc dh
inc dh
posset 0,dh,dl
inc ccount
loop splp
showpage3:mov cl,6
sub cl,pcount
xor ch,ch
cmp cx,0
jz spover
mov dh,18
mov dl,7
splp1: posset 0,dh,dl
dec dh
dec dh
call clsst
loop splp1
spover: call winpage
pop ax
mov ccount,al
pop dx
posset 0,dh,dl
popreg
ret
showpage endp
clsst proc near ;清空当前行显示
pushreg
posred
push dx
mov dl,7
mov cx,6
clsstlp:posset 0,dh,dl
add dl,11
call clstd
loop clsstlp
pop dx
posset 0,dh,dl
popreg
ret
clsst endp
cseg ends
; data
dseg segment
buffers student 30 dup(<>)
temp student <>
clear student <' ',' ',' ',' ',' ',' '>
student1 dw ?
student2 dw ?
excstu1 dw ?
excstu2 dw ?
maxstu dw ?
stradr dw ?
strcount db ?
maxnum dw ?
tempnum dw ?
scount db ?;总学生数
pcount db ?;当前页学生数
ccount db ?;当前光标所在学生的页内序号
spage db ?;总页数
cpage db ?;当前页号
tcol db ?;当前光标所在表格列
stu_num db 'Stu_num$'
stu_name db 'Stu_name$'
english db 'English$'
math db 'Math$'
computer db 'Computer$'
total db 'Total$'
head dw ?
bak db 3840 dup(0)
menu db 'File Edit Sort Look Help$'
date db 'today ??/??$'
pg db 'page ?/?$'
new db 'New$'
open db 'Open$'
save db 'Save$'
saveas db 'Save as$'
exit db 'Exit$'
eadd db 'Add$'
insert db 'Insert$'
delete db 'Delete$'
help1 db 'Welcome use student grade manage system!$'
help2 db 'Good lucky!$'
help3 db 'Press any key to back.$'
help4 db '=========================================$'
help5 db 'snowwolf$'
help6 db 'QQ:343520016$'
staus db 'PgDn/PgUp:change page$'
row db ?
col db ?
max db ?
jmp_file dw offset fnew ;文件菜单跳转表
dw offset fopen
dw offset fsaves
dw offset fsaveas
dw offset fexit
jmp_edit dw offset eeadd ;编辑菜单跳转表
dw offset einsert
dw offset edelete
jmp_sort dw offset senglish ;排序菜单跳转表
dw offset smath
dw offset scomputer
dw offset stotal
jmp_look dw offset lnum ;查询菜单跳转表
dw offset lname
ischange db 0
filename db 10 dup (' '),'$'
filenameas db 10 dup (' '),'$'
filepath db 10 dup(' ')
filenf db 'Sorry,the file is not existent!$'
filehandle dw ?
error dw 0
fncount db 0
inputfn db 'Please input the filename: $'
openfn db 'You want to open the file: $'
isfn db 0
savemessage1 db 'Would you want to save "$'
savemessage3 db 'last file$'
savemessage2 db '", y/n/c?$'
deletesure db'Are you sure to delete $'
stu_numstr db 10 dup(' '),'$'
stu_numstr1 db ', y/n?$'
cmpstr db 10 dup(' '),'$'
lnumstr db 'Please input the Stu_num: $'
lnamestr db 'Please input the Stu_name: $'
notfound db 'Sorry,the student is not found.$'
looknum db ?
dseg ends
; stack
sseg segment stack
db 100h dup(?)
sseg ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -