版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、武漢理工大學(xué)匯編語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告學(xué)生成績(jī)管理系統(tǒng)程序設(shè)1、需求說(shuō)明用匯編語(yǔ)言編寫一個(gè)學(xué)生成績(jī)管理系統(tǒng),實(shí)現(xiàn)基本學(xué)生成績(jī)管理,功能包括添加學(xué)生信息、修改學(xué)生信息、刪除學(xué)生信息、打印學(xué)生信息、瀏覽學(xué)生信息存儲(chǔ)文件以及粗略的統(tǒng)計(jì)學(xué)生信息,程序界面友好,有輸入界面提示,有菜單功能。2、設(shè)計(jì)要求2.1設(shè)計(jì)說(shuō)明該程序要求具備的功能:清晰且易于操作的用戶界面,在文本編輯界面中輸入學(xué)生成績(jī)。其中“i”表示插入,“l(fā)”表示瀏覽,“q”表示查詢,“e”表示退出,“d”表示刪除,“m”表示修改,“c”表示統(tǒng)計(jì)各分?jǐn)?shù)段人數(shù),“p”表示打印.以上各功能應(yīng)該能單獨(dú)運(yùn)行和連續(xù)運(yùn)行。2.2開發(fā)平臺(tái)與開發(fā)工具該程序使用
2、dos操作系統(tǒng)32位實(shí)模式匯編語(yǔ)言編寫,使用的編譯器為微軟的masm5.0,調(diào)試工具為dos下的debug.exe程序。2.3數(shù)據(jù)結(jié)構(gòu)程序采用靜態(tài)鏈表的方式來(lái)存儲(chǔ)學(xué)生信息,鏈表結(jié)點(diǎn)描述如下: student struc m_sname db 6 dup( ) m_snum db 8 dup( ) m_sscore db 3 dup( ) student ends 3、 設(shè)計(jì)思路3.1設(shè)計(jì)方案及基本流程3.11總體結(jié)構(gòu)分析整個(gè)程序采用總程序調(diào)用子程序的方式。主程序完成菜單的顯示,子程序完成一個(gè)獨(dú)立功能的方法實(shí)現(xiàn)。各子程序的實(shí)現(xiàn)方法簡(jiǎn)要描述如下:1、設(shè)計(jì)insert(錄入)子程序時(shí),先打開文件sc
3、ore.txt,并置文件指針到文件尾,然后調(diào)用get_rec子程序接受用戶的輸入,再把用戶的輸入寫入文件,最后關(guān)閉文件返回主程序。2、設(shè)計(jì)delete(刪除)子程序時(shí),先打開文件,再調(diào)用宏getin得到要?jiǎng)h除的學(xué)生的姓名,然后讀文件中的記錄,直到其記錄的名與所輸入的名字相同為止,把文件指針后退8個(gè)字符(即4門課程所占的空間),寫入8個(gè)“0”字符,關(guān)閉文件返回主程序。3、設(shè)計(jì)list(瀏覽)子程序時(shí),先打開文件,然后讀一個(gè)記錄,并通過(guò)調(diào)用宏show_item將其顯示到屏幕上,若文件指針沒有到達(dá)文件尾,則繼續(xù)讀記錄并顯示,當(dāng)文件指針到達(dá)文件尾時(shí),則關(guān)閉文件返回主程序。4、設(shè)計(jì)modify(修改)子
4、程序時(shí),先打開文件score.txt,調(diào)用get_recz子程序得到要修改的記錄,然后讀文件中的記錄,并與用戶輸入的記錄作比較(只比較記錄中的名字部分),若不同則讀下一個(gè)記錄,若相同則將文件指針后退23個(gè)字符(一個(gè)記錄為23個(gè)字符的長(zhǎng)度),然后把用戶輸入的記錄寫入文件,最后關(guān)閉文件返回主程序。5、設(shè)計(jì)count(統(tǒng)計(jì))子程序,先打開文件,然后讀記錄,比較記錄的第16個(gè)字符(數(shù)學(xué)成績(jī)的高位)并統(tǒng)計(jì),直到文件指針到達(dá)文件尾,最后關(guān)閉文件調(diào)用宏show_item顯示統(tǒng)計(jì)結(jié)果,返回主程序。6、設(shè)計(jì)query(查詢)子程序時(shí),先打開文件,通過(guò)宏getin得到要查找學(xué)生的姓名,然后讀文件記錄,并同要查找的
5、學(xué)生姓名比較,若相同則輸出,若不同則繼續(xù)讀文件記錄,最后顯示查詢結(jié)果,關(guān)閉文件返回程序。3.12單元子程序設(shè)計(jì)下面詳細(xì)分析程序中用到的主要的子程序。(1)insert子程序insert子程序的功能是錄入一條記錄。 首先保留現(xiàn)場(chǎng)入棧。然后用dos中斷3d號(hào)功能打開fname指定的文件。然后用宏cleari清除屏幕右半部的記錄輸入?yún)^(qū)域。在記錄的第一項(xiàng)處置光標(biāo),用get_rec子程序獲取內(nèi)容。用dos中斷42h號(hào)功能將指針移到文件末尾。 在用dos中斷40h號(hào)功能將放在buffer緩沖區(qū)的23個(gè)字節(jié)的內(nèi)容寫到文件中,接著關(guān)閉文件,重新設(shè)置光標(biāo)置在顯示記錄位置。 最后彈?;謴?fù)現(xiàn)場(chǎng)。(2)get_rec
6、子程序的功能是獲取新的記錄內(nèi)容。 get_rec子程序的功能是獲取新的記錄內(nèi)容。 首先用宏getin獲取學(xué)生的姓名,放入buffer2中,最多15個(gè)字符,如果遇到回車鍵則提前結(jié)束。再用循環(huán)方式格將buffer2中的15個(gè)字符送到buffer1中。然后用宏set_pi將光標(biāo)置于數(shù)字成績(jī)輸入項(xiàng)后,等待鍵盤輸入。輸入的成績(jī),先放在buffer2中,然后加到buffer1中的姓名后面。輸入為2個(gè)字符或遇到回車鍵時(shí)提前結(jié)束。接著用同樣的方法輸入英語(yǔ)成績(jī)、計(jì)算機(jī)成績(jī)和中文成績(jī)。完成后,這個(gè)子程序就得到了一個(gè)記錄的所以信息。(3)openf子程序 openf是一個(gè)非常簡(jiǎn)單的子程序。它的作用是打開一個(gè)文件并把
7、文件句柄保存在數(shù)據(jù)段的handle緩沖區(qū)中。(4)query子程序query子程序的作用上查詢一條記錄。首先保留現(xiàn)場(chǎng)(這些操作每個(gè)子程序都基本相同,以后不在贅述)。然后分別清除界面右上方和下邊的區(qū)域。打開fname指定的文件并保留文件句柄。將光標(biāo)置于界面的下半空白部分開始處,用宏getin獲取最多15個(gè)字符的輸入(姓名),放在buffer1中。顯示記錄各字段的標(biāo)題。然后用下面這段程序讀出一條記錄(23個(gè)字節(jié))放在buffer2中,然后將buffer1中的內(nèi)容和buffer2中進(jìn)行比較,看是否相同。如果不同,再繼續(xù)向下從文件中讀出23個(gè)字節(jié)比較,循環(huán)向下,直到相同或文件結(jié)束為止。如果相同,則顯示
8、該條記錄,然后關(guān)閉文件,恢復(fù)現(xiàn)場(chǎng)。(5)modify子程序 modify子程序的功能是修改記錄。 先保護(hù)現(xiàn)場(chǎng),然后清除右上部分的記錄輸入?yún)^(qū)域,接著打開文件。 用fet_rec子程序獲取輸入的記錄信息,并存入buffer1中。從打開的文件中讀取一個(gè)記錄的內(nèi)容(23個(gè)字節(jié))放在buffer2中。 比較記錄前面的15個(gè)字節(jié)(姓名),如果不同,則讀取下一個(gè)記錄;如果相同,則回移一個(gè)記錄的指針,回到剛才這條記錄的位置(因?yàn)樽x取一個(gè)記錄, 指針已移到下一個(gè)記錄上)。將放在fuffer1中的輸入的記錄內(nèi)容寫到剛才這條記錄在文件中的位置上,從而實(shí)現(xiàn)此記錄的修改。最后關(guān)閉程序,恢復(fù)現(xiàn)場(chǎng)。(6)delete子程序
9、delete子程序的功能是刪除一條記錄。首先保留現(xiàn)場(chǎng),清除屏幕。然后打開文件,保留文件句柄。用宏getin獲取15個(gè)字節(jié)的姓名字符,放在fuffer1中。讀取一條記錄(23個(gè)字節(jié)),將其放在fuffer2中,然后和fuffer1中的內(nèi)容進(jìn)行比較,如果不同,再讀取下一個(gè)記錄。如果姓名相同,則把指針后移8個(gè)字符(4門課程所占空間),寫入8個(gè)“0字符。關(guān)閉文件,恢復(fù)現(xiàn)場(chǎng)并退出。(7)list子程序list子程序 的作用是顯示文件中的記錄。首先清除記錄輸入?yún)^(qū)和顯示區(qū)域。然后顯示記錄字段的標(biāo)題。打開文件,保存文件句柄。讀取一個(gè)記錄的內(nèi)容放在緩沖區(qū)buffer1中,并判斷是否到了文件末尾,如果不是,則顯示
10、這條記錄。循環(huán)讀取直到文件結(jié)束。最后關(guān)閉程序,恢復(fù)現(xiàn)場(chǎng)。(8)print子程序print子程序打開文件。讀取一條記錄,匯編語(yǔ)言提供了自定義數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)定義語(yǔ)句,可將不同的數(shù)據(jù)類型放在同一個(gè)數(shù)據(jù)結(jié)構(gòu)中,便于處理,在本程序中的記錄就采用了結(jié)構(gòu)定義語(yǔ)句。這里讀取記錄也用了結(jié)構(gòu)的方法。接著用dos中斷21h的5號(hào)功能,逐字打印存放在fuffer1中的所有字符。一條記錄打完后,打印回車符換行。然后用同樣方法繼續(xù)讀取下一個(gè)記錄并打印,直到文件結(jié)束為止。最后關(guān)閉文件退出。(9)cot子程序cot子程序的作用是統(tǒng)計(jì)各分?jǐn)?shù)段學(xué)生的人數(shù),為簡(jiǎn)化程序,作為示例,本程序只統(tǒng)計(jì)記錄數(shù)學(xué)各分?jǐn)?shù)段的人數(shù)。首先顯示統(tǒng)計(jì)結(jié)果
11、的標(biāo)題:maths60708090前項(xiàng),j-后項(xiàng) ;注意cmpsb過(guò)程中si,di指針的自動(dòng)變化! push cx push si push di mov cx,17;t=i,即t=前項(xiàng) mov si,i lea di,stutemp rep movsb mov cx,17;i=j,si-后項(xiàng),即前項(xiàng)=后項(xiàng) mov di,i ; rep movsb mov cx,17;j=t,di-后項(xiàng),即后項(xiàng)t lea si,stutemp rep movsb mov swapped,1 pop di pop si pop cx endm space macro ;輸出空格符 push dx push ax
12、 lea dx,gap mov ah,9 int 21h pop ax pop dx endm ;顯示提示信息 showmsg macro n push ax push dx mov ah,9 lea dx,msg&n int 21hpop dx pop ax endm movitem macro dst,src push cx push di push si cld mov cx,17 lea di,dst lea si,src rep movsb pop si pop di pop cx endm data segment studentx student 30 dup() stutemp
13、 db 17 dup (0),$;臨時(shí)保存一條item信息 studisp db 19 dup(0),$ ;-定義名字 學(xué)號(hào) 分?jǐn)?shù)的輸入緩沖區(qū)-namepar label byte;輸入緩沖區(qū) maxnlen db 7 namelen db ? namefld db 7 dup(?) numpar label byte maxmlen db 9 numlen db ? numfld db 9 dup(?) scopar label byte maxsco db 4 scolen db ? scofld db 4 dup(?) ;輸入文件路徑緩沖區(qū) pathpar label byte path
14、max db 40 pathlen db ? pathnam db 40 dup(?) ae90 db 0 ae80 db 0 ae70 db 0 ae60 db 0 b60 db 0 msg_b60 db 9,9,scores=60:$ msg_ae70 db 9,9,scores=70:$ msg_ae80 db 9,9,scores=80:$ msg_ae90 db 9,9,scores=90:$ cur_i dw ? crlf db 13,10,$ titl db students management system,0dh,0ah, ,0dh,0ah,0dh,0ah menu1 db
15、 i(insert the data of the students),0dh,0ah ;menu menu2 db l(browse the data of the students),0dh, 0ah menu3 db q(query the data of the students),0dh, 0ahmenu4 db d(delete the data of the students),0dh, 0ahmenu5 db m(modify the data of the students),0dh,0ahmenu7 db p(print the data of the students),
16、0dh, 0ahmenu8 db c(statistics the data of the students),0dh, 0ahmenu9 db e(exit the system),0dh, 0ah,$ msgmenu5_1 db 0dh,0ah,1-modify name,0dh,0ah msgmenu5_2 db 2-modify number,0dh,0ah msgmenu5_3 db 3-modify score,0dh,0ah,$ msgmenu3_1 db 0dh,0ah,1-search name,0dh,0ah msgmenu3_2 db 2-search number,0d
17、h,0ah msgmenu3_3 db 3-search score,0dh,0ah,$ mmenutip db choose a number from the menu above,0dh,0ah,$ msgprinttitle db 0dh,0ah,0dh,0ah, sno sname score ,0dh,0ah,$ gap db $ stu dw ? stustored dw 0;已寫至內(nèi)存中的item數(shù) swapped db 0 sav_cnt dw ? stusaved dw 0;已存盤的item數(shù) saveflag db 1;是否已存盤標(biāo)志 errcde db 0;文件操作錯(cuò)誤
18、標(biāo)志 endcde db 0;讀文件結(jié)束標(biāo)志 endaddr dw ? filehandle dw ? msg_titleln db -,13,10,$ msgsepln db -,0dh,0ah,$ msg02 db please input the new student info.,13,10,$ msg03 db name:,$ msg04 db id:,$ msg05 db score:,$ msg07 db successly saved!,13,10,$ msgdeled db successly deleted a item!,13,10,$ msgmoded db succe
19、ssly modified a item content!,13,10,$ msginsed db successly inserted item(s)!,13,10,$ msgqforins db insert this item?(y/n):,13,10,$ msgback db press any key to back.$ msgexit db press any key to exit.$ msg09 db students out of 30.,13,10,$ msg20 db there are more than 30 students.,13,10,$ msg21 db sa
20、ve as:,13,10,$ msg22 db please input the file you want to operate:,13,10,$ msg23 db read successly!,13,10,$ msg27 db there isn,27h,t any student.,13,10,$ msgnoext db there is no such item!,13,10,$ msgnaminfid db please input a name to find:,13,10,$ msgnuminfid db please input a number to find:,13,10
21、,$ msgscoinfid db please input a score to find:,13,10,$ msgstattit db 9,9,the result of statistics is listed as follow:,13,10,$ msg_nname db please input a new one:,13,10,$ msg_nnum db please input a new num.:,$ msg_nsco db please input a new score.:,$ msgqsave db the ducoment have not saved.do you
22、want to save it now(y/n)?,$ msg_delnamin db please input the name you want to delete:,13,10,$ msg_modname db please input the name field you want to modify:,13,10,$ msg_modnum db please input the number field you want to modify:,13,10,$ msg_modsco db please input the score field you want to modify:,
23、13,10,$ opnmsg db *error occured while opening file*,13,10,$ wrtmsg db *error occured while writing file*,13,10,$ readmsg db *error occured while reading file*,13,10,$ routemsg db *path name is invalid*,13,10,$ data ends code segment assume cs:code,ds:data,ss:stsg,es:data main proc far start: mov ax
24、,data mov ds,ax mov es,ax mainmenu: mov ax,0600h mov cx,0000h mov dx,174fh mov bh,07 int 10h mov ah,02 ;set cursor mov bh,0 mov dx,0100h int 10h lea dx,titl ;display menu mov ah,9 int 21h showmsg _titleln lea dx,mmenutip mov ah,9 int 21h case: mov ah,0 int 16h cmp ah,17h;i je addone cmp ah,26h;l je
25、browse cmp ah,19h;p je display cmp ah,10h;q je query cmp ah,20h;d je del_interm cmp ah,2eh;c je statis cmp ah,32h;m je change cmp ah,12h;e je exit display: call display_in anykeyback jmp mainmenu query: call query_in anykeyback jmp mainmenu browse: call browse_in anykeyback jmp mainmenu addone: call
26、 insert_in anykeyback jmp mainmenu exit: call quit statis: call stat_in anykeyback jmp mainmenu del_interm: jmp delete change: call mod_in anykeyback jmp mainmenu delete: call del_in anykeyback jmp mainmenu beep: mov ah,14 mov al,7 mov bh,0 int 10h jmp mainmenu main endp ;- browse_in proc near call
27、near ptr clear call near ptr cursor call near ptr readall call name_sort call near ptr print ret browse_in endp ;- del_in proc near call clear call cursor call delete_in ret del_in endp ;- query_in proc near call clear call cursor call bg_search ret query_in endp ;- stat_in proc near call clear call
28、 cursor call near ptr stat ret stat_in endp ;- insert_in proc near call clear call cursor call near ptr input call name_sort ret insert_in endp ;- display_in proc near call clear call cursor call near ptr print ret display_in endp ;- mod_in proc near call clear call cursor call print call bg_modify
29、call name_sort ret mod_in endp ;- delete_in proc near push ax push dx call print crlfm mov ah,9 lea dx,msg_delnamin int 21h call near ptr inputname call near ptr del cmp ax,-1 je qdel showmsg deled qdel: pop dx pop ax ret delete_in endp ;- bg_search proc near showmsg menu3_1 mov ah,1 int 21h;getch()
30、 crlfm cmp al,1 je q1 cmp al,2 je q2 showmsg scoinfid lea bx,studentx+14 mov dx,3 jmp bgsear q1: showmsg naminfid call near ptr inputname lea bx,studentx mov dx,1 jmp bgsear q2: showmsg numinfid call near ptr inputnum lea bx,studentx+6 mov dx,2 bgsear: push bxpush dxcall near ptr search;search(stude
31、ntx,1)cmp ax,-1 je qins showmsg printtitle showmsg sepln push si mov si,ax call near ptr printline pop si jmp qque qins: showmsg qforins mov ah,01 int 21h crlfm cmp al,y jne qque call inputnum call inputsco call stor showmsg insed mov saveflag,0 qque: ret bg_search endp ;- bg_modify proc near push a
32、x push bx push dx showmsg menu5_1;display modify submenu mov ah,1 int 21h;getch() crlfm cmp al,1 je t1 cmp al,2 je t2 mov bx,3 call inputsco jmp cin t1: call inputname mov bx,1 jmp cin t2: mov bx,2 call inputnum cin: push bx call near ptr modify cmp ax,-1 je qmodi crlfm showmsg moded qmodi: pop dx p
33、op bx pop ax ret bg_modify endp ;- quit proc near cmp saveflag,0 je qforsav jmp qsys qforsav: call clear call cursor showmsg qsave mov ah,1 int 21h cmp al,y je savit jmp qsys savit: call save mov ah,3eh;close file mov bx,filehandle int 21h qsys: mov ax,4c00h int 21h ret quit endp ;- search proc near
34、 push bp mov bp,sp push di push bx push si push cx push dx mov di,bp+6 mov dx,stustored mov bx,bp+4;bx:type mov bp,di cmp bx,1 je snam cmp bx,2 je snum mov cx,3 mov bx,cx lea ax,scofld jmp loop1 snam: mov cx,6 mov bx,cx lea ax,namefld jmp loop1 snum: mov cx,8 mov bx,cx lea ax,numfld loop1: mov si,ax
35、 mov cx,bx repe cmpsb ;連續(xù)查找匹配名字 je found ;找到跳轉(zhuǎn)found add bp,17 ;把查找轉(zhuǎn)到下一個(gè)名字 mov di,bp dec dh jnz loop1 ;循環(huán)查找 mov ax,-1 showmsg noext jmp qsearch found: mov ax,bp mov dx,stustored sub dx,bx mov cur_i,dx qsearch:pop dx pop cx pop si pop bx pop di pop bp ret 4 search endp ;- name_sort proc near push si p
36、ush di push ax push bx push dx push cx cmp stustored,1 je qsort lea bx,studentx push bx mov ax,stustored sub ax,1 mov bl,17 mul bl pop bx add bx,ax mov dx,stustored sub dx,1 ;dx:i,即循環(huán)次數(shù) l1: mov swapped,0 sub bx,17 mov endaddr,bx push bx lea si,studentx;si:j,j=0 l2: mov cx,6 mov di,si add di,17 mov bx,di mov ax,si repe cmpsb jbe s3 exchange ax,bx s3: mov si,ax add si,17;j+ cmp si,endaddr jbe l2 pop bx cmp swapped,0 je qsort dec dx jnz l1 qsort: pop cx pop dx pop bx pop ax pop di pop si ret name_sort endp
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通事故委托合同
- 2024年螺絲用冷鐓鋼絲項(xiàng)目可行性研究報(bào)告
- 《簡(jiǎn)愛》讀書筆記集錦15篇
- 學(xué)生會(huì)副主席競(jìng)選演講稿集錦15篇
- 乒乓球比賽作文300字匯編九篇
- 個(gè)人租房合同
- 2024年稀土三基色電子節(jié)能燈項(xiàng)目可行性研究報(bào)告
- 審計(jì)業(yè)務(wù)合同范本
- 北京信息科技大學(xué)《中國(guó)音樂(lè)史與名作賞析》2023-2024學(xué)年第一學(xué)期期末試卷
- 北京信息科技大學(xué)《電化學(xué)原理及研究方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 新加坡雙語(yǔ)教育發(fā)展史
- 研究生自我介紹ppt模板
- 管材管件采購(gòu)方案投標(biāo)方案(完整技術(shù)標(biāo))
- 變配電所基礎(chǔ)知識(shí)課件
- 公開課教我如何不想他課件-PPT
- 讀書筆記《框架思維》PPT模板思維導(dǎo)圖下載
- 培智生活數(shù)學(xué)暑假作業(yè)
- 項(xiàng)目部領(lǐng)導(dǎo)施工現(xiàn)場(chǎng)值班帶班交接班記錄表
- 2023年江蘇小高考?xì)v史試卷
- 《運(yùn)動(dòng)解剖學(xué)》課程實(shí)驗(yàn)課教案
- 2023年貴州貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論