电话号码本编辑和查找程序的设计与实现Word格式.docx
《电话号码本编辑和查找程序的设计与实现Word格式.docx》由会员分享,可在线阅读,更多相关《电话号码本编辑和查找程序的设计与实现Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
在完成设计任务后,按要求撰写课程设计说明书;
对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:
1)《IBM—PC汇编语言程序设计实验教程》实验2.4
2)《IBM—PC汇编语言程序设计(第2版)》例6.11
时间安排:
设计安排一周:
周1、周2:
完成系统分析及设计。
周3、周4:
完成程序调试,和验收。
周5:
撰写课程设计报告。
指导教师签名:
年月日
系主任(或责任教师)签名:
目录
目录..............................................................................................................................2
1、设计内容及要求..............................................................................................3
2、关键技术和方法3
2.1缓冲区的应用...............................................................................................3
2.2起泡排序.......................................................................................................3
2.3查找算法......................................................................................................3
3、设计方案说明..................................................................................................4
3.1模块层次图.................................................................................................4
3.2各模块功能定义.........................................................................................4
3.3主要过程流程图.........................................................................................5
3.3.1MAIN过程的流程图.............................................................................5
3.3.2排序子过程的流程图...........................................................................6
3.3.3SEARCH子过程的流程图...................................................................7
3.4数据机构定义...........................................................................................8
3.5程序界面描述...............................................................................................9
3.5.1结果显示界面........................................................................................9
3.5.2错误处理界面........................................................................................10
4、测试评估............................................................................................................11
4.1正确的输入测试..........................................................................................11
4.2错误的处理测试..........................................................................................11
4.3测试截图......................................................................................................11
5、设计心得...........................................................................................................11
5.1设计中遇到的问题......................................................................................11
5.2对程序扩展的设想......................................................................................11
6、参考文献...........................................................................................................12
7、源程序清单.......................................................................................................12
1.设计内容及要求
1.建立一个可存放50项的电话号码表,每项包括人名及电话号码两部分。
2.程序可接受输入人名及相应的电话号码,并将他们加入电话号码表中。
3.凡有新的输入后,程序应按人名对电话号码表重新排序。
4.程序可接受需要查找电话号码的人名,并从电话号码表中查出其电话号码,并显示出来。
5.程序采用子程序结构,结构清晰。
6.友好清晰的用户界面,能识别输入错误并控制错误的修改。
2.关键技术和方法
2.1缓冲区的应用
用缓冲区来暂时存储要输入的名字和电话号码,这样方便于用INT21H的0C功能来对输错的字符进行删除,提高了程序的灵活性。
另一方面,用做缓冲区的字符串的第二个字节存放的是输入的有效字符的实际长度,这对于我们以后排序以及查找都有很大的帮助,因为我们可以通过这个数字来确定比较的有效字符个数。
缓冲区也可以确定输入的最大字符的个数,例如,题目中的20位的姓名和8位的电话号码。
当达到最大长度时,光标将停止不动,这说明已经达到最大长度,应该输入回车键进行下一步,这也是提高程序健壮性的一个方法。
2.2起泡排序
起泡排序的过程很简单。
首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序(即L.r[1]>
L.r[2]),则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。
依次类推,直至第n-1个记录和第n个记录的关键字进行过比较为止。
上述过程是第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上。
然后进行第二趟起泡排序,对前n-1个记录进行同样操作,其结果是使得关键字最大的记录被安置到第n-1个记录的位置上。
一般地,第i趟起泡排序是从L.r[1]到L.r[n-i+1]依次比较相邻的两个记录的关键字,并在“逆序”时交换相邻记录,其结果是这n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上。
整个过程进行n-1趟起泡排序。
在起泡排序过程中,关键字较小的记录好比水中气泡逐趟向上漂浮,而关键字较大的记录好比石块往下沉,每一趟有一块“最大”的石头沉到水底。
2.3查找算法
查找算法原理比较简单,输入要查找的名字,依次和字符数组重的姓名进行比较。
第一次循环的次数有输入的名字的有效长度决定,不相等则和下一个名字进行比较。
然后让剩余的字符和空格进行比较,不相等则和下一个名字进行比较。
找到相等的就输出到屏幕上。
考虑到可能有重名的情况,所以始终让输入的名字和字符数组重的每一个名字进行比较。
3.设计方案说明
3.1模块层次图
输入
输出
主过程
主过程
排序
查找
3.2各模块功能定义
1.主过程:
控制要进行的操作,即输入、输出、查找。
2.输入:
接受用输入名字及电话号码。
3.输出:
把输入的名字及电话号码输出到屏幕上。
4.排序:
把输入的名字及电话号码按照英文字母表的顺序排列。
5.查找:
输入要查找电话号码的姓名,在屏幕上显示所有符合要求
的电话号码。
3.3主要过程流程图
1.MAIN过程的流程图
2.PAIXU子过程的流程图
3.SERCH子过程的流程图
3.4数据结构定义
1.数据元素定义
字符串
用途
MESSAGE
提示输入名字
MESSAGE1
提示输入电话号码
MESSAGE2
显示“NAMETELEPHONE”
MESSAGE3
当输入为空时,提示应该输入一些字符
MESSAGE4
输出一行虚线
MESSAGE5
提示用户选择一个选项
MESSAGE6
输出选项菜单
MESSAGE7
提示输入要查询的名字
MESSAGE8
显示查询不存在的消息
MESSAGE9
当输入的不是1、2、3、4时提示输入错误
MESSAGE10
MESSAGE11
提示输入的名字为A-Z或a-z
MESSAGE12
提示输入的电话号码为1--9
变量
BIAOJI
记录每个名字的起始位置
MAXLEN
定义名字的最大长度
INBUFLEN
实际输入的名字的长度
INBUF
存放名字的数组
MAXLEN1
定义电话号码的最大长度
NBUFLEN1
实际输入的电话号码的长度
INBUF1
存放电话号码的数组
OUTLINE
存放所有名字和电话号码的数组
过程名字
MAIN
控制程序总的运行顺序
INPUTNAME
接受输入的名字并且存入OUTLINE中
GETNAME
接受输入的名字并且存入INBUF中
INPHONENUMBER
接受输入的电话号码并且存入OUTLINE中
GETNUMBER
接受输入的电话号码并且存入INBUF1中
PRINTLINE
输出姓名及电话号码
HUANHANG
换行
PAIXU
对名字按照英文字母表进行排序
JIAOHUAN
当顺序不对时交换两个名字及电话号码的顺序
XUANXIANG
对输入的选项响应
SERCH
输出要查找的电话号码
XUXIAN
XINGHAO
输出一行星号
3.5程序界面描述
1.结果显示界面
2.错误处理界面
4.测试评估
4.1正确的输入测试
1.输入测试:
fanxu123456jiangyong654321
2.查找测试:
fanxu
3.插入测试:
guyuze133244
4.输出测试:
选择选项2输出已经输入的所有信息
4.2错误处理测试
1.查找出错测试:
j
2.输入名字出错测试:
直接回车、4566hhjj
3.输入电话号码出错测试:
回车、2
4.3测试截图
见程序界面描述
5.设计心得
5.1设计中遇到的问题
在对此次汇编课程设计中,使我对汇编程序处理一些实际问题的映像有了更深一层的理解,让我在增长见识的同时也学到了不少实际动手能力,但是也使我认识到了自己的许多不足和局限性。
由于刚开始对程序没有一个全面的设计和理解,致使我在设计中遇到很多困难,对程序的各个模块也是比较模糊,因此一度陷入了僵局,但后来在充分对参考文献的理解之后,并且在查询资料获取帮助后,使我开始正式对各程序模块的具体实现就有了比较全面的认识,所以,在对程序设计前,有一个必要而清晰的全盘思维过程就显得尤为重要。
正式初始时候缺乏这种意识,而是过分的急于求成,以使我在程序编写和理解过程中出现了很多的错误。
不过,在这次课程设计里,也使我受益匪浅,首先就让我认识到了平时实验中所缺少的实践性,对电话号码的存储显示和查询更贴切于我们日常的生活;
其次就是也使我深刻地认识到自己平时动手能力的不足和缺陷,和熟练掌握计算机技术编程还有较大的距离。
相信通过此次的课程设计,对我以后的学习和工作有很大的指引和帮助。
5.2对程序扩展的设想
可以对已经存入的姓名及电话号码进行删除,也可以对查询所得到的电话号码进行修改,同时,对存入的信息保存在电脑上,在下次使用的时候不必重新输入。
此外,在遇到相同的名字程序会提示已经存在名字相同的电话号码,提示是否覆盖该电话号码还是重新输入新的名字。
在排序的算法设计上可以采用效率更高的算法等。
6.参考文献
1.《IBM—PC汇编语言程序设计实验教程》清华大学出版社沈美明、温东婵、张赤红等编著
2.《IBM—PC汇编语言程序设计(第2版)》清华大学出版社沈美明、温东婵等编著
7.源程序清单
1.电话号码本的编辑和查找程序源程序
;
***********************定义数据段****************************
DATASSEGMENT
MESSAGEDB'
PLEASEINPUTYOURNAME:
'
13,10,'
$'
MESSAGE1DB'
PLEASEINPUTYOURTELEPHONENUMBER:
MESSAGE2DB'
NAMETEL.'
MESSAGE4DB'
*************************************'
MESSAGE5DB'
PLEASESELECTTHEOPERATION:
MESSAGE6DB'
1:
INPUT2:
PRINT3:
SEARCH4:
EXIT'
MESSAGE7DB'
PLEASEINPUTTHENAME.'
MESSAGE8DB'
THEREISNOTTHENAME.'
MESSAGE9DB'
YOUINPUTTHEWRONGNUMBER.'
MESSAGE10DB'
------------------------------------'
MESSAGE3DB'
YOUSHOULDINPUTSOMELETTERS.'
MESSAGE11DB'
YOUSHOULDINPUTA---ZORa----z'
MESSAGE12DB'
YOUSHOULDINPUT0---9'
BIAOJIDW0
MAXLENDB21
INBUFLENDB?
INBUFDB21DUP(20H)
MAXLEN1DB9
INBUFLEN1DB?
INBUF1DB9DUP(20H)
OUTLINEDB50DUP(33DUP(20H))
DATASENDS
;
***************************定义代码段***********************
CODESSEGMENT
MAINPROCFAR
ASSUMECS:
CODES,DS:
DATAS
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATAS
MOVDS,AX
MOVDI,0
MOVBL,0
**********************接受输入姓名和电话号码************
FIRST:
CALLHUANHANG
CALLXINGHAO
MOVAH,9H
MOVDX,OFFSETMESSAGE
INT21H
CALLXINGHAO
CALLINPUTNAME
CALLXUXIAN
MOVDX,OFFSETMESSAGE1
CALLINPHONENUMBER
CALLXUANXIANG
******************对电话号码按照姓名排序并且输出*************
SECOND:
MOVDX,OFFSETMESSAGE2
CMPBL,1
JEZHUANYI
CALLPAIXU
ZHUANYI:
CALLPRINTLINE
***********接受用户输入的姓名并且显示电话号码****************
THIRD:
CALLSEARCH
CALLXUANXIANG
****************************退出程序**************************
FOUR:
MOVAH,4CH
MAINENDP
********************接受用户输入的姓名************************
INPUTNAMEPROCNEAR
NEXTSTEP2:
CALLGETNAME
********************检测是否输入了字符*********************
CMPINBUFLEN,0
JEERROR1
JMPCHECKONE
ERROR1:
MOVDX,OFFSETMESSAGE3
JMPNEXTSTEP2
********************检测用输入的是否是字母*****************
CHECKONE:
MOVCH,0
MOVCL,INBUFLEN
MOVSI,0
LOOPP:
CMPINBUF[SI],41H
JBERRORA
CMPINBUF[SI],5BH
JBNEXTSTEPL
CMPINBUF[SI],61H
CMPINBUF[SI],7BH
JMPERRORA
NEXTSTEPL:
INCSI
LOOPLOOPP
JMPNEXTSTEP
ERRORA:
MOVDX,OFFSETMESSAGE11
*****************把有效的名字送入INBUF中********************
NEXTSTEP:
MOVCL,25
SUBCL,INBUFLEN
INCBL
ZHUANYINAME:
MOVBH,INBUF[SI]
MOVOUTLINE[DI],BH
INCDI
DECINBUFLEN
JNZZHUANYINAME
KONGGE:
MOVOUTLINE[DI],20H
INCDI
LOOPKONGGE
RET
INPUTNAMEENDP
**************接受用户输入电话号码并且存入INBUF1中*********
GETNUMBERPROCNEAR
LEADX,MAXLEN1
MOVAH,0CH
MOVAL,0AH
GE