郑重声明:本篇文档为从百度文库中下载的经过原文修改后的!目录第一章设计课题概述 (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第五章总结通过对这学生成绩管理的的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。