班级通信录管理系统(汇编课程设计).doc

上传人:精*** 文档编号:865391 上传时间:2023-10-05 格式:DOC 页数:36 大小:349.64KB
下载 相关 举报
班级通信录管理系统(汇编课程设计).doc_第1页
第1页 / 共36页
班级通信录管理系统(汇编课程设计).doc_第2页
第2页 / 共36页
班级通信录管理系统(汇编课程设计).doc_第3页
第3页 / 共36页
班级通信录管理系统(汇编课程设计).doc_第4页
第4页 / 共36页
班级通信录管理系统(汇编课程设计).doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、 班级通信录管理系统1 需求说明1.1实验要求1.1.1建立通讯录,添加一个同学的通信记录,删除一个同学的通信记录,修改一个同学的通信记录,查询一个同学的通信记录,显示所有同学的通信记录,能根据姓名或宿舍号进行排序。1.1.2通信记录包括学号、姓名、电话号码、宿舍号等信息,所有信息最终用文件保存。1.2功能简述1.2.1 建立通信录运行程序后,程序自动建立固有的通讯录。1.2.2添加通信记录 进入“添加界面,根据提示,依次添加同学的通信记录条目。添加成功,后显示操作成功信息。1.2.3删除通信记录进入“删除界面,依据姓名删除信息。输入姓名后,显示该同学的所有信息,并显示操作成功。删除后,返回主

2、菜单。1.2.4查询通信记录 进入“查询界面,询问用户按姓名或学号查找学生记录。待用户正确输入已存有的用户姓名或学号后,按回车键后显示所有匹配该信息的学生记录。若输入信息错误或是无该用户没记录,则显示操作错误。1.2.5显示所有通信记录 进入“显示界面,将通讯录中所有同学的通讯记录分行显示出来,每行中同学的不同信息间隔表示。1.2.6根据姓名进行排序排序时,显示排序子菜单,按照姓名中字母的升序对记录进行排序。1.2.7保存通讯记录 将填写好的同学通讯记录写入到固定文件中。1.2.8退出班级通信录管理系统 选择该功能选项后,退出班级通信录管理系统,关闭文件,返回DOS。2设计说明2.1 程序流程

3、图设计 入口 主界面 选择功能 Select Insert Modify Delete Write Show Esc 退出系统 显示所有记录 写入文件 删除界面 查询界面 添加界面 修改界面 Back 结束2.2各功能之间的关系2.2.1用户输入信息在选择Insert选项后,进入adder子程序,需要用户依次输入姓名、学号、宿舍号、电话号码,输入信息分别存入manelist、studlist、dormlist、telelist数组中。2.2.2搜索同学记录建立selectbyname和selectbystud子程序,在select子程序中灵活调用,利用相关信息搜索与关键字匹配的同学记录。同时,

4、可以把搜索这个功能提取出来,实现代码的共享。其中,搜索按关键字的类型不同可分为按姓名搜索和按学号搜索。2.2.3关键字的匹配selectbyname和selectbystud子程序中都需要进行关键字匹配和比较,故把比较关键字的大小提取出来在strCmp子程序中实现,方便进行搜索和排序。2.3文档的处理在用户进入班级通信录管理系统时,若要将输入的信息用文件保存,用户可选择Write to file选项,将缓冲区和文档中的所有记录显示出来。用户退出后,关闭文件。3详细的算法设计3.1主程序的设计start: mov ax,data mov ds,ax mov es,ax call cshdata

5、menu1: call clear call displaytitle mov ah,01h int 21h cmp al,1 jz sel cmp al,2 jz adde cmp al,3 jz modi cmp al,4 jz del cmp al,5 jz dis cmp al,7 jz wrt cmp al,8 jz out1 jmp menu1 sel: call clear call select jmp back adde: call clear call adder jmp backmodi: call clear call modify jmp backdel: call

