個人檔案文件管理--匯編課程設計_第1頁
個人檔案文件管理--匯編課程設計_第2頁
個人檔案文件管理--匯編課程設計_第3頁
個人檔案文件管理--匯編課程設計_第4頁
個人檔案文件管理--匯編課程設計_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設計課程設計題目:個人檔案文件管理專業(yè): 計算機科學與技術 學號: 2010810072 姓名: 羅忠霖 2011-2012學年第二學期一 設計目的匯編語言課程設計是對所學課程內(nèi)容全面、系統(tǒng)的總結、鞏固和提高的一項課程實踐活動。根據(jù)匯編語言的特點,選擇相應的題目,在老師的指導下,由學生獨立完成。課程設計要求同學們熟悉匯編語言的編程,BIOS中斷調(diào)用、系統(tǒng)功能調(diào)用、磁盤數(shù)據(jù)的查詢、存取等相關知識。通過課程設計,一方面提高運用匯編語言編程解決實際問題的能力,另一方面使同學們更深入的了解計算機系統(tǒng)內(nèi)部的有關知識,為以后的學習和系統(tǒng)開發(fā)奠定良好的基礎。 二 設計內(nèi)容創(chuàng)建一個人檔案

2、文件(若已存在則直接使用該文件),它包含學號,姓名、年齡、性別、電話,通信地址六項內(nèi)容。試編寫一管理程序,要求系統(tǒng)顯示如下菜單,按鍵后執(zhí)行相應的操作。(1)L命令:列出文件中的所有人的記錄,每人一行(2)I命令:在文件末尾插入一個人的記錄(3)D命令:根據(jù)姓名刪除指定的紀錄,若出現(xiàn)多條記錄,應再提供刪除哪條記錄的選擇。(4)F命令:按姓名字段的值進行查詢,并將查詢結果(多條記錄)顯示在屏幕上(5)0命令:根據(jù)姓名對記錄進行排序(6)Q命令:退出管理系統(tǒng)三程序設計原理1:本課程設計是按模塊化程序設計,源代碼中有一個主程序,主程序首先調(diào)用打開子程序打開文件,若能打開文件,則讀取文件里面的內(nèi)容到內(nèi)存

3、中,若打不開或者文件不存在,則創(chuàng)建文件。接著用戶輸入想要的功能,程序根據(jù)用戶輸入的內(nèi)容調(diào)用相應的程序?qū)崿F(xiàn)。以下各種操作都是在緩存中執(zhí)行2:本程序在開始的時候定義了一個顯示宏DISPL(因為在本程序中要經(jīng)常用到09號dos功能),進入主程序之后顯示菜單,提示輸入功能選項(不區(qū)分大小寫),若是輸入的不與各種功能相匹配則提示輸入錯誤,跳回到打印功能列表,重新輸入;3:插入程序:輸入子程序首先調(diào)用輸入學號的子程序,若是ID輸入為空,則跳回功能選項,然后再調(diào)用check函數(shù)進行學號檢查,當檢查到與之前輸入的相同的時候則提示用戶重新輸入學號,否則繼續(xù)輸入,并且保存剛才輸入的ID,輸入的時候計算輸入的字節(jié),

4、不足的用空格補充,然后將輸入的內(nèi)容存儲到內(nèi)存里(這些數(shù)據(jù)是連續(xù)存放的),同時設置指針指向數(shù)據(jù)段尾的下一個單元,保證下一次是從末尾加入;4:顯示程序:顯示的時候先判斷記錄的個數(shù),若個數(shù)為0,則退出返回到菜單界面,否則每次從數(shù)據(jù)段內(nèi)存中取60個字節(jié)(即一條記錄)到另一個緩存區(qū)域中顯示,用count計數(shù),顯示一次count-1,直到count為零;5:查找程序:首先用戶輸入查找的姓名,調(diào)整相應的指針,然后用字符串cmpsw比較名字,直到最后一個名字為止;若找到則顯示出來,不存在則提示;6:刪除程序:,查找名字相同的記錄,不存在則提示,存在則顯示出來,弱存在多條記錄提示出入第幾條記錄,調(diào)用刪除子程序,

