匯編課程設計成績管理系統(tǒng)+源代碼(共30頁)_第1頁
匯編課程設計成績管理系統(tǒng)+源代碼(共30頁)_第2頁
匯編課程設計成績管理系統(tǒng)+源代碼(共30頁)_第3頁
匯編課程設計成績管理系統(tǒng)+源代碼(共30頁)_第4頁
匯編課程設計成績管理系統(tǒng)+源代碼(共30頁)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、XXXXX課程設計說明書匯編語言課程設計班級: 網(wǎng)絡B101 姓名: XXX 學號 XXX 設計題目: 學生成績管理 設計時間: 2012.12.09 至 2012.12.21 指導教師: XXX 評 語:_評閱成績:_評閱教師:_一、 課程設計的目的進行程序設計方法和技能的基本訓練,鞏固在課堂上學到的有關程序設計的基本知識和基本方法,通過實際動手能力的培養(yǎng),進一步熟悉匯編語言的結(jié)構和使用方法,達到能獨立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平。二、 設備與環(huán)境PC兼容機、Windows操作系統(tǒng)、匯編程序masm for windows 2010三、課程設計要求 1要求編寫并調(diào)試通過一個小

2、型軟件,實現(xiàn)對軟件或硬件的操作。2遵循模塊化、結(jié)構化的程序設計方法。3.要求程序必須正確。4.程序簡明易懂,多運用輸入輸出提示,出錯信息及必要的注釋。5.要求程序結(jié)構合理,語句使用得當。6.適當追求編程技巧和程序運行效率。四、課程設計的課題和分析題目:學生成績管理分析: 建立學生成績文檔;輸入學生各門功課成績;(假設3門功課);修改指定學號的學生成績;統(tǒng)計指定學號的學生的平均成績、總成績,并在屏幕上顯示; 統(tǒng)計指定學號課程的平均成績,并在屏幕上顯示; 每門課程成績分析在屏幕上顯示3門課程的各個分數(shù)段的學生人數(shù);(分數(shù)段為:>=90;8089;7079;6069;<=59)此處可以以

3、表格的形式給出數(shù)據(jù),或者以坐標曲線的形式給出。對學生成績記錄進行檢索(按學號、姓名), 成績排序(按總成績降序排列), 退出,最好用到文件處理。五、流程圖、總體設計、詳細設計 學生成績管理,最基本能實現(xiàn)的的功能是輸入學號,同時顯示該學生的基本的信息,我設計的成績管理系統(tǒng)功能還包括了顯示該生的語文,英語,數(shù)學三門學科的成績,求出了該生的總分,以及該生的平均分,動態(tài)輸入學生的成績,而且成績是按照三位數(shù)顯示的,可以輸入任意多的學生人數(shù),每個學生都是三門課程,最后統(tǒng)計輸入所有學生的各科各個分數(shù)段的人數(shù),最后顯示出所有學生的成績排名情況。為了使系統(tǒng)更實際一些,我設計的系統(tǒng)包括建立了文件,方便學生的信息一

4、次錄入之后可以保存該數(shù)據(jù),將該數(shù)據(jù)保存在score.txt文件中,而且文件的路徑與該軟件默認的安裝路徑一致;為了使系統(tǒng)更方便用戶使用,我設計了菜單,菜單中設計了六個功能,包括插入,刪除,查詢,修改,查看,退出等。以下是對程序中常用的六個個功能進行解析:1、 數(shù)據(jù)輸入功能:這是必不缺少的功能,學號的輸入,成績的輸入都離不了這個功能,在輸入成績時,特地加了一個判斷功能,在輸入不合理的成績時,程序?qū)⑻崾境鲥e,并要求重新輸入。在輸入學生學號的時候,程序首先會判斷此學生的成績是否存在,如果存在,則程序提示需重新輸入。插入一條學生記錄子模塊,搜索可用單元,接收輸入的記錄,并寫入文件。建立成績表子模塊,控制

