汇编课程设计报告
题目: 通讯录系统
姓名: 何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 流程详细

;=================================
; 何xx
; 完成日期:
; 汇编课程设计
; 第二题: 通讯录设计
;=================================
(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倒很多,一口气写完,第一次调试居然198个ERROR, 不段的调试程序和优化流程,花费了不少心思,频繁的参考课本和相关资料是不可避免的,也深刻的感受到了,汇编程序设计的繁琐和开发效率的低下,汇编好几行语句在高级语言里面只需要一条就可以完成,事物总有两面性,存在即具其合理性,ASM的优越的性能(时间和空间),高级是望尘莫及的,ASM让我们更加注重底层的东西,这也是一个优秀软件工程师必备的素质,处理繁琐的细节问题往往暂用了相当一部分的开发时间,相信课程设计的目的已经达到.
1.8 参考书籍或资料.
(1) 教材
(2) http://community.csdn.net/
(3) BIOS_DOS.DOC(来自FTP)


评论