5、把該條記錄以后的記錄全部往前移,count-1;7:排序程序:,若是只有一條記錄或者沒有就直接跳出,否則按照ASC碼排序,排序用冒泡法排序8:退出程序:打開文件,把數(shù)據(jù)段中的內(nèi)容讀入文件,否則創(chuàng)建文件,同時根據(jù)count,寫入最后一條記錄后,在末尾加上$關閉文件,四:程序流程圖 Main 主函數(shù) 調(diào)用open打開文件顯示menu判斷輸入I?插入退出查找刪除排序結束輸入名字/性別/ID年齡/地址/電話子程序Y/N輸入學號輸入 輸入名字在緩存 Check輸入不足10個剩下的填充空格YBP=0?NY保存到數(shù)據(jù)段把輸入相應的內(nèi)容存到數(shù)據(jù)段STUY輸入名字輸入性別Ret結束輸入年齡輸入地址輸入電話Ret

6、結束RET結束COUNT=0?Count-1名字比較輸出學生信息找到名字si->數(shù)據(jù)段第一個名字 di=輸入的名字bp=0輸入要查找的名字名字查找名字排序 endaddr->倒數(shù)第二個名字si->第一個名字swapped=0di->si的下一個名字Si移到下一個名字Ax=di bx=sirepe cmpsb N si=指向?qū)W生信息頭 YSi<=di?dißàsi NSwapped=1 NSi=ax YSi<=endaddrSwapped=0? N N結束 Y名字刪除rep movswRET結束sub stu1,60 sub count1,

7、1si>=endaddrSi=di下一個di=delbpdi=delbx刪除第bx個記錄Bx=bx*2BP>3?Bp>1?查找名字相同的記錄 N Y N Y N Y五源程序 DATA SEGMENT MESS1 DB 'ID:','$' MESS2 DB 'NAME:','$' MESS3 DB 'OLD:','$' MESS4 DB 'SEX:','$' MESS5 DB 'ADDRESS:','$' MESS6 D

8、B 'PHONE NUMBER:','$' MESS7 DB 'ENTTER ERROR!',0DH,0AH,'$' MESS8 DB 'ID',8 DUP(' '),'NAME',5 DUP(' '),'OLD ','SEX ',' ADDRESS ',5 DUP(' '),'telphone',13,10,'$' MESS9 DB 'Student inform

9、ation in the table is:',13,10,'$' MESS10 DB 'Please enter the name:','$' MESS11 DB 13,10,'YOU ARE QUIT!','$' MESS12 DB 'sorry!The file open failure!',13,10,'$' MESS13 DB 'sorry!File operation failed!',13,10,'$' MESS14 DB 

10、9;No records!',13,10,'$' MESS15 DB 'no found!',13,10,'$' MESS16 DB 'Do you want to delete this message(y/n)? ',13,10,'$' MESS17 DB 'Please choose Which one you want to delete(1,2,.):','$ ' MESS18 DB 'DELETE SUCCEED!','$' MES

11、S19 DB 'the id is the same,enter again!',13,10,'$' MESS20 DB 'press any key to paste next page',13,10,'$' IDPAR LABEL BYTE MAXILEN DB 10 ACTILEN DB ? ID DB 10 DUP(?) ;學號 NAMEPAR LABEL BYTE MAXNLEN DB 10 ACTNLEN DB ? _NAME DB 10 DUP(?) ;姓名 在MASM5.0下不能用name OLDPAR LABEL

12、 BYTE MAXOLEN DB 3 ACTOLEN DB ? OLD DB 3 DUP(?) ;年齡 SEXPAR LABEL BYTE MAXSLEN DB 5 ACTSLEN DB ? SEX DB 5 DUP(?) ;性別 ADDRESSPAR LABEL BYTE MAXALEN DB 15 ACTALEN DB ? AD DB 15 DUP(?) ;地址 PHONEPAR LABEL BYTE MAXPLEN DB 15 ACTPLEN DB ? PHONE DB 15 DUP(?) ;電話號碼 DISPL MACRO X ;定義顯示的宏 LEA DX,X MOV AH,9 INT

13、 21H ENDM STU DB 50 DUP(58 DUP(' '),13,10);內(nèi)存空間 TEMP DB 60 DUP(' '),'$'臨時存儲空間 CRLF DB 13,10,'$'換行回車 ENDADDR DW ?;排序的時候用到,即存儲末尾指針 MENU DB '=',13,10 DB 'I:INPUT F:FIND D:DELETE O:SORT L:LIST Q:QUIT ',13,10 DB '=',13,10 DB 'Please select the f

14、unction: ','$' COUNT DB 0 ;用來統(tǒng)計輸入的個數(shù) COUNT1 DB 0 ;臨時統(tǒng)計輸入的個數(shù),輔助作用 count2 db 0;檢查學號的時候用的 count3 db 0;顯示的時候用的,分頁 DEL DW 20 DUP(?) END1 DB '$' ;作為文件結束標志 SWAPPED DB 0 ;交換標志位 STU1 DW ? ;作為存放末尾指針 ADDRESS DB 'd:ff2STU.TXT',0 ;路徑 NAMEFILE DB 'stu.txt' FCODE DW ? ;文件代號 DATA

