学生成绩管理--汇编课程设计_第1页
学生成绩管理--汇编课程设计_第2页
学生成绩管理--汇编课程设计_第3页
学生成绩管理--汇编课程设计_第4页
学生成绩管理--汇编课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、集 美 大 学汇编语言程序设计课程设计题目:学生成绩管理专业: 计算机科学与技术 学号: 姓名: 罗忠霖 2010-2011学年 第二学期一设计目的 汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取等相关知识。通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。二设计内容学生成绩管理功能描述: 创建成绩管理档

2、案文件(若已存在则直接使用该文件),它包含学号10位,英语3位、高数3位、体育3位,语文3位、物理3位、及它们的平均成绩3位等七项内容。试编写一管理程序,要求系统显示如下菜单,按键后执行相应的操作。(1)L命令:列出文件中的所有人的记录,每人一行(2)I命令:在文件末尾插入一个人的记录,但不允许学号重复(3)D命令:根据学号删除指定的纪录。(4)O命令:根据某课程进行排序,并将查询结果(学号、成绩)显示在屏幕上(5)Q命令:退出管理系统三程序设计原理 本次课程设计主要是在对文件进行操作的基础上,开辟存储空间保存文件的数据,在程序执行过程中,通过对缓存区进行添加、查询、删除、排序,并在最后将缓存

3、区的数据保存到文件,从而实现对文件的间接管理。具体步骤如下:1. 根据数据段存储的文件的ASCIZ串打开文件,未成功的话则新建文件;2. 显示界面,根据用户键入确定偏移值,进而找到数据段内存放的跳转指令; 2.1编写LIST子程序:调用子程序RD_WJ读取文件数据,调用子程序DISP显示缓存区数据; 2.2编写RD_WJ:通过移动文件指针,每次读取一组,再移动指针,重复至读取完,保存记录个数; 2.3编写DISP:通过指针的移动,先显示学号,再计算成绩的ASC值而后显示,通过记录个数控制循环显示的行数; 2.4编写INPUT:移动缓存区指针至空的一行,通过循环读取一组字符形成字符串,遇到空格时

4、形成学号,此时通过与另一个指向缓存区开头的指针进行比较,若学号重复则返回,不重复则同样通过循环读取一组字符,然后减去30H,保存为成绩,使用空格来分隔输入,遇到回车时结束输入; 2.5编写DEL:通过记录的个数控制循环,匹配欲删除的学号串时,保存指针,并设另一个指针指向欲删除的记录的后一个,通过从后面往前传送记录,达到删除目标记录的效果,最后记录数减一; 2.6编写ORD:读取用户键入的选项16,将其作为偏移量,即用2个指针指向相邻的2条记录,用指针加偏移量来获取成绩并比较,交换时通过将一行的长度作为循环的次数,循环XCHG,并在外部设置2个循环实现冒泡排序; 2.7编写WT_F:每次写入一行

