微机原理课程设计学生成绩系统.docx

上传人:b****6 文档编号:5162268 上传时间:2022-12-13 格式:DOCX 页数:51 大小:180.82KB
下载 相关 举报
微机原理课程设计学生成绩系统.docx_第1页
第1页 / 共51页
微机原理课程设计学生成绩系统.docx_第2页
第2页 / 共51页
微机原理课程设计学生成绩系统.docx_第3页
第3页 / 共51页
微机原理课程设计学生成绩系统.docx_第4页
第4页 / 共51页
微机原理课程设计学生成绩系统.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

微机原理课程设计学生成绩系统.docx

《微机原理课程设计学生成绩系统.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计学生成绩系统.docx(51页珍藏版)》请在冰豆网上搜索。

微机原理课程设计学生成绩系统.docx

微机原理课程设计学生成绩系统

二○一四~二○一五学年第一学期

信息科学与工程学院

自动化系

课程设计报告书

 

姓名:

学号:

班级:

课程名称:

指导教师:

 

(一)课程设计内容及要求

(二)课程设计所应用的基本知识点

(三)实验原理

(四)程序流程图

(五)程序详细执行过程

(六)程序清单

(七)程序运行结果

(八)收获与体会

(九)参考文献

一、课程设计内容及要求

题目二学生成绩管理

设计要求:

建立学生成绩文档,实现学籍简单管理。

设计内容:

(1)建立学生成绩文档;

(2)输入学生各门功课成绩;(假设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

建立文件

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=错误代码

三、实验原理

该程序按照要实现的功能一共分为七大模块:

分别完成学生成绩的浏览、学生成绩的插入、学生成绩的查询、学生成绩的修改、学生成绩的删除、学生成绩各分数段的人数统计以及管理系统的退出。

浏览模块

设计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',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'*WustStudentGradeManagementSystem*',0AH,0DH,'$'

MESS2DB'*1201zhengliming2014.12.24*',0AH,0DH,'$'

MESS3DB'*shuruinsert(i)*',0AH,0DH,'$'

MESS4DB'*xiugaimodify(m)*',0AH,0DH,'$'

MESS5DB'*shanchudelete(d)*',0AH,0DH,'$'

MESS6DB'*chaxunquery(q)*',0AH,0DH,'$'

MESS7DB'*tongjicount(c)*',0AH,0DH,'$'

MESS8DB'*tuichuexit(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!

$'

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!

',0DH,0AH,0DH,0AH,'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;当前这页

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

SHOWERR1

TAB

TAB

POPDX

POPCX

POPBX

POPAX

RET

SHOW_ERRENDP

RE_TMPPROCNEAR;用空格初始化缓冲区子程序

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVCX,50

MOVBX,1

RE:

INCBX

MOVSTR1[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

SHOWENTER1

SHOWNAM;NAME

MOVCX,NAM_LENGTH

MOVBX,ID_LENGTH

DECBX

SH_NAME:

INCBX

MOVDL,STR0[BX]

MOVAH,2

INT21H

LOOPSH_NAME

SHOWENTER1

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:

SHOWENTER1

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

OPENFFID,FPATH;打开文件

IN_ID:

SHOWID;学号

INPUTSTR1,BL;向缓冲区输入ID

CMPBL,ID_LENGTH;看ID是否合法

JZL1

JNZERR_ID

ERR_SA:

;错误处理

TAB

TAB

SHOWERR_SAME

TAB

TAB

JMPIN_ID

ERR_ID:

TAB

TAB

CALLSHOW_ERR

TAB

TAB

JMPIN_ID

L1:

;ID判断只能为数字

MOVCX,ID_LENGTH

LEASI,STR1+2

LN:

MOVAL,BYTEPTR[SI]

CMPAL,'0'

JBERR_ID

CMPAL,'9'

JAERR_ID

INCSI

LOOPLN

MOVEFFID,0,0,0;指针移到文件首

IA:

MOVEFFID,1,0,5

IB:

READFFID,STR0,STU_LENGTH;读取学生信息

CMPAX,0;文件是否结束

JNZIL1

JMPIC;没有重复学号,可以插入

IL1:

LEASI,STR0

LEADI,STR1

INCDI

DECSI

MOVCX,ID_LENGTH

IL2:

INCSI

INCDI

MOVAL,BYTEPTR[DI]

CMPAL,BYTEPTR[SI]

JNZIA;不符合条件读取下一个同学信息

LOOPZIL2

JMPERR_SA;有重复学号

IC:

MOVEFFID,2,0,5

WRITEFFID,STR1,ID_LENGTH;数据合法则写入数据

TAB

IN_NAM:

SHOWNAM;姓名

CALLRE_TMP;初始化缓冲区

INPUTSTR1,BL

ADDBL,2;去掉回车

MOVBH,0

MOVSI,BX

MOVSTR1[SI],''

SUBBL,2

CMPBL,NAM_LENGTH

JNAL2

ERR_NAM:

CALLSHOW_ERR

JMPIN_NAM

L2:

CMPSTR1[2],'';姓名第一个字符不为空

JZERR_NAM

CMPSTR1[2],'z'

JAERR_NAM

CMPSTR1[2],'A'

JBERR_NAM

CMPSTR1[2],'a'

JNBIII

CMPSTR1[2],'Z'

JAERR_NAM

CMPSTR1[2],'A'

JBERR_NAM

III:

MOVCX,NAM_LENGTH

MOVBX,2

II0:

INCBX

DECCX

CMPSTR1[BX],'z'

JAERR_NAM

CMPSTR1[BX],''

JBERR_NAM

CMPSTR1[BX],'a'

JNBII0

CMPSTR1[BX],'Z'

JAERR_NAM

CMPSTR1[BX],'A'

JNBII0

CMPSTR1[BX],''

JNZERR_NAM

CMPCX,0

JNZII0

WRITEFFID,STR1,NAM_LENGTH

TAB

IN_SEX:

SHOWSEX;性别

CALLRE_TMP

INPUTSTR1,BL

ADDBL,2;去掉回车

MOVBH,0

MOVSI,BX

MOVSTR1[SI],''

SUBBL,2

CMPBL,SEX_LENGTH

JNZERR_SEX

MOVBL,STR1[2]

CMPBL,'1'

JZL4

CMPBL,'0'

JZL4

ERR_SEX:

CALLSHOW_ERR

JMPIN_SEX

L4:

WRITEFFID,STR1,SEX_LENGTH

TAB

IN_SCORE:

SHOWSCORE

CALLRE_TMP

INPUTSTR1,BL

MOVSC,BL;BL保护

ADDBL,2;去掉回车

MOVBH,0

MOVSI,BX

MOV

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1