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

上传人:b****5 文档编号:8196241 上传时间:2023-01-29 格式:DOCX 页数:51 大小:215.85KB
下载 相关 举报
班级通信录管理系统汇编课程设计.docx_第1页
第1页 / 共51页
班级通信录管理系统汇编课程设计.docx_第2页
第2页 / 共51页
班级通信录管理系统汇编课程设计.docx_第3页
第3页 / 共51页
班级通信录管理系统汇编课程设计.docx_第4页
第4页 / 共51页
班级通信录管理系统汇编课程设计.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

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

《班级通信录管理系统汇编课程设计.docx》由会员分享,可在线阅读,更多相关《班级通信录管理系统汇编课程设计.docx(51页珍藏版)》请在冰豆网上搜索。

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

班级通信录管理系统汇编课程设计

班级通信录管理系统

 

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1