欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    课程设计(论文)基于汇编语言学生成绩管理系统.doc

    • 资源ID:2393110       资源大小:141KB        全文页数:30页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计(论文)基于汇编语言学生成绩管理系统.doc

    学生成绩管理系统目录设计内容2设计目的2设计要求2设计分析2子程序分析7操作说明10程序代码11总结30参考文献30设计内容设计一个学生成绩管理程序,要求能实现以下功能:1) 各科成绩的录入,修改和删除。2) 按姓名查询每个学生各门课的成绩。3) 显示查询结果。4) 统计个分数段的人数。5)打印学生成绩。设计目的用汇编数据的录入、修改和删除操作。设计要求学习如何用汇编语言进行数据处理。设计分析1.总体结构整个程序采用主程序调用子程序的方法。主程序完成菜单的显示,子程序完成一个独立功能方法的实现。各子程序的实现方法简要描述如下:1)设计INSERT(录入)子程序,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用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流程图打开文件返回返回文件删除记录姓名相同?读一条记录接收被删除记录的学生姓名入口返回关闭文件显示统计结果指针到达文件尾对数学成绩分段并统计打开文件读一个记录入口入口打开文件读一个记录是否为要修改的记录返回关闭文件显示记录返回写入修改记录并关闭文件文件指针后退一个记录是否为所寻找的记录读一个记录打开文件入口 YYNNNYNY开始调用Query子程序调用Delete子程序调用Insert子程序调用Count子程序调用Modify子程序调用Iist子程序显示菜单输入一个字符结束是E是I是C是M是D是Q是LYNYNY NY N YNYNNY在大型的程序中,为了使程序清晰、可读性好,一般会大量使用宏和子程序,因此,充分了解这些宏和子程序,才能掌握程序的编制方法。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: 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子程序的功能是修改记录。先保护现场,然后清除右上部分的记录输入区域,接着打开文件。用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键将显示数学成绩的分段统计结果。 以上功能在运行时可以单独实现(即在进入主菜单后,单击功能键选中该功能进行操作后程序会关闭。但要运行其他功能,则要重新进入主菜单单击别的功能键,即每次只能运行一项功能)。要特别说明的是,本程序住一套目的是验证汇编程序实现的数据记录操作功能,为使程序不至于郭长,减少篇幅,因此程序处理会很简单。程序中没有错误处理程序,如果输入错误,如按退格键将会出错,因此输入时要注意补要输错。程序代码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) name :',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 <100',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 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,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,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 int 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 zeroitmov 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 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 n3 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,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,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 buffer1bx,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 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 ;读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 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 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 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 endpdelete 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

    注意事项

    本文(课程设计(论文)基于汇编语言学生成绩管理系统.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开