正文

汇编通讯录系统[代码](发表时间: 2007-1-4 11:14:00)

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bakers/22214.html 复制链接

分享到:

标签:ASM 汇编 通讯录系统 代码 baker 课程设计 

 

 

            汇编课程设计报告

 

 

 

 

题目: 通讯录系统

 

 

 

 

 

 

姓名: 何xx

   学号: 2004xx

      班级:计科04-x

       指导老师: 郑xx

 

 

 

 

1.1   设计要求.

题目要求设计一个通讯录管理系统.需要具有以下功能和模块.

(1) 输入模块: 输入新的通讯条目,包括:姓名,性别,电话,E-mail,通讯地址,邮编,QQ

(2) 删除模块: 删除功能.

(3) 查询模块: 查询,输入姓名可以查询该人其他信息.

(4) 修改模块: 修改某一条记录.

(5) 存储模块(附加功能,可以不完成): 能够将输入的信息存储到硬盘文件;并能读入存储在该文件中的信息.

1.2   环境.

软件: windows xp, masm 6.x, notepad

硬件: PC

1.3   分析,设计思想.

看到题目,感觉就像是个简单的数据库系统.支持数据的增///改操作.具有应用价值.在数据库系统中,数据是以数据库文件的形式存在.通过访问/操作数据库中的表或表中的字段,获取我们想要的信息.

本系统可以归结为4个功能: select, insert, update,delete.

在这里不可能建立一张数据表来维护这种关系型数据.必须要借助汇编中的结构类型.定义一个结构数组,用来维护数据条目及信息的处理.

如图: 修改和删除操作都要依赖查询功能.

故把整个程序分为4个模块是比较明智的.

1.4   模块说明

由于变量较多,故没有采用多模块设计方案.

几个功能分别在6个子过程中完成.

(1)    Insert : 添加新的数据项. 自动将条目总数加一.

(2)    Select : 查询信息,查询条件为姓名. 对结构数组无影响.

(3)    Update: 修改数据信息, 查询条件为姓名,修改查询结果的值,修改文件.

(4)    Delete : 删除数据信息, 查询条件为姓名,删除查询结果值,具体做法是: 不停的将后面的一条信息,前移,就达到删除的效果.

(5)    Load : 加载文件到内存,涉及文件读//打开操作.

(6)    Save : 保存缓冲区数据至文件.

1.5   流程详细

1.6   主要代码

;=================================

;                     何xx          

;              完成日期:  11-13  /2007

;              汇编课程设计

;              第二题:  通讯录设计

;=================================

(1)    宏定义

;清空当前item(输入缓冲区)

setitem macro a,b

;清空关键字

clearkey macro a

(2) 数据段

