版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
結(jié)構(gòu)化程序設(shè)計(jì)方法一個(gè)結(jié)構(gòu)化程序就是用高級語言表示的結(jié)構(gòu)化算法。用三種基本結(jié)構(gòu)組成的程序必然是結(jié)構(gòu)化的程序,這種程序便于編寫、便于閱讀、便于修改和維護(hù)。結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路是:把一個(gè)復(fù)雜問題的求解過程分階段進(jìn)行,每個(gè)階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。結(jié)構(gòu)化程序設(shè)計(jì)方法一個(gè)結(jié)構(gòu)化程序就是用高級語言表示的結(jié)采取以下方法來保證得到結(jié)構(gòu)化的程序:自頂向下;逐步細(xì)化;模塊化設(shè)計(jì);結(jié)構(gòu)化編碼。兩種不同的方法:自頂向下,逐步細(xì)化;自下而上,逐步積累。采取以下方法來保證得到結(jié)構(gòu)化的程序:兩種不同的方法:
用這種方法逐步分解,直到作者認(rèn)為可以直接將各小段表達(dá)為文字語句為止。這種方法就叫做“自頂向下,逐步細(xì)化”。用這種方法逐步分解,直到作者認(rèn)為可以直接將各小段表達(dá)自頂向下,逐步細(xì)化方法的優(yōu)點(diǎn):考慮周全,結(jié)構(gòu)清晰,層次分明,作者容易寫,讀者容易看。如果發(fā)現(xiàn)某一部分中有一段內(nèi)容不妥,需要修改,只需找出該部分修改有關(guān)段落即可,與其它部分無關(guān)。我們提倡用這種方法設(shè)計(jì)程序。這就是用工程的方法設(shè)計(jì)程序。自頂向下,逐步細(xì)化方法的優(yōu)點(diǎn):模塊設(shè)計(jì)的方法:模塊化設(shè)計(jì)的思想實(shí)際上是一種“分而治之”的思想,把一個(gè)大任務(wù)分為若干個(gè)子任務(wù),每一個(gè)子任務(wù)就相對簡單了。在拿到一個(gè)程序模塊以后,根據(jù)程序模塊的功能將它劃分為若干個(gè)子模塊,如果這些子模塊的規(guī)模還嫌大,還再可以劃分為更小的模塊。這個(gè)過程采用自頂向下方法來實(shí)現(xiàn)。子模塊一般不超過50行。劃分子模塊時(shí)應(yīng)注意模塊的獨(dú)立性,即:使一個(gè)模塊完成一項(xiàng)功能,耦合性愈少愈好。
模塊設(shè)計(jì)的方法:自上而下的編程方法基本步驟(1)首先對你所面臨的問題進(jìn)行精確描述,即你遇到的到底是什么問題;(2)定義輸入輸出量,即分析我們的目的是什么和現(xiàn)有的條件;(3)設(shè)計(jì)算法,逐層分解,逐步求精,這是做事情的一個(gè)過程,大部分人做事出錯(cuò)就出在這個(gè)地方,懶得到逐層分解,逐步求精,總是妄想一步登天;(4)把算法轉(zhuǎn)化為程序語言,這一步是踏踏實(shí)實(shí)做的過程,沒有這一步你什么也做不成。(5)檢測程序,我們做的東西是否正確,不正確檢測錯(cuò)誤。這一步是需要耐心的,不要怕錯(cuò)誤,每一次檢測都會讓你提高。做事時(shí),不要因一些錯(cuò)誤而畏縮不前。自上而下的編程方法基本步驟軟件生命周期由軟件定義、軟件開發(fā)和運(yùn)行維護(hù)(也稱為軟件維護(hù))3個(gè)時(shí)期組成。軟件定義時(shí)期通常進(jìn)一步劃分成3個(gè)階段,即問題定義、可行性研究和需求分析。開發(fā)時(shí)期通常由下述4個(gè)階段組成:總體設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼和單元測試,綜合測試。其中前兩個(gè)階段又稱為系統(tǒng)設(shè)計(jì),后兩個(gè)階段又稱為系統(tǒng)實(shí)現(xiàn)。維護(hù)時(shí)期的主要任務(wù)是使軟件持久地滿足用戶的需要。通常對維護(hù)時(shí)期不再進(jìn)一步劃分階段,但是每一次維護(hù)活動本質(zhì)上都是一次壓縮和簡化了的定義和開發(fā)過程。1.3軟件生命周期軟件生命周期由軟件定義、軟件開發(fā)和運(yùn)行維護(hù)(也稱為軟件維護(hù))軟件生命周期每個(gè)階段的基本任務(wù)。問題定義可行性研究3.需求分析總體設(shè)計(jì)詳細(xì)設(shè)計(jì)編碼和單元測試綜合測試軟件維護(hù)軟件生命周期每個(gè)階段的基本任務(wù)。時(shí)期階段關(guān)鍵問題問題定義問題定義問題是什么?可行性研究有可行的解嗎?需求分析系統(tǒng)必須做什么?開發(fā)系統(tǒng)設(shè)計(jì)總體設(shè)計(jì)概括地說,應(yīng)該如何解決這個(gè)問題?詳細(xì)設(shè)計(jì)怎樣具體地實(shí)現(xiàn)這個(gè)系統(tǒng)?系統(tǒng)實(shí)現(xiàn)編碼和單元測試正確的程序模塊綜合測試符合要求的軟件維護(hù)維護(hù)持久地滿足用戶需要的軟件時(shí)期階段關(guān)鍵問題問題問題定義問題是什么?可行性研究有可第2章可行性研究2.1可行性研究的任務(wù)2.2可行性研究過程2.3成本/效益分析第2章可行性研究2.1可行性研究的任務(wù)可行性研究的目的,就是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問題是否能夠解決。標(biāo)準(zhǔn):系統(tǒng)完成后所能帶來的效益是否大到值得投資開發(fā)這個(gè)系統(tǒng)的程度。(資本回報(bào))2.1可行性研究的任務(wù)可行性研究的目的,就是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問題技術(shù)可行性技術(shù)風(fēng)險(xiǎn)分析技術(shù)解決方案的實(shí)用性
使用的技術(shù)實(shí)用化程度技術(shù)解決方案合理程度技術(shù)資源的可用性
參與人員的工作基礎(chǔ)基礎(chǔ)硬件/軟件的可用性軟件工具實(shí)用性開發(fā)設(shè)計(jì)過程-課件用戶操作可行性用戶類型
外行型熟練型專家型操作習(xí)慣使用單位的計(jì)算機(jī)使用情況使用單位的規(guī)章制度用戶操作可行性第3章需求分析3.1需求分析的任務(wù)3.2與用戶溝通獲取需求的方法3.3軟件需求規(guī)格說明3.4實(shí)體-聯(lián)系圖3.5驗(yàn)證軟件需求第3章需求分析3.1需求分析的任務(wù)通信錄問題定義:以文件的方式保存用戶錄入的通訊錄數(shù)據(jù)供用戶查詢和使用通訊錄信息通信錄問題定義:通信錄功能需求:
記錄項(xiàng)的基本屬性:姓名、性別、住址、聯(lián)系電話、電子郵件等通信錄功能需求:姓名、性別、住址、聯(lián)系電話、電子郵件等通信錄功能需求:錄入:操作添加一條新的記錄項(xiàng)刪除:刪除一條已經(jīng)存在的記錄項(xiàng)修改:改變記錄項(xiàng)的一個(gè)或多個(gè)屬性,并用新的記錄項(xiàng)覆蓋已經(jīng)存在的記錄項(xiàng)查找:根據(jù)用戶輸入的屬性值查找符合條件的記錄項(xiàng)通信錄功能需求:刪除:刪除一條已經(jīng)存在的記錄項(xiàng)修改:改變記通信錄功能需求:通訊錄數(shù)據(jù)以文件形式存儲在磁盤上,根據(jù)實(shí)際需要定義文件的存儲格式;在程序運(yùn)行中需要對文件進(jìn)行讀取操作。程序中還要對輸入數(shù)據(jù)的容錯(cuò)性進(jìn)行檢查,可以保證通訊錄數(shù)據(jù)的合法性。通信錄功能需求:程序中還要對輸入數(shù)據(jù)的容錯(cuò)性進(jìn)行檢查,第4章總體設(shè)計(jì)4.1設(shè)計(jì)過程4.2設(shè)計(jì)原理4.3描繪軟件結(jié)構(gòu)的圖形工具第4章總體設(shè)計(jì)4.1設(shè)計(jì)過程總體設(shè)計(jì)的基本目的就是回答“概括地說,系統(tǒng)應(yīng)該如何實(shí)現(xiàn)?”這個(gè)問題,因此,總體設(shè)計(jì)又稱為概要設(shè)計(jì)或初步設(shè)計(jì)??傮w設(shè)計(jì)階段的另一項(xiàng)重要任務(wù)是設(shè)計(jì)軟件的結(jié)構(gòu),也就是要確定系統(tǒng)中每個(gè)程序是由哪些模塊組成的,以及這些模塊相互間的關(guān)系??傮w設(shè)計(jì)的基本目的就是回答“概括地說,系統(tǒng)應(yīng)該如何實(shí)現(xiàn)?”這典型的總體設(shè)計(jì)過程包括下述9個(gè)步驟:設(shè)想供選擇的方案選取合理的方案推薦最佳方案功能分解5.設(shè)計(jì)軟件結(jié)構(gòu)6.設(shè)計(jì)數(shù)據(jù)庫7.制定測試計(jì)劃8.書寫文檔(系統(tǒng)說明、用戶手冊、測試計(jì)劃、詳細(xì)的實(shí)現(xiàn)計(jì)劃、數(shù)據(jù)庫設(shè)計(jì)結(jié)果)9.審查和復(fù)審4.1設(shè)計(jì)過程典型的總體設(shè)計(jì)過程包括下述9個(gè)步驟:4.1設(shè)計(jì)過程過程、函數(shù)、子程序和宏等,都可作為模塊。模塊化就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來構(gòu)成一個(gè)整體,可以完成指定的功能滿足用戶的需求。采用模塊化原理可以使軟件結(jié)構(gòu)清晰,能夠提高軟件的可靠性和可修改性,也有助于軟件開發(fā)工程的組織管理。4.2設(shè)計(jì)原理
4.2.1模塊化過程、函數(shù)、子程序和宏等,都可作為模塊。4.2設(shè)計(jì)原理
信息隱藏原理指出:應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個(gè)模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。局部化有助于實(shí)現(xiàn)信息隱藏,隱藏的不是有關(guān)模塊的一切信息,而是模塊的實(shí)現(xiàn)細(xì)節(jié)。4.2.2信息隱藏和局部化信息隱藏原理指出:應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個(gè)模塊內(nèi)包含開發(fā)具有獨(dú)立功能而且和其他模塊之間沒有過多的相互作用的模塊,就可以做到模塊獨(dú)立。換句話說,希望這樣設(shè)計(jì)軟件結(jié)構(gòu),使得每個(gè)模塊完成一個(gè)相對獨(dú)立的特定子功能,并且和其他模塊之間的關(guān)系很簡單。模塊的獨(dú)立性很重要,有兩條理由:第一,有效的模塊化(即具有獨(dú)立的模塊)的軟件比較容易開發(fā)出來。第二,獨(dú)立的模塊比較容易測試和維護(hù)??傊?,模塊獨(dú)立是好設(shè)計(jì)的關(guān)鍵,而設(shè)計(jì)又是決定軟件質(zhì)量的關(guān)鍵環(huán)節(jié)。4.2.3模塊獨(dú)立開發(fā)具有獨(dú)立功能而且和其他模塊之間沒有過多的相互作用的模塊,通信錄的模塊結(jié)構(gòu)圖4.3描繪軟件結(jié)構(gòu)的圖形工具
通信錄的模塊結(jié)構(gòu)圖4.3描繪軟件結(jié)構(gòu)的圖形工具
通信錄功能需求:錄入:操作添加一條新的記錄項(xiàng)刪除:刪除一條已經(jīng)存在的記錄項(xiàng)修改:改變記錄項(xiàng)的一個(gè)或多個(gè)屬性,并用新的記錄項(xiàng)覆蓋已經(jīng)存在的記錄項(xiàng)查找:根據(jù)用戶輸入的屬性值查找符合條件的記錄項(xiàng)通信錄功能需求:刪除:刪除一條已經(jīng)存在的記錄項(xiàng)修改:改變記通信錄功能需求:通訊錄數(shù)據(jù)以文件形式存儲在磁盤上,根據(jù)實(shí)際需要定義文件的存儲格式;在程序運(yùn)行中需要對文件進(jìn)行讀取操作。程序中還要對輸入數(shù)據(jù)的容錯(cuò)性進(jìn)行檢查,可以保證通訊錄數(shù)據(jù)的合法性。通信錄功能需求:程序中還要對輸入數(shù)據(jù)的容錯(cuò)性進(jìn)行檢查,通信錄的模塊結(jié)構(gòu)圖輸入輸出終端輸入輸出模塊管理模塊文件操作模塊存儲文件用戶輸入系統(tǒng)輸出文件寫入文件讀出4.3描繪軟件結(jié)構(gòu)的圖形工具
通信錄的模塊結(jié)構(gòu)圖輸入輸出終端輸入輸出模塊管理模塊文件操作模4.3.1層次圖層次圖用來描繪軟件的層次結(jié)構(gòu)。層次圖中的一個(gè)矩形框代表一個(gè)模塊,方框間的連線表示調(diào)用關(guān)系。4.3.1層次圖層次圖用來描繪軟件的層次結(jié)構(gòu)。第5章詳細(xì)設(shè)計(jì)5.1結(jié)構(gòu)程序設(shè)計(jì)5.2人機(jī)界面設(shè)計(jì)5.3過程設(shè)計(jì)的工具第5章詳細(xì)設(shè)計(jì)5.1結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)程序設(shè)計(jì)的概念最早由E.W.Dijkstra提出。1966年Bohm和Jacopini證明了,只用3種基本的控制結(jié)構(gòu)就能實(shí)現(xiàn)任何單入口單出口的程序。這3種基本的控制結(jié)構(gòu)是“順序”、“選擇”和“循環(huán)”。5.1結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)程序設(shè)計(jì)的概念最早由E.W.Dijkstra提出。5.13種基本的控制結(jié)構(gòu)開發(fā)設(shè)計(jì)過程-課件出于要有一種不允許違背結(jié)構(gòu)程序設(shè)計(jì)精神的圖形工具的考慮,Nassi和Shneiderman提出了盒圖,又稱為N-S圖。它有下述特點(diǎn):(1)不可能任意轉(zhuǎn)移控制。(2)很容易確定局部和全程數(shù)據(jù)的作用域。(3)很容易表現(xiàn)嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。6.3.2盒圖(N-S圖)出于要有一種不允許違背結(jié)構(gòu)程序設(shè)計(jì)精神的圖形工具的考慮,Na圖6.4盒圖的基本符號開發(fā)設(shè)計(jì)過程-課件PAD是問題分析圖(problemanalysisdiagram)的英文縮寫,自1973年由日本日立公司發(fā)明以后,已得到一定程度的推廣。它用二維樹形結(jié)構(gòu)的圖來表示程序的控制流,將這種圖翻譯成程序代碼比較容易。6.3.3PAD圖PAD是問題分析圖(problemanalysisdia圖6.5PAD圖的基本符號開發(fā)設(shè)計(jì)過程-課件下面以行李托運(yùn)費(fèi)的算法為例說明判定表的組織方法。假設(shè)某航空公司規(guī)定,乘客可以免費(fèi)托運(yùn)重量不超過30kg的行李。當(dāng)行李重量超過30kg時(shí),對頭等艙的國內(nèi)乘客超重部分每公斤收費(fèi)4元,對其他艙的國內(nèi)乘客超重部分每公斤收費(fèi)6元,對外國乘客超重部分每公斤收費(fèi)比國內(nèi)乘客多一倍,對殘疾乘客超重部分每公斤收費(fèi)比正常乘客少一半。用判定表可以清楚地表示與上述每種條件組合相對應(yīng)的計(jì)算行李費(fèi)的算法,如表6.1(見書118頁)所示。下面以行李托運(yùn)費(fèi)的算法為例說明判定表的組織方法。假設(shè)某航空公
用判定樹表示計(jì)算行李費(fèi)的算法開發(fā)設(shè)計(jì)過程-課件5.2.1設(shè)計(jì)問題系統(tǒng)響應(yīng)時(shí)間、用戶幫助設(shè)施、出錯(cuò)信息處理和命令交互。1.系統(tǒng)響應(yīng)時(shí)間一般說來,系統(tǒng)響應(yīng)時(shí)間指從用戶完成某個(gè)控制動作(例如,按回車鍵或點(diǎn)擊鼠標(biāo)),到軟件給出預(yù)期的響應(yīng)(輸出信息或做動作)之間的這段時(shí)間。2.用戶幫助設(shè)施設(shè)計(jì)幫助設(shè)施時(shí)要解決的問題(見下頁)5.2人機(jī)界面設(shè)計(jì)5.2.1設(shè)計(jì)問題5.2人機(jī)界面設(shè)計(jì)3.出錯(cuò)信息處理出錯(cuò)信息和警告信息,是出現(xiàn)問題時(shí)交互式系統(tǒng)給出的“壞消息”。一般說來,交互式系統(tǒng)給出的出錯(cuò)信息或警告信息,應(yīng)該具有下述屬性。(1)信息應(yīng)該用用戶可以理解的術(shù)語描述問題。(2)信息應(yīng)該提供有助于從錯(cuò)誤中恢復(fù)的建設(shè)性意見。(3)信息應(yīng)該指出錯(cuò)誤可能導(dǎo)致哪些負(fù)面后果。(4)信息應(yīng)該伴隨著聽覺上或視覺上的提示。(5)信息不能帶有指責(zé)色彩。3.出錯(cuò)信息處理4.命令交互命令行曾經(jīng)是用戶和系統(tǒng)軟件交互的最常用的方式,現(xiàn)在面向窗口的、點(diǎn)擊和拾取方式的界面已經(jīng)減少了用戶對命令行的依賴。4.命令交互通訊錄界面設(shè)計(jì):通訊錄界面設(shè)計(jì):通訊錄界面設(shè)計(jì):通訊錄界面設(shè)計(jì):通信錄功能需求:
記錄項(xiàng)的基本屬性:姓名、性別、住址、聯(lián)系電話、電子郵件等通信錄功能需求:姓名、性別、住址、聯(lián)系電話、電子郵件等通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):
structmyrecord{ unsignedintnum; unsignedintgroup; charname[MAXLEN+1]; chargender; datebirthday; charaddress[MAXLEN+1]; charphone[MAXLEN+1]; charemail[MAXLEN+1];};通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):
structmydate{ unsignedintyear; unsignedintmonth; unsignedintday;};typedefstructmydatedate;通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):三個(gè)查詢關(guān)鍵字:記錄編號、組別和聯(lián)系人姓名
unionmysearch_entry{ unsignedintnum; unsignedintgroup; charname[MAXLEN+1];};typedefunionmysearch_entrysearch_entry;通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):通訊錄-函數(shù)設(shè)計(jì)函數(shù)原型函數(shù)功能函數(shù)處理描述voidmenulist(void)以文本方式顯示程序主菜單,同時(shí)響應(yīng)用戶輸入調(diào)用bioske(0),獲取按鍵的值voidupbar(inty)向上滾動光標(biāo)條通過改變字體顏色實(shí)現(xiàn)光標(biāo)條移動voiddownbar(inty) 向下滾動光標(biāo)條通過改變字體顏色實(shí)現(xiàn)光標(biāo)條移動voidmydelay(void)等待用戶響應(yīng)調(diào)用getch()實(shí)現(xiàn)voidformat(void)結(jié)果輸出時(shí)打印輸出的格式信息調(diào)用printf()實(shí)現(xiàn)voidsearchmenu(void)輸出查詢功能的子菜單調(diào)用printf()實(shí)現(xiàn)voidinput_search(charch)處理查詢時(shí)用戶的輸入,將關(guān)鍵字讀入根據(jù)輸入?yún)?shù)ch,執(zhí)行相應(yīng)的操作menu.c輸入輸出文件通訊錄-函數(shù)設(shè)計(jì)函數(shù)原型函數(shù)功能函數(shù)處理描述voidmen通訊錄-函數(shù)設(shè)計(jì)函數(shù)原型函數(shù)功能函數(shù)處理描述intinput_num(void)讀入一個(gè)整型數(shù)值(記錄編號),進(jìn)行合法性檢查采用了遞歸的方法循環(huán)讀取數(shù)據(jù)intinput_new(myrecord*p)進(jìn)行數(shù)據(jù)修改時(shí),讀入一個(gè)新的記錄項(xiàng),并用它覆蓋輸入?yún)?shù)所指向的數(shù)據(jù)記錄項(xiàng)。參數(shù):新記錄項(xiàng)的指針返回值:返回是否進(jìn)行了修改的信息,已修改返回1,否則返回0。myrecord*input_app(void)錄入信息時(shí)處理鍵盤輸入,對輸入進(jìn)行合法性檢查逐項(xiàng)錄入通訊記錄intdate_legal(intyear,intmonth,intday)檢查日期是否為合法參數(shù):年、月、日的信息返回值:合法日期返回1,否則返回0menu.c輸入輸出文件通訊錄-函數(shù)設(shè)計(jì)函數(shù)原型函數(shù)功能函數(shù)處理描述intinpu通訊錄-函數(shù)設(shè)計(jì)file.c文件處理文件intfile_app(myrecord*p)添加一條新的記錄項(xiàng)參數(shù):要錄入的記錄項(xiàng)的指針返回值:操作結(jié)果(插入成功返回1,失敗返回0)myrecord*read_record(intn)從文件中讀出下標(biāo)為n的塊(記錄項(xiàng))參數(shù):下標(biāo)值返回值:讀取結(jié)果的指針intwrite_record(myrecord*p,intn)向文件中寫入某一塊(如果該塊已經(jīng)存在,將進(jìn)行覆蓋)參數(shù):指向記錄項(xiàng)的指針和要寫入的塊位置返回值:操作結(jié)果(插入成功返回1,失敗返回0)intfile_search(search_entry*s,intf)對存儲文件進(jìn)行遍歷,查找符合輸入的記錄項(xiàng)并輸出參數(shù):指向查詢項(xiàng)的指針和查詢類型返回值:符合條件的記錄項(xiàng)總數(shù)(如果是0則查找失?。﹊ntfile_delete(intn)刪除文件中某個(gè)記錄塊參數(shù):下標(biāo)值返回值:操作結(jié)果(插入成功返回1,失敗返回0)通訊錄-函數(shù)設(shè)計(jì)file.c文件處理文件intfile_a通訊錄-函數(shù)設(shè)計(jì)control.c控制文件voidappend(void)執(zhí)行數(shù)據(jù)錄入操作調(diào)用input_app()完成數(shù)據(jù)錄入,調(diào)用file_app()完成數(shù)據(jù)保存。voiddelet(void)執(zhí)行數(shù)據(jù)記錄項(xiàng)刪除操作調(diào)用file_search查找要刪除的記錄,然后調(diào)用file_delete()進(jìn)行刪除voidsearch(void)執(zhí)行數(shù)據(jù)查找操作調(diào)用searchmenu()進(jìn)入查找的菜單,調(diào)用input_search(ch)獲得要查找的內(nèi)容,file_search()進(jìn)行查找voidchange(void)執(zhí)行數(shù)據(jù)記錄項(xiàng)修改操作調(diào)用input_num()輸入待修改的記錄,調(diào)用file_search()進(jìn)行查找,調(diào)用input_new()輸入新的內(nèi)容,調(diào)用write_record()進(jìn)行更新voidlist_all(void)列出當(dāng)前所有聯(lián)系人信息打開文件,遍歷所有記錄并輸出voidinit(void)系統(tǒng)初試化操作,保證文件的正確性和合法性調(diào)用fopen()打開文件,初始化voidquit(void)系統(tǒng)退出函數(shù),寫回文件以保證數(shù)據(jù)的一致性關(guān)閉文件,退出系統(tǒng)通訊錄-函數(shù)設(shè)計(jì)control.c控制文件voidappe通訊錄的某個(gè)模塊的流程圖通訊錄的某個(gè)模塊的流程圖第6章實(shí)現(xiàn)6.1編碼6.2軟件測試基礎(chǔ)6.3白盒測試技術(shù)6.4黑盒測試技術(shù)6.5調(diào)試6.6軟件可靠性第6章實(shí)現(xiàn)6.1編碼通常把編碼和測試統(tǒng)稱為實(shí)現(xiàn)。所謂編碼就是把軟件設(shè)計(jì)結(jié)果翻譯成用某種程序設(shè)計(jì)語言書寫的程序。測試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤,它是對軟件規(guī)格說明、設(shè)計(jì)和編碼的最后復(fù)審。通常在編寫出每個(gè)模塊之后就對它做必要的測試(稱為單元測試),編碼和單元測試屬于軟件生命周期的同一個(gè)階段。在這個(gè)階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測試。通過測試發(fā)現(xiàn)錯(cuò)誤之后還必須診斷并改正錯(cuò)誤,這就是調(diào)試的目的。通常把編碼和測試統(tǒng)稱為實(shí)現(xiàn)。適宜的程序設(shè)計(jì)語言能使根據(jù)設(shè)計(jì)去完成編碼時(shí)困難最少,可以減少需要的程序測試量,并且可以得出更容易閱讀和更容易維護(hù)的程序。由于軟件系統(tǒng)的絕大部分成本用在生命周期的測試和維護(hù)階段,所以容易測試和容易維護(hù)是極端重要的。6.1編碼
6.1.1選擇程序設(shè)計(jì)語言適宜的程序設(shè)計(jì)語言能使根據(jù)設(shè)計(jì)去完成編碼時(shí)困難最少,可以減少總的說來,高級語言明顯優(yōu)于匯編語言,因此,除了在很特殊的應(yīng)用領(lǐng)域,或者大型系統(tǒng)中執(zhí)行時(shí)間非常關(guān)鍵的一小部分代碼需要用匯編語言書寫之外,其他程序應(yīng)該一律用高級語言書寫。高級語言應(yīng)該有理想的模塊化機(jī)制,以及可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);語言特點(diǎn)應(yīng)該使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯(cuò)誤;總的說來,高級語言明顯優(yōu)于匯編語言,因此,除了在很特殊的應(yīng)用程序設(shè)計(jì)語言的實(shí)用標(biāo)準(zhǔn):(1)可以得到的軟件工具。(2)工程規(guī)模。(3)程序員的知識。(4)軟件可移植性要求。(5)軟件的應(yīng)用領(lǐng)域。程序設(shè)計(jì)語言的實(shí)用標(biāo)準(zhǔn):源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個(gè)重要標(biāo)準(zhǔn)。程序內(nèi)部的文檔6.1.2編碼風(fēng)格源程序代碼的邏輯簡明清晰、易讀易懂是好程序的6.1.2編源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個(gè)重要標(biāo)準(zhǔn)。程序內(nèi)部的文檔包括恰當(dāng)?shù)臉?biāo)志符、適當(dāng)?shù)淖⒔夂统绦虻囊曈X組織。選取含義鮮明的名字,有助于閱讀者理解程序,如果用縮寫,那么縮寫規(guī)則應(yīng)該一致,并且應(yīng)該給每個(gè)名字加注解。正確的注解非常有助于對程序的理解。通常在每個(gè)模塊開始處有一段序言性的注解,簡要描述模塊的功能、主要算法、接口特點(diǎn)、重要數(shù)據(jù)以及開發(fā)簡史。在模塊內(nèi)部,對于重要語句或分支應(yīng)該注解。對全局變量做注釋。程序清單的布局對于程序的可讀性也有很大影響,應(yīng)該利用階梯形式使程序的結(jié)構(gòu)清晰明顯。函數(shù)間增加空行以示分隔6.1.2編碼風(fēng)格源程序代碼的邏輯簡明清晰、易讀易懂是好程序的6.1.2編源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個(gè)重要標(biāo)準(zhǔn)。
全局變量——應(yīng)該“有限制地使用全局變量”。使用全局變量過多,會降低程序的清晰性;降低函數(shù)的通用性;濫用全局變量會造成程序的混亂函數(shù)——“工欲善其事,必先利其器”。我們在編寫大型程序時(shí),要善于利用已有的函數(shù),以減少重復(fù)編寫程序段的工作量6.1.2編碼風(fēng)格源程序代碼的邏輯簡明清晰、易讀易懂是好程序的6.1.2編/************************************************************//*函數(shù)原型:myrecord*input_app(void);*//*參數(shù):無*//*返回值:新增的記錄項(xiàng)的地址*//*函數(shù)功能:錄入信息時(shí)處理鍵盤輸入,對輸入進(jìn)行合法性檢查。*//*************************************************************/myrecord*input_app(void){ intt; chars[100],c; system("cls"); while(1)/* 輸入分組 */ { printf(" group(1-10):"); scanf("%d",&t); if(t<1||t>10) { printf("invalidinput!\n"); continue; } input.group=t; break; } while(1)/* 輸入姓名 */ { printf(" name:"); scanf("%s",&s); if(strlen(s)>MAXLEN) { printf("toolong!\n"); continue; } strcpy(,s); break; } while(1)/* 輸入性別 */ { printf(" gender(F/M):"); scanf("%s",&s); if(strlen(s)>1) { printf("invalidinput!\n"); continue; } c=s[0]; if(c!='F'&&c!='f'&&c!='M'&&c!='m') { printf("invalidinput!\n"); continue; } input.gender=toupper(c); break; } while(1)/* 輸入出生日期 */ { printf(" brithday-year(1900-2007):"); scanf("%d",&t); if(t<1900||t>2007) { printf("invalidinput!\n"); continue; } input.birthday.year=t; break; } while(1) { printf(" brithday-month(1-12):"); scanf("%d",&t); if(t<1||t>12) { printf("invalidinput!\n"); continue; } input.birthday.month=t; break; } while(1) { printf(" brithday-day(1-31):"); scanf("%d",&t); if(!date_legal(input.birthday.year,input.birthday.month,t)) { printf("invalidinput!\n"); continue; } input.birthday.day=t; break; } while(1)/* 輸入地址 */ { printf(" address:"); scanf("%s",&s); if(strlen(s)>MAXLEN) { printf("toolong!\n"); continue; } strcpy(input.address,s); break; } while(1)/* 輸入電話號碼 */ { printf(" phone:"); scanf("%s",&s); if(strlen(s)>MAXLEN) { printf("toolong!\n"); continue; } strcpy(input.phone,s); break; } while(1)/* 輸入email */ { printf(" email:"); scanf("%s",&s); if(strlen(s)>MAXLEN) { printf("toolong!\n"); continue; } strcpy(input.email,s); break; } return&input;}6.1.2編碼風(fēng)格/*****************************軟件測試的目的與軟件工程所有其他階段的目的都相反。在測試階段測試人員努力設(shè)計(jì)出一系列測試方案,目的是為了竭力證明程序中有錯(cuò)誤不能按照預(yù)定要求正確工作。6.2軟件測試基礎(chǔ)軟件測試的目的與軟件工程所有其他階段的目的都相反。在測試階段測試任何產(chǎn)品都有兩種方法:如果已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過測試來檢驗(yàn)是否每個(gè)功能都能正常使用;如果知道產(chǎn)品的內(nèi)部工作過程,可以通過測試來檢驗(yàn)產(chǎn)品內(nèi)部動作是否按照規(guī)格說明書的規(guī)定正常進(jìn)行。前一種方法稱為黑盒測試,后一種方法稱為白盒測試。6.2.1測試方法測試任何產(chǎn)品都有兩種方法:如果已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能對于軟件測試而言,黑盒測試法把程序看作一個(gè)黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。黑盒測試又稱為功能測試。白盒測試法與黑盒測試法相反,它的前提是可以把程序看成裝在一個(gè)透明的白盒子里,測試者完全知道程序的結(jié)構(gòu)和處理算法。白盒測試又稱為結(jié)構(gòu)測試。對于軟件測試而言,黑盒測試法把程序看作一個(gè)黑盒子,完全不考慮如果一個(gè)軟件是為許多客戶開發(fā)的,讓每個(gè)客戶都進(jìn)行正式的驗(yàn)收測試是不現(xiàn)實(shí)的。在這種情況下,絕大多數(shù)軟件開發(fā)商都使用被稱為Alpha測試和Beta測試的過程,來發(fā)現(xiàn)那些看起來只有最終用戶才能發(fā)現(xiàn)的錯(cuò)誤。6.2.2Alpha和Beta測試如果一個(gè)軟件是為許多客戶開發(fā)的,讓每個(gè)客戶都進(jìn)行正式的驗(yàn)收測Alpha測試由用戶在開發(fā)者的場所進(jìn)行,并且在開發(fā)者對用戶的“指導(dǎo)”下進(jìn)行測試。開發(fā)者負(fù)責(zé)記錄發(fā)現(xiàn)的錯(cuò)誤和使用中遇到的問題??傊?,Alpha測試是在受控的環(huán)境中進(jìn)行的。Beta測試由軟件的最終用戶們在一個(gè)或多個(gè)客戶場所進(jìn)行。與Alpha測試不同,開發(fā)者通常不在Beta測試的現(xiàn)場,因此,Beta測試是軟件在開發(fā)者不能控制的環(huán)境中的“真實(shí)”應(yīng)用。開發(fā)設(shè)計(jì)過程-課件所謂測試方案包括具體的測試目的、應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果。通常又把測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測試用例。其中最困難的問題是設(shè)計(jì)測試用的輸入數(shù)據(jù)。因?yàn)椴豢赡苓M(jìn)行窮盡的測試,選用少量“最有效的”測試數(shù)據(jù),做到盡可能完備的測試很重要。設(shè)計(jì)測試方案的基本目標(biāo)是,確定一組最可能發(fā)現(xiàn)某個(gè)錯(cuò)誤或某類錯(cuò)誤的測試數(shù)據(jù)。6.3白盒測試技術(shù)所謂測試方案包括具體的測試目的、應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)有選擇地執(zhí)行程序中某些最有代表性的通路是對窮盡測試的惟一可行的替代辦法。6.3.1邏輯覆蓋有選擇地執(zhí)行程序中某些最有代表性的通路是對窮盡測試的惟一可行1.語句覆蓋為了暴露程序中的錯(cuò)誤,至少每個(gè)語句應(yīng)該執(zhí)行一次。A=2,B=0,X=42.判定覆蓋判定覆蓋又叫分支覆蓋,它的含義是,不僅每個(gè)語句必須至少執(zhí)行一次,而且每個(gè)判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一次,也就是每個(gè)判定的每個(gè)分支都至少執(zhí)行一次。A=3,B=0,X=3;A=2,B=1,X=13.條件覆蓋條件覆蓋的含義是,不僅每個(gè)語句至少執(zhí)行一次,而且使判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果。A=2,B=0,X=4;A=1,B=1,X=11.語句覆蓋A=2,B=0,X=4語句覆蓋A=3,B=0,X=3;A=2,B=1,X=1判定覆蓋A=2,B=0,X=4語句覆蓋A=3,B=0,X=3;A=21.語句覆蓋為了暴露程序中的錯(cuò)誤,至少每個(gè)語句應(yīng)該執(zhí)行一次。A=2,B=0,X=42.判定覆蓋判定覆蓋又叫分支覆蓋,它的含義是,不僅每個(gè)語句必須至少執(zhí)行一次,而且每個(gè)判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一次,也就是每個(gè)判定的每個(gè)分支都至少執(zhí)行一次。1.語句覆蓋3.條件覆蓋條件覆蓋的含義是,不僅每個(gè)語句至少執(zhí)行一次,而且使判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果。A=2,B=0,X=4;A=1,B=1,X=13.條件覆蓋A=2,B=0,X=4;A=1,B=1,X=14.判定/條件覆蓋選取足夠多的測試數(shù)據(jù),使得判定表達(dá)式中的每個(gè)條件都取到各種可能的值,而且每個(gè)判定表達(dá)式也都取到各種可能的結(jié)果。A=2,B=0,X=4;A=1,B=1,X=15.條件組合覆蓋條件組合覆蓋是更強(qiáng)的邏輯覆蓋標(biāo)準(zhǔn),它要求選取足夠多的測試數(shù)據(jù),使得每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。A=2,B=0,X=4;A=2,B=1,X=1;A=1,B=0,X=2;A=1,B=1,X=14.判定/條件覆蓋6.點(diǎn)覆蓋滿足點(diǎn)覆蓋標(biāo)準(zhǔn)要求選取足夠多的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖的每個(gè)結(jié)點(diǎn)一次,由于流圖的每個(gè)結(jié)點(diǎn)與一條或多條語句相對應(yīng)。點(diǎn)覆蓋標(biāo)準(zhǔn)和語句覆蓋標(biāo)準(zhǔn)是相同的。7.邊覆蓋為了滿足邊覆蓋的測試標(biāo)準(zhǔn),要求選取足夠多測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條邊一次。通常邊覆蓋和判定覆蓋是一致的。8.路徑覆蓋路徑覆蓋的含義是,選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個(gè)環(huán)至少經(jīng)過一次)。6.點(diǎn)覆蓋黑盒測試著重測試軟件功能。黑盒測試并不能取代白盒測試,它是與白盒測試互補(bǔ)的測試方法,它很可能發(fā)現(xiàn)白盒測試不易發(fā)現(xiàn)的其他類型的錯(cuò)誤。黑盒測試力圖發(fā)現(xiàn)下述類型的錯(cuò)誤:①功能不正確或遺漏了功能;②界面錯(cuò)誤;③數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部數(shù)據(jù)庫訪問錯(cuò)誤;④性能錯(cuò)誤;⑤初始化和終止錯(cuò)誤。6.4黑盒測試技術(shù)黑盒測試著重測試軟件功能。黑盒測試并不能取代白盒測試,它是與白盒測試在測試過程的早期階段進(jìn)行,而黑盒測試主要用于測試過程的后期。設(shè)計(jì)黑盒測試方案時(shí),應(yīng)該考慮下述問題:(1)怎樣測試功能的有效性?(2)哪些類型的輸入可構(gòu)成好測試用例?(3)怎樣劃定數(shù)據(jù)類的邊界?(4)系統(tǒng)能夠承受什么樣的數(shù)據(jù)率和數(shù)據(jù)量?(5)數(shù)據(jù)的特定組合將對系統(tǒng)運(yùn)行產(chǎn)生什么影響?白盒測試在測試過程的早期階段進(jìn)行,而黑盒測試主要用于測試過程應(yīng)用黑盒測試技術(shù),能夠設(shè)計(jì)出滿足下述標(biāo)準(zhǔn)的測試用例集:(1)所設(shè)計(jì)出的測試用例能夠減少為達(dá)到合理測試所需要設(shè)計(jì)的測試用例的總數(shù);(2)所設(shè)計(jì)出的測試用例能夠告訴我們,是否存在某些類型的錯(cuò)誤,而不是僅僅指出與特定測試相關(guān)的錯(cuò)誤是否存在。應(yīng)用黑盒測試技術(shù),能夠設(shè)計(jì)出滿足下述標(biāo)準(zhǔn)的測試用例集:調(diào)試是在測試發(fā)現(xiàn)錯(cuò)誤之后排除錯(cuò)誤的過程,雖然調(diào)試應(yīng)該而且可以是一個(gè)有序過程,但是,目前它在很大程度上仍然是需要技巧和經(jīng)驗(yàn)。6.5調(diào)試調(diào)試是在測試發(fā)現(xiàn)錯(cuò)誤之后排除錯(cuò)誤的過程,雖然調(diào)試應(yīng)該而且可以調(diào)試過程總會有以下兩種結(jié)果之一:①找到了問題的原因并把問題改正和排除掉了;②沒找出問題的原因。在后一種情況下,調(diào)試人員可以猜想一個(gè)原因,并設(shè)計(jì)測試用例來驗(yàn)證這個(gè)假設(shè),重復(fù)此過程直至找到原因并改正了錯(cuò)誤。6.5.1調(diào)試過程調(diào)試過程總會有以下兩種結(jié)果之一:①找到了問題的原因并把問題圖7.8調(diào)試過程開發(fā)設(shè)計(jì)過程-課件調(diào)試是軟件開發(fā)過程中最艱巨的腦力勞動,調(diào)試工作之所以困難的原因如下:(1)癥狀和產(chǎn)生癥狀的原因可能在程序中相距甚遠(yuǎn)。(2)當(dāng)改正了另一個(gè)錯(cuò)誤之后,癥狀可能暫時(shí)消失了。(3)癥狀可能實(shí)際上并不是由錯(cuò)誤引起的。(4)癥狀可能是由不易跟蹤的人為錯(cuò)誤引起的。。(5)可能很難重新產(chǎn)生完全一樣的輸入條件。(6)癥狀可能時(shí)有時(shí)無,這種情況在硬件和軟件緊密地耦合在一起的嵌入式系統(tǒng)中特別常見。調(diào)試是軟件開發(fā)過程中最艱巨的腦力勞動,調(diào)試工作之所以困難的原如果用遍了各種調(diào)試方法和調(diào)試工具卻仍然找不出錯(cuò)誤原因,則應(yīng)該向同行求助。在動手改正錯(cuò)誤之前,軟件工程師應(yīng)該仔細(xì)考慮下述3個(gè)問題:是否同樣的錯(cuò)誤也在程序其他地方存在?將要進(jìn)行的修改可能會引入的“下一個(gè)錯(cuò)誤”是什么?為防止今后出現(xiàn)類似的錯(cuò)誤,應(yīng)該做什么?如果用遍了各種調(diào)試方法和調(diào)試工具卻仍然找不出錯(cuò)誤原因,則應(yīng)該1.軟件可靠性的定義軟件可靠性是程序在給定的時(shí)間間隔內(nèi),按照規(guī)格說明書的規(guī)定成功地運(yùn)行的概率。按照IEEE的規(guī)定,術(shù)語“錯(cuò)誤”的含義是由開發(fā)人員造成的軟件差錯(cuò)(bug),而術(shù)語“故障”的含義是由錯(cuò)誤引起的軟件的不正確行為。6.6軟件可靠性
6.6.1基本概念1.軟件可靠性的定義6.6軟件可靠性
6.6.12.軟件的可用性軟件可用性的一個(gè)定義是:軟件可用性是程序在給定的時(shí)間點(diǎn),按照規(guī)格說明書的規(guī)定,成功地運(yùn)行的概率。2.軟件的可用性第7章維護(hù)7.1軟件維護(hù)的定義7.2軟件維護(hù)的特點(diǎn)7.3軟件的可維護(hù)性第7章維護(hù)7.1軟件維護(hù)的定義軟件工程的目的是要提高軟件的可維護(hù)性,減少軟件維護(hù)所需要的工作量,降低軟件系統(tǒng)的總成本。軟件工程的目的是要提高軟件的可維護(hù)性,減少軟件維護(hù)所需要的工所謂軟件維護(hù)就是在軟件已經(jīng)交付使用之后,為了改正錯(cuò)誤或滿足新的需要而修改軟件的過程。1、把診斷和改正錯(cuò)誤的過程稱為改正性維護(hù)。2、適應(yīng)性維護(hù),也就是為了和變化了的環(huán)境適當(dāng)?shù)嘏浜隙M(jìn)行的修改軟件的活動。3、在使用軟
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西紅柿熟了課件
- 蘇教版江蘇省徐州市2023-2024學(xué)年下學(xué)期高二年級第三次檢測數(shù)學(xué)試題
- 六年級數(shù)學(xué)上冊《高頻錯(cuò)題訓(xùn)練》
- 西京學(xué)院《土木工程施工》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024秋期國家開放大學(xué)本科《古代小說戲曲專題》一平臺在線形考(形考任務(wù)4)試題及答案
- 2025屆江西省高三語文試題及答案
- 西京學(xué)院《大數(shù)據(jù)存儲與管理技術(shù)》2022-2023學(xué)年期末試卷
- 西華師范大學(xué)《中國宗教史》2022-2023學(xué)年第一學(xué)期期末試卷
- 圖文《黃昏》課件
- 西華師范大學(xué)《外國歷史要籍研讀》2021-2022學(xué)年第一學(xué)期期末試卷
- 《靈敏素質(zhì)練習(xí)》教案
- 中國文化英語教程Unit-3
- 如何對待父母嘮叨
- 型鋼軋制操作學(xué)習(xí)培訓(xùn)導(dǎo)衛(wèi)安裝與調(diào)整操作課件
- 人教PEP版六年級英語上冊《Unit 4 Part B 第5課時(shí)》教學(xué)課件PPT小學(xué)公開課
- 紅色國潮風(fēng)謝師宴活動策劃PPT模板課件
- 統(tǒng)編版四年級上冊語文課件 - 第五單元 習(xí)作例文 (PPT28頁)
- T∕CSPSTC 69-2021 磷石膏預(yù)處理技術(shù)規(guī)范
- T∕CAWA 002-2021 中國疼痛科專業(yè)團(tuán)體標(biāo)準(zhǔn)
- 鐵精礦管道輸送工藝在鞍鋼礦山的應(yīng)用
- 農(nóng)產(chǎn)品電子商務(wù)平臺建設(shè)項(xiàng)目可行性研究報(bào)告
評論
0/150
提交評論