匯編課程設計成績管理系統(tǒng)源代碼[共30頁]

上傳人:gfy****yf 文檔編號:40520778 上傳時間:2021-11-16 格式:DOC 頁數:31 大小:279.50KB
收藏 版權申訴 舉報 下載
匯編課程設計成績管理系統(tǒng)源代碼[共30頁]_第1頁
第1頁 / 共31頁
匯編課程設計成績管理系統(tǒng)源代碼[共30頁]_第2頁
第2頁 / 共31頁
匯編課程設計成績管理系統(tǒng)源代碼[共30頁]_第3頁
第3頁 / 共31頁

下載文檔到電腦,查找使用更方便

12 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《匯編課程設計成績管理系統(tǒng)源代碼[共30頁]》由會員分享,可在線閱讀,更多相關《匯編課程設計成績管理系統(tǒng)源代碼[共30頁](31頁珍藏版)》請在裝配圖網上搜索。

1、XXXXX 課程設計說明書 匯編語言課程設計 班級: 網絡B101 姓名: XXX 學號 XXX 設計題目: 學生成績管理 設計時間: 2012.12.09 至 2012.12.21 指導教師: XXX 評 語:_______________________________ _______________________________________ ___________________

2、____________________ _______________________________________ _______________________________________ 評閱成績:___________評閱教師:____________ 一、 課程設計的目的 進行程序設計方法和技能的基本訓練,鞏固在課堂上學到的有關程序設計的基本知識和基本方法,通過實際動手能力的培養(yǎng),進一步熟悉匯編語言的結構和使用方法,達到能獨立閱讀、編制和調試一定規(guī)模的匯編語言程序的水平。 二、 設備與環(huán)境 PC兼容機、Windows操作系統(tǒng)、匯編程序masm for win

3、dows 2010 三、課程設計要求 1.要求編寫并調試通過一個小型軟件,實現(xiàn)對軟件或硬件的操作。 2.遵循模塊化、結構化的程序設計方法。 3.要求程序必須正確。 4.程序簡明易懂,多運用輸入輸出提示,出錯信息及必要的注釋。 5.要求程序結構合理,語句使用得當。 6.適當追求編程技巧和程序運行效率。 四、課程設計的課題和分析 題目:學生成績管理 分析: 建立學生成績文檔;輸入學生各門功課成績;(假設3門功課);修改指定學號的學生成績;統(tǒng)計指定學號的學生的平均成績、總成績,并在屏幕上顯示; 統(tǒng)計指定學號課程的平均成績,并在屏幕上顯示; 每門課程成績分析在屏幕上顯示3門課程

4、的各個分數段的學生人數;(分數段為:>=90;80~89;70~79;60~69;<=59)此處可以以表格的形式給出數據,或者以坐標曲線的形式給出。對學生成績記錄進行檢索(按學號、姓名), 成績排序(按總成績降序排列), 退出,最好用到文件處理。 五、流程圖、總體設計、詳細設計 學生成績管理,最基本能實現(xiàn)的的功能是輸入學號,同時顯示該學生的基本的信息,我設計的成績管理系統(tǒng)功能還包括了顯示該生的語文,英語,數學三門學科的成績,求出了該生的總分,以及該生的平均分,動態(tài)輸入學生的成績,而且成績是按照三位數顯示的,可以輸入任意多的學生人數,每個學生都是三門課程,最后統(tǒng)計輸入所有

5、學生的各科各個分數段的人數,最后顯示出所有學生的成績排名情況。為了使系統(tǒng)更實際一些,我設計的系統(tǒng)包括建立了文件,方便學生的信息一次錄入之后可以保存該數據,將該數據保存在score.txt文件中,而且文件的路徑與該軟件默認的安裝路徑一致;為了使系統(tǒng)更方便用戶使用,我設計了菜單,菜單中設計了六個功能,包括插入,刪除,查詢,修改,查看,退出等。以下是對程序中常用的六個個功能進行解析: 1、 數據輸入功能:這是必不缺少的功能,學號的輸入,成績的輸入都離不了這個功能,在輸入成績時,特地加了一個判斷功能,在輸入不合理的成績時,程序將提示出錯,并要求重新輸入。在輸入學生學號的時候,程序首先會判斷此學生的成

