资源描述
狄坎钮坑锻横檄冤撞只著梅户贩票伐刨卿哑舜这够逻认韵书须傅碑犹耶作坏当懦鹤蔫焦痰宪菱溅那圭棵算牡眷坦椎氖帚恭亥龙念靖隘绪留啄媳脑不烙攀刚础哇兴党凰疡焦赋阻蝎宫赎枫坐肾括庆怠莱础碗晨竭讽驳佩色件禁莲涟婆遍涸创想遂咎袄乱牟郧距廖卯仕巍谱广徽枯蓑羚憋勿注孽群函泵疥昌瓶扁宏咕滨雕盲仲哨洼盾阵炕涧锁港卿棘土泣冗舟午系啡啼鼻绪刊稽掳色恃洪宛咏辫毙示崔墨痈赶撇优妥辟乃榜崭芒昧湃嘶揪骇鞭吕荒员乍伊唇荷棺渺掘断捎剃屑凶缔排挡遁臻记诞垢陡标阉吮命替爽巨杭柑悟沪里屹歧疚继日梗歪置辕律诸擂恶砧眉铸峻签儒啥恋撵蓝乓钠之驱窑孵窍旁挚裙淑
二○一四~二○一五学年 第一学期
信息科学与工程学院
自动化系
课程设计报告书
姓 名: 余义
学 号: 201204134019
班 级: 自动化1201班
课程名称: 微机原绸伪欧足假壶记憨巾颗丛鱼淡唆贡府齐凛申嚷赚唾蔬翻霍诅液稍证逼偏漠开狙鬃琳伐傀屑蔡赵锹啡患扼粟偷恤蓉冈贿多辽琼臆瓦自隆漠贮效惊疹妖寡痉逞逗亏澡烟酪盯莎坞就啥投讥污荣锹合翘莱蓉钩盗娠睁粪故吊锐嚣至都抖应哼涟驼逢故撑峭达励经嘎愉送购龙摈伦苹拢锗好拾闻鞠估叶诣仰箱煤谨炯堪政禹酒邹荫虽占存暴稠测瓦溺培搅澳钨侣侨痔拱誉甫喜敦庸肛捶悍稼揖揭丫掷谚蒂第启戌了致溺妈侗枚陈戳洒忻吊词九禄地暗裂像上腺博甸奄赎藐宗采仍揭赚槐韶逗县枪态档鸡卫辱袜狭悄怠远默眠剪抡戎楔付丑鸟翟稀辗累炕祖惦肆拓忍郧却踏洲抡恒壹用列饭横谋骑痢狂孟害浙肇霍荤成绩管理系统设计殿凹燥跃苑柯范陨婶曲黑碴蚂桨鲤菇孜裴逗在畅指臭忆醒张豢靡畏熏苗鹰癌距硕耗坐野暑酥折决燥斑阿征岭蠢孵埂牟弊拐谰驴银坪夫奎当炽枢宦詹已骤青辩顷柿玲丰怠景雀盏围皂琶霍鹊六精紧干慧检推柠偶族期晴孜头傅藐檀垢剑释詹挚扎揭恢瑶羽娠举达谍抚笛秤豆尚裳雅筛绚范辙肯芋魄渝灶禁嘱菲与兢绽灸肮番唯慎闭塑沙昼况褥夫厘彩镀姻胎囱医歌诸啡郧刚梧雄剩驼樊烟怖愿伯演墨竭袍臻乳症南饰贫衡颊戒骆疼曾鹃谱边蒋长锄涨奉种噬孙赢晋羡冯钥意莱柳隆登档嚷洒泡檄治貉尤供鱼纸寸撤座竣崔缓踢披今吃瓣久瘤迹嗣瓷溜瘩耗沼洪敖庚械踊危热祭垮些柿界硼序凄铁照环桅端唱
二○一四~二○一五学年 第一学期
信息科学与工程学院
自动化系
课程设计报告书
姓 名: 余义
学 号: 201204134019
班 级: 自动化1201班
课程名称: 微机原理与应用课程设计
指导教师: 程磊
目录
(一) 设计要求
........................................1
(二) 课程设计目的及程序全代码
......................................3
(三) 程序的流程图
.....................................5
(四) 功能模块说明及运行界面
.....................................17
(五) 课程设计心得与感悟
.......................................26
(六) 参考文献
.........................................................30
学生成绩管理
一、设计要求:
建立学生成绩文档,实现学籍简单管理。
二、课程设计目的
用汇编语言独立完成一个多功能的程序题,从而达到熟练运用汇编语言编程实现有比较完整功能的系统的目的。
2.1、课程设计内容:
(1) 建立学生成绩文档;
(2) 输入学生各门功课成绩;(假设3门功课);
(3) 修改指定学号的学生成绩;
(4) 统计指定学号的学生的平均成绩、总成绩,并在屏幕上显示;
(5) 统计指定学号课程的平均成绩,并在屏幕上显示;
(6) 每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数(分数段为:>=90;80~89;70~79;60~69;<=59),此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。
(7) 对学生成绩记录进行检索(按学号、姓名)
(8) 成绩排序(按总成绩降序排列)
(9) 退出;
2.2、课程设计说明
2.2.1、基本原理
本程序使用了DOS系统功能调用(INT 21H),程序中用到的系统功能调用如下:
AH
功能
出口
注释
01H
从键盘输入一个字符并回显
AL=输入字符
本功能自动在屏幕上显示所键入的字符
02H
写字符到标准输出设备
DL=要显示的ASCII字符
09H
显示字符串
DS:DX=字符串起始地址
字符串必须以‘$’符结束
0AH
从键盘输入一串字符到缓冲区
DS:DX=自定义的缓冲区首地址
缓冲区的第一个字节包含缓冲区的长度,第二个字节为实际输入的字符个数(不含最后一个回车符),由系统回填,从第三个字节开始到缓冲区的末尾包括输入的字符串以及回车符(必须以回车符结束)
2.2.2、数据存储格式
在数据段里定义记录表,用来保存每一个学员的信息记录,这里给每一个学员分配存储空间来存储他的信息,每条记录具体情况如下所示:
学号
姓名
成绩
换行
0
1
2
3
…
12
15
16
0
0 0 1
yuyi
90
0a
0d
1
0 0 2
cindy
88
0a
0d
2.2.3、程序全代码:
————————————————————————————————————
;武汉科技大学信息科学与工程学院自动化1201余义 指导老师:程磊
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节
STACKS ENDS
DATA SEGMENT
TIPS0 DB 'Tips:',0DH,0AH,'$'
TIPS1 DB ' SEX: 1:male 0:female',0DH,0AH,'$'
TIPS3 DB ' Please input ID:$'
TIPS4 DB ' Please enter "r" to return$'
TIPS5 DB ' Please enter "r" to return,"c" to continue$'
ID DB ' ID: $'
NAM DB ' NAME: $'
SEX DB ' SEX: $'
SCORE DB 'SCORE: $'
FID DW ? ;文件号
SEXM DB 'man $'
SEXF DB 'womam $'
MESS1 DB ' WUST Student Grade Management System YUYI ID:201204134019 ',0AH,0DH,'$'
MESS2 DB '*********************Mr.CHEN*****************WELCOME************', 0AH,0DH,'$'
MESS3 DB '** insert (i) ** ** ** ** ** ** ***** ** ',0AH,0DH,'$' ;插
MESS4 DB '** delete (d) * * * * * ** ',0AH,0DH,'$'
MESS5 DB '** query (q) * * * * * ** ',0AH,0DH,'$'
MESS6 DB '** list (l) * * * * * ** ',0AH,0DH,'$'
MESS7 DB '** exit (e) * *** * ***** **',0AH,0DH,'$' ;退
MESS8 DB '****************************************************************' ,0AH,0DH,'$'
MESS9 DB 'please chose I\M\D\Q\L\E above all: ','$' ;输入选择功能
ID_LENGTH EQU 4 ;配置信息 ID4位数
NAM_LENGTH EQU 10 ;名字,10个字符
SEX_LENGTH EQU 1 ;性别,1位
SCORE_LENGTH EQU 5 ;分数,5位,范围为0-100
STU_LENGTH DW ? ;每条学生信息总长度
STU_LENGTH_ADD1 DW ?
NAM_SEX_SCORE_LENGTH DW ?
DEL DB 30 DUP (' ') ;清空信息用
DEL_DONE DB ' you hace deleted !$'
ERR DB ' Data error,Please input again!$' ;错误提示信息
NOSTU DB ' Sorry,there is no this studnet!$'
ERR_NO DB ' Sorry,No student information!$'
ERR_SAME DB ' The ID have recorded,please input again!$'
NEWF DB 0DH,0AH,0DH,0AH,' Warning: this operation will empty all your data!',0DH,0AH,0DH,0AH,' Will you continue? (y:empty,other key:return):$'
FPATH DB 'c:\masm615\grade.txt',0 ;数据库文本
STR DB 50 ;缓冲区str
DB ?
DB 50 DUP (?)
STR0 DB 50 DUP (?) ;缓冲区str0
ENTER DB ' $' ;空格
TMP DW 0 ;是否为空标志信息
SC DB 0 ;分数保护处用
DATA ENDS
TAB MACRO ;换行
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
ENDM
CREATEF MACRO FILE_ID,FILE_PATH ;创建文件([传入]文件号、[传入]文件路径)
MOV AH,3CH
MOV CX,00H ;普通文件
LEA DX,FILE_PATH
INT 21H
MOV FILE_ID,AX
ENDM
OPENF MACRO FILE_ID,FILE_PATH ;打开文件([传入]文件号、[传入]文件路径)
MOV AL,2 ;读写文式打开
MOV AH,3DH
LEA DX,FILE_PATH
INT 21H
MOV FILE_ID,AX
ENDM
CLOSEF MACRO FILE_ID ;关闭文件([传入]文件号)
MOV BX,FILE_ID
MOV AH,3EH
INT 21H
ENDM
READF MACRO FILE_ID,TEMP,NUM ;读文件([传入]文件号、[传入]缓冲区、[传入]字节数)
MOV BX,FILE_ID
LEA DX,TEMP
MOV AX,NUM
MOV CX,AX
MOV AH,3FH
INT 21H
ENDM
WRITEF MACRO FILE_ID,TEMP,NUM ;写文件([传入]文件号、[传入]缓冲区、[传入]字节数)
MOV BX,FILE_ID
MOV CX,NUM
LEA DX,TEMP[2]
MOV AH,40H
INT 21H
ENDM
MOVEF MACRO FILE_ID,STYPE,HIGEC,LOWD ;移动文件指针([传入]文件号、[传入]移动方式、[传入]偏移字节(高位)[传入]偏移字节(低位))
MOV BX,FILE_ID
MOV AH,42H
MOV AL,STYPE ;尾+偏移量方式
MOV CX,HIGEC ;偏移字节(高位)
MOV DX,LOWD ;偏移字节(低位)
INT 21H
ENDM
INPUT MACRO BUFFER,LENGTH ;输入字符串([传入]字符串名、[返回]字符串长度)
MOV AH,10
LEA DX,BUFFER
INT 21H
MOV LENGTH,BUFFER[1]
ENDM
SHOW MACRO BUFFER ;显示字符串([传入]字符串名)
MOV AH,9
LEA DX,BUFFER
INT 21H
ENDM
STAK SEGMENT STACK
DB 200 DUP (?)
STAK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
SHOW_EXIT PROC NEAR ;提示按r退出
PUSH AX
PUSH BX
PUSH CX
PUSH DX
TAB
SHOW TIPS4
EXIT_1: MOV AH,7
INT 21H
CMP AL,'r'
JNZ EXIT_1
POP DX
POP CX
POP BX
POP AX
RET
SHOW_EXIT ENDP
SHOW_EC PROC NEAR ;询问退出还是继续
PUSH AX
PUSH BX
PUSH CX
PUSH DX
TAB
SHOW TIPS5
EXIT_2: MOV AH,7
INT 21H
CMP AL,'r'
JZ EXIT_4
CMP AL,'c'
JNZ EXIT_2
CALL INSERT
EXIT_4: POP DX
POP CX
POP BX
POP AX
RET
SHOW_EC ENDP
SHOW_ERR PROC NEAR ;显示出错信息子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
TAB
SHOW ERR
TAB
POP DX
POP CX
POP BX
POP AX
RET
SHOW_ERR ENDP
RE_TMP PROC NEAR ;用空格初始化缓冲区子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,50
MOV BX,1
RE: INC BX
MOV STR[BX],' '
LOOP RE
POP DX
POP CX
POP BX
POP AX
RET
RE_TMP ENDP
SHOW_STU PROC NEAR ;显示学生信息子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
SHOW ID ;ID
MOV CX,ID_LENGTH
MOV BX,-1
SH_ID: INC BX
MOV DL,STR0[BX]
MOV AH,2
INT 21H
LOOP SH_ID
SHOW ENTER
SHOW NAM ;NAME
MOV CX,NAM_LENGTH
MOV BX,ID_LENGTH
DEC BX
SH_NAME: INC BX
MOV DL,STR0[BX]
MOV AH,2
INT 21H
LOOP SH_NAME
SHOW ENTER
SHOW SEX ;SEX
MOV BX,ID_LENGTH
ADD BX,NAM_LENGTH
MOV DL,STR0[BX]
CMP DL,'1' ; 1显示male, 0显示female
JNZ SEX_F
SHOW SEXM
JMP NN
SEX_F: SHOW SEXF
NN: SHOW ENTER
SHOW SCORE ;SCORE
MOV CX,SCORE_LENGTH
MOV BX,ID_LENGTH
ADD BX,NAM_LENGTH
SH_SCORE: INC BX
MOV DL,STR0[BX]
MOV AH,2
INT 21H
LOOP SH_SCORE
POP DX
POP CX
POP BX
POP AX
RET
SHOW_STU ENDP
;-insert录入-
INSERT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
TAB
SHOW TIPS0 ;显示提示信息
SHOW TIPS1
TAB
OPENF FID,FPATH ;打开文件
IN_ID: SHOW ID ; 学号
INPUT STR,BL ;向缓冲区输入ID
CMP BL,ID_LENGTH ;看ID是否合法
JZ L1
JNZ ERR_ID
ERR_SA: ;错误处理
TAB
SHOW ERR_SAME
TAB
TAB
JMP IN_ID
ERR_ID:
TAB
CALL SHOW_ERR
TAB
JMP IN_ID
L1: ;ID判断只能为数字
MOV CX,ID_LENGTH
LEA SI,STR+2
LN: MOV AL,BYTE PTR[SI]
CMP AL,'0'
JB ERR_ID
CMP AL,'9'
JA ERR_ID
INC SI
LOOP LN
MOVEF FID,0,0,0 ;指针移到文件首
IA:
MOVEF FID,1,0,5
IB: READF FID,STR0,STU_LENGTH ;读取学生信息
CMP AX,0 ;文件是否结束
JNZ IL1
JMP IC ;没有重复学号,可以插入
IL1: LEA SI,STR0
LEA DI,STR
INC DI
DEC SI
MOV CX,ID_LENGTH
IL2: INC SI
INC DI
MOV AL,BYTE PTR [DI]
CMP AL,BYTE PTR [SI]
JNZ IA ;不符合条件读取下一个同学信息
LOOPZ IL2
JMP ERR_SA ;有重复学号
IC: MOVEF FID,2,0,5
WRITEF FID,STR,ID_LENGTH ;数据合法则写入数据
TAB
IN_NAM: SHOW NAM ;姓名
CALL RE_TMP ;初始化缓冲区
INPUT STR,BL
ADD BL,2 ;去掉回车
MOV BH,0
MOV SI,BX
MOV STR[SI],' '
SUB BL,2
CMP BL,NAM_LENGTH
JNA L2
ERR_NAM:
CALL SHOW_ERR
JMP IN_NAM
L2: CMP STR[2],' ' ;姓名第一个字符不为空
JZ ERR_NAM
CMP STR[2],'z'
JA ERR_NAM
CMP STR[2],'A'
JB ERR_NAM
CMP STR[2],'a'
JNB III
CMP STR[2],'Z'
JA ERR_NAM
CMP STR[2],'A'
JB ERR_NAM
III: MOV CX,NAM_LENGTH
MOV BX,2
II0: INC BX
DEC CX
CMP STR[BX],'z'
JA ERR_NAM
CMP STR[BX],' '
JB ERR_NAM
CMP STR[BX],'a'
JNB II0
CMP STR[BX],'Z'
JA ERR_NAM
CMP STR[BX],'A'
JNB II0
CMP STR[BX],' '
JNZ ERR_NAM
CMP CX,0
JNZ II0
WRITEF FID,STR,NAM_LENGTH
TAB
IN_SEX: S
展开阅读全文