基于汇编语言学生成绩管理系统Word文档下载推荐.docx
- 文档编号:8097433
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:34
- 大小:54.77KB
基于汇编语言学生成绩管理系统Word文档下载推荐.docx
《基于汇编语言学生成绩管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于汇编语言学生成绩管理系统Word文档下载推荐.docx(34页珍藏版)》请在冰点文库上搜索。
姓名雷同?
读一笔记载
吸收被删除记载的学生姓名
显示统计成果
指针到达文件尾
对数学成绩分段并统计
是否为要修正的记载
写入修正记载并封闭文件
文件指针撤退退却一个记载
是否为所查找
的记载
YY
NN
NY
开端
挪用Query子程序
挪用Delete子程序
挪用Insert子程序
挪用Count子程序
挪用Modify子程序
挪用Iist子程序
显示菜单
输入一个字符
停止
是E
是I
是C
是M
是D
是Q
是L
N
Y
在大型的程序中,为了使程序清楚.可读性好,一般会大量应用宏和子程序,是以,充分懂得这些宏和子程序,才能控制程序的编制办法.
2.宏的剖析
本题中应用了下列宏,其感化如下:
SHOW:
用来指定地址的显示字符串,有一个地址参数
SET_P1:
设定光标地位,有一个可变参数a,感化是讲光标置于坐标(a,36)处,应用了BIOS中止10H的2号功效.
SET_P2:
将光标置于(12,2)处.
SET_P3:
将光标置于(1,30)处.
CLEAR:
消除全部屏幕,用BIOS中止10H的7号功效实现,规模是从坐标(0,0)到(24,79),将全部区域变为空白.
CLEAR1:
消除有半部分屏幕,消除规模从坐标(4,36)到(10,79),成果是擦出此区域的显示内容.
CLEAR2:
消除下半部分屏幕,消除规模是从坐标(12,0)到(24,79),成果是擦除此区域的显示内容.
NNWLINE:
回车换行.
SHOE_ITEM:
显示记载内容,履行后显示名称,然后依次显示4项功课成绩,各项成绩间空3个空格,最后换行.这个宏包含的语句较多,假如每次都直接用语句实现异常冗长,应用宏后则主程序就很简练,充分表现了应用宏的长处.
GETIN:
获取学生的信息,这也是一个应用频仍的宏,个中含有许多的指令,它带有ADDRS和COUNT2两个参数,ADDRS是存放信息的数据段地位,CIUNT2是接收的字符数.
子程序剖析
下面具体剖析程序顶用的的重要的子程序.
(1)INSERT子程序
INSERT子程序的功效是录入一笔记载.
起首保留现场入栈,然后DOS中止3D号功效打开FNAME指定的文件,然后宏GETIN消除屏幕右半部分的记载输入区域.在记载的第一项处置光标,用GET_REC获取记载内容,用DOS中止42H号功效将指针移到文件末尾.
再用DOS中止40H号功效将放在BUFFER缓冲区的23个字节的内容写到文件中,接着封闭文件,从新设置光标地位在显示记载地位.
最后弹栈恢复现场.
(2)GET_REC子程序
GER_REC子程序的功效是获取新的记载内容.
起首用宏GETIN获取学生的姓名,放入BUFF2中,最多15个字符,假如碰到回车键则提前停止.
再用轮回方法将BUFFER2中的15个字符送到BUFFER1中.
然后用宏SET_P1将光标置于数学成绩输入项后,等待键盘输入.输入的成绩,先放在BUER2中,然后加到BUFFER1中的姓名后面.输入为2个字符后碰到回车键提前停止.
接着用同样的办法输入英语成绩,盘算机成绩和中文成绩.
完成后,这个程序就得到了一个记载的所有信息.
(3)OPENF子程序
OPENF是个一个异常简略的子程序.它的感化是打开一个文件并把一个文件句柄保消失数据段的handle缓冲区中.
(4)QUERY子程序
QUERY是查询一笔记载.
起首保留现场.然后分离消除界面右上方和下边的区域.打开FAME指定的文件并保留文件句柄.
将光标至于界面的下半空白部离开端处,用宏GETIN获取最多15个字符的输入,然后将BUFFER1中的内容与BUFFER2中进行比较,看是否雷同.假如不同,再持续向下从文件中读出23个字节比较,轮回向下,直到雷同或文件停止为止.假如不同,则显示该笔记载,然后封闭文件,恢复现场.
B:
MOVAH,3FH;
读文件
MOVCX,23;
读23个字节(记载长度)
MOVDX,OFFSETBUFFER2;
放在BUFFER2中
INT21H
LEASI,BUFFER2
LEADI.BUFFER1
MOVCX,15;
轮回次数
C:
MOVAL,BYTEPTR[SI]
CMPAL,BYTEPTR[DI];
比较BUFFER1和BUFFER2
JNZB;
不同则转B
INCSI
INCD
LOOPC
(5)MODIFY子程序
MODIFY子程序的功效是修正记载.
先破坏现场,然后消除右上部分的记载输入区域,接着打开文件.
用GET_REC子程序获取输入的记载信息,并存入BUFFER1中.从打开的文件中读取一个记载的内容(23个字节)放在BUFFER2中.
比较记载前面的15个字节(姓名),假如不同,则读取下一个记载;
假如雷同,则回移一个记载的指针,回到适才这笔记载的地位(因为读取一个记载后,指针已移到下一笔记载上).将放在BUFFER1中的输入的记载写到适才这笔记载在文件中的地位上,从而实现此记载的修正.
最后封闭程序,恢复现场.
(6)DELETE子程序
DELETE子程序的功效是删除一笔记载.
起首保留现场,消除屏幕.然后打开文件,保留文件句柄.用宏GETIN获取15个字节的姓名字符,放在BUFFER1中.
读取一笔记载(23个字节),放在BUFFER2中,然后和BUFFER1中内容比较,假如不同,读取下一笔记载.假如姓名雷同,则把指针后移8个字符(4门功课所占空间),写入8个“0”字符.封闭文件,恢复现场并退出.
(7)LIST子程序
LIST子程序的感化是显示文件中的记载.
起首消除记载输入区和显示区域.然后显示记载字段的标题.打开文件,保留文件句柄.读取一笔记载的内容放在BUFFER1中,并断定是否到了文件末尾,假如不是,则显示这笔记载.轮回读取直到文件停止.最后封闭程序,恢复现场.
(8)PRINT子程序
DELETE子程序的功效是打印文件中的记载.
用OPENF子程序打开文件.读取一笔记载,汇编说话供给了自界说数据构造的构造界说语句,可将不同的数据类型放在一个数据构造中,便于处理,在本程序中的记载就采用了构造界说语句.这里读取记载也用了构造的办法.
接着用DOS中止21H的5号功效,逐字打印存放在BUFFER1中的所以字符.
一笔记载打完后,打印回车符换行.然后用同样办法持续读取下一笔记载并打印,直到文件停止为止.最后封闭文件退出.
(9)COT子程序
COT子程序的感化是统计各分数段小说人数,并简化程序,作为示例,本程序只统计记载数学各分数段的人数.
起首显示统计成果的标题:
maths<
60<
70<
80<
90<
100.
然后打开文件.读取记载,将记载的第16个字符(数学分数的高位)掏出比较.统计成果依次放在以BUFFER3开首的内存单元中,假如小于60,则将小于60的记载单元BUFFER3加一;
若小于70,则将小于70的记载单元BUFFER3加一,即BUFFER3下一个地址单元内容加一,依次类推.处理完后再读取下个记载,作同样处理,直到文件停止为止.
接着显示放在BUFFER3中的各分数段的人数的统计成果,最后封闭文件停止.从程序中可以看出,统计时程序有个限制,本例每个分数段最多不能超过9小我.
操作解释
改程序除源程序外,还须要另一个存放记载的文件(此程序中应用的文件名为SCORE.TXT),但本程序并没有创建这个文件的功效.要产生这个文件,可用记事本先做以一个空的文件名为SCORE.TXT的文件.程序的运行与该文件的存放地位有关,地位是程序数据段的FNAME的值.二者要保持一致,不然会因为找不到数据存放文件而出错.
程序运行时,在消失主菜单后,按1键,将显示学生的各科成绩;
按i键,将履行录入功效,可以录入新的学生成绩;
按M键,了修正学生成绩.因为本程序时隔简略程序,所以在修正时,要输入学生的所有成绩,包括不要修正的成绩;
按D键后,输入要删除的学生名,将使其成绩全为0;
按Q键后,输入要查询的学生的姓名,键显示其各科成绩;
按C键将显示数学成绩的分段统计成果.
以上功效在运行时可以单独实现(即在进入主菜单后,单击功效键选中该功效进行操作后程序会封闭.但要运行其他功效,则要从新进入主菜单单击别的功效键,即每次只能运行一项功效).要特殊解释的是,本程序住一套目标是验证汇编程序实现的数据记载操作功效,为使程序不至于郭长,削减篇幅,是以程序处理会很简略.程序中没有错误处理程序,假如输入错误,如按退格键将会出错,是以输入时要留意补要输错.
程序代码
datasegment
mess1db'
studentgrademanagementsystem'
0ah,0dh,'
$'
mess2db'
thisismainmenu'
mess3db'
insert(i)pleaseinput:
'
mess4db'
modify(m)name:
mess5db'
delete(d)maths:
mess6db'
query(q)english:
mess7db'
count(c)computer:
mess8db'
print(p)chinese:
mess9db'
exit(e)'
mess10db'
**********************************************************$'
mess11db'
nameMaEnCoCh'
mess13db'
list(l)'
mess12db'
maths<
60<
70<
80<
90<
100'
err1db'
thereisnotthisstudent$'
err2db'
fileclosewrong$'
fnamedb"
d:
\masm\score.txt"
;
记载分数文件的路径和文件名.
buffer1db23dup(?
)
buffeerdb0ah,0dh,'
buffer2db30dup(?
buffer3db8dup('
0'
countdb5
handledw?
deldb8dup('
xdb?
dataends
scorestruc;
界说记载构造
namesdb15dup('
'
mathsdb0,0
englishdb0,0
computerdb0,0
chinesedb0,0
scoreends
showmacroaddrs;
显示字符串
leadx,addrs
movah,9
int21h
endm
set_p1macroa;
设光标于(a,36)
movah,2
movdh,a
movdl,36
movbh,0
int10h
set_p2macro;
设光标于(12,2)
movdh,12
movdl,2
set_p3macro;
设光标于(1,30)
movdh,1
movdl,30
clearmacro;
清全部屏幕
moval,0
movcl,0
movch,0
movdh,24
movdl,79
movbh,7
movah,6
clear1macro;
清右上记载输入区
movch,4
movcl,36
movdh,10
clear2macro;
清下半部分记载显示区
movch,12
newlinemacro;
回车换行
pushax
pushdx
movdl,0dh
movdl,0ah
popdx
popax
show_itemmacroaddrs;
在指定地位显示记载
localiloop,w10
pushbx
pushcx
movbx,0
iloop:
movdl,addrs[bx];
显字符串
incbx
cmpbx,15
jliloop
movcx,4
w10:
movdl,'
movdl,addrs[bx]
loopw10
newline
popcx
popbx
getinmacroaddrs,count2;
从键盘获守信息
localzeroit,lp,input_end,exit
zeroit:
movaddrs[bx],'
jlzeroit
movbx,0
lp:
movah,1
cmpal,0ah
jzinput_end
cmpal,0dh
movaddrs[bx],al
cmpbx,count2
jllp
input_end:
jzexit
movah,7
jmpinput_end
exit:
codesegment
mainprocfar
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
movah,0;
设显示模式80*25
moval,3
clear
showmess1
showmess2
showmess13
showmess3
showmess4
showmess5
showmess6
showmess7
showmess8
showmess9
showmess10
set_p3
w:
cmpal,'
i'
jnzn1
callinsert
jmpw
n1:
m'
jnzn2
callmodify
n2:
d'
jnzn3
calldelete
n3:
q'
jnzn4
callquery
n4:
c'
jnzn5
callcot
n5:
p'
jnzn6
callprint
n6:
l'
jnzn7
calllist
n7:
e'
jzexitf
exitf:
movah,4ch
ret
mainendp
insertprocnear
movdx,offsetfname
moval,2
movah,3dh;
movbx,ax
clear1
set_p14
callget_rec
movcx,0;
指针移到文件尾
movdx,0
movah,42h
movcx,23;
写文件
movdx,offsetbuffer1
movah,40h
movah,3eh;
insertendp
get_recprocnear
getinbuffer2,15;
输入姓名
movcx,15
continue:
moval,buffer2[bx]
movbuffer1[bx],al
loopcontinue
set_p15
getinbuffer2,2;
输入数学成绩
moval,buffer2
moval,buffer2+1
set_p16
输入英语成绩
set_p17
输入盘算机成绩
set_p18
输入语文成绩
get_recendp
openfprocnear;
moval,02
movah,3dh
movhandle,ax
openfendp
queryprocnear;
查询记载
clear2
set_p2
getinbuffer1,15;
取姓名到buffr1中
leadx,mess11
b:
movah,3fh;
读23个字节(记载长度
movdx,offsetbuffer2;
放在buffer2中
leasi,buffer2
lead
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 汇编语言 学生 成绩管理系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)