《2022年课程方案汇编语言学生成绩管理系统 .pdf》由会员分享,可在线阅读,更多相关《2022年课程方案汇编语言学生成绩管理系统 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 学生成绩管理系统目录设计内容. 2 设计目的 . 2 设计要求 . 2 设计分析 . 2 子程序分析 . 7 操作说明 . 10 程序代码 . 11 总结 . 30 参考文献 . 30 ?.OG 2 设计内容 设计一个学生成绩管理程序要求能实现以下功能1各科成绩的录入修改和删除。2按姓名查询每个学生各门课的成绩。3显示查询结果。4统计个分数段的人数。5打印学生成绩。设计目的用汇编数据的录入、修改和删除操作。设计要求学习如何用汇编语言进行数据处理。设计分析 1.总体结构整个程序采用主程序调用子程序的方法。主程序完成菜单的显示子程序完成一个独立功能方法的实现。各子程序的实现方法简要描述如下1设
2、计 INSERT录入子程序先打开文件SCORE.TXT 并置文件指针到文件尾然后调用REC子程序接受用户的输入再把用户的输入写入文件最后关闭文件返回主程序。2设计 Delete删除子程序先打开文件再调用宏GETIN得到要删除的学生的姓? 3 名然后读文件中的记录直到其记录的名字与所输入的名字相同为止把文件指针后退8 个字符即 4 门课成绩所占的空间写入 8 个“ 0”字符关闭文件返回主程序。3设计 List浏览子程序时先打开文件然后读一个记录并通过调用宏SHOW_ITEM 将其显示到屏幕上入文件指针没有到达文件尾则继续读记录并显示当指针到达文件尾时则关闭文件返回主程序。4设计 Modify修改
3、子程序时先打开文件 SCORE.TXT 通用 GER_REC 得到要修改的记录然后读文件中的记录并与用户输入的记录做比较只比较记录中的名字部分若不同则吨下一条记录若相同则将文件指针后退23 个字符一个记录为23 个字符的长度然后把用户输入的记录写入文件最后关闭文件返回主程序。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 10 页5设计 Count统计子程序时先打开文件然后读记录比较记录的第16 个字符数学成绩的高位并统计直到文件指针到达文件尾最后关闭文件调用宏SHOW_ITEM 显示统计结果返会主程序。6设计 Query查询子程序时先
4、打开文件通过调用宏GETIN得到要查找学生的姓名然后读文件记录并同要查找的学生姓名比较若相同则输出若不同继续读文件记录最后显示查询结果关闭文件返回程序。另外还有打印的分数段人数统计这些结合后面的子程序功能分析做详细介绍。图 1 是本设计显示记录的界面图 1 学生成绩管理系统界面 . 30 参考文献.亂舒4 入口 程序流程图如图2 所示 Y N Y N A List 流程图 B Insert 流程图 打开文件读一个记录读错文件尾 ? 显示记录显示错误信息关闭文件返回入口打开文件置指针到文件尾从终端接收用户输入的记录记录写入文件关闭文件返回 4、 裘雪红李伯成刘凯。 微型计算机詆亂zu? 5 Y
5、Y 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 10 页N N N Y N Y 入口打开文件读一个记录是否为所寻找的记录显示记录 关闭文件返回入口打开文件读一个记录是否为要修改的记录文件指针后退一个记录写入修改记录并关闭文件返回入口 打开文件读一个记录对数学成绩分段并统计指针到达文件尾显示统计结果关闭文件 返回入口打开文件接收被删除记录的学生姓名读一条记录姓名相同删除记录返回文件返回 ? 6 Y N Y N Y 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 10 页 N Y
6、 N Y N Y N N Y 在大型的程序中为了使程序清晰、可读性好一般会大量使用宏和子程序因此充分了解这些宏和子程序才能掌握程序的编制方法。开始 显示菜单输入一个字符是 L 是 Q 是D 是 M 是 C 是 I 是 E 结束调用 Iist 子程序调用 Query 子程序调用 Delete 子程序调用 Modify 子程序调用 Count 子程序调用 Insert 子程序 后调用REC子程序接受用户的输入再把用户的输入5 亂( ? 7 2.宏的分析本题中使用了下列宏其作用如下SHOW 用来指定地址的显示字符串有一个地址参数SET_P1设定光标位置有一个可变参数a作用是讲光标置于坐标a36处使用
7、了 BIOS中断 10H 的 2 号功能。SET_P2 将光标置于122处。SET_P3 将光标置于130处。CLEAR 清除整个屏幕用 BIOS中断 10H 的 7 号功能实现范围是从坐标00到2479将整个区域变为空白。CLEAR1 清除有半部分屏幕清除范围从坐标436到1079结果是擦出此区域的显示内容。CLEAR2 清除下半部分屏幕清除范围是从坐标120到2479结果是擦除此区域的显示内容。NNWLINE 回车换行。SHOE_ITEM 显示记录内容执行后显示名称然后依次显示4 项功课成绩各项成绩间空 3 个空格最后换行。这个宏包含的语句较多如果每次都直接用语句实现非常冗长使用宏后则主程
8、序就很简洁充分体现了使用宏的优点。GETIN 获取学生的信息这也是一个使用频繁的宏其中含有很多的指令它带有ADDRS和 COUNT2两个参数ADDRS是存放信息的数据段位置CIUNT2是接受的字符数。子程序分析下面详细分析程序中用的的主要的子程序。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 10 页1 INSERT 子程序INSERT 子程序的功能是录入一条记录。首先保留现场入栈然后 DOS中断 3D号功能打开FNAME 指定的文件然后宏 GETIN 清除屏幕右半部分的记录输入区域。在记录的第一项处置光标用 GET_REC 获取记录
9、内容用 DOS中断 42H 号功能将指针移到文件末尾。再用 DOS中断 40H 号功能将放在BUFFER缓冲区的23 个字节的内容写到文件中接着 ?.O)亂 4 箧8 关闭文件重新设置光标位置在显示记录位置。最后弹栈恢复现场。2 GET_REC 子程序GER_REC 子程序的功能是获取新的记录内容。首先用宏GETIN获取学生的姓名放入 BUFF2中最多 15 个字符如果遇到回车键则提前结束。再用循环方式将BUFFER2中的 15 个字符送到BUFFER1 中。然后用宏SET_P1将光标置于数学成绩输入项后等待键盘输入。输入的成绩先放在BUER2中然后加到 BUFFER1中的姓名后面。输入为2
10、个字符后遇到回车键提前结束。接着用同样的方法输入英语成绩计算机成绩和中文成绩。完成后这个程序就得到了一个记录的所有信息。3OPENF子程序OPENF是个一个非常简单的子程序。它的作用是打开一个文件并把一个文件句柄保存在数据段的handle 缓冲区中。4QUERY子程序QUERY是查询一条记录。首先保留现场。然后分别清除界面右上方和下边的区域。打开FAME指定的文件并保留文件句柄。将光标至于界面的下半空白部分开始处用宏 GETIN 获取最多15 个字符的输入然后将 BUFFER1中的内容与BUFFER2 中进行比较看是否相同。如果不同再继续向下从文件中读出 23 个字节比较循环向下直到相同或文件
11、结束为止。如果不同则显示该条记录然后关闭文件恢复现场。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 PTRSI 接着 www.do+ 亂 6 蹑9 CMP AL , BYTE PTR DI 比较 BUFFER1和 BUFFER2 JNZ B 不同则转B INC SI INC D LOOP C 5 MODIFY子程序MODIFY子程序的功能是
12、修改记录。先保护现场然后清除右上部分的记录输入区域接着打开文件。用 GET_REC 子程序获取输入的记录信息并存入 BUFFER1中。从打开的文件中读取一个记录的内容23 个字节放在 BUFFER2 中。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 10 页比较记录前面的15 个字节姓名如果不同则读取下一个记录如果相同则回移一个记录的指针回到刚才这条记录的位置因为读取一个记录后指针已移到下一条记录上。将放在 BUFFER1 中的输入的记录写到刚才这条记录在文件中的位置上从而实现此记录的修改。最后关闭程序恢复现场。6DELETE 子程序
13、 DELETE 子程序的功能是删除一条记录。首先保留现场清除屏幕。然后打开文件保留文件句柄。用宏GETIN获取 15 个字节的姓名字符放在 BUFFER1中。读取一条记录23 个字节放在 BUFFER2中然后和 BUFFER1中内容比较如果不同读取下一条记录。如果姓名相同则把指针后移8 个字符4 门功课所占空间写入 8 个“0”字符。关闭文件恢复现场并退出。7LIST子程序 LIST子程序的作用是显示文件中的记录。首先清除记录输入区和显示区域。然后显示记录字段的标题。打开文件保留文件句柄。读取一条记录的内容放在BUFFER1中并判断是否到了文件末尾如果不是则显示这条记录。循环读取直到文件结束。
14、最后关闭程序恢复现场。8PRINT子程序 DELETE 子程序的功能是打印文件中的记录。用 OPENF子程序打开文件。读取一条记录汇编语言提供了自定义数据结构的结构定 ?. OG 10 义语句可将不同的数据类型放在一个数据结构中便于处理在本程序中的记录就采用了结构定义语句。这里读取记录也用了结构的方法。接着用 DOS中断 21H 的 5 号功能逐字打印存放在BUFFER1中的所以字符。一条记录打完后打印回车符换行。然后用同样方法继续读取下一条记录并打印直到文件结束为止。最后关闭文件退出。9COT子程序 COT子程序的作用是统计各分数段小说人数并简化程序作为示例本程序只统计记录数学各分数段的人数
15、。首先显示统计结果的标题maths60708090100。然后打开文件。读取记录将记录的第16 个字符数学分数的高位取出比较。统计结果依次放在以BUFFER3开头的内存单元中如果小于60则将小于 60 的记录单元BUFFER3 加一若小于 70则将小于 70 的记录单元BUFFER3加一即 BUFFER3下一个地址单元内容加一依次类推。处理完后再读取下个记录作同样处理直到文件结束为止。接着显示放在BUFFER3 中的各分数段的人数的统计结果最后关闭文件结束。从程序中可以看出统计时程序有个限制本例每个分数段最多不能超过9 个人。 操作说明改程序除源程序外还需要另一个存放记录的文件此程序中使用的文
16、件名为SCORE.TXT) 但本程序并没有创建这个文件的功能。要产生这个文件可用记事本先做以一个空的文件名为SCORE.TXT 的文件。程序的运行与该文件的存放位置有关位置是程序数据段的 FNAME的值。二者要保持一致否则会因为找不到数据存放文件而出错。程序运行时在出现主菜单后按 1 键将显示学生的各科成绩按 i 键将执行录入功能可以录入新的学生成绩按 M 键了修改学生成绩。由于本程序时隔简单程序所以在修改时要输入学生的所有成绩包括不要修改的成绩按 D 键后输入要删除的学生名将使其成绩全为0按 Q 键后输入要查询的学生的姓名键显示其各科成绩按 C 键将显示数学成绩的分段统计结果。以上功能在运行
17、时可以单独实现即在进入主菜单后单击功能键选中该功能进行操作后 程 序 会 关 闭 。 但 要 运 行 其 他 功 能则 要 重 新 进 入 主 菜 单 单 击 别 的 功 能 键即 每 次 只 能 运 行C0 11 一项功能。要特别说明的是本程序住一套目的是验证汇编程序实现的数据记录操作功能为使程序不至于郭长减少篇幅因此程序处理会很简单。程序中没有错误处理程序如果输入错误如按退格键将会出错因此输入时要注意补要输错。程序代码精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 10 页data segment mess1 db student
18、grade management system,0ah,0dh,$ mess2 db this is main menu,0ah,0dh,$ mess3 db insert (i) please input:,0ah,0dh,$ mess4 db modify (m) name :,0ah,0dh,$ mess5 db delete (d) maths :,0ah,0dh,$ mess6 db query (q) english :,0ah,0dh,$ mess7 db count (c) computer:,0ah,0dh,$ mess8 db print (p) chinese :,0ah
19、,0dh,$ mess9 db exit (e),0ah,0dh,$ mess10 db *$ mess11 db name Ma En Co Ch,0ah,0dh,$ mess13 db list (l),0ah,0dh,$ mess12 db maths 60 70 80 90 100,0ah,0dh,$ err1 db there is not this student$ err2 db file close wrong$ fname db d:masmscore.txt 记录分数文件的路径和文件名。buffer1 db 23 dup(?) buffeer db 0ah,0dh,$ bu
20、ffer2 db 30 dup(?) buffer3 db 8 dup(0) count db 5 允狙母骺瞥杉磇键 ?亂;12 handle dw ? del db 8 dup(0) x db ? data ends score struc 定义记录结构names db 15 dup( ) maths db 0,0 english db 0,0 computer db 0,0 chinese db 0,0 score ends show macro addrs 显示字符串 lea dx,addrs mov ah,9 int 21h endm set_p1 macro a 设光标于a,36 m
21、ov ah,2 mov dh,a mov dl,36 mov bh,0 int 10h endm set_p2 macro 设光标于122 mov ah,2 mov dh,12 mov dl,2 mov bh,0 int 10h endm 饔煤闓 ETIN得到要删除的学生的姓www.dM 亂 P ? 13 set_p3 macro 设光标于130 mov ah,2 mov dh,1 mov dl,30 mov bh,0 int 10h endm clear macro 清整个屏幕精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 10 页
22、mov al,0 mov cl,0 mov ch,0 mov dh,24 mov dl,79 mov bh,7 mov ah,6 int 21h endm clear1 macro 清右上记录输入区 mov al,0 mov bh,7 mov ch,4 mov cl,36 mov dh,10 mov dl,79 mov ah,6 int 10h endm clear2 macro 清下半部分记录显示区 mov al,0 mov bh,7 print (p) chinese :,0a 賮 y? 14 mov ch,12 mov cl,0 mov dh,24 mov dl,79 int 10h e
23、ndm newline macro 回车换行 push ax push dx mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h pop dx pop ax endm show_item macro addrs 在指定位置显示记录 local iloop,w10 push bx push cx mov bx,0 iloop: mov dl,addrsbx 显字符串 mov ah,2 int 21h inc bx cmp bx,15 jl iloop mov cx,4 ov bh,0 int 10h eG亂 Z? 15 w10: mov
24、 dl, mov ah,2 int 21h mov dl, mov ah,2 int 21h 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 10 页 mov dl, mov ah,2 int 21h mov dl,addrsbx mov ah,2 int 21h inc bx mov dl,addrsbx mov ah,2 int 21h inc bx loop w10 newline pop cx pop bx endm getin macro addrs,count2 从键盘获取信息local zeroit,lp,input_en
25、d,exit push bx push ax mov bx,0 zeroit: mov addrsbx, inc bx cmp bx,15 mov cx,4 oC亂精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 10 页? 16 jl zeroit mov bx,0 lp: mov ah,1 int 21h cmp al,0ah jz input_end cmp al,0dh jz input_end mov addrsbx,al inc bx cmp bx,count2 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 10 页