汇编语言课程设计---学生成绩管理程序
汇编课程设计成绩管理系统+源代码

XXXXX课程设计说明书汇编语言课程设计班级: 网络B101 姓名: XXX学号XXX设计题目: 学生成绩管理设计时间: 2012.12.09 至2012.12.21指导教师: XXX评语:___________________________________________________________________________________________________________________________________________________________________________________________评阅成绩:___________评阅教师:____________ 一、课程设计的目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二、设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 2010三、课程设计要求1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。
2.遵循模块化、结构化的程序设计方法。
3.要求程序必须正确。
4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
5.要求程序结构合理,语句使用得当。
6.适当追求编程技巧和程序运行效率。
四、课程设计的课题和分析题目:学生成绩管理分析:建立学生成绩文档;输入学生各门功课成绩;(假设3门功课);修改指定学号的学生成绩;统计指定学号的学生的平均成绩、总成绩,并在屏幕上显示;统计指定学号课程的平均成绩,并在屏幕上显示;每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数;(分数段为:>=90;80~89;70~79;60~69;<=59)此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。
学生课程成绩统计程序设计

《微机原理与接口技术》课程设计(学年论文)说明书课题名称:学生课程成绩统计程序设计(A1 难度系数1)学生学号:专业班级:学生姓名:学生成绩:指导教师:课题工作时间:2013-6-13 至2013-6-18填写说明:1. 一、二、三项由指导教师在课程设计(学年论文)开始前填写并交由学生保管;2. 第五项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;3. 成绩评定由指导教师按评定标准评分。
4. 此表格填写好后与正文一同装订成册。
课程设计评审标准(指导教师用)学生课程成绩统计程序设计说明书1、方案论证(1)汇编程序设计步骤、要点(2)DOS系统调用2、程序设计(1)总体设计设计分析与思路说明总体框图(框图中每一个模块的功能说明)(2)程序设计流程图程序代码及注释3、程序调试步骤与结果(1)编辑源程序(2)汇编源程序(3)连接程序(4)在TD中调试程序(5)程序运行结果截屏图片结果说明4、结论用结果说明设计成功之处,对某些问题进行分析、展望。
1.方案论证(1)汇编程序设计步骤、要点1 引言汇编语言能充分利用计算机所有的硬件特性并对硬件进行直接控制,汇编语言编制的程序比使用其它语言编制的程序执行速度快、资源占用少,所以,汇编语言在工业自动化控制和智能化产品的生产上有着十分广泛的用途。
但是,汇编语言是一种低级符号语言,与机器指令有着一一对应的关系,与高级语言相比不太符合人的思维习惯,它向寄存器、内存单元,必须通过一种具体的计算机来学习,同时要求初学者应具有一定的硬件基础,真正掌握起来有一定的难度。
2 汇编语言程序设计技巧808618088汇编语言程序设计中一般说来遵循以下几个步骤:首先分析题意,确定解题算法。
然后根据算法由粗到精画程序流程图,最后编写程序。
3 寻址方式的准确使用程序设计的目的是将输入数据加工处理转换成输出数据,获取正确的数据是保证程序处理正确的前提,而获取正确的数据又与正确地使用寻址方式关系密切,所以有必要先从寻址方式谈起。
C语言程序设计报告 ---学生成绩管理系统

C语言程序设计报告 ---学生成绩管理系统一、背景学生的学习成绩是一起重要的信息,为了管理好学生的学习成绩,学校及老师在教学过程中,需要有一个对学生成绩进行统计与记录,用于注册成绩,查询发放证书等工作,需要一个学生成绩管理系统来进行辅助操作。
本文主要介绍我校用C语言实现的学生成绩管理系统。
二、系统概述学生成绩管理系统主要由三个模块组成,即:数据录入模块、数据处理模块和数据输出模块。
数据录入模块:将每个学生的个人资料、成绩数据及相关信息,用户图形用户界面录入进系统;数据处理模块:利用程序能实现学生的成绩,统一的处理成绩,例如排名、查找,等;数据输出模块:该模块是整个系统的核心模块,将输出内容包括:学生基本信息、每门课程的各项成绩、平均成绩、综合排名等相关信息,通过程序。
三、系统功能介绍1.数据录入:学生的基本信息及考试成绩等信息的输入,用于后续数据处理及学生成绩的查询。
2.成绩查询:具备基本的查询功能,可以根据学生的学号及姓名查询学生的成绩,以及详细的学生考试成绩。
3.信息统计:可以进行全体学生的各项考试成绩信息综合统计,统计分析每个班级、每个专业、每门课程的考试情况,以及学生的排名,让用户知道整体的学习情况及有效管理学生的学习。
4.安全设置:系统具备安全设置功能,确保用户的信息安全,保证用户的登录权限,为系统及用户提供足够的安全保障,确保系统的数据安全。
四、系统分析系统分析阶段主要包含了分析及设计的步骤,为了更好的实现学生成绩管理的功能,系统分析中分析出学生信息、班级信息、考试信息等相关信息,以便为系统设计提供理论依据。
系统设计是系统分析的一个重要环节,通过设计,能够实现系统的功能,系统设计中定义出系统的基本流程及外部接口,使得系统能够正常运行。
五、系统实现六、系统测试学生成绩管理系统在功能测试过程中,通过实际的操作来测试学生成绩管理系统,测试的主要内容是系统的基本功能及系统的数据安全性,通过实际的操作,测试员可以详细的检查系统是否符合预期的功能,以及系统的正确度,从而保证系统的可靠性及安全性。
基于汇编语言学生成绩管理系统

学生成果管理系统之公保含烟创作目录设计内容1设计目的2设计要求2设计剖析2子顺序剖析6把持说明11顺序代码12总结40参考文献41设计内容设计一个学生成果管理顺序,要求能实现以下功用:1)各科成果的录入,修改和删除.2)按姓名查询每个学生各门课的成果.3)显示查询后果.4)统计个分数段的人数.5)打印学生成果.设计目的用汇编数据的录入、修改和删除把持.设计要求学习如何用汇编语言停止数据处理.设计剖析整个顺序采用主顺序调用子顺序的办法.主顺序完成菜单的显示,子顺序完成一个独犯罪能办法的实现.各子顺序的实现办法扼要描述如下: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所示NYNYNNY在年夜型的顺序中,为了使顺序清晰、可读性好,一般会少量使用宏和子顺序,因此,充沛理解这些宏和子顺序,才华掌握顺序的编制办法.本题中使用了下列宏,其作用如下: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,BUFFER2MOV CX,15 ;循环次数C: MOV AL , BYTE PTR[SI]CMP 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) pleaseinput:',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 CoCh',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:\masm\score.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,addrsmov ah,9int 21hendmset_p1 macro a ;设光标于(a,36)mov ah,2mov dh,amov dl,36mov bh,0int 10hendmset_p2 macro ;设光标于(12,2)mov ah,2mov dh,12mov dl,2mov bh,0int 10hendmset_p3 macro ;设光标于(1,30)mov ah,2mov dh,1mov dl,30mov bh,0int 10hendmclear macro ;清整个屏幕mov al,0mov cl,0mov ch,0mov dh,24mov dl,79mov bh,7mov ah,6int 21hendmclear1 macro ;清右上记载输入区mov al,0mov ch,4mov cl,36mov dh,10mov dl,79mov ah,6int 10hendmclear2 macro ;清下半局部记载显示区mov al,0mov bh,7mov ch,12mov cl,0mov dh,24mov dl,79int 10hendmnewline macro ;回车换行push axpush dxmov dl,0dhint 21hmov dl,0ahmov ah,2int 21hpop dxpop axendmshow_item macro addrs ;在指定位置显示记载local iloop,w10push bxpush cxmov bx,0iloop: mov dl,addrs[bx] ;显字符串mov ah,2int 21hinc bxcmp bx,15jl iloopmov cx,4w10: mov dl,' 'int 21hmov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hmov dl,addrs[bx]mov ah,2int 21hinc bxmov dl,addrs[bx]mov ah,2int 21hinc bxloop w10newlinepop cxpop bxendmgetin macro addrs,count2 ;从键盘获取信息local zeroit,lp,input_end,exitpush bxpush axmov bx,0zeroit: mov addrs[bx],' 'inc bxcmp bx,15jl zeroitmov bx,0lp: mov ah,1int 21hcmp al,0ahjz input_endcmp al,0dhjz input_endmov addrs[bx],alinc bxcmp bx,count2jl lpinput_end: cmp al,0dhjz exitcmp al,0ahjz exitmov ah,7int 21hjmp input_endexit: pop axpop bxendmcode segmentmain proc farassume cs:code,ds:data,es:datastart: mov ax,datamov ds,axmov ah,0 ;设显示模式80*25mov al,3int 10hclearshow mess1show mess2show mess13show mess3show mess4show mess5show mess6show mess7show mess8show mess9newlineshow mess10set_p3w: mov ah,7int 21hcmp al,'i'jnz n1call insertjmp wn1: cmp al,'m'jnz n2call modifyjmp wn2: cmp al,'d'jnz n3call deletejmp wn3: cmp al,'q'jnz n4call queryjmp wn4: cmp al,'c'jnz n5call cotjmp wn5: cmp al,'p'jnz n6call printjmp wn6: cmp al,'l'jnz n7call listjmp wn7: cmp al,'e'jz exitfjmp w exitf: mov ah,4chint 21hretmain endpinsert proc nearpush axpush bxpush cxpush dxmov dx,offset fnamemov al,2mov ah,3dh ;翻开文件int 21hmov bx,axclear1set_p1 4call get_recmov cx,0 ;指针移到文件尾mov dx,0mov al,2mov ah,42hint 21hmov cx,23 ;写文件mov dx,offset buffer1mov ah,40hint 21hmov ah,3eh ;封闭文件int 21hset_p3pop dxpop cxpop bxpop axretinsert endpget_rec proc nearpush axpush bxgetin buffer2,15 ;输入姓名mov bx,0mov cx,15continue: mov al,buffer2[bx]mov buffer1[bx],alinc bxloop continueset_p1 5getin buffer2,2 ;输入数学成果mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 6getin buffer2,2 ;输入英语成果mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 7getin buffer2,2 ;输入计算机成果mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 8getin buffer2,2 ;输入语文成果mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxpop bxpop axretget_rec endpopenf proc near ;翻开文件mov dx,offset fnamemov al,02mov ah,3dhint 21hmov handle,axretopenf endpquery proc near ;查询记载push axpush bxpush cxpush dxclear1clear2mov dx,offset fnamemov al,2mov ah,3dh ;翻开文件int 21hmov bx,axset_p2getin buffer1,15 ;取姓名到buffr1中lea dx,mess11mov ah,9int 21hb: mov ah,3fh ;读文件mov cx,23 ;读23个字节(记载长度mov dx,offset buffer2 ;放在buffer2中int 21hlea si,buffer2lea di,buffer1mov cx,15 ;循环次数c: mov al,byte ptr[si]cmp al,byte ptr[di] ;比拟buffer1和buffer2jnz b ;分歧则转binc siinc diloop cmov [buffer2+23],'$'show_item buffer2mov ah,3ehint 21hpop dxpop cxpop bxpop axretquery endpmodify proc near ;修改记载push axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axmov handle,axcall get_rec ;读取输入内容放在buffer1read: mov dx,offset buffer2mov cx,23mov ah,3fh ;读文件,记载内容放在buffer2int 21hlea si,buffer2 ;比拟姓名是否相同lea di,buffer1mov cx,15c5: mov dl,byte ptr[si]cmp dl,byte ptr[di]jnz readinc siinc dimov bx,handlemov ah,42h ;回移文件指针mov al,1mov cx,0ffffhmov dx,-23int 21hmov cx,23mov dx,offset buffer1mov ah,40h ;写入修改记载int 21hmov ah,3ehint 21hjmp exit2exit1: set_p2show err1exit2: set_p3pop dxpop cxpop bxretmodify endpdelete proc nearpush axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dh ;翻开文件int 21hmov bx,axmov handle,axgetin buffer1,15 ;读取键盘输入放在buffer1read5: mov dx,offset buffer2mov cx,23mov ah,3fh ;从文件读记载放在buffer2中int 21hlea si,buffer2lea di,buffer1mov cx,15c6: mov dl,byte ptr[si]cmp dl,byte ptr[di]jnz read5inc siinc diloop c6mov bx,handlemov ah,42h ;移文件指针mov al,1mov cx,0ffffhmov dx,-8int 21hmov cx,8mov dx,offset delmov ah,40h ;写文件mov ah,3eh ;封闭文件int 21hjmp exit6exit5: set_p2show err1exit6:set_p3pop dxpop cxpop bxpop axretdelete endplist proc near ;列文件中记载push axpush bxpush cxpush dxclear1clear2show mess11mov dx,offset fnamemov al,2mov ah,3dh ;翻开文件int 21hmov bx,axagain: mov dx,offset buffer1 ;读取记载mov cx,23mov ah,3fhint 21hcmp ax,0jz pshow_item buffer1jmp againp: mov ah,3eh ;封闭文件int 21hset_p3pop dxpop bxpop axretlist endpprint proc nearpush axcall openf ;翻开文件mov cl,countmov ch,0read2: mov dx,offset buffer1mov cx,type scoremov ah,3fh ;读文件int 21hmov cx,23hmov bx,0next: mov ah,5mov dl,byte ptr buffer1[bx]int 21hinc bxloop nextmov ah,5mov dl,0dhint 21hdec xcmp x,0jnz read2mov bx,handlemov ah,3ehint 21hpop axretprint endpcot proc ;统计成果push axclear2set_p2show mess12mov dx,offset fnamemov ah,3dh ;翻开文件int 21hmov bx,axmov handle,axread0: mov dx,offset buffer2mov cx,23mov ah,3fh ;读记载int 21hmov dl,[buffer2+15]cmp dl,'6'jl fivecmp dl,'7'jl sixcmp dl,'8'jl sevencmp dl,'9'jl eightinc [buffer3+4]jmp quiteight:inc [buffer3+3]jmp quitseven: inc [buffer3+2]jmp quitsix: inc [buffer3+1]jmp quitfive: inc [buffer3]quit: cmp ax,0jnz read0mov cx,10a: mov dl,' 'mov ah,2int 21hloop amov bx,0a0: mov dl,[buffer3+bx] ;显示统计后果mov ah,2int 21hinc bxmov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hcmp bx,5jnz a0mov bx,handlemov ah,3eh ;封闭文件int 21hset_p3pop axretcot endpcode endsend start总结此次课程设计需要思索的功用很多,因此需要分模块来完成.每个组员负责一个模块,拔出(insert)由水健负责,修改(modify)由张翔负责,删除(delete)由胡玉杰负责,查询(query)由肖年夜庆负责,统计(count)由王瀚负责,并不是是每团体只管一块,而是相互配合,主要负责一局部,至于此外局部,那些不怎么太难就没有人专门负责了,而且人也没那么多.从这次课程设计中理解到分工协作的重要性,以后任务中遇到顺序只能够比这个复杂,一团体很难独自完成,那就要需要到协作了.另外就是在课堂上学到的知识基本就不足,要做好一个顺序必需多掌握一些书本外的相关知识.参考文献1、沈美明,温冬婵. IBM PC 汇编语言顺序设计[M] 2版北京:清华年夜学出书社,20022、孙德文. 微型计算机技术[M] 北京:初等教育出书社,20023、赵雁南,温冬婵. 微型计算机系统与接口[M] 北京:清华年夜学出书社,20054、王成瑞等.汇编语言顺序设计[M] 北京:初等教育出书社,2003。
汇编学生成绩程序设计报告

《汇编语言程序设计》综合程序设计实验报告题目:学生成绩管理系统一、项目简介此学生成绩管理系统实现了对学生成绩的基本管理功能,可以完成学生的显示,分数段人数统计,成绩排名以及插入查找等基本功能,并且成功实现了将学生信息写入文件以及从文件中读取的功能。
该项目运用了多个主程序的分支以及多个子程序,还有宏的定义和使用,基本涵盖了本学期所学知识,还应用了很多课外拓展的知识。
此项目是我们小组三人共同努力的结晶。
二、小组成员具体分工闫立新完成部分:主要完成程序的显示所有学生,文件的写入、读出和代码段定义部分。
王伟光完成部分:主要完成程序的所有学生排名,学生的查找、添加和代码段定义部分。
宋景超完成部分:主要完成程序的分数段统计,屏幕清屏、子程序和代码段定义部分。
三、需求分析与设计学生成绩管理系统,最基本的功能是实现最学生的显示和以及成绩的排名,和分数段的统计,以便分析教学效果。
我们的系统可以说完全达到了这个要求。
在这个系统的第一个功能就实现了所有学生的显示和他们对应的成绩。
此分支采用了内存存储单元中读取数据的方法,通过地址的不断增加来实现对学生姓名和成绩存储和输出。
统计学生分数段人数部分采用了多个跳转指令来实现,符合条件则使相应的分数段人数加1,不符合该分数段人数则跳转到相应的分数段并使该分数段人数加1。
对学生的排名,我们则选择了经典的冒泡排序来实现。
运用三条循环指令,lopi,lopj,lopk。
对学生的添加,我们设置了一个全局变量n来记录多少个数据,增加几个数据n就加几,然后输入姓名到新的内存中,输入成绩时因为成绩初始化时是以ASICC保存的,而输入的是字符,所以使用0FH现将其变成真正的数字然后通过*10等运算将其转化为ASICC即可对学生的查找,我们通过使用字符串比较来进行查找,使用bp来进行地址的改变,同时使用n5进行判断是否已经完成了查找已经是否找到了数据,找到数据则输出,找不到则输出错误文件的写入部分首先用dos指令3CH来创建一个文件,然后用dos指令40H 写入内容,在BX中装入文件代号,要写入的字节数放在CX中,输入缓冲区的地址放在DX中。
汇编语言课程设计

汇编语言课程设计说明书题目:简易学生成绩管理系统设计者:专业班级:网络0901班所属系部:计算机科学系2010年12月7 日汇编语言课程设计任务书一、课程设计目的“汇编语言”课程设计是在教学及实验基础上,对课程所学理论知识的深化和提高。
因此,课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、dos 系统功能调用、磁盘数据的查询、存取等相关知识。
通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。
二、课题名称: 简易学生成绩管理系统三、设计内容与基本要求基本功能1 建立学生成绩文档;设班人数为10人,学号为1-10号2 以学号为序输入学生各门功课成绩;(假设3门功课分别为english,mathematics,physical);3 以学号为序显示每门课程学生名次4 统计指定课程的平均成绩,并在屏幕上显示;5 每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数;(分数段为:>=90;80~89;70~79;60~69;<=59)此处可以以表格的形式给出数据。
6 成绩排序(按总成绩降序排列)7 退出;课程设计说明书应包括以下内容:(16k纸)1、对设计课题进行简要阐述,并说明设计任务及具体要求。
2、论述系统设计方案,模块层次图3、系统流程图。
4、各功能模块设计说明、设计实现过程及源程序。
5. 系统源程序关键代码及必要注释6、能够较熟练地应用一种编辑软件编写程序,掌握dos系统软件设计的基本方法7、课程设计说明书应内容完整、字迹工整、图表整齐规范、数据详实。
8、课程设计总结9、字数4000左右。
10、参考文献(至少列写3篇文献)网上下载“《汇编语言课程设计案例精编》源代码”四、课程设计说明书装订顺序1、封面2、任务书3、目录4、设计说明书正文目录1.设计任务 (5)2.设计目的 (5)3.概要设计 (5)4.详细设计 (5)5.程序代码 (10)6.程序调试 (29)7.课设小结 (29)参考文献 (30)1.设计任务在本次课程设计中,我设计的是一个简易的学生成绩管理系统,该系统可以对学生的三科成绩进行排序并求出课程的平均成绩并显示。
汇编语言学生成绩管理系统程序

;此版本解决输入分数时输入错不能更改的bug;解决了冒泡排序时用内存当变量问题;可以清屏;使用help宏,使程序看起来更简洁;若分数输错,仅保留前两位;实现了界面化;实现了delete、modify功能nextline macropush axmov ah,0ehmov al,0dhint 10h ;调用bios输出换行符mov al,0ahint 10h ;调用bios输出回车符pop axendmhelp macro address ;打印提示信息mov ah,09hlea dx,addressint 21hendmchoice macro ;界面help mess1help mess2help mess3help mess4help mess5help mess6help mess7help mess8help mess9nextlinehelp mess10nextlineendm;学生信息的结构man strucxnum db 10,?,10 dup(0) ;学生的学号xname db 20,?,20 dup(0) ;学生的名字xclass db 10,?,10 dup(0) ;学生的班级xscore dw 0 ;学生的成绩man endsdata segmentmess1 db ' ***************************************************',0ah,0dh,'$'mess2 db ' * Student Grade Magement System *',0ah,0dh,'$'mess3 db ' * Made By XXXXXXXXXXXXX *',0ah,0dh,'$'mess4 db ' * *',0ah,0dh,'$'mess5 db ' * List(l) Insert(i) *',0ah,0dh,'$'mess6 db ' * Statistic(s) Delete(d) *',0ah,0dh,'$'mess7 db ' * Order(o) Modify(m) *',0ah,0dh,'$'mess8 db ' * Exit(e) Continue(c) *',0ah,0dh,'$'mess9 db ' ***************************************************',0ah,0dh,'$'mess10 db 'Make a choice:$'mess11 db 'Faild$'mess12 db 'Succesfully$'welcome db ' Hello! Welcome$'p_info db ' The info of the students $'input1 db 'Input the num of student:$'input2 db 'Input the name of student:$'input3 db 'Input the class of student:$'input4 db 'Input the score of student:$'output1 db 'num =$'output2 db 'name =$'output3 db 'class=$'output4 db 'score=$'output5 db ' The statistics of the students $'s_num0 db 'The total num of students=$'s_num1 db 'score(0 -60)=$'s_num2 db 'score(60-70)=$'s_num3 db 'score(70-80)=$'s_num4 db 'score(80-90)=$'s_num5 db 'score(90-100)=$'s_num6 db 'The average score of students=$'is db 0temp1 db 5,?,5 dup(0) ;为了使输入的分数也能输入错误的情况下修改而用的temp2 db 10,?,10 dup(0) ;删除时存储学号用的sum_h dw 0 ;总分数的高位sum_l dw 0 ;总分数的低位total dw 0 ;学生的人数average dw 0 ;平均成绩s_59 dw 0 ;小于60s_60 dw 0 ;60到70s_70 dw 0 ;70到80s_80 dw 0 ;80到90s_90 dw 0 ;90到99con db 48 ;结构字段的大小,为常数stu man 100 dup(<>) ;学生信息data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axcall make_c;*************************************************make_c procfirst:call clearcall cursornextlinechoicemov ah,1 ;1号系统调用int 21hmov bh,alch_i: ;插入cmp bh,'i'jne ch_lcall clearcall cursorch_i_1:mov [temp1+2],0 ;消除上一次get输入数据的影响mov [temp1+3],0mov [temp1+4],0mov [temp1+5],0mov [temp1+6],0call getmov ah,1int 21hcmp al,'c'nextlineje ch_i_1jmp firstch_l: ;显示学生成绩cmp bh,'l' ;显示jne ch_ocall clearcall cursorch_l_1:call printmov ah,1int 21hcmp al,'c'nextlineje ch_l_1jmp firstch_o: ;进行排序cmp bh,'o'jne ch_scall clearcall cursorch_o_1:call sortcall printmov ah,1int 21hcmp al,'c'nextlineje ch_o_1jmp firstch_s: ;进行统计信息cmp bh,'s'jne ch_dcall clearcall cursorch_s_1:call statistic_print;打印统计信息mov ah,1int 21hcmp al,'c'nextlineje ch_s_1jmp firstch_d: ;进行删除cmp bh,'d'jne ch_mcall clearcall cursorch_d_1:call deletemov ah,1int 21hcmp al,'c'nextlineje ch_d_1jmp firstch_m: ;进行修改cmp bh,'m'jne ch_ecall clearcall cursorch_m_1:call deletenextlinecmp is,0je ch_m_2call getch_m_2:mov ah,1int 21hcmp al,'c'nextlineje ch_m_1jmp firstch_e: ;退出cmp bh,'e'je ch_jmp firstch_: mov ah,4chint 21hmake_c endp;*************************************************;清屏函数,使用10H中断的06功能将屏幕右下角位置18H行,4FH列(DX)移动到左上角00H,00H;BIOS中断类型10H;功能号06H 屏幕上卷;辅助调用寄存器AL=上卷行数BH=上卷行属性CH=左上Y CL=左上X DH=右下Y DL=右下X;如果AL=0,则整屏空白;普通文本模式下IBM PC屏幕被划分为80行25列(从00开始)clear proc ;清屏push cxmov ax,0600Hmov bh,07mov cx,0000mov dx,184fHint 10Hpop cxretclear endp;光标定位函数,使用10H中断的02功能将光标定位;BIOS中断类型10H;功能号02H 设置光标位置;辅助调用寄存器BH=页号DH=行DL=列cursor procmov ah,02mov bh,00mov dl,0mov dh,1int 10Hretcursor endp;*************************************************get proc ;得到学生的信息push axpush cxpush bxpush sipush dimov si,offset stu ;学生的入口地址mov al,con ;把一个数据块的大小放入almov ah,0 ;把al扩展到axmul total ;乘以人数add si,ax ;相对于人数的偏移位置;得到信息;input1help input1mov dx,simov ah,0ah ;输入学号字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input2help input2add si,12mov dx,simov ah,0ah ;输入姓名字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input3help input3add si,22mov dx,simov ah,0ah ;输入班级字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input4help input4call d_b ; 从键盘读入分数add si,12mov [si],bxnextlineinc total ;学生总人数加1nextline;求总分数add sum_l,bxadc sum_h,0;判断属于哪个分数段cmp bx,0258hjae con_60 ;大于等于60inc s_59jmp pp1con_60:cmp bx,02bch ;大于等于70jae con_70inc s_60jmp pp1con_70:cmp bx,0320h ;大于等于80jae con_80inc s_70jmp pp1con_80:cmp bx,0384h ;大于等于90jae con_90inc s_80jmp pp1con_90:inc s_90pp1:pop dipop sipop bxpop cxpop axget endp;*****************************************print procpush axpush cxpush bxpush sipush di;输出打印信息help p_infonextlinemov si,offset stu ;学生的入口地址mov cx,total ;学生总数作为打印的循环次数cmp cx,0je kkjmp L7kk:jmp kkkL7:;打印学号help output1add si,2mov dx,simov ah,9int 21hadd si,12 ;si内存的是姓名串的首地址nextline;打印姓名help output2mov dx,simov ah,9int 21hadd si,22 ;si内存的是班级串的首地址nextline;打印班级help output3mov dx,simov ah,9int 21hadd si,10nextlinehelp output4mov bx,[si]call near ptr b_dnextlineadd si,2nextlinedec cxcmp cx,0jz kkk ; 注意,开始时用loop L7会超过距离显示; jump out of by 8 bytes,所以此处改成这样了jmp L7kkk:pop dipop sipop bxpop cxpop axretprint endp;***********************************************delete proc ;删除模块push axpush cxpush bxpush sipush dimov cx,totalcmp cx,0jne delete_1help mess11mov is,0jmp delete_0delete_1:help input1mov dx,offset temp2mov ah,0ah ;输入学号字符串int 21hnextlineinc dxmov di,dxmov bl,[di]mov si,offset stu ;学生信息入口add si,1delete_2:cmp [si],bl ;比较字符串长度jne delete_6push cx ;字符串长度相等则一个一个比较字符mov di,dxadd di,1add si,1mov bh,0mov cx,bxdelete_4:mov bh,[di]cmp bh,[si]je delete_3 ;相等的情况delete_5:add si,cx ;不相等的情况下mov bh,0sub si,bxadd di,cxsub di,bxsub si,1pop cxdelete_6:dec cxcmp cx,0jne delete_8help mess11mov is,0jmp delete_0delete_8:add si,48jmp delete_2 ;delete_3:dec cxadd si,1add di,1cmp cx,0jne delete_4 ;继续把此串比较完pop cxmov bh,0sub si,bxadd si,44cmp [si],0258hjae dd_60 ;大于等于60dec s_59jmp delete_7dd_60:cmp [si],02bch ;大于等于70jae dd_70dec s_60jmp delete_7dd_70:cmp [si],0320h ;大于等于80jae dd_80dec s_70jmp delete_7dd_80:cmp [si],0384h ;大于等于90jae dd_90dec s_80jmp delete_7dd_90:dec s_90delete_7:mov dx,[si]sub sum_l,dxsbb sum_h,0mov dx,0mov [si],dx ;分数置为0再排序call sortdec totalhelp mess12mov is,1delete_0:pop dipop sipop bxpop cxpop axdelete endp;************************************************ statistic_print procpush axpush cxpush sipush dinextlinehelp output5nextlinehelp s_num0 ;学生的总人数mov bx,totalcall sta_childnextlinecmp bx,0je failhelp s_num6 ;平均分mov dx,sum_h ;总分的高字mov ax,sum_l ;总分的低字div totalmov average,axmov bx,axcall b_dnextlinefail:help s_num1 ;不及格的mov bx,s_59call sta_childnextlinehelp s_num2 ;60-70mov bx,s_60call sta_childnextlinehelp s_num3 ;70-80mov bx,s_70call sta_childnextlinehelp s_num4 ;80-90mov bx,s_80call sta_childnextlinehelp s_num5 ;90-100mov bx,s_90nextlinepop dipop sipop cxpop axretstatistic_print endp;****************************************sta_child procmov ax,bxcmp ax,0jbe p1mov bl,100 ;除以100div bltest al,0ffh ;人数小于100的jz p2mov ch,alcall print_dp2:mov al,ahmov ah,0mov bl,10div bltest al,0ffh ;人数小于10的jz p3mov ch,alcall print_dp3:mov ch,ahcall print_djmp p4p1:mov ch,0call print_dp4:retsta_child endp;********************************************* d_b proc ;10进制转化成2进制,返回参数为bx push cxpush axpush simov bx,0mov si,offset temp1 ;temp1的地址传到dx mov dx,simov ah,0ah ;输入分数int 21hmov cx,3add si,1nc:inc simov al,[si]cmp al,'.'je L1cmp cx,1je L1sub al,'0' ;减去0jb exit ;小于0跳到exitcmp al,09h ;和9比较ja exit ;大于9跳到exitcbw ;将al进行符号扩展到axadd ax,bx ;将ax和bx相加shl ax,1 ;(ax)×2mov bx,axshl ax,1 ;(ax)×4shl ax,1 ;(ax)×8add bx,ax ;(ax)的10倍loop ncL1:inc simov al,[si]sub al,'0' ;减去0jb exit ;小于0跳到exitcmp al,09h ;和9比较ja exit ;大于9跳到exitcbw ;将al进行符号扩展到axadd bx,ax ;将ax和bx相加exit:pop dipop sipop axpop cxretd_b endp;******************************************b_d proc ;把二进制转化成十进制的函数,入口参数为bx push axpush cxpush dxmov ax,bx ;2进制数传给axmov cl,alcmp ax,10 ;和10比较jb L2 ;跳到打印0的位置mov bl,10div bl ;除以10mov cl,ah ;余数放到cl中cbwcmp ax,10 ;和10比较jb L3 ;跳到分数小于10的情况mov bl,10 ;分数大于10的情况div blmov ch,alcall print_d ;打印百位mov ch,ahcall print_d ;打印十位jmp pointL2:mov ch,0call print_djmp pointL3: mov ch,alcall print_d ;分数小于10的情况point:call print_p ;打印小数点mov ch,clcall print_d ;打印第一位小数pop dxpop cxpop axretb_d endp;******************************************print_d proc ;显示一位数字的函数push axpush bxpush dxmov dl,chmov ah,02hadd dl,'0'int 21hpop dxpop bxpop axretprint_d endp;******************************************print_p proc ;显示小数点push axpush bxpush dxxor dx,dxmov ah,02hadd dl,'.'int 21hpop dxpop bxpop axretprint_p endp;*******************************************sort proc;冒泡算法排序push axpush cxpush dxpush sipush dimov ax,dsmov es,axmov ax,total ;外层循环的次数push ax ;解决了冒泡排序时用内存当变量问题sort1:pop axdec axcmp ax,0 ;外层循环若为0,则已比较完毕jbe sort3mov bx,ax ;bx存内层循环mov si,offset stuadd si,46 ;到分数的地址mov di,siadd di,48push axsort2:mov ax,[si]mov dx,[di]cmp ax,dxjae sort4sub si,46sub di,46mov cx,48 ;循环48次,交换两个数据块sort5:xchg al,[si] ;交换两个数据xchg al,[di]xchg al,[si]add si,1add di,1loop sort5sub si,2sub di,2sort4:dec bx ;内层循环减一cmp bx,0je sort1 ;若为0,跳到外层循环add si,48add di,48jmp sort2sort3:pop dipop sipop dxpop cxpop axretsort endp;****************************************** code endsend start。
程序设计——学生成绩管理系统

程序设计——学⽣成绩管理系统学⽣实习报告课程名称___程序设计综合实践___ 题⽬名称____学⽣成绩管理系统___摘要运⽤c语⾔的知识编⼀个简易的学⽣成绩管理系统,该学⽣学⽣成绩管理系统主要有查询,删除,排序,插⼊的功能,并且能够对指定⽂件操作,也可将多个⽂件组成⼀个⽂件。
编程序时,将题⽬分⽠成不同的模块,再运⽤⼦函数慢慢实现。
关键字查询,删除,排序,插⼊⽬录摘要 (2)关键字 (2)⽬录 (3)图⽬录 (3)1. 问题的描述 (4)1.1 设计内容 (4)1.2 设计要求 (4)2. 总体设计 (5)3. 详细设计 (6)4. 数据结构设计描述 (8)4.1 结构 (8)4.2 主函数功能介绍 (8)4.3 各个⼦函数功能介绍 (8)5. 调试分析 (9)6. 总结和⼼得 (12)7. 参考⽂献 (13)8. 答辩记录 (14)9. 教师意见 (15)图⽬录主流程图2.1 (5)查询流程图3.1 (6)排序流程图3.2 (6)插⼊流程图3.3 (7)删除流程图3.4 (7)1.问题的描述设计⼀个学⽣成绩管理系统,对上学期的本班的学习成绩进⾏管理,可以⽤数组来设计这个程序,具有查询和检索功能,并且能够对指定⽂件操作,也可将多个⽂件组成⼀个⽂件。
1.1 设计内容1、每⼀条记录包括⼀个学⽣的学号、姓名、性别、各门课成绩(上学期的科⽬)、平均成绩。
2、输⼊功能:可以⼀次完成若⼲条记录的输⼊。
3、显⽰功能:完成全部学⽣记录的显⽰。
4、查找功能:完成按姓名或学号查找学⽣记录,并显⽰。
5、排序功能:按学⽣平均成绩进⾏排序。
6、插⼊功能:按平均成绩⾼低插⼊⼀条学⽣记录。
7、将学⽣记录存在⽂件student.dat中。
8、应提供⼀个界⾯来调⽤各个功能,调⽤界⾯和各个功能的操作界⾯应尽可能清晰美观!1.2 设计要求已知有存储本班学⽣记录(包括学号、姓名、科⽬成绩、性别、)的⽂件student.dat,所有学⽣以学号从⼩到⼤排序(该⽂件⾃⾏建⽴)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
郑重声明:本篇文档为从百度文库中下载的经过原文修改后的!目录第一章设计课题概述 (2)课程设计目的 (2)设计内容及要求 (2)第二章总体设计 (3)总体设计思路 (3)各版块功能描述 (3)第三章详细设计 (5)程序功能设计 (5)各模块程序详细流程 (5)源代码及注释 (8)第四章调试过程及结果 (32)显示所有成绩 (32)插入成绩 (32)查询学生成绩 (33)删除学生成绩 (34)修改学生成绩 (35)输出数学成绩 (36)第五章总结 (37)参考资料 (38)第一章设计课题概述课程设计目的当今社会是一个信息时代的社会,计算机的使用也是越来越普遍了,各行业在管理职员都采用了一些管理软件,不管是银行、学校,大大小小的各种企业,都是使用的相应的管理软件管理企业的各种信息,我选择的这个汇编语言课程设计题就是一个简单学生信息管理程序,虽然只能处理一些简单操作,但是其意义却是非凡,同过此课程设计,让我了解了一些简单的管理软件的基本原理,更深刻的理解了汇编语言的特点,对汇编语言有了一个跟深层次的理解。
利用汇编程序编写一个小型学生成绩管理程序,实现学生信息成绩的插入、修改、显示所有学生的各科成绩,并且可根据输入学生姓名插询该生的各科成绩,可统计所有成绩个各分数段的人数。
设计内容及要求设计一个学生管理程序,主要实现以下功能(1)各科成绩的录入、修改、和删除。
(2)按姓名查询每个学生哥们成绩。
(3)显示查询结果(4)统计各分数段的成绩的人数个分数段的人数。
程序运行时,在出现的主菜单中,按l键,将浏览学生的各科成绩;按i键后,将执行插入功能,可以插入新的学生成绩,按m键,键输入需要修改的学生成绩,也包括不修改的科目;按d键输入要删除的学生姓名,将使其成绩全部变成0;按q键输入查询的学生的姓名,将其各科成绩显示出来;按下c键将按数学成绩分段结果。
第二章总体设计总体设计思路(1)各科成绩的录入、修改、和删除。
(2)按姓名查询每个学生各科成绩。
(3)显示查询结果(4)统计各分数段的成绩的人数个分数段的人数。
程序运行时,在出现的主菜单中,按l键,将浏览学生的各科成绩;按i键后将执行插入功能,可以插入新的学生成绩,按m键,键输入需要修改的学生成绩,也包括不修改的科目;按d键输入要删除的学生姓名,将使其成绩全部变成0;按q键输入查询的学生的姓名,将其各科成绩显示出来;按下c键将按数学成绩分段结果。
各版块功能描述main主程序模块用于对各种操作的调用,如插入、删除、显示所有学生的各科成绩等。
Insert子程序插入模块用于实现对新增学生的插入,插入至学生文本中,使用时需要调用get_rec子程序实现从键盘输入一个学生的信息。
get_rec子程序模块主要被Insert子程序调用,用于从键盘输入一个学生的信息query子程序模块根据学生姓名查询学生的各科成绩,学生姓名由键盘输入,再从文件中一次比较找出要查询学生的信息。
modify子程序模块首先从键盘输入要修改的学生信息,在从学生文件中寻找要修改的学生姓名,并将要修改后的信息写入文件。
delete子程序模块由用户输入要修改学生的姓名,从学生文件中找出要删除的学生信息,将该学生的各项信息置为0,实现删除的操作。
list子程序模块用于显示学生文件中所有学生的各科成绩的信息,每次从文件读取一个学生的信息并显示。
count子程序模块用于对学生各科成绩的各分数段的统计。
第三章详细设计程序功能设计程序运行时,在出现的主菜单中,按l键,将浏览学生的各科成绩;按i键后,将执行插入功能,可以插入新的学生成绩,按m键,键输入需要修改的学生成绩,也包括不修改的科目;按d键输入要删除的学生姓名,将使其成绩全部变成0;按q键输入查询的学生的姓名,将其各科成绩显示出来;按下c键将按数学成绩分段结果。
以上功能单独运行可以实现,(即在进入菜单后选择其中一项功能运行可以成功运行,在关闭后选择另一项功能可以成功运行),但是在整体运行时得不到想要的结果。
所以如果输入有误,按退格键后将会出错,但是此程序没有处理错误的功能,因此再输入时要特别注意。
注:此程序除了源程序外还需要一个学生文件,该程序命名为,该文件用于存放学生信息,在源程序中程序数据段中fname的值应与文件的存放位置一致。
各模块程序详细流程mess2 db ' this is main menu',0ah,0dh,'$'mess3 db ' insert (i) name :',0ah,0dh,'$'mess4 db ' modify (m) maths(a) :',0ah,0dh,'$'mess5 db ' delete (d) English(b) :',0ah,0dh,'$'mess6 db ' query (q) computer(c) :',0ah,0dh,'$'mess7 db ' count (c) Chinese(d) :',0ah,0dh,'$’mess8 db ' exit (e)’,0ah,0dh,'$'mess9 db '**********************************************************$' mess10 db '**********************************************************$' mess11 db 'name Ma En Co Ch',0ah,0dh,'$'mess13 db ' list (l) please input:',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 "e:\masm5\"buffer1 db 23 dup()buffeer db 0ah,0dh,'$'buffer2 db 30 dup()buffer3 db 8 dup('0') count db 5handle dwdel db 8 dup('0')x dbdata endsshow macro addrs lea dx,addrsmov ah,9int 21hendmset_p1 macro amov ah,2mov dh,amov dl,36mov bh,0int 10hendmset_p2 macromov ah,2mov dh,12mov dl,2mov bh,0int 10hendmset_p3 macromov ah,2mov dh,1mov dl,30mov bh,0int 10h endmclear macromov al,0mov cl,0mov ch,0mov dh,24mov dl,79mov bh,7mov ah,6int 10hendmclear1 macromov al,0mov bh,7mov ch,4mov cl,36mov dh,10 mov dl,79mov ah,6int 10hendmclear2 macromov al,0mov bh,7mov ch,12mov cl,0mov dh,24mov dl,79mov ah,7int 10h;endmnewline macropush axpush dxmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hpop dxpop axendmshow_item macro addrslocal iloop,w10push bxpush cxmov bx,0iloop: mov dl,addrs[bx]mov ah,2 int 21hinc bxcmp bx,15jl iloopmov cx,4w10: mov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2 int 21hmov dl,' 'mov ah,2int 21hmov dl,addrs[bx]mov ah,2 int 21hinc bxmov dl,addrs[bx]mov ah,2int 21hinc bxloop w10newlinepop cxpop bxendmgetin macro addrs,count2local zeroit,lp,input_end,exit push bxpush axmov bx,0zeroit: mov addrs[bx],' 'inc bxcmp bx,15jl zeroitmov bx,0lp: mov ah,1int 21hcmp al,0ahjz input_endcmp al,0dhjz input_endmov addrs[bx],alinc bxcmp bx,count2jl lpinput_end: cmp al,0dhjz exit cmp al,0ahjz exitmov ah,7int 21hjmp input_endexit:pop axpop bxendmcode segmentmain proc farassume cs:code,ds:data,es:data start: mov ax,datamov ds,axmov ah,0mov al,3int 10hclearshow mess1show mess2newlineshow mess13show mess3show mess4show mess5 show mess6show mess7show mess8show mess9show mess10set_p3w: mov ah,7int 21hcmp al,'i'jnz n1 call insert jmp wn1: cmp al,'m'jnz n2call modifyjmp wn2: cmp al,'d'jnz n3call delete jmp wn3: cmp al,'q'jnz n4call queryjmp wn4: cmp al,'c'jnz n6call coun jmp wn6: cmp al,'l'jnz n7call listjmp wn7: cmp al,'e' jz exitfjmp wexitf:mov ah,4ch int 21hretmain endpinsert proc nearpush axpush bxpush cxpush dxmov dx,offset fname mov al,2mov ah,3dh int 21hmov bx,axclear1set_p1 4call get_recmov cx,0mov dx,0mov al,2mov ah,42hint 21hmov cx,23 mov dx,offset buffer1mov ah,40hint 21hmov ah,3eh int 21hset_p3pop dxpop cxpop bxpop axretinsert endpget_rec proc nearpush axpush bxgetin buffer2,15mov bx,0mov cx,15continue: mov al,buffer2[bx];mov buffer1[bx],al ; inc bx ;loop continueset_p1 5getin buffer2,2mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],al inc bxset_p1 6getin buffer2,2mov al,buffer2mov buffer1[bx],al inc bxmov al,buffer2+1mov buffer1[bx],al inc bxset_p1 7getin buffer2,2 mov al,buffer2mov buffer1[bx],al inc bxmov al,buffer2+1mov buffer1[bx],al inc bxset_p1 8getin buffer2,2mov al,buffer2mov buffer1[bx],al inc bxmov al,buffer2+1mov buffer1[bx],alinc bxpop bxpop axretget_rec endpquery proc nearpush axpush bxpush cxpush dxclear1clear2mov dx,offset fnamemov al,2mov ah,3dh int 21hmov bx,axset_p2getin buffer1,15b: mov ah,3fhmov cx,23mov dx,offset buffer2int 21hcmp ax,0jz s1lea si,buffer2lea di,buffer1mov cx,15c:mov al,byte ptr[si]cmp al,byte ptr[di]jnz binc si ;当前字符一致则继续比较下一个字符 inc diloop cmov [buffer2+23],'$'lea dx,mess11mov ah,9 ;调用DOS的9号功能显示字符串 int 21hshow_item buffer2jmp s2s1: set_p2show err1s2: mov ah,3ehint 21hset_p3pop dxpop cxpop bxpop axretquery endpmodify proc nearpush axpush bxpush cxpush dxclear1set_p1 4 mov dx,offset fname mov al,2mov ah,3dh int 21hmov bx,axmov handle,axcall get_rec read:mov dx,offset buffer2mov cx,23 mov ah,3fh int 21hcmp ax,0jz exit1lea si,buffer2lea di,buffer1mov cx,15c5:mov dl,byte ptr[si] cmp dl,byte ptr[di] jnz readinc si inc diloop c5mov bx,handlemov ah,42h mov al,1mov cx,0ffffhmov dx,-23int 21hmov cx,23mov dx,offset buffer1mov ah,40h int 21hjmp exit2exit1: clear2set_p2show err1exit2:mov ah,3ehint 21hset_p3pop dxpop cxpop bxpop axretmodify endpdelete proc nearpush axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dh int 21hmov bx,axmov handle,axgetin buffer1,15read5:mov dx,offset buffer2mov cx,23mov ah,3fh int 21h cmp ax,0jz exit5lea si,buffer2lea di,buffer1mov cx,15c6:mov dl,byte ptr[si]cmp dl,byte ptr[di] jnz read5inc siinc diloop c6mov bx,handlemov ah,42hmov al,1mov cx,0ffffhmov dx,-8int 21hmov cx,8mov dx,offset del mov ah,40hint 21hjmp exit6exit5: clear2set_p2show err1 exit6:mov ah,3ehint 21hset_p3pop dxpop cxpop bxpop axretdelete endplist proc nearpush axpush bxpush cxpush dxclear1clear2set_p2show mess11mov dx,offset fnamemov al,2mov ah,3dh int 21hmov bx,axagain:mov dx,offset buffer1mov cx,23mov ah,3fh int 21hcmp ax,0jz pshow_item buffer1jmp againp:mov ah,3ehint 21hset_p3pop dxpop cxpop bxpop axretlist endpcoun proc nearpush axclear2set_p2show mess12mov dx,offset fname mov ah,3dhint 21hmov bx,axmov handle,axmov si,15mov [buffer3+6],’a’ c3:call numbermov cx,0mov dx,0mov al,0 mov ah,42hint 21hadd si,2cmp si,23jl c3mov bx,handle “mov ah,3ehint 21hset_p3pop axretcoun endpnumber procpush bxpush cxread0: mov dx,offset buffer2 mov cx,23 mov ah,3fhint 21hcmp ax,0jz c1mov dl,[buffer2+si]cmp dl,'6'jl fivecmp dl,'7'jl sixcmp dl,'8'jl sevencmp dl,'9'jl eightinc [buffer3+4] jmp read0 eight:inc [buffer3+3] jmp read0 seven: inc [buffer3+2] jmp read0six: inc [buffer3+1] jmp read0five: inc [buffer3] jmp read0c1: mov cx,8a: mov dl,' 'mov ah,2int 21hloop amov dl,[buffer3+6]mov ah,2 int 21hmov dl,’:’mov ah,2int 21hmov bx,0a0: mov dl,[buffer3+bx]mov ah,2int 21hmov [buffer3+bx],'0'inc bxmov cx,4c2: mov dl,' 'mov ah,2int 21hloop c2cmp bx,5 jnz a0 newline pop cxpop bxretnumber endpcode endsend start第四章调试过程及结果显示所有成绩图 4-1插入成绩图 4-2-1图 4-2-2查询学生成绩图 4-3删除学生成绩图 4-4-1图 4-4-2修改学生成绩图 4-5-1图 4-5-2输出数学成绩图 4-6第五章总结通过对这学生成绩管理的的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。