




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、程序設(shè)計(jì)綜合實(shí)踐(試用教材)信息工程學(xué)院前言本課程是在深入了解和掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的理論和方法的基礎(chǔ)上,使用面向?qū)ο蟮乃枷牒头椒▽?duì)實(shí)際問(wèn)題進(jìn)行需求分析,根據(jù)需求分析結(jié)果完成程序的總體設(shè)計(jì),在總體設(shè)計(jì)的基礎(chǔ)上實(shí)現(xiàn)詳細(xì)設(shè)計(jì)和編碼調(diào)試,并對(duì)所設(shè)計(jì)的程序進(jìn)行必要的測(cè)試。從而達(dá)到培養(yǎng)計(jì)算機(jī)軟件本科學(xué)生程序設(shè)計(jì)的綜合能力和訓(xùn)練工程化軟件開發(fā)的初級(jí)技能的目標(biāo),為后續(xù)專業(yè)課程和實(shí)踐奠定基礎(chǔ)。本課程的主要內(nèi)容包括: 初步學(xué)會(huì)使用UML的用例圖分析和描述所設(shè)計(jì)程序的需求。 初步學(xué)會(huì)使用UML的類圖、類之間的靜態(tài)關(guān)聯(lián)和動(dòng)態(tài)交互圖、以及功能活動(dòng)圖進(jìn)行程序的總體設(shè)計(jì)。 學(xué)會(huì)能綜合、合理地使用面向?qū)ο蟮母鞣N編程方法、算
2、法和數(shù)據(jù)設(shè)計(jì)方法和庫(kù)資源實(shí)現(xiàn)程序的詳細(xì)設(shè)計(jì)、編碼和調(diào)試。 了解程序測(cè)試的必要性和重要性,程序測(cè)試的目標(biāo)、基本內(nèi)容和方法;制定程序的簡(jiǎn)單測(cè)試方案并完成對(duì)程序的簡(jiǎn)單測(cè)試。 學(xué)會(huì)編寫由需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)和程序測(cè)試組成的程序開發(fā)文檔以及程序的簡(jiǎn)單使用手冊(cè)。目 錄第一章面向?qū)ο蟪绦蛟O(shè)計(jì)的實(shí)現(xiàn)方法和步驟1第二章 程序設(shè)計(jì)案例分析 17第三章 實(shí)踐題目和實(shí)踐要求 50附錄A使用Visio輔助建立軟件模型 60附錄B使用Visual C+ 建立具有GUI功能的控制臺(tái)應(yīng)用程序 79附錄C string類和CString類的使用 99附錄D 算法的偽代碼描述約定 101附錄E 使用Turbo C+ 環(huán)境
3、建立面向?qū)ο蟮某绦蝽?xiàng)目 103第一章 面向?qū)ο蟪绦蛟O(shè)計(jì)的實(shí)現(xiàn)方法和步驟§1.1 軟件的生命周期軟件的生命周期描述了在軟件要解決的實(shí)際問(wèn)題描述確定之后,從軟件要實(shí)現(xiàn)的功能分析開始、到根據(jù)分析結(jié)果進(jìn)行的軟件設(shè)計(jì)、依據(jù)設(shè)計(jì)進(jìn)行的編碼調(diào)試和軟件應(yīng)用過(guò)程中的維護(hù),直至軟件退出應(yīng)用結(jié)束的全過(guò)程中各個(gè)階段的任務(wù)和相互關(guān)系。分析設(shè)計(jì)演化維護(hù)從上圖不難看出面向?qū)ο筌浖拈_發(fā)生命周期是由四個(gè)階段:分析、設(shè)計(jì)、演化和維護(hù)組成的。分析階段是整個(gè)軟件生命周期的開始,以后的各個(gè)階段都可以直接和間接地回饋到前面的階段。整個(gè)軟件生命周期是一個(gè)迭代、漸增的開發(fā)過(guò)程,這種迭代過(guò)程不僅貫穿整個(gè)軟件生命周期,并且表現(xiàn)在每個(gè)
4、階段中,特別是在分析(全局分析、局部分析)和設(shè)計(jì)(全局設(shè)計(jì)、局部設(shè)計(jì))階段。§1.2 軟件的建模所謂軟件模型是對(duì)軟件所模擬的現(xiàn)實(shí)世界和對(duì)軟件所建立的信息系統(tǒng)的理解和描述,它源于所模擬的現(xiàn)實(shí)世界,是認(rèn)識(shí)活動(dòng)的產(chǎn)物,是描述信息系統(tǒng)的工具,是軟件設(shè)計(jì)、測(cè)試、維護(hù)的依據(jù)。因此,軟件模型的優(yōu)劣將從根本上確定了軟件的功能、性能和生命力。軟件生命周期的前兩個(gè)階段,分析和設(shè)計(jì)所完成的工作就是建立軟件模型。使用統(tǒng)一建模語(yǔ)言UML(Unified Modeling Language)建立軟件模型可以提高我們?cè)贠O軟件開發(fā)的每個(gè)階段的工作效率 從記錄新的問(wèn)題領(lǐng)域中心概念的一些最初想法,到組織軟件開發(fā)人員與
5、用戶專家進(jìn)行交流,直到最終軟件產(chǎn)品的圖形文件記錄等?;赨ML的OO軟件開發(fā)產(chǎn)品的出現(xiàn)使OO設(shè)計(jì)更加高效、方便。UML的各種圖形具有描述模型的準(zhǔn)確性和廣泛性,使用這些圖形進(jìn)行軟件建模大大提高了模型的直觀性,其主要優(yōu)點(diǎn)表現(xiàn)在:· 直觀、易于理解問(wèn)題領(lǐng)域和發(fā)現(xiàn)設(shè)計(jì)中的錯(cuò)誤,特別是那些有關(guān)對(duì)象間關(guān)系的錯(cuò)誤;· 便于準(zhǔn)確地從模型到實(shí)際應(yīng)用編碼的轉(zhuǎn)換;· 為軟件的測(cè)試和維護(hù)提供準(zhǔn)確依據(jù)。UML提供的“用例圖(User Case Diagram)”、“類圖(Class Diagram)”、“順序圖(Sequence Diagram)”、“協(xié)作圖(Collaboration D
6、iagram)”、“狀態(tài)圖(Statechart Diagram)”、“活動(dòng)圖(Activity Diagram)”和“包圖(Package Diagram)”用于描述軟件建模過(guò)程中各個(gè)階段的各種模型成分。根據(jù)所設(shè)計(jì)的軟件的規(guī)模和復(fù)雜程度不同,并非需要在所建立的軟件模型中包括所有的圖形,但一般都應(yīng)包含用例圖、類圖、順序圖或協(xié)作圖和活動(dòng)圖。§ 用例圖用戶登記檢查用戶背景銷售者貼出需要拍賣的物品接受報(bào)價(jià)將物品發(fā)給競(jìng)拍獲勝者報(bào)價(jià)擴(kuò)展點(diǎn):更多報(bào)價(jià)向銷售者付錢授權(quán)向銷售者支付維護(hù)用戶列表通知獲勝者接受用戶報(bào)價(jià)進(jìn)行多個(gè)報(bào)價(jià)每個(gè)報(bào)價(jià)對(duì)應(yīng)一件物品<<extend>><&
7、lt;include>>檢查購(gòu)買者的信用度<<include>>查出一件物品列出所有物品購(gòu)買者拍賣師<<generalization>>使用“用例圖”描述擬建軟件與外部環(huán)境之間的關(guān)系。一個(gè)用例表示一個(gè)外部角色 Actor (例如,用戶或其它外部軟件環(huán)境)與擬建軟件之間一個(gè)單獨(dú)交互。將所有的用例集中在一起,就可以描述一個(gè)OO軟件的總體功能需求。例如一個(gè)網(wǎng)上拍賣系統(tǒng)的拍賣過(guò)程用例圖:用例圖在軟件的建模過(guò)程中是必不可少的。§ 類圖使用“類圖”描述所設(shè)計(jì)的軟件中包含的類,以及這些類之間的靜態(tài)關(guān)系,從而描繪了整個(gè)軟件的靜態(tài)組成和結(jié)構(gòu)。
8、1 類的一般描述圖Employee-address2.*:char-age:int-name2.*:char+getName():char*+setAddress(in addr:char*)類名屬性操作 類名:類的名稱 屬性:屬性描述的語(yǔ)法:visibility name N : type = initialValue property-string visibility:屬性的可見性:+ 表示public; # 表示protected;- 表示private。 name:屬性的名稱。 N:屬性的多值性:2.*表示屬性能接受多值;如果屬性描述中無(wú)此項(xiàng),則表示該屬性只允許接受一個(gè)值。 type
9、:屬性的實(shí)現(xiàn)類型(依賴于實(shí)現(xiàn)語(yǔ)言的規(guī)范)。 initialValue:屬性的初始值。 property-string:表示屬性的一些無(wú)法用上述語(yǔ)法描述的特性。例如,一個(gè)只讀屬性(如 C+ 的const 成員或 Java 的 final 成員), 則property-string將可以 設(shè)置為frozen。 操作: 操作描述的語(yǔ)法:visibility name (parameter-list) : return-type operation-string visibility:操作的可見性:+ 表示public; # 表示protected;- 表示private。 name:操作的名稱。 p
10、arameter-list:操作的形參列表,表中允許有多個(gè)形參,形參之間由逗號(hào)分隔。每個(gè)參數(shù)的表示語(yǔ)法:kind name : type = defaultValue ·kind:表示參數(shù)的作用分類in 表示參數(shù)向操作中傳入一個(gè)值;out 表示參數(shù)從操作中提取一個(gè)值; inout 表示參數(shù)既可以向操作中傳入一個(gè)值又可以從操作中提取一個(gè)值。 ·name:表示形參名。·type:表示形參類型。·defaultValue:表示形參的缺省值。 return-type:操作的返回類型(因編譯器而異)。 operation-string:表示操作的一些無(wú)法用上述語(yǔ)法
11、描述的特性。例如,一個(gè)操作是抽象操作,則operation-string可以設(shè)置為abstract。2 類的相互關(guān)系圖用于描述類之間的靜態(tài)關(guān)系。在關(guān)系圖中的類圖除了類名部分不能省略外,其它兩部分都可以根據(jù)需要省略。主要的靜態(tài)關(guān)系有: 歸納關(guān)系(Generalization):表示兩個(gè)類之間的繼承和派生關(guān)系,例如下圖中的類EmployeeManagerEmployee是類Manager的超類(基類),而類Manager是類Employee的子類(派生類)。 關(guān)聯(lián)關(guān)系(Association):表示兩個(gè)類之間的關(guān)聯(lián)關(guān)系,如下圖中類Employee和類 -department : string-na
12、me : string-position : int-employeeBy : CorporationEmployee-address : string-name : string-numberEmployee : long-employees : EmployeeCorporation-employees*-employeeBy0.1Corporation之間的關(guān)聯(lián)關(guān)系: 圖中employeeBy 是 Employee 的屬性成員,其類型為Corporation。通過(guò)該屬性employeeBy 使兩個(gè)類關(guān)聯(lián);0.1表示關(guān)聯(lián)的多樣性,此關(guān)聯(lián)表示一個(gè)Employee對(duì)象不會(huì)被超過(guò)一個(gè)Corpor
13、ation對(duì)象所雇用。同樣,employees 是Corporation 的屬性成員,其類型為Employee。* 表示一個(gè)Corporation對(duì)象允許有 0 至任意數(shù)量的Employee對(duì)象,即雇用任意多個(gè)雇員。上述二端關(guān)聯(lián)關(guān)系也可以用兩條箭頭線分別表示,箭頭線的方向是從關(guān)聯(lián)屬性所在類指向?qū)傩缘念愋皖?。下面的關(guān)聯(lián)關(guān)系表示同一類的兩個(gè)以上不同對(duì)象間的關(guān)聯(lián)。它的含義是該雇員可以管理1至10個(gè)其它員工。-department : string-name : string-position : int-employeeBy : Corporation-employeeSupervised : Em
14、ployeeEmployee-employeeSupervised1.10注意,參與一個(gè)關(guān)聯(lián)的兩個(gè)對(duì)象常常是獨(dú)立存在的,即關(guān)聯(lián)關(guān)系中的一個(gè)對(duì)象的存在與否不會(huì)影響到所關(guān)聯(lián)的另一個(gè)對(duì)象的存在。 類之間的聚合和合成關(guān)系:表示對(duì)象之間的“整體”和“部分”之間的關(guān)系,即在整體和部分之間可能存在生命期的依賴性。合成關(guān)系表示當(dāng)整體不再存在時(shí),部分同時(shí)被銷毀的緊密關(guān)系。例如,下圖中WindowTitleBarSliderPanel-scrollBar1-body1-title1的 Window 和 Slider, TitleBar, Panel 之間的關(guān)系:聚合關(guān)系表示當(dāng)整體不再存在之后,部分還會(huì)繼續(xù)存在的關(guān)
15、系。例如,下圖中的類Orchestra 和 Performer之間的關(guān)系。當(dāng)然這種關(guān)系也可以通過(guò)前面介紹過(guò)的關(guān)聯(lián)關(guān)系表示。但是,聚合關(guān)系可以很形象地說(shuō)明一些概念。例如本例中說(shuō)明:樂(lè)隊(duì)是由演-conductor-name : string-numberOfPlayer : int-musician : PerformerOrchestra-instrument : string-name : stringPerformer-musician1.*奏人員所組成的,但樂(lè)隊(duì)的生存期與演奏人員的壽命并不存在緊密依賴關(guān)系。 類模板和類模板的實(shí)例化: 類模板是具有成員類型參數(shù)的類。例如,下圖中的類就是一個(gè)具
16、有兩種成員類型參數(shù)<<implementation class>>IndexListT, Y<<bind>>(long)longEmployee<<bind>>(Employee)<<implementation class>>IndexListT, YT和Y的類模板,和將該類模板的成員類型實(shí)例化后的類。 類的實(shí)例 對(duì)象:對(duì)象是按照類定義創(chuàng)建的實(shí)例,在對(duì)象的圖形描述中實(shí)例被命名,同時(shí)類的各個(gè)屬性被賦予特定的值。例如,下圖就是一個(gè)用Employee類創(chuàng)建的對(duì)象john_1。department : s
17、tring = Sell_Dptname : string = john Smithposition : int = 1employeeBy : Corporation = IBMemployeeSupervised : Employee = 1john_1 : Employee 顯然,在建模的主要工作 類設(shè)計(jì)中,使用類圖是十分必要的,也是十分方便的。§ 類的交互關(guān)系圖類之間的靜態(tài)關(guān)聯(lián)圖可以準(zhǔn)確地描述軟件的靜態(tài)組成和結(jié)構(gòu),而軟件的各個(gè)組成部分圍繞著功能實(shí)現(xiàn)所表現(xiàn)的動(dòng)態(tài)關(guān)系,即類對(duì)象之間相互作用,則需要使用類的交互關(guān)系圖加以描述。這類圖有兩種:“順序圖”和“協(xié)作圖”。兩種交互圖都是用來(lái)
18、描述軟件運(yùn)行時(shí)完成一種功能事務(wù)(由一個(gè)或多個(gè)用例組成)的過(guò)程中,參與事務(wù)的對(duì)象之間的交互操作;但二者描述著眼點(diǎn)和側(cè)重點(diǎn)不同。因此,一般情況下,描述一個(gè)功能事務(wù)的交互圖只需要根據(jù)需要選擇“順序圖”、“協(xié)作圖”中的一種即可。1 順序圖按時(shí)間順序描述參與功能事務(wù)的一組對(duì)象在功能事務(wù)的執(zhí)行過(guò)程中的交互操作。構(gòu)成順消息1消息2消息3消息4消息5消息6同步消息導(dǎo)致操作執(zhí)行an object返回消息導(dǎo)致操作執(zhí)行異步消息導(dǎo)致操作執(zhí)行同步、異步消息導(dǎo)致操作執(zhí)行序圖的要素如下 下面的順序圖描述了在網(wǎng)上拍賣事務(wù)中,銷售者對(duì)象和競(jìng)拍者對(duì)象以及完成一次拍賣事務(wù)所需要的其它服務(wù)對(duì)象之間相互協(xié)作的順序圖:bidAccept
19、ablebidAcceptable:=minAcceptBidExceededminAcceptBidExceeded:=*for all items of an AuctionLista Buyer:AuctionListgetCurrentMaxBid()selectIteman AuctionItem:postBid()check()a Seller:notifySeller()Check()bidAceptablea saleDoc:new()圖中的各種類型的交互消息必須遵循以下6種語(yǔ)法規(guī)則: 狀態(tài)消息:由一個(gè)對(duì)象將一個(gè)狀態(tài)值轉(zhuǎn)送給另一個(gè)對(duì)象,例如:bidAcceptable。 方法名
20、: 一個(gè)對(duì)象調(diào)用另一個(gè)對(duì)象的方法。例如:selectItem()。 *迭代依據(jù):方法:其中“*”是迭代標(biāo)記。這個(gè)命名方法在目標(biāo)對(duì)象的多個(gè)實(shí)例上調(diào)用,至于具體在哪個(gè)實(shí)例上調(diào)用則由方括號(hào)中的表達(dá)式控制。例如: *for all items in Auctionlist getCurrentMaxBid() 。 flag := 方法:flag 被設(shè)置為TRUE或FALSE,這取決于在這條消息接收對(duì)象上調(diào)用這個(gè)指定的方法所產(chǎn)生的結(jié)果。例如:minAcceptBidExceeded := check()。 條件 方法:只有在條件滿足時(shí)才在消息接收對(duì)象上調(diào)用這個(gè)指定的方法。例如:minAcceptBidE
21、xceeded notifySeller()。 特殊符號(hào) new:表示創(chuàng)建消息接收對(duì)象的新實(shí)例。例如:bidAccepttable new。由于順序圖既能較好地描述功能事務(wù)執(zhí)行過(guò)程中各個(gè)參與對(duì)象的動(dòng)作順序,又能較好地描述對(duì)象之間的交互操作,因此,一般多用順序圖來(lái)描述類之間的動(dòng)態(tài)交互關(guān)系。2 協(xié)作圖協(xié)作圖著眼于參與功能事務(wù)的一組對(duì)象在功能事務(wù)的執(zhí)行過(guò)程中的相互協(xié)作關(guān)系,而不按照?qǐng)?zhí)行過(guò)程的時(shí)間順序描述對(duì)象之間的交互操作。協(xié)作圖雖然在表示對(duì)象之間的交互操作方面優(yōu)于順序圖,但在其它方面都不及順序圖,因此,一般只用于順序圖所描述的類之間動(dòng)態(tài)交互關(guān)系的補(bǔ)充。上述的網(wǎng)上拍賣事務(wù)的協(xié)作圖如下圖所示::Buye
22、r:AuctionList2. selectItem()1. *for all AuctionItems in AuctionList getCurrentMaxBid()widget:AuctionItem3. postBid()4. minAcceptBidExceeded := check():Seller5. minAcceptBidExceeded notifySeller()6. bidAcceptable := check()7. bidAcceptable notifyAuctionItem()8. bidAcceptable notifyBuyer()不難看出,使用類的交互關(guān)
23、系圖(特別是“順序圖”)對(duì)于類設(shè)計(jì)中研究類的屬性和行為,最后確定類的結(jié)構(gòu)和接口設(shè)計(jì)是必不可少的,也是十分方便的。§ 狀態(tài)圖狀態(tài)圖最適合用于顯示一個(gè)類對(duì)象在經(jīng)歷一系列相關(guān)用例的過(guò)程中,所呈現(xiàn)的不同狀態(tài)。它們可以幫助我們更好地理解一個(gè)OO程序中單一對(duì)象的生命期行為。狀態(tài)圖主要由三種圖示構(gòu)件組成:1 對(duì)象狀態(tài):對(duì)象的一個(gè)狀態(tài)用圓角矩形表示。在該矩形中,狀態(tài)名稱用粗體字顯示在矩形最上方;如果還有額外信息,用一條線將這些額外信息與狀態(tài)名分隔開,以“do:/”為前綴的信息項(xiàng)目表示處于此狀態(tài)下的一個(gè)活動(dòng)。開始和結(jié)束是兩個(gè)特殊狀態(tài)。2 轉(zhuǎn)換路徑:對(duì)象從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)用一條箭頭線(箭頭指向轉(zhuǎn)
24、換后的狀態(tài))表示。3 狀態(tài)轉(zhuǎn)換標(biāo)簽:描述引起狀態(tài)轉(zhuǎn)換的原因,描述語(yǔ)法是:EventGuard/Action 該語(yǔ)法的含義是:事件Event的出現(xiàn)將導(dǎo)致以Guard為條件的狀態(tài)轉(zhuǎn)換結(jié)果為TRUE。但在實(shí)際轉(zhuǎn)換到新狀態(tài)之前,動(dòng)作Action必須先執(zhí)行。由于對(duì)象從一個(gè)狀態(tài)到其它狀態(tài)只能進(jìn)行一次轉(zhuǎn)換,因此從一個(gè)給定狀態(tài)可能出現(xiàn)的所有轉(zhuǎn)換路徑必須相互排斥。注意,轉(zhuǎn)換描述的三個(gè)部分(事件、條件和動(dòng)作)都是可選擇的。下圖描述了一次拍賣程序中Buyer對(duì)象的一個(gè)狀態(tài)圖:Registrationdo:/examine customer historyBrowerdo:/examine all items in
25、AuctionListregisteredItemReviewdo:/getCurrentMaxBid getMinAcceptBidselectItemnotWantItem/getNextItemnoRebidding/getNextItemitemCheckednotAllChecked/getNextItemBiddingdo:/place bidwantItemPaymentdo:/send paymentbidAcceptedItemReceiveditemReceivedbidNotAccepted/re-bidstartend顯然,使用狀態(tài)圖對(duì)類對(duì)象的深入研究是有效的,但并不是
26、必不可少的。在建模的過(guò)程中是否需要使用狀態(tài)圖對(duì)類對(duì)象的生存過(guò)程進(jìn)行狀態(tài)進(jìn)行,一般與軟件的復(fù)雜程度有關(guān)。通常情況下,一個(gè)簡(jiǎn)單的軟件建模中,不需要繪制狀態(tài)圖。§ 活動(dòng)圖活動(dòng)圖描述如何通過(guò)一組相互協(xié)作的活動(dòng)產(chǎn)生一個(gè)期望的結(jié)果。在創(chuàng)建活動(dòng)圖時(shí)需要注意的一個(gè)重要問(wèn)題是:確認(rèn)那些可以同時(shí)執(zhí)行的子活動(dòng)(通過(guò)多進(jìn)程或多線程)以及那些必須線性順序執(zhí)行的子活動(dòng)?;顒?dòng)圖中的主要圖示構(gòu)件:1 活動(dòng):用橢圓矩形表示?;顒?dòng)2 觸發(fā)器:用指向活動(dòng)和從活動(dòng)出來(lái)的箭頭線表示。一個(gè)活動(dòng)有流入觸發(fā)器,表示這個(gè)活動(dòng)可以在接收到這個(gè)觸發(fā)器時(shí)執(zhí)行,在絕大多數(shù)情況下前一個(gè)活動(dòng)的成功執(zhí)行就是觸發(fā)器源(流出觸發(fā)器)。對(duì)于具有多個(gè)流入
27、觸發(fā)器的活動(dòng)而言,它是非連接性的。這意味著如果這個(gè)活動(dòng)收到其中一條觸發(fā),目標(biāo)活動(dòng)將會(huì)執(zhí)行?;顒?dòng)1活動(dòng)2活動(dòng)1活動(dòng)2活動(dòng)3SpecialActivity3 同步杠:用一條雙線或一條粗黑線表示。一些活動(dòng)流入它,一些活動(dòng)自它流出,并且它帶有附加條件condition。對(duì)于流入活動(dòng),同步杠是連接性(Conjunctive)的,即所有流入的活動(dòng)必須在控制到達(dá)同步杠之前成功執(zhí)行。這些流入活動(dòng)的成功執(zhí)行受制于同步杠的附加條件。對(duì)于流出活動(dòng),同步杠表示這些活動(dòng)允許并發(fā)執(zhí)行,彼此之間相互獨(dú)立?;顒?dòng)1活動(dòng)2活動(dòng)3condition同步杠活動(dòng)44 判定活動(dòng):在絕大多數(shù)情況下,判定活動(dòng)是通過(guò)測(cè)試一個(gè)布爾值來(lái)實(shí)現(xiàn)的。這
28、類活動(dòng)是由一個(gè)菱形表示的,如下圖所示:/ NO/ YESIs FOO true?下圖顯示了拍賣處理過(guò)程的活動(dòng)圖。圖中那些可以并發(fā)進(jìn)行的活動(dòng)是從標(biāo)簽為“fork”的同步杠中流出的。標(biāo)簽為“merge”的同步杠用于表示一個(gè)條件,就是發(fā)生在該同步杠上的多個(gè)活動(dòng)必須同時(shí)成功結(jié)束,控制流才能繼續(xù)向前。特別要注意從P到Q的活動(dòng)段。在P處與同步杠相關(guān)聯(lián)的條件是:*for each item in the group這里的“*”表示多個(gè)觸發(fā)器,就是說(shuō)它指定了從P到Q所顯示的活動(dòng)線程實(shí)際上由一組平行的線程所組成,每個(gè)線程都由圖中所示的活動(dòng)組成。因此,在P處源于同步杠的并發(fā)路徑的數(shù)量等于購(gòu)買者感興趣的那組項(xiàng)目的數(shù)
29、量。單個(gè)或一組項(xiàng)目?購(gòu)買者登記On fill?/ yes/ no要求購(gòu)買者填表瀏覽AuctionList選擇項(xiàng)目啟動(dòng)信用驗(yàn)證fork/ 一組/ 單個(gè)fork/ P*for each item in the group記錄每個(gè)項(xiàng)目的報(bào)價(jià)/ Q記錄報(bào)價(jià)merge接受單個(gè)或一組項(xiàng)目報(bào)價(jià)并且對(duì)用戶信用驗(yàn)證無(wú)誤授權(quán)向銷售者支付向購(gòu)買者發(fā)送拍賣品不難看出,UML的活動(dòng)圖與一般的程序流程圖在形狀和作用上是類似的,但活動(dòng)圖的描述能力要遠(yuǎn)遠(yuǎn)超過(guò)一般的程序流程圖。在模型中使用活動(dòng)圖來(lái)討論和描述軟件的部分和整個(gè)運(yùn)行過(guò)程的活動(dòng)也是必要的。§ 包圖當(dāng)類的數(shù)量比較多時(shí),最好根據(jù)一些有用的標(biāo)準(zhǔn)將類按包的形式進(jìn)行組
30、織。在UML中,“包”這個(gè)詞的含義和Java的程序包package所表達(dá)的含義基本相同。包是用一個(gè)矩形圖框來(lái)表示的,該矩形的左側(cè)頂部有一個(gè)小矩形“標(biāo)簽”框。包的名稱出現(xiàn)在框的中間。如果需要,可以在框中列出這個(gè)包中所包含的一些重要類的名稱以及其它一些特定的與包有關(guān)的信息時(shí);此時(shí),包的名稱就需要出現(xiàn)在標(biāo)簽內(nèi)。在標(biāo)簽框和主框中都允許用一對(duì)花括號(hào)列出一些額外信息,描述這個(gè)包的特征。例如,如果一個(gè)包只是由C+定義的抽象類或Java的接口組成,這樣的包可以稱為抽象包,可以在包的名稱旁邊的一對(duì)花括號(hào)中添加“抽象”這個(gè)詞。兩個(gè)包之間如果存在著依賴關(guān)系,則使用實(shí)線箭頭的虛線表示的。如果一個(gè)系統(tǒng)中的所有其它包都依
31、賴一個(gè)共同的包,我們可以不使用箭頭線,而只需簡(jiǎn)單地把特征global放在被依賴包圖中包的名稱的旁邊。SwingUI這里需要記住一個(gè)重要概念:包圖中串聯(lián)的依賴性并不會(huì)進(jìn)行傳遞。這意味著雖然包 UI 依賴于包 Swing,并且包 ProcessOrder 依賴于包 UI,但包 ProceesOrder 并不會(huì)自動(dòng)依賴包 Swing。SwingUIProcess Order這樣的依賴屬性類似于Java程序中的 import 命令的作用,而與C+程序中的 #include 預(yù)編譯指令并不相同。顯然,對(duì)于一個(gè)簡(jiǎn)單的程序,程序中所包含的類就沒有劃分多個(gè)子包的必要了。對(duì)于只有一個(gè)包的模型,繪制包圖的必要性就
32、不大了。§1.3 軟件的編碼和調(diào)試軟件模型的建立表明組成軟件的所有類的靜態(tài)結(jié)構(gòu)、動(dòng)態(tài)關(guān)系已經(jīng)明確;需求分析中所描述的功能的實(shí)現(xiàn)活動(dòng)過(guò)程已經(jīng)確定;所有的編碼和調(diào)試的依據(jù)已經(jīng)確立。這是軟件設(shè)計(jì)從建立模型到編碼實(shí)現(xiàn)的轉(zhuǎn)折標(biāo)志。軟件的編碼和調(diào)試工作就是根據(jù)模型中的各種圖形和相應(yīng)的描述,從各個(gè)類的定義編碼實(shí)現(xiàn)和調(diào)試,到使用類分別進(jìn)行子功能的編碼和調(diào)試,直至將子功能組合成整個(gè)軟件的編碼和調(diào)試。在各個(gè)階段的編碼過(guò)程中都需要對(duì)具體實(shí)現(xiàn)算法進(jìn)行必要的設(shè)計(jì),作為編碼和調(diào)試的細(xì)化依據(jù)。§ 類的編碼和調(diào)試1 類定義依據(jù)模型中的類圖和相應(yīng)的描述編寫類的定義代碼。2 類的實(shí)現(xiàn)類的實(shí)現(xiàn)工作是編寫類成員函
33、數(shù)的定義代碼。在模型中并沒有提供編寫這些代碼的具體依據(jù),因此需要為每個(gè)類的成員函數(shù)的操作設(shè)計(jì)算法,做為類實(shí)現(xiàn)的編碼的依據(jù)。 算法設(shè)計(jì) 使用偽代碼描述成員函數(shù)的操作算法。偽代碼的描述約定參見附錄D。 成員函數(shù)的編碼 依據(jù)成員函數(shù)相應(yīng)的算法,編寫成員函數(shù)的定義代碼。3. 類的調(diào)試一個(gè)類的編碼一旦完成就可以對(duì)所該類的代碼進(jìn)行編譯,并按照算法所描述的操作,編寫一個(gè)測(cè)試該類功能的簡(jiǎn)單程序,對(duì)類接口提供的操作進(jìn)行調(diào)試。對(duì)類的分別測(cè)試在任何一個(gè)面向?qū)ο蟮木幾g環(huán)境中都是容易實(shí)現(xiàn)的,并且這種測(cè)試為整個(gè)軟件的實(shí)現(xiàn)和調(diào)試奠定了基礎(chǔ),這對(duì)于一個(gè)復(fù)雜的、具有較大規(guī)模的軟件更是必要的。§ 子功能的編碼和調(diào)試1
34、算法設(shè)計(jì)依據(jù)模型中的子功能活動(dòng)圖和相關(guān)的類交互關(guān)系(順序圖)以及描述,使用偽代碼設(shè)計(jì)子功能的實(shí)現(xiàn)算法。2 編碼依據(jù)子功能的算法,編寫子功能的實(shí)現(xiàn)代碼模塊。3 調(diào)試依據(jù)模型中的功能用例和子功能活動(dòng)圖的描述,對(duì)所編寫的子功能模塊進(jìn)行初步測(cè)試。§ 軟件的功能組裝1 算法設(shè)計(jì)依據(jù)模型中的軟件總體功能的活動(dòng)圖和界面實(shí)現(xiàn)技術(shù),使用偽代碼設(shè)計(jì)軟件的功能組裝算法。2 功能組裝依據(jù)功能的組裝算法,將已經(jīng)經(jīng)過(guò)初步調(diào)試的子功能組裝到一起,完成整個(gè)軟件代碼的編寫。§1.4 軟件的測(cè)試軟件的編碼、編譯和一般運(yùn)行完成后,必須進(jìn)行嚴(yán)格的、全面的測(cè)試之后,才可以交付使用。軟件一旦開始使用,就進(jìn)入了軟件的維
35、護(hù)周期。所謂軟件的測(cè)試應(yīng)該包括軟件的運(yùn)行正確性測(cè)試和軟件的性能測(cè)試兩部分。其中軟件的性能測(cè)試比較復(fù)雜,需要編制特定的外掛測(cè)試程序,需要軟件的用戶和相關(guān)的專家與軟件的設(shè)計(jì)者共同測(cè)試評(píng)價(jià)。本次實(shí)踐要求的軟件測(cè)試是基本的軟件運(yùn)行正確性測(cè)試。這類測(cè)試主要包括兩部分內(nèi)容:按功能測(cè)試軟件的容錯(cuò)能力和測(cè)試軟件運(yùn)行的穩(wěn)定性。1 軟件容錯(cuò)能力測(cè)試 制定測(cè)試提綱按功能劃分,分析并確定每個(gè)功能執(zhí)行過(guò)程中可能導(dǎo)致錯(cuò)誤出現(xiàn)的所有運(yùn)行條件(這些條件通常是通過(guò)用戶輸入產(chǎn)生),即功能執(zhí)行的邊界條件。按照這些邊界條件編寫每個(gè)功能的測(cè)試項(xiàng)目,并歸納制定整個(gè)軟件的容錯(cuò)能力測(cè)試提綱。測(cè)試提綱包括軟件對(duì)容錯(cuò)能力的要求和相應(yīng)的測(cè)試條目。
36、 測(cè)試依據(jù)測(cè)試提綱,按功能測(cè)試每一個(gè)邊界條件下的程序運(yùn)行狀態(tài),并詳細(xì)記錄每一個(gè)邊界條件下測(cè)試結(jié)果。 修改依據(jù)功能的容錯(cuò)能力要求,對(duì)照測(cè)試記錄,分析不符合容錯(cuò)能力要求的原因,進(jìn)行相應(yīng)的代碼修改,并對(duì)修改后的部分相關(guān)功能或修改后的全部功能重新測(cè)試。顯然,上述的測(cè)試步驟中的和是迭代進(jìn)行的,直至測(cè)試的結(jié)果全部滿足軟件對(duì)功能容錯(cuò)能力的要求。2 運(yùn)行穩(wěn)定性測(cè)試軟件運(yùn)行的穩(wěn)定性問(wèn)題往往是潛在的,不易立即發(fā)現(xiàn)。導(dǎo)致軟件運(yùn)行出現(xiàn)穩(wěn)定性問(wèn)題的原因可能有三種:軟件運(yùn)行中某些過(guò)程的CPU不合理占用、軟件運(yùn)行中的內(nèi)存泄漏、軟件運(yùn)行對(duì)系統(tǒng)資源和第三方軟件的不恰當(dāng)使用。這些原因引起的軟件運(yùn)行的穩(wěn)定性問(wèn)題只能在軟件的運(yùn)行狀態(tài)
37、下動(dòng)態(tài)診測(cè)才能發(fā)現(xiàn),其中由于第三個(gè)原因的診測(cè)比較復(fù)雜,本實(shí)踐所設(shè)計(jì)的程序相對(duì)比較簡(jiǎn)單(無(wú)須使用任何第三方軟件),因此只要求對(duì)前兩個(gè)原因引起的軟件運(yùn)行穩(wěn)定性問(wèn)題進(jìn)行測(cè)試。 CPU占用測(cè)試在被測(cè)程序運(yùn)行期間,運(yùn)行系統(tǒng)的“任務(wù)管理器”程序監(jiān)測(cè)被測(cè)試程序各項(xiàng)功能執(zhí)行過(guò)程中的CPU占用情況:采用該方法進(jìn)行監(jiān)測(cè)應(yīng)注意三點(diǎn): 被測(cè)試程序運(yùn)行時(shí),除了系統(tǒng)平臺(tái)的必要進(jìn)程以外不能啟動(dòng)任何其它應(yīng)用進(jìn)程,以便使“任務(wù)管理器”所監(jiān)測(cè)到的數(shù)據(jù)能比較準(zhǔn)確地反映被測(cè)試程序的真實(shí)狀態(tài)。 在監(jiān)測(cè)狀態(tài)下分別按照不同條件執(zhí)行每一個(gè)功能,不同功能的運(yùn)行過(guò)程會(huì)引起不同的CPU占用,但應(yīng)在平均占用率上下波動(dòng);并在功能執(zhí)行結(jié)束后,迅速恢復(fù)到
38、空閑時(shí)的CPU占用狀態(tài),而不應(yīng)出現(xiàn)CPU占用率逐次遞增的現(xiàn)象。 如果出現(xiàn)不正常的CPU占用,則首先需要確定該CPU占用問(wèn)題確實(shí)是被測(cè)程序產(chǎn)生的;然后確定問(wèn)題產(chǎn)生在哪個(gè)功能執(zhí)行過(guò)程中;分析相應(yīng)功能的代碼找到問(wèn)題產(chǎn)生的原因,并加以解決。 內(nèi)存泄漏測(cè)試在編譯環(huán)境中的調(diào)試狀態(tài)下運(yùn)行被測(cè)試程序,并在程序運(yùn)行期間按照不同條件執(zhí)行每一個(gè)功能。正常結(jié)束程序運(yùn)行后,查看程序運(yùn)行期間被保留的調(diào)試信息記錄中是否有內(nèi)存泄漏的記錄。如果程序存在內(nèi)存泄漏問(wèn)題,則會(huì)出現(xiàn)如下明確的信息記錄(本信息是Visual C+ 編譯環(huán)境中保留的內(nèi)存泄漏調(diào)試信息,不同的編譯環(huán)境中的信息描述會(huì)有所不同):Detected memory l
39、eaks!Dumping objects ->C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 233 normal block at 0x00433630, 4 bytes long. Data: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 229 normal block at 0x00433660, 4 bytes long. Da
40、ta: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 225 normal block at 0x00433690, 4 bytes long. Data: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 221 normal block at 0x004336C0, 4 bytes long. Da
41、ta: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 217 normal block at 0x004336F0, 4 bytes long. Data: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 213 normal block at 0x00433720, 4 bytes long. Da
42、ta: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 209 normal block at 0x00433750, 4 bytes long. Data: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 205 normal block at 0x00432890, 4 bytes long. Da
43、ta: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 199 normal block at 0x004337C0, 4 bytes long. Data: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 195 normal block at 0x004337F0, 4 bytes long. Da
44、ta: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 191 normal block at 0x00433820, 4 bytes long. Data: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 187 normal block at 0x00433850, 4 bytes long. Da
45、ta: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 183 normal block at 0x00433880, 4 bytes long. Data: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 179 normal block at 0x00433950, 4 bytes long. Da
46、ta: < > CD CD CD CD C:Documents and SettingsZhanghanyuMy Documents PersonnelMISPerson.cpp(21) : 150 normal block at 0x00431430, 4 bytes long. Data: < > CD CD CD CD Object dump complete.這些信息記錄了在程序運(yùn)行期間,曾出現(xiàn)了15次引起內(nèi)存泄漏的操作,每次泄漏了4個(gè)字節(jié)。引起這些錯(cuò)誤的代碼在Person.cpp文件,即CPerson類的實(shí)現(xiàn)代碼文件中。根據(jù)這些信息,可以比較方便地確定產(chǎn)生問(wèn)題
47、的代碼,并加以修改。第二章 程序設(shè)計(jì)案例分析簡(jiǎn)單人事信息管理程序一 系統(tǒng)需求分析用戶裝載人員信息文件添加一個(gè)新人員信息查詢一個(gè)指定人員信息刪除一個(gè)指定人員信息修改一個(gè)指定人員信息對(duì)所有人員信息排序顯示所有人員信息刪除所有人員信息保存人員信息文件*人事信息管理程序是典型的MIS(Management Information System)軟件,在各類企業(yè)和事業(yè)單位中使用最為普遍的軟件之一。設(shè)計(jì)、編寫一個(gè)簡(jiǎn)單人事信息管理程序雖然并不能從功能的種類和操作接口、數(shù)據(jù)的存儲(chǔ)和共享等方面滿足實(shí)際使用的需要。但對(duì)于學(xué)習(xí)軟件設(shè)計(jì)的一般方法(如何從分析程序的功能需求入手;如何進(jìn)行以滿足需求的類結(jié)構(gòu)、類對(duì)象之間的
48、動(dòng)態(tài)協(xié)作和實(shí)現(xiàn)功能事務(wù)的活動(dòng)為主要內(nèi)容的總體設(shè)計(jì);如何以總體設(shè)計(jì)為依據(jù),完成以各類算法設(shè)計(jì)和工程化編碼實(shí)現(xiàn)為主要內(nèi)容的詳細(xì)設(shè)計(jì);以及如何對(duì)可以運(yùn)行的程序進(jìn)行必要測(cè)試。)和了解MIS類軟件的特點(diǎn)是十分必要的。我們所要設(shè)計(jì)的簡(jiǎn)單人事信息管理程序的功能需求如下所示:1. 裝載人員信息文件:所有人事信息應(yīng)能永久保存在一個(gè)特定的磁盤文件中。在系統(tǒng)開始運(yùn)行時(shí)應(yīng)首先打開該文件,將文件中的全部信息裝載到內(nèi)存中存放這些信息的人員信息集合中。2. 添加一個(gè)新人員信息:通過(guò)交互界面輸入一個(gè)新人員的描述信息,并將該人員信息記錄添加到人員信息集合中。注意集合中不允許有重復(fù)的人員信息記錄。人員的描述信息包括:身份證號(hào),姓
49、名,性別,出生日期,家庭住址,聯(lián)系電話,工作證號(hào),工作部門,職務(wù),薪金額度等。其中身份證號(hào)是唯一區(qū)別不同人員的標(biāo)志。3. 查詢一個(gè)指定人員信息:通過(guò)交互界面確定待查詢?nèi)藛T的身份證號(hào),在人員信息集合中搜索待查詢的人員,并根據(jù)搜索結(jié)果顯示不同的信息:如果指定的人員信息記錄存在,則顯示該人員的詳細(xì)信息;若指定的人員信息記錄不存在,則提示被查詢?nèi)藛T不存在。4. 刪除一個(gè)指定人員信息:通過(guò)交互界面確定待查詢?nèi)藛T的身份證號(hào),在人員信息集合中搜索待刪除的人員,并根據(jù)搜索結(jié)果進(jìn)行相應(yīng)的刪除操作:如果指定的欲刪除信息記錄存在,則先顯示確認(rèn)刪除操作提示,并在確認(rèn)刪除后刪除該指定信息記錄;若指定的欲刪除信息記錄不存
50、在,則顯示相應(yīng)的提示信息。5. 修改一個(gè)指定人員信息:通過(guò)交互界面確定待查詢?nèi)藛T的身份證號(hào),在人員信息集合中搜索待修改的人員,并根據(jù)搜索結(jié)果確定相應(yīng)的操作:如果待修改的信息記錄存在,則顯示該記錄中的全部信息,并允許進(jìn)行編輯修改,并在編輯修改操作結(jié)束后依據(jù)記錄信息是否被修改提示是否保存修改后的記錄;否則顯示待修改的信息記錄不存在的提示。6. 對(duì)所有人員信息排序:提示對(duì)人員信息集合中所有人員信息記錄選擇按照身份證號(hào)上升或下降排序,在確定了排序方向選擇后,對(duì)集合中信息記錄按身份證號(hào)進(jìn)行上升或下降排序,并在排序操作后顯示全部人員的主要信息。7. 顯示所有人員主要信息:順序顯示當(dāng)前人員信息集合中所有人員
51、的主要信息(身份證號(hào)、姓名、性別、出生日期、工作部門和薪金額度)。8. 刪除所有人員信息:提示是否確實(shí)要?jiǎng)h除人員信息集合中所有人員信息記錄,根據(jù)確認(rèn)選擇執(zhí)行刪除操作或放棄刪除操作。9. 保存人員信息文件:在系統(tǒng)退出運(yùn)行時(shí),如果人員信息集合中的信息記錄已經(jīng)被修改,則提示是否保存被更新的信息,并根據(jù)用戶的選擇確定是否將修改后的信息保存到特定的磁盤文件中。如果選擇保存操作,則在保存新的人員信息文件的同時(shí),將修改之前的人員信息文件作為新的備份文件。二 總體設(shè)計(jì)從軟件的需求分析中不難看出:本軟件要處理的數(shù)據(jù)就是描述人員信息的各種數(shù)據(jù),因此如何組織這些數(shù)據(jù)、如何操作這些數(shù)據(jù)、如何在內(nèi)存和磁盤中存儲(chǔ)這些數(shù)據(jù)
52、、如何為操作這些數(shù)據(jù)提供交互界面等就是系統(tǒng)總體設(shè)計(jì)的主要任務(wù)。(一) 類的靜態(tài)設(shè)計(jì)組成一個(gè)簡(jiǎn)單人事信息管理程序的類可以分為兩種:一種是組織數(shù)據(jù)和完成對(duì)數(shù)據(jù)的各項(xiàng)操作的類,另一種是輔助各項(xiàng)數(shù)據(jù)操作實(shí)現(xiàn)的交互界面類。1. 組織數(shù)據(jù)和操作數(shù)據(jù)的類描述人員狀態(tài)的各種信息是本軟件中最主要的數(shù)據(jù),因此,應(yīng)該將描述一個(gè)人員狀態(tài)的所有信息數(shù)據(jù)組織在一起,并將對(duì)這些數(shù)據(jù)的基本操作一起封裝在一個(gè)類中,該人員信息類可以命名為Person。在Person類的各項(xiàng)狀態(tài)屬性中,描述出生日期的屬性是系統(tǒng)預(yù)定義類型不能直接定義的,因此將描述日期狀態(tài)的各項(xiàng)基本數(shù)據(jù)和對(duì)這些數(shù)據(jù)的操作封裝一個(gè)被命名Date的日期類中是十分必要的。
53、如何將所有人員(Person對(duì)象)信息數(shù)據(jù)組織在一起對(duì)于安全、高效、方便地管理和訪問(wèn)這些數(shù)據(jù)非常重要的,為此,應(yīng)該定義一個(gè)存儲(chǔ)和管理這些人員信息的容器類PersonSet。這三個(gè)類的屬性和操作以及它們之間的靜態(tài)關(guān)系如下:Date-year:int-month:int-day:int+SetYear(in year:int)+SetMonth(in month:int)+SetDay(in day:int)+GetYear():int+GetMonth():int+GetDay():int+operator()(in year:int, in month:int, in day:int):CDa
54、te&+Format():CStringoperator>>(inout istream& in, inout Date& date):istream&friendoperator<<(inout ostream& in, inout Date& date):ostream&friend(1) Date類屬性:year年份month月份day日操作:Date構(gòu)造函數(shù)Date析構(gòu)函數(shù)SetYear設(shè)置年份。SetMonth設(shè)置月份。SetDay設(shè)置日。GetYear獲取年份屬性值。GetMonth獲取月份屬性值。GetDay獲取日屬性值。operator()設(shè)置年、月、日。Format將年、月、日的屬性值變換為一個(gè)形式為“yy-mm-dd”的字符串。注意,該函數(shù)的返回類型CString是MFC中提供的類,該類的功能和使用方法與STL的string類類似。祥見附錄C。為了便于Date對(duì)象的輸入和輸出操作,應(yīng)該使用友元函數(shù)為Date類重載輸入和輸出運(yùn)算符函數(shù):operator>&g
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 事業(yè)外聘面試題及答案
- 心內(nèi)科術(shù)后護(hù)理
- 教師組織活動(dòng)總結(jié)
- 運(yùn)維開發(fā)面試題及答案
- 實(shí)踐素材面試題及答案
- 茶樓與旅游公司合作推廣合同
- 門洞擴(kuò)大施工方案
- 藥品研發(fā)項(xiàng)目方案規(guī)程
- 摩托訓(xùn)練考試題及答案
- 企業(yè)防范詐排查方案
- 嘉峪關(guān)市招聘公辦幼兒園編制外聘用制教師考試真題2022
- 塔吊基礎(chǔ)沉降觀測(cè)記錄
- 綜合日語(yǔ)說(shuō)課講課公開課一等獎(jiǎng)市優(yōu)質(zhì)課賽課獲獎(jiǎng)?wù)n件
- 教師職業(yè)道德(高職)PPT完整全套教學(xué)課件
- 茶樓服務(wù)員的禮儀培訓(xùn)資料
- GB/T 5976-2006鋼絲繩夾
- GB/T 4169.3-2006塑料注射模零件第3部分:帶頭導(dǎo)套
- GB/T 12325-2008電能質(zhì)量供電電壓偏差
- 醫(yī)德醫(yī)風(fēng)培訓(xùn)
- 新《高等教育學(xué)》考試復(fù)習(xí)題庫(kù)450題(含各題型)
- 日照正濟(jì)藥業(yè)有限公司創(chuàng)新原料藥及制劑研發(fā)生產(chǎn)項(xiàng)目一期工程職業(yè)病危害預(yù)評(píng)價(jià)報(bào)告
評(píng)論
0/150
提交評(píng)論