查找电话号码
要求:
(1)要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两个部分;
(2)程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;
(3)凡有新的输入后,程序应按人名对电话号码表重新排序;
(4)程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来
name tel.
********* *********
提示:程序采用子程序结构,主程序的主要部分如下:
显示 提示符‘input name: ’
调用子程序input_name接收人名
调用子程序stor_name把人名存入电话号码表tel_tab中;
显示提示符‘input a telephone number: ’
调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中
如输入已结束则调用name_sort子程序对电话号码表按人名排序;
显示提示符:do you want a telephone number?(Y/N);
回答N则退出程序;
回答Y则在显示提示符name?
调用子程序input_name接收人名
调用子程序name_search在电话号码表中查找所要的电话号码;
调用子程序printline按要求格式显示人名及电话号码
重复查号提示符直至用户不再要求查号为止;
我的程序如下(没有编排序的子程序),但有点问题往高手赐教
;*****************************************************
tel_tab struc
username db 20,0,20 dup(?) ;结构体,32B\
tel db 8, 0,8 dup(?)
tel_tab ends
;*****************************************************
data segment
message1 db 'Input name:','$'
message2 db 'Input a telephone number:','$'
message3 db 'Do you want a telephone number?(Y/N)?','$'
message4 db 'name?','$'
message5 db 'name', 7 dup(' '),'tel.','$'
space db 7 dup(' '),'$'
table tel_tab 50 dup(<>)
mid db 0
mid2 dw 0
name1 db 20,0,20 dup(?)
data ends
;*****************************************************
code segment
main proc far
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lea dx,message1 ;display message1
mov ah,09h
int 21h
call input_name
call newline
call stor_name
lea dx,message2 ;display message2
mov ah,09h
int 21h
call newline
call inphone
repeat: lea dx,message3 ;display message3
mov ah,09h
int 21h
mov ah,01h
cmp al,'N'
je exit
call newline
lea dx,message4 ;display message4
mov ah,09h
int 21h
call newline
call input_name
call name_search
call printline
jmp repeat
exit: mov ax,4c00h
int 21h
main endp
;***************************************************
printline proc near
lea dx,message5
mov ah,09h
int 21h
call newline
mov bx,ax
add bx,offset table
mov mid2,bx
mov dx,offset [mid2].username[0]
mov ah,09h
int 21h
mov dl,0dh
mov ah,02h
int 21h
mov bx,ax
add bx,offset table
mov mid2,bx
mov dx,offset [mid2].tel[0]
mov ah,09h
int 21h
ret
printline endp
;***************************************************
name_search proc near
mov cl,mid
mov ch,0
mov al,mid
cbw
loop2: mov bl,32
mul bl
continue: mov dx,offset table
add dx,ax
mov mid2,dx
mov bl,[mid2].username[1]
cmp bl,name1[1]
je find
inc ax
loop loop2
jmp exit1
find: dec cx
push cx
mov cl,name1[1]
mov ch,0
mov bx,02h
mov di,bx
loop3: mov dx,ax
add dx,offset table
mov mid2,dx
mov bl,[mid2].username[di]
cmp bl,name1[di]
jne pop1
inc di
loop loop3
jmp exit1
pop1: inc ax
jmp continue
exit1: pop cx
ret
name_search endp
;***************************************************
inphone proc near
mov al,mid
mov ah,0h
mov bl,32d
mul bl
mov dx,ax
add dx,offset table
mov mid2,dx
lea dx,[mid2].tel[0]
mov ah,0ah
int 21h
inc mid
ret
inphone endp
;***************************************************
newline proc near
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
ret
newline endp
;***************************************************
input_name proc near
lea dx,name1
mov ah,0ah
int 21h
ret
input_name endp
;***************************************************
stor_name proc near
mov al,mid
mov ah,0
mov bl,32d
mul bl
mov cx,0022d
mov si,0
loop1: mov bl,name1[si]
mov dx,ax
add dx,offset table
mov mid2,dx
mov [mid2].username[si],bl
inc si
loop loop1
ret
stor_name endp
;****************************************************
code ends
end main