課程設計(論文)-基于匯編語言學生成績管理系統(tǒng)_第1頁
課程設計(論文)-基于匯編語言學生成績管理系統(tǒng)_第2頁
課程設計(論文)-基于匯編語言學生成績管理系統(tǒng)_第3頁
課程設計(論文)-基于匯編語言學生成績管理系統(tǒng)_第4頁
課程設計(論文)-基于匯編語言學生成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、1 學生成績管理系統(tǒng)目錄設計內(nèi)容 (2設計目的 (2設計要求 (2設計分析 (2子程序分析 (7操作說明.10程序代碼.11總結(jié).30參考文獻.30?.O G2 設計內(nèi)容設計一個學生成績管理程序 要求能實現(xiàn)以下功能1 各科成績的錄入 修改和刪除。2 按姓名查詢每個學生各門課的成績。3 顯示查詢結(jié)果。4 統(tǒng)計個分數(shù)段的人數(shù)。5 打印學生成績。設計目的用匯編數(shù)據(jù)的錄入、修改和刪除操作。設計要求學習如何用匯編語言進行數(shù)據(jù)處理。設計分析1.總體結(jié)構(gòu)整個程序采用主程序調(diào)用子程序的方法。主程序完成菜單的顯示 子程序完成一個獨立功能方法的實現(xiàn)。各子程序的實現(xiàn)方法簡要描述如下1 設計INSERT 錄入 子程序

2、 先打開文件SCORE.TXT 并置文件指針到文件尾 然后調(diào)用 REC子程序接受用戶的輸入 再把用戶的輸入寫入文件 最后關閉文件返回主程序。3 名 然后讀文件中的記錄 直到其記錄的名字與所輸入的名字相同為止 把文件指針后退8個字符 即4門課成績所占的空間 寫入8個“0”字符 關閉文件返回主程序。3 設計List 瀏覽 子程序時 先打開文件 然后讀一個記錄 并通過調(diào)用宏SHOW_ITEM將其顯示到屏幕上 入文件指針沒有到達文件尾 則繼續(xù)讀記錄并顯示 當指針到達文件尾時 則關閉文件返回主程序。4 設計Modify 修改 子程序時 先打開文件SCORE.TXT 通用GER_REC得到要修改的記錄 然

3、后讀文件中的記錄 并與用戶輸入的記錄做比較 只比較記錄中的名字部分若不同則噸下一條記錄 若相同則將文件指針后退23個字符 一個記錄為23個字符的長度然后把用戶輸入的記錄寫入文件 最后關閉文件返回主程序。5 設計Count 統(tǒng)計 子程序時 先打開文件 然后讀記錄 比較記錄的第16個字符數(shù)學成績的高位 并統(tǒng)計 直到文件指針到達文件尾 最后關閉文件調(diào)用宏SHOW_ITEM顯示統(tǒng)計結(jié)果 返會主程序。6 設計Query 查詢 子程序時 先打開文件 通過調(diào)用宏GETIN得到要查找學生的姓名 然后讀文件記錄 并同要查找的學生姓名比較 若相同則輸出 若不同繼續(xù)讀文件記錄 最后顯示查詢結(jié)果 關閉文件返回程序。另

4、外還有打印的分數(shù)段人數(shù)統(tǒng)計 這些結(jié)合后面的子程序功能分析做詳細介紹。圖1是本設計顯示記錄的界面參考文獻.亂舒4入口程序流程圖如圖2所示YNYNA List流程圖B Insert流程圖打開文件讀一個記錄讀錯文件尾? 顯示記錄顯示錯誤信息關閉文件返回入口打開文件置指針到文件尾從終端接收用戶輸入的記錄記錄寫入文件關閉文件4、裘雪紅 李伯成 劉凱。微型計算機詆亂zu? 5Y YN NNYN Y 入口打開文件讀一個記錄是否為所尋找的記錄顯示記錄關閉文件返回入口打開文件讀一個記錄是否為要修改的記錄文件指針后退一個記錄寫入修改記錄并關閉文件返回入口打開文件讀一個記錄對數(shù)學成績分段并統(tǒng)計指針到達文件尾顯示統(tǒng)計

5、結(jié)果關閉文件返回入口打開文件接收被刪除記錄的學生姓名讀一條記錄姓名相同 刪除記錄返回文件6YNYNYNYNY NYNNY在大型的程序中 為了使程序清晰、可讀性好 一般會大量使用宏和子程序 因此 充分了解這些宏和子程序 才能掌握程序的編制方法。開始顯示菜單輸入一個字符是L是Q 是D是M是C是I是E結(jié)束調(diào)用Iist子程序調(diào)用Query子程序調(diào)用Delete子程序調(diào)用Modify子程序調(diào)用Count子程序調(diào)用Insert子程序后調(diào)用 REC子程序接受用戶的輸入 再把用戶的輸入5亂(?7 2.宏的分析本題中使用了下列宏 其作用如下SHOW 用來指定地址的顯示字符串 有一個地址參數(shù)SET_P1 設定光標

6、位置 有一個可變參數(shù)a 作用是講光標置于坐標 a 36 處 使用了BIOS中斷10H的2號功能。SET_P2 將光標置于 12 2 處。SET_P3 將光標置于 1 30 處。CLEAR 清除整個屏幕 用BIOS中斷10H的7號功能實現(xiàn) 范圍是從坐標 0 0 到24 79 將整個區(qū)域變?yōu)榭瞻?。CLEAR1 清除有半部分屏幕 清除范圍從坐標 4 36 到 10 79 結(jié)果是擦出此區(qū)域的顯示內(nèi)容。CLEAR2 清除下半部分屏幕 清除范圍是從坐標 12 0 到 24 79 結(jié)果是擦除此區(qū)域的顯示內(nèi)容。NNWLINE 回車換行。SHOE_ITEM 顯示記錄內(nèi)容 執(zhí)行后顯示名稱 然后依次顯示4項功課成績

7、 各項成績間空3個空格 最后換行。這個宏包含的語句較多 如果每次都直接用語句實現(xiàn)非常冗長使用宏后則主程序就很簡潔 充分體現(xiàn)了使用宏的優(yōu)點。GETIN 獲取學生的信息 這也是一個使用頻繁的宏 其中含有很多的指令 它帶有ADDRS和COUNT2兩個參數(shù) ADDRS是存放信息的數(shù)據(jù)段位置 CIUNT2是接受的字符數(shù)。子程序分析下面詳細分析程序中用的的主要的子程序。1 INSERT 子程序INSERT 子程序的功能是錄入一條記錄。首先保留現(xiàn)場入棧 然后DOS中斷3D號功能打開FNAME指定的文件 然后宏GETIN 清除屏幕右半部分的記錄輸入?yún)^(qū)域。在記錄的第一項處置光標 用GET_REC獲取記錄內(nèi)容用D

8、OS中斷42H號功能將指針移到文件末尾。?.O亂4篋8 關閉文件 重新設置光標位置在顯示記錄位置。最后彈?;謴同F(xiàn)場。2 GET_REC 子程序GER_REC 子程序的功能是獲取新的記錄內(nèi)容。首先用宏GETIN獲取學生的姓名 放入BUFF2中 最多15個字符 如果遇到回車鍵則提前結(jié)束。再用循環(huán)方式將BUFFER2中的15個字符送到BUFFER1中。然后用宏SET_P1將光標置于數(shù)學成績輸入項后 等待鍵盤輸入。輸入的成績 先放在BUER2中 然后加到BUFFER1中的姓名后面。輸入為2個字符后遇到回車鍵提前結(jié)束。接著用同樣的方法輸入英語成績 計算機成績和中文成績。完成后 這個程序就得到了一個記錄的

9、所有信息。3 OPENF子程序OPENF是個一個非常簡單的子程序。它的作用是打開一個文件并把一個文件句柄保存在數(shù)據(jù)段的handle緩沖區(qū)中。4 QUERY子程序QUERY是查詢一條記錄。首先保留現(xiàn)場。然后分別清除界面右上方和下邊的區(qū)域。打開FAME指定的文件并保留文件句柄。將光標至于界面的下半空白部分開始處 用宏GETIN 獲取最多15個字符的輸入 然后將BUFFER1中的內(nèi)容與BUFFER2中進行比較 看是否相同。如果不同 再繼續(xù)向下從文件中讀出23個字節(jié)比較 循環(huán)向下 直到相同或文件結(jié)束為止。如果不同 則顯示該條記錄然后關閉文件 恢復現(xiàn)場。B: MOV AH , 3FH ;讀文件MOV C

10、X , 23 讀23個字節(jié) 記錄長度MOV DX, OFFSET BUFFER2 放在BUFFER2中INT 21HLEA SI , BUFFER2LEA DI .BUFFER1MOV CX,15 循環(huán)次數(shù)www.do+亂6躡9 CMP AL , BYTE PTR DI 比較BUFFER1和BUFFER2JNZ B 不同則轉(zhuǎn)BINC SIINC DLOOP C5 MODIFY子程序MODIFY子程序的功能是修改記錄。先保護現(xiàn)場 然后清除右上部分的記錄輸入?yún)^(qū)域 接著打開文件。用GET_REC子程序獲取輸入的記錄信息 并存入BUFFER1中。從打開的文件中讀取一個記錄的內(nèi)容 23個字節(jié) 放在BUF

11、FER2中。比較記錄前面的15個字節(jié) 姓名 如果不同 則讀取下一個記錄 如果相同 則回移一個記錄的指針 回到剛才這條記錄的位置 因為讀取一個記錄后 指針已移到下一條記錄上 。將放在BUFFER1中的輸入的記錄寫到剛才這條記錄在文件中的位置上 從而實現(xiàn)此記錄的修改。最后關閉程序 恢復現(xiàn)場。6 DELETE子程序DELETE子程序的功能是刪除一條記錄。首先保留現(xiàn)場 清除屏幕。然后打開文件 保留文件句柄。用宏GETIN獲取15個字節(jié)的姓名字符 放在BUFFER1中。讀取一條記錄 23個字節(jié) 放在BUFFER2中 然后和BUFFER1中內(nèi)容比較 如果不同讀取下一條記錄。如果姓名相同 則把指針后移8個字

12、符 4門功課所占空間 寫入8個“0”字符。關閉文件 恢復現(xiàn)場并退出。7 LIST子程序LIST子程序的作用是顯示文件中的記錄。首先清除記錄輸入?yún)^(qū)和顯示區(qū)域。然后顯示記錄字段的標題。打開文件 保留文件句柄。讀取一條記錄的內(nèi)容放在BUFFER1中 并判斷是否到了文件末尾 如果不是 則顯示這條記錄。循環(huán)讀取直到文件結(jié)束。最后關閉程序 恢復現(xiàn)場。8 PRINT子程序DELETE子程序的功能是打印文件中的記錄。?.O G10 義語句 可將不同的數(shù)據(jù)類型放在一個數(shù)據(jù)結(jié)構(gòu)中 便于處理 在本程序中的記錄就采用了結(jié)構(gòu)定義語句。這里讀取記錄也用了結(jié)構(gòu)的方法。接著用DOS中斷21H的5號功能 逐字打印存放在BUFF

13、ER1中的所以字符。一條記錄打完后 打印回車符換行。然后用同樣方法繼續(xù)讀取下一條記錄并打印 直到文件結(jié)束為止。最后關閉文件退出。9 COT子程序COT子程序的作用是統(tǒng)計各分數(shù)段小說人數(shù) 并簡化程序 作為示例 本程序只統(tǒng)計記錄數(shù)學各分數(shù)段的人數(shù)。首先顯示統(tǒng)計結(jié)果的標題 maths60708090100。然后打開文件。讀取記錄 將記錄的第16個字符 數(shù)學分數(shù)的高位 取出比較。統(tǒng)計結(jié)果依次放在以BUFFER3開頭的內(nèi)存單元中 如果小于60 則將小于60的記錄單元BUFFER3加一 若小于70 則將小于70的記錄單元BUFFER3加一 即BUFFER3下一個地址單元內(nèi)容加一 依次類推。處理完后再讀取下

14、個記錄 作同樣處理 直到文件結(jié)束為止。接著顯示放在BUFFER3中的各分數(shù)段的人數(shù)的統(tǒng)計結(jié)果 最后關閉文件結(jié)束。從程序中可以看出 統(tǒng)計時程序有個限制 本例每個分數(shù)段最多不能超過9個人。操作說明改程序除源程序外 還需要另一個存放記錄的文件 此程序中使用的文件名為SCORE.TXT 但本程序并沒有創(chuàng)建這個文件的功能。要產(chǎn)生這個文件 可用記事本先做以一個空的文件名為SCORE.TXT的文件。程序的運行與該文件的存放位置有關 位置是程序數(shù)據(jù)段的FNAME的值。二者要保持一致 否則會因為找不到數(shù)據(jù)存放文件而出錯。程序運行時 在出現(xiàn)主菜單后 按1鍵 將顯示學生的各科成績 按i鍵 將執(zhí)行錄入功能 可以錄入新

15、的學生成績 按M鍵 了修改學生成績。由于本程序時隔簡單程序 所以在修改時 要輸入學生的所有成績 包括不要修改的成績 按D鍵后 輸入要刪除的學生名 將使其成績?nèi)珵? 按Q鍵后 輸入要查詢的學生的姓名 鍵顯示其各科成績 按C鍵將顯示數(shù)學成績的分段統(tǒng)計結(jié)果。以上功能在運行時可以單獨實現(xiàn) 即在進入主菜單后 單擊功能鍵選中該功能進行操作11 一項功能 。要特別說明的是 本程序住一套目的是驗證匯編程序?qū)崿F(xiàn)的數(shù)據(jù)記錄操作功能為使程序不至于郭長 減少篇幅 因此程序處理會很簡單。程序中沒有錯誤處理程序 如果輸入錯誤 如按退格鍵將會出錯 因此輸入時要注意補要輸錯。程序代碼data segmentmess1 db

