`
qj200040
  • 浏览: 38586 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

简单的通讯录

 
阅读更多
无二不说,先上代码:
DATAS SEGMENT
    ;此处输入数据段代码
    namepar   label    byte
maxnlen   db     21
actnlen   db     ?
_name    db     21 dup(?)  ;在MASM5.0下不能用name哦
phonepar  label    byte
maxplen   db     9
actplen   db     ?
phone    db     9 dup(?)
crlf    db     13,10,'$'
endaddr   dw     ?
mess1    db     'Input name:','$'
mess2    db     'Input a telephone number:','$'
mess3    db     'Do you want a telephone number?(Y/N)','$'
mess4    db     'name?','$'
mess5    db     'name',16 dup(' '),'tel',0dh,0ah,'$'
mess6    db     'Not in the table.',0dh,0ah,'$'
mess7    db     'Invalid input!',0dh,0ah,'$'
count    db     0
tel_tab   db     50 dup(20 dup(' '),8 dup(' '))
temp    db     20 dup(' '),8 dup(' '),0dh,0ah,'$'
swapped   db     0 
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
main    proc     far
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
   
    push     ds
    sub      ax,ax
    push     ax
    MOV AX,DATAS
    MOV DS,AX
    mov es,ax
    cld
    lea di,tel_tab      ;di中存放表首地址
    ;此处输入代码段代码
    inputloop:
      ;提示'Input name'
      mov     ah,09h
      lea     dx,mess1
      int     21h
      ;
      call    input_name
      cmp     actnlen,0  ;没有输入人名时
      jz     a10        ;直接跳到提示是否查找的地方
      cmp     count,50   ;输入上限
      je     a10
      call    stor_name   ;保存人名到tel_tab
     
                  ;提示'Input a telephone number'
      mov     ah,09h
      lea     dx,mess2
      int     21h
      ;
      call    input_stor_phone ;输入并保存电话号码
      jmp     inputloop
a10:
      cmp     count,1
      jbe     searchloop ;如果没有输入或者输入一个
      call    name_sort  ;排序
searchloop:
      lea     dx,mess3
      mov     ah,09h
      int     21h
     
      mov     ah,01h
      int     21h     
     
      cmp     al,'N'
      je     exit
      cmp     al,'n'
      je     exit
      cmp     al,'Y'
      je     showname
      cmp     al,'y'
      je     showname
     
      mov     ah,09
      lea     dx,crlf
      int     21h
      lea     dx,mess7 ;非法输入
      mov     ah,09h
      int     21h     
     
      jmp     searchloop
showname:     
      mov     ah,09
      lea     dx,crlf
      int     21h     
       
      lea     dx,mess4 ;当输入Y时,显示'name?'
      mov     ah,09
      int     21h
     
      call    input_name ;输入要查找的人名
      call    name_search ;查找
      call    printline
      jmp     searchloop    
exit:
      ret
main    endp
;******************************************************
input_name proc    near     
      mov     ah,0ah
      lea     dx,namepar
      int     21h
      mov     ah,02h
      mov     dl,0ah ;换行
      int     21h
     
      mov     bh,0
      mov     bl,actnlen
      mov     cx,21
      sub     cx,bx
i20:
      mov     _name[bx],20h
      inc     bx
      loop    i20
      ret
input_name endp           
;*********************************************************
stor_name  proc    near
      inc     count
      cld    
      lea     si,_name
      mov     cx,10        ;把name中的前20个字符放入tel_tab中每一个人信息的前20个byte中
      rep     movsw
      ret
stor_name  endp  
;*****************************************************                 
input_stor_phone proc  near
     
      mov     ah,0ah
      lea     dx,phonepar
      int     21h
      mov     ah,02h
      mov     dl,0ah ;换行
      int     21h
     
      mov     bh,0
      mov     bl,actplen
      mov     cx,9
      sub     cx,bx ;计算剩下的长度
is20:
      mov     phone[bx],20h ;剩下的地方填充空格
      inc     bx
      loop    is20
     
      cld    
      lea     si,phone
      mov     cx,4      ;把phone中的前8个字符放入tel_tab中每一个人信息的后8个byte中
      rep     movsw
     
      ret
input_stor_phone endp        
;*****************************************************************
name_sort  proc    near
      sub     di,56    ;仔细想想为什么是这样的
      mov     endaddr,di
ns10:
      mov     swapped,0
      lea     si,tel_tab
ns20:
      mov     cx,20
      mov     di,si
      add     di,28 ;下一个被比较的名字
      mov     ax,di
      mov     bx,si
      repe    cmpsb
      jbe     ns30 ;小于或等于不用交换
      call    npxchg
ns30:
      mov     si,ax
      cmp     si,endaddr
      jbe     ns20
      cmp     swapped,0
      jnz     ns10
      ret     
                 
name_sort  endp
;*****************************************************
npxchg   proc    near
      mov     cx,14
      lea     di,temp
      mov     si,bx
      rep     movsw             ;move lower item to save
     
      mov     cx,14
      mov     di,bx
      rep     movsw
     
      mov     cx,14
       lea     si,temp
       rep     movsw
       mov     swapped,1
       ret
      
npxchg   endp
;************************************************************
disp_all  proc    near
      mov     ah,09h
      lea     dx,mess5
      int     21h
      lea     si,tel_tab
da10:
      lea     di,temp
      mov     cx,14
      rep     movsw
      mov     ah,09h
      lea     dx,temp
      int     21h
      dec     count
      jnz     da10
      ret     
     
disp_all  endp    
;*********************************************
name_search proc    near           
      lea     si,tel_tab
      mov     bx,si
      add     endaddr,28
nase10:          
      lea     di,_name     ;存放待查找的人名地址
      mov     cx,10
      repe    cmpsw
      jcxz    nase_exit   ;相等
     
      add     bx,28       ;表中下一个比较的人名
      mov     si,bx
      cmp     si,endaddr
      jbe     nase10
notintab:
      mov     cx,-1
      ret
nase_exit:
      mov     si,bx
      lea     di,temp
      mov     cx,14
      rep     movsw
     
      ret                 
name_search endp 
;*******************************************************
printline  proc    near
      cmp     cx,-1
      je     norecord
     
      mov     ah,09h
      lea     dx,mess5
      int     21h
     
      mov     ah,09h
      lea     dx,temp    
      int     21h
      ret
norecord:
      mov     ah,09h
      lea     dx,mess6
      int     21h          
      ret
printline  endp 
    MOV AH,4CH
    INT 21H
CODES ENDS
    END main




分享到:
评论

相关推荐

    android 简易通讯录(sqlite示例)

    在Android平台上,构建一个简易通讯录是一个常见的应用场景,它涉及到数据存储、用户界面以及数据管理等方面。本项目采用SQLite作为数据库管理系统,SQLite是一款轻量级的、嵌入式的、关系型数据库,尤其适合于移动...

    简易通讯录

    【简易通讯录】是一款基于Android平台开发的通讯录应用,旨在提供基本的联系人管理功能,包括创建、读取、更新和删除(CRUD)联系人记录,以及直接通过应用拨打电话。这款应用的设计和实现涉及到Android开发的核心...

    Android简易通讯录

    【Android简易通讯录】是一个适合初学者学习的项目,它提供了基本的联系人管理功能,让你能够理解Android应用开发的基本架构和组件。这个项目没有包括通话和短信功能,但你可以根据自己的需求进行扩展。 首先,...

    ASP.NET简易通讯录

    【ASP.NET简易通讯录】项目是一个面向初学者的教程,旨在教授如何利用ASP.NET、C#编程语言以及SQL Server 2000数据库来构建一个基础的通讯录系统。这个项目可以帮助初学者理解Web应用程序的基本架构,特别是针对.NET...

    c课程设计 简单通讯录的实现

    在C语言课程设计中,创建一个简单的通讯录系统是一个经典的项目,它可以帮助初学者更好地理解和应用C语言的基础知识。这个项目旨在实现一个基本的联系人管理功能,包括添加、删除、查找和显示联系人信息。以下是一些...

    简单通讯录简单通讯录

    《Java连接Access数据库实现简单通讯录》 在IT领域,数据管理是不可或缺的一部分,而通讯录作为日常生活中常见的数据管理工具,其开发和实现对于学习和理解数据库操作有着重要作用。本项目“简单通讯录”正是基于...

    C#简单通讯录

    《C#实现简单通讯录系统解析》 C#是一种广泛应用于软件开发的编程语言,尤其在Windows平台上,它以其高效、易用性受到开发者青睐。本篇将详细讲解如何使用C#来创建一个简单的通讯录系统,该系统利用XML文件进行数据...

    Android简易通讯录源码

    在Android平台上,开发一款简易通讯录应用涉及到许多关键知识点,主要集中在SQLite数据库的使用和ListView控件的交互。SQLite是Android内置的关系型数据库,用于存储应用程序的数据,而ListView则是显示大量数据列表...

    AndroidStudio安卓课设-简易通讯录

    **Android Studio 安卓课设 - 简易通讯录** 在本次课设中,我们将会探讨如何使用Android Studio开发一个基于SQLite数据库的简易通讯录应用。这个应用包含两个主要界面:启动页和主页面。在主页面上,用户可以进行...

    VC++做的简单通讯录系统

    《VC++实现的简易通讯录系统详解》 在信息技术领域,开发个人通讯录系统是一项常见的实践项目,尤其适合初学者入门。本项目采用Microsoft的Visual C++(简称VC++)作为开发工具,构建了一个简单的通讯录系统,旨在...

    Android Studio简易通讯录界面.rar

    【Android Studio简易通讯录界面】 在Android开发中,创建一个简易的通讯录界面是一个常见的练习,可以帮助开发者熟悉数据获取、UI设计以及性能优化等基础知识。本项目主要涉及以下几个关键知识点: 1. **获取手机...

    asp实现简易 通讯录

    在本案例中,"asp实现简易通讯录"是一个使用ASP技术构建的简单联系人管理系统,它提供了基本的联系人信息的增加、删除、修改和查询功能。下面将详细介绍这个系统可能涉及的关键知识点。 1. **ASP基础**: ASP是一...

    简易通讯录(c语言版)

    【简易通讯录(C语言版)】是一款基于链表数据结构实现的通讯录管理程序,旨在帮助用户方便地存储、删除和查询联系人信息。在C语言中,链表是一种非常重要的数据结构,它允许我们在运行时动态地添加或删除元素,而...

    C#学习-制作简易通讯录

    在本项目"C#学习-制作简易通讯录"中,我们将探讨如何使用C#编程语言来构建一个基础的通讯录应用程序。这个项目对于初学者来说是一个很好的起点,因为它涵盖了几个核心的C#概念和技术,如面向对象编程、窗体界面设计...

    个人简易通讯录(jsp+javabean+mysql)

    【个人简易通讯录(jsp+javabean+mysql)】是一个基于Web的个人通讯录管理系统,主要用于学习和实践Java Web开发技术。这个项目的核心在于利用Java Servlet(通过JSP)、JavaBeans以及MySQL数据库来实现数据的存储、...

    c++课程设计 简单通讯录管理 利用类和指针实现

    本程序的功能是为用户提供简单的通讯录进行管理,通过该程序存储联系人信息,提供关键字(只能是英文关键字进行查找)查找功能,可以对数据进行修改、删除、添加等操作。 各按钮的功能如下: 查找记录:以姓名为...

    c++简易通讯录

    在这个“C++简易通讯录”项目中,我们利用C++的基本语法和面向对象编程(OOP)概念来实现一个简单的联系人管理程序。以下是对该项目的详细解析: 1. **面向对象编程基础** - 类(Class):在C++中,类是定义对象...

    C#简易通讯录

    【C#简易通讯录】项目是一个使用C#编程语言实现的简单通讯录应用程序,它旨在帮助用户管理和存储联系人信息。这个项目对于初学者来说是一个很好的实践案例,可以帮助他们掌握C#的基础知识以及如何构建一个实用的应用...

    android简易通讯录--适合初学者

    在Android平台上,开发一个简易通讯录应用是许多初学者入门的首选项目,因为这个项目能够涵盖许多基础且实用的技术点。下面将详细讲解这个项目涉及的主要知识点,包括Android应用程序的基本结构、用户界面设计、...

Global site tag (gtag.js) - Google Analytics