6、績是否存在,如果存在,則程序提示需重新輸入。插入一條學生記錄子模塊,搜索可用單元,接收輸入的記錄,并寫入文件。建立成績表子模塊,控制輸入界面,并多次調用插入記錄子模塊,完成成績的建立。 2、 修改功能:考慮到會存在在輸入成績時,容易輸入錯誤,或者發(fā)生個別學生的試卷被誤判需修改成績等情況,所以加了此功能,在發(fā)生以上情況時可以調用此功能,修改指定學生的成績。 3、 刪除學生信息的功能。如果輸入的學生信息根本不存在,或者發(fā)生其它情況需刪除一個無意義的學生信息時,可以調用此功能。此功能將實現(xiàn)將指定學號學生的信息刪除。 4、 信息查找功能:當需要查詢某個學生的成績或者檢查輸入是否有誤時,可以調用此

7、功能,此功能實現(xiàn)將指定學號學生的成績顯示出來。實際上在調用此功能的同時,程序會首先求的總成績,平均成績,然后產生排名結果,最后將數據信息顯示。 5、顯示排名信息功能:此功能會將學生成績自動相加,得到每位學生的總成績及平均成績,然后進行排名,得到每個學生的名詞,最后按照輸入順序將所有學生的學號,語文成績,英語成績,數學成績,平均成績,總成績,名次依次輸出。模塊中排名處理、學科平均成績計算、均需取出某一學科的所有學生成績,因而此操作作為公用子程序以供調用。個人總分及平均分處理較為簡單,根據索引逐條處理記錄。排名處理。排名結果為一維數組,與學科成績存在對應關系。查詢學生記錄,先進行學號匹配,再輸出

8、一條記錄;查詢該生的所有信息。 6、 文件寫入及退出功能。此功能實現(xiàn)將學生的信息保存在一個文件里。此程序默認將文件放在C盤下,名稱為:score,屬性為txt格式的文本文檔。該文檔能夠保存數據,以便數據不需要重復錄入,是系統(tǒng)更能滿足用戶需求。寫入文件完畢后,關閉文件,并退出程序。 該程序的流程圖: 文件創(chuàng)建和菜單顯示: 在創(chuàng)建文件時使用命令請求創(chuàng)建文件,以下是菜單顯示,首先顯示菜單的界面,1號功能接收功能,程序先和菜單中所有的功能都進行比較,假如都不是功能菜單,則提示輸入錯誤,重新輸入,假如輸入正確,則調用相對應的子程序。 創(chuàng)建新文件 mov ah,3eh 設置屬性 設置路徑

9、 保存文件 菜單的顯示 選擇系統(tǒng)功能 插入 調用insert Y 修改 N 調用modify Y 刪除 N 調用delete Y 調用show 排名 分段 調用count N N N again Y 創(chuàng)建成功 ESC 調用esc Y Y Y 文件內容顯示: 在文件查找的子程序會顯示該生的學號,三門的成績,該生的總分,平均分和該生成績的排名情況,則在顯示學生信息之前先處理數據,成績和總分是按照三位數的處理,學號和名次是按照兩位數處理的,總分是字類型,其他的是字節(jié)類型,所以必須要轉換基址才能找到該生相對應的總分。文件的刪除則是先找到該

10、學生的信息,然后顯示該生的成績緩存區(qū)的地址的下一位,則顯示的是空白。 調用總分子程序 調用平均分子程序 學號存在 開始 N 輸出三門成績 以si和n的比較輸出學生信息 按三位處理 Y 輸出平均分 需要擴展 si指針依次下移2 輸出總分 輸出名次 結束 調用二位學號輸入的子程序 學號存在 開始 N 地址相減 Y Add si,1 刪除完成 顯示內容為空 循環(huán)刪除之后內容 n減1 結束 為0 為零則ret Y N 總分和名次 定義子程序sum proc near,先是從存放各科的緩存區(qū)移出數據,然后相加

11、,采用循環(huán),對用戶輸入的數據都是按照這個規(guī)則求出該生的總分;ping proc near是求出該生的平均分,把之前存放在zc[bx]的總分數據取出來,然后除以3; 存儲器清零cx,si 循環(huán)開始 開始 N Mov Mc[si],1 名次初值是1 Y jge continue 總分進行比較 Zc[bx]與Zc[di] add mc[si],1 把學生個數給bx 結束 大于或者等于 mov dx,zc[di] Y N 名次為字節(jié)則si+1 Si 與ax比較為0 Y N 六、遇到的問題及解決辦法 問題:在編寫程序時,不知道刪除的程序應該如何實現(xiàn)

