微机原理课程设计学生成绩系统Word格式文档下载.docx
《微机原理课程设计学生成绩系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计学生成绩系统Word格式文档下载.docx(51页珍藏版)》请在冰豆网上搜索。
(假设3门功课);
(3)修改指定学号的学生成绩;
(4)统计指定学号的学生的平均成绩、总成绩,并在屏幕上显示;
(5)统计指定学号课程的平均成绩,并在屏幕上显示;
每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数(分数段为:
>
=90;
80~89;
70~79;
60~69;
<
=59),此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。
对学生成绩记录进行检索(按学号、姓名)
成绩排序(按总成绩降序排列)
(6)退出;
报告要求:
(1)方案选择和分析;
(2)主要设计思路及工作原理(流程图);
(3)调试出现的问题及解决方法;
(4)运行效果及改良措施;
提交程序清单。
二、课程设计所应用的基本知识点
本系统的设计是按照主程序调用子程序的方法来实现的。
其中主程序完成菜单的实现,子程序完成一个独立功能的实现。
本程序使用了DOS系统功能调用(INT21H),程序中用到的系统功能调用如下。
AH
功能
调用参数
返回参数
02
显示输出
DL=输出字符
09
显示字符串
DS:
DX=串地址
字符串以‘$’符结束
3C
建立文件
DX=ASCIZ串地址
CX=文件属性
成功:
AX=文件代号
失败:
AX=错误代码
3D
打开文件
AL=访问文件和共享方式
0=读,1=写,2=读/写
3E
关闭文件
BX=文件代号
3F
读文件或设备
DX=缓冲区首地址
CX=读取的字节数
AX=实际读取的字节数
AX=0已到文件尾
40
写文件或设备
CX=写入的字节数
AX=实际写入的字节数
三、实验原理
该程序按照要实现的功能一共分为七大模块:
分别完成学生成绩的浏览、学生成绩的插入、学生成绩的查询、学生成绩的修改、学生成绩的删除、学生成绩各分数段的人数统计以及管理系统的退出。
浏览模块
设计List(浏览)子程序时,先打开文件,然后读一个记录,并通过过程化语言调用SHOW_STU将其显示到屏幕上,若文件指针没有到达文件尾,则继续读记录并显示,当文件指针到达文件尾时,若没有学生信息,在屏幕上进行提示并关闭文件返回主程序。
插入模块
设计Insert(插入)子程序时,先打开文件SCORE.TXT,并置文件指针到文件尾,然后过程化语言调用子程序接受用户的输入,再把学生的输入写入文件,最后关闭文件返回主程序。
查询模块
子程序时,先打开文件,通过过程化调用,先判断学号是否合法,合法后再查找学生的学号,然后读文件记录,并同要查找的学生学号比较,若相同则输出,若不同则继续读文件记录,最后显示查询结果,关闭文件返回程序。
修改模块
设计Modify(修改)子程序时,先打开文件SCORE.TXT,通过过程化定义语言调用子程序得到要修改的记录,然后读文件中的记录,并与用户输入的记录作比较(只比较记录中的名字部分),若不同则读下一个记录,若相同则将文件指针后退20个字符(一个记录为20个字符的长度),然后把用户输入的记录写入文件,最后关闭文件返回主程序。
删除模块
设计Delete(删除)子程序时,先打开文件,再过程化定义语言得到要删除的学生的学号,然后读文件中的记录,直到其记录的学号与所输入的学号相同为止,把文件指针后退5个字符,关闭文件返回主程序。
分数段统计模块
设计Count(统计)子程序,先打开文件,然后读记录,比较记录的第16个字符(数学成绩的高位)并统计,直到文件指针到达文件尾,最后关闭文件调用宏SHOW_EXIT显示统计结果,返回主程序。
退出模块
设计Exit(退出)子程序,先清屏,然后通过过程化定义语言调出初始源代码段中编写的人性化退出界面,借助DOS操作系统系统下的退出功能关闭成绩管系统。
程序功能示意图
四、程序流程图
五、程序详细执行过程
显示列表功能
list程序段,首先,为以防有前操作在下屏幕显示,所以要清下屏,设置光标位置后,输出提示语句,主要用下段程序实现浏览功能。
查询功能
查询功能实现是通过检验输入字符是否为“Q”,当输入正确时要在利用宏set_p2设置的光标处显示提示信息后,清下屏,以防有前操作占用界面空间。
等待用户输入要查询学生的姓名,只有在输入正确后,才能显示其成绩,若输入姓名与文件中各姓名不符,则输出“错误”提示语句,不输出成绩。
无论是在查询功能实现后,还是查询失败,光标返回到输入处,则此时可重新选择菜单中的功能。
退出功能
当在显示菜单中输入“E”时,选择退出程序功能,此时调用屏幕全清,宏clear,并输出友好语句bye退出。
六、程序清单
DATASEGMENT
TIPS0DB'
Tips:
'
0DH,0AH,'
$'
;
插入提示信息
TIPS1DB'
SEX:
1:
male0:
female'
TIPS3DB'
PleaseinputID:
查询提示信息
TIPS4DB'
Pleaseenter"
r"
toreturn$'
TIPS5DB'
toreturn,"
c"
tocontinue$'
IDDB'
ID:
$'
NAMDB'
NAME:
SEXDB'
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'
*WustStudentGradeManagementSystem*'
0AH,0DH,'
MESS2DB'
*1201zhengliming2014.12.24*'
0AH,0DH,'
MESS3DB'
*shuruinsert(i)*'
MESS4DB'
*xiugaimodify(m)*'
MESS5DB'
*shanchudelete(d)*'
MESS6DB'
*chaxunquery(q)*'
MESS7DB'
*tongjicount(c)*'
MESS8DB'
*tuichuexit(e)*'
MESS9DB'
*********************************$'
MESS10DB'
*list(l)*'
MESS11DB'
*pleasechose(l/i/m/d/q/c/e):
*'
ID_LENGTHEQU4;
配置信息
NAM_LENGTHEQU20
SEX_LENGTHEQU1;
性别请勿更改位数
SCORE_LENGTHEQU5
STU_LENGTHDW?
每条学生信息总长度
STU_LENGTH_ADD1DW?
NAM_SEX_SCORE_LENGTHDW?
DELDB30DUP('
'
清空信息用
DEL_DONEDB'
Deletesuccess!
ERR1DB'
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;
数据库文本
STR1DB50DUP('
?
缓冲区str
STR0DB50DUP('
缓冲区str0
ENTER1DB'
空格
TMPDW0;
是否为空标志信息
SCDB0;
分数保护处用
BYEDB'
Thanksforuseourprogram!
Bye~Bye~$'
BY0DB'
WUST$'
BY1DB'
zhengliming$'
BY2DB'
201204134022$'
BY3DB'
2012.12.24$'
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;
当前这页
TABMACRO;
换行
MOVAH,2
MOVDL,0DH
INT21H
MOVDL,0AH
CREATEFMACROFILE_ID,FILE_PATH;
创建文件([传入]文件号、[传入]文件路径)
MOVAH,3CH
MOVCX,00H;
普通文件
LEADX,FILE_PATH
MOVFILE_ID,AX
OPENFMACROFILE_ID,FILE_PATH;
打开文件([传入]文件号、[传入]文件路径)
MOVAL,2;
读写文式打开
MOVAH,3DH
MOVFILE_ID