人事档案文件管理课程设计

上传人:沈*** 文档编号:122685793 上传时间:2022-07-21 格式:DOC 页数:28 大小:148KB
收藏 版权申诉 举报 下载
人事档案文件管理课程设计_第1页
第1页 / 共28页
人事档案文件管理课程设计_第2页
第2页 / 共28页
人事档案文件管理课程设计_第3页
第3页 / 共28页
资源描述:

《人事档案文件管理课程设计》由会员分享,可在线阅读,更多相关《人事档案文件管理课程设计(28页珍藏版)》请在装配图网上搜索。

1、 汇编语言程序设计课程设计 题目:人事档案文件管理 2013-11-26一 设计目的汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取、图形颜色的显示与调整等相关知识。通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。二设计内容在文档中创建一个person.txt的文本文件,它包含id号、姓名、年龄、性别、电

2、话、通信地址等六项内容,先编写一项如下图界面的功能:实现如下功能:(1) i命令,实现数据输入,在末尾添加(2) f命令,实现数据查找,按名字进行查找(3) d命令,实现数据的删除,按名字进行查找删除。(4) o命令,实现数据的排序,按名字进行排序(5) l命令,实现数据的显示,(6) q命令,实现退出,并将数据重新写入三程序设计原理 (1)本次实验是模块化程序设计思想,通过一个主程序,调用其他模块的子程序, :文件打开,如果能打开文件便读取其中的内容,否则的话,便创建文件,接着执行以后的代码。 :宏的定义:实验中做了一个显示字符串的宏,方便以后显示各种字符串 :背景颜色的实现:通过调用int

3、 10h的功能,实现s草绿色的背景 :插入程序:通过查寻是否存在当前输入的id,如果不存在,则继续输入,如果存在则停止输入。输入的时候计算输入的字节,不足的用空格补充,并将输入的内容保存到内存里,当关闭文件时,保存到文件里,同时设置指针指向数据段的末尾。程序的框图如下: cmp al,I jnz error call inputY/N输入id输入 输入id进行检查,调用check函数,设置flag=bp,初始值设置bp=0,如果存在bp=0,否则bp=1; CheckY调用storid保存到stu中,BP=0?NY保存到数据段Y调用inputname输入名字调用inputsex输入性别输入年龄

4、调用inputold调用inputaddress输入地址调用inputphone,如果输入结束,通过回车键进入主页面。输入电话Ret结束 :显示程序,首先判断文件中是不是有内容,通过设置是一个全局count记录文件的个数,如果记录为零,则退出,返回主菜单,否则每次从内存中取60个字节。 到另一个缓存显示,用count计数,显示一次,count-; :查找模块 :首先提示用户输入想要查找的名字,调整指针,然后用字符串cmpsw比较名字,直到最后一个名字为止,若找到则显示,不存在,则提示; 程序框图:名字查找 关键代码:lea si,stu add si,10 ;指向记录第一个人的姓名 mov b

5、x,sinase10: lea di,_name ;存放待查人的姓名地址 mov cx,5 repe cmpsw 输入要查找的名字si-数据段第一个名字 di=输入的名字bp=0名字比较 Si移到下一个名字 找到名字Y si=指向学生信息头 N 输出学生信息Count-1 COUNT=0? N RET结束 Y:删除程序:通过名字进行查找,如果不存在就报错,如果存在多条记录进行提示,选择删除那条记录:Bp作为一个标志:BpBp1;有一条记录Bp3;有多调记录程序框图:名字删除rep movswRET结束sub stu1,60 sub count1,1Si=di下一个di=delbpdi=delb

6、x删除第bx个记录Bx=bx*2BP3?Bp1?查找名字相同的记录 N Y N YSiendaddr si=endaddr N Y :排序程序:若只有一条记录或者没有直接跳出,否则按照Ascii码排序,排序用冒泡排序算法:程序框图: endaddr-倒数第二个名字si-第一个名字swapped=0这里采用冒泡算法,从第一个数开始对相邻的两个数进行比较,如果次序不对,进行交换。从图中可以看出,为了提高效率,设置了一个标志位,每次进入外循环,就将标志位值零,在内循环每做一次交换,就将该标志位值1,在每次内循环结束后,可测试标志位是否是0,如果是0.则结束排序,否则在进行一次外循环。这种算法效率较高

7、一些。di-si的下一个名字Ax=di bx=si repe cmpsb Si=di? Ydisi NSwapped=1Si=ax Si=endaddrSwapped=0?N N Y结束ret :退出程序:打开文件,把数据段的内容读入文件,否则创建文件,同是根据count,写入最后一条记录,在末尾 ,关闭文件。四程序分工苏林东:模块的整合与颜色的调配,还有文件的建立与相关模块的制作吴威:输入模块和删除模块的制作,关闭文件的制作。曹锦峰:查询模块和排序模块的制作。五源程序及运行结果:(1)源程序: data segment HH DB 0,0,: MM DB 0,0,: SS1 DB 0,0 m

8、ess1 db id:,$ mess2 db name:,$ mess3 db old:,$ mess4 db sex:,$ mess5 db address:,$ mess6 db phone number:,$ mess7 db enter error!,0dh,0ah,$ mess8 db id,8 dup( ),name,5 dup( ),old ,sex , address ,5 dup( ),telphone,13,10,$ mess9 db student information in the table is:,13,10,$ mess10 db please enter th

9、e name:,13,10,$ mess11 db 13,10,OK,you are quit,welcome the next!,$ mess13 db sorry,create file is not success!,13,10,$ mess14 db No Records!,13,10,$ mess15 db sorry,the input is not found!,13,10,$ mess16 db Do you want to delete this messae(y/n)?,13,10,$ mess17 db please choose which one do you wan

10、t to delete(1,2.):,$ mess18 db Delete success!,13,10,$ mess19 db sorry,the id is same ,please input again!,13,10,$ mess20 db please press to paste next page,13,10,$ mess21 db Very good,the sort is sucessful!,13,10,$idpar label bytemaxilen db 10actilen db ?id db 10 dup(?) ;学号namepar label byte maxnle

11、n db 10 actnlen db ? _name db 10 dup(?) ;姓名 oldpar label byte maxolen db 3 actolen db ? old db 3 dup(?) ;年龄sexpar label byte maxslen db 5 actslen db ? sex db 5 dup(?) ;性别 addresspar label byte maxalen db 15 actalen db ? ad db 15 dup(?) ;地址 phonepar label byte maxplen db 15 actplen db ? phone db 15 d

12、up(?) ;电话号码displ macro x ;显示的宏 lea dx,x mov ah,09 int 21h endm stu db 50 dup(58 dup ( ),13,10) ;内存空间 temp db 60 dup ( ),$ ;临时存储空间 crlf db 13,10,$ ;换行回车 menu db * welcom *,13,10 db * i-input *,13,10 db * f-find *,13,10 db * d-delete *,13,10 db * o-sort *,13,10 db * l-list *,13,10 db * q-quit *,13,10

13、db *,13,10 db please input the choice:,$ stu1 dw ? ;作为存放末尾的指针 address db f:person.txt,0 ;路径 count1 db 0 ;临时统计输入的个数 count db 0;统计输入的个数 count2 db 0;检查学号时候用的 fcode dw ? ;文件代号 endaddr dw ?;排序时用到,及存储末尾指针 end1 db ; count3 db 0;显示的时候用,分页 del dw 20 dup(?) swapped db 0 ;交换标志位 data ends;-代码段-code segment assu

14、me cs:code,ds:data,es:data main proc far mov ax,data mov ds,ax mov es,ax start: mov ax,0600h call scren lea di,stu call open cld mov stu1,dimenu1: displ menu ;显示菜单 mov ah,01 int 21h mov bl,al displ crlf mov al,bl and al,5fh ;把输入的选择都转化为大写 insert: cmp al,I jnz list call input jmp menu1list: cmp al,L j

15、nz dele call display displ crlf jmp menu1dele: cmp al,D jnz find call delet displ crlf jmp menu1find: cmp al,F jnz sort call search displ crlf jmp menu1 sort: cmp al,O jnz quit call namesort displ crlf displ mess21 jmp menu1quit: cmp al,Q jz overerror: displ mess7 jmp menu1over: call close displ mes

16、s11 mov ah,4ch int 21h ret main endp ;-插入模块- input proc near mov di,stu1inputloop: cldagain: mov bp,0 displ mess1 call inputid ;输入学号 cmp actilen,0 jz A10 cmp count1,50 je A10 call check ;检查学号是否重复 cmp bp,0 jnz again call storid ;保存到stu displ mess2 call inputname ;输入名字 displ mess3 call inputold ;输入年龄

17、displ mess4 call inputsex ;输入性别 displ mess5 call inputaddress ;输入地址 displ mess6 call inputphone ;输入电话 add di,2 jmp inputloop A10: mov ah,count1 ;记录数 mov count,ah mov stu1,di retinput endp;-输入学号模块-inputid proc near mov ah,0ah lea dx,idpar int 21h displ crlf mov bh,0 mov bl,actilen mov cx,10 sub cx,bx

18、loopn: mov idbx,20h inc bx loop loopn retinputid endp;-相同学号检查段-check proc near mov bp,0 mov ah,count1 mov count2,ah mov si,stu1 sub si,60 mov endaddr,si;指向最后一条记录的学号 lea si,stu mov bx,sinase1: lea di,id;存放学号的偏移地址 mov cx,5 repe cmpsw jcxz naseex jmp nase2naseex: displ mess19 mov bp,1 jmp mm1nase2: add

19、 bx,60 mov si,bx dec count2 jnz nase1mm1: retcheck endp;-保存学号模块-storid proc near mov di,stu1 inc count1 cld lea si,id mov cx,5 rep movsw retstorid endp;-输入名字-inputname proc near mov ah,0ah lea dx,namepar int 21h displ crlf mov bh,0 mov bl,actnlen mov cx,10 sub cx,bxin20: mov _namebx,20h ;剩余的充填空格 inc

20、 bx loop in20 cld lea si,_name mov cx,5 rep movsw retinputname endp;-输入年龄-inputold proc near mov ah,0ah lea dx,oldpar int 21h displ crlf mov bh,0 mov bl,actolen mov cx,3 mov cx,bxlo20: mov oldbx,20h inc bx loop lo20 cld lea si,old mov cx,3 rep movsb ret inputold endp;-输入性别-inputsex proc near mov ah,

21、0ah lea dx,sexpar int 21h displ crlf mov bh,0 mov bl,actslen mov cx,5 sub cx,bx is20: mov sexbx,20h inc bx loop is20 cld lea si,sex mov cx,5 rep movsb retinputsex endp;-输入地址-inputaddress proc near mov ah,0ah lea dx,addresspar int 21h displ crlf mov bh,0 mov bl,actalen mov cx,15 sub cx,bxia20: mov ad

22、bx,20h inc bx loop ia20 cld lea si,ad mov cx,15 rep movsb retinputaddress endp;-输入电话-inputphone proc near mov ah,0ah lea dx,phonepar int 21h displ crlf mov bh,0 mov bl,actplen mov cx,15 sub cx,bx ip20: mov phonebx,20h inc bx loop ip20 cld lea si,phone mov cx,15 rep movsb retinputphone endp;-time时间-t

23、ime proc near ; push ax ; ;push bx ; push cx ; push dx push dsmov ax,0push ax mov ax,data mov ds,axAGAIN1:mov ah,2ch ;读取系统时间 CH:CL-时:分 DH:DL-秒:百分秒int 21hMOV BX ,OFFSET HHMOV AL,CHCALL C16_10 ;转换AL中16进制为10进制,并填入相应位置MOV BX ,OFFSET MMMOV AL,CL ;分CALL C16_10MOV BX ,OFFSET SS1MOV AL,DH ;秒CALL C16_10MOV A

24、H,2 ;光标定位MOV DH,0 ;首行MOV DL,70 ;70列 MOV BH,0INT 10HMOV CX,8MOV SI,OFFSET HHNN1:MOV AH,0EH ;电传方式写字符(一次1个)MOV AL,SIMOV BL,0INT 10HINC SILOOP NN1MOV AH,1INT 16H;JNZ DOWN ;按任一键结束JMP AGAIN1;DOWN:;pop ds;pop dx;pop cx;pop bx;pop ax;RETrettime endp;-进制转换-C16_10 PROC NEAR PUSH CX ;将AL中的16进制转为10进制 MOV AH,0 M

25、OV CX,10D DIV CL ADD AX,3030H MOV BX,AL INC BX MOV BX,AH POP CX RETC16_10 ENDP;-关闭文件-close proc near mov ah,count1 mov count,ah cmp count,0 jbe exit10 mov ah,3dh mov al,2 lea dx,address int 21h jnc y2 mov ah,3ch mov cx,00 lea dx,address int 21h jc exit10 y2: mov fcode,ax mov bx,fcode lea si,stuy1: l

26、ea di,temp mov cx,30 rep movsw lea dx,temp mov cx,60 mov ah,40h int 21h sub count,1 jnz y1 lea dx,end1 mov cx,2 mov ah,40h int 21h mov bx,fcode mov ah,3eh int 21hexit10: retclose endp;-打开文件-open proc near lea dx,address mov ah,3dh mov al,02 int 21h jc p9 ;不存在则创建文件 mov fcode,ax ;保存文件代号 p1: mov ah,3fh

27、 mov bx,fcode mov cx,60 ;读取文件的记录数(一条记录) lea dx,temp int 21h jc p9 mov bl,temp cmp bl, jz p6 ;读取结束 ; lea si,temp mov cx,30 rep movsw inc count1 jmp p1 p9: displ mess13 p6: mov bx,fcode mov ah,3eh int 21h retopen endp ;-删除模块-delet proc near mov si,stu1 mov endaddr,si call search cmp bp,1 jae p3 retp3:

