版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 1 需求分析</b></p><p> 1.1 課題設(shè)計(jì)目的</p><p> 使用面向?qū)ο笳Z(yǔ)言java設(shè)計(jì)一個(gè)員工工資管理程序,有顯示、儲(chǔ)存、顯示、修改和刪除功能。每個(gè)員工有員工工號(hào)、姓名、基礎(chǔ)工資、職務(wù)工資、獎(jiǎng)金和工資總額。其中員工工號(hào)不需要用戶(hù)輸入,存儲(chǔ)時(shí),數(shù)據(jù)庫(kù)系統(tǒng)按順序自動(dòng)遞增。</p><p>&
2、lt;b> 1.2 功能要求</b></p><p> (1) 查詢(xún)功能中,用戶(hù)查詢(xún)時(shí)可以選擇按工號(hào)查詢(xún),也可以選擇姓名進(jìn)行查詢(xún),也可以選擇查詢(xún)工資總額在某個(gè)范圍內(nèi)的員工的工資信息,比如查詢(xún)工資總額在1000~2000的全體員工的信息,還以查詢(xún)?nèi)w員工工資,并且選擇按某種方式排序。</p><p> ?。?)修改功能中,用戶(hù)可以選擇修改方式,比如修改某一行,即選擇修改
3、某個(gè)員工的工資,此時(shí)需要輸入修改項(xiàng),即基礎(chǔ)工資、職務(wù)工資和獎(jiǎng)金中的一項(xiàng),因?yàn)楣べY總額是基礎(chǔ)工資、職務(wù)工資和獎(jiǎng)金的綜合,故不能直接修改,同時(shí)還需要輸入工號(hào),為了避免誤改,所以需要確認(rèn)修改后才能修改;也可以選擇修改某一列,即選擇修改全體員工的某一項(xiàng)工資,所以還需要選擇修改項(xiàng),其中的修改項(xiàng)也只有基礎(chǔ)工資、職務(wù)工資和獎(jiǎng)金三項(xiàng)。</p><p> (3)儲(chǔ)存功能即增加用戶(hù)的功能中,用戶(hù)不需要輸入員工工號(hào),但必須輸入員工姓
4、名,其他幾項(xiàng)均可以不輸入,基礎(chǔ)工資、職務(wù)工資、獎(jiǎng)金和工資總額均被系統(tǒng)初始化為零。</p><p> ?。?)刪除功能中,必須慎重操作,刪除時(shí)必須輸入員工工號(hào),先查詢(xún)出來(lái),把員工的各項(xiàng)信息顯示在下方的文本框中,在用戶(hù)點(diǎn)擊確認(rèn)刪除時(shí)系統(tǒng)就將該工號(hào)的用戶(hù)的各項(xiàng)信息從數(shù)據(jù)庫(kù)中刪除。</p><p> 在此說(shuō)明一點(diǎn),由于工資總額是員工基礎(chǔ)工資、職務(wù)工資和獎(jiǎng)金的綜合?;A(chǔ)工資、職務(wù)工資和獎(jiǎng)金中的任意
5、一項(xiàng)改變都會(huì)影響工資總額的數(shù)值,當(dāng)修改頻繁是,將會(huì)大大增加數(shù)據(jù)庫(kù)系統(tǒng)的負(fù)擔(dān),且設(shè)計(jì)起來(lái)更加繁瑣,所以工資總額并沒(méi)有真正的儲(chǔ)存在數(shù)據(jù)庫(kù)中, 每一次的查詢(xún)或者其他顯示工資總額的地方全都是用SQL或者HQL的函數(shù)查詢(xún)語(yǔ)句來(lái)實(shí)現(xiàn)的。</p><p><b> 1.3 設(shè)計(jì)流程</b></p><p> 設(shè)計(jì)流程采用先界面后模型</p><p>&l
6、t;b> 圖1</b></p><p><b> 1.4 工資表模式</b></p><p> 根據(jù)上述目的和各項(xiàng)功能要求,選擇如表1的數(shù)據(jù)庫(kù)表來(lái)儲(chǔ)存員工各項(xiàng)工資信息其中的Id號(hào)即為員工工號(hào)。</p><p><b> 表1</b></p><p><b> 1
7、.5 開(kāi)發(fā)環(huán)境</b></p><p><b> JDK1.6</b></p><p> Myeclipse6.5</p><p><b> Mysql5.22</b></p><p> Hibernate annotation3.4</p><p>
8、 測(cè)試工具:junit4.7</p><p><b> 注明:</b></p><p> ?。?)在詳細(xì)設(shè)計(jì)中的代碼均為局部的關(guān)鍵代碼,完整代碼均在附錄里;</p><p> ?。?)數(shù)據(jù)庫(kù)里的信息只為了測(cè)試,與其含義沒(méi)有關(guān)系;</p><p> (3)所有模塊的模樣圖中,圓角框表示容器,直角框表示組件。</p
9、><p><b> 2 詳細(xì)設(shè)計(jì)</b></p><p> 2.1 外層模塊設(shè)計(jì)</p><p> 2.1.1 外層模塊模樣</p><p> 根據(jù)個(gè)人設(shè)計(jì)思路,設(shè)計(jì)的外側(cè)模塊的模樣如圖2</p><p><b> 圖2</b></p><p>
10、; 外側(cè)模塊設(shè)計(jì),首先新建一個(gè)叫MyApplet的類(lèi),并繼承java下applet包中的Applet類(lèi),在這里,也可以自己定義一個(gè)自己的框架的類(lèi),去繼承Frame類(lèi),但是簡(jiǎn)單起見(jiàn),我就定義了自己的框架的類(lèi),并繼承了Applet類(lèi),這樣有些Applet已經(jīng)實(shí)現(xiàn)的功能就不需要我自己去實(shí)現(xiàn)了,比如當(dāng)你點(diǎn)擊這個(gè)類(lèi)運(yùn)行而得的窗口的右上角的“X”時(shí),窗口就關(guān)閉了,如果沒(méi)有繼承Applet類(lèi),那么這些功能將由自己實(shí)現(xiàn),查看java的那套api會(huì)發(fā)現(xiàn)
11、里面有個(gè)一屬性常量,給定義的窗口設(shè)置該屬性就可以解決。</p><p> 參考印旻主編的《java與面向?qū)ο蟪绦蛟O(shè)計(jì)教程》第八章的布局設(shè)計(jì)可知:FlowLayout的布局方式雖然非常簡(jiǎn)單,但是這種布局的容器會(huì)將容器的里的組件按照加入的順序一個(gè)個(gè)從左往右,從上往下的排列。這樣的布局顯然不合適,也不美觀。而B(niǎo)orderLayout則將整個(gè)容器分為東、西、南、北、中,這樣的布局比較死,限制了設(shè)計(jì)者自己定義布局的功能。
12、GridLayout的布局形式,雖然給了設(shè)計(jì)者自己定義布局的一部分功能,但是還是存在很大一部分的限制,還有CardLayout(卡片布局設(shè)計(jì))和GridBagLayout,卡片布局設(shè)計(jì)顯然是可以采用的,但是不能只用卡片布局設(shè)計(jì),因?yàn)橹挥盟@得單一,而且功能不全。剩下的GridBagLayout的布局設(shè)計(jì)是很適合我想象的布局的,因?yàn)檫@種布局設(shè)計(jì)給了設(shè)計(jì)者很大的自定義空間,并且各個(gè)行或者列的大小都可以由設(shè)計(jì)者自己指定,也不要求容器中的組件按
13、個(gè)空格地放。</p><p> 經(jīng)過(guò)上述外層模塊布局設(shè)計(jì)的分析,最適合外層模塊布局設(shè)計(jì)的方式就是GridBagLayout。GridBagLayout布局設(shè)計(jì)方式的使用步驟如下:</p><p> 創(chuàng)建GridBagLayout的對(duì)象;</p><p> 將容器的布局設(shè)置成這個(gè)對(duì)象;</p><p> 創(chuàng)建GridBagConstra
14、ints對(duì)象,并指定其各項(xiàng)屬性;</p><p> 設(shè)置GridBagConstraints對(duì)象和組件的關(guān)聯(lián);</p><p><b> 將組件加入容器中。</b></p><p> 為了使窗口中的標(biāo)簽和文本框等東西的大小可以隨窗口的變大而變大,或者縮小而縮小,所以在外層容器里面的組件不是直接加入外層容器的,本質(zhì)是在外層容器中加入子容器,
15、然后在子容器中加入組件。 外層容器的對(duì)子容器放置的布局是GridBagLayout布局設(shè)計(jì),而子容器中又使用簡(jiǎn)單布局設(shè)計(jì)。所以整體上是使用混合布局設(shè)計(jì),這樣可以實(shí)現(xiàn)更多的界面設(shè)計(jì)樣式。</p><p> 2.1.2 外層模塊代碼解析</p><p> ?。?)MyApplet類(lèi)繼承Applet,所以本身就是一個(gè)容器,不需要自己再去創(chuàng)建外層容器了,就把this(本容器)當(dāng)成外層容器就可以了
16、。對(duì)本容器采用GridBagLayout的布局設(shè)計(jì),按照上述的步驟:</p><p> 創(chuàng)建GridBagLayout布局對(duì)象,即GridBagLayout gbLayout = new GridBagLayout();</p><p> 設(shè)置本容器為該布局對(duì)象,即 this.setLayout(gbLayout);</p><p> ?。?)創(chuàng)建一個(gè)大小為3的
17、Panel數(shù)組p,并實(shí)例化三個(gè)Panel。</p><p> (3)創(chuàng)建一個(gè)顯示系統(tǒng)名稱(chēng)的L abel類(lèi)型的tittle,設(shè)置其中字體的大小和顏色,并將</p><p> Label加入到Panel[0]中的語(yǔ)句分別是:Label tittle = new Label("工資管理系統(tǒng)");</p><p> tittle.setFont(n
18、ew Font("Serif",50,50)); tittle.setBackground(Color.GREEN); p[0].add(tittle);</p><p> 并且對(duì)Panel[0]采用Gridlayout的布局設(shè)計(jì),由于只需添加標(biāo)題這樣一個(gè)組件就可以了,所以設(shè)置為一行一列:p[0] = new Panel(new GridLayout(1,1))。 并用GridBagLa
19、yout的布局設(shè)計(jì)將Panel1加入到容器MyApplet中,具體實(shí)現(xiàn)代碼如下:</p><p> gbc.gridwidth = GridBagConstraints.BOTH;//占據(jù)橫向剩余空間</p><p> gbc.weightx = 1;//橫向可擴(kuò)展</p><p> gbc.gridwidth = GridBagConstraints.RE
20、MAINDER;</p><p> gbLayout.setConstraints(p[0], gbc);//將gridbagconstraints對(duì)象與組建相聯(lián)系</p><p> add(p[0]);</p><p> ?。?)用GridLayout的布局設(shè)計(jì)分別將查詢(xún)按鈕、儲(chǔ)存按鈕、修改按鈕和刪除按鈕加入Panel[1]中,然后用GridBagLayou
21、t的布局設(shè)計(jì)將Panel[1]加入MyApplet中。具體過(guò)程是定義各一個(gè)四個(gè)元素的Button類(lèi)型的數(shù)組,并實(shí)例化其中每個(gè)元素。參數(shù)分別為“查詢(xún)”、“儲(chǔ)存”、“修改”和“刪除”。并依次將該數(shù)組的每個(gè)按鈕加入到Panel[1]中。其實(shí)現(xiàn)代碼如下:</p><p> Button[] b = new Button[4];</p><p> b[0] = new Button("
22、查詢(xún)");</p><p> b[0].addActionListener(this);//注冊(cè)監(jiān)聽(tīng)</p><p> b[1] = new Button("儲(chǔ)存");</p><p> b[1].addActionListener(this);</p><p> b[2] = new Button(&q
23、uot;修改");</p><p> b[2].addActionListener(this);</p><p> b[3] = new Button("刪除");</p><p> b[3].addActionListener(this);</p><p> p[1] = new Panel(new
24、 GridLayout(1,4));</p><p> for(int i=0;i<4;i++){</p><p> p[1].add(b[i]);</p><p> p[1].add(new Label(" "));//將按鈕分開(kāi)</p><p><b> }</b></
25、p><p> gbc.insets = new Insets(20,4,4,4);</p><p> gbLayout.setConstraints(p[1], gbc);</p><p> add(p[1]);</p><p> (5) 初始化的Panel數(shù)組的第三個(gè)元素p[3]采用卡片的布局設(shè)計(jì),卡片設(shè)計(jì)的顯示形式是讓要顯示的東西
26、像撲克一樣疊起來(lái),每次都只能顯示最表面的一張,其他的都在下方,不顯示。目的是使得查詢(xún)模塊、儲(chǔ)存模塊、修改模塊和刪除模塊以卡片的形式顯示在四個(gè)選擇功能的按鈕下方。讓頁(yè)面看起來(lái)簡(jiǎn)潔、清晰、明朗。</p><p> CardLayout的使用步驟:</p><p> 創(chuàng)建一個(gè)CardLayout對(duì)象作為布局編輯器: Mycard = new CardLayout();</p>
27、<p> 將容器p[3]設(shè)置為Mycard 的布局:p[3].setLayout(Mycard);</p><p> 將p[3]加入MyApplet中;</p><p> 設(shè)置中各組件的顯示方式。</p><p> 本設(shè)計(jì)中,p[3]中各組件的顯示方式只有設(shè)置為按名顯示最為適合,窗口的顯示如圖3,創(chuàng)建到顯示的實(shí)現(xiàn)代碼如下:</p>&
28、lt;p> QueryPanel qp = new QueryPanel();//查詢(xún)模塊</p><p> addPanel ap =new addPanel();//增加用戶(hù)模塊</p><p> updatePanel up = new updatePanel();//修改模塊</p><p> deletePanel dp = new dele
29、tePanel();//刪除模塊</p><p> p[2] = new Panel(myCard);</p><p> p[2].setLayout(myCard);</p><p> p[2].add(qp,"查詢(xún)");</p><p> p[2].add(ap,"儲(chǔ)存");</p&g
30、t;<p> p[2].add(up,"修改");</p><p> p[2].add(dp,"刪除");</p><p> gbc.insets = new Insets(20,4,4,4);</p><p> gbLayout.setConstraints(p[2], gbc);</p>
31、<p> add(p[2]);</p><p> //事件處理:當(dāng)用戶(hù)點(diǎn)擊四大功能按鈕時(shí),下方顯示對(duì)應(yīng)的功能的子模塊</p><p> public void actionPerformed(ActionEvent e) {</p><p> myCard.show(p[2], e.getActionCommand());</p>
32、<p><b> }</b></p><p><b> 圖3</b></p><p> 2.1.3 外層模塊事件處理</p><p> ?。?)分別將查詢(xún)按鈕、儲(chǔ)存按鈕、修改按鈕和刪除按鈕注冊(cè)給監(jiān)聽(tīng)器,并在類(lèi)頭的繼承類(lèi)后面加上implements ActionListener實(shí)現(xiàn)接口ActionListe
33、ner之后,重寫(xiě)接口里定義的抽象方法public void actionPerformed(ActionEvent e);在該方法里設(shè)計(jì)按名顯示功能模塊的程序,即</p><p> public void actionPerformed(ActionEvent e) {</p><p> myCard.show(p[2], e.getActionCommand());</p&g
34、t;<p><b> }</b></p><p> 2.2 查詢(xún)模塊設(shè)計(jì)</p><p> 2.2.1 查詢(xún)模塊模樣</p><p> 查詢(xún)模塊的模樣如圖4所示。</p><p><b> 圖4</b></p><p> 查詢(xún)模塊的設(shè)計(jì),新建一個(gè)叫Q
35、ueryPanel的java類(lèi),這各類(lèi)也繼承了Applet類(lèi),所以本身就是一個(gè)容器。并對(duì)本容器設(shè)置GridBagLayout的布局設(shè)計(jì),從上往下,加入三個(gè)子容器。第一個(gè)叫select,用來(lái)裝載查詢(xún)方式下拉框、查詢(xún)范圍下拉框、排列下拉框、排序下拉框和查詢(xún)按鈕;第二個(gè)容器id,作用是當(dāng)用用戶(hù)在select容器中的查詢(xún)方式選擇為“按工號(hào)查詢(xún)”時(shí),光標(biāo)跳轉(zhuǎn)到id容器的id輸入框,之后,當(dāng)用戶(hù)點(diǎn)擊“按工號(hào)查詢(xún)”按鈕時(shí),結(jié)果顯示文本框中顯示用戶(hù)輸入
36、的id號(hào)即工號(hào)的員工的工資信息;第二個(gè)容器叫name,作用是當(dāng)用戶(hù)點(diǎn)擊按姓名查詢(xún)的時(shí)候,光標(biāo)跳轉(zhuǎn)到提示輸入姓名的標(biāo)簽的后面的輸入框中,同第二個(gè)一樣,當(dāng)用戶(hù)點(diǎn)擊“按姓名查詢(xún)”按鈕后,所輸入姓名的員工的工作信息會(huì)顯示在下方的文本里;最下方的就用文本框了,作用上述已經(jīng)說(shuō)明了。缺省情況下,即用戶(hù)什么都沒(méi)有選擇的情況下,直接點(diǎn)擊“查詢(xún)”按鈕后,將顯示全體員工的工資信息。</p><p> 查詢(xún)方式下拉框中有按工號(hào)、按姓名
37、和默認(rèn)全部的選項(xiàng);查詢(xún)范圍的下拉框中有各個(gè)階段范圍的對(duì)應(yīng)選擇,默認(rèn)是范圍不限;排列下拉框中有按基礎(chǔ)工資、職務(wù)工資、獎(jiǎng)金、工資總額和默認(rèn)是工號(hào)的選項(xiàng);排序下拉框中就升序和降序兩種選擇,默認(rèn)是升序排序。這些下拉框的中的每一個(gè)選項(xiàng)都是任由用戶(hù)選擇的,但是選擇的項(xiàng)不能相互矛盾,比如選擇了按工號(hào)查詢(xún),就不能在輸入姓名的輸入框中輸入信息。這些跳轉(zhuǎn)控制,在事件處理中有詳細(xì)的設(shè)計(jì)。</p><p> 布局設(shè)計(jì)的代碼和外層模塊設(shè)
38、計(jì)的完全一樣,不再重復(fù),代碼中有注明,下拉框是用一個(gè)Choice類(lèi)型的數(shù)組來(lái)表示的,窗口顯示如圖5。實(shí)現(xiàn)下拉框的代碼如下:</p><p> Choice c[] = new Choice[5];//下拉框數(shù)組</p><p> for(int i=0;i<4;i++)</p><p><b> {</b></p>&
39、lt;p> c[i] = new Choice();</p><p> c[i].addItemListener(this);</p><p> select.add(c[i]);</p><p><b> }</b></p><p> c[0].add("查詢(xún)方式");</p
40、><p> c[0].add("按工號(hào)");</p><p> c[0].add("按姓名");</p><p> c[0].add("默認(rèn)是全部");</p><p> c[1].add("查詢(xún)范圍");</p><p> c[
41、1].add("0-2000");</p><p> c[1].add("2000-5000");</p><p> c[1].add("5000-8000");</p><p> c[1].add("800-10000");</p><p>
42、 c[1].add("10000-20000");</p><p> c[1].add(">20000");</p><p> c[1].add("默認(rèn)全部");</p><p> c[2].add("排列");</p><p> c[2].ad
43、d("按工資總額");</p><p> c[2].add("按基礎(chǔ)工資");</p><p> c[2].add("按職務(wù)工資");</p><p> c[2].add("按獎(jiǎng)金");</p><p> c[2].add("默認(rèn)
44、按工號(hào)");</p><p> c[3].add("排序");</p><p> c[3].add("升序");</p><p> c[3].add("降序");</p><p> c[3].add("默認(rèn)升序");</p>
45、<p><b> 圖5</b></p><p> 2.2.2 查詢(xún)模塊事件處理</p><p> 該模塊中共有四個(gè)下拉框,一個(gè)工號(hào)輸入框,一個(gè)姓名輸入文本框和一個(gè)現(xiàn)實(shí)文本框,第一個(gè)個(gè)查詢(xún)方式下拉框。</p><p> ?。?)當(dāng)用戶(hù)選擇的是查詢(xún)方式或者默認(rèn)全部時(shí),系統(tǒng)將查詢(xún)的對(duì)象定位整個(gè)員工工作表;第二個(gè)是供用戶(hù)可以選擇查詢(xún)
46、的范圍的下拉框,這里的范圍是指工資總額在所在的范圍,比如用戶(hù)選擇8000~10000則表示用戶(hù)選擇了工資總額在8000~10000的員工,上下限選擇均包括端點(diǎn)值;第三個(gè)是排列下拉框,表示用戶(hù)選擇按什么什么數(shù)值排列,結(jié)合第四個(gè)排序下拉框的意思就是用戶(hù)選擇按什么的數(shù)值以什么的順序排列;這四個(gè)下拉框均有默認(rèn)值,用戶(hù)不顯示的做任何選擇,當(dāng)用戶(hù)直接點(diǎn)擊查詢(xún)按鈕時(shí),系統(tǒng)將查詢(xún)?nèi)繂T工則工資信息,按工號(hào)的升序排列打印在顯示文本框。</p>
47、<p> ?。?)當(dāng)用在查詢(xún)方式下拉框中選擇按工號(hào)查詢(xún)時(shí),系統(tǒng)自動(dòng)跳轉(zhuǎn)到工號(hào)輸入框,提示用戶(hù)輸入員工工號(hào),然后點(diǎn)擊按工號(hào)查詢(xún)按鈕,系統(tǒng)查詢(xún)用戶(hù)所輸入的工號(hào)的工資信息,并打印到顯示文本框。關(guān)鍵代碼如下:</p><p> if(c[0].getSelectedIndex()==0||c[0].getSelectedIndex()==3)//選擇查詢(xún)方式</p><p>
48、c[1].requestFocus();</p><p> else if(c[0].getSelectedIndex()==1){</p><p> inputId.requestFocus();</p><p> inputId.setText("轉(zhuǎn)到這里");</p><p> inputName.setTe
49、xt("");</p><p><b> }</b></p><p> ?。?)當(dāng)用戶(hù)在查詢(xún)方式下拉框中選擇按姓名查詢(xún)時(shí),系統(tǒng)將自動(dòng)跳轉(zhuǎn)到姓名輸入框,提示用戶(hù)輸入姓名。</p><p> else if(c[0].getSelectedIndex()==2){</p><p> inputNam
50、e.requestFocus();</p><p> inputName.setText("轉(zhuǎn)到這里");</p><p> inputId.setText("");</p><p><b> }</b></p><p> 2.3 儲(chǔ)存模塊設(shè)計(jì)</p><
51、;p> 2.3.1 儲(chǔ)存模塊模樣</p><p> 儲(chǔ)存模塊的模樣如圖6所示。</p><p><b> 圖6</b></p><p> 儲(chǔ)存模塊的設(shè)計(jì),新建一個(gè)叫AddPanel的java類(lèi),繼承了Applet類(lèi),采用的布局設(shè)計(jì)和查詢(xún)模塊的完全一樣,不再贅述。在儲(chǔ)存子容器中添加去的是三個(gè)Panel。第一個(gè)是用來(lái)顯示提示性標(biāo)簽的,
52、即顯示姓名、基礎(chǔ)工資、職務(wù)工資、獎(jiǎng)金、輸入對(duì)應(yīng)信息,其作用是提示用戶(hù)根據(jù)提示,在對(duì)應(yīng)的輸入框中輸入合法的信息;第二個(gè)Panel就是在第一個(gè)提示標(biāo)簽的下方添加相對(duì)應(yīng)的輸入框,以便用戶(hù)對(duì)應(yīng)輸入信息,這個(gè)Panel的右端添加了兩個(gè)按鈕,前一個(gè)是“增加員工”,是往數(shù)據(jù)庫(kù)存數(shù)據(jù)的事件源,第二個(gè)按鈕是“清空”,用來(lái)清空全部輸入框中殘留的信息;第三個(gè)就是一個(gè)文本框,作用就是顯示新增員工的信息。</p><p> 其中的提示性
53、標(biāo)簽是用Label數(shù)組來(lái)實(shí)現(xiàn)的,并且在中間加入了空的標(biāo)簽,目的是是標(biāo)簽分開(kāi),不至于排列太緊密,影響美觀,窗口顯示如圖7。實(shí)現(xiàn)代碼如下:</p><p> L[0] = new Label("姓 名");</p><p> L[1] = new Label("基礎(chǔ)工資");</p><p> L[2] = ne
54、w Label("職務(wù)工資");</p><p> L[3] = new Label("獎(jiǎng) 金");</p><p> L[4] = new Label("輸入對(duì)應(yīng)信息");</p><p> for(int i=0;i<4;i++)</p><p><
55、;b> {</b></p><p> t[i] = new TextField();</p><p> tPanel.add(t[i]);</p><p> LPanel.add(L[i]);</p><p><b> }</b></p><p> tPanel.ad
56、d(add);</p><p> tPanel.add(re);</p><p> tPanel.add(new Label(""));</p><p> LPanel.add(L[4]);</p><p> LPanel.add(new Label(""));</p><p
57、> LPanel.add(new Label(""));</p><p> 2.3.2 儲(chǔ)存模事件處理</p><p> 本模塊共有四個(gè)輸入文本框,一個(gè)增加員工按鈕,一個(gè)清空按鈕和一個(gè)顯示文本框。當(dāng)用用戶(hù)點(diǎn)擊增加員工按鈕時(shí),系統(tǒng)將讀取四個(gè)輸入文本框中的內(nèi)容,在姓名不為空,三項(xiàng)金額為整數(shù)的情況下,系統(tǒng)將員工信息存入數(shù)據(jù)庫(kù),并在下方的顯示文本框中打印剛增加的員工
58、的工號(hào)、姓名和工資信息。當(dāng)用戶(hù)點(diǎn)擊清空按鈕時(shí),系統(tǒng)將四個(gè)輸入文本框中的殘留信息全部清空。其中的flag不只是在這兩個(gè)地方處理,在討論異常的時(shí)候會(huì)詳細(xì)介紹。操作實(shí)例如圖7所示。</p><p> 這段內(nèi)容的關(guān)鍵代碼如下:</p><p> boolean flag;</p><p> if(e.getSource()==re)</p><p&
59、gt; for(int i=0;i<4;i++)</p><p> t[i].setText("");</p><p> if(e.getSource()==add)//插入數(shù)據(jù)</p><p><b> {</b></p><p> flag=true;</p>&l
60、t;p> if(t[0].getText().equals("")){</p><p> flag = false;</p><p> result.setText("增加用戶(hù)失?。罕仨気斎胗脩?hù)名!");</p><p><b> }else </b></p><p>
61、; name = t[0].getText();</p><p><b> if(flag){</b></p><p> HibernateOperate q = new HibernateOperate();</p><p> q.testsave(name, basicWage, postWage, bonus);</
62、p><p><b> }</b></p><p><b> 圖7</b></p><p> 2.4 修改模塊設(shè)計(jì)</p><p> 2.4.1修改模塊模樣</p><p> 修改模塊如圖8所示。</p><p><b> 圖8<
63、/b></p><p> 修改模塊的設(shè)計(jì),新建一個(gè)叫UpdatePanel的java類(lèi),布局設(shè)計(jì)同上。修改子容器比較簡(jiǎn)單,里面就裝有個(gè)一子容器select,容器select中添加了下拉框“修改方式”、下拉框“修改項(xiàng)”、標(biāo)簽“輸入新值”、工號(hào)輸入框、標(biāo)簽“輸入新值”、新值輸入框、修改按鈕。修改方式中有修改行和修改列兩個(gè)選項(xiàng);改項(xiàng)中可以選擇的只有基礎(chǔ)工資、職務(wù)工資和獎(jiǎng)金;由于是修改,所以每項(xiàng)都必須輸入或者選擇
64、,否則不執(zhí)行操作。該模塊中各部分的實(shí)現(xiàn)代碼前面均有提到過(guò),不再贅述,窗口顯示如圖9所示。</p><p><b> 圖9</b></p><p> 2.4.2 修改模塊事件處理</p><p> 當(dāng)用戶(hù)點(diǎn)擊主模塊中的修改按鈕時(shí),下方將顯示修改模塊的界面。修改界面中結(jié)構(gòu)比較簡(jiǎn)單,兩個(gè)下拉框和兩個(gè)輸入文本框,兩個(gè)下拉框分別是修改方式的選擇和修
65、改項(xiàng)的選擇。</p><p> ?。?)修改方式中有修改行和修改列兩種選擇,修改行是修改一行,然后選擇修改項(xiàng),這種情況必須輸入工號(hào),新值在不輸入的情況下將以0為缺省型,但是不推薦。</p><p> ?。?)當(dāng)用戶(hù)選擇的修改方式為修改列時(shí),不需要輸入工號(hào),此時(shí),工號(hào)輸入框不能進(jìn)行輸入,只要為輸入框設(shè)置屬性setFocusable(false);即可;當(dāng)用戶(hù)選擇修改行時(shí)重置過(guò)來(lái)即setFoc
66、usable(true);即可。</p><p> ?。?)做完(1),(2)的選擇后,用戶(hù)點(diǎn)擊修改按鈕時(shí),系統(tǒng)將彈出確認(rèn)修改的對(duì)話(huà)框,讓</p><p> 用戶(hù)選擇是都確認(rèn)修改,如果用戶(hù)點(diǎn)擊對(duì)話(huà)框上的確認(rèn),系統(tǒng)將執(zhí)行修改。如果修改成功,系統(tǒng)將會(huì)彈出修改成功的對(duì)話(huà)框。操作實(shí)例如圖9,關(guān)鍵代碼如下:</p><p><b> int row;</b
67、></p><p> if(e.getActionCommand()=="修改"){</p><p><b> try {</b></p><p> num = Integer.parseInt(no.getText());</p><p> } catch (NumberFormatE
68、xception e2) {</p><p><b> num=-1;</b></p><p><b> }</b></p><p><b> try {</b></p><p> newValue = Integer.parseInt(data.getText())
69、;</p><p> } catch (NumberFormatException e1) {</p><p> newValue = -1;</p><p><b> }</b></p><p> if(or==1 && !colum.equals("xx") &
70、;& num>=0 && newValue>=0){//選擇的是修改行</p><p> y_n = new Dialog(this.y_n,"確定修改?",true);</p><p> //實(shí)例化一個(gè)對(duì)話(huà)框</p><p> Panel p1 = new Panel();</p>&l
71、t;p> Y = new Button("yes");</p><p> Y.addActionListener(this);</p><p> N = new Button("no");</p><p> N.addActionListener(this);</p><p> p1.a
72、dd(new Label("確認(rèn)請(qǐng)按“yes”,撤銷(xiāo)請(qǐng)按“no”"));</p><p> p1.add(Y);</p><p> p1.add(N);</p><p> y_n.add("Center",p1);</p><p> y_n.pack();</p><p
73、> y_n.setVisible(true);</p><p> }else if(or==2 && !colum.equals("xx")&& newValue>=0){</p><p> y_n = new Dialog(this.y_n,"確定修改?",true);</p><
74、;p> Panel p1 = new Panel();</p><p> Y = new Button("yes");</p><p> Y.addActionListener(this);</p><p> N = new Button("no");</p><p> N.addAct
75、ionListener(this);</p><p> p1.add(new Label("確認(rèn)請(qǐng)按“yes”,撤銷(xiāo)請(qǐng)按“no”"));</p><p> p1.add(Y);</p><p> p1.add(N);</p><p> y_n.add("Center",p1);</p
76、><p> y_n.pack();</p><p> y_n.setVisible(true);</p><p><b> }else</b></p><p><b> {</b></p><p> y_n = new Dialog(this.y_n,"信息
77、不全",true);</p><p> Panel p1 = new Panel();</p><p> Y = new Button("yes");</p><p> Y.addActionListener(this);</p><p> p1.add(new Label("您選擇的條件有誤,
78、請(qǐng)重新選填;按“yes”繼續(xù)補(bǔ)全"));</p><p> p1.add(Y);</p><p> y_n.add("Center",p1);</p><p> y_n.pack();</p><p> y_n.setVisible(true);</p><p><b&
79、gt; }</b></p><p><b> }</b></p><p> if(e.getSource()==Y&& or==1 && !colum.equals("xx") && num>=0 && newValue>=0){//選擇修改行</p
80、><p> y_n.dispose();</p><p> HibernateOperate q = new HibernateOperate();</p><p> q.testUpdateByRow(colum, num, newValue);</p><p> success = new Dialog(this.succ
81、ess,"修改成功" ,true);</p><p> Panel p2 = new Panel();</p><p> p2.add(new Label("修改成功!"));</p><p> confirm = new Button("確認(rèn)");</p><p> con
82、firm.addActionListener(this);</p><p> p2.add(confirm);</p><p> success.add(p2);</p><p> success.pack();</p><p> success.setVisible(true);</p><p> }els
83、e if(e.getSource()==Y && or==2 && !colum.equals("xx")&& newValue>=0){//確認(rèn)修改列</p><p> y_n.dispose();</p><p> HibernateOperate q = new HibernateOperate();&l
84、t;/p><p> row = q.testUpdateByColum(colum, newValue);</p><p> if(row>0){</p><p> success = new Dialog(this.success,"修改成功" ,true);</p><p> Panel p2 = new P
85、anel();</p><p> p2.add(new Label("修改成功!"));</p><p> confirm = new Button("確認(rèn)");</p><p> confirm.addActionListener(this);</p><p> p2.add(confirm)
86、;</p><p> success.add(p2);</p><p> success.pack();</p><p> success.setVisible(true);</p><p><b> }</b></p><p> }else if(e.getActionComm
87、and()=="no"){</p><p> y_n.dispose();</p><p> success = new Dialog(this.success,"修改失敗" ,true);</p><p> Panel p2 = new Panel();</p><p> p2.add(
88、new Label("修改失??!"));</p><p> confirm = new Button("確認(rèn)");</p><p> confirm.addActionListener(this); </p><p> p2.add(confirm);</p><p> success.a
89、dd(p2);</p><p> success.pack();</p><p> success.setVisible(true); </p><p><b> }else</b></p><p> y_n.dispose();</p><p> if(e.getActionCo
90、mmand()=="確認(rèn)"){</p><p> success.dispose();</p><p><b> }</b></p><p> 2.5 刪除模塊設(shè)計(jì)</p><p> 2.5.1 刪除模塊模樣</p><p> 刪除模塊模樣如圖10所示。</p&
91、gt;<p><b> 圖10</b></p><p> 刪除模塊的設(shè)計(jì),新建一個(gè)叫DeletePanel的java類(lèi),布局設(shè)計(jì)同上。刪除容器中加入了一個(gè)子容器select,Panel select中加入了提示輸入工號(hào)的標(biāo)簽、工輸入框、空標(biāo)簽和刪除按鈕;下方是一個(gè)和select平級(jí)的文本框,用來(lái)顯示用戶(hù)刪除的員工的信息。功能和實(shí)現(xiàn)都非常簡(jiǎn)單,沒(méi)有超出前面設(shè)計(jì)的范圍,故簡(jiǎn)略說(shuō)
92、明,窗口顯示如圖11所示。</p><p><b> 圖11</b></p><p> 2.5.2刪除模塊事件處理</p><p> 該模塊幾個(gè)模塊中事件處理最簡(jiǎn)單的一個(gè)模塊,其中需要說(shuō)明的就是刪除操作只能按工號(hào)刪除。當(dāng)用戶(hù)輸入工號(hào)后,點(diǎn)擊刪除按鈕是并未進(jìn)行刪除操作,系統(tǒng)將準(zhǔn)備刪除的員工信息打印在下方的顯示文本框中,當(dāng)用戶(hù)點(diǎn)擊確認(rèn)對(duì)話(huà)框中
93、的確認(rèn)時(shí),系統(tǒng)才進(jìn)行員工信息刪除。操作實(shí)例如圖12,關(guān)鍵代碼如下:</p><p> if(e.getActionCommand()=="刪除"){</p><p><b> try {</b></p><p> int a = Integer.parseInt(input.getText());</p>
94、<p> HibernateOperate q = new HibernateOperate();</p><p> q.testQueryById(a,result);</p><p> } catch (NumberFormatException e1) {</p><p> result.setText("請(qǐng)輸入合法的整數(shù)!!&q
95、uot;);</p><p><b> }</b></p><p> y_n = new Dialog(this.y_n,"確定刪除?",true);</p><p> Panel p1 = new Panel();</p><p> Y = new Button("yes"
96、;);</p><p> Y.addActionListener(this);</p><p> N = new Button("no");</p><p> N.addActionListener(this);</p><p> p1.add(new Label("確認(rèn)請(qǐng)按“yes”,撤銷(xiāo)請(qǐng)按“no”&
97、quot;));</p><p> p1.add(Y);</p><p> p1.add(N);</p><p> y_n.add("Center",p1);</p><p> y_n.pack();</p><p> y_n.setVisible(true);</p>
98、<p><b> }</b></p><p> if(e.getSource()==Y){</p><p> y_n.dispose();</p><p> id = Integer.parseInt(input.getText());</p><p> HibernateOperate q = n
99、ew HibernateOperate();</p><p> if(q.testDeleteById(id)){</p><p> success = new Dialog(this.success,"刪除成功" ,true);</p><p> Panel p2 = new Panel();</p><p>
100、 p2.add(new Label("刪除成功!"));</p><p> confirm = new Button("確認(rèn)");</p><p> confirm.addActionListener(this);</p><p> p2.add(confirm);</p><p> succe
101、ss.add(p2);</p><p> success.pack();</p><p> success.setVisible(true);</p><p><b> }else{</b></p><p> success = new Dialog(this.success,"刪除失敗" ,
102、true);</p><p> Panel p2 = new Panel();</p><p> p2.add(new Label("該用戶(hù)不存在,刪除失??!"));</p><p> confirm = new Button("確認(rèn)");</p><p> confirm.addActionL
103、istener(this);</p><p> p2.add(confirm);</p><p> success.add(p2);</p><p> success.pack();</p><p> success.setVisible(true); </p><p><b> }<
104、/b></p><p> }else if(e.getActionCommand()=="no"){</p><p> y_n.dispose();</p><p> System.out.println(" 刪除失敗!");</p><p> success = new Dialo
105、g(this.success,"刪除失敗" ,true);</p><p> Panel p2 = new Panel();</p><p> p2.add(new Label("刪除失敗!"));</p><p> confirm = new Button("確認(rèn)");</p><
106、;p> confirm.addActionListener(this); </p><p> p2.add(confirm);</p><p> success.add(p2);</p><p> success.pack();</p><p> success.setVisible(true); </p&g
107、t;<p><b> }</b></p><p> if(e.getActionCommand()=="確認(rèn)"){</p><p> success.dispose();</p><p><b> }</b></p><p><b> 圖12&l
108、t;/b></p><p> 3 Hibernate重要配置</p><p> 根據(jù)本課題內(nèi)容要求可知,該課題對(duì)數(shù)據(jù)庫(kù)表格的要求并不復(fù)雜,僅用一張表即可,并且能使數(shù)據(jù)的冗余度非常小,所以就一個(gè)數(shù)據(jù)庫(kù),一張表即可滿(mǎn)足本課程設(shè)計(jì)的要求。</p><p> (1)建立數(shù)據(jù)庫(kù)。在mysql命令行執(zhí)行語(yǔ)句create database coursedesign;
109、后,建數(shù)據(jù)庫(kù)的工作將就完成了。</p><p> ?。?)引入相關(guān)jar包,將下載好的hibernate、Junit、日志文件和mysql驅(qū)動(dòng)類(lèi)import到該課題的工程中,具體引入的jar包如下:</p><p> (3)建立實(shí)體類(lèi)。新建一個(gè)叫User的java類(lèi)。加上hibernate的實(shí)體類(lèi)的注解,并寫(xiě)好員工的屬性。代碼如下:</p><p><b&g
110、t; @Entity</b></p><p> public class User {</p><p> private int id;</p><p> private String name;</p><p> private int basicWage;</p><p> private
111、int postWage;</p><p> private int bonus;</p><p><b> }</b></p><p> 寫(xiě)好各個(gè)屬性的get和set方法,特殊一點(diǎn)是在主鍵id的get方法前加上注解@Id和@GeneratedValue,前者表示該屬性是主鍵,后者表示該屬性的數(shù)值自增類(lèi)型,具體如下:</p>
112、<p><b> @Id</b></p><p> @GeneratedValue</p><p> public int getId() {</p><p> return id;</p><p><b> }</b></p><p> 此外,添加一
113、個(gè)get方法,并注解為@Transient,表示不存入數(shù)據(jù)庫(kù)的,改方法的功能是用來(lái)獲取工資總額,具體如下:</p><p> @Transient//不存入數(shù)據(jù)庫(kù),只是為了方便查詢(xún)</p><p> public int getAllWage() {</p><p> return this.getBasicWage()+this.getPostWage()
114、+this.getBonus();</p><p><b> }</b></p><p> 還有,必須重寫(xiě)實(shí)體類(lèi)的toString方法如下:</p><p> public String toString(){</p><p> return "ID: "+getId()+" 姓名
115、:"+getName()+" 基礎(chǔ)工資:"+getBasicWage()</p><p> +" 職務(wù)工資:"+getPostWage()+" 獎(jiǎng)金:"+bonus+" 工資總額: "+getAllWage()+"\n\n";</p><p><b> }&l
116、t;/b></p><p> ?。?)配置好hibernate的配置文件。去自己下載的hibernate-distribution-3.3.2.GA\documentation\manual\zh-CN\html_single中參考,把配置文件copy過(guò)來(lái),按自己的需要配置上。直觀起見(jiàn),直接在配置文件中注釋了,每個(gè)語(yǔ)句都有注釋?zhuān)催@里打算的寫(xiě)的解釋。代碼如下:</p><p> &
117、lt;!-- 加載mysql驅(qū)動(dòng) --></p><p> <property name="connection.driver_class">com.mysql.jdbc.Driver</property></p><p> <!-- 連接到本地的一個(gè)叫coursedesign的數(shù)據(jù)庫(kù) --></p><
118、p> <property name="connection.url">jdbc:mysql://localhost/coursedesign</property></p><p> <!-- 數(shù)據(jù)庫(kù)用戶(hù)名 --></p><p> <property name="connection.username&qu
119、ot;>root</property></p><p> <!-- 數(shù)據(jù)庫(kù)用戶(hù)密碼 --></p><p> <property name="connection.password">root</property></p><p> <!-- 配置數(shù)據(jù)庫(kù)方言 --></
120、p><p> <property name="dialect">org.hibernate.dialect.MySQLDialect</property></p><p> <!-- 配置數(shù)據(jù)庫(kù)連接池,這里單一訪(fǎng)問(wèn)就配置為1 --></p><p> <property name="conne
121、ction.pool_size">1</property></p><p> <!-- 配置線(xiàn)程 --></p><p> <!-- Enable Hibernate's automatic session context management --></p><p> <property na
122、me="current_session_context_class">thread</property></p><p> <!-- Disable the second-level cache --></p><p> <!-- 不用hibernate的二級(jí)緩存 --></p><p> <
123、;property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property></p><p> <!-- Echo all executed SQL to stdout --></p><p> <!-- 配置在執(zhí)行過(guò)程中打印sql語(yǔ)句,方
124、便查錯(cuò) --></p><p> <property name="show_sql">true</property></p><p> <!-- 顯示格式化的sql語(yǔ)句 --></p><p> <property name="format_sql">true<
125、/property></p><p> <!-- Drop and re-create the database schema on startup--></p><p> <!-- 配置為每次不先刪表再建表,否則每次都會(huì)刪除以前的數(shù)據(jù) --></p><p> <property name="hbm2ddl.au
126、to">update</property> </p><p> <!-- 配置自己寫(xiě)的實(shí)體類(lèi) --></p><p> <mapping class="com.wangzhu.model.User"/></p><p> (5)配置日志文件,將日志文件按log4j.propertie
127、s也配置好。其作用是顯示hibernate執(zhí)行過(guò)程中的詳細(xì)情況,非常有必要步驟,對(duì)于查錯(cuò),測(cè)試修改非常重要的。直接去hibernate附帶的例子里copy就行。并將里面如下行的注釋解開(kāi):</p><p> log4j.appender.stdout=org.apache.log4j.ConsoleAppender</p><p> log4j.appender.stdout.Targe
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工資管理系統(tǒng)課程設(shè)計(jì)
- 工資管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)-工資管理系統(tǒng)
- 工資管理系統(tǒng)課程設(shè)計(jì)
- 工資管理系統(tǒng)課程設(shè)計(jì)
- 工資管理系統(tǒng)(課程設(shè)計(jì))
- 課程設(shè)計(jì)-- 企業(yè)工資管理系統(tǒng)
- 企業(yè)工資管理系統(tǒng)課程設(shè)計(jì)
- 工資管理系統(tǒng)-課程設(shè)計(jì)報(bào)告
- 企業(yè)工資管理系統(tǒng)課程設(shè)計(jì)
- 企業(yè)工資管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--使用c++面向?qū)ο缶幊痰墓べY管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- sql課程設(shè)計(jì)---工資管理系統(tǒng)
- java工資管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--企業(yè)工資管理系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)--教師工資管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--工資管理系統(tǒng)
- 高校工資管理系統(tǒng)課程設(shè)計(jì)
- 教師工資管理系統(tǒng)課程設(shè)計(jì)
- c語(yǔ)言工資管理系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論