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

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)此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。
汇编语言课程设计学生成绩管理系统

汇编语言课程设计课题名称:学生成绩管理系统小组成员:班级:指导教师:日期:2014.06.18 一、选题目的:熟悉汇编语言程序设计的实验环境,主要是熟悉汇编程序的基本结构,编译、连接和调试等基本操作。
利用该题目进行汇编语言程序设计运用的综合性训练,综合运用汇编语言循环程序和子程序编程方法,巩固以及提高汇编语言程序设计能力运用水平,为后续的开发和实验工作打好基础。
二、功能设计:编制一个程序,要求接收从键盘收入的一个班的学生成绩,并存放于50字节的GRADE 数组中,其中GRADE+N保存学号N+1的学生成绩,然后根据GRADE得学生成绩,把学生名次填入50自己的RANK数组中,其中RANK+N的内容是学号N+1学生的名次,在按学号把学生顺序学生名次显示出来。
三、算法流程图:四、运行结果:从键盘输入三个学生的姓名和成绩,按学生成绩升序排序,并显示出排序结果五、程序源代码:data segmentinfor0 db 0ah,0dh,'sort=$'infor1 db 0ah,0dh,'input name:$'infor2 db 0ah,0dh,'input score:$'n equ 8 姓名长度m equ 4 成绩长度(3位+回车符)p equ 3 输入的人数q equ 3 成绩的位数buff1 db n,?,n dup(0),'$' 姓名缓冲区,加$字符以便输入时用 buff2 db m,?,m dup(0),'$' 成绩缓冲区sname db p dup(n+1 dup(0)) 保存姓名score1 dw p dup(m+1 dup(0)) 保存成绩score2 dw p dup(m+1 dup(0))mingci db p dup(0) 名次x dw ?sign1 dw 0sign2 dw 0cont db '1' 计数data endscode segmentassume cs:code, ds:datamain proc farstart:mov ax,datamov ds,axmov es,axmov bx,0mov cx,0call inputcall sortcall printmov ah,4chint 21hmain endpinput procinc bx 输入次数统计cmp bx,p 输入次数>p?ja exitlea dx,infor1 显示提示2mov ah,9int 21hlea dx,buff1 输入姓名mov ah,10int 21hmov al,buff1+1 实际输入个数——a1add al,2 +2.包含bufferl的0、1号单元mov ah,0mov si,ax 回车0d所在位置,跟在最后一个字符后 mov buff1[si],0 将0d换为0,便于输出显示lea dx,infor2 显示提示2mov ah,9int 21hlea dx,buff2 输入成绩mov ah,10int 21hmov al,buff2+1 实际输入个数add al,2 个数+2,包含0、1单元,为找到0dmov ah,0mov si,axmov buff2[si],0 将0d换为0,便于输出显示mov mingci[bx-1],bl bx为输入次数,保存输入的次序cmp bx,1 第一次输入转let1jz let1add sign1,n+1 姓名间隔为n+1add sign2,q 成绩间隔为qlet1: 子程序嵌套call copyjmp inputexit:retinput endpcopy procmov cx,n+1 姓名长度+3(包含$)lea si,buff1+2lea di,sname 姓名传递到snameadd di,sign1 加上间隔值cldrep movsbmov cx,nmov ax,'$' 用$覆盖姓名区,清除已输入的姓名 lea si,buff2+2lea di,score1 成绩传递到score1add di,sign2 加上间隔符cldrep movsblea si,buff2+2mov di,sign2call change 二进制成绩score2retcopy endpchange procmov x,0mov cx,[si-1] 成绩的位数cxmov cx,000fh 保留低四位rept2:mov al,[si] 按位取出成绩cmp al,30h 是否在0、9之间jl exit1cmp al,39hjg exit1and ax,000fhxchg ax,xmov dx,10 将ax中前一次形成的书扩大十倍mul dx 保存到xadd x,axinc siloop rept2mov ax,x 按十进制形成的成绩以二进制保存 mov score2[di],ax 二进制成绩送入score2mov x,0add sign2,2 下一个成绩单元exit1:retchange endpsort procmov cx,p 数组长度dec cxloop1:push cx 保存外循环次数mov bx,0mov si,0loop2: mov ax,score2[bx]cmp ax,score2[bx+m+1] m+1=5jge next 降序xchg ax,score2[bx+m+1] 交换成绩mov score2[bx],axmov al,mingci[si]xchg al,mingci[si+1] 交换名次mov mingci[si],alnext:add bx,m+1inc si 下一个成绩loop loop2pop cx 恢复外循环次数loop loop1retsort endpprint proclea dx,infor0 显示结果提示mov ah,9int 21hmov cx,pmov bx,0mov ax,0mov di,0rept3:mov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov dl,cont 显示名次序号mov ah,2int 21hinc contmov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov al,mingci[di] 取名次dec al 位置-1,因为地址从0开始 mov bl,9mul bllea dx,snameadd dx,ax 偏移地址+姓名位移量mov ah,9 显示姓名int 21hmov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov bx,0mov al,mingci[di] 取名次dec al 地址从0开始mov bl,5mul bllea dx,score1add dx,axmov ah,9 显示成绩int 21hinc diloop rept3retprint endpcode endsend start六、自我评价:本次大作业做的是显示学生名次表,重要考察的是复杂程序设计中,采用模板块结构可以划分功能,分解程序,在各个程序之间存在参数传递问题,强调了传递方式和嵌套调用层次的运用。
课程方案(设计方案)汇编语言学生成绩管理系统

