www.pudn.com > 学生成绩管理系统汇编版.rar > 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