購買設計請充值后下載,,資源目錄下的文件所見即所得,都可以點開預覽,,資料完整,充值下載可得到資源目錄里的所有文件。。。【注】:dwg后綴為CAD圖紙,doc,docx為WORD文檔,原稿無水印,可編輯。。。具體請見文件預覽,有不明白之處,可咨詢QQ:12401814
一、設計(論文)內(nèi)容
根據(jù)企業(yè)的工藝現(xiàn)狀,對減速器等產(chǎn)品中的箱體類零件進行工藝分析,并規(guī)范化,
標準化,建立知識框架模型,確定工知識結(jié)構(gòu),根據(jù)所確定的工藝知識結(jié)構(gòu)錄入工
藝知識,并建庫保存。建立工藝模板知,首先調(diào)用工藝模板編制模塊,根據(jù)工藝設計
規(guī)則,編制典型零件的工藝規(guī)程,并以此作為工藝規(guī)程模板。
二、設計(論文)依據(jù)
1、輸送機滾筒轉(zhuǎn)速為90r/min,減速器輸出功率為3.4kW。
2、運輸機連續(xù)工作,單向轉(zhuǎn)動,載荷變化不大,空載起動,減速器小批生產(chǎn),使用
年限10年,大修期3年,兩班制工作,運輸帶容許速度誤差為5%。
3、工藝決策規(guī)則的制定限制的條件為零件的總體信息,型面的特征信息,工藝常規(guī)
邏輯,企業(yè)的工藝習慣等。
三、技術要求
1. 對蓋套類零件的工藝術語、工藝知識、工藝參數(shù)等進行規(guī)范化,標準化。
2、建立人機友好的工作界面,便于用戶對工藝知識的獲取、管理與維護。
3、采用Pro/E對零件進行三維造型。
4、數(shù)據(jù)庫采用SQL Server2000,開發(fā)工具采用Delphi6.0/7.0。
.
四.畢業(yè)設計(論文)物化成果的具體內(nèi)容及要求
(具體內(nèi)容參照機械工程系畢業(yè)設計<論文>大綱及實施細則的有關要求填寫)
圖紙內(nèi)容及張數(shù)
減速器裝配圖 1 張(A0)
零件圖 4~6張(A1~A2)
-
實物內(nèi)容及要求
完成滿足該系統(tǒng)要求的原型系統(tǒng)
其他:
1、完成設計說明書1份(字數(shù)在2萬字以上)
2、軟件測試分析報告各一份。
3、零件三維造型3~5個。
4、源程序代碼1份。
5、典型零件工藝模板1套。
五. 畢業(yè)設計(論文)進度計劃
起訖日期
工作內(nèi)容
備 注
3.31——4.13
畢業(yè)實習,收集資料。
4.14——4.27
資料整理,擬訂設計方案。
4.28——5.31
設計傳動系統(tǒng),建立數(shù)據(jù)庫與工藝模板,系統(tǒng)測試。
6.1——6.15
編寫設計計算說明書。
6.16——6.22
畢業(yè)設計資料審閱,修改。
6.23——6.27
分小組答辯。
六. 主要參考文獻:
1、王先逵.機械制造工藝學.北京:機械工業(yè)出版社,1995.
2、趙汝嘉.計算機輔助工藝設計(CAPP).北京:機械工業(yè)出版社,1995.
3、三味工作屋.SQL Server7.0管理指南.北京:中國水利水電出版社,1999.
4、戴曙.金屬切削機床.北京:機械工業(yè)出版社,1999.
5、朱寶庫.機械設計.哈爾濱:哈爾濱工業(yè)大學出版社,1994.
6、周開勤.機械零件手冊.北京:高等教育出版社,1989.
7、李存斌.Delphi6.0,程序設計及其應用開發(fā).北京,中國水利水電出版社,2002.
8、王細洋,王叔淳.工藝知識管理系統(tǒng)的設計,計算機輔助設計與制造,
1998,(4):47-50.
9、恒永興,張振明,黃乃康等.CAPP面向?qū)ο笾R庫管理系統(tǒng)的設計與實現(xiàn),
機械科學與技術.2001,20(1):140-142.
10、劉金坤,王勻,王雷剛等.基于關系型數(shù)據(jù)的專家系統(tǒng)結(jié)構(gòu)模型及實現(xiàn)技術,
中國機械工程。2001,12(5):545-547.
七、其他
學科門類: 工學 單位代碼 : 32022
箱體類零件知識庫及工藝
模板的研究
測試分析報告
學生姓名
于 光 耀
所學專業(yè)
機械設計制造及其自動化
班 級
建材機械99(5)班
學 號
B9912027
指導教師
王 正 剛
鹽城工學院機械工程系
二○○三年六月
鹽城工學院畢業(yè)設計說明書
摘 要
隨著計算機在制造型企業(yè)中的運用,通過計算機進行工藝的輔助設計以成為可能,CAPP的運用將為提高工藝文件的質(zhì)量,縮短生產(chǎn)準備周期,并為廣大工藝人員從繁瑣、復雜的勞動中解放出來提供一條切實可行的途徑。本文介紹了箱體類零件的加工工藝分析以及對其知識庫與工藝模板的建立和表示。知識庫主要提供計算機輔助工藝過程設計(CAPP)系統(tǒng)中箱體類零件工藝設計所需的工藝決策規(guī)劃、機床、刀具、量具等信息資源。本文在基于對箱體類零件工藝分析的同時,還描述了通用計算機輔助工藝過程設計(CAPP)所依據(jù)的知識庫的表達、知識的存取,系統(tǒng)工藝模板的建立等一系列問題。
關鍵詞:箱體 計算機輔助工藝設計 知識庫
Abstract
With computer application of enterprise of making etc., carry on through computer craft supplementary to design in order to become possible, Application of CAPP for improve craft quality of file, shorten and produce cycle of planning, And liberate from tedious, complicated work and offer a feasible way for the masses of craft personnel.This text introduce case body processing technology of part analyse and to knowledge base and craft foundation and expression of template their. Knowledge base offer Computer Aided Process Planning (CAPP) System case body part technological design necessary craft make policy plan, lathe, cutter, measuring tool information resources. This text while because of analysing about the body part craft of the case, describe all-purpose Computer Aided Process Planning (CAPP) Expression, access of knowledge of knowledge base that base on, systematic craft foundation a series of problem of template.
Key words : Case CAPP Knowledge base
2
測試分析報告
一引言
基于PDM平臺的CAPP可以充分利用PDM的強大功能,實現(xiàn)工藝設計過程控制和并行工程。在國內(nèi)許多CIMS工程中,越來越多的企業(yè)開始選擇商用PDM軟件作為CIMS的集成平臺和并行工程的使用環(huán)境,開發(fā)基于PDM的CAPP系統(tǒng)必將成為一個發(fā)展趨勢。
1.編寫目的
編寫此測試報告的目的是為了保證基于PDM的CAPP系統(tǒng)的正常運行,所以要通過測試,來發(fā)現(xiàn)錯誤和異常情況,以保證程序在以后的運行過程中盡可能的少出現(xiàn)故障。
2.背景
本此測試的是基于PDM的CAPP系統(tǒng)框架的構(gòu)建,是由鹽城工學院機械工程系提出的。它是由葛友華、劉道標、王正剛老師共同負責,由本屆畢業(yè)生張健、劉忠明同學作為畢業(yè)設計的課題協(xié)同規(guī)劃和開發(fā),以期能建立起基于產(chǎn)品數(shù)據(jù)管理的計算機輔助工藝過程規(guī)劃的實際應用系統(tǒng),以期能夠投入到企業(yè)的實際應用中。由于測試環(huán)境與實際運行環(huán)境之間可能存在著差異,所以在實際運行過程中難免存在著不足之處,有待于進一步的完善。
3.定義
CAD: 計算機輔助設計,全稱為Computer-Aided Design;
CAM: 計算機輔助制造,全稱為Computer-Aided Manufacturing;
PDM: 產(chǎn)品數(shù)據(jù)管理,全稱為Product Data Management;
CAPP:計算機輔助工藝規(guī)程設計,全稱為Computer-Aided Process Planning;
CIMS:計算機集成制造系統(tǒng),全稱為Computer integrated manufacturing system。
4.參考資料
(1)劉道標.基于PDM的CAPP系統(tǒng)框架的研究與實現(xiàn).南京航天航空大學碩士學位論文,2002年12月。
(2)李善平,劉乃若,郭鳴等著.產(chǎn)品數(shù)據(jù)標準與PDM.清華大學出版社,2002年4月。
(3)魏志強,王先逵,楊志剛,吳丹. 集成制造環(huán)境下的計算機輔助工藝設計框架系統(tǒng)2001年2月21號。
(4)《軟件標準和指導性技術文件》.航空工業(yè)標準HB6465—90。
二測試概要
本次測試主要是對下面的程序進行的:
(1) 登陸界面的測試
測試動態(tài)鏈接數(shù)據(jù)庫,輸入服務器名、服務器密碼;
測試登陸用戶的合法性,輸入用戶名和密碼;
(2) 系統(tǒng)主界面的測試
測試簡單的WEB瀏覽器能否應用;
測試各應用模塊能否正常顯示;
(3) 用戶管理界面的測試
測試用戶管理輸入數(shù)據(jù)是否有效;
測試添加、修改、刪除、關閉按鈕是否有效,是否有異常情況;
(4) 數(shù)據(jù)備份的測試
測試數(shù)據(jù)庫中的內(nèi)容能否以文件形式保存?zhèn)浞荩?
(5) 項目管理模塊的測試
測試該模塊所有界面中的按鈕能否正常實現(xiàn)功能;
測試是否對所有項目都分配完成后才能進入下一流程;
(6) 產(chǎn)品管理模塊的測試
測試產(chǎn)品管理模塊中所有功能是否能夠正常實現(xiàn);
測試產(chǎn)品管理模塊中的功能是否符合需求;
(7) 工藝文件管理模塊的測試
測試新建工藝、打開工藝、工藝提取、工藝預覽、工藝打印能否正常實現(xiàn)功能;
測試該界面中的各個子模塊是否有異常情況;
(8) 工序文件管理模塊的測試(圖略)
測試該模塊中新建工序文件、打開工序文件是否正常實現(xiàn)功能;
測試該模塊中各個功能是否正常,有無異常情況;
(9) 工藝數(shù)據(jù)管理模塊的測試
測試該模塊中典型工藝數(shù)據(jù)維護、知識庫管理、切削用量和加工余量能否正常實現(xiàn)功能;
測試各個子界面中的按鈕等是否能實現(xiàn)其功能,有無異常情況;
(10) 工藝設計模塊的測試
測試該模塊中基于實例的工藝生成和基于模板的實例生成、工藝路線能否正常實現(xiàn)其功能;
測試該模塊中各界面的需求功能能否正常實現(xiàn),有無異常情況要處理;
(11) 系統(tǒng)查詢模塊的測試
測試基于WEB的查詢模塊能否實現(xiàn)其功能;
測試與后臺數(shù)據(jù)庫鏈接有無異常情況;
三測試結(jié)果及發(fā)現(xiàn)
(1) 測試1
輸入錯誤的數(shù)據(jù)庫服務器名稱,系統(tǒng)報錯,數(shù)據(jù)庫自動斷開,系統(tǒng)自動關閉。
輸入正確的數(shù)據(jù)庫服務器名稱,服務器密碼錯誤,系統(tǒng)無法進入,關閉后重新登陸。
輸入正確的數(shù)據(jù)庫服務器名稱和密碼,用戶名出錯時,無法登陸系統(tǒng)。
輸入正確的數(shù)據(jù)庫服務器名稱和密碼,正確的用戶名,密碼錯誤時無法登陸系統(tǒng)。
通過以上測試得出結(jié)果,只有當以上各項都符合時,方能成功登陸本系統(tǒng)。
(2) 測試2
測試主界面能否實現(xiàn)簡單的WEB瀏覽器功能,在地址欄中輸入所要訪問的主頁地址,測試在相應的WebBrower處能否正常顯示網(wǎng)頁內(nèi)容。
測試主菜單中的各個鏈接是否正常,點擊時能否顯示相應的界面。
通過反復的測試,發(fā)現(xiàn)了一些意想不到的問題,尤其時在集成整個系統(tǒng)界面的時候,通過不斷的調(diào)整最終集合成主界面。
(3) 測試3
測試用戶管理界面時,當姓名輸入框為空時,無法對登陸用戶進行添加、修改、刪除;當?shù)顷懹脩魹橄到y(tǒng)管理員時,擁有最高權(quán)限可以對整個用戶管理界面進行維護,當?shù)顷懹脩魹槠胀ㄓ脩艋蚬に嚾藛T時,無法運用用戶管理界面中的添加、修改、刪除按鈕進行用戶權(quán)限管理。剛開始時,當用戶欄為空時也可以對用戶管理界面進行修改。
(4) 測試4
測試數(shù)據(jù)備份界面時,當?shù)顷懹脩魹橄到y(tǒng)管理員時可以對基礎資源庫進行數(shù)據(jù)備份,以文件形式保存到硬盤中,而當普通用戶登陸時則沒有此權(quán)限功能。而在具體實現(xiàn)此功能時,經(jīng)過反復調(diào)試后,總算實現(xiàn)了此功能。
(5) 測試5
測試項目管理模塊時,由于要實現(xiàn)通用化,所以在建立后臺數(shù)據(jù)庫時要建立關聯(lián)庫,具體實現(xiàn)的時候用SQL查詢語言來實現(xiàn),當項目分配完成后要進入下一個流程,關鍵在于要實現(xiàn)如下需求,只有當所有項目都分配完畢后才能進入下一個工作流程,這就要逐一讀取數(shù)據(jù)庫中關于項目分配的信息,來確定是否能夠?qū)崿F(xiàn)。但由于開發(fā)者自身條件的限制,導致后臺數(shù)據(jù)庫中的內(nèi)容不夠充實,只是實現(xiàn)了一定的設計思想。
(6) 測試6
測試產(chǎn)品管理模塊時,首先是對產(chǎn)品設計管理界面的測試,利用樹形結(jié)構(gòu)作導航,利用SQL查詢語言,使左邊的產(chǎn)品或零件與右邊的詳細信息相對應,當指針指到產(chǎn)品樹中的某一零件時就觸發(fā)事件,在右邊相應的位置顯示所查詢到的詳細信息,如零件的總體信息、工藝信息、其它信息,還可以查看其相應的圖形,如果在數(shù)據(jù)庫中未添加零件圖形,則要到產(chǎn)品數(shù)據(jù)管理界面提供的圖形管理處加入與零件相對應的圖形,在測試過程中發(fā)現(xiàn)采用樹形結(jié)構(gòu)來導航是非常方便的,不過在維護過程中對樹形結(jié)構(gòu)管理時,容易產(chǎn)生數(shù)據(jù)庫更新不足,產(chǎn)生一些意外的出錯信息,經(jīng)過反復測試后,調(diào)整了數(shù)據(jù)庫的結(jié)構(gòu),終于實現(xiàn)了初步的功能,而工藝信息部分是通過顯示按扭來觸發(fā)事件,當零件的工藝已經(jīng)制定好了以后,則通過查詢來檢索后臺數(shù)據(jù)庫零件工藝匯總中的關于此零件的工藝信息,如果零件的工藝未制定,則進入新建工藝界面對零件工藝進行編輯,而工藝設計可以運用兩種方法,一種是基于實例的工藝生成,還有是基于模板的工藝生成,測試過程中主要是測試產(chǎn)品樹中的零件與工藝信息是否能關聯(lián),以及后臺數(shù)據(jù)庫能否正常工作,經(jīng)過修改后已經(jīng)實現(xiàn)了初步功能。
(7) 測試7
測試過程中主要是對新建工藝界面、打開工藝、工藝提取、工藝預覽、工藝打印能否正常實現(xiàn)功能;測試該界面中的各個子模塊是否有異常情況;在測試過程中主要是要使各個界面都能實現(xiàn)其初步功能,使之不出現(xiàn)異常情況,開始測試時總出現(xiàn)一些小錯誤,最后在程序中加入了異常處理后在運行時就把錯誤給排除拉,
在動態(tài)輸入數(shù)據(jù)時,可以選擇數(shù)據(jù)庫中的內(nèi)容添加到數(shù)據(jù)輸入框中,然后再通過按鈕觸發(fā)事件,保存到后臺數(shù)據(jù)庫中。通過動態(tài)輸入的數(shù)據(jù)與保存到數(shù)據(jù)庫中的內(nèi)容相比較,最后確認程序是否能滿足功能要求。
(8) 測試8
主要是測試工序管理模塊中的界面能否達到功能要求,測試該模塊中新建工序文件、打開工序文件是否正常實現(xiàn)功能;測試該模塊中各個功能是否正常,有無異常情況;通過在新建工序文件界面中動態(tài)輸入數(shù)據(jù),然后以文件形式保存到電腦中,然后再通過打開工序文件界面把剛才保存的文件打開來,查看數(shù)據(jù)是否與動態(tài)輸入的數(shù)據(jù)一致。如果數(shù)據(jù)不一致則說明程序還存在著問題,需要修改再調(diào)試,如果顯示的數(shù)據(jù)與動態(tài)輸入的數(shù)據(jù)完全一致,說明程序已初步實現(xiàn)了需求功能,可以對下一面進行測試。
(9) 測試9
主要是測試該模塊中典型工藝數(shù)據(jù)維護、知識庫管理、切削用量和加工余量界面能否正常實現(xiàn)其功能,最后測試各個子界面中的按鈕等是否能實現(xiàn)其功能,有無異常情況;在測試過程中,對典型工藝數(shù)據(jù)維護界面測試主要是動態(tài)輸入數(shù)據(jù),
再點擊相應的功能按鈕,查看生成的數(shù)據(jù)是否與動態(tài)輸入的數(shù)據(jù)相一致,如果得出的結(jié)果確實如此,則說明所編寫的程序是正確的,反之則需要修改,再不斷調(diào)試,直到實現(xiàn)需求功能為止。
(10) 測試10
主要是測試該模塊中基于實例的工藝生成和基于模板的工藝生成、工藝路線能否正常實現(xiàn)其功能;測試該模塊中各界面的需求功能能否正常實現(xiàn),有無異常情況要處理;根據(jù)上面所示的界面,首先是查詢與零件相對應的工藝,然后在網(wǎng)格中顯示出來,再點擊導出工藝按鈕,把檢索到的工藝單存儲到臨時表中,再顯示在網(wǎng)格中,以便使用者進行修改,直到達到要求為止,然后再存儲到零件工藝匯總表中,如果這一過程中輸入與輸出的數(shù)據(jù)相一致,則說明程序已實現(xiàn)了功能需求,反之,則要進行修改,調(diào)試直到達到要求為止。
(11) 測試11
主要是測試基于WEB的查詢模塊,點擊左邊的查詢按鈕,在右邊對應的位置顯示鏈接的內(nèi)容,如果未出現(xiàn)相應的界面,則說明源程序還需要修改,調(diào)試,直到能滿足功能需求為止。
四測試結(jié)論
1. 功能1
(1)能力
登陸界面已具備了動態(tài)連接數(shù)據(jù)庫的能力,以及辨別登陸用戶合法性的能力,經(jīng)過多次測試,已證明了登陸界面擁有了以上能力。
(2)限制
在測試過程中,發(fā)現(xiàn)了問題,開始時無法動態(tài)連接遠程數(shù)據(jù)庫,后來通過改進,才能夠連接到遠程數(shù)據(jù)庫。
2. 功能2
(1)能力
系統(tǒng)主界面已具備作為簡單的WEB瀏覽器的能力,能夠訪問INTERNET,另外也達到了連接各個系統(tǒng)子模塊的能力,經(jīng)過多次測試,證明已具備了以上能力。
(2)限制
由于只是一個簡單的WEB瀏覽器,所以跟IE相比還有一定的差距。
3. 功能3
(1)能力
用戶管理界面已經(jīng)具備了對使用本系統(tǒng)的用戶進行管理的能力,當?shù)顷懹脩魹橄到y(tǒng)管理員時可以對任何用戶進行修改其所有信息,也可以添加和刪除用戶;而當?shù)顷懹脩魹槠胀ㄓ脩魰r,則沒有權(quán)限修改用戶信息的能力。
4. 功能4
(1)能力
數(shù)據(jù)備份界面已經(jīng)具備了對基礎庫以文件形式保存的能力,經(jīng)過多次測試后,已經(jīng)能夠?qū)崿F(xiàn)功能需求,能夠保存數(shù)據(jù),并能夠在系統(tǒng)中顯示以文件形式保存的數(shù)據(jù)。
(2)限制
由于數(shù)據(jù)本身已保存在數(shù)據(jù)庫中,以文件形式再保存、備份只是為了防止意外事故發(fā)生,導致數(shù)據(jù)丟失,欠缺是為能所有用到的數(shù)據(jù)庫進行備份。
5. 功能5
(1)能力
項目管理模塊主要是對通用化的項目進行分配任務、編制任務,經(jīng)過這一流程后,最后審核項目。經(jīng)過測試,證明該模塊已具備了此能力。
(2)限制
由于對項目內(nèi)容及流程知道有限,導致建立的數(shù)據(jù)庫內(nèi)容教少,還不具備通用性,有待于改進、提高。
6.功能6
(1) 能力
產(chǎn)品管理模塊主要是用來對企業(yè)中的產(chǎn)品自制件、標準件、外協(xié)件等進行分類管理,對自制件如果未制定工藝則到相應的新建工藝界面制定工藝,如果已經(jīng)制定則能夠顯示其工藝內(nèi)容。經(jīng)過多次測試,證明該模塊已經(jīng)具備了以上能力。
(2) 限制
由于設計人員水平的限制,采用樹形結(jié)構(gòu)導航時,沒做到把樹結(jié)構(gòu)做到無窮級數(shù)展開,有待于進一步提高。
7.功能7
(1) 能力
工藝文件管理模塊主要具有工藝、打開工藝、工藝提取、工藝預覽、工藝打印的能力,經(jīng)過多次測試后,證明該模塊已經(jīng)具備了以上能力。
8. 功能8
(1) 能力
工序文件管理模塊已經(jīng)具備了新建工序卡片和顯示已經(jīng)保存的工序卡片的能力,經(jīng)反復測試后,證明該模塊已經(jīng)具備了以上能力。
9. 功能9
(1) 能力
工藝數(shù)據(jù)管理模塊主要是對典型工藝數(shù)據(jù)維護、知識庫管理、切削用量和加工余量庫查詢。經(jīng)過多次測試后,證明該模塊已經(jīng)具備了以上能力。
10.功能10
(1) 能力
工藝設計管理模塊主要是實現(xiàn)基于實例的工藝生成和基于模板的實例生成、工藝路線的查詢的能力。
(2)由于開發(fā)設計時間和自身水平的限制,還未能實現(xiàn)基于特征的工藝生成的能力,有待于進一步提高。
11.功能11
(1) 能力
系統(tǒng)查詢模塊主要是用來查詢基礎資源庫中的信息,經(jīng)過測試后已具備了此能力。
(2) 限制
由于開發(fā)者本身對ACTIVEFORM以及網(wǎng)絡發(fā)布了解不夠,還未能把用Delphi制作的網(wǎng)頁發(fā)布到服務器上,以達到基于WEB的查詢能力。
五評價
1. 能力
經(jīng)測試已證實了本軟件的能力。
2. 缺陷與限制
經(jīng)測試證實的軟件缺陷和限制已經(jīng)在測試結(jié)果和發(fā)現(xiàn)中交代過,綜合以上的缺陷和限制,對本軟件存在著一定程度的影響。
六測試總結(jié)
通過此次測試,基于PDM的CAPP系統(tǒng)得到了很大的改進,但要消耗了測試人員很大的時間,設計人員更是消耗了大量的機時才使系統(tǒng)性能有了一定的提高,不過通過測試后,對于軟件本身來說是必不可少的工作,有利于系統(tǒng)性能的改進。
unit xjgy;
interface
uses
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;
implementation
uses unit1;
{$R *.dfm}
procedure Tl_xjgy.FormCreate(Sender: TObject);
var
i,ss:integer;
serveString: string;
begin
wjj:=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 機械加工工藝過程卡片') ;
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 機床庫') ;
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 機械加工工藝過程卡片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['工序標志']:=ss;
adoquery2.Post;
ss:=ss+10;
end;
adoquery2.Active:=false;
adoquery2.Active:=true;
//改變網(wǎng)格大小
dbgrid1.Columns[0].Width:=50;
dbgrid1.Columns[1].Width:=100;
dbgrid1.Columns[2].Width:=100;
dbgrid1.Columns[3].Width:=60;
dbgrid1.Columns[4].Width:=60;
dbgrid1.Columns[5].Width:=70;
dbgrid1.Columns[6].Width:=70;
dbgrid1.Columns[7].Width:=70;
dbgrid1.Columns[8].Width:=70;
dbgrid1.Columns[9].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['機床標志1']=0) and (adoquery4['機床標志2']=0) and (adoquery4['機床標志3']=0)then
begin
ss:=adoquery4['機床名稱'];
RootNode := treeview3.Items.Add( nil, ss );
RootNode.ImageIndex := 0; { Specify which bitmap to use }
RootNode.SelectedIndex := 0;
end;
if (adoquery4['機床標志1']=0) and (adoquery4['機床標志2']=0) and (adoquery4['機床標志3']=1)then
begin
Category := adoquery4.fieldbyname('機床分類').AsString;
CatNode := treeview3.Items.AddChild( RootNode, Category );
CatNode.ImageIndex := 5;
CatNode.SelectedIndex := 2;
end;
if (adoquery4['機床標志1']=1) and (adoquery4['機床標志2']=1) and (adoquery4['機床標志3']=1)then
begin
jidian := adoquery4.fieldbyname('機床型號').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['夾具標志1']=0) and (adoquery5['夾具標志2']=0) and (adoquery5['夾具標志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['夾具標志1']=0) and (adoquery5['夾具標志2']=0) and (adoquery5['夾具標志3']=1)then
begin
Category := adoquery5.fieldbyname('夾具分類').AsString;
CatNode := treeview4.Items.AddChild( RootNode, Category );
CatNode.ImageIndex := 5;
CatNode.SelectedIndex := 2;
end;
if (adoquery5['夾具標志1']=1) and (adoquery5['夾具標志2']=1) and (adoquery5['夾具標志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['刀具標志1']=0) and (adoquery6['刀具標志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['刀具標志1']=1) and (adoquery6['刀具標志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['量具標志1']=0) and (adoquery7['量具標志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['量具標志1']=1) and (adoquery7['量具標志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);
begin
close;
end;
procedure Tl_xjgy.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (DBGrid1.SelectedIndex = 1) then
begin
//調(diào)用相應樹形結(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);
begin
if (DBGrid1.SelectedIndex = 5) then
begin
adoquery2.Edit;
adoquery2['機床設備']:=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['夾具設備']:=TreeView4.Selected.Text;
adoquery2.Post;
end;
end;
procedure Tl_xjgy.TreeView5Change(Sender: TObject; Node: TTreeNode);
begin
if (DBGrid1.SelectedIndex = 7) then
begin
adoquery2.Edit;
adoquery2['刀具設備']:=TreeView5.Selected.Text;
adoquery2.Post;
end;
end;
procedure Tl_xjgy.TreeView6Change(Sender: TObject; Node: TTreeNode);
begin
if (DBGrid1.SelectedIndex = 8) then
begin
adoquery2.Edit;
adoquery2['量具設備']:=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);
begin
avviewx1.ClearMarkup;
avviewx1.Visible:=false;
end;
procedure Tl_xjgy.SpeedButton6Click(Sender: TObject);
var
s:integer;
begin
adoquery2.Last;
s:=adoquery2['工序標志'];
adoquery2.Append;
s:=s+10;
adoquery2['工序標志']:=s;
end;
procedure Tl_xjgy.SpeedButton4Click(Sender: TObject);
var
aa,bb:integer;
begin
try
begin
aa:=adoquery2['工序標志'];
aa:=aa-1;
adoquery2.Prior;
bb:=adoquery2['工序標志'];
adoquery2.Insert;
if aa=bb then
begin
bb:=bb-1;
adoquery2['工序標志']:=bb;
end else adoquery2['工序標志']:=aa;
adoquery2.Post;
end
except showmessage('請將指針上移,謝謝');
end;
adoquery2.Active:=false;
adoquery2.Active:=true;
end;
procedure Tl_xjgy.SpeedButton5Click(Sender: TObject);
begin
adoquery2.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('機床設備').AsString:=adoquery2.fieldbyname('機床設備').AsString;
adoquery10.fieldbyname('夾具設備').AsString:=adoquery2.fieldbyname('夾具設備').AsString;
adoquery10.fieldbyname('刀具設備').AsString:=adoquery2.fieldbyname('刀具設備').AsString;
adoquery10.fieldbyname('量具設備').AsString:=adoquery2.fieldbyname('量具設備').AsString;
adoquery10.fieldbyname('單件工時').AsString:=adoquery2.fieldbyname('單件工時').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;
begin
adoq