15、 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA DI,STU CALL OPEN ;打開文件 CLD MOV STU1,DI START: DISPL MENU ;顯示菜單列表 MOV AH,1 ;輸入 INT 21H MOV BL,AL ;windows平臺下調(diào)用dos命令會改變AL的值 DISPL CRLF ;回車換行 MOV AL,BL AND AL,5FH ;把輸入的選擇更能都轉(zhuǎn)化為大寫,以便后面的操作 LIST: CMP AL,

16、9;L' JNZ INSERT CALL DISPALL ;顯示功能 JMP START INSERT: CMP AL,'I' JNZ DELE CALL INPUT ;插入功能 JMP START DELE: CMP AL,'D' JNZ FIND CALL DELET ;刪除功能 JMP START FIND: CMP AL,'F' JNZ SORT CALL SEARCH ;查找功能 JMP START SORT: CMP AL,'O' JNZ QUIT CALL NAMESORT ;排序功能 JMP START Q

17、UIT: CMP AL,'Q' ;結束功能 JZ OVER error:DISPL MESS7 ;輸入錯誤 JMP START OVER: CALL CLOSE DISPL MESS11 MOV AH,4CH INT 21H RET MAIN ENDP;*插入模塊* INPUT PROC NEAR ;輸入信息 MOV DI,STU1 INPUTLOOP: CLD again: MOV BP,0 DISPL MESS1 ;提示輸入學號 CALL INPUTID CMP ACTILEN,0 ;沒有輸入號碼時 JZ A10 ;直接跳到提示是否查找的地方 CMP COUNT1,50 ;

18、輸入上限 JE A10 CALL check ;學號檢查函數(shù) cmp bp,0 jnz again ;有相同的學號則返回繼續(xù)輸入 CALL STORID ;保存到stu DISPL MESS2 CALL INPUTNAME ; 輸入名字 DISPL MESS3 CALL INPUTOLD ;輸入年齡 DISPL MESS4 CALL INPUTSEX ;輸入性別 DISPL MESS5 CALL INPUTADDRESS ;輸入地址 DISPL MESS6 CALL INPUTPHONE ;輸入電話 ADD DI,2 ;調(diào)整指針使他指向下一個輸入的開始位置 JMP INPUTLOOP ;- A

19、10: MOV AH,COUNT1 ;記錄數(shù)目 MOV COUNT,AH MOV STU1,DI RET INPUT ENDP;+ INPUTID PROC NEAR ;學號輸入函數(shù)- MOV AH,0AH LEA DX,IDPAR INT 21H DISPL CRLF MOV BH,0 MOV BL,ACTILEN MOV CX,10 SUB CX,BX I20: MOV IDBX,20H ;名字剩下的填充空格 INC BX LOOP I20 RET INPUTID ENDP ;- check PROC NEAR;學號檢查,即檢查有沒有相同的學號 mov bp,0 MOV AH,COUNT1

20、 MOV count2,AH MOV SI,STU1 SUB SI,60 MOV ENDADDR,SI;指向最后一條記錄的學號 LEA SI,STU MOV BX,SI NASE1: LEA DI,ID ;存放學號的偏移地址 MOV CX,5 REPE CMPSW JCXZ NASEEX ;相等 JMP NASE2 NASEEX: DISPL MESS19 ;提示有重復的學號 MOV BP,1 JMP MM NASE2: ADD BX,60 ;表中下一個比較的學號 MOV SI,BX DEC count2 JNZ NASE1 MM: RET check ENDP;- ;+ STORID PRO

21、C NEAR ;存儲學號函數(shù) MOV DI,STU1 INC COUNT1 CLD LEA SI,ID MOV CX,5 REP MOVSW RET STORID ENDP;+ INPUTNAME PROC NEAR;輸入姓名函數(shù) MOV AH,0AH LEA DX,NAMEPAR INT 21H DISPL CRLF MOV BH,0 MOV BL,ACTNLEN MOV CX,10 SUB CX,BX ;計算剩下的長度 IN20: MOV _NAMEBX,20H ;剩下的地方填充空格 INC BX LOOP IN20 CLD LEA SI,_NAME MOV CX,5 REP MOVSW