12、,以及在創(chuàng)建文件時不知道如何下手,然后老師提示是采用中斷,我們需要自學中斷,在設置光標和屏幕顯示也是采用中斷,我自能自學課本的第九章內容,然后再寫程序,在文件的刪除那里我卡住了研究好久也不知道怎么實現(xiàn),最后我問了我同學,我們一起討論出的結果就是讓屏幕不顯示當前指針指向的內容,顯示指針指向的一個內容即可,這樣就可以實現(xiàn)刪除功能,刪除功能就是刪除該學號學生的成績數據,使這些數據全部清空則達到了刪除文件的功能; 關鍵代碼:此段代碼時是實現(xiàn)數據段插入功能首先提示輸入學號的語句,然后調用shuru的宏定義,這個宏定義是接收鍵盤輸入的兩位數,然后處理成十進制輸出,比較符合實際,然后把n學生個數給bl,將

13、輸入的學生學號保存在xh[bx]數組中,方便使用,然后判斷該學號是否為第一次輸入,是則跳轉,假如不是第一次輸入,則提示用戶該學號已經存在,需要重新輸入,跳轉到輸入成績的子程序,在調用shuruu宏,此功能是處理三位數,使成績是按照三位數顯示的,而且必須是在合理的范圍內的,假如輸入的數據是不合理的則又跳轉到重新輸入的界面,要求用戶輸入有效數據,數據輸入完成之后則存入相對應的緩存區(qū)。 ;********************************************* input proc near ;輸入學生學號,成績 e6: output mess1 shuru

14、 mov bl,n ;統(tǒng)計輸入學生個數 mov bh,0 mov xh[bx],dl ;輸入的個數同時以地址指針形式顯示 cmp bx,0 ;判斷是不是第一次輸入,如果是,則跳過比較程序 je qq1 ;繼續(xù)輸入成績 mov cl,n ;如果不是第一次輸入則要將輸入的學號與以前輸入的比較 cbw mov si,0 mov al,xh[bx] e7: cmp al,xh[si] je e5 add si,1 loop e7

15、 jmp qq1 e5: output ts4 jmp e6 qq1:output mess2 ;如果不是重復的學號則可以繼續(xù)輸入成績和其他信息 output mess4 mov si,0 mov cx,3 qq3:shuruu cmp dx,78h ;比較輸入的成績是否大于120,如果大于120的話,那么重新輸入成績 jbe qq2 output ts3 ;提示輸入錯誤 jmp qq1 qq2:mov buf[si],dl ;把輸入的學生信息保存在緩存區(qū) output b

16、g add si,1 loop qq3 mov bl,n cbw mov al,buf[0] ;以下是把之前的成績數據保存到相對應的緩存區(qū) mov chi[bx],al mov al,buf[1] mov eng[bx],al mov al,buf[2] mov mat[bx],al ret input endp ;********************************************** 該關鍵代碼是實現(xiàn)該學號學生的總分和名次的交換以及顯示,首先是先把即將要

17、用到的存儲器全部清零,將名次mc[si]初值為1,si依次+1,因為存放名次的數組是字節(jié)類型的,然后把n學生的個數賦給cl,接下來就是處理查找總分的地址指針,因為總分數組是字型所以需要使bl*2,然后cx清零,按照學號找到相對應該生的總分,兩個總分相比較此時大的則暫時為第一名,然后再繼續(xù)接受總分,接受的總分又要和之前暫時的第一比較然后和暫時的第二名比較,循環(huán)找出第一名,繼續(xù)循環(huán),顯示總分和名次。 ;********************************************** rank proc near ;排名 mov cl,n mov ch,0

18、 ;將用到的存儲器清零 mov si,0 rrc:mov mc[si],1 ;將存儲名次的存儲器給予的初值是1 add si,1 ; loop rrc mov al,n ;此處2n最后放到al中,是為了下面總分的輸出 mov bl,2 mul bl mov cl,n mov ch,0 mov si,0 mov bx,0 mov di,0 rrb: mov dx,zc[di] rra: cmp dx,zc[bx] ;總分之間的比較 jge conti

19、nue ;大于等于的那個分數則為第一名 add mc[si],1 continue: add bx,2 loop rra ;余下的繼續(xù)比較依次排出名次 mov cl,n cbw add si,1 ;名次是字節(jié)類型的 add di,2 ;總分是字類型的 mov bx,0 cmp si,ax ;ax里面是2n為了找到總分輸出 jbe rrb ret rank endp ;**************************

