基于汇编语言学生成绩管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学生成绩管理系统

目录

设计内容 (2)

设计目的 (2)

设计要求 (2)

设计分析 (2)

子程序分析 (7)

操作说明 (10)

程序代码 (11)

总结 (30)

参考文献 (30)

设计内容

设计一个学生成绩管理程序,要求能实现以下功能:

1)各科成绩的录入,修改和删除。

2)按姓名查询每个学生各门课的成绩。

3)显示查询结果。

4)统计个分数段的人数。

5)打印学生成绩。

设计目的

用汇编数据的录入、修改和删除操作。

设计要求

学习如何用汇编语言进行数据处理。

设计分析

1.总体结构

整个程序采用主程序调用子程序的方法。主程序完成菜单的显示,子程序完成一个独立功能方法的实现。各子程序的实现方法简要描述如下:

1)设计INSERT(录入)子程序,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。

2)设计Delete(删除)子程序,先打开文件,再调用宏GETIN得到要删除的学生的姓

名,然后读文件中的记录,直到其记录的名字与所输入的名字相同为止,把文件指针后退8个字符(即4门课成绩所占的空间),写入8个“0”字符,关闭文件返回主程序。

3)设计List(浏览)子程序时,先打开文件,然后读一个记录,并通过调用宏SHOW_ITEM 将其显示到屏幕上,入文件指针没有到达文件尾,则继续读记录并显示,当指针到达文件尾时,则关闭文件返回主程序。

4)设计Modify(修改)子程序时,先打开文件SCORE.TXT,通用GER_REC得到要修改的记录,然后读文件中的记录,并与用户输入的记录做比较(只比较记录中的名字部分),若不同则吨下一条记录,若相同则将文件指针后退23个字符(一个记录为23个字符的长度),然后把用户输入的记录写入文件,最后关闭文件返回主程序。

5)设计Count(统计)子程序时,先打开文件,然后读记录,比较记录的第16个字符,数学成绩的高位),并统计,直到文件指针到达文件尾,最后关闭文件调用宏SHOW_ITEM 显示统计结果,返会主程序。

6)设计Query(查询)子程序时,先打开文件,通过调用宏GETIN得到要查找学生的姓名,然后读文件记录,并同要查找的学生姓名比较,若相同则输出,若不同继续读文件记录,最后显示查询结果,关闭文件返回程序。

另外还有打印的分数段人数统计,这些结合后面的子程序功能分析做详细介绍。

图1是本设计显示记录的界面

图1 学生成绩管理系统界面

程序流程图如图2所示

A)List流程图

B)Insert流程图

在大型的程序中,为了使程序清晰、可读性好,一般会大量使用宏和子程序,因此,充分了解这些宏和子程序,才能掌握程序的编制方法。

2.宏的分析

本题中使用了下列宏,其作用如下:

SHOW :用来指定地址的显示字符串,有一个地址参数

SET_P1:设定光标位置,有一个可变参数a,作用是讲光标置于坐标(a,36)处,使用了BIOS中断10H的2号功能。

SET_P2 :将光标置于(12,2)处。

SET_P3 :将光标置于(1,30)处。

CLEAR :清除整个屏幕,用BIOS中断10H的7号功能实现,范围是从坐标(0,0)到(24,79),将整个区域变为空白。

CLEAR1 :清除有半部分屏幕,清除范围从坐标(4,36)到(10,79),结果是擦出此区域的显示内容。

CLEAR2 :清除下半部分屏幕,清除范围是从坐标(12,0)到(24,79),结果是擦除此区域的显示内容。

NNWLINE :回车换行。

SHOE_ITEM :显示记录内容,执行后显示名称,然后依次显示4项功课成绩,各项成绩间空3个空格,最后换行。这个宏包含的语句较多,如果每次都直接用语句实现非常冗长,使用宏后则主程序就很简洁,充分体现了使用宏的优点。

GETIN :获取学生的信息,这也是一个使用频繁的宏,其中含有很多的指令,它带有ADDRS和COUNT2两个参数,ADDRS是存放信息的数据段位置,CIUNT2是接受的字符数。

子程序分析

下面详细分析程序中用的的主要的子程序。

(1)INSERT 子程序

INSERT 子程序的功能是录入一条记录。

首先保留现场入栈,然后DOS中断3D号功能打开FNAME指定的文件,然后宏GETIN 清除屏幕右半部分的记录输入区域。在记录的第一项处置光标,用GET_REC获取记录内容,用DOS中断42H号功能将指针移到文件末尾。

再用DOS中断40H号功能将放在BUFFER缓冲区的23个字节的内容写到文件中,接着

关闭文件,重新设置光标位置在显示记录位置。

最后弹栈恢复现场。

(2)GET_REC 子程序

GER_REC 子程序的功能是获取新的记录内容。

首先用宏GETIN获取学生的姓名,放入BUFF2中,最多15个字符,如果遇到回车键则提前结束。

再用循环方式将BUFFER2中的15个字符送到BUFFER1中。

然后用宏SET_P1将光标置于数学成绩输入项后,等待键盘输入。输入的成绩,先放在BUER2中,然后加到BUFFER1中的姓名后面。输入为2个字符后遇到回车键提前结束。

接着用同样的方法输入英语成绩,计算机成绩和中文成绩。

完成后,这个程序就得到了一个记录的所有信息。

(3)OPENF子程序

OPENF是个一个非常简单的子程序。它的作用是打开一个文件并把一个文件句柄保存在数据段的handle缓冲区中。

(4)QUERY子程序

QUERY是查询一条记录。

首先保留现场。然后分别清除界面右上方和下边的区域。打开FAME指定的文件并保留文件句柄。

将光标至于界面的下半空白部分开始处,用宏GETIN 获取最多15个字符的输入,然后将BUFFER1中的内容与BUFFER2中进行比较,看是否相同。如果不同,再继续向下从文件中读出23个字节比较,循环向下,直到相同或文件结束为止。如果不同,则显示该条记录,然后关闭文件,恢复现场。

B: MOV AH , 3FH ;读文件

MOV CX , 23 ;读23个字节(记录长度)

MOV DX, OFFSET BUFFER2 ;放在BUFFER2中

INT 21H

LEA SI , BUFFER2

LEA DI .BUFFER1

MOV CX,15 ;循环次数

C: MOV AL , BYTE PTR[SI]

相关文档
最新文档