5、,将记录个数作为循环次数。四程序流程图五源程序 .MODEL SMALL.DATA N EQU 6 ;人数 NUM EQU 6 ;学号长度 LEN EQU NUM+6 ;一行的长度 DATBUF DB N DUP(LEN DUP(?) ;存储数据的缓存区 CNT EQU $-DATBUF FNAME DB c:stu.txt ;文件的ASCIZ串 RECNUM DB 15 DUP(?) ;要删除的学号 RECS DW ? ;有效记录数 FCODE DW ? ;文件代号 CRLF DB 0AH,0DH,$ STR0 DB 0AH,0DH,L:LIST I:INSERT D:DELETE O:OR

6、DER Q:QUIT,10,13 DB -,10,13,$ STR2 DB 0AH,0DH,-Input the Num and Score:,10,13,$ STR3 DB -The file is empty!-,10,13,$ STR4 DB 0AH,0DH,-Enter the Num:,10,13,$ STR5 DB -NOT FOUND!-,10,13,$ STR6 DB Enter Num and Score:,10,13,$ STR7 DB NUM EN MA SP CH PH AE,10,13 ;输出界面 DB -,10,13,$ STR8 DB NUM EN MA SP C

7、H PH,10,13 ;输入界面 DB -,10,13,$ STR9 DB 1:EN 2:MA 3:SP 4:CH 5:PH 6:AE,10,13 DB Enter a number between 1 and 6:,10,13,$ STR10 DB =Finish!=,10,13,$ STR11 DB 0AH,0DH,Overflow!Try again:,10,13,$ STR12 DB 0AH,0DH,Num overload!,10,13,$ ERRO DB ERROR!,10,13,$ ILL DB Input illegally!,10,13,$ ORDER_TAB DW L,LI

8、ST,I,INST,D,DEL,O,ORD,Q,QUT ;保存调用所用的字符以及命令 REG1 DW ? REG2 DW ?;- OUTPUT MACRO STR ;显示字符串STR LEA DX,STR MOV AH,09H INT 21H ENDM;-.CODE ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AH,3DH ;如果文件存在则直接打开, MOV AL,2 ;文件可读写 LEA DX,FNAME INT 21H JNC L0 ;打开成功 LEA DX,FNAME ;如果文件不存在

9、就新建 MOV AH,3CH MOV CX,0 ;普通文件 INT 21H JC ERROR MOV FCODE,AX ;保存文件代号 OUTPUT STR3 ;提示文件为空 OUTPUT STR6 ;提示输入 CALL INPUT ;空文件 JMP L2 L0: MOV FCODE,AX ;保存文件代号 L2: OUTPUT STR0 ;显示命令菜单 LEA SI,ORDER_TAB-4 ;先减4便于之后统一加4 MOV AH,1 ;读取命令 INT 21H MOV BL,AL CMP BL,61H ;判断大小写 JB L5 ;大写则转到L5 SUB BL,20H ;小写转大写 L5: OU

10、TPUT CRLF XOR CX,CX L3: INC CX ;判断是否为合法命令 CMP CX,5 JA L4 ;超出5条指令 ADD SI,4 ;SI加一次4就指向每条指令调用所需匹配的字符 CMP BYTE PTR SI,BL JNZ L3 CALL SI+2 ;调用命令 JMP L2 L4: OUTPUT ILL ;非法命令,重新输入指令 JMP L2 ERROR: OUTPUT ERRO CLOSE: CALL QUT ;关闭文件并退出;- LIST PROC NEAR ;读取并显示 CALL RD_WJ ;读文件 CMP RECS,0 ;空文件时 JZ E8 CALL DISP ;

11、显示读取的内容 E8: RET LIST ENDP;- RD_WJ PROC NEAR ;读取文件到DATBUF MOV AH,42H ;移动指针到文件开头 MOV AL,0 XOR DX,DX XOR CX,CX MOV BX,FCODE INT 21H JC E7 MOV RECS,0 ;记录数清零 LEA DX,DATBUF R1: MOV AH,3FH ;读文件 MOV BX,FCODE ;取文件代号 MOV CX,LEN ;每次读取的字节数 INT 21H JNC R2 ;下一组 OUTPUT ERRO JMP EXIT R2: INC RECS ;记录数 ADD DX,LEN ;下

12、一个地址 MOV REG2,DX ;保存地址 CMP AX,0 JNZ R1 DEC RECS CMP RECS,0 ;文件为空 JNZ EXIT OUTPUT STR3 JMP EXIT E7: OUTPUT ERRO EXIT: RET RD_WJ ENDP;- DEL PROC NEAR OUTPUT STR4 LEA BX,RECNUM ;输入欲删除的学号 D_1: MOV AH,1 ;循环输入单个字符 INT 21H CMP AL,0DH ;判断是否回车,是回车结束输入 JZ D_2 MOV BYTE PTR BX,AL INC BX JMP D_1 D_2: OUTPUT CRLF

13、 CALL RD_WJ ;读文件 LEA DI,DATBUF-LEN ;为方便循环先-LEN MOV CX,RECS ;把记录的个数当查找次数 D_3: MOV BP,CX ADD DI,LEN MOV BX,DI ;保存DI LEA SI,RECNUM ;待删除学号地址 MOV CX,NUM ;学号长度 CLD REPZ CMPSB JZ FND ;找到 MOV DI,BX ;此条记录不匹配,恢复DI MOV CX,BP LOOP D_3 OUTPUT STR5 ;未找到 JMP E2 FND: MOV DI,BX MOV SI,DI ;DI指向要删除的记录 ADD SI,LEN ;SI指向

14、要往前移的记录 DEC RECS ;有效记录减1 MOV CX,BP ;CX保存要移动的记录的条数 DEC CX CMP CX,0 JZ E2 D_4: MOV BP,CX MOV CX,LEN CLD REP MOVSB ;前移 MOV CX,BP LOOP D_4 E2: LEA DX,FNAME ;新建同名文件 MOV AH,3CH XOR CX,CX ;普通文件 INT 21H MOV FCODE,AX CALL WT_F OUTPUT STR10 RET DEL ENDP;- DISP PROC NEAR ;显示内容 LEA DI,DATBUF LEA SI,DATBUF+NUM O

15、UTPUT STR7 ;成绩显示格式 MOV CX,RECS D1: MOV BX,CX ;保存记录数 MOV CX,NUM ;学号长度 D2: MOV DL,DI MOV AH,2 INT 21H INC DI LOOP D2 MOV CX,6 ;6个成绩 D3: MOV BP,CX MOV AL,SI XOR CX,CX MOV DL,10 D4: XOR AH,AH INC CX DIV DL MOV DH,AL ;保存商 MOV AL,AH XOR AH,AH PUSH AX MOV AL,DH OR AL,AL JNZ D4 D5: POP AX ADD AX,30H ;输出字符AS

16、C码 MOV DL,AL MOV AH,2 INT 21H LOOP D5 MOV DL,20H ;成绩之间的格 MOV AH,2 INT 21H INC SI MOV CX,BP LOOP D3 ;显示一行的成绩 OUTPUT CRLF MOV DI,SI ADD SI,NUM MOV CX,BX ;下一行 LOOP D1 OUTPUT CRLF RET DISP ENDP;- INST PROC NEAR ;插入记录 CALL RD_WJ SUB REG2,LEN ;REG2保存指向最后的位置 MOV SI,REG2 MOV DI,SI ;设置子程序入口参数 ADD SI,NUM OUTP

17、UT STR2 ;提示输入 MOV AH,42H ;移动记录指针到文件开头 MOV AL,0 MOV BX,FCODE XOR CX,CX XOR DX,DX INT 21H JC E9 CALL I1 JMP EA E9: OUTPUT ERRO EA: RET INST ENDP;- INPUT PROC NEAR ;输入学号成绩 LEA DI,DATBUF LEA SI,DATBUF+NUM ;第一个成绩存的地方 OUTPUT STR8 ;格式提示 MOV RECS,0 I1: MOV REG1,DI XOR BX,BX XOR CX,CX NUML: MOV AH,1 ;学号,NUML

18、OOP INT 21H CMP AL,20H ;空格退出学号输入 JZ SP1 CMP AL,0DH ;回车则结束输入 JZ IB IA: MOV BYTE PTR DI,AL ;保存输入 INC DI JMP NUML IB: JMP E1 SP1: CMP RECS,0 ;无记录 JZ I8 PUSH DI PUSH SI MOV SI,REG1 ;首地址 LEA DI,DATBUF-LEN ;-LEN避免循环时超出范围 MOV CX,RECS ;查找次数 I6: MOV BP,CX ADD DI,LEN MOV BX,DI ;保存DI MOV SI,REG1 MOV CX,NUM ;学号

19、长度 CLD REPZ CMPSB JZ EXST ;相同 MOV DI,BX ;恢复DI MOV CX,BP LOOP I6 JMP I7 ;无同名记录 EXST: OUTPUT STR12 ;已经存在 POP SI POP DI JMP I9 I7: POP SI POP DI I8: XOR BX,BX MOV AH,1 INT 21H CMP AL,20H JNZ I4 ;第一个非空格的有效数字 JZ SP1 ;允许输入多个空格 I2: MOV AH,1 INT 21H CMP AL,0DH ;回车则输入下一组 JZ NEXT CMP AL,20H JZ I3 ;空格则结束 I4: S

20、UB AL,30H ;计算分数,并保存 MOV DL,AL MOV AL,BL MOV BH,10 MUL BH ADD AL,DL CMP AX,100 ;分数是否大于100 JA I5 MOV BL,AL MOV BYTE PTR SI,BL ;存当前成绩 JMP I2 I5: OUTPUT STR11 I9: MOV DI,REG1 ;恢复之前的SI,DI MOV SI,DI ADD SI,NUM JMP I1 ;输入非法,重新输入 I3: XOR BH,BH ADD CX,BX ;各科成绩累加 XOR BL,BL INC SI SP2: MOV AH,1 ;各个成绩之间允许输入多个空格

21、 INT 21H CMP AL,20H JNZ I4 JZ SP2 NEXT: XOR BH,BH ADD CX,BX ;各科成绩累加 XOR BL,BL INC SI ;中间无空格 MOV BX,5 XOR DX,DX MOV AX,CX DIV BX ;计算平均值 MOV BYTE PTR SI,AL ; 存平均成绩 INC SI MOV DI,SI ADD SI,NUM OUTPUT CRLF INC RECS ;实际输入的组数 CMP RECS,N JZ E1 JMP I1 E1: CALL WT_F ;写文件 RET INPUT ENDP;- ORD PROC NEAR ;根据某课程

22、成绩降序排序 CALL RD_WJ ;读取文件 OUTPUT STR9 MOV AH,1 INT 21H CMP AL,36H ;输入必须为16 JA E4 CMP AL,31H JB E4 SUB AL,30H DEC AL XOR AH,AH MOV BX,AX ;保存 OUTPUT CRLF ;输入后换行 MOV DX,BX ;恢复 MOV CX,RECS O1: MOV BX,CX LEA SI,DATBUF+NUM-LEN ;开始时总是指向第一个成绩 ADD SI,DX ;根据DX决定按哪个成绩排序 MOV CX,RECS ;设置_L2的CX DEC CX O2: MOV BP,CX

23、 MOV CX,LEN ;设置SWAP的CX ADD SI,LEN MOV AL,SI CMP AL,SI+LEN ;比较对应成绩 JAE O3 MOV DI,SI SUB DI,NUM ;DI指向学号 SUB DI,DX ;调整 SWAP: MOV AH,DI ;交换两组数据 XCHG AH,DI+LEN MOV DI,AH INC DI LOOP SWAP O3: MOV CX,BP ;下一组 LOOP O2 MOV CX,BX ;2层循环 LOOP O1 CALL DISP ;调用显示 JMP E5 E4: OUTPUT CRLF OUTPUT ILL ;输入不正确 E5: RET OR

24、D ENDP;- WT_F PROC NEAR ;写文件 MOV CX,RECS ;入口参数 CMP CX,0 JZ W3 ;记录为空则不写 LEA DX,DATBUF ;数据缓存的偏移地址 MOV BX,FCODE W1: MOV BP,CX MOV AH,40H ;写文件 MOV CX,LEN ;写入的字节数 INT 21H JC W2 ADD DX,LEN ;偏移地址 MOV CX,BP LOOP W1 JMP W3 W2: OUTPUT ERRO W3: RET WT_F ENDP;- QUT PROC NEAR ;退出 MOV AH,3EH ;关闭文件 MOV BX,FCODE INT 21H JNC Q1 OUTPUT ERRO Q1: MOV AH,4CH INT 21H RET QUT ENDP;- END START6 调试过程键入L: 键入I后,输入已有学号112即显示已有输入学号117,正常添加:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论