1 学生成绩管理系统目录设计内容 (2)设计目的 (2)设计要求 (2)设计分析 (2)子程序分析 (7)操作说明 (10)程序代码 (11)总结 (30)参考文献 (30)2 设计内容设计一个学生成绩管理程序要求能实现以下功能1各科成绩的录入修改和删除。
2按姓名查询每个学生各门课的成绩。
3显示查询结果。
4统计个分数段的人数。
5打印学生成绩。
设计目的用汇编数据的录入、修改和删除操作。
设计要求学习如何用汇编语言进行数据处理。
设计分析 1.总体结构整个程序采用主程序调用子程序的方法。
主程序完成菜单的显示子程序完成一个独立功能方法的实现。
各子程序的实现方法简要描述如下1设计INSERT录入子程序先打开文件SCORE.TXT并置文件指针到文件尾然后调用REC子程序接受用户的输入再把用户的输入写入文件最后关闭文件返回主程序。
2设计Delete删除子程序先打开文件再调用宏GETIN得到要删除的学生的姓?3 名然后读文件中的记录直到其记录的名字与所输入的名字相同为止把文件指针后退8个字符即4门课成绩所占的空间写入8个“0”字符关闭文件返回主程序。
3设计List浏览子程序时先打开文件然后读一个记录并通过调用宏SHOW_ITEM将其显示到屏幕上入文件指针没有到达文件尾则继续读记录并显示当指针到达文件尾时则关闭文件返回主程序。
4设计Modify修改子程序时先打开文件SCORE.TXT通用GER_REC得到要修改的记录然后读文件中的记录并与用户输入的记录做比较只比较记录中的名字部分若不同则吨下一条记录若相同则将文件指针后退23个字符一个记录为23个字符的长度然后把用户输入的记录写入文件最后关闭文件返回主程序。
5设计Count统计子程序时先打开文件然后读记录比较记录的第16个字符数学成绩的高位并统计直到文件指针到达文件尾最后关闭文件调用宏SHOW_ITEM显示统计结果返会主程序。
6设计Query查询子程序时先打开文件通过调用宏GETIN得到要查找学生的姓名然后读文件记录并同要查找的学生姓名比较若相同则输出若不同继续读文件记录最后显示查询结果关闭文件返回程序。
汇编语言课程设计---学生成绩管理程序

郑重声明:本篇文档为从百度文库中下载的经过原文修改后的!目录第一章设计课题概述 (2)1.1 课程设计目的 (2)1.2设计内容及要求 (2)第二章总体设计 (3)2.1总体设计思路 (3)2.2 各版块功能描述 (3)第三章详细设计 (5)3.1 程序功能设计 (5)3.2各模块程序详细流程 (5)3.3 源代码及注释 (8)第四章调试过程及结果 (32)4.1 显示所有成绩 (32)4.2 插入成绩 (32)4.3 查询学生成绩 (33)4.4 删除学生成绩 (34)4.5 修改学生成绩 (35)4.6输出数学成绩 (36)第五章总结 (37)参考资料 (38)第一章设计课题概述1.1 课程设计目的当今社会是一个信息时代的社会,计算机的使用也是越来越普遍了,各行业在管理职员都采用了一些管理软件,不管是银行、学校,大大小小的各种企业,都是使用的相应的管理软件管理企业的各种信息,我选择的这个汇编语言课程设计题就是一个简单学生信息管理程序,虽然只能处理一些简单操作,但是其意义却是非凡,同过此课程设计,让我了解了一些简单的管理软件的基本原理,更深刻的理解了汇编语言的特点,对汇编语言有了一个跟深层次的理解。
利用汇编程序编写一个小型学生成绩管理程序,实现学生信息成绩的插入、修改、显示所有学生的各科成绩,并且可根据输入学生姓名插询该生的各科成绩,可统计所有成绩个各分数段的人数。
1.2设计内容及要求设计一个学生管理程序,主要实现以下功能(1)各科成绩的录入、修改、和删除。
(2)按姓名查询每个学生哥们成绩。
(3)显示查询结果(4)统计各分数段的成绩的人数个分数段的人数。
程序运行时,在出现的主菜单中,按l键,将浏览学生的各科成绩;按i键后,将执行插入功能,可以插入新的学生成绩,按m键,键输入需要修改的学生成绩,也包括不修改的科目;按d键输入要删除的学生姓名,将使其成绩全部变成0;按q键输入查询的学生的姓名,将其各科成绩显示出来;按下c键将按数学成绩分段结果。
c语言学生成绩管理系统课程设计

c语言学生成绩管理系统课程设计一、教学目标本课程的教学目标是使学生掌握C语言学生成绩管理系统的开发方法,培养学生的编程能力和实际应用能力。
具体分为以下三个部分:1.知识目标:学生需要掌握C语言的基本语法、数据结构、函数、文件操作等编程知识,了解学生成绩管理系统的需求分析和系统设计方法。
2.技能目标:学生能够运用C语言独立完成一个学生成绩管理系统的设计和实现,具备一定的编程实践能力和问题解决能力。
3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,增强学生对技术改变生活的认识,培养学生的创新精神和团队合作意识。
二、教学内容教学内容以教材《C语言程序设计》为主线,结合实际应用需求,安排如下:1.C语言基础知识:数据类型、运算符、控制结构、数组、字符串等。
2.函数与模块化编程:函数定义与调用、局部变量与全局变量、递归、文件操作等。
3.数据结构:链表、栈、队列、树等。
4.学生成绩管理系统设计:需求分析、系统设计、模块划分、编程实现等。
5.调试与优化:调试方法、性能分析、代码优化等。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法相结合,以激发学生的学习兴趣和主动性。
1.讲授法:用于传授C语言基本语法和编程原理,帮助学生建立扎实的理论基础。
2.案例分析法:通过分析实际案例,让学生了解学生成绩管理系统的需求分析和设计方法,提高学生的实际应用能力。
3.实验法:安排实验课,让学生动手编写代码,培养学生的编程实践能力和问题解决能力。
四、教学资源教学资源包括教材、多媒体资料、实验设备等,以支持教学内容和教学方法的实施,丰富学生的学习体验。
1.教材:《C语言程序设计》。
2.多媒体资料:教学PPT、视频教程、在线编程练习等。
3.实验设备:计算机、网络设备、编程环境等。
五、教学评估教学评估是检验学生学习成果的重要手段,主要包括以下几个方面:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性。
汇编学生成绩程序设计报告

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

;此版本解决输入分数时输入错不能更改的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语言课程设计报告学生成绩管理系统

