班级通信录管理系统汇编课程设计.docx
《班级通信录管理系统汇编课程设计.docx》由会员分享,可在线阅读,更多相关《班级通信录管理系统汇编课程设计.docx(51页珍藏版)》请在冰豆网上搜索。
![班级通信录管理系统汇编课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/29/d7a9d499-c5cf-4ab9-be4a-b6848ad18de2/d7a9d499-c5cf-4ab9-be4a-b6848ad18de21.gif)
班级通信录管理系统汇编课程设计
班级通信录管理系统
1需求说明
1.1实验要求
1.1.1建立通讯录,添加一个同学的通信记录,删除一个同学的通信记录,修改一个同学的通信记录,查询一个同学的通信记录,显示所有同学的通信记录,能根据姓名或宿舍号进行排序。
1.1.2通信记录包括学号、姓名、电话号码、宿舍号等信息,所有信息最终用文件保存。
1.2功能简述
1.2.1建立通信录
运行程序后,程序自动建立固有的通讯录。
1.2.2添加通信记录
进入“添加"界面,根据提示,依次添加同学的通信记录条目。
添加成功,后显示操作成功信息。
1.2.3删除通信记录
进入“删除"界面,依据姓名删除信息。
输入姓名后,显示该同学的所有信息,并显示操作成功。
删除后,返回主菜单。
1.2.4查询通信记录
进入“查询"界面,询问用户按姓名或学号查找学生记录。
待用户正确输入已存有的用户姓名或学号后,按回车键后显示所有匹配该信息的学生记录。
若输入信息错误或是无该用户没记录,则显示操作错误。
1.2.5显示所有通信记录
进入“显示"界面,将通讯录中所有同学的通讯记录分行显示出来,每行中同学的不同信息间隔表示。
1.2.6根据姓名进行排序
排序时,显示排序子菜单,按照姓名中字母的升序对记录进行排序。
1.2.7保存通讯记录
将填写好的同学通讯记录写入到固定文件中。
1.2.8退出班级通信录管理系统
选择该功能选项后,退出班级通信录管理系统,关闭文件,返回DOS。
2设计说明
2.1程序流程图设计
入口
主界面
选择功能
SelectInsertModifyDeleteWriteShowEsc
退出系统
显示所有记录
写入文件
删除界面
查询界面
添加界面
修改界面
Back
结束
2.2各功能之间的关系
2.2.1用户输入信息
在选择Insert选项后,进入adder子程序,需要用户依次输入姓名、学号、宿舍号、电话号码,输入信息分别存入manelist、studlist、dormlist、telelist数组中。
2.2.2搜索同学记录
建立selectbyname和selectbystud子程序,在select子程序中灵活调用,利用相关信息搜索与关键字匹配的同学记录。
同时,可以把搜索这个功能提取出来,实现代码的共享。
其中,搜索按关键字的类型不同可分为按姓名搜索和按学号搜索。
2.2.3关键字的匹配
selectbyname和selectbystud子程序中都需要进行关键字匹配和比较,故把比较关键字的大小提取出来在strCmp子程序中实现,方便进行搜索和排序。
2.3文档的处理
在用户进入班级通信录管理系统时,若要将输入的信息用文件保存,用户可选择Writetofile选项,将缓冲区和文档中的所有记录显示出来。
用户退出后,关闭文件。
3详细的算法设计
3.1主程序的设计
start:
movax,data
movds,ax
moves,ax
callcshdata
menu1:
callclear
calldisplaytitle
movah,01h
int21h
cmpal,'1'
jzsel
cmpal,'2'
jzadde
cmpal,'3'
jzmodi
cmpal,'4'
jzdel
cmpal,'5'
jzdis
cmpal,'7'
jzwrt
cmpal,'8'
jzout1
jmpmenu1
sel:
callclear
callselect
jmpback
adde:
callclear
calladder
jmpback
modi:
callclear
callmodify
jmpback
del:
callclear
calldelete
jmpback
dis:
callclear
calldisdata
jmpback
wrt:
callclear
callwrite
back:
leadx,backstr;返回主菜单提示语“Pleaseenter6tobacemainmenu!
”
movah,09h
int21h
movah,01h
int21h
easi,choice
mov[si],al
cmpal,'6'
jzmenu1;输入6,返回主菜单
callclear
jmpback
out1:
movah,4ch
int21h
mainendp;主函数结束
codeends
endstart
3.2学生记录的数据结构
namelistdb20dup(20dup(0))
studlistdb20dup(20dup(0))
dormlistdb20dup(20dup(0))
telelistdb20dup(20dup(0))
newnamedb20dup(0)
newstuddb20dup(0)
newdormdb20dup(0)
newteledb20dup(0)
cntdb1dup(0)
cntselectdb1dup(0)
choicedb1dup(0)
enterdb0dh,0ah,'$'
blankdb'$'
disnamedb'Name:
$'
disstuddb'Stud:
$'
disdormdb'Dorm:
$'
disteledb'Tele:
$'
3.3学生通讯录信息的显示和输入
学生通讯录信息的显示和输入的逻辑实现思想是一样的。
都是先找到第i条记录的起始地址,即学号的开始地址。
然后根据j的值确定记录内部的偏移地址。
然后调用相应的功能实现学生通讯信息的显示和输入。
下面以信息的显示为例作详细说明。
disdataprocnear;显示所有信息
leasi,cnt;循环次数
movcl,[si]
movbx,0
disdatal:
leadx,disname
movah,09h
int21h
leadx,namelist
adddx,bx
movah,09h
int21h
leadx,blank
movah,09h
int21h
leadx,disstud
movah,09h
int21h
leadx,studlist
adddx,bx
movah,09h
int21h
leadx,blank
movah,09h
int21h
leadx,disdorm
movah,09h
int21h
leadx,dormlist
adddx,bx
movah,09h
int21h
leadx,blank
movah,09h
int21h
leadx,distele
movah,09h
int21h
leadx,telelist
adddx,bx
movah,09h
int21h
leadx,enter
movah,09h
int21h
addbx,20
loopdisdatal
ret
disdataendp
3.4学生信息的搜索
根据用户选择的关键字的类型,按照3.3所述的方法找到第i条记录的相应关键字的起始地址。
遍历所有的学生通讯录记录,调用repecmpsb语句对记录中的关键字和用户输入的信息相比较。
3.5修改一个同学的通信记录
通过关键字搜索与之匹配的同学记录,若查找不到,则修改失败。
否则提示用户输入新的通讯信息,覆盖原来的信息。
3.6按照姓名进行排序
Sort函数采用冒泡排序作为算法进行排序,内外循环次数均为同学通讯录记录的条数,由于字符串的交换比较复杂,则将此子过程抽象出来,记为movR函数。
使用loop循环依次交换两个记录的字符。
3.7删除操作的实现
删除数据信息,查询条件为姓名。
删除查询结果的具体做法是:
先搜索到与关键字匹配的记录,然后用最后一个记录将其覆盖,达到删除的效果。
.
3.8与文件相关的操作
3.8.1创建文件
filenamedb'F:
\StudentList.txt',00h
handledw?
bufferdb20dup(0)
error1db'creatingfilewrong!
',0dh,0ah.'$'
error2db'writingfilewrong!
',0dh,0ah.'$'
wrtstrdb'writetheclassaddressbook!
$'
movah,3ch
movcx,0
leadx,filename
int21h
jcerr1
movhandle,ax
3.8.2写文件
leasi,cnt
movcl,[si]
moval,cl
movdi,0
lop1:
movah,40h
movbx,handle
movcx,20
leadx,namelist
adddx,di
int21h
jcerr2
movah,40h
movbx,handle
movcx,20
leadx,dormlist
adddx,di
int21h
jcerr2
movah,40h
movbx,handle
movcx,1
leadx,distele
int21h
jcerr2
movah,40h
movbx,handle
movcx,20
leadx,telelist
adddx,di
int21h
jcerr2
adddi,20
incal
movcl,[si]
subcl,al
jmplop1
exit2:
movah,3eh
movbx,handle
int21h
exit1:
movah,4ch
int21h
err1:
movah,9
leadx,error1
int21h
jmpexit1
err2:
movah,9
leadx,error2
int21h
jmpexit2
ret
writeendp
3.8.3关闭文件
exit2:
movah,3eh
movbx,handle
int21h
exit1:
movah,4ch
int21h
err1:
movah,9
leadx,error1
int21h
jmpexit1
err2:
movah,9
leadx,error2
int21h
jmpexit2
4源程序与执行结果
4.1执行结果
4.1.1disdata函数的执行结果
4.1.2adder函数的执行结果
4.1.3modify函数的执行结果
4.1.4delete函数的执行结果
4.1.5select函数的执行结果
4.1.6Sort函数的执行结果
4.2.7Save函数的执行结果
4.2源程序
stacksegmentstack
dw512dup(?
)
stackends
datasegment
titlestrdb'Welcometothedirectory!
',0dh,0ah,'Enteryourchoiceplease!
',0dh,0ah,'$'
menustrdb'1:
Select',0dh,0ah,'2:
Insert',0dh,0ah,'3:
Modify',0dh,0ah,'4:
Delete',0dh,0ah,'5:
Showallrecord',0dh,0ah,'7:
Writetofile',0dh,0ah,'8:
Esc',0dh,0ah,'$'
namelistdb20dup(20dup(0))
studlistdb20dup(20dup(0))
dormlistdb20dup(20dup(0))
telelistdb20dup(20dup(0))
newnamedb20dup(0)
newstuddb20dup(0)
newdormdb20dup(0)
newteledb20dup(0)
filenamedb'F:
\StudentList.txt',00h
handledw?
bufferdb20dup(0)
error1db'creatingfilewrong!
',0dh,0ah.'$'
error2db'writingfilewrong!
',0dh,0ah.'$'
wrtstrdb'writetheclassaddressbook!
$'
cntdb1dup(0)
cntselectdb1dup(0)
choicedb1dup(0)
enterdb0dh,0ah,'$'
blankdb'$'
disnamedb'Name:
$'
disstuddb'Stud:
$'
disdormdb'Dorm:
$'
disteledb'Tele:
$'
backstrdb'Key6tomainmenu!
',0dh,0ah,'$'
selstr1db'1:
Selectbyname',0dh,0ah,'2:
SelectbyStudentNumber',0dh,0ah,'$'
selstr2db'Theinformation!
',0dh,0ah,'$'
selstr3db'Nameisnotexist!
',0dh,0ah,'$'
selstr4db'StudentNumberisnotexist!
',0dh,0ah,'$'
selstr5db'StudentNumberdirectoryisempty!
',0dh,0ah,'$'
addstr1db'Inputthenewinformation!
',0dh,0ah,'$'
addstr2db'StudentNumberdirectoryisfull!
',0dh,0ah,'$'
addstr3db'Addsuccessfully!
',0dh,0ah,'$'
modstr1db'Newname:
$'
modstr2db'Newstud:
$'
modstr3db'Newdorm:
$'
modstr4db'Newtele:
$'
modstr5db'Inputnewrecord!
',0dh,0ah,'$'
modstr6db'Modifiedsuccessfully!
',0dh,0ah,'$'
delstr1db'StudentNumberdirectoryisempty!
',0d,0ah,'$'
delstr2db'Deletedsuccessfully!
',0dh,0ah,'$'
name1db'zhansan$'
name2db'lisi$'
name3db'wangwu$'
StudentNumber1db'1111111$'
StudentNumber2db'2222222$'
StudentNumber3db'3333333$'
dorm1db'123$'
dorm2db'456$'
dorm3db'789$'
tele1db'123456$'
tele2db'654321$'
tele3db'457895$'
dataends
codesegment
mainprocfar
assumecs:
code,ds:
data
displaytitleprocnear
leadx,titlestr
movah,9
int21h
leadx,menustr
int21h
ret
displaytitleendp
cshdataprocnear
movbx,0
leasi,name1
leadi,namelist
adddi,bx
movcx,20
cshname11:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshname12
loopcshname11
cshname12:
addbx,20
leasi,name2
leadi,namelist
adddi,bx
movcx,20
cshname21:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshname22
loopcshname21
cshname22:
addbx,20
leasi,name3
leadi,namelist
adddi,bx
movcx,20
cshname31:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshname32
loopcshname31
cshname32:
addbx,20
movax,bx;初始化计数器cnt
movbl,20
divbl
leasi,cnt
mov[si],al
movbx,0
leasi,StudentNumber1
leadi,studlist
adddi,bx
movcx,20
cshstud11:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshstud12
loopcshstud11
cshstud12:
addbx,20
leasi,StudentNumber2
leadi,studlist
adddi,bx
movcx,20
cshstud21:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshstud22
loopcshstud21
cshstud22:
addbx,20
leasi,StudentNumber3
leadi,studlist
adddi,bx
movcx,20
cshstud31:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshstud32
loopcshstud31
cshstud32:
addbx,20
movbx,0
leasi,dorm1
leadi,dormlist
adddi,bx
movcx,20
cshdorm11:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshdorm12
loopcshdorm11
cshdorm12:
addbx,20
leasi,dorm2
leadi,dormlist
adddi,bx
movcx,20
cshdorm21:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshdorm22
loopcshdorm21
cshdorm22:
addbx,20
leasi,dorm3
leadi,dormlist
adddi,bx
movcx,20
cshdorm31:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshdorm32
loopcshdorm31
cshdorm32:
addbx,20
movbx,0
leasi,tele1
leadi,telelist
adddi,bx
movcx,20
cshtele11:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshtele12
loopcshtele11
cshtele12:
addbx,20
leasi,tele2
leadi,telelist
adddi,bx
movcx,20
cshtele21:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshtele22
loopcshtele21
cshtele22:
addbx,20
leasi,tele3
leadi,telelist
adddi,bx
movcx,20
cshtele31:
moval,[si]
mov[di],al
incsi
incdi
cmpal,'$'
jzcshtele32
loopcshtele31
cshtele32:
addbx,20
ret
cshdataendp
disdataprocnear
leasi,cnt;循环次数
movcl,[si]
movbx,0
disdatal:
leadx,disname
movah,09h
int21h
leadx,namelist
adddx,bx
movah,09h
int21h
leadx,blank
movah,09h
int21h
leadx,disstud
movah,09h
int21h