程序很长,不过功能很齐全,自己把不要的功能删了,里面的子程序部分我都写有注释,很容易看懂。
datarea segment。
english dw 10 dup(?) ;存放英语成绩。
mathematics dw 10 dup(?) ;存放数学成绩。
physical dw 10 dup(?) ;存放物理成绩。
grade dw 10 dup(?)。
rank dw 10 dup(?)。
rank1 dw 10 dup(?)。
rank2 dw 10 dup(?)。
rank3 dw 10 dup(?)。
s5 dw 0。
s6 dw 0。
s7 dw 0。
s8 dw 0。
s9 dw 0。
s10 dw 0。
count1 dw ?
count2 dw ?
count3 dw ?
count4 dw ?。
mess1 db 'Grade of English:$'。
mess2 db 'Grade of Mathematics:$'。
mess3 db 'Grade of Physical:$'。
mess4 db 13,10,'Input Error!Please input repeat.',13,10,'$'。
mess5 db 'Rank student number of English:$'。
mess6 db 'Rank studentnumber of Math:$'。
mess7 db 'Rank studentnumber of Physical:$'。
mess8 db ' Student Grade Management System',0ah,0dh,'$'。
mess9 db 'Plese choose: 1:Continue 2:Exit$'。
mess10 db 'Average grade of English:$'。
mess11 db 'Average grade of Math:$'。
mess12 db 'Average grade of Physical:$'。
mess13 db 'Plese choose: 1:Enter 2:Exit$'。
mess14 db 'Rank of overallscore:$'。
mess15 db 'Rank of student number with overallscore:$'。
mess16 db 'Please input grade(English,Math,Physical):$'。
mess17 db 'People of Englsh grade(<60,60---69,70---79,80---89,90---99,=100):$'。
mess18 db 'People of Math grade(<60,60---69,70---79,80---89,90---99,=100):$'。
mess19 db 'People of Physical grade(<60,60---69,70---79,80---89,90---99,=100):$'。
datarea ends
;*****************************************************************************。
show macro addrs。
lea dx,addrs。
mov ah,9 ;宏定义,显示字符串。
int 21h。
endm
;*******************************************************************************。
prognam segment 。
;*******************************************************************************。
main proc far
assume cs:prognam,ds:datarea。
START:
;设置堆栈为了返回dos
push ds
sub ax,ax
push ax
mov ax,datarea。
mov ds,ax
call clear
mov ah,2 ;调用置光标位置功能。
mov dh,1 ;使光标位置置为位置(1,8)
mov dl,8。
mov bh,0 ;页号为0。
int 10h ;BIOS显示中断调用。
show mess8
call choose。
ret
main endp
;*******************************************************************************。
choose proc near ;菜单选择 。
show mess13 。
call crlf ;调用换行函数。
mov ah,01。
int 21h。
cmp al,31h。
jnz exit。
next17:
call crlf。
show mess16。
call crlf。
call input1 ;英语成绩输入。
call rankp ;英语成绩排序。
call output1 ;英语成绩按学号对应的排名输出。
call input2 ;数学成绩输入。
call rankp1 ;数学成绩排序。
call output2 ;数学成绩按学号对应的排名输出。
call input3 ;物理成绩输入。
call rankp2 ;物理成绩排序。
call output3 ;物理成绩按学号对应的排名输出。
call crlf。
call engrade ;英语平均成绩。
call magrade ;数学平均成绩。
call phgrade ;物理平均成绩。
call crlf。
call encount ;英语各分数段统计。
call output7。
call macount ;数学各分数段统计。
call output8。
call phcount ;物理各分数段统计。
call output9。
call crlf。
call graderank ;计算每个人的总成绩。
call rankp3。
call output5 ;总成绩按其学号对应的排名输出。
call rankg。
call output4 ;总成绩按分数总和从大至小排行输出。
show mess9。
call crlf。
mov ah,01。
int 21h。
cmp al,31h。
jnz exit
jmp next17。
exit:
ret
choose endp
;*******************************************************************************。
input1 proc near ;英语成绩输入。
next18:
show mess1
mov si,0 ;至数组下标为0。
mov count1,0
mov cx,10。
next30:
mov english[si],0。
add si,2。
loop next30。
mov si,0。
enter:
call decibin ;十进制转二进制数。
inc count1 ;count自增1。
cmp dl,',' ;dl里的内容与‘,’相等则转移至store。
je store
cmp dl,13
je exit2
jne error
store:
mov english[si],bx ;将成绩送入储存单元。
add si,2
jmp enter
error:
show mess4
jmp next18。
exit2:
mov english[si],bx。
call crlf
ret
input1 endp
;*******************************************************************************。
input2 proc near ;数学成绩输入。
next19:
show mess2
mov si,0
mov count2,0
mov cx,10。
next31:
mov mathematics[si],0。
add si,2。
loop next31。
mov si,0。
enter1:
call decibin
inc count2
cmp dl,','
je store1
cmp dl,13
je exit3
jne error1
store1:
mov mathematics[si],bx。
add si,2
jmp enter1
error1:
show mess4
jmp next19。
exit3:
mov mathematics[si],bx。
call crlf
ret
input2 endp
;******************************************************************************。
input3 proc near ;物理成绩输入。
next20:
show mess3
mov si,0
mov count3,0
mov cx,10。
next32:
mov physical[si],0。
add si,2。
loop next32。
mov si,0。
enter3:
call decibin
inc count3
cmp dl,','
je store2
cmp dl,13
je exit4
jne error3
store2:
mov physical[si],bx。
add si,2
jmp enter3
error3:
show mess4
jmp next20。
exit4:
mov physical[si],bx。
call crlf
ret
input3 endp
;******************************************************************************。
rankp proc near ;英语成绩排序。
mov di,count1
mov bx,0
loop1:
mov ax,english[bx]。
mov word ptr rank[bx],0。
mov cx,count1
lea si,english。
next:
cmp ax,[si]
jg no_count
inc word ptr rank[bx]。
no_count:
add si,2
loop next
add bx,2
dec di
jne loop1
ret
rankp endp
;*****************************************************************************。
rankp1 proc near ;数学成绩排序。
mov di,count2
mov bx,0
loop2:
mov ax,mathematics[bx]。
mov word ptr rank1[bx],0。
mov cx,count2
lea si,mathematics。
next1:
cmp ax,[si]
jg no_count1
inc word ptr rank1[bx]。
no_count1:
add si,2
loop next1
add bx,2
dec di
jne loop2
ret
rankp1 endp
;*****************************************************************************。
rankp2 proc near ;物理成绩排序。
mov di,count3
mov bx,0
loop3:
mov ax,physical[bx]。
mov word ptr rank2[bx],0。
mov cx,count3
lea si,physical。
next3:
cmp ax,[si]
jg no_count2
inc word ptr rank2[bx]。
no_count2:
add si,2
loop next3
add bx,2
dec di
jne loop3
ret
rankp2 endp
;*****************************************************************************。
rankp3 proc near ;总分数按学号对应的名次输出。
mov di,count4
mov bx,0
loopc:
mov ax,grade[bx]。
mov word ptr rank3[bx],0。
mov cx,count3
lea si,grade
nextc:
cmp ax,[si]
jg no_count3
inc word ptr rank3[bx]。
no_count3:
add si,2
loop nextc
add bx,2
dec di
jne loopc
ret
rankp3 endp
;*****************************************************************************。
output1 proc near ;英语成绩按学号对应的名次输出。
show mess5
mov si,0
mov di,count1
next10:
mov bx,rank[si]。
call binidec
mov dl,','
mov ah,02
int 21h
add si,2
dec di
jnz next10
call crlf
ret
output1 endp
;*****************************************************************************。
output2 proc near ;数学成绩按学号对应的名次输出。
show mess6
mov si,0
mov di,count2
next11:
mov bx,rank1[si]。
call binidec
mov dl,','
mov ah,02
int 21h
add si,2
dec di
jnz next11
call crlf
ret
output2 endp
;*****************************************************************************。
output3 proc near ;物理成绩按学号对应的名次输出。
show mess7
mov si,0
mov di,count3
next13:
mov bx,rank2[si]。
call binidec
mov dl,','
mov ah,02
int 21h
add si,2
dec di
jnz next13
call crlf
ret
output3 endp
;*****************************************************************************。
output4 proc near ;总分成绩按分数排序输出。
show mess14。
mov si,0
mov di,count1
next21:
mov bx,grade[si]。
call binidec
mov dl,','
mov ah,02
int 21h
add si,2
dec di
jnz next21
call crlf
ret
output4 endp
;******************************************************************************。
output5 proc near ;总分成绩按学号排序输出。
show mess15。
mov si,0
mov di,count1
nextb:
mov bx,rank3[si]。
call binidec
mov dl,','
mov ah,02
int 21h
add si,2
dec di
jnz nextb
call crlf
ret
output5 endp
;******************************************************************************。
output7 proc near ;输出英语各分数段人数。
show mess17。
mov bx,s5。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s6。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s7。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s8。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s9。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s10。
call binidec。
call crlf。
ret
output7 endp
;*********************************************************************************。
output8 proc near ;输出数学各分数段人数。
show mess18。
mov bx,s5。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s6。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s7。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s8。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s9。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s10。
call binidec。
call crlf。
ret
output8 endp
;*********************************************************************************。
output9 proc near ;输出物理各分数段成绩。
show mess19。
mov bx,s5。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s6。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s7。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s8。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s9。
call binidec。
mov dl,','。
mov ah,02
int 21h
mov bx,s10。
call binidec。
call crlf。
ret
output9 endp
;*********************************************************************************。
engrade proc near ;计算英语平均成绩。
mov cx,10。
mov bx,0。
mov si,0。
next14:
mov dx,english[si]。
add bx,dx。
add si,2。
loop next14。
lea dx,mess10。
mov ah,09
int 21h
mov cx,1000。
call dec_div。
mov cx,100。
call dec_div。
mov cx,10
call dec_div。
call crlf。
ret
engrade endp
;*****************************************************************************。
magrade proc near ;计算数学平均成绩。
mov cx,10。
mov bx,0。
mov si,0。
next15:
mov dx,mathematics[si]。
add bx,dx。
add si,2。
loop next15。
lea dx,mess11。
mov ah,09
int 21h
mov cx,1000。
call dec_div。
mov cx,100。
call dec_div。
mov cx,10
call dec_div。
call crlf。
ret
magrade endp
;******************************************************************************。
phgrade proc near ;计算物理平均成绩。
mov cx,10。
mov bx,0。
mov si,0。
next16:
mov dx,physical[si]。
add bx,dx。
add si,2。
loop next16。
lea dx,mess12。
mov ah,09
int 21h
mov cx,1000。
call dec_div。
mov cx,100。
call dec_div。
mov cx,10
call dec_div。
call crlf。
ret
phgrade endp
;******************************************************************************。
rankg proc near ;总成绩按进行分数排序。
mov cx,10。
dec cx。
loop4:
mov di,cx。
mov bx,0。
loop5:
mov ax,grade[bx]。
cmp ax,grade[bx+2]。
jge continue。
xchg ax,grade[bx+2]。
mov grade[bx],ax。
continue:
add bx,2。
loop loop5。
mov cx,di。
loop loop4。
ret
rankg endp
;******************************************************************************。
graderank proc near ;个人总成绩分数的和的计算。
mov cx,10。
mov bx,0。
mov si,0。
mov count4,0。
loop10:
mov bx,english[si]。
add bx,mathematics[si]。
add bx,physical[si]。
mov grade[si],bx。
add si,2。
inc count4。
loop loop10。
ret
graderank endp。
;********************************************************************************。
encount proc near ;英语各分数段的统计。
mov s5,0。
mov s6,0。
mov s7,0。
mov s8,0。
mov s9,0。
mov s10,0。
mov cx,10。
mov bx,offset english。
compare:
mov ax,[bx]。
cmp ax,60。
jl five。
cmp ax,70。
jl six。
cmp ax,80。
jl seven。
cmp ax,90。
jl eight。
cmp ax,100。
jne nine。
inc s10。
jmp short change_addr。
nine:
inc s9。
jmp short change_addr。
eight:
inc s8。
jmp short change_addr。
seven:
inc s7。
jmp short change_addr。
six:
inc s6。
jmp short change_addr。
five:
inc s5。
change_addr:
add bx,2。
loop compare。
ret
encount endp
;********************************************************************************。
macount proc near ;数学各分数段的统计。
mov s5,0。
mov s6,0。
mov s7,0。
mov s8,0。
mov s9,0。
mov s10,0。
mov cx,10。
mov bx,offset mathematics。
compare1:
mov ax,[bx]。
cmp ax,60。
jl five1。
cmp ax,70。
jl six1。
cmp ax,80。
jl seven1。
cmp ax,90。
jl eight1。
cmp ax,100。
jne nine1。
inc s10。
jmp short change_addr1。
nine1:
inc s9。
jmp short change_addr1。
eight1:
inc s8。
jmp short change_addr1。
seven1:
inc s7。
jmp short change_addr1。
six1:
inc s6。
jmp short change_addr1。
five1:
inc s5。
change_addr1:
add bx,2。
loop compare1。
ret
macount endp
;********************************************************************************。
phcount proc near ;物理各分数段的统计。
mov s5,0。
mov s6,0。
mov s7,0。
mov s8,0。
mov s9,0。
mov s10,0。
mov cx,10。
mov bx,offset physical。
compare2:
mov ax,[bx]。
cmp ax,60。
jl five2。
cmp ax,70。
jl six2。
cmp ax,80。
jl seven2。
cmp ax,90。
jl eight2。
cmp ax,100。
jne nine2。
inc s10。
jmp short change_addr2。
nine2:
inc s9。
jmp short change_addr2。
eight2:
inc s8。
jmp short change_addr2。
seven2:
inc s7。
jmp short change_addr2。
six2:
inc s6。
jmp short change_addr2。
five2:
inc s5。
change_addr2:
add bx,2。
loop compare2。
ret
phcount endp
;********************************************************************************。
decibin proc near ;二进制转十进制。
mov bx,0 ;将bx里的内容清零。
newchar:
mov ah,1
int 21h ;调用dos,输入字符,字符存于al。
mov dl,al
sub al,30h ;将字符数字转为十进制数字 。
jl exit1 ;小于字符0就转移至exit1。
cmp al,9d ;输入数字与9比较,大于9就转移至exit1。
jg exit1
cbw ;将al符号扩展到ah。
xchg ax,bx ;将ax里的内容和bx里的内容交换。
mov cx,10d 。
mul cx ;al里的内容*10送到ax。
xchg ax,bx 。
add bx,ax
jmp newchar ;转移至newchar,重新输入成绩。
exit1: ret
decibin endp
;*****************************************************************************。
binidec proc near 。
push bx
push cx
push si
push di
mov cx,100d
call dec_div
mov cx,10d
call dec_div
mov cx,1d
call dec_div
pop di
pop si
pop cx
pop bx
ret
binidec endp
;*****************************************************************************。
dec_div proc near。
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ret
dec_div endp
;*****************************************************************************。
crlf proc near
mov dl,0ah ;换行。
mov ah,02h 。
int 21h ;调用dos,显示dl里的内容。
mov dl,0dh ;回车。
mov ah,02h
int 21h
ret
crlf endp
;*****************************************************************************。
clear proc near。
push ax。
push bx。
push cx。
push dx。
mov ah,6 ;调用屏幕初始化或上卷功能。
mov al,0 ;使全屏幕为空白。
mov bh,7 。
mov ch,0。
mov cl,0 ;规定上卷的范围为从左上角(0,0)至右下角(24,79)
mov dh,24。
mov dl,79。
int 10h ;BIOS显示中断调用。
pop dx。
pop cx。
pop bx。
pop ax。
ret
clear endp
;*****************************************************************************。
prognam ends
END START
end
告诉你一个简单的办法,先点工具,宏,录制宏,然后开始操作,在一空白单元格内打一个-30,然后把这个单元格复制起来,再选中A1-A100,再点右键,选选择性粘贴,在下面选那个“加",然后确定。现在你就可以点停止录宏了。然后你想设置一个按钮就插入一个图片也行,插好图片对着图片点右键,里面有一个指定宏,你点一下就可以看到你录的一个宏了。指定好了以后,每点一次这个图片,你那单元格内的数据都会减30。
我想楼主以前没用过java吧,不知道我猜的对不对?如果说错了还请楼主见谅。
先说一下java程序的结构,main函数是程序的入口也可以叫做主函数,其他函数是这个类的方法,但是不叫子函数。一个java程序只执行main函数中写的东西,是不执行楼主所说的子函数的。只有在main方法中调用了类的方法才会执行。如何调用呢?一般情况下是在main方法中ddd d=new ddd();声明一个对象d,然后d.choujiang() 调用这个方法。而楼主写的程序还特别点,即所有的属性和方法前都有static,我不知道楼主是否清楚其含义,既然声明为static的方法,那在调用的时候就不必构件对象,直接在主函数中写ddd.choujiang() 便可以调用。这样可以按楼主的思路继续网下调用其他的方法,程序会顺序网下执行,希望可以帮到楼主。(补充,这样的写法不是面向对象的程序设计思路,建议楼主可以看看java编程思想)
import java.util.Arrays;。
import java.util.Random;。
public class random { 。
public static void main(String[] args) { 。
int[] numArray = new int[30];。
//生成一个存放30个数字的数组。
for(int i=0;i<numArray.length;i++){。
numArray[i]=i+1;。
}
Random random = new Random();。
int randomNum = numArray.length-1;。
int[] array=new int[7];。
for(int i=0;i<array.length;i++){。
int index = random.nextInt(randomNum--);。
array[i]= numArray[index];。
int temp=numArray[index];。
numArray[index]=numArray[randomNum];。
numArray[randomNum]=temp;。
}
Arrays.sort(array);。
for(int i=0;i<array.length;i++){。
System.out.print(array[i]+" ");。
}
}
说下大致思路,就是先弄一个1-30的数组,然后随机去数组里面取数,取完一次以后把本次取的数据往数组尾部放,并把尾部没选过的数字放到中间来,然后缩小检索数组的范围(这样就不会选到选过的数字了)