6、clear call delete jmp backdis: call clear call disdata jmp backwrt: call clear call writeback: lea dx,backstr ;返回主菜单提示语“Please enter 6 to bace main menu!” mov ah,09h int 21h mov ah,01h int 21h ea si,choice mov si,al cmp al,6 jz menu1 ;输入6,返回主菜单 call clear jmp backout1: mov ah,4ch int 21hmain endp ;主

7、函数结束code ends end start3.2学生记录的数据结构 namelist db 20 dup(20 dup(0) studlist db 20 dup(20 dup(0) dormlist db 20 dup(20 dup(0) telelist db 20 dup(20 dup(0) newname db 20 dup(0) newstud db 20 dup(0) newdorm db 20 dup(0) newtele db 20 dup(0) cnt db 1 dup(0) cntselect db 1 dup(0) choice db 1 dup(0) enter d

8、b 0dh,0ah,$ blank db $ disname db Name:$ disstud db Stud:$ disdorm db Dorm:$ distele db Tele:$3.3学生通讯录信息的显示和输入学生通讯录信息的显示和输入的逻辑实现思想是一样的。都是先找到第i条记录的起始地址,即学号的开始地址。然后根据j的值确定记录内部的偏移地址。然后调用相应的功能实现学生通讯信息的显示和输入。下面以信息的显示为例作详细说明。 disdata proc near ;显示所有信息 lea si,cnt ;循环次数 mov cl,si mov bx,0disdatal: lea dx,di

9、sname mov ah,09h int 21h lea dx,namelist add dx,bx mov ah,09h int 21h lea dx,blank mov ah,09h int 21h lea dx,disstud mov ah,09h int 21h lea dx,studlist add dx,bx mov ah,09h int 21h lea dx,blank mov ah,09h int 21h lea dx,disdorm mov ah,09h int 21h lea dx,dormlist add dx,bx mov ah,09h int 21h lea dx,b

10、lank mov ah,09h int 21h lea dx,distele mov ah,09h int 21h lea dx,telelist add dx,bx mov ah,09h int 21h lea dx,enter mov ah,09h int 21h add bx,20 loop disdatalretdisdata endp3.4学生信息的搜索根据用户选择的关键字的类型,按照3.3所述的方法找到第i条记录的相应关键字的起始地址。遍历所有的学生通讯录记录,调用repe cmpsb语句对记录中的关键字和用户输入的信息相比较。3.5修改一个同学的通信记录通过关键字搜索与之匹配的同

11、学记录,若查找不到,则修改失败。否则提示用户输入新的通讯信息,覆盖原来的信息。3.6按照姓名进行排序Sort函数采用冒泡排序作为算法进行排序,内外循环次数均为同学通讯录记录的条数,由于字符串的交换比较复杂,则将此子过程抽象出来,记为movR函数。使用loop循环依次交换两个记录的字符。3.7删除操作的实现删除数据信息,查询条件为姓名。删除查询结果的具体做法是:先搜索到与关键字匹配的记录,然后用最后一个记录将其覆盖,达到删除的效果。.3.8与文件相关的操作3.8.1创建文件 filename db F:StudentList.txt,00h handle dw ? buffer db 20 du

12、p(0) error1 db creating file wrong!,0dh,0ah.$ error2 db writing file wrong!,0dh,0ah.$ wrtstr db write the class address book!$ mov ah,3ch mov cx,0 lea dx,filename int 21h jc err1 mov handle,ax3.8.2写文件 lea si,cnt mov cl,si mov al,cl mov di,0lop1: mov ah,40h mov bx,handle mov cx,20 lea dx,namelist add

13、 dx,di int 21h jc err2 mov ah,40h mov bx,handle mov cx,20 lea dx,dormlist add dx,di int 21h jc err2 mov ah,40h mov bx,handle mov cx,1 lea dx,distele int 21h jc err2 mov ah,40h mov bx,handle mov cx,20 lea dx,telelist add dx,di int 21h jc err2 add di,20 inc al mov cl,si sub cl,al jmp lop1exit2: mov ah

14、,3eh mov bx,handle int 21hexit1: mov ah,4ch int 21herr1: mov ah,9 lea dx,error1 int 21h jmp exit1err2: mov ah,9 lea dx,error2 int 21h jmp exit2ret write endp 3.8.3关闭文件exit2: mov ah,3eh mov bx,handle int 21hexit1: mov ah,4ch int 21herr1: mov ah,9 lea dx,error1 int 21h jmp exit1err2: mov ah,9 lea dx,e

15、rror2 int 21h jmp exit24源程序与执行结果4.1执行结果4.1.1 disdata函数的执行结果4.1.2 adder函数的执行结果4.1.3 modify函数的执行结果4.1.4 delete函数的执行结果4.1.5 select函数的执行结果4.1.6 Sort函数的执行结果4.2.7 Save函数的执行结果4.2源程序stack segment stack dw 512 dup(?)stack endsdata segment titlestr db Welcome to the directory!,0dh,0ah,Enter your choice please

16、!,0dh,0ah,$ menustr db 1:Select,0dh,0ah,2:Insert,0dh,0ah,3:Modify,0dh,0ah,4:Delete,0dh,0ah,5:Show all record,0dh,0ah,7:Write to file,0dh,0ah,8:Esc,0dh,0ah,$ namelist db 20 dup(20 dup(0) studlist db 20 dup(20 dup(0) dormlist db 20 dup(20 dup(0) telelist db 20 dup(20 dup(0) newname db 20 dup(0) newstu

17、d db 20 dup(0) newdorm db 20 dup(0) newtele db 20 dup(0)filename db F:StudentList.txt,00h handle dw ? buffer db 20 dup(0) error1 db creating file wrong!,0dh,0ah.$ error2 db writing file wrong!,0dh,0ah.$ wrtstr db write the class address book!$cnt db 1 dup(0) cntselect db 1 dup(0) choice db 1 dup(0)e

18、nter db 0dh,0ah,$ blank db $ disname db Name:$ disstud db Stud:$ disdorm db Dorm:$ distele db Tele:$ backstr db Key 6 to main menu!,0dh,0ah,$ selstr1 db 1:Select by name,0dh,0ah,2:Select by Student Number,0dh,0ah,$ selstr2 db The information!,0dh,0ah,$ selstr3 db Name is not exist!,0dh,0ah,$ selstr4

19、 db Student Number is not exist!,0dh,0ah,$ selstr5 db Student Number directory is empty!,0dh,0ah,$ addstr1 db Input the new information!,0dh,0ah,$ addstr2 db Student Number directory is full!,0dh,0ah,$ addstr3 db Add successfully!,0dh,0ah,$ modstr1 db Newname:$ modstr2 db Newstud:$ modstr3 db Newdor

20、m:$ modstr4 db Newtele:$ modstr5 db Input new record!,0dh,0ah,$ modstr6 db Modified successfully!,0dh,0ah,$ delstr1 db Student Number directory is empty!,0d,0ah,$ delstr2 db Deleted successfully!,0dh,0ah,$ name1 db zhansan$ name2 db lisi$ name3 db wangwu$ StudentNumber1 db 1111111$ StudentNumber2 db

21、 2222222$ StudentNumber3 db 3333333$ dorm1 db 123$ dorm2 db 456$ dorm3 db 789$ tele1 db 123456$ tele2 db 654321$ tele3 db 457895$data endscode segment main proc far assume cs:code,ds:datadisplaytitle proc near lea dx,titlestr mov ah,9 int 21h lea dx,menustr int 21h retdisplaytitle endpcshdata proc n

22、ear mov bx,0 lea si,name1 lea di,namelist add di,bx mov cx,20 cshname11: mov al,si mov di,al inc si inc di cmp al,$ jz cshname12 loop cshname11cshname12: add bx,20lea si,name2 lea di,namelist add di,bx mov cx,20 cshname21: mov al,si mov di,al inc si inc di cmp al,$ jz cshname22 loop cshname21cshname

23、22: add bx,20lea si,name3 lea di,namelist add di,bx mov cx,20 cshname31: mov al,si mov di,al inc si inc di cmp al,$ jz cshname32 loop cshname31cshname32: add bx,20mov ax,bx ;初始化计数器cnt mov bl,20 div bl lea si,cnt mov si,al mov bx,0 lea si,StudentNumber1 lea di,studlist add di,bx mov cx,20 cshstud11:

24、mov al,si mov di,al inc si inc di cmp al,$ jz cshstud12 loop cshstud11cshstud12: add bx,20lea si,StudentNumber2 lea di,studlist add di,bx mov cx,20 cshstud21: mov al,si mov di,al inc si inc di cmp al,$ jz cshstud22 loop cshstud21cshstud22: add bx,20lea si,StudentNumber3 lea di,studlist add di,bx mov

25、 cx,20 cshstud31: mov al,si mov di,al inc si inc di cmp al,$ jz cshstud32 loop cshstud31cshstud32: add bx,20 mov bx,0 lea si,dorm1 lea di,dormlist add di,bx mov cx,20 cshdorm11: mov al,si mov di,al inc si inc di cmp al,$ jz cshdorm12 loop cshdorm11cshdorm12: add bx,20 lea si,dorm2 lea di,dormlist ad

26、d di,bx mov cx,20 cshdorm21: mov al,si mov di,al inc si inc di cmp al,$ jz cshdorm22 loop cshdorm21cshdorm22: add bx,20 lea si,dorm3 lea di,dormlist add di,bx mov cx,20 cshdorm31: mov al,si mov di,al inc si inc di cmp al,$ jz cshdorm32 loop cshdorm31cshdorm32: add bx,20 mov bx,0 lea si,tele1 lea di,

27、telelist add di,bx mov cx,20 cshtele11: mov al,si mov di,al inc si inc di cmp al,$ jz cshtele12 loop cshtele11cshtele12: add bx,20 lea si,tele2 lea di,telelist add di,bx mov cx,20 cshtele21: mov al,si mov di,al inc si inc di cmp al,$ jz cshtele22 loop cshtele21cshtele22: add bx,20 lea si,tele3 lea d

28、i,telelist add di,bx mov cx,20 cshtele31: mov al,si mov di,al inc si inc di cmp al,$ jz cshtele32 loop cshtele31cshtele32: add bx,20 retcshdata endpdisdata proc near lea si,cnt ;循环次数 mov cl,si mov bx,0disdatal: lea dx,disname mov ah,09h int 21h lea dx,namelist add dx,bx mov ah,09h int 21hlea dx,blan

29、k mov ah,09h int 21h lea dx,disstud mov ah,09h int 21h lea dx,studlist add dx,bx mov ah,09h int 21h lea dx,blank mov ah,09h int 21h lea dx,disdorm mov ah,09h int 21h lea dx,dormlist add dx,bx mov ah,09h int 21h lea dx,blank mov ah,09h int 21h lea dx,distele mov ah,09h int 21h lea dx,telelist add dx,

30、bx mov ah,09h int 21h lea dx,enter mov ah,09h int 21h add bx,20 loop disdatal retdisdata endpadder proc near lea si,cnt ;判断学号是否已满 mov al,si cmp al,20 jb adder5 lea dx,addstr2 mov ah,09h int 21h jmp adder6adder5: lea dx,addstr1 mov ah,09h int 21h lea dx,disname mov ah,09h int 21h mov cl,19 lea si,new

31、nameadder1: mov ah,01h int 21h cmp al,0dh je adder2 mov si,al inc si loop adder1adder2: mov al,24h mov si,al lea si,cnt ;计算目的地址的偏移量 mov bl,si xor ax,ax mov al,20 mul bl lea si,newname lea di,namelist add di,ax mov cx,20 cld rep movsb lea dx,enter mov ah,09h int 21h lea dx,disstud mov ah,09h int 21hm

32、ov cl,19 lea si,newstudadder3: mov ah,01h int 21h cmp al,0dh je adder4 mov si,al inc si loop adder3adder4: mov al,24h mov si,al lea si,cnt mov bl,si xor ax,ax mov al,20 mul bl lea si,newstud lea di,studlist add di,ax mov cx,20 cld rep movsb lea dx,enter mov ah,09h int 21h lea dx,disdorm mov ah,09h i

33、nt 21h mov cl,19 lea si,newdormadder7: mov ah,01h int 21h cmp al,0dh je adder8 mov si,al inc si loop adder7adder8: mov al,24h mov si,al lea si,cnt mov bl,si xor ax,ax mov al,20 mul bl lea si,newdorm lea di,dormlist add di,ax mov cx,20 cld rep movsb lea dx,enter mov ah,09h int 21h lea dx,distele mov

34、ah,09h int 21h mov cl,19 lea si,newteleadder9: mov ah,01h int 21h cmp al,0dh je adder10 mov si,al inc si loop adder9adder10: mov al,24h mov si,al lea si,cnt mov bl,si xor ax,ax mov al,20 mul bl lea si,newtele lea di,telelist add di,ax mov cx,20 cld rep movsb lea dx,enter mov ah,09h int 21h lea si,cn

35、t ;计数器加1 mov al,si inc al mov si,al lea dx,addstr3 mov ah,09h int 21h lea si,newname mov cx,20adder11: mov al,0 mov si,al inc si loop adder11 lea si,newstud mov cx,20adder12: mov al,0 mov si,al inc si loop adder12 lea si,newdorm mov cx,20adder13: mov al,0 mov si,al inc si loop adder13 lea si,newtele

36、 mov cx,20adder14: mov al,0 mov si,al inc si loop adder14adder6: retadder endpselbyname proc near lea si,cnt mov al,si cmp al,0 ja selname6 lea dx,selstr5 mov ah,09h int 21h jmp selname5selname6: lea dx,disname mov ah,09h int 21h lea si,newname mov cx,19selname1: mov ah,01h int 21h cmp al,0dh je sel

37、name2 mov si,al inc si loop selname1selname2: mov al,24h mov si,al lea dx,enter mov ah,09h int 21h lea si,cnt ;设置循环次数 mov dx,si mov bx,0 selname3: lea si,newname lea di,namelist add di,bx mov cx,20 cld repe cmpsb jz selname4 add bx,20 dec dx cmp dx,0 jnz selname3 lea dx,selstr3 ;记录不存在 mov ah,09h int

38、 21h jmp selname5selname4: lea dx,selstr2 ;存在 mov ah,09h int 21h lea dx,disname mov ah,09h int 21h lea dx,namelist add dx,bx mov ah,09h int 21h lea dx,enter mov ah,09h int 21h lea dx,disstud mov ah,09h int 21h lea dx,studlist add dx,bx mov ah,09h int 21h lea dx,enter mov ah,09h int 21h lea dx,disdor

39、m mov ah,09h int 21h lea dx,dormlist add dx,bx mov ah,09h int 21h lea dx,enter mov ah,09h int 21h lea dx,distele mov ah,09h int 21h lea dx,telelist add dx,bx mov ah,09h int 21h lea dx,enter mov ah,09h int 21h mov ax,bx ;计算器记录查询到的是第几个 mov bl,20 div bl inc al lea si,cntselect mov si,al selname5: lea s

40、i,newname mov cx,20selname7: mov al,0 mov si,al inc si loop selname7 retselbyname endpselbystud proc near lea si,cnt mov al,si cmp al,0 ja selstud6 lea dx,selstr5 mov ah,09h int 21h jmp selstud5selstud6: lea dx,disstud mov ah,09h int 21h lea si,newstud mov cx,19selstud1: mov ah,01h int 21h cmp al,0dh je selstud2 mov si,al inc si loop selstud1selstud2: mov al,24h mov si,al lea dx,enter mov ah,09h int 21h lea si,cnt ;设置循环次数 mov dx,si mov bx,0 selstud3: lea s

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 课程设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922