《《汇编语言程序设计》课程设计说明书班级通信录管理系统的设计与实现》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》课程设计说明书班级通信录管理系统的设计与实现(32页珍藏版)》请在金锄头文库上搜索。
1、武汉理工大学汇编语言程序设计课程设计说明书班级通信录管理系统的设计与实现1 需求说明1.1实验要求1.1.1建立通讯录,添加一个同学的通信记录,删除一个同学的通信记录,修改一个同学的通信记录,查询一个同学的通信记录,显示所有同学的通信记录,能根据姓名或宿舍号进行排序。1.1.2通信记录包括学号、姓名、电话号码、宿舍号等信息,所有信息最终用文件保存。1.2功能简述1.2.1 建立通信录运行程序后,程序自动建立存放通讯录文档,并输出提示要求输入所建文档的文件名。显示程序提供操作的主菜单和提示符,等待用户输入信息。若输入错误,则清屏显示主菜单。1.2.2添加通信记录在班级通讯录的末尾添加一个同学的通
2、信记录。添加成功后显示操作成功信息。1.2.3删除通信记录删除通讯录时,先显示删除子菜单,询问用户是按学号、姓名、电话号码、宿舍号中的哪一种信息查找学生记录并删除。若选择按学号删除,则显示相应的提示信息,等待输入学号。显示找到的为该学号的所有同学信息,提示是否确定删除,若用户回答是,则删除,否则返回主菜单。1.2.4查询通信记录查询通信记录时,先显示查询子菜单,询问用户按学号、姓名、电话号码、宿舍号中的哪一种信息查找学生记录。等待用户输入该项信息,用户按下回车后显示所有匹配该信息的学生记录。1.2.5显示所有通信记录将文档中保存的所有同学的通讯记录用表格的形式显示出来,第一行显示同学通讯记录的
3、标题,各个信息项之间用空格分开。1.2.6根据姓名进行排序排序时,显示排序子菜单,询问用户是按照升序还是降序进行排序。然后根据要求对记录进行排序。1.2.7保存通讯记录将修改后的同学通讯记录保存到文档中。1.2.8退出班级通信录管理系统选择该功能选项后,退出班级通信录管理系统,关闭文件,返回dos。2设计说明2.1 程序流程图设计入口显示主菜单选择功能其他选择显 示 所 有 记 录显示子菜单输入添加显示子菜单选择关键字输入修改显示子菜单选择关键字查询删除显示子菜单选择关键字查询显示记录显示子菜单选择排序方向排序保存到文件退出ListtAddEditDeleteInquirySortSaveQu
4、it结束其他错误输入2.2各功能之间的关系2.2.1用户输入信息在Add、Edit、Delete、Inquiry函数中都需要用户输入学号、姓名、电话号码、宿舍号中的一项或全部信息,可以将输入学号、姓名、电话号码、宿舍号分别用inputID(输入学号)、inputName(输入名字)、inputNum(实习输入电话号码和宿舍号)来实现,Add函数中需要调用inputID、inputName、inputNum这三个函数,而Edit、Delete、Inquiry根据用户需要调用相应的函数来实现输入功能。2.2.2搜索同学记录在Edit、Delete、Inquiry函数中都需要在已存在的同学记录中搜索
5、到与关键字匹配的同学记录。这样,可以把搜索这个功能提取出来,实现代码的共享。其中搜索按关键字的类型不同分为按学号搜索、按姓名搜索、按电话号码搜索、按宿舍号搜索。2.2.3关键字的匹配Edit、Delete、Inquiry、Sort函数中都需要进行关键字匹配和比较。把比较关键字的大小提取出来在strCmp中实现。方便进行搜索和排序。2.3文档的处理在用户进入班级通信录管理系统时,创建文本文档,当用户选择Save功能时将缓冲区中的学生记录写进文档。当用户选择List时,将缓冲区和文档中的所有记录显示出来。用户退出后,关闭文档。3详细的算法设计3.1主菜单的显示mainMenu db | List-
6、0,Add-1,Edit-2,Delete-3,inquiry-4,Sort-5 |,0dh,0ah db | Save-6,Quit-7,MainMenu-else |$ ;显示主菜单showMainM procmov ah,09hlea dx,decLineint 21hlea dx,mainMenuint 21hlea dx,decLineint 21hretshowMainM endp3.2学生记录的数据结构records db 100 dup(9 dup(20h),$,3 dup(19 dup(20h),$),0dh,0ah);学生记录,包括学号和姓名(20个字符)、班级、寝室号信息
7、。sCount db 0 ;搜索所得结果数量rCount dw 0;记录数量0-216rLen dw 72;记录长度i dw 0;计数器j dw 0;计数器IDLen dw 10;学号长度(包括$)otherLen dw 20 ; 姓名、班级、寝室号长度(包括$)ID db ID$stdName db StdName$ ;输入学生信息提示TelNum db TelNum$dormNum db DormNum$inLabel db $3.3学生通讯录信息的显示和输入学生通讯录信息的显示和输入的逻辑实现思想是一样的。都是先找到第i条记录的起始地址,即学号的开始地址。然后根据j的值确定记录内部的偏移
8、地址。然后调用相应的功能实现学生通讯信息的显示和输入。下面以信息的显示为例作详细说明。 ;输出学号outID proclea bx,records ;使用基址变址的寻址方式mov ax,i ;输出第i条记录mov cx,rLenmul cx ;i乘以每条记录的长度,得到第i条记录在records中的起始位置add bx,ax ;得到第i条记录学号的有效地址mov dx,bx ;输出学号mov ah,09hint 21hretoutID endp;输出姓名等outOther proclea bx,recordsmov ax,imov cx,rLenmul cxadd bx,ax ;得到第i条记录
9、的有效地址add bx,IDLen ;得到第i条记录姓名的有效地址mov ax,otherLenmov cx,j ;j=0,输出姓名;j=1,输出电话号码;j=2,输出宿舍号mul cx add bx,ax ;得到要输出信息的开始地址mov dx,bx ;输出mov ah,09hint 21hretoutOther endp3.4学生信息的搜索根据用户选择的关键字的类型,按照3.3所述的方法找到第i条记录的相应关键字的起始地址。遍历所有的学生通讯录记录,调用strCmp函数对记录中的关键字和用户输入的信息相比较,用result返回比较结果。如result=2表示大于,result=1表示等于,
10、result=0表示小于。3.5修改一个同学的通信记录通过关键字搜索与之匹配的同学记录,若查找不到,则修改失败。否则提示用户输入新的通讯信息,覆盖原来的信息。3.6按照姓名进行排序Sort函数采用冒泡排序作为算法进行排序。内外循环次数均为同学通讯录记录的条数,升序和降序使用的数据结构基本一致。只是升序排序时将相邻的关键字键值较大的往后移,降序排序则将相邻的关键字的键值较大的往前移动。由于字符串的交换比较复杂,则将此子过程抽象出来,记为movR函数。使用loop循环依次交换两个记录的字符。3.7删除操作的实现删除数据信息, 查询条件为学号、姓名、电话号码、宿舍号的任意一条。,删除查询结果的,具体
11、做法是:先搜索到与关键字匹配的记录,然后将不停的将后面的一条信息前移,就达到删除的效果。.3.8与文件相关的操作3.8.1创建文件(int 21h)3.8.1.1输入参数AH=3CHDS:DX=存放文件名字串(含路径)信息(以0结尾)首址 CX=文件属性3.8.1.2输出参数成功, AX=File Handles(句柄);出错, CF=1 AX=错误代码3.8.2关闭文件关闭文件的输入参数为:AH=3E,BX=通过创建或打开文件而返回的句柄输出参数:成功, 无:出错, CF=1,AX=错误代码3.8.3打开文件3.8.3.1输入参数AH=3D,AL=存取方式代码, DS:DX=文件名首址AL:
12、Bit Hex Access Mode 0 0 0 0 Read-only access0 0 1 1 Write-only access0 1 0 2 Read/write access 3.8.3.2输出参数成功, AX=File Handles(句柄);出错, CF=1 AX=错误代码 3.8.4读文件输入参数:AH=3F BX= File Handles(句柄) CX=读字节数 DS:DX=缓冲区首址输出参数:AX=实际读出的字节数 DS:DX=存放读出信息的缓冲区首址。3.8.5 写文件输入参数:AH=40H BX= File Handles(句柄)CX=写字节数 DS:DX=存放写
13、入信息缓冲区首址输出参数:AX=实际写入的字节数3.9保存保存时将缓冲区records中的信息写入文件。4源程序与执行结果4.1源程序data segmentfileID dw -1;文件代号cferror db Create file error!,$;创建文件失败信息oferror db Open file error,$;打开文件失败信息rferror db Read file error!,$;读取文件失败信息wferror db Write file error!,$;写入文件失败信息msgInSdb Input success!,$;提示输入成功msgStore db Store Success!$msgadd db Add success!,$ms