箱體類零件工藝分析及知識庫研究(減速機(jī))
箱體類零件工藝分析及知識庫研究(減速機(jī)),箱體,零件,工藝,分析,知識庫,研究,減速
學(xué)科門類: 工學(xué) 單位代碼 : 箱體類零件知識庫及工藝模板的研究測試分析報(bào)告學(xué)生姓名于 光 耀所學(xué)專業(yè)機(jī)械設(shè)計(jì)制造及其自動化 班 級建材機(jī)械99(5)班 學(xué) 號 B9912027 指導(dǎo)教師 王 正 剛 鹽城工學(xué)院機(jī)械工程系二三年六月一、設(shè)計(jì)(論文)內(nèi)容 根據(jù)企業(yè)的工藝現(xiàn)狀,對減速器等產(chǎn)品中的箱體類零件進(jìn)行工藝分析,并規(guī)范化,標(biāo)準(zhǔn)化,建立知識框架模型,確定工知識結(jié)構(gòu),根據(jù)所確定的工藝知識結(jié)構(gòu)錄入工藝知識,并建庫保存。建立工藝模板知,首先調(diào)用工藝模板編制模塊,根據(jù)工藝設(shè)計(jì)規(guī)則,編制典型零件的工藝規(guī)程,并以此作為工藝規(guī)程模板。二、設(shè)計(jì)(論文)依據(jù)1、輸送機(jī)滾筒轉(zhuǎn)速為90r/min,減速器輸出功率為3.4kW。2、運(yùn)輸機(jī)連續(xù)工作,單向轉(zhuǎn)動,載荷變化不大,空載起動,減速器小批生產(chǎn),使用年限10年,大修期3年,兩班制工作,運(yùn)輸帶容許速度誤差為5%。3、工藝決策規(guī)則的制定限制的條件為零件的總體信息,型面的特征信息,工藝常規(guī)邏輯,企業(yè)的工藝習(xí)慣等。三、技術(shù)要求1. 對蓋套類零件的工藝術(shù)語、工藝知識、工藝參數(shù)等進(jìn)行規(guī)范化,標(biāo)準(zhǔn)化。2、建立人機(jī)友好的工作界面,便于用戶對工藝知識的獲取、管理與維護(hù)。 3、采用Pro/E對零件進(jìn)行三維造型。 4、數(shù)據(jù)庫采用SQL Server2000,開發(fā)工具采用Delphi6.0/7.0。.四.畢業(yè)設(shè)計(jì)(論文)物化成果的具體內(nèi)容及要求(具體內(nèi)容參照機(jī)械工程系畢業(yè)設(shè)計(jì)大綱及實(shí)施細(xì)則的有關(guān)要求填寫)圖紙內(nèi)容及張數(shù) 減速器裝配圖 1 張(A0) 零件圖 46張(A1A2)-實(shí)物內(nèi)容及要求 完成滿足該系統(tǒng)要求的原型系統(tǒng) 其他:1、完成設(shè)計(jì)說明書1份(字?jǐn)?shù)在2萬字以上) 2、軟件測試分析報(bào)告各一份。3、零件三維造型35個(gè)。4、源程序代碼1份。5、典型零件工藝模板1套。五. 畢業(yè)設(shè)計(jì)(論文)進(jìn)度計(jì)劃起訖日期工作內(nèi)容備 注3.314.13畢業(yè)實(shí)習(xí),收集資料。4.144.27資料整理,擬訂設(shè)計(jì)方案。4.285.31設(shè)計(jì)傳動系統(tǒng),建立數(shù)據(jù)庫與工藝模板,系統(tǒng)測試。6.16.15編寫設(shè)計(jì)計(jì)算說明書。6.166.22畢業(yè)設(shè)計(jì)資料審閱,修改。6.236.27分小組答辯。六. 主要參考文獻(xiàn):1、王先逵機(jī)械制造工藝學(xué)北京:機(jī)械工業(yè)出版社,19952、趙汝嘉計(jì)算機(jī)輔助工藝設(shè)計(jì)(CAPP)北京:機(jī)械工業(yè)出版社,19953、三味工作屋SQL Server7.0管理指南北京:中國水利水電出版社,19994、戴曙金屬切削機(jī)床北京:機(jī)械工業(yè)出版社,19995、朱寶庫機(jī)械設(shè)計(jì)哈爾濱:哈爾濱工業(yè)大學(xué)出版社,19946、周開勤機(jī)械零件手冊北京:高等教育出版社,19897、李存斌Delphi6.0,程序設(shè)計(jì)及其應(yīng)用開發(fā)北京,中國水利水電出版社,20028、王細(xì)洋,王叔淳工藝知識管理系統(tǒng)的設(shè)計(jì),計(jì)算機(jī)輔助設(shè)計(jì)與制造, 1998,(4):47-509、恒永興,張振明,黃乃康等CAPP面向?qū)ο笾R庫管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn), 機(jī)械科學(xué)與技術(shù)2001,20(1):140-14210、劉金坤,王勻,王雷剛等基于關(guān)系型數(shù)據(jù)的專家系統(tǒng)結(jié)構(gòu)模型及實(shí)現(xiàn)技術(shù), 中國機(jī)械工程。2001,12(5):545-547七、其他測試分析報(bào)告一引言基于PDM平臺的CAPP可以充分利用PDM的強(qiáng)大功能,實(shí)現(xiàn)工藝設(shè)計(jì)過程控制和并行工程。在國內(nèi)許多CIMS工程中,越來越多的企業(yè)開始選擇商用PDM軟件作為CIMS的集成平臺和并行工程的使用環(huán)境,開發(fā)基于PDM的CAPP系統(tǒng)必將成為一個(gè)發(fā)展趨勢。1編寫目的編寫此測試報(bào)告的目的是為了保證基于PDM的CAPP系統(tǒng)的正常運(yùn)行,所以要通過測試,來發(fā)現(xiàn)錯(cuò)誤和異常情況,以保證程序在以后的運(yùn)行過程中盡可能的少出現(xiàn)故障。2背景本此測試的是基于PDM的CAPP系統(tǒng)框架的構(gòu)建,是由鹽城工學(xué)院機(jī)械工程系提出的。它是由葛友華、劉道標(biāo)、王正剛老師共同負(fù)責(zé),由本屆畢業(yè)生張健、劉忠明同學(xué)作為畢業(yè)設(shè)計(jì)的課題協(xié)同規(guī)劃和開發(fā),以期能建立起基于產(chǎn)品數(shù)據(jù)管理的計(jì)算機(jī)輔助工藝過程規(guī)劃的實(shí)際應(yīng)用系統(tǒng),以期能夠投入到企業(yè)的實(shí)際應(yīng)用中。由于測試環(huán)境與實(shí)際運(yùn)行環(huán)境之間可能存在著差異,所以在實(shí)際運(yùn)行過程中難免存在著不足之處,有待于進(jìn)一步的完善。3定義CAD: 計(jì)算機(jī)輔助設(shè)計(jì),全稱為Computer-Aided Design;CAM: 計(jì)算機(jī)輔助制造,全稱為Computer-Aided Manufacturing;PDM: 產(chǎn)品數(shù)據(jù)管理,全稱為Product Data Management;CAPP:計(jì)算機(jī)輔助工藝規(guī)程設(shè)計(jì),全稱為Computer-Aided Process Planning;CIMS:計(jì)算機(jī)集成制造系統(tǒng),全稱為Computer integrated manufacturing system。4參考資料(1)劉道標(biāo).基于PDM的CAPP系統(tǒng)框架的研究與實(shí)現(xiàn).南京航天航空大學(xué)碩士學(xué)位論文,2002年12月。(2)李善平,劉乃若,郭鳴等著.產(chǎn)品數(shù)據(jù)標(biāo)準(zhǔn)與PDM.清華大學(xué)出版社,2002年4月。(3)魏志強(qiáng),王先逵,楊志剛,吳丹. 集成制造環(huán)境下的計(jì)算機(jī)輔助工藝設(shè)計(jì)框架系統(tǒng)2001年2月21號。(4)軟件標(biāo)準(zhǔn)和指導(dǎo)性技術(shù)文件航空工業(yè)標(biāo)準(zhǔn)HB646590。二測試概要本次測試主要是對下面的程序進(jìn)行的:(1) 登陸界面的測試測試動態(tài)鏈接數(shù)據(jù)庫,輸入服務(wù)器名、服務(wù)器密碼;測試登陸用戶的合法性,輸入用戶名和密碼;(2) 系統(tǒng)主界面的測試測試簡單的WEB瀏覽器能否應(yīng)用;測試各應(yīng)用模塊能否正常顯示;(3) 用戶管理界面的測試測試用戶管理輸入數(shù)據(jù)是否有效;測試添加、修改、刪除、關(guān)閉按鈕是否有效,是否有異常情況;(4) 數(shù)據(jù)備份的測試測試數(shù)據(jù)庫中的內(nèi)容能否以文件形式保存?zhèn)浞荩唬?) 項(xiàng)目管理模塊的測試測試該模塊所有界面中的按鈕能否正常實(shí)現(xiàn)功能;測試是否對所有項(xiàng)目都分配完成后才能進(jìn)入下一流程;(6) 產(chǎn)品管理模塊的測試測試產(chǎn)品管理模塊中所有功能是否能夠正常實(shí)現(xiàn);測試產(chǎn)品管理模塊中的功能是否符合需求;(7) 工藝文件管理模塊的測試測試新建工藝、打開工藝、工藝提取、工藝預(yù)覽、工藝打印能否正常實(shí)現(xiàn)功能;測試該界面中的各個(gè)子模塊是否有異常情況;(8) 工序文件管理模塊的測試(圖略)測試該模塊中新建工序文件、打開工序文件是否正常實(shí)現(xiàn)功能;測試該模塊中各個(gè)功能是否正常,有無異常情況;(9) 工藝數(shù)據(jù)管理模塊的測試測試該模塊中典型工藝數(shù)據(jù)維護(hù)、知識庫管理、切削用量和加工余量能否正常實(shí)現(xiàn)功能;測試各個(gè)子界面中的按鈕等是否能實(shí)現(xiàn)其功能,有無異常情況;(10) 工藝設(shè)計(jì)模塊的測試測試該模塊中基于實(shí)例的工藝生成和基于模板的實(shí)例生成、工藝路線能否正常實(shí)現(xiàn)其功能;測試該模塊中各界面的需求功能能否正常實(shí)現(xiàn),有無異常情況要處理;(11) 系統(tǒng)查詢模塊的測試測試基于WEB的查詢模塊能否實(shí)現(xiàn)其功能;測試與后臺數(shù)據(jù)庫鏈接有無異常情況;三測試結(jié)果及發(fā)現(xiàn)(1) 測試1輸入錯(cuò)誤的數(shù)據(jù)庫服務(wù)器名稱,系統(tǒng)報(bào)錯(cuò),數(shù)據(jù)庫自動斷開,系統(tǒng)自動關(guān)閉。輸入正確的數(shù)據(jù)庫服務(wù)器名稱,服務(wù)器密碼錯(cuò)誤,系統(tǒng)無法進(jìn)入,關(guān)閉后重新登陸。輸入正確的數(shù)據(jù)庫服務(wù)器名稱和密碼,用戶名出錯(cuò)時(shí),無法登陸系統(tǒng)。輸入正確的數(shù)據(jù)庫服務(wù)器名稱和密碼,正確的用戶名,密碼錯(cuò)誤時(shí)無法登陸系統(tǒng)。通過以上測試得出結(jié)果,只有當(dāng)以上各項(xiàng)都符合時(shí),方能成功登陸本系統(tǒng)。(2) 測試2測試主界面能否實(shí)現(xiàn)簡單的WEB瀏覽器功能,在地址欄中輸入所要訪問的主頁地址,測試在相應(yīng)的WebBrower處能否正常顯示網(wǎng)頁內(nèi)容。測試主菜單中的各個(gè)鏈接是否正常,點(diǎn)擊時(shí)能否顯示相應(yīng)的界面。通過反復(fù)的測試,發(fā)現(xiàn)了一些意想不到的問題,尤其時(shí)在集成整個(gè)系統(tǒng)界面的時(shí)候,通過不斷的調(diào)整最終集合成主界面。(3) 測試3測試用戶管理界面時(shí),當(dāng)姓名輸入框?yàn)榭諘r(shí),無法對登陸用戶進(jìn)行添加、修改、刪除;當(dāng)?shù)顷懹脩魹橄到y(tǒng)管理員時(shí),擁有最高權(quán)限可以對整個(gè)用戶管理界面進(jìn)行維護(hù),當(dāng)?shù)顷懹脩魹槠胀ㄓ脩艋蚬に嚾藛T時(shí),無法運(yùn)用用戶管理界面中的添加、修改、刪除按鈕進(jìn)行用戶權(quán)限管理。剛開始時(shí),當(dāng)用戶欄為空時(shí)也可以對用戶管理界面進(jìn)行修改。(4) 測試4測試數(shù)據(jù)備份界面時(shí),當(dāng)?shù)顷懹脩魹橄到y(tǒng)管理員時(shí)可以對基礎(chǔ)資源庫進(jìn)行數(shù)據(jù)備份,以文件形式保存到硬盤中,而當(dāng)普通用戶登陸時(shí)則沒有此權(quán)限功能。而在具體實(shí)現(xiàn)此功能時(shí),經(jīng)過反復(fù)調(diào)試后,總算實(shí)現(xiàn)了此功能。(5) 測試5測試項(xiàng)目管理模塊時(shí),由于要實(shí)現(xiàn)通用化,所以在建立后臺數(shù)據(jù)庫時(shí)要建立關(guān)聯(lián)庫,具體實(shí)現(xiàn)的時(shí)候用SQL查詢語言來實(shí)現(xiàn),當(dāng)項(xiàng)目分配完成后要進(jìn)入下一個(gè)流程,關(guān)鍵在于要實(shí)現(xiàn)如下需求,只有當(dāng)所有項(xiàng)目都分配完畢后才能進(jìn)入下一個(gè)工作流程,這就要逐一讀取數(shù)據(jù)庫中關(guān)于項(xiàng)目分配的信息,來確定是否能夠?qū)崿F(xiàn)。但由于開發(fā)者自身?xiàng)l件的限制,導(dǎo)致后臺數(shù)據(jù)庫中的內(nèi)容不夠充實(shí),只是實(shí)現(xiàn)了一定的設(shè)計(jì)思想。(6) 測試6測試產(chǎn)品管理模塊時(shí),首先是對產(chǎn)品設(shè)計(jì)管理界面的測試,利用樹形結(jié)構(gòu)作導(dǎo)航,利用SQL查詢語言,使左邊的產(chǎn)品或零件與右邊的詳細(xì)信息相對應(yīng),當(dāng)指針指到產(chǎn)品樹中的某一零件時(shí)就觸發(fā)事件,在右邊相應(yīng)的位置顯示所查詢到的詳細(xì)信息,如零件的總體信息、工藝信息、其它信息,還可以查看其相應(yīng)的圖形,如果在數(shù)據(jù)庫中未添加零件圖形,則要到產(chǎn)品數(shù)據(jù)管理界面提供的圖形管理處加入與零件相對應(yīng)的圖形,在測試過程中發(fā)現(xiàn)采用樹形結(jié)構(gòu)來導(dǎo)航是非常方便的,不過在維護(hù)過程中對樹形結(jié)構(gòu)管理時(shí),容易產(chǎn)生數(shù)據(jù)庫更新不足,產(chǎn)生一些意外的出錯(cuò)信息,經(jīng)過反復(fù)測試后,調(diào)整了數(shù)據(jù)庫的結(jié)構(gòu),終于實(shí)現(xiàn)了初步的功能,而工藝信息部分是通過顯示按扭來觸發(fā)事件,當(dāng)零件的工藝已經(jīng)制定好了以后,則通過查詢來檢索后臺數(shù)據(jù)庫零件工藝匯總中的關(guān)于此零件的工藝信息,如果零件的工藝未制定,則進(jìn)入新建工藝界面對零件工藝進(jìn)行編輯,而工藝設(shè)計(jì)可以運(yùn)用兩種方法,一種是基于實(shí)例的工藝生成,還有是基于模板的工藝生成,測試過程中主要是測試產(chǎn)品樹中的零件與工藝信息是否能關(guān)聯(lián),以及后臺數(shù)據(jù)庫能否正常工作,經(jīng)過修改后已經(jīng)實(shí)現(xiàn)了初步功能。(7) 測試7測試過程中主要是對新建工藝界面、打開工藝、工藝提取、工藝預(yù)覽、工藝打印能否正常實(shí)現(xiàn)功能;測試該界面中的各個(gè)子模塊是否有異常情況;在測試過程中主要是要使各個(gè)界面都能實(shí)現(xiàn)其初步功能,使之不出現(xiàn)異常情況,開始測試時(shí)總出現(xiàn)一些小錯(cuò)誤,最后在程序中加入了異常處理后在運(yùn)行時(shí)就把錯(cuò)誤給排除拉,在動態(tài)輸入數(shù)據(jù)時(shí),可以選擇數(shù)據(jù)庫中的內(nèi)容添加到數(shù)據(jù)輸入框中,然后再通過按鈕觸發(fā)事件,保存到后臺數(shù)據(jù)庫中。通過動態(tài)輸入的數(shù)據(jù)與保存到數(shù)據(jù)庫中的內(nèi)容相比較,最后確認(rèn)程序是否能滿足功能要求。(8) 測試8主要是測試工序管理模塊中的界面能否達(dá)到功能要求,測試該模塊中新建工序文件、打開工序文件是否正常實(shí)現(xiàn)功能;測試該模塊中各個(gè)功能是否正常,有無異常情況;通過在新建工序文件界面中動態(tài)輸入數(shù)據(jù),然后以文件形式保存到電腦中,然后再通過打開工序文件界面把剛才保存的文件打開來,查看數(shù)據(jù)是否與動態(tài)輸入的數(shù)據(jù)一致。如果數(shù)據(jù)不一致則說明程序還存在著問題,需要修改再調(diào)試,如果顯示的數(shù)據(jù)與動態(tài)輸入的數(shù)據(jù)完全一致,說明程序已初步實(shí)現(xiàn)了需求功能,可以對下一面進(jìn)行測試。(9) 測試9主要是測試該模塊中典型工藝數(shù)據(jù)維護(hù)、知識庫管理、切削用量和加工余量界面能否正常實(shí)現(xiàn)其功能,最后測試各個(gè)子界面中的按鈕等是否能實(shí)現(xiàn)其功能,有無異常情況;在測試過程中,對典型工藝數(shù)據(jù)維護(hù)界面測試主要是動態(tài)輸入數(shù)據(jù),再點(diǎn)擊相應(yīng)的功能按鈕,查看生成的數(shù)據(jù)是否與動態(tài)輸入的數(shù)據(jù)相一致,如果得出的結(jié)果確實(shí)如此,則說明所編寫的程序是正確的,反之則需要修改,再不斷調(diào)試,直到實(shí)現(xiàn)需求功能為止。(10) 測試10主要是測試該模塊中基于實(shí)例的工藝生成和基于模板的工藝生成、工藝路線能否正常實(shí)現(xiàn)其功能;測試該模塊中各界面的需求功能能否正常實(shí)現(xiàn),有無異常情況要處理;根據(jù)上面所示的界面,首先是查詢與零件相對應(yīng)的工藝,然后在網(wǎng)格中顯示出來,再點(diǎn)擊導(dǎo)出工藝按鈕,把檢索到的工藝單存儲到臨時(shí)表中,再顯示在網(wǎng)格中,以便使用者進(jìn)行修改,直到達(dá)到要求為止,然后再存儲到零件工藝匯總表中,如果這一過程中輸入與輸出的數(shù)據(jù)相一致,則說明程序已實(shí)現(xiàn)了功能需求,反之,則要進(jìn)行修改,調(diào)試直到達(dá)到要求為止。(11) 測試11主要是測試基于WEB的查詢模塊,點(diǎn)擊左邊的查詢按鈕,在右邊對應(yīng)的位置顯示鏈接的內(nèi)容,如果未出現(xiàn)相應(yīng)的界面,則說明源程序還需要修改,調(diào)試,直到能滿足功能需求為止。四測試結(jié)論1 功能1(1)能力登陸界面已具備了動態(tài)連接數(shù)據(jù)庫的能力,以及辨別登陸用戶合法性的能力,經(jīng)過多次測試,已證明了登陸界面擁有了以上能力。(2)限制在測試過程中,發(fā)現(xiàn)了問題,開始時(shí)無法動態(tài)連接遠(yuǎn)程數(shù)據(jù)庫,后來通過改進(jìn),才能夠連接到遠(yuǎn)程數(shù)據(jù)庫。2 功能2(1)能力系統(tǒng)主界面已具備作為簡單的WEB瀏覽器的能力,能夠訪問INTERNET,另外也達(dá)到了連接各個(gè)系統(tǒng)子模塊的能力,經(jīng)過多次測試,證明已具備了以上能力。(2)限制由于只是一個(gè)簡單的WEB瀏覽器,所以跟IE相比還有一定的差距。3 功能3(1)能力用戶管理界面已經(jīng)具備了對使用本系統(tǒng)的用戶進(jìn)行管理的能力,當(dāng)?shù)顷懹脩魹橄到y(tǒng)管理員時(shí)可以對任何用戶進(jìn)行修改其所有信息,也可以添加和刪除用戶;而當(dāng)?shù)顷懹脩魹槠胀ㄓ脩魰r(shí),則沒有權(quán)限修改用戶信息的能力。4 功能4(1)能力數(shù)據(jù)備份界面已經(jīng)具備了對基礎(chǔ)庫以文件形式保存的能力,經(jīng)過多次測試后,已經(jīng)能夠?qū)崿F(xiàn)功能需求,能夠保存數(shù)據(jù),并能夠在系統(tǒng)中顯示以文件形式保存的數(shù)據(jù)。(2)限制由于數(shù)據(jù)本身已保存在數(shù)據(jù)庫中,以文件形式再保存、備份只是為了防止意外事故發(fā)生,導(dǎo)致數(shù)據(jù)丟失,欠缺是為能所有用到的數(shù)據(jù)庫進(jìn)行備份。5 功能5(1)能力項(xiàng)目管理模塊主要是對通用化的項(xiàng)目進(jìn)行分配任務(wù)、編制任務(wù),經(jīng)過這一流程后,最后審核項(xiàng)目。經(jīng)過測試,證明該模塊已具備了此能力。(2)限制由于對項(xiàng)目內(nèi)容及流程知道有限,導(dǎo)致建立的數(shù)據(jù)庫內(nèi)容教少,還不具備通用性,有待于改進(jìn)、提高。6功能6(1) 能力產(chǎn)品管理模塊主要是用來對企業(yè)中的產(chǎn)品自制件、標(biāo)準(zhǔn)件、外協(xié)件等進(jìn)行分類管理,對自制件如果未制定工藝則到相應(yīng)的新建工藝界面制定工藝,如果已經(jīng)制定則能夠顯示其工藝內(nèi)容。經(jīng)過多次測試,證明該模塊已經(jīng)具備了以上能力。(2) 限制由于設(shè)計(jì)人員水平的限制,采用樹形結(jié)構(gòu)導(dǎo)航時(shí),沒做到把樹結(jié)構(gòu)做到無窮級數(shù)展開,有待于進(jìn)一步提高。7功能7(1) 能力工藝文件管理模塊主要具有工藝、打開工藝、工藝提取、工藝預(yù)覽、工藝打印的能力,經(jīng)過多次測試后,證明該模塊已經(jīng)具備了以上能力。8. 功能8(1) 能力工序文件管理模塊已經(jīng)具備了新建工序卡片和顯示已經(jīng)保存的工序卡片的能力,經(jīng)反復(fù)測試后,證明該模塊已經(jīng)具備了以上能力。9. 功能9(1) 能力工藝數(shù)據(jù)管理模塊主要是對典型工藝數(shù)據(jù)維護(hù)、知識庫管理、切削用量和加工余量庫查詢。經(jīng)過多次測試后,證明該模塊已經(jīng)具備了以上能力。10功能10(1) 能力工藝設(shè)計(jì)管理模塊主要是實(shí)現(xiàn)基于實(shí)例的工藝生成和基于模板的實(shí)例生成、工藝路線的查詢的能力。(2)由于開發(fā)設(shè)計(jì)時(shí)間和自身水平的限制,還未能實(shí)現(xiàn)基于特征的工藝生成的能力,有待于進(jìn)一步提高。11功能11(1) 能力系統(tǒng)查詢模塊主要是用來查詢基礎(chǔ)資源庫中的信息,經(jīng)過測試后已具備了此能力。(2) 限制由于開發(fā)者本身對ACTIVEFORM以及網(wǎng)絡(luò)發(fā)布了解不夠,還未能把用Delphi制作的網(wǎng)頁發(fā)布到服務(wù)器上,以達(dá)到基于WEB的查詢能力。五評價(jià)1 能力經(jīng)測試已證實(shí)了本軟件的能力。2 缺陷與限制 經(jīng)測試證實(shí)的軟件缺陷和限制已經(jīng)在測試結(jié)果和發(fā)現(xiàn)中交代過,綜合以上的缺陷和限制,對本軟件存在著一定程度的影響。六測試總結(jié)通過此次測試,基于PDM的CAPP系統(tǒng)得到了很大的改進(jìn),但要消耗了測試人員很大的時(shí)間,設(shè)計(jì)人員更是消耗了大量的機(jī)時(shí)才使系統(tǒng)性能有了一定的提高,不過通過測試后,對于軟件本身來說是必不可少的工作,有利于系統(tǒng)性能的改進(jìn)。 unit xjgy;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Grids, DBGrids, StdCtrls, OleCtrls, VOLOVIEWXLib_TLB, Buttons, ExtCtrls,shellapi, Menus, DB, ADODB;type Tl_xjgy = class(TForm) StatusBar1: TStatusBar; Splitter2: TSplitter; Splitter1: TSplitter; SaveDialog1: TSaveDialog; ADOQuery8: TADOQuery; ADOQuery7: TADOQuery; ADOQuery6: TADOQuery; ADOQuery5: TADOQuery; ADOQuery4: TADOQuery; ADOQuery3: TADOQuery; DataSource1: TDataSource; ADOQuery2: TADOQuery; ADOQuery1: TADOQuery; PopupMenu1: TPopupMenu; N1: TMenuItem; N2: TMenuItem; Panel3: TPanel; Splitter3: TSplitter; Splitter4: TSplitter; Panel4: TPanel; Panel7: TPanel; SpeedButton2: TSpeedButton; SpeedButton1: TSpeedButton; SpeedButton5: TSpeedButton; SpeedButton4: TSpeedButton; SpeedButton6: TSpeedButton; SpeedButton3: TSpeedButton; Panel8: TPanel; AvViewX1: TAvViewX; Panel5: TPanel; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Panel6: TPanel; DBGrid1: TDBGrid; Panel2: TPanel; Panel9: TPanel; Label6: TLabel; Panel10: TPanel; Panel11: TPanel; Label7: TLabel; Label8: TLabel; Edit7: TEdit; Edit8: TEdit; Panel12: TPanel; Label4: TLabel; Label5: TLabel; Edit4: TEdit; Edit5: TEdit; Panel1: TPanel; TreeView1: TTreeView; TreeView2: TTreeView; TreeView3: TTreeView; TreeView4: TTreeView; TreeView5: TTreeView; TreeView6: TTreeView; OpenDialog1: TOpenDialog; N3: TMenuItem; N4: TMenuItem; ADOQuery9: TADOQuery; ADOQuery10: TADOQuery; Label9: TLabel; Label10: TLabel; Edit6: TEdit; Edit9: TEdit; ADOQuery8DSDesigner: TIntegerField; ADOQuery8DSDesigner2: TIntegerField; ADOQuery8DSDesigner3: TStringField; ADOQuery8DSDesigner4: TStringField; ADOQuery8DSDesigner5: TStringField; ADOQuery8DSDesigner6: TStringField; ADOQuery8DSDesigner7: TStringField; ADOQuery8DSDesigner8: TStringField; ADOQuery8DSDesigner9: TStringField; ADOQuery8DSDesigner10: TStringField; ADOQuery8DSDesigner11: TFloatField; ADOQuery8DSDesigner12: TStringField; ADOQuery8DSDesigner13: TStringField; ADOQuery8DSDesigner14: TStringField; ADOQuery8DSDesigner15: TStringField; ADOQuery8DSDesigner16: TStringField; ADOQuery8DSDesigner17: TStringField; ADOQuery8DSDesigner18: TStringField; ADOQuery8DSDesigner19: TStringField; ADOQuery8DSDesigner20: TStringField; tuxing2: TBlobField; ADOQuery2DSDesigner: TIntegerField; ADOQuery2DSDesigner2: TIntegerField; ADOQuery2DSDesigner3: TStringField; ADOQuery2DSDesigner4: TStringField; ADOQuery2DSDesigner5: TStringField; ADOQuery2DSDesigner6: TStringField; ADOQuery2DSDesigner7: TStringField; ADOQuery2DSDesigner8: TStringField; ADOQuery2DSDesigner9: TStringField; ADOQuery2DSDesigner10: TStringField; ADOQuery2DSDesigner11: TFloatField; ADOQuery2DSDesigner12: TStringField; ADOQuery2DSDesigner13: TStringField; ADOQuery2DSDesigner14: TStringField; ADOQuery2DSDesigner15: TStringField; ADOQuery2DSDesigner16: TStringField; ADOQuery2DSDesigner17: TStringField; ADOQuery2DSDesigner18: TStringField; ADOQuery2DSDesigner19: TStringField; ADOQuery2DSDesigner20: TStringField; tuxing: TBlobField; procedure FormCreate(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TreeView1Change(Sender: TObject; Node: TTreeNode); procedure TreeView2Change(Sender: TObject; Node: TTreeNode); procedure TreeView3Change(Sender: TObject; Node: TTreeNode); procedure TreeView4Change(Sender: TObject; Node: TTreeNode); procedure TreeView5Change(Sender: TObject; Node: TTreeNode); procedure TreeView6Change(Sender: TObject; Node: TTreeNode); procedure N1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure SpeedButton6Click(Sender: TObject); procedure SpeedButton4Click(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N4Click(Sender: TObject); private Private declarations public Public declarations procedure LoadgcmcTREE; procedure LoadgcnrTREE; procedure LoadjckTREE; procedure LoadjjkTREE; procedure LoaddjkTREE; procedure LoadljkTREE; end;var l_xjgy: Tl_xjgy; tup,wjj:string;implementationuses unit1;$R *.dfmprocedure Tl_xjgy.FormCreate(Sender: TObject);var i,ss:integer; serveString: string;beginwjj:=GetCurrentDir; /下面一部分是動態(tài)連接數(shù)據(jù)庫adoquery1.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery1.SQL.Clear; adoquery1.SQL.Add(select * from 工序名稱庫) ; adoquery1.open; adoquery2.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery2.SQL.Clear; adoquery2.SQL.Add(select * from 機(jī)械加工工藝過程卡片) ; adoquery2.open; adoquery3.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery3.SQL.Clear; adoquery3.SQL.Add(select * from 工序內(nèi)容) ; adoquery3.open; adoquery4.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery4.SQL.Clear; adoquery4.SQL.Add(select * from 機(jī)床庫) ; adoquery4.open; adoquery5.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery5.SQL.Clear; adoquery5.SQL.Add(select * from 夾具庫) ; adoquery5.open; adoquery6.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery6.SQL.Clear; adoquery6.SQL.Add(select * from 刀具庫) ; adoquery6.open; adoquery7.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery7.SQL.Clear; adoquery7.SQL.Add(select * from 量具庫) ; adoquery7.open; adoquery8.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery8.SQL.Clear; adoquery8.SQL.Add(select * from 機(jī)械加工工藝過程卡片2) ; adoquery8.open; adoquery9.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery9.SQL.Clear; adoquery9.SQL.Add(select * from 零件名稱匯總) ; adoquery9.open; adoquery10.ConnectionString:=Provider=SQLOLEDB.1;Password=+trim(form1.Edit4.Text)+;Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source=+trim(form1.Edit3.Text)+; adoquery10.SQL.Clear; adoquery10.SQL.Add(select * from 零件工藝匯總) ; adoquery10.open;LoadgcnrTREE;LoadjckTREE;LoadjjkTREE;LoaddjkTREE;LoadljkTREE;LoadgcmcTREE; treeview1.Visible:=true; treeview2.Visible:=false; treeview3.Visible:=false; treeview4.Visible:=false; treeview5.Visible:=false; treeview6.Visible:=false; adoquery2.First; while not adoquery2.Eof do begin adoquery2.Delete; end; ss:=10; for i:=1 to 15 do begin adoquery2.Append; adoquery2工序標(biāo)志:=ss; adoquery2.Post; ss:=ss+10; end; adoquery2.Active:=false; adoquery2.Active:=true; /改變網(wǎng)格大小 dbgrid1.Columns0.Width:=50; dbgrid1.Columns1.Width:=100; dbgrid1.Columns2.Width:=100; dbgrid1.Columns3.Width:=60; dbgrid1.Columns4.Width:=60; dbgrid1.Columns5.Width:=70; dbgrid1.Columns6.Width:=70; dbgrid1.Columns7.Width:=70; dbgrid1.Columns8.Width:=70; dbgrid1.Columns9.Width:=60;end;procedure Tl_xjgy.LoadgcmcTREE;var RootNode, CatNode : TTreeNode; Category : string;begin treeview1.Items.Clear; RootNode := treeview1.Items.Add( nil, 工序名稱 ); RootNode.ImageIndex := 0; Specify which bitmap to use RootNode.SelectedIndex := 0; adoquery1.First; while not adoquery1.Eof do begin Category := adoquery1.fieldbyname(工序名稱).AsString; CatNode := treeview1.Items.AddChild( RootNode, Category ); CatNode.ImageIndex := 5; CatNode.SelectedIndex := 2; adoquery1.Next; end;end;procedure Tl_xjgy.LoadgcnrTREE;var RootNode, CatNode : TTreeNode; Category : string;begin treeview2.Items.Clear; RootNode := treeview2.Items.Add( nil, 工序內(nèi)容 ); RootNode.ImageIndex := 0; Specify which bitmap to use RootNode.SelectedIndex := 0; adoquery3.First; while not adoquery3.Eof do begin Category := adoquery3.fieldbyname(工序內(nèi)容).AsString; CatNode := treeview2.Items.AddChild( RootNode, Category ); CatNode.ImageIndex := 5; CatNode.SelectedIndex := 2; adoquery3.Next; end;end;procedure Tl_xjgy.LoadjckTREE;var RootNode, TipNode, CatNode : TTreeNode; ss,Category,jidian : string;begin treeview3.Items.Clear; adoquery4.First; while not adoquery4.Eof do begin if (adoquery4機(jī)床標(biāo)志1=0) and (adoquery4機(jī)床標(biāo)志2=0) and (adoquery4機(jī)床標(biāo)志3=0)then begin ss:=adoquery4機(jī)床名稱; RootNode := treeview3.Items.Add( nil, ss ); RootNode.ImageIndex := 0; Specify which bitmap to use RootNode.SelectedIndex := 0; end; if (adoquery4機(jī)床標(biāo)志1=0) and (adoquery4機(jī)床標(biāo)志2=0) and (adoquery4機(jī)床標(biāo)志3=1)then begin Category := adoquery4.fieldbyname(機(jī)床分類).AsString; CatNode := treeview3.Items.AddChild( RootNode, Category ); CatNode.ImageIndex := 5; CatNode.SelectedIndex := 2; end; if (adoquery4機(jī)床標(biāo)志1=1) and (adoquery4機(jī)床標(biāo)志2=1) and (adoquery4機(jī)床標(biāo)志3=1)then begin jidian := adoquery4.fieldbyname(機(jī)床型號).AsString; tipNode := treeview3.Items.addchild( catnode,jidian ); tipNode.ImageIndex := 5; tipNode.SelectedIndex := 2; end; adoquery4.Next;end;end;procedure Tl_xjgy.LoadjjkTREE;var RootNode, TipNode, CatNode : TTreeNode; ss,Category,jidian : string;begin treeview4.Items.Clear; adoquery5.First; while not adoquery5.Eof do begin if (adoquery5夾具標(biāo)志1=0) and (adoquery5夾具標(biāo)志2=0) and (adoquery5夾具標(biāo)志3=0)then begin ss:=adoquery5夾具總稱; RootNode := treeview4.Items.Add( nil, ss ); RootNode.ImageIndex := 0; Specify which bitmap to use RootNode.SelectedIndex := 0; end; if (adoquery5夾具標(biāo)志1=0) and (adoquery5夾具標(biāo)志2=0) and (adoquery5夾具標(biāo)志3=1)then begin Category := adoquery5.fieldbyname(夾具分類).AsString; CatNode := treeview4.Items.AddChild( RootNode, Category ); CatNode.ImageIndex := 5; CatNode.SelectedIndex := 2; end; if (adoquery5夾具標(biāo)志1=1) and (adoquery5夾具標(biāo)志2=1) and (adoquery5夾具標(biāo)志3=1)then begin jidian := adoquery5.fieldbyname(夾具名稱).AsString; tipNode := treeview4.Items.addchild( catnode,jidian ); tipNode.ImageIndex := 5; tipNode.SelectedIndex := 2; end; adoquery5.Next;end;end;procedure Tl_xjgy.LoaddjkTREE;var RootNode,CatNode : TTreeNode; ss,Category : string;begin treeview5.Items.Clear; adoquery6.First; while not adoquery6.Eof do begin if (adoquery6刀具標(biāo)志1=0) and (adoquery6刀具標(biāo)志2=1) then begin ss:=adoquery6刀具名稱; RootNode := treeview5.Items.Add( nil, ss ); RootNode.ImageIndex := 0; Specify which bitmap to use RootNode.SelectedIndex := 0; end; if (adoquery6刀具標(biāo)志1=1) and (adoquery6刀具標(biāo)志2=0) then begin Category := adoquery6.fieldbyname(刀具規(guī)格).AsString; CatNode := treeview5.Items.AddChild( RootNode, Category ); CatNode.ImageIndex := 5; CatNode.SelectedIndex := 2; end; adoquery6.Next;end;end;procedure Tl_xjgy.LoadljkTREE;var RootNode, CatNode : TTreeNode; ss,Category : string;begin treeview6.Items.Clear; adoquery7.First; while not adoquery7.Eof do begin if (adoquery7量具標(biāo)志1=0) and (adoquery7量具標(biāo)志2=1) then begin ss:=adoquery7量具名稱; RootNode := treeview6.Items.Add( nil, ss ); RootNode.ImageIndex := 0; Specify which bitmap to use RootNode.SelectedIndex := 0; end; if (adoquery7量具標(biāo)志1=1) and (adoquery7量具標(biāo)志2=0) then begin Category := adoquery7.fieldbyname(量具規(guī)格).AsString; CatNode := treeview6.Items.AddChild( RootNode, Category ); CatNode.ImageIndex := 5; CatNode.SelectedIndex := 2; end; adoquery7.Next;end;end;procedure Tl_xjgy.SpeedButton3Click(Sender: TObject);beginclose;end;procedure Tl_xjgy.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin if (DBGrid1.SelectedIndex = 1) then begin /調(diào)用相應(yīng)樹形結(jié)構(gòu) treeview1.Visible:=true; treeview2.Visible:=false; treeview3.Visible:=false; treeview4.Visible:=false; treeview5.Visible:=false; treeview6.Visible:=false; end; if (DBGrid1.SelectedIndex = 2) then begin treeview2.Visible:=true; treeview1.Visible:=false; treeview3.Visible:=false; treeview4.Visible:=false; treeview5.Visible:=false; treeview6.Visible:=false; end; if (DBGrid1.SelectedIndex = 5) then begin treeview3.Visible:=true; treeview2.Visible:=false; treeview1.Visible:=false; treeview4.Visible:=false; treeview5.Visible:=false; treeview6.Visible:=false; end; if (DBGrid1.SelectedIndex = 6) then begin treeview4.Visible:=true; treeview2.Visible:=false; treeview3.Visible:=false; treeview1.Visible:=false; treeview5.Visible:=false; treeview6.Visible:=false; end; if (DBGrid1.SelectedIndex = 7) then begin treeview5.Visible:=true; treeview2.Visible:=false; treeview3.Visible:=false; treeview4.Visible:=false; treeview1.Visible:=false; treeview6.Visible:=false; end; if (DBGrid1.SelectedIndex = 8) then begin treeview6.Visible:=true; treeview2.Visible:=false; treeview3.Visible:=false; treeview4.Visible:=false; treeview5.Visible:=false; treeview1.Visible:=false; end;end;procedure Tl_xjgy.TreeView1Change(Sender: TObject; Node: TTreeNode);begin if (DBGrid1.SelectedIndex = 1) then begin adoquery2.Edit; adoquery2工序名稱:=TreeView1.Selected.Text; adoquery2.Post; end; end;procedure Tl_xjgy.TreeView2Change(Sender: TObject; Node: TTreeNode);begin if (DBGrid1.SelectedIndex = 2) then begin adoquery2.Edit; adoquery2工序內(nèi)容:=TreeView2.Selected.Text; adoquery2.Post; end;end;procedure Tl_xjgy.TreeView3Change(Sender: TObject; Node: TTreeNode);beginif (DBGrid1.SelectedIndex = 5) then begin adoquery2.Edit; adoquery2機(jī)床設(shè)備:=TreeView3.Selected.Text; adoquery2.Post; end;end;procedure Tl_xjgy.TreeView4Change(Sender: TObject; Node: TTreeNode);begin if (DBGrid1.SelectedIndex = 6) then begin adoquery2.Edit; adoquery2夾具設(shè)備:=TreeView4.Selected.Text; adoquery2.Post; end;end;procedure Tl_xjgy.TreeView5Change(Sender: TObject; Node: TTreeNode);beginif (DBGrid1.SelectedIndex = 7) then begin adoquery2.Edit; adoquery2刀具設(shè)備:=TreeView5.Selected.Text; adoquery2.Post; end;end;procedure Tl_xjgy.TreeView6Change(Sender: TObject; Node: TTreeNode);beginif (DBGrid1.SelectedIndex = 8) then begin adoquery2.Edit; adoquery2量具設(shè)備:=TreeView6.Selected.Text; adoquery2.Post; end;end;procedure Tl_xjgy.N1Click(Sender: TObject);begin avviewx1.ClearMarkup ; if opendialog1.Execute then begin tup:=opendialog1.filename; end; avviewx1.src :=tup ; if tup then begin avviewx1.Visible:=true; end else begin end;end;procedure Tl_xjgy.N2Click(Sender: TObject);beginavviewx1.ClearMarkup;avviewx1.Visible:=false;end;procedure Tl_xjgy.SpeedButton6Click(Sender: TObject);vars:integer;beginadoquery2.Last;s:=adoquery2工序標(biāo)志;adoquery2.Append;s:=s+10;adoquery2工序標(biāo)志:=s; end;procedure Tl_xjgy.SpeedButton4Click(Sender: TObject);varaa,bb:integer;begintrybeginaa:=adoquery2工序標(biāo)志;aa:=aa-1;adoquery2.Prior;bb:=adoquery2工序標(biāo)志;adoquery2.Insert;if aa=bb thenbeginbb:=bb-1;adoquery2工序標(biāo)志:=bb;end else adoquery2工序標(biāo)志:=aa;adoquery2.Post;endexcept showmessage(請將指針上移,謝謝);end;adoquery2.Active:=false;adoquery2.Active:=true;end;procedure Tl_xjgy.SpeedButton5Click(Sender: TObject);beginadoquery2.delete;adoquery2.Refresh;end;procedure Tl_xjgy.SpeedButton1Click(Sender: TObject);begin if (edit4.Text)and (edit8.Text) then begin if MessageDlg(是否要提交?,mtConfirmation, mbYes, mbNo, 0 )=mryes then begin adoquery2.Refresh; adoquery2.First; adoquery2.Edit; adoquery2產(chǎn)品名稱:=edit4.Text; adoquery2產(chǎn)品型號:=edit7.Text; adoquery2零件圖號:=edit5.Text; adoquery2零件名稱:=edit8.Text; adoquery2編制日期:=edit1.Text; adoquery2校對日期:=edit2.Text; adoquery2審核日期:=edit3.Text; adoquery2材料牌號:=edit6.Text; adoquery2毛坯種類:=edit9.Text; tuxing.LoadFromFile(tup) ; adoquery2.Post; adoquery9.Append; adoquery9零件名稱:=edit8.Text; adoquery9.Post; adoquery2.First; repeat begin adoquery10.Append; adoquery10零件名稱:=edit8.Text; adoquery10產(chǎn)品名稱:=adoquery2產(chǎn)品名稱; adoquery10產(chǎn)品型號:=adoquery2產(chǎn)品型號; adoquery10零件圖號:=adoquery2零件圖號; adoquery10編制日期:=adoquery2編制日期; adoquery10校對日期:=adoquery2校對日期; adoquery10審核日期:=adoquery2審核日期; adoquery10材料牌號:=adoquery2材料牌號; adoquery10毛坯種類:=adoquery2毛坯種類; adoquery10圖形:=adoquery2圖形; adoquery10工序號:=adoquery2工序號; adoquery10.fieldbyname(工序名稱).AsString:=adoquery2.fieldbyname(工序名稱).AsString; adoquery10.fieldbyname(工序內(nèi)容).AsString:=adoquery2.fieldbyname(工序內(nèi)容).AsString; adoquery10.fieldbyname(車間).AsString:=adoquery2.fieldbyname(車間).AsString; adoquery10.fieldbyname(工段).AsString:=adoquery2.fieldbyname(工段).AsString; adoquery10.fieldbyname(機(jī)床設(shè)備).AsString:=adoquery2.fieldbyname(機(jī)床設(shè)備).AsString; adoquery10.fieldbyname(夾具設(shè)備).AsString:=adoquery2.fieldbyname(夾具設(shè)備).AsString; adoquery10.fieldbyname(刀具設(shè)備).AsString:=adoquery2.fieldbyname(刀具設(shè)備).AsString; adoquery10.fieldbyname(量具設(shè)備).AsString:=adoquery2.fieldbyname(量具設(shè)備).AsString; adoquery10.fieldbyname(單件工時(shí)).AsString:=adoquery2.fieldbyname(單件工時(shí)).AsString; adoquery10.Post; adoquery2.Next; end; until adoquery2.Eof; showmessage(提交成功!); speedbutton1.Enabled:=false; end; end else showmessage(請輸入產(chǎn)品和零件名稱!);end;procedure Tl_xjgy.SpeedButton2Click(Sender: TObject);var filename:string;beginadoq
收藏