20、************************ 七、結果顯示 菜單顯示界面圖: 首次輸入學生信息界面;修改學生信息界面;查看學生各個分數段的界面; 刪除學生信息界面: 查看學生成績排名情況界面: 八、感想、收獲及體會 終于完成了一門課程設計,比起之前完成的綜合實驗我覺得自己又上升了一個臺階,學到的東西更多了,雖然自己付出了兩周的時間,但是一個好的程序員就需要舍得花時間去創(chuàng)建更加完美的程序,完成更多的功能,滿足用戶更多的要求。這次的課程設計和自己上課學到的東西有很多不同,需要自己去查看中斷的代碼,因為此次課程設計老師要求我們必須有文件的創(chuàng)建

21、和文件存儲和文件關閉,給課程設計增加了難度,課設正是這樣,所以在完成這門課設之后,我真心覺得自己的編程水平又上升,同時也說明了好多東西是可以靠自己領悟和自學得來的;課程設計完成了,但是我設計的成績管理系統(tǒng)還是存在不足:成績都是用整數表示的,沒有實現(xiàn)浮點運算;平均成績也是按照整型的,查詢功能中只能通過學號查詢,沒有實現(xiàn)學號或者通過姓名查詢的選擇;主菜單界面設計不夠人性化,不夠簡單明了,缺少美觀,沒有使用彩色的界面。雖然我的程序中出現(xiàn)那么多的不完美,但是只有我有一顆追求完美的心,則我就會有一個繼續(xù)學下去的心。 此次的課程設計,我還是和以前的綜合實驗的感觸有些類似,在此之前,大多數時候都在用高級語

22、言編寫程序,已經習慣了高級語言的方便靈活的語法形式。一下子突然轉為用匯編語言進行程序設計,總是要經過一個很不習慣的適應過程。但是我們學習編語言,可以讓我們更好地理解程序設計的本質和原理。對以后的學習和工作都帶好很多好處。這次在編寫和調式匯編程序過程中體會最深的就是,沒有好的工具,匯編程序的調式工作太困難了!這次使用的是微軟的masm5.0編譯工具,是DOS底下的編譯工具,但是沒有其它可視化的調式工具,只能利用DOS底下的debug命令進行調式。程序稍微長一點的時候,調試起來就不是那么方便了,主要問題是在debug中雖然可以反匯編,但是反匯編后的源程序與自己寫的不太一樣了(符號常量和標號都變成了

23、數字地址),不方便辨認當前調式程序對應于源代碼中的哪一行。這些疑問都是我完成課設的難點,自己學的不是很透徹,在完成報告之前,我花了一天的時間和同學討論我的程序,通過對這學生成績管理的的設計,使我對匯編語言的基本知識的使用更加熟練,同時也增加了我對匯編語言的一些認識,在作業(yè)完成過程中通過和同學的交流,也增加了合作的技巧。通過查閱資料也學到了一些課本上沒有的東西,有幸接觸到中斷這個功能,同時更是讓我明白了即使是低級的匯編語言也可以完成高級語言可以完成的程序,歷時兩周終于完成, 這次課程設計中有很多源程序的子程序的源代碼可以從資料中或獲得,但有很多都需要我們仔細琢磨才能明白其中的原理,同時程序中需要

24、調用大量的BIOS和DOS系統(tǒng)功能調用,如顯示字符串的功能調用、光標設置的功能的調用、清屏的功能調用等,這些問題如不查詢資料就無法理解,因為上匯編語言基礎時對這些DOS和BIOS的系統(tǒng)功能了解很少,所以我們需要查詢DOS和BIOS功能的系統(tǒng)調用的基本信息。還有在一些循環(huán)結構設計上也有許多不能理解的地方,都需要加以深刻的理解才能將問題順利的解決,多整個程序的理解也有了更進一步的了解。有時候遇到自己查資料和不能理解的地方時,自己不能解決時,先找同學討論一下,會有意想不到的收獲,有些問題就會迎刃而解。即使是花了兩個周的時間完成一個程序,但是我可以驕傲的告訴別人我完成一個程序了,完成了一個設計,將來我

25、更有底氣的告訴別人這個是我的成品,就如老師說的,我們可以驕傲的告訴面試老師我曾經完成的作品。 目前已是大三的我們,我們完成的課程設計已經很多了,但是我對此次的課設感慨真的很多,因為這次完成真的太不容易,因為我自己本人覺得我真的一點都學不會,居然也可以完成如此浩大的程序編寫,真的是我想不到的,雖然此程序我參考了資料,咨詢了同學,但是那些收獲是我都很驚嘆的,進一步的拓寬了我的匯編知識,同時最重要的一點是要學的精通可以靠自己自學,很多知識是我們自己就可以領悟的。雖然本程序仍然存在不少缺點和不足,但是只要我有心,只要我舍得花時間去自學,看看視頻,一定能使我的編程能力提升,克服所以的不足,設計出更出色

