试验报告学生信息管理系统.docx
《试验报告学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《试验报告学生信息管理系统.docx(28页珍藏版)》请在冰点文库上搜索。
![试验报告学生信息管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-5/22/ae333b5e-9e60-4a73-8ee2-ee48a9616215/ae333b5e-9e60-4a73-8ee2-ee48a96162151.gif)
试验报告学生信息管理系统
学生信息管理系统
1.实验类别
使用汇编语言编程
2.实验内容和实验目的
学生的信息包括姓名、班级、学号和成绩,其中成绩精确到1位小数。
编写程序实现以下功能:
(1)可以录入学生的信息,成绩以十进制形式录入,并显示;
(2)可以按成绩进行排序显示;
(3)可以统计平均成绩;
(4)可以统计不及格、60~70、70~80、80~90、90~100各分数段的人数。
3.实验设备环境
7操作系统的机,使用270编译器环境下编写。
4.实验实现过程及方法
首先数据采用二维数组的形式进行存储,分为学生信息部分与成绩部分。
然后将输入学生数也保存在一个一维数组中。
然后再信息的存储过程中,对于字符串输入进行转换,以二进制的形式存储在数据段中。
然后采用冒泡排序,对于数据段中的人员信息进行排序。
以成绩为参数。
然后再对每个人员成绩进行遍历,统计各个数据层次中人员数,然后再成绩遍历的同时,将平均成绩也同时求出,在求平时成绩的时候,首先先将整数部分乘10然后再加上小数部分,以便于后续的输出。
将排序后的人员信息及成绩显示出来,然后将平均成绩也同时打印出来,还有各个分数层次中的人员数也都一并显示出来。
下面是一些主要代码来实现上述过程:
;数据部分
3(0);第一个存个/十位(码),第二个存个位(码),第三个存学生数(二进制)
;用20字节单元表示学生信息,0-19中:
0对应最大字符,1对应实际输入,2-18对应输入信息,19对应'$'
99(20(0))
;用7字节单元来存分数,0-6中,0-4对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数
99(7(0))
2(0);第一个存整数部分(二进制形式),
;存储学生总数,结果送中
;存储学生信息
;存储每个学生成绩
;采用冒泡排序
;显示结果
;显示平均成绩和分段人数
关键算法的流程图:
关于分段人数与总成绩的计算冒泡排序算法:
处理计算
计算总成绩
<60?
<70?
<80?
<90?
<=100
错误
返回
N
N
N
N
N
Y
Y
Y
Y
Y
处理排序冒泡
0
交换
<1
?
返回
Y
N
Y
N
5.效果图
输入三人信息,班级学好姓名,然后输入此人成绩。
可以看到三人的按成绩排序,然后将平均值输出,而且统计了各个分数区间的人数。
输入5人信息,并将其打印出来。
6.实验心得
通过编写学生管理系统的汇编实验,让我对汇编语言有了很深的了解,对于语言的熟悉度也提高了很多。
在编写的过程中遇到了很多的问题,由于汇编语言使用起来比较繁琐(个人感觉),很多内部运行的数据不能很好的呈现出来,所以对数据的保存,处理等方面出现了很大的错误,主要是在字符的输入与二进制的转换,还有就是在数据处理的时候会出现很多标志位,这些标准为对于处理后数据的保存有很大的影响,但是通过课本上的实验例子,对于这些问题基本上都能得到一定的解决。
还有就是在需要跳转的时候,由于跳转指令使用对标志位或者条件使用比较灵活,有很多种的跳转指令,这些指令在使用起来是很方便但是由于判断条件很多,可能不小心就出现了跳转出错。
还有就是,跳转不到想要跳转的地方。
这些问题需要在编写的过程中非常的小心,同时也能将这些指令得使用规则得到一个很好的理解与记忆。
总之,在此次的汇编实验的编写过程中,理解了很多在课堂上学习到的知识,也同时记忆了这些指令的使用规则与方法。
对于汇编语言有了一定程度的理解与掌握。
源程序:
;此处输入数据段代码
;输入输出提示字符
'(1-99):
','$'
0,0,'():
',0,0,'$'
0,0,'(0.0-100.0):
',0,0,'$'
0,0,':
','$'
10,0,'[>=90]:
','$';各分数段人数
20,0,'[80-90]:
','$'
30,0,'[70-80]:
','$'
40,0,'[60-70]:
','$'
50,0,'[<=60]:
','$'
0,0,'():
',0,0,'$';打印排名
'','$'
0,0,'$'
0,0,'***********************************',0,0,'$'
;数据
3(0);第一个存个/十位(码),第二个存个位(码),第三个存学生数(二进制)
;用20字节单元表示学生信息,0-19中:
0对应最大字符,1对应实际输入,2-18对应输入信息,19对应'$'
99(20(0))
;用7字节单元来存分数,0-6中,0-4对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数
99(7(0))
2(0);第一个存整数部分(二进制形式),第二个存小数部分(二进制形式)
N00;各分数段人数存储区(二进制形式)
N10
N20
N30
N40
:
;此处输入代码段代码
0;指向每个学生信息
0;指向每个学生成绩
100;初始化学生数
;请求输入学生总数
09
21H
;存储学生总数,结果送中
0;输入为0退出
100;学生数超出本程序范围,退出
:
;请求输入学生信息
09
21H
;存储学生信息
20;指向下一个学生信息
;请求输入学生成绩
09
21H
;存储每个学生成绩
7;指向下一个学生
;循环,直到输入所有学生成绩
;排序
;显示结果
;显示平均成绩和分段人数
:
1;任意键结束
21H
4C00H;返回
21H
;******************存储学生数目的函数******************
;调用之后,中存储了学生数(二进制)
0
S1:
1
21H
0;是否为回车
S2
0;转换为非压缩的码
[]
S1
S2:
2
S5;大于2
S3;等于2
;小于2
S4
S3:
1
码转换为二进制数
S4:
2
0
2
S5:
;******************存储学生信息的函数******************
18
[]
[]
0
21H
[+1];实际输入的字符个数
''
[++2];将回车换成''
[19],'$';将每个存储单元的最后一个字节置为'$'以便输出
;******************存储学生成绩的函数******************
0
0
0:
1
21H
0;判断是否为回车
2;是回车
'.';是否为小数点
1;不是小数点
指向小数点处
;标记小数点字符出现在第几个位置
1:
[]
;记录输入字符的个数
0
2:
0
3;有小数点
;无小数点
3
;大于100
4;等于100
;小于100
2
5;输入数目为2位数
;个位数
6:
;处理个位数
[]
'0'
[+5]
5:
;处理2位数
[]
0
[+1]
0
[+5]
4:
;处理3位数
100
[+5]
3:
;处理带有小数部分的成绩
[+];将小数部分处理
'0'
[+6]
4
4;'.'出现在输入字符的第四位,则输入的整数部分为3位数
;整数部分大于3位数
3
5;'.'出现在输入字符的第三位,则输入的整数部分为2位数
6;否则为个位数
:
;******************排序学生成绩的函数******************
0
2
1:
;使用冒泡排序法
0
0
2:
;先比整数部分,再比小数部分
[+5]
[+12]
;大于,向下个移动
1;小于,交换成绩,名字
;等于,比较小数部分
[+6]
[+13]
;大于或等于,向下个移动
1;小于,交换成绩,名字
1:
11:
;交换学生信息
[+2]
[+22]
[+2]
'$'
11
0
2:
;交换学生成绩
[+]
[++7]
[+]
7
2
:
20
7
2
1
;******************显示最后结果的函数******************
0
0
2中保存学生人数
0
0
F1:
[+5]
100
;大于100
F90;等于100
;小于100
90
F90;大于等于90
;小于90
80
F80;大于等于80
;小于80
70
F70;大于等于70
;小于70
60
F60;大于等于60
;小于60
;处理<60
4
N4
:
;处理平均成绩处理方式:
整数部分*10+小数部分,结果先除以学生人数,再输出(输出整数时除以10)
[+5]
10
[+6]
0
F2
:
F90:
;处理>=90
0
N0
F80:
;处理大于等于80小于90
1
N1
F70:
;处理大于等于70小于80
2
N2
F60:
;处理大于等于60小于70
3
N3
F2:
7
F1;处理所有学生
;打印一段************
09
21H
;打印平均成绩
09
21H
0
0
2
10
;先打印平均成绩的整数部分
'.';打印'.'
2
21H
;再打印平均成绩的小数部分
1;输出大于等于90的人数
09
21H
0
2;输出大于等于80并小于90的人数
09
21H
1
3;输出大于等于70并小于80的人数
09
21H
2
4;输出大于等于60并小于70的人数
09
21H
3
5;输出小于60的人数
09
21H
4
;******************输出分数排序的函数******************
09
21H
0
2中保存学生人数
0
0
D1:
2
09
21H
;打印一段空白
09
21H
[+5]
[+5],'$';将保存成绩的单元中第6个字节置为'$',便于输出
;输出成绩
09
21H
[+5]
;打印换行
09
21H
20
7
D1;直至将所有成绩都输出
;******************将二进制数输出的函数******************
100
0
;将中的二进制数除以100
;保存
0
X1;如果商为0,则表示原数小于100
;否则将百位数打印出来
30H
2
21H
X1:
0
10
;将中的二进制数除以10
;保存
0
X2;如果商为0,则表示原数小于10
;否则将十位打印出来
30H
2
21H
X2:
;打印个位
30H
2
21H
;******************子程序结束******************
;******************代码段结束******************