c语言课程设计报告学生成绩管理系统一、教学目标本课程旨在让学生掌握C语言的基本语法和编程技巧,通过实现一个学生成绩管理系统,培养学生运用C语言解决实际问题的能力。
具体目标如下:1.知识目标:–掌握C语言的数据类型、运算符、控制结构、函数等基本语法。
–理解结构体和文件操作等相关知识。
2.技能目标:–能够运用C语言编写简单的程序。
–学会使用C语言实现数据的输入、输出和处理。
–掌握使用结构体创建学生成绩数据结构,并实现对成绩的增删改查等操作。
3.情感态度价值观目标:–培养学生对编程的兴趣,增强自信心。
–培养学生的团队协作能力和解决问题的能力。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、文件操作等。
具体安排如下:1.C语言基本语法:数据类型、变量、运算符、控制结构、函数等。
2.数据结构:结构体、数组、指针等。
3.文件操作:文件的打开、关闭、读写等。
4.学生成绩管理系统:实现一个学生成绩管理系统,包括学生的增删改查、成绩的排序、统计等功能。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:用于讲解C语言的基本语法和概念。
2.案例分析法:通过分析实际案例,让学生学会运用C语言解决实际问题。
3.实验法:让学生动手实践,编写程序,培养实际编程能力。
四、教学资源1.教材:《C程序设计语言》或《C语言入门教程》。
2.参考书:《C Primer Plus》、《C语言编程思想》等。
3.多媒体资料:教学PPT、视频教程等。
4.实验设备:计算机、网络等。
五、教学评估本课程的评估方式包括平时表现、作业、考试等。
评估方式应客观、公正,能够全面反映学生的学习成果。
具体安排如下:1.平时表现:占课程总评的30%,包括课堂参与度、提问回答、小组讨论等。
2.作业:占课程总评的30%,包括课后练习、编程作业等。
3.考试:占课程总评的40%,包括期中考试和期末考试。
六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节进行教学,确保在有限的时间内完成教学任务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、课程设计的目的、任务
《汇编语言》课程设计对于巩固汇编语言理论知识,加强学生的实际动手能力和提高学生综合素质十分必要。
课程设计的目的主要是通过程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
2、软件需求分析和设计
2.1学生成绩管理系统是对学生成绩的管理,其中包括以下几个模块:
(1).插入一个数据(插入学生学号以及语数外三个成绩)。
(2)修改一个数据。
(3)删除学生成绩数据。
(4)查找学生成绩。
(5)查看学生成绩的排名
(6)查看学生成绩分布
(7)按esc键退出系统
2.2学生成绩管理系统应该包含以下信息:学号,语文成绩,英语成绩,数学成绩。
因此,系统应该提供以下功能:
(1)输出显示菜单。
(2)输入学生的成绩
(3)修改学生成绩
(4)删除学生成绩
(5)查询学生成绩
(6)显示学生成绩排名
(7)显示成绩分布统计
(8)按esc键退出系统
2.3依据程序的功能需求,该系统的功能结构图如下
系统功能结构图
2.4 程序流程图:
主程序流程图查找学生成绩
插入学生学号及成绩修改学生的成绩
显示各个学科各分数段的人数
3、程序实现说明
3.1学生管理系统中各子程序如下:
(1).输入全部学生学号以及语文,英语,数学三科的成绩。
子程序名:insert
子程序描述:该子程序为输入字程序。
系统在开始的时候是没有数据的,通过该子程序可以初始化系统,将学生的学号及成绩输入系统。
代码:
insert proc near ;定义进程子程序:插入学生,学号及
成绩
call input ;调用input
add n,1
ret
insert endp
(2).修改输入的成绩。
子程序名:modify
子程序描述:通过子程序修改学生的成绩
代码:
modify proc near ;定义进程子程序:修改学生学号,成绩 md1:output mess1 ;输出mess1
shuru ;调用宏shuru:二位数据输入
mov bl,n
mov bh,0
mov al,dl
mov si,0
md: cmp al,xh[si] ;先查找输入的学生是否存在
je qq1_1 ;查到的话,就跳转到qq1_1输入修改的值,
也就是重新输入。
;结果相等则跳转到qq1_1 add si,1
cmp si,bx
jbe md ;小于等于则跳转到md
output mess ;输出mess
jmp md1 ;不相等继续输入学号
qq1_1: ;转入修改的值重新输入。
mov di,si
output mess2
output mess4
mov si,0
mov cx,3
qq3_1:shuruu ;分别输入语文,英语,数学成绩,并将其放
在缓冲区buf中
cmp dx,78h ;比较输入的成绩是否大于120,如果大于120的
话,那么重新输入成绩
jbe qq2_1 ;小于等于则转移到qq2_1
output ts3 ;输出ts3
jmp qq1_1 ;跳转到qq1_1
qq2_1:mov buf[si],dl
output bg ;输出空格
add si,1
loop qq3_1
mov al,buf[0] ;将存入buf中的成绩,分别赋值给存放对应科
目的成绩的数组
mov chi[di],al
mov al,buf[1]
mov eng[di],al
mov al,buf[2]
mov mat[di],al
ret
modify endp
(3).删除学生的成绩。
子程序名:delete
子程序描述:通过子程序删除学生的成绩
代码:
de proc near ;删除某个学生的记录
sc1:output mess1
shuru ;调用宏shuru,接受输入的学号
mov bl,n
mov bh,0
mov al,dl
mov si,0
sc: cmp al,xh[si] ;查询输入学号的学生信息是否存在,不存在的
话,重新输入学号
je sc2 ;相等则转移到sc2
add si,1
cmp si,bx
jbe sc ;小于等于则转移到sc
output mess ;输出mess
jmp sc1
sc2:
sub bx,si
cmp bx,0
je sc3 ;相等则转移到sc3
mov cx,bx
sc4:mov dl,chi[si+1]
mov chi[si],dl
mov dl,eng[si+1]
mov eng[si],dl
mov dl,mat[si+1]
mov mat[si],dl
mov dl,xh[si+1]
mov xh[si],dl
add si,1
loop sc4 ;loop循环指令,执行操作(cx)<--(cx)-1.若
cx!=0,跳转到标号sc处循环执行;cx=0,则推出
循环,执行loop的下一条指令
sub n,1
sc3: ret
de endp
(3).查询学生的成绩。
子程序名:find
子程序描述:通过子程序查询学生的成绩
代码:
find proc near ;定义进程子程序:查找学生成绩
call sum ;求学生的总成绩
call ping ;求学生的平均成绩
bj1:output mess1 ;输出mess1
shuru ;二位数数据输入
mov bl,n
mov bh,0
mov al,dl
mov si,0
bj: cmp al,xh[si] ;将输入的学号与输入的学号相比,
je i ;存在的话,将此学生的成绩输出。
je表示结果相
等则转移。
add si,1
cmp si,bx
jbe bj ;小于等于则转移到bj
output mess
jmp bj1
i: output strr2
shuzi xh[si] ;shuzi为二位数据输出
output bg ;输出空格
mov al,chi[si]
cbw ;将字节变为字
shuzii ax ;shuzii为三位数据输出。
output bg ;输出空格
mov al,eng[si]
cbw ;将字节变为字
shuzii ax ;shuzii为三位数据输出
output bg
mov al,mat[si]
cbw
shuzii ax
output bg ;输出空格的字符串,用于与标题栏对齐
mov al,pj[si]
cbw
shuzii ax
output bg
mov ax,si
mov bl,2
mul bl
mov bx,ax
shuzii zc[bx] ;shuzii为三位数据输出
output bg ;输出空格的字符串,用于与标题栏对齐 shuzi mc[si] ;shuzi为二位数据输出
ret
find endp
(4).显示学生的成绩排名。
子程序名:show
子程序描述:通过子程序显示学生的成绩排名
代码:
show proc near ;定义进程子程序:显示结果排名
call sum ;调用宏sum
call ping ;调用宏ping
call rank ;调用宏rank
call shuchu ;调用宏shuchu
ret
show endp
3.2程序运行抓图:
主菜单修改学生成绩
删除学生成绩显示各个学科各分数段的人数
4、程序总结
通过两个星期的学习,努力,终于完成了报告。
系统可以很好的运行。
这两个多星期的时间,几乎每天不是在敲代码,就是在看代码,查书,上网。
系统中用到了很多最近才学习的知识,比如宏,子程序。
这些都使得代码的运行效率提高了,代码行数减少了。
系统还用到了bios的清屏功能。
这些功能如果不是做课程设计,我想我很难会接触到这些知识。
由于自己对知识掌握的不是很牢固,其中也会碰到一些困难。
每当遇到问题的时候,我会先上网去查找,看看有没有人提过这方面的问题。
互联网是强大的,大部分的问题通过网络都可以解决。
部分找不到的问题,我就去请教班里学得好的同学。
他们对知识的掌握远超过我。
这样下来,很多问题都迎刃而解了。
课程设计是一个很好的掌握书本上知识的过程。
平时上课之后,自己都不会想着去敲一些代码联系联系。
通过做课程设计,将理论与实践结合了起来,对知识的理解更加深入了。