(汇编)学生成绩管理系统.doc

上传人:小飞机 文档编号:1600431 上传时间:2022-12-10 格式:DOC 页数:9 大小:674.50KB
返回 下载 相关 举报
(汇编)学生成绩管理系统.doc_第1页
第1页 / 共9页
(汇编)学生成绩管理系统.doc_第2页
第2页 / 共9页
(汇编)学生成绩管理系统.doc_第3页
第3页 / 共9页
(汇编)学生成绩管理系统.doc_第4页
第4页 / 共9页
(汇编)学生成绩管理系统.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《(汇编)学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《(汇编)学生成绩管理系统.doc(9页珍藏版)》请在三一办公上搜索。

1、学生成绩管理系统一、 实验题目设计学生成绩管理程序(3门课程),实现以下功能:1.各科成绩的录入、修改和删除(10个学生,每人3门成绩,分别按学生存放。即学生编号*,语文成绩*,语文成绩名次,数学成绩*,数学成绩名次,英语成绩*,英语成绩名次,后面的三个单元存放该生总成绩、名次、平均成绩)带*号的为录入值2.排序:(1) 单科课程成绩排序(分数从高到低):结果放到每门成绩之后的名次单元中(2) 总成绩排序(分数从高到低):结果放到每个学生后面的名次单元中3查找:(1) 查询某位同学某课程成绩及名次;总成绩及名次.(2) 查询单科课程不及格同学4.统计:(1) 单科平均分(2) 总成绩平均分(3

2、) 单科各分数段人数(60以下,6070,7080,8090,90100)二、 设计思路1. 数据定义。每个学生记录由学生编号,语文成绩,语文成绩名次,数学成绩,数学成绩名次,英语成绩,英语成绩名次,总成绩、名次、平均成绩组成。其它数据,单科平均成绩,总成绩平均分,单科各分数段人数。学生编号0 数字字符串 5成绩0 数字字符串 3名次1 数字字符串 2分数段人数5 数字字符串5索引表元素无符号双字节数所有成绩数据,语文成绩、数字成绩、英语成绩、总成绩、平均成绩,均采用上述成绩的定义;所有名次数据,均采用上述名次定义。2. 数据存储。所有数据存储于文件中。每条学生记录占用70个字节,实际有效字节

3、为24字节,记录最后两个字节是回车换行符,其余字节为空字符,学生记录从第0个字节开始存储。第1000个字节开始用以存储索引表。单科平均成绩,总成绩平均分,单科各分数段人数存储在所有学生记录之后的单元中。成绩数据,占用三个字节,排名数据占用两个字节,学号数据占用五个字节,各科分数段人数占用五个字节,有效字节不足时,在其后补上空字符,即,如,成绩100存储为31,30,30;90存为39,30,00。3. 系统结构系统分为四部分:插入记录、删除记录、数据处理和查询。结构图如下:3.1. 插入模块,包括建立成绩表、插入一条学生记录两个子模块。插入一条学生记录子模块,搜索可用单元,接收输入的记录,并写

4、入文件。建立成绩表子模块,控制输入界面,并多次调用插入记录子模块,完成成绩的建立。3.2. 删除模块,包括学号查询匹配、删除处理子模块。学号设计为定长,长度为2字节,搜索以完全匹配的方式进行。删除处理,完成对索引表的修改。3.3. 数据处理模块,包括计算个人总分、平均分,计算单科平均分,成绩排名处理,统计各科分数段人数子模块,各子模块完成相应的功能,并把结果写入文件。3.4. 查询模块,完成数据的显示功能,包括查询某个学生个人记录,查询不及格,查询各科分数段人数及输出所有记录三、 算法设计。1. 所有数据在文件中的修改以覆盖的方式进行,因此将为每个数据分配固定长度的存储空间。根据以上数据的定义

5、,数据写入文件前必须“规格化”,使其符合定义。从键盘输入学号、成绩数据到缓冲区,最后一个字符是0DH,且长度不等,需去掉回车符,补上空字符。总分、平均分的计算。从文件中读出数据,需先转换成二进制数再进行计算,结果必须转换成符合格式的字符串写入文件。从字符串到数字的转换算法流程图如下:STR表示从文件读出的符合格式的字符串。第一个循环用以算出有效数字位数,作为第二个循环的循环次数。第二个循环,AX作累加器,循环体是“乘10、加上数字”,循环结束算出其值从数字转换成字符串,算法程序图:2. 程序采用索引表的方式,完成记录的删除、插入与查询;由于不要求学号有序,因而可以采用索引表,对记录和文件空间进

