汇编语言课程设计---学生成绩管理程序

合集下载

汇编课程设计成绩管理系统+源代码

汇编课程设计成绩管理系统+源代码

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语言程序设计报告 ---学生成绩管理系统一、背景学生的学习成绩是一起重要的信息,为了管理好学生的学习成绩,学校及老师在教学过程中,需要有一个对学生成绩进行统计与记录,用于注册成绩,查询发放证书等工作,需要一个学生成绩管理系统来进行辅助操作。

本文主要介绍我校用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、设计要求2.1设计说明该程序要求具备的功能:清晰且易于操作的用户界面,在文本编辑界面中输入学生成绩。

其中“I”表示插入,“L”表示浏览,“Q”表示查询,“E”表示退出,“D”表示删除,“M”表示修改,“c”表示统计各分数段人数,“P”表示打印.以上各功能应该能单独运行和连续运行。

2.2开发平台与开发工具该程序使用DOS操作系统32位实模式汇编语言编写,使用的编译器为微软的MASM5.0,调试工具为DOS下的debug.exe程序。

2.3数据结构程序采用静态链表的方式来存储学生信息,链表结点描述如下:Student strucm_sName db 6 dup(' ')m_sNum db 8 dup(' ')m_sScore db 3 dup(' ')Student ends3、设计思路3.1设计方案及基本流程3.11总体结构分析整个程序采用总程序调用子程序的方式。

主程序完成菜单的显示,子程序完成一个独立功能的方法实现。

各子程序的实现方法简要描述如下:1、设计Insert(录入)子程序时,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。

2、设计Delete(删除)子程序时,先打开文件,再调用宏GETIN得到要删除的学生的姓名,然后读文件中的记录,直到其记录的名与所输入的名字相同为止,把文件指针后退8个字符(即4门课程所占的空间),写入8个“0”字符,关闭文件返回主程序。

3、设计List(浏览)子程序时,先打开文件,然后读一个记录,并通过调用宏SHOW_ITEM 将其显示到屏幕上,若文件指针没有到达文件尾,则继续读记录并显示,当文件指针到达文件尾时,则关闭文件返回主程序。

汇编课程设计成绩管理系统

汇编课程设计成绩管理系统

汇编课程设计成绩管理系统一、课程目标知识目标:1. 理解汇编语言的基本概念,掌握汇编指令的使用方法。

2. 学会使用汇编语言进行程序设计,实现简单的成绩管理系统。

3. 了解计算机内存管理的基本原理,理解汇编语言在内存操作中的应用。

技能目标:1. 能够运用汇编语言编写简单的程序,实现数据的存储和查询功能。

2. 掌握使用汇编语言进行条件判断和循环操作的方法,实现成绩管理系统的逻辑功能。

3. 学会使用调试工具对汇编程序进行调试,解决程序中的错误。

情感态度价值观目标:1. 培养学生良好的编程习惯,注重代码的结构和可读性。

2. 增强学生的团队合作意识,学会在项目开发中分工与协作。

3. 激发学生对计算机硬件和底层编程的兴趣,提高学生的计算机素养。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程属于计算机科学与技术领域,以汇编语言为核心,结合成绩管理系统实例,培养学生的编程能力和计算机硬件理解。

2. 学生特点:学生已具备一定的计算机基础知识和编程能力,对汇编语言有初步了解,但实际应用能力有待提高。

3. 教学要求:注重理论与实践相结合,以项目为导向,培养学生的实际操作能力和团队协作能力。

二、教学内容1. 汇编语言基础知识:- 汇编语言概述:了解汇编语言的发展历程,认识汇编语言与机器语言的关系。

- 汇编指令系统:掌握汇编指令的分类、格式及功能,学会使用常用汇编指令。

2. 程序设计方法:- 数据表示:学习数据在汇编语言中的表示方法,掌握各种数据类型的使用。

- 流程控制:了解汇编语言中的条件判断和循环结构,学会编写分支和循环程序。

