用汇编实现学生信息管理系统

用汇编实现学生信息管理系统

;经过一番努力终于完成了所有的功能,哈哈哈
.model small
student struct
    id db 4 dup(?)
    score db 4 dup(?)
    rank db 4 dup(?)
student ends
.data
str0 db ' Welcome to the student information management system',10,13,'$'
str1 db ' *************Menu******************',10,13,'$' 
str3 db ' 1 **addition**',10,13,'$'
str11 db ' 2 **View**',10,13,'$'
str12 db ' 3 **delete**',10,13,'$'
str13 db ' 4 **insert**',10,13,'$'
str14 db ' 5 **find**',10,13,'$'
str4 db ' 6 **exit**',10,13,'$'
str5 db 'Please input file-path name!',10,13,'$'
str6 db 'Please input id:',10,13,'$'
str7 db 'Please input score:',10,13,'$'
str8 db 'continue or not(y/n)',10,13,'$'
str9 db 'ID score rank',10,13,'$'
str10 db ' $'
str2 db 'Find Results:',10,13,'$'
str15 db 'NOT Find!',10,13,'$'
str16 db 'Deleted successfully!',10,13,'$'
str17 db 'Not Find,delete failed!',10,13,'$'
file_path db 100,?,100 dup(?)
temp db 5,?,5 dup(?)
handle dw ?
person student 30 dup(<>)
person1 student <>
count dw 0
temp1 db ?
direction db ?
is_find db ?
.code
;程序功能:delete
;入口参数:
;出口参数:
delete proc
    push ax
    push bx
    push cx
    push dx
    cmp count,0
    jz over
    lea dx,str6
    mov ah,09h
    int 21h
    call input
    mov direction,1
    call read
    mov cx,count
    mov di,0
    mov is_find,0
@@:
    xor ah,ah
    mov al,temp+1
    mov bx,0
    mov temp1,0
p131:
    mov dl,temp[bx+2]
    cmp dl,person[di+bx]
    jnz p132
    inc bx
    dec al
    cmp al,0
    jnz p131
    mov temp1,1
p132:
    cmp temp1,0
    jz p133
    inc is_find
    jmp p134
p133:
    add di,0ch
    loop @B
p134:
    cmp is_find,0
    jnz p135
    lea dx,str17
    mov ah,9h
    int 21h
    jmp over
p135:
    mov ax,di
    mov cx,count
    mov bh,12
    div bh
    xor ah,ah
    sub cx,ax
    dec cx
    cmp cx,0
    jz p137
p136:
    call move
    add di,12
    loop p136
p137:
    dec count
    lea dx,str16
    mov ah,9h
    int 21h
    call sort
    call write
over:
    pop dx
    pop cx
    pop bx
    pop ax
    ret 
delete endp
;程序功能:移动学生数据
;入口参数:di要移动的数据的地址,direction移动反向(1向前/0向后)
;出口参数:
move proc
    push ax
    push bx
    push cx
    cmp direction,0
    jnz @F
    mov cx,12
    mov bx,0
s1:
    mov al,person[di][bx]
    mov person[di+12][bx],al
    inc bx
    loop s1
    jmp exit
@@:
    mov cx,12
    mov bx,0
s2:
    mov al,person[di+12][bx]
    mov person[di][bx],al
    inc bx
    loop s2
exit:
    pop cx
    pop bx
    pop ax
    ret
move endp
;程序功能:find
;入口参数:
;出口参数:
find proc
    push ax
    push bx
    push cx
    push dx
    cmp count,0
    jz p35
    lea dx,str6
    mov ah,09h
    int 21h
    call input
    lea dx,str2
    mov ah,09h
    int 21h
    call read
    mov cx,count
    mov di,0
    mov is_find,0
@@:
    xor ah,ah
    mov al,temp+1
    mov bx,0
    mov temp1,0
p31:
    mov dl,temp[bx+2]
    cmp dl,person[di+bx]
    jnz p32
    inc bx
    dec al
    cmp al,0
    jnz p31
    mov temp1,1