5、輸入界面,并多次調(diào)用插入記錄子模塊,完成成績的建立。2、 修改功能:考慮到會存在在輸入成績時,容易輸入錯誤,或者發(fā)生個別學生的試卷被誤判需修改成績等情況,所以加了此功能,在發(fā)生以上情況時可以調(diào)用此功能,修改指定學生的成績。3、 刪除學生信息的功能。如果輸入的學生信息根本不存在,或者發(fā)生其它情況需刪除一個無意義的學生信息時,可以調(diào)用此功能。此功能將實現(xiàn)將指定學號學生的信息刪除。4、 信息查找功能:當需要查詢某個學生的成績或者檢查輸入是否有誤時,可以調(diào)用此功能,此功能實現(xiàn)將指定學號學生的成績顯示出來。實際上在調(diào)用此功能的同時,程序會首先求的總成績,平均成績,然后產(chǎn)生排名結(jié)果,最后將數(shù)據(jù)信息顯示。5

6、、顯示排名信息功能:此功能會將學生成績自動相加,得到每位學生的總成績及平均成績,然后進行排名,得到每個學生的名詞,最后按照輸入順序?qū)⑺袑W生的學號,語文成績,英語成績,數(shù)學成績,平均成績,總成績,名次依次輸出。模塊中排名處理、學科平均成績計算、均需取出某一學科的所有學生成績,因而此操作作為公用子程序以供調(diào)用。個人總分及平均分處理較為簡單,根據(jù)索引逐條處理記錄。排名處理。排名結(jié)果為一維數(shù)組,與學科成績存在對應關系。查詢學生記錄,先進行學號匹配,再輸出一條記錄;查詢該生的所有信息。6、 文件寫入及退出功能。此功能實現(xiàn)將學生的信息保存在一個文件里。此程序默認將文件放在C盤下,名稱為:score,屬性

7、為txt格式的文本文檔。該文檔能夠保存數(shù)據(jù),以便數(shù)據(jù)不需要重復錄入,是系統(tǒng)更能滿足用戶需求。寫入文件完畢后,關閉文件,并退出程序。該程序的流程圖:文件創(chuàng)建和菜單顯示:在創(chuàng)建文件時使用命令請求創(chuàng)建文件,以下是菜單顯示,首先顯示菜單的界面,1號功能接收功能,程序先和菜單中所有的功能都進行比較,假如都不是功能菜單,則提示輸入錯誤,重新輸入,假如輸入正確,則調(diào)用相對應的子程序。創(chuàng)建新文件mov ah,3eh設置屬性設置路徑保存文件菜單的顯示選擇系統(tǒng)功能插入調(diào)用insertY修改N調(diào)用modifyY刪除N調(diào)用deleteY調(diào)用show排名分段調(diào)用countNNNagainY創(chuàng)建成功ESC調(diào)用escYYY

8、文件內(nèi)容顯示:在文件查找的子程序會顯示該生的學號,三門的成績,該生的總分,平均分和該生成績的排名情況,則在顯示學生信息之前先處理數(shù)據(jù),成績和總分是按照三位數(shù)的處理,學號和名次是按照兩位數(shù)處理的,總分是字類型,其他的是字節(jié)類型,所以必須要轉(zhuǎn)換基址才能找到該生相對應的總分。文件的刪除則是先找到該學生的信息,然后顯示該生的成績緩存區(qū)的地址的下一位,則顯示的是空白。 調(diào)用總分子程序調(diào)用平均分子程序?qū)W號存在開始N輸出三門成績以si和n的比較輸出學生信息按三位處理Y輸出平均分需要擴展si指針依次下移2輸出總分輸出名次結(jié)束 調(diào)用二位學號輸入的子程序?qū)W號存在開始N地址相減YAdd si,1刪除完成顯示內(nèi)容為空

9、循環(huán)刪除之后內(nèi)容n減1結(jié)束為0為零則retYN總分和名次定義子程序sum proc near,先是從存放各科的緩存區(qū)移出數(shù)據(jù),然后相加,采用循環(huán),對用戶輸入的數(shù)據(jù)都是按照這個規(guī)則求出該生的總分;ping proc near是求出該生的平均分,把之前存放在zcbx的總分數(shù)據(jù)取出來,然后除以3;存儲器清零cx,si循環(huán)開始開始NMov Mcsi,1名次初值是1Yjge continue總分進行比較Zcbx與Zcdiadd mcsi,1把學生個數(shù)給bx結(jié)束大于或者等于mov dx,zcdiYN名次為字節(jié)則si+1Si 與ax比較為0YN六、遇到的問題及解決辦法問題:在編寫程序時,不知道刪除的程序應該

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