26、的作品。 九 參考文獻 [1]鄭曉薇編著,《匯編語言》機械工業(yè)出版 [2]《IBM—PC匯編語言程序設計實驗教程》 [3]《IBM—PC匯編語言程序設計(第2版)》 十 附錄。 ①用戶手冊使用說明:可以根據我上面粘貼的運行界面進行使用,選擇自己需要的功能 ②源程序清單: huancun macro j,t ;將三位數的數據轉換成為三個對應的字符,并將其存入緩沖區(qū)zs中j,t是兩個啞元 push bx ;入棧是對存儲器里面的值進行保護 mov si,t ;對兩個啞元進行說明 mov ax,j mov bl,100

27、 ;對輸出的數據進行處理,顯示出百位十位個位 div bl add al,30h mov zs[si],al ;把處理好的百位進行緩存區(qū) add si,1 mov al,ah cbw mov bl,10 ;對十位的處理 div bl add al,30h add ah,30h mov zs[si],al add si,1 mov zs[si],ah ;對個位的處理, add si,1 ;對輸入的數據反

28、復處理,指針下移 pop bx ;存儲器出棧 endm clear MACRO ;清屏的宏定義 MOV AH,2 ;設置光標位置 MOV DH,0 ;行號 MOV DL,0 ;列號 INT 10H ;屏幕及光標控制int 10h MOV AH,6 ;屏幕開窗口 MOV AL,0 MOV BH,7 ;顏色屬性是正常顯示,黑底白字 MOV CH,0 ;左上角的行號 MOV CL,0 ;左上角的列號 MOV DH,24 ;右上角的行號 MOV DL

29、,79 ;右上角的列號 INT 10H ;調用10號功能,設置屏幕的坐標是(0,0)(24,79) ENDM kong macro ;回車換行的宏定義 mov ah,2 ;2號功能輸出回車換行 mov dl,0ah int 21h mov ah,2 mov dl,0dh int 21h endm output macro p ;字符串輸出 mov dx,offset p mov ah,9 int 21h endm shuru macro ;二位數數據輸入

30、 mov ah,01 ;1號功能的輸入,輸入的值放在dl中 int 21h sub al,30h ;對輸入的數據先減掉30h cbw ;字節(jié)擴展成字類型 mov bl,10 ;對輸入的數據進行乘以10 mul bl mov dl,al ;把al中的乘積取出來,放在dl中 mov ah,01h int 21h sub al,30h ;處理完了要加上30h再用一號功能輸出 add dl

31、,al endm zhuane macro e,b ;將二位數轉換成對應兩個字符,并將其存入緩沖區(qū)zs push bx mov si,b ;以下是對兩個啞元的說明 mov al,e cbw mov bl,10 ;對二位數據的處理就是先顯示出十位然后顯示出個位 div bl add ah,30h add al,30h mov zs[si],al ;處理好的數據存放在zs存儲區(qū) add si,1 mov zs[si],ah add si,1

32、 ;指針再下移,繼續(xù)處理下一個 pop bx endm zhuans macro f,s ; 將三位數成績轉換成為對應的三個字符,并存入緩沖區(qū)zs中 push bx mov si,s mov al,f cbw ;需要擴展,字節(jié)擴展成字 mov bl,100 div bl add al,30h mov zs[si],al ;百位存放在存儲區(qū) add si,1 mov al,ah ;把余數取出來 cbw

33、 ;字節(jié)擴展成字 mov bl,10 div bl add al,30h ;把ah中的余數取出來再進行除以10,最后的余數還是存放在ah中,此次的商放在存儲區(qū)zs中 add ah,30h mov zs[si],al add si,1 mov zs[si],ah ;最后的余數在ah中,其實就是三位數的個位 add si,1 ;指針下移 pop bx endm shuzi macro r ;二位數據輸出,以下是對數據

34、輸出的處理 mov al,r cbw mov bl,10 ;對數據的輸出和輸入一樣也需要進行處理,以十進制顯示出來 div bl mov bl,ah mov dl,al add dl, 30h mov ah,2 ;2號功能顯示十位 int 21h mov dl,bl add dl,30h mov ah,2 ;2號功能顯示個位 int 21h endm shuruu macro ;三位數數據輸入

