学生成绩管理系统设计实验汇编语言.docx
《学生成绩管理系统设计实验汇编语言.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统设计实验汇编语言.docx(35页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统设计实验汇编语言
实验六学生成绩管理系统设计实验
一、实验目的
1、熟悉汇编语言程序结构;
2、熟悉INT21H的文件操作功能调用;
3、熟悉INT21H的1、9号功能和INT10H常用功能的使用方法;
4、掌握多子程序复杂问题程序设计方法;
5、掌握利用汇编语言实现字符串的输入输出程序设计方法;
6、了解多模块程序设计方法。
二、实验原理
我们把可以多次调用、具有通用性、能完成特定功能的程序段编写成的独立程序模块称为子程序。
子程序是把一个程序划分成若干模块所用的主要手段,它便于独立设计、测试程序和编制程序文件。
3、实验内容
1、实验要求
设计一个学生成绩管理系统,要求完成文件建立、学生成绩录入、显示指定学号的学生记录、删除一个学生的记录、修改学生记录、返回等工作。
学生成绩包括学号(XH)、姓名(XM)、数学(SX)、语文(YW)、外语(WY)字段。
至少包括30名学生信息,每名学生学号字段为4个字符,姓名字段为15个字符(最大),每门成绩字段为3个字符(最大)。
程序设计步骤如下:
1、编写主程序main.asm;
2、编写文件创建子程序create,实现在指定盘指定文件夹“d:
\chengji\2009\”下建立一个指定名称的文件2009doc.dat;
3、编写成绩录入子程序append,实现在指定文件尾部插入一个学生的成绩记录;
4、编写显示子程序display,实现按指定学号显示一个学生的记录;
5、编写修改子程序modify,实现按指定学号修改一个学生的记录字段(不需修改直接回车);
6、编写删除子程序,实现按指定学号、姓名删除一个学生的记录;
7、编译、链接、调试,产生可执行文件main.exe。
2、程序流程图
3、程序代码
程序代码如下:
DATASSEGMENT
MSG1DB'1.Appendarecord$'
MSG2DB'2.Displayarecord$'
MSG3DB'3.Modifyarecord$'
MSG4DB'4.Deletearecord$'
MSG5DB'5.Createfile$'
MSG6DB'6.ReturnDOS$'
MSGCDB'Pleaseinput1--6:
$'
MSGEDB'Error!
$'
MSGC1DB'Pleaseinputfilename:
$'
MAXLENDB25
ACTLENDB?
STRINGDB25DUP(?
)
MAXLEN1DB25
ACTLEN1DB?
STRING1DB25DUP(?
)
PATHNMDB'D:
\chengji\2009\\',23DUP(?
)
PATHDB'D:
\chengji\2009\2009doc.dat',00
MSGA1DB'PleaseinputXH:
$'
MSGA2DB'PleaseinputXM:
$'
MSGA3DB'PleaseinputSX:
$'
MSGA4DB'PleaseinputYW:
$'
MSGA5DB'PleaseinputWY:
$'
HANDLEDW?
MSGXHDB'Xuehao:
$'
MSGXMDB'Xingming:
$'
MSGSXDB'Shuxue:
$'
MSGYWDB'Yuwen:
$'
MSGWYDB'Waiyu:
$'
BUFFERDB2048DUP('')
MSGRTDB'Pressanykeytoreturn!
$'
DELSTRDB33DUP('')
DATASENDS
STACKSSEGMENTSTACK
DB256DUP(?
)
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
;********************************
;主程序
MAINPROCFAR
S:
;清屏
CALLCLS;逐行输出提示信息
MOVAH,02H
MOVDH,9
MOVDL,30
INT10H
MOVAH,9
LEADX,MSG1
INT21H
MOVAH,02H
MOVDH,10
MOVDL,30
INT10H
MOVAH,9
LEADX,MSG2
INT21H
MOVAH,02H
MOVDH,11
MOVDL,30
INT10H
MOVAH,9
LEADX,MSG3
INT21H
MOVAH,02H
MOVDH,12
MOVDL,30
INT10H
MOVAH,9
LEADX,MSG4
INT21H
MOVAH,02H
MOVDH,13
MOVDL,30
INT10H
MOVAH,9
LEADX,MSG5
INT21H
MOVAH,02H
MOVDH,14
MOVDL,30
INT10H
MOVAH,9
LEADX,MSG6
INT21H;提示输入
MOVAH,02H
MOVDH,15
MOVDL,30
INT10H
MOVAH,9
LEADX,MSGC
INT21H;从键盘读入一个数字
MOVAH,02H
MOVDH,15
MOVDL,48
INT10H
MOVAH,1
INT21H;按数字对应子程序
CMPAL,31H
JZCAPPEND
CMPAL,32H
JZCDISPLAY
CMPAL,33H
JZCMODIFY
CMPAL,34H
JZCDELETE
CMPAL,35H
JZCCREATE
CMPAL,36H
JZE
;若输入不是1-6数字,则提示错误
MOVAH,02H
MOVDH,16
MOVDL,30
INT10H
MOVAH,9
LEADX,MSGE
INT21H
CCREATE:
CALLCREATE
JMPS
CDELETE:
CALLDELETE
JMPS
CMODIFY:
CALLMODIFY
JMPS
CDISPLAY:
CALLDISPLAY
JMPS
CAPPEND:
CALLAPPEND
JMPS
E:
MOVAH,4CH
INT21H
MAINENDP
;********************************
;CREATE程序
CREATEPROCNEAR
PUSHAX
PUSHCX
PUSHDX
PUSHSI
PUSHDI;清屏
CALLCLS
;提示输入文件名
MOVAH,2
MOVDH,12
MOVDL,20
INT10H
MOVAH,9
LEADX,MSGC1
INT21H
;从键盘读入文件名字符串
MOVAH,0AH
LEADX,MAXLEN
INT21H
;将文件名字符串加到ASCIZ字符串末尾
MOVCX,0
MOVCL,ACTLEN
LEASI,STRING
LEADI,PATHNM
ADDDI,16
LCREATE:
MOVAL,BYTEPTR[SI]
MOV[DI],AL
INCDI
INCSI
LOOPLCREATE
;在ASCIZ字符串末尾加00
MOVBYTEPTR[DI],0
;按ASCIZ字符串创建文件
MOVAH,3CH
LEADX,PATHNM
MOVCX,0
INT21H
POPDI
POPSI
POPDX
POPCX
POPAX
RET
CREATEENDP
;********************************
;APPEND程序
APPENDPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI;清屏
CALLCLS
;打开文件(只写)
MOVAH,3DH
MOVAL,01H
LEADX,PATH
INT21H
MOVHANDLE,AX
;提示输入学号
MOVAH,02H
MOVDH,10
MOVDL,30
INT10H
MOVAH,9
LEADX,MSGA1
INT21H
;从键盘读入字符串
MOVAH,0AH
LEADX,MAXLEN
INT21H
;在字符串末尾补足空格
MOVDX,4
CALLFILL
;将文件指针定位至文件末尾
MOVAH,42H
MOVAL,2
MOVBX,HANDLE
MOVCX,0
MOVDX,0
INT21H;写入文件
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H;提示输入姓名
MOVAH,02H
MOVDH,11
MOVDL,30
INT10H
MOVAH,9
LEADX,MSGA2
INT21H;从键盘读入字符串
MOVAH,0AH
LEADX,MAXLEN
INT21H;在字符串末尾补足空格
MOVDX,15
CALLFILL
;将文件指针定位至文件末尾
MOVAH,42H
MOVAL,2
MOVBX,HANDLE
MOVCX,0
MOVDX,0
INT21H;写入文件
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H;提示输入语文成绩
MOVAH,02H
MOVDH,12
MOVDL,30
INT10H
MOVAH,9
LEADX,MSGA3
INT21H;从键盘读入字符串
MOVAH,0AH
LEADX,MAXLEN
INT21H;在字符串末尾补足空格
MOVDX,3
CALLFILL
;将文件指针定位至文件末尾
MOVAH,42H
MOVAL,2
MOVBX,HANDLE
MOVCX,0
MOVDX,0
INT21H;写入文件
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H;提示输入数学成绩
MOVAH,02H
MOVDH,13
MOVDL,30
INT10H
MOVAH,9
LEADX,MSGA4
INT21H;从键盘读入字符串
MOVAH,0AH
LEADX,MAXLEN
INT21H;在字符串末尾补足空格
MOVDX,3
CALLFILL
;将文件指针定位至文件末尾
MOVAH,42H
MOVAL,2
MOVBX,HANDLE
MOVCX,0
MOVDX,0
INT21H;写入文件
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H;提示输入外语成绩
MOVAH,02H
MOVDH,14
MOVDL,30
INT10H
MOVAH,9
LEADX,MSGA5
INT21H;从键盘读入字符串
MOVAH,0AH
LEADX,MAXLEN
INT21H;在字符串末尾补足空格
MOVDX,3
CALLFILL
;在字符串末尾加回车、换行
INCSI
MOVBYTEPTR[BX+SI],0DH
INCSI
MOVBYTEPTR[BX+SI],0AH
ADDACTLEN,2
;将文件指针定位至文件末尾
MOVAH,42H
MOVAL,2
MOVBX,HANDLE
MOVCX,0
MOVDX,0
INT21H;写入文件
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H;关闭文件
MOVAH,3EH
MOVBX,HANDLE
INT21H
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
APPENDENDP
;********************************
DISPLAYPROCNEAR
PUSHAX
PUSHDX;清屏
CALLCLS;提示输入学号
MOVAH,02H
MOVDH,10
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGXH
INT21H;从键盘读入学号字符串
MOVAH,0AH
LEADX,MAXLEN
INT21H;打开文件(只读)
MOVAH,3DH
MOVAL,00H
LEADX,PATH
INT21H
MOVHANDLE,AX
;将文件指针定位至文件开头
MOVAH,42H
MOVAL,0
MOVBX,HANDLE
MOVCX,0
MOVDX,0
INT21H;将文件载入缓存
MOVAH,3FH
MOVBX,HANDLE
MOVCX,2048
LEADX,BUFFER
INT21H;在缓存中找到对应记录
LEASI,BUFFER
LEADI,STRING
MOVCX,AX
CALLSEARCH
CMPDX,0
JZOUTPUT
;若未找到,则提示错误
MOVAH,9
LEADX,MSGE
INT21H
JMPDEND;显示对应信息
OUTPUT:
MOVAH,02H
MOVDH,11
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGXM
INT21H
ADDSI,5
MOVAH,9
MOVDX,SI
INT21H
MOVAH,02H
MOVDH,12
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGYW
INT21H
ADDSI,16
MOVAH,9
MOVDX,SI
INT21H
MOVAH,02H
MOVDH,13
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGSX
INT21H
ADDSI,4
MOVAH,9
MOVDX,SI
INT21H
MOVAH,02H
MOVDH,14
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGWY
INT21H
ADDSI,4
MOVAH,9
MOVDX,SI
INT21H
MOVAH,2
MOVDH,15
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGRT
INT21H
MOVAH,1
INT21H
DEND:
;关闭文件
MOVAH,3EH
MOVBX,HANDLE
INT21H
POPDX
POPAX
RET
DISPLAYENDP
;********************************
MODIFYPROCNEAR
PUSHAX
PUSHDX;清屏
CALLCLS;提示输入学号
MOVAH,02H
MOVDH,10
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGXH
INT21H;从键盘读入学号字符串
MOVAH,0AH
LEADX,MAXLEN
INT21H;打开文件(读写)
MOVAH,3DH
MOVAL,10
LEADX,PATH
INT21H
MOVHANDLE,AX
;将文件指针定位至文件开头
MOVAH,42H
MOVAL,0
MOVBX,HANDLE
MOVCX,0
MOVDX,0
INT21H;将文件载入缓存
MOVAH,3FH
MOVBX,HANDLE
MOVCX,2048
LEADX,BUFFER
INT21H;在缓存中找到对应记录
LEASI,BUFFER
LEADI,STRING
MOVCX,AX
CALLSEARCH
CMPDX,0
JZREVISEXM
;若未找到,则提示错误
MOVAH,9
LEADX,MSGE
INT21H
JMPMEND;修改姓名
REVISEXM:
MOVAH,02H
MOVDH,11
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGXM
INT21H
MOVAH,0AH
LEADX,MAXLEN
INT21H
CMPBYTEPTR[STRING],0DH;若为回车,则将指针指向下一字段
JNZXMCONT
ADDSI,5
JMPREVISEYW
XMCONT:
PUSHSI
MOVDX,15
CALLFILL
POPSI
ADDSI,5
LEABX,BUFFER
MOVDX,SI
SUBDX,BX
MOVAH,42H
MOVAL,00
MOVBX,HANDLE
MOVCX,00
INT21H
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H;修改语文成绩
REVISEYW:
MOVAH,02H
MOVDH,12
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGYW
INT21H
MOVAH,0AH
LEADX,MAXLEN
INT21H
CMPBYTEPTR[STRING],0DH
JNZYWCONT
ADDSI,16
JMPREVISESX
YWCONT:
PUSHSI
MOVDX,3
CALLFILL
POPSI
ADDSI,16
LEABX,BUFFER
MOVDX,SI
SUBDX,BX
MOVAH,42H
MOVAL,00
MOVBX,HANDLE
MOVCX,00
INT21H
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H;修改数学成绩
REVISESX:
MOVAH,02H
MOVDH,13
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGSX
INT21H
MOVAH,0AH
LEADX,MAXLEN
INT21H
CMPBYTEPTR[STRING],0DH
JNZSXCONT
ADDSI,4
JMPREVISEWY
SXCONT:
PUSHSI
MOVDX,3
CALLFILL
POPSI
ADDSI,4
LEABX,BUFFER
MOVDX,SI
SUBDX,BX
MOVAH,42H
MOVAL,00
MOVBX,HANDLE
MOVCX,00
INT21H
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H;修改外语成绩
REVISEWY:
MOVAH,02H
MOVDH,14
MOVDL,28
INT10H
MOVAH,9
LEADX,MSGWY
INT21H
MOVAH,0AH
LEADX,MAXLEN
INT21H
CMPBYTEPTR[STRING],0DH
JZMEND
PUSHSI
MOVDX,3
CALLFILL
POPSI
ADDSI,4
LEABX,BUFFER
MOVDX,SI
SUBDX,BX
MOVAH,42H
MOVAL,00
MOVBX,HANDLE
MOVCX,00
INT21H
MOVAH,40H
MOVBX,HANDLE
MOVCX,0
MOVCL,ACTLEN
LEADX,STRING
INT21H
MEND:
;关闭文件
MOVAH,3EH
MOVBX,HANDLE
INT21H
POPDX
POPAX
RET
MODIFYENDP
;******************************************************************************
DELETEPROCNEAR
P