《基于汇编语言学生成绩管理系统【实用文档】doc.doc》由会员分享,可在线阅读,更多相关《基于汇编语言学生成绩管理系统【实用文档】doc.doc(142页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于汇编语言学生成绩管理系统【实用文档】doc文档可直接使用可编辑,欢迎下载学生成绩管理系统目录设计内容2设计目的2设计要求2设计分析2子程序分析7操作说明10程序代码11总结参考文献30设计内容设计一个学生成绩管理程序,要求能实现以下功能:1) 各科成绩的录入,修改和删除。2) 按姓名查询每个学生各门课的成绩。3) 显示查询结果。4) 统计个分数段的人数。5)打印学生成绩。设计目的用汇编数据的录入、修改和删除操作。设计要求学习如何用汇编语言进行数据处理.设计分析1。总体结构整个程序采用主程序调用子程序的方法.主程序完成菜单的显示,子程序完成一个独立功能方法的实现.各子程序的实现方法简要描述如
2、下:1)设计NSERT(录入)子程序,先打开文件CORE。TXT,并置文件指针到文件尾,然后调用GT_EC子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序.)设计eet(删除)子程序,先打开文件,再调用宏IN得到要删除的学生的姓名,然后读文件中的记录,直到其记录的名字与所输入的名字相同为止,把文件指针后退8个字符(即4门课成绩所占的空间),写入8个“0”字符,关闭文件返回主程序。3)设计Lit(浏览)子程序时,先打开文件,然后读一个记录,并通过调用宏SOW_ITEM将其显示到屏幕上,入文件指针没有到达文件尾,则继续读记录并显示,当指针到达文件尾时,则关闭文件返回主程序.4)
3、设计odf(修改)子程序时,先打开文件SCORE。T,通用ERRC得到要修改的记录,然后读文件中的记录,并与用户输入的记录做比较(只比较记录中的名字部分),若不同则吨下一条记录,若相同则将文件指针后退23个字符(一个记录为个字符的长度),然后把用户输入的记录写入文件,最后关闭文件返回主程序。5)设计o(统计)子程序时,先打开文件,然后读记录,比较记录的第16个字符,数学成绩的高位),并统计,直到文件指针到达文件尾,最后关闭文件调用宏SHO_ITEM显示统计结果,返会主程序。6)设计Query(查询)子程序时,先打开文件,通过调用宏GETIN得到要查找学生的姓名,然后读文件记录,并同要查找的学生
4、姓名比较,若相同则输出,若不同继续读文件记录,最后显示查询结果,关闭文件返回程序.另外还有打印的分数段人数统计,这些结合后面的子程序功能分析做详细介绍。图1是本设计显示记录的界面图 学生成绩管理系统界面程序流程图如图2所示入口入口打开文件打开文件置指针到文件尾读一个记录从终端接收用户输入的记录读错?Y记录写入文件显示错误信息N文件尾?Y关闭文件关闭文件N显示记录返回返回A)List流程图B) sert流程图打开文件返回返回文件删除记录姓名相同?读一条记录接收被删除记录的学生姓名入口返回关闭文件显示统计结果指针到达文件尾对数学成绩分段并统计打开文件读一个记录入口入口打开文件读一个记录是否为要修改
5、的记录返回关闭文件显示记录返回写入修改记录并关闭文件文件指针后退一个记录是否为所寻找的记录读一个记录打开文件入口YYNNNY开始调用Query子程序调用Delete子程序调用Insert子程序调用Count子程序调用Modify子程序调用Iist子程序显示菜单输入一个字符结束是E是I是C是M是D是Q是LYNYNY NY N YNNY在大型的程序中,为了使程序清晰、可读性好,一般会大量使用宏和子程序,因此,充分了解这些宏和子程序,才能掌握程序的编制方法。2宏的分析本题中使用了下列宏,其作用如下:SHOW :用来指定地址的显示字符串,有一个地址参数SET_P1: 设定光标位置,有一个可变参数a,作
6、用是讲光标置于坐标(a,6)处,使用了BIS中断10的2号功能.ST_P2 :将光标置于(2,2)处。SE :将光标置于(1,30)处。CAR:清除整个屏幕,用BIOS中断0H的7号功能实现,范围是从坐标(0,0)到(24,9),将整个区域变为空白.CLEA :清除有半部分屏幕,清除范围从坐标(4,3)到(1,9),结果是擦出此区域的显示内容。CLEAR2 : 清除下半部分屏幕,清除范围是从坐标(12,0)到(24,7),结果是擦除此区域的显示内容。NNWLINE: 回车换行。SHO_ITE :显示记录内容,执行后显示名称,然后依次显示4项功课成绩,各项成绩间空3个空格,最后换行。这个宏包含的
7、语句较多,如果每次都直接用语句实现非常冗长,使用宏后则主程序就很简洁,充分体现了使用宏的优点。GETIN :获取学生的信息,这也是一个使用频繁的宏,其中含有很多的指令,它带有ADDRS和COUN2两个参数,ADRS是存放信息的数据段位置,CIUN是接受的字符数。子程序分析下面详细分析程序中用的的主要的子程序。(1) ISET 子程序INSRT子程序的功能是录入一条记录。首先保留现场入栈,然后DS中断3D号功能打开NAM指定的文件,然后宏EIN清除屏幕右半部分的记录输入区域。在记录的第一项处置光标,用GE_REC获取记录内容,用OS中断42号功能将指针移到文件末尾.再用O中断40号功能将放在BF
8、FE缓冲区的23个字节的内容写到文件中,接着关闭文件,重新设置光标位置在显示记录位置。最后弹栈恢复现场。(2) GET_RE 子程序ER_RC 子程序的功能是获取新的记录内容.首先用宏GEIN获取学生的姓名,放入BUFF2中,最多5个字符,如果遇到回车键则提前结束.再用循环方式将UFER中的1个字符送到BUFE1中。然后用宏SET_1将光标置于数学成绩输入项后,等待键盘输入。输入的成绩,先放在UE中,然后加到FR1中的姓名后面。输入为个字符后遇到回车键提前结束。接着用同样的方法输入英语成绩,计算机成绩和中文成绩。完成后,这个程序就得到了一个记录的所有信息.(3)OEF子程序OPNF是个一个非常
9、简单的子程序。它的作用是打开一个文件并把一个文件句柄保存在数据段的handle缓冲区中。()QEY子程序UY是查询一条记录。首先保留现场.然后分别清除界面右上方和下边的区域.打开FE指定的文件并保留文件句柄。将光标至于界面的下半空白部分开始处,用宏GETIN 获取最多15个字符的输入,然后将BUFER1中的内容与BUFFE2中进行比较,看是否相同。如果不同,再继续向下从文件中读出2个字节比较,循环向下,直到相同或文件结束为止。如果不同,则显示该条记录,然后关闭文件,恢复现场。B: MV AH,FH ;读文件MOV X,23 ;读3个字节(记录长度)MOV DX, OFFEBUFFER2 ;放在
10、UFFER中IT 21HLEA SI,BUFFER2LEA DIBUFFERMOVCX,1 ;循环次数: MV AL , BYTE PTRSIC L , BTEPT I ;比较BUFFER1和BUFFER2NZ B ;不同则转INC SN O (5) MODI子程序MIFY子程序的功能是修改记录。先保护现场,然后清除右上部分的记录输入区域,接着打开文件。用ET_EC子程序获取输入的记录信息,并存入UFFE1中。从打开的文件中读取一个记录的内容(2个字节)放在BUFFER2中.比较记录前面的1个字节(姓名),如果不同,则读取下一个记录;如果相同,则回移一个记录的指针,回到刚才这条记录的位置(因为
11、读取一个记录后,指针已移到下一条记录上)。将放在BFFER1中的输入的记录写到刚才这条记录在文件中的位置上,从而实现此记录的修改.最后关闭程序,恢复现场。(6)DELETE子程序 DTE子程序的功能是删除一条记录。 首先保留现场,清除屏幕。然后打开文件,保留文件句柄。用宏GI获取15个字节的姓名字符,放在BFER1中。读取一条记录(23个字节),放在BUFER2中,然后和BUFFER1中内容比较,如果不同,读取下一条记录。如果姓名相同,则把指针后移个字符(4门功课所占空间),写入8个“0字符。关闭文件,恢复现场并退出。 ()LIST子程序 LST子程序的作用是显示文件中的记录。 首先清除记录输
12、入区和显示区域。然后显示记录字段的标题。打开文件,保留文件句柄。读取一条记录的内容放在UFF1中,并判断是否到了文件末尾,如果不是,则显示这条记录。循环读取直到文件结束.最后关闭程序,恢复现场。 (8)PRIT子程序 DELTE子程序的功能是打印文件中的记录。 用OPNF子程序打开文件。读取一条记录,汇编语言提供了自定义数据结构的结构定义语句,可将不同的数据类型放在一个数据结构中,便于处理,在本程序中的记录就采用了结构定义语句.这里读取记录也用了结构的方法. 接着用DS中断H的号功能,逐字打印存放在BE1中的所以字符。 一条记录打完后,打印回车符换行.然后用同样方法继续读取下一条记录并打印,直
13、到文件结束为止.最后关闭文件退出。 (9)COT子程序 COT子程序的作用是统计各分数段小说人数,并简化程序,作为示例,本程序只统计记录数学各分数段的人数。 首先显示统计结果的标题:hs07080910。 然后打开文件.读取记录,将记录的第16个字符(数学分数的高位)取出比较。统计结果依次放在以BFFR3开头的内存单元中,如果小于60,则将小于0的记录单元BUFER3加一;若小于0,则将小于0的记录单元BUFFER3加一,即BUFER3下一个地址单元内容加一,依次类推。处理完后再读取下个记录,作同样处理,直到文件结束为止。 接着显示放在BUFER3中的各分数段的人数的统计结果,最后关闭文件结束
14、。从程序中可以看出,统计时程序有个限制,本例每个分数段最多不能超过9个人.操作说明 改程序除源程序外,还需要另一个存放记录的文件(此程序中使用的文件名为SCORE。TXT),但本程序并没有创建这个文件的功能。要产生这个文件,可用记事本先做以一个空的文件名为SETXT的文件。程序的运行与该文件的存放位置有关,位置是程序数据段的FNA的值。二者要保持一致,否则会因为找不到数据存放文件而出错。程序运行时,在出现主菜单后,按键,将显示学生的各科成绩;按i键,将执行录入功能,可以录入新的学生成绩;按键,了修改学生成绩。由于本程序时隔简单程序,所以在修改时,要输入学生的所有成绩,包括不要修改的成绩;按键后
15、,输入要删除的学生名,将使其成绩全为0;按Q键后,输入要查询的学生的姓名,键显示其各科成绩;按C键将显示数学成绩的分段统计结果。 以上功能在运行时可以单独实现(即在进入主菜单后,单击功能键选中该功能进行操作后程序会关闭。但要运行其他功能,则要重新进入主菜单单击别的功能键,即每次只能运行一项功能)。要特别说明的是,本程序住一套目的是验证汇编程序实现的数据记录操作功能,为使程序不至于郭长,减少篇幅,因此程序处理会很简单。程序中没有错误处理程序,如果输入错误,如按退格键将会出错,因此输入时要注意补要输错。程序代码dat seentmes1 db stuent grade manageent syse
16、,0a,dh,mess2 b th is main mnu,0h,dh,mss3 db insert (i) plese iput:,a,dh, ms4 db modfy (m) nme :,0ah,0dh,mes b deee (d) mats :,0a,0dh,$es6 b quer (q) glish :,0a,0dh,$s7 d cunt (c) copue:,0a,0dh,mess db prnt () hines :,h,0d,$mes9 db ex (e),0ah,dh,ms10d *mss1 b ae Ma n C Ch,ah,0d,$mess1 db list (l),0ah
17、,0dh,12 d maths 0 70 8 90 100,0a,0h,rr db hee iso his studenr2 fl cl wrofme b :smsce。txt” ;记录分数文件的路径和文件名。bfferd23dup(?)bffee db 0ah,dh,bufer2 db 30 d(?)buffr3 b 8 dup(0)ut db 5hnded ?el d 8 dup()x db ?aa edsscorestruc ;定义记录结构names b dp( )math db 0,0eglihdb ,0omuter db ,0chin db ,0so sshow mroars ;显示
18、字符串 lea dx,as o ah, nt 21h eset_p1macro ;设光标于(a,) mov a,2 v dh,a vd,36 mo b, nt 1edmsep ac ;设光标于(1,2) mov a, ov d,2 ov d, v bh, it10h endmse_p3 maro ;设光标于(1,30) mov a,2 mv d,1 mv dl,3mv h,0 int0h enmclear acro ;清整个屏幕 mov a,0 mov cl,0 movch,0 mov d,24 o d,7 ob, moh,6 in 21h endmlr1ac ;清右上记录输入区 moa, o
19、 bh, mov ch,4 mov cl,3 ov dh,0 mov l,9 mov ah, it 1 endmca2mar ;清下半部分记录显示区 moal,0 mov bh,7 vh,12 mov c,0 movd,24 mov dl,79 int 1h ndmewlin maro ;回车换行 push ax psh o dl,h m ah,2 in 21h movdl,0h mv h,2int 21h pop x popa endmshw_item acro addrs ;在指定位置显示记录 ocal lop,w10 u bx pshcx movb,0iloop: modl,addrsb
20、x ;显字符串 mov , 1h inc b cp bx,15 jl iloop o cx,41: mov dl, mvah,2 nt 21h mov l, mv ,2 i 21h mov dl, mov ah,2 int 21 mov dl,adrsx mv ah,2 in 21h incbx movdl,addb mah,2 int21h inc x lp w0 ein pc po bx endgein macro addrs,ount2;从键盘获取信息local zeroi,p,put_en,eit us bx push mov x,0zoi: ovadrsbx, incbx cmp x
21、,5 jl zroitmov bx,0lp: movah,1 int2h cm al,0a z input_en mp al,0h jz input_end mov drx,al ncbx mp,coun2 jl lpinpued:mp al,d j et mp l,0ah jz ext m ah,7 in 21h jmp iput_endx: po ax op bx endcde segmentain pcar aume s:code,ds:at,s:atastt: v ax,data mov ds,x mvah,0 ;设显示模式80*25 moval,3 it 10cea show ess
22、 o mes sw mes13 showss3 showss4 showmes5 shmess6 sow mess7 show mss8 shw mss9 ewline show ms0 et_3w: ov ,7 in21 cpal, nz n1 cl inet jmp wn1: a,m jz n al modify jmp wn2: cmp l,d jnn3 calelete jm wn: cmpal,q z n4 call er jmp wn4: cmp al,c jz n5 all ct jmp n5: mp l, jnz n6 cal ri jp n6: cp al,l jz n7 c
23、ll list jp n: cm al,e jz eif jmpxit:moah,4h it2h tain epinert pro a pushax sh bx pus cx us x ov dx,offset fnam mov al,2 mo ah,3dh ;打开文件 nt 21h mobx,ax l1 et_p1 4 call_ec mv ,0 ;指针移到文件尾 mov dx,0 mov al,2 mov h,4h nt21h o cx,23 ;写文件 ov dx,ofsetbfer1 mov a,0 it21h mv ah,e ;关闭文件 t21 _p3 ppd p cx pop bx
24、pop ax etisrt endgetrec ro n pushax push x gtinufer2, ;输入姓名 bx, mo cx,15contnue: mv al,buffer2bx mov buffrx,al icx looponnu set_p1 5 getn buffr2,2 ;输入数学成绩 mo al,uffer ov bfferbx,al incbx mo a,bffe2+1 mvffr1bx,al i bx set1 6 etibuffr2,2 ;输入英语成绩 mv al,uffer movuffer1bx,a in b mov a,bffer21 mv bffer1bx
25、,a nc x e_p1 7 gtbuffe2, ;输入计算机成绩 mv al,uff movfebx,a n bx mv l,uffe2+1 ovuerbx,a ix se_p1 getin bufer,2 ;输入语文成绩 mov al,buffer obuffe1b,al inc x moval,ffer2+1 mo buff1bx,a icbx popbx po ax regtrec enopenf proc near ;打开文件 v dx,ofet fae mov a,0 mo a,dh t1h mv had,a etpenf endpueryo near ;查询记录 pushax p
26、u b ushc puh d cear1 ear2 mov dx,offset name mov al,2 ov h,3d ;打开文件 1h m bx,a etp tinbuffe,1 ;取姓名到bufr1中 eadx,mess11 mov ah,9 int 21h: moh,3fh ;读文件 mov cx,23 ;读23个字节(记录长度 modx,offetbfe2 ;放在bufer2中 it2h lea i,buffer2 lea di,bufr1 m c,15 ;循环次数c:m a,yte ptrsi cmp al,yte ptrdi ;比较bfer1和bufr2 jnz b ;不同则转
27、 inc s in d oopc ovbuffer2+23, sh_item bufr2 mah,3eh in 21 op dx pop cx popbx op x retquery edpmoifoc ar ;修改记录 push a push bx push x pus x clear _p14 mo dx,ofsetfnae mov a,2 ov a,3 int 21h movbx,ax mov handle,a call etrec ;读取输入内容放在buffread: mov d,ofst bffe2 mov x,23 moah,fh ;读文件,记录内容放在buffe2 int 21h
28、 lea s,fer ;比较姓名是否相同 leadi,buffer1 mov cx,155: mv d,yeptrsi cmpd,byte trdi jnz read icsi ndi lop mob,hndle mv ah,42h ;回移文件指针 mov al,1 v,0ffffh mov x,-3 nt 1 ovcx,23 ov x,ffet bffer mov ah,40 ;写入修改记录 i 21h mov a,eh int 21h jp xit2eit1: t_p2 show xit: set_p pop d pop x popbx oax rtdfy npdel procnear us us bx puh cx ps dx clear se_p1 4 mov dx,offst nae ov al, o h,3dh ;打开文件 n2h mov b,x ohde,ax in buffe1,15 ;读取键盘输入放在uffer1read:mo d,ofse uffr