版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学生成绩管理系统目录设计内容2设计目的2设计要求2设计分析2子程序分析7操作说明10程序代码11总结30参考文献30设计内容设计一个学生成绩管理程序,要求能实现以下功能:1) 各科成绩的录入,修改和删除。2) 按姓名查询每个学生各门课的成绩。3) 显示查询结果。4) 统计个分数段的人数。5)打印学生成绩。设计目的用汇编数据的录入、修改和删除操作。设计要求学习如何用汇编语言进行数据处理。设计分析1.总体结构整个程序采用主程序调用子程序的方法。主程序完成菜单的显示,子程序完成一个独立功能方法的实现。各子程序的实现方法简要描述如下:1)设计insert(录入)子程序,先打开文件score.txt,并
2、置文件指针到文件尾,然后调用rec子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。2)设计delete(删除)子程序,先打开文件,再调用宏getin得到要删除的学生的姓名,然后读文件中的记录,直到其记录的名字与所输入的名字相同为止,把文件指针后退8个字符(即4门课成绩所占的空间),写入8个“0”字符,关闭文件返回主程序。3)设计list(浏览)子程序时,先打开文件,然后读一个记录,并通过调用宏show_item将其显示到屏幕上,入文件指针没有到达文件尾,则继续读记录并显示,当指针到达文件尾时,则关闭文件返回主程序。4)设计modify(修改)子程序时,先打开文件score
3、.txt,通用ger_rec得到要修改的记录,然后读文件中的记录,并与用户输入的记录做比较(只比较记录中的名字部分),若不同则吨下一条记录,若相同则将文件指针后退23个字符(一个记录为23个字符的长度),然后把用户输入的记录写入文件,最后关闭文件返回主程序。5)设计count(统计)子程序时,先打开文件,然后读记录,比较记录的第16个字符,数学成绩的高位),并统计,直到文件指针到达文件尾,最后关闭文件调用宏show_item显示统计结果,返会主程序。6)设计query(查询)子程序时,先打开文件,通过调用宏getin得到要查找学生的姓名,然后读文件记录,并同要查找的学生姓名比较,若相同则输出,
4、若不同继续读文件记录,最后显示查询结果,关闭文件返回程序。另外还有打印的分数段人数统计,这些结合后面的子程序功能分析做详细介绍。图1是本设计显示记录的界面图1 学生成绩管理系统界面程序流程图如图2所示入口入口打开文件打开文件置指针到文件尾读一个记录从终端接收用户输入的记录读错?y记录写入文件显示错误信息n文件尾?y关闭文件关闭文件n显示记录返回返回a) list流程图b) insert流程图打开文件返回返回文件删除记录姓名相同?读一条记录接收被删除记录的学生姓名入口返回关闭文件显示统计结果指针到达文件尾对数学成绩分段并统计打开文件读一个记录入口入口打开文件读一个记录是否为要修改的记录返回关闭文
5、件显示记录返回写入修改记录并关闭文件文件指针后退一个记录是否为所寻找的记录读一个记录打开文件入口 yynnnyny开始调用query子程序调用delete子程序调用insert子程序调用count子程序调用modify子程序调用iist子程序显示菜单输入一个字符结束是e是i是c是m是d是q是lynyny ny n ynynny在大型的程序中,为了使程序清晰、可读性好,一般会大量使用宏和子程序,因此,充分了解这些宏和子程序,才能掌握程序的编制方法。2.宏的分析本题中使用了下列宏,其作用如下:show :用来指定地址的显示字符串,有一个地址参数set_p1: 设定光标位置,有一个可变参数a,作用是
6、讲光标置于坐标(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项功课成绩,
7、各项成绩间空3个空格,最后换行。这个宏包含的语句较多,如果每次都直接用语句实现非常冗长,使用宏后则主程序就很简洁,充分体现了使用宏的优点。getin : 获取学生的信息,这也是一个使用频繁的宏,其中含有很多的指令,它带有addrs和count2两个参数,addrs是存放信息的数据段位置,ciunt2是接受的字符数。子程序分析下面详细分析程序中用的的主要的子程序。(1) insert 子程序insert 子程序的功能是录入一条记录。首先保留现场入栈,然后dos中断3d号功能打开fname指定的文件,然后宏getin清除屏幕右半部分的记录输入区域。在记录的第一项处置光标,用get_rec获取记录内
8、容,用dos中断42h号功能将指针移到文件末尾。再用dos中断40h号功能将放在buffer缓冲区的23个字节的内容写到文件中,接着关闭文件,重新设置光标位置在显示记录位置。最后弹栈恢复现场。(2) get_rec 子程序ger_rec 子程序的功能是获取新的记录内容。首先用宏getin获取学生的姓名,放入buff2中,最多15个字符,如果遇到回车键则提前结束。再用循环方式将buffer2中的15个字符送到buffer1中。然后用宏set_p1将光标置于数学成绩输入项后,等待键盘输入。输入的成绩,先放在buer2中,然后加到buffer1中的姓名后面。输入为2个字符后遇到回车键提前结束。接着用
9、同样的方法输入英语成绩,计算机成绩和中文成绩。完成后,这个程序就得到了一个记录的所有信息。(3)openf子程序openf是个一个非常简单的子程序。它的作用是打开一个文件并把一个文件句柄保存在数据段的handle缓冲区中。(4)query子程序query是查询一条记录。首先保留现场。然后分别清除界面右上方和下边的区域。打开fame指定的文件并保留文件句柄。将光标至于界面的下半空白部分开始处,用宏getin 获取最多15个字符的输入,然后将buffer1中的内容与buffer2中进行比较,看是否相同。如果不同,再继续向下从文件中读出23个字节比较,循环向下,直到相同或文件结束为止。如果不同,则显
10、示该条记录,然后关闭文件,恢复现场。b: mov ah , 3fh ;读文件mov cx , 23 ;读23个字节(记录长度)mov dx, offset buffer2 ;放在buffer2中int 21hlea si , buffer2lea di .buffer1mov cx,15 ;循环次数c: mov al , byte ptrsicmp al , byte ptr di ;比较buffer1和buffer2jnz b ;不同则转binc siinc dloop c(5) modify子程序modify子程序的功能是修改记录。先保护现场,然后清除右上部分的记录输入区域,接着打开文件。
11、用get_rec子程序获取输入的记录信息,并存入buffer1中。从打开的文件中读取一个记录的内容(23个字节)放在buffer2中。比较记录前面的15个字节(姓名),如果不同,则读取下一个记录;如果相同,则回移一个记录的指针,回到刚才这条记录的位置(因为读取一个记录后,指针已移到下一条记录上)。将放在buffer1中的输入的记录写到刚才这条记录在文件中的位置上,从而实现此记录的修改。最后关闭程序,恢复现场。 (6)delete子程序 delete子程序的功能是删除一条记录。 首先保留现场,清除屏幕。然后打开文件,保留文件句柄。用宏getin获取15个字节的姓名字符,放在buffer1中。读取
12、一条记录(23个字节),放在buffer2中,然后和buffer1中内容比较,如果不同,读取下一条记录。如果姓名相同,则把指针后移8个字符(4门功课所占空间),写入8个“0”字符。关闭文件,恢复现场并退出。 (7)list子程序 list子程序的作用是显示文件中的记录。 首先清除记录输入区和显示区域。然后显示记录字段的标题。打开文件,保留文件句柄。读取一条记录的内容放在buffer1中,并判断是否到了文件末尾,如果不是,则显示这条记录。循环读取直到文件结束。最后关闭程序,恢复现场。 (8)print子程序 delete子程序的功能是打印文件中的记录。 用openf子程序打开文件。读取一条记录,
13、汇编语言提供了自定义数据结构的结构定义语句,可将不同的数据类型放在一个数据结构中,便于处理,在本程序中的记录就采用了结构定义语句。这里读取记录也用了结构的方法。 接着用dos中断21h的5号功能,逐字打印存放在buffer1中的所以字符。 一条记录打完后,打印回车符换行。然后用同样方法继续读取下一条记录并打印,直到文件结束为止。最后关闭文件退出。 (9)cot子程序 cot子程序的作用是统计各分数段小说人数,并简化程序,作为示例,本程序只统计记录数学各分数段的人数。 首先显示统计结果的标题:maths60708090100。 然后打开文件。读取记录,将记录的第16个字符(数学分数的高位)取出比
14、较。统计结果依次放在以buffer3开头的内存单元中,如果小于60,则将小于60的记录单元buffer3加一;若小于70,则将小于70的记录单元buffer3加一,即buffer3下一个地址单元内容加一,依次类推。处理完后再读取下个记录,作同样处理,直到文件结束为止。 接着显示放在buffer3中的各分数段的人数的统计结果,最后关闭文件结束。从程序中可以看出,统计时程序有个限制,本例每个分数段最多不能超过9个人。操作说明 改程序除源程序外,还需要另一个存放记录的文件(此程序中使用的文件名为score.txt),但本程序并没有创建这个文件的功能。要产生这个文件,可用记事本先做以一个空的文件名为s
15、core.txt的文件。程序的运行与该文件的存放位置有关,位置是程序数据段的fname的值。二者要保持一致,否则会因为找不到数据存放文件而出错。 程序运行时,在出现主菜单后,按1键,将显示学生的各科成绩;按i键,将执行录入功能,可以录入新的学生成绩;按m键,了修改学生成绩。由于本程序时隔简单程序,所以在修改时,要输入学生的所有成绩,包括不要修改的成绩;按d键后,输入要删除的学生名,将使其成绩全为0;按q键后,输入要查询的学生的姓名,键显示其各科成绩;按c键将显示数学成绩的分段统计结果。 以上功能在运行时可以单独实现(即在进入主菜单后,单击功能键选中该功能进行操作后程序会关闭。但要运行其他功能,
16、则要重新进入主菜单单击别的功能键,即每次只能运行一项功能)。要特别说明的是,本程序住一套目的是验证汇编程序实现的数据记录操作功能,为使程序不至于郭长,减少篇幅,因此程序处理会很简单。程序中没有错误处理程序,如果输入错误,如按退格键将会出错,因此输入时要注意补要输错。程序代码data segmentmess1 db student grade management system,0ah,0dh,$mess2 db this is main menu,0ah,0dh,$mess3 db insert (i) please input:,0ah,0dh,$ mess4 db modify (m) n
17、ame :,0ah,0dh,$ mess5 db delete (d) maths :,0ah,0dh,$mess6 db query (q) english :,0ah,0dh,$mess7 db count (c) computer:,0ah,0dh,$mess8 db print (p) chinese :,0ah,0dh,$mess9 db exit (e),0ah,0dh,$mess10 db *$mess11 db name ma en co ch,0ah,0dh,$mess13 db list (l),0ah,0dh,$mess12 db maths 60 70 80 90 10
18、0,0ah,0dh,$err1 db there is not this student$err2 db file close wrong$fname db d:masmscore.txt ;记录分数文件的路径和文件名。buffer1 db 23 dup(?)buffeer db 0ah,0dh,$buffer2 db 30 dup(?)buffer3 db 8 dup(0)count db 5handle dw ?del db 8 dup(0)x db ?data endsscore struc ;定义记录结构names db 15 dup( )maths db 0,0english db
19、0,0computer db 0,0chinese db 0,0score endsshow macro addrs ;显示字符串 lea dx,addrs mov ah,9 int 21h endmset_p1 macro a ;设光标于(a,36) mov ah,2 mov dh,a mov dl,36 mov bh,0 int 10h endmset_p2 macro ;设光标于(12,2) mov ah,2 mov dh,12 mov dl,2 mov bh,0 int 10h endmset_p3 macro ;设光标于(1,30) mov ah,2 mov dh,1 mov dl,
20、30 mov bh,0 int 10h endmclear macro ;清整个屏幕 mov al,0 mov cl,0 mov ch,0 mov dh,24 mov dl,79 mov bh,7 mov ah,6 int 21h endmclear1 macro ;清右上记录输入区 mov al,0 mov bh,7 mov ch,4 mov cl,36 mov dh,10 mov dl,79 mov ah,6 int 10h endmclear2 macro ;清下半部分记录显示区 mov al,0 mov bh,7 mov ch,12 mov cl,0 mov dh,24 mov dl,
21、79 int 10h endmnewline macro ;回车换行 push ax push dx mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h pop dx pop ax endmshow_item macro addrs ;在指定位置显示记录 local iloop,w10 push bx push cx mov bx,0iloop: mov dl,addrsbx ;显字符串 mov ah,2 int 21h inc bx cmp bx,15 jl iloop mov cx,4w10: mov dl, mov ah,2 i
22、nt 21h mov dl, mov ah,2 int 21h mov dl, mov ah,2 int 21h mov dl,addrsbx mov ah,2 int 21h inc bx mov dl,addrsbx mov ah,2 int 21h inc bx loop w10 newline pop cx pop bx endmgetin macro addrs,count2 ;从键盘获取信息local zeroit,lp,input_end,exit push bx push ax mov bx,0zeroit: mov addrsbx, inc bx cmp bx,15 jl z
23、eroitmov bx,0lp: mov ah,1 int 21h cmp al,0ah jz input_end cmp al,0dh jz input_end mov addrsbx,al inc bx cmp bx,count2 jl lpinput_end: cmp al,0dh jz exit cmp al,0ah jz exit mov ah,7 int 21h jmp input_endexit: pop ax pop bx endmcode segmentmain proc far assume cs:code,ds:data,es:datastart: mov ax,data
24、 mov ds,ax mov ah,0 ;设显示模式80*25 mov al,3 int 10h clear show mess1 show mess2 show mess13 show mess3 show mess4 show mess5 show mess6 show mess7 show mess8 show mess9 newline show mess10 set_p3w: mov ah,7 int 21h cmp al,i jnz n1 call insert jmp wn1: cmp al,m jnz n2 call modify jmp wn2: cmp al,d jnz n
25、3 call delete jmp wn3: cmp al,q jnz n4 call query jmp wn4: cmp al,c jnz n5 call cot jmp wn5: cmp al,p jnz n6 call print jmp wn6: cmp al,l jnz n7 call list jmp wn7: cmp al,e jz exitf jmp wexitf: mov ah,4ch int 21h retmain endpinsert proc near push ax push bx push cx push dx mov dx,offset fname mov al
26、,2 mov ah,3dh ;打开文件 int 21h mov bx,ax clear1 set_p1 4 call get_rec mov cx,0 ;指针移到文件尾 mov dx,0 mov al,2 mov ah,42h int 21h mov cx,23 ;写文件 mov dx,offset buffer1 mov ah,40h int 21h mov ah,3eh ;关闭文件 int 21h set_p3 pop dx pop cx pop bx pop ax retinsert endpget_rec proc near push ax push bx getin buffer2,
27、15 ;输入姓名 mov bx,0 mov cx,15continue: mov al,buffer2bx mov buffer1bx,al inc bx loop continue set_p1 5 getin buffer2,2 ;输入数学成绩 mov al,buffer2 mov buffer1bx,al inc bx mov al,buffer2+1 mov buffer1bx,al inc bx set_p1 6 getin buffer2,2 ;输入英语成绩 mov al,buffer2 mov buffer1bx,al inc bx mov al,buffer2+1 mov bu
28、ffer1bx,al inc bx set_p1 7 getin buffer2,2 ;输入计算机成绩 mov al,buffer2 mov buffer1bx,al inc bx mov al,buffer2+1 mov buffer1bx,al inc bx set_p1 8 getin buffer2,2 ;输入语文成绩 mov al,buffer2 mov buffer1bx,al inc bx mov al,buffer2+1 mov buffer1bx,al inc bx pop bx pop ax retget_rec endpopenf proc near ;打开文件 mov
29、dx,offset fname mov al,02 mov ah,3dh int 21h mov handle,ax retopenf endpquery proc near ;查询记录 push ax push bx push cx push dx clear1 clear2 mov dx,offset fname mov al,2 mov ah,3dh ;打开文件 int 21h mov bx,ax set_p2 getin buffer1,15 ;取姓名到buffr1中 lea dx,mess11 mov ah,9 int 21hb: mov ah,3fh ;读文件 mov cx,23
30、;读23个字节(记录长度 mov dx,offset buffer2 ;放在buffer2中 int 21h lea si,buffer2 lea di,buffer1 mov cx,15 ;循环次数c: mov al,byte ptrsi cmp al,byte ptrdi ;比较buffer1和buffer2 jnz b ;不同则转b inc si inc di loop c mov buffer2+23,$ show_item buffer2 mov ah,3eh int 21h pop dx pop cx pop bx pop ax retquery endpmodify proc n
31、ear ;修改记录 push ax push bx push cx push dx clear1 set_p1 4 mov dx,offset fname mov al,2 mov ah,3dh int 21h mov bx,ax mov handle,ax call get_rec ;读取输入内容放在buffer1read: mov dx,offset buffer2 mov cx,23 mov ah,3fh ;读文件,记录内容放在buffer2 int 21h lea si,buffer2 ;比较姓名是否相同 lea di,buffer1 mov cx,15c5: mov dl,byte
32、ptrsi cmp dl,byte ptrdi jnz read inc si inc di loop c5 mov bx,handle mov ah,42h ;回移文件指针 mov al,1 mov cx,0ffffh mov dx,-23 int 21h mov cx,23 mov dx,offset buffer1 mov ah,40h ;写入修改记录 int 21h mov ah,3eh int 21h jmp exit2exit1: set_p2 show err1 exit2: set_p3 pop dx pop cx pop bx pop ax retmodify endpdel
33、ete proc near push ax push bx push cx push dx clear1 set_p1 4 mov dx,offset fname mov al,2 mov ah,3dh ;打开文件 int 21h mov bx,ax mov handle,ax getin buffer1,15 ;读取键盘输入放在buffer1read5: mov dx,offset buffer2 mov cx,23 mov ah,3fh ;从文件读记录放在buffer2中 int 21h lea si,buffer2 lea di,buffer1 mov cx,15c6: mov dl,b
34、yte ptrsi cmp dl,byte ptrdi jnz read5 inc si inc di loop c6 mov bx,handle mov ah,42h ;移文件指针 mov al,1 mov cx,0ffffh mov dx,-8 int 21h mov cx,8 mov dx,offset del mov ah,40h ;写文件 int 21h mov ah,3eh ;关闭文件 int 21h jmp exit6exit5: set_p2 show err1 exit6: set_p3 pop dx pop cx pop bx pop ax retdelete endp l
35、ist proc near ;列文件中记录 push ax push bx push cx push dx clear1 clear2 set_p2 show mess11 mov dx,offset fname mov al,2 mov ah,3dh ;打开文件 int 21h mov bx,axagain: mov dx,offset buffer1 ;读取记录 mov cx,23 mov ah,3fh int 21h cmp ax,0 jz p show_item buffer1 jmp againp: mov ah,3eh ;关闭文件 int 21h set_p3 pop dx pop
36、 cx pop bx pop ax retlist endpprint proc near push ax call openf ;打开文件 mov cl,count mov ch,0read2: mov dx,offset buffer1 mov cx,type score mov ah,3fh ;读文件 int 21h mov cx,23h mov bx,0next: mov ah,5 mov dl,byte ptr buffer1bx int 21h inc bx loop next mov ah,5 mov dl,0dh int 21h dec x cmp x,0 jnz read2 mov bx,ha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 青海省大通回族自治县第二完全中学2024-2025学年高一上学期期中教学质量检测地理试题(含答案)
- 树立正确的消费观教案
- 生活中的优化问题举例 教学设计 教案
- 基础日语1知到智慧树章节测试课后答案2024年秋山西大学
- 2024年北京版小学三年级上学期期中英语试题及解答参考
- 牛津译林版初一上学期期中英语试题与参考答案
- 《建筑分析故宫》课件
- 计算机病毒的教学设计
- 《广告精美画面》课件
- 《中医药适宜技术》课件
- 设备运维部年终总结
- 2024-2025学年度第一学期高一英语期中考试卷(含解析)
- 受限空间施工方案安全专项方案
- JGJ18-2012钢筋焊接及验收规程
- 医疗安全(不良)事件报告制度培训课件
- 《篮球基础进攻战术》教案(三篇)
- 工业园保洁绿化服务投标方案(技术方案)
- 初中语文2024届中考修改病句选择题练习(共15道-附参考答案和解析)
- 2024年贵阳市中考语文试题及答案
- 2024至2030年中国甘草浸膏市场运行状况与发展趋势前景展望报告
- 雅马哈RX-V365使用说明书
评论
0/150
提交评论