35、 shuru mov al,dl ;用1號功能的輸入值存放在dl中,首先把dl中的值存放在al中 mov dl,10 mul dl mov dx,ax ;乘以10以后的值存放在ax中;需要取出放在dx中 mov ah,1 int 21h sub al,30h cbw ;加完30h再把字節(jié)擴展成字 add dx,ax endm shuzii macro u ;三位數數據輸出 mov ax,u mov bl,100 ;對百位的處理,把1

36、00賦給bl div bl mov bl,ah ;商在al中,余數在ah中 mov dl,al ;把商從al中取出來 add dl,30h ;在顯示百位之前加30h,再放到dl中 mov ah,2 ;2號功能顯示 int 21h shuzi bl endm DATAS SEGMENT m dw 0 ;移動文件指針時,選擇絕對移動方式,則m代表指針偏移量 zs db 18 dup (?) ;緩沖區(qū)用來存放單個學生信息的字符 pathnam d

37、b 'C:\score.txt',00h ;建立目錄項 handle dw ? ;文件句柄 buf db 3 dup(?) ;輸入緩沖區(qū) zc dw 100 dup(?) ;存放總成績的數組 pj db 100 dup(?) ;存放平均成績數組 n db 0 ;存放輸入的學生信息的個數 gs0 db 5 dup (0) ;記錄所查詢科目分數段的 gs1 db 5 dup(0) gs2 db 5 dup(0

38、) mc db 100 dup (1) ;存放學生的名次的數組 chi db 100 dup (?) ;存放學生成績的數組 eng db 100 dup (?) mat db 100 dup (?) xh db 100 dup (?) ;存放學生學號的數組 cour0 db 'chinese','$';語文 cour1 db 'english','$';英語 cour2 db 'maths ','$'

39、;數學 ts db 13,10,'You are successful,press anykey to continue!',13,10,'$';以下是提示語句 ts1 db 13,10,'You are wrong , Try again!',13,10,'$' ts3 db 13,10,'The score you input is bigger than 127,input agian!',13,10,'$' ts4 db 13,10,'

40、;The school number you input is exist,please try again!',13,10,'$' cai0 db '* The Student Grade Management System *',0ah,0dh,'$' cai00 db '* made by wei qiao yuan *',0ah,0dh,'$' cai db '* Ins

41、ert a data <i>',13,10,'$';菜單的格式 cai1 db '* Modify a data <m>',13,10,'$' cai2 db '* Delete a data <d>',13,10,'$' cai3 db '*

42、Find a data <f>',13,10,'$' cai4 db '* Show the rank <s>',13,10,'$' cai6 db '* Show the count <c>',13,10,'$' cai5 db '* Exi

43、t with the keyboard of ESC <ESC>',13,10,'$' ts2 db 'Please choose the Function',13,10,'$' mess db 13,10,'The data you input is not exist,input again',13,10,'$' mess1 db 13,10,'Please input the school number(2)

44、 ',13,10,'$' mess2 db 13,10, 'Please input three scores(0-120)',13,10,'$' mess4 db 'chinese english maths ',13,10,'$' mess3 db ' Thank you ',13,10,'$' strr1 DB '********************score and rank***********

45、********',13,10,'$' strr2 DB 13,10,'number wen eng math average sum rank ',13,10,'$' strr3 db 13,10,'course >=90 >=80 >=70 >=60 <60 ',13,10,'$' bg db ' ','$' DATAS ENDS STACK

46、S SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX mov es,ax mov ah,3ch ;請求創(chuàng)建文件 mov cx,00 ;默認屬性 lea dx,pathnam ;裝入pathnam的地址 int 21h mov handle,ax ;保存文件句柄 main: ; 主菜單顯示 output ca

47、i0 output cai00 output cai output cai1 output cai2 output cai3 output cai4 output cai6 output cai5 output ts2 mov ah,1 ;輸入字符,選擇功能鍵 int 21h cmp al,'i' jne n1 call insert ;調用insert子程序,輸入學生學號,成績 jmp rk n1: cm

48、p al,'m' jne n2 call modify ;調用modify子程序,修改指定學生的成績 jmp rk n2: cmp al,'d' ;調用de子程序,刪除制定學生的成績 jne n3 call de jmp rk n3: cmp al,'f' ;調用find子程序,顯示指定學生的成績及名次 jne n4 call find jmp rk n4: cmp al,'s' ;調用show子程序,顯示所有學生的各科