- 子程序设计:掌握子程序的编写和调用方法,提高代码复用性。

3. 内存管理:- 内存分配与使用:了解内存空间分配方法,掌握汇编语言在内存操作中的应用。

- 数据存储:学习如何在内存中存储和访问数据,实现成绩管理系统中的数据结构。

4. 成绩管理系统项目实践:- 功能模块设计:明确成绩管理系统的需求,划分功能模块,进行模块化设计。

汇编语言学生成绩管理系统报告

汇编语言学生成绩管理系统报告

0 ;修改时用的,判定是否找到相应学号 5,?,5 dup(0) ;为了使输入的分数也能输入错误的情况下回
退光标进行修改而用的 10,?,10 dup(0) ;删除时存储学号用的 0 ;总分数的高位 0 ;总分数的低位 0 ;学生的人数 0 ;平均成绩 0 ;小于 60 0 ;60 到 70 0 ;70 到 80 0 ;80 到 90 0 ;90 到 99
<7>
con
db 48 ;结构字段的大小,为常数
stu man 100 dup(<>) ;学生信息
(2) make_c proc 流程图:
<8>
make_c子程序
系统显示界面
1号系统调用 接收选择字符
是否为i
N
是否为l
N
是否为o
N
是否为s
N
是否为d
N
是否为m
Y
Y
Y 清屏,进入 插入界面
N 接收字符 并判断是否为c
<4>
3. 程序最终效果
主界面: 自己运行程序截图去吧
Insert(i)插入学生信息: 自己运行程序截图去吧
<5>
List(l)显示学生成绩: 自己运行程序截图去吧
Order(o)以分数进行从高到底排序: 自己运行程序截图去吧
Statistic(s)统计学生成绩分布: 自己运行程序截图去吧
Delete(d)删除学生信息(成功:Succesfully,失败:Failed): 自己运行程序截图去吧
输入姓名字符串并 保存
输入班级字符串 并保存
Call d_b 10转2进制子程序
返回到bx中
总分数低字加bx 高字加CF位

汇编语言编写学生成绩管理系统.

汇编语言编写学生成绩管理系统.

hh MACRO ;回车换行宏定义 PUSH DX PUSH AX MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H POP AX POP DX ENDM clear MACRO ;清屏宏定义 PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,2 MOV DH,0 MOV DL,0 INT 10H MOV AH,6 MOV AL,0 MOV BH,7 MOV CH,0 MOV CL,0 MOV DH,24 MOV DL,79 INT 10H ENDM DATAS SEGMENT cj DB 100 DUP(-1 pm DB 100 DUP(0 mz DB 100 DUP(14 DUP(' ','$' strm1 DB '1.insert student score$' strm2 DB '2.delete student score$' strm3 DB '3.show student score and rank$' strm4 DB'ESC.exit$' stri1 DB 'input the student number:$' stri2 DB 'input this student score:$' stri3 DB 'insert success,press any key!$' stri4 DB 'input this student name:$' strd1 DB 'delete the student number:$' strd2 DB 'delete success,press any key!$' strr1 DB'===================score and rank===================$' strr2 DB 'number name score rank $' strr3 DB 'show success,press any key!$' stre DB 'error,please try again$' strq DB 'thanks for using$' DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX main: LEA DX,strm1 MOV AH,9 INT 21H hh LEA DX,strm2 ;获取STRM2的偏移地址 MOV AH,9 INT 21H hh LEA DX,strm3 ;获取STRM3的偏移地址 MOV AH,9 INT 21H hh LEA DX,strm4 MOV AH,9 INT 21H hh main1: MOV AH,1 INT 21H CMP AL,31H ;插入学生成绩 JE insert ;等于则转移INSERT CMP AL,32H ;删除 JE delete CMP AL,33H ;显示 JE rank CMP AL,1BH ;退出 JE quit JMP main1 ;跳转到MAIN1 insert: clear ;调用清屏宏 LEA DX,stri1 MOV AH,9 INT 21H hh CALL shuru MOV BX,AX hh LEA DX,stri4 MOV AH,9 INT 21H hh PUSH BX PUSH DX MOV AX,BX MOV CL,15 MUL CL MOV BX,AX LEADX,mz[BX] ;把名字存到mz中 MOV AH,10 INT 21H POP DX POP BX hh LEA DX,stri2 MOV AH,9 INT 21H hh CALL shuru MOV cj[BX],AL ;把成绩存到cj hh LEA DX,stri3 MOV AH,9 INT 21H MOV AH,1 INT 21H hh clear JMP main delete: clear LEA DX,strd1 MOV AH,9 INT 21H hh CALL shuru MOV BX,AX MOV cj[BX],-1 ;把输入学号的成绩删除 hh LEA DX,strd2 MOV AH,9 INT 21H hh MOV AH,1 INT 21H hh clear JMP main rank: MOV CX,100 MOV DH,1 rank0: MOV DL,DH DEC CXCMP CX,-1H JE rank5 MOV BX,1 rank1: CMP cj[BX],CL JE rank3 rank2: INC BX CMP BX,100 JE rank0 JMP rank1 rank3: MOV pm[BX],DL;把名次存到pm INC DH JMP rank2 rank5: clear LEA DX,strr1 MOV AH,9 INT 21H hh LEA DX,strr2 MOV AH,9 INT 21H hh MOV BX,0 MOV DH,1 rank10: INC BX CMP BX,100 JE rank11 CMP cj[BX],-1 JE rank10 INC DH MOV DL,10 MOV AH,2 INT 10H PUSH BX PUSH DX MOV AX,BX MOV CL,15 MUL CL MOVBX,AX ADD BX,2 LEA DX,mz[BX] MOV AH,9 INT 21H POP DX POP BX MOV DL,1 MOV AH,2 INT 10H MOV AX,BX CALL shuchu MOV DL,30 MOV AH,2 INT 10H MOV AL,cj[BX] CALL shuchu MOV DL,45 MOV AH,2 INT 10H MOV AH,0 MOV AL,pm[BX] CALL shuchu hh JMP rank10 rank11: LEA DX,strr3 MOV AH,9 INT 21H MOV AH,1 INT 21H clear JMP main quit: clear MOV BH,0 MOV AH,2 MOV DH,5 MOV DL,20 INT 10H LEA DX,strq MOV AH,9 INT 21H MOV AH,4CH INT21H shuru PROC NEAR PUSH BX return: MOV AH,1 INT 21H CMP AL,30H JL cuowu CMP AL,39H JG cuowu SUB AL,30H MOV AH,0 MOV BL,10 MUL BL MOV BX,AX MOV AH,1 INT 21H CMP AL,30H JL cuowu CMP AL,39H JG cuowu MOV AH,0 SUB AL,30H ADD AX,BX POP BX RET cuowu: hh LEA DX,stre MOV AH,9 INT 21H hh JMP return shuru ENDP shuchu PROC NEAR PUSH CX PUSH DX MOV CL,10 CBW ;字节扩展为字 IDIV CL MOV DH,AH MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV DL,DH ADD DL,30H MOV AH,2 INT 21H POP DX POP CX RET shuchu ENDP CODES ENDS END START。

基于汇编语言学生成绩管理系统方案

基于汇编语言学生成绩管理系统方案
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,'$'
设计要求
学习如何用汇编语言进行数据处理。
设计分析
1.总体结构
整个程序采用主程序调用子程序的方法。主程序完成菜单的显示,子程序完成一个独立功能方法的实现。各子程序的实现方法简要描述如下:
1)设计INSERT(录入)子程序,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。
JNZ B ;不同则转B
INC SI
INC D
LOOP C
(5) MODIFY子程序
MODIFY子程序的功能是修改记录。
先保护现场,然后清除右上部分的记录输入区域,接着打开文件。
用GET_REC子程序获取输入的记录信息,并存入BUFFER1中。从打开的文件中读取一个记录的容(23个字节)放在BUFFER2中。
(7)LIST子程序
LIST子程序的作用是显示文件中的记录。
首先清除记录输入区和显示区域。然后显示记录字段的标题。打开文件,保留文件句柄。读取一条记录的容放在BUFFER1中,并判断是否到了文件末尾,如果不是,则显示这条记录。循环读取直到文件结束。最后关闭程序,恢复现场。

学生成绩管理系统汇编语言

学生成绩管理系统汇编语言

摘要管理信息系统正在向着网络化、智能化和集成化等趋势发展。

学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。

它对于一个学校是不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要。

学生成绩管理管理系统为用户提供充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的迫切要求。

本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化。

达到提高学生成绩管理效率的目的。

与传统管理方法相比有明显的优点:查找方便,可靠性高,保密性好,成本低。

彻底改变了以前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管理。

计算机被用到信息管理系统的环境正是适应了当今时代飞速发展的信息时代。

人们深刻的认识到了计算机功能的强大,对于复杂的信息管理,计算机充分发挥着它的优越性。

检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成绩。

同时,学生管理系统的应用也为今天的教育在未来市场的竞争力有所提高。

关键字:学生成绩管理,插入,查找,删除,退出,修改;目录1. 系统分析 (3)1.1系统开发背景 (3)1.2初步调查与可行性分析 (3)1.3系统目标 (3)1.4系统流程图 (4)2. 系统总体设计 (5)2.1总体结构图分析 (5)2.2总体结构图 (6)2.3总体数据结构 (6)3、详细设计 (7)3.1 程序功能设计 (7)3.2 设计思路 (7)4、系统测试 (9)4.1测试方案 (9)4.2测试用例及测试结果 (9)4.3软件可靠性 (11)5、软件使用说明书 (12)6、设计总结 (13)参考文献 (14)致谢 (15)附录(源代码) (16)1. 系统分析1.1系统开发背景学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。

基于汇编语言学生成绩管理系统

基于汇编语言学生成绩管理系统

学生成绩治理体系【2 】目次设计内容1设计目标1设计请求2设计剖析2子程序剖析6操作解释9程序代码10总结33参考文献33设计内容设计一个学生成绩治理程序,请求能实现以下功效: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所示进口A ) List 流程图B ) Insert 流程图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 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) 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:\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 bh,7mov 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,0dhmov ah,2int 21hmov 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,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hmov dl,' 'int 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:data start: 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 wexitf: 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 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+1inc 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 21hset_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 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 ;读取输入内容放在buffer1 read: mov dx,offset buffer2mov cx,23mov ah,3fh ;读文件,记载内容放在buffer2 int 21hlea si,buffer2 ;比较姓名是否雷同lea di,buffer1mov cx,15c5: mov dl,byte ptr[si]cmp dl,byte ptr[di]jnz readinc siinc diloop c5mov 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 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,15 ;读取键盘输入放在buffer1 read5: 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 ;写文件int 21hmov ah,3eh ;封闭文件int 21hjmp exit6exit5: set_p2show err1exit6:set_p3pop dxpop cxpop bxpop axretdelete endplist proc near ;列文件中记载push axpush bxpush cxpush dxclear1clear2set_p2show 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 cxpop 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] 西安:西安电子科技大学出版社,2007.35、王成瑞等.汇编说话程序设计[M] 北京:高级教导出版社,2003。

