学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(60页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
学号:
课程设计
题目
学生成绩管理系统设计
学院
自动化学院
专业
电气工程及其自动化
班级
姓名
指导教师
2014
年
1
月
9
日
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
自动化学院
题目:
学生成绩管理系统设计
初始条件:
掌握8086汇编语言程序设计方法,设计一个学生成绩管理系统,程序运行后通过键盘控制实现各种功能。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.程序运行后,键盘输入不同进行不同处理:
(1)‘E’表示退出,‘L’表示浏览;
(2)‘I’表示插入,‘Q’表示查询,‘D’表示删除,‘M’表示修改,‘C’表示统计各分数段人数。
2.撰写课程设计说明书。
内容包括:
摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:
设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:
12月26日-----12月28日查阅资料及方案设计
12月29日-----1月2日编程
1月3日-----1月7日调试程序
1月8日-----1月9日撰写课程设计报告
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
摘要1
1需求说明2
2设计说明2
2.1开发平台与开发工具2
2.2基本原理2
2.3模块说明3
2.3.1浏览模块3
2.3.2插入模块4
2.3.3查询模块4
2.3.4修改模块4
2.3.5删除模块4
2.3.6分数段统计模块4
2.3.7退出模块4
3算法设计5
4程序编译与运行6
5收获、体会与总结8
附录完整程序10
本科生课程设计成绩评定表40
摘要
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对学校的决策者和管理者来说都是至关重要的。
学生管理系统由于具有查询迅速、方便、存储量大、保密性好的功能,因此被广泛采用。
此次学生成绩管理系统通过汇编语言进行编写,利用一些基本的语句和过程化的定义语言完成主程序对子程序的调用,从而实现管理系统的浏览、退出、查询、插入、修改、删除、退出等7个基本功能,并利用emu8086完成系统的仿真设计。
关键词:
学生成绩管理系统汇编功能仿真
学生成绩管理系统设计
需求说明
为了方便查找学生成绩信息,突破传统的手工处理方式,跟上现代化教学的要求,所以特开发一套对学生成绩进行管理的系统,做到信息的即时化,准确化。
本次课设以此为基础,利用课堂所学微机原理知识,用汇编语言编写一个学生成绩管理系统,实现基本的学生成绩管理。
功能主要包括建立成绩档案,添加学生成绩记录(包括学号、姓名、性别、成绩)。
本成绩管理系统应该具有最基本的退出和浏览功能,并在此基础上能按学号进行插入、查询、删除和修改等部分功能。
同时本系统运行的所有信息最终用文件保存。
本系统在完成上述功能的基础上,对管理系统的输入和输出界面进行友好型设计,界面尽量美观,同时进行一些必要的提示。
设计说明
开发平台与开发工具
该程序使用基于DOS、BIOS操作系统的16位实模式汇编语言编写,使用的编译器为emu8086,调试工具为DOS下的debug.exe程序。
基本原理
本系统的设计是按照主程序调用子程序的方法来实现的。
其中主程序完成菜单的实现,子程序完成一个独立功能的实现。
本程序使用了DOS系统功能调用(INT21H),程序中用到的系统功能调用如下。
AH
功能
调用参数
返回参数
02
显示输出
DL=输出字符
09
显示字符串
DS:
DX=串地址
字符串以‘$’符结束
3C
建立文件
DS:
DX=ASCIZ串地址
CX=文件属性
成功:
AX=文件代号
失败:
AX=错误代码
3D
打开文件
DS:
DX=ASCIZ串地址
AL=访问文件和共享方式
0=读,1=写,2=读/写
成功:
AX=文件代号
失败:
AX=错误代码
3E
关闭文件
BX=文件代号
失败:
AX=错误代码
3F
读文件或设备
DS:
DX=缓冲区首地址
BX=文件代号
CX=读取的字节数
成功:
AX=实际读取的字节数
AX=0已到文件尾
失败:
AX=错误代码
40
写文件或设备
DS:
DX=缓冲区首地址
BX=文件代号
CX=写入的字节数
成功:
AX=实际写入的字节数
失败:
AX=错误代码
表1-1系统的功能调用
模块说明
该程序按照要实现的功能一共分为七大模块:
分别完成学生成绩的浏览、学生成绩的插入、学生成绩的查询、学生成绩的修改、学生成绩的删除、学生成绩各分数段的人数统计以及管理系统的退出。
浏览模块
设计List(浏览)子程序时,先打开文件,然后读一个记录,并通过过程化语言调用SHOW_STU将其显示到屏幕上,若文件指针没有到达文件尾,则继续读记录并显示,当文件指针到达文件尾时,若没有学生信息,在屏幕上进行提示并关闭文件返回主程序。
插入模块
设计Insert(插入)子程序时,先打开文件SCORE.TXT,并置文件指针到文件尾,然后过程化语言调用子程序接受用户的输入,再把学生的输入写入文件,最后关闭文件返回主程序。
查询模块
子程序时,先打开文件,通过过程化调用,先判断学号是否合法,合法后再查找学生的学号,然后读文件记录,并同要查找的学生学号比较,若相同则输出,若不同则继续读文件记录,最后显示查询结果,关闭文件返回程序。
修改模块
设计Modify(修改)子程序时,先打开文件SCORE.TXT,通过过程化定义语言调用子程序得到要修改的记录,然后读文件中的记录,并与用户输入的记录作比较(只比较记录中的名字部分),若不同则读下一个记录,若相同则将文件指针后退20个字符(一个记录为20个字符的长度),然后把用户输入的记录写入文件,最后关闭文件返回主程序。
删除模块
设计Delete(删除)子程序时,先打开文件,再过程化定义语言得到要删除的学生的学号,然后读文件中的记录,直到其记录的学号与所输入的学号相同为止,把文件指针后退5个字符,关闭文件返回主程序。
分数段统计模块
设计Count(统计)子程序,先打开文件,然后读记录,比较记录的第16个字符(数学成绩的高位)并统计,直到文件指针到达文件尾,最后关闭文件调用宏SHOW_EXIT显示统计结果,返回主程序。
退出模块
设计Exit(退出)子程序,先清屏,然后通过过程化定义语言调出初始源代码段中编写的人性化退出界面,借助DOS操作系统系统下的退出功能关闭成绩管系统。
算法设计
主程序运行时的汇编程序:
START:
MOVAH,7
INT21H
CMPAL,'i'
JNZML
CALLINSERT
RETU:
JMPMAIN
ML:
CMPAL,'l'
JNZMQ
CALLLIST
JMPMAIN
MQ:
CMPAL,'q'
JNZME
CALLQUERY
JMPMAIN
MC:
CMPAL,'c'
JNZMM
CALLCOUNT
JMPMAIN
MM:
CMPAL,'m'
JNEMD
CALLMODIFY
JMPMAIN
MD:
CMPAL,'d'
JNZME
CALLDELETE
JMPMAIN
ME:
CMPAL,'e'
CALLEXIT
JMPMAIN
程序编译与运行
程序共一个可执行文件,通过emu8086编译运行后在屏幕上显示主菜单,输入不同按键程序执行的结果如下图所示。
图4.1系统主菜单
图4.2系统浏览功能
图4.3系统分数统计功能
图4.4系统插入功能
图4.5系统修改功能
图4.6系统删除功能
图4.7系统退出功能
收获、体会与总结
通过这段时间的编程,我增加了对汇编知识的了解,能更加熟练得编写汇编程序了。
通过查阅资料和与同学的交流,更加深了我对汇编知识的兴趣,尤其是美化界面那部分编程,让人不自觉的就产生一种自己是伟大的系统开发者,我做的是一个很伟大的任务,尽管我知道自己编出的程序在那些“大牛”看来不值一提,但当数据如我所愿的在屏幕上显示出来时,那种喜悦之情很难用言语表达。
如果有时间的话这个程序还可以增加很多功能,比如记录学生更多科目的分数并将平均分显示出来,单科成绩的查询和排序,复制粘贴功能,加入网格及声音等,虽然基本功能都实现了但还有许多值得改进地方。
在这次的课程设计中,除了使我对所学知识的了解更加巩固和深入外,我收获更多的是对我思维的考验和动手能力的锻炼。
像这种实践性比较强的设计过程都比较复杂,需要时刻保持清晰的思路,否则出错了还得从头找起。
与此同时,也是对我动手编程能力的一大考验和提高,我不再停留在死记硬背的阶段,开始通过编写编译程序发现问题来进一步掌握汇编语言,通过debug来了解汇编语言与高级语言的联系、寄存器与操作数的联系等问题。
这次设计我受益匪浅,它让我从传统的被动授学转变为主动求学,使我在与同学老师的交流中、书本网络资源的学习中渐渐积累了终身受益的不菲的收获。
参考文献
[1]彭虎,周佩玲.微机原理与接口技术.北京:
电子工业出版社,2008
[2]周明德.微机原理与接口技术.北京:
人民邮电出版社,2007
[3]杨立.微机原理与接口技术.天津:
天津大学出版社,2010
[4]张坤.汇编语言实验教程.北京:
清华大学出版社,2008
[5]佘朝坤.IBM-PC汇编语言程序设计.北京:
机械工业出版社,2008
[6]陈慈发.微型计算机技术.北京:
科学出版社,2010
[7]孙德文.微型计算机技术.北京:
高等教育出版社,2010
附录完整程序
DATASEGMENT
TIPS0DB'Tips:
',0DH,0AH,'$';插入提示信息
TIPS1DB'SEX:
1:
male0:
female',0DH,0AH,'$'
TIPS3DB'PleaseinputID:
$';查询提示信息
TIPS4DB'Pleaseenter"r"toreturn$'
TIPS5DB'Pleaseenter"r"toreturn,"c"tocontinue$'
IDDB'ID:
$'
NAMDB'NAME:
$'
SEXDB'SEX:
$'
SCOREDB'SCORE:
$'
FIDDW?
;文件号
SEXMDB'male$'
SEXFDB'female$'
COUNT_ADB'90~100:
$';统计提示信息
COUNT_BDB'80~89:
$'
COUNT_CDB'70~79:
$'
COUNT_DDB'60~69:
$'
COUNT_EDB'00~59:
$'
ABDB5DUP('0');统计结果
mess1DB'*TheStudentGradeManagementSystem*',0ah,0dh,'$'
mess2DB'*thisismainmenu*',0ah,0dh,'$'
mess3DB'*insert(i)*',0ah,0dh,'$'
mess4DB'*modify(m)*',0ah,0dh,'$'
mess5DB'*delete(d)*',0ah,0dh,'$'
mess6DB'*query(q)*',0ah,0dh,'$'
mess7DB'*count(c)*',0ah,0dh,'$'
mess8DB'*exit(e)*',0ah,0dh,'$'
mess9DB'*********************************$'
mess10DB'*list(l)*',0ah,0dh,'$'
mess11DB'*pleasechose(l/i/m/d/q/c/e):
*',0ah,0dh,'$'
ID_LENGTHEQU4;配置信息
NAM_LENGTHEQU20
SEX_LENGTHEQU1;性别请勿更改位数
SCORE_LENGTHEQU5
STU_LENGTHDW?
;每条学生信息总长度
STU_LENGTH_ADD1DW?
NAM_SEX_SCORE_LENGTHDW?
DELDB30DUP('');清空信息用
DEL_DONEDB'Deletesuccess!
$'
ERRDB'Dataerror,Pleaseinputagain!
$';错误提示信息
NOSTUDB'Sorry,thereisnothisstudnet!
$'
ERR_NODB'Nostudentinformation!
$'
ERR_SAMEDB'ThereisthesameID,pleaseinputagain!
$'
NEWFDB0DH,0AH,0DH,0AH,'Warning:
thisoperationwillemptyallyourdata!
',0DH,0AH,0DH,0AH,'Willyoucontinue?
(y:
empty,otherkey:
return):
$'
FPATHDB'c:
\score.txt',0;数据库文本
STRDB50DUP('?
');缓冲区str
STR0DB50DUP('?
');缓冲区str0
ENTERDB'$';空格
TMPDW0;是否为空标志信息
SCDB0;分数保护处用
BYEDB'Thanksforuseourprogram!
',0DH,0AH,0DH,0AH,'Bye~Bye~$'
BY0DB'Writer:
$'
BY1DB'38(liFeiXing)$'
BY2DB'31(Chengkang)$'
BY3DB'15(ChenChuMing)$'
DATAENDS
SET_P1MACRO;设定光标位置A
MOVAH,02H
MOVDH,02
MOVDL,03
MOVBH,0
INT10H
ENDM
SET_P3MACRO
MOVAH,02H;设定光标的位置B
MOVDH,14
MOVDL,43
MOVBH,0;当前这页
INT10H
ENDM
TABMACRO;换行
MOVAH,2
MOVDL,0DH
INT21H
MOVDL,0AH
INT21H
ENDM
CREATEFMACROFILE_ID,FILE_PATH;创建文件([传入]文件号、[传入]文件路径)
MOVAH,3CH
MOVCX,00H;普通文件
LEADX,FILE_PATH
INT21H
MOVFILE_ID,AX
ENDM
OPENFMACROFILE_ID,FILE_PATH;打开文件([传入]文件号、[传入]文件路径)
MOVAL,2;读写文式打开
MOVAH,3DH
LEADX,FILE_PATH
INT21H
MOVFILE_ID,AX
ENDM
CLOSEFMACROFILE_ID;关闭文件([传入]文件号)
MOVBX,FILE_ID
MOVAH,3EH
INT21H
ENDM
READFMACROFILE_ID,TEMP,NUM;读文件([传入]文件号、[传入]缓冲区、[传入]字节数)
MOVBX,FILE_ID
LEADX,TEMP
MOVAX,NUM
MOVCX,AX
MOVAH,3FH
INT21H
ENDM
WRITEFMACROFILE_ID,TEMP,NUM;写文件([传入]文件号、[传入]缓冲区、[传入]字节数)
MOVBX,FILE_ID
MOVCX,NUM
LEADX,TEMP[2]
MOVAH,40H
INT21H
ENDM
MOVEFMACROFILE_ID,STYPE,HIGEC,LOWD;移动文件指针([传入]文件号、[传入]移动方式、[传入]偏移字节(高位)[传入]偏移字节(低位))
MOVBX,FILE_ID
MOVAH,42H
MOVAL,STYPE;尾+偏移量方式
MOVCX,HIGEC;偏移字节(高位)
MOVDX,LOWD;偏移字节(低位)
INT21H
ENDM
INPUTMACROBUFFER,LENGTH;输入字符串([传入]字符串名、[返回]字符串长度)
MOVAH,10
LEADX,BUFFER
INT21H
MOVal,BUFFER[1]
MOVLENGTH,al
ENDM
SHOWMACROBUFFER;显示字符串([传入]字符串名)
MOVAH,9
LEADX,BUFFER
INT21H
ENDM
STAKSEGMENTSTACK
DB200DUP('?
')
STAKENDS
;=========================================
;代码段
;=========================================
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
SHOW_EXITPROCNEAR;提示按r退出
PUSHAX
PUSHBX
PUSHCX
PUSHDX
TAB
TAB
SHOWTIPS4
EXIT_1:
MOVAH,7
INT21H
CMPAL,'r'
JNZEXIT_1
POPDX
POPCX
POPBX
POPAX
RET
SHOW_EXITENDP
SHOW_ECPROCNEAR;询问退出还是继续
PUSHAX
PUSHBX
PUSHCX
PUSHDX
TAB
TAB
SHOWTIPS5
EXIT_2:
MOVAH,7
INT21H
CMPAL,'r'
JZEXIT_4
CMPAL,'c'
JNZEXIT_2
CALLINSERT
EXIT_4:
POPDX
POPCX
POPBX
POPAX
RET
SHOW_ECENDP
SHOW_ERRPROCNEAR;显示出错信息子程序
PUSHAX
PUSHBX
PUSHCX
PUSHDX
TAB
TAB
SHOWERR
TAB
TAB
POPDX
POPCX
POPBX
POPAX
RET
SHOW_ERRENDP
RE_TMPPROCNEAR;用空格初始化缓冲区子程序
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVCX,50
MOVBX,1
RE:
INCBX
MOVSTR[BX],''
LOOPRE
POPDX
POPCX
POPBX
POPAX
RET
RE_TMPENDP
CLEARPROCNEAR;清屏
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAL,0;上滚行数
MOVCL,0;上滚窗口左上角的列号为0
MOVCH,0;上滚窗口左上角的行号为0
MOVDH,24;上滚窗口右上角的行号为24
MOVDL,79;上滚窗口右上角的列号为79
MOVBH,14;空白行的属性
MOVAH,6;入口参数
INT10H
SET_P1
POPDX
POPCX
POPBX
POPAX
RET
CLEARENDP
SHOW_STUPROCNEAR;显示学生信息子程序
PUSHAX
PUSHBX
PUSHCX
PUSHDX
SHOWID;ID
MOVCX,ID_LENGTH
MOVBX,-1
SH_ID:
INCBX
MOVDL,STR0[BX]
MOVAH,2
INT21H
LOOPSH_ID
SHOWENTER
SHOWNAM;NAME
MOVCX,NAM_LENGTH
MOVBX,ID_LENGTH
DECBX
SH_NAME:
INCBX
MOVDL,STR0[BX]
MOVAH,2
INT21H
LOOPSH_NAME
SHOWENTER
SHOWSEX;SEX
MOVBX,ID_LENGTH
ADDBX,NAM_LENGTH
MOVDL,STR0[BX]
CMPDL,'1';1显示male,0显示female
JNZSEX_F
SHOWSEXM
JMPNN
SEX_F:
SHOWSEXF
NN:
SHOWENTER
SHOWSCORE;SCORE
MOVCX,SCORE_LENGTH
MOVBX,ID_LENGTH
ADDBX,NAM_LENGTH
SH_SCORE:
INCBX
MOVDL,STR0[BX]
MOVAH,2
INT21H
LOOPSH_SCORE
POPDX
POPCX
POPBX
POPAX
RET
SHOW_STUENDP
;====================以下插入(insert)子程序================
INSERTPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
TAB
CALLCLEAR;清屏
SHOWTIPS0;显示提示信息
SHOWTIPS1
TAB
TAB