⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grade_manage.asm

📁 我的汇编课程设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	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 + -