用C语言设计一个简单的学生成绩管理程序

用C语言设计一个简单的学生成绩管理程序

-----------------------学生成绩管理程序-软件编程课程设计一、题目1.利用C语言设计一个简单的学生成绩管理程序,主要功能包括:(1)学生成绩纪录输入。

(2)学生成绩查询;(3)学生成绩修改;(4)学生成绩删除。

规定:(1)学生纪录包括学号、姓名和总分三部分;(2)所有的学生纪录全存放在一个文件中;(3)以二进制的形式进行输出。

四、源程序代码#includ e<stdio.h> /*引用库函数*/#includ e<stdlib.h>#includ e<ctype.h>#includ e<string.h>typed ef struct /*定义结构体数组*/{char num[10]; /*学号*/char name[20]; /*姓名*/int score; /*成绩*/}Stud ent;Stud ent stu[80]; /*结构体数组变量*/int menu_sel ect() /*菜单函数*/char c;d o{system("cls"); /*运行前清屏*/printf("\t\t\t****学生成绩管理程序****\n"); /*菜单选择*/printf("\t\t\t | 1. 请输入学生记录|\n");printf("\t\t\t | 2. 删除记录|\n");printf("\t\t\t | 3. 查找数据|\n");printf("\t\t\t | 4. 写入文件|\n");printf("\t\t\t | 5. 改写成绩|\n");printf("\t\t\t | 0. 退出程序|\n");printf("请选择(0-5):");c=getchar(); /*读入选择*/}whil e(c<'0'||c>'5');return(c-'0'); /*返回选择*/}int Input(Stud ent stud[],int n) /*输入若干条记录*/{int i=0;char sign,x[10]; /*x[10]为清除多余的数据所用*/whil e(sign!='n'&&sign!='N') /*判断*/{ printf("\t\t\t学生的学号:"); /*交互输入*/scanf("\t\t\t%s",stud[n+i].num);printf("\t\t\t学生的姓名:");scanf("\t\t\t%s",stud[n+i].name);printf("\t\t\t学生的成绩:");scanf("\t\t\t%d",&stud[n+i].score);gets(x); /*清除多余的输入*/printf("\t\t是否继续?(Y/N)");scanf("\t\t\t%c",&sign); /*输入判断*/i++;}return(n+i);}int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/ { char s[20];int i=0,j;printf("\t\t\ttell me his(her) name:"); /*交互式问寻*/scanf("%s",s);whil e(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/if(i==n){ printf("\t\t\tnot find!\n"); /*返回失败信息*/return(n);}for(j=i;j<n-1;j++) /*删除操作*/{strcpy(stud[j].num,stud[j+1].num);strcpy(stud[j].name,stud[j+1].name);stud[j].score=stud[j+1].score;}printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/return(n-1);}void Query_a_record(Stud ent stud[],int n) /*查找并显示一个记录*/ { char s[20];int i=0;printf("\t\t\tinput his(her) name:"); /*交互式输入*/scanf("\t\t\t%s",s);whil e(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/if(i==n){ printf("\t\t\tnot find!\n"); /*输入失败信息*/return;}printf("\t\t\this(her) number:%s\n",stud[i].num); /*输出该学生信息*/ printf("\t\t\this(her) score:%d\n",stud[i].score);}void modify(Stud ent stud[] )/*修改学生信息*/{ int i;char num[10];int score;printf("\t\t\t请输入要修改成绩的学生的学号:");scanf("%s",num);printf("\t\t\t请输入修改后的成绩:");scanf("%d",&score);for(i=0;i<10;i++)if(!strcmp(num,stu[i].num))stu[i].score=score;}void Writetobin(Stud ent stud[],int n){ FILE *fp;int i;if((fp=fopen("data.bin","wb"))==NULL) //以二进制写方式打开文件{ printf("cannot open file\n");return;}for(i=0;i<n-1;i++)fwrite(&stud[i],sizeof( Stud ent),1,fp);fcl ose(fp);}void main() /*主函数*/{int n=0;for(;;){switch(menu_sel ect()) /*选择判断*/{case 1:printf("\t\t\t请输入记录:\n"); /*输入若干条记录*/n=Input(stu,n);break;case 2:printf("\t\t\tDelete a Record\n");n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/ printf("\t\t\t");system("pause");break;case 3:printf("\t\t\tQuery\n");Query_a_record(stu,n); /*查找并显示一个记录*/printf("\t\t\t");system("pause");break;case 4:printf("\t\t\tWrite to a bin file\n");Writetobin(stu,n);printf("\t\t\t");system("pause");break;case 5:modify(stu);printf("\t\t\t");system("pause");break;case 0:printf("\t\t\t\n"); /*结束程序*/ printf("\t\t\t");system("pause");exit(0);}}}二、流程图三、结果截图。