11、,將輸入的學生學號保存在xhbx數(shù)組中,方便使用,然后判斷該學號是否為第一次輸入,是則跳轉(zhuǎn),假如不是第一次輸入,則提示用戶該學號已經(jīng)存在,需要重新輸入,跳轉(zhuǎn)到輸入成績的子程序,在調(diào)用shuruu宏,此功能是處理三位數(shù),使成績是按照三位數(shù)顯示的,而且必須是在合理的范圍內(nèi)的,假如輸入的數(shù)據(jù)是不合理的則又跳轉(zhuǎn)到重新輸入的界面,要求用戶輸入有效數(shù)據(jù),數(shù)據(jù)輸入完成之后則存入相對應的緩存區(qū)。;* input proc near ;輸入學生學號,成績e6: output mess1 shuru mov bl,n ;統(tǒng)計輸入學生個數(shù) mov bh,0 mov xhbx,dl ;輸入的個數(shù)同時以地址指針形式顯示

12、 cmp bx,0 ;判斷是不是第一次輸入,如果是,則跳過比較程序 je qq1 ;繼續(xù)輸入成績 mov cl,n ;如果不是第一次輸入則要將輸入的學號與以前輸入的比較 cbw mov si,0 mov al,xhbxe7: cmp al,xhsi je e5 add si,1 loop e7 jmp qq1e5: output ts4 jmp e6 qq1:output mess2 ;如果不是重復的學號則可以繼續(xù)輸入成績和其他信息 output mess4 mov si,0 mov cx,3qq3:shuruu cmp dx,78h ;比較輸入的成績是否大于120,如果大于120的話,那么重

13、新輸入成績 jbe qq2 output ts3 ;提示輸入錯誤 jmp qq1qq2:mov bufsi,dl ;把輸入的學生信息保存在緩存區(qū) output bg add si,1loop qq3 mov bl,n cbw mov al,buf0 ;以下是把之前的成績數(shù)據(jù)保存到相對應的緩存區(qū) mov chibx,al mov al,buf1 mov engbx,al mov al,buf2 mov matbx,al retinput endp;*該關鍵代碼是實現(xiàn)該學號學生的總分和名次的交換以及顯示,首先是先把即將要用到的存儲器全部清零,將名次mcsi初值為1,si依次+1,因為存放名次的數(shù)組

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

15、出 mov bl,2 mul bl mov cl,n mov ch,0 mov si,0 mov bx,0 mov di,0rrb: mov dx,zcdirra: cmp dx,zcbx ;總分之間的比較 jge continue ;大于等于的那個分數(shù)則為第一名 add mcsi,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;*七、結(jié)果

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

17、明了好多東西是可以靠自己領悟和自學得來的;課程設計完成了,但是我設計的成績管理系統(tǒng)還是存在不足:成績都是用整數(shù)表示的,沒有實現(xiàn)浮點運算;平均成績也是按照整型的,查詢功能中只能通過學號查詢,沒有實現(xiàn)學號或者通過姓名查詢的選擇;主菜單界面設計不夠人性化,不夠簡單明了,缺少美觀,沒有使用彩色的界面。雖然我的程序中出現(xiàn)那么多的不完美,但是只有我有一顆追求完美的心,則我就會有一個繼續(xù)學下去的心。此次的課程設計,我還是和以前的綜合實驗的感觸有些類似,在此之前,大多數(shù)時候都在用高級語言編寫程序,已經(jīng)習慣了高級語言的方便靈活的語法形式。一下子突然轉(zhuǎn)為用匯編語言進行程序設計,總是要經(jīng)過一個很不習慣的適應過程。但

18、是我們學習編語言,可以讓我們更好地理解程序設計的本質(zhì)和原理。對以后的學習和工作都帶好很多好處。這次在編寫和調(diào)式匯編程序過程中體會最深的就是,沒有好的工具,匯編程序的調(diào)式工作太困難了!這次使用的是微軟的masm5.0編譯工具,是DOS底下的編譯工具,但是沒有其它可視化的調(diào)式工具,只能利用DOS底下的debug命令進行調(diào)式。程序稍微長一點的時候,調(diào)試起來就不是那么方便了,主要問題是在debug中雖然可以反匯編,但是反匯編后的源程序與自己寫的不太一樣了(符號常量和標號都變成了數(shù)字地址),不方便辨認當前調(diào)式程序?qū)谠创a中的哪一行。這些疑問都是我完成課設的難點,自己學的不是很透徹,在完成報告之前,我

19、花了一天的時間和同學討論我的程序,通過對這學生成績管理的的設計,使我對匯編語言的基本知識的使用更加熟練,同時也增加了我對匯編語言的一些認識,在作業(yè)完成過程中通過和同學的交流,也增加了合作的技巧。通過查閱資料也學到了一些課本上沒有的東西,有幸接觸到中斷這個功能,同時更是讓我明白了即使是低級的匯編語言也可以完成高級語言可以完成的程序,歷時兩周終于完成, 這次課程設計中有很多源程序的子程序的源代碼可以從資料中或獲得,但有很多都需要我們仔細琢磨才能明白其中的原理,同時程序中需要調(diào)用大量的BIOS和DOS系統(tǒng)功能調(diào)用,如顯示字符串的功能調(diào)用、光標設置的功能的調(diào)用、清屏的功能調(diào)用等,這些問題如不查詢資料就

20、無法理解,因為上匯編語言基礎時對這些DOS和BIOS的系統(tǒng)功能了解很少,所以我們需要查詢DOS和BIOS功能的系統(tǒng)調(diào)用的基本信息。還有在一些循環(huán)結(jié)構設計上也有許多不能理解的地方,都需要加以深刻的理解才能將問題順利的解決,多整個程序的理解也有了更進一步的了解。有時候遇到自己查資料和不能理解的地方時,自己不能解決時,先找同學討論一下,會有意想不到的收獲,有些問題就會迎刃而解。即使是花了兩個周的時間完成一個程序,但是我可以驕傲的告訴別人我完成一個程序了,完成了一個設計,將來我更有底氣的告訴別人這個是我的成品,就如老師說的,我們可以驕傲的告訴面試老師我曾經(jīng)完成的作品。目前已是大三的我們,我們完成的課程

21、設計已經(jīng)很多了,但是我對此次的課設感慨真的很多,因為這次完成真的太不容易,因為我自己本人覺得我真的一點都學不會,居然也可以完成如此浩大的程序編寫,真的是我想不到的,雖然此程序我參考了資料,咨詢了同學,但是那些收獲是我都很驚嘆的,進一步的拓寬了我的匯編知識,同時最重要的一點是要學的精通可以靠自己自學,很多知識是我們自己就可以領悟的。雖然本程序仍然存在不少缺點和不足,但是只要我有心,只要我舍得花時間去自學,看看視頻,一定能使我的編程能力提升,克服所以的不足,設計出更出色的作品。九 參考文獻1鄭曉薇編著,匯編語言機械工業(yè)出版2IBMPC匯編語言程序設計實驗教程3IBMPC匯編語言程序設計(第2版)十

22、 附錄。用戶手冊使用說明:可以根據(jù)我上面粘貼的運行界面進行使用,選擇自己需要的功能源程序清單:huancun macro j,t ;將三位數(shù)的數(shù)據(jù)轉(zhuǎn)換成為三個對應的字符,并將其存入緩沖區(qū)zs中j,t是兩個啞元 push bx ;入棧是對存儲器里面的值進行保護 mov si,t ;對兩個啞元進行說明 mov ax,j mov bl,100 ;對輸出的數(shù)據(jù)進行處理,顯示出百位十位個位 div bl add al,30h mov zssi,al ;把處理好的百位進行緩存區(qū) add si,1 mov al,ah cbw mov bl,10 ;對十位的處理 div bl add al,30h add a

23、h,30h mov zssi,al add si,1 mov zssi,ah ;對個位的處理, add si,1 ;對輸入的數(shù)據(jù)反復處理,指針下移 pop bx ;存儲器出棧endmclear 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,79 ;右上角的列號 IN

24、T 10H ;調(diào)用10號功能,設置屏幕的坐標是(0,0)(24,79)ENDM kong macro ;回車換行的宏定義 mov ah,2 ;2號功能輸出回車換行 mov dl,0ah int 21h mov ah,2 mov dl,0dh int 21hendmoutput macro p ;字符串輸出 mov dx,offset pmov ah,9int 21hendmshuru macro ;二位數(shù)數(shù)據(jù)輸入 mov ah,01 ;1號功能的輸入,輸入的值放在dl中int 21hsub al,30h ;對輸入的數(shù)據(jù)先減掉30hcbw ;字節(jié)擴展成字類型mov bl,10 ;對輸入的數(shù)據(jù)進行

25、乘以10mul bl mov dl,al ;把al中的乘積取出來,放在dl中 mov ah,01hint 21hsub al,30h ;處理完了要加上30h再用一號功能輸出 add dl,alendm zhuane macro e,b ;將二位數(shù)轉(zhuǎn)換成對應兩個字符,并將其存入緩沖區(qū)zs push bx mov si,b ;以下是對兩個啞元的說明 mov al,e cbw mov bl,10 ;對二位數(shù)據(jù)的處理就是先顯示出十位然后顯示出個位 div bl add ah,30h add al,30h mov zssi,al ;處理好的數(shù)據(jù)存放在zs存儲區(qū) add si,1 mov zssi,ah

26、add si,1 ;指針再下移,繼續(xù)處理下一個 pop bxendm zhuans macro f,s ; 將三位數(shù)成績轉(zhuǎn)換成為對應的三個字符,并存入緩沖區(qū)zs中 push bx mov si,s mov al,f cbw ;需要擴展,字節(jié)擴展成字 mov bl,100 div bl add al,30h mov zssi,al ;百位存放在存儲區(qū) add si,1 mov al,ah ;把余數(shù)取出來 cbw ;字節(jié)擴展成字 mov bl,10 div bl add al,30h ;把ah中的余數(shù)取出來再進行除以10,最后的余數(shù)還是存放在ah中,此次的商放在存儲區(qū)zs中 add ah,30h

27、mov zssi,al add si,1 mov zssi,ah ;最后的余數(shù)在ah中,其實就是三位數(shù)的個位 add si,1 ;指針下移 pop bx endmshuzi macro r ;二位數(shù)據(jù)輸出,以下是對數(shù)據(jù)輸出的處理 mov al,r cbw mov bl,10 ;對數(shù)據(jù)的輸出和輸入一樣也需要進行處理,以十進制顯示出來 div bl mov bl,ah mov dl,al add dl, 30hmov ah,2 ;2號功能顯示十位int 21h mov dl,bladd dl,30hmov ah,2 ;2號功能顯示個位int 21hendmshuruu macro ;三位數(shù)數(shù)據(jù)輸入

28、 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,axendmshuzii macro u ;三位數(shù)數(shù)據(jù)輸出 mov ax,u mov bl,100 ;對百位的處理,把100賦給bl div bl mov bl,ah ;商在al中,余數(shù)在ah中 mov dl,al ;把商從al中取出來 add dl,30h ;在顯示百位之前加30h,再

29、放到dl中 mov ah,2 ;2號功能顯示 int 21h shuzi bl endm DATAS SEGMENTm dw 0 ;移動文件指針時,選擇絕對移動方式,則m代表指針偏移量zs db 18 dup (?) ;緩沖區(qū)用來存放單個學生信息的字符pathnam db 'C:score.txt',00h ;建立目錄項handle dw ? ;文件句柄buf db 3 dup(?) ;輸入緩沖區(qū)zc dw 100 dup(?) ;存放總成績的數(shù)組pj db 100 dup(?) ;存放平均成績數(shù)組n db 0 ;存放輸入的學生信息的個數(shù)gs0 db 5 dup (0) ;記錄

30、所查詢科目分數(shù)段的gs1 db 5 dup(0)gs2 db 5 dup(0) mc db 100 dup (1) ;存放學生的名次的數(shù)組 chi db 100 dup (?) ;存放學生成績的數(shù)組 eng db 100 dup (?) mat db 100 dup (?) xh db 100 dup (?) ;存放學生學號的數(shù)組 cour0 db 'chinese','$'語文 cour1 db 'english','$'英語 cour2 db 'maths ','$'數(shù)學 ts db 13,10

31、,'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,'The school number you input is exist,ple

32、ase try again!',13,10,'$' cai0 db '* The Student Grade Management System *',0ah,0dh,'$' cai00 db '* made by wei qiao yuan *',0ah,0dh,'$' cai db '* Insert a data <i>',13,10,'$'菜單的格式 cai1 db '* Modify a data <m>',13,10,

33、9;$' cai2 db '* Delete a data <d>',13,10,'$' cai3 db '* Find a data <f>',13,10,'$' cai4 db '* Show the rank <s>',13,10,'$' cai6 db '* Show the count <c>',13,10,'$' cai5 db '* Exit with the keyboard of ESC

34、 <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) ',13,10,'$' mess2 db 13,10, 'Please input thre

35、e scores(0-120)',13,10,'$' mess4 db 'chinese english maths ',13,10,'$' mess3 db ' Thank you ',13,10,'$' strr1 DB '*score and rank*',13,10,'$'strr2 DB 13,10,'number wen eng math average sum rank ',13,10,'$'strr3 db 13,10,'

36、;course >=90 >=80 >=70 >=60 <60 ',13,10,'$'bg db ' ','$' DATAS ENDS STACKS SEGMENT STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov es,ax mov ah,3ch ;請求創(chuàng)建文件 mov cx,00 ;默認屬性 lea dx,pathnam ;裝入pathnam的地址 int 21h mov

37、 handle,ax ;保存文件句柄main: ; 主菜單顯示 output cai0 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 ;調(diào)用insert子程序,輸入學生學號,成績 jmp rkn1: cmp al,'m' jne n2 call modify ;調(diào)用modify子程

38、序,修改指定學生的成績 jmp rkn2: cmp al,'d' ;調(diào)用de子程序,刪除制定學生的成績 jne n3 call de jmp rkn3: cmp al,'f' ;調(diào)用find子程序,顯示指定學生的成績及名次 jne n4 call find jmp rkn4: cmp al,'s' ;調(diào)用show子程序,顯示所有學生的各科成績,平均成績,總成績及名次 jne n5 call show jmp rkn5: cmp al,'c' ;調(diào)用showw子程序,顯示各科各分數(shù)段的學生數(shù)量 jne n6 call showw j

39、mp rkn6: cmp al,1bh ;調(diào)用exit子程序,將數(shù)據(jù)保存到score.txt文件中,并退出程序 jne n7 call exitn7: clear ;清屏 output ts1 ;以上都不選擇則說明出錯 jmp main ;再次跳轉(zhuǎn)到菜單rk: output ts mov ah,1 int 21h clear jmp main;*exit proc near ;退出 mov cl,n ;寫入文件的次數(shù) cbw mov bx,0 mov di,0zh: push di ;保存di,cx,bx中的內(nèi)容 push bx push cx mov si,0 ;對si進行賦初值 zhuan

40、e xhbx,si ;調(diào)用宏zhuane將兩位數(shù)的學號轉(zhuǎn)換為對應的二個字符,并存放到zs緩沖區(qū)中 zhuans chibx,si ;調(diào)用宏zhuans將三位數(shù)的語文成績轉(zhuǎn)換為對應的三個字符,并存放到zs緩沖區(qū)中 zhuans engbx,si ;調(diào)用宏zhuans將三位數(shù)的英語成績轉(zhuǎn)換為對應的三個字符,并存放到zs緩沖區(qū)中 zhuans matbx,si ;調(diào)用宏zhuans將三位數(shù)的數(shù)學成績轉(zhuǎn)換為對應的三個字符,并存放到zs緩沖區(qū)中 zhuans pjbx,si ;調(diào)用宏zhuans將三位數(shù)的平均成績轉(zhuǎn)換為對應的三個字符,并存放到zs緩沖區(qū)中 huancun zcdi,si ;調(diào)用宏zhua

41、nss將三位數(shù)的總成績成績轉(zhuǎn)換為對應的三個字符,并存放到zs緩沖區(qū)中 zhuane mcbx,si ;調(diào)用宏zhuane,將兩位數(shù)的名詞,轉(zhuǎn)換為對應的二個字符,并存放到zs緩沖區(qū)中 mov ah,42h ;移動讀寫指針 mov al,00 ;移動方式為絕對移動方式 mov bx,handle mov cx,00 mov dx,m ;指針偏移量 int 21h add m,20 mov ah,40h ;調(diào)用40h功能,請求寫文件 mov bx,handle ;獲取文件句柄 mov cx,19 ;寫入長度為19個字節(jié) lea dx,zs ;將緩沖區(qū)zs中的內(nèi)容寫入文件score.txt int 2

42、1h pop cx pop bx pop di add di,2 ;目的指針加2 add bx,1 sub cx,1 ;輸入一個之后cx統(tǒng)計的個數(shù)就依次減1 cmp cx,0 ;判斷寫入是否完畢 jg zh mov bx,handle ;寫入完畢,關閉文件 mov ah,3eh int 21h clear output mess3 ;關閉文件之后就顯示提示語句MOV AH,4CH ;退出程序 INT 21H retexit endp ;子程序結(jié)束;* *sum proc near ;求學生的總成績 mov cl,n ;對運用到的存取器進行清零 mov ch,0 mov si,0 mov bx,

43、0sss:mov al,chisi ;將三科成績相加,將總成績傳給數(shù)組zc mov ah,0 ;高位清零 mov dl,matsi ;存放數(shù)學的數(shù)組 mov dh,0 add ax,dx ;數(shù)學和語文相加 mov dl,engsi mov dh,0 add ax,dx mov zcbx,ax ;最后把語文數(shù)學和英語的三門成績總分存放在zc總分的緩存區(qū) add bx,2 add si,1 loop sss ;運用循環(huán)對輸入的三門成績求總分 retsum endp;*ping proc near ;求學生的平均成績 mov cl,n ;n是統(tǒng)計輸入學生信息的個數(shù) cbw mov si,0 mov

44、bx,0p_p: mov ax,zcbx ;將總成績除以三,獲取的數(shù)據(jù)傳送給數(shù)組pj mov dl,3 div dl mov pjsi,al ;把除以之后的商從al中總?cè)〕龇湃雙j平均的存儲區(qū) add si,1 ;下標依次加1 add bx,2 ;基址加2 loop p_p retping endp;*modify proc near ;修改學生學號,成績md1:output mess1 ;提示語句 shuru mov bl,n ;把學生個數(shù)給bl mov bh,0 mov al,dl mov si,0md: cmp al,xhsi ;先查找輸入的學生是否存在 je qq1_1 ;查到的話,就

45、跳轉(zhuǎn)到qq1_1輸入修改的值,也就是重新輸入 add si,1 cmp si,bx ;不存在的話則繼續(xù)輸入繼續(xù)比較 jbe md output mess jmp md1 ;不相等繼續(xù)輸入學號qq1_1: mov di,si output mess2 ;輸入學號 output mess4 ;輸入成績 mov si,0 mov cx,3 ;cx存放的的科目qq3_1:shuruu ;分別輸入語文,英語,數(shù)學成績,并將其放在緩沖區(qū)buf中 cmp dx,78h ;比較輸入的成績是否大于120,如果大于120的話,那么重新輸入成績 jbe qq2_1 output ts3 jmp qq1_1qq2_1:mov bufsi,dl output bg ;輸出一段空格 add si,1loop qq3_1 mov al,buf0 ;將存入buf中的成績,分別賦值給存放對應科目的成績的數(shù)組 mov chidi,al mov al,buf1 ;buf1放的是英語 mov engdi,al mov al,buf2 ;buf2放的是數(shù)學 mov matdi,al ret modify endp ;*countt proc near ;統(tǒng)計各科各個分數(shù)段學生的個數(shù) mov cx,5 ;有五個成績分

溫馨提示

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

評論

0/150

提交評論