《汇编语言课程设计_学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《汇编语言课程设计_学生成绩管理系统.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、华 北 科 技 学 院课程设计说明书课程名称: 汇编语言 班级: 计算机B08-1 姓名:_ _ 学号:_ _设计题目:_ 学生成绩管理 _设计时间: 至_ 指导教师:_ _ _ _ _评 语:_评阅成绩: 评阅教师: 一、课程设计目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。二、课程设计要求 1要求编写并调试通过一个小型软件,实现对软件或硬件的操作。2遵循模块化、结构化的程序设计方法。3.要求程序必须正确。4.程序简明易懂,多运用输入
2、输出提示,出错信息及必要的注释。5.要求程序结构合理,语句使用得当。6.适当追求编程技巧和程序运行效率。三、课程设计题目:学生成绩管理四、课题分析学生成绩管理,顾名思义,就是管理学生的成绩,站在使用者的立场上来看,最基本需求的便是将学生成绩输入,求和并进行排名,当然还有其它更为人性化的需求,比如顺便得到学生的平均成绩,统计各科各个分数段的人数等等,甚至为了保存结果,可以将学生的所有成绩及排名保存在一个文件里面,以便以后调用。所以经过缜密思虑,确定学生成绩管理的一下几个功能:1, 数据输入功能。这是必不缺少的功能,学号的输入,成绩的输入都离不了这个功能,在输入成绩时,特地加了一个判断功能,在输入
3、不合理的成绩时,程序将提示出错,并要求重新输入。在输入学生学号的时候,程序首先会判断此学生的成绩是否存在,如果存在,则程序提示需重新输入。2, 修改功能。考虑到会存在在输入成绩时,容易输入错误,或者发生个别学生的试卷被误判需修改成绩等情况,所以加了此功能,在发生以上情况时可以调用此功能,修改指定学生的成绩。3, 删除学生信息的功能。如果输入的学生信息根本不存在,或者发生其它情况需删除一个无意义的学生信息时,可以调用此功能。此功能将实现将指定学号学生的信息删除。4, 信息查找功能。当需要查询某个学生的成绩或者检查输入是否有误时,可以调用此功能,此功能实现将指定学号学生的成绩显示出来。实际上在调用
4、此功能的同时,程序会首先求的总成绩,平均成绩,然后产生排名结果,最后将数据信息显示。5, 显示排名信息功能。此功能会将学生成绩自动相加,得到每位学生的总成绩及平均成绩,然后进行排名,得到每个学生的名词,最后按照输入顺序将所有学生的学号,语文成绩,英语成绩,数学成绩,平均成绩,总成绩,名次依次输出。6, 课程成绩分析功能。此功能实现在屏幕上显示三门课程的各个分数段的学生人数,以表格的形式在屏幕上显示。(分数段为:=90;8089;7079;6069;=59)7, 文件写入及退出功能。此功能实现将学生的信息保存在一个文件里。此程序默认将文件放在C盘下,名称为:score,属性为txt格式的文本文档
5、。写入文件完毕后,关闭文件,并退出程序。五、流程图: 主程序流程图开始创建文件显示主菜单输入功能号Ni?Nm?N提示输入有误d?Yf?NYNs?Yc?e?NYYY调用子程序insert调用子程序modify调用子程序de调用子程序find调用子程序showw调用子程序showY结束返回主菜单大于120NY调用input子程序输入学号学号是否存在提示重新输入学号输入成绩YN子程序的流程图调用input子程序调用宏shuru 学号是否存在?输入学号YN修改成绩学号是否存在提示输入有误重新输入N 大于120Y提示重新输入学号N输入成绩返回主菜单 (a)子程序insert 流程图 (b)子程序modi
6、fy流程图调用宏shuru,输入学号调用宏shuru,输入学号NN学号是否存在?学号是否存在?YY显示查询结果删除记录返回主菜单返回主菜单 (c) 子程序del流程图 (d)子程序find流程图将计数数组清零将名次清零调用rank子程序调用countt子程序调用相关宏调用shuchu子程序返回主菜单返回主菜单 (e)子程序show流程图 (f)子程序showw流程图设置读写指针写入文件关闭文件结束 (g)子程序exit流程图六、程序源代码zhuanss macro j,t ;将三位数的数据转换成为三个对应的字符,并将其存入缓冲区zs中 push bx mov si,t mov ax,j mov
7、 bl,100 div bl add al,30h mov zssi,al add si,1 mov al,ah cbw mov bl,10 div bl add al,30h add ah,30h mov zssi,al add si,1 mov zssi,ah add si,1 pop bx endmclear MACRO ;清屏 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 10HENDM kong macro ;回车换行 mo
8、v ah,2 mov dl,0ah int 21h mov ah,2 mov dl,0dh int 21hendmoutput macro p ;字符串输出 mov dx,offset pmov ah,9int 21hendmshuru macro ;二位数数据输入 mov ah,01int 21hsub al,30hcbwmov bl,10mul bl mov dl,al mov ah,01hint 21hsub al,30h add dl,alendm zhuane macro e,b ;将二位数转换成对应两个字符,并将其存入缓冲区zs push bx mov si,b mov al,e
9、cbw mov bl,10 div bl add ah,30h add al,30h mov zssi,al add si,1 mov zssi,ah add si,1 pop bxendm zhuans macro f,s ; 将三位数成绩转换成为对应的三个字符,并存入缓冲区zs中 push bx mov si,s mov al,f cbw mov bl,100 div bl add al,30h mov zssi,al add si,1 mov al,ah cbw mov bl,10 div bl add al,30h add ah,30h mov zssi,al add si,1 mov
10、 zssi,ah add si,1 pop bx endmshuzi macro r ;二位数据输出 mov al,r cbw mov bl,10 div bl mov bl,ah mov dl,al add dl, 30hmov ah,2int 21h mov dl,bladd dl,30hmov ah,2int 21hendmshuruu macro ;三位数数据输入 shuru mov al,dl mov dl,10 mul dl mov dx,ax mov ah,1 int 21h sub al,30h cbw add dx,axendmshuzii macro u ;三位数数据输出
11、mov ax,u mov bl,100 div bl mov bl,ah mov dl,al add dl,30h mov ah,2 int 21h shuzi blendm DATAS SEGMENTm dw 0 ;移动文件指针时,选择绝对移动方式,则m代表指针偏移量zs db 18 dup (?) ;缓冲区用来存放单个学生信息的字符pathnam db C:score.txt,00h ;建立目录项handle dw ? ;文件句柄buf db 3 dup(?) ;输入缓冲区zc dw 100 dup(?) ;存放总成绩的数组pj db 100 dup(?) ;存放平均成绩数组n db 0
12、;存放输入的学生信息的个数gs0 db 5 dup (0) ;记录所查询科目分数段的gs1 db 5 dup(0)gs2 db 5 dup(0) mc db 100 dup (1) ;存放学生的名次的数组 chi db 100 dup (?) ;存放学生成绩的数组 eng db 100 dup (?) mat db 100 dup (?) xh db 100 dup (?) ;存放学生学好的数组 cour0 db chinese,$ cour1 db english,$ cour2 db maths ,$ ts db 13,10,You are successful,press anykey
13、to continue!,13,10,$ ts1 db 13,10,You are wrong , Try again!,13,10,$ ts3 db 13,10,The score you input is bigger than 127,input agian!,13,10,$ ts4 db 13,10,The school number you input is exist,please try again!,13,10,$ cai db *Insert a data*,13,10,$ cai1 db *Modify a data*,13,10,$ cai2 db *Delete a d
14、ata*,13,10,$ cai3 db *Find a data*,13,10,$ cai4 db *Show the rank*,13,10,$ cai6 db *Show the count*,13,10,$ cai5 db *Exit with the keyboard of ESC*,13,10,$ ts2 db Please choose the Function,13,10,$ mess db 13,10,The data you input is not exist,input again,13,10,$ mess1 db 13,10,Please input the scho
15、ol number ,13,10,$ mess2 db 13,10, Please input three scores(0-120),13,10,$ mess4 db chinese english maths ,13,10,$ mess3 db Aothor by Xu Heng peng,13,10,$ strr1 DB *score and rank=,13,10,$strr2 DB 13,10,number chi eng math average sum rank ,13,10,$strr3 db 13,10,course =90 =80 =70 =60 60 ,13,10,$bg
16、 db ,$ DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov es,ax mov ah,3ch ;请求创建文件 mov cx,00 ;默认属性 lea dx,pathnam ;装入pathnam的地址 int 21h mov handle,ax ;保存文件句柄main: ; 主菜单显示 output cai output cai1 output cai2 output cai3 outpu
17、t cai4 output cai6 output cai5 output ts2 mov ah,1 ;输入字符,选择功能键 int 21h cmp al,i jne n1 call insert ;调用insert子程序,输入学生学号,成绩 jmp rkn1: cmp al,m jne n2 call modify ;调用modify子程序,修改指定学生的成绩 jmp rkn2: cmp al,d ;调用de子程序,删除制定学生的成绩 jne n3 call de jmp rkn3: cmp al,f ;调用find子程序,显示指定学生的成绩及名次 jne n4 call find jmp
18、rkn4: cmp al,s ;调用show子程序,显示所有学生的各科成绩,平均成绩,总成绩及名次 jne n5 call show jmp rkn5: cmp al,c ;调用showw子程序,显示各科各分数段的学生数量 jne n6 call showw jmp rkn6: cmp al,1bh ;调用exit子程序,将数据保存到score.txt文件中,并退出程序 jne n7 call exitn7: clear output ts1 jmp mainrk: output ts mov ah,1 int 21h clear jmp main;*exit proc near ;退出 mo
19、v cl,n ;写入文件的次数 cbw mov bx,0 mov di,0zh: push di ;保存di,cx,bx中的内容 push bx push cx mov si,0 zhuane xhbx,si ;调用宏zhuane将两位数的学号转换为对应的二个字符,并存放到zs缓冲区中 zhuans chibx,si ;调用宏zhuans将三位数的语文成绩转换为对应的三个字符,并存放到zs缓冲区中 zhuans engbx,si ;调用宏zhuans将三位数的英语成绩转换为对应的三个字符,并存放到zs缓冲区中 zhuans matbx,si ;调用宏zhuans将三位数的数学成绩转换为对应的三
20、个字符,并存放到zs缓冲区中 zhuans pjbx,si ;调用宏zhuans将三位数的平均成绩转换为对应的三个字符,并存放到zs缓冲区中 zhuanss zcdi,si ;调用宏zhuanss将三位数的总成绩成绩转换为对应的三个字符,并存放到zs缓冲区中 zhuane mcbx,si ;调用宏zhuane,将两位数的名词,转换为对应的二个字符,并存放到zs缓冲区中 mov ah,42h ;移动读写指针 mov al,00 ;移动方式为绝对移动方式 mov bx,handle mov cx,00 mov dx,m int 21h add m,20 mov ah,40h ;调用40h功能,请求
21、写文件 mov bx,handle ;获取文件句柄 mov cx,19 ;写入长度为19个字节 lea dx,zs int 21h pop cx pop bx pop di add di,2 add bx,1 sub cx,1 cmp cx,0 ;判断写入是否完毕 jg zh mov bx,handle ;写入完毕,关闭文件 mov ah,3eh int 21h clear output mess3MOV AH,4CH ;退出程序 INT 21H retexit endp ;*sum proc near ;求学生的总成绩 mov cl,n mov ch,0 mov si,0 mov bx,0s
22、ss:mov al,chisi ;将三科成绩相加,将总成绩传给数组zc mov ah,0 mov dl,matsi mov dh,0 add ax,dx mov dl,engsi mov dh,0 add ax,dx mov zcbx,ax add bx,2 add si,1 loop sss retsum endp;*ping proc near ;求学生的平均成绩 mov cl,n cbw mov si,0 mov bx,0p_p: mov ax,zcbx ;将总成绩除以三,获取的数据传送给数组pj mov dl,3 div dl mov pjsi,al add si,1 add bx,2
23、 loop p_p retping endp ;*modify proc near ;修改学生学号,成绩md1:output mess1 shuru mov bl,n mov bh,0 mov al,dl mov si,0md: cmp al,xhsi ;先查找输入的学生是否存在 je qq1_1 ;查到的话,就跳转到qq1_1输入修改的值,也就是重新输入 add si,1 cmp si,bx jbe md output mess jmp md1 ;不相等继续输入学号qq1_1: mov di,si output mess2 output mess4 mov si,0 mov cx,3qq3_
24、1:shuruu ;分别输入语文,英语,数学成绩,并将其放在缓冲区buf中 cmp dx,78h ;比较输入的成绩是否大于120,如果大于120的话,那么重新输入成绩 jbe qq2_1 output ts3 jmp qq1_1qq2_1:mov bufsi,dl output bg add si,1loop qq3_1 mov al,buf0 ;将存入buf中的成绩,分别赋值给存放对应科目的成绩的数组 mov chidi,al mov al,buf1 mov engdi,al mov al,buf2 mov matdi,al ret modify endp ;*countt proc nea
25、r ;统计各科各个分数段学生的个数 mov cx,5 mov si,0zl: mov gs0si,0 add si,1 loop zl mov cl,n mov ch,0 mov si,0c11:mov al,chisi cmp al,90 jl cc1 add gs00,1 jmp cc8cc1:cmp al,80 jl cc2 add gs01,1 jmp cc8cc2:cmp al,70 jl cc3 add gs02,1 jmp cc8cc3:cmp al,60 jl cc4 add gs03,1 jmp cc8cc4:add gs04,1cc8:add si,1 loop c11 l
26、ea si,gs0 lea di,gs1 mov cx,5 cld rep movsb mov cx,5 mov si,0 cc9: mov gs0si,0 add si,1 loop cc9 mov cl,n mov ch,0 mov si,0mov cl,n mov ch,0 mov si,0c111:mov al,engsi cmp al,90 jl cc15 add gs00,1 jmp cc88cc15:cmp al,80 jl cc22 add gs01,1 jmp cc88cc22:cmp al,70 jl cc33 add gs02,1 jmp cc88cc33:cmp al,
27、60 jl cc44 add gs03,1 jmp cc88cc44:add gs04,1cc88:add si,1 loop c111 lea si,gs0 lea di,gs2 mov cx,5 cld rep movsb mov cx,5 mov si,0ct: mov gs0si,0 add si,1 loop ct mov cl,n mov ch,0 mov si,0c13:mov al,matsi cmp al,90 jl cc1_2 add gs00,1 jmp cc8_2cc1_2:cmp al,80 jl cc2_2 add gs01,1 jmp cc8_2cc2_2:cmp
28、 al,70 jl cc3_2 add gs02,1 jmp cc8_2cc3_2:cmp al,60 jl cc4_2 add gs03,1 jmp cc8_2cc4_2:add gs04,1cc8_2: add si,1 loop c13retcountt endp ;* find proc near ;查找学生成绩 call sum call pingbj1:output mess1 shuru mov bl,n mov bh,0 mov al,dl mov si,0bj: cmp al,xhsi ;将输入的学号与输入的学号相比, je i ;存在的话,将此学生的成绩输出 add si,
29、1 cmp si,bx jbe bj output mess jmp bj1 i: output strr2 shuzi xhsi output bg mov al,chisi cbw shuzii ax output bg mov al,engsi cbw shuzii ax output bg mov al,matsi cbw shuzii ax output bg ;输出空格的字符串,用于与标题栏对齐 mov al,pjsi cbw shuzii ax output bg mov ax,si mov bl,2 mul bl mov bx,ax shuzii zcbx output bg
30、shuzi mcsi retfind endp;*insert proc near ;插入学生,学号及成绩 call input add n,1 ret insert endp ;*show proc near ;显示结果排名 call sum call ping call rank call shuchu retshow endp ;*showw proc near ;显示各个学科各分数段的人数 call countt output strr3 output cour0 output bg shuzi gs10 output bg shuzi gs11 output bg shuzi gs1
31、2 output bg shuzi gs13 output bg shuzi gs14 kong output cour1 output bg shuzi gs20 output bg shuzi gs21 output bg shuzi gs22 output bg shuzi gs23 output bg shuzi gs24 kong output cour2 output bg shuzi gs00 output bg shuzi gs01 output bg shuzi gs02 output bg shuzi gs03 output bg shuzi gs04 ret showw
32、endp;*de proc near ;删除某个学生的记录sc1:output mess1 shuru ;调用宏shuru,接受输入的学号 mov bl,n mov bh,0 mov al,dl mov si,0sc: cmp al,xhsi ;查询输入学号的学生信息是否存在,不存在的话,重新输入学号 je sc2 add si,1 cmp si,bx jbe sc output mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3 mov cx,bxsc4:mov dl,chisi+1 mov chisi,dl mov dl,engsi+1 mov engs
33、i,dl mov dl,matsi+1 mov matsi,dl mov dl,xhsi+1 mov xhsi,dl add si,1 loop sc4 sub n,1sc3: retde endp;* input proc near ;输入学生学号,成绩e6: output mess1 shuru mov bl,n mov bh,0 mov xhbx,dl cmp bx,0 ;判断是不是第一次输入,如果是,则跳过比较程序 je qq1 ;继续输入成绩 mov cl,n ;如果不是第一次输入则要将输入的学号与以前输入的比较 cbw mov si,0 mov al,xhbxe7: cmp al,xh