| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2513 人关注过本帖
标题:想请大神帮忙看看这个程序有什么错误,运行的时候显示有六个
只看楼主 加入收藏
晨小料
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-7-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
想请大神帮忙看看这个程序有什么错误,运行的时候显示有六个
功能描述:
1、    对学生成绩记录进行检索(按学号、姓名);
2、    成绩排序(按总成绩降序排列)。
编程提示:
1、    预先建立一个成绩文件,要求至少30条记录;
2、    每条记录有6个字段,序号、学号、姓名、三门课成绩;
3、    姓名可用字母或拼音代替。

data    segment
endcde db 0
x      db 0
row    db 01
clrf   db 13,10,'$'
student label byte                ;学生表的定义
maxlen  db    30
namelen db    ?
namerec db    30 dup(),0dh,0ah
numlen  db    ?
numrec  db    30 dup(),0dh,0ah
xuhaolen db   ?
xuhaorec db   30 dup(),0dh,0ah
grade1   db   ?
grade1rec   db   30 dup(),0dh,0ah
grade2   db   ?
grade2rec   db   30 dup(),0dh,0ah
grade3   db   ?
grade3rec   db   30 dup(),0dh,0ah
grade4   db   ?
grade4rec   db   30 dup(),0dh,0ah ;用以保存总成绩
handle   dw  ?                      ;用以保存文件代号
prompt1  db  'name ?'
prompt2  db  'num ?'
prompt3  db  'xuhao ?'
prompt4  db  'grade1 ?'
prompt5  db  'grade2 ?'
prompt6  db  'grade3 ?'
students db 'd:\stu.dat',0          ;文件名为students存在d盘下,文件属性为0
openerror db 'error',0dh,0ah,'$'
writherror db 'error',0dh,0ah,'$'
readerroe  db 'error',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov es,ax
call CREATH
call readh
call maingrade
call Reorder
call showgradesreen
call clseh
code ends
end start
CREATH proc near     ;建立文件
mov ah,3ch           ;DOS文件建立3ch号功能调用
mov cx,0             ;文件属性与上述定义一致
lea dx,students
int 21h
jc  a1
mov handle,ax
ret
al:
lea dx,openerror
call errm
ret
creath endp          ;建立文件结束
WRITH proc near      ;写文件或设备
mov ah,40h
mov bx,handle
mov cx,30
lea dx,namerec       ;输入学生信息
lea dx,numrec
lea dx,xuhaorec
lea dx,grade1rec
lea dx,grade2rec
lea dx,grade3rec
int 21h
jnc b1                ;如果没有进位(输入正确),则跳转到b1
lea dx,writherror
call errm
mov namelen,0
b1:
ret
writh endp            ;写文件或设备子程序结束
READH proc near       ;读文件或设备子程序
mov ah,3fh
mov bx,handle
mov cx,30
lea dx,namerec       ;读取学生信息
lea dx,numrec
lea dx,xuhaorec
lea dx,grade1rec
lea dx,grade2rec
lea dx,grade3rec
int 21h
jc c1
c1:
lea dx,readerror
call errm
cmp ax,0
je c2
c2:
mov endcde,01
ret
cmp namerec,1ah       ;是否有结束标志(1ah是人为设置的结束标志?)   
je c2
cmp numrec,1ah     
je c2
cmp xuhaorec,1ah     
je c2
cmp grade1rec,1ah     
je c2
cmp grade2rec,1ah     
je c2
cmp grade3rec,1ah     
je c2
readh endp           ;读取文件子程序结束
Maingrade proc near  ;计算总成绩
lea bx,grade1rec
mov cx,30
loop0:                  ;将三门成绩相加
add [bx+x],grade2rec+x
add [bx+x],grade3rec+x
mov grade4rec,[bx+x]
inc x
loop loop0
maingrade endp       ;计算总成绩子程序结束
Reorder proc near    ;按总成绩降序排列
mov cx,30
dec cx
loop1:
mov di,cx
mov x,0
loop2:
mov al,grade4rec+x
cmp al,grade4rec+x+1
jb cotinue
xchg al,grade4rec+x+1
mov grade4rec+x,ax
cotonue:
inc x
loop loop2
mov cx,di
loop loop1
ret
reorder endp       ;按总成绩降序排列子程序结束
showgradescreen proc near  ;将成绩显示在屏幕上
mov cx,30
mov x,0
lea [al],grade4rec
loop3:
mov ah,02h
mov dl,[al+x]
inc x
int 21h
loop loop3
ret
showgradescreen endp     ;将成绩显示在屏幕上子程序结束
Errm proc near           ;错误调整
mov ah,40h
mov bx,01
mov cx,30
int 21h
mov errcde,01            ;回送给errcde 01,说明不是第一次就写入文件成功
ret
errm endp                ;错误调整子程序结束
clseh proc near          ;关闭文件
mov namerec,1ah
call writh
mov ah,3eh
mov bx,handle
int 21h
mov numrec,1ah
call writh
mov ah,3eh
mov bx,handle
int 21h
mov xuhaorec,1ah
call writh
mov ah,3eh
mov bx,handle
int 21h
mov grade1rec,1ah
call writh
mov ah,3eh
mov bx,handle
int 21h
mov grade2rec,1ah
call writh
mov ah,3eh
mov bx,handle
int 21h
mov grade3rec,1ah
call writh
mov ah,3eh
mov bx,handle
int 21h
ret
clseh endp              ;关闭文件程序结束
proch proc near         ;键盘接受输入
mov ah,40h
mov bx,01
mov cx,06
lea dx,prompt1
lea dx,prompt2
lea dx,prompt3
lea dx,prompt4
lea dx,prompt5
lea dx,prompt6
int 21h
mov ah,0ah
lea dx,student
int 21h
cmp namelen,0
jne d1
cmp numlen,0
jne d2
cmp xuhaolen,0
jne d3
cmp grade1len,0
jne d4
cmp grade2len,0
jne d5
cmp grade3len,0
jne d6
ret
d1:
mov al,20h
sub ch,ch
mov cl,namelen
lea di,student
add di,cx
neg cx
add cx,30
cld
rep stosb
call writh
call scrl
d2:
mov al,20h
sub ch,ch
mov cl,numlen
lea di,student
add di,cx
neg cx
add cx,30
cld
rep stosb
call writh
call scrl
d3:
mov al,20h
sub ch,ch
mov cl,xuhaolen
lea di,student
add di,cx
neg cx
add cx,30
cld
rep stosb
call writh
call scrl
d4:
mov al,20h
sub ch,ch
mov cl,grade1len
lea di,student
add di,cx
neg cx
add cx,30
cld
rep stosb
call writh
call scrl
d5:
mov al,20h
sub ch,ch
mov cl,grade2len
lea di,student
add di,cx
neg cx
add cx,30
cld
rep stosb
call writh
call scrl
d6:
mov al,20h
sub ch,ch
mov cl,grade3len
lea di,student
add di,cx
neg cx
add cx,30
cld
rep stosb
call writh
call scrl
ret
proch endp           ;键盘输入程序结束
scrl proc near       ;检查名册子程序
cmp  row,18h
jae f1
mov ah,09h
lea dx,clrf
int 21h
inc row
ret
f1:
mov ax,0601h
call scren
call curs
ret
scrl endp           ;检查名册子程序结束
scren proc near     ;
mov bh,1eh          ;??bh???
mov cx,0            ;????????
mov dx,184fh        ;????????????
int 10h             ;????????????
ret
scren endp          ;结束
curs proc near      ;????(同上一子程序,看不懂bh是什么? 10h是什么???)
mov ah,02
mov bh,0
mov dh,row
mov dl,0
int 10h
ret
curs endp           ;????????

[ 本帖最后由 晨小料 于 2014-7-3 08:59 编辑 ]
搜索更多相关主题的帖子: 总成绩 记录 三门 姓名 
2014-07-03 08:50
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
调用中断的代码都已经不适用了

DO IT YOURSELF !
2014-07-03 16:36
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:10 
需要继承和发展,否则讨论问题不方便,
读懂楼主的程序需要九牛二虎之力,
记住程序中的错误是有价值的,限期整改。
2014-07-05 14:39
快速回复:想请大神帮忙看看这个程序有什么错误,运行的时候显示有六个
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017759 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved