




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上学生信息管理系统1. 实验类别使用汇编语言编程2. 实验内容和实验目的学生的信息包括姓名、班级、学号和成绩,其中成绩精确到1位小数。编写程序实现以下功能:(1)可以录入学生的信息,成绩以十进制形式录入,并显示;(2)可以按成绩进行排序显示;(3)可以统计平均成绩;(4)可以统计不及格、6070、7080、8090、90100各分数段的人数。3. 实验设备环境Windows 7 操作系统的pc机 ,使用QASM270编译器环境下编写。4. 实验实现过程及方法首先数据采用二维数组的形式进行存储,分为学生信息部分与成绩部分。然后将输入学生数也保存在一个一维数组中。然后再信息
2、的存储过程中,对于字符串输入进行转换,以二进制的形式存储在数据段中。然后采用冒泡排序,对于数据段中的人员信息进行排序。以成绩为参数。然后再对每个人员成绩进行遍历,统计各个数据层次中人员数,然后再成绩遍历的同时,将平均成绩也同时求出,在求平时成绩的时候,首先先将整数部分乘10 然后再加上小数部分,以便于后续的输出。将排序后的人员信息及成绩显示出来,然后将平均成绩也同时打印出来,还有各个分数层次中的人员数也都一并显示出来。下面是一些主要代码来实现上述过程:;数据部分 NUMBER DB 3 DUP(0) ;第一个存个/十位(ASCII码),第二个存个位(ASCII码),第三个存学生数(二进制) ;
3、用20字节单元表示学生信息,0-19中:0对应最大字符,1对应实际输入,2-18对应输入信息,19对应$ INFORMATION DB 99 DUP(20 DUP(0) ;用7字节单元来存分数,0-6中,0-4对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数 GRADE DB 99 DUP(7 DUP(0) AVERAGE_GRADE_BUFFER DB 2 DUP(0) ;第一个存整数部分(二进制形式),STORE_STUDENT_NUM ;存储学生总数,结果送cx中STORE_STUDENT_INFORMATION ;存储学生信息STORE_STUDENT_GRADE
4、 ;存储每个学生成绩SORT ;采用冒泡排序_DISPLAY ;显示结果FIND_RESULT ;显示平均成绩和分段人数关键算法的流程图:关于分段人数与总成绩的计算 冒泡排序算法:处理计算计算总成绩60?70?80?90?=100错误返回NNNNNA+B+C+D+E+YYYYY处理排序冒泡i=0 交换i+Ki =90 is:,$ ;各分数段人数 RESULT2 DB 0DH,0AH,The number of student in 80-90 is:,$ RESULT3 DB 0DH,0AH,The number of student in 70-80 is:,$ RESULT4 DB 0DH
5、,0AH,The number of student in 60-70 is:,$ RESULT5 DB 0DH,0AH,The number of student in =60 is:,$ GRADE_RANK DB 0DH,0AH,The grade list(high to low)is:,0DH,0AH,$ ;打印排名 BLANK DB ,$ HUANHANG DB 0DH,0AH,$KAISHISHUCHU DB 0DH,0AH,*,0DH,0AH,$ ;数据 NUMBER DB 3 DUP(0) ;第一个存个/十位(ASCII码),第二个存个位(ASCII码),第三个存学生数(二进
6、制) ;用20字节单元表示学生信息,0-19中:0对应最大字符,1对应实际输入,2-18对应输入信息,19对应$ INFORMATION DB 99 DUP(20 DUP(0) ;用7字节单元来存分数,0-6中,0-4对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数 GRADE DB 99 DUP(7 DUP(0) AVERAGE_GRADE_BUFFER DB 2 DUP(0) ;第一个存整数部分(二进制形式),第二个存小数部分(二进制形式) N0 DB 0 ;各分数段人数存储区(二进制形式) N1 DB 0 N2 DB 0 N3 DB 0 N4 DB 0 DATAS
7、ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: ;此处输入代码段代码 MOV AX,DATAS MOV DS,AX MOV SI,0 ;指向每个学生信息 MOV DI,0 ;指向每个学生成绩 MOV CX,100 ;初始化学生数 MOV DX, OFFSET STUDENT_NUM ;请求输入学生总数 MOV AH,09 INT 21H CALL STORE_STUDENT_NUM ;存储学生总数,结果送cx中 CMP CX,0 ;输入为0退出 JLE OUTTODOS CMP CX,100 ;学生数超出本程序范围,退出 JGE OUTTO
8、DOS INPUT: MOV DX, OFFSET STUDENT_INFORMATION ;请求输入学生信息 MOV AH,09 INT 21H CALL STORE_STUDENT_INFORMATION ;存储学生信息 ADD SI,20 ;指向下一个学生信息 MOV DX, OFFSET STUDENT_GRADE ;请求输入学生成绩 MOV AH,09 INT 21H CALL STORE_STUDENT_GRADE ;存储每个学生成绩 ADD DI,7 ;指向下一个学生 LOOP INPUT ;循环,直到输入所有学生成绩 CALL SORT ;排序 CALL _DISPLAY ;显
9、示结果 CALL FIND_RESULT ;显示平均成绩和分段人数 OUTTODOS: MOV AH,1 ;任意键结束 INT 21H MOV AX,4C00H ;返回DOS INT 21H;*存储学生数目的函数* STORE_STUDENT_NUM PROC ;调用之后,cx中存储了学生数(二进制) PUSH AX PUSH BX MOV BX,0 S1: MOV AH,1 INT 21H CMP AL,0DH ;是否为回车 JE S2 AND AL,0FH ;转换为非压缩的BCD码 MOV NUMBERBX,AL INC BX JMP S1 S2: CMP BX,2 JG S5 ;大于2
10、JZ S3 ;等于2 ;小于2 MOV AL,NUMBER JMP S4 S3: MOV AH,NUMBER MOV AL,NUMBER+1 AAD ;BCD码转换为二进制数 S4: MOV NUMBER+2,AL MOV CX,0 MOV CL,NUMBER+2 S5: POP BX POP AX RET STORE_STUDENT_NUM ENDP;*存储学生信息的函数* STORE_STUDENT_INFORMATION PROC PUSH AX PUSH BX PUSH DX MOV AL,18 MOV INFORMATIONSI,AL LEA DX,INFORMATIONSI MOV
11、 AH,0AH INT 21H MOV BL,INFORMATIONSI + 1 ;实际输入的字符个数 MOV AL, MOV INFORMATIONSI + BX + 2,AL ;将回车换成 MOV INFORMATIONSI+19,$ ;将每个存储单元的最后一个字节置为$以便输出 POP DX POP BX POP AX RET STORE_STUDENT_INFORMATION ENDP;*存储学生成绩的函数* STORE_STUDENT_GRADE PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,0 MOV CX,0 MOV DX,DI DEAL
12、0: MOV AH,1 INT 21H CMP AL,0DH ;判断是否为回车 JZ DEAL2 ;是回车 CMP AL,. ;是否为小数点 JNZ DEAL1 ;不是小数点 MOV BX,CX ;bx指向小数点处 INC BX ;标记小数点字符出现在第几个位置 DEAL1: PUSH BX MOV BX,DX MOV GRADEBX,AL POP BX INC CX ;记录输入字符的个数 INC DX JMP DEAL0 DEAL2: CMP BX,0 JNZ DEAL3 ;有小数点 ;无小数点 CMP CX,3 JG GOUT ;大于100 JZ DEAL4 ;等于100 ;小于100 C
13、MP CX,2 JZ DEAL5 ;输入数目为2位数 ;个位数 DEAL6: ;处理个位数 MOV AL,GRADEDI SUB AL,0 MOV GRADEDI + 5,AL JMP GOUT DEAL5: ;处理2位数 MOV AH,GRADEDI AND AH,0FH MOV AL,GRADEDI + 1 AND AL,0FH AAD MOV GRADEDI + 5,AL JMP GOUT DEAL4: ;处理3位数 MOV AL,100 MOV GRADEDI + 5,AL JMP GOUT DEAL3: ;处理带有小数部分的成绩 MOV AL,GRADEDI + BX ;将小数部分处
14、理 SUB AL,0 MOV GRADEDI + 6,AL CMP BX,4 JZ DEAL4 ;.出现在输入字符的第四位,则输入的整数部分为3位数 JG GOUT ;整数部分大于3位数 CMP BX,3 JZ DEAL5 ;.出现在输入字符的第三位,则输入的整数部分为2位数 JMP DEAL6 ;否则为个位数 GOUT: POP DX POP CX POP BX POP AX RET STORE_STUDENT_GRADE ENDP;*排序学生成绩的函数* SORT PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV DX,0 M
15、OV DL,NUMBER+2 LOOP1: ;使用冒泡排序法 MOV CX,DX MOV DI,0 MOV SI,0 LOOP2: ;先比整数部分,再比小数部分 MOV AL,GRADEDI + 5 CMP AL,GRADEDI + 12 JG NEXT ;大于,向下个移动 JL SWAP1 ;小于,交换成绩,名字 ;等于,比较小数部分 MOV AL,GRADEDI + 6 CMP AL,GRADEDI + 13 JGE NEXT ;大于或等于,向下个移动 JL SWAP1 ;小于,交换成绩,名字 SWAP1: MOV BX,SI SWAP11: ;交换学生信息 MOV AL,INFORMAT
16、IONBX + 2 XCHG AL,INFORMATIONBX + 22 MOV INFORMATIONBX + 2,AL INC BX CMP AL,$ JNZ SWAP11 PUSH BX MOV BX,0 SWAP2: ;交换学生成绩 MOV AL,GRADEDI + BX XCHG AL,GRADEDI + BX + 7 MOV GRADEDI + BX,AL INC BX CMP BX,7 JNZ SWAP2 POP BX NEXT: ADD SI,20 ADD DI,7 DEC CX JNZ LOOP2 DEC DX JNZ LOOP1 POP DI POP SI POP DX P
17、OP CX POP BX POP AX RET SORT ENDP;*显示最后结果的函数* FIND_RESULT PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV BX,0 MOV CX,0 MOV CL,NUMBER+2 ;cl中保存学生人数 MOV DI,0 MOV SI,0 F1: MOV AL,GRADEDI + 5 CMP AL,100 JG FOUT ;大于100 JZ F90 ;等于100 ;小于100 CMP AL,90 JGE F90 ;大于等于90 ;小于90 CMP AL,80 JGE F80 ;大于等于8
18、0 ;小于80 CMP AL,70 JGE F70 ;大于等于70 ;小于70 CMP AL,60 JGE F60 ;大于等于60 ;小于60 ;处理=90 MOV DL,N0 INC DL MOV N0,DL JMP FNEXT F80: ;处理大于等于80小于90 MOV DL,N1 INC DL MOV N1,DL JMP FNEXT F70: ;处理大于等于70小于80 MOV DL,N2 INC DL MOV N2,DL JMP FNEXT F60: ;处理大于等于60小于70 MOV DL,N3 INC DL MOV N3,DL JMP FNEXT F2: ADD DI,7 DEC
19、 CX JNZ F1 ;处理所有学生 MOV DX,OFFSET KAISHISHUCHU ;打印一段* MOV AH,09 INT 21H MOV DX,OFFSET AVERAGE_GRADE ;打印平均成绩 MOV AH,09 INT 21H MOV AX,BX MOV DX,0 MOV CX,0 MOV CL,NUMBER+2 DIV CX MOV CL,10 DIV CL CALL SHOW ;先打印平均成绩的整数部分 PUSH AX MOV DL,. ;打印. MOV AH,2 INT 21H POP AX MOV AL,AH CALL SHOW ;再打印平均成绩的小数部分 MOV
20、 DX,OFFSET RESULT1 ;输出大于等于90的人数 MOV AH,09 INT 21H MOV AL,N0 CALL SHOW MOV DX,OFFSET RESULT2 ;输出大于等于80并小于90的人数 MOV AH,09 INT 21H MOV AL,N1 CALL SHOW MOV DX,OFFSET RESULT3 ;输出大于等于70并小于80的人数 MOV AH,09 INT 21H MOV AL,N2 CALL SHOW MOV DX,OFFSET RESULT4 ;输出大于等于60并小于70的人数 MOV AH,09 INT 21H MOV AL,N3 CALL S
21、HOW MOV DX,OFFSET RESULT5 ;输出小于60的人数 MOV AH,09 INT 21H MOV AL,N4 CALL SHOW RET FIND_RESULT ENDP;*输出分数排序的函数* _DISPLAY PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV DX, OFFSET GRADE_RANK MOV AH,09 INT 21H MOV CX,0 MOV CL,NUMBER+2 ;cl中保存学生人数 MOV DI,0 MOV SI,0 D1: MOV DX, OFFSET INFORMATION ADD DX,SI ADD DX,2 MOV AH,09 INT 21H MOV DX, OFFSET BLANK ;打印一段空白 MOV AH,09 INT 21H mov Al,GRADEDI + 5 push ax MOV GRADEDI + 5,$ ;将保存成绩的单元中第6个字节置为$,便于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络设备配置要点试题及答案
- 2025届湖北省孝感市汉川市数学八下期末监测试题含解析
- 行政法学高效学习试题及答案策略
- 2025软考网络管理员技巧与试题
- 高考数学复习资料试题及答案
- 经营风险管理计划
- 部门目标与个人目标的协同计划
- 新学年教学工作总体规划计划
- 策划班级知识分享会计划
- 内部审核对生产计划的支持
- 膝痹病(膝关节退行性病变)中医诊疗方案
- 起重机械作业人员考试题库300题含标准答案
- GB/T 23723.5-2025起重机安全使用第5部分:桥式和门式起重机
- 植物提取物分类与提取方法课件
- 《元代染织工艺》课件
- 《热爱生命》课件-初中教育-教育专区
- 微信公众号运营协议
- 2024年银行业全渠道客户旅程分析与精细化线上运营白皮书-火山引擎
- 江苏省盐城市阜宁县多校2024-2025学年九年级上学期12月月考语文试题含答案
- 基于Arduino的智能闹钟设计与制作
- DB36T 477-2019 商品肉鹅规模养殖生产技术规程
评论
0/150
提交评论