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

📄 score.asm

📁 这是一个学生成绩管理系统
💻 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 + -