汇编人事档案管理程序设计报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《汇编语言程序设计》课程设计题目:人事档案文件管理2013-11-26一.设计目的汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取、图形颜色的显示与调整等相关知识。通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。二.设计内容在文档中创建一个person.txt的文本文件,它包含id号、姓名、年龄、性别、电话、通信地址等六项内容,先编写一项如下图界面的功能:实现如下功能:(1)i命令,实现数据输入,在末尾添加(2)f命令,实现数据查找,按名字进行查找(3)d命令,实现数据的删除,按名字进行查找删除。(4)o命令,实现数据的排序,按名字进行排序(5)l命令,实现数据的显示,(6)q命令,实现退出,并将数据重新写入三.程序设计原理(1)本次实验是模块化程序设计思想,通过一个主程序,调用其他模块的子程序,①:文件打开,如果能打开文件便读取其中的内容,否则的话,便创建文件,接着执行以后的代码。②:宏的定义:实验中做了一个显示字符串的宏,方便以后显示各种字符串③:背景颜色的实现:通过调用int10h的功能,实现s草绿色的背景④:插入程序:通过查寻是否存在当前输入的id,如果不存在,则继续输入,如果存在则停止输入。输入的时候计算输入的字节,不足的用空格补充,并将输入的内容保存到内存里,当关闭文件时,保存到文件里,同时设置指针指向数据段的末尾。程序的框图如下:cmpal,’I’jnzerrorcallinput输入输入idY/N输入id进行检查,调用check函数,设置flag=bp,初始值设置bp=0,如果存在bp=0,否则bp=1;YNYY⑤:显示程序,首先判断文件中是不是有内容,通过设置是一个全局count记录文件的个数,如果记录为零,则退出,返回主菜单,否则每次从内存中取60个字节。到另一个缓存显示,用count计数,显示一次,count--;⑥:查找模块:首先提示用户输入想要查找的名字,调整指针,然后用字符串cmpsw比较名字,直到最后一个名字为止,若找到则显示,不存在,则提示;程序框图:保存到数据段输入名字输入性别输入年龄输入地址输入电话Ret结束CheckBP=0?调用storid保存到stu中,调用inputname调用inputsex调用inputold调用inputaddress调用inputphone,如果输入结束,通过回车键进入主页面。名字查找输入要查找的名字关键代码:leasi,stuaddsi,10;指向记录第一个人的姓名movbx,sinase10:leadi,_name;存放待查人的姓名地址YNNY⑦:删除程序:通过名字进行查找,如果不存在就报错,如果存在多条记录进行提示,选择删除那条记录:程序框图:NYsi-数据段第一个名字di=输入的名字bp=0找到名字Si移到下一个名字si=指向学生信息头输出学生信息名字比较Count-1COUNT=0?RET结束名字删除查找名字相同的记录Bp1?BP3?删除第bx个记录di=del[bp]Bp作为一个标志:Bp=1;无记录3Bp1;有一条记录Bp3;有多调记录NYNY⑧:排序程序:若只有一条记录或者没有直接跳出,否则按照Ascii码排序,排序用冒泡排序算法:程序框图:si=endaddrendaddrSiendaddr-倒数第二个名字si-第一个名字swapped=0di-si的下一个名字Ax=dibx=sirepecmpsb这里采用冒泡算法,从第一个数开始对相邻的两个数进行比较,如果次序不对,进行交换。从图中可以看出,为了提高效率,设置了一个标志位,每次进入外循环,就将标志位值零,在内循环每做一次交换,就将该标志位值1,在每次内循环结束后,可测试标志位是否是0,如果是0.则结束排序,否则在进行一次外循环。这种算法效率较高一些。YNNNY⑨:退出程序:打开文件,把数据段的内容读入文件,否则创建文件,同是根据count,写入最后一条记录,在末尾‘’,关闭文件。四.程序分工苏林东:模块的整合与颜色的调配,还有文件的建立与相关模块的制作吴威:输入模块和删除模块的制作,关闭文件的制作。曹锦峰:查询模块和排序模块的制作。五.源程序及运行结果:(1)源程序:datasegmentHHDB0,0,':'MMDB0,0,':'SS1DB0,0Si=di?disiSwapped=1Si=axSi=endaddrSwapped=0?结束retmess1db'id:','$'mess2db'name:','$'mess3db'old:','$'mess4db'sex:','$'mess5db'address:','$'mess6db'phonenumber:','$'mess7db'entererror!!!',0dh,0ah,'$'mess8db'id',8dup(''),'name',5dup(''),'old','sex','address',5dup(''),'telphone',13,10,'$'mess9db'studentinformationinthetableis:',13,10,'$'mess10db'pleaseenterthename:',13,10,'$'mess11db13,10,'OK,youarequit,welcomethenext!!','$'mess13db'sorry,createfileisnotsuccess!!',13,10,'$'mess14db'NoRecords!!!',13,10,'$'mess15db'sorry,theinputisnotfound!!!',13,10,'$'mess16db'Doyouwanttodeletethismessae(y/n)?',13,10,'$'mess17db'pleasechoosewhichonedoyouwanttodelete(1,2...):','$'mess18db'Deletesuccess!!',13,10,'$'mess19db'sorry,theidissame,pleaseinputagain!!',13,10,'$'mess20db'pleasepresstopastenextpage',13,10,'$'mess21db'Verygood,thesortissucessful!!',13,10,'$'idparlabelbytemaxilendb10actilendb?iddb10dup(?);学号nameparlabelbytemaxnlendb10actnlendb?_namedb10dup(?);姓名oldparlabelbytemaxolendb3actolendb?olddb3dup(?);年龄sexparlabelbytemaxslendb5actslendb?sexdb5dup(?);性别addressparlabelbytemaxalendb15actalendb?addb15dup(?);地址phoneparlabelbytemaxplendb15actplendb?phonedb15dup(?);电话号码displmacrox;显示的宏leadx,xmovah,09int21hendmstudb50dup(58dup(''),13,10);内存空间tempdb60dup(''),'$';临时存储空间crlfdb13,10,'$';换行回车menudb'*****************welcom***********************',13,10db'*i-------input*',13,10db'*f-------find*',13,10db'*d-------delete*',13,10db'*o-------sort*',13,10db'*l-------list*',13,10db'*q-------quit*',13,10db'************************************************',13,10db'pleaseinputthechoice:','$'stu1dw?;作为存放末尾的指针addressdb'f:\person.txt',0;路径count1db0;临时统计输入的个数countdb0;统计输入的个数count2db0;检查学\号时候用的fcodedw?;文件代号endaddrdw?;排序时用到,及存储末尾指针end1db'';count3db0;显示的时候用,分页deldw20dup(?)swappeddb0;交换标志位dataends;-----------------代码段--------------------codesegmentassumecs:code,ds:data,es:datamainprocfarmovax,datamovds,axmoves,axstart:movax,0600hcallscrenleadi,stucallopencldmovstu1,dimenu1:displmenu;显示菜单movah,01int21hmovbl,aldisplcrlfmoval,blandal,5fh;把输入的选择都转化为大写insert:cmpal,'I'jnzlistcallinputjmpmenu1list:cmpal,'L'jnzdelecalldisplaydisplcrlfjmpmenu1dele:cmpal,'D'jnzfindcalldeletdisplcrlfjmpmenu1find:cmpal,'F'jnzsortcallsearchdisplcrlfjmpmenu1sort:cmpal,'O'jnzquitcallnamesortdisplcrlfdisplmess21jmpmenu1quit:cmpal,'Q'jzovererror:displmess7jmpmenu1over:callclosedisplmess11movah,4chint21hretmainendp;--------------插入模块---------------inputprocnearmovdi,stu1inputloop:cldagain:movbp,0displmess1callinputid;输入学号cmpactilen,0jzA10cmpcount1,50jeA10callcheck;检查学号是否重复cmpbp,0jnzagaincallstorid;保存到studisplmess2callinputname;输入名字displmess3callinputold;输入年龄displmess4callinputsex;输入性别displmess5callinputaddress;输入地址displmess6callinputphone;输入电话adddi,2jmpinputloopA10:movah,count1;记录数movcount,ahmovstu1,diretinputendp;------------输入学号模块-----------------inputidprocnearmovah,0ahleadx,idparint21hdisplcrlfmovbh,0movbl,actilenmovcx,10subcx,bxloopn:movid[bx],20hincbxlooploopnretinputidendp;----------------相同学号检查段------------checkprocnearmovbp,0movah,count1movcount2,ahmovsi,stu1subsi,60movendaddr

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功