16、student grade management system,0ah,0dh,$mess2 db this is main menu,0ah,0dh,$mess3 db insert (i please input:,0ah,0dh,$mess4 db modify (m name :,0ah,0dh,$mess5 db delete (d maths :,0ah,0dh,$mess6 db query (q english :,0ah,0dh,$mess7 db count (c computer:,0ah,0dh,$mess8 db print (p chinese :,0ah,0dh,

17、$mess9 db exit (e,0ah,0dh,$mess10 db *$ mess11 db name Ma En Co Ch,0ah,0dh,$mess13 db list (l,0ah,0dh,$mess12 db maths 60 70 80 90 100,0ah,0dh,$err1 db there is not this student$err2 db file close wrong$fname db d:masmscore.txt 記錄分數(shù)文件的路徑和文件名。buffer1 db 23 dup(?buffeer db 0ah,0dh,$buffer2 db 30 dup(?

18、buffer3 db 8 dup(012 handle dw ?del db 8 dup(0x db ?data endsscore struc 定義記錄結(jié)構(gòu)names db 15 dup( maths db 0,0english db 0,0computer db 0,0chinese db 0,0score endsshow macro addrs 顯示字符串lea dx,addrsmov ah,9int 21hendmset_p1 macro a 設光標于 a,36mov ah,2mov dh,amov dl,36mov bh,0int 10hendmset_p2 macro 設光標于

19、12 2mov ah,2mov dh,12mov dl,2mov bh,0int 10h13 set_p3 macro 設光標于 1 30mov ah,2mov dh,1mov dl,30mov bh,0int 10hendmclear macro 清整個屏幕mov al,0mov cl,0mov ch,0mov dh,24mov dl,79mov bh,7mov ah,6int 21hendmclear1 macro 清右上記錄輸入?yún)^(qū)mov al,0mov bh,7mov ch,4mov cl,36mov dh,10mov dl,79mov ah,6int 10hendmclear2 mac

20、ro 清下半部分記錄顯示區(qū)mov al,014 mov ch,12mov cl,0mov dh,24mov dl,79int 10hendmnewline macro 回車換行push axpush dxmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hpop dxpop axendmshow_item macro addrs 在指定位置顯示記錄local iloop,w10push bxpush cxmov bx,0iloop: mov dl,addrsbx 顯字符串mov ah,2int 21hinc bxcmp bx,15jl iloop

21、int 10heG亂Z?15 w10: mov dl, mov ah,2int 21hmov dl, mov ah,2int 21hmov dl, mov ah,2int 21hmov dl,addrsbxmov ah,2int 21hinc bxmov dl,addrsbxmov ah,2int 21hinc bxloop w10newlinepop cxpop bxendmgetin macro addrs,count2 從鍵盤獲取信息local zeroit,lp,input_end,exitpush bxpush axmov bx,0zeroit: mov addrsbx, inc b

22、x?16 jl zeroit mov bx,0lp: mov ah,1int 21hcmp al,0ahjz input_endcmp al,0dhjz input_endmov addrsbx,alinc bxcmp bx,count2jl lpinput_end: cmp al,0dhjz exitcmp al,0ahjz exitmov ah,7int 21hjmp input_end exit: pop axpop bxendmcode segmentmain proc farassume cs:code,ds:data,es:datastart: mov ax,datamov ds,

23、axmov ah,0 設顯示模式80*25mov al,317 clearshow mess1show mess2show mess13show mess3show mess4show mess5show mess6show mess7show mess8show mess9newlineshow mess10set_p3w: mov ah,7int 21hcmp al,ijnz n1call insertjmp wn1: cmp al,mjnz n2call modifyjmp wn2: cmp al,djnz n3call deletejmp wn3: cmp al,q18 call qu

24、eryjmp wn4: cmp al,cjnz n5call cotjmp wn5: cmp al,pjnz n6call printjmp wn6: cmp al,ljnz n7call listjmp wn7: cmp al,ejz exitfjmp wexitf: mov ah,4chint 21hretmain endpinsert proc nearpush axpush bxpush cxpush dxmov dx,offset fnamemov al,2mov ah,3dh 打開文件參考文獻.y亂d?19 mov bx,axclear1set_p1 4call get_recmo

25、v cx,0 指針移到文件尾mov dx,0mov al,2mov ah,42hint 21hmov cx,23 寫文件mov dx,offset buffer1mov ah,40hint 21hmov ah,3eh 關閉文件int 21hset_p3pop dxpop cxpop bxpop axretinsert endpget_rec proc nearpush axpush bxgetin buffer2,15 輸入姓名mov bx,0mov cx,15continue: mov al,buffer2bx20 inc bxloop continueset_p1 5getin buffe

26、r2,2 輸入數(shù)學成績mov al,buffer2mov buffer1bx,alinc bxmov al,buffer2+1mov buffer1bx,alinc bxset_p1 6getin buffer2,2 輸入英語成績mov al,buffer2mov buffer1bx,alinc bxmov al,buffer2+1mov buffer1bx,alinc bxset_p1 7getin buffer2,2 輸入計算機成績mov al,buffer2mov buffer1bx,alinc bxmov al,buffer2+1mov buffer1bx,alinc bxset_p1

27、 8getin buffer2,2 輸入語文成績mov al,buffer221 inc bxmov al,buffer2+1mov buffer1bx,alinc bxpop bxpop axretget_rec endpopenf proc near 打開文件mov dx,offset fnamemov al,02mov ah,3dhint 21hmov handle,axretopenf endpquery proc near 查詢記錄push axpush bxpush cxpush dxclear1clear2mov dx,offset fnamemov al,2mov ah,3dh

28、 打開文件int 21hmov bx,axset_p222 lea dx,mess11mov ah,9int 21hb: mov ah,3fh 讀文件mov cx,23 讀23個字節(jié) 記錄長度mov dx,offset buffer2 放在buffer2中int 21hlea si,buffer2lea di,buffer1mov cx,15 循環(huán)次數(shù)c: mov al,byte ptrsicmp al,byte ptrdi 比較buffer1和buffer2jnz b 不同則轉(zhuǎn)binc siinc diloop cmov buffer2+23,$show_item buffer2mov ah

29、,3ehint 21hpop dxpop cxpop bxpop axretquery endpmodify proc near 修改記錄push axpush bx23 push dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axmov handle,axcall get_rec 讀取輸入內(nèi)容放在buffer1 read: mov dx,offset buffer2mov cx,23mov ah,3fh 讀文件 記錄內(nèi)容放在buffer2int 21hlea si,buffer2 比較姓名是否相同lea

30、di,buffer1mov cx,15c5: mov dl,byte ptrsicmp dl,byte ptrdijnz readinc siinc diloop c5mov bx,handlemov ah,42h 回移文件指針mov al,1mov cx,0ffffhmov dx,-23int 21hpush axX亂E3?24 mov dx,offset buffer1mov ah,40h 寫入修改記錄int 21hmov ah,3ehint 21hjmp exit2exit1: set_p2show err1exit2: set_p3pop dxpop cxpop bxpop axret

31、modify endpdelete proc nearpush axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dh 打開文件int 21hmov bx,axmov handle,axmov al,1N亂S?25 mov cx,23mov ah,3fh 從文件讀記錄放在buffer2中int 21hlea si,buffer2lea di,buffer1mov cx,15c6: mov dl,byte ptrsicmp dl,byte ptrdijnz read5inc siinc diloop c

32、6mov bx,handlemov ah,42h 移文件指針mov al,1mov cx,0ffffhmov dx,-8int 21hmov cx,8mov dx,offset delmov ah,40h 寫文件int 21hmov ah,3eh 關閉文件int 21hjmp exit6exit5: set_p2show err1exit6: set_p3pop dxmov dx,-23int 21ht亂i9?26 pop bxpop axretdelete endplist proc near 列文件中記錄push axpush bxpush cxpush dxclear1clear2set

33、_p2show mess11mov dx,offset fnamemov al,2mov ah,3dh 打開文件int 21hmov bx,axagain: mov dx,offset buffer1 讀取記錄mov cx,23mov ah,3fhint 21hcmp ax,0jz pshow_item buffer1jmp againp: mov ah,3eh 關閉文件int 21hset_p3pop dxpop cx www輥y?27 pop cxpop bxpop axretlist endpprint proc nearpush axcall openf 打開文件mov cl,countmov ch,0read2: mov dx

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論