6、行管理。其优点是管理较为简单,可以进行随机访问,能够满足插入删除的需求;缺点是难以实现学号有序。索引表设计如下:记录最大容量设计为MAX, 链表长度为2*MAX+2个字节,即MAX+1个字长。最后一个字存放尾指针目前学生记录数目;空闲的位置值为0,否则为1.学生的记录从第0个字节的位置开始存放,每70个字节为一条记录。程序初始化时,将索引表读取到缓冲区INDEX; 索引位置表LP与相应文件空间的指针FP换算方式是:FP= (LP/2) * 70例如,WORD PTR INDEX+4 值为1, 它所表示文件中开始指针值为140,长度为70字节的空间已经使用,即已经存有记录;否则表示空间可用。遍历

7、索引表,搜索全部记录:从索引表第一个字开始,顺序扫描索引表。找到非0,将索引表位置LP转换成文件指针FP,读取数据,直到遇到0结束。转换成文件指针的宏定义是:LOCATE MACRO BXREG PUSH AX PUSH BX MOV AX,BXREG MOV BX,2 DIV BL MOV BX,70 MUL BX MOV DX,AX POP BX POP AX ENDMLOCATE宏参数是目前索引表位置BX,结果得到对应记录的文件指针送BX。3. 插入模块插入学生记录操作流程:()比较目前记录数NUM与设计最大容量MAX,相等操作结束;()接收数据()搜索可用文件单元()修改索引表、写入文

8、件。搜索可用文件单元,顺序扫描INDEX,直到 INDEX+BX 为0,根据BX可转换成可用的文件单元指针。4. 删除模块:删除学生记录操作流程:()接收搜索条件,程序设计学号长度为最大为5(2)根据索引表,搜索匹配学号。(3)修改索引表。数据处理模块。修改索引表只需要将相应记录的在表中索引值改为0.5. 数据处理模块。模块中排名处理、学科平均成绩计算、分数段人数统计操作,均需取出某一学科的所有学生成绩,因而此操作作为公用子程序以供调用。个人总分及平均分处理较为简单,根据索引逐条处理记录。学科平均成绩计算、分数段人数计算,取出学科成绩到数据缓冲区,再进行相应操作,并将结果写入文件相应位置。结果

9、在文件中的位置相对固定,直接写入文件。排名处理。排名结果为一维数组,与学科成绩存在对应关系。排名结果写入文件操作需多次进行,所以设计成子程序。程序段如下:DATA_IN PROC PUSHREG MOV BX,NUMP MOV CX,INDEX+BX MOV BX,0 DATA_LP1: PUSH CX PUSH BX MOV DX,INDEX+BX CMP DX,0 JZ DIN_NEXT1 LOCATE BX ADD DX,DI MOVE DX MOV CX,CXTEM MOV DX,SI WRITE DX,CX ADD SI,2 JMP DIN_NEXT2DIN_NEXT1: INC C

10、X DIN_NEXT2: POP BX POP CX ADD BX,2 LOOP DATA_LP1DATA_EXIT: POPREG RETDATA_IN ENDP排名处理算法流程图:NUM是数据个数,作为循环计数。每次循环,找出最大的数,并将其改为CX。除最后一次循环外,CX将是负数,由于成绩不存在负数,故不影响下一次循环找出最大数。如NUM为10,第一次找到的最大数将改为-9。最后一次将改成0.循环结束后,所有数据由CX,到0组成,加上NUM调整后,数据变成由1到NUM组成,即排名数据。6. 查询模块。模块由学生记录查询、学科分数段人数查询、学科不及格学号查询、显示所有数据子模块组成。所有

11、数据,除索引表外,均以定长字符的形式进行存储,方便输出。查询学科分数段人数、所有记录操作,可以直接将数据输出;查询学生记录,先进行学号匹配,再输出一条记录;查询学科不及格学号,根据索引表,读取有效记录的某学科成绩,符合成绩不及格者输出其学号记录。模块算法较为简单,界面处理较为复杂。界面总体背景在程序启动时进行初始化,此模块中各子模块关键在于控制结果输出显示。四、 实验结果显示所有记录五、 实验分析:程序在emu8086环境下进行编辑,采用MASM5.0进行编译连接,并调试通过。程序采用文件进行数据存储,并且以字符的方式进行存储。这种方式存在诸多不足:数据的读取、写入需要进行转换,使用不方便;文件的操作极容易出错,容易造成数据错误,如指针移动出现问题,文件中空字符被替换成空格字符;调试困难。为方便调试,文件中的数据在输入成功后,应有备份;不使用字符进行存储,直接存储二进制数,或许更方便。程序的调试,先分模块进行,最后组合各个模块进行调试。在多次调试过程中,发现偶然出现程序无法运行的情况,目前找不出根源所在。程序的功能较多,采用自顶向下的程序开发方法思想,逐步分解子功能,细化程序结构,使程序结构更为清晰,模块耦合性低。本程序在功能划分上较为清晰,模块间功能相对独立。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号