




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
東北農(nóng)業(yè)大學(xué)成棟學(xué)院畢業(yè)設(shè)計(jì)題目:基于java技術(shù)肉聯(lián)廠財(cái)務(wù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)所在專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生簽字:導(dǎo)師簽字:第1章緒論1.1研究背景近年來,IT行業(yè)發(fā)展十分迅猛,國家領(lǐng)導(dǎo)人十分注重IT行業(yè)的發(fā)展,不久前,習(xí)近平主席邀請國內(nèi)IT行業(yè)的領(lǐng)軍人物在烏鎮(zhèn)召開了互聯(lián)網(wǎng)大會。互聯(lián)網(wǎng)大會的意義是在國內(nèi)樹立品牌網(wǎng)站的地位;促進(jìn)國內(nèi)與世界互聯(lián)網(wǎng)業(yè)內(nèi)人士的交流,從而加強(qiáng)研究人員與實(shí)踐人員之間的溝通;促進(jìn)中國互聯(lián)網(wǎng)站快速進(jìn)步,加速中國互聯(lián)網(wǎng)與國際互聯(lián)網(wǎng)接軌?;ヂ?lián)網(wǎng)是人類的新空間、新領(lǐng)域、新家園,需要新思想、新規(guī)則、新秩序。當(dāng)下世界中,每四個(gè)網(wǎng)民中,就有一個(gè)中國網(wǎng)民,中國理應(yīng)肩負(fù)起互聯(lián)網(wǎng)大國的責(zé)任和擔(dān)當(dāng)。習(xí)近平主席的演講,從人類文明進(jìn)步的歷史高度闡述了互聯(lián)網(wǎng)發(fā)展的重要意義以及深遠(yuǎn)的影響,深入分析了網(wǎng)絡(luò)空間即將面臨的嚴(yán)峻挑戰(zhàn),闡述了讓互聯(lián)網(wǎng)可以更好的造福世界各國人民的根本宗旨,提出了推進(jìn)全球互聯(lián)網(wǎng)治理體系變革的四項(xiàng)原則、構(gòu)建網(wǎng)絡(luò)空間命運(yùn)共同體的五點(diǎn)主張。習(xí)近平主席的演講,贏得了與會嘉賓的高度認(rèn)同和積極呼應(yīng),贏得了國際上的熱烈反響和贊譽(yù),唱響了網(wǎng)絡(luò)空間激昂有力的“烏鎮(zhèn)聲音”。計(jì)算機(jī)應(yīng)用程序深入各行各業(yè),而肉聯(lián)廠企業(yè)中,隨著交易頻率的高速提升,財(cái)務(wù)管理系統(tǒng)已經(jīng)是企業(yè)必不可少的得力助手,在肉聯(lián)廠企業(yè)單位中,內(nèi)部成員之間的信息溝通變得快速簡潔,大大的提高了工作效率。所以財(cái)務(wù)管理系統(tǒng)在肉聯(lián)廠企業(yè)的管理中扮演著越來越重要的角色,漸漸起到不可替代的核心作用。那么怎樣在現(xiàn)有經(jīng)營模式下選擇最好的財(cái)務(wù)管理模式,使用最好的財(cái)務(wù)管理系統(tǒng),實(shí)現(xiàn)企業(yè)的管理目標(biāo),適應(yīng)肉聯(lián)廠企業(yè)信息化發(fā)展的需要,是一個(gè)值得研究和深入探討的問題。近幾年來,中國經(jīng)濟(jì)的產(chǎn)能過剩問題愈發(fā)突出,不論是以鋼鐵、鋁等為代表的上游工業(yè),還是下游的制造工業(yè),均出現(xiàn)了不同程度的產(chǎn)能過剩,在此次全球金融危機(jī)的觸發(fā)下,我國政府為了保持經(jīng)濟(jì)穩(wěn)定,再次加大了高速公路、高速鐵路等基礎(chǔ)設(shè)施行業(yè)的投入,但過剩問題逐步凸顯。針對這個(gè)問題,國務(wù)院常務(wù)會議、工信部、國家發(fā)改委多次部署對策,比如提出經(jīng)濟(jì)轉(zhuǎn)型戰(zhàn)略。我們認(rèn)為經(jīng)濟(jì)的轉(zhuǎn)型除了體制的轉(zhuǎn)型外,目前關(guān)鍵就是調(diào)整產(chǎn)業(yè)結(jié)構(gòu),就是不同企業(yè)在市場競爭中的進(jìn)入和退出問題。企業(yè)要加速轉(zhuǎn)型升級,國家要實(shí)現(xiàn)經(jīng)濟(jì)社會轉(zhuǎn)型,財(cái)務(wù)管理工作應(yīng)該積極作為關(guān)注的重點(diǎn)。相對與肉聯(lián)廠來說,企業(yè)的收入與支出都與財(cái)務(wù)和資金有著密切的關(guān)系,肉聯(lián)廠的發(fā)展與財(cái)務(wù)有著至關(guān)重要的作用,無論如何,肉聯(lián)廠的財(cái)務(wù)資金的運(yùn)轉(zhuǎn)以及利潤,都應(yīng)當(dāng)?shù)牡竭m當(dāng)?shù)墓芾?,這樣才有助于廠子的迅速發(fā)展。肉聯(lián)廠財(cái)務(wù)管理應(yīng)積極研究和運(yùn)用國家推出的產(chǎn)業(yè)政策。企業(yè)方向錯(cuò)了,走得越快,死的越早。財(cái)務(wù)總監(jiān)要研究區(qū)域經(jīng)濟(jì)發(fā)展規(guī)劃、新興產(chǎn)業(yè)振興規(guī)劃、開拓內(nèi)需的政策、實(shí)施“走出去”戰(zhàn)略、新民營資本36條、創(chuàng)新型國家戰(zhàn)略和知識產(chǎn)權(quán)戰(zhàn)略等等,結(jié)合企業(yè)總體發(fā)展戰(zhàn)略和所在區(qū)域的發(fā)展特點(diǎn),主動規(guī)劃并推進(jìn)企業(yè)參與市場重新劃分和產(chǎn)業(yè)在地區(qū)間梯度轉(zhuǎn)移的機(jī)會,實(shí)現(xiàn)從低附加值產(chǎn)業(yè)向高附加值產(chǎn)業(yè)轉(zhuǎn)移,從勞動密集型、資金密集型產(chǎn)業(yè)向知識密集型產(chǎn)業(yè)轉(zhuǎn)移,從傳統(tǒng)產(chǎn)業(yè)向新興產(chǎn)業(yè)轉(zhuǎn)移。財(cái)務(wù)管理要向知識產(chǎn)權(quán)和自主創(chuàng)新傾斜。財(cái)務(wù)管理應(yīng)通過薪酬制度設(shè)計(jì)、盈利分配、股權(quán)激勵、稅收籌劃、考核評價(jià)等途徑,充分運(yùn)用國家對科技創(chuàng)新和知識產(chǎn)權(quán)保護(hù)的政策,推進(jìn)企業(yè)加大研發(fā)投入,鼓勵發(fā)明創(chuàng)造和工藝改革,改善產(chǎn)品的質(zhì)量,減少污染排放,促進(jìn)企業(yè)節(jié)能減排,提高資源利用率,從而實(shí)現(xiàn)企業(yè)在產(chǎn)品和管理上的轉(zhuǎn)型升級。財(cái)務(wù)部們應(yīng)在安排預(yù)算和配置資源方面對創(chuàng)新人才進(jìn)行優(yōu)先安排,對人才的引進(jìn)、教育和培訓(xùn)應(yīng)采取鼓勵的財(cái)務(wù)政策和措施。對企業(yè)研發(fā)投入和取得的成果以及知識產(chǎn)權(quán)交易等方面發(fā)生的收支及形成的無形資產(chǎn),應(yīng)當(dāng)建立和完善專門的財(cái)務(wù)管理制度。1.2研究現(xiàn)狀目前,我國在傳統(tǒng)計(jì)劃經(jīng)濟(jì)體制的影響下,管理軟件正處在探索起步的時(shí)候,大部分軟件不能滿足企業(yè)的需求,它們存在著各種各樣的缺陷和問題。有些管理軟件操作起來比較復(fù)雜,而且有些功能不夠齊全,有些操作又不大方便。因此,我覺得在管理軟件這塊還需要不斷的探究改進(jìn)。在肉聯(lián)廠財(cái)務(wù)管理中,我們要應(yīng)當(dāng)加強(qiáng)資金和應(yīng)收賬款的管理,加強(qiáng)財(cái)務(wù)控制,提高資金的實(shí)際用途,從而形成合理的資金結(jié)構(gòu)體系,確定合理的比例,使資金能夠得到最佳的使用效果。加強(qiáng)對應(yīng)收賬款的管理。加強(qiáng)財(cái)產(chǎn)控制。同時(shí)政府應(yīng)盡快完善有利于企業(yè)發(fā)展的法律法規(guī)及相關(guān)的政策。目前,我國已經(jīng)出臺了《關(guān)于鼓勵和促進(jìn)中小企業(yè)發(fā)展的若干政策意見》、《中小企業(yè)促進(jìn)法》可見我國在這方面的工作取得了相當(dāng)大的成果。建立中小企業(yè)的信用擔(dān)保體系。金融部門要成為民營經(jīng)濟(jì)發(fā)展的推動器。為了更好的發(fā)揮金融部門的作用,金融機(jī)構(gòu)要切實(shí)轉(zhuǎn)變觀念,突破傳統(tǒng)觀念和制度的障礙,加快信貸管理體制的改革步伐,來適應(yīng)中小型民營企業(yè)的經(jīng)濟(jì)發(fā)展需求。財(cái)務(wù)管理系統(tǒng)開發(fā)將逐步從C/S結(jié)構(gòu)轉(zhuǎn)型為B/S結(jié)構(gòu),最大限度的把運(yùn)算提交給服務(wù)器計(jì)算,節(jié)約企業(yè)運(yùn)營成本,減少員工的工作量,員工只需要通過瀏覽器就可以對財(cái)務(wù)信息進(jìn)行管理。1.3研究意義隨著肉聯(lián)廠業(yè)務(wù)的拓展,財(cái)務(wù)管理會變得越來越復(fù)雜,用傳統(tǒng)的管理方法極易造成不必要的錯(cuò)誤,由此帶來的損失無法估量。因此實(shí)現(xiàn)財(cái)務(wù)管理的自動管理必不可少。財(cái)務(wù)管理系統(tǒng)的開發(fā)可以減少工人們的工作量,還可以為肉聯(lián)廠節(jié)約許多不必要的人力和錢財(cái),可以使肉聯(lián)廠向科學(xué)化、現(xiàn)代化、規(guī)范化的方向發(fā)展,提高肉聯(lián)廠的生產(chǎn)效率和工作效率。面對企業(yè)管理這一主題,我國企業(yè)管理在相當(dāng)大的程度上落后于其組建的速度,并且財(cái)務(wù)管理又是它們的重要基礎(chǔ)工作和特別突出的軟肋,所以,如何加強(qiáng)肉聯(lián)廠的財(cái)務(wù)管理也就具有非常重要的現(xiàn)實(shí)意義和深遠(yuǎn)的影響;與此同時(shí),私人企業(yè)的特殊性,使得它有不同于國有企業(yè)的特征,對其財(cái)務(wù)管理需要加以研究,也有重要的理論意義。從企業(yè)的特殊性質(zhì)分析入手,研究了我國企業(yè)財(cái)務(wù)管理中的主要問題及基本對策、財(cái)務(wù)管理的理財(cái)目標(biāo)、理財(cái)環(huán)境、財(cái)務(wù)管理的特殊性、資金的籌集、投放、財(cái)務(wù)管理的信息基礎(chǔ)及財(cái)務(wù)控制,力圖為財(cái)務(wù)管理提供更先進(jìn)的觀念和最初的總體設(shè)計(jì)。財(cái)務(wù)管理具有反應(yīng)速度快的特點(diǎn),企業(yè)生產(chǎn)經(jīng)營管理各方面的效果和問題都會通過不同的財(cái)務(wù)指標(biāo)及時(shí)反映出來,如決策是否得當(dāng),經(jīng)營是否有方,生產(chǎn)組織是否合理,產(chǎn)品質(zhì)量及品種是否適合需要,產(chǎn)銷是否銜接暢通,耗費(fèi)是否正常,收入和盈利的取得是否合理等都會對財(cái)務(wù)指標(biāo)產(chǎn)生重大影響。
財(cái)務(wù)部門需要通過對財(cái)務(wù)問題的經(jīng)常性的計(jì)算、預(yù)測走向、整理資料、分析錯(cuò)誤、肯定成績、找出問題、尋找原因并找出解決辦法,提出可以改進(jìn)措施,促使企業(yè)不斷提高經(jīng)濟(jì)效益。第2章相關(guān)技術(shù)介紹2.1動態(tài)網(wǎng)頁實(shí)現(xiàn)——JSPJSP技術(shù)全稱是javaserverpage,它的特點(diǎn)是將內(nèi)容的生成和顯示分離,從而做到代碼分離,這樣一來方便了開發(fā)者對代碼進(jìn)行維護(hù),同時(shí)強(qiáng)調(diào)可重用組件,跨平臺的組件可以用來執(zhí)行Web程序所要求的更復(fù)雜的處理,既能在Windows系統(tǒng)上運(yùn)行,也能在其他操作系統(tǒng)上運(yùn)行,利用java虛擬機(jī)即可在任意平臺上運(yùn)行。除此之外,JSP可以采用標(biāo)識簡化頁面開發(fā),可以和HTML緊密結(jié)合,JSP技術(shù)封裝了很多功能,使得操作變得更加簡單容易。與其他動態(tài)網(wǎng)頁技術(shù)相比較,它具有運(yùn)行速度快、安全等特點(diǎn)。2.2系統(tǒng)運(yùn)行服務(wù)器——TomcatTomcat是在SUN公司發(fā)展起來的一個(gè)的Servlet容器,作為javaweb服務(wù)器容器,Tomcat本身是用Java語言編寫。它的優(yōu)勢是簡單快捷、具有很好的可擴(kuò)展性而且數(shù)據(jù)安全。作為一個(gè)開源的軟件,Tomcat得到廣大開源開發(fā)者的大力支持和喜愛,它可以和目前絕大部分的主流Web服務(wù)器搭配一起運(yùn)行實(shí)現(xiàn)工作任務(wù)。Tomcat運(yùn)行起來很穩(wěn)定、可靠,并且效率高最大的優(yōu)點(diǎn)在于啟動時(shí)快速準(zhǔn)確午bug,在這一點(diǎn)上其他服務(wù)器例如weblogic是無法做到的,所以Tomcat什分適合開發(fā)B/S架構(gòu)的系統(tǒng)。2.3系統(tǒng)開發(fā)數(shù)據(jù)庫——MYSQLMySQL是由瑞典MySQLAB公司開發(fā)出來的一個(gè)小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),目前屬于Oracle旗下公司的產(chǎn)品。它是一個(gè)真正意義上的多用戶、多線程的SQL數(shù)據(jù)庫服務(wù)器,并且它是免費(fèi)的一款數(shù)據(jù)庫軟件。MySQL適應(yīng)于所有平臺,是一款關(guān)系型數(shù)據(jù)庫,采用客戶(B)/服務(wù)器(S)體系,性能相當(dāng)出色,它包含一個(gè)缺省桌面格式MyISAM。MyISAM數(shù)據(jù)庫與磁盤非常地兼容而不占用過多的CPU和內(nèi)存。MySQL可以運(yùn)行在任何服務(wù)器系統(tǒng)中。2.4MVC模式設(shè)計(jì)(JSP+Severlet+JavaBean)2.4.1MVC設(shè)計(jì)思想概論MVC全名是Model-View-Controller,是模型—視圖—控制器的縮寫,即把一個(gè)應(yīng)用的輸入、處理、輸出按照Model、View、Controller的方式進(jìn)行強(qiáng)制性分離,這樣一個(gè)應(yīng)用被分成三個(gè)層——模型層、視圖層、控制層。MVC中的M組件。模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)邏輯,就是將業(yè)務(wù)流程進(jìn)行了封裝。業(yè)務(wù)流程的處理過程對其它層來說是黑箱操作,其他層根本看不到實(shí)際的操作,模型層接受視圖層請求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計(jì)可以說是MVC最主要的核心的組件。MVC中的V組件。視圖是用戶看到并與之交互的界面,它所用到的技術(shù)就是jsp,對于Web應(yīng)用來說,視圖就是由HTML元素組成的界面。MVC中的C組件??刂破鹘邮苡脩舭l(fā)出的請求并調(diào)用模型層去完成用戶的請求最后返回到視圖層,它本身不輸出任何東西,不做任何處理。它只是接收用戶發(fā)出的請求并決定調(diào)用哪個(gè)模型構(gòu)件去處理請求,然后再確定用哪個(gè)視圖層來顯示返回的數(shù)據(jù)。將模型與視圖匹配在一起,共同完成用戶的請求。2.4.2MVC中各組件的關(guān)系在思想和代碼上M(模型層)和V(視圖層)是分離的,通常視圖層里面不會有任何業(yè)務(wù)邏輯的實(shí)現(xiàn);而模型層也是不依賴于視圖的,同一個(gè)模型層可以對應(yīng)多種不同的視圖。開始展示視圖給用戶,用戶在這個(gè)視圖上進(jìn)行操作發(fā)送用戶所提出的請求,然后用戶會點(diǎn)擊提交按鈕,來發(fā)出請求,視圖發(fā)出的用戶請求會到達(dá)C(控制層),在請求中包含了想要完成什么樣的業(yè)務(wù)功能以及相關(guān)的數(shù)據(jù)。C(控制層)會來處理用戶請求,會把請求中的數(shù)據(jù)進(jìn)行封裝,然后選擇并調(diào)用合適的模型,請求M(模型層)進(jìn)行狀態(tài)更新,然后選擇接下來要展示給用戶的V(視圖層)。M(模型層)會去處理用戶請求的業(yè)務(wù)功能,同時(shí)進(jìn)行模型狀態(tài)的維護(hù)和更新,當(dāng)模型狀態(tài)發(fā)生改變的時(shí)候,M(模型層)會通知相應(yīng)的V(視圖層),告訴V(視圖層)它的狀態(tài)發(fā)生了改變.視圖接到模型的通知后,會向M(模型層)進(jìn)行狀態(tài)查詢,獲取需要展示的數(shù)據(jù),然后按照視圖本身的展示方式(即jsp頁面),把這些數(shù)據(jù)展示出來。第3章系統(tǒng)分析3.1系統(tǒng)目標(biāo)肉聯(lián)廠財(cái)務(wù)管理系統(tǒng)是在計(jì)算機(jī)管理信息技術(shù)基礎(chǔ)上開發(fā)的信息系統(tǒng)軟件,系統(tǒng)目標(biāo)是實(shí)現(xiàn)企業(yè)對財(cái)務(wù)管理的基本要求,如費(fèi)用管理、所有費(fèi)用、增加收入、增加支出、費(fèi)用類型等等,不僅要提高工作效率,滿足了企業(yè)的需求,同時(shí)也符合了中國肉聯(lián)廠的財(cái)務(wù)管理的運(yùn)作流程和操作習(xí)慣設(shè)計(jì)。3.2系統(tǒng)可行性分析可行性研究分析是在系統(tǒng)進(jìn)入正式設(shè)計(jì)之前,對該項(xiàng)目系統(tǒng)實(shí)施的可能性、有效性、技術(shù)方案及運(yùn)行策略進(jìn)行深入細(xì)致的評價(jià),通過對項(xiàng)目的主要內(nèi)容和使用條件調(diào)查研究和分析比較,并對項(xiàng)目建成是否能取得的經(jīng)濟(jì)效益及社會環(huán)境影響進(jìn)行預(yù)測,從而提出該項(xiàng)目是否值得投資以及如何進(jìn)行建設(shè)的咨詢意見,為項(xiàng)目決策提供依據(jù)的一種綜合性的系統(tǒng)分析方法??尚行苑治鰬?yīng)具有預(yù)見性、公正性、可靠性、科學(xué)性的特點(diǎn)??尚行苑治龅哪康木褪怯米钚〉拇鷥r(jià)在盡可能短的時(shí)間內(nèi)確定問題是否能夠解決。可行性分析是項(xiàng)目開始之前一項(xiàng)重要的工作。3.2.1經(jīng)濟(jì)可行性一個(gè)軟件系統(tǒng)的主要費(fèi)用有設(shè)備費(fèi)用、開發(fā)費(fèi)用、系統(tǒng)開銷以及另外的其他費(fèi)用。本系統(tǒng)對硬件要求不高,開銷不大,而且該系統(tǒng)簡單易懂,同時(shí)該系統(tǒng)的后臺系統(tǒng)十分穩(wěn)定,維護(hù)起來簡單快速,方便后期的修改維護(hù),假設(shè)該設(shè)計(jì)投入使用便大大的減少了員工的工作量,從而提高了企業(yè)的效率,可以帶來更好的價(jià)值,因此,從經(jīng)濟(jì)可行性上來看是完全可行的。3.2.2技術(shù)可行性肉聯(lián)廠財(cái)務(wù)管理系統(tǒng)需要有數(shù)據(jù)處理量達(dá)、數(shù)據(jù)處理比較零散和即時(shí)處理的功能。該項(xiàng)目完全可以按照M(模型層)-V(視圖層)-C(控制層)設(shè)計(jì)模式來進(jìn)行開發(fā),采用JSP、JAVA、Web相關(guān)技術(shù)實(shí)現(xiàn)。Jsp和平臺無關(guān),可移植性強(qiáng)。所以該項(xiàng)目在技術(shù)上完全可行。該套系統(tǒng)利用JavaWeb,以及MVC框架,在技術(shù)實(shí)現(xiàn)上并不難,在技術(shù)上完全可以實(shí)現(xiàn)。因此從技術(shù)可行性來看是可行的。3.3功能需求分析肉聯(lián)廠財(cái)務(wù)管理系統(tǒng)是一個(gè)財(cái)務(wù)管理人員和員工操作的應(yīng)用軟件。該軟件主要由系統(tǒng)登錄、基本設(shè)置、資金管理、業(yè)務(wù)管理、系統(tǒng)維護(hù)五大模塊組成。3.3.1系統(tǒng)登錄管理員通過輸入管理員ID和密碼能夠登錄財(cái)務(wù)管理系統(tǒng)后臺,并利用該系統(tǒng)對肉聯(lián)廠的財(cái)務(wù)進(jìn)行管理。3.3.2基本設(shè)置管理員的基本信息中包括公司資金的使用情況,可通過報(bào)表形式進(jìn)行瀏覽;部門信息增、刪、改、查,修改各個(gè)部門的工資大小,部門工資系數(shù)的修改將影響該部門員工的工資收入情況;業(yè)務(wù)收入和支出項(xiàng)目類別增、刪、改、查等等。業(yè)務(wù)項(xiàng)目的加入包括收入和支出,會影響公司賬戶金額。3.3.3工資管理管理員進(jìn)行員工工資管理包括工資大小設(shè)置,工資的修改編輯,工資查詢等等;還可以進(jìn)行對公司員工工資的派發(fā)。3.3.4業(yè)務(wù)管理超級權(quán)限的管理員可身份可以進(jìn)行一系列操作,如:添加收入支出的類型、肉聯(lián)廠的項(xiàng)目名、添加部門、修改部門、刪除部門、修改工資、增加或刪除通知、增加業(yè)務(wù)金額、修改個(gè)人信息等等。管理員可通過增加支出、增加收入,來統(tǒng)計(jì)公司財(cái)務(wù)的流動,并可在報(bào)表中查詢這些條目,另外還有支出類型,比如購買原材料、員工出差報(bào)銷等,還有收入類型,包括出售商品等等。3.3.5系統(tǒng)管理管理員包括管理密碼修改、公司所有成員信息查看、增加用戶等等。3.4開發(fā)環(huán)境該系統(tǒng)是利用java語言的web程序,因此我們需要JDK的支持,使用目前流行的jdk1.8,并為電腦配置環(huán)境變量。開發(fā)與運(yùn)行環(huán)境的選擇如下:開發(fā)環(huán)境:Windows7設(shè)計(jì)模式:MVC設(shè)計(jì)模式開發(fā)工具:MyEclipse10.5數(shù)據(jù)庫管理系統(tǒng):Mysql5.0使用到的技術(shù):java、jdbc、jsp、javascript、css、html、servlet等第4章總體設(shè)計(jì)4.1系統(tǒng)功能設(shè)計(jì)系統(tǒng)模塊結(jié)構(gòu)設(shè)計(jì)是該管理系統(tǒng)總體設(shè)計(jì)的重要組成部分。模塊是功能說明、數(shù)據(jù)說明、可執(zhí)行語句等的集合。把大型軟件按模塊劃分為一個(gè)個(gè)較小的相對獨(dú)立且相關(guān)的模塊,每個(gè)模塊完成一個(gè)相應(yīng)的部分功能,把這些模塊組合起來形成一個(gè)整體,以完成全部的功能,這就是模塊化設(shè)計(jì)的基本思想。為了使系統(tǒng)能夠有合理的結(jié)構(gòu)和良好的可維護(hù)性,模塊結(jié)構(gòu)設(shè)計(jì)應(yīng)遵循以下原則:盡力降低模塊間的聯(lián)系度;盡量提高模塊的聚合度;盡量將模塊分為小的且功能單一的小模塊。在肉聯(lián)廠財(cái)務(wù)管理該系統(tǒng)中有四大模塊,分別是基本設(shè)置模塊、工資管理模塊、業(yè)務(wù)管理模塊(收入管理、支出管理)、日常報(bào)表。數(shù)據(jù)對象實(shí)體,包括員工信息實(shí)體,工資信息實(shí)體,部門實(shí)體,各個(gè)實(shí)體擁有各自的不同屬性,我們可以用實(shí)體聯(lián)系圖表示,如圖4-1所示。員工員工工資業(yè)務(wù)系統(tǒng)用戶費(fèi)用類型型登錄報(bào)銷款項(xiàng)基本設(shè)置管理員基本工資補(bǔ)助及獎金人員管理工資管理管理費(fèi)用管理部門管理圖4-1實(shí)體聯(lián)系圖4.2系統(tǒng)模塊設(shè)計(jì)4.2.1基本設(shè)置模塊基本設(shè)置模塊功分為財(cái)務(wù)使用查詢,部門信息管理,業(yè)務(wù)信息管理三個(gè)功能。這些功能完成整個(gè)系統(tǒng)的最基本設(shè)置的功能。(1)賬戶資金本模塊主要完成對企業(yè)資金收入和支出的查詢功能,并通過計(jì)算分配企業(yè)的固定資金和流動資金,固定資金為總資金的三分之二,流動資金為總資金的三分之一,并且總資金會根據(jù)業(yè)務(wù)的收入和支出而進(jìn)行改變,方便企業(yè)良好使用資金。(2)部門信息本模塊是基本信息模塊的主要模塊之一,主要完成員工部門的添加、刪除、修改,部門工資系數(shù)的設(shè)定以及部門員工人數(shù)的統(tǒng)計(jì)以及部門的資金利用情況等工作。通過本模塊可以創(chuàng)建一個(gè)新的部門,同時(shí)也可以刪除一個(gè)沒有人的部門,如果部門業(yè)績好,同樣可以修改該部門的工資系數(shù),整體提高該部門員工的工資水平。1.具體操作如下:(1)查詢:點(diǎn)擊查詢按鈕,頁面跳轉(zhuǎn)查詢頁面,管理員可輸入相參數(shù)進(jìn)行查詢,管理員可以在該頁面上進(jìn)行添加、刪除、修改等操作。(2)添加:點(diǎn)擊添加按鈕,頁面將跳轉(zhuǎn)到添加頁面,管理員需要輸入部門名稱、部門人數(shù)(默認(rèn)為0)、工資等數(shù)據(jù),確認(rèn)信息無誤后點(diǎn)擊提交,有誤點(diǎn)擊重置,重新填寫信息,然后再提交即可。等待頁面跳出添加成功字樣說明添加成功,同時(shí)系統(tǒng)將跳轉(zhuǎn)到部門信息界面,管理員可以看到自己添加的新部門。(3)修改:選擇您要修改的部門,點(diǎn)擊修改按鈕,系統(tǒng)跳轉(zhuǎn)到該部門的修改頁面,并將該部門可修改的信息返回到頁面中,修改完成后點(diǎn)擊確認(rèn)提交修改即可完成。(4)刪除:選擇您要刪除的部門,否則將會發(fā)生數(shù)據(jù)異常,點(diǎn)擊刪除后彈出確認(rèn)框,點(diǎn)擊確定后界面將顯示刪除成功字樣,1秒后跳轉(zhuǎn)部門信息界面,這時(shí)頁面里將不顯示剛刪除的部門。(5)業(yè)務(wù)信息本模塊是基本信息模塊的主要模塊之一,主要完成歷史項(xiàng)目的顯示及新項(xiàng)目的添加功能,該模塊可以一目了然的了解企業(yè)所有的資金投入及收入,并通過計(jì)算項(xiàng)目投入與收入金額的差價(jià),將收入和支出分離管理,這樣可以方便的統(tǒng)計(jì)資金的流動,可方便的查詢這個(gè)資金使用。通過本模塊可以添加新的項(xiàng)目,必須要輸入項(xiàng)目名稱、投入金額、收入金額三項(xiàng),系統(tǒng)會自動進(jìn)行計(jì)算并把數(shù)據(jù)更新到賬戶資金,達(dá)到統(tǒng)計(jì)收支的作用。2.具體操作如下:(1)查詢:可以查詢公司所有業(yè)務(wù)信息,包括頁面名稱、支出資金、收入資金并且可以查詢哪天、哪周、哪月、哪個(gè)部門的資金使用情況。(2)添加:點(diǎn)擊添加按鈕,頁面將跳轉(zhuǎn)到添加板塊,輸入項(xiàng)目名稱、收入金額或支出金額及原因等,確認(rèn)信息無誤后點(diǎn)擊提交,有誤點(diǎn)擊重置,重新填寫。等待頁面跳出添加成功字樣說明添加成功,同時(shí)系統(tǒng)將跳轉(zhuǎn)到業(yè)務(wù)信息界面,管理員可以查看到已經(jīng)添加好的新條目。4.2.2工資信息模塊工資信息模塊分為工資信息查詢和工資參數(shù)設(shè)定兩個(gè)模塊。這兩個(gè)功能能輔助管理員一目了然的管理企業(yè)員工工資,并極大減少了工資核算出錯(cuò)的概率,又不失公平。(1)工資信息本模塊是工資信息模塊的主要模塊之一,主要完成查詢員工工資信息的功能和工資參數(shù)的設(shè)定功能;基礎(chǔ)工資本模塊中的工資信息可以一目了然的顯示各個(gè)部門的基礎(chǔ)工資名稱、人數(shù)以及工資系數(shù)情況,通過選擇想要查看的部門名稱,可以進(jìn)入專門頁面查詢該部門內(nèi)所有員工的薪水以及完成的業(yè)務(wù)金額等信息。具體操作如下:查看工資:點(diǎn)擊工資信息,系統(tǒng)將顯示各個(gè)部門的名稱、人數(shù)及工資系數(shù),選擇想要查看的部門,本模塊點(diǎn)擊對應(yīng)的部門名稱,系統(tǒng)將顯示該部門內(nèi)所有成員的工資信息。點(diǎn)擊返回可以返回上級頁面。(2)參數(shù)設(shè)定本模塊中的參數(shù)設(shè)定可以查看當(dāng)前工資的參數(shù),可以通過直接再參數(shù)上修改并提交來達(dá)到修改參數(shù)的目的。所以同部門之間的基礎(chǔ)工資將是一樣的。獎金是根據(jù)公司季度業(yè)務(wù)來調(diào)整發(fā)放的,所以員工的獎金是一樣的;本模塊相同部門員工之間的工資差異將體現(xiàn)在項(xiàng)目提成上面基礎(chǔ)工資,。項(xiàng)目提成將由員工自己提交到數(shù)據(jù)庫。4.2.3業(yè)務(wù)管理模塊業(yè)務(wù)管理模塊包括了記錄查詢和工資卡管理兩個(gè)模塊,由于工資卡具有個(gè)人保密性,所以工資卡賬號管理員不能修改,本模塊只有員工本人才有權(quán)限修改自己的基礎(chǔ)工資工資卡號和所屬銀行。記錄查詢方便管理員及時(shí)查看系統(tǒng)操作者的操作情況以及系統(tǒng)的運(yùn)行情況等,提高了系統(tǒng)的安全性。(1)記錄查詢本模塊是業(yè)務(wù)管理模塊的主要模塊之一,主要功能是查詢所有用戶的操作。記錄查詢將及時(shí)記錄管理員或者員工的一系列操作,并記錄操作內(nèi)容、操作人和操作的時(shí)間,同時(shí)記錄將永久寫入數(shù)據(jù)庫,不可刪除。本模塊以下操作將會記錄:添加項(xiàng)目、添加部門、修改部門、刪除部門、修改參數(shù)、添加通知、修改個(gè)人信息、個(gè)人提交業(yè)務(wù)信息等等。(2)工資卡管理本模塊是業(yè)務(wù)管理模塊的主要模塊之一,主要完成的功能是方便工資的下發(fā)、顯示所有將影響企業(yè)的操作和顯示所有員工的工資卡所在銀行及銀行卡號。并且報(bào)銷時(shí)即可快速找到工資卡號。工資卡管理可以查看企業(yè)所有員工的工資卡賬號,方便發(fā)工資時(shí)確認(rèn)信息。4.2.4系統(tǒng)管理模塊系統(tǒng)管理模塊有賬號查看、密碼修改和公告管理三個(gè)功能,賬號查看可以查看所有有權(quán)限登錄財(cái)務(wù)管理系統(tǒng)的人的基本信息;密碼修改可以在提交完密碼后進(jìn)行密碼重置;公告管理可以通過發(fā)布和修改通告,來達(dá)到更新公司內(nèi)部最新消息的功能。(1)賬號查看本模塊是系統(tǒng)的主要模塊之一,通過賬號查詢模塊可以查看企業(yè)員工的賬戶編號、密碼等信息,同時(shí)可以達(dá)到管理用戶的目的。(2)修改密碼本模塊是系統(tǒng)的主要模塊之一,通過密碼修改模塊可以修改本登陸賬號的密碼,需要進(jìn)行舊密碼驗(yàn)證和兩次新密碼一致性驗(yàn)證。密碼修改:點(diǎn)擊密碼修改,進(jìn)入密碼修改界面,在第一輸入框輸入當(dāng)前賬號的登陸密碼,兩次密碼必須保持一致,點(diǎn)擊提交進(jìn)行密碼修改。如果顯示修改成功,則說明密碼修改完成。退出系統(tǒng),必須使用新密碼登陸。(3)發(fā)布通告本模塊是系統(tǒng)的主要模塊之一,通過該模塊管理員可在發(fā)布公司的公告,員工可進(jìn)行查看,這樣方便企業(yè)管理員工使得信息快速通知到每位員工。4.3數(shù)據(jù)庫設(shè)計(jì)4.3.1數(shù)據(jù)庫分析數(shù)據(jù)庫的設(shè)計(jì),在程序開發(fā)中起著至關(guān)重要的作用,它往往決定了在后面開發(fā)進(jìn)行怎么樣的程序編碼,保證成功整體編碼統(tǒng)一性,一個(gè)合理,有限的數(shù)據(jù)庫設(shè)計(jì)可降低程序的復(fù)雜性,使得程序開發(fā)過程更為容易。本系統(tǒng)考慮到用戶量,開發(fā)經(jīng)濟(jì)性,決定用MYSQL作為數(shù)據(jù)庫系統(tǒng),MYSQL數(shù)據(jù)庫系統(tǒng)雖然說規(guī)模小,功能有限,但是絲毫也沒用減少它受歡迎的程度,對于一般的個(gè)人使用者和中小企業(yè)來說,MYSQL提供的功能已經(jīng)綽綽有余了,有用MYSQL是開發(fā)源碼軟件,因此大大降低了總體成本,它可以處理千萬條記錄的大型數(shù)據(jù)庫,支持多種存儲引擎。4.3.2數(shù)據(jù)庫概念設(shè)計(jì) 這一設(shè)計(jì)階段是在需求分析的基礎(chǔ)上,設(shè)計(jì)出能夠滿足用戶的各種實(shí)體及他們之間的關(guān)系,它是整個(gè)數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵,包括概念模型設(shè)計(jì)和新系統(tǒng)流程兩個(gè)階段,為后面的邏輯結(jié)構(gòu)設(shè)計(jì)打下基礎(chǔ)。實(shí)體關(guān)系圖是數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵,決定了數(shù)據(jù)庫的結(jié)構(gòu)。由實(shí)際需求和其實(shí)體的屬性得到。概念數(shù)據(jù)模型獨(dú)立于具體的數(shù)據(jù)處理的細(xì)節(jié)和數(shù)據(jù)庫管理系統(tǒng)。這次設(shè)計(jì)仍采用傳統(tǒng)的實(shí)體聯(lián)系圖作為概念設(shè)計(jì)的工具。再進(jìn)行優(yōu)化后,盡量滿足結(jié)構(gòu)清晰、關(guān)聯(lián)簡潔、實(shí)體個(gè)數(shù)適中、屬性分配合理、沒有低級冗余。在本系統(tǒng)中,使用的是Mysql數(shù)據(jù)庫來管理系統(tǒng)。該系統(tǒng)使用的數(shù)據(jù)庫名為rlc,該數(shù)據(jù)庫中共需要創(chuàng)建8個(gè)數(shù)據(jù)表1.部門表在此表中包含了該企業(yè)所有的部門信息,比如名稱、id等,如表4-1所示。表4-1class表(部門表)序號字段名類型長度說明1idInt10唯一標(biāo)識2nameVarchar50部門名稱2.員工工資表在此表中包含了員工工資的所有信息,包括獎金、補(bǔ)貼、發(fā)放日期、等,如表4-2所示。表4-2gongzi表(員工工資表)序號字段名類型長度說明1idInt10唯一標(biāo)識2dateVarchar50發(fā)放日期3yIdInt10員工id4jiangVarchar50獎金5butieVarchar50補(bǔ)貼3.用戶信息表在此表中包含了所有用戶的注冊信息,如用戶名、昵稱、日期、密碼、部門id、IP地址等,如表4-3所示。表4-3master表(用戶信息表)序號字段名類型長度說明1idint10唯一標(biāo)識2namevarchar50用戶名3trueNamevarchar50昵稱4Passvarchar50密碼5joinDatevarchar50日期6classIdint10部門id7loginNumint10最大數(shù)8ipAddressvarchar50IP地址4.費(fèi)用明細(xì)表此表記錄了費(fèi)用的信息,包括所屬部門名稱、報(bào)銷人、費(fèi)用名稱id、金額、項(xiàng)目名稱、明細(xì)、報(bào)銷日期、費(fèi)用類型id等,如表4-4所示。表4-4pay表(費(fèi)用明細(xì)表)序號字段名類型長度說明1idint10唯一標(biāo)識2classIdint10部門id3payerIdint10報(bào)銷人id4payTypeIdint10費(fèi)用名稱id5moneyint10金額6protectvarchar10項(xiàng)目名稱7messagevarchar50明細(xì)8addtimevarchar50報(bào)銷日期9inoutint10費(fèi)用類型id5.報(bào)銷人信息表此表記錄了員工的所有信息,包括唯一標(biāo)識id與員工信息等,如表4-5所示。表4-5payer表(報(bào)銷人信息表)序號字段名類型長度說明1idint10唯一標(biāo)識2namevarchar50員工姓名6.費(fèi)用類型表此表中記錄了用戶的訂單信息,包括費(fèi)用名稱格與費(fèi)用類型id等,如表4-6所示。表4-6paytype表(費(fèi)用類型表)序號字段名類型長度說明1idint10唯一標(biāo)識2namevarchar50費(fèi)用名稱3inoutint10費(fèi)用類型id7.登錄信息表此表中記錄了用戶的基登錄信息,包括聯(lián)用戶名、登錄日期、退出日期、Ip地址等,如表4-7所示。表4-7userlog表(登錄信息表)序號字段名類型長度說明1idint10唯一標(biāo)識2uservarchar50用戶名3loginDatedatetime50登錄日期4logoutDatedatetime50退出日期5ipvarchar50Ip地址8.員工表此表記錄了費(fèi)用的信息,包括員工姓名、性別、部門id、工資、卡號、日期、報(bào)銷人id等,如表4-8所示。表4-8yuangong表(員工表)序號字段名類型長度說明1unamevarchar10員工姓名2sexvarchar50性別3classidint50部門id4gongzivarchar50工資5kanumvarchar50卡號6rudatevarchar50日期7intint10報(bào)銷人id4.3.3數(shù)據(jù)庫物理實(shí)現(xiàn)這一實(shí)現(xiàn)階段是在概念設(shè)計(jì)的基礎(chǔ)上,實(shí)現(xiàn)出所設(shè)計(jì)的數(shù)據(jù)庫表及表關(guān)系,我們可以根據(jù)所涉及到額實(shí)體關(guān)系圖進(jìn)行實(shí)現(xiàn)我們的數(shù)據(jù)庫。第5章系統(tǒng)的功能實(shí)現(xiàn)5.1系統(tǒng)實(shí)現(xiàn)整個(gè)肉聯(lián)廠管理系統(tǒng)的代碼流程如下圖所示:5.2Sql操作核心類publicclassDBConnect{ privateConnectionconn=null; privateStatementstmt=null; privatePreparedStatementprepstmt=null; privateDBConnectionManagerdcm=null;voidinit(){dcm=DBConnectionManager.getInstance(); conn=dcm.getConnection("mysql");} /** *構(gòu)造數(shù)據(jù)庫的連接和訪問類 */ publicDBConnect()throwsException{init(); stmt=conn.createStatement(); }publicDBConnect(intresultSetType,intresultSetConcurrency)throwsException{init();stmt=conn.createStatement(resultSetType,resultSetConcurrency);}/***構(gòu)造數(shù)據(jù)庫的連接和訪問類*預(yù)編譯SQL語句*@paramsqlSQL語句*/ publicDBConnect(Stringsql)throwsException{init(); this.prepareStatement(sql); } publicDBConnect(Stringsql,intresultSetType,intresultSetConcurrency)throwsException{init(); this.prepareStatement(sql,resultSetType,resultSetConcurrency); } /** *返回連接 *@returnConnection連接 */ publicConnectiongetConnection(){ returnconn; } /** *PreparedStatement *@returnsql預(yù)設(shè)SQL語句 */ publicvoidprepareStatement(Stringsql)throwsSQLException{ prepstmt=conn.prepareStatement(sql); } publicvoidprepareStatement(Stringsql,intresultSetType,intresultSetConcurrency)throwsSQLException{ prepstmt=conn.prepareStatement(sql,resultSetType,resultSetConcurrency); } /** *設(shè)置對應(yīng)值* *@paramindex參數(shù)索引 *@paramvalue對應(yīng)值 */ publicvoidsetString(intindex,Stringvalue)throwsSQLException{ prepstmt.setString(index,value); } publicvoidsetInt(intindex,intvalue)throwsSQLException{ prepstmt.setInt(index,value); } publicvoidsetBoolean(intindex,booleanvalue)throwsSQLException{ prepstmt.setBoolean(index,value); } publicvoidsetDate(intindex,Datevalue)throwsSQLException{ prepstmt.setDate(index,value); } publicvoidsetLong(intindex,longvalue)throwsSQLException{ prepstmt.setLong(index,value); } publicvoidsetFloat(intindex,floatvalue)throwsSQLException{ prepstmt.setFloat(index,value); } publicvoidsetBytes(intindex,byte[]value)throwsSQLException{ prepstmt.setBytes(index,value); }publicvoidclearParameters()throwsSQLException{prepstmt.clearParameters(); prepstmt=null;} /** *返回預(yù)設(shè)狀態(tài) */ publicPreparedStatementgetPreparedStatement(){ returnprepstmt; } /** *返回狀態(tài) *@returnStatement狀態(tài) */ publicStatementgetStatement(){ returnstmt; } /** *執(zhí)行SQL語句返回字段集 *@paramsqlSQL語句 *@returnResultSet字段集 */ publicResultSetexecuteQuery(Stringsql)throwsSQLException{ if(stmt!=null){ returnstmt.executeQuery(sql); } elsereturnnull; } publicResultSetexecuteQuery()throwsSQLException{ if(prepstmt!=null){ returnprepstmt.executeQuery(); } elsereturnnull; } /** *執(zhí)行SQL語句 *@paramsqlSQL語句 */ publicvoidexecuteUpdate(Stringsql)throwsSQLException{ if(stmt!=null) stmt.executeUpdate(sql); } publicvoidexecuteUpdate()throwsSQLException{ if(prepstmt!=null) prepstmt.executeUpdate(); } /** *關(guān)閉連接 */ publicvoidclose()throwsException{ if(stmt!=null){ stmt.close(); stmt=null; } if(prepstmt!=null){ prepstmt.close(); prepstmt=null; } if(conn!=null) { dcm.freeConnection("mysql",conn); } }}5.3Sql連接管理類publicclassDBConnectionManager{staticprivateDBConnectionManagerinstance;//唯一實(shí)例staticprivateintclients;privateVectordrivers=newVector();privatePrintWriterlog;privateHashtablepools=newHashtable();/***返回唯一實(shí)例.如果是第一次調(diào)用此方法,則創(chuàng)建實(shí)例**@returnDBConnectionManager唯一實(shí)例*/staticsynchronizedpublicDBConnectionManagergetInstance(){if(instance==null){instance=newDBConnectionManager();}clients++;returninstance;}/***建構(gòu)函數(shù)私有以防止其它對象創(chuàng)建本類實(shí)例*/privateDBConnectionManager(){init();}/***將連接對象返回給由名字指定的連接池**@paramname在屬性文件中定義的連接池名字*@paramcon連接對象*/publicvoidfreeConnection(Stringname,Connectioncon){DBConnectionPoolpool=(DBConnectionPool)pools.get(name);if(pool!=null){pool.freeConnection(con);}}/***獲得一個(gè)可用的(空閑的)連接.如果沒有可用連接,且已有連接數(shù)小于最大連接數(shù)*限制,則創(chuàng)建并返回新連接**@paramname在屬性文件中定義的連接池名字*@returnConnection可用連接或null*/publicConnectiongetConnection(Stringname){DBConnectionPoolpool=(DBConnectionPool)pools.get(name);if(pool!=null){returnpool.getConnection();}returnnull;}/***獲得一個(gè)可用連接.若沒有可用連接,且已有連接數(shù)小于最大連接數(shù)限制,*則創(chuàng)建并返回新連接.否則,在指定的時(shí)間內(nèi)等待其它線程釋放連接.**@paramname連接池名字*@paramtime以毫秒計(jì)的等待時(shí)間*@returnConnection可用連接或null*/publicConnectiongetConnection(Stringname,longtime){DBConnectionPoolpool=(DBConnectionPool)pools.get(name);if(pool!=null){returnpool.getConnection(time);}returnnull;}/***關(guān)閉所有連接,撤銷驅(qū)動程序的注冊*/publicsynchronizedvoidrelease(){//等待直到最后一個(gè)客戶程序調(diào)用if(--clients!=0){return;}EnumerationallPools=pools.elements();while(allPools.hasMoreElements()){DBConnectionPoolpool=(DBConnectionPool)allPools.nextElement();pool.release();}EnumerationallDrivers=drivers.elements();while(allDrivers.hasMoreElements()){Driverdriver=(Driver)allDrivers.nextElement();try{DriverManager.deregisterDriver(driver);log("撤銷JDBC驅(qū)動程序"+driver.getClass().getName()+"的注冊");}catch(SQLExceptione){log(e,"無法撤銷下列JDBC驅(qū)動程序的注冊:"+driver.getClass().getName());}}}/***根據(jù)指定屬性創(chuàng)建連接池實(shí)例.**@paramprops連接池屬性*/privatevoidcreatePools(Propertiesprops){EnumerationpropNames=pertyNames();while(propNames.hasMoreElements()){Stringname=(String)propNames.nextElement();if(name.endsWith(".url")){StringpoolName=name.substring(0,name.lastIndexOf("."));Stringurl=props.getProperty(poolName+".url");if(url==null){log("沒有為連接池"+poolName+"指定URL");continue;}Stringuser=props.getProperty(poolName+".user");Stringpassword=props.getProperty(poolName+".password");Stringmaxconn=props.getProperty(poolName+".maxconn","0");intmax;try{max=Integer.valueOf(maxconn).intValue();}catch(NumberFormatExceptione){log("錯(cuò)誤的最大連接數(shù)限制:"+maxconn+".連接池:"+poolName);max=0;}DBConnectionPoolpool=newDBConnectionPool(poolName,url,user,password,max);pools.put(poolName,pool);log("成功創(chuàng)建連接池"+poolName);}}}/***讀取屬性完成初始化*/privatevoidinit(){InputStreamis=getClass().getResourceAsStream("/config/perties");PropertiesdbProps=newProperties();try{dbProps.load(is);}catch(Exceptione){System.err.println("不能讀取屬性文件."+"請確保perties在CLASSPATH指定的路徑中");return;}StringlogFile=dbProps.getProperty("logfile","newslog.txt");try{log=newPrintWriter(newFileWriter(logFile,true),true);}catch(IOExceptione){System.err.println("無法打開日志文件:"+logFile);log=newPrintWriter(System.err);}loadDrivers(dbProps);createPools(dbProps);}/***裝載和注冊所有JDBC驅(qū)動程序**@paramprops屬性*/privatevoidloadDrivers(Propertiesprops){StringdriverClasses=props.getProperty("driver");StringTokenizerst=newStringTokenizer(driverClasses);while(st.hasMoreElements()){StringdriverClassName=st.nextToken().trim();try{Driverdriver=(Driver)Class.forName(driverClassName).newInstance();DriverManager.registerDriver(driver);drivers.addElement(driver);log("成功注冊JDBC驅(qū)動程序"+driverClassName);}catch(Exceptione){log("無法注冊JDBC驅(qū)動程序:"+driverClassName+",錯(cuò)誤:"+e);}}}/***將文本信息寫入日志文件*/privatevoidlog(Stringmsg){//log.println(newDate()+":"+msg);}/***將文本信息與異常寫入日志文件*/privatevoidlog(Throwablee,Stringmsg){//log.println(newDate()+":"+msg);//e.printStackTrace(log);}/***此內(nèi)部類定義了一個(gè)連接池.它能夠根據(jù)要求創(chuàng)建新連接,直到預(yù)定的最*大連接數(shù)為止.在返回連接給客戶程序之前,它能夠驗(yàn)證連接的有效性.*/classDBConnectionPool{privateintcheckedOut;privateVectorfreeConnections=newVector();privateintmaxConn;privateStringname;privateStringpassword;privateStringURL;privateStringuser;privateStringdatabaseUrl;/***創(chuàng)建新的連接池**@paramname連接池名字*@paramURL數(shù)據(jù)庫的JDBCURL*@paramuser數(shù)據(jù)庫帳號,或null*@parampassword密碼,或null*@parammaxConn此連接池允許建立的最大連接數(shù)*/publicDBConnectionPool(Stringname,StringURL,Stringuser,Stringpassword,intmaxConn){=name;this.URL=URL;this.user=user;this.password=password;this.maxConn=maxConn;}/***將不再使用的連接返回給連接池**@paramcon客戶程序釋放的連接*/publicsynchronizedvoidfreeConnection(Connectioncon){//將指定連接加入到向量末尾freeConnections.addElement(con);checkedOut--;notifyAll();}/***從連接池獲得一個(gè)可用連接.如沒有空閑的連接且當(dāng)前連接數(shù)小于最大連接*數(shù)限制,則創(chuàng)建新連接.如原來登記為可用的連接不再有效,則從向量刪除之,*然后遞歸調(diào)用自己以嘗試新的可用連接.*/publicsynchronizedConnectiongetConnection(){Connectioncon=null;if(freeConnections.size()>0){//獲取向量中第一個(gè)可用連接con=(Connection)freeConnections.firstElement();freeConnections.removeElementAt(0);try{if(con.isClosed()){log("從連接池"+name+"刪除一個(gè)無效連接");//遞歸調(diào)用自己,嘗試再次獲取可用連接con=getConnection();}}catch(SQLExceptione){log("從連接池"+name+"刪除一個(gè)無效連接");//遞歸調(diào)用自己,嘗試再次獲取可用連接con=getConnection();}}elseif(maxConn==0||checkedOut<maxConn){con=newConnection();}if(con!=null){checkedOut++;}returncon;}/***從連接池獲取可用連接.可以指定客戶程序能夠等待的最長時(shí)間*參見前一個(gè)getConnection()方法.**@paramtimeout以毫秒計(jì)的等待時(shí)間限制*/publicsynchronizedConnectiongetConnection(longtimeout){longstartTime=newDate().getTime();Connectioncon;while((con=getConnection())==null){try{wait(timeout);}catch(InterruptedExceptione){}if((newDate().getTime()-startTime)>=timeout){//wait()返回的原因是超時(shí)returnnull;}}returncon;}/***關(guān)閉所有連接*/publicsynchronizedvoidrelease(){EnumerationallConnections=freeConnections.elements();while(allConnections.hasMoreElements()){Connectioncon=(Connection)allConnections.nextElement();try{con.close();log("關(guān)閉連接池"+name+"中的一個(gè)連接");}catch(SQLExceptione){log(e,"無法關(guān)閉連接池"+name+"中的連接");}}freeConnections.removeAllElements();}/***創(chuàng)建新的連接*/privateConnectionnewConnection(){Connectioncon=null;try{if(user==null){con=DriverManager.getConnection(URL);}else{con=DriverManager.getConnection(URL,user,password);}log("連接池"+name+"創(chuàng)建一個(gè)新的連接");}catch(SQLExceptione){log(e,"無法創(chuàng)建下列URL的連接:"+URL);returnnull;}returncon;}}}5.3.1登錄界面1.登錄在瀏覽器中輸入:8080/caiwu/login.jsp進(jìn)入肉聯(lián)廠財(cái)務(wù)管理系統(tǒng)的登錄界面如圖5-1-1。管理員登錄 :通過選擇不一樣的登錄身份進(jìn)行系統(tǒng)登錄,管理員登錄賬號:admin密碼:admin選擇管理員身份進(jìn)行登錄,管理員登錄界面login.jsp。系統(tǒng)登錄時(shí)調(diào)用caiservlet/Logion,主要代碼如下: if(user==1){ sql="select*from(select*fromuserswhereadmin='1')swhere='"+name+"'ands.password='"+password+"'";} if(user==0){ sql="select*from(select*fromadminwhereshenfen='0')swhere='"+name+"'ands.password='"+password+"'";}2.退出 當(dāng)用戶點(diǎn)擊退出系統(tǒng)時(shí),系統(tǒng)自動調(diào)用admin/LoginOut.javaServlet實(shí)現(xiàn)退出系統(tǒng)功能,代碼如下:getServletConfig().getServletContext().getRequestDispatcher("/login.jsp").forward(req,resp);系統(tǒng)的登錄界面,如圖5-1:圖5-1登錄界面5.3.2基本設(shè)置1.賬戶資金 當(dāng)系統(tǒng)點(diǎn)擊賬戶資金選項(xiàng)時(shí),系統(tǒng)自動調(diào)用admin/Money.java,并從數(shù)據(jù)庫中獲取企業(yè)的賬戶資金,在jsp/money.jsp。代碼如下:sql="select*fromseeloe"; rs=sta.executeQuery(sql); rs.next();sum=Double.parseDouble(rs.getString(3))+Double.parseDouble((rs.getString(2))); money.setYidong(sum/3); money.setGuding(sum-sum/3); money.setSumMoney(money.getGuding()+money.getYidong()); list.add(money); sql="updatemoneysetsum='"+money.getSumMoney()+"'"; sta.executeUpdate(sql); req.setAttribute("money",list);2.部門信息 當(dāng)系統(tǒng)點(diǎn)擊部門信息選項(xiàng)時(shí),系統(tǒng)自動調(diào)用 admin/DeptInfo.javaServlet,并從數(shù)據(jù)庫獲取企業(yè)的部門信息,在jsp/dept.jsp頁面顯示。代碼如下:dbc=newDBConnect();dbc.prepareStatement("UPDATEpayerSETname=?WHEREid=?");dbc.setBytes(1,Name.getBytes("GB2312"));dbc.setInt(2,Id);dbc.executeUpdate(); 當(dāng)管理員點(diǎn)擊添加時(shí),可以添加部門,系統(tǒng)自動跳轉(zhuǎn)admin/DeptAdd.javaServlet。代碼如下:sql="insertintodepartment(deptname,sum,xishu)values('"+deptname+"','"+sum+"','"+xishu+"')"; caozuoname=(String)session.getAttribute("name"); day=time.get(Calendar.YEAR)+"年"+(time.get(Calendar.MONTH)+1)+"月"+time.get(Calendar.DATE)+"日"+time.get(Calendar.HOUR_OF_DAY)+":"+time.get(Calendar.MINUTE)+":"+time.get(Calendar.SECOND); sql="insertintonote(caozuo,name,date)values('添加部門:"+deptname+"','管理員"+caozuoname+"','"+day+"')"; 當(dāng)管理員點(diǎn)擊修改時(shí),可以修改部門信息,系統(tǒng)自動跳轉(zhuǎn)admin/Update.java。代碼如下: sql="updatedepartmentsetdeptname='"+deptname+"',sum='"+sum+"',xishu='"+xishu+"'wheredeptid='"+id+"'"; System.out.println(sql); sta=users.getStatement(conn); sta.executeUpdate(sql); caozuoname=(String)session.getAttribute("name"); day=time.get(Calendar.YEAR)+"年"+(time.get(Calendar.MONTH)+1)+"月"+time.get(Calendar.DATE)+"日"+time.get(Calendar.HOUR_OF_DAY)+":"+time.get(Calendar.MINUTE)+":"+time.get(Calendar.SECOND); sql="insertintonote(caozuo,name,date)values('修改部門:"+deptname+"','管理員"+caozuoname+"','"+day+"')"; 當(dāng)管理員點(diǎn)擊刪除部門時(shí),確定刪除后,系統(tǒng)自動跳轉(zhuǎn)admin/DeptD.java。代碼如下: sql="selectdeptnamefromdepartmentwheredeptId='"+id+"'"; rss=sta.executeQuery(sql); rss.next(); deptname=rss.getString("deptname"); sql="insertintonote(caozuo,name,date)values('刪除部門:"+deptname+"','管理員"+caozuoname+"','"+day+"')"; sta.executeUpdate(sql);3.業(yè)務(wù)信息 當(dāng)管理員點(diǎn)擊業(yè)務(wù)信息時(shí),系統(tǒng)自動調(diào)用admin/Work.javaServlet,并顯示到j(luò)sp/work.jsp頁面上。代碼如下:DBConnectdbc=null; VectorallMasterVector=newVector(); try{ dbc=newDBConnect(); dbc.prepareStatement("SELECT*FROMmasterorderbyiddesc"); rs=dbc.executeQuery(); while(rs.next()){ Mastermaster=newMaster(); master.setID(rs.getInt("id")); master.setUserName(rs.getString("name")); master.setUserPassword(rs.getString("pass")); master.setJoindate(rs.getString("joindate")); master.setClassid(rs.getInt("classid")); master.setLoginnum(rs.getInt("loginnum")); allMasterVector.add(master); } }catch(Exceptione){ System.err.println("error:"+e); }finally{ try{ dbc.close(); }catch(Exceptione){ e.printStackTrace(); } } returnallMasterVector;} 當(dāng)管理員點(diǎn)擊添加按鈕,系統(tǒng)自動跳轉(zhuǎn)admservlet/WorkAdd.javaServlet,添加信息完成后跳回jsp/workInfo.jsp顯示所有信息。5.3.3工資管理1.工資信息當(dāng)用戶點(diǎn)擊工資信息選項(xiàng)時(shí),系統(tǒng)自動調(diào)用admin/Person.javaServelt,將部門信息顯示在jsp/person.jsp頁面中。通過選擇部門名稱查看該部門內(nèi)部的員工工資時(shí),當(dāng)選擇某部門時(shí),系統(tǒng)自動調(diào)用admint/Bm.javaServelt,系統(tǒng)將部門內(nèi)部員工工資顯示在jsp/Bm.jsp頁面上。PersonInfo.java主要代碼如下:sql="select*fromdepartment"; while(rs.next()){ Deptdept=newDept(); dept.setDeptid(rs.getInt(1)); dept.setDeptname((rs.getString(2))); dept.setSum(rs.getInt(3)); dept.setXishu(rs.getString(4)); list.add(dept); }BmInfo.java主要代碼如下:publicVectorallPay(){DBConnectdbc=null;VectorallPayVector=newVector();try{dbc=newDBConnect();dbc.prepareStatement("SELECT*FROMpayorderbyiddesc");rs=dbc.executeQuery();while(rs.next()){Paypay=newPay();pay.setId(rs.getInt("id"));pay.setClassid(rs.getInt("classid"));pay.setPayerid(rs.getInt("payerid"));pay.setPaytypeid(rs.getInt("paytypeid"));pay.setMoney(rs.getInt("money"));pay.setInout(rs.getInt("inout"));pay.setProject(rs.getString("project"));pay.setMessage(rs.getString("message"));pay.setAddtime(rs.getString("addtime"));allPayVector.add(pay);}}catch(Exceptione){System.err.println(e);}finally{try{dbc.close();}catch(Exceptione){e.printStackTrace();}}returnallPayVector;}2.參數(shù)設(shè)定當(dāng)用戶點(diǎn)擊參數(shù)設(shè)定,系統(tǒng)調(diào)用admin/Pay.javaServlet,系統(tǒng)將參數(shù)信息顯示在sp/payInfo.jsp頁面上。當(dāng)修改過后點(diǎn)擊提交時(shí),系統(tǒng)調(diào)用admin/pdate.javaServlet,系統(tǒng)將數(shù)據(jù)存入數(shù)據(jù)庫后,再次跳轉(zhuǎn)jsp/pay.jsp頁面上,顯示修改后的信息,如圖5-2:PayInfo.java主要代碼如下:dbc=newDBConnect();dbc.prepareStatement("INSERTINTOmaster(name,pass,joindate,classid,truename,ipaddress)VALUES(?,?,?,?,?,?)");dbc.setByt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025房屋銷售合同模板
- 2025精簡房屋買賣合同范本
- 2025標(biāo)準(zhǔn)企業(yè)合同合同協(xié)議模板
- 2025年廣東省中考二模生物試題(含答案)
- 瑜伽館免責(zé)合同協(xié)議
- 電線電纜回收合同協(xié)議
- 疆農(nóng)村勞動合同協(xié)議
- 電站轉(zhuǎn)讓合同協(xié)議書模板
- 電力施工隊(duì)合同協(xié)議
- 監(jiān)控合同補(bǔ)充協(xié)議范本
- 大數(shù)據(jù)分析與應(yīng)用智慧樹知到期末考試答案章節(jié)答案2024年西安理工大學(xué)
- 北京2024年北京市朝陽區(qū)教育委員會所屬事業(yè)單位招聘筆試歷年典型考題及考點(diǎn)附答案解析
- 衛(wèi)生院基本公共衛(wèi)生服務(wù)項(xiàng)目工作計(jì)劃
- 枸櫞酸氯米芬促排卵療效的預(yù)測指標(biāo)
- JBT 14588-2023 激光加工鏡頭 (正式版)
- DL-T5001-2014火力發(fā)電廠工程測量技術(shù)規(guī)程
- 2024-2034年年版礦泉水項(xiàng)目融資商業(yè)計(jì)劃書
- 花卉市場攤位租賃合同
- 2024-2030年中國順式1,4-丁烯二醇行業(yè)市場競爭態(tài)勢及未來趨勢研判報(bào)告
- 供應(yīng)商現(xiàn)場考察表
- 2020年度臨床護(hù)理技術(shù)操作規(guī)程及質(zhì)量標(biāo)準(zhǔn)
評論
0/150
提交評論