第一篇:語言程序設計實驗指導書(2009年8月版)
匯編語言程序設計實驗指導書
何立新 編著
合肥學院 計算機科學與技術系 體系結構教研室
2009年8月
目 錄
實驗一 熟悉匯編語言程序上機過程和調試匯編程序的方法..............1 實驗二 簡單程序設計..............................................................................3 實驗三 循環程序設計..............................................................................4 實驗四 分支程序設計..............................................................................5 實驗五 子程序設計..................................................................................6 實驗六 宏匯編程序設計..........................................................................7 實驗七 綜合程序設計..............................................................................8 附件1 常用的DOS系統功能調用.......................................................9 附件2 DEBUG的常用命令與使用.....................................................10 附件3 匯編程序出錯信息...................................................................17
合肥學院計算機科學與技術系
實驗一 熟悉匯編語言程序上機過程和調試匯編程序的方法
班級: 姓名: 學號: 得分: 一.實驗目的: 1.掌握匯編語言源程序由編輯、匯編、鏈接到調試的全過程。2.掌握常用的debug命令,通過匯編調試工具加深對機器指令執行過程的了解。二.實驗內容: 1.輸入給定的程序,完成由編輯、編譯、鏈接到調試的全過程。2.用匯編調試工具軟件DEBUG對.EXE文件進行調試,在調試過程中應使用單步、斷點等方法調試,注意觀察寄存器、標志位和有關存儲器內容的變化。
3.利用DEBUG加深對機器指令的了解。三.實驗儀器: PC 機 四.實驗步驟:(1)建立匯編語言的工作環境
為了運行匯編語言程序至少要在磁盤上建立以下文件 ? 編輯程序,如EDIT.EXE,記事本,寫字板等 ? 匯編程序,如MASM.EXE ? 連接程序,如LINK.EXE ? 調試程序,如DEBUG.COM
(2)建立匯編語言源程序
源程序文件要以ASM為擴展名,源程序文件的形成(編輯)可以通過任何一個文本編輯器實現。
(3)源程序的匯編
匯編是將源程序翻譯成由機器代碼組成的目標模塊文件的過程。使用提供的匯編程序是MASM.EXE:如果源程序中沒有語法錯誤,MASM將自動生成一個目標模塊文件(test01.obj),否則MASM將給出相應的錯誤信息。這時應根據錯誤信息,重新編輯修改源程序后,再進行匯編。
(4)目標模塊的連接
連接程序link.exe能把一個或多個目標文件和庫文件合成一個可執行程序(.EXE、.COM文件)。如果沒有嚴重錯誤,LINK將生成一個可執行文件(.exe);否則將提示相應的錯誤信息。這時需要根據錯誤信息重新修改源程序后再匯編、鏈接,直到生成可執行文件。
匯編語言程序設計實驗指導書
(5)程序的運行
經匯編、連接生成的可執行程序在DOS操作系統下只要輸入文件名就可以運行。
如果出現運行錯誤,可以從源程序開始排錯,也可以利用DEBUG調試程序幫助發現錯誤。
五.實驗結果與討論 六.心得體會
合肥學院計算機科學與技術系
實驗二 簡單程序設計
班級: 姓名: 學號: 得分: 一.實驗目的: 1.掌握匯編語言源程序的格式和順序程序設計方法。
2.用所學的匯編指令和偽指令進行簡單的編程,達到加深對所學指令和偽指令的理解。
3.學會使用dos 系統功能調用。4.對DEBUG的使用達到熟練的程度。二.實驗內容: 1. 編程實現:在屏幕上顯示字符串“Beijing,China,2008!”。2. 編程實現:兩個字節數(如12h和34h)相加,并將結果顯示出來。三.實驗儀器: PC 機 四.實驗步驟: 五.實驗結果與討論 六.心得體會
匯編語言程序設計實驗指導書
實驗三 循環程序設計
班級: 姓名: 學號: 得分: 一.實驗目的: 1.掌握單重循環程序和多重循環程序的結構、設計方法和調試方法。2.熟練掌握loop、loope、loopne等指令的使用,并掌握用重復前綴指令、控制轉移指令實現循環。二.實驗內容: 1.編程實現:從一個字節字符串中查找字符‘#’,如果查到則將其偏移地址送到存儲單元addr中,否則將0送到addr中。
2.編程實現:統計存儲下列給定字符串的數據塊中所有的“0”位的個數,并
將統計的結果送入COUNT存儲單元。
“十七大的主要議程是:聽取和審議黨的十六屆中央委員會的報告,審議中央紀律檢查委員會的工作報告,審議并通過《中國共產黨章程(修正案)》,選舉黨的十七屆中央委員會,選舉中央紀律檢查委員會?!?三.實驗儀器: PC 機 四.實驗步驟: 五.實驗結果與討論 六.心得體會
合肥學院計算機科學與技術系
實驗四 分支程序設計
班級: 姓名: 學號: 得分: 一.實驗目的: 1.掌握分支程序的結構,分支程序的設計和調試方法。
2.掌握利用條件轉移指令、跳躍表、邏輯尺等方法實現程序的分支。二.實驗內容: 1.設有16個學生的成績分別如下:56,78,83,67,39,48,95,76,86,62,100,57,85,82,71,92。試編程分別統計低于60分,60-69、70-79、80-89、90-99及100分的人數,并存放到S5,S6,S7,S8,S9及S10單元中。2.編程實現:在X、Y和Z單元中分別存放一個無符號的字節數,編程求出其它們中的最大值,并將最大值存入MAX單元中。(設X = 68, Y = 196, Z = 98)三.實驗儀器: PC 機 四.實驗步驟: 五.實驗結果與討論 六.心得體會
匯編語言程序設計實驗指導書
實驗五 子程序設計
班級: 姓名: 學號: 得分: 一.實驗目的: 1.掌握子程序的定義和調用方法。
2.掌握子程序設計方法,學會子程序的功能劃分和正確進行子程序的參數傳遞。
3.掌握子程序的多種參數傳遞方法。二.實驗內容: 編程實現:十進制到十六進制的轉換。要求如下:
1.從鍵盤輸入一個十進制數,然后以十六進制在屏幕上顯示; 2.能連續多次轉換輸入的十進制數,以回車鍵作為輸入十進制數的結束;
3.若鍵盤輸入的不是數字,則在屏幕上提示:“the input is not a number, again , please!” 4.鍵入‘q’鍵則可退出程序。
三.實驗儀器: PC 機 四.實驗步驟: 五.實驗結果與討論 六.心得體會
合肥學院計算機科學與技術系
實驗六 宏匯編程序設計
班級: 姓名: 學號: 得分: 一.實驗目的: 1.掌握宏匯編程序設計方法。2. 利用建立的宏庫文件進行文件訪問。
3. 通過和子程序技術的比較,加深對宏匯編技術的理解,提高編程技巧。
二.實驗內容(任選一題): 1.實現字符串的傳遞,(mess1? mess3;mess2?mess4),傳遞完畢顯示字符串,每顯示一個字符串后要回車換行。要求:建立一個宏庫mylib.mac,該宏庫至少包括如下三個宏:1 傳遞過程宏 move;2 顯示字符串宏 disp;3 回車換行宏 crlf。
如: mess1: “how beautiful world!”
Mess2: “we should protect it!”
三.實驗儀器: PC 機 四.實驗步驟: 五.實驗結果與討論 六.心得體會
匯編語言程序設計實驗指導書
實驗七 綜合程序設計
班級: 姓名: 學號: 得分: 一.實驗目的: 訓練綜合使用本課程中介紹的順序、分支、循環、子程序和宏匯編等多種方法解決程序設計問題,進一步提高編程能力。
二.實驗內容(任選一題): 1.編寫一個完整的程序:
主程序MAINPRO允許用戶在鍵盤上輸入零件數量和總價格; 子程序SUBCONV 把從鍵盤輸入的ASCII 碼轉化為二進制; 子程序 SUBCALC 計算出零件的單價;
子程序 SUBDISP 把二進制表示的單價轉化為十進制數并顯示出結果。
要求:在程序設計時要求使用順序、分支、循環、子程序和宏匯編等多種方法解決程序設計問題,對于較大的子程序最好使用子程序嵌套,程序中如有多次重復的代碼最好使用重復匯編。
三.實驗儀器: PC 機 四.實驗步驟: 五.實驗結果與討論 六.心得體會
合肥學院計算機科學與技術系
附件1 常用的DOS系統功能調用
1.單字符輸入(1號調用)格式:MOV AH,1
INT 21H 功能:從鍵盤輸入字符的ASCII碼送入寄存器AL中,并送顯示器顯示。
2.單字符顯示(2號調用)
格式:MOV DL,待顯示字符的ASCII碼
MOV AH,2
INT
21H 功能:將DL寄存器中的字符送顯示器顯示.3.打印輸出(5號調用)
格式:MOV DL,待打印字符的ASCII碼
MOV AH,5
INT 21H 功能:將DL寄存器中的字符送打印機打印。
4.結束調用(4CH號調用)格式:MOV AH,4CH
INT 21H 功能:終止當前程序并返回調用程序。
5.顯示字符串(9號調用)
格式:LEA DX,待顯示字符串首偏移地址
MOV AH,9
INT 21H 功能:將當前數據區中以‘$’結尾的字符串送顯示器顯示。
6.字符串輸入(10號調用)
格式:LEA DX,緩沖區首偏移地址
MOV AH,10
INT 21H 功能:從鍵盤上輸入一字符串到用戶定義的輸入緩沖區中,并送顯示器顯示。
匯編語言程序設計實驗指導書
附件2 DEBUG的常用命令與使用
在編寫和運行匯編程序的過程中,會遇到一些錯誤和問題,需要對程序進行分析和調試,調試程序 DEBUG 就是專為匯編語言設計的一種調試工具。它在調試匯編語言程序時有很強的功能,能使程序設計者接觸到機器內部,能觀察和修改寄存器和存儲單元內容,并能監視目標程序的執行情況,使用戶真正接觸到 CPU 內部,與計算機產生最緊密的工作聯系。動態和程序 DEBUG 的主要特點 DEBUG 的執行 DEBUG 命令格式 主要 DEBUG 命令 DEBUG 的主要特點)能夠在最小環境下運行匯編程序
在 DOS 狀態下運行匯編程序,必須將程序經過 MASM 匯編程序,而后還要經過 LINK 連接程序產生可執行程序,才能最終運行,比較麻煩。在 DEBUG 狀態下,為用戶提供了調試、控制測試的環境,可以在此環境下進行編程、調試、監督、執行用戶編寫的匯編程序。因此調試周期短,為用戶提供了極大的方便。2)提供極簡單的修改手段
DEBUG 提供了修改命令,可以修改內存單元內容,修改寄存器的內容,為調試程序、修改程序帶來了方便。)提供用戶與計算機內部聯系的窗口
DEBUG 具有顯示命令,它既可以使用戶看到某內存單元或某一塊單元內容,也可以看到 CPU 內部各寄存器的內容。用單步執行命令實現跟蹤執行,每執行一步都使用戶看到各寄存器的內容的變化,以便分析和調整程序。4)可裝入、修改或顯示任何文件
當然在 DEBUG 狀態下運行匯編程序也具有一定局限性。在 DEBUG 狀態下運行的程序不能使用宏匯編程序中的宏指令,大部分偽指令也不能使用,因此只能把程序分段調試。此外,不能調試太長的程序,只能分塊進行中程序設計。在 DEBUG 狀態下調試好的程序不能形成可執行文件(.EXE),因此調試好的程序只能記下,到編輯環境下重新鍵入調試好的程序,通過匯編程序(如 MASM),再通過連接程序(LINK)形成可執行文件(.EXE)。
合肥學院計算機科學與技術系
DEBUG 的執行
在操作系統(DOS 或 WIndows)命令行方式下,直接調入 DEBUG 程序,鍵入命令的格式如下: D>DEBUG [d:][Path][filename[.ext]][Parm1][Parm2] 其中 [] 的內容為可選項,可以有也可以缺省。
[d:] 為驅動器號,指要調入 DEBUG 狀態的可執行文件在哪個驅動器中,如 A:、B:、C: 等。[Path] 為路徑,指要調入 DEBUG 狀態的可執行文件是在哪個目錄下或子目錄下。
[filename[.ext]],指要調入 DEBUG 狀態下的可執行文件的文件名,該文件可以是通過編輯、匯編、連接后產生的可執行文件,也可以是在 DEBUG 狀態下匯編的程序 段,通過寫盤命令 W 寫入磁盤的文件。
[Parm1][Parm2] 為任選參數,是給定文件的說明參數。
在啟動 DEBUG 時,如果輸入 filename(文件名),則 DEBUG 程序把指定文件裝入內存,用戶可以通過 DEBUG 的命令對指定文件進行修改、顯示或執行。如果沒有文件名,則是以當前內存的內容工作,或者用命名命令或裝入命令把需要的文件裝入內存,然后再通過 DEBUG 命令進行修改、顯示或執行。
當啟動 DEBUG 程序后,屏幕上出現“—”,說明系統已進入 DEBUG 狀態。DEBUG 命令格式
(1)DEBUG 命令都是一個英文字母,后面跟著一個或多個有關參數。多個操作參數之間用“ , ”或空格隔開。
(2)DEBUG 命令必須接著按 ENTER 鍵,命令才有效。
(3)參數中不論是地址還是數據,均用十六進制數表示,但十六進制數據后面不要用“ H ”。(4)可以用 Ctrl 和 Break 鍵來停止一個命令的執行,返回到 DEBUG 的提示符“—”下。(5)用 Ctrl - Num Lock 鍵中止正在上卷的輸出行,再通過按任意鍵繼續輸出信息。主要 DEBUG 命令
(1)匯編命令 A
格式: a.A [ 段寄存器名 ]:[ 偏移地址 ] b.A [ 段地址 ]:[ 偏移地址 ] 11
匯編語言程序設計實驗指導書
c.A [ 偏移地址 ] d.A 功能:用該命令可以將匯編語言程序直接匯編進入內存。
當鍵入 A 命令后,顯示段地址和偏移地址等待用戶鍵入匯編指令,每鍵入一條匯編指令回車后,自動顯示下一條指令的段地址和偏移地址,再鍵入下一條匯編指令,直到匯編語言程序全部鍵入,又顯示下一地址時可直接鍵入回車返回到提示符“-”為止。
其中 a 的段地址在段地址寄存器中,因此在使用該命令時必須將段地址寄存器送入段地址,c 的地址在 CS 中,d 的段地址在 CS 中,偏移地址為 100H。(2)顯示內存命令 D 格式: a.D [ 地址 ] b.D [ 地址范圍 ] c.D 功能:顯示指定內存范圍的內容。
顯示的內容為兩種形式:一種為十六進制內容,一種為與十六進制相對應的 ASCII 碼字符,對不可見字符以“·”代替。
對于 a、c 每次顯示 128 個字節內容,b 顯示的字節數由地址范圍來決定。
若命令中有地址,則顯示的內容從指定地址開始,若中中無地址(如 c)則從上一個 D 命令所顯示的最后一個單元的下一個單元開始。若以前沒有使用過 D 命令,則以 DEBUG 初始化的段寄存器的內容為起始段地址,起始偏移地址為 100H,即 CS:100。
對于 a 中的地址為偏移地址,段地址為 CS 的內容,對 b 中的地址范圍,可以指定段地址和起始偏移地址和終止偏移地址。(3)修改存儲單元內容命令 E 格式: a · E [ 地址 ] [ 內容表 ] b · E [ 地址 ] 功能: a ·用命令所給定的內容表去代替指定地址范圍的內存單元內容。b ·一個單元一個單元地連續修改單元內容。
其中:內容表為一個十六進制數,也可以是用單引號括起的一串字符。
合肥學院計算機科學與技術系
(4)填充內存命令 F
格式: F [ 范圍 ][ 單元內容表 ] 功能:將單元內容表中的內容重復裝入內存的指定范圍內。(5)內存搬家命令 M
格式: M [ 源地址范圍 ][ 目標起始地址 ] 其中源地址范圍和目的起始地址為偏移地址,段地址為 DS 的內容。功能:把源地址范圍的內容搬至以目標起始地址開始的存儲單元中。(6)比較命令 C
格式: C [ 源地址范圍 ],[ 目標地址 ] 其中源地址范圍是由起始地址和終止地址指出的一片連續的存儲單元,目標地址為與源地址所指單元對比的目標地址起始地址。
功能:從源地址范圍是由起始的地址單元開始逐個與目標起始地址往后的單元順序比較每個單元內容,比較到源終止地址為止。比較結果如果一致則不顯示任何信息,如果不一致,則以 [ 源地址 ][ 源內容 ][ 目的內容 ][ 目的地址 ] 的形式顯示失敗單元地址及內容。(7)搜索指定內容命令 S 格式: S [ 地址范圍 ][ 表 ] 功能:在指定地址范圍內搜索表中內容,搜索到就顯示表中元素所在地址。(8)檢查和修改寄存器內容命令 R 格式: a · R b · R [ 寄存器名 ] 功能: a ·顯示 CPU 內部所有寄存器的內容和全部標志位的狀態。b ·顯示和修改一個指定寄定器的內容和標志位的狀態。
其中對狀態標志寄存器 FLAG 以位的形式顯示,顯示時,8 個狀態標志的顯示次序和符號如表 B - 1 所示。
表 B - 1 狀態標志顯示形式
匯編語言程序設計實驗指導書
標 志 位 溢出標志 OF 方向標志 DF 中斷標志 IF 符號標志 SF 零標志 ZF 輔助進位 AF 奇偶標志 PF 進位標志 CF
(9)跟蹤與顯示命令 T
格式: a · T[ =地址 ] 或 T [ 地址 ]
狀 態 有 / 無 增 / 減 開 / 關 負 / 正 零 / 非 有 / 無 偶 / 奇 有 / 無
顯示形式(置位 / 復位)
OV/NV DN/UP EI/DI NG/PL ZR/NZ AC/NA PE/PO CY/NC b · T[ =地址 ][ 條數 ] 或 T [ 地址 ][ 條數 ] 功能: a ·執行一條指定地址處的指令,停下來,顯示 CPU 所有寄存器內容和全部標志位的狀態,以及下一條指令的地址和內容。
b ·為多條跟蹤命令,從指定地址開始;若命令中用 [ 地址 ] 給定了起始地址,則從起始地址開始,若未給定,則從當前地址(CS:IP)開始,執行命令中的 [ 條數 ] 決定一共跟蹤幾條指令后返回 DEBUG 狀態。(10)反匯編命令 U 格式: a · U [ 地址 ] b · U [ 地址范圍 ] 功能:將指定范圍內的代碼以匯編 語言形式顯示,同時顯示該代碼位于內存的地址和機器。若在命令中沒有指定地址則以上一個 U 命令的最后一條指令地址的下一個單元作為起始地址;若沒有輸入過 U 命令,則以 DEBUG 初始化段寄存器的值作為段地址,以 0100H 作為偏移地址。(11)命名命令 N 格式: N 文件名
功能:在調用 DEBUG 時,沒有文件名,則需要用 N 命令將要調用的文件名格式化到 CS:5CH 的文件控制塊中,才能用 L 命令把它調入內存進行調試(其它形式參考 DOS 手冊)。(12)讀盤命令 L
格式: a · L [ 地址 ][ 驅動器號 ][ 起始扇區號 ][ 所讀扇區個數 ]
合肥學院計算機科學與技術系
b · L [ 地址 ] c · L
功能: a ·把指定驅動器和指定扇區范圍的內容讀到內存的指定區域中。其中地址是讀入內存的起始地址,當輸入時沒有給定地址,則隱含地址為 CS:100H。起始扇區號指邏輯扇區號的起始位置。所讀扇區個數是指從起始扇區號開始讀到內存幾個扇區的內容。驅動器號為 0 或 1,0 表示 A 盤,1 表示 B 盤。
b ·讀入已在 CS:5CH 中格式化的文件控制塊所指定的文件。在使用該命令前用 N 命令命名即可將要讀入的文件名格式化到 CS:5CH 的文件控制塊中,其中地址為內存地址。c ·同 b ·地址隱含在 CS : 100H 中。
當讀入的文件有擴展名.COM 或.EXE,則始終裝入 CS:100H 中,命令中指定了地址也沒用。其中 BX 和 CX 中存放所讀文件的字節數。(13)寫盤命令 W
格式: a · W[ 地址 ][ 驅動器號 ][ 起始扇區號 ][ 所寫扇區個數 ] b · W[ 地址 ] c · W
功能: a · 把在 DEBUGU 狀態下調試的程序或數據寫入指定的驅動器中 , 起始扇區號 , 所寫扇區個數為要占盤中幾個扇區。
寫盤指定扇區的操作應十分小心,如有差錯將會破壞盤上的原有內容。如果在命令行中的地址只包含偏移地址,W 命令認為段地址在 CS 中。
b ·當鍵入不帶參數的寫盤命令時,(或只鍵入地址參數的寫盤命令),寫盤命令把文件寫到軟盤上。該文件在用 W 命令之前用命名命令 N 將文件格式化在 CS:5CH 的文件控制塊中。c ·只有 W 命令以前而沒有任何參數時,與 N 配合使用進行寫盤操作。在用 W 命令以前在 BX 和 CX 中應寫入文件的字節數。(15)輸出命令 O
格式: O[ 端口地址 ] [ 字節值 ] 功能:向指定端口地址輸出一個字節。
匯編語言程序設計實驗指導書
(16)運行命令 G
格式: G [ =地址 ][ 地址 [ 地址? ]] 功能:執行用戶正在調試的程序。
其中地址為執行的起始地址,以 CS 中內容作為段地址,以等號后面的地址為偏移地址。再后面的地址為斷點地址。在命令行中只有起始地址,沒有斷點地址,則程序在執行時不中斷。DEBUG 規定最多設置 10 個斷點地址。設置多個斷點用于調試較大的程序,即程序中有多個模塊、多個通路時用,比較方便,在執行時不論走哪條通路,程序都可以在斷點處停下來,以便調整程序。斷點地址為程序中斷處的偏移地址,段地址在 CS 中。
當執行在 DEBUG 狀態下匯編的小段程序時,只用 G 命令即可。(17)十六進制運算命令 H 格式: H 數據 1 數據 2 其中數據 1 和數據 2 為十六進制數據。
功能:將兩個十六進制數進行相加、減,結果顯示在屏幕上。(18)結束 DEBUG 返回到 DOS 命令 Q 格式: Q 功能:程序調試完退出 DEBUG 狀態,返回到 DOS 狀態下。
Q 命令不能把內存的文件存盤,要想存盤必須在退出 DEBUG 之前用 W 命令寫盤。
合肥學院計算機科學與技術系
附件3 匯編程序出錯信息
匯編程序對源程序進行匯編遇到或可疑的語法時,計算機將會給出提示信息,以幫助調試程序。與特定代碼相關的錯誤是編號的,與整個源程序相關,而不是某一特定代碼相關的錯誤是不編號的。
1.有編號的錯誤信息的顯示格式:源文件(行)代碼 信息
(1)源文件,是出現錯誤的源程序文件名。若錯誤出現在內含文件的宏指令中,則源文件是引用該寵指令的文件,而不是定義該宏指令的文件。
(2)行,是出錯位置在源程序中的行號。
(3)代碼,是所有微軟語言使用的標識代碼,它由“error或“warning”開頭,后跟一個五個字符代碼。首字符指出程序是哪種語言編寫的,匯編源程序用A開頭;后四個是數字字符,第一個數字說明警告級別,致使錯誤是2,嚴重警告是4,勸告性警告是5;接著三個數字是錯誤號。
(4)信息,是錯誤的解釋與說明。MASM5.0中有編號的錯誤信息提示如下: 0,Block nesting error,塊嵌套錯誤。
1,Extra characters on line,在一行中除存在所定義語句的全部信息外,還有多余的字符,即用戶提供了較多的操作數。
2,Internal error-Register already defined symbol,寄存器被定義為符號的內部錯誤。
3,Unkown type Specifier,未知的類型說明符??赡苁瞧村e了類型說明符。4,Redefinition of symbol,符號在兩處按不同類型定義。5,Symbol is multidefind,符號被多次定義。
6,Phase error between passes,二義性的語句引起偏移地址在遍1和遍2之間改變。7,Already had ELSE clause,條件匯編塊中用了多個ELSE子句。8,Must be in condition block,無與ENDIF或ELSE匹配的IF。9,Symbol not defined,符號無定義。10,Syntax error,句法錯。相應語法不正確。11,Type illegal in context,類型說明符非法。
12,Group name must be unique,組名已被定義為其他類型符號。
13,Must be declared during pass 1:xymbol,符號應預先定義,然后再引用。14,Illegal public declaration,在PUBLIC語句中,使用了非法操作數。如使用寄存器名。
15,Symbol already different kind :symbol,符號已經被定義為另一種符號。16,Reserved word used as symbol: name,保留字作符號,這是警告錯誤。
匯編語言程序設計實驗指導書
17,Forward reference illegal,符號提前引用錯誤。
如順序的兩語句DB COUNT DUP(?)與COUNT EQU 10將產生錯誤。兩語句調換先后順序,將不會產生這種錯誤。
18,Operand must be register operand,操作數是寄存器,但卻是一個符號或常量。20, Operand must be segment or group,操作數應當是段名或組名。提供的是卻是其他名字或常數。
22, Operand must be type specifies,操作數應當是類型說明符。如NERA或WORD,但給出的是其他操作數。
23,Symbol already defined locally,在當前模塊中已定義的符號又說明為EXTERN的操作數。
24,Segment parameters are changed,同名段操作數說明有矛盾。語句要求應相同。25,Improper align/combine type, AEGMENT語句操作數錯,檢查定位和組合類型。26,Reference to multidefined symbol,引用多重定義的符號。27,Operand expected,需要一個操作數,但接收到的是操作符。28,Operator expected,需要一個操作符,但給的卻是操作數。29,Division by o or overflow,表達式結果被零除或結果溢出。
30,Negative shift count,作為SHL/SHR的操作數的表達式計算成一個負的移位次數。
31,Operand types must match,操作數類型應當匹配。
如DATA是字節變量,則語句“MOV AX,DATA”會產生這個錯誤。為消除該錯誤上述語句應改為“MOV AX,WORDPTR DATA”。
32,Illegal use of external,外部變量使用不正確。
34,Operand must be record or field name,要求操作數是記錄或域名。
35,Operand must have size,要求操作數有指定的尺寸。如語句INC[BX]將產生這個錯誤。
38,Left operand must have segment,段取代前綴必須是段寄存器、組或段名。39,One operand must be constant,應當有一個常數操作數。
40,Operands must be in the same segment,or one must be constant,操作數應在同一段或應有一個常數。
42,Constant expected,希望一個常數。
43,Operand must have segment,操作數應當有段。
44,Must be associated with data,要求數據相關項的地方用了與代碼相關的項。45,Must be associated with code,要求代碼相關項的地方用了數據相關的項。46,Multiple base registers,操作數中使用了多個基址寄存器。如語句“MOV AX,[BX+BP]”非法。
47,Multiple index registers,操作數中使用了多個變址寄存器。如語句“MOV AX,[SI+DI]”非法。
合肥學院計算機科學與技術系
48,must be index or base registers,存儲器操作數要求是基址或變址寄存器,但給的是其他寄存器。
49,Illegal use of register,寄存器的使用非法。
50,Value out ofran9,值超出范圍。如語句“MOV AL,5000”是非法的,因字節寄存器應使用字節值。
51,Operand not in current CS ASSLLME segment,操作數超出ASSUME語句分配的代碼范圍。通常是對標號的調用或轉移超出當前代碼段。
52,Improper operand type:symbol,非法的操作數類型。如語句“MOV meml,mem2”非法,原因是兩個均為存儲器操作數。
53,Jump out of range by number bytes,條件轉移指令不在要求的范圍之內。55,Illegal register value,非法使用寄存器。如語句“MOV AX,BP+4”非法,正確語句為“MOV AX,[BP+4]”。
56,Immediate mode illegal,立即操作數非法。如語句“MOV DS,1000H”,立即操作數非法。
57,Illegal size for operand,特定語句的操作數非法。如INC MEM32,MEM32為雙字變量。
58,Byte register illegal,8位寄存器用在要求l6位寄存器的語句中。如PUSH AL非法。
59,Illegal use of CS register,非法使用CS。如語句“POP CS”非法。
60,Must be accumulator register,應當使用AL、Ax的語句中使用了其他寄存器。61,Improper use of segment register,段寄存器使用非法。如語句INC CS。62,Missing or unreachable code segment,企圖轉移到MASM不能識別為代碼段的標號。通常因為無ASSUME語句使CS與代碼段相連造成的。
63,Operand combination illegal,操作數組合非法。
64,Near JAMP/CALL to different code segment,近程調用和跳轉語句企圖轉移到非當前代碼段。
65,Label cannot have segment override,標號不允許有段前綴,即段取代前綴使用有誤。
66,Must have instruction after prefix,前綴后應當有指令。
67,Cannot override ES for destination,段取代前綴ES不能用在串操作指令的目的操作數上。
68,Cannot address with segment register,企圖訪問存儲操作數,但沒有用ASSUME說明該操作數所在的段。請使用段取代或ASSUME標示出該操作數的屬性。
69,Must be in segment block,應在段內使用的偽指令用在了段外。
70,Cannot use EVEN or ALIGN with type,EVEN和ALIGN偽指令用在字節對準的段內。
71,Forward reference needs override or FAR,調用或轉移語句提前引用其他段的
匯編語言程序設計實驗指導書
標號需使用PTR操作符予以說明。如CALL FAR PTR TASK,引用標號TASK時還未定義TASK標號。
72,Illegal value for DUP count,重復子句的數值表達式不為正整數值。73,Symbol is already external,已定義為外部名字的符號又被定義為內部名字。74,DUP nesting too deep,重復子句嵌套超過17層。
75,Illegal use of undefined operand(?),“?”使用不正確。如“MOVAH,?”和“5 DUP(?+5)”均非法。
76,Too many values for structure or record initialization,初始化結構或記錄變量時給出過多初始值。
77,Angle brackets required around initialized list,初始化結構變量時,沒有使用尖括號括起初始值。
78,Directive illegal in structure,結構定義中的語句非法。
79,Override with DUP illegal,初始化結構變量時,使用了重復子句DUP。80,Field cannot be overridden,初始化結構變量時,企圖預置不能被預置的域。83。Circular chain of EQU alliases,用EQU偽指令定義的符號名指向自身。如語句“AEQUB”和“B EQUA”非法,將產生該錯誤。
84,Cannot emulate coprocessor opcode,協處理器指令或操作數與產生協處理器仿真程序不支持的操作碼一起使用。
85,End of file,no END directive,源程序無END語句。該錯誤也可能在段嵌套出錯時產生。
86,Data emitted with no segment,應在段內使用的語句在段外使用。產生目標代碼的語句必須在段內,不產生目標代碼的語句可在段內,也可在段外。
87,Forced error-passl,用.ERRl偽指令強制形成的錯誤。88,Forced error-pass2,用.ERR2偽指令強制形成的錯誤。89,Forced error,用.ERR偽指令強制形成的錯誤。
90,Forced error-expression true(0),用.ERRZ偽指令強制形成的錯誤。91,Forced error-pression false(not 0),用.ERP,Z偽指令強制形成的錯誤。92,Forced error-symbol not defined,用.ERRNDEF偽指令強制形成的錯誤。93,Forced error-symbol defined,用.ERRDEF偽指令強制形成的錯誤。94,Forced error-string blank,用.ERRB偽指令強制形成的錯誤。95,Forced error-string not blank,用.ERRNB偽指令強制形成的錯誤。
96,Forced error-strings identical,用.ERRIDN偽指令強制形成的錯誤。97,Forced error-strings different,用.ERRDIF偽指令強制形成的錯誤。98,Wrong length for override value,結構域的重設值太大以至不適宜于這個域。99,Line too long expanding symbol:symbol,使用EQU偽指令定義的等式太長。101,Missing data;zero assumed,缺少操作數,假定是零。
103,Align must be power of2,ALIGN偽指令用了不是2的冪的參數。
合肥學院計算機科學與技術系
104,Jump within short distance,JMP指令的轉移范圍在短標號內,故可在標號前加SHORT操作符,從而使指令代碼減少一個字節。
105,Expected element,少了一個元素,如標點符號或操作符。
106,Line too lon9,源行超過MASM允許的最大長度。MASM 5.0規定行長為128個字符。
107,Illegal digit in number,常數內包含當前的基不允許的數字,如l08Q。108,Empty string not allowed,空串不允許出現。如“NULL DB?Ⅲ語句非法。109,Missing Operand,語句缺少一個必需的操作數。
110,Open parenthesis or bracket,語句中缺少一個圓括號或方括號。111,Directivemustbeinmacr0,只在宏定義里面使用的偽指令用在宏定義之外。112,Unexpected end of line,語句行不完整。
2.無編號的錯誤信息
無編號錯誤信息提示命令行、存儲分配或文件訪問出現錯誤。(1)命令行錯誤
MASM時,若胃戶給出無效命令行,將產生如下提示信息之一: Buffer size expected after B option Error defining symbol “name” from command line Extra file name ignored Line invalid.start again Path expected after I option Unkn0Ⅵ-a case option:option Unknown option:option(2)文件訪問錯誤
當MASM處理文件時,若出現磁盤空間不夠、錯誤文件名或其他文件錯誤,則將產生如下提示信息之一:
End of file encountered on input file Include file filename not found Read error on standard input Unable to access input file:filename Unable to open cref file:filename Unable to open input file:filename Unable to open listing file:filename Unable to open object file:filename Write error on cross.reference file Write error on listing file Write error on object file 21
匯編語言程序設計實驗指導書
(3)其他錯誤
表示存儲分配出錯或其他一些與特定源行不相關的匯編出錯等提示信息。Internal error,內部出錯,注意錯誤發生時的情況。
Internal error.problem with expression analyzer,分析表達式出現內部錯誤,說明表達式構成有誤。
Internal unknown error,MASM不能識別的內部表有錯。
Number of Open conditionals:(number),有IF而沒有ENDIF語句。Open procedures,無與PROC匹配的ENDP語句。Open segments,無與SEGMENT匹配的ENDS語句。
Out of memory,存儲器有效空間用完,可能是源文件太長或符號表中定義了太多符號。
第二篇:語言程序設計課程設計指導書
匯編語言程序設計課程設計指導書
一、課程設計的目的
本課程設計是《匯編語言程序設計》課程的后繼教學環節,其宗旨是使學生通過對一個較大型的、綜合性的應用程序進行閱讀、修改、添加功能等工作,對匯編語言程序設計有更進一步的認識,提高編程技巧和閱讀理解復雜程序的能力。
二、課程設計的任務要求
根據所給的“Reader.asm”應用程序框架,在此基礎上修改和添加功能。1.基本任務: ?
? ? ? 認真閱讀“Reader.asm”源程序,理解程序每一條指令在程序中的作用; 用→、←鍵在窗口內左右移動文本;
用PgDn,PgUp鍵上下快速移動文本(每次移半幀); 設計專用鍵放大、縮小窗口,改變窗口位置。
2.擴展任務: ? ? 對文本內的Tab字符(ASCII碼09H)進行處理:遇到Tab鍵,下一個字符顯示在下一個表站開始處(每個6個字符一個表站);
設置狀態行,顯示當前文件名、文本位置(仿垂直滾動條)。
3.自行設計的其它任務:
三、課程設計報告的內容
1.課程設計題目名稱、班級號、學號、學生姓名和課程設計起止日期(封面);
2.上海應用技術學院課程設計任務書(下發)3.課程設計目的和要求;
4.課程設計任務內容; 5.詳細設計說明; 6.軟件使用說明; 7.課程設計總結;
8.附錄:1 參考文獻 2 程序清單(電子版)。
四、課程設計詳細設計說明及其它要求
1.2.3.4.5.6.分析原“Reader.asm”程序結構:每個模塊說明,較大模塊程序流程圖; 對你已經實現的功能做詳細的說明,并附上流程圖及部分程序清單; 自己對該“文件閱讀器”的進一步設想;
對于有設想但最終未實現的功能的大致編程思路的闡述; 論述在設計過程中遇到的并且對你具有啟發性的問題; 交課程設計報告手寫版,源程序交電子版。
五、評分標準
1.根據平時出勤情況和設計時的工作情況;
2.根據課程設計程序的完成情況,必須有可運行的軟件。3.根據課程設計報告的質量。課程設計報告不能抄襲,抄襲判為不及格。4.在題目要求之外附加具有實用性的功能。
六、課程設計工作進度計劃
星期一:課程設計介紹,源程序閱讀理解,功能設計,程序編寫。星期二:功能設計,程序編寫。
星期三:程序編寫與調試,課程設計報告撰寫。星期四:程序編寫與調試,課程設計報告撰寫。
星期五:程序最終修改,課程設計報告撰寫,提交報告并答辯。
七、主要參考資料
[1]楊文顯.匯編語言程序設計簡明教程.北京:電子工業出版社,2005
八、附錄
《文本閱讀器》匯編語言源程序清單
;Title: Assemble Program “Reader.asm”
;Read a file from disk, display it?s contents on screen;Move the content on screen by up/down arrow keys;========================== MYDAT SEGMENT MAXLEN DW 1000;最大行數 INDEX DW 1000 DUP(?);行索引 LENCT DW 0;實際行數 CURLINE DW 0;當前頁第一行行數 CCOUNT DW ?;文件總字符數
TOP DB 5;窗口左上角行數 LEFT DB 5;窗口左上角列數 WS DW 60;窗口寬度 HS DW 15;窗口高度 FG DB 17H;文字屬性 FGB DB 1FH;窗口邊框屬性
MSG1 DB 'File:$';輸入文件名提示 MSG2 DB 'File open error!$';打開文件出錯時提示 MSG3 DB 'File read error!$';讀文件出錯時提示 FILENA DB 80,?,80 DUP(?);輸入文件名緩沖區
;定義功能鍵和相應的處理程序
;每個功能定義兩個數據:掃描碼,處理程序入口地址;該數據由DOSUB子程序使用
KEYSUB DW 48H, SUB1 , 50H, SUB2, 0
MYDAT ENDS
;==========================
BUFFER SEGMENT PARA DB 65535 DUP(?);文件緩沖區,文件最大為64K BUFFER ENDS
;==========================
SSEG SEGMENT STACK ?STACK?;堆棧段
DW 100 DUP(?)SSEG ENDS
;==========================
;宏定義 DISPINIT: 設置顯示器顯示方式 DISPINIT MACRO MOV AX,0003H;文本方式 25x80 INT 10H ENDM;----------;宏定義 PROMPT: 顯示字符串 PROMPT MACRO OUTMSG LEA DX, OUTMSG MOV AH, 09H;INT 21H;ENDM;--------;宏定義KRYIN: 從鍵盤讀入一個字符 KEYIN MACRO MOV AH,0;讀鍵
INT 16H;AH中為掃描碼
ENDM;==========================;代碼段開始 CODE SEGMENT
ASSUME CS: CODE, DS: MYDAT, ES: BUFFER, SS: SSEG
START: MOV AX, MYDAT;裝載DS,ES MOV DS, AX MOV AX, BUFFER MOV ES, AX
DISPINIT;顯示方式初始化
CALL READFILE;讀入文件
JC DONE
CALL CLIST;初始化索引行
CALL CLSCREEN;清屏
CALL CREWIN;創建窗口
CALL SHOWCUR;顯示當前頁
NEXT: KEYIN;進入主程序: 讀鍵盤
CALL COMMAND;命令分析與處理
JNC NEXT;非x鍵繼續循環
DONE: CALL CLSCREEN;清屏
MOV AX, 4C00H INT 21H;退出
;-------;子程序READFILE: 提示并讀入文件名,將文件讀入緩沖區 READFILE PROC PROMPT MSG1;CALL SIN;讀入文件名
MOV AX, 3D00H MOV DX, OFFSET FILENA+2 INT 21H;打開文件(讀)JC GETERR1;打開文件出錯轉GETERR1 PUSH DS PUSH ES POP DS;將DS指向文件緩沖區段
MOV BX, AX;BX=文件號
MOV AH, 3FH;讀文件 MOV CX, 0FFFFH;讀入最多64K-1 MOV DX, 0;DS: DX指向文件緩沖區
INT 21H POP DS JC GETERR2;讀入文件出錯轉GETERR2 MOV CCOUNT, AX;實際讀入字符數存入CCOUNT中
CLC JMP GETFILEXIT
GETERR1: PROMPT MSG2;讀入文件出錯處理
KEYIN STC JMP GETFILEXIT;
GETERR2: PROMPT MSG3;打開文件出錯處理
KEYIN STC
GETFILEXIT: RET
READFILE ENDP;-------;輸入文件名子程序 SIN PROC MOV AH, 0AH MOV DX, OFFSET FILENA INT 21H;輸入文件名
XOR CH, CH MOV CL, FILENA+1;取文件名長度
LEA BX, FILENA+2 ADD BX, CX;計算字符串結尾地址
MOV BYTE PTR [BX], 0;在字符串尾部加0 RET SIN ENDP;-------;索引行初始化子程序 CLIST PROC MOV CX, CCOUNT JCXZ CSTX;文件為空結束
MOV SI,0;文件緩沖區字符指針
MOV DI,0;索引行指針
MOV DX,0;行數計數
MOV INDEX[DI], 0 INC DX;假設文件至少有一行 CST1: CMP WORD PTR ES:[SI], 0A0DH;判斷是否為回車換行符
JNZ CST2;不是行結束,轉CST2 INC DX;行數加一
ADD SI, 2;跳過回車換行符
ADD DI, 2;索引行指針加一
MOV INDEX[DI], SI;指向本行開始地址
CMP DX, MAXLEN JNC CST4;是否超過最大行,超過轉CST4,結束
JMP CST3;CST2: INC SI;文件緩沖區字符指針指向下一字符 CST3: LOOP CST1;CST4: MOV LENCT, DX;保存行數到LENCT中 CSTX: RET CLIST ENDP;-------;清屏子程序
CLSCREEN PROC MOV AX, 0600H;清屏
MOV CX, 0 MOV DH, 50 MOV DL, 79 MOV BH, 07H INT 10H RET CLSCREEN ENDP;------;顯示當前頁子程序 SHOWCUR PROC MOV DH, 0;窗口最頂行
MOV SI, CURLINE;取當前頁第一行行數
MOV CX, HS;窗口的第一行和最后一行為邊框,SUB CX, 2;所以能夠顯示內容的高度為窗口高度減二 SC1:
CALL SHOWLINE;顯示一行
INC DH;窗口下一行
INC SI;文件下一行
MOV AX, LENCT;CMP SI, AX;文件是否顯示完
JNC SC2;顯示完則轉SC2 LOOP SC1 JMP SC1X SC2: JCXZ SC1X;該頁顯示滿則結束
;該頁沒有顯示滿,則用空行填滿該頁 SC3: PUSH CX PUSH DX CALL SHOWSPLINE;顯示空行
POP DX POP CX INC DH LOOP SC3 SC1X: RET SHOWCUR ENDP;------;顯示一行子程序
;輸入:SI=顯示行行號;DH=窗口中的行號 SHOWLINE PROC PUSH CX PUSH SI PUSH DX PUSH AX
ADD DH, TOP;INC DH;實際行數=窗口左上角行數+DI+1 MOV DL, LEFT;INC DL;實際列數=窗口左上角列數+1 CALL VADD;
MOV CX, WS;窗口的第一列和最后一列是邊框,SUB CX, 2;所以能夠顯示內容的寬度為窗口寬度減二
SHL SI, 1;行索引為字類型,所以乘二
MOV SI, INDEX[SI];取該行第一個字符在文件緩沖區的地址
PUSH DS MOV AX, 0B800H MOV DS, AX;DS指向顯示緩沖區段地址 SL1: MOV AX, ES:[SI] CMP AX, 0A0DH JZ SL2;如果是回車換行,則該行結束
MOV DS: [DI], AL;顯示一個字符 ADD DI, 2;INC SI;取下一個字符
LOOP SL1;JCXZ SLX;該行正好顯示完,則結束,否則用空格填滿
SL2: MOV BYTE PTR DS:[DI], ' ';該行沒有顯示滿,則用空格填滿
ADD DI, 2 LOOP SL2
SLX: POP DS
POP AX POP DX POP SI POP CX
RET SHOWLINE ENDP;--------;顯示空行子程序
;輸入:DI=窗口中的行號 SHOWSPLINE PROC;
MOV AX, HS;SUB AX, 2;CMP DH, AL;顯示的空行是否超出最低行
JNC SSLX;如果是,則轉SSLX ADD DH, TOP;INC DH;實際行數=窗口左上角行數+DI+1 MOV DL, LEFT;INC DL;實際列數=窗口左上角列數+1 CALL VADD;
MOV CX, WS;窗口的第一列和最后一列是邊框,SUB CX, 2;所以能夠顯示內容的寬度為窗口寬度減二
PUSH DS MOV AX, 0B800H MOV DS, AX SSL1: MOV BYTE PTR DS:[DI], ' ' ADD DI, 2 LOOP SSL1 POP DS SSLX: RET SHOWSPLINE ENDP;-------;創建窗口子程序 CREWIN PROC PUSH ES MOV AX, 0B800H;顯示緩沖區地址為B800:0 MOV ES, AX;
MOV DH, TOP MOV DL, LEFT;窗口左上角行列數
MOV CX, HS;窗口高度(行數)CW1: PUSH DX;CALL VADD;計算地址
PUSH CX;MOV CX, WS;窗口寬度(列數)
MOV AL, FG;取屬性 CW2: MOV BYTE PTR ES:[DI], ' ';送空白字符
INC DI;MOV BYTE PTR ES:[DI], AL;送屬性
INC DI;LOOP CW2;
POP CX POP DX INC DH;行數加一
LOOP CW1
CALL DRAWB;畫邊框
POP ES RET CREWIN ENDP;-;畫邊框子程序 DRAWB PROC PUSH DX PUSH CX PUSH BX PUSH AX MOV BL, FGB MOV DH, TOP MOV DL, LEFT CALL VADD
;畫左上角角框
MOV BYTE PTR ES:[DI], 0C9H INC DI MOV BYTE PTR ES:[DI], BL INC DI
;畫第一行邊框
MOV CX, WS SUB CX,2 DB1: MOV BYTE PTR ES:[DI], 0CDH INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB1
;畫右上角角框
MOV BYTE PTR ES:[DI], 0BBH INC DI MOV BYTE PTR ES:[DI], BL
;畫第二行到倒數二行左右邊框
MOV DH, TOP MOV DL, LEFT INC DH MOV CX, HS SUB CX, 2 DB2: PUSH DX CALL VADD MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL DEC DI MOV AX, WS DEC AX SHL AX, 1 ADD DI, AX MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL POP DX INC DH LOOP DB2;取邊框屬性;窗口左上角行列數;計算地址;角框╔;因為去掉了左右角框,所以寬度減二;上下邊框═;角框╗;從第二行開始;第一行和最后一行沒有左右邊框,;所以高度減二;;計算左邊框地址;左右邊框║;;;;計算右邊框地址;;下一行;
;畫左下角角框
MOV DH, TOP;MOV DL, LEFT;MOV AX, HS;DEC AX;ADD DH, AL;左下角行數=右上角行數+窗口高度-1 CALL VADD MOV BYTE PTR ES:[DI], 0C8H;角框╚
INC DI MOV BYTE PTR ES:[DI], BL INC DI
;畫最低行邊框
MOV CX, WS;SUB CX, 2;因為去掉了左右角框,所以寬度減二 DB3: MOV BYTE PTR ES:[DI], 0CDH;上下邊框═
INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB3
;畫右下角角框
MOV BYTE PTR ES:[DI], 0BCH;角框╝
INC DI MOV BYTE PTR ES:[DI], BL
POP AX POP BX POP CX POP DX
RET DRAWB ENDP;------;計算窗口內某行列位置對應顯存地址;輸入:DH=行 DL=列;輸出:DI為顯存地址 VADD PROC MOV AL, 80;MUL DH;XOR DH, DH;ADD AX, DX;行數×80+列數
SHL AX, 1;乘2,因為每個字符占兩個字節
MOV DI, AX RET VADD ENDP;--------;命令分析子程序 COMMAND PROC CMP AH, 2DH;2DH為x鍵的掃描碼
JNZ COM1;不是x鍵,轉COM1 STC;值x鍵標志
RET COM1: CALL DOSUB;轉命令散轉子程序
CLC RET COMMAND ENDP;--;命令散轉子程序 DOSUB PROC MOV AL, AH MOV AH, 0;將鍵掃描碼放入AX中
MOV BX, OFFSET KEYSUB;BX指向KEYSUB DOSUB1: CMP WORD PTR [BX], 0 JZ DOSUBX;KEYSUB表查完,即沒有找到轉DOSUBX CMP AX, [BX] JZ DOSUB2;找到掃描碼轉DOSUB2 ADD BX, 4 JMP DOSUB1;DOSUB2: ADD BX, 2 MOV BX, [BX];取處理程序入口地址
JMP BX;轉處理程序 DOSUBX: RET
;SUB1和SUB2均為功能鍵處理程序;處理完后應使用JMP DOSSUBX結束
;上箭頭鍵處理程序 SUB1: CMP CURLINE, 0 JZ SUB1X;已到第一行,結束
DEC CURLINE;向上一行
CALL SHOWCUR;顯示當前頁 SUB1X: JMP DOSUBX
;下箭頭鍵處理程序 SUB2: MOV AX, LENCT DEC AX DEC AX;至少顯示一行
CMP AX, CURLINE;已到最后一行
JZ SUB2X INC CURLINE;向下一行
CALL SHOWCUR;顯示當前頁 SUB2X: JMP DOSUBX
DOSUB ENDP;--------
CODE ENDS
;========================= END START
第三篇:UML程序設計實驗指導書
《UML程序設計》
實驗指導教程
適合專業:計算機類專業
浙江樹人大學信息科技學院 2016.02
課程與實驗綜述
第一部分實驗綜述
一.課程簡介及實踐要求:
《UML程序設計》是以介紹面向對象的統一建模語言UML為主,使學生了解面向對象技術的基本概念,掌握UML的分析和設計方法,同時掌握在Enterprise Architect環境下用UML進行分析和設計的技術。本課程在教學內容方面著重基本理論、基本知識和基本方法,在培養實踐能力方面著重設計構思和設計技能的基本訓練,熟練的上機操作能力和分析能力。
實驗實踐訓練是UML程序設計教學的重要技能環節。通過實驗,使學生加深理解、驗證、鞏固課堂教學內容,特別是通過設計和綜合實驗,發揮學生的想象力和創新能力。二.課程實驗目的要求:
通過UML的實驗,學生應該: 1.學會用UML進行面向對象的思想去分析和設計相關系統;2.學會用Rose建模工具進行軟件建模。三.課程實驗參考資料
1.(美)Joseph Schmuller著.UML基礎、案例與應用.人民郵電出版社,2004 2.(美)Hans-Erik Eriksson.UML 2工具箱.電子工業出版社,2004 3.吳際,金茂忠.UML面向對象分析.北京航空航天大學出版社,2002 4.趙從軍.UML設計及應用.機械工業出版社,2004 5.Grady Booch,James Rumbaugh,Ivar Jacobson.UML用戶指南.機械工業出版社,2001 6.吳建,鄭潮,汪杰.UML基礎與Rose建模案例.人民郵電出版社,2004 第二部分 實驗實踐指導
實驗一
構建用例圖
一、實驗目的
1.學會分析系統中的參與者和用例 2.掌握用例圖的繪制方法
二、實驗器材
1.計算機一臺;
2.Enterprise Architect 工具軟件;
三、實驗內容
1、分析ATM系統需求,按要求畫出用例圖;
2、建立一個學生管理信息系統的需求
3、建立設計一個學生管理信息系統的完整的用例圖
四、實驗步驟
(一)ATM系統的用例圖
1.分析
ATM自動取款機:客戶可以取錢,存錢,查詢余額,轉帳,修改密碼。通過分析可找出如下幾個參與者:(1)ATM(2)客戶
通過分析得到如下用例:
(1)存款
(2)取款(3)查詢余額
(4)轉帳(5)修改密碼
(6)打印收據
2.繪圖步驟:
下面介紹在Enterprise Architect中創建用例圖的過程:
Enterprise Architect主界面如下圖所示:
1、建立項目:
如下圖在文件菜單選擇新建項目:
如下圖
選擇文件夾,輸入項目名:
如圖,選擇所需要的選項:
2、建立用例圖
在合適的文件平夾下,右鍵
在UML Behavioral 下選擇Use Case,圖名處輸入用例名如ATM 如下圖,比雙擊ATM
在編輯界面下右鍵,如下圖
3、添加用例
選擇Use Case 依次添加存款、取款、查詢余額、轉帳、修改密碼、打印收據,如圖1.4所示。
4、添加Actor 在編輯界面下右鍵,選擇Actor,5、添加邊界(ATM取款系統)
如下圖
6、添加參與者和用例間的關聯關系,右鍵客戶,如上圖,選擇小箭頭,添加關聯,同理添加ATM的關聯
添加Common中的Note,內容為***制,如上圖
7、保存圖
完成用例圖后,保存該圖。
8、選擇所有的內容,拷貝,粘貼到實驗報告中,如下圖
uc ATMATM取款系統存款金智勇制取款查詢余額客戶ATM修改密碼打印收據轉帳
(二)建立設計一個學生管理信息系統的需求分析與完整的用例圖
(1)學生管理信息系統簡介
學生管理信息系統主要為學校的學生處設計:方便學校學生處與學院學生口管理員方便管理學生,學生成績由教務系統提供,教務系統提供相關的WEB service供學生管理信息系統調用。
? 通過分析可找出如下幾個參與者:
學生處管理員、學校領導(學校各種報表統計信息)、學院管理員、班主任(提供學生操行、查詢等)、學院領導(學院各種報表統計信息)、學生、后勤管理人員(衛生管理、保衛處異常情況處理)、財務人員、考勤管理員(由副班長提供考勤信息)等
? 通過分析得到如下一些大的用例:
學生基本信息管理、考勤管理、成績導入、學校各種報表信息(要求細化)、學院各種報表信息(要求細化)、個人成才規劃、新學期注冊,操行評定、學生任職信息系統、學生獎懲管理系統(要求細化,包括評優評獎等)、學生變動信息管理(培訓內容、助學貸款情況、學校還款情況、勤工助學情況,黨員管理),后勤衛生管理、保衛處的學生的異常情況處理、其它的具體由學生自己定。
2.建立設計一個學生管理信息系統的需求分析
分析學生管理信息系統,建立系統需求分析,并要求畫出系統功能框圖,如學生管理信息系統的功能模塊圖如下
系統模塊圖如后勤衛生查詢功能子系統模塊圖如下。
要求分析其它的子系統模塊
3.建立一個學生管理信息系統的完整的用例圖
完整的要求,就為每一類用戶分配一個用例模型,如一般學生查詢功能用例
要求分析其它參與者的用例模型
(4)建立用例的文字描述(要求學生寫出兩個)
1.“基本信息查詢”用例 用例編號:04010101(共有4層用例圖結構,每層用2位數字表示,采用8位編號。)用例名:
基本信息查詢
執行者: 學生自己、學生的班主任、輔導員及其它的特權用戶。目的: 查詢學生的基本信息,包括姓名、學號、家庭地址等信息。類
型: 端點、基本的 級
別: 二級 ? 過程描述:
(三)上傳ATM系統的用例圖與學生管理信息系統的完整的用例圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗二
構建類圖
一、實驗目的
1.理解類的基本概念 2.理解類間的關系
3.掌握類圖的繪制方法
二、實驗器材
1.計算機一臺;
2.Enterprise Architect 工具軟件;
三、實驗內容
(1)分析學生管理系統中的選課子系統中類及關系,然后畫出它們的類圖。(2)分析學生管理系統的其它子系統,并畫出詳細的系統類圖
四、實驗步驟
(一).選課子系統
1、選課子系統分析
? 分析學生管理系統中的選課子系統,通過分析可抽象出如下幾個類:
(1)學生類(student)(2)選課類(SelectCource)(3)課程類(Cource)
? 學生類、選課類和課程類屬性和方法
課程類的屬性和方法:
屬性包括
(1)課程名稱(CourceName)(2)開課教室(Room)(3)課程號(CourceID)(4)授課教師(Teacher)(5)學年(academic year)(6)學期(Term)(7)允許選課的學生人數(SelectNoUp)方法包括
(1)設置課程號(SetCourceID)(2)設置課程名稱(SetCourceName)(3)查詢課程號(SeekCourceID)(4)查詢允許選課的學生人數(SeekSelectNoUp)
選課類的屬性和方法:
屬性包括
(1)ID號(ID)(2)課程號(CourceID)(3)學號(SNo)(4)成績(score)方法包括
1)選課(SelectCoure)2)退選(CancelSelected)3)查詢選課情況(SeekSelected)
2.繪圖步驟:
下面介紹在Enterprise Architect中創建類和它們之間關系的過程:
(1)在上圖的合適文件夾下選擇添加類圖,類圖名為選課系統類,如下圖。
(2)在選課系統類圖中,從工具欄中新建元素,選擇Class并取名Student表明新增一個類,,同理添加選課類(SelectCource),課程類(Cource),如下圖
(2)右鍵Studen,選擇功能與屬性---屬性,如下圖
(7)同樣的方法添加Course類與SelectCource類,(8)創建兩個類之間的關系,通過分析得出:Course類與SelectCource類之間為單向關聯。選擇圖標欄的“關聯”,由Course類指向electCource類。如圖所示。
(10)分別在Course類與SelectCource類選項卡中鍵入名稱和多重性,圖2.10(11)重復(2)-(10)中的步驟完成選課系統整個類圖的創建。(12)如圖2.11轉換生成代碼,查看所生成的三個的代碼。
選擇對應的類的文件名,生成代碼
查看代碼
(二)分析學生管理系統的其它子系統,并畫出詳細的系統類圖
一般情況一個子系統至少有一個類,要求建立系統的詳細類圖,并建立類間的關聯
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗三
構建活動圖
一、實驗目的
1. 熟悉活動圖的基本功能和使用方法。
2. 掌握如何使用建模工具繪制活動圖方法。
二、實驗器材
1.計算機一臺;
2.Enterprise Architect 工具軟件;
三、實驗內容
(1)分析圖書管理系統中管理員的活動狀態,畫出管理員的活動圖。(2)分析學生管理系統,并畫出詳細的活動圖,并用活動圖細化用例圖
四、實驗步驟
(一)圖書管理系統活動圖
1.分析
? 在圖書管理系統中管理員的活動如下:
(1)處理還書(2)處理借書(3)處理罰款 ? 讀者的活動如下:
(1)登錄(2)找書(3)預約(4)瀏覽
2.繪圖步驟:
下面介紹在Enterprise Architect中活動圖的過程:(1)在的合適文件夾下選擇添加活動圖(Activity),如下圖,在圖名中輸入在圖書管理系統管理員活動圖如下圖所示
(2)添加活動及其它元素,如下圖
圖 3.1
(2)繪制圖書管理員的活動圖,如圖3.2所示:
圖3.2
(3)創建讀者的活動圖如圖3.3所示:
圖3.3
(二)分析學生管理系統,并畫出詳細的活動圖,并用活動圖細化用例圖
(1)學生基本信息保存的活動圖
錄入基本信息、點擊保存、鏈接數據庫、判定學號是否已存在、判定錄入信息是否符合規范(日期信息、身份證號、郵編等信息)-保存。(2)學生基本信息查詢的活動圖
鏈接數據庫、查詢基本信息表、倒出數據內容、填入各字段信息到信息輸出框、根據學院代號查詢學院名稱、寫入學院信息到列表框、定位學院信列表框、根據班級代號查詢班級名稱、寫入班級信息、寫入班級信息到列表框、定位班級信列表框、。(3)至少分析建立其它3個活動圖
(4)根據活動圖重新分析用例圖并細化用例圖,審核類圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗四
構建順序圖
一、實驗目的
學會用順序圖實現用例
二、實驗器材
1.計算機一臺;
2.Enterprise Architect 工具軟件;
三、實驗內容
(1)分析系統需求,畫出ATM取款的順序圖(2)分析學生管理系統,并畫出詳細的順序圖
四、實驗步驟(一)ATM取款的場景
1、ATM取款的場景分析:
(1)通過讀卡機,用戶插入ATM卡;
(2)ATM系統從卡上讀取銀行ID、帳號、加密密碼、并用主銀行系統驗證銀行ID和帳號;
(3)用戶輸入密碼,ATM系統根據上面讀出的卡上加密密碼,對密碼進行驗證;(4)用戶輸入取款數量;
(5)ATM系統通知主銀行系統,傳遞儲戶帳號和取款數量,并接收返回的確認信息;
(6)ATM系統輸出先進、ATM卡和顯示帳戶余額的收據;(7)ATM系統記錄事務到日志文件。尋找場景中的對象:ATM、客戶和帳戶。
2、繪圖步驟:
下面介紹在Enterprise Architect中創建順序圖的過程:
(1)在的合適文件夾下選擇添加活動圖(Activity),如下圖,21
在工具菜單中選擇選項如下圖
選擇圖—順序,如下圖,選擇“顯示順序編號”
(2)在順序圖前,為保證對象的可行性,可先在類圖中創建Customer、ATM、和Account類。也可新建元素LifeLine。如下圖,分別創建Customer、ATM、和Account.(4)根據ATM取款的場景,獲得第一條消息為“客戶向ATM機提交取款需求”,向圖中添加消息。
在圖中,點擊Customer,選擇小箭頭,指向ATM,在消息特征編輯窗口中,輸入Request。
圖4.4
(5)同樣的方法添加其它消息,如圖4.5所示。
圖4.5
(二)分析學生管理系統,并畫出詳細的順序圖
(1)如學生獎學金評定的順序圖:倒入成績、操行評定、計算綜合評分、獎學金評定(2)用戶登入的順序圖:
(3)新學期注冊順序圖:學生交費--向學院報到--判斷是否交費--(是否申請助學金、是否申請緩交)--注冊(4)建立黨員管理順序圖
(5)建立其它的一個以上順序圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗五
構建協作圖
一、實驗目的
1.學會協作圖的繪制方法
2.掌握順序圖和協作圖的相互轉換。
二、實驗器材
1.計算機一臺;
2.Enterprise Architect 工具軟件;
三、實驗內容
(1)分析系統需求,畫出ATM取款的協作圖。
(2)分析學生管理系統,并畫出詳細的順序圖
四、實驗步驟
(一).ATM取款的場景
1、ATM取款的場景分析:
(1)通過讀卡機,用戶插入ATM卡;
(2)ATM系統從卡上讀取銀行ID、帳號、加密密碼、并用主銀行系統驗證銀行ID和帳號;(3)用戶輸入密碼,ATM系統根據上面讀出的卡上加密密碼,對密碼進行驗證;(4)用戶輸入取款數量;
(5)ATM系統通知主銀行系統,傳遞儲戶帳號和取款數量,并接收返回的確認信息;(6)ATM系統輸出先進、ATM卡和顯示帳戶余額的收據;(7)ATM系統記錄事務到日志文件。尋找場景中的對象:ATM、客戶和帳戶。
2、繪圖步驟:
下面介紹在Enterprise Architect中創建協作圖的過程:
(1)在“Logical View”中新建“Collaboration Diagram“,雙擊圖標,出現圖5.1,為編輯順序圖做好準備。
圖5.1
(2)創建類節點
創建四個類節點分別為ATM,Branch,Consortium,User。
分別選擇其中的三個類節點ATM,Branch,Consortium 把它們拖動到CollaborationDiagram圖中,如圖5.2所示。
圖
4.2
選擇標記為 User 的類節點。將選定的類拖放到CollaborationDiagram圖編輯器中,使其位于 ATM 生命線元素的上方,如圖5.3所示。
圖5.3
(3)添加連接器鏈接(Object Link)
協作圖中的每個元素均可通過連接器鏈接與其他元素建立連接。您可以標識這些鏈
接,并在其中添加消息流。
從建模組件面板的“基本”類別中,選擇 “ Object Link ” 圖標。單擊標記為 User 的生命線元素,然后單擊 ATM。將在兩個元素之間繪制一條連接器鏈接。使用相同的步驟繪制以下鏈接:
從 ATM 至 Consortium 的鏈接
從 Consortium 至 Branch 的鏈接
從 ATM 至 Branch 的鏈接
注意:在創建從 ATM 至 Branch 的鏈接時,請從 ATM 生命線的右側水平繪制一條鏈接,并在到達 Branch 生命線的正上方時單擊鼠標左鍵。這樣便會在鏈接線上出現一個頂點,然后在頂點到 Branch 生命線之間垂直繪制一條鏈接。
此時,該圖應當圖5.4類似。
圖5.4
在圖編輯器中的任意位置單擊鼠標右鍵,選擇 “Edit” 的“delete from mode”菜單,可刪除模型,如圖5.5所示。
圖5.5
(4)顯示操作流
操作流將在圖中顯示為與鏈接平行的帶標記箭頭。此鏈接用于向目標元素傳輸消息或實現這種傳輸。在圖編輯器中,選擇 User 和 ATM 之間的連接器鏈接。右鍵單擊距 ATM 生命線最近的連接器鏈接部分。如圖4.6所示,從彈出式菜單中選擇“Open Specification”,彈出”Link Specification For Untile”對話框,在對話框中按右鍵,從彈出式菜單中選擇“Insert To: ATM”,在Message Name中輸入public void GetCashOnHand(), 如圖5.6所示。
圖5.6
在 ATM 和Consortium 之間的連接器鏈接上,右鍵單擊靠近Consortium生命線的鏈接部分。
添加消息 “ public void validateAccountInfo()”。Rose顯示 2: public void validateAccountInfo()。
在 ATM 和 Branch 之間的連接器鏈接上,右鍵單擊靠近Branch 生命線的鏈接部分。
添加消息 “public char getConnected”。Rose顯示3: public char getConnected()。
右鍵單擊 Consortium 和 Branch 之間靠近Branch 生命線元素的連接器鏈接。添加消息 “public void verifyCardWithBank(int stringCardSTrip)”。Rose顯示 4: public void verifyCardWithBank(int stringCardSTrip)。
完成的協作圖應當與圖5.7類似。
圖5.7
(5)模型檢查并保存
使用Tools工具的”Check Model”,進行模型檢查,查看是否有錯。
如無誤則在完成協作圖后,您可以保存該圖。在圖編輯器中,從菜單中選擇“保存”。
(二)分析學生管理系統,并畫出詳細的協作圖
(1)如學生獎學金評定的協作圖:倒入成績、操行評定、計算綜合評分、獎學金評定(2)助學貸款申請協作圖:學生申請—班主任批準—學院批準-學校領導批準(3)助學勤工儉學申請協作圖:(4)建立其它的一個以上協作圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗六
構建狀態圖
一、實驗目的
1. 熟悉狀態圖的基本功能和使用方法。2. 掌握如何使用建模工具繪制狀態圖方法。
二、實驗器材
1.計算機一臺;
2.Enterprise Architect 工具軟件;
三、實驗內容
(1)分析圖書管理系統中的書和借書證的狀態,畫出它們的狀態圖;
(2)分析學生管理系統,并畫出詳細的順序圖
四、實驗步驟
(一)圖書管理系統
1、分析
? 在圖書管理系統中,分析書的狀態如下:
(1)可借(2)被借(3)被預約(4)刪除
? 借書證的狀態如下:
(1)可用(2)不可用(3)刪除
2、繪圖步驟:
下面介紹在Rose2003中創建類和它們之間關系的過程:
(1)在“Logical View“中的“StateChart Diagram”菜單,雙擊圖標,出現圖6.1,為編輯狀態圖做好準備。
圖6.1(2)在工具欄中選擇“Start State”圖標添加到編輯窗口中,如圖6.2所示。
圖6.2(3)在工具欄中選擇“State”圖標,添加一個元素,命名為“New book”,如圖6.3所示。
圖6.3(4)同樣的方法添加其它狀態,如圖6.4所示。
圖6.4 5)書的各個狀態之間添加轉移及相應的事件,如圖6.5所示。
32(圖6.5(6)同樣的方法得借書證的狀態圖,如圖6.6所示。
圖6.6
(二)分析學生管理系統,并畫出詳細的狀態圖
(1)建立學生交款狀態圖:已交、未交、緩交、部分申請助學貸款(2)建立學生懲罰(記過以上)狀態圖:
(3)建立學生黨員申請狀態圖:(4)建立其它的一個以上狀態圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗七
構建組件圖和配置圖
一、實驗目的
1.掌握UML中組件圖和配置圖的建立方法;
2.掌握使用Enterprise Architect繪制組件圖和配置圖;
二、實驗器材
1.計算機一臺;
2.Enterprise Architect 工具軟件;
三、實驗內容
(1)分析學校網上選課系統的組件圖,畫出系統組件圖。(2)分析學校網上選課系統的配置圖,畫出系統配置圖。(3)分析學生管理系統,并畫出詳細的組件圖與配置圖
四、實驗步驟
(一)網上選課系統
1.分析
設計學校網上選課系統的組件圖和配置圖,需求如下: 某學校的網上選課系統主要包括如下功能:
管理員通過系統管理界面進入,建立本學期要開的課程、將課程信息保存在數據庫中并可以對課程進行改動和刪除。
學生通過客戶機瀏覽器根據學號和密碼進入選課界面,在這里學生可以進行三種操作:查詢已選課程、選課以及付費。
對于以上操作,可通過業務層,并將這些操作結果存入數據庫中。
2.繪圖步驟:
(1)繪制組件圖的步驟如下:
? 確定組件;(系統管理系統, 課程管理系統,選課系統,查詢系統,人員信息管理,注冊系統,業務操作,備份系統,付費系統)? 給組件加上必要的構造型; ? 確定組件的聯系; ? 繪制組件圖。
下面介紹在Rose2003中創建組件圖的過程:
(a)在“Component View“中的 “New”的 “Component Diagram”中,出現圖7.1,為編輯組件圖做好準備,35
圖7.1(b)創建組件圖(根據要求創建)。
(2)繪制配置圖的步驟如下: ? 確定節點;(數據庫服務器,應用服務器,打印機,客戶端(n個,連接為局域網))
? 加上構造型;
? 確定節點的聯系; ? 繪制配置圖。
下面介紹在Rose2003中創建配置圖的過程:
(a)在“Deployment View“中,出現圖7.2,為編輯配置圖做好準備,圖7.2
圖7.3 系統配置圖
(二)分析學生管理系統,并畫出詳細的組件圖與配置圖
(1)系統組件圖 ? 分析系統接口
如建立查詢一個學生基本信息的接口,返回一個學生基本信息的類(類中有姓名、學號等屬性)
? 搜索系統用戶界面
搜索系統用戶界面,作為系統一種特殊的接口,用戶與系統的接口,建立單獨的包Web InterFace保存用戶界面,如學生基本信息操作的用戶界面定義如下(從View繼承過來的一個類,這里只考慮界面,類只考慮程序,可有部分重復):
為用戶界面考慮接口,并關聯不同的類
(2)系統配置圖
假設有以下的子系統:學生管理系統用到財務子系統、成績管理子系統,并各自有數據庫。
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗八
Enterprise Architect逆向工程
一、實驗目的
1.掌握Enterprise Architect中逆向工程的建立方法; 2.掌握根據逆向工程畫出類圖;
二、實驗器材
1.計算機一臺;
2.Enterprise Architect 工具軟件;
三、實驗內容
(1)分析Java程序,實現EA逆向工程。(2)根據逆向工程所得類,畫出對應類圖。
四、實驗步驟
1.分析
Enterprise Architect功能十分強大,從項目需求分析、開發、測試,整個項目過程都可使用Enterprise Architect,特別是在做需求分析與項目系統架構時建模的能力巨強。但是每個人不是在項目一開始就能參與到初期當中來的,有時候整個項目一期完工了,進行二期開發時,這個時候參與進項目,為了能夠快速了解整個項目的框架,使用Enterprise Architect的逆向工程的功能極為有用。
2.繪圖步驟:
(1)分析J2EE源代碼,了解其結構
(2)新建一個Enterprise Architect工程,選擇合適的文件夾,如下圖選擇包---代碼工程—導入---源程序目錄
選擇根包,原類型為Java
點擊確定即在對應的包下生成三個類Env,EnvList和ListS,新建視圖,添加Env,EnvList和ListS到視圖中,具體如圖所示:
圖8.3
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
第四篇:UML程序設計實驗指導書
《UML程序設計》
實驗指導教程
適合專業:計算機科學技術09
浙江樹人大學信息科技學院 2012.02
課程與實驗綜述
第一部分實驗綜述
一.課程簡介及實踐要求:
《UML程序設計》是以介紹面向對象的統一建模語言UML為主,使學生了解面向對象技術的基本概念,掌握UML的分析和設計方法,同時掌握在Rational Rose環境下用UML進行分析和設計的技術。本課程在教學內容方面著重基本理論、基本知識和基本方法,在培養實踐能力方面著重設計構思和設計技能的基本訓練,熟練的上機操作能力和分析能力。
實驗實踐訓練是UML程序設計教學的重要技能環節。通過實驗,使學生加深理解、驗證、鞏固課堂教學內容,特別是通過設計和綜合實驗,發揮學生的想象力和創新能力。二.課程實驗目的要求:
通過UML的實驗,學生應該: 1.學會用UML進行面向對象的思想去分析和設計相關系統;2.學會用Rose建模工具進行軟件建模。三.課程實驗參考資料
1.(美)Joseph Schmuller著.UML基礎、案例與應用.人民郵電出版社,2004 2.(美)Hans-Erik Eriksson.UML 2工具箱.電子工業出版社,2004 3.吳際,金茂忠.UML面向對象分析.北京航空航天大學出版社,2002 4.趙從軍.UML設計及應用.機械工業出版社,2004 5.Grady Booch,James Rumbaugh,Ivar Jacobson.UML用戶指南.機械工業出版社,2001 6.吳建,鄭潮,汪杰.UML基礎與Rose建模案例.人民郵電出版社,2004 第二部分 實驗實踐指導
實驗一
構建用例圖
一、實驗目的
1.學會分析系統中的參與者和用例 2.掌握用例圖的繪制方法
二、實驗器材
1.計算機一臺;
2.Rational Rose 工具軟件;
三、實驗內容
1、分析ATM系統需求,按要求畫出用例圖;
2、建立一個學生管理信息系統的需求
3、建立設計一個學生管理信息系統的完整的用例圖
四、實驗步驟
(一)ATM系統的用例圖
1.分析
ATM自動取款機:客戶可以取錢,存錢,查詢余額,轉帳,修改密碼。通過分析可找出如下幾個參與者:(1)ATM(2)客戶
通過分析得到如下用例:
(1)存款
(2)取款(3)查詢余額
(4)轉帳(5)修改密碼
(6)打印收據
2.繪圖步驟:
下面介紹在Rose2003中創建用例圖的過程:
(1)在“Use Case View“中雙擊Main圖,或者右擊“Use Case View“,彈出在快捷菜單中選擇“New”->“UseCase Diagram”,雙擊圖標,出現圖1.1,為編輯用例圖做好準備。
圖1.1 空用例圖
(2)在用例視圖中,從工具欄中選擇Actor圖標,在右邊的繪圖區中添加一個新元素,并取名客戶表明新增一個參與者,如圖1.2所示。
圖1.2(3)同樣的方法添加參與者“ATM”
(4)在工具欄上選擇用例的圖標,依次添加存款、取款、查詢余額、轉帳、修改密碼、打印收據,如圖1.4所示。
圖1.4(5)添加參與者和用例間的關聯關系,如圖1.5所示。
圖1.5(6)保存圖
完成用例圖后,保存該圖。
(二)建立設計一個學生管理信息系統的需求分析與完整的用例圖
(1)學生管理信息系統簡介
學生管理信息系統主要為學校的學生處設計:方便學校學生處與學院學生口管理員方便管理學生,學生成績由教務系統提供,教務系統提供相關的WEB service供學生管理信息系統調用。
? 通過分析可找出如下幾個參與者:
學生處管理員、學校領導(學校各種報表統計信息)、學院管理員、班主任(提供學生操行、查詢等)、學院領導(學院各種報表統計信息)、學生、后勤管理人員(衛生管理、保衛處異常情況處理)、財務人員、考勤管理員(由副班長提供考勤信息)等
? 通過分析得到如下一些大的用例:
學生基本信息管理、考勤管理、成績導入、學校各種報表信息(要求細化)、學院各種報表信息(要求細化)、個人成才規劃、新學期注冊,操行評定、學生任職信息系統、學生獎懲管理系統(要求細化,包括評優評獎等)、學生變動信息管理(培訓內容、助學貸款情況、學校還款情況、勤工助學情況,黨員管理),后勤衛生管理、保衛處的學生的異常情況處理、其它的具體由學生自己定。
2.建立設計一個學生管理信息系統的需求分析
分析學生管理信息系統,建立系統需求分析,并要求畫出系統功能框圖,如學生管理信息系統的功能模塊圖如下
系統模塊圖如后勤衛生查詢功能子系統模塊圖如下。
要求分析其它的子系統模塊
3.建立一個學生管理信息系統的完整的用例圖
完整的要求,就為每一類用戶分配一個用例模型,如一般學生查詢功能用例
要求分析其它參與者的用例模型
(4)建立用例的文字描述(要求學生寫出兩個)
1.“基本信息查詢”用例 用例編號:04010101(共有4層用例圖結構,每層用2位數字表示,采用8位編號。)用例名:
基本信息查詢
執行者: 學生自己、學生的班主任、輔導員及其它的特權用戶。目的: 查詢學生的基本信息,包括姓名、學號、家庭地址等信息。類
型: 端點、基本的 級
別: 二級 ? 過程描述:
(三)上傳ATM系統的用例圖與學生管理信息系統的完整的用例圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗二
構建類圖
一、實驗目的
1.理解類的基本概念 2.理解類間的關系 3.掌握類圖的繪制方法
二、實驗器材
1.計算機一臺;
2.Rational Rose 工具軟件;
三、實驗內容
(1)分析學生管理系統中的選課子系統中類及關系,然后畫出它們的類圖。(2)分析學生管理系統的其它子系統,并畫出詳細的系統類圖
四、實驗步驟
(一).選課子系統
1、選課子系統分析
? 分析學生管理系統中的選課子系統,通過分析可抽象出如下幾個類:
(1)學生類(2)管理員類(3)課程類
? 學生類和管理員類的屬性較容易分析,這里只列出課程類的屬性和方法:
(1)課程名稱(2)開課教室(3)課程號(4)授課教師(5)選課的學生(6)開課起始時間
(7)允許選課的學生人數(8)設置課程號(9)設置課程名稱(10)查詢課程號
(11)查詢允許選課的學生人數
2.繪圖步驟:
下面介紹在Rose2003中創建類和它們之間關系的過程:
(1)在“Logical View“中雙擊Main圖,或者右擊“Logical View“,彈出在快捷菜單中選擇“New”->“Class Diagram”,雙擊圖標,出現圖2.1,為編輯類圖做好準備。
圖2.1(2)在邏輯視圖中,從工具欄中選擇class圖標,在右邊的繪圖區中添加一個新元素,并取名Student表明新增一個類,如圖2.2所示。
圖2.2(3)選擇新創建的元素,點擊鼠標右鍵,在彈出的菜單中選擇“Open Sepcification”,彈出圖2.3對話框。
(4)在對話框中,可以修改元素的名稱,這里新元素的名稱定為“Student”,如圖2.4所示。
圖2.3 9
圖2.4 5)點擊“Attributes”選項卡,添加屬性,如圖2.5所示。
圖2.5 6)點擊“operations”選項卡,添加方法如圖2.6所示。
圖2.6(((7)同樣的方法添加Course類,如圖2.7所示。
圖2.7(8)創建兩個類之間的關系,通過分析得出:學生類和課程類之間為單向關聯。選擇圖標欄的“關聯”,由學生類指向課程類。如圖2.8所示。
圖2.8(9)創建關聯名。右擊關聯,選擇“open specification“,鍵入關聯名(select),如圖2.9所示。
圖2.9 11
(10)分別在“Role A Detail“和“Role B Detail“選項卡中鍵入名稱和多重性,如圖2.10所示。
圖2.10(11)重復(2)-(10)中的步驟完成選課系統整個類圖的創建。(12)如圖2.11轉換生成代碼,查看所生成的三個的代碼。
圖2.11
(二)分析學生管理系統的其它子系統,并畫出詳細的系統類圖
一般情況一個子系統至少有一個類,要求建立系統的詳細類圖,并建立類間的關聯
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗三
構建活動圖
一、實驗目的
1. 熟悉活動圖的基本功能和使用方法。2. 掌握如何使用建模工具繪制活動圖方法。
二、實驗器材
1.計算機一臺;
2.Rational Rose 工具軟件;
三、實驗內容
(1)分析圖書管理系統中管理員的活動狀態,畫出管理員的活動圖。(2)分析學生管理系統,并畫出詳細的活動圖,并用活動圖細化用例圖
四、實驗步驟
(一)圖書管理系統活動圖
1.分析
? 在圖書管理系統中管理員的活動如下:
(1)處理還書(2)處理借書(3)處理罰款 ? 讀者的活動如下:
(1)登錄(2)找書(3)預約(4)瀏覽
2.繪圖步驟:
下面介紹在Rose2003中創建類和它們之間關系的過程:
(1)在“Logical View“中選擇“Activity Diagram ”菜單,雙擊圖標,出現圖3.1,為編輯活動圖做好準備。
圖 3.1
(2)在Rose2003中,繪制圖書管理員的活動圖,新建“Activity Diagram”,如圖3.2所示:
圖3.2
(3)創建讀者的活動圖如圖3.3所示:
圖3.3
(二)分析學生管理系統,并畫出詳細的活動圖,并用活動圖細化用例圖
(1)學生基本信息保存的活動圖
錄入基本信息、點擊保存、鏈接數據庫、判定學號是否已存在、判定錄入信息是否符合規范(日期信息、身份證號、郵編等信息)-保存。(2)學生基本信息查詢的活動圖
鏈接數據庫、查詢基本信息表、倒出數據內容、填入各字段信息到信息輸出框、根據學院代號查詢學院名稱、寫入學院信息到列表框、定位學院信列表框、根據班級代號查詢班級名稱、寫入班級信息、寫入班級信息到列表框、定位班級信列表框、。(3)至少分析建立其它3個活動圖
(4)根據活動圖重新分析用例圖并細化用例圖,審核類圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗四
構建順序圖
一、實驗目的
學會用順序圖實現用例
二、實驗器材
1.計算機一臺;
2.Rational Rose 工具軟件;
三、實驗內容
(1)分析系統需求,畫出ATM取款的順序圖(2)分析學生管理系統,并畫出詳細的順序圖
四、實驗步驟(一)ATM取款的場景
1、ATM取款的場景分析:
(1)通過讀卡機,用戶插入ATM卡;
(2)ATM系統從卡上讀取銀行ID、帳號、加密密碼、并用主銀行系統驗證銀行ID和帳號;
(3)用戶輸入密碼,ATM系統根據上面讀出的卡上加密密碼,對密碼進行驗證;(4)用戶輸入取款數量;
(5)ATM系統通知主銀行系統,傳遞儲戶帳號和取款數量,并接收返回的確認信息;
(6)ATM系統輸出先進、ATM卡和顯示帳戶余額的收據;(7)ATM系統記錄事務到日志文件。尋找場景中的對象:ATM、客戶和帳戶。
2、繪圖步驟:
下面介紹在Rose2003中創建順序圖的過程:
(1)在“Logical View”中新建“Sequence Diagram“,雙擊圖標,出現圖4.1,為編輯順序圖做好準備。
圖4.1(2)在順序圖編輯窗口中,從工具欄中選擇Object圖標,在右邊的繪圖區中添加一個新元素,并取名Customer表明新增一個對象,如圖4.2所示。
圖4.2
(3)同樣的方法,添加ATM對象和Account對象,如圖4.3所示。
圖4.3(4)根據ATM取款的場景,獲得第一條消息為“客戶向ATM機提交取款需求”,向圖中添加消息,如圖4.4所示。
圖4.4
(5)同樣的方法添加其它消息,如圖4.5所示。
圖4.5
(二)分析學生管理系統,并畫出詳細的順序圖
(1)如學生獎學金評定的順序圖:倒入成績、操行評定、計算綜合評分、獎學金評定(2)用戶登入的順序圖:
(3)新學期注冊順序圖:學生交費--向學院報到--判斷是否交費--(是否申請助學金、是否申請緩交)--注冊(4)建立黨員管理順序圖
(5)建立其它的一個以上順序圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗五
構建協作圖
一、實驗目的
1.學會協作圖的繪制方法
2.掌握順序圖和協作圖的相互轉換。
二、實驗器材
1.計算機一臺;
2.Rational Rose 工具軟件;
三、實驗內容
(1)分析系統需求,畫出ATM取款的協作圖。
(2)分析學生管理系統,并畫出詳細的順序圖
四、實驗步驟
(一).ATM取款的場景
1、ATM取款的場景分析:
(1)通過讀卡機,用戶插入ATM卡;
(2)ATM系統從卡上讀取銀行ID、帳號、加密密碼、并用主銀行系統驗證銀行ID和帳號;(3)用戶輸入密碼,ATM系統根據上面讀出的卡上加密密碼,對密碼進行驗證;(4)用戶輸入取款數量;
(5)ATM系統通知主銀行系統,傳遞儲戶帳號和取款數量,并接收返回的確認信息;(6)ATM系統輸出先進、ATM卡和顯示帳戶余額的收據;(7)ATM系統記錄事務到日志文件。尋找場景中的對象:ATM、客戶和帳戶。
2、繪圖步驟:
下面介紹在Rose2003中創建順序圖的過程:
(1)在“Logical View”中新建“Collaboration Diagram“,雙擊圖標,出現圖5.1,為編輯順序圖做好準備。
圖5.1
(2)創建類節點
創建四個類節點分別為ATM,Branch,Consortium,User。
分別選擇其中的三個類節點ATM,Branch,Consortium 把它們拖動到CollaborationDiagram圖中,如圖5.2所示。
圖
4.2
選擇標記為 User 的類節點。將選定的類拖放到CollaborationDiagram圖編輯器中,使其位于 ATM 生命線元素的上方,如圖5.3所示。
圖5.3
(3)添加連接器鏈接(Object Link)
協作圖中的每個元素均可通過連接器鏈接與其他元素建立連接。您可以標識這些鏈
接,并在其中添加消息流。
從建模組件面板的“基本”類別中,選擇 “ Object Link ” 圖標。單擊標記為 User 的生命線元素,然后單擊 ATM。將在兩個元素之間繪制一條連接器鏈接。使用相同的步驟繪制以下鏈接:
從 ATM 至 Consortium 的鏈接
從 Consortium 至 Branch 的鏈接
從 ATM 至 Branch 的鏈接
注意:在創建從 ATM 至 Branch 的鏈接時,請從 ATM 生命線的右側水平繪制一條鏈接,并在到達 Branch 生命線的正上方時單擊鼠標左鍵。這樣便會在鏈接線上出現一個頂點,然后在頂點到 Branch 生命線之間垂直繪制一條鏈接。
此時,該圖應當圖5.4類似。
圖5.4
在圖編輯器中的任意位置單擊鼠標右鍵,選擇 “Edit” 的“delete from mode”菜單,可刪除模型,如圖5.5所示。
圖5.5
(4)顯示操作流
操作流將在圖中顯示為與鏈接平行的帶標記箭頭。此鏈接用于向目標元素傳輸消息或實現這種傳輸。在圖編輯器中,選擇 User 和 ATM 之間的連接器鏈接。右鍵單擊距 ATM 生命線最近的連接器鏈接部分。如圖4.6所示,從彈出式菜單中選擇“Open Specification”,彈出”Link Specification For Untile”對話框,在對話框中按右鍵,從彈出式菜單中選擇“Insert To: ATM”,在Message Name中輸入public void GetCashOnHand(), 如圖5.6所示。
圖5.6
在 ATM 和Consortium 之間的連接器鏈接上,右鍵單擊靠近Consortium生命線的鏈接部分。
添加消息 “ public void validateAccountInfo()”。Rose顯示 2: public void validateAccountInfo()。
在 ATM 和 Branch 之間的連接器鏈接上,右鍵單擊靠近Branch 生命線的鏈接部分。
添加消息 “public char getConnected”。Rose顯示3: public char getConnected()。
右鍵單擊 Consortium 和 Branch 之間靠近Branch 生命線元素的連接器鏈接。添加消息 “public void verifyCardWithBank(int stringCardSTrip)”。Rose顯示 4: public void verifyCardWithBank(int stringCardSTrip)。
完成的協作圖應當與圖5.7類似。
圖5.7
(5)模型檢查并保存
使用Tools工具的”Check Model”,進行模型檢查,查看是否有錯。
如無誤則在完成協作圖后,您可以保存該圖。在圖編輯器中,從菜單中選擇“保存”。
(二)分析學生管理系統,并畫出詳細的協作圖
(1)如學生獎學金評定的協作圖:倒入成績、操行評定、計算綜合評分、獎學金評定(2)助學貸款申請協作圖:學生申請—班主任批準—學院批準-學校領導批準(3)助學勤工儉學申請協作圖:(4)建立其它的一個以上協作圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗六
構建狀態圖
一、實驗目的
1. 熟悉狀態圖的基本功能和使用方法。2. 掌握如何使用建模工具繪制狀態圖方法。
二、實驗器材
1.計算機一臺;
2.Rational Rose 工具軟件;
三、實驗內容
(1)分析圖書管理系統中的書和借書證的狀態,畫出它們的狀態圖;
(2)分析學生管理系統,并畫出詳細的順序圖
四、實驗步驟
(一)圖書管理系統
1、分析
? 在圖書管理系統中,分析書的狀態如下:
(1)可借(2)被借(3)被預約(4)刪除
? 借書證的狀態如下:
(1)可用(2)不可用(3)刪除
2、繪圖步驟:
下面介紹在Rose2003中創建類和它們之間關系的過程:
(1)在“Logical View“中的“StateChart Diagram”菜單,雙擊圖標,出現圖6.1,為編輯狀態圖做好準備。
圖6.1(2)在工具欄中選擇“Start State”圖標添加到編輯窗口中,如圖6.2所示。
圖6.2(3)在工具欄中選擇“State”圖標,添加一個元素,命名為“New book”,如圖6.3所示。
圖6.3(4)同樣的方法添加其它狀態,如圖6.4所示。
圖6.4 5)書的各個狀態之間添加轉移及相應的事件,如圖6.5所示。(圖6.5(6)同樣的方法得借書證的狀態圖,如圖6.6所示。
圖6.6
(二)分析學生管理系統,并畫出詳細的狀態圖
(1)建立學生交款狀態圖:已交、未交、緩交、部分申請助學貸款(2)建立學生懲罰(記過以上)狀態圖:
(3)建立學生黨員申請狀態圖:(4)建立其它的一個以上狀態圖
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗七
構建組件圖和配置圖
一、實驗目的
1.掌握UML中組件圖和配置圖的建立方法; 2.掌握使用Rose繪制組件圖和配置圖;
二、實驗器材
1.計算機一臺;
2.Rational Rose 工具軟件;
三、實驗內容
(1)分析學校網上選課系統的組件圖,畫出系統組件圖。(2)分析學校網上選課系統的配置圖,畫出系統配置圖。(3)分析學生管理系統,并畫出詳細的組件圖與配置圖
四、實驗步驟
(一)網上選課系統
1.分析
設計學校網上選課系統的組件圖和配置圖,需求如下: 某學校的網上選課系統主要包括如下功能:
管理員通過系統管理界面進入,建立本學期要開的課程、將課程信息保存在數據庫中并可以對課程進行改動和刪除。
學生通過客戶機瀏覽器根據學號和密碼進入選課界面,在這里學生可以進行三種操作:查詢已選課程、選課以及付費。
對于以上操作,可通過業務層,并將這些操作結果存入數據庫中。
2.繪圖步驟:
(1)繪制組件圖的步驟如下:
? 確定組件;(系統管理系統, 課程管理系統,選課系統,查詢系統,人員信息管理,注冊系統,業務操作,備份系統,付費系統)? 給組件加上必要的構造型; ? 確定組件的聯系; ? 繪制組件圖。
下面介紹在Rose2003中創建組件圖的過程:
(a)在“Component View“中的 “New”的 “Component Diagram”中,出現圖7.1,為編輯組件圖做好準備,31
圖7.1(b)創建組件圖(根據要求創建)。
(2)繪制配置圖的步驟如下: ? 確定節點;(數據庫服務器,應用服務器,打印機,客戶端(n個,連接為局域網))
? 加上構造型; ? 確定節點的聯系; ? 繪制配置圖。
下面介紹在Rose2003中創建配置圖的過程:
(a)在“Deployment View“中,出現圖7.2,為編輯配置圖做好準備,圖7.2
圖7.3 系統配置圖
(二)分析學生管理系統,并畫出詳細的組件圖與配置圖
(1)系統組件圖 ? 分析系統接口
如建立查詢一個學生基本信息的接口,返回一個學生基本信息的類(類中有姓名、學號等屬性)
? 搜索系統用戶界面
搜索系統用戶界面,作為系統一種特殊的接口,用戶與系統的接口,建立單獨的包Web InterFace保存用戶界面,如學生基本信息操作的用戶界面定義如下(從View繼承過來的一個類,這里只考慮界面,類只考慮程序,可有部分重復):
為用戶界面考慮接口,并關聯不同的類
(2)系統配置圖
假設有以下的子系統:學生管理系統用到財務子系統、成績管理子系統,并各自有數據庫。
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
實驗八
Rose逆向工程
一、實驗目的
1.掌握Rose中逆向工程的建立方法; 2.掌握根據逆向工程畫出類圖;
二、實驗器材
1.計算機一臺;
2.Rational Rose 工具軟件;
三、實驗內容
(1)分析Java程序,實現ROSE逆向工程。(2)根據逆向工程所得類,畫出對應類圖。
四、實驗步驟
1.分析
Rose功能十分強大,從項目需求分析、開發、測試,整個項目過程都可使用rose,特別是在做需求分析與項目系統架構時建模的能力巨強。但是每個人不是在項目一開始就能參與到初期當中來的,有時候整個項目一期完工了,進行二期開發時,這個時候參與進項目,為了能夠快速了解整個項目的框架,使用Rose的逆向工程的功能極為有用。
2.繪圖步驟:
(1)分析J2EE源代碼,了解其結構
(2)新建一個ROSE工程,選擇J2EE模板,.如圖8.1
圖8.1 3.在出現的界面中,CLASSPATH中加入源代碼的目錄,加入支持的包,點擊'ADD RECURSIVE'點 ‘SELECT ALL‘
點擊REVERSE,完成后沒任何提示,點'DONE'結束。選擇ListS.java作為源代碼,如下圖8.2所示。
圖8.2 點擊Reverse,逆向工程完成。逆向工程以后不會自動生成類圖,但在logical
view
和component view 里面按照你的java包結構會自動生成相應的包和類,要按照自己的要求建立類圖。下面我們將所選包下的所有類顯示在新建類圖中:
ROSE里新建CLASS DIAGRAM,然后把類Env,EnvList和ListS包一個個拖到右側圖中,(或點菜單上的'QUERY'下的'ADD CLASS',確定)。如圖8.3所示:
圖8.3
五、實驗報告要求
1. 整理實驗結果。
2. 小結實驗心得體會。
第五篇:C語言程序設計課程設計指導書
課程設計指導書
課程名稱: C語言程序設計
班次: 自動化2016-01,02,03班
設計任務:
整個課程設計一共提供了10個題目,編號為1~10。按學號尾數進行選題設計。
課程設計目的
1、進一步掌握利用C語言進行程序設計的能力;
2、進一步理解和運用結構化程序設計的思想和方法;
3、初步掌握開發一個小型實用系統的基本方法;
4、學會調試一個較長程序的基本方法;
5、學會利用流程圖表示算法;
5、學習撰寫課程設計報告;
第一部分:課題描述(一共10個課題)
課題1:圖書管理系統
在磁盤上創建3個txt文件,命名book.txt,borrow.txt和reader.txt,分別存儲圖書、借閱和讀者的信息,每本圖書的基本信息有編號、書名、作者、出版日期、金額、類別、在館數量等。借閱基本信息有:編號、書名、金額、借書證號、借書日期、到期日期、罰款金額等。讀者信息包括借書證號、姓名、班級、學號、類別等。創建圖書管理系統,該系統運行時在控制臺中顯示菜單界面進行鍵盤輸入操作,模擬借閱圖書的管理過程。
系統功能包括以下方面: A、圖書信息管理
圖書按類別進行管理,常見類別有書籍、期刊、報刊等,在該模塊中又包含添加、刪除、修改、查詢等操作,操作結果打印在控制臺中。
字段包含:書名,編號,類別,存放地點,入庫時間
B、借閱信息管理
圖書借閱模擬操作,包括以下功能:借出,歸還和續借等操作,對超期圖書進行罰款金額顯示。另外可以設置罰金數額和最大借閱數量和時間等參數。
字段包含:書名,編號,借閱者,借出時間,歸還時間,借閱狀態,超期時間,最大借閱數
C、讀者信息管理
讀者分為教師和學生兩大類等級:教師和學生的最大圖書借閱數量和時間有所不同,并可對添加、掛失和查詢讀者信息。
字段包含:讀者姓名,讀者類別,可借閱時間,可借閱數量,系統操作過程中能夠正確讀取和更新文件,并進行正常的圖書、借閱和讀者管理操作。
課題2:個人通訊錄管理系統
在磁盤上建立1個communication.txt文件,作為讀取和存儲的通訊錄,該系統運行時在控制臺中顯示菜單界面進行鍵盤輸入操作,模擬通訊錄的操作過程。
系統功能包括以下方面:
A、通訊錄的每位聯系人信息有姓名、單位、固定電話、移動手機、分類(如同事、朋友、同學、家人等)、EMAIL、QQ等。
B、輸入、查找、刪除、修改聯系人信息功能。
C、顯示功能:能夠顯示所有聯系人信息(大于10條的分屏顯示),或按分類進行顯示。D、分類操作:可以按分類信息進行同一類的聯系人操作,比如顯示、刪除和查找操作。E、(選作)可以加載聯系人頭像并進行顯示,可用字符拼圖或讀取已有的黑白圖片文件。系統操作過程中能夠正確讀取和更新文件,并進行正常的通訊錄聯系人操作。
課題3:職工工資管理系統
在計算機中建立相應的數據結構,利用程序實現工資的輸入、查詢、增、刪、改、統計、輸出等操作。
1、設計一個能夠記錄公司員工工資的數據結構(比如包括:員工號,姓名,基本工資,補貼金額,獎勵金額,扣除金額、實發工資等)、文件(文件作為工資數據的保存介質)。注:,其中實發工資=基本工資+補貼金額+獎勵金額-扣除金額
2、應用文件保存工資管理數據。
3、新增:能將所有輸入的員工工資數據保存到文件中,并可選擇繼續輸入或退出。
4、查找:輸入員工的員工號,并在文件中查找
? 若找到,則顯示該員工的工資詳情 ? 否則提示未找到。? 無論查找成功否,應還可選擇繼續查找或退出。
5、刪除:輸入員工的員工號,并在文件中查找
? 若找到,提示是否確定刪除
? 若選擇是,則刪除文件中該員工信息 ? 若選擇否,則取消,? 否則提示無此員工信息
? 無論查找成功否,應還可選擇繼續查找或退出。
6、修改:輸入員工的員工號,并在文件中查找
? 若找到,顯示該員工的所有信息,并可進行輸入。完成后將現輸入的內容覆蓋原內容保存到文件中。
? 否則提示無此員工信息
? 無論查找成功否,應還可選擇繼續查找或退出。
7、統計:分類匯總并輸出所有員工的基本工資、補貼金額、獎勵金額、扣除金額、實發工資的總金額和平均金額。如:
基本工資、補貼金額、獎勵金額、扣除金額、實發工資
總和 12000 1300 1400 1500 13200 平均 1200 130 140 150 1320 人數: 10
8、退出:退出程序
課題4:自動售貨機系統
某公司請你為其生產的自動售貨機編寫軟件。這種無人值守自動售貨機販賣價值為A、B、C的三種商品,價格分別為2元,3元和6元。顧客投入10元的紙幣,然后選擇購買3種商品之一,自動售貨機吐出商品,并且找給用戶零錢。如果商品已經賣完,或者無法找零,則給出用戶一個提示,商品已售完,并且退還紙幣。
自然,你的售貨機用戶希望盡可能地給用戶找零,以免流失顧客。為了調查用戶的喜好,希望得到三種商品的每日消費數據,由此來調整貨柜中三種貨物的存貯量。你的程序將實現以下功能:
庫存查詢:檢索當前三種商品的儲存量 商品上架:為三種商品增加或者減少儲量
銷售查詢:分別統計今天每種商品的銷售量和銷售額 會計查詢:打印當天的往來帳目以及剩余零鈔數目
結算功能:取出今天所有的10元紙幣,并且分別設置零鈔的數目
銷售界面:顧客投入紙幣,選擇商品,獲得商品和零錢;或者直接顯示錯誤并退還紙幣 【題目要求】
(1)為各項操作功能設計一個菜單。應用程序運行后,先顯示這個菜單,然后操作員通過菜單項選擇希望進行的操作項目;
(2)你的售貨機用戶不希望每一位顧客都有權限執行以上功能,因此一旦進入銷售界面,就不應當退回到系統界面,但是應允許顧客反復購買,前一個顧客購買完畢后應停留在銷售界面里允許下一個顧客操作。直到某位特殊的顧客(超級顧客)輸入特殊的商品代號(密碼)方可回到主控界面。
(3)計算機安排的找零算法應該合理,不要出現某一種零錢找光的情況。同時顧客也不喜歡 明明有5元零鈔,卻被找給5個一元的零鈔。盡量滿足這兩個要求。
(3)、要求以上功能分別用函數實現。并要求用C語言的文件操作語句將以上所有結果保存在文件goods.txt。
【輸入/輸出要求】
(1)應用程序運行后,先顯示一個菜單,然后用戶根據需要選擇相應的操作項目。進入每個操作后,根據程序的提示輸入相應的信息;
(2)要求用戶輸入數據時,要給出清晰、明確的提示信息,包括輸入的數據內容、格式及結束方式等。
根據題目要求,運用所學知識,完成設計和實現工作,并按照書寫規范,撰寫課程設計報告。
課題5:銷售管理系統
某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5)。每個銷售員都將當天出售的每種產品各寫一張便條交上來。每張便條包含內容:
1)銷售員的代號
2)產品的代號
3)這種產品的當天的銷售額
每位銷售員每天可能上繳0-5張便條。假設,收集到了上個月的所有便條,編寫一個處理系統,讀取上個月的銷售情況(在磁盤上創建一個txt文件記錄上個月的銷售信息),進行如下處理。
1)計算上個月每個人每種產品的銷售額。
2)按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)
3)統計每種產品的總銷售額,對這些產品按從高到底的順序,輸出排序結果(需輸出產品的代號和銷售額)
4)輸出統計報表
銷售統計報表
產品代號
銷售之和 銷售員號 1 2 3 4 5 每種產品之和 總和
5)可以按產品代號查詢,也可以按銷售員號查詢。
課題6: 車票管理系統一車站每天有n個發車班次,每個班次都有一班次號(1、2、3?n),固定的發車時間,固定的路線(起始站、終點站),大致的行車時間,固定的額定載客量。如
班次 發車時間 起點站 終點站 行車時間 額定載量 已定票人數 1 8:00 郫縣 廣漢 2 45 30 2 6:30 郫縣 成都 0.5 40 40 3 7:00 郫縣 成都 0.5 40 20 4 10:00 郫縣 成都 0.5 40 2 ?
(一)功能要求:用c語言設計一系統,能提供下列服務:(1)錄入班次信息(信息用文件保存),可不定時地增加班次數據(2)瀏覽班次信息,可顯示出所有班次當前狀總(如果當前系統時間超過了某班次的發車時間,則顯示“此班已發出”的提示信息)。
(3)查詢路線:可按班次號查詢 ,可按終點站查詢(4)售票和退票功能
A:當查詢出已定票人數小于額定載量且當前系統時間小于發車時間時才能售票,自動更新已售票人數
B:退票時,輸入退票的班次,當本班車未發出時才能退票,自動更新已售票人數
課題
7、單項選擇題標準化考試系統
在磁盤上創建一個test.txt文件,使用記事本打開后先寫入40道單選題和相應的選項和正確答案。再編寫一個單項選擇題標準化考試系統,該系統功能要求: 字段:題干,備選答案,標準答案
A、用文件保存試題庫。(每個試題包括題干、4個備選答案、標準答案)。B、試題錄入、修改和刪除。
C、試題抽取:每次從試題庫中可以隨機抽出N道題(N由鍵盤輸入)。D、考生答題:用戶抽取N道試題進行答題,鍵盤輸入每道題的答案。
E、自動判卷:系統可根據用戶答案與標準答案的對比實現判卷并給出成績。
系統操作過程中能夠正確讀取和更新試題文件,并進行正常的試題管理、抽取、答題和判卷操作,該過程在控制臺中顯示,人機交互方便。
課題8:醫院門診候診的隊列管理程序
要求采用先來先就診的排隊方式(就診順序與掛號單編號無關),假設掛號時編碼是連續的,但由于同一個門診科目有3個診室,其中35(含35)歲以上的在第一診室,35歲以下男患者進第二診室,其它的進第三診室,程序啟動后顯示下列菜單:
字段:掛號單號,患者姓名,年齡,性別,分診室號,【實現提示】 1--掛號 2--叫號 3--分診室
4--顯示各診室隊列信息
5--統計當天就診的患者情況(要求按性別進行統計和按任意年齡區段進行統計)6--結束程序
選1時,提示用戶在一行內輸入姓名及掛號單編號;
選2時,顯示排在隊列中第一位患者姓名、掛號單編號,并將其從掛號序列中刪除 選3時,進行診室分配
選4時,按隊列順序顯示個診室排隊人的姓名、掛號單編號及所在診室 選5時,進行兩種統計方法的選擇,并進行必要的統計計算 選6時,退出程序的運行
要求1~5中每一個步驟完成后都能重新顯示此選擇菜單
課題9:成績管理系統
現有學生成績信息,內容如下
姓名 學號 語文 數學 英語 張明明 01 67 78 82 李成友 02 78 91 88 張輝燦 03 68 82 56 王露 04 56 45 77 陳東明 05 67 38 47 ?.......?
請用C語言編寫一系統,實現學生信息管理,軟件的功能要求如下:(1)信息維護:
要求:學生信息數據要以文件的形式保存,能實現學生信息數據的維護。此模塊包括子模塊有:增加學生信息、刪除學生信息、修改學生信息(2)信息查詢:
要求:查詢時可實現按姓名查詢、按學號查詢(3)成績統計:
要求:A輸入任意的一個課程名(如數學)和一個分數段(如60--70),統計出在此分數段的學生情況。
(4)排序:能對用戶指定的任意課程名,按成績升序或降序排列學生數據并顯示排序結果
課題10:停車場管理系統設計
1.有一個兩層的停車場, 每層有6個車位, 當第一層車停滿后才允許使用第二層.(停車場可用一個二維數組實現, 每個數組元素存放一個車牌號)每輛車的信息包括車牌號, 層號, 車位號, 停車時間共4項.其中停車時間按分鐘計算
2.假設停車場初始狀態為第一層已經停有4輛車, 其車位號依次為1—4 , 停車時間依次為20, 15, 10 , 5.即先將這四輛車的信息存入文件”car.dat”中(數組的對應元素也要進行賦值)3.停車操作: 當一輛車進入停車場時, 先輸入其車牌號, 再為它分配一個層號和一個車位號(分配前先查詢車位的使用情況, 如果第一層有空則必須停在第一層), 停車時間設為5 , 最后將新停入的汽車的信息添加文件”car.dat”中, 并將在此之前的所有車的停車時間加5.4.收費管理(取車): 當有車離開時, 輸入其車牌號, 先按其停車時間計算費用, 每5分鐘0.2元.(停車費用可設置一個變量進行保存), 同時從文件”car.dat”中刪除該車的信息, 并將該車對應的車位設置為可使用狀態(即二維數組對應元素清零).按用戶的選擇來判斷是否要輸出停車收費的總計.5.輸出停車場中全部車輛的信息.6.退出系統.字段:車牌號,樓層號,車位號,入庫時間,出庫時間,停車時間,停車費用
第二部分:基礎訓練
若感覺直接完成所選課題很困難,可以嘗試先完成基礎訓練。完成基礎訓練,有一定的編程基礎后,在完成所選課題。
第一步: 定義一個結構體類型,用來表示學生的各種屬性。定義一個學生結構體變量,從鍵盤輸入各個分量的值,然后從屏幕輸出該結構體變量的各個分量。學生結構體類型定義如下:
typedef struct _CStudent { char szName[20];/* 學生姓名 */ char nNumber[10] /* 學號 */ int nAge;/* 年齡 */ char cSex;/* 性別,約定 ?m? 代表女,?f?代表男 */ char szAddress[20];/* 家庭地址 */ double dDataStruct;/* 數據結構成績 */ double dMath;/* 數學成績 */ double dEnglish;/* 英語成績 */ }CStudent;
第二步:
定義一個結構體類型,用來表示學生的各種屬性。定義一個含3個元素的學生結構體變量數組,從鍵盤輸入3個同學的信息,然后從屏幕輸出該結構體變量數組各成員的值。
建議:定義兩個函數,一個用于從鍵盤輸入一個學生結構體變量的各個分量的值,另一個把一個學生結構體變量的值輸出到屏幕。函數原型可以如下:
void input(CStudent* p)/* 從鍵盤輸入 */ void output(CStudent* p)/* 向屏幕輸出 */
第三步:
從鍵盤輸入一個學生的信息,然后以文本方式寫入文件。定義另一個學生結構體變量,用于從文件讀出數據,然后把數據顯示到屏幕。
第四步:
定義一個含3個元素的學生結構體數組,從鍵盤輸入3個同學的信息,以文本方式把這些數據寫入文件。
第五步:
將課題4寫入文件的數據全部讀出,輸出到屏幕。
附錄一:
本設計中需要清屏。說明如下:
格式:
system(“cls”)包含頭文件: stdlib.h
附錄二:控制臺程序選擇菜單的完成
#include
int main(){ int choice1 = 1, choice2;
do {
printf(“歡迎使用學生成績管理系統n”);
printf(“請選擇程序功能n”);
printf(“
1、數據錄入n”);
printf(“
2、數據查詢n”);
printf(“
3、輸出所有同學信息n”);
printf(“
4、退出程序n”);
scanf(“%d”, &choice1);
switch(choice1)
{
case 1:
printf(“數據錄入n”);
/*編寫數據錄入程序*/
printf(“返回上級菜單請按n退出程序請按n”);
scanf(“%d”, &choice1);
break;
case 2:
printf(“
1、按學號查詢n”);
printf(“
2、按姓名查詢n”);
scanf(“%d”, &choice2);
switch(choice2)
{
case 1:
printf(“按學號查詢n”);
/*編寫按學號查詢程序*/
break;
case 2:
printf(“按姓名查詢n”);
/*編寫按姓名查詢程序*/
break;
}
printf(“返回上級菜單請按n退出程序請按n”);
scanf(“%d”, &choice1);
break;
case 3:
printf(“輸出所有同學信息n”);
/*編寫輸出所有同學信息程序*/
printf(“返回上級菜單請按n退出程序請按n”);
scanf(“%d”, &choice1);
break;
case 4:
break;
}
system(“cls”);}while(choice1!= 4);
printf(“程序結束n”);return 0;}
附錄三:關于菜單的處理技術舉例 #include
int menu_select();/*主菜單函數*/ /******主函數開始*******/ main(){ int i;Salary sal[M];/*定義結構體數組*/ int length;/*保存記錄長度*/ clrscr();/*清屏*/ for(;;)/*無限循環*/ { switch(menu_select())/*調用主菜單函數,返回值整數作開關語句的條件*/ { case 1:length=enter(sal);break;/*輸入記錄*/ case 2:list(sal);break;/*顯示全部記錄*/ case 3:search(sal,name);break;/*按姓名查找顯示記錄*/ case 4:length=delete(sal);break;/*刪除記錄*/ case 5:length=add(sal);break;/*插入記錄*/ case 6:save(sal);break;/*保存文件*/ case 7:length=load(sal);break;/*讀文件*/ case 8:display(sal);break;/*按序號查找顯示記錄*/ case 9:sort(sal);break;/*排序成新文件*/ case 10:copy(sal);break;/*數據備份*/ case 0:exit(0);/*如返回值為0則程序結束*/ } } } /*菜單函數,函數返回值為整數,代表所選的菜單項*/ menu_select(){ char s[80];int c;gotoxy(1,25);/*將光標定為在第25行,第1列*/ printf(“press any key enter menu......n”);/*提示按任意鍵進入菜單選擇*/ getch();/*讀入任意字符*/ clrscr();/*清屏*/ gotoxy(1,1);printf(“********************MENU*********************nn”);printf(“ 1.Enter a recordn”);printf(“ 2.List the filen”);printf(“ 3.Search record on namen”);printf(“ 4.Delete a recordn”);printf(“ 5.Add record n”);printf(“ 6.Save the filen”);printf(“ 7.Load the filen”);printf(“ 8.Display record on ordern”);printf(“ 9.Sort to a new filen”);printf(“ 10.Copy to a new file n”);printf(“ 0.Quitn”);printf(“***********************************************n”);do{ printf(“n Enter you choice(0~10):”);/*提示輸入選項*/ scanf(“%d”,&c);/*輸入選擇項*/ }while((c>10)||(c<0));/*選擇項不在0~11之間重輸*/ return c;/*返回選擇項,主程序根據該數調用相應的函數*/ }
附錄四:關于頭文件的使用
/******頭文件(.h)***********/ #include “stdio.h” /*I/O函數*/ #include “stdlib.h” /*標準庫函數*/ #include “string.h”/*字符串函數*/ #include “ctype.h” /*字符操作函數*/ #define M 50 /*定義常數表示記錄數*/ typedef struct /*定義數據結構*/ { char name[20];/*姓名*/ char no[10];/*員工編號*/ char units[30];/*部門*/ char post[10];/*職稱*/ ?? }Salary;/******以下是函數原型*******/ int enter(SALARY t[]);/*輸入記錄*/ void list(SALARY t[]);/*顯示全部記錄*/ void search(SALARY t[],char name[]);/*按姓名查找顯示記錄*/ int delete(SALARY t[]);/*刪除記錄*/ int add(SALARY t[],int n);/*插入記錄*/ void save(SALARY t[]);/*記錄保存為文件*/ int load(SALARY t[]);/*從文件中讀記錄*/ void display(SALARY t[]);/*按序號查找顯示記錄*/ void sort(SALARY t[]);/*排序成新文件*/ void copy(SALARY t[]);/*數據備份*/ int menu_select();/*主菜單函數*/
附錄五:關于文件的使用
要將信息永久保存,可采用磁盤文件的形式來存儲數據。C語言提供了豐富的文件操作函數。從文件編碼的方式來看,文件可分為ASCII碼文件和二進制碼文件兩種。ASCII文件也稱為文本文件,這種文件在磁盤中存放時每個字符對應一個字節,用于存放對應的ASCII碼。例如,數5678的存儲形式為:
ASC碼:00110101 00110110 00110111 00111000
↓
↓
↓
↓
十進制碼: 5 共占用4個字節。ASCII碼文件可在屏幕上按字符顯示,例如源程序文件就是ASCII文件,用DOS命令TYPE可顯示文件的內容。由于是按字符顯示,因此能讀懂文件內容。
二進制文件是按二進制的編碼方式來存放文件的。例如,數5678的存儲形式為: 00010110 00101110只占二個字節。二進制文件雖然也可在屏幕上顯示,但其內容無法讀懂。C系統在處理這些文件時,并不區分類型,都看成是字符流,按字節進行處理。輸入輸出字符流的開始和結束只由程序控制而不受物理符號(如回車符)的控制。因此也把這種文件稱作“流式文件”。在C語言中,文件操作都是由庫函數來完成的。
文件打開函數fopen fopen函數用來打開一個文件,其調用的一般形式為: 文件指針名=fopen(文件名,使用文件方式)其中,“文件指針名”必須是被說明為FILE 類型的指針變量,“文件名”是被打開文件的文件名?!笆褂梦募绞健笔侵肝募念愋秃筒僮饕?。“文件名”是字符串常量或字符串數組。例如: FILE *fp;fp=(“file a”,“r”);其意義是在當前目錄下打開文件file a,只允許進行“讀”操作,并使fp指向該文件。
又如:FILE *fphzk;fphzk=(“c:hzk16',”rb“)其意義是打開C驅動器磁盤的根目錄下的文件hzk16,這是一個二進制文件,只允許按二進制方式進行讀操作。兩個反斜線“ ”中的第一個表示轉義字符,第二個表示根目錄。使用文件的方式共有12種,下面給出了它們的符號和意義。
文件使用方式
意 義
“rt”
只讀打開一個文本文件,只允許讀數據 “wt”
只寫打開或建立一個文本文件,只允許寫數據 “at”
追加打開一個文本文件,并在文件末尾寫數據 “rb”
只讀打開一個二進制文件,只允許讀數據 “wb”
只寫打開或建立一個二進制文件,只允許寫數據 “ab”
追加打開一個二進制文件,并在文件末尾寫數據 “rt+”
讀寫打開一個文本文件,允許讀和寫 “wt+”
讀寫打開或建立一個文本文件,允許讀寫
“at+”
讀寫打開一個文本文件,允許讀,或在文件末追加數據 “rb+”
讀寫打開一個二進制文件,允許讀和寫 “wb+”
讀寫打開或建立一個二進制文件,允許讀和寫
“ab+”
讀寫打開一個二進制文件,允許讀,或在文件末追加數據
fclose函數
調用的一般形式是: fclose(文件指針); 例如:fclose(fp);正常完成關閉文件操作時,fclose函數返回值為0。如返回非零值則表示有錯誤發生。文件的讀寫對文件的讀和寫是最常用的文件操作。
讀字符串函數fgets函數
fgets函數的功能是從指定的文件中讀一個字符串到字符數組中,函數調用的形式為: fgets(字符數組名,n,文件指針); 其中的n是一個正整數。表示從文件中讀出的字符串不超過 n-1個字符。在讀入的最后一個字符后加上串結束標志' 主站蜘蛛池模板: 亚洲人ⅴsaⅴ国产精品| 狠狠摸狠狠澡| 无码国产精成人午夜视频不卡| 国产熟妇搡bbbb搡bb七区| 宝贝把腿张开我要添你下边动态图| 中文字幕va一区二区三区| 日韩精品人妻系列无码av东京| 国产中文欧美日韩在线| 成年丰满熟妇午夜免费视频| 熟女人妻aⅴ一区二区三区电影| 久久久久久久久久久国产| 亚洲色欲色欲大片www无码| 亚洲国产精品嫩草影院永久| 中字幕一区二区三区乱码| 性欧美俄罗斯乱妇| 国产美女裸身网站免费观看视频| 一本色综合网久久| 欧美无遮挡很黄裸交视频| 亚洲欧美日韩综合一区| 97久久精品无码一区二区天美| 日本熟妇厨房xxxxx乱| 狂野av人人澡人人添| 国产午夜片无码区在线观看爱情网| 欧美成人一区二区三区| 久久精品国产视频在热| 久久午夜羞羞影院免费观看| 男人的天堂2018无码| 一边吃奶一边添p好爽高清视频| 成在线人永久免费视频播放| 精品人妻无码一区二区三区蜜桃一| 风韵少妇性饥渴推油按摩视频| 久久久精品免费| 国产精品久久久久久久久久妞妞| 性少妇中国内射xxxx狠干| 亚洲国产中文在线二区三区免| 国产色爱av资源综合区| 久久东京热人妻无码人av| 丝袜高跟麻麻浓精受孕人妻| 国产自偷在线拍精品热乐播av| 亚洲中文字幕伊人久久无码| 亚洲欧美另类激情综合区|