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
3、。2设计说明2.1 程序流程图设计 入口 主界面 选择功能 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
5、 call cshdata 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
6、backdel: call 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 2
7、1hmain endp ;主函数结束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
8、dup(0) enter db 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,0disda
9、tal: lea dx,disname 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 in
10、t 21h lea dx,blank 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 ? b
12、uffer 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!$ 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 d
13、x,namelist add 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 lop
14、1exit2: 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,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
15、 ah,9 lea dx,error2 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
16、 choice please!,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
17、 dup(0) newstud 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) choic
18、e db 1 dup(0)enter 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
19、,0ah,$ selstr4 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:$ mod
20、str3 db Newdorm:$ 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$ Stu
21、dentNumber2 db 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 endp
22、cshdata proc near 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 cs
23、hname21cshname22: 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,
24、20 cshstud11: 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
25、 add di,bx mov 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
26、di,dormlist add 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
27、,tele1 lea di,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
28、si,tele3 lea di,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,blank mov ah,09h int 21h lea dx,disstud mov ah,09h int 21h
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1