22、RET INPUTNAME ENDP;+ INPUTOLD PROC NEAR;輸入年齡的函數(shù) MOV AH,0AH LEA DX,OLDPAR INT 21H DISPL CRLF MOV BH,0 MOV BL,ACTOLEN MOV CX,3 SUB CX,BX ;計算剩下的長度 IO20: MOV OLDBX,20H ;剩下的地方填充空格 INC BX LOOP IO20 CLD LEA SI,OLD MOV CX,3 REP MOVSB RET INPUTOLD ENDP;+ INPUTSEX PROC NEAR ;輸入性別函數(shù) MOV AH,0AH LEA DX,SEXPAR IN

23、T 21H DISPL CRLF MOV BH,0 MOV BL,ACTSLEN MOV CX,5 SUB CX,BX ;計算剩下的長度 IS20: MOV SEXBX,20H ;剩下的地方填充空格 INC BX LOOP IS20 CLD LEA SI,SEX MOV CX,5 REP MOVSB RET INPUTSEX ENDP;+ INPUTADDRESS PROC NEAR;輸入地址函數(shù) MOV AH,0AH LEA DX,ADDRESSPAR INT 21H DISPL CRLF MOV BH,0 MOV BL,ACTALEN MOV CX,15 SUB CX,BX ;計算剩下的長

24、度 IA20: MOV ADBX,20H ;剩下的地方填充空格 INC BX LOOP IA20 CLD LEA SI,AD MOV CX,15 REP MOVSB RET INPUTADDRESS ENDP;+ INPUTPHONE PROC NEAR ;輸入電話函數(shù) MOV AH,0AH LEA DX,PHONEPAR INT 21H DISPL CRLF MOV BH,0 MOV BL,ACTPLEN MOV CX,15 SUB CX,BX ;計算剩下的長度 IP20: MOV PHONEBX,20H ;剩下的地方填充空格 INC BX LOOP IP20 CLD LEA SI,PHON

25、E MOV CX,15 REP MOVSB RET INPUTPHONE ENDP;*排序模塊* NAMESORT PROC NEAR ;排序 CMP COUNT1,1 JBE EXIT5 MOV DI,STU1 SUB DI,110 ;調(diào)整指針 MOV ENDADDR,DI ;調(diào)整指針指向倒數(shù)第二個名字 NS10: MOV SWAPPED,0 LEA SI,STU ADD SI,10 ;第一個,調(diào)整指針到第一條記錄的名字 NS20: MOV CX,10 MOV DI,SI ADD DI,60 ;下一個被比較的名字 MOV AX,DI MOV BX,SI REPE CMPSB JBE NS30

26、 ;小于或等于不用交換 CALL NPXCHG NS30: MOV SI,AX CMP SI,ENDADDR JBE NS20 CMP SWAPPED,0 ;標志位 JNZ NS10 EXIT5: RET NAMESORT ENDP;-;交換兩個信息 NPXCHG PROC NEAR MOV SI,BX SUB SI,10 MOV CX,30 ;58個字節(jié) LEA DI,TEMP ;借助緩存TEMP REP MOVSW MOV CX,30 MOV DI,BX SUB DI,10 REP MOVSW MOV CX,30 LEA SI,TEMP REP MOVSW MOV SWAPPED,1 ;標

27、志位 RET NPXCHG ENDP;*查找模塊* SEARCH PROC NEAR MOV AH,COUNT1 MOV COUNT,AH MOV BP,0 CLD DISPL MESS10 ;顯示要查找了人名' CALL INPUTNAME1 ;輸入要查找的人名 CALL NAMESEARCH ;查找 CMP BP,0 JBE S2 JMP EXIT6 S2: DISPL MESS15;沒找到 EXIT6: RET SEARCH ENDP;- INPUTNAME1 PROC NEAR ;查找模塊中的輸入姓名函數(shù),此函數(shù)不存儲到內(nèi)存 MOV AH,0AH LEA DX,NAMEPAR

28、INT 21H DISPL CRLF MOV BH,0 MOV BL,ACTNLEN MOV CX,10 SUB CX,BX ;計算剩下的長度 IN21: MOV _NAMEBX,20H ;剩下的地方填充空格 INC BX LOOP IN21 RET INPUTNAME1 ENDP;- NAMESEARCH PROC NEAR LEA SI,STU ADD SI,10 ;SI指向第一條記錄的人名 MOV BX,SI NASE10: LEA DI,_NAME ;存放待查找的人名地址 MOV CX,5 REPE CMPSW JCXZ NASEEXIT ;相等 JMP NASE20 NASEEXIT: ;顯示出來 MOV SI,BX SUB SI,10 ADD BP,2 MOV DELBP,SI ;指向要顯示記錄的首

溫馨提示

  • 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

提交評論