49、成績,平均成績,總成績及名次 jne n5 call show jmp rk n5: cmp al,'c' ;調用showw子程序,顯示各科各分數段的學生數量 jne n6 call showw jmp rk n6: cmp al,1bh ;調用exit子程序,將數據保存到score.txt文件中,并退出程序 jne n7 call exit n7: clear ;清屏 output ts1 ;以上都不選擇則說明出錯 jmp ma

50、in ;再次跳轉到菜單 rk: output ts mov ah,1 int 21h clear jmp main ;**************************************** exit proc near ;退出 mov cl,n ;寫入文件的次數 cbw mov bx,0 mov di,0 zh: push di ;保存di,cx,bx中的內容 push bx push cx

51、 mov si,0 ;對si進行賦初值 zhuane xh[bx],si ;調用宏zhuane將兩位數的學號轉換為對應的二個字符,并存放到zs緩沖區(qū)中 zhuans chi[bx],si ;調用宏zhuans將三位數的語文成績轉換為對應的三個字符,并存放到zs緩沖區(qū)中 zhuans eng[bx],si ;調用宏zhuans將三位數的英語成績轉換為對應的三個字符,并存放到zs緩沖區(qū)中 zhuans mat[bx],si ;調用宏zhuans將三位數的數學成績轉換為對應的三個字符,并存放到zs緩沖區(qū)中 zhuans

52、pj[bx],si ;調用宏zhuans將三位數的平均成績轉換為對應的三個字符,并存放到zs緩沖區(qū)中 huancun zc[di],si ;調用宏zhuanss將三位數的總成績成績轉換為對應的三個字符,并存放到zs緩沖區(qū)中 zhuane mc[bx],si ;調用宏zhuane,將兩位數的名詞,轉換為對應的二個字符,并存放到zs緩沖區(qū)中 mov ah,42h ;移動讀寫指針 mov al,00 ;移動方式為絕對移動方式 mov bx,handle mov cx,00 mov dx,m

53、 ;指針偏移量 int 21h add m,20 mov ah,40h ;調用40h功能,請求寫文件 mov bx,handle ;獲取文件句柄 mov cx,19 ;寫入長度為19個字節(jié) lea dx,zs ;將緩沖區(qū)zs中的內容寫入文件score.txt int 21h pop cx pop bx pop di add di,2 ;目的指針加2 add bx,1 sub cx,1 ;輸

54、入一個之后cx統(tǒng)計的個數就依次減1 cmp cx,0 ;判斷寫入是否完畢 jg zh mov bx,handle ;寫入完畢,關閉文件 mov ah,3eh int 21h clear output mess3 ;關閉文件之后就顯示提示語句 MOV AH,4CH ;退出程序 INT 21H ret exit endp ;子程序結束 ;********************** ****************** sum proc nea

55、r ;求學生的總成績 mov cl,n ;對運用到的存取器進行清零 mov ch,0 mov si,0 mov bx,0 sss:mov al,chi[si] ;將三科成績相加,將總成績傳給數組zc mov ah,0 ;高位清零 mov dl,mat[si] ;存放數學的數組 mov dh,0 add ax,dx ;數學和語文相加 mov dl,eng[si] mov dh,0 add ax,

56、dx mov zc[bx],ax ;最后把語文數學和英語的三門成績總分存放在zc總分的緩存區(qū) add bx,2 add si,1 loop sss ;運用循環(huán)對輸入的三門成績求總分 ret sum endp ;*************************************** ping proc near ;求學生的平均成績 mov cl,n ;n是統(tǒng)計輸入學生信息的個數 cbw mov si,0 mov bx,0 p_p:

57、 mov ax,zc[bx] ;將總成績除以三,獲取的數據傳送給數組pj mov dl,3 div dl mov pj[si],al ;把除以之后的商從al中總取出放入pj平均的存儲區(qū) add si,1 ;下標依次加1 add bx,2 ;基址加2 loop p_p ret ping endp ;****************************************** modify proc near ;修改學生學號,成績 md1:output

58、 mess1 ;提示語句 shuru mov bl,n ;把學生個數給bl mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si] ;先查找輸入的學生是否存在 je qq1_1 ;查到的話,就跳轉到qq1_1輸入修改的值,也就是重新輸入 add si,1 cmp si,bx ;不存在的話則繼續(xù)輸入繼續(xù)比較 jbe md output mess jmp md1 ;不相等繼續(xù)