28、 cmp bp,3 jae p4 mov di,delbp jmp l1p4: displ mess17 call inputnum cmp bx,bp jbe p5 displ crlf displ mess7 jmp p4p5: mov di,delbxl1: displ crlf displ mess16 mov ah,01h int 21h cmp al,y jz d1 cmp al,Y jz d1 cmp al,n jz exit7 cmp al,N jz exit7 displ mess7 jmp l1d1: mov si,di add si,60d2: mov cx,30 rep

29、 movsw cmp si,endaddr jnbe p01 jmp d2p01: sub stu1,60 sub count1,1 displ crlf displ mess18 displ crlfexit7: ret delet endp;-查找模块-search proc near mov ah,count1 mov count,ah mov bp,0 cld displ mess10 call inputname1 ;输入要查找的人名 call namesearch cmp bp,0 jbe s2 jmp exit6s2: displ mess15exit6: ret search

30、endp;-计算要删除的是哪一个-inputnum proc near mov bx,0 it1: mov ah,1 int 21h mov dl,al sub al,30h jl exit1 ;输入为零 cmp al,9D jg exit1 cbw xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp it1exit1: mov ax,bx mov bl,2 mul bl mov bx,ax retinputnum endp;-查找姓名的函数模块输入-inputname1 proc near mov ah,0ah lea dx,namep

31、ar int 21h displ crlf mov bh,0 mov bl,actnlen mov cx,10 sub cx,bxin21: mov _namebx,20h inc bx loop in21 retinputname1 endp;-姓名搜索-namesearch proc near lea si,stu add si,10 ;指向记录第一个人的姓名 mov bx,si nase10: lea di,_name ;存放待查人的姓名地址 mov cx,5 repe cmpsw jcxz naseexit jmp nase20naseexit: mov si,bx sub si,10

32、 add bp,2 mov delbp,si lea di,temp mov cx,30 rep movsw displ tempnase20: add bx,60 mov si,bx dec count jnz nase10 retnamesearch endp;-排序模块-namesort proc near cmp count1,1 jbe exit5 mov di,stu1 sub di,110 ;调整指针 mov endaddr,di ;调整指针指向倒数第二个名字NS10: mov swapped,0 lea si,stu add si,10NS20: mov cx,10 mov d

33、i,si add di,60 ;下一个被比较的名字 mov ax,di mov bx,si repe cmpsb jbe NS30 call NPXCHG ;小于等于就不用交换 NS30: mov si,ax cmp si,endaddr JBE NS20 cmp swapped,0 jnz NS10exit5: ret namesort endp;-交换信息-NPXCHG proc near mov si,bx sub si,10 mov cx,30 lea di,temp rep movsw mov cx,30 mov di,bx sub di,10 rep movsw mov cx,30

34、 lea si,temp rep movsw mov swapped,1 ;标志位 ret NPXCHG endp;-文件的显示-display proc near mov ah,count1 mov count,ah cmp count,0 jz file3f displ mess9 displ crlf displ mess8 lea si,stuDA10f: lea di,temp mov cx,30 rep movsw displ temp dec count jnz LL jmp exit4fLL: inc count3 cmp count3,100 jb DA10f mov cou

35、nt3,0 displ crlf displ mess20 displ crlf mov ah,01 int 21h jmp DA10f file3f: displ mess14exit4f: retdisplay endp;-颜色设置-scren proc near mov bh,2eh mov cx,0 mov dx,184fh ;dos窗口,设置全屏,一共24行,每行78,184f就是十进制的24和78 int 10h retscren endp code ends end main (2)运行界面 (3)显示 (4)输入(4)排序排序前:排序后:(5)查找:(7) 删除:六:总结与特色

36、 特色:(1)利用改进的起泡算法进行排序,效率比一般算法较优 (2)因为id是唯一的,所以增加了check函数,检查id号的唯一性。 (3)进行删除时,因为依据是name,所以增加了删除相同名字的功能选择,可以将相同名字的查询出来,然后进行选择删除。 (4)增加bios 的int 10h的图像调用 (5)采用文件代号式磁盘存取,通过3c建立文件,3d打开文件,3e关闭文件,3f读取文件。总结:过本次实验掌握了文件读写的相关操作。实验中运用DOS系统功能调用实现了文件建立、文件打开、文件读写、文件关闭等基本操作。运用文件标记和文件指针还可实现文件合并等更为复杂的功能。在今后学习和使用汇编语言的过程中,对文件的相关操作是必不可少的,结合本次上机实验,更加深刻地理解了课本中关于文件读写的相关内容,可谓理论结合实际。这次实验将子程序的调用和宏的使用展现了程序的优美之处,本次实验还利用了bios的int 10h等功能。但毕竟汇编是一门最底层的编程,大量知识都是新的,存在很多的不足之处:(1) 界面的好看,对于图片的引入和时间的引入,便是难题(2) 功能的强大,显示的分页技术。等等程序还有很大待完善之处。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!