基于汇编语言学生成绩管理系统.docx
- 文档编号:6581695
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:34
- 大小:54.77KB
基于汇编语言学生成绩管理系统.docx
《基于汇编语言学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《基于汇编语言学生成绩管理系统.docx(34页珍藏版)》请在冰点文库上搜索。
基于汇编语言学生成绩管理系统
学生成绩治理体系【2】
目次
设计内容
设计一个学生成绩治理程序,请求能实现以下功效:
1)各科成绩的录入,修正和删除.
2)按姓名查询每个学生各门课的成绩.
3)显示查询成果.
4)统计个分数段的人数.
5)打印学生成绩.
设计目标
用汇编数据的录入.修正和删除操作.
设计请求
进修若何用汇编说话进行数据处理.
设计剖析
1.总体构造
全部程序采用主程序挪用子程序的办法.主程序完成菜单的显示,子程序完成一个自力功效办法的实现.各子程序的实现办法扼要描写如下:
1)设计INSERT(录入)子程序,先打开文件SCORE.TXT,并置文件指针到文件尾,然后挪用GET_REC子程序接收用户的输入,再把用户的输入写入文件,最后封闭文件返回主程序.
2)设计Delete(删除)子程序,先打开文件,再挪用宏GETIN得到要删除的学生的姓名,然后读文件中的记载,直到其记载的名字与所输入的名字雷同为止,把文件指针撤退退却8个字符(即4门课成绩所占的空间),写入8个“0”字符,封闭文件返回主程序.
3)设计List(阅读)子程序时,先打开文件,然后读一个记载,并经由过程挪用宏SHOW_ITEM将其显示到屏幕上,入文件指针没有到达文件尾,则持续读记载并显示,当指针到达文件尾时,则封闭文件返回主程序.
4)设计Modify(修正)子程序时,先打开文件SCORE.TXT,通用GER_REC得到要修正的记载,然后读文件中的记载,并与用户输入的记载做比较(只比较记载中的名字部分),若不同则吨下一笔记载,若雷同则将文件指针撤退退却23个字符(一个记载为23个字符的长度),然后把用户输入的记载写入文件,最后封闭文件返回主程序.
5)设计Count(统计)子程序时,先打开文件,然后读记载,比较记载的第16个字符,数学成绩的高位),并统计,直到文件指针到达文件尾,最后封闭文件挪用宏SHOW_ITEM显示统计成果,返会主程序.
6)设计Query(查询)子程序时,先打开文件,经由过程挪用宏GETIN得到要查找学生的姓名,然后读文件记载,并同要查找的学生姓名比较,若雷同则输出,若不同持续读文件记载,最后显示查询成果,封闭文件返回程序.
别的还有打印的分数段人数统计,这些联合后面的子程序功效剖析做具体介绍.
图1是本设计显示记载的界面
图1学生成绩治理体系界面
程序流程图如图2所示
进口
进口
打开文件
打开文件
置指针到文件尾
读一个记载
从终端吸收用户输入的记载
读错?
Y
记载写入文件
显示错误信息
N
文件尾?
Y
封闭文件
封闭文件
N
显示记载
返回
返回
A)List流程图B)Insert流程图
打开文件
返回
返回文件
删除记载
姓名雷同?
读一笔记载
吸收被删除记载的学生姓名
进口
返回
封闭文件
显示统计成果
指针到达文件尾
对数学成绩分段并统计
打开文件
读一个记载
进口
进口
打开文件
读一个记载
是否为要修正的记载
返回
封闭文件
显示记载
返回
写入修正记载并封闭文件
文件指针撤退退却一个记载
是否为所查找
的记载
读一个记载
打开文件
进口
YY
NN
N
Y
NY
开端
挪用Query子程序
挪用Delete子程序
挪用Insert子程序
挪用Count子程序
挪用Modify子程序
挪用Iist子程序
显示菜单
输入一个字符
停止
是E
是I
是C
是M
是D
是Q
是L
Y
N
Y
N
Y
N
Y
N
Y
N
Y
N
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',0ah,0dh,'$'
mess3db'insert(i)pleaseinput:
',0ah,0dh,'$'
mess4db'modify(m)name:
',0ah,0dh,'$'
mess5db'delete(d)maths:
',0ah,0dh,'$'
mess6db'query(q)english:
',0ah,0dh,'$'
mess7db'count(c)computer:
',0ah,0dh,'$'
mess8db'print(p)chinese:
',0ah,0dh,'$'
mess9db'exit(e)',0ah,0dh,'$'
mess10db'**********************************************************$'
mess11db'nameMaEnCoCh',0ah,0dh,'$'
mess13db'list(l)',0ah,0dh,'$'
mess12db'maths<60<70<80<90<100',0ah,0dh,'$'
err1db'thereisnotthisstudent$'
err2db'fileclosewrong$'
fnamedb"d:
\masm\score.txt";记载分数文件的路径和文件名.
buffer1db23dup(?
)
buffeerdb0ah,0dh,'$'
buffer2db30dup(?
)
buffer3db8dup('0')
countdb5
handledw?
deldb8dup('0')
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
endm
set_p2macro;设光标于(12,2)
movah,2
movdh,12
movdl,2
movbh,0
int10h
endm
set_p3macro;设光标于(1,30)
movah,2
movdh,1
movdl,30
movbh,0
int10h
endm
clearmacro;清全部屏幕
moval,0
movcl,0
movch,0
movdh,24
movdl,79
movbh,7
movah,6
int21h
endm
clear1macro;清右上记载输入区
moval,0
movbh,7
movch,4
movcl,36
movdh,10
movdl,79
movah,6
int10h
endm
clear2macro;清下半部分记载显示区
moval,0
movbh,7
movch,12
movcl,0
movdh,24
movdl,79
int10h
endm
newlinemacro;回车换行
pushax
pushdx
movdl,0dh
movah,2
int21h
movdl,0ah
movah,2
int21h
popdx
popax
endm
show_itemmacroaddrs;在指定地位显示记载
localiloop,w10
pushbx
pushcx
movbx,0
iloop:
movdl,addrs[bx];显字符串
movah,2
int21h
incbx
cmpbx,15
jliloop
movcx,4
w10:
movdl,''
movah,2
int21h
movdl,''
movah,2
int21h
movdl,''
movah,2
int21h
movdl,addrs[bx]
movah,2
int21h
incbx
movdl,addrs[bx]
movah,2
int21h
incbx
loopw10
newline
popcx
popbx
endm
getinmacroaddrs,count2;从键盘获守信息
localzeroit,lp,input_end,exit
pushbx
pushax
movbx,0
zeroit:
movaddrs[bx],''
incbx
cmpbx,15
jlzeroit
movbx,0
lp:
movah,1
int21h
cmpal,0ah
jzinput_end
cmpal,0dh
jzinput_end
movaddrs[bx],al
incbx
cmpbx,count2
jllp
input_end:
cmpal,0dh
jzexit
cmpal,0ah
jzexit
movah,7
int21h
jmpinput_end
exit:
popax
popbx
endm
codesegment
mainprocfar
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
movah,0;设显示模式80*25
moval,3
int10h
clear
showmess1
showmess2
showmess13
showmess3
showmess4
showmess5
showmess6
showmess7
showmess8
showmess9
newline
showmess10
set_p3
w:
movah,7
int21h
cmpal,'i'
jnzn1
callinsert
jmpw
n1:
cmpal,'m'
jnzn2
callmodify
jmpw
n2:
cmpal,'d'
jnzn3
calldelete
jmpw
n3:
cmpal,'q'
jnzn4
callquery
jmpw
n4:
cmpal,'c'
jnzn5
callcot
jmpw
n5:
cmpal,'p'
jnzn6
callprint
jmpw
n6:
cmpal,'l'
jnzn7
calllist
jmpw
n7:
cmpal,'e'
jzexitf
jmpw
exitf:
movah,4ch
int21h
ret
mainendp
insertprocnear
pushax
pushbx
pushcx
pushdx
movdx,offsetfname
moval,2
movah,3dh;打开文件
int21h
movbx,ax
clear1
set_p14
callget_rec
movcx,0;指针移到文件尾
movdx,0
moval,2
movah,42h
int21h
movcx,23;写文件
movdx,offsetbuffer1
movah,40h
int21h
movah,3eh;封闭文件
int21h
set_p3
popdx
popcx
popbx
popax
ret
insertendp
get_recprocnear
pushax
pushbx
getinbuffer2,15;输入姓名
movbx,0
movcx,15
continue:
moval,buffer2[bx]
movbuffer1[bx],al
incbx
loopcontinue
set_p15
getinbuffer2,2;输入数学成绩
moval,buffer2
movbuffer1[bx],al
incbx
moval,buffer2+1
movbuffer1[bx],al
incbx
set_p16
getinbuffer2,2;输入英语成绩
moval,buffer2
movbuffer1[bx],al
incbx
moval,buffer2+1
movbuffer1[bx],al
incbx
set_p17
getinbuffer2,2;输入盘算机成绩
moval,buffer2
movbuffer1[bx],al
incbx
moval,buffer2+1
movbuffer1[bx],al
incbx
set_p18
getinbuffer2,2;输入语文成绩
moval,buffer2
movbuffer1[bx],al
incbx
moval,buffer2+1
movbuffer1[bx],al
incbx
popbx
popax
ret
get_recendp
openfprocnear;打开文件
movdx,offsetfname
moval,02
movah,3dh
int21h
movhandle,ax
ret
openfendp
queryprocnear;查询记载
pushax
pushbx
pushcx
pushdx
clear1
clear2
movdx,offsetfname
moval,2
movah,3dh;打开文件
int21h
movbx,ax
set_p2
getinbuffer1,15;取姓名到buffr1中
leadx,mess11
movah,9
int21h
b:
movah,3fh;读文件
movcx,23;读23个字节(记载长度
movdx,offsetbuffer2;放在buffer2中
int21h
leasi,buffer2
lead
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 汇编语言 学生 成绩管理系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)