版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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码),第三个存学生数(二进制) ;用20字节单元表示学生信息
3、,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 ;存储每个学生成绩SOR
4、T ;采用冒泡排序_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,0AH,The numb
5、er 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码),第三个存学生数(二进制) ;用20字节单元表示
6、学生信息,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 ENDS CODES SE
7、GMENT 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 OUTTODOS INPUT: MO
8、V 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 ;显示结果 CALL FIND
9、_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 JZ S3 ;等于2 ;小
10、于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 AH,0AH INT 2
11、1H 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 DEAL0: MOV AH,1 I
12、NT 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 CMP CX,2 JZ DE
13、AL5 ;输入数目为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 ;将小数部分处理 SUB AL,0 MO
14、V 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 MOV DL,NUMBER+
15、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,INFORMATIONBX + 2 XCH
16、G 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 POP CX POP BX
17、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 ;大于等于80 ;小于80 CMP A
18、L,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 CX JNZ F1 ;处
19、理所有学生 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 DX,OFFSET RE
20、SULT1 ;输出大于等于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 SHOW MOV DX,OF
21、FSET 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南省烟草专卖局(公司)高校毕业生招聘190人备考题库及答案详解【全优】
- 2026中国科学院广州地球化学研究所科研助理招聘2人备考题库(应用矿物学学科组)附参考答案详解(突破训练)
- 2026四川省八一康复中心招聘工作人员(编制外)7人备考题库附参考答案详解(培优)
- 2026浙江深泓水利工程有限公司招聘第一批项目制用工人员6人备考题库附参考答案详解(a卷)
- 2026兴业银行宁德分行春季校园招聘备考题库带答案详解(培优b卷)
- 【特色专题专训】类型一 力学综合计算题
- 汽车制造厂生产线操作规范
- 2.3 汉族民歌 山歌 课件-高中音乐人音版必修音乐鉴赏
- 2026山东济南市中心医院招聘博士研究生(控制总量)70人备考题库含答案详解(预热题)
- 2026云南玉溪易门县科学技术协会招聘2人备考题库带答案详解ab卷
- 交通安全设施故障应急措施
- 中国古代工匠精神人物
- 养猪场自动化喂养系统建设方案
- 2025特变电工校园招聘200人笔试历年参考题库附带答案详解
- 移动式操作平台专项施工方案(二期)
- 2025年红色文化知识竞赛试题题及答案
- 文旅局考试试题及答案
- 穿越河道管理办法
- 【化工废水(酚醛树脂)水解酸化池的设计计算过程案例1400字】
- 内蒙古地质矿产勘查有限责任公司招聘笔试题库2025
- 中考地理真题专题复习 两极地区(解析版)
评论
0/150
提交评论