📄 form.asm
字号:
include macro.lib
extrn fill:far,rectangle:far,horizontal:far,vertical:far
extrn clearscreen_in:far
extrn printf:far,printf1:far,printf2:far,printf3:far,putchar:far,putint:far
extrn store_m:far,restore_m:far
extrn busy:byte,mousex:word,mousey:word,num_scroll:word
extrn chinese_nopass:word,maths_nopass:word,line:word,boy_num:word,lady_num:word
public try_form,write_one_record,draw_table,draw_ge,write_form1,tongji_form1
public tongji_form2,write_form2,draw_form1,draw_form2,restore_line
data segment para public 'data'
string1 db '系号',0,0
string2 db '学号',0,0
string3 db '姓名',0,0
string4 db '性别',0,0
string5 db '语文',0,0
string6 db '数学',0,0
string7 db '总分',0,0
string8 db '平均分',0,0
string9 db '名次',0,0
form1_heading1 db '系号',0,0
form1_heading2 db '语文不及格人数',0,0
form1_heading3 db '数学不及格人数',0,0
form2_heading1 db '系号',0,0
form2_heading2 db '男生人数',0,0
form2_heading3 db '女生人数',0,0
form2_heading4 db '总数',0,0
data ends
code segment public 'code'
assume ds:data,cs:code
.386
draw_table proc far
pusha
rect 120,79,200,99,<RGB 225,128,0>
out_hz 140,82,string1,<RGB 255,255,255>
rect 202,79,300,99, <RGB 225,128,0>
out_hz 240,82,string2,<RGB 255,255,255>
rect 302,79,400,99,<RGB 225,128,0>
out_hz 345,82,string3,<RGB 255,255,255>
rect 402,79,450,99, <RGB 225,128,0>
out_hz 415,82,string4,<RGB 255,255,255>
rect 452,79,500,99, <RGB 225,128,0>
out_hz 465,82,string5,<RGB 255,255,255>
rect 502,79,550,99, <RGB 225,128,0>
out_hz 515,82,string6,<RGB 255,255,255>
rect 552,79,600,99, <RGB 225,128,0>
out_hz 565,82,string7,<RGB 255,255,255>
rect 602,79,670,99, <RGB 225,128,0>
out_hz 620,82,string8,<RGB 255,255,255>
rect 672,79,730,99,<RGB 225,128,0>
out_hz 690,82,string9,<RGB 255,255,255>
call draw_ge
popa
ret
draw_table endp
;画表格
draw_ge proc far
pusha
mov busy,1
call restore_m
MOV SI, P_COPY
background 120,100,730,500,<RGB 50,50,50>
mov ax, 120
mov bx, 120
mov bp, 0h
mov cx, 611
.WHILE AX < 500
call horizontal
add ax, 20
.ENDW
mov ax, 100
mov bp, 0h
mov cx, 401
mov bx, 201
call vertical
mov bx, 301
call vertical
mov bx, 401
call vertical
mov bx,451
call vertical
mov bx,501
call vertical
mov bx, 551
call vertical
mov bx, 601
call vertical
mov bx, 671
call vertical
call store_m
mov busy,0
popa
ret
draw_ge endp
;========================================================================
;入口参数:bx---num_scroll
restore_line proc far
pusha
mov busy,1
call restore_m
mov ax,num_scroll
mov bx,20
mul bx
add ax,100
mov cx,ax
add cx,20
mov bx,121
mov dx,729
dec cx
inc ax
mov si, P_COPY
RGB 50,50,50
call fill
mov ax, 100
mov bp, 0h
mov cx, 401
mov bx, 201
call vertical
mov bx, 301
call vertical
mov bx, 401
call vertical
mov bx,451
call vertical
mov bx,501
call vertical
mov bx, 551
call vertical
mov bx, 601
call vertical
mov bx, 671
call vertical
call store_m
mov busy,0
popa
ret
restore_line endp
;========================================================================
;向表格写一个记录
;入口参数:di,该记录的指针,bx,所在行
write_one_record proc far
pusha
push ds
push es
mov ax, 150
mov si, P_COPY
RGB 0,255,0
call printf1 ;输出系号
add di, 4
mov ax, 205
call printf1 ;输出学号
add di, 9
mov ax, 305
call printf1 ;输出姓名
add di, 10
mov cx, bx
push bx
mov al, [di]
mov bx, 420
call putchar ;输出性别
pop bx
inc di
mov ax, 470 ;输出语文成绩
mov dl, [di]
mov dh, 0
.IF DX < 60
RGB 255,0,0
.ENDIF
call putint
inc di
RGB 0,255,0
mov ax, 520 ;输出数学成绩
mov dl, [di]
mov dh, 0
.IF DX < 60
RGB 255,0,0
.ENDIF
call putint
inc di
RGB 0,255,0
mov ax, 570 ;输出总分
mov dl, [di]
mov dh, 0
call putint
inc di
mov ax, 620 ;输出平均分
mov dl, [di]
mov dh, 0
.IF DX < 60
RGB 255,0,0
.ENDIF
call putint
inc di
mov cx, bx
push bx
mov bx, 644 ;输出小数点
mov al, '.'
call putchar
pop bx
mov ax,652
mov dl, [di]
mov dh, 0
call putint
inc di
mov ax, 690
mov dl, [di]
mov dh, 0
call putint
pop es
pop ds
popa
ret
write_one_record endp
;========================================================================
try_form proc far
push ds
mov ax, data
mov ds, ax
setxy 300,100,500,400
call clearscreen_in
call tongji_form2
PAUSE
pop ds
ret
try_form endp
;=======================================================================
tongji_form1 proc far
pusha
setxy 300,100,500,400
call clearscreen_in
mov SI, P_COPY
rect 250,79,349,99,<RGB 225,128,0>
out_hz 290,82,form1_heading1,<RGB 255,255,255>
rect 351,79,499,99,<RGB 225,128,0>
out_hz 370,82,form1_heading2,<RGB 255,255,255>
rect 501,79,650,99,<RGB 255,128,0>
out_hz 520,82,form1_heading3,<RGB 255,255,255>
call draw_form1
popa
ret
tongji_form1 endp
draw_form1 proc far
pusha
mov busy, 1
mov si, P_COPY
call restore_m
background 250,100,650,500,<RGB 50,50,50>
mov ax, 100
mov bp, 0H
mov bx, 250
mov cx, 400
.WHILE AX < 500
CALL horizontal
add ax, 20
.ENDW
mov ax,100
mov bx,350
mov cx,400
call vertical
mov ax, 100
mov bx, 500
mov cx, 400
call vertical
call store_m
mov busy,0
popa
ret
draw_form1 endp
;输出一行统计结果
;入口参数:chinese_nopass,maths_nopass,line,DI----指向系号字符串
write_form1 proc far
pusha
mov bx, line
mov ax, 290
mov si, P_COPY
RGB 0, 255,0
CALL printf1
add ax, 140
mov dx, chinese_nopass
call putint
add ax , 150
mov dx, maths_nopass
call putint
popa
ret
write_form1 endp
;=======================================================================
tongji_form2 proc far
pusha
setxy 300,100,500,400
call clearscreen_in
mov SI, P_COPY
rect 250,79,349,99,<RGB 225,128,0>
out_hz 290,82,form2_heading1,<RGB 255,255,255>
rect 351,79,449,99,<RGB 225,128,0>
out_hz 370,82,form2_heading2,<RGB 255,255,255>
rect 451,79,550,99,<RGB 255,128,0>
out_hz 470,82,form2_heading3,<RGB 255,255,255>
rect 551,79,650,99,<RGB 225,128,0>
out_hz 570,82,form2_heading4,<RGB 255,255,255>
call draw_form2
popa
ret
tongji_form2 endp
draw_form2 proc far
pusha
mov busy, 1
call restore_m
mov si, P_COPY
background 250,100,650,500,<RGB 50,50,50>
mov ax, 100
mov bp, 0H
mov bx, 250
mov cx, 400
.WHILE AX < 500
CALL horizontal
add ax, 20
.ENDW
mov ax,100
mov bx,350
mov cx,400
.WHILE BX < 650
call vertical
add bx, 100
.ENDW
call store_m
mov busy,0
popa
ret
draw_form2 endp
;输出一行统计结果
;入口参数:boy_num,lady_num,line,DI----指向系号字符串
write_form2 proc far
pusha
mov bx, line
mov ax, 290
mov si, P_COPY
RGB 0, 255,0
CALL printf1
add ax, 100
mov dx, boy_num
call putint
add ax , 100
mov dx, lady_num
call putint
add ax, 100
add dx, boy_num
call putint
popa
ret
write_form2 endp
;=======================================================================
code ends
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -