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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

12、針形式顯示 cmp bx,0 ;判斷是不是第一次輸入,如果是,則跳過比較程序 je qq1 ;繼續(xù)輸入成績 mov cl,n ;如果不是第一次輸入則要將輸入的學(xué)號與以前輸入的比較 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 ;如果不是重復(fù)的學(xué)號則可以繼續(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 ;把輸入的學(xué)生信息保存在緩存區(qū) output bg add si,1loop qq3 mov bl,n cbw mov al,buf0 ;以下是把之前的成績數(shù)據(jù)保存到相對應(yīng)的緩存區(qū) mov chibx,al mov al,buf1 mov engbx,al mov al,buf2 mov matbx,al retinput endp;*該關(guān)鍵代碼是實現(xiàn)該學(xué)號學(xué)生的總分和名次的交換以及顯示,首先是先把即將要用到的存儲器全部清零,將名次mcsi初值為1,si依次+1,因為存放

14、名次的數(shù)組是字節(jié)類型的,然后把n學(xué)生的個數(shù)賦給cl,接下來就是處理查找總分的地址指針,因為總分?jǐn)?shù)組是字型所以需要使bl*2,然后cx清零,按照學(xué)號找到相對應(yīng)該生的總分,兩個總分相比較此時大的則暫時為第一名,然后再繼續(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 ;大于等于的那個分?jǐn)?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;

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

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

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

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

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

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

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

23、add ah,30h mov zssi,al add si,1 mov zssi,ah ;對個位的處理, add si,1 ;對輸入的數(shù)據(jù)反復(fù)處理,指針下移 pop bx ;存儲器出棧endmclear MACRO ;清屏的宏定義 MOV AH,2 ;設(shè)置光標(biāo)位置 MOV DH,0 ;行號 MOV DL,0 ;列號 INT 10H ;屏幕及光標(biāo)控制int 10h MOV AH,6 ;屏幕開窗口 MOV AL,0 MOV BH,7 ;顏色屬性是正常顯示,黑底白字 MOV CH,0 ;左上角的行號 MOV CL,0 ;左上角的列號 MOV DH,24 ;右上角的行號 MOV DL,79 ;右上角的

24、列號 INT 10H ;調(diào)用10號功能,設(shè)置屏幕的坐標(biāo)是(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 ;對輸入

25、的數(shù)據(jù)進(jìn)行乘以10mul bl mov dl,al ;把al中的乘積取出來,放在dl中 mov ah,01hint 21hsub al,30h ;處理完了要加上30h再用一號功能輸出 add dl,alendm zhuane macro e,b ;將二位數(shù)轉(zhuǎn)換成對應(yīng)兩個字符,并將其存入緩沖區(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 zss

26、i,ah add si,1 ;指針再下移,繼續(xù)處理下一個 pop bxendm zhuans macro f,s ; 將三位數(shù)成績轉(zhuǎn)換成為對應(yīng)的三個字符,并存入緩沖區(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ù)取出來再進(jìn)行除以10,最后的余數(shù)還是存放在ah中,此次的商放在存儲區(qū)zs中 add ah

27、,30h 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ù)的輸出和輸入一樣也需要進(jìn)行處理,以十進(jìn)制顯示出來 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 ;三位

28、數(shù)數(shù)據(jù)輸入 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 ;在顯示百位之前加

29、30h,再放到dl中 mov ah,2 ;2號功能顯示 int 21h shuzi bl endm DATAS SEGMENTm dw 0 ;移動文件指針時,選擇絕對移動方式,則m代表指針偏移量zs db 18 dup (?) ;緩沖區(qū)用來存放單個學(xué)生信息的字符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 ;存放輸入的學(xué)生信息的個數(shù)gs0 db 5 dup (0) ;記錄所查詢科目

30、分?jǐn)?shù)段的gs1 db 5 dup(0)gs2 db 5 dup(0) mc db 100 dup (1) ;存放學(xué)生的名次的數(shù)組 chi db 100 dup (?) ;存放學(xué)生成績的數(shù)組 eng db 100 dup (?) mat db 100 dup (?) xh db 100 dup (?) ;存放學(xué)生學(xué)號的數(shù)組 cour0 db chinese,$;語文 cour1 db english,$;英語 cour2 db maths ,$;數(shù)學(xué) ts db 13,10,You are successful,press anykey to continue!,13,10,$;以下是提示語句

31、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,please try again!,13,10,$ cai0 db * The Student Grade Management System *,0ah,0dh,$ cai00 db * made by wei qiao yuan *,0ah,0dh,$

32、cai db * Insert a data ,13,10,$;菜單的格式 cai1 db * Modify a data ,13,10,$ cai2 db * Delete a data ,13,10,$ cai3 db * Find a data ,13,10,$ cai4 db * Show the rank ,13,10,$ cai6 db * Show the count ,13,10,$ cai5 db * Exit with the keyboard of ESC ,13,10,$ ts2 db Please choose the Function,13,10,$ mess db

33、 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 three 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

34、 eng math average sum rank ,13,10,$strr3 db 13,10,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 ;默認(rèn)屬性 lea dx,pathnam ;裝入pathnam的地址 int 21h mov handle

35、,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子程序,輸入學(xué)生學(xué)號,成績 jmp rkn1: cmp al,m jne n2 call modify ;調(diào)用modify子程序,修改指定學(xué)生的成績 jmp rkn2: cmp a

36、l,d ;調(diào)用de子程序,刪除制定學(xué)生的成績 jne n3 call de jmp rkn3: cmp al,f ;調(diào)用find子程序,顯示指定學(xué)生的成績及名次 jne n4 call find jmp rkn4: cmp al,s ;調(diào)用show子程序,顯示所有學(xué)生的各科成績,平均成績,總成績及名次 jne n5 call show jmp rkn5: cmp al,c ;調(diào)用showw子程序,顯示各科各分?jǐn)?shù)段的學(xué)生數(shù)量 jne n6 call showw jmp rkn6: cmp al,1bh ;調(diào)用exit子程序,將數(shù)據(jù)保存到score.txt文件中,并退出程序 jne n7 call

37、 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進(jìn)行賦初值 zhuane xhbx,si ;調(diào)用宏zhuane將兩位數(shù)的學(xué)號轉(zhuǎn)換為對應(yīng)的二個字符,并存放到zs緩沖區(qū)中 zhuans chibx,si ;調(diào)

38、用宏zhuans將三位數(shù)的語文成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 zhuans engbx,si ;調(diào)用宏zhuans將三位數(shù)的英語成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 zhuans matbx,si ;調(diào)用宏zhuans將三位數(shù)的數(shù)學(xué)成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 zhuans pjbx,si ;調(diào)用宏zhuans將三位數(shù)的平均成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 huancun zcdi,si ;調(diào)用宏zhuanss將三位數(shù)的總成績成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 zhuane mcbx,si ;調(diào)用宏zhuane,將兩位數(shù)的名

39、詞,轉(zhuǎn)換為對應(yīng)的二個字符,并存放到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 21h pop cx pop bx pop di add di,2 ;目的指針加2 add bx,1 sub cx,1 ;輸入一個之后c

40、x統(tǒng)計的個數(shù)就依次減1 cmp cx,0 ;判斷寫入是否完畢 jg zh mov bx,handle ;寫入完畢,關(guān)閉文件 mov ah,3eh int 21h clear output mess3 ;關(guān)閉文件之后就顯示提示語句MOV AH,4CH ;退出程序 INT 21H retexit endp ;子程序結(jié)束;* *sum proc near ;求學(xué)生的總成績 mov cl,n ;對運用到的存取器進(jìn)行清零 mov ch,0 mov si,0 mov bx,0sss:mov al,chisi ;將三科成績相加,將總成績傳給數(shù)組zc mov ah,0 ;高位清零 mov dl,matsi ;

41、存放數(shù)學(xué)的數(shù)組 mov dh,0 add ax,dx ;數(shù)學(xué)和語文相加 mov dl,engsi mov dh,0 add ax,dx mov zcbx,ax ;最后把語文數(shù)學(xué)和英語的三門成績總分存放在zc總分的緩存區(qū) add bx,2 add si,1 loop sss ;運用循環(huán)對輸入的三門成績求總分 retsum endp;*ping proc near ;求學(xué)生的平均成績 mov cl,n ;n是統(tǒng)計輸入學(xué)生信息的個數(shù) cbw mov si,0 mov bx,0p_p: mov ax,zcbx ;將總成績除以三,獲取的數(shù)據(jù)傳送給數(shù)組pj mov dl,3 div dl mov pjsi

42、,al ;把除以之后的商從al中總?cè)〕龇湃雙j平均的存儲區(qū) add si,1 ;下標(biāo)依次加1 add bx,2 ;基址加2 loop p_p retping endp;*modify proc near ;修改學(xué)生學(xué)號,成績md1:output mess1 ;提示語句 shuru mov bl,n ;把學(xué)生個數(shù)給bl mov bh,0 mov al,dl mov si,0md: cmp al,xhsi ;先查找輸入的學(xué)生是否存在 je qq1_1 ;查到的話,就跳轉(zhuǎn)到qq1_1輸入修改的值,也就是重新輸入 add si,1 cmp si,bx ;不存在的話則繼續(xù)輸入繼續(xù)比較 jbe md ou

43、tput mess jmp md1 ;不相等繼續(xù)輸入學(xué)號qq1_1: mov di,si output mess2 ;輸入學(xué)號 output mess4 ;輸入成績 mov si,0 mov cx,3 ;cx存放的的科目qq3_1:shuruu ;分別輸入語文,英語,數(shù)學(xué)成績,并將其放在緩沖區(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中的成績,分別賦值給存放對應(yīng)科目的成績的數(shù)組 mov chidi,al mov al,buf1 ;buf1放的是英語 mov engdi,al mov al,buf2 ;buf2放的是數(shù)學(xué) mov matdi,al ret modify endp ;*countt proc near ;統(tǒng)計各科各個分?jǐn)?shù)段學(xué)生的個數(shù) mov cx,5 ;有五個成績分?jǐn)?shù)段 mov si,0zl: mov gs0si,0 ;存放語文科目各個分?jǐn)?shù)段的緩存區(qū) add si,1 loop zl

溫馨提示

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

評論

0/150

提交評論