您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理课程设计-通讯录及文件管理系统
《微机原理与接口技术》课程设计报告——通讯录管理系统及简单文件管理一、课程设计目的:综合运用本课程知识,编写简单小型的应用程序,以复习巩固课堂所学的理论知识,提高程序设计的能力,了解程序设计及运行的机制,对微机系统有更好的认识,为实际应用奠定一定的基础。二、课程设计时间安排:第一天:教师布置设计任务,讲解设计要求,提示设计要点。第二~四天:查阅资料(在图书馆或上网),提出设计方案(2~3个),对提出的方法作比较以选出性价比最高的设计方法。第三~七天:画出详细电路图,编写程序,调试程序,得出实验结果并写出设计报告。三、任务分析:3.1任务要求简单的信息管理能力,信息的存储采用文件的形式;有添加、删除、查找和复制的功能,便于使用者使用;具有简单的文件管理功能,如问价的复制和删除;具有比较友好的使用界面;3.2方案介绍对于本题的要求,我选取的一下的解决方案:一、数据结构的选择:数据结构有线性表和链表两种选择,由于本题中采用文件的形式管理,采用链表程序复杂不好理解,线性表操作简单,但对内存的要求比较高,综合比较,此次设计采用线性表;二、文件的管理:DOS系统功能调用中有关于磁盘文件管理的一系列功能,在仔细阅读和学习之后,对文件的管理有了大致的了解。以下是从网上查找到的BIOS和DOS部分功能调用:表1:BIOS系统功能调INT10HAH功能调用参数返回参数/注释0设置显示模式AL=02H显示模式:80×2516色文本2用文本坐标下设置光标位置BH=页号DH=行DL=列6初始化屏幕或向上滚屏AL=滚动行数(0—清窗口)BH=属性CH=左上角行号CL=左上角列号DH=右下角行号DL=右下角列号9在光标位置显示字符及其属性BH=显示页AL=字符BL=属性CX=字符重复次数表2:DOS系统功能调INT21HAH功能调用参数返回参数01键盘输入并回显AL=输入字符02显示输出DL=输出字符07键盘输入(无回显)AL=输入字符09显示字符串DS:DX=串地址'$'结束字符串3D打开文件DS:DX=ASCIIZ串地址AL=0读=1写=2读/写成功:AX=文件代号错误:AX=错误码3E关闭文件BX=文件代号失败:AX=错误码3F读文件或设备DS:DX=数据缓冲区地址BX=文件代号CX=读取的字节数读成功:AX=实际读入的字节数AX=0已到文件尾读出错:AX=错误码4C带返回码结束AL=返回码四、软件设计分析:4.1、数据节点:由于本题是对个人通讯信息的存取,一个人的通讯信息包括以下几个方面:姓名、电话号码、地址和公司等等,本题只采用这四样信息,若要添加可以直接在数据节点中做响应的修改。如图一所示:一个节点NODE为50字节,其中:Name属性为12字节,Tel属性为12字节,Address属性为12字节,Company属性为14字节,可用以下定义方式定义:STRUCTNODEEQU32;{NameEQU0TelEQU12AddressEQU24CompanyEQU36;}类似于C语言中的结构体类型。NameTelAddressCompany012243649NODENODE1NODE2NODE3NODE4050100150199RDATA图一:节点示意图图二:线性表示意图4.2、线性表:线性表为存储信息的内存空间,首地址为RDATA,最大存储节点数为MAX_RECORD,所以线性表的大小为MAX_RECORD*STRUCTNODE个字节。按照一个节点、一个节点存取,类似C语言中对结构体的存取。线性表结构如图二所示。4.3、整体功能框图:通讯录管理系统添加记录打印记录保存记录文件打开记录文件查找记录删除记录复制记录文件删除记录文件五、主要软件流程图:5.1、主程序流程图:打印主菜单开始从键盘输入一个数DL8跳到代码地址为JUMP[DX]处DX=0:退出DX=1:调用添加函数和保存函数DX=2:调用打印函数……DX=7:调用删除文件函数输入一个字符字符为Enter键YNNY5.2、添加记录:ADDRECORD保护现场BX指向现存信息的最后一个节点的下一节点COUNT++在RDATA[BX+PNAME]处写入新的名字在RDATA[BX+PTEL]处写入新的号码在RDATA[BX+PADDRESS]处写入新的地址在RDATA[BX+PCOMPANY]处写入新的公司名恢复现场结束5.3、保存信息文件:SAVEFILE保护现场3CH号系统功能打开文件40H号功能存储COUNT和RDATA区所有存储的信息3EH号系统功能关闭文件恢复现场结束六、系统效果图:6.1开始界面6.2添加记录6.3输入多个记录6.4保存记录6.5查找记录6.6删除记录6.7文件复制6.8删除文件七、所有程序代码:见附录。八、课程设计心得体会这次课程设计花了很多时间,本来是想做关于硬件的题目,但是由于各种原因,没有结果。于是决定换了个题目,做软件的题目。之前用C语言写过相似的程序,第一次用汇编语言写比较大的程序,关于文件的那一块没有一点点的了解,只有从网上找到响应的资料,所以花了很多的时间学习这些系统功能。在学习了这些功能后,开始着手写代码,写了很长时间,代码很长,不断调试,不断翻书找资料,将系统功能分解,最后将所有功能组合成一个应用程序,最终调试成功。这次写程序的经历告诉我:不知道不明白的东西不可怕,可怕的是不去寻找途径去了解、去学习;只要自己付出了努力,就一定会收获成功的。代码长了不可怕,只要自己有信心成功,加上正确的方法,坚持不放弃,仔细分析,仔细调试,就一定会有结果的。九、参考文献:朱定华,微机原理、汇编与接口技术,清华大学出版社,2005附录所有源代码如下:stacksegmentstack'stack'dw100dup(0)stackendsdatasegmentBUFFLENEQU50INFOR1DB0DH,0AH,0DH,0AH,'Pleaseinputthepathandthegoalfile(*:\*.*):',0DH,0AH,0DH,0AH,'$'INFOR2DB0DH,0AH,0DH,0AH,'Pleaseinputthepathandthesourcefile(*:\*.*):',0DH,0AH,0DH,0AH,'$'INFOR3DB0DH,0AH,0DH,0AH,'Copysuccess!$',0DH,0AHERROR1DB0DH,0AH,'Cannotopenthefile!',07H,'$'ERROR2DB0DH,0AH,'Cannotcreatthefile!',07H,'$'ERROR3DB0DH,0AH,'Readingerror!',07H,'$'ERROR4DB0DH,0AH,'Writingerror!',07H,'$';错误命令提示HANDLE1DW0HANDLE2DW0BUFFERDBBUFFLENDB?DBBUFFLENDUP(0);定义一个缓存区PRINT_HEADDB'NameTelAddressCompany',0DH,0AHDB'*****************************************',0DH,0AH,'$'FILE_NAMEDB'D:\llq\TeleNote.txt',00H;savethefilepathERROR_CREATEDB'failedcreatefile...',0DH,0AH,'$'ERROR_WRITEDB'failedwritefile...',0DH,0AH,'$'ERROR_OPENDB'failedopenfile...',0DH,0AH,'$'ERROR_READDB'failedreadfile...',0DH,0AH,'$'ERROR_FINDDB'notfoundfile...',0DH,0AH,'$'FILE_SAVEDB'savingthefile...',0DH,0AH,'$'FILE_WRITEDB'writesuccessfully...',0DH,0AH,'$'FILE_OPENDB'openingthefile...',0DH,0AH,'$'FILE_READDB'readsuccessfully...',0DH,0AH,'$'HANDLEDW0;filehandleBACK_MENUDB'pressEntertomain_menu...','$'MAIN_MENUDB0dh,0ah,'*************************************************'DB0dH,0aH,'**************CommunicationSystem***************',0dH,0aH,0dH,0aHDB'(1)ADD(2)PRINT',0dH,0aH,0dH,0aHDB'(3)SAVE(4)OPEN',0dH,0aH,0dH,0aHDB'(5)FIND(6)DELETE',0dH,0aH,0dH,0aHDB'(7)COPYFILE(8)DELETEFILE',0dH,0aH,0dH,0aHDB'(0)EXIT',0dH,0aHDB0dh,0ah,'*************************************************',0dh,0ah,0dh,0ahDB'PleaseEnteraNumber:$'JUMPDWJUMP_EXITDWJUMP_ADDDWJUMP_PRINTDWJUMP_SAVEDWJUMP_OPENDWJUMP_FINDDWJUMP_DELETEDWJUMP_COPYDWJUMP_DEL_FILENUM_GETDB0;getanintegerNUM_STRINGDB32,0,32DUP(0);getastringSTRUCTNODEEQU50;保存记录节点PNAMEEQU0;姓名区域PTELEQU12;号码区域PADDRESSEQU24;地址区域PCOMPANYEQU36BUF_STRINGDB12,0,12DUP(0);输入字符串存储区INPUT_NAMEDB'Name:$'INPUT_TELDB'Tel:$'INPUT_ADDRESSDB'Address:$'INPUT_COMPANYDB'Company:$'MAX_RECORDEQU10;保存最大记录量RDATADB(STRUCTNODE*MAX_RECORD)DUP(0);记录存储区域COUNTDB0;已经保存的记录数dataendscodesegmentstartprocfarassumess:stack,cs:code,ds:datapushdssubax,axpushaxmovax,datamovds,ax;...........................................;打印菜单PRINT_MENU:;打印主菜单MOVDX,OFFSETMAIN_MENUMOVAH,09HINT21HCALLGET_NUMBER;输入一个整数,存入DL中CALLHUANHANG;回车换行CMPDL,8JAPRINT_MENU;如果输入的数大于6,继续回到主菜单MOVDH,0MOVDI,DX;DHDL值给DISHLDI,1;DI乘以2JMPJUMP[DI];跳转到相应的目录JMPPRINT_MENUJUMP_EXIT:;退出RETJUMP_ADD:CALLADDRECORD;添加记录CALLSAVERECORD;保存记录JMPFINISHJUMP_PRINT:CALLPRINTRECORD;打印记录JMPFINISHJUMP_SAVE:CALLSAVERECORD;保存记录JMPFINISHJUMP_OPEN:CALLREADRECORD;从文件读记录CALLPRINTRECORD;打印记录JMPFINISHJUMP_FIND:CALLFINDRECORD;通过名字查找记录JMPFINISHJUMP_DELETE:CALLDELECTRECORD;通过名字删除记录CALLPRINTR
本文标题:微机原理课程设计-通讯录及文件管理系统
链接地址:https://www.777doc.com/doc-3380117 .html