緒論:寫作既是個人情感的抒發,也是對學術真理的探索,歡迎閱讀由發表云整理的11篇電子商務綜合論文范文,希望它們能為您的寫作提供參考和啟發。
2、完善庫存管理制度,增強庫存管理應對危機的能力
危機處理能力是一個企業所必須擁有的能力之一,在企業庫存管理方面,應對危機作出有效合理的處理方案也是庫存管理所需要的一個重要能力。我們應該看到的是,現代大多數企業庫存管理危機處理能力缺失,在面臨危機是不能夠及時有效的提出解決方案,最終導致企業損失嚴重。在現時代到來之際,如何解決完善批業庫存制度,增強庫存管理應對危機的能力的問題就顯得致關重要。在具體的實踐中,每個企業在運營過程中都要確認所有庫存信息的精準正確,不斷提高庫存管理部門的市場洞察力及分析力。除此之外,還要具體明確分工,要求每個崗位都必須有明確具體的分工要求,監督員工認真執行。不斷加強庫存管理者應對危機的能力,強調各部門之間及時進行有效的職能合作。同時建立庫存管理工作的考核評估體系,加強各部門的溝通交流,提高企業整體庫存意識,不斷增強企業庫存管理應對危機的能力。
一、緒論
藥品是關乎人們切身利益的一種特殊產品,隨著人均收入水平的提高,人們更加注重藥品的質量、品牌、包裝等。消費者能夠感受到藥品的微小差別而且具有一定的偏好,不會因為當兩種藥品價格有差異時造成價格高的藥品完全銷售不出去。此外,制藥企業存在生產能力約束,沒有任何一家制藥企業有能力生產足夠的藥品來滿足整個市場。中國現階段的制藥企業低水平重復建設問題嚴重。企業數量多,規模小,生產集中度低,產品結構雷同,生產能力過剩,全行業設備利用率不足一半。這些都增加了企業的生產成本,是利潤率走低的一個重要原因。為緩解藥價虛高問題,政府應該放松管制,為藥品生產領域創造自由競爭的市場氛圍,制藥企業通過兼并、聯合、重組,實現優勝劣汰、適度集中和效率提高。制藥企業在市場自由競爭下的合并重組可以實現資源的優化配置。同時促使企業加大研發投入,進行科技創新,擺脫僅生產仿制藥的困局,提高市場競爭力。現階段中國的醫療機構進入壁壘較高,同時醫療體制改革相對滯后,這些導致公立醫院仍然是壟斷者。公立醫院具有公益性質,其經費來源于財政撥款、醫療服務收入和藥品收入。改革開放后,政府的財政投入占醫院總收入的比重逐年減少,目前這個比例全國平均不足10%。為保證正常運轉,政策上允許醫院以15%的藥品進銷差價來彌補虧空,即“以藥養醫”的補償機制?!耙运庰B醫”機制的合法化使得醫院獲得了通過出售藥品取得盈利的合法權力。公立醫院成為了通過高價出售藥品的營利性機構,藥品銷售成為了醫院收入的主要來源。
二、文獻概覽
標題:藥品功能、藥品銷售渠、藥品價格、藥品促銷方式、藥品品牌形象、公共權力與藥品營銷額度之間的關系。
陳宏付(2002年)認為在藥品銷售的過程中,非處方藥品與普通商品的銷售相比而言,顧客重效用而輕價格,即顧客購買藥品時藥品的效用是首要考慮因素,即藥品療效。顧客為圖個方便,只要藥效好,即使藥品稍貴些也愿買。一般而言,顧客心里通常是先考慮商品的品質、價格和自身承受能力,后考慮商品的效用,這是由人的本性所決定的。歸成(2010)指出在世界藥品銷售額度排名中,抗腫瘤類的藥品銷售額度最高,達481.89億美元,年增長率為11.3%,其次是調脂類藥品,再次就是呼吸系統用藥類達312.71億美元,增幅達5.7%,再就是質子抑制類劑、抗抑郁藥、自身免疫藥等的銷售額度也都分別增長16.9%,上述藥品由于藥品功能性的差異性,導致藥品銷售額度方面的差異。
曾建雄(2012)藥品銷售人員依靠醫藥專業知識,以及其它綜合專業知識的運用,通過提升對于顧客用藥咨詢的指導水平和提高顧客滿意度的方式,在關聯用藥的促銷推薦上,實現藥品用藥的有的放矢,從而提高了藥品銷售促銷的成功率。根據在現代市場營銷的理念,顧客所得的讓渡價值不可以簡單地把價值與價格等同,所以在日益競爭加劇藥品營銷市場環境中,誰對顧客具有更大的讓渡價值,誰就是市場營銷的主導者,誰就可以提高自己藥品的銷售額度。所以通過為顧客提供服務價值的促銷方式,讓顧客獲得更多的讓渡價值。王曉敏(2005)認為廣告促銷在提高藥品銷售的宣傳過程中是最有效、最節省時間和成本的方法,尤其是在非處方藥品的促銷中,廣告促銷是必不可少的。例如,某個藥品憑借中央媒體和地方媒體的廣告宣傳促銷的方式,在很短的時間內,就實現了聞名全國的促銷效果。另外,對于藥品進行廣告藝術性的宣傳表現,把藥品的特性和療效進行充分的宣傳,從引起患者視覺和聽覺方面的共鳴,從而激起顧客的購買欲望。
陳莎(2012)指出中國藥品電子商務是目前新興的藥品銷售渠道,它通過網絡技術和SaaS交付模式,連接全球的藥品供應鏈網絡,實現了藥品企業管理和電子商務及藥品供應鏈的一體化,從而保證了藥品企業內部管理及企業間的商務流程有效協同。在全球信息化程度不斷提高的情況下,中國藥品電子商務的通過網絡銷售渠道的形式,實現了為消費者提供便捷的藥品服務的目標和方便及時、成本低廉的效果。
李榮凌(2009)指出國家規定藥品價格下降之后雖然某醫院的藥品總銷售金額和付款金額扔逐年遞增,但增長幅度不同,從加成率、利潤率看是逐年降低的,利潤率下降幅度為52.88%,利潤率的降低,導致醫院利潤減少,患者受益增多。隨著降價比例增大及進價下降,醫院藥品零售價下降幅度較大,利潤減少率和患者受益率均不斷增大,且利潤減少率起點為57.5%;國家規定的藥品零售價下降幅度和患者受益率增大幅度要小些,而利潤減少率卻逐漸增大,當降價比例達39.3%時,利潤減少率為零。當進價變動比例提高,當提高17.65%時,醫院利潤減少一半,患者受益為零。總的來說,這兩種價格體系雖然對商業公司和藥廠影響較小,但醫院的利潤率卻減少在50%以上,患者也得到一定實惠。當藥品進價下降時,患者受益率增大,醫院利潤率減少。當藥品進價與降價比例過大時,商業公司和藥廠都沒有一定利潤,就不會銷售藥品了,醫院也就無法購進進行銷售了,所以藥品的銷售價格對于藥品銷售額度具有直接性的決定作用。馮國忠(2006)認為在藥品銷售過程中應該摒棄“價格=成本+利潤”的定價方式,應該把消費者也歸入價格體系中。例如一種OTC的外用抗感染藥,屬微量消費品,需求彈性小,其包裝規格應以2~3d用藥量為宜,單位包裝價格就不宜過高,包裝也不宜過大,否則消費者會有一種浪費的感覺,這樣可使藥品的零售單價降到一個讓消費者更能普遍接受的水平,從而可以擴大購買此藥品的消費者群體的數量,并最終促進藥品銷售額度的增加。
毛小青(2012)認為在藥品銷售過程中通過品牌提升策略,來改善和提高影響藥品品牌的各項要素,即通過各種形式的廣告宣傳來提高藥品品牌知名度和美譽度。消費者在購買決策過程中的重要環節是藥品品牌的評價,另外中國人在購買商品時也有求名的動機,故此藥品銷售人員要適應其求名的購物動機的心理,來不斷地提升藥品品牌。做品牌比做銷量更加重要,這在醫藥銷售行業已經達成共識。例如,在品牌營銷模式的運用中,東盛科技掀起了名為“抗感風暴”的品牌戰略:用白加黑支撐起東盛科技的企業品牌,再憑借東盛的實力,推出東盛牌板藍根顆粒、東盛牌抗病毒口服液等一系列感冒藥,形成了一個抗感家族。
田瑋(2010)指出藥品企業要及時配合政府政策規定,來規范和約束自己的銷售人員,用合法的營銷手段獲取合理的利潤。例如國內一些藥品合資企業聯合簽署的《醫藥銷售人員行為規范準則》,這對于加強藥品行業的監督和管理和整合醫藥銷售市場具有一定的凈化作用。藥品企業通過加強對國家政策的追蹤和分析,以及政策預警方面的研究,并通過對于招標采購和降價及醫藥分家等國家政策對于藥品銷售方面的影響,及時調整推廣策略和推廣重點,讓藥品銷售策略和行動步調的實現了協調統一。
通過以上研究文獻的概覽可知:藥品的功能、藥品銷售渠道、藥品促銷方式、藥品價格、藥品品牌形象、關于藥品的公共權力政策都分別與北京市藥品銷售額度具有顯著的相互關聯性。
三、研究方法與設計
本論文采用定量研究與演繹推理相互結合的方法。
把第一手數據資料作為研究數據的來源,把第二手數據作為參考資料。
把根據李克特測量量表形式編制的調查問卷作為研究工具。
本論文共發放調查問卷500份,具體分配比例為:北京藥品銷售商250份、藥品消費者250份。有效回收共計488份,有效率為97.6%,完全符合論文設計要求。四、數據分析
信度分析:
“藥品功能、藥品促銷方式、藥品銷售渠道、藥品價格、藥品品牌、公共權力、藥品銷售額度”的Cronbachα系數值結果分別是:0.776、0.758、0.729、0.730、0.785、0.711、0.762,上述不同變量的信度數值都大于論文設計規定的最低信度數值0.6,完全符合論文設計與研究的要求。
效度分析:
通過運用主成分分析法得出因子載荷值為0.682-0.789,超過0.5,這表明變量中的各個題目與其相應變量之間均存在較大的相關性,輔合效度符合設計要求。研究對象通過旋轉成份矩陣被分為七個成份,基本驗證了本調查問卷的各題目具有相對獨立性,判別效度符合設計要求。
描述性分析:
總體均值中最高的是公共權力(4.5689),其次是藥品價格(4.3831),第三是藥品功能(3.9441),第四是藥品銷售額度(3.9313),第五是藥品促銷方式(3.7561),第六是藥品品牌(3.6537)、第七是藥品銷售渠道(3.3718)。其中應答者對于“藥品銷售渠道”的回答得分最高,對于“公共權力”的回答得分最低。
標準差中最高的是藥品促銷方式(0.94523),其次是藥品功能(0.92804),第三是藥品銷售額度(0.89528),第四是藥品品牌(0.89443),第五是藥品價格(0.88537),第六是藥品銷售渠道(0.86689)、第七是公共權力(0.85393)。其中應答者對于“藥品促銷方式”的回答意見分歧最大,對于“公共權力”的回答意見最為集中。
皮爾遜(積矩)分析:
自變量“藥品功能、促銷方式、銷售渠道、藥品價格、藥品品牌、公共權力”和因變量“藥品銷售額度”之間的相關系數的絕對值分別為0.596、0.527、0.549、0.565、0.574、0.582,介于0.40-0.60之間,說明這六個變量和因變量之間存在中等強度的正相關性。所有自變量相互兩者之間的相關系數為0.017~0.199之間,均小于0.4的相關性,表示自變量相互之間具有獨立性。
四、結論
本論文通過文獻概覽和調查問卷的方式,并結合相關研究數據的分析,對北京地區藥品銷售額度的影響因素進行了分析,在第一章中提出的研究問題在此被驗證。即對于“北京藥品銷售額度”具有影響的因素有“藥品功能、促銷方式、銷售渠道、藥品價格、藥品品牌、公共權力”,這些影響因素與“北京藥品銷售額度”之間存在中等強度的正相關性。同時由于只是選取了六個自變量作為研究變量對于北京藥品銷售額度的影響作用進行了研究,在理論和實踐方面對于本論文的研究意義都是一個限制。
參考文獻:
[1]田瑋.淺析零售藥店在藥品銷售中存在的問題.中外醫療[J].2010.18.
[2]陳莎.基于B2C模式的藥品銷售平臺.商場現代化[J].2012.5.
[3]歸成.金融危機對世界藥品銷售的影響.上海醫藥[J].2010.1.
[4]毛小青.論提高藥品銷售業績的策略.現代商貿工業[J].2012.3.
[5]曾建雄.淺談關聯用藥銷售的營銷策略.北方藥學[J].2012.9.
[6]馮國忠.我國OTC藥品營銷的4P和4C戰略.齊魯藥事[J].2006.10.
[7]李榮凌\張蔚.定價政策對醫院藥品銷售情況影響分析.中國醫院藥學雜志[J].2009.29(02).
畢業論文是高職院校人才培養過程中一個重要的環節,是對人才培 養質量的一次全面、綜合性的檢驗,學生通過畢業論文的訓練,不僅 能夠培養對知識、技能的綜合運用能力,而且能使學生初步具備分析 問題和解決問題的能力,培養創新意識。通過畢業論文寫作可以使學 生意識到企業需要什么樣的人才,了解企業的生產運營過程,從而使他 們把自己的畢業論文和以后的社會工作聯系起來,以便畢業后能更快 更好的適應社會。
目前各高職院校都普遍加強了對畢業論文工作質量重要性的認識, 逐步形成了較為全面的管理規章制度。畢業論文工作也取得了一些初 步成績,大多數同學對畢業論文重要性的認識比較到位,對畢業論文 的文本格式比較注重規范,也開始注重畢業論文的實用性,大部分指 導教師對指導工作認真負責。
但從總體看,由于各高職院校受自身發展歷史、學術風氣、擴大 招生、就業壓力、實習時間安排、高職教育發展不均衡等多方面因素 影響,在畢業論文環節中,在論文選題、論文寫作和論文答辯環節中 普遍存在著一些共性問題,本文以浙江育英職業技術學院國際貿易專 業為例,對學生的畢業論文情況進行匯總和分析。
一、浙江育英職業技術學院畢業論文情況分析
現將浙江育英職業技術學院國際貿易專業2010-2012級國際貿易專 業3個年級573名學生的論文進行統計分析。
(一) 基本情況統計
(詳見表1)
(二) 論文情況統計
(詳見表2)
(三) 分析
1.選題環節分析
通過追蹤三年學生的畢業論文選題,可以看出,論文標題從假大 空逐步過渡到有具體企業和具體實踐環節,但依然存在選題陳舊或多 人重復。如表2所示,在573人中有222人選題重復,題目為“XXX 公司出口現狀、存在問題及對策分析”只是公司名稱進行了替換,文 字內容有相當高的相似度,段落設置完全相同。有些論文雖然有具體 公司名和實踐環節,但學生個人從未進入公司參與具體工作,假題假 做,內容空洞,紙上談兵,無法將知識、技能很好地應用于職業與崗 位工作,造成畢業論文題目缺乏創新性和實際意義。通過表2,也看到 “其它與國際貿易專業無關論文題目”雖然還占一定比例,但可以看出 有遞減的趨勢,這可能與學院論文指南和老師加強了指導有關。
通過對題目和具體內容的分析,也發現一些積極的變化。通過表 2,可以觀察到學生選擇“電子商務、網絡營銷方面”的論文題目逐年 增多,由9人到13人到24人,很多中小企業電子商務意識也日漸成熟,在傳統營銷模式基礎上,企業紛紛采用營銷模式,說明學生的論 文題目也在與時俱進。
2. 寫作環節分析
論文寫作時間和畢業生實習時間重合,個別學生實習期間比較辛 苦,工作忙、壓力大,更有個別學生工作時間較長,經常出差,下班 后己是疲憊不堪,不能夠保證有足夠的寫作時間和寫作環境。
其次,論文寫作過程中基本都是教師聯系學生,詢問寫作情況, 學生個人很少甚至從不主動聯系指導教師,對指導教師提出的修改意 見也是置若罔聞或不能正確理解,有時通過幾十個郵件僅僅是為了說 明一個問題。相當多的學生缺乏基本的論文寫作能力,在論文寫作時 對于自己所論的問題、論點、例證和論證步驟不清晰,缺乏基本的文 字功底,語言運用能力較差,只是將多處找來的一堆堆材料沒有邏輯 聯系地堆砌在一起,缺乏基本的思辨能力。文體雜亂,不符合論文寫 作基本格式,甚至將企業內部新聞稿件、規章制度等直接拿來當作論 文內容,不加任何整理。抄襲現象嚴重,從頭到尾大段抄襲原著;更 有甚者應屆學生的畢業論文沿用往屆學生的畢業論文。
再者,在教師指導方面,由于指導教師個人還有繁重的教學、科 研等相關工作,在畢業論文指導中個別教師投入的時間和精力不夠, 沒能及時與學生聯系溝通,逐個甄別寫作內容的真實性,對學生寫作 過程無法全程掌控,造成指導教師對畢業論文的指導和檢查力度不夠。
3. 答辯環節分析
畢業論文最后環節就是論文答辯,這一環節是檢查學生畢業論文 的完成質量,考察學生知識與能力以及論文真實性,提升學生認知水 平的最后環節。許多學生認為答辯就是走過場,認為反正學校最終是 要讓他們畢業的。因此答辯之前對答辯事宜準備不充分,對自己的論 文不熟悉,尤其個別學生寫作環節就有問題,比如,有些學生拷貝抄 襲別人的論文,對論文結構完全不清楚,甚至還有買來的論文等,在 答辯現場論文陳述不清楚,對核心觀點、關鍵詞不清楚、不了解,在 回答問題時要么回答不出,要么答非所問。
三、改革理念及舉措
高職高專教育的培養目標決定了在其教學過程中,各個環節必須 具備鮮明的特色。教育部《關于加強普通高等學校工作的通知》進一 步明確了畢業論文的重要性,尤其針對高職畢業論文教育,教育部辦 公廳提出了明確的指導方針:高職高專學生的畢業論文要與所學專業 及崗位需求緊密結合,可以采取崗前實踐和畢業綜合訓練等形式,由 學校教師與企業的專業技術人員共同指導,結合企業的生產實際情況 選題,確定訓練內容和任務要求,時間應不少于半年。在此方針的指 導下,高職院校應做到:
(一)畢業論文管理的改革
加強畢業論文管理包含兩層涵義,一是規范,二是務實。
規范管理根據本校學生實際情況制定論文寫作管理規范制度,從 下達任務書、開題報告、教師指導、中期檢查、評閱、答辯等各個環 節上制訂出明確的規范和標準,以確保畢業論文的質量,在論文的寫 作各環節,利用QQ、微信、微博等現代化通訊手段,切實加強在線 的實時指導,改變過去那種“管理隨意、質量隨便”的情況。對論文 寫作的要求、意義、規范、時間、質量、獎懲等各環節,對學院、系、 教師、學生都提出明確可操作的具體要求。
務實管理根據高職高專學生自身特點,制定切實可行的畢業論文 寫作要求和指導手冊,給予學生切實的幫助。
(二) 選題方面的改革
要切實圍繞實際工作進行選題,選題提倡“小”、“新”、“真”、 “實”,一切從高職高專學生的實際出發,鼓勵問題與未來工作實際相 結合。改變過去那種“圍繞文獻資料團團轉,畢業論文紙上談兵,假 題假做、內容空洞”的現象,使畢業綜合實踐的任務緊扣畢業生的職 業崗位和所學專業,使畢業生有真實的課題可做、有真實的內容可寫。 學生可以把企業的技術改造、設計創新、正在做的實訓項目、工作過 程中遇到的問題、發現的技能技巧、工作中的經驗體會等作為畢業論 文的課題。
(三) 成果形式的改革
要努力實現高職畢業論文這一最重要教學環節的真正意義,不僅 要注重畢業論文的書面成果,而且更要注重畢業論文的實物成果,以 真正完成畢業論文。鼓勵創新,對于市場調查報告、創意設計書、創 業設計書、企業生產(管理)改革計劃書、職業規劃方案等多種靈活 的畢業論文形式應予以支持和鼓勵。
(四) 答辯模式的改革
由指導教師、企業專家、行業協會領導和企業事單位行家共同組成答辯委員會,針對學生的書面成果和實物成果,實施以就業為導向 的“畢業答辯一成果展示一就業招聘”三位一體的畢業答辯新模式, 從而徹底改變過去那種“審問式答辯,對學生就業毫無益處”的做法。
四、結語
英語專業本科畢業論文寫作有著重要的意義,《高等學校英語專業英語教學大綱》認為它是考查學生語言能力、獨立能力和創新能力的重要參考,“評估學業成績的一個重要方式”。[1]近年來,雖然有了更多關于英語專業畢業論文寫作的研究,內容既涉及微觀的選題、摘要、主題句、語言和格式問題,又涉及宏觀的現狀分析、論文指導體系和評估機制問題。[2][3][4][5][6]然而,卻鮮有學者論及網絡資源的利用。這不僅與我國高校豐富的中英文電子圖書資源和全球幾千億之巨的中英文網頁資源明顯不協調,[7][8]而且與很多本科學生的實際上網情況和畢業論文對網絡資源的嚴重濫用很不協調。因此,如何在畢業論文寫作過程中預防網絡抄襲、合理有效地利用日益發達的網絡環境和日益豐富的網絡資源,是適應信息時展、進一步提高英語專業本科畢業論文質量的急迫需要解決的問題。本文擬探討如何利用豐富的中英文網絡資源,發揮個人網絡信息能力,實現畢業論文寫作的網絡策略,在方便教師論文指導和管理的同時,也方便學生更靈活地運用自己的時間和空間,減少論文寫作的工作量,降低論文寫作的難度,進而有效地提高畢業論文寫作的效率和質量。
一、絡寫作策略的基本原則
結合學生的經濟、社會和文化背景,網絡寫作策略應該遵循以下原則:(1)資金節約原則。盡量免除不必要的經濟壓力,充分利用現有的個人電腦、聯網手機或者公共電腦的軟硬件設施,同時發揮個人的網絡和現實人際關系,有效獲取所需資源。(2)時間和空間靈活利用原則。網絡寫作的主要目的之一就是實現隨時隨地上網就可以寫作的構想。(3)語言文化的敏感原則。首先,由于大多數電腦或者手機設備的系統都使用中文軟件,因此為了在搜索英文信息時不受中文信息的干擾,需要把網頁瀏覽器的語言環境進行調整,并且把國外搜索引擎的偏好和指令語言都改為英語。其次,英語論文與中文論文有較大的區別,在寫作過程中要盡量避免漢語語言文化的負遷移。(4)遵守國家的互聯網相關法律法規。
同時,雖然畢業論文的長度、語言、結構、格式和內容都是對本科學生嚴肅的挑戰,但英美國家長期的學術傳統和相應網絡資源的豐富已經能夠在較大程度上解決很多問題。所以在寫作過程中學生要對自己的信息需求保持敏感,遵守信息素質原則,在實際行動中貫徹信息獲取、評價、整理和合理利用的基本步驟,挖掘并發揮網絡資源優勢,自主解決論文寫作中的諸多問題。
二、畢業論文的網絡寫作策略
根據網絡、網絡資源和畢業論文寫作過程的特征,網絡寫作策略的成分包括:硬件環境、軟件環境、網絡和畢業論文的相關知識、信息處理、寫作模板和樣本、語言工具、通訊工具、論文修改工具和反抄襲檢查。
網絡寫作的硬件環境由能夠進行上網服務的手機和電腦構成。公共網吧和學校的計算機實驗中心不存在這方面的問題。但是,如果辦理個人手機或者電腦上網業務,就要認真閱讀產品說明書,確認自己的手機或者電腦具備所需要的無線或者有線硬件配置;而且,無線服務的覆蓋范圍要能夠滿足自己的個人需要??偟膩碚f,近幾年的手提電腦和2009年上市的手機終端通常都支持高速無線上網服務。
網絡寫作的軟件環境包括瀏覽器軟件、文檔閱讀和編輯軟件、文檔轉換軟件,以及文檔存儲服務幾個方面。很多電腦上網瀏覽軟件(如Internet Explorer,Google Chrome)都有相應的手機版瀏覽軟件,但更常用的手機瀏覽器卻是Opera,UCWEB和GO。在通過設置正確的上網方式后,手機和電腦就能利用瀏覽器使用大多數共同資源了。網絡上有較多優秀的在線free word processors,不需要在電腦或者手機上安裝。使用方便而功能又幾乎能與Microsoft Word媲美的當屬Google Documents。用戶通過聯網手機或者電腦在獲得免費Gmail賬戶后即可進入自己的文檔空間,創建文件并進行編輯和儲存,安全性能較高。其它所涉及的軟件主要依據資料的文檔類型而定,但通常是.doc,.ppt,.xls文件,這些都能上傳到Google Docs打開或編輯;對于.caj,.kdh,.pdf,.省略、搜搜問問)、電子商務(如淘寶網店)、電子圖書館、個人社會關系獲取或者傳遞所需的電子資源。把握所需信息必須了解的程度,適可而止,同時也要明確不同信息的所需類型(網絡工具書、普通網絡文本、網絡圖書、電子學術期刊、圖片資料、視頻資料、音頻資料、軟件、數據庫等),以便于利用搜索引擎的不同功能或者專門搜索引擎進行比較準確的查找,或者便于確定在廣域網還是學校電子圖書館查找。信息的評價是指通過閱讀所獲信息、比較同類資源、查詢作者背景、查看網站域名和信息組織方式等,篩選獲得的信息。通常,如果信息者沒有學術或者高校工作背景,可以查看網站是否屬于.edu,.gov.省略網域來作出初步評估。信息的整理是指通過summarizing,synthesizing,paraphrasing,quoting,highlighting和commenting等方式進行處理,利用眾多的免費在線軟件服務,對過濾后的信息作用進行評價和標識,并通過超鏈接等方式把它們整合到自己的寫作計劃中。信息的使用是指合理合法地使用資源,尊重信息者的使用協議,遵循APA,MLA或者CMS等文獻使用的學術道德規范。
絡寫作過程中還有一些標準模板和自動程序可以使用;常用的有論文寫作模板和文獻引用的自動生成程序。很多美國大學和研究機構都有MLA,APA或者CMS格式的論文寫作模板(template)可以下載,寫作者只需要在相應版塊寫入相應內容即可。但選用的時候要注意模板所對應的論文格式印刷版本,以避免信息陳舊問題。而論文文獻格式的自動生成程序(bibliography generator)則可以幫助解決復雜的引用規范問題。使得文內引用(in-text citation)、腳注和尾注(footnote and endnote),以及文后的書目制作輕而易舉就能完成。在眾多的相關程序中,綜合性和信度都比較高的是Son of Citation Machine;它包括了主要文獻格式和主要文獻類型的引用格式,也及時更新了文獻格式的版本,是網絡寫作的可靠資源之一。
論文寫作過程中的信息溝通主要是和指導老師的充分交流,和同學的必要交流,以及和虛擬社區相關人士的有限交流。與指導老師交流的目的是為了提高論文整體質量和按時完成畢業論文,可以通過手機或者電腦的電子郵件或者實時通訊軟件(communication software)實現;和同學交流主要是為了獲取或者交流信息,也可以通過手機或者電腦的電子郵件或者實時通訊軟件實現;和虛擬社區相關人士的交流主要是為了在保證信息安全的情況下獲取所需信息,主要通過社區群組(groups,communities,forums)和電子郵件來實現。
利用網絡寫作本科畢業論文可以比較有效地防止網絡抄襲行為,包括表層網絡抄襲、深層網絡抄襲和網絡兜售的論文。表層網絡抄襲是指抄襲不需要提交用戶信息就可以檢索到的網頁資源,付費的數據庫和網絡資源不在此列。除了把學生論文的可疑部分或者關鍵部分的關鍵詞放到通用搜索引擎中搜索以外,還可以使用在線的文獻抄襲檢測系統(plagiarism checker/detector/scanner)發現這種行為,譬如EVE2和Viper Anti-plagiarism Scanner。深層網絡抄襲主要是指抄襲數據庫資源。檢測這種行為可以分為兩種策略:一是關鍵詞搜索:先把論文的可疑部分或者關鍵部分通過國內外數據庫專用搜索引擎進行檢索;在檢測到抄襲行為的情況下,如果可能,還可以把相應的論文下載到本地計算機,通過文件對比軟件(file comparison software)確定抄襲的比率(如弗吉尼亞大學的免費軟件WCopyfind);二是購買以數據庫為主的反抄襲服務,如CheckForPlagiarism和CNKI英文檢測系統。由于學生提交的稿件都是電子文檔,指導老師可以較早地把學生的論文上傳到在線檢測系統,及時阻止網絡抄襲行為。隨著高等教育的發展,國內的論文作坊也不計其數,英語專業本科論文價格也依據性質的不同而價格各異。通常,他們數據庫中的論文價格在300元人民幣左右,而“原創性”的論文則需要1000元以上。在一般情況下,通過在本地計算機或者手機上查看文檔屬性或者高級屬性就可以發現問題。如果結合論文寫作過程管理(包括對選題、提綱、原始資料及論文稿件版本的審查),論文作弊的成本就會大大增加。通過查看電子文檔屬性、對比不同的電子文檔版本、跟蹤學生的論文修改情況,只是簡單地點幾個鍵,買方和賣方就會面臨很大的信用風險。這些措施可以在相當程度上規避不誠實行為。
三、結語
手機或者電腦網絡積聚了豐富的信息資源、提供了發達的通訊功能;英語專業本科畢業論文的網絡寫作已經具備了比較成熟的條件。論文過程所涉及的選題、提綱撰寫、資料收集、稿件寫作、問題咨詢、指導和管理等環節都可以通過網絡軟硬件資源來完成。相對于傳統的論文寫作方法,網絡寫作策略具有諸多的獨特作用。它首先賦予了論文寫作更靈活的時間和地點,比較適合當前教學和科研任務繁重的英語教師及四處奔波的大四學生。其次,網絡寫作策略延伸了論文指導老師的內涵,網絡上千千萬萬的信息提供者都或多或少充當了這個角色,大大減輕了師生雙方的壓力。再次,老師可以從以往語言或者格式等繁瑣問題中抽身出來,更多地從寫作過程的簡便性、結構的合理性、內容的思想性等方面給學生提供建議,幫助學生自主解決畢業論文寫作中的諸多問題。最后,網絡寫作策略還能夠有效利用網絡資源阻止泛濫的學術不端行為,培養學術誠信。
但在網絡寫作策略實施過程中,我們可能遇到的兩個常見問題是:(1)由于資金等因素影響,有的優秀網絡資源可能不穩定,間歇或者長期不可獲取;(2)由于信息太多或者太少而茫然不知所措。對于前者,需要保持比較靈活的資源使用態度,善于尋找替代資源。而資源太多時則要增加限制條件,利用高級搜索功能縮小范圍;在資源缺乏時則要減少限制條件或者更改搜索關鍵詞,尋找另外的解決辦法。總之,日益豐富的信息存在于不可見的網絡上,只要能合理有效地利用網絡資源,就可以把畢業論文的網絡寫作策略發揮好,從而有效提高畢業論文寫作的效率和質量。
參考文獻:
[1]高等學校外語專業教學指導委員會英語組.高等學校英語專業英語教學大綱[S].上海:上海外語教育出版社,2000.
[2]穆鳳英.英語專業本科生畢業論文的調查與思考[J].徐州師范大學學報,2001.27(4):138-142.
[3]孫文抗.英語專業學士論文寫作現狀分析[J].外語界,2004,101(3):59-64.
[4]顏靜蘭,倪薇.英語專業畢業論文規范操作思考[J].外國語言文學,2005,86(4):259-263.
[5]王崇義.加強畢業論文指導,提升學生素質[J].外語教學,2004,25(6):73-76.
[6]陳,薛榮.英語專業本科畢業論文質量監控體系構建與實踐[J].重慶科技學院學報,2008.05:204-205.
0前言
從20世紀90年代開始,傳統物流開始向現代物流轉變。其顯著的標志是它充分運用先進的信息技術,打破了運輸環節與生產環節之間界限,通過供應鏈管理建立起企業供、產、銷、儲、運全過程的計劃和控制,從整體上實現最優化的生產體系設計、企業運營和管理,實現物流、資金流、信息流之間的有機統一。通常我們理解物流企業信息化是指企業以業務流程重組為基礎,廣泛使用現代物流信息技術,控制和集成企業物流活動的所有信息,實現企業內外信息資源共享和有效利用,以提高企業的經濟效益,加強核心競爭力。物流信息化意味著整個物流作業環節從運輸、倉儲、裝卸、搬運、包裝、流通加工到配送全面使用現代信息技術,實現企業內外信息資源的優化配置和集成化管理。目前現代物流信息技術涵蓋廣泛的內容,主要包括計算機技術、通信技術、電子數據交換技術、地理信息系統、貨物識別技術等。正是由于這些基本的信息技術構成了現代物流信息化的基礎。當前,各級政府職能部門和企業都在積極建設物流信息平臺。其目的就是為了能夠利用物流信息平臺來協調和科學管理社會資源,充分利用社會資源為社會提供更好的服務。企業則是為了加強其自身的經濟活動,提高物流效率,不斷實現信息價值增值等方面的客觀推動力。
1建立企業信息化水平評價體系的意義
當前,企業決策層都對自身的信息化建設高度重視,投人相當大的人力、物力和財力來發展信息系統。一個好的企業物流信息系統應該與企業自身的生產技術水平相匹配。并不是所有先進的技術都適應一個企業的發展,不能簡單認為擁有了先進的信息設備的企業就是一個信息化水平高度發達的企業。只有采用合理科學的信息系統才可能發揮其應該發揮的作用,否則可能產生相反的作用,使企業背上沉重的負擔,束縛了企業所應有的靈活機動的市場敏銳性。建立以企業管理信息化、企業業務需求信息化和信息系統本身安全性、可靠性評價指標為基礎的評價體系,其目的就是使得企業能夠以業務解決方案為核心,更系統地、更有目地性建設和更好地發展企業物流信息系統。
2建立評價企業信息化水平評價體系的原則
企業信息系統的建設其最終目的是為了滿足物流企業生產水平發展的需要。而企業物流信息化水平評價體系建立,其目的是解決當前物流信息系統投資建設管理過程中的概念化、隨意性問題,因此既要遵循一般信息系統建設管理等有很多一般性的原則,如安全性、先進性、兼容性等,更要體現一些物流領域的特點,因此要遵循如下原則。
2.1科學客觀性原則
指標的選取應具有科學的理論根據。首先,要與當前社會客觀生產技術水平相匹配。其次,評價指標體系應能準確地反映客觀實際情況,有利于企業之間的橫向比較,發現自身優勢和不足之處,挖掘競爭潛力。物流信息化水平評價指標應成為物流企業完善物流信息系統、解決企業發展所面臨問題的有力工具。
2.2系統性與整體性原則
企業信息化水平是多種因素綜合的結果,評價指標體系應該全面反映企業物流信息系統的情況,既要反映系統的內部結構與功能,又要正確評估系統與外部環境的關聯。因此,系統的可兼容性和擴展性也是評價指標的一個衡量標準。
2.3先進性原則
物流信息系統不僅要滿足當前企業發展需求,同時還要求與企業未來發展相適應。一個能夠與未來發展相適應的物流信息系統,就要求把握好行業和技術未來發展方向,積極發展現代物流,從供應鏈的高處整合企業和社會資源,以增強企業的綜合競爭能力。
2.4定性與定量相結合的原則
在綜合評價企業物流信息化水平時應綜合考慮影響評估水平的定性和定量指標。對定性指標要明確其含義,并按照某種標準制定界限,使其能恰如其分地反映指標的性質。定量指標要有清晰的概念和根據標準確切的賦值和計算。
3物流企業信息化水平評價指標體系
根據物流企業信息化建設的需求,將評估系統分為三個體系和四級評估層次。具體結構見圖1。我們將整體評價體系分為三個部分:企業管理信息系統評價體系、企業業務信息評價體系以及與系統本身相關的安全性能評價體系。主要是依據當前企業管理和發展所需要的信息系統本身功能所劃分的,同時兼顧系統本身的安全性和可靠性的角度出發,因此將對系統安全的評估納人企業信息化評估體系中來。
物流信息系統是實現企業管理網絡化、自動化、智能化和標準化的一個集成系統。我們所選擇企業資源計劃(ERP)信息系統評價項目中主要突出的是物流企業在實現自己領域中區別其他企業ERP方面的管理體系,這包括指標U1, U2和U3都是物流企業的業務特點。其中由于物流企業多元化和多種業務關系,針對不同的物流企業,ERP項目的評價指標可以根據用戶需求進行刪減。例如,針對第三方物流企業可以只考慮U2和U3評估指標。對于企業的發展具支持作用的支持信息系統由于企業的性質不同可以簡單定性為有無。關于先進的企業決策支持系統目前還沒有確切的定義,但是通過分析當前的企業業務需求而產生企業發展所需要的支持策略也是企業信息化建設的一個重點發展對象。
業務信息系統評價系統是對評估物流企業日常運行所必須的信息系統的一個衡量準則。電子商務評估體系是對企業在電子交易平臺上所具有的訂單處理、帳務結算以及與工商稅務等政府機關所建立的網絡辦公系統的評估項目。網絡資源信息系統評估指標是針對企業在互聯網上所能獲取的資源和能力的評估。同時,作為物流企業需要對流動的物資進行有效監控,因此建立了的電子貨物跟蹤系統,包括與智能交通相對應GIS , GPS、射頻技術系統、運載貨物工具的信息系統,以及條碼技術和射頻技術為主,能夠快速準確識別貨物的識別系統的評估指標。
系統安全本身是對所有信息系統建設的一個內在要求。評估體系根據信息系統中數據處理、系統兼容性及其網絡安全性等方面考慮劃分成S6, S7,S8三個子體系。目前國際組織和我們國家對數據安全和認證,以及通信安全等方面都要有相對完善的準則,例如《信息技術軟件產品評價質量特性及其使用指南》、《信息技術一軟件包質量要求和測試》和《工具檢測用軟件評定準則》等,這些方法和準則在制定具體標準的時候都應該考慮到其中。
4評估方法
將物流企業信息化水平作為一項指標列人物流企業等級評價體系中去,而物流企業等級評價系統本身就是一項復雜的系統工程,況且對物流企業信息化水平評價模型研究甚少。評價中包含大量的不確定性因素和模糊性指標,這是因為評價指標的模糊性和難以量化性等客觀原因,也有評價者自身的主觀原因,例如性格、偏好、價值觀念和認知程度等主觀原因。為此,我們將模糊集合論的方法進行評估處理。圖2是專家評審系統模型。
專家在評審的時候通過網絡將評審選項送到數據處理中心去。同時,數據處理中心也接受到由系統安全檢測設備對信息系統的評估結果后進行統計計算。針對不同時期的評估對評估項目的加權值是不一樣的。例如當前根據現在信息技術發展情況我們把PG ={G1,G2,G3},Pg,為第一層加權值,同樣還有Ps和Pu作為第二層和第三層加權值,其中對于Pu如果為定性衡量的值為{0, 1}如果為定量衡量的話取值在「0, 1]區間之間。同樣建立專家評審結果的模糊評價矩陣:
6月,梁建章怒評陜西安康孕婦被強行引產事件,發表系列文章,五天內轉發量逼近兩萬。梁呼吁各界人士重新認識在中國推行了三十余年的計劃生育政策。認為人為的人口限制已威脅到經濟良性發展。
三年來,梁建章一直致力于推動計劃生育政策的調整。2010年,他自制紀錄片《中國人可以多生嗎?》;去年,學成歸國成為北京大學國家發展研究院客座研究員;在安康事件爆發前兩個月,他和北大社會學教授李建新合著出版《中國人太多了嗎?》,在引言中,他寫道:“歷史留給我們的時間不多了!”
這個為自己的理想奔走疾呼、不遺余力的學者,在日常談話中卻判若兩人:語速緩、語氣輕、語調低沉——這種雙重性或許更符合梁建章所擔負的兩種角色。在學者形象背后,他從未更改首次進入公眾視野時的那個身份:攜程網聯合創始人、董事局主席。
假如你關注2003年的中國商界,亦無法錯過34歲的梁建章。這年12月,創立四年的攜程成為首個登陸納斯達克的中國旅游企業,IPO當日股價漲88.56%,刷新納斯達克三年來的首日漲幅紀錄。當時,這位商界新秀正在倒時差,于熟睡中體驗了“一夜暴富”。
對那個時代的中國商界來說,梁建章和他的合作伙伴的確創造了一個財富神話,2004年攜程總營收增速94%,獲85%毛利率和40%凈利率。但更重要的是,他們創建了一種將傳統酒店預訂與IT相結合的商業模式,由此參演IT業的風起涌云。
2006年的攜程已成為在線旅游市場當之無愧的“黑馬”,該年總營業收入8.3億元,同比增長49%——就在所創企業漸入佳境時,梁建章突然決定赴美讀書,為同代企業家中獨一無二的選擇。
就在梁建章攻讀博士學位的數年間,中國商界發生巨變。攜程的注冊用戶在2011年已突破5千萬,全年總營收5.9億美元,其業務也從酒店預訂延伸至包括機票、度假預訂、商旅管理及旅游資訊在內的全方位旅行服務。但在規模接近頂峰的同時,攜程也不可避免地遭遇瓶頸期。
2012年第一季度,攜程凈利率跌入20%以內,營收同比增長只有19%;5月,其股價三年來首次跌破20美元。更重要的威脅在于,由于攜程業務日益多元,全線作戰的方式導致競爭白熱化。微博化的輿論氛圍更無情面可留,“增長神話破滅”“錯失團購良機”等評論不絕于耳……單純的學院生活徹底終結了,這是企業家梁建章要面對的商業現實。
身兼學者和企業家雙重身份,梁建章于2012年高調重返公眾視野,他有能力同時演繹學界和商界的雙重革新嗎?
梁建章向來自信。
新起點
赴美攻讀博士學位,對梁建章并非唐突之舉。復旦大學少年班出身的梁建章,20歲便獲得美國喬治亞理工學院碩士學位,在攻讀計算機博士過程中覺得“做企業更有意思”,進入甲骨文公司的硅谷總部。突然改變當下狀態,是梁建章挑戰自我的慣用方式。
關鍵是做出選擇的時間。2003年底,攜程赴美上市之際,剛剛度過艱辛初創期,梁當時認為最大挑戰莫過于“將攜程做大10倍”。
盡管1999年攜程獲得來自IDG、軟銀、晨興集團、蘭花集團的兩筆融資,但起步期卻并未找到有效的盈利模式。在“燒錢”營銷將攜程逼到懸崖時,梁建章做出戰略性調整:收購傳統酒店預訂公司現代運通,以酒店預訂業務為盈利基點,嫁接到互聯網。
坦白說,攜程在2000年后的成長超出了梁建章預期。市場占比領先第二名藝龍近40個百分點,而“去哪兒”等網站當時剛起步,難成氣候。日趨成熟穩定的內部架構和良好外部環境,使攜程在在線旅游市場一枝獨秀。
梁建章的個人工作也隨之趨于常態。朝九晚五,鮮有加班;日常管理交給團隊,只有關鍵的企業文化建設和人事制度安排才事必躬親。即使不再長時間地深入參與,公司依然正常運轉。同時,人稱“攜程四君子”的聯合創始團隊成員,都開始嘗試新的探索:2002年,前攜程總裁季琦創辦如家連鎖酒店,三年后,前首席財務官沈南鵬離開攜程,加盟紅杉資本。
梁建章的內心開始渴望一些“ 新東西”——“總覺得自己還能再干點什么,學點什么,研究點什么。”做投資?梁建章認為那無法使他獲得深入參與公司建設的愉悅感;像季琦那樣再度創業,去做一家超越攜程的公司,又著實困難。于是,這位攜程首席執行官又想起了從企業回到大學校園。
從2006年萌生退意,到次年讀博,梁建章花了近大半年時間在美國游學。從哈佛、波士頓到麻省理工;社會學、經濟學、心理學——這位曾經的甲骨文中國區咨詢總監一路旁聽下來,希望找到一個能結合其管理經驗和多視角學術鉆研的學科。
最終,梁建章將目光聚焦經濟學。他認為這門學科研究內容與管理相關,研究方法與他多年思維習慣和理工科教育背景契合,加之兼具數學、社科、文化、歷史等多領域知識,梁覺得“可以把很多知識串起來深入學習”。
大半年的游學期,不僅讓梁建章選到心儀的研究方向,也讓攜程慢慢適應了梁退居幕后的日子。梁建章與現任CEO范敏平穩交接,攜程高端旅游部營銷總監華麗回憶說:“James(梁)關注戰略布局,范總有豐富日常管理經驗,恰當的人在恰當的職位,大家都很放心。”對于“公司老板突然跑去美國讀博”這種奇遇,華麗笑說放到梁身上“再正常不過”——大家都覺得他非常適合做學術。
斯坦福歡迎你
當年,梁建章所申請的斯坦福經濟學項目只有四個錄取名額。從開始考核到最終確定錄取,校方找梁建章交流過多次。斯坦福經濟學博士的競爭環境和學習壓力可窺一斑。
37歲入學的梁建章考試成績常列前三,尤擅長基礎模型和數學。不僅如此,由于他經歷豐富,常幫助更年輕的學生分析未來的職業規劃。在這個過程中,梁建章也對自己此前的創業經歷做出深入思考。
在梁建章看來,企業經營時刻考驗決策者的判斷力,上要擔負公司發展使命,下要考慮員工生計,做企業“像走鋼絲”。相比之下,讀書生活對他則是人生難得的愜意。
在斯坦福讀書的日子,梁建章和家人住在離機場不遠的一座小山坡上。他常??粗w機在山間起降的景象,完成了許多關于企業和學術的思考。沒課的時候,他會在家里等著上小學的兒子放學歸來,一起學習或運動。
梁建章的人生軌跡卻不知不覺地改變了。
原本,他博士論文的題目是關于大學生就業的經濟學研究。這篇論文他在博士第三年已完成,但因感覺意猶未盡,他選擇到芝加哥大學讀博士后。在這兩年中,梁建章師從1992年諾貝爾經濟學獎得主加里·貝克爾,把研究方向聚焦于創新創業與人口。
對這個話題的關注根植于梁建章在攜程的一線管理經驗。在艱難時光中,梁思考過企業乃至一個國家的根本,正在于人才的數量和質量,“研究的時候發覺中國這計劃生育政策很荒唐?!薄爸袊f不能以減少小孩為代價,來抵消日益增長的老年人口”,年輕人口在整個人口結構中的比例銳減,在梁建章看來,對一個國家的創新創業潛力有著難以預估的巨大隱患?,F在,中國生育率低于1.5,意味著下一代人比上一代人少30%,“人口是負擔”的擔憂早已轉化為“老齡化社會”的焦慮。
為了印證這種理論假設,梁建章開始了廣泛的社會調研。印度和日本是梁常去的兩個國家。拜訪學者,找相關的企業高管做訪談,了解年輕人口的創新創業現狀,在聊天中獲得思路啟發,再用已有數據建模,印證觀點。與一般學者相比,梁建章的優勢或許在于“找企業高管聊天會容易點”。
一向稍顯靦腆的梁建章談及學術時,會變得健談起來。但讀博期間,梁建章并未忘記攜程,他與高管時有電話聯系,暑假期間回國集中參加公司會議。學期與假期的自然分割,讓梁建章在企業家和博士生這兩重身份
之間,穿梭自如。同時,梁開始著力于尋求學術與商業最有效的粘合方式。
一方面,梁建章希望在有條件的情況下,先把學術成果在攜程內部推廣。他認為許多公司隨著管理層相對固定化,可能會存在慣性思維的問題,晉升機制和言論通道常會閉塞。如何鼓勵年輕人發聲,并促進部門間溝通,是梁建章正在研究的課題。其中一個可能是,“由高層參與做一個創新委員會”。
另一方面,嚴格的學術思維訓練,也使這位攜程董事局主席在公司戰略布局上更高瞻遠矚?!昂暧^經濟搞得更清楚,對企業經營和投資都有幫助?!?008年金融危機時,攜程進行了一些投資,比如對經濟型酒店漢庭
和如家,回報都相當可觀。
今年3月,攜程正式對外推出的中國首個頂級旅游品牌“鴻鵠逸游”,其實始于2010年上半年,攜程首次推出針對富豪消費群體的旅游產品,“環游世界60天”,報價50萬。當時對該產品銷路的質疑不止來自于外部,攜程員工也擔心“曲高喝寡”。誰知,十幾個名額在開通訂購專線的9分鐘內全部售罄。去年續推“環游世界66天”報價66萬元,則在30余秒內搶購一空。今年推出的101萬元環游世界80天,價格和旅行天數均創新高,全部名額在17秒內就秒殺完畢。
良好的市場反響印證了梁建章和其他高管對高端旅游市場的預判。無論這個細分市場日后格局分散還是壟斷,攜程都要做這個市場的定義者和領導者。為此,攜程與臺灣易游網和香港永安旅行社開展戰略合作,為頂級旅游市場設置了一個極高的準入門檻。
這一切是在2009年悄然部署的,恰是梁建章在美讀博、遠程參與公司管理的時期。“頂級旅游,雖然去的人不多,但是對公司品牌有非常大的影響力,值得一做”,回憶起當時的抉擇,梁建章對本刊說。
“雖然很少有人能既做這個又做那個,但如果有條件,這樣做真是蠻互補的。我的idea,人口與創新,一定要在企業做過,才有這個感覺;而學術中一些更加嚴謹的方法確實可以用到公司決策中”——對梁建章來說,在學術與商業的經驗互補,是自我成長的必經之路。
理性與堅持
無論是求學,還是管理公司,梁建章都習慣先進行多元化的思考,做出盡可能準確的判斷,之后在一個方向上不遺余力地“深入”下去。
攜程網初創時,管理團隊除了旅游也設想過金融、搜索,或京東那樣的電子商務,“但分析以后,覺得做旅游比做其余的都優勢更大,便沒有做別的嘗試”,梁建章回憶說。
在斯坦福讀博初期,許多有趣的課題擺在面前,究竟選擇哪一個興趣點作為研究方向,著實花了梁建章一番心思。“選擇的時候得經過考慮,你做得成什么,利用已有的優勢去選”。對梁來說,經驗是學術的起點,也是后者的歸宿。接下來,則要靠堅持的力量。
《中國人太多了嗎?》的合著者、北京大學社會學系教授李建新,被梁建章堅持的勇氣吸引?!斑@個(計劃生育)問題,能身體力行去號召的學者,并不多”,作為中國人口學界罕見的公開反對計生國策的學者,李建新沒有想到會與一位企業家出身的經濟學者殊途同歸。合著過程堪稱順利,一年書稿便基本成型:李從社會、婚姻家庭和綜合國力等角度綜合論證,梁從經濟、資源、創新創業等角度深入闡述。在經歷了改書名、刪內容等多番磨練后,歷時半年,這本新書終于問世,難掩鋒芒。
大多數時候,梁建章都希望以理性融合各種不同的經驗和思考。在具體的學業或管理工作中,這也成為梁極為鮮明的個人特色。
攜程副總裁孫茂華記得,2003年SARS期間,許多公司紛紛裁員節省開支,但梁建章堅決不裁員。他當時做了一番分析: SARS先發燒后傳染,而非先傳染后發燒。只要政府采取有效隔離,很快就會被有效控制。
一整天都沒有業務,日復一日地等待,有些部門上半天班,發60%的工資;有些技術和服務部門,開發程序或者做培訓——SARS風波并未持續很久,裁員的公司重新營業便急迫招聘,而攜程很快回復正軌,年底如期上市。
2012年,攜程或許比以前更需要梁建章的理性與堅持。
如今的攜程面臨了諸多挑戰,除了業績下滑,股價下跌,還包括被高度競爭中被拖入價格戰。梁建章堅信,中國人均旅游投資在不遠的未來會超過人均電商消費,在線旅游收入仍是電子商務中的翹楚。這個過程定會催生一到兩個偉大的企業。攜程致力于此?!安灰豢赐饷嬗卸嗌俜N新模式,自己內部的事可以改進的還有很多,先修內功”,梁建章的這句話給孫茂華很深印象。孫茂華自2000年加入攜程,經歷了期間的盛衰。
只是,攜程的規模已是當年的數倍,挑戰也成幾何級數增長。
分類號:TP182
引用格式:于彤. 中醫藥知識工程的理論體系構建和關鍵技術分析[J/OL]. 知識管理論壇, 2016, 1(5): 336-343[引用日期]. http:///p/1/56/.
1 引言
中醫藥是中華民族的文化瑰寶,無論作為文化遺產還是作為醫學資源,都理應得到保護和傳承。對中醫藥理論知識與實踐經驗的總結、詮釋與研究,是中醫藥傳承的一項核心任務。知識工程(knowledge engineering)為中醫藥知識的組織、存儲、處理和利用提供了必要的理論、方法和工具,在中醫藥領域具有廣闊的應用前景[1-2]。
知識工程是隨著信息革命而出現的一種新興的知識管理和知識創造手段。知識工程源于人工智能領域,其最初的目標是構建基于知識的系統(或稱專家系統)[1,3]。為了構建基于知識的系統,需要獲取足夠的專業知識,并將這些知識表示為計算機可以理解的形式,以支持自動推理和問題求解[3]。因此,知識獲取、知識表示以及知識運用成為知識工程領域研究的主要問題。隨著知識工程在知識管理中應用的不斷深入,知識工程的研究范疇從知識庫和專家系統,擴展到自由文本、半結構性數據和多媒體內容的處理。時至今日,知識工程已發展為涉及知識表示與推理[4]、語義網[5-6]和數據挖掘[7]等多個技術領域的交叉學科,在電子科學、電子商務和電子政務等許多領域得到了廣泛的應用。
知識工程在中醫藥領域的應用起源于20世紀70年代。當代著名中醫學家關幼波與計算機專家合作,于1979年研制了首個實用的中醫專家系統DD中醫關幼波診療肝病的計算機系統,它在臨床應用中取得良好效果[8]。此后,全國興起了一股中醫專家系統研發與應用的熱潮[9],知識工程作為專家系統的支撐技術也得到了中醫界的重視。近30年來,中醫藥工作者采用知識工程方法對中醫藥領域的知識遺產進行廣泛采集和永久保存,建成了大量的知識資源和智能系統,為中醫藥知識創新提供了有力的支持[10]。為此,本文對中醫藥知識工程進行系統總結和綜合論述,分析存在的問題和發展趨勢,為相關領域學者和知識工程師提供參考。
2 中醫藥知識工程的概念
中醫藥知識工程是指將中醫藥知識整合存入計算機系統,以使計算機能夠利用這些知識來解決中醫藥領域復雜問題的工程學科[1-2]。旨在實現中醫藥知識的“計算機化”,并將計算機技術融入中醫藥知識的收集、挖掘、整理、更新、傳播及轉化等環節,從而豐富和完善中醫藥知識體系,提升中醫信息系統的智能水平。之所以稱之為一項“工程”,是因為這項工作涉及系統性的方法、大規模的協作、嚴密的流程以及復雜的產品(本體、知識庫、專家系統等),這些都是系統工程的顯著特征。
中醫藥知識來自中醫專家的頭腦,以及書籍、論文、病案等各種專業資料。為使中醫藥知識“計算機化”,需要從各種知識源中廣泛獲取知識,將知識進行編碼并錄入計算機系統;還要按照一定的結構和方案對知識進行組織和存儲;最終實現專家系統、知識發現等各種計算機應用。中醫藥知識工程的關鍵環節,包括中醫藥知識表示方法的研究、中醫藥領域知識的獲取、中醫藥知識庫系統的構建、中醫藥知識發現研究以及中醫藥智能系統(如臨床決策支持系統)的研發等。
中醫藥知識工程是中醫藥與信息科學(包括人工智能)相結合的產物,是多學科交叉的研究領域。它也是中醫藥知識管理的一項關鍵支撐技術,有助于實現中醫藥知識管理與服務模式的創新。
3 中醫藥知識工程的意義
中醫藥知識工程有利于開拓臨床思路,支持臨床決策,研究中醫理論,豐富教學內容,指導實驗研究,促進中醫藥知識傳承與創新[1-2]。具體而言,中醫藥知識工程可在以下三大方面發揮積極作用。
3.1 梳理知識體系,保護知識遺產
中醫藥知識遺產具有很高的科學和文化價值,但其知識體系尚存在模糊籠統之處。只有對中醫藥知識遺產進行系統梳理,去蕪存菁,才能凸顯中醫藥知識的精華之處。使用語義網絡、描述邏輯等知識表示方法,能夠精確描述中醫思維邏輯,建立數字化的中醫藥知識體系,這對中醫藥學科發展具有十分重要的意義。
3.2 促進知識傳承,加速人才培養
中醫傳承的核心問題是如何將中醫名家的個人經驗轉化成普遍的知識,從而培養更多經驗豐富的名醫,提升中醫界的整體水平。中醫藥知識工程旨在系統總結前人經驗,將歷代醫家的智慧結晶轉化為全面、系統的領域知識庫,研發中醫輔助學習系統,以提升初學者的學習效率,促M專業醫師之間的交流,從而突破中醫傳承的瓶頸。
3.3 發現新知識,促進學科發展
通過實施中醫藥知識工程,可對中醫藥信息化過程中積累的海量數據進行分析與挖掘,建立跨越年代、流派、學說和病證的整體性知識模型,從而加深我們對中醫辨證論治規律的認識,使中醫藥領域兩千多年來積累的知識遺產得到有效整理和挖掘。
4 中醫藥知識工程的理論體系構建
中醫藥知識工程研究的核心任務是利用信息科學的理論和方法,對中醫藥知識體系的全部內容進行系統梳理和準確表達??梢哉f,中醫藥知識工程所研究和處理的核心對象就是中醫藥知識體系。兩千多年以前的《黃帝內經》奠定了中醫學的理論基礎;經過兩千年的發展,至今已經形成了一個以中國古代哲學為基礎,以中醫藥學理論為架構,以臨床實踐經驗為主體的知識體系[2]。
中醫藥知識體系有其自身特點和復雜性,對知識工程技術產生了獨特的需求。中醫特色的思想方法、含義模糊的中醫概念以及中醫專家的隱性知識都對知識表達、知識獲取和知識利用產生重大影響和制約。因此,面向西醫等其他領域的知識工程方法并不完全適用于中醫藥領域。中醫藥知識工程領域迫切需要一套符合自身特點的理論和方法,從而有效處理中醫藥知識的模糊性和復雜性,支持標準化知識體系的建設。因此,有必要對中醫藥知識工程的理論思想進行深入研究和系統總結,從而指導中醫藥知識的建模、獲取、組織、存儲、共享與服務等一系列工程實踐活動。建立中醫藥知識工程的理論體系是一項繁重、長期的工作。本文主要圍繞思維模擬、知識表示、知識獲取、知識發現等4個主要方面,對中醫藥知識工程的理論思想、研究熱點以及核心概念意涵進行簡要論述,為今后的理論研究工作提供參考。
4.1 中醫思維模擬研究
中醫思維模擬是指在對中醫思維進行深入分析的基礎上,用計算機系統對中醫的思維過程進行模擬,從而完成計算機輔助診療等復雜任務。中醫深受中華傳統哲學和文化的影響,產生了獨特的思想方法和思維模式,包括“天人合一”“取象比類”以及“辨證論治”等等。中醫藥知識體系是中醫思S的直接產物。開展中醫藥知識工程研究,首先需要深入理解中醫的核心思維模式。
中醫思維是一個復雜的思維過程,具有形象性、模糊性和整體性等特點,需要針對這些特點提出創新性的思維模擬方法。例如,“取象比類”是貫穿中醫知識體系的思維模式,與中醫其他的思想方法共同構成了中醫“象思維”。在中醫藥知識工程領域,需要追溯中醫“象思維”的思想源流,并采用認知語言學等學科方法對其進行分析,據此提出與之相適應的計算機模擬方法[11]。又如,中醫辨證思維是一個涉及分析、綜合、推理、歸類、鑒別的復雜思維過程,需要將中醫辨證理論與實際的病案結合起來進行分析,總結中醫辨證思維的規律,從而建立合理、準確的中醫辨證計算模型[12]。思維模擬研究在中醫臨床診療等領域具有潛在的應用價值。但首先需要在臨床實踐中對計算機建立的中醫思維模型加以檢驗,以驗證其準確性和實用性。
4.2 中醫藥知識表示研究
知識表示(knowledge representation)是指通過某種方案、數據格式或語言,將領域知識表達為計算機可直接處理的數據。知識表示處于知識工程的中心地位,它既是知識獲取的基礎,又是知識存儲和運用的前提。為實現基于知識的系統,必須將領域知識表示為某種計算機可處理的形式,并錄入到計算機系統中去,存儲于知識庫之中。知識表示的合理性直接決定知識處理的效率,對知識獲取和應用的效果也有很大的影響。
廣義上,知識表示的目標就是實現人類知識的顯性化、機讀化和結構化,從而支持自動推理,知識檢索和知識發現等應用。知識表示方法有很多種,包括狀態空間、謂詞邏輯、框架、產生式、語義網絡、與或圖、Petri網等。這些方法適用于表示不同類型的知識,從而被用于各種不同的應用領域。如何選取或提出合理的知識表示方法,用最恰當的形式來表示中醫證候、中藥、針灸、溫病、養生等各方面的知識,是中醫藥知識表示研究的重點問題。
目前,知識工程領域的一種主流觀點是將建立一個知識系統的過程視為一種“建模”活動。知識建模(knowledge modeling)是指采用某種計算機方法構建一個“知識模型”,它在特定領域中能像專家那樣解決問題。其本質是通過模型來表示知識,因此屬于一種形式化的知識表示方法。近年來,采用本體等技術建立知識模型,已成為中醫藥知識分析的一種常用手段,也是中醫藥知識表示研究的一個主要方向[13-14]。
4.3 中醫藥知識獲取研究
知識獲?。╧nowledge acquisition)是指從專門的知識源中全面、系統地獲取知識,并將其轉換為某種計算機可處理的形式(如程序、規則、本體等)[15-16]。這里的知識源可以是人類專家,也可以是案例、教科書、論文、數據庫、網站等知識載體。一般情況下,知識獲取需要由“知識工程師(knowledge engineer)”與領域專家配合,共同來完成工作。知識工程師的任務是幫助領域專家激活隱性知識,完成知識的轉換,建立基于知識的系統。
知識工程的一個典型場景是:一組知識工程師找到并訪問特定領域的專家,聽取專家的介紹,記錄專家的經驗性知識并將其表達為計算機可處理的形式,存入知識庫中。將知識庫與推理引擎結合起來,也就構成了一個新的專家系統。知識獲取也必然涉及知識驗證的問題:知識工程師需要對知識進行評審和驗證,以確保知識的準確性。
知識獲取是任何知識管理和知識工程的基礎性工作。在中醫藥領域,知名老中醫的經驗和古籍文獻占有重要地位,是知識獲取的重點對象。一方面,知名老中醫知識和經驗的獲取,是中醫藥知識獲取的重要環節。它屬于專家認知獲取的范疇,也就是將專家頭腦中隱含的知識轉換為某種形式的顯性知識的過程。另一方面,中醫藥領域產生了海量的古籍文獻。古籍數字化對于中醫藥信息的快捷傳播和永久保存具有重要意義。如何從數字化的古籍文本中有效提取中醫藥知識,則是知識工程所關注的問題。無論是通過專家訪談等方法獲取領域專家的經驗和實踐方法,還是查閱大量文獻搜集領域知識,都是復雜的、繁瑣的工作,且多數情況下只能通過人工方法完成。因此,知識獲取是中醫藥知識工程領域中面臨的關鍵瓶頸[16]。如何突破“知識獲取”瓶頸,也就成為知識工程研究的一個熱點問題。
4.4 中醫藥知識運用研究
知識運用是指將領域知識庫以及機器推理、知識發現等技術運用于科研、臨床、教學等領域,輔助中醫藥工作者解決復雜問題并提升工作效率。知識工程在中醫藥領域的具體應用包括:四診客觀化研究、中醫辨證規范化研究、方劑量效關系分析、中藥新藥發現、中醫臨床診療、中醫教學等等。為使知識工程的成果產生社會效益和經濟效益,促進中醫藥知識創新和學科發展,必須研究如何運用知識的問題。知識工程學不能逐一研究具體應用的過程或方法,而是研究在各種應用中都可能用到的共性方法,包括知識推理、知識搜索、知識發現、知識服務等。
傳統上知識運用研究的一個中心問題是如何構建專家系y。中醫專家系統是指用計算機人工智能技術來模擬著名老中醫診療病人的臨床經驗,從而使該軟件具有專家診治病人的水平[8]。如前文所述,隨著“中醫關幼波診療肝病的計算機系統”的出現,全國興起了一股研發中醫專家系統的熱潮。據陸志平等[9] 估計,中醫專家系統已不下300個,并遍及中醫的內、外、婦、兒、五官以及針灸等各科。專家系統能對中醫四診信息進行處理和解釋,并產生臨床推薦意見和臨床警示,可用于輔助職業醫師進行臨床決策。該系統的構建涉及知識獲取、機器學習、知識推理、知識搜索等多方面的理論和方法學研究。
自20世紀90年代開始,隨著數據庫技術的普及以及數據庫內容的不斷積累,使業務人員產生了從數據庫中挖掘知識的愿望。為此,學者們將數據庫技術與人工智能、統計學、機器學習等傳統技術相互融合,產生了知識發現這一交叉學科[17]。知識發現(knowledge discovery in database,KDD),可被理解為“數據庫中的知識發現”。近年來,中醫團體探索將各種KDD方法應用于中醫藥領域。KDD被用于研究方劑配伍規律[18],輔助中醫開具中藥處方[19],解釋中醫證候的本質[20-21],以及輔助基于中醫藥的新藥研發[22],都取得了良好的效果。KDD作為中醫藥知識分析和科研創新的一種新方法,也成為中醫藥知識運用研究的一個熱點。
5 中醫藥知識工程的關鍵技術分析
中醫藥知識工程將本體(ontology)、文本挖掘(text mining)、語義網(semantic Web)等多種信息技術與中醫藥領域知識相結合,以促進中醫藥知識的創造、管理和運用。在下文中,圍繞知識建模、知識獲取、知識存儲、知識發現等4個主要方面,對中醫藥知識工程中涉及的關鍵技術進行具體分析。
5.1 中醫藥知識建模技術
知識建模是將領域知識表達為計算機可處理模型(即知識模型)的過程,它是知識工程的基礎。中醫藥知識體系與中華傳統文化息息相關,具有鮮明的文化和語言特色,這決定了中醫藥知識建模的獨特性。歷代中醫普遍采用“取向比類”等形象思維方法,中醫藥概念之間的關系錯綜復雜,中醫文獻中包含大量古漢語成分,這些因素導致中醫藥知識難于精確描述和定量刻畫。需要對知識建模的方法和技術進行創新,并研究出一套符合中醫藥特點的知識建??蚣?,以支持中醫藥知識工程的實施以及知識服務平臺的建設。
知識建模技術有很多種,技術人員所熟知的統一建模語言(UML)和實體關系模型(ER模型)都屬于知識模型。本體是1990年代出現的知識建模方法,其核心任務是對領域概念體系進行系統梳理和準確表 達[13]。本體在復雜知識建模和自動推理等方面體現出技術優勢,因此在生物醫學領域逐漸成為主流技術。
近年來,中醫藥知識工程的一個熱點是通過構建中醫藥領域本體,對中醫藥理論和知識體系進行辨認、梳理、澄清和永久保真處理。中醫團體已經開展了基于本體的中醫藥知識建模方法研究,并實際構建了一系列領域本體[14] 。例如,中國中醫科學院中醫藥信息研究所研制了“中醫藥學語言系統(Traditional Chinese Medicine Language System,TCMLS)”這一大型中醫藥領域本體[23] 。TCMLS對中醫藥領域的概念和術語系統進行了完整的表達,在中醫藥學研究中得到廣泛應用。此外,本體建模的對象還包括陰陽、五行、臟腑、證候、中藥、方劑等諸多領域。這些本體最終可被整合為一個完整的中醫藥領域本體,支持知識獲取、知識發現、知識服務等中醫藥知識工程的后續工作。實踐表明,本體可有效捕捉中醫藥領域的概念體系,并以概念為核心將中醫藥知識體系準確地表達出來,能夠勝任中醫藥領域知識建模的任務。
5.2 中醫藥知識獲取技術
如上文所述,中醫藥知識獲取是一項復雜的工作,被公認為知識處理過程中的一個瓶頸,嚴重限制了知識工程和知識系統的發展。近年來,學者們主要試圖通過“集體智能”和“機器智能”這兩條路徑來突破中醫藥領域的知識獲取瓶頸。
“集體智能”是指組織大量領域專家一起編輯知識庫,從而實現專家知識的共享與融合。實現集體智慧的關鍵在于建立合理的交流、協作和激勵機制。隨著互聯網的迅速推廣,中醫界開始利用互聯網技術建立各種面向中醫藥領域的知識工程平臺,進行跨學科、跨組織、跨地域的協作式知識加工,開展了一系列大規模的知識工程項目,建成了一系列術語系統、領域本體、文獻庫、數據庫和知識庫。例如,中國中醫科學院中醫藥信息研究所建立了基于互聯網的“中醫藥虛擬研究院”,部署了一個協同知識工程平臺,支持全國40余家機構,近300人進行協同工作[24-25]。在該系統的直接支持下,研制了“中醫藥學語言系統”[23]等一系列大型知識系統。實踐表明,基于互聯網的虛擬環境能將不同機構、不同地區的研究人員組織起來,有效解決資金分散、缺乏協調、研發能力不足等問題,實現知識工程的規?;痆25]。
“機器智能”是指研發文本挖掘技術,使機器能夠直接從文獻等知識載體中提取結構性知識。文本挖掘在中醫藥領域已得到成功應用,能夠顯著提升知識庫加工的效率[26]。但與生物醫學領域的大量研究工作[27]相比,文本挖掘在中醫藥領域的應用仍處于早期探索階段。需要針對中醫藥文獻的特點,進一步研發實用的挖掘方法,提升挖掘結果的完整性和準確性,從而深度挖掘中醫藥文獻中蘊含的知識。
5.3 中醫藥知識存儲技術
知識存儲(knowledge storage)特指在計算機系統中安全、可靠、有序地存儲知識資源,以支持知識管理和知識工程應用。知識庫是實現知識存儲的重要支撐工具,也是知識工程的重中之重。知識庫一般是針對特定領域以及問題求解而建立的,對領域知識進行全面收集和系統整理,進而對知識進行組織、分類和保存,以支持知識檢索和查詢。
構建中醫知識庫系統,是指用人工智能技術把中醫藥理論和專家的經驗按規范化、標準化的格式組建成知識庫[8]。知識庫一般具有形式化、結構化、易查詢、易操作等特點,能支持機器推理。傳統上知識庫主要是指采用謂詞邏輯、框架等知識表示方法,在計算機系統中表示和存儲的知識集合。但在中醫藥信息化實踐中,人們也把文獻庫、數據庫、本體等多種形式的知識載體統稱為“知識庫”。它們都能起到知識存儲的作用,與自然語言處理、機器學習等方法相結合后仍可支持智能應用,因此稱之為廣義的知識庫也不為過。
近年來,中醫藥知識庫建設得到迅猛發展,在中醫人體、中醫疾病、中醫證候、中醫醫案、中藥、中醫養生等方面都出現了知識庫系統[28]。中醫藥知識庫在中醫藥信息化中扮演著核心的角色,在文獻整理、知識可視化、知識共享、臨床診療、教學、研究等諸多方面取得實際應用,為中醫藥知識遺產的數字化保存和深度挖掘提供了創新性的手段。
5.4 中醫藥知識發現技術
知識發現是從數據中獲取有效、新穎、有潛在應用價值和最終可理解模式的非平凡過程[17]。知識發現是人工智能、數據庫、統計學、機器學習等多種技術相互交叉產物。知識發現在20世紀90年代提出之后,獲得了廣泛關注和迅速發展,產生了高頻集、關聯分析、分類、預測、聚類、孤立點分析、時序/序列分析等一系列行之有效的方法,還出現了Weka、Rapidminer等較為成熟的開源軟件。這為知識發現技術在中醫藥領域的應用創造了條件。
中醫在數千年的臨床實踐與理論研究中積累了海量的數據、文獻和知識。如何利用這些寶貴資源就成了發展中醫藥必須面對的一個問題。而KDD所擅長的正是從海量的數據中尋找有意義的模式和知識,是分析中醫藥海量數據所需的理想技術手段。近年來,中醫團體已開展了將頻繁模式發現、關聯規則發現、聚類分析、復雜網絡分析等多種KDD方法引入中醫藥領域的若干探索。例如,使用關聯規則發現等方法對方劑數據進行分析,來揭示方劑配伍規律[18];通過知識發現方法輔助中醫開具中藥處方[19]以及中藥新藥研發[22];通過基于隱結構模型的機器學習方法來揭示中醫證候的本質[21];使用文本挖掘方法從海量文獻中挖掘新穎知識,構建并分析中醫藥復雜網絡[20]。這些工作表明,面對中醫藥領域的海量數據,采用KDD技術進行有效的知識發現既是必要的,也是可行的[29]。
過20多年的發展,中醫藥知識發現的方法和技術已進入相對成熟期,針對中醫藥領域的各種問題都產生了一系列行之有效的方法。但成熟并不意味著完善,面對中醫藥數據描述多樣化、數據仍不完備的特點,仍然需要對現有的KDD技術進行改進和發展,以滿足中醫藥科學研究和知識創新的需要。
6 中醫藥知識工程的發展趨勢
近年來,中醫藥知識工程實踐取得長足發展,成功建立了大量的知識資源。但中醫藥知識資源往往服務于特定的醫療和研究機構,彼此之間異質、異構,難以實現集成與共享,形成嚴重的“知識孤島”現象,成為長期困擾中醫藥知識工程領域的技術難題。中醫藥與西醫等相關領域的知識資源也難以實現有效的關聯,阻礙了跨學科研究的開展。
為此,學者們[6,30]提出使用語義網作為中醫藥數據表示標準,實現中醫藥內部的知識整合以及中西醫領域的知識互聯,從根本上解決“知識孤島”問題。2001年,萬維網發明人(T.B. Lee)在《科學美國人》上正式提出了語義網的構想,認為它將是一個機器可以理解的開放性信息空間[5]。語義網技術的核心優勢在于將數據結構和存儲方式各異的數據轉換為統一格式并重新,從而實現數據資源的交換與集成。語義網為實現跨領域知識關聯提供了理想的技術平臺,有助于構建面向特定領域的大規模知識圖譜,進而實現各領域知識圖譜的關聯與融合。語義網最終將發展為一個全球性的知識圖譜,提供全面、智能的知識檢索服務,促進知識共享和人機協作。
可基于語義網技術建立中醫藥知識圖譜,從而實現中醫疾病、中藥、方劑、針灸、醫案等中醫藥各門類知識資源的集成[30-31]。TCMLS作為一個包含10余萬個中醫概念以及100余萬個語義關系的大型語義網絡,為構建中醫藥知識圖譜提供了相對完整的框架。鑒于此,于彤等[31]提出以中醫藥學語言系統為骨架,將中醫藥領域現有的術語資源和數據庫資源融合起來,構成大規模知識圖譜,并實現基于知識圖譜的知識檢索、知識展示和知識服務等功能。在未來,可進一步擴充中醫藥知識圖譜,通過語義關系表達中醫和西醫之間的結合點,從而實現這兩個領域的知識圖譜的關聯和融合。這套方法將使中醫藥知識資源接入全球互聯的知識圖譜之中,支持各種面向結合醫學的知識共享、決策支持和知識發現應用,在中西醫結合醫學中發揮更大的作用和影響力。
6 小結
中醫藥根植于中華文化,源于中國傳統哲學,是中華民族非常寶貴的知識遺產。中醫藥知識工程成為中醫藥知識遺產保護和知識創造的一種新模式,能有效推動群體性的知識創新活動,加速知識轉化過程,促進知識的傳播。
中醫藥經過數千年的發展,形成了一座偉大的知識寶庫,這決定了中醫藥知識工程的巨大價值和艱巨性。中醫藥領域知識體系相當復雜,對知識工程技術提出了獨特的需求。在中醫藥領域實施知識工程是一項極其復雜且具有挑戰性的工作,其中還有很多尚未解決的科學問題和技術難題,需要進行長期的研究。展望未來,中醫藥知識工程必將成為中醫藥信息學學科體系的重要組成部分,也將在中醫藥科學研究和臨床實踐中發揮越來越重要的作用。
參考文獻:
[1] 任廷革, 劉曉峰, 李慶業, 等. 從復方分析模型的研究看中醫知識工程的意義[J]. 中國中醫藥信息雜志, 1999, 6(3): 12-13.
[2] 楊斌. 中醫知識工程的建立及其意義[J]. 世界科學技術――中醫藥現代化, 2000, 2(4): 28-30.
[3] Schreiber G, AKKERMANS H, Anjewierden A, et al. Knowledge engineering and management: the CommonKADS methodology [M]. 1st ed. Cambridge, MA: The MIT Press, 2000.
[4] Brachman R, Levesque H. Knowledge representation and reasoning [M].San Francisco:Morgan Kaufmann Publishers Inc., 2004.
[5] Berners-Lee T, HENDLER J, Lassila O. The semantic Web [J]. Scientific American, 2001, 284(5): 28-37.
[6] 于彤, 崔蒙, 李敬華. 語義Web在中醫藥領域的應用研究綜述[J]. 世界中醫藥, 2013, 8(1): 107-109.
[7] Fayyad U, PIATETSKY-Shapiro G, Smyth P. From data mining to knowledge discovery in databases[J]. AI magazine, 1996, 17(3): 37-54.
[8] 馬斌榮. 中醫專家系統與中醫知識庫[M]. 北京: 北京出版社, 1997.
[9] 陸志平, 李媛媛, 魏方方, 等. 人工智能、專家系統與中醫專家系統[J]. 醫學信息, 2004, 17(8): 458-459.
[10] 孫燕. 中醫知識工程研究進展分析[M]. 中國中醫藥信息雜志, 2010, 17(12): 5-6.
[11] 于彤, 陳華鈞, 顧攏 等. 中醫象思維的OWL語義建模[J]. 中國數字醫學, 2013, 8(4): 29-33.
[12] 于彤, 崔蒙, 吳朝暉, 等. 基于語義Web的中醫臨床知識建模[J]. 中國數字醫學, 2013, 8(11):81-85.
[13] Gruber T R. A translation approach to portable ontology specifications[J]. Knowledge acquisition, 1993, 5(2): 199-220.
[14] 李兵, 裘儉, 張華敏, 等. 中醫藥領域本體研究概述[J]. 中國中醫藥信息雜志, 2010, 17(3):100-101,106.
[15] 路耀華. 思維模擬與知識工程[M]. 北京: 清華大學出版社, 1997.
[16] 陳瑜. 試論中醫藥領域的知識獲取[J]. 醫學信息學雜志, 2013, 34(3): 89-92.
[17] FAN J, LI D. An overview of data mining and knowledge discovery[J]. Journal of computer science and technology, 1998, 13(4): 348-368.
[18] 李文林, 段金廒, 趙國平,等. 方劑配伍規律數據挖掘的研究現狀及思考[J]. 中國中醫藥信息雜志, 2008, 15(10):92-94.
[19] QIAO S, TANG C, JIN H, et al. KISTCM: knowledge discovery system for traditional Chinese medicine[J]. Applied intelligence, 2010, 32(3):346-363.
[20] ZHOU X, LIU B, WU Z, et al. Integrative mining of traditional Chinese medicine literature and MEDLINE for functional gene networks [J]. Artificial intelligence in medicine, 2007, 41(2):87-104.
[21] ZHANG N, YUAN S, CHEN T, et al. Latent tree models and diagnosis in traditional Chinese medicine[J]. Artificial intelligence in medicine, 2008, 42(3):229-245.
[22] 雷蕾, 慧敏, 崔蒙, 等. 中醫藥化學輔助研發系統的建設[J]. 中國中醫藥信息雜志, 2008, 15(8): 100-101.
[23] 于彤, 賈李蓉, 劉靜, 等. 中醫藥學語言系統研究綜述[J]. 中國中醫藥圖書情報雜志, 2015, 39(6): 56-60.
[24] 崔蒙, 謝琪, 尹愛寧, 等. 中醫藥信息數字化虛擬研究院建設模式研究[J]. 上海中醫藥大學學報, 2008, 23(3):5-8.
[25] 尹愛寧, 崔蒙, 范為宇, 等. 中醫藥虛擬研究院[J]. 國際中醫中藥雜志, 2006, 28(3): 141-143.
[26] ZHOU X, PENG Y, LIU B. Text mining for traditional Chinese medical knowledge discovery: a survey[J]. Journal of biomedical informatics, 2010, 43(4): 650-660.
[27] Rebholzschuhmann D, OELLRICH A, Hoehndorf R. Text-mining solutions for biomedical research: enabling integrative biology[J]. Nature reviews genetics, 2012, 13(12): 829-39.
[28] 于彤, 釧叮 李敬華. 中醫藥知識庫系統研究進展綜述[J]. 中國醫學創新, 2014, 11(18): 142-144.
[29] 吳朝暉, 封毅. 數據庫中知識發現在中醫藥領域的若干探索(Ⅰ)[J]. 中國中醫藥信息雜志, 2005, 12(10): 93-95.
[30] CHEUNG K, CHEN H. Semantic Web for data harmonization in Chinese medicine [J]. Chinese Medicine, 2010, 5(1):1-5.
[31] 于彤, 劉靜, 賈李蓉, 等. 大型中醫藥知識圖譜構建研究[J]. 中國數字醫學, 2015, 10(3): 80-82.
Knowledge Engineering for Traditional Chinese Medicine: A Review of Theoretical System and Key Technologies
Yu Tong
Information Institute of Traditional Chinese Medicine, China Academy of Chinese Medical Sciences,
系統的核心是入庫、庫存和出庫三者之間的聯系,每一個表的修改都將聯動的影響其它的表,當完成入庫或出庫操作時系統會自動地完成庫存的修改。查詢功能也是系統的核心之一,在系統中即有單條件查詢和多條件查詢,也有精確查詢和模糊查詢,系統不僅有靜態的條件查詢,也有動態生成的條件查詢,其目的都是為了方便用戶使用。系統有完整的用戶添加、刪除和密碼修改功能,并具備報表打印功能。
系統采用Microsoft Office中的Access 2000來設計數據庫,并使用當前優秀的開發工具—Delphi 6.0 ,它有著最為靈活的數據庫結構,對數據庫應用有著良好的支持。
論文主要介紹了本課題的開發背景,所要完成的功能和開發的過程。重點的說明了系統設計的重點、設計思想、難點技術和解決方案。
關鍵字:數據庫,SQL語言,Delph 6,數據庫組件,倉庫管理
目 錄
第一章 引言 ……………………………………………………………………………1
1.1 課題來源 ……………………………………………………………………1
1.2 開發工具的選擇 ……………………………………………………………2
1.3 所做的主要工作 ……………………………………………………………3
第二章 數據庫概論 ……………………………………………………………………4
2.1 數據庫的發展 ………………………………………………………………4
2.1.1 數據庫的發展 …………………………………………………………4
2.1.2 數據庫階段的特點 ……………………………………………………5
2.1.3 數據庫技術 ……………………………………………………………6
2.2 數據庫理論基礎 ……………………………………………………………7
2.2.1 數據庫模型 ……………………………………………………………7
2.2.2 數據庫體系結構
……………………………………………………10
2.2.3 數據的獨立性 ………………………………………………………11
2.2.4 范式 …………………………………………………………………11
2.3 SQL語言基礎 ……………………………………………………………13
2.3.1 SQL簡介 ……………………………………………………………13
2.3.2 SQL查詢
……………………………………………………………13
2.3.3 SQL數據更新
………………………………………………………14
第三章數據庫開發工具 ……………………………………………………………16
3.1 Delphi 6.0 簡介 ……………………………………………………………16
3.2 Delphi 6.0 控件 ……………………………………………………………17
3.2.1 ADO數據訪問組件 …………………………………………………17
3.2.2 數據控制類DataControl
……………………………………………18
3.2.3 數據訪問類DataAccess
……………………………………………18
3.2.4 SQL語言在Delphi中的應用
………………………………………19
3.3 Access 簡介
………………………………………………………………21
第四章 系統總體設計 ………………………………………………………………23
4.1 系統需求分析
……………………………………………………………23
4.2 系統概要設計
……………………………………………………………25
4.2.1 系統結構設計
………………………………………………………25
4.2.2 數據庫設計
…………………………………………………………27
4.2.2.1 ER圖設計 ……………………………………………………27
4.2.2.2 數據庫表格設計………………………………………………29
4.3系統詳細設計………………………………………………………………34
第五章 系統應用程序設計 …………………………………………………………37
5.1 系統窗體模塊組成…………………………………………………………37
5.2 數據模塊窗體設置…………………………………………………………38
5.3 主窗體功能模塊的實現……………………………………………………39
5.4 入庫、出庫窗體模塊的實現………………………………………………43
5.5 查詢功能的實現……………………………………………………………51
5.6 系統登陸窗體模塊的實現…………………………………………………52
5.7 用戶管理功能的實現………………………………………………………54
5.7.1 用戶管理主窗體 ……………………………………………………54
5.7.2 密碼修改窗體模塊的實現
…………………………………………54
5.7.3 用戶注冊窗體模塊的實現
…………………………………………55
5.7.4 用戶注銷窗體模塊的實現
…………………………………………57
結束語 …………………………………………………………………………………59
致謝 ……………………………………………………………………………………60
參考文獻 ………………………………………………………………………………61
第一章
引 言
§1.1 課題來源
隨著社會經濟的迅速發展和科學技術的全面進步,計算機事業的飛速發展,以計算機與通信技術為基礎的信息系統正處于蓬勃發展的時期。隨著經濟文化水平的顯著提高,人們對生活質量及工作環境的要求也越來越高。書籍做為人類的精神食糧,在現代社會中越來越受到重視,大量的書籍出現在市場上,人們有了各種各樣不同的選擇。與此同時,為了管理大量的圖書,圖書倉庫也大量的出現,倉庫的管理問題也就提上了日程。隨著圖書的大量增加,其管理難度也越來越大,如何優化倉庫的日常管理也就成為了一個大眾化的課題。
在計算機飛速發展的今天,將計算機這一信息處理利器應用于倉庫的日常管理已是勢必所然,而且這也將為倉庫管理帶來前所未有的改變,它可以帶來意想不到的效益,同時也會為企業的飛速發展提供無限潛力。采用計算機管理信息系統已成為倉庫管理科學化和現代化的重要標志,它給企業管理來了明顯的經濟效益和社會效益。主要體現在:
極大提高了倉庫工作人員的工作效率,大大減少了以往入出存流程繁瑣,雜亂,周期長的弊端。
基于倉庫管理的全面自動化,可以減少入庫管理、出庫管理及庫存管理中的漏洞,可以節約不少管理開支,增加企業收入。
倉庫的管理的操作自動化和信息的電子化,全面提高了倉庫的管理水平。
隨著我國改革開放的不斷深入,經濟飛速的發展,企業要想生存、發展,要想在激烈的市場競爭中立于不敗之地,沒有現代化的管理是萬萬不行的,倉庫管理的全面自動化、信息化則是其中極其重要的部分。為了加快倉庫管理自動化的步伐,提高倉庫的管理業務處理效率,建立倉庫管理系統已變得十分心要。
入庫、庫存、出庫還是現在企業圖書倉庫管理的常規基本模式,雖然,最近又出現了很多新的管理模式,如:基于零庫存思想的沃爾瑪特管理方式,但這些新的思想在中國大部分企業的管理中還是難以實現的。所以如何設計好倉庫管理系統,盡可能地減少倉庫管理的重復性和低效性就成為當前最為重要的問題。圖書倉庫管理的核心是入庫、庫存和出庫之間的聯系,如何處理好三者之間的關系是系統最為關鍵的部分。另外,員工信息和供應商信息管理也是倉庫管理中一個必不可少的部分,它提供著與入庫和出庫相關的地一些信息,使得整個系統更加完整,更加實用。
通過對倉庫管理日常工作的詳細調查,搜集了大量的資料,從系統結構的組織,功能的實現,技術的要求以及可行性等多方面進行考慮,認為本課題是一個適應現今圖書倉庫管理需求的計算機信息管理系統,具有一定的實際開發價值和使用價值。
§1.2 開發工具的選擇
自Java誕生以來,隨著Internet技術的普及和應用需求的變化,以第四代語言為主的應用開發產品發生了較大的變化,它們不僅已成為人們開發應用的開發工具,而且很多產品已發展成為一種強有力的應用開發環境。這些新型的開發工具通常以一種集成軟件包的形式提供給開發人員,被稱為Studio(工作室)或Suite(程序組)。例如,微軟的Visual Studio 6.0,Borland公司的Delphi 6.0等數據庫輔助開發工具。
現在,市場上可以選購的應用開發產品很多,流行的也有數十種。目前在我國市場上最為流行、使用最多、最為先進的可用作企業級開發工具的產品有:
Microsoft公司的Visual Basic 6.0版
Microsoft公司的Visual C++6.0版
Borland公司的Delphi 6.0版
在目前市場上這些眾多的程序開發工具中,有些強調程語言的彈性與執行效率;有些則偏重于可視化程序開發工具所帶來的便利性與效率的得高,各有各的優點和特色,也滿足了不同用戶的需求。然而,語言的彈性和工具的便利性是密不可分的,只有便利的工具,卻沒有彈性的語言作支持,許多特殊化的處理動作必需要耗費數倍的工夫來處理,使得原來所標榜的效率提高的優點失去了作用;相反,如果只強調程語言的彈性,卻沒有便利的工具作配合,會使一些即使非常簡單的界面處理動作,也會嚴重地浪費程序設計師的寶貴時間。
而Delphi是一個非常理想選擇。Delphi 6 是操作系統中快速應用開發環境的最新版本。它也是當前Windows平臺上第一個全面支持最新Web服務的快速開發工具。無論是企業級用戶,還是個人開發者,都能夠利用Delphi 6 輕松、快捷地構建新一代電子商務應用。Delphi 6 是惟一支持所有新出現的工業標準的RAD環境,包括XML(擴展標記語言)/XSL(可擴展樣式語言),SOAP(簡單對象存取協議)和WSDL(Web服務器描述語言)等。
Delphi 6 是可視化的快速應用程序開發語言,它提供了可視化的集成開發環境,這一環境為應用程序設計人員提供了一系列靈活而先進的工具,可以廣泛地用于種類應用程序設計。在Delphi 6 的集成開發環境中,用戶可以設計程序代碼、運行程序、進行程序錯誤的調試等,可視化的開發方法降低了應用程序開發的難度。Delphi的基礎編程語言是具有面向對象特性的Pascal語言,即Object Pascal 。Object Pascal具有代碼穩定、可讀性好、編譯速度快等優點,并將面向對象的概念移植到了Pascal語言中,使這種基礎語言有了新的發展空間。
使用Delphi 6.0 ,我們幾乎可以作任何事情,還可以撰寫種各種類型的應用程序,動態鏈接庫(DLL)、CON、或CORBA對象,CGI/ISAPI程序,Microsoft Back Office應用程序。程序的規模小到簡單的個人數據庫應用,大到復雜的企業的多層次分布式系統,都可以使用Delphi進行開發,其友好的集成開發界面,可視化的雙向開發模式,良好的數據庫應用支持高效的程序開發和程序運行,備受廣大程序開發人員的好評。尤其是Delphi對數據庫應用的強大支持,大大提高了數據庫應用軟件開發的效率,縮短了開發周期,深受廣大數據庫應用程序設計人員的喜愛。Delphi為數據庫應用開發人員提供了豐富的數據庫開發組件,使數據庫應用開發功能更強大,控制更靈活,編譯后的程序運行速度更快。
§1.3 本文所做工作
引言部分介紹了本系統的課題來源以及對數據庫開發工具的選擇。
第二章介紹了數據庫的發展,關系數據庫,數據庫體系結構,并系統介紹了SQL語言,為設計和理解應用程序做了鋪墊。
第三章系統介紹了Delphi 6.0及其部分控件,SQL語言在Delphi 6.0中的應用,以及Access等。
第四章是本文的主體,按照軟件工程的要求,從需求分析開始,經過概要設計最后到詳細設計,完成對整個系統的設計。
第五章根據第四章的設計結果利用Access 2000和Delphi 6.0進行了具體的窗體和應用程序設計。
總結部分介紹了設計體會和編程體會,并指出了系統設計中的不足和改進的方向
轉貼于 第二章
數據庫概論
§2.1
數據庫的發展
數據庫處理在信息系統的研究中一直是非常重要的主題,然而,近年來,隨著World Wide Web(WWW)的猛增及Internet技術的迅速發展,使得數據庫技術之時成為最熱門技術之一。數據庫技術能使Internet應用超越具有早期應用特點的簡單的。同時,Internet技術提供了一種向用戶數據庫內容的標準化的訪問方法。這些技術沒有脫離經典數據庫技術的要求。它們只是加重了數據庫技術的重要性。
數據庫的設計和開發及包括藝術有包括工程。理解用戶的需求,然后,把它們轉變為有效的數據庫設計是一個藝術過程。把設計轉變為實際的數據庫,并且這些數據庫帶有功能完備、高效能的應用,是一個工程過程。
數據庫的目的是幫助人們跟蹤事務。經典的數據庫應用涉及諸如訂單、顧客、工作、員工、學生、電話之類的項,或其它數據量較大、需要密起關注的事務。最近,由于數據庫的普及,數據庫技術已經被應用到了新的領域,諸如用于Internet的數據庫或用于公司內聯網的數據庫。數據庫也被越來越多地應用于生成和維護多媒體應用程序上。
計算機的數據處理應用,首先要把大量的信息以數據形式存放在存儲器中。存儲器的容量、存儲速率直接影響到數據管理技術的發展。從1956年生產出第一臺計算機到現在,存儲器的發展,為數據庫技術提供了良好的物質基礎。
使用計算機以后,數據處理的速度和規模,無論是相對于手工方式,還是機械方式,都有無可比擬的優勢。通常在數據處理中,計算是比較簡單的而數據的管理卻比較復雜。數據管理是指數據的收集、整理、組織、存儲、維護、檢索、傳送等操作,這部分操作是數據處理業務的基本環節,而且是任何數據處理業務中必不可少的共有部分。數據管理技術的優劣,將直接影響數據處理的效率。
2.1.1 數據庫的發展
數據管理技術的發展,與硬件(主要是外存)、軟件、計算機應用的范圍有密切的聯系。數據管理技術的發展經過三個階段:人工管理階段、文件系統階段和數據庫階段。
人工管理階段和文件系統階段都有著相當多的缺陷,諸如數據冗余性 ,數據不一致性以及數據聯系弱等等。也正是由于這些原因,促使人們研究新的數據管理技術,從而產生了數據庫技術。
20世紀60年代末發生的三件大事,層次模型IMS系統的推出、關于網狀模型DBTG報告的發表以及關于關系模型論文的連續發表標志著數據管理技術進入數據庫階段。進入70年代以后,數據庫技術得到迅速發展,開發了許多有效的產品并投入運行。數據庫系統克服了文件系統的缺陷,提供了對數據更高級更有效的管理。
當進入數據庫階段后,隨著數據管理規模一再擴大,數據量急劇增加,為了提高效率,開始時,人們只是對文件系統加以擴充,在應用文件中建立了許多輔助索引,形成倒排文件系統。但這并不能最終解決問題。在20世紀60年代末,磁盤技術取得重要進展,具有數百兆容量和快速存取的磁盤陸續進入市場,成本也不高,為數據庫技術的產生提供了良好的物質條件。
2.1.2 數據庫階段的特點
(1)減少數據的重復(Redundancy can be reduced)
當在一個非數據庫系統當中,每一個應用程序都有屬于他們自己的文件,由于無法有系統建立的數據,因此常常會造成存儲數據的重復與浪費。例如:在一家公司當中,人事管理程序與工資管理程序或許都會使用到職員與部門的信息或文件,而我們可以運用數據庫的方法,把這兩個文件整理起來,以減少多余的數據,過度地占用存儲空間。
(2)避免數據的不一致(Inconsistency can avoid)
本項的特色,可以說是延伸前項的一個特點,要說明這樣的一個現象,我們可以從下面這個實例來看:若是在同一家公司當中,職員甲在策劃部門工作,且職員甲的記錄同時被存放在數據庫的兩個地方,而數據庫管理系統卻沒有對這樣重要的情況加以控制,當其中一條數據庫被修改時,便會造成數據的不一致,但是,對于一個健全的數據庫管理系統而言,將會對這樣的情況加以控制,但有時并不需要刻意消除這種情形,應當視該數據庫的需求與效率來決定。
(3)數據共享(Data shared)
對于數據共享的意義,并不是只有針對數據庫設計的應用程序,可以使用數據庫中的數據,對于其他撰寫好的應用程序,同樣可以對相同數據庫當中的數據進行處理,進而達到數據共享的目的。
(4)強化數據的標準化(Standard can be enforced)
由數據庫管理系統,對數據做出統籌性的管理,對于數據的格式與一些存儲上的標準進行控制,如此一來,對于不同的環境的數據交換(Data Interchange)上將有很大的幫助,也能提高數據處理的效率。
(5)實踐安全性的管理(Security restriction can be applied)
通過對數據庫完整的權限控制,數據庫管理者可以確認所有可供用戶存取數據的合法途徑渠道,并且可以事先對一些較重要或關鍵性的數據進行安全檢查,以確保數據存取時,能夠將任何不當損毀的情形降至最低。
(6)完整性的維護(Integrity can be maintained)
所謂完整性的問題,就是要確認某條數據在數據庫當中,是正確無誤的。正如(2)所述,若是無法控制數據的不一致性,便會產生完整性不足的問題,所以,我們會發現,當數據重復性高的時候,數據不完整的情形也會增加,當然,若是數據庫的功能完整,將會大大地提高數據完整性,也會增加數據庫的維護能力與維護簡便性。
(7)需求沖突會獲得平衡(Conflicting requirements can be balance)
在一個較大型的企業當中,用戶不同的需求,往往會造成系統或數據庫在設計上的困擾,但是一個合適的數據庫系統,可以通過數據庫管理員的管理,將會有效地整理各方面的信息,對于一些較重要的應用程序,可以適時地提供較快速的數據存取方法與格式,以平衡多個用戶在需求上的沖突。
上述七個方面構成了數據庫系統的主要特征。這個階段的程序和數據間的聯系可用下圖表示: 2.1.3 數據庫技術
從文件系統發展到數據庫系統是信息處理領域的一個重大變化。在文件系統階段,人們關注的中心問題是系統功能的設計,因而程序設計處于主導地位,數據只起著服從程序需要的作用。在數據庫方式下,信息處理觀念已為新體系所取代,數據占據了中心位置。數據結構的設計成為信息系統首先關心的問題,而利用這些數據的應用程序設計則退居到以既定的數據結構為基礎的外圍地位。
目前世界上已有數百萬個數據庫系統在運行,其應用已經深入到人類社會生活的各個領域,從企業管理、銀行業務、資源分配、經濟預測一直到信息檢索、檔案管理、普查統計等。并在通信網絡基礎上,建立了許多國際性的聯機檢索系統。我國20世紀90年代初在全國范圍內裝備了12個以數據庫技術為基礎的大型計算機系統,這些系分布在郵電、計委、銀行、電力、鐵路、氣象、民航、情報、公安、軍事、航天和財稅等行業。
數據庫技術還在不斷的發展,并且不斷地與其它計算機技術相互滲透。數據庫技術與網絡通信技術相結合,產生了分布式數據庫系統。數據庫技術與面向對象技術相結合,產生了面向對象數據庫系統。
在數據庫技術中有四個名詞,其概念應該分清。
(1)數據庫(database,DB):DB是統一管理的相關數據的集合。DB能為各種用戶共享,具有最小冗余度,數據間聯系密切,而又有較高的數據獨立性。
(2)數據庫管理系統(Database Management System,DBMS):DBMS是位于用戶與操作系統之間的一層數據管理軟件,為用戶或應用程序提供訪問DB的方法,包括DB的建立、查詢、更新及各種數據控制。DBMS總是基于某種數據模型,可以分為層次型、網狀型、關系型和面向對象型DBMS。
(3)數據庫系統(Database System,DBS):DBS是實現有組織地、動態地存儲大量關聯數據,方便多用戶訪問的計算機軟件、硬件和數據資源組成的系統,即采用了數據庫技術的計算機系統。
(4)數據庫技術:這是一門研究數據庫的結構、存儲、管理和使用的軟件學科。數據庫技術是操作系統的文件系統基礎上發展起來的。而DBMS本身要在操作系統的支持下才能工作。數據庫不僅用到數據結構的知識,而且豐富了數據結構的內容。在關系數據庫中要用到集合論、數理邏輯的理論。因此,數據庫技術是一門綜合性較強的學科。
§2.2數據庫理論基礎
2.2.1 數據庫模型
從20世紀50年代中期開始,計算機的應用由科學研究部門逐步擴展到企業、行政部門。至60年代,數據處理成為計算機的主要應用。數據庫技術作為數據管理技術,是計算機軟件領域的一個重要分支,產生于60年代末。現已形成相當規模的理論體系和實用技術。
模型是對現實世界的抽象。在數據庫技術中,我們用模型的概念描述數據庫的結構與語義,對現實世界進行抽象,表示實體類型及實體間聯系的模型稱為“數據模型” 。
目前廣泛作用的數據模型可分為兩種類型。
一種是獨立于計算機系統的模型,完全不涉及信息在系統中的表示,只是用來描述某個特定組織所關心的信息結構,這類模型稱為“概念數據模型” 。要領模型用于建立信息世界的數據模型,強調其語義表達功能,應該概念簡單、清晰,易于用戶理解,它是現實世界的第一層抽象,是用戶和數據庫設計人員之間進行交流的工具。這一其中著名的模型是“實體聯系模型” 。
另一種數據模型是直接面向數據庫的邏輯結構,它是現實世界的第二層抽象。 這類模型涉及到計算機系統和數據庫管理系統,又稱為“結構數據模型” 。例如,層次、網狀、關系、面向對象等模型。這類模型有嚴格的形式化定義,以便于在計算機系統中實現。
(1)層次模型。用樹型結構表示實體類型及實體間聯系的數據模型。樹的結點是記錄類型,每個非根結點有且只有一個父結點。上一層記錄類型和下一層記錄類型間聯系是1∶N聯系。
層次模型的特點是記錄之間的聯系通過指針實現,查詢效率較高。但層次模型有兩個缺點:一是只能表示1∶N聯系,雖然有多種輔助手段實現了M∶N聯系,但都較復雜,用戶不易掌握,二是由于樹型結構層次順序的嚴格和復雜,引起數據的查詢和更新操作也很復雜,因此,編寫應用程序也很復雜。
(2)網狀模型。用有向圖結構表示實體類型及實體間聯系的數據模型。。1969年DBTG報告提出的數據模型是網狀模型的主要代表。有向圖中的結點是記錄類型,有向邊表示從箭尾一端的記錄類型到箭頭一端的記錄類型間聯系是1∶N聯系。
網狀模型的特點:記錄之間聯系通過指針實現,M∶N聯系也容易實現(每個M∶N聯系可拆成兩個1∶N聯系),查詢效率較高。網狀模型的缺點是編寫應用程序比較復雜,程序員必須熟悉數據庫的邏輯結構。由于層次系統和網狀系統的應用程序編制比較復雜,因此,從20世紀80年代中期起,其市場已被關系系統所取代。但是使用這兩種模型建立起的許多數據庫仍然在正常運轉,只是在外層加了個關系數據庫語言的接口。網狀模型有許多成功的產品,20世紀70年代的產品大部分網狀系統,例如,Honeywell公司的IDS/Ⅱ、HP公司的IMAGE/3000、Burroughs公司的DMSⅡ、Umivac公司的DMS1100、Cullinet公司的IDMS、Cimcom公司的TOTAL等
(3)關系模型。關系模型的主要是用二維表格結構表達實體集,用外鍵表示實體間聯系。關系模型是由若干個關系模式組成的集合。關系模式相當于前面提到的記錄類型,它的實例稱為關系,每個關系實際上是一張二維表格。
關系模型和層次、網狀模型的最大判別是用關鍵碼而不是用指針導航數據,表格簡單用戶易懂,編程時并不涉及存儲結構,訪問技術等細節。關系模型是數學化模型。SQL語言是關系數據庫的標準化語言,已得到了廣泛的應用。20世紀70年代對關系數據庫的研究主要集中在理論和實驗系統的開發方面。80年代初才形成產品,但很快得到廣泛的應用和普及,并最終取代了層次、網狀數據庫產品。現在市場上典型的關系DBMS產品有DB2、ORACLE、SYBASE、INFORMIX和微機型產品Foxpro、Access等。
關系模型和網狀、層次模型的最大區別是:關系模型用表格數據而不是通過指針鏈來表示和實現實體間聯系。關系模型的數據結構簡單、易懂。只需用簡單的查詢語句就可對數據庫進行操作。
關系模型是數學化的模型,可把表格看成一個集合,因此集合論、數理邏輯等知識可引入到關系模型中來。關系模型已是一個成熟的有前途的模型,已得到廣泛應用。
(4)面向對象模型。目前,關系數據庫的使用已相當普遍,但是,現實世界中仍然存在著許多含有復雜數據結構的應用領域,例如,CAD數據、圖形數據等,而關系模型在這方面的處理能力就顯得力不從心。因此,人們需要更高級的數據庫技術來表達這類信息。面向對象的概念最早出現在程序設計語言中,隨后迅速滲透到計算機領域的每一個分支。面向對象數據庫是面向對象概念與數據庫技術相結合的產物。
面向對象模型能完整地描述現實世界的數據結構,具有豐富的表達能力,但模型相對較復雜,涉及的知識面也廣,因此面向對象數據庫尚未達到關系數據庫那樣的普及程度。
2.2.2 數據庫體系結構
數據庫的體系結構分三級:內部級(internal),概念級(conceptual)和外部級(external)。這個三級結構有時也稱為“三級模式結構”,或“數據抽象的三個級別”,最早是在1971年通過的DBTG報告中提出,后來收入在1975年的美國ANSI/SPARC報告中。雖然現在DBMS的產品多種多樣,在不同的操作系統支持下工作,但是大多數系統在總的體系結構上都具有三級模式的結構特征。從某個角度看到的數據特性稱為“數據視圖”(data view)。
外部級最接近用戶,是單個用戶所能看到的數據特性。單個用戶使用的數據視圖的描述稱為“外模式”。
概念級涉及到所有用戶的數據定義,是全局的數據視圖。全局數據視圖的描述稱為“概念模式”。
內部級最接近于物理存儲設備,涉及到實際數據存儲的結構。物理存儲數據視圖的描述稱為“內模式”。
數據庫的三級模式結構是數據的三個抽象級別。它把數據的具體組織留給DBMS去做,用戶只要抽象地處理數據,而不必關心數據在計算機中的表示和存儲,這樣就減輕了用戶使用系統的負擔。
三級結構之間往往差別很大,為了實現這三個抽象級別的聯系和轉換,DBMS在三級結構之間提供兩個層次的映象(mappings):外模式/模式映象,模式/內模式映象。此處模式是概念模式的簡稱。
2.2.3 數據的獨立性
由于數據庫系統采用三級模式結構,因此系統具有數據獨立性的特點。在數據庫技術中,數據獨立性是指應用程序和數據之間相互獨立,不受影響。數據獨立性分成物理數據獨立性和邏輯數據獨立性兩級。
(1)物理數據獨立性
如果數據庫的內模式要進行修改,即數據庫的存儲設備和存儲方法有所變化,那么模式/內模式映象也要進行相當的修改,使概念模式盡可能保持不變。也就是對內模式的修改盡量不影響概念模式,當然,對于外模式和應用程序的影響更小,這樣,我們稱數據庫達到了物理數據獨立性。
(2)邏輯數據獨立性
如果數據庫的概念模式要進行修改,譬如增加記錄類型或增加數據項,那么外模式/模式映象也要進行相應的修改,使外模式盡可能保持不變。也就是對概念模式的修改盡量不影響外模式和應用程序,這樣,我們稱數據庫達到了邏輯數據獨立性。
現有關系系統產品均提供了較高的物理獨立性,而對邏輯獨立性的支持尚有欠缺,例如,對外模式的數據更新受到限制等。
2.2.4 范式
建立起一個良好的數據指標體系,是建立數據結構和數據庫的最重要的一環。一個良好的數據指標體系是建立DB的必要條件,但不是充分條件。我們完全可以認為所建指標體系中的一個指標類就是關系數據庫中的一個基本表,而這個指標類下面的一個個具體指標就是這個基本表中的一個字段。但如果直接按照這種方式建庫顯然還不能算最佳。對于指標體系中數據的結構在建庫前還必須進行規范化的重新組織。
在數據的規范化表達中,一般將一組相互關聯的數據稱為一個關系(relation),而在這個關系下的每個數據指標項則被稱為數據元素(data element),這種關系落實到具體數據庫上就是基本表,而數據元素就是基本表中的一個字段(field)。規范化表達還規定在每一個基本表中必須定義一個數據元素為關鍵字(key),它可以唯一地標識出該表中其它相關的數據元素。在規范化理論中表是二維的,它有如下四個性質:
在表中的任意一列上,數據項應屬于同一個屬性(如圖中每一列都存放著不同合同記錄的同一屬性數據)。
表中所有行都是不相同的,不允許有重復組項出現(如圖中每一行都是一個不同的合同記錄)。
在表中,行的順序無關緊要(如圖中每行存的都是合同記錄,至于先放哪一個合同都沒關系)。
在表中,列的順序無關緊要,但不能重復(如圖中合同號和合同名誰先誰后都沒關系,但二者不可重復或同名)。
在對表的形式進行了規范化定義后,數據結構還有五種規范化定義,定名為規范化模式,稱為范式。在這五種范式中,一般只用前三種,對于常用系統就足夠了。而且這五種范式是“向上兼容”的,即滿足第五范式的數據結構自動滿足一、二、三、四范式,滿足第四范式的數據結構自動滿足第一、二、三范式,……,依此類推。
第一范式(first normal form,簡稱1st NF)就是指在同一表中沒有重復項出現,如果有則應將重復項去掉。這個去掉重復項的過程就稱之為規范化處理。在本文所討論的開發方法里,1st NF實際上是沒有什么意義的。因為我們按規范化建立的指標體系和表的過程都自動保證了所有表都滿足1st NF。
第二范式(second normal form,簡稱 2nd NF)是指每個表必須有一個(而且僅一個)數據元素為主關鍵字(primary key),其它數據元素與主關鍵字一一對應。例如,在圖l9.7中如果我們將合同號定義為主關鍵字(其它數據元素中的記錄數據都有可能重名,故不能作為主關鍵字),故只要知道了一個合同記錄的合同號,就可以唯一地在同一行中找到該合同的任何一項具體信息。通常我們稱這種關系為函數依賴(functional depEndence)關系。即表中其它數據元素都依賴于主關鍵字,或稱該數據元素唯一地被主關鍵字所標識。
第三范式(third normal form,簡稱 3rd NF)就是指表中的所有數據元素不但要能夠唯一地被主關鍵字所標識,而且它們之間還必須相互獨立,不存在其它的函數關系。也就是說對于一個滿足了 2nd NF的數據結構來說,表中有可能存在某些數據元素依賴于其它非關鍵宇數據元素的現象,必須加以消除。
為防止數據庫出現更新異常、插入異常、刪除異常、數據冗余太大等現象,關系型數據庫要盡量按關系規范化要求進行數據庫設計。
§2.3 SQL語言基礎
2.3.1 SQL簡介
用戶對數據庫的使用,是通過數據庫管理系統提供的語言來實現的。不同的數據庫管理系統提供不同的數據庫語言。關系數據庫管理系統幾乎都提供關系數據庫標準語言——SQL。
SQL 的全稱是Structured Query Language,即結構化查詢語言。SQL語句可以從關系數據庫中獲得數據,也可以建立數據庫、增加數據、修改數據。1986年ANSI采用SQL語言作為關系數據庫系統的標準語言,后被國際化標準組織(ISO)采納為國際標準。SQL語言使用方便、功能豐富、簡潔易學,是操作數據庫的工業標準語言,得到廣泛地應用。例如關系數據庫產品DB2、ORACLE等都實現了SQL語言。同時,其它數據庫產品廠家也紛紛推出各自的支持SQL的軟件或者與SQL的接口軟件。這樣SQL語言很快被整個計算機界認可。
SQL語言是一種非過程化語言,它一次處理一個記錄集合,對數據提供自動導航。SQL語言允許用戶在高層的數據結構上工作,而不對單個記錄進行操作。SQL語言不要求用戶指定數據的存取方法,而是使用查詢優化器,由系統決定對指定數據存取的最快速手段。當設計者在關系表上定義了索引時,系統會自動利用索引進行快速檢索,用戶不需知道表上是否有索引或者有什么類型的索引等細節。
SQL語言可以完成許多功能,例如:
查詢數據
在數據庫表格中插入、修改和刪除記錄
建立、修改和刪除數據對象
控制對數據和數據對象的存取
確保數據庫的一致性和完整性等
2.3.2 SQL查詢
數據查詢是關系運算理論在SQL語言中的主要體現,SELECT 語句是SQL查詢的基本語句,當我們在對一個數據庫進各種各樣的操作時,使用的最多的就是數據查詢,在以SQL為基礎的關系數據庫中,使用的最多的就是SELECT查詢語句。
SELECT語句的完整句法如下:
SELECT 目標表的列名或列表達式序列
FROM 基本表和(或)視圖序列
[WHERE 行條件表達式]
[GROUP BY 列名序列]
[HAVING 組條件表達式]
[ORDER BY列名 [ASC│DEAC]…]
我在SELECT語句中還使用了大量的保留字和通配符以進行各種各樣的條件查詢。在系統中有大量的查詢按鈕,其使用了大量的查詢語句,而且這些查詢語句大部分使用的是模糊查詢,所以大量的使用了模式匹配符LIKE(判斷值是否與指定的字符通配格式相符)。在包含LIKE的查詢語句中可以使用兩個通配符:%(百分號):與零個或多個字符組成的字符串匹配;_(下劃線):與單個字符匹配。系統中的條件判斷往往包含多個條件,這時就需要使用邏輯運算符NOT、AND、OR(用于多條件的邏輯連接),謂詞ALL以及保留字DISTINCT等等。做為SELECT語句還有很多的使用方法,這里就不再敘述。
2.3.3 SQL數據更新
使用數據庫的目的是為了有效地管理數據,而數據的插入、刪除和修改則是必不可少的一個功能。在本系統中就大量地使用了數據插入、刪除和修改這三種操作,現做一個簡單地介紹。
數據插入
往數據庫的基本表中插入數據使用的是INSERT語句,其方式有兩種:一種是元組值的插入,另一種是查詢結果的插入。在本系統中使用的是前一種方式,其句法如下:
INSERT INTO 基本表名(列表名)VALUES(元組值)
數據刪除
往數據庫的基本表中刪除數據使用的是DELETE語句,其句法如下:
DELETE FROM 基本表名 [WHERE 條件表達式]
在些作一點說明,刪除語句實際上是“SELECT * FROM 基本表名 [WHERE 條件表達式]”和DELETE操作的結合,每找到一個元組,就把它刪除。此外,DELETE語句只能從一個基本表中刪除元組,WHERE子句中條件可以嵌套,也可以是來自幾個基本表的復合條件。
數據修改
當需要修改基本表中元組的某些列值時,可以用UPDATE語句實現,其句法如下:
UPDATE基本表名
SET列名=值表達式[,列名=值表達式…]
[WHERE條件表達式]
在Delphi中使用SQL語句是很方便的,一般來說,都是通過TQuery組件來使用SQL語言的。有一點要進行說明,雖然通過TQuery組件來使用SQL語言很方便,但考慮到自己對不同組件的理解程度、個人習慣以及其它各個方面,在本系統中我采用的是ADO組件來對數據庫進行操作。最簡單的方法比如在TADOQuery組件的SQL屬性中就可以鍵入SQL語句,至于詳細的使用方法在后面進行介紹。
轉貼于 第三章
數據庫開發工具
§3.1 Delphi 6.0 簡介
Delphi類可以粗略地分成兩部分:一部分是組件類,這些組件類通常以某種方式出現在組件面板上,當用戶從組件面板上點取一個類的圖標后,在程序中就自動生成了該類的對象(非可視組件除外);另一部分是功能類,這此功能類的對象通常出現在程序代碼中,起著不可代替的作用,但是這些功能類在組件面板上是找不到的。在Delphi中,每一個類的祖先都是Tobject類,整個類的層次結構就像一棵倒掛的樹,在最頂層的樹根即為Tobject類。這樣,按照面向對象編程的基本思想,就使得用戶可用Tobject類這個類型代替任何其它類的數據類型。實際上在Delphi的類庫中,Tobject類派生出了為數相當眾多的子類,它們形成了一個龐大的體系,通常情況下,如果不自行開發組件,就不必了解整個類的體系結構,只用到類層次樹的葉結點就足夠了。
凡是做過程序開發的人都知道從來沒有單純的數據應用程序,也就是說,數據庫應用程序必須和用戶界面(可以是圖形界面,也可以是命令接口)元素相結合,只講界面或只講數據庫本身都構不成數據庫應用程序,因而用Delphi 6.0開發數據庫應用程序就隱含著界面開發。Delphi6中的VCL組件可用圖3-1來說明。組件在Delphi程序的開發中是最顯眼的角色。大家知道,在編寫程序時一般都開始于在組件面板上選擇組件并定義組件間的相互作用。但也有一些組件不在組件面板上,例如Tform和Tapplication(典型的非可視組件)。組件是Tcomponents派生出來的子類,可以流的形式存放在DFM文件中,具有事件和Publish屬性。
窗口組件類是窗口化的可視化組件類,在Delphi的類庫中占有最大的份額。在實際編程中,窗口組件類的對象都有句柄,可以接受輸入焦點和包含其它組件。
圖形組件與窗口組件并列,是另一大類組件。圖形組件不是基于窗口的,因而不能有窗口句柄,不能接受輸入焦點和包含其它組件。從圖8-43中可以看出,圖形組件的基類是TgraphicControl,在實際編程中,它們必須寄生于它們的宿主——窗口組件類的對象,由它們的擁有者負責其顯示,而且它們還能觸發一些和鼠標活動相關的事件。圖形控件最典型的例子是Tlabel和TspeedButton。由此可以看出圖形組件的功能很弱,有讀者會問圖形組件的用處何在呢?其實使用圖形組件的最大好處在于節省資源,正是因為它們的功能較弱,所以使用的系統資源就要少。在一個應用程序中,如果能在不影響其功能的前提下合理大量地使用圖形組件,將會大減少程序對系統資源的消耗。
非可視組件是與可視組件相并列的另一類組件,非可視組件在程序運行中是不可見的(除各種對話框組件之外,事實上有人認為對話框組件不能歸入非可視組件,應該是另一種介于可視與非可視之間的組件)。
§3.2 Delphi 6.0 控件
用Delphi6開發數據庫應用,重點是和各種數據庫組件打交道,當然也要使用其它的一些組件,現在就我在系統設計中所使用的重要組件給與簡單介紹。
3.2.1 ADO數據訪問組件
ADO數據對象(Active Data Objects)實際是一種提供訪問各種數據類型的鏈接機制。ADO設計為一種極簡單的格式,通過ODBC的方法同數據庫接口中,可以使用任何一種ODBC數據源,即不止適合于SQL Server、Oracle、Access等數據庫應用程序,也適合于Excel表格、文本文件、圖形文件和無格式的數據文件。ADO是基于OLE-DB之上的技術,因此ADO通過其內部的屬性和方法提供統一的數據訪問接口方法。ADO使您的客戶端應用程序能夠通過OLE DB提供訪問和操作在數據庫服務器中的數據。ADO支持用于建立C/S和Web的應用程序的主要功能。其主要優點是易于使用、高速度、低內存支出和占用磁盤空間較少。ADO同時具有遠程數據服務(RDS)功能,通過RDS可以在一次往返過程中實現將數據從服務器移動到客戶端應用程序和Web頁、在客戶端對數據進行處然后將更新結果返回服務器的操作。
Delphi 6.0繼續對Microsoft的ADO訪問能力的支持。這種能力是通過一組新組件實現的,這些組件是在企業版的ADO組件頁中,在組件面版的ADO頁上可以找到這些組件。利用在前面章節提到的TdataSet抽象類,ADO組件可以不通過BDE而直接實現ADO連接。這意味著只需要很少的代碼就可以實現該連接并且性能得到提高。
利用ADO數據訪問組件,可以只使用ADO結構與數據庫取得聯系并對其中的數據進行操作,而在這些過程中完全不需要使用BDE。大多數的ADO連接和數據集組件都是與基于BDE的連接和數據集組件相類似的。TADOConnection組件與基于BDE的應用程序中的Tdatabase組件類似。TADOTable與Ttable,TADOQuery與Tquery,以及TADOStoreProc和TstoredProc之間都具有這種類似的對應關系。使用這些ADO組件的方式與我們常使用的數據訪問組件(基于BDE)都有許多相同之處。TTADODataSet沒有直接的BDE對應組件,但它提供了許多與Ttable和Tquery相同的功能。同樣,TADOCommand也沒有相對應的BDE組件,它是在Delphi/ADO環境中完成特定功能的組件。Delphi 6.0通過ADO數據集訪問組件,可以不借助BDE數據引擎而是通過微軟的OLEDB來訪問更為廣泛的數據庫中的數據。ADO數據集訪問組件與常用的數據訪問組件是并列的關系。
在系統中我主要使用的是ADOTablet和ADOQuery兩個組件。
3.2.2 數據控制類DataControl
數據控制類負責數據庫數據的顯示,并把用戶對數據的修改傳回。這里的絕大多數組件,如DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupCombox, DBCtrGrid的功能和對應的非數據感知組件相同,如TEdit框,TRadioGroups單選按鈕組等,只不過在顯示數據庫數據時要用而已。
在系統中主要使用數據網格控件DBGrid和數據庫導航器控件DBNavigator。
3.2.3 數據訪問類DataAccess
數據庫應用系統中數據訪問是一個首要問題,包括單用戶和 C/S系統,都必須聯系一些數據庫和數據表文件。Delphi 6 提供了專門用于數據訪問的基類控件。主要包括數據源控件DataSource、客戶數據集控件ClientDataSet、數據集提供器控件DataSetProvider等等。
Tdatabase:當一個基于BDE的數據庫應用程序需要一個永久數據庫連接時,需要定制向一個數據庫服務器的連接時,需要事務控制和特殊的數據庫別名時就得用到Tdatabase對象。特別是當連接到一個遠程的SQL數據庫服務器時,如果要利用BDE進行數據庫事務處理,那么,TDatabase對象的威力就體現出來了。在一個應用程序中為每一個數據庫連接顯示的聲明Tdatabase對象要根據需要而定,不是必需的。對一個數據庫連接,如果沒有顯示的聲明并實例化TDatabase對象,系統就會產生一個帶有默認屬性的TDatabase對象。
TdataSource對象用于在DataSet對象(包括Tquery,TstoredProc,Ttable等)和數據感知組件之間提供一個連接的紐帶,以便在窗體上顯示數據庫中的數據,在數據庫中導航定位與編輯數據集中的數據。如果一個DataSet對象中的數據想在數據感知組件中顯示和修改,它就必須和TdataSource對象相聯系。同樣,一個數據感知組件如果想和數據源相聯系以便顯示和操縱數據,就必須以TDataSource對象為中介。
用Delphi6作數據庫應用開發概括來說如下:先利用數據存取組件和實際的數據庫建立連接,并用Tsession對象和Tdatabase對象管理這些連接。然后以Tdatasource對象為中介,用數據感知組件向用戶顯示數據庫的內容并接受用戶的查詢和修改等操作。
3.2.4 SQL語言在Delphi中的應用
在Delphi中使用SQL語言非常方便,一般來說,都是通過Tquery組件來使用SQL語言的??梢栽赥Query組件的SQL屬性中設置SQL語句。設計程序時,在該組件的屬性對話框中選擇SQL屬性,單擊帶省略號的按鈕,就可以打開String List Editor對話框,然后我們就可以在對話框中添加SQL語句。還可以使用Delphi的SQL Builder來自動生成SQL語句,這樣可以避免手工編寫SQL而可能造成的語法錯誤。
靜態SQL語句在程序設計時便已固定下來,它不包含任何參數和變量。
動態SQL語句,也被稱作參數化的語句,在其中間包含著表示字段名或表名的參數,例如下面的語句是一條動態SQL語句:
Select * From Students Where StudentCode =: StudentCode;
其中的變量StudentCode便是一個參數變量,它由一個冒號引導,在程序運行過程中,必須要為該參數賦值,該條SQL語句才能正確執行,每次運行應用程序時可以為該參數變量賦予不同的值。為參數賦值有三種方法:
①根據參數在SQL語句中出現的順序,設置TQuery部件的Params屬性值為參數賦值。
②直接根據SQL語句中各參數的名字,調用ParamByName方法來為各參數賦值。
③將TQuery部件的DataSource屬性設置為另一個數據源,這樣將另一個數據源中與當前TQuery部件的SQL語句中的參數名相匹配的字段值賦給其對應的參數。利用這種方法也能實現所謂的連接查詢,創建主要—明細型數據庫應用。
在程序運行過程中,要想設置TQuery部件的SQL屬性,必須首先調用Close方法,關閉TQuery部件,然后再調用Clear方法清除SQL屬性中現存的SQL命令語句, 最后再調用Add方法為SQL屬性設置新的SQL命令語句。例如:
Query1.Close {關閉Query1)
Query1.SQL.Clear {清除SQL屬性中的SQL命令語句}
Query1.SQL.Add(‘Select * From Students‘);
Query1.SQL.Add(‘ Where Name ="Lucy" ‘);
在為TQuery部件設置SQL屬性時調用Close方法總是很安全的,如果TQuery部件已經被關閉了,調用Close方法時不會產生任何影響。在應用程序中為SQL屬性設置新的SQL 命令語句時,必須要調用Clear方法以清除SQL屬性中現存的SQL命令語句,如果不調用Clear方法,便調用Add方法向SQL屬性中設置SQL命令語句,那么新設置的SQL命令語句會追加在現存SQL命令語句后面, 在程序運行時常常會出現出乎意料的查詢結果甚至程序無法運行下去。
在這里要特別注意的,一般情況下TQuery部件的SQL屬性只能包含一條完整的SQL語句,它不允許被設置成多條SQL語句。當然有些數據庫服務器也支持在TQuery部件的SQL屬性中設置多條SQL語句,只要數據庫服務器允許這樣,我們在編程時可以為 SQL 屬性設置多條SQL語句。
在為TQuery部件設置完SQL屬性的屬性值之后,也即編寫好適當的SQL程序之后,可以有多種方式來執行SQL程序。
在設計過程中,設置完TQuery部件的SQL屬性之后將其Active屬性的值置為True, 這樣便可以執行SQL屬性中的SQL程序,如果應用中有與TQuery部件相連的數據瀏覽部件( 如TDDGrid TDBEdit等)那么在這些數據瀏覽部件中會顯示SQL程序的執行結果。
在應用程序運行過程中,通過程序調用TQuery部件的Open方法或ExecSQL 方法可以執行其SQL屬性中的SQL程序。Open方法和ExecSQL方法是不一樣的。Open方法只能用來執行SQL語言的查詢語句(Select命令), 并返回一個查詢結果集,而ExecSQL方法還可以用來執行其它常用的SQL語句(如INSERT, UPDATE, DELETE等命令),例如:
Query1.Open (這樣會返回一個查詢結果集)
如果調用Open方法,而沒有查詢結果時,會出錯。此時應該調用ExecSQL 方法來代替Open方法。如:
Query1.ExecSQL (沒有返回結果)
當然在設計應用程序時,程序設計人員是無法確定TQuery部件中的SQL 語句是否會返回一個查詢結果的。對于這種情況應當用Try…Except模塊來設計程序。在 Try 部分調用Open方法,而在Except部分調用ExceSQL方法,這樣才能保證程序的正確運行。
Delphi中用ADOQuery來使用SQL語句同樣十分方便。在ADOQuery組件中首先通過ConnectionString屬性值來聯接數據源,然后就通過雙擊SQL…屬性值來寫入SQL語句。在Delphi中調用數據庫,就可以調用ADOQuery組件,通過修改其中的SQL…屬性中的SQL語句來實現對數據庫的各項操作。
值得注意的是,ADOQuery組件只有在激活的情況下才可以被正確地使用,這樣就提出了一個問題,也就是說,在每次修改ADOQuery組件的SQL…屬性時都必須先行進行關閉,待清除掉SQL…中所有的SQL語句后才可以添加新的SQL語句。而且,在每一次修改完成以后,還應該記得重新將ADOQuery激活。其它的使用方法與TTQuery有許多的相似之處。
§3.3 Access 簡介
建立一個數據庫我們有多種選擇,現在市場上有各種各樣的數據庫,而且每一種數據庫都有其自身的特點,不能說哪一種更好,只能在其中尋找一種能更好地適應系統需求、更好地滿足用戶的要求以及適應開發人員的習慣。在本系統中,做為圖書倉庫管理系統是一個比較小的應用系統,它所產生和處理的數據量也比較小。因此,沒有必要使用像SQL Server和Oracle這樣的大型數據庫。我首先想到的數據庫是Borland公司的Paradox數據庫。另外,Microsoft Office中的Access數據庫在計算機上的應用比較普及,是開發小型數據庫系統的比較理想的選擇,所以,在本系統中我選擇了Access數據庫。
Access做為一個數據庫管理系統,它被集成在Microsoft Office中。Access數據庫處理的基本結構,采取關系型數據庫模式。與其他的數據庫系統相比,Access更加簡單易學,一個普通的計算機用戶可以很快地掌握它。Access 2000的功能十分強大,利用它可以方便地實現對信息保存、維護、查詢、統計、打印、交流、,而且它可以十分方便地與Office其他組件交流數據,這些功能對一個一般用戶而言已經足夠了。
轉貼于 第四章 系統總體設計
軟件系統的總體設計大約要經歷可行性分析和項目開發計劃,需求分析,概要設計,詳細設計,編碼,測試以及維護等七個階段??尚行苑治龊晚椖块_發計劃在前面已經敘述,下面所要做的是進行軟件需求分析,概要設計和詳細設計。編碼過程將在下一節論述,而測試和維護過程不在本文敘及。
§4.1 系統需求分析
在經過前一階段的分析之后,我確定了我的開發課題為圖書倉庫管理?,F在所要做的是要準確定義系統必須做什么以及系統必須具備的功能。
軟件需求分析中我采用結構化分析方法(Structured Analysis,簡稱SA),SA是面向數據流進行需求分析的方法,像所有的軟件分析方法(如面向對象分析方法、IDEF方法等等)一樣,SA也是一種建模活動,它使用簡單易讀的符號,根據軟件內部數據傳遞、變換的關系,自頂向下逐層分解,描繪滿足功能要求的軟件模型。
在系統中我采用數據流圖(DFD)這種半形式化的描述方式表達需求。它是一種功能模型,以圖形的方式描繪數據在系統中流動和處理的過程,只反映系統必須完成的邏輯功能。它有四種基本圖形符號:
:箭頭,表示數據流;
〇:圓或橢圓,表示加工;
:雙杠,表示數據存儲;
:方框,表示數據的源點或終點。
為了表達較為復雜問題的數據處理過程,用一張數據流圖是不夠的,要按照問題的層次結構進行逐步分解,并以一套分層的數據流圖反映這種結構關系。在這里我一共使用了三層數據流圖,即頂層圖,0層圖和1層圖(也是底層圖)。
在多層數據流圖中,頂層流圖僅包含一個加工,它代表被開發系統,它的輸入流是該系統的輸入數據了,輸出流是該系統的輸出數據;底層流圖是指其加工不需要再做分解的數據流圖,中間層流圖表示對其上層父圖的細化,它的每一步加工可能繼續細化成子圖。
經過對系統的分析首先得到系統的頂層DFD,如下: 一步細化得到系統的0層DFD,如下:
再進一步細化每一個數據加工功能,得到系統的1層DFD圖。
在這里只給出有關入庫管理和出庫管理的1層數據流圖,它們是系統的關鍵部分,也是主要的部分。通過以上對數據流圖的分析之后,我們已大體地了解了系統的功能和目標,接下來所要做的就是系統功能模塊的劃分和數據庫的設計,也就是系統的概要設計。
§4.2 系統概要設計
在軟件需求分析階段,搞清楚了軟件“做什么”的問題,形成了目標系統的邏輯模型。現在我們所要做的就是要把軟件“做什么”的邏輯模型變換為“怎么做”的物理模型,即著手實現軟件的需求。首先,我們需要描述的是系統的總的體系結構。
4.2.1 系統結構設計
系統的概要設計中最重要的就是系統的模塊化。模塊化是指解決一個復雜問題時自項向下逐層把軟件系統劃分成若干個模塊的過程。每個模塊完成一個特定的功能,所有的模塊按某種方法組織起來,成為一個整體,完成整個系統所要求的功能。
將系統劃分為多個模塊是為了降低軟件系統的復雜性,提高可讀性、可維護性,但模塊的劃分不能是任意的,應盡量保持其獨立性。也就是說,每個模塊只完成系統要求的獨立的子功能,并且與其他模塊的聯系最少且接口簡單,即盡量做到高內聚低耦合,提高模塊的獨立性,為設計高質量的軟件結構奠定基礎。
在系統的概要設計中我采用結構化設計(Structure Design,簡稱SD),SD以需求分析階段產生的數據流圖DFD為基礎,按一定的步驟映射成軟件結構。我首先將整個系統化分為幾個小問題,小模塊,在系統中,我設計了用戶管理、庫存管理、入庫管理、出庫管理、員工管理和供應商管理6個小模塊。然后,進一步細分模塊,添加細節。比如,用戶管理我又將其分為用戶注冊、用戶注銷、密碼修改;庫存管理分為庫存記錄查詢、庫存記錄修改、庫存記錄打印等等。
以下就是系統的結構圖:(在這里為了表達方便我將結構圖分開來表達。)
在得到系統的第一層功能模塊圖后,經過進一步地細化,得一系統的子功能模塊圖:
4.2.2 數據庫設計
在信息世界中,信息從客觀事物出發流經數據庫,通過決策機構最后又回到客觀世界,信息的這一循環經歷了三個領域:信息世界,數據世界,現實世界?,F實世界的事物反映到人的頭腦中,人的大腦對它有個認識過程,經過分析(選擇、命名、分類等)進入信息世界。這些信息再進一步加工、編碼,然后進數據世界,而軟件系統的開發工作需要考慮這兩個方面的問題,也就是要考慮系統開發所需要的數據,以及如何對這些數據進行操作。這兩個問題貫穿了整個軟件系統的開發過程,這也就是數據庫的設計問題,軟件設計的一個核心。
4.2.2.1 ER圖設計
在系統設計的開始,我首先考慮的是如何用數據模型來數據庫的結構與語義,以對現實世界進行抽象。目前廣泛使用的數據模型可分為兩種類型,一種是獨立于計算機系統的“概念數據模型”,如“實體聯系模型”;另一種是直接面向數據庫邏輯結構的“結構數據模型”。在本系統中我采用“實體聯系模型”(ER模型)來描述數據庫的結構與語義,以對現實世界進行第一次抽象。ER模型直接從現實世界抽象出實體類型及實體間聯系,然后用ER圖來表示數據模型。它有兩個明顯的優點:接近于人的思維,容易理解;與計算機無關,用戶容易接受。但ER模型只能說明實體間語義的聯系,不能進一步說明詳細的數據結構,它只是數據庫設計的第一步。
ER圖是直觀表示概念模型的工具,它有四個基本成分:
矩形框,表示實體類型(考慮問題的對象)。
菱形框,表示聯系類型(實體間的聯系)。
橢圓形框,表示實體類型和聯系類型的屬性。對于關鍵碼的屬性,在屬性名下劃一橫線。
直線,聯系類型與其涉及的實體類型之間以直線連接。
本系統為圖書倉庫管理,主要管理圖書的入庫、出庫以及庫存等事項。倉庫根據需要可以查詢圖書供應商的信息,同時還需要了解在入庫和出庫中員工的參與情況。依據倉庫管理的實際情況,考慮了多方面的因素以后,確定系統的ER圖如下:
(為了表達的方便,在這里我沒有在一張圖上表達出所有的關系,而是用一張總體ER圖,和幾張實體屬性關系圖來表達數據庫的結構。)
在該數據庫中,我設計了三個實體,分別是庫存、員工和供應商以及兩個聯系類型入庫和出庫。在本系統中庫存是核心,也是基本,沒有了庫存其它的也就沒有什么意義了。員工記錄的添加是考慮到責任問題,也就是說,在倉庫管理的實際運用中,出現了責任不清的現象,特別是由于倉庫的進出圖書數量都比較大時產生了一系列問題,所以在設計數據庫時,我特別考慮到這一點,加入了員工記錄這一實體。供應商信息的添加主要出于對圖書來源問題的思考。通過添加供應商信息可以比較清楚地了解圖書的進貨渠道,從圖書的質量到供應商的信譽都可以進行了解,同時可以為以后的圖書進購提供一定有用的信息。
入庫聯系類型將庫存信息、供應商信息和員工信息聯系在一起,可以方便地實現三個實體之間的聯接,而出庫聯系類型則將庫存信息和員工信息較好地聯接起,同時這兩個聯系類型又都具有各自特有的屬性。
下面就是各實體及聯系類型的屬性圖:(帶#號的屬性為關鍵字段)4.2.2.2 數據庫表格設計
在完成系統的ER圖之后,需要將ER模型轉化為關系模型,也就是說,要設計出數據庫所需要的表格。在這里,我選用的是關系數據庫。因為關系數據庫中的二維表格可以很清楚地描述數據之間的聯系。
在這里不得不提到一個概念——范式。其實在上一節的ER圖設計中,已經運用了范式的思想,不僅如此,在數據庫的表格設計中更離不開范式的思想,它是數據庫設計的基礎,如果不注意這個問題將會導致一系列問題的出現。
我在系統中定義的表格都嚴格地按照范式的思想和要求去完成,數據庫中的所有表格都達到了三范式的要求。根據系統ER圖,針對本系統的特點,在對所搜集的數據進行規范化之后,定義了如下六張表格,分別是庫存信息表,入庫信息表,出庫信息表,員工信息表,供應商信息表和密碼信息表。通過對這六張表格的操作可以較好地完成系統設計的各項功能,六張表格之間有著不同程度的聯系。(說明:在以下數據表中,K代表主鍵,#代表外鍵,字段值不為空。)
BookRecord 表(庫存信息表)
字段名稱 數據類型 說明
K BookID 數字 圖書編號
BookName 文本 圖書名
Author 文本 作者
Publisher 文本 出版社
PubDate 日期/時間 出版日期
Price 貨幣 價格
BookType 文本 圖書類型
Number1 數字 庫存數量
Addation 文本 備注
圖4.13 庫存信息表
庫存信息表主要用于記錄倉庫中現存放的所有圖書的詳細信息,包括圖書編號、書名、作者、出版社、圖書類型等有關圖書的各類信息,它即是該數據庫的主表,也是系統主界面的主要內容。
在該表中圖書編號是主鍵,它按圖書入庫的先后次序來編寫,每當有圖書入庫,系統自動給出圖書編號,這樣我們按圖書編號來查找圖書是比較方便的??紤]到編號比較難于記憶,所以使用了出版社和圖書類型兩個字段,在系統中我提供了出版社和圖書類型的分類查找,而且全部采用自動生成,每當系統中有新的出版社類型和圖書類型,彈出菜單會自動添中新類型,這樣就可以比較方便地實現按出版社和按圖書類型查找。此外,庫存數量也是一個比較關鍵的字段,該字段是在系統初始化時就給定的,每當有圖書入庫或出庫操作,系統就會自動修改圖書的庫存數量,以保持數據的一致性。做為備注有一點說明,我的數據庫中備注的數據類型是文本,而不是備注類型,主要考慮到該字段的長度并不大,而且在Delphi中文本數據類型的處理也比較方便一點。
Employee 表(員工信息表)
字段名稱 數據類型 說明
K EmployeeID 數字 員工編號
EmployeeName 文本 員工姓名
Sex 文本 性別
BornDate 日期/時間 出生日期
Grade 文本 職稱
WorkDate 日期/時間 工作日期
Telephone 文本 聯系電話
Address 文本 聯系地址
圖4.14 員工信息表
員工信息表主要用于記錄有關員工的各類信息,包括姓名、職稱、出生日期、聯系電話、聯系地址等。它主要用來為系統提供員工的有關信息,因為在系統中,入庫和出庫操作均與員工有著一定的聯系,在查詢入庫信息和出庫信息時,有時需要查找有關此項記錄有關的員工信息,在系統中我是通過入庫記錄與員工記錄(出庫記錄和員工記錄)之間的聯接查詢來完成的。另外,作為一個倉庫也有必要了解其所屬員工的一些基本情況,以便查詢。
Shopkeeper 表(供應商信息表)
字段名稱 數據類型 說明
K ShopkeeperID 數字 供應商編號
ShopkeeperName 文本 供應商姓名
Address 文本 地址
PostNo 數字 郵編
OfficePhone 文本 辦公電話
HomePhone 文本 住宅電話
Email 文本 E-mail
PayType 文本 付款方式
圖4.15 供應商信息表
供應商信息表主要用于記錄有關供應商的各類信息,包括姓名、地址、電話、付款方式等。它主要用來為系統提供供應商的有關信息,在系統中入庫記錄是與供應商記錄相聯系的,通過入庫記錄可以查找相關的供應商信息。在供應商信息中,考慮當實際情況,我特別加入了Email和付款方式這兩個字段,因為在當今信息世界中,多種多樣的通訊方式和多種多樣的付款方式是必然的,是數據庫中必須與以記錄。
InRecord 表(入庫信息表)
字段名稱 數據類型 說明
K InID 數字 入庫編號
# BookID 數字 圖書編號
# EmployeeID 數字 員工編號
# ShopkeeperID 數字 供應商編號
Number 數字 入庫數量
BuyDate 日期/時間 入庫日期
圖4.16 入庫信息表
OutRecord 表(出庫信息表)
字段名稱 數據類型 說明
K OutID 數字 出庫編號
# BookID 數字 圖書編號
# EmployeeID 數字 員工編號
Number2 數字 出庫數量
OutDate 日期/時間 出庫日期
圖4.17 出庫信息表
入庫信息表主要用于記錄有關入庫的詳細信息,包括入庫數量、入庫日期以及圖書、員工、供應商三方的編號,以便查詢。出庫信息表主要用于記錄有關出庫的詳細信息,包括出庫數量、出庫日期以及圖書、員工的編號。出庫信息表和入庫信息表一樣,其實它們都屬于聯系類型,系統通過這兩個表可以聯接上其它的表為用戶提供多種條件的聯接查詢。值得提出的一點是入庫記錄和出庫記錄的添加不僅僅是單表操作,由于它們都與庫存記錄相聯系,所以,無論您是添中入庫記錄還是添加出庫記錄,都必須同時修改庫存記錄,以保持數據的一致性,否則將引發系統出錯而這些我都讓其在系統中自動完成。無論您是添加入庫記錄,還是添加出庫記錄,系統都將自動修改庫存中圖書的數量,而且,在您出庫的數量大于庫存數量時,系統還會自動提示錯誤,這樣就可以防止一定錯誤的發生。
在入庫信息表和出庫信息表中我還定義了幾個外鍵,它提供了一種表示幾個關系聯系的方法。比如,系統中通過在入庫信息表中定義的外鍵 BookID、EmployeeID和ShopkeeperID可以將庫存信息表、員工信息表和供應商信息表聯系在一起,從而方便地實現聯接查詢,而且,引入外鍵的定義是實體完整性約束的一個主要方面。
Key 表(密碼信息表)
字段名稱 數據類型 說明
K KeyName 文本 用戶姓名
KeyNo 文本 用戶密碼
圖4.18 密碼信息表
密碼信息表主要用于記錄所有的用戶名和用戶密碼。它是在用戶登陸時用來確定用戶和密碼的正確性,以防止非法用戶登陸。
通過以上設計已經完成了系統的概要設計,當我們有了系統的功能模塊圖和數據庫之后,就需要著手去實現每一個模塊,為每一個功能設計程序流程圖,這也就是系統的詳細設計。
§4.3 系統詳細設計
在前面的概要設計中,已將系統劃分為多個模塊,并將它們按照一定的原則組裝起來,同時確定了每個功能及模塊之間的外部接口。現在所要做的就是確定每個模塊具體執行過程,也可以說是“過程設計”。
在處理過程設計時我采用的是結構化程序設計(簡稱SP)方法。需要指出的是系統的詳細設計并不是指具體的編程序,而是將概要設計階段產生的系統功能模塊圖細化成很容易產生程序的圖紙。因此詳細設計的結果基本決定了最終程序的質量。為軟件的質量,延長軟件的生存期,軟件的可測試性、可維護性提供重要的保障。詳細設計的目標不僅是邏輯上正確地實現每個模塊的功能,還應使設計出的處理過程清晰易讀。
由前一階段產生的系統功能模塊圖,我為系統的主要部分設計了如下程序流程圖:通過以上步驟,基本上完成了對整個系統的總體設計,接下來所要做的就是軟件的編碼工作。系統總體設計的好壞直接影響著下一步工作,只有在這一階段設計出好的模塊圖和程序流程圖,才能更有利于編碼,產生好的軟件系統。
第五章 系統應用程序設計
§5.1 系統窗體模塊組成
§5.2 數據模塊窗體的設置
在編寫數據庫應用程序時,經常要遇到這樣的情況,即好多組件、窗體同時訪問相同的數據源,如果為每一個組件或者窗體都設置一個數據源將是十分耗時的工件,而且要保證這些數據源的確是相同的也需花一番功夫。那么,能不能將這些數據源集中管理,最好是做成一個統一的模塊,需要時就將該模塊引入而不必直接操作數據源本身呢?數據模塊(DataModule)是解決這個問題最好的答案。簡單說來,數據模塊是用來集中管理數據源的一個窗體,該窗體可被需要的地方隨時引入。
圖5.2給出了本程序的數據模塊(datamoduleform)窗體圖,除報表窗體外所有的數據存取組件和數據源組件都在此數據模塊中進行了定義。值得一提的是,設置了數據庫Database組件,該組件引入了系統所需的唯一的數據庫tsxs,Database組件的DatabaseName屬性設置為tsckgl。tsxs數據庫已在ODBC配置程序中進行了設置。其他的數據存取組件都是基于此數據庫組件創建的,這樣做的好處是,當數據庫的別名或者其他信息改變之后,只需修改Tdatabase組件的AliasName屬性即可。
另外,在本系統的數據模塊窗體圖中,我大多采用的AODQuery組件而沒有采用BDE組,這主要是基于對ADO組件的了解。在Delphi的學習中我對ADO組件了解的更加清楚,使用也較BDE更為熟練,而且,ADO組件的功能也較BDE更為強大,所以在這里大多采用ADO組件來進行數據庫聯接。同時我也使用了BDE組件中的Table,因為在某些時候BDE有著其自身特有的優越性。 主窗體功能模塊的實現
file://主窗體程序代碼
public
file://在程序的起始部分,定義快捷按鈕點擊事件
Procedure Popup1Handler(Sender:Tobject);
Procedure Popup2Handler(Sender:TObject);
**********************************************************************
procedure Tmainform.Popup1Handler(Sender: TObject);
begin
file://快捷按鈕1(點“按出版社分類”按鈕產生)的點擊事件
with datamoduleform.MainQuery do
begin
file://打開數據模塊窗體的MainQuery,對BookRecord表進行操作
close;
file://關閉MainQuery
SQL.Clear;
file://清除SQL屬性中的SQL命令語句
SQL.Add(‘select * from BookRecord where Publisher=:Pub‘); file://添加新的SQL語句
Parameters.ParamByName(‘Pub‘).Value:=(Sender as TMenuItem).Caption;
open;
file://重新打開MainQuery
end;
end;
**********************************************************************
procedure Tmainform.SpeedButton1Click(Sender: TObject);
Var s1,s2,s3,s4,s5 :String;
file://設立5個變量以方便實現模糊查詢
begin
file://主窗口庫存查詢按鈕事件
with datamoduleform.MainQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
SQL.Add(‘where BookID Like :BookID and BookName Like :Name and Author Like :Author and Publisher Like :pub and BookType Like :BookType‘);
file://使用Like語句來實現模糊查詢
if Edit1.Text‘‘ then s1:=‘%‘+Edit1.Text+‘%‘ else s1:=‘%‘;
Parameters.ParamByName(‘BookID‘).Value:=s1;
file://給變量s1賦值
if Edit2.Text‘‘ then s2:=‘%‘+Edit2.Text+‘%‘ else s2:=‘%‘;
Parameters.ParamByName(‘Name‘).Value:=s2;
file://給變量s2賦值
if Edit3.Text‘‘ then s3:=‘%‘+Edit3.Text+‘%‘ else s3:=‘%‘;
Parameters.ParamByName(‘Author‘).Value:=s3;
file://給變量s2賦值
if Edit4.Text‘‘ then s4:=‘%‘+Edit4.Text+‘%‘ else s4:=‘%‘;
Parameters.ParamByName(‘Pub‘).Value:=s4;
file://給變量s2賦值
if Edit5.Text ‘‘ then s5:=‘%‘+Edit5.Text+‘%‘ else s5:=‘%‘;
Parameters.ParamByName(‘BookType‘).Value:=s5;
file://給變量s2賦值
open;
if FieldValues[‘BookID‘]=NULL
file://判斷是否找到記錄
then begin
Messagedlg(‘沒有找到你所需要的記錄!‘,mtInformation,[mbOK],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
file://這里相當于一個刷新功能
open;
end;end;
end;
**********************************************************************
procedure Tmainform.SpeedButton3Click(Sender: TObject);
begin
file://庫存表刷新按鈕事件
with datamoduleform.MainQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
open;
end;
end;
**********************************************************************
procedure Tmainform.SpeedButton11Click(Sender: TObject);
var PopupItem:TMenuItem;
begin
file://自動生成快捷按鈕1的內容
with datamoduleform.BookQuery do
begin
file://從數據庫中選擇出版社類型
close;
SQL.Clear;
SQL.Add(‘select distinct Publisher from BookRecord‘);
open;
PopupMenu1:=TPopupMenu.Create(Self); file://自動生成快捷菜單
PopupMenu1.AutoHotkeys:=maManual;
file://自定義熱鍵
while Not Eof do
begin
file://根據出版社內容生成菜單子項
PopupItem:=TMenuItem.Create(Self);
PopupItem.Caption:=FieldByName(‘Publisher‘).AsString;
PopupMenu1.Items.Add(PopupItem);
PopupItem.onClick:=Popup1Handler;
file://確定菜單子項的點擊事件
Next;
end; end;
PopupMenu1.Popup(384,67);
file://在指定位置顯示快捷菜單1
end;
**********************************************************************
procedure Tmainform.FormActivate(Sender: TObject);
begin
file://系統初始化,在進入mainform時自動添加數據源
mainform.DBGrid1.DataSource:=datamoduleform.MainSource;
mainform.DBNavigator1.DataSource:=datamoduleform.MainSource;
mainform.DBGrid2.DataSource:=datamoduleform.EmpSource;
mainform.DBNavigator2.DataSource:=datamoduleform.EmpSource;
mainform.DBGrid3.DataSource:=datamoduleform.ShopSource;
mainform.DBNavigator3.DataSource:=datamoduleform.ShopSource;
mainform.DBGrid4.DataSource:=datamoduleform.InSource;
mainform.DBNavigator4.DataSource:=datamoduleform.InSource;
mainform.DBGrid5.DataSource:=datamoduleform.OutSource;
mainform.DBNavigator5.DataSource:=datamoduleform.OutSource;
end;
**********************************************************************
procedure Tmainform.FormCreate(Sender: TObject);
begin
file://系統初始化,定義界面大小,以適應不同分辯率
Width:=800;Height:=600;
end;
**********************************************************************
procedure Tmainform.Timer1Timer(Sender: TObject);
begin
file://在狀態欄顯示時間
StatusBar1.Panels[2].Text:=DateToStr(Date);
StatusBar1.Panels[4].Text:=TimeToStr(Time);
end;
§5.4 入庫、出庫窗體模塊的實現
圖5.4 系統入庫管理窗體
圖5.5 系統出庫管理窗體
procedure Tinoutform.SpeedButton4Click(Sender: TObject);
begin
file://入庫管理查找按鈕事件
with datamoduleform.BookQuery do
file://入庫查詢處理
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord where BookID=:BookID‘);
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
open;
if FieldValues[‘BookID‘]NULL
then
begin
Edit1.Text:=‘‘;
Edit1.ReadOnly:=true;Edit1.Color:=clMenu;
Edit6.Text:=FieldValues[‘BookName‘]; file://顯示圖書名
Edit6.ReadOnly:=true;Edit6.Color:=clMenu; file://設置顯示框不可更改屬性
Edit7.Text:=FieldValues[‘Author‘];
Edit7.ReadOnly:=true;Edit7.Color:=clMenu;
Edit8.Text:=FieldValues[‘Publisher‘];
Edit8.ReadOnly:=true;Edit8.Color:=clMenu;
Edit9.Text:=FieldValues[‘PubDate‘];
Edit9.ReadOnly:=true;Edit9.Color:=clMenu;
Edit10.Text:=FieldValues[‘Price‘];
Edit10.ReadOnly:=true;Edit10.Color:=clMenu;
Edit11.Text:=FieldValues[‘BookType‘];
Edit11.ReadOnly:=true;Edit11.Color:=clMenu;
Edit12.Text:=FieldValues[‘Number1‘];
Edit12.ReadOnly:=true;Edit12.Color:=clMenu;
If FieldValues[‘Addation‘]NULL
then Edit25.Text:=FieldValues[‘Addation‘]
else Edit25.Text:=‘‘;
Edit25.ReadOnly:=true;Edit25.Color:=clMenu;
end
else
begin
file://在沒有查找到的情況下,清空所有顯示框
Edit1.ReadOnly:=false;Edit1.Text:=‘‘;Edit1.Color:=clMenu;
Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clMenu;
Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clMenu;
Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clMenu;
Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clMenu;
Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clMenu;
Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clMenu;
Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;
Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clMenu;
MessageDlg(‘沒有找到你所需要的記錄!‘,mtInformation,[mbOK],0);
Edit13.Text:=‘‘;Edit13.SetFocus;
end;
end;
with datamoduleform.InQuery do file://自動入庫編號的獲取
begin
close;
SQL.Clear;
SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);
open;
file://找到入庫編號中最大的一個
Edit26.ReadOnly:=false;
Edit26.Text:=FieldValues[‘InID‘]+1; file://最大的入庫編號加1形成新的入庫編號
Edit26.ReadOnly:=true;Edit26.Color:=clMenu; file://設置編號的不可更改性
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton1Click(Sender: TObject);
var s:integer;
begin
file://入庫管理添加按鈕事件
if Edit1.TextNULL
then MessageDlg(‘請輸入完整的入庫信息和圖書信息,然后單擊確定按鈕?!?/p>
mtInformation,[mbok],0)
else begin
if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)
then begin
MessageDlg(‘請輸入完整的入庫信息!‘,mtInformation,[mbok],0);
Edit2.SetFocus;
end
else begin
with datamoduleform.InQuery do
file://將找到的圖書信息顯示
begin
close;
SQL.Clear;
SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID,
:Number,:InDate)‘); file://向入庫信息表中插入記錄
Parameters.ParamByName(‘InID‘).Value:=Edit26.Text; file://向Edit框取值
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;
Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text;
execSQL;
end;
Edit12.ReadOnly:=False;
S:=StrToInt(Edit12.Text)+StrToInt(Edit4.Text); file://計算入庫后庫存圖書數量
Edit12.Text:=IntToStr(s);
file://將修改后的庫存圖書數量顯示
Edit12.ReadOnly:=true;
with datamoduleform.BookQuery do
file://修改庫存記錄中圖書數量
begin
close;
SQL.Clear;
SQL.Add(‘update BookRecord set Number1=:Number where
BookID=:BookID‘);
Parameters.ParamByName(‘Number‘).Value:=s;
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
execSQL;
file://提交SQL語句
MessageDlg(‘記錄已成功添加!‘,mtInformation,[mbOK],0);
Edit13.SetFocus;
end;
end;
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton2Click(Sender: TObject);
begin
file://入庫管理確定按鈕事件
if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)
or (Edit6.Text=‘‘) or (Edit7.Text=‘‘) or (Edit8.Text=‘‘) or (Edit9.Text=‘‘)
or (Edit10.Text=‘‘) or (Edit11.Text=‘‘) or (Edit25.Text=‘‘)
then begin
file://判斷輸入信息的完整性
MessageDlg(‘請輸入所需的全部入庫信息!‘,mtInformation,[mbok],0);
Edit2.SetFocus;
end
else
begin
with datamoduleform.InQuery do
file://入庫信息添加
begin
close;
SQL.Clear;
SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID,
:Number,:InDate)‘);
file://向入庫信息表中插入記錄
Parameters.ParamByName(‘InID‘).Value:=Edit26.Text;
Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;
Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text;
execSQL;
end;
with datamoduleform.BookQuery do
begin
close;
SQL.Clear;
file://在完成入庫信息的添加后,修改庫存記錄
SQL.Add(‘insert into BookRecord values(:BookID,:BookName,:Author,
:Publisher,:PubDate,:Price,:BookType,:Number,:Addration)‘);
Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text;
Parameters.ParamByName(‘BookName‘).Value:=Edit6.Text;
Parameters.ParamByName(‘Author‘).Value:=Edit7.Text;
Parameters.ParamByName(‘Publisher‘).Value:=Edit8.Text;
Parameters.ParamByName(‘PubDate‘).Value:=Edit9.Text;
Parameters.ParamByName(‘Price‘).Value:=Edit10.Text;
Parameters.ParamByName(‘BookType‘).Value:=Edit11.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘Addration‘).Value:=Edit25.Text;
execSQL;
end;
MessageDlg(‘記錄添加成功!‘,mtInformation,[mbok],0);
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton11Click(Sender: TObject);
begin
file://新書入庫按鈕事件
Edit13.Text:=‘‘;Edit13.Color:=clMenu;
with datamoduleform.InQuery do file://自動入庫編號的獲取
begin
close;
SQL.Clear;
SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);
open;
Edit26.Text:=FieldValues[‘InID‘]+1;
Edit26.ReadOnly:=true;Edit26.Color:=clMenu;
end;
with datamoduleform.BookQuery do
file://自動圖書編號的獲取
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord where BookID>=All(select BookID from BookRecord)‘);
file://找到庫存圖書編號中最大的一個
open;
Edit1.ReadOnly:=false;
Edit1.Text:=FieldValues[‘BookID‘]+1; file://顯示自動生成的圖書編號
Edit1.ReadOnly:=true;Edit1.Color:=clMenu;
end;
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;
Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clWindow;
Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clWindow;
Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clWindow;
Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clWindow;
Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clWindow;
Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clWindow;
Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;
Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clWindow;
end;
procedure Tinoutform.SpeedButton22Click(Sender: TObject);
var s:integer;
begin
file://出庫管理確定按鈕事件
if (Edit24.Text=‘‘) or (Edit27.Text=‘‘) or (Edit28.Text=‘‘)
then begin
MessageDlg(‘請輸入完整的出庫信息!‘,mtInformation,[mbok],0);
Edit24.SetFocus;
end
else begin
if Edit27.Text>Edit21.Text
file://檢查出庫數量是否小于庫存數量
then begin
MessageDlg(‘庫存中的圖書數量不夠!‘,mtInformation,[mbok],0);
Edit27.Text:=‘‘;Edit27.SetFocus;
end
else begin
with datamoduleform.OutQuery do
begin
close;
SQL.Clear;
SQL.Add(‘insert into OutRecord values(:OutID,:BookID,:EmpID,
:Number,:OutTime)‘);
file://添加出庫記錄
Parameters.ParamByName(‘OutID‘).Value:=Edit23.Text;
Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit24.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit27.Text;
Parameters.ParamByName(‘OutTime‘).Value:=Edit28.Text;
execSQL;
end;
Edit21.ReadOnly:=False;
s:=StrToInt(Edit21.Text)-StrToInt(Edit27.Text); file://計算出庫后庫存圖書數量
Edit21.Text:=IntToStr(s);
file://顯示出庫后庫存圖書數量
Edit21.ReadOnly:=True;
with datamoduleform.BookQuery do
begin
file://修改庫存圖書數量
close;
SQL.Clear;
SQL.Add(‘update BookRecord set Number1=:Number where BookID=:BookID‘);
Parameters.ParamByName(‘Number‘).Value:=s;
Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text;
execSQL;
end;
MessageDlg(‘出庫記錄添加成功!‘,mtInformation,[mbok],0);
Edit14.Text:=‘‘;Edit14.SetFocus;
end;
end;
end;
§5.5 查詢功能的實現
查詢功能包括員工信息查詢,供應商信息查詢,入庫信息查詢和出庫信息查詢。由于每一個功能的實現都差不太多,而且其窗體也差不太多,所以在這里只給出員工信息查詢窗體及其源代碼。
圖5.6 員工信息查詢窗體
procedure Tfindempform.SpeedButton1Click(Sender: TObject);
Var s1,s2,s3 :String;
begin
file://員工記錄查詢窗體查找按鈕事件
with datamoduleform.EmpQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from Employee‘);
SQL.Add(‘where EmployeeID Like :EmpID and EmployeeName Like :Name and Grade Like :Grade‘);
file://實現模糊查詢功能
if Edit1.Text‘‘ then s1:=‘%‘+Edit1.Text+‘%‘ else s1:=‘%‘;
Parameters.ParamByName(‘EmpID‘).Value:=s1;
if Edit2.Text‘‘ then s2:=‘%‘+Edit2.Text+‘%‘ else s2:=‘%‘;
Parameters.ParamByName(‘Name‘).Value:=s2;
if Edit3.Text‘‘ then s3:=‘%‘+Edit3.Text+‘%‘ else s3:=‘%‘;
Parameters.ParamByName(‘Grade‘).Value:=s3;
open;
if FieldValues[‘EmployeeID‘]NULL
then findempform.Close
file://在找到記錄的情況下關閉查找窗口
else
begin
MessageDlg(‘沒有找到你所需要的記錄!‘,mtInformation,[mbOK],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
close; SQL.Clear;
SQL.Add(‘select * from Employee‘);
file://刷新員工信息窗口
open;
end; end;
end;
§5.6 系統登陸窗體模塊的實現
由于系統登陸窗體中有一幅彩圖,在這里不便給出,而只給出了系統的實現。
var keyname: string; file://定義了一個全局變量,在key2中有調用
procedure Tkeyform.SpeedButton1Click(Sender: TObject);
var s:string;
file://登陸窗口登陸按鈕事件
begin
if (Edit1.Text=‘‘) then begin
MessageDlg(‘清輸入登陸姓名和密碼!‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
datamoduleform.KeyTable.Active:=true;
if not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://判斷登陸名是否存在
then begin
MessageDlg(‘登陸名錯誤,請重新輸入!‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘; Edit1.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
begin
close; SQL.Clear;
SQL.Add(‘select * from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
open;
s:=FieldValues[‘KeyNo‘];
end;
if sEdit2.Text file://判斷登陸密碼是否正確
then begin
MessageDlg(‘登陸密碼錯誤,請重新輸入!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘; Edit2.SetFocus;
end
else begin
keyname:=Edit1.Text;
keyform.Hide;
mainform.Show;mainform.WindowState:=wsMaximized;
end; end; end;
end;
§5.7 用戶管理功能的實現
5.7.1 用戶管理主窗體
圖5.7 用戶管理主窗體
5.7.2 密碼修改窗體模塊的實現
圖5.8 密碼修改窗體
procedure Tkey2form.SpeedButton1Click(Sender: TObject);
begin
file://密碼修改窗口修改按鈕事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)
then begin
MessageDlg(‘請輸入完整的信息?!?,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
if Not datamoduleform.KeyTable.Locate(‘KeyNo‘,Edit1.Text,[])
then begin
MessageDlg(‘原密碼輸入錯誤,不能修改新密碼!‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end
else begin
if Edit2.TextEdit3.Text
then begin
MessageDlg(‘兩次密碼輸入不同,請重新輸入新密碼!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;
end
else begin
file://在數據庫中修改密碼
with datamoduleform.KeyQuery do
begin
close; SQL.Clear;
SQL.Add(‘update key set KeyNo=:KeyNo where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=keyname;
Parameters.ParamByName(‘KeyNo‘).Value:=Edit2.Text;
execSQL;
MessageDlg(‘密碼修改成功!‘,mtInformation,[mbok],0);
key2form.Close;
end; end; end; end;
end;
5.7.3 用戶注冊窗體模塊的實現
圖5.9 用戶注冊窗體
procedure Tkey3form.SpeedButton1Click(Sender: TObject);
begin
file://用戶注刪窗口注刪按鈕事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)
then begin
MessageDlg(‘請輸入完整的信息!‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
if datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://判斷用戶名是否存在,系統不允許用戶名重復
then begin
MessageDlg(‘用戶名已存在,請輸入新的用戶名和密碼!‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end
else begin
if Edit2.TextEdit3.Text
then begin
MessageDlg(‘您輸入的兩個密碼不相同,請重新輸入!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
file://在數據庫中添加該用戶
begin
close;
SQL.Clear;
SQL.Add(‘insert into Key values(:KeyName,:KeyNo)‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
Parameters.ParamByName(‘KeyNo‘).Value:=Edit2.Text;
execSQL;
end;
MessageDlg(‘新用戶添加成功,您可以繼續添加用戶,或按“取消”退出。‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end; end; end;
end;
5.7.4 用戶注銷窗體模塊的實現
圖5.10 用戶注銷窗體
procedure Tkey4form.SpeedButton1Click(Sender: TObject);
var s:string;
begin
file://用戶注銷窗口注銷按鈕事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)
then MessageDlg(‘請輸入完整的信息!‘,mtInformation,[mbok],0)
else begin
if Not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://判斷用戶名是否存在,用戶名必須存在,才可以刪除
then begin
MessageDlg(‘您所輸入的用戶名不存在,請重新輸入或按“取消”退出?!?,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit1.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
open;
s:=FieldValues[‘KeyNo‘];
end;
if sEdit2.Text file://判斷該用戶名下的密碼是否正確
then begin
MessageDlg(‘您所輸入的密碼不正確,請重新輸入或按“取消”退出?!?,
mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit2.SetFocus;
end
else begin
file://從數據庫中刪除該用戶
with datamoduleform.KeyQuery do
begin
close;
SQL.Clear;
SQL.Add(‘delete from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
execSQL;
end;
MessageDlg(‘用戶已成功刪除,您可以繼續刪除用戶,或按“取消”退出。‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit1.SetFocus;
end; end; end;
end;
結束語
本系統是一個面向小型圖書企業,具有一定實用性的數據庫信息管理系統。它主要完成對圖書倉庫的一系列管理,包括入庫、出庫、庫存以及員工和供應商信息管理。本系統采用當前流行的面向對象的開發工具—Delphi來完成整個系統的設計,在數據庫的設計上利用了Access的便利性和實用性。
本系統具有相當的實用功能。在查詢方面,系統實現了多條件任意字段的模糊查詢,同時在分類查詢上實現了動態生成,系統可以自動識別用戶不同的輸入。在圖書入庫、出庫和庫存三者之間建立了良好的鏈接關系,某一部分地修改均會自動引發系統對與其相關的部分進行連鎖修改。在用戶管理方面,系統較好地實現了用戶注冊,用戶注銷和密碼修改等各項功能。
系統在設計過程中不可避免地遇到了各種各樣的問題,由于整個系統完全都是由個人設計的,有關Delphi許多細節問題都要靠自己去摸索,加之本人水平有限,并沒有完全地理解Delphi的強大功能,而且還存在著許多不足之處。如:
受開發條件和開發時間的限制,本系統只利用了本地數據庫Access,它同應用程序處于同一系統中,能存儲的數據量也有一定限制,并沒有發揮出Delphi其數據庫方面的優勢;
報表打印功能尚不夠全面完善,不能實現動態報表;
在一些數據輸入時沒有及時的進行數據格式校驗,不能保證數據輸入的絕對正確性。
由于時間關系,系統功能實現不夠完善,使用不是很方便,比如,沒有實現多條記錄的連鎖刪除和添加以及數據的導入功能。
這些都是需要完善的地方,該系統離實際使用也還有相當的距離,需要我進行不斷地補充和完善。
通過本次畢業設計我學到了不少新的東西,也發現了大量的問題,有些在設計過程中已經解決,有些還有待今后慢慢學習。只要學習就會有更多的問題,有更多的難點,但也會有更多的收獲。
考 文 獻
[1] 鄭榮貴、黃平、谷會東,Delphi 6.0數據庫開發與應用,中科多媒體電子出版社,2002
[2] 伍俊良,Delphi 6控件應用實例教程,北京希望電子出版社,2002
[3] 盧國俊,Delphi 6數據庫開發,電子工業出版社,2002
[4] 邊萌,Delphi 編程起步,機械工業出版社,2002