?? 成績(jī)管理程序.exe.~asm
字號(hào):
DSEG SEGMENT 'DATA'
stu DB 110 DUP(?) ;存放第一至十個(gè)學(xué)生記錄
ave DB 5 DUP(?) ;存放各科平均分和總成績(jī)平均分
poi DB 15 DUP(?) ;存放各分?jǐn)?shù)段人數(shù)
head DB '******The Manage System of Student`s Achievement******',0DH,0AH,0DH,0AH,'$'
choose DB 'Please choose a handle below (Input the number 1 to 7)',0DH,0AH,'$'
menu DB '1.Add 2.Edit 3.Delete 4.Taxis 5.Find 6.Stat. 7.Quit',0DH,0AH,'$'
Add_num DB 'Please input the student`s number(1-255)',0DH,0AH,'$'
Add_cn DB 'Please input chinese score(0-100)',0DH,0AH,'$'
Add_math DB 'Please input math score(0-100)',0DH,0AH,'$'
Add_en DB 'Please input english score(0-100)',0DH,0AH,'$'
Add_confirm1 DB 'These are the infomation what you input',0DH,0AH,'$'
Add_confirm2 DB 'Please confirm you want to save the record(YES:y;NO:n)',0DH,0AH,'$'
AskForEdit DB 'Which record do you want to edit?(Input the student`s number)',0DH,0AH,'$'
Delete_confirm DB 'Please confirm you want to remove the record(YES:y;NO:n)',0DH,0AH,'$'
AskForDelete DB 'Which record do you want to delete?(Input the student`s number)',0DH,0AH,'$'
AskForTaxis DB 'Please choose a way to taxis',0DH,0AH,'$'
AskForTaxis1 DB '1.Single Subject taxis 2.Overall Subject taxis',0DH,0AH,'$'
AskForFind DB 'Which student do you want to find?',0DH,0AH,'$'
AskForFind1 DB '1.Chinese 2.Math 3.English 4.Overall 5.Quit',0DH,0AH,'$'
AskForFind3 DB '1.Find Single person 2.Who fail',0DH,0AH,'$'
AskForStat DB '1.Single subject ave 2.Overall subject ave 3.Sorce segment',0DH,0AH,'$'
DispSingleTaxis DB 'These are the single subject taxis below',0DH,0AH,'$'
ShowAllNum DB 'There are all student`s number below',0DH,0AH,'$'
Err_full DB 'The record is full',0DH,0AH,'$'
Err_notnum DB 'Only can input number',0DH,0AH,'$'
Err_empty DB 'The record can`t be empty',0DH,0AH,'$'
Err_toolarge DB 'The number must less then 255',0DH,0AH,'$'
Err_toolarge1 DB 'The number must less then 100',0DH,0AH,'$'
Err_WrongNum DB 'The first number can`t be 0',0DH,0AH,'$'
Err_WrongNum1 DB 'You input a wrong number',0DH,0AH,'$'
Err_WrongChoose DB 'Must input the integer 1-7',0DH,0AH,'$'
Err_yn DB 'You must input `y` or `n` ',0DH,0AH,'$'
Err_CantFindRecord DB 'Can not find the record',0DH,0AH,'$'
Err_Not1or2 DB 'You only can input 1 or 2',0DH,0AH,'$'
Err_Not12345 DB 'You only can input 1,2,3,4,5',0DH,0AH,'$'
Err_Not123 DB 'You only can input 1,2,3',0DH,0AH,'$'
Err_SameNum DB 'The student`s num is already existed',0DH,0AH,'$'
num DB 'Number: ','$'
cn_score DB 'Chinese Score: ','$'
cn_place DB 'Chinese Place: ','$'
math_score DB 'Math Score: ','$'
math_place DB 'Math Place: ','$'
en_score DB 'English Score: ','$'
en_place DB 'English Place: ','$'
AverageScore DB 'Average Score: ','$'
Score DB 'Score: ','$'
Place DB 'Place: ','$'
Chinese DB 'Chinese: ','$'
Math DB 'Math: ','$'
English DB 'English: ','$'
Overall DB 'Overall: ','$'
T59 DB '<60 : ','$'
T60_69 DB '60-69 : ','$'
T70_79 DB '70-79 : ','$'
T80_89 DB '80-89 : ','$'
T90_100 DB '90-100 : ','$'
HowManyRecord DB ?
Temp DB 10 DUP(?)
DSEG ENDS
SSEG SEGMENT STACK 'STACK'
db 256 DUP(0)
SSEG ENDS
CSEG SEGMENT 'CODE'
START:
; set segment registers:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX
;程序頭
LEA DX, head
CALL DISPCHS ;顯示程序名
;主菜單
Begin:LEA DX, choose
CALL DISPCHS ;顯示提示信息
LEA DX, menu
CALL DISPCHS ;顯示選擇菜單
MOV AH,01H ;從鍵盤輸入一個(gè)字符到AL并回顯
INT 21H
CMP AL,'1'
JE AddInfo ;如果=1,跳到"錄入(Add)"模塊
CMP AL,'2'
JE EditInfo ;如果=2,跳到"修改(Edit)"模塊
CMP AL,'3'
JE DeleteInfo ;如果=3,跳到"刪除(Delete)"模塊
CMP AL,'4'
JE Taxis ;如果=4,跳到"排序(Taxis)"模塊
CMP AL,'5'
JE Find ;如果=5,跳到"查找(Find)"模塊
CMP AL,'6'
JE Stat. ;如果=6,跳到"統(tǒng)計(jì)(Stat.)"模塊
CMP AL,'7'
JE Quit
JMP Error ;否則就無條件轉(zhuǎn)移到ERROR
;************功能塊**************
;--------------------------------------------錄入(Add)-------------------------------------
AddInfo:
CALL ENTER
;;;;;;;;;;;;;;;;;;;找空塊;;;;;;;;;;;;;;;;;
MOV SI,0
FullorNot:CMP stu[SI],0
JE num_Add
ADD SI,11
CMP SI,122;判斷記錄是否滿,是則跳到“輸入學(xué)生編號(hào)”塊,否則返回“主界面”
JNE FullorNot
LEA DX,Err_full
CALL ENTER
CALL DISPCHS
JMP Begin
;;;;;;;;;;;;;;;;輸入學(xué)生編號(hào);;;;;;;;;;;;;;
;提示語句,提示要輸入學(xué)生編號(hào)
num_Add:MOV CX,0 ;記錄字符數(shù)目
LEA DX, Add_num
CALL DISPCHS
CALL InputNum ;調(diào)用子程序“輸入編號(hào)”
CMP DI,1;出口參數(shù)DI為1是,表示輸入出錯(cuò),返回提示語句,要求重新輸入
JE num_Add
;確認(rèn)學(xué)號(hào)是否已經(jīng)存在
LEA DI,stu
A:CMP BL,[DI]
JNE B
CMP DI,SI
JE C
LEA DX,Err_SameNum
CALL ENTER
CALL DISPCHS
JMP num_Add
B:ADD DI,11
CMP DI,110
JNE A
;記錄學(xué)生編號(hào)
C: MOV stu[SI],BL
;;;;;;;;;;;;;;;輸入語文成績(jī);;;;;;;;;;;;;;
;提示語句,提示要輸入語文成績(jī)
cn_Add:MOV CX,0 ;記錄字符數(shù)目
LEA DX,Add_cn ;打印提示語句
CALL DISPCHS
CALL InputScore
CMP DI,1 ;出口參數(shù)DI為1是,表示輸入出錯(cuò),返回提示語句,要求重新輸入
JE cn_Add
;記錄語文成績(jī)
MOV stu[SI+1],BL
;;;;;;;;;;;;;;;輸入數(shù)學(xué)成績(jī);;;;;;;;;;;;;;
;提示語句,提示要輸入數(shù)學(xué)成績(jī)
math_Add:LEA DX,Add_math
CALL DISPCHS
CALL InputScore
CMP DI,1
JE math_Add
;記錄數(shù)學(xué)成績(jī)
MOV stu[SI+3],BL
;;;;;;;;;;;;;;;輸入英語成績(jī);;;;;;;;;;;;;;
;提示語句,提示要輸入英語成績(jī)
en_Add:LEA DX,Add_en
CALL DISPCHS
CALL InputScore
CMP DI,1
JE en_Add
;記錄英語成績(jī)
MOV stu[SI+5],BL
;;;;;;;;;;;;計(jì)算總成績(jī)和平均成績(jī);;;;;;;;;;;;
MOV AX,0
MOV CX,2
MOV DL,3
MOV DI,SI
INC DI
MOV AL,[DI]
hahaha:MOV BL,[DI+2]
ADD AL,BL
JNC lalala
INC AH
lalala:INC DI
INC DI
LOOP hahaha
MOV stu[SI+7],AL;記錄總成績(jī)
MOV stu[SI+8],AH
DIV DL
MOV stu[SI+10],AL;記錄平均成績(jī)
;;;;;;;;;;;;;;;;;;;;確認(rèn)輸入;;;;;;;;;;;;;;;;;;;;;
;輸出所輸入的記錄,要求用戶確認(rèn)是否正確
LEA DX,Add_confirm1
CALL DISPCHS
MOV DI,0 ;記錄輸出到哪項(xiàng)
confirm_repeat:MOV AX,0
CMP DI,0
JNE not0
LEA DX,num
CALL DISPCHS
MOV AL,stu[SI]
JMP GO
not0:CMP DI,1
JNE not1
LEA DX,cn_score
CALL DISPCHS
MOV AL,stu[SI+1]
JMP GO
not1:CMP DI,2
JNE not2
LEA DX,math_score
CALL DISPCHS
MOV AL,stu[SI+3]
JMP GO
not2:
LEA DX,en_score
CALL DISPCHS
MOV AL,stu[SI+5]
GO: CALL ToAsc2&Show
CALL ENTER
INC DI
CMP DI,3
JNA confirm_repeat
ha:LEA DX,Add_confirm2
CALL DISPCHS
MOV AH,01H
INT 21H
CALL ENTER
CMP AL,'n'
JNE notn
JMP num_Add
notn:CMP AL,'y'
JE isy
LEA DX,Err_yn
CALL DISPCHS
JMP ha
isy:MOV AL,HowManyRecord
INC AL
MOV HowManyRecord,AL
CALL ClearPlace
JMP Begin
;--------------------------------------編輯(Edit)--------------------------------
EditInfo: CALL ENTER
CALL DISPALLNUM
edit_begin:LEA DX,AskForEdit
CALL DISPCHS
CALL InputNum
CMP DI,1
JE edit_begin
;查找相應(yīng)記錄
MOV SI,0
edit_GO:CMP BL,stu[SI]
JNE edit_again
MOV AL,HowManyRecord
DEC AL
MOV HowManyRecord,AL
JMP num_Add
edit_again:ADD SI,11
CMP SI,110
JNE edit_GO
LEA DX,Err_CantFindRecord
CALL DISPCHS
JMP Begin
;-------------------------------------刪除(Delete)--------------------------------
DeleteInfo: CALL ENTER
CALL DISPALLNUM
delete_begin:LEA DX,AskForDelete
CALL ENTER
CALL DISPCHS
CALL InputNum
CMP DI,1
JE delete_begin
;刪除相應(yīng)記錄
MOV SI,0
delete_GO:CMP BL,stu[SI]
JNE delete_again
;確認(rèn)是否真的刪除
LEA DX,Delete_confirm
CALL DISPCHS
ho: MOV AH,01H
INT 21H
CMP AL,'n'
JNE d_notn
CALL ENTER
JMP Begin
d_notn:CMP AL,'y'
JE d_isy
LEA DX,Err_yn
CALL ENTER
CALL DISPCHS
JMP ho
;將該記錄的所有項(xiàng)置0
d_isy:MOV CX,11
ooo:MOV stu[SI],0
INC SI
LOOP ooo
MOV AL,HowManyRecord
DEC AL
MOV HowManyRecord,AL
CALL ClearPlace
CALL ENTER
JMP Begin
delete_again:ADD SI,11
CMP SI,110
JNE delete_GO
LEA DX,Err_CantFindRecord
CALL DISPCHS
JMP Begin
;---------------------------------排序(Taxis)-------------------------------------
LEA DX,AskForTaxis
CALL DISPCHS
LEA DX,AskForTaxis1
CALL DISPCHS
MOV AH,01H
INT 21H
CMP AL,31H
JE Choose1
CMP AL,32H
JE Choose2
LEA DX,Err_Not1or2
CALL DISPCHS
JMP Taxis
Choose1:MOV DL,1
CALL TheTaxis
MOV DL,2
CALL TheTaxis
MOV DL,3
CALL TheTaxis
;顯示單科排名情況
LEA DX,DispSingleTaxis
CALL ENTER
CALL DISPCHS
LEA SI,stu
X:CMP [SI],0
JE Z
CALL ENTER
MOV DI,0 ;記錄輸出到哪項(xiàng)
taxis_repeat:MOV AX,0
CMP DI,0
JNE taxis_not0
LEA DX,num
CALL DISPCHS
MOV AL,stu[SI]
JMP taxis_GO
taxis_not0:CMP DI,1
JNE taxis_not1
LEA DX,cn_place
CALL ENTER
CALL DISPCHS
MOV AL,stu[SI+2]
JMP taxis_GO
taxis_not1:CMP DI,2
JNE taxis_not2
LEA DX,math_place
CALL DISPCHS
MOV AL,stu[SI+4]
JMP taxis_GO
taxis_not2:LEA DX,en_place
CALL DISPCHS
MOV AL,stu[SI+6]
taxis_GO: MOV AH,0
CALL ToAsc2&Show
CALL TAB
INC DI
CMP DI,3
JNA taxis_repeat
Z:ADD SI,11
CMP SI,110
JNE X
CALL ENTER
JMP Begin
;總成績(jī)排序
Choose2:MOV CL,0 ;當(dāng)前排到第幾名
Choose21:INC CL
LEA DI,stu+7
LEA BX,temp+11;BX用來存放該輪排序中暫時(shí)最打的數(shù)的偏移地址
MOV [BX],0
MOV [BX+1],0
MOV [BX+2],0
LEA SI,stu
Choose22:CMP [SI],0 ;過濾出空記錄
JE next22
CMP [DI+2],0 ;過濾出已經(jīng)排了名的
JNE next22
;把最大的那個(gè)數(shù)的偏移地址放到BX
MOV AX,[BX]
CMP AX,[DI]
JNB next22
MOV BX,DI
next22:ADD SI,11
ADD DI,11
CMP SI,110
JNE Choose22
;賦予它和與它同分的所有同學(xué)的該科排名
MOV [BX+2],CL
MOV AX,[BX]
LEA SI,stu
LEA DI,stu+7
huao2:CMP [SI],0
JE xiao2
CMP [DI+2],0
JNE xiao2
CMP AX,[DI]
JNE xiao2
MOV [DI+2],CL
xiao2:ADD SI,11
ADD DI,11
CMP SI,110
JNE huao2
CMP CL,HowManyRecord
JB Choose21
;顯示總成績(jī)排名
LEA DX,DispSingleTaxis
CALL ENTER
CALL DISPCHS
LEA SI,stu
X2:MOV CL,2
CMP [SI],0
JE Z2
CALL ENTER
LEA DX,num
CALL DISPCHS
MOV AL,stu[SI]
JMP taxis_GO2
k:MOV AL,stu[SI+9]
taxis_GO2:MOV AH,0
CALL ToAsc2&Show
CALL TAB
LOOP k
Z2:ADD SI,11
CMP SI,110
JNE X2
CALL ENTER
JMP Begin
;-----------------------------------查找(Find)-------------------------------------
Find: CALL ENTER
LEA DX,AskForFind3
CALL DISPCHS
MOV AH,01H
INT 21H
CALL ENTER
CMP AL,31H
JE Find1
CMP AL,32H
JE Find2
LEA DX,Err_not1or2
CALL DISPCHS
JMP Find
Find1:CALL DISPALLNUM
Find_again:LEA DX,AskForFind
CALL DISPCHS
CALL InputNum
CALL ENTER
CMP DI,1
JE Find_again
LEA SI,stu
Find_begin:CMP BL,[SI]
JE Find_ok
ADD SI,11
CMP SI,110
JNE Find_begin
LEA DX,Err_CantFindRecord
CALL DISPCHS
JMP Find_exit
Find_ok:LEA DX,AskForFind1
CALL DISPCHS
MOV AH,01H
INT 21H
CALL ENTER
MOV AH,0
CMP AL,31H
JNE Find_not1
JMP Find_is1
Find_not1:CMP AL,32H
JNE Find_not2
JMP Find_is2
Find_not2:CMP AL,33H
JNE Find_not3
JMP Find_is3
Find_not3:CMP AL,34H
JNE Find_not4
JMP Find_is4
Find_not4:CMP AL,35H
JNE Find_not5
JMP Find_exit
Find_not5:LEA DX,Err_Not12345
CALL DISPCHS
JMP Find_ok
Find_is1:MOV AL,stu[SI+1]
MOV CL,stu[SI+2]
JMP Find_output
Find_is2:MOV AL,stu[SI+3]
MOV CL,stu[SI+4]
JMP Find_output
Find_is3:MOV AL,stu[SI+5]
MOV CL,stu[SI+6]
JMP Find_output
Find_is4:MOV AL,stu[SI+7]
MOV AH,stu[SI+8]
MOV CL,stu[SI+9]
Find_output:LEA DX,Score
CALL DISPCHS
CALL ToAsc2&Show
CALL ENTER
LEA DX,Place
CALL DISPCHS
ADD CL,30H
MOV DL,CL
MOV AH,02H
INT 21H
CALL ENTER
JMP Find_ok
Find2:MOV CL,3
Find2_repeat:LEA SI,stu
CMP CL,3
JNE Find2_not3
LEA DI,stu+1
LEA DX,Chinese
CALL DISPCHS
CALL ENTER
JMP Find2_go
Find2_not3:CMP CL,2
JNE Find2_not2
LEA DI,stu+3
LEA DX,Math
CALL DISPCHS
CALL ENTER
JMP Find2_go
Find2_not2:LEA DI,stu+5
LEA DX,English
CALL DISPCHS
CALL ENTER
Find2_go:CMP [SI],0
JE Find2_again
CMP [DI],60
JNB Find2_again
MOV AH,0
MOV AL,[SI]
CALL ToAsc2&Show
CALL TAB
Find2_again:ADD SI,11
ADD DI,11
CMP SI,110
JNE Find2_go
CALL ENTER
LOOP Find2_repeat
Find_exit:CALL ENTER
JMP Begin
;----------------------------------------統(tǒng)計(jì)(Stat.)--------------------------------
Stat.: CALL ENTER
LEA DX,AskForStat
CALL DISPCHS
MOV AH,01H
INT 21H
CALL ENTER
CMP AL,31H
JE Stat_is1
CMP AL,32H
JE Stat_is2
CMP AL,33H
JE Stat_is3
LEA DX,Err_Not123
CALL DISPCHS
JMP Stat.
Stat_is1: MOV CL,3
Stat_GO1:LEA SI,stu
MOV AX,0
CMP CL,3
JNE Stat_not3
LEA DX,Chinese
CALL DISPCHS
LEA DI,stu+1
JMP Stat_begin
Stat_not3:CMP CL,2
JNE Stat_not2
LEA DX,Math
CALL DISPCHS
LEA DI,stu+3
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -