版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 1 需求分析</b></p><p> 1.1 課題設(shè)計目的</p><p> 使用面向?qū)ο笳Z言java設(shè)計一個員工工資管理程序,有顯示、儲存、顯示、修改和刪除功能。每個員工有員工工號、姓名、基礎(chǔ)工資、職務(wù)工資、獎金和工資總額。其中員工工號不需要用戶輸入,存儲時,數(shù)據(jù)庫系統(tǒng)按順序自動遞增。</p><p>&
2、lt;b> 1.2 功能要求</b></p><p> ?。?) 查詢功能中,用戶查詢時可以選擇按工號查詢,也可以選擇姓名進行查詢,也可以選擇查詢工資總額在某個范圍內(nèi)的員工的工資信息,比如查詢工資總額在1000~2000的全體員工的信息,還以查詢?nèi)w員工工資,并且選擇按某種方式排序。</p><p> ?。?)修改功能中,用戶可以選擇修改方式,比如修改某一行,即選擇修改
3、某個員工的工資,此時需要輸入修改項,即基礎(chǔ)工資、職務(wù)工資和獎金中的一項,因為工資總額是基礎(chǔ)工資、職務(wù)工資和獎金的綜合,故不能直接修改,同時還需要輸入工號,為了避免誤改,所以需要確認修改后才能修改;也可以選擇修改某一列,即選擇修改全體員工的某一項工資,所以還需要選擇修改項,其中的修改項也只有基礎(chǔ)工資、職務(wù)工資和獎金三項。</p><p> ?。?)儲存功能即增加用戶的功能中,用戶不需要輸入員工工號,但必須輸入員工姓
4、名,其他幾項均可以不輸入,基礎(chǔ)工資、職務(wù)工資、獎金和工資總額均被系統(tǒng)初始化為零。</p><p> ?。?)刪除功能中,必須慎重操作,刪除時必須輸入員工工號,先查詢出來,把員工的各項信息顯示在下方的文本框中,在用戶點擊確認刪除時系統(tǒng)就將該工號的用戶的各項信息從數(shù)據(jù)庫中刪除。</p><p> 在此說明一點,由于工資總額是員工基礎(chǔ)工資、職務(wù)工資和獎金的綜合?;A(chǔ)工資、職務(wù)工資和獎金中的任意
5、一項改變都會影響工資總額的數(shù)值,當修改頻繁是,將會大大增加數(shù)據(jù)庫系統(tǒng)的負擔(dān),且設(shè)計起來更加繁瑣,所以工資總額并沒有真正的儲存在數(shù)據(jù)庫中, 每一次的查詢或者其他顯示工資總額的地方全都是用SQL或者HQL的函數(shù)查詢語句來實現(xiàn)的。</p><p><b> 1.3 設(shè)計流程</b></p><p> 設(shè)計流程采用先界面后模型</p><p>&l
6、t;b> 圖1</b></p><p><b> 1.4 工資表模式</b></p><p> 根據(jù)上述目的和各項功能要求,選擇如表1的數(shù)據(jù)庫表來儲存員工各項工資信息其中的Id號即為員工工號。</p><p><b> 表1</b></p><p><b> 1
7、.5 開發(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、 測試工具:junit4.7</p><p><b> 注明:</b></p><p> (1)在詳細設(shè)計中的代碼均為局部的關(guān)鍵代碼,完整代碼均在附錄里;</p><p> ?。?)數(shù)據(jù)庫里的信息只為了測試,與其含義沒有關(guān)系;</p><p> ?。?)所有模塊的模樣圖中,圓角框表示容器,直角框表示組件。</p
9、><p><b> 2 詳細設(shè)計</b></p><p> 2.1 外層模塊設(shè)計</p><p> 2.1.1 外層模塊模樣</p><p> 根據(jù)個人設(shè)計思路,設(shè)計的外側(cè)模塊的模樣如圖2</p><p><b> 圖2</b></p><p>
10、; 外側(cè)模塊設(shè)計,首先新建一個叫MyApplet的類,并繼承java下applet包中的Applet類,在這里,也可以自己定義一個自己的框架的類,去繼承Frame類,但是簡單起見,我就定義了自己的框架的類,并繼承了Applet類,這樣有些Applet已經(jīng)實現(xiàn)的功能就不需要我自己去實現(xiàn)了,比如當你點擊這個類運行而得的窗口的右上角的“X”時,窗口就關(guān)閉了,如果沒有繼承Applet類,那么這些功能將由自己實現(xiàn),查看java的那套api會發(fā)現(xiàn)
11、里面有個一屬性常量,給定義的窗口設(shè)置該屬性就可以解決。</p><p> 參考印旻主編的《java與面向?qū)ο蟪绦蛟O(shè)計教程》第八章的布局設(shè)計可知:FlowLayout的布局方式雖然非常簡單,但是這種布局的容器會將容器的里的組件按照加入的順序一個個從左往右,從上往下的排列。這樣的布局顯然不合適,也不美觀。而BorderLayout則將整個容器分為東、西、南、北、中,這樣的布局比較死,限制了設(shè)計者自己定義布局的功能。
12、GridLayout的布局形式,雖然給了設(shè)計者自己定義布局的一部分功能,但是還是存在很大一部分的限制,還有CardLayout(卡片布局設(shè)計)和GridBagLayout,卡片布局設(shè)計顯然是可以采用的,但是不能只用卡片布局設(shè)計,因為只用它顯得單一,而且功能不全。剩下的GridBagLayout的布局設(shè)計是很適合我想象的布局的,因為這種布局設(shè)計給了設(shè)計者很大的自定義空間,并且各個行或者列的大小都可以由設(shè)計者自己指定,也不要求容器中的組件按
13、個空格地放。</p><p> 經(jīng)過上述外層模塊布局設(shè)計的分析,最適合外層模塊布局設(shè)計的方式就是GridBagLayout。GridBagLayout布局設(shè)計方式的使用步驟如下:</p><p> 創(chuàng)建GridBagLayout的對象;</p><p> 將容器的布局設(shè)置成這個對象;</p><p> 創(chuàng)建GridBagConstra
14、ints對象,并指定其各項屬性;</p><p> 設(shè)置GridBagConstraints對象和組件的關(guān)聯(lián);</p><p><b> 將組件加入容器中。</b></p><p> 為了使窗口中的標簽和文本框等東西的大小可以隨窗口的變大而變大,或者縮小而縮小,所以在外層容器里面的組件不是直接加入外層容器的,本質(zhì)是在外層容器中加入子容器,
15、然后在子容器中加入組件。 外層容器的對子容器放置的布局是GridBagLayout布局設(shè)計,而子容器中又使用簡單布局設(shè)計。所以整體上是使用混合布局設(shè)計,這樣可以實現(xiàn)更多的界面設(shè)計樣式。</p><p> 2.1.2 外層模塊代碼解析</p><p> ?。?)MyApplet類繼承Applet,所以本身就是一個容器,不需要自己再去創(chuàng)建外層容器了,就把this(本容器)當成外層容器就可以了
16、。對本容器采用GridBagLayout的布局設(shè)計,按照上述的步驟:</p><p> 創(chuàng)建GridBagLayout布局對象,即GridBagLayout gbLayout = new GridBagLayout();</p><p> 設(shè)置本容器為該布局對象,即 this.setLayout(gbLayout);</p><p> ?。?)創(chuàng)建一個大小為3的
17、Panel數(shù)組p,并實例化三個Panel。</p><p> ?。?)創(chuàng)建一個顯示系統(tǒng)名稱的L abel類型的tittle,設(shè)置其中字體的大小和顏色,并將</p><p> Label加入到Panel[0]中的語句分別是: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> 并且對Panel[0]采用Gridlayout的布局設(shè)計,由于只需添加標題這樣一個組件就可以了,所以設(shè)置為一行一列:p[0] = new Panel(new GridLayout(1,1))。 并用GridBagLa
19、yout的布局設(shè)計將Panel1加入到容器MyApplet中,具體實現(xiàn)代碼如下:</p><p> gbc.gridwidth = GridBagConstraints.BOTH;//占據(jù)橫向剩余空間</p><p> gbc.weightx = 1;//橫向可擴展</p><p> gbc.gridwidth = GridBagConstraints.RE
20、MAINDER;</p><p> gbLayout.setConstraints(p[0], gbc);//將gridbagconstraints對象與組建相聯(lián)系</p><p> add(p[0]);</p><p> ?。?)用GridLayout的布局設(shè)計分別將查詢按鈕、儲存按鈕、修改按鈕和刪除按鈕加入Panel[1]中,然后用GridBagLayou
21、t的布局設(shè)計將Panel[1]加入MyApplet中。具體過程是定義各一個四個元素的Button類型的數(shù)組,并實例化其中每個元素。參數(shù)分別為“查詢”、“儲存”、“修改”和“刪除”。并依次將該數(shù)組的每個按鈕加入到Panel[1]中。其實現(xiàn)代碼如下:</p><p> Button[] b = new Button[4];</p><p> b[0] = new Button("
22、查詢");</p><p> b[0].addActionListener(this);//注冊監(jiān)聽</p><p> b[1] = new Button("儲存");</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(" "));//將按鈕分開</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ù)組的第三個元素p[3]采用卡片的布局設(shè)計,卡片設(shè)計的顯示形式是讓要顯示的東西
26、像撲克一樣疊起來,每次都只能顯示最表面的一張,其他的都在下方,不顯示。目的是使得查詢模塊、儲存模塊、修改模塊和刪除模塊以卡片的形式顯示在四個選擇功能的按鈕下方。讓頁面看起來簡潔、清晰、明朗。</p><p> CardLayout的使用步驟:</p><p> 創(chuàng)建一個CardLayout對象作為布局編輯器: 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è)計中,p[3]中各組件的顯示方式只有設(shè)置為按名顯示最為適合,窗口的顯示如圖3,創(chuàng)建到顯示的實現(xiàn)代碼如下:</p>&
28、lt;p> QueryPanel qp = new QueryPanel();//查詢模塊</p><p> addPanel ap =new addPanel();//增加用戶模塊</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,"查詢");</p><p> p[2].add(ap,"儲存");</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> //事件處理:當用戶點擊四大功能按鈕時,下方顯示對應(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> ?。?)分別將查詢按鈕、儲存按鈕、修改按鈕和刪除按鈕注冊給監(jiān)聽器,并在類頭的繼承類后面加上implements ActionListener實現(xiàn)接口ActionListe
33、ner之后,重寫接口里定義的抽象方法public void actionPerformed(ActionEvent e);在該方法里設(shè)計按名顯示功能模塊的程序,即</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 查詢模塊設(shè)計</p><p> 2.2.1 查詢模塊模樣</p><p> 查詢模塊的模樣如圖4所示。</p><p><b> 圖4</b></p><p> 查詢模塊的設(shè)計,新建一個叫Q
35、ueryPanel的java類,這各類也繼承了Applet類,所以本身就是一個容器。并對本容器設(shè)置GridBagLayout的布局設(shè)計,從上往下,加入三個子容器。第一個叫select,用來裝載查詢方式下拉框、查詢范圍下拉框、排列下拉框、排序下拉框和查詢按鈕;第二個容器id,作用是當用用戶在select容器中的查詢方式選擇為“按工號查詢”時,光標跳轉(zhuǎn)到id容器的id輸入框,之后,當用戶點擊“按工號查詢”按鈕時,結(jié)果顯示文本框中顯示用戶輸入
36、的id號即工號的員工的工資信息;第二個容器叫name,作用是當用戶點擊按姓名查詢的時候,光標跳轉(zhuǎn)到提示輸入姓名的標簽的后面的輸入框中,同第二個一樣,當用戶點擊“按姓名查詢”按鈕后,所輸入姓名的員工的工作信息會顯示在下方的文本里;最下方的就用文本框了,作用上述已經(jīng)說明了。缺省情況下,即用戶什么都沒有選擇的情況下,直接點擊“查詢”按鈕后,將顯示全體員工的工資信息。</p><p> 查詢方式下拉框中有按工號、按姓名
37、和默認全部的選項;查詢范圍的下拉框中有各個階段范圍的對應(yīng)選擇,默認是范圍不限;排列下拉框中有按基礎(chǔ)工資、職務(wù)工資、獎金、工資總額和默認是工號的選項;排序下拉框中就升序和降序兩種選擇,默認是升序排序。這些下拉框的中的每一個選項都是任由用戶選擇的,但是選擇的項不能相互矛盾,比如選擇了按工號查詢,就不能在輸入姓名的輸入框中輸入信息。這些跳轉(zhuǎn)控制,在事件處理中有詳細的設(shè)計。</p><p> 布局設(shè)計的代碼和外層模塊設(shè)
38、計的完全一樣,不再重復(fù),代碼中有注明,下拉框是用一個Choice類型的數(shù)組來表示的,窗口顯示如圖5。實現(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("查詢方式");</p
40、><p> c[0].add("按工號");</p><p> c[0].add("按姓名");</p><p> c[0].add("默認是全部");</p><p> c[1].add("查詢范圍");</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("默認全部");</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("按獎金");</p><p> c[2].add("默認
44、按工號");</p><p> c[3].add("排序");</p><p> c[3].add("升序");</p><p> c[3].add("降序");</p><p> c[3].add("默認升序");</p>
45、<p><b> 圖5</b></p><p> 2.2.2 查詢模塊事件處理</p><p> 該模塊中共有四個下拉框,一個工號輸入框,一個姓名輸入文本框和一個現(xiàn)實文本框,第一個個查詢方式下拉框。</p><p> ?。?)當用戶選擇的是查詢方式或者默認全部時,系統(tǒng)將查詢的對象定位整個員工工作表;第二個是供用戶可以選擇查詢
46、的范圍的下拉框,這里的范圍是指工資總額在所在的范圍,比如用戶選擇8000~10000則表示用戶選擇了工資總額在8000~10000的員工,上下限選擇均包括端點值;第三個是排列下拉框,表示用戶選擇按什么什么數(shù)值排列,結(jié)合第四個排序下拉框的意思就是用戶選擇按什么的數(shù)值以什么的順序排列;這四個下拉框均有默認值,用戶不顯示的做任何選擇,當用戶直接點擊查詢按鈕時,系統(tǒng)將查詢?nèi)繂T工則工資信息,按工號的升序排列打印在顯示文本框。</p>
47、<p> ?。?)當用在查詢方式下拉框中選擇按工號查詢時,系統(tǒng)自動跳轉(zhuǎn)到工號輸入框,提示用戶輸入員工工號,然后點擊按工號查詢按鈕,系統(tǒng)查詢用戶所輸入的工號的工資信息,并打印到顯示文本框。關(guān)鍵代碼如下:</p><p> if(c[0].getSelectedIndex()==0||c[0].getSelectedIndex()==3)//選擇查詢方式</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> ?。?)當用戶在查詢方式下拉框中選擇按姓名查詢時,系統(tǒng)將自動跳轉(zhuǎn)到姓名輸入框,提示用戶輸入姓名。</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 儲存模塊設(shè)計</p><
51、;p> 2.3.1 儲存模塊模樣</p><p> 儲存模塊的模樣如圖6所示。</p><p><b> 圖6</b></p><p> 儲存模塊的設(shè)計,新建一個叫AddPanel的java類,繼承了Applet類,采用的布局設(shè)計和查詢模塊的完全一樣,不再贅述。在儲存子容器中添加去的是三個Panel。第一個是用來顯示提示性標簽的,
52、即顯示姓名、基礎(chǔ)工資、職務(wù)工資、獎金、輸入對應(yīng)信息,其作用是提示用戶根據(jù)提示,在對應(yīng)的輸入框中輸入合法的信息;第二個Panel就是在第一個提示標簽的下方添加相對應(yīng)的輸入框,以便用戶對應(yīng)輸入信息,這個Panel的右端添加了兩個按鈕,前一個是“增加員工”,是往數(shù)據(jù)庫存數(shù)據(jù)的事件源,第二個按鈕是“清空”,用來清空全部輸入框中殘留的信息;第三個就是一個文本框,作用就是顯示新增員工的信息。</p><p> 其中的提示性
53、標簽是用Label數(shù)組來實現(xiàn)的,并且在中間加入了空的標簽,目的是是標簽分開,不至于排列太緊密,影響美觀,窗口顯示如圖7。實現(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("獎 金");</p><p> L[4] = new Label("輸入對應(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 儲存模事件處理</p><p> 本模塊共有四個輸入文本框,一個增加員工按鈕,一個清空按鈕和一個顯示文本框。當用用戶點擊增加員工按鈕時,系統(tǒng)將讀取四個輸入文本框中的內(nèi)容,在姓名不為空,三項金額為整數(shù)的情況下,系統(tǒng)將員工信息存入數(shù)據(jù)庫,并在下方的顯示文本框中打印剛增加的員工
58、的工號、姓名和工資信息。當用戶點擊清空按鈕時,系統(tǒng)將四個輸入文本框中的殘留信息全部清空。其中的flag不只是在這兩個地方處理,在討論異常的時候會詳細介紹。操作實例如圖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("增加用戶失?。罕仨気斎胗脩裘?");</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è)計</p><p> 2.4.1修改模塊模樣</p><p> 修改模塊如圖8所示。</p><p><b> 圖8<
63、/b></p><p> 修改模塊的設(shè)計,新建一個叫UpdatePanel的java類,布局設(shè)計同上。修改子容器比較簡單,里面就裝有個一子容器select,容器select中添加了下拉框“修改方式”、下拉框“修改項”、標簽“輸入新值”、工號輸入框、標簽“輸入新值”、新值輸入框、修改按鈕。修改方式中有修改行和修改列兩個選項;改項中可以選擇的只有基礎(chǔ)工資、職務(wù)工資和獎金;由于是修改,所以每項都必須輸入或者選擇
64、,否則不執(zhí)行操作。該模塊中各部分的實現(xiàn)代碼前面均有提到過,不再贅述,窗口顯示如圖9所示。</p><p><b> 圖9</b></p><p> 2.4.2 修改模塊事件處理</p><p> 當用戶點擊主模塊中的修改按鈕時,下方將顯示修改模塊的界面。修改界面中結(jié)構(gòu)比較簡單,兩個下拉框和兩個輸入文本框,兩個下拉框分別是修改方式的選擇和修
65、改項的選擇。</p><p> ?。?)修改方式中有修改行和修改列兩種選擇,修改行是修改一行,然后選擇修改項,這種情況必須輸入工號,新值在不輸入的情況下將以0為缺省型,但是不推薦。</p><p> ?。?)當用戶選擇的修改方式為修改列時,不需要輸入工號,此時,工號輸入框不能進行輸入,只要為輸入框設(shè)置屬性setFocusable(false);即可;當用戶選擇修改行時重置過來即setFoc
66、usable(true);即可。</p><p> (3)做完(1),(2)的選擇后,用戶點擊修改按鈕時,系統(tǒng)將彈出確認修改的對話框,讓</p><p> 用戶選擇是都確認修改,如果用戶點擊對話框上的確認,系統(tǒng)將執(zhí)行修改。如果修改成功,系統(tǒng)將會彈出修改成功的對話框。操作實例如圖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> //實例化一個對話框</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("確認請按“yes”,撤銷請按“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("確認請按“yes”,撤銷請按“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、請重新選填;按“yes”繼續(xù)補全"));</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("確認");</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){//確認修改列</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("確認");</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("確認");</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()=="確認"){</p><p> success.dispose();</p><p><b> }</b></p><p> 2.5 刪除模塊設(shè)計</p><p> 2.5.1 刪除模塊模樣</p><p> 刪除模塊模樣如圖10所示。</p&
91、gt;<p><b> 圖10</b></p><p> 刪除模塊的設(shè)計,新建一個叫DeletePanel的java類,布局設(shè)計同上。刪除容器中加入了一個子容器select,Panel select中加入了提示輸入工號的標簽、工輸入框、空標簽和刪除按鈕;下方是一個和select平級的文本框,用來顯示用戶刪除的員工的信息。功能和實現(xiàn)都非常簡單,沒有超出前面設(shè)計的范圍,故簡略說
92、明,窗口顯示如圖11所示。</p><p><b> 圖11</b></p><p> 2.5.2刪除模塊事件處理</p><p> 該模塊幾個模塊中事件處理最簡單的一個模塊,其中需要說明的就是刪除操作只能按工號刪除。當用戶輸入工號后,點擊刪除按鈕是并未進行刪除操作,系統(tǒng)將準備刪除的員工信息打印在下方的顯示文本框中,當用戶點擊確認對話框中
93、的確認時,系統(tǒng)才進行員工信息刪除。操作實例如圖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("請輸入合法的整數(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("確認請按“yes”,撤銷請按“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("確認");</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("該用戶不存在,刪除失??!"));</p><p> confirm = new Button("確認");</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(" 刪除失?。?quot;);</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("確認");</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()=="確認"){</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)容要求可知,該課題對數(shù)據(jù)庫表格的要求并不復(fù)雜,僅用一張表即可,并且能使數(shù)據(jù)的冗余度非常小,所以就一個數(shù)據(jù)庫,一張表即可滿足本課程設(shè)計的要求。</p><p> ?。?)建立數(shù)據(jù)庫。在mysql命令行執(zhí)行語句create database coursedesign;
109、后,建數(shù)據(jù)庫的工作將就完成了。</p><p> ?。?)引入相關(guān)jar包,將下載好的hibernate、Junit、日志文件和mysql驅(qū)動類import到該課題的工程中,具體引入的jar包如下:</p><p> ?。?)建立實體類。新建一個叫User的java類。加上hibernate的實體類的注解,并寫好員工的屬性。代碼如下:</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> 寫好各個屬性的get和set方法,特殊一點是在主鍵id的get方法前加上注解@Id和@GeneratedValue,前者表示該屬性是主鍵,后者表示該屬性的數(shù)值自增類型,具體如下:</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、個get方法,并注解為@Transient,表示不存入數(shù)據(jù)庫的,改方法的功能是用來獲取工資總額,具體如下:</p><p> @Transient//不存入數(shù)據(jù)庫,只是為了方便查詢</p><p> public int getAllWage() {</p><p> return this.getBasicWage()+this.getPostWage()
114、+this.getBonus();</p><p><b> }</b></p><p> 還有,必須重寫實體類的toString方法如下:</p><p> public String toString(){</p><p> return "ID: "+getId()+" 姓名
115、:"+getName()+" 基礎(chǔ)工資:"+getBasicWage()</p><p> +" 職務(wù)工資:"+getPostWage()+" 獎金:"+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過來,按自己的需要配置上。直觀起見,直接在配置文件中注釋了,每個語句都有注釋,即這里打算的寫的解釋。代碼如下:</p><p> &
117、lt;!-- 加載mysql驅(qū)動 --></p><p> <property name="connection.driver_class">com.mysql.jdbc.Driver</property></p><p> <!-- 連接到本地的一個叫coursedesign的數(shù)據(jù)庫 --></p><
118、p> <property name="connection.url">jdbc:mysql://localhost/coursedesign</property></p><p> <!-- 數(shù)據(jù)庫用戶名 --></p><p> <property name="connection.username&qu
119、ot;>root</property></p><p> <!-- 數(shù)據(jù)庫用戶密碼 --></p><p> <property name="connection.password">root</property></p><p> <!-- 配置數(shù)據(jù)庫方言 --></
120、p><p> <property name="dialect">org.hibernate.dialect.MySQLDialect</property></p><p> <!-- 配置數(shù)據(jù)庫連接池,這里單一訪問就配置為1 --></p><p> <property name="conne
121、ction.pool_size">1</property></p><p> <!-- 配置線程 --></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的二級緩存 --></p><p> <
123、;property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property></p><p> <!-- Echo all executed SQL to stdout --></p><p> <!-- 配置在執(zhí)行過程中打印sql語句,方
124、便查錯 --></p><p> <property name="show_sql">true</property></p><p> <!-- 顯示格式化的sql語句 --></p><p> <property name="format_sql">true<
125、/property></p><p> <!-- Drop and re-create the database schema on startup--></p><p> <!-- 配置為每次不先刪表再建表,否則每次都會刪除以前的數(shù)據(jù) --></p><p> <property name="hbm2ddl.au
126、to">update</property> </p><p> <!-- 配置自己寫的實體類 --></p><p> <mapping class="com.wangzhu.model.User"/></p><p> ?。?)配置日志文件,將日志文件按log4j.propertie
127、s也配置好。其作用是顯示hibernate執(zhí)行過程中的詳細情況,非常有必要步驟,對于查錯,測試修改非常重要的。直接去hibernate附帶的例子里copy就行。并將里面如下行的注釋解開:</p><p> log4j.appender.stdout=org.apache.log4j.ConsoleAppender</p><p> log4j.appender.stdout.Targe
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工資管理系統(tǒng)課程設(shè)計
- 工資管理系統(tǒng)課程設(shè)計
- 課程設(shè)計-工資管理系統(tǒng)
- 工資管理系統(tǒng)課程設(shè)計
- 工資管理系統(tǒng)課程設(shè)計
- 工資管理系統(tǒng)(課程設(shè)計)
- 課程設(shè)計-- 企業(yè)工資管理系統(tǒng)
- 企業(yè)工資管理系統(tǒng)課程設(shè)計
- 工資管理系統(tǒng)-課程設(shè)計報告
- 企業(yè)工資管理系統(tǒng)課程設(shè)計
- 企業(yè)工資管理系統(tǒng)課程設(shè)計
- 課程設(shè)計--使用c++面向?qū)ο缶幊痰墓べY管理系統(tǒng)的設(shè)計與實現(xiàn)
- sql課程設(shè)計---工資管理系統(tǒng)
- java工資管理系統(tǒng)課程設(shè)計
- 課程設(shè)計--企業(yè)工資管理系統(tǒng)設(shè)計
- 課程設(shè)計--教師工資管理系統(tǒng)
- c語言課程設(shè)計--工資管理系統(tǒng)
- 高校工資管理系統(tǒng)課程設(shè)計
- 教師工資管理系統(tǒng)課程設(shè)計
- c語言工資管理系統(tǒng)課程設(shè)計
評論
0/150
提交評論