dseg segment

    ;文件路径

   filename db 'G:\programs\asm\design\items.txt',0

   ;错误提示: 没有找到文件或无法打开

   errshow db 0ah,0dh,'can not open or find this file! ','$'

    ;选择菜单

   menu db 0ah,0dh,'pleate enter your choice!',0ah,0dh       

        db '1: Insert',0ah,0dh

        db '2: Select/Search',0ah,0dh

        db '3: Update',0ah,0dh

        db '4: Delete',0ah,0dh

        db '5: Save',0ah,0dh

        db '6: Exit',0ah,0dh

        db '$'

    ;命令选择

   command db 0

   ;提示输入姓名

   namelabel db 0ah,0dh,'name:$'

   ;提示输入性别(F/M)

   genderlabel db 0ah,0dh,'gender:$'

   ;提示输入电话

   phonelabel db 0ah,0dh,'phone:$'

   ;提示输入E-MAIL

   maillabel db 0ah,0dh,'email:$'

   ;提示输入通讯地址

   addresslabel db 0ah,0dh,'address:$'

   ;提示输入邮编

   postalcodelabel db 0ah,0dh,'postalcode:$'

   ;提示输入QQ

   qqlabel db 0ah,0dh,'qq:$'

   clr db 0ah,0dh,'$'

   ;添加成功提示

   inserted db 0ah,0dh,'new item has been added successfully!',0ah,0dh,'$'

   ;编辑成功提示

   changed db 0ah,0dh,'you have changed this item successfully!',0ah,0dh,'$'

   ;删除成功提示

   deleted db 0ah,0dh,'delete successfully!',0ah,0dh,'$'

   ;保存成功提示

   saved db 0ah,0dh,'save successfully!',0ah,0dh,'$'

   ;查询失败

   selected db 0ah,0dh,'nothing to match!',0ah,0dh,'$'

   ;显示数据条数

   numshow db 0ah,0dh,'the count of items:$'

   ;=============================================================

   ;定义结构体

   item struct

      pid db 0

      pname db 10,?,10 dup('$')

      pgender db 10,?,10 dup('$')

      ptel db 10,?,10 dup('$')

      pemail db 10,?,10 dup('$')

      paddress db 10,?,10 dup('$')

      ppostalcode db 10,?,10 dup('$')

      pqq db 10,?,10 dup('$')

      pnum db 0

   item ends 

   ;定义结构体结束

   ;==============================================================

   olditem item {}

   ;输入缓冲区

   newitem item {}

   ;结构数组长度

   len equ type item

   ;结构总数,文件中此变量位于最后一位

   num db 0

   ;定义结构数组

   items item 100 dup({})

   ;inititems item 100 dup({})

   ;,,改条件/通过姓名

   key db 10,?,10 dup('$')

   oldkey db 10,?,10 dup('$')

   ;flag,作为查找结果标志,0表示查找失败.

   flag db 0

   ;自定义指针

   pointer db 0

   ;标号地址表

   addrtbl dw insertbegin,selectbegin,updatebegin,deletebegin,savebegin,done

dseg ends


(3) 标号定义:

Insertbegin                               

Selectbegin                                        

Updatebegin

Deletebegin

Savebegin

Done                                                              

(4) 子过程 (由于篇幅限制,不给出代码)

;添加记录子过程

insert proc

;查找子过程

select proc

;编辑子过程

update proc

;删除子过程

delete proc

;保存至文件

save proc

;加载文件内容到缓冲区: 结构数组,其中最后一位为数据条数

load proc

;打印子过程

print proc

    

1.7  小结.        

    关于程序: 实现题目要求的功能(包括文件的存储),初步具备简单数据库系统的功能,虽然没有实用性, 但对整体机制的理解很有帮助.是一次不错的练手机会.

    体会: 通过本次课程设计.进一步掌握了ASM程序设计方法,由于考试在即,时间较紧张,未做界面的优化,16位下实现,总体来说题目较简单,功能区分明显,结果较清晰,写程序的时候未遇到太多困难, BUG倒很多,一口气写完,第一次调试居然198ERROR, 不段的调试程序和优化流程,花费了不少心思,频繁的参考课本和相关资料是不可避免的,也深刻的感受到了,汇编程序设计的繁琐和开发效率的低下,汇编好几行语句在高级语言里面只需要一条就可以完成,事物总有两面性,存在即具其合理性,ASM的优越的性能(时间和空间),高级是望尘莫及的,ASM让我们更加注重底层的东西,这也是一个优秀软件工程师必备的素质,处理繁琐的细节问题往往暂用了相当一部分的开发时间,相信课程设计的目的已经达到.

1.8 参考书籍或资料.

                                       

         (1) 教材

          (2) http://community.csdn.net/

          (3) BIOS_DOS.DOC(来自FTP)

阅读(5834) | 评论(3) | 复制链接


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

评论人: 匿名 发布时间: 2010-1-11 17:03:00
不知道可不可以把源代码传给我啊,我即用。邮箱:chenyun1399@yahoo.cn
评论人: iuhiao 发布时间: 2008-4-27 1:13:00
厉害,汇编我玩不动,学到地时候来找你
评论人: 匿名 发布时间: 2007-6-26 13:28:00
好样的~谢谢

发表评论

您的昵称: 昵称不填为“匿名”

您的Email: (可选)

评论内容:(字数请控制在500字以内)