59、輸入學號 qq1_1: mov di,si output mess2 ;輸入學號 output mess4 ;輸入成績 mov si,0 mov cx,3 ;cx存放的的科目 qq3_1:shuruu ;分別輸入語文,英語,數學成績,并將其放在緩沖區(qū)buf中 cmp dx,78h ;比較輸入的成績是否大于120,如果大于120的話,那么重新輸入成績 jbe qq2_1 output ts3 jmp qq1_1 qq2_1:mov buf[si],dl

60、output bg ;輸出一段空格 add si,1 loop qq3_1 mov al,buf[0] ;將存入buf中的成績,分別賦值給存放對應科目的成績的數組 mov chi[di],al mov al,buf[1] ;buf[1]放的是英語 mov eng[di],al mov al,buf[2] ;buf[2]放的是數學 mov mat[di],al ret modify endp ;************************************************

61、**** countt proc near ;統(tǒng)計各科各個分數段學生的個數 mov cx,5 ;有五個成績分數段 mov si,0 zl: mov gs0[si],0 ;存放語文科目各個分數段的緩存區(qū) add si,1 loop zl mov cl,n mov ch,0 mov si,0 c11:mov al,chi[si] ;取出存放在緩存區(qū)的數據和90進行比較 cmp al,90 jl cc1 ;大于則跳轉 add g

62、s0[0],1 ;小于等于90則進行個數的累加 jmp cc8 ;繼續(xù)循環(huán)一直比較完五個分數段 cc1:cmp al,80 ;和80進行比較 jl cc2 add gs0[1],1 ;進行累加存放入緩存區(qū) jmp cc8 cc2:cmp al,70 ;和70進行比較 jl cc3 add gs0[2],1 jmp cc8 cc3:cmp al,60 ;與60進行比較 jl cc4 add gs0[3],1 jmp cc

63、8 cc4:add gs0[4],1 ;最后剩下的數據存放在gs0[4]的緩存區(qū) cc8:add si,1 ;統(tǒng)計完一個數據則需要繼續(xù)統(tǒng)計,則和那些分數段比較之后滿座條件的繼續(xù)統(tǒng)計 loop c11 lea si,gs0 lea di,gs1 mov cx,5 cld ;清除方向標 rep movsb ;以字節(jié)傳送 mov cx,5 mov si,0 cc9: mov gs0[si],0 ;對存放分數段的

64、緩存區(qū)清零 add si,1 ;地址指針加1 loop cc9 mov cl,n ;存儲器先清零 mov ch,0 mov si,0 mov cl,n ;給存儲器賦值 mov ch,0 mov si,0 c111:mov al,eng[si] ;對英語成績進行分段,統(tǒng)計各個分數段的個數 cmp al,90 ;和90比較 jl cc15 ;大于則跳轉 add gs0[0

65、],1 ;小于等于則繼續(xù)統(tǒng)計 jmp cc88 ;繼續(xù)比較,繼續(xù)存儲 cc15:cmp al,80 ;和80比較 jl cc22 add gs0[1],1 ;符合條件則存儲在緩存區(qū) jmp cc88 cc22:cmp al,70 ;和70比較 jl cc33 add gs0[2],1 jmp cc88 cc33:cmp al,60 ;和60進行比較 jl cc44 add gs

66、0[3],1 jmp cc88 cc44:add gs0[4],1 ;最后的數據存放在gs0[4] cc88:add si,1 loop c111 ;符合各個分數段的繼續(xù)進行比較,繼續(xù)加到各個分數段 lea si,gs0 lea di,gs2 mov cx,5 cld rep movsb mov cx,5 mov si,0 ct: mov gs0[si],0 ;以si的值來統(tǒng)計,和顯示各個分數段的數量 add si,1

67、loop ct mov cl,n mov ch,0 mov si,0 c13:mov al,mat[si] ;對數學這門成績的統(tǒng)計和分段 cmp al,90 ;和90比較 jl cc1_2 add gs0[0],1 jmp cc8_2 cc1_2:cmp al,80 ;和80比較 jl cc2_2 add gs0[1],1 jmp cc8_2 cc2_2:cmp al,70 ;和70比較

68、 jl cc3_2 add gs0[2],1 jmp cc8_2 cc3_2:cmp al,60 ;和60比較 jl cc4_2 add gs0[3],1 jmp cc8_2 cc4_2:add gs0[4],1 ;60以下的 cc8_2: add si,1 loop c13 ret countt endp ;這個子程序結束 ;****************************************** find proc near ;查找學生成績 call sum ;調用子程序 call ping bj1:output mess1 ;提示輸入學號

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!