p32:
    cmp temp1,0
    jz p33
    inc is_find
    lea dx,person[di].id
    mov ah,09h
    int 21h
    call ttab
    lea dx,person[di].score
    mov ah,09h
    int 21h
    call ttab
    lea dx,person[di].rank
    mov ah,09h
    int 21h
    call tap
    jmp p34
p33:
    add di,12
    loop @B
p34:
    cmp is_find,0
    jnz p35
    lea dx,str15
    mov ah,09h
    int 21h
p35:
    pop dx
    pop cx
    pop bx
    pop ax
    ret
find endp
;程序功能:成绩排名
;入口参数:学生人数count
;出口参数:无
sort proc
    push cx
    push bx
    mov di,4
    mov bx,count
@@:
    mov cx,count
    call compare
    add di,8
    dec bx
    jnz @B
    pop bx
    pop cx
    ret
sort endp
;程序功能:rank compare
;入口参数:cx,di
;出口参数:无
compare proc
    push bx
    push dx
    mov si,4
    mov bl,1
p11:
    call cmp1
    cmp dl,0
    jge p12
    inc bl
p12:
    add si,12
    loop p11
    add di,4
    call data_str
    pop dx
    pop bx
    ret
compare endp
;程序功能:数字转化为字符
;入口参数:bl
;出口参数:person[di].rank
data_str proc
    push ax
    push bx
    push cx
    push dx
    .IF bl<10
    mov cl,1
    .else 
    mov cl,2
    .endif
    mov dl,cl
@@:
    mov al,bl
    mov ah,0
    mov bh,10
    div bh
    xchg ah,al
    mov bl,ah
    mov ah,0
    add al,'0'
    push ax
    loop @B
    mov bx,0
    mov cl,dl
@@:
    pop ax
    mov person[di+bx],al
    inc bx
    loop @B
    mov al,'$'
    mov person[di+bx],al
    pop dx
    pop cx
    pop bx
    pop ax
    ret
data_str endp
;程序功能:比较大小
;入口参数:person.score,di,si
;出口参数:cx
cmp1 proc
    push ax
    push bx
    push cx
    mov bx,0
    mov al,person[di+bx]
    .while al!='$'
    inc bx
    mov al,person[di+bx]
    .endw
    mov cl,bl
    mov bx,0
    mov al,person[si+bx]
    .while al!='$'
    inc bx
    mov al,person[si+bx]
    .endw
    cmp cl,bl
    jl p1
    jg p2
    mov bx,0
@@:
    mov al,person[di+bx]
    cmp al,person[si+bx]
    jl p1
    jg p2
    inc bx
    loop @B
    mov dl,0
    jmp p3
p1:
    mov dl,-1
    jmp p3
p2:
    mov dl,1
    jmp p3
p3:
    pop cx
    pop bx
    pop ax
    ret
cmp1 endp
;程序功能:show
;入口参数:person
;出口参数:无
ttab proc
    push ax
    push dx
    lea dx,str10
    mov ah,09h
    int 21h
    pop ax
    pop dx
    ret
ttab endp
;程序功能:show
;入口参数:person
;出口参数:无
show proc
    push ax
    push bx
    push cx
    push dx
    cmp count,0
    jz over2
    call read
    lea dx,str9
    mov ah,09h
    int 21h
    mov cx,count
    mov di,0
@@:
    lea dx,person[di].id
    mov ah,09h
    int 21h
    call ttab
    lea dx,person[di].score
    mov ah,09h
    int 21h
    call ttab
    lea dx,person[di].rank
    mov ah,09h
    int 21h
    call tap
    add di,12
    loop @B
over2:
    pop dx
    pop cx
    pop bx
    pop ax
    ret
show endp
;程序功能:inpue
;入口参数:temp
;出口参数:temp
input proc
    push ax
    push dx
    lea dx,temp
    mov ah,0ah
    int 21h
    call tap
    pop dx
    pop ax
    ret
input endp
;程序功能:tmpe->person
;入口参数:temp,person
;出口参数:-
copy proc
    push ax
    push bx
    push cx
    push dx
    mov al,12
    mov bx,count
    mul bl
    mov si,ax
bg:
    lea dx,str6
    mov ah,09h
    int 21h
    call input
    mov bx,0
    mov cl,temp+1
@@:
    mov al,temp[bx+2]
    mov person[si+bx],al
    inc bx
    loop @B
    mov al,'$'
    mov person[si+bx],al
    lea dx,str7
    mov ah,09h
    int 21h
    call input
    mov bx,0
    mov cl,temp+1
    add si,4
@@:
    mov al,temp[bx+2]
    mov person[si+bx],al
    inc bx
    loop @B
    mov al,'$'
    mov person[si+bx],al
    inc count
    add si,8
    lea dx,str8
    mov ah,09h
    int 21h
    mov ah,01h
    int 21h
    call tap
    cmp al,'y'
    jz bg
    call sort
    call write
    pop dx
    pop cx
    pop bx
    pop ax
    ret
copy endp
;程序功能:回车换行
;入口参数:无
;出口参数:只在显示器上显示
tap proc
    push ax
    push dx
    mov dl,0ah
    mov ah,2h
    int 21h
    mov dl,0dh
    mov ah,2h
    int 21h
    pop dx
    pop ax
    ret
tap endp
;程序功能:输出菜单信息
;入口参数:菜单信息的首地址放在DX中
;出口参数:只在显示器上显示
outstr proc
    push ax
    mov ah,9h
    int 21h
    call tap
    pop ax
    ret
outstr endp
;程序功能:菜单信息
;入口参数:无
;出口参数:无
menu proc
    push dx
    lea dx,str0
    call outstr
    lea dx,str1
    call outstr
    lea dx,str3
    call outstr
    lea dx,str11
    call outstr
    lea dx,str12
    call outstr
    lea dx,str13
    call outstr
    lea dx,str14
    call outstr
    lea dx,str4
    call outstr
    xor al,al
    call choice
    pop dx
    ret
menu endp
;程序功能:创建文件
;入口参数:无
;出口参数:无
choice proc
    push ax
    mov ah,01h
    int 21h
    call tap
    .if al=='1' ;add
    call copy
    .elseif al=='2' ;show
    call show
    .elseif al=='3'
    call delete
    .elseif al=='4'
    call copy
    .elseif al=='5'
    call find
    .elseif al=='6' ;exit
    jmp over1
    .endif
    call menu
over1:
    pop ax
    ret
choice endp
;程序功能:创建文件
;入口参数:无
;出口参数:无
creatfile proc
@@:
    lea dx,str5
    mov ah,9h
    int 21h
    lea dx,file_path
    mov ah,0ah
    int 21h
    call tap
    mov bl,file_path+1
    cmp bl,0
    jz @B
    xor bh,bh
    mov file_path[bx+2],0
    lea dx,file_path+2
    mov cx,0
    mov ah,3ch
    int 21h
    mov handle,ax
    call close
    ret
creatfile endp
;程序功能:open文件
;入口参数:无
;出口参数:无
open proc
    push ax
    push cx
    push dx
    mov cx,3
    mov ah,3dh
    lea dx,file_path+2
    int 21h
    mov handle,ax
    pop dx
    pop cx
    pop ax
    ret
open endp
;程序功能:close文件
;入口参数:无
;出口参数:无
close proc
    mov bx,handle
    mov ah,3eh
    int 21h
    ret
close endp
;程序功能:read文件
;入口参数:cx,person
;出口参数:无
read proc
    push ax
    push bx
    push cx
    push dx
    call open
    mov ax,count
    mov bx,12
    mul bx
    mov cx,ax
    mov bx,handle
    lea dx,person
    mov ah,3fh
    int 21h
    call close
    pop dx
    pop cx
    pop bx
    pop ax
    ret
read endp
;程序功能:write文件
;入口参数:cx,person
;出口参数:无
write proc
    push ax
    push bx
    push cx
    push dx
    call open
    mov ax,count
    mov bx,12
    mul bx
    mov cx,ax
    mov bx,handle
    lea dx,person
    mov ah,40h
    int 21h
    call close
    pop dx
    pop cx
    pop bx
    pop ax
    ret
write endp
.startup
    call creatfile
    call menu
.exit
end
View Code

 

转载于:https://www.cnblogs.com/xin-hua/archive/2012/12/15/2819846.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值