版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 題目全稱:用高級(jí)語言Java設(shè)計(jì)輔助教學(xué)軟件(模擬銀行家算法) </p><p><b> 目錄</b></p><p><b> 第1章緒論3</b></p><p> 1.1課題背景3</p><p> 1.2課題目的3</p&g
2、t;<p> 1.3課題意義3</p><p> 1.4銀行家算法3</p><p><b> 1.5死鎖4</b></p><p> 1.6安全性序列4</p><p> 第2章需求分析5</p><p> 2.1環(huán)境需求5</p>
3、<p> 2.2功能需求5</p><p> 2.3性能需求5</p><p> 2.4界面需求6</p><p> 2.5本章小結(jié)6</p><p> 第3章概要設(shè)計(jì)7</p><p> 3.1總體設(shè)計(jì)7</p><p> 3.1.1界面設(shè)計(jì)
4、7</p><p> 3.1.2功能模塊設(shè)計(jì)7</p><p> 3.1.3初始化進(jìn)程數(shù)與資源數(shù)7</p><p> 3.1.4初始化資源7</p><p> 3.1.5資源狀況的顯示7</p><p> 3.1.6申請(qǐng)資源Request8</p><p> 3
5、.2本章小結(jié)8</p><p> 第4章詳細(xì)設(shè)計(jì)9</p><p> 4.1開發(fā)環(huán)境介紹9</p><p> 4.2主要功能模塊簡介9</p><p> 4.2.1概述9</p><p> 4.2.2程序工作流程10</p><p> 4.2.3界面設(shè)計(jì)簡介
6、10</p><p> 4.2.4面向?qū)ο蟮乃枷?0</p><p> 4.2.5MVS模式11</p><p> 4.3主要模塊詳細(xì)設(shè)計(jì)11</p><p> 4.3.1模型類和邊緣類11</p><p> 4.3.2模型類11</p><p> 4.3.3
7、邊緣類12</p><p> 4.3.4銀行家算法核心類safety.java12</p><p> 4.3.5算法流程12</p><p> 4.3.6safety.java源代碼14</p><p> 4.3.7簡要說明17</p><p><b> 4.4界面17<
8、/b></p><p> 4.5本章小結(jié)18</p><p> 第5章測(cè)試及成果展示19</p><p> 5.1測(cè)試環(huán)境19</p><p> 5.1.1硬件環(huán)境19</p><p> 5.1.2軟件運(yùn)行軟件環(huán)境19</p><p> 5.1.3測(cè)試方法
9、和工具19</p><p> 5.2測(cè)試用例和結(jié)果19</p><p> 5.2.1測(cè)試范圍19</p><p> 5.2.2界面測(cè)試19</p><p> 5.2.3軟件工作原理模擬過程測(cè)試20</p><p> 5.3成果展示23</p><p> 5.4
10、本章小結(jié)23</p><p><b> 參考文獻(xiàn)24</b></p><p><b> 緒論</b></p><p><b> 課題背景</b></p><p> 在多道程序系統(tǒng)中,雖可以借助多個(gè)進(jìn)程的并發(fā)執(zhí)行來改善系統(tǒng)的資源利用率,提高系統(tǒng)吞吐量,但可能發(fā)生一種危
11、險(xiǎn)——死鎖,即多個(gè)進(jìn)程在運(yùn)行過程中因爭奪資源而造成的一種僵局,若無外力作用,將無法再向前推進(jìn)。如此,尋求一種避免死鎖的方法便顯得有為重要。死鎖的產(chǎn)生一般的原因有兩點(diǎn):競爭資源和進(jìn)程間推進(jìn)順序非法。因此,我們只需在當(dāng)前的有限資源下,找到一組合法的執(zhí)行順序,便能很好的避免死鎖,我們稱它為安全序列。而銀行家算法起源于銀行系統(tǒng)的發(fā)放貸款,和計(jì)算機(jī)操作系統(tǒng)的資源分配完全符合,因此可以借鑒該算法的思想,設(shè)計(jì)出一種有效的算法程序,解決該問題。<
12、/p><p><b> 課題目的</b></p><p> 進(jìn)一步理解利用銀行家算法避免死鎖的問題。</p><p> 在了解和掌握銀行家算法的基礎(chǔ)上,編制銀行家算法通用程序,將調(diào)試結(jié)果顯示在計(jì)算機(jī)屏幕上,再檢測(cè)和筆算的一致性。</p><p> 理解和掌握安全序列、安全性算法。</p><p&g
13、t;<b> 課題意義</b></p><p> 運(yùn)用軟件工程的方法指導(dǎo)設(shè)計(jì)和實(shí)現(xiàn),即是對(duì)這學(xué)期剛剛學(xué)過的軟件工程課的復(fù)習(xí),又是一次實(shí)戰(zhàn)演練,從而提高自己的分析問題,解決問題和動(dòng)手能力;</p><p> 通過整個(gè)算法的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)一步加深了對(duì)算法的理解和多道程序下的計(jì)算機(jī)系統(tǒng)資源分配現(xiàn)狀,為以后進(jìn)一步的學(xué)習(xí)打下了良好的基礎(chǔ)。</p><p&
14、gt;<b> 銀行家算法</b></p><p> 我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進(jìn)程向操作系統(tǒng)請(qǐng)求分配資源相當(dāng)于用戶向銀行家貸款。為保證資金的安全,銀行家規(guī)定:</p><p> 當(dāng)一個(gè)顧客對(duì)資金的最大需求量不超過銀行家現(xiàn)有的資金時(shí)就可接納該顧客;</p><p> 顧客可以分歧貸款,但貸
15、款的總數(shù)不能超過最大需求量;</p><p> 當(dāng)銀行家現(xiàn)有的資金不能滿足顧客尚需的貸款數(shù)額時(shí),對(duì)顧客的貸款可推遲支付,但總能使顧客在有限的時(shí)間里得到貸款;</p><p> 當(dāng)顧客得到所需的全部資金后,一定能在有限的時(shí)間里歸還所有的資金。操作系統(tǒng)按照銀行家制定的規(guī)則為進(jìn)程分配資源,當(dāng)進(jìn)程首次申請(qǐng)資源時(shí),要測(cè)試該進(jìn)程對(duì)資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的
16、申請(qǐng)量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請(qǐng)資源時(shí),先測(cè)試該進(jìn)程已占用的資源數(shù)與本次申請(qǐng)的資源數(shù)之和是否超過了該進(jìn)程對(duì)資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測(cè)試系統(tǒng)現(xiàn)存的資源能否滿足該進(jìn)程尚需的最大資源量,若能滿足則按當(dāng)前的申請(qǐng)量分配資源,否則也要推遲分配。</p><p><b> 死鎖</b></p><p> 死鎖是進(jìn)程死鎖的簡稱,
17、是由Dijkstra于1965年研究銀行家算法時(shí)首先提出來的。是指多個(gè)進(jìn)程循環(huán)等待它方占有的資源而無限期地僵持下去的局面。很顯然,如果沒有外力的作用,那麼死鎖涉及到的各個(gè)進(jìn)程都將永遠(yuǎn)處于封鎖狀態(tài)。 它是計(jì)算機(jī)操作系統(tǒng)乃至并發(fā)程序設(shè)計(jì)中最難處理的問題之一。實(shí)際上,死鎖問題不僅在計(jì)算機(jī)系統(tǒng)中存在,在我們?nèi)粘I钪兴矎V泛存在。</p><p> 在計(jì)算機(jī)系統(tǒng)中,涉及軟件,硬件資源都可能發(fā)生死鎖。例如:系統(tǒng)
18、中只有一臺(tái)CD-ROM驅(qū)動(dòng)器和一臺(tái)打印機(jī),某一個(gè)進(jìn)程占有了CD-ROM驅(qū)動(dòng)器,又申請(qǐng)打印機(jī);另一進(jìn)程占有了打印機(jī),還申請(qǐng)CD-ROM。結(jié)果,兩個(gè)進(jìn)程都被阻塞,永遠(yuǎn)也不能自行解除。</p><p><b> 安全性序列</b></p><p> 安全序列的的實(shí)際意義在于:系統(tǒng)每次進(jìn)行資源分配后,如果對(duì)于系統(tǒng)中</p><p> 新的資源狀況
19、,存在一個(gè)安全序列,則至少存在一條確保系統(tǒng)不會(huì)進(jìn)入死鎖的路徑。按照該序列,銀行家可以實(shí)施一個(gè)有效的分配過程使得所有客戶得到滿足。</p><p> 銀行家算法的核心在于安全序列的產(chǎn)生。安全序列正是一種安全的進(jìn)程推進(jìn)順序。</p><p><b> 需求分析</b></p><p><b> 環(huán)境需求</b></
20、p><p> 1.硬件:windows操作系統(tǒng)電腦;</p><p> 2.軟件:電腦已配置好Java環(huán)境,安裝有Eclipse軟件。</p><p><b> 功能需求</b></p><p> 1.軟件能利用安全性算法對(duì)T0時(shí)刻的資源已分配情況進(jìn)行分析,判斷系統(tǒng)在T0時(shí)刻是否存在一個(gè)安全序列;</p>
21、<p> 2.某一資源發(fā)出請(qǐng)求向量,軟件按照銀行家算法進(jìn)行檢查,判斷是否存在一個(gè)安全序列,系統(tǒng)是否安全;</p><p> 3.用戶能輸入初始化設(shè)置,設(shè)置進(jìn)程數(shù)與資源數(shù);</p><p> 4.用戶可初始化資源,對(duì)各個(gè)資源的總數(shù)進(jìn)行設(shè)置;</p><p> 5.用戶可對(duì)每一進(jìn)程的各個(gè)資源最大需求數(shù)量以及已分配數(shù)量進(jìn)行設(shè)定;</p>
22、<p> 6軟件能保存輸入的進(jìn)程與資源信息,并顯示出輸入的進(jìn)程信息與資源信息;</p><p> 7.軟件能進(jìn)行資源請(qǐng)求,使某一進(jìn)程發(fā)出請(qǐng)求向量,用戶能選擇發(fā)出請(qǐng)求向量的進(jìn)程,并輸入請(qǐng)求向量的信息;</p><p> 8.軟件能保存輸入的請(qǐng)求向量信息,并顯示出請(qǐng)求向量的信息;</p><p> 9.軟件提供重置所有數(shù)據(jù)功能,用戶能夠重置所有數(shù)據(jù),
23、進(jìn)行下一輪銀行家算法檢查。</p><p><b> 性能需求</b></p><p> 1.軟件在用戶選擇完初始化設(shè)置中的進(jìn)程數(shù)與資源數(shù)并確定后,彈出消息框顯示初始化設(shè)置的進(jìn)程數(shù)與資源數(shù)信息,并給出下一步操作提示;</p><p> 2.軟件在初始化資源設(shè)定中進(jìn)行判定,如果資源數(shù)與初始化設(shè)置中不同則不予通過,相同則彈出消息框給出下一步操
24、作提示;</p><p> 3.用戶在輸入每個(gè)進(jìn)程的各個(gè)資源最大需求數(shù)量以及已分配數(shù)量時(shí),若資源數(shù)與初始化設(shè)置中不同則不予通過,相同則彈出消息框設(shè)置成功并提示進(jìn)行下一個(gè)進(jìn)程資源數(shù)進(jìn)行設(shè)定;當(dāng)所有進(jìn)程的資源數(shù)設(shè)定完成后,彈出消息框提示用戶所有的參數(shù)設(shè)置已經(jīng)完成;若輸入的某一進(jìn)程的最大需求超過了資源總數(shù),彈出消息框提示用戶設(shè)置出錯(cuò);若輸入的某一進(jìn)程的已分配超過了最大需求,彈出消息框提示用戶設(shè)置出錯(cuò);</p&g
25、t;<p> 4.軟件提供顯示T0時(shí)刻資源分配表的窗口,顯示Available以及各個(gè)進(jìn)程的進(jìn)程名,Max,Allocation,Need信息;</p><p> 5. 軟件可對(duì)進(jìn)程請(qǐng)求資源的資源數(shù)進(jìn)行判定,如果資源數(shù)與初始化設(shè)置中不同則不予通過,相同則彈出消息框給出下一步操作提示;若請(qǐng)求向量大于需求,則給出提示輸入不合理;</p><p> 6. 軟件提供顯示T0時(shí)刻
26、安全序列表的窗口,顯示進(jìn)程名,Work,Need,Allocation,Work + Allocation以及Finish信息。</p><p><b> 界面需求</b></p><p><b> 1.界面簡潔清晰;</b></p><p><b> 2.輸入輸出明確;</b></p&g
27、t;<p> 3.功能實(shí)現(xiàn)時(shí)條理清晰。</p><p><b> 本章小結(jié)</b></p><p> 需求分析是指對(duì)要解決的問題進(jìn)行詳細(xì)的分析,弄清楚問題的要求,包括需要輸入什么數(shù)據(jù),要得到什么結(jié)果,最后應(yīng)輸出什么。指的是在建立一個(gè)新的或改變一個(gè)現(xiàn)存的電腦系統(tǒng)時(shí)描寫新系統(tǒng)的目的、范圍、定義和功能時(shí)所要做的所有的工作 。</p><
28、;p> 操作系統(tǒng)按銀行家制定的規(guī)則為進(jìn)程分配資源,當(dāng)進(jìn)程首次申請(qǐng)資源時(shí),要測(cè)試該進(jìn)程尚需求的資源量,若是系統(tǒng)現(xiàn)存的資源可以滿足它尚需求的資源量,則按當(dāng)前的申請(qǐng)量來分配資源,否則就推遲分配。</p><p> 當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請(qǐng)資源時(shí),先測(cè)試該進(jìn)程申請(qǐng)的資源量是否超過了它尚需的資源量。若超過則拒絕分配,若沒有超過則再測(cè)試系統(tǒng)尚存的資源是否滿足該進(jìn)程尚需的資源量,若滿足即可按當(dāng)前的申請(qǐng)量來分配,若不滿足
29、亦推遲分配。</p><p> 根據(jù)上述銀行家算法描述,可以得到本項(xiàng)目的需求,軟件應(yīng)該提供進(jìn)程數(shù)資源數(shù)的設(shè)定,各個(gè)進(jìn)程的具體資源信息,以及請(qǐng)求向量的數(shù)據(jù)的輸入,以及進(jìn)程信息的顯示和安全序列表的顯示。</p><p> 需求分析能夠更好的給開發(fā)者提供開發(fā)的目標(biāo),以及對(duì)本項(xiàng)目要干什么做什么,使我們理解更加深</p><p><b> 概要設(shè)計(jì)</b
30、></p><p><b> 總體設(shè)計(jì)</b></p><p><b> 界面設(shè)計(jì)</b></p><p> 使用java寫出銀行家算法程序的界面,如圖3-1所示。左上角為初始化進(jìn)程個(gè)數(shù)與資源種類數(shù)模塊;左下方為初始化資源模塊,用于輸入每個(gè)進(jìn)程擁有每類資源的數(shù)量,以及最大需求(max矩陣)、已分配(alloca
31、tion矩陣)。每輸入一組數(shù)據(jù)便點(diǎn)擊確認(rèn)鍵提交一次。右上角顯示出該時(shí)刻的資源分配情況;右下部分則可以讓用戶在該時(shí)刻對(duì)某進(jìn)程申請(qǐng)資源,并進(jìn)行安全性檢查,顯示申請(qǐng)資源后系統(tǒng)是否處于安全狀態(tài)。</p><p><b> 圖3-1 主要界面</b></p><p><b> 功能模塊設(shè)計(jì)</b></p><p> 初始化進(jìn)程
32、數(shù)與資源數(shù)</p><p> 設(shè)計(jì)進(jìn)程數(shù)下拉菜單,選擇0-10個(gè)進(jìn)程。</p><p> 設(shè)計(jì)資源數(shù)下拉菜單,選擇0-10個(gè)資源種類。</p><p> 確定按鈕,點(diǎn)擊后彈出消息對(duì)話框,提示下一步。</p><p><b> 初始化資源</b></p><p> 設(shè)計(jì)一文本區(qū)域,用于用戶
33、輸入每類資源初始數(shù)目,輸入數(shù)字以空格隔開,確定按鈕提交。</p><p> 設(shè)計(jì)兩個(gè)文本區(qū)域,分別用于用戶輸入每個(gè)進(jìn)程的Max()矩陣和Allocation()矩陣,輸入一次后確定提交,一共輸入與進(jìn)程數(shù)相同的次數(shù)。</p><p><b> 資源狀況的顯示</b></p><p> 每當(dāng)輸入一次Max()和Allocation()的值確定
34、后,打印出該進(jìn)程的信息,最后形成一張資源信息表</p><p> 申請(qǐng)資源Request</p><p> 設(shè)計(jì)安全性檢查按鈕,點(diǎn)擊后執(zhí)行安全性算法,打印出該時(shí)刻系統(tǒng)安全性表格,并輸出該時(shí)刻系統(tǒng)安全性序列 </p><p> 設(shè)計(jì)一下拉菜單和一文本域,分別用于選擇申請(qǐng)資源的進(jìn)程以及輸入申請(qǐng)資源的數(shù)量,輸入數(shù)字以空格隔開.當(dāng)申請(qǐng)資源可以分配,則提示成功,并打印安
35、全序列,否則提示無法分配 </p><p><b> 本章小結(jié)</b></p><p> 總體設(shè)計(jì):即對(duì)有關(guān)系統(tǒng)全局問題的設(shè)計(jì),也就是設(shè)計(jì)系統(tǒng)總的處理方案,又稱系統(tǒng)概要設(shè)計(jì)。</p><p> 在該部分中,我們初步設(shè)想與模擬了程序的模板界面以及一些可能出現(xiàn)的問題,在確定這些之后我們又分析決定了模板與層次的設(shè)計(jì)方式。之后我們考慮到用戶的實(shí)驗(yàn)
36、體驗(yàn)等問題,決定優(yōu)化了用戶輸入并且增加了重置所有數(shù)據(jù)按鈕,使用戶在使用時(shí)能夠更加方便的多次輸入數(shù)據(jù),不用重復(fù)打開程序。</p><p> 總體設(shè)計(jì)定義了系統(tǒng)的大概界面需要實(shí)現(xiàn)的功能以及用戶輸入輸出的方式,但未確定具體的實(shí)現(xiàn)方法,這部分內(nèi)容將在下一章節(jié)的詳細(xì)設(shè)計(jì)中確定。</p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p><b&
37、gt; 開發(fā)環(huán)境介紹</b></p><p><b> NetBeans</b></p><p> NetBeans IDE是一個(gè)屢獲殊榮的集成開發(fā)環(huán)境,可以方便的在Windows,Mac,Linux和Solaris中運(yùn)行。NetBeans包括開源的開發(fā)環(huán)境和應(yīng)用平臺(tái),NetBeans IDE可以使開發(fā)人員利用Java平臺(tái)能夠快速創(chuàng)建Web、企業(yè)、桌
38、面以及移動(dòng)的應(yīng)用程序,NetBeans IDE目前支持PHP、Ruby、JavaScript、Ajax、Groovy、Grails和C/C++等開發(fā)語言。</p><p> NetBeans項(xiàng)目由一個(gè)活躍的開發(fā)社區(qū)提供支持, NetBean開發(fā)環(huán)境提供了豐富的產(chǎn)品文檔和培訓(xùn)資源以及大量的第三方插件。</p><p> NetBeans是開源軟件開發(fā)集成環(huán)境,是一個(gè)開放框架,可擴(kuò)展的開發(fā)
39、平臺(tái),可以用于Java、C/C++,PHP等語言的開發(fā),本身是一個(gè)開發(fā)平臺(tái),可以通過擴(kuò)展插件來擴(kuò)展功能。[1]</p><p> 在 NetBeans Platform 平臺(tái)中,應(yīng)用軟體是用一系列的軟體模組(Modular Software Components)建構(gòu)出來。而這些模組是一個(gè)jar檔(Java Archive File)它包含了一組Java程式的類別而它們實(shí)作全依據(jù)依 NetBeans 定義了的公
40、開介面以及一系列用來區(qū)分不同模組的定義描述檔(Manifest File)。有賴於模組化帶來的好處,用模組來建構(gòu)的應(yīng)用程式可只要加上新的模組就能進(jìn)一步擴(kuò)充。由於模組可以獨(dú)立地進(jìn)行開發(fā),所以由 NetBeans 平臺(tái)開發(fā)出來的應(yīng)用程式就能利用著第三方軟件,非常容易及有效率地進(jìn)行擴(kuò)充</p><p><b> Java</b></p><p> java是一種可以撰寫
41、跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語言和Java平臺(tái)(即JavaEE, JavaME, JavaSE)的總稱。Java自面世后就非常流行,發(fā)展迅速,對(duì)C++語言形成了有力沖擊。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。在全球云計(jì)
42、算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。</p><p><b> 主要功能模塊簡介</b></p><p><b> 概述</b></p><p> 本課程設(shè)計(jì)的詳細(xì)設(shè)計(jì)主要針對(duì)主要界面的設(shè)計(jì)和主要算法的設(shè)計(jì)。優(yōu)良的界面設(shè)計(jì)是本軟件設(shè)計(jì)成功與否的重要因素,也是本次課程設(shè)計(jì)的兩點(diǎn)所在。核心算法
43、:銀行家算法,是本程序的靈魂,整個(gè)程序都是圍繞該算法而構(gòu)成的。本節(jié)主要描述軟件編碼中的主要類和方法,具體代碼參考附件。</p><p><b> 程序工作流程</b></p><p> 程序需要完成的工作相對(duì)簡單,主要包含兩大部分:設(shè)置和安全性檢查。其余部分都是輔助工作,為了給使用者相關(guān)提示。如圖 4-1所示。</p><p> 圖 4-
44、1 程序工作流程圖 </p><p><b> 界面設(shè)計(jì)簡介</b></p><p> 參照程序工作流程,可將界面主要?jiǎng)澐譃槿齻€(gè)區(qū)域:設(shè)置區(qū)域、顯示區(qū)域、操作區(qū)域。其中,設(shè)置區(qū)域主要實(shí)現(xiàn)進(jìn)程、資源的初始設(shè)置,包括設(shè)置進(jìn)程的數(shù)量,資源的種類數(shù)量和資源分配情況等;顯示區(qū)域是以表格形式將設(shè)置的信息展示給使用者以及顯示安全性檢查過程產(chǎn)生的表格;操作區(qū)域是為請(qǐng)求資源操作準(zhǔn)備
45、的。</p><p> 圖 4-2 界面設(shè)計(jì)</p><p><b> 面向?qū)ο蟮乃枷?lt;/b></p><p> Java是面向?qū)ο蟮恼Z言,面向?qū)ο蟮年P(guān)鍵在于“抽象”。銀行家算法中主要的兩大對(duì)象就是進(jìn)程和資源。對(duì)它們進(jìn)行抽象,就能很快建立好整個(gè)模型。</p><p><b> MVS模式</b&g
46、t;</p><p> MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,,采用這種模式能夠很清楚給人思路,利于整個(gè)軟件的開發(fā)。所以,我們?cè)O(shè)計(jì)了如圖 4-3的工程結(jié)構(gòu):</p><p> 圖 4-3 工程結(jié)構(gòu)</p><p> org.bank.model包</p>
47、<p> 模型包,主要包含抽象出的模型類,實(shí)體類。</p><p> org.bank.view包</p><p> 視圖包,有關(guān)界面設(shè)計(jì)的類都放在這個(gè)包中。</p><p> org.bank.util包</p><p> 操作包,需要用到的操作方法函數(shù)都放在這個(gè)包中。</p><p> o
48、rg.bank.main包</p><p> 該包存放銀行家算法核心類。</p><p><b> 主要模塊詳細(xì)設(shè)計(jì)</b></p><p><b> 模型類和邊緣類</b></p><p><b> 模型類</b></p><p> 該類主要
49、放在org.bank.model包中,是將進(jìn)程和資源抽象化,分別建立myprocess和myresources類。類圖如圖 4-4:</p><p> 圖 4-4 軟件工程類圖</p><p><b> 字段說明:</b></p><p><b> nr:資源種類數(shù)目</b></p><p>
50、 maxNeed:最大資源需求數(shù)</p><p> allocation:已分配資源數(shù)</p><p> need:尚需資源數(shù)</p><p> available:可利用資源</p><p><b> 邊緣類</b></p><p> 該類存放在org.bank.util包中,主要是
51、操作類,里面包含一些需要常用的方法函數(shù),用來服務(wù)整個(gè)軟件。比如把字符串轉(zhuǎn)化為整型數(shù)組等。其主要的方法函數(shù)如下:</p><p> //將整形數(shù)組轉(zhuǎn)化為以空格分開的字符串</p><p> public static String toString(int[] a)</p><p> //將字符串轉(zhuǎn)化為n個(gè)整形數(shù)字</p><p> p
52、ublic static int[] toInt(String s , int n) </p><p> //檢查字符串是否符合以空格分開</p><p> private static boolean cheak(String[] ss)</p><p> //得到進(jìn)程p的各類需求資源,以整形數(shù)組返回</p><p> publi
53、c static int[] getNeed(Myprocess p)</p><p> //比較a1 是否每個(gè)數(shù)都對(duì)應(yīng)小于 a2</p><p> public static boolean compare(int[] a1 ,int[] a2)</p><p> 銀行家算法核心類safety.java</p><p> 該類三個(gè)方
54、法:judge(),request()和getAvailable(),分別用于安全性檢查,請(qǐng)求資源和得到當(dāng)前可用資源統(tǒng)計(jì)。其中judge()是這個(gè)軟件的核心,是銀行家算法的精髓。教科書上的方法是面向結(jié)構(gòu)化的,并不適用于我們這個(gè)軟件,所以我們對(duì)這個(gè)算法進(jìn)行了改造。</p><p><b> 算法流程</b></p><p><b> 如圖 4-5所示<
55、;/b></p><p> 圖 4-5 銀行家核心算法流程</p><p> safety.java源代碼</p><p><b> 簡要說明</b></p><p> 我們將書上結(jié)構(gòu)化的算法進(jìn)行了改寫,變成符合java面向?qū)ο蟮倪^程。另外對(duì)安全性序列的產(chǎn)生過程進(jìn)行了修改。書上采用了從上到下的順序,這不符合
56、我們手動(dòng)求序列的過程,容易讓人溜掉。所以我們進(jìn)行了改寫,改變成反復(fù)從上到下的順序,即每一次掃面過程都是從第一個(gè)開始,這樣符合我們的習(xí)慣。</p><p><b> 界面</b></p><p> 界面的代碼放在org.bank.view包中,主要運(yùn)用java.swing相關(guān)知識(shí)構(gòu)建一個(gè)讓人易與操作的界面。由于界面的代碼量相當(dāng)復(fù)雜,現(xiàn)主要對(duì)重要部分和監(jiān)聽事件說明。詳
57、細(xì)見附件。</p><p> public class FrmMain extends javax.swing.JFrame {</p><p> Myprocess[] p = null;</p><p> Myresource[] r = null;</p><p> Safety s = null;</p><
58、;p> int[] allres = null;</p><p> int np,nr;//分別是進(jìn)程計(jì)數(shù)、資源計(jì)數(shù)</p><p> int nump=0;//用于控制初始化進(jìn)程狀態(tài)計(jì)數(shù)</p><p> javax.swing.table.DefaultTableModel dtm1 = new javax.swing.table.DefaultT
59、ableModel();//控制表格格式</p><p> java.util.Vector data = new java.util.Vector();//表數(shù)據(jù)</p><p> java.util.Vector title = new java.util.Vector();//表頭</p><p> public FrmMain() {</p>
60、;<p> initComponents();</p><p><b> //設(shè)置表格初始化</b></p><p> jTa1.setModel(dtm1);</p><p> title.add("進(jìn)程");</p><p> title.add("Max&quo
61、t;);title.add("Allocation");title.add("Need");title.add("Available");</p><p> dtm1.setDataVector(data, title);//顯示表頭,內(nèi)容暫時(shí)為空</p><p><b> }</b></p>
62、<p> private void initComponents() {…}//界面各控件的初始化</p><p> private void jBtnAck1MouseClicked(java.awt.event.MouseEvent evt){…}//初始化進(jìn)程、資源的數(shù)目</p><p> private void jBtnAck3MouseClicked(jav
63、a.awt.event.MouseEvent evt){…}//初始化資源狀態(tài)</p><p> private void jBtnAck2MouseClicked(java.awt.event.MouseEvent evt){…}//初始化每個(gè)進(jìn)程的具體狀態(tài)</p><p> private void jBtnResetMouseClicked(java.awt.event.Mous
64、eEvent evt){…}//重置按鈕的功能</p><p> private void jBtnJudgeMouseClicked(java.awt.event.MouseEvent evt){…}//安全性檢查按鈕</p><p> private void jBtnReqMouseClicked(java.awt.event.MouseEvent evt){…}////請(qǐng)求資源
65、按鈕</p><p><b> 本章小結(jié)</b></p><p> 本章的編寫的目的是描述此系統(tǒng)的詳細(xì)設(shè)計(jì),是將在概要設(shè)計(jì)中利用建模的思想得到的模塊內(nèi)部的邏輯結(jié)構(gòu)轉(zhuǎn)化成為代碼的形式,進(jìn)一步細(xì)化概要設(shè)計(jì)中的模塊。具體代碼可以參見附件。</p><p><b> 測(cè)試及成果展示</b></p><p&
66、gt;<b> 測(cè)試環(huán)境</b></p><p><b> 硬件環(huán)境</b></p><p><b> 用戶機(jī):普通PC機(jī)</b></p><p> CPU:core i3 1.8GHz</p><p><b> 內(nèi)存:4G</b></p&
67、gt;<p> 分辨率:推薦使用1024*768像素</p><p><b> 軟件運(yùn)行軟件環(huán)境</b></p><p> 操作系統(tǒng):Windows 8,Windows 7</p><p> 開發(fā)工具包:NetBeans IDE 7.3.1</p><p> 環(huán)境包:JDK7.0或以上版本<
68、/p><p><b> 測(cè)試方法和工具</b></p><p> 本軟件采用的測(cè)試方法是反復(fù)對(duì)代碼審查,用NetBeans編譯器對(duì)代碼進(jìn)行編譯檢查,以及對(duì)軟件的反復(fù)試用,及時(shí)發(fā)現(xiàn)問題,解決問題。</p><p><b> 測(cè)試用例和結(jié)果</b></p><p><b> 測(cè)試范圍<
69、;/b></p><p> 這里的測(cè)試主要是針對(duì)軟件的界面和主要功能的測(cè)試。</p><p><b> 界面測(cè)試</b></p><p> 測(cè)試目標(biāo):查看軟件界面工作是否正常,能否正常打開,界面信息是否齊全。</p><p> 測(cè)試方法:進(jìn)入軟件主界面,查看界面顯示是否符合要求。</p>&l
70、t;p> 測(cè)試結(jié)果:界面打開后主建面顯示結(jié)果如圖5-1。</p><p><b> 圖 5-1 主界面</b></p><p> 測(cè)試完成標(biāo)準(zhǔn):界面能正常顯示,且界面信息提示完整。</p><p> 軟件工作原理模擬過程測(cè)試</p><p> 測(cè)試目標(biāo):檢驗(yàn)軟件是否能正確選擇進(jìn)程數(shù)和資源數(shù),并初始化資源信
71、息,模擬工作流程,且各步驟信息提示準(zhǔn)確無誤,數(shù)據(jù)顯示齊全。</p><p> 測(cè)試方法:在下拉列表選擇進(jìn)程數(shù)和資源數(shù),在初始化資源的空白框中輸入各類資源信息。</p><p> 測(cè)試結(jié)果:在下拉列表中選擇進(jìn)程數(shù)為5、資源數(shù)為3,并單擊確定按鈕,顯示結(jié)果如下:點(diǎn)擊確定后進(jìn)行資源初始化(圖5-2)</p><p> 圖 5-2 資源初始化</p>&
72、lt;p> 設(shè)置資源總數(shù)(圖 5-3)</p><p> 圖 5-3 設(shè)置資源總數(shù)</p><p> 輸入各進(jìn)程資源最大需求數(shù)及資源已分配數(shù)(圖 5-4)</p><p> 圖 5-4 設(shè)置各進(jìn)程初始狀態(tài)</p><p> 填寫請(qǐng)求資源信息,并點(diǎn)擊申請(qǐng)按鈕(圖 5-5)</p><p> 圖 5-5
73、申請(qǐng)資源</p><p> 點(diǎn)擊安全性檢查按鈕(圖 5-6)</p><p> 圖 5-6 安全性檢查</p><p> 部分報(bào)錯(cuò)說明(圖 5-7)</p><p> 圖 5-7 錯(cuò)誤處理</p><p><b> 成果展示</b></p><p> 見附件Ba
74、nk.rar。包含整個(gè)工程文件。</p><p><b> 本章小結(jié)</b></p><p> 對(duì)軟件的測(cè)試是對(duì)整個(gè)開發(fā)過程的回顧,也是整個(gè)開發(fā)過程收尾工作最重要的一環(huán)。對(duì)軟件的測(cè)試過程中,會(huì)發(fā)現(xiàn)代碼錯(cuò)誤和不合理的地方,以此完善代碼。這不僅是對(duì)自己思維的完善,也增加了自己的編程能力。</p><p><b> 參考文獻(xiàn)</
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)---模擬銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)-模擬銀行家算法-課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告---模擬實(shí)現(xiàn)銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)(銀行家算法)
- 操作系統(tǒng)課程設(shè)計(jì)-銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)(銀行家算法設(shè)計(jì))
- 軟件系統(tǒng)課程設(shè)計(jì)---操作系統(tǒng)用銀行家算法實(shí)現(xiàn)資源分配
- 操作系統(tǒng)課程設(shè)計(jì)——銀行家算法的模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法 (3)
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法 (2)
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法 (2)
評(píng)論
0/150
提交評(píng)論