学生成绩管理系统设计实验(汇编语言)

学生成绩管理系统设计实验(汇编语言)

实验六学生成绩管理系统设计实验一、实验目的1、熟悉汇编语言程序结构;2、熟悉INT 21H的文件操作功能调用;3、熟悉INT 21H的1、9号功能和INT 10H常用功能的使用方法;4、掌握多子程序复杂问题程序设计方法;5、掌握利用汇编语言实现字符串的输入输出程序设计方法;6、了解多模块程序设计方法。

二、实验原理我们把可以多次调用、具有通用性、能完成特定功能的程序段编写成的独立程序模块称为子程序。

子程序是把一个程序划分成若干模块所用的主要手段,它便于独立设计、测试程序和编制程序文件。

三、实验内容1、实验要求设计一个学生成绩管理系统,要求完成文件建立、学生成绩录入、显示指定学号的学生记录、删除一个学生的记录、修改学生记录、返回等工作。

学生成绩包括学号(XH)、姓名(XM)、数学(SX)、语文(YW)、外语(WY)字段。

至少包括30名学生信息,每名学生学号字段为4个字符,姓名字段为15个字符(最大),每门成绩字段为3个字符(最大)。

程序设计步骤如下:1、编写主程序main.asm;2、编写文件创建子程序create,实现在指定盘指定文件夹“d:\chengji\2009\”下建立一个指定名称的文件2009doc.dat;3、编写成绩录入子程序append,实现在指定文件尾部插入一个学生的成绩记录;4、编写显示子程序display,实现按指定学号显示一个学生的记录;5、编写修改子程序modify,实现按指定学号修改一个学生的记录字段(不需修改直接回车);6、编写删除子程序,实现按指定学号、姓名删除一个学生的记录;7、编译、链接、调试,产生可执行文件main.exe。

2、程序流程图3、程序代码程序代码如下:DATAS SEGMENTMSG1 DB '1. Append a record$'MSG2 DB '2. Display a record$'MSG3 DB '3. Modify a record$'MSG4 DB '4. Delete a record$'MSG5 DB '5. Create file$'MSG6 DB '6. Return DOS$'MSGC DB 'Please input 1--6:$'MSGE DB 'Error!$'MSGC1 DB 'Please input filename:$'MAXLEN DB 25ACTLEN DB ?STRING DB 25 DUP(?)MAXLEN1 DB 25ACTLEN1 DB ?STRING1 DB 25 DUP(?)PATHNM DB 'D:\chengji\2009\\',23 DUP(?)PATH DB 'D:\chengji\2009\2009doc.dat',00MSGA1 DB 'Please input XH:$'MSGA2 DB 'Please input XM:$'MSGA3 DB 'Please input SX:$'MSGA4 DB 'Please input YW:$'MSGA5 DB 'Please input WY:$'HANDLE DW ?MSGXH DB 'Xuehao: $'MSGXM DB 'Xingming: $'MSGSX DB 'Shuxue:$'MSGYW DB 'Yuwen: $'MSGWY DB 'Waiyu: $'BUFFER DB 2048 DUP(' ')MSGRT DB 'Press any key to return!$'DELSTR DB 33 DUP(' ') DATAS ENDSSTACKS SEGMENT STACKDB 256 DUP(?)STACKS ENDS CODES SEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;******************************** ;主程序MAIN PROC FARS:;清屏CALL CLS ;逐行输出提示信息MOV AH,02HMOV DH,9MOV DL,30INT 10HMOV AH,9LEA DX,MSG1INT 21HMOV AH,02HMOV DH,10MOV DL,30INT 10HMOV AH,9LEA DX,MSG2INT 21HMOV AH,02HMOV DH,11MOV DL,30INT 10HMOV AH,9LEA DX,MSG3INT 21HMOV AH,02HMOV DH,12MOV DL,30INT 10HMOV AH,9LEA DX,MSG4INT 21HMOV AH,02HMOV DH,13MOV DL,30INT 10HMOV AH,9LEA DX,MSG5INT 21HMOV AH,02HMOV DH,14MOV DL,30INT 10HMOV AH,9LEA DX,MSG6INT 21H;提示输入MOV AH,02HMOV DH,15MOV DL,30INT 10HMOV AH,9LEA DX,MSGCINT 21H;从键盘读入一个数字MOV AH,02HMOV DH,15MOV DL,48INT 10HMOV AH,1INT 21H;按数字对应子程序CMP AL,31HJZ CAPPENDCMP AL,32HJZ CDISPLAYCMP AL,33HJZ CMODIFYCMP AL,34HJZ CDELETECMP AL,35HJZ CCREATECMP AL,36HJZ E;若输入不是1-6数字,则提示错误MOV AH,02HMOV DH,16MOV DL,30INT 10HMOV AH,9LEA DX,MSGEINT 21HCCREATE:CALL CREATEJMP SCDELETE:CALL DELETEJMP SCMODIFY:CALL MODIFYJMP SCDISPLAY:CALL DISPLAYJMP SCAPPEND:CALL APPENDJMP SE:MOV AH,4CHINT 21HMAIN ENDP;******************************** ;CREATE程序CREATE PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIPUSH DI;清屏CALL CLS;提示输入文件名MOV AH,2MOV DH,12MOV DL,20INT 10HMOV AH,9LEA DX,MSGC1INT 21H;从键盘读入文件名字符串MOV AH,0AHLEA DX,MAXLENINT 21H;将文件名字符串加到ASCIZ字符串末尾MOV CX,0MOV CL,ACTLENLEA SI,STRINGLEA DI,PATHNMADD DI,16LCREATE:MOV AL,BYTE PTR [SI]MOV [DI],ALINC DIINC SILOOP LCREATE;在ASCIZ字符串末尾加00MOV BYTE PTR [DI],0;按ASCIZ字符串创建文件MOV AH,3CHLEA DX,PATHNMMOV CX,0INT 21HPOP DIPOP SIPOP DXPOP CXPOP AXRETCREATE ENDP;******************************** ;APPEND程序APPEND PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DI;清屏CALL CLS;打开文件(只写)MOV AH,3DHMOV AL,01HLEA DX,PATHINT 21HMOV HANDLE,AX;提示输入学号MOV AH,02HMOV DH,10MOV DL,30INT 10HMOV AH,9LEA DX,MSGA1INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,4CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入姓名MOV AH,02HMOV DH,11MOV DL,30INT 10HMOV AH,9LEA DX,MSGA2INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,15CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入语文成绩MOV AH,02HMOV DH,12MOV DL,30INT 10HMOV AH,9LEA DX,MSGA3INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入数学成绩MOV AH,02HMOV DH,13MOV DL,30INT 10HMOV AH,9LEA DX,MSGA4INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入外语成绩MOV AH,02HMOV DH,14MOV DL,30INT 10HMOV AH,9LEA DX,MSGA5INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;在字符串末尾加回车、换行INC SIMOV BYTE PTR [BX+SI],0DHINC SIMOV BYTE PTR [BX+SI],0AHADD ACTLEN,2;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETAPPEND ENDP;******************************** DISPLAY PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入学号MOV AH,02HMOV DH,10MOV DL,28INT 10HMOV AH,9LEA DX,MSGXHINT 21H;从键盘读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(只读)MOV AH,3DHMOV AL,00HLEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针定位至文件开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;将文件载入缓存MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中找到对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JZ OUTPUT;若未找到,则提示错误MOV AH,9LEA DX,MSGEINT 21HJMP DEND;显示对应信息OUTPUT:MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGXMINT 21HADD SI,5MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,12 MOV DL,28INT 10HMOV AH,9LEA DX,MSGYW INT 21HADD SI,16MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,13 MOV DL,28INT 10HMOV AH,9LEA DX,MSGSX INT 21HADD SI,4MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,14 MOV DL,28INT 10HMOV AH,9LEA DX,MSGWY INT 21HADD SI,4MOV AH,9MOV DX,SIINT 21HMOV AH,2MOV DH,15MOV DL,28INT 10HMOV AH,9LEA DX,MSGRTINT 21HMOV AH,1INT 21HDEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETDISPLAY ENDP;******************************** MODIFY PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入学号MOV AH,02HMOV DH,10MOV DL,28INT 10HMOV AH,9LEA DX,MSGXHINT 21H;从键盘读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(读写)MOV AH,3DHMOV AL,10LEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针定位至文件开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;将文件载入缓存MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中找到对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JZ REVISEXM;若未找到,则提示错误MOV AH,9LEA DX,MSGEINT 21HJMP MEND;修改姓名REVISEXM:MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGXMINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DH ;若为回车,则将指针指向下一字段JNZ XMCONTADD SI,5JMP REVISEYWXMCONT:PUSH SIMOV DX,15CALL FILLPOP SIADD SI,5LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改语文成绩REVISEYW:MOV AH,02HMOV DH,12MOV DL,28INT 10HMOV AH,9LEA DX,MSGYWINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJNZ YWCONTADD SI,16JMP REVISESXYWCONT:PUSH SIMOV DX,3CALL FILLPOP SIADD SI,16LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改数学成绩REVISESX:MOV AH,02HMOV DH,13MOV DL,28INT 10HMOV AH,9LEA DX,MSGSXINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJNZ SXCONTADD SI,4JMP REVISEWYSXCONT:PUSH SIMOV DX,3CALL FILLPOP SIADD SI,4LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改外语成绩REVISEWY:MOV AH,02HMOV DH,14MOV DL,28INT 10HMOV AH,9LEA DX,MSGWYINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJZ MENDPUSH SIMOV DX,3CALL FILLPOP SIADD SI,4LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21HMEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETMODIFY ENDP;******************************** ******************************** **************DELETE PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入姓名MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGA2INT 21H;读入姓名字符串MOV AH,0AHLEA DX,MAXLEN1INT 21H;提示输入学号MOV AH,02HMOV DH,12MOV DL,28INT 10HMOV AH,9LEA DX,MSGA1INT 21H;读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(读写)MOV AH,3DHMOV AL,10LEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针指向开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;载入文件MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中搜索学号对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JNZ DELEND;比较该记录对应姓名是否与输入的相同PUSH SIADD SI,5LEA DI,STRING1MOV CX,0MOV CL,ACTLEN1MOV DX,0LCHECK:MOV AL,[SI]MOV AH,[DI]CMP AL,AHJZ LCONTIMOV DX,1JMP DELERRLCONTI:INC SIINC DILOOP LCHECKPOP SICMP DX,0JZ DEL;姓名不对应则提示错误DELERR:MOV AH,9LEA DX,MSGEINT 21HJMP DELENDDEL:;将文件指针定位至该记录开始处LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21H;将该记录覆盖为空格MOV AH,40HMOV BX,HANDLEMOV CX,33LEA DX,DELSTRINT 21HDELEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETDELETE ENDP;******************************** ;清屏程序CLS PROC NEARPUSH AXPUSH BXPUSH CXPUSH DX;屏幕初始化MOV AH,6MOV AL,0MOV BH,7MOV CX,0MOV DX,2479HINT 10H;重定位光标MOV DX,0MOV AH,2INT 10HPOP DXPOP CXPOP BXPOP AXRETCLS ENDP;******************************** ;搜索程序;若找到对应记录,则将DX赋为0,并将SI指向该记录首地址;否则DX 赋为1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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第五章总结通过对这学生成绩管理的的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。

相关文档
最新文档