<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗,分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

    18.14  系統(tǒng)初始化模塊

    用戶登錄后,選擇“系統(tǒng)管理”→“系統(tǒng)初使化”菜單項,進入到系統(tǒng)初使化,在該頁面中將顯示提示信息,單擊【進行系統(tǒng)初使化】按鈕,將進行系統(tǒng)初使化操作。系統(tǒng)初始化頁面運行結(jié)果如圖18.31所示。

    圖18.31  系統(tǒng)初始化頁面運行結(jié)果

    18.14.1  創(chuàng)建系統(tǒng)初始化模塊的業(yè)務(wù)邏輯類

    創(chuàng)建系統(tǒng)初始化模塊的業(yè)務(wù)邏輯類SysDAO,將其保存在com.dao包中,該類主要用于清空系統(tǒng)中的除用戶信息表以外的所有數(shù)據(jù)表和刪除用戶信息表中除超級用戶mr以外的全部用戶。值得注意的是:在刪除存在關(guān)聯(lián)關(guān)系的數(shù)據(jù)表時,需要先刪除子表信息,再刪除主表信息,否則將發(fā)生錯誤。

    系統(tǒng)初始化模塊的業(yè)務(wù)邏輯類SysDAO的關(guān)鍵代碼如下。

    例程18-136:光盤\mr\18\MaterialManage\src\com\action\SysDAO .java

    public class SysDAO {

        public SysDAO(){

        }

        private Session session = null;

        public int sysinitialize(){

            session = MySession.openSession(); //打開Session

            Transaction tx = null;

            int rtn = 0;

            try {

                tx=session.beginTransaction();

                //刪除用戶信息

                session.createQuery("DELETE UserForm where name<>'mr'").executeUpdate();

                session.createQuery("DELETE GetUseForm").executeUpdate();   //清空部門領(lǐng)用信息表

                session.createQuery("DELETE DamageForm").executeUpdate();   //清空部門報損信息表

                session.createQuery("DELETE CheckForm").executeUpdate();      //清空審核信息表

                session.createQuery("DELETE InStorageForm").executeUpdate();     //清空入庫信息表

                session.createQuery("DELETE StockDetailForm").executeUpdate();    //清空采購明細表

                session.createQuery("DELETE StockMainForm").executeUpdate();      //清空采購主表

                session.createQuery("DELETE ProviderForm").executeUpdate();    //清空供應(yīng)商信息表

                session.createQuery("DELETE LoanForm").executeUpdate();     //清空物資借出信息表

                session.createQuery("DELETE StorageForm").executeUpdate();           //清空庫存信息表

                session.createQuery("DELETE BranchForm").executeUpdate();           //清空部門信息表

                session.createQuery("DELETE GoodsForm").executeUpdate();           //清空商品信息表

                rtn=1;

                tx.commit();

            }catch(Exception e){

                if(tx!=null){

                    tx.rollback();

                }

                e.printStackTrace();

                System.out.println("系統(tǒng)初使化時的錯誤信息:"+e.getMessage());

                rtn=0;

            } finally {

                MySession.closeSession(session);

            }

            return rtn;

        }

    }

    18.14.2  系統(tǒng)初始化頁面設(shè)計

    系統(tǒng)初使化模塊共包括兩個JSP頁面,一個是用于顯示提示信息的initialize.jsp,另一個是用于執(zhí)行系統(tǒng)初使化操作的處理頁initialize_deal.jsp。由于initialize.jsp頁面比較簡單,此處不作介紹,下面介紹如何實現(xiàn)initialize_deal.jsp頁。

    在執(zhí)行系統(tǒng)初使化操作的處理頁initialize_deal.jsp中,首先使用<jsp:useBean>動作指令生成SysDAO類的一個實例對象sysDAO,然后通過該實例對象調(diào)用SysDAO類的sysinitialize()方法,最后根據(jù)返回結(jié)果顯示相應(yīng)的提示信息,具體代碼如下。

    例程18-137:光盤\mr\18\MaterialManage\defaultroot\initialize_deal.jsp

    <%@ page contentType="text/html; charset=gb2312" language="java"%>

    <jsp:useBean id="sysDAO" class="com.dao.SysDAO" scope="request"/>

    <%

    int rtn=sysDAO.sysinitialize();

    if(rtn==0){

        out.println("<script>alert('系統(tǒng)初使化失敗!');window.location.href='initialize.jsp';</script>");

    }else{

        out.println("<script>alert('系統(tǒng)初使化成功!\\r當前系統(tǒng)中只有mr一個用戶,請重新登錄!');window.
     location.href='index.jsp'</script>");

    }

    %>

    18.15  疑難問題分析與解決

    18.15.1  在Struts中解決中文亂碼

    通常情況下解決中文亂碼采用的是編寫一個將ISO-8859-1編碼轉(zhuǎn)換為gb2312編碼的方法,然后在出現(xiàn)亂碼的位置調(diào)用該方法即可達到解決中文亂碼的目的,但是這樣做很不方便。Struts提供了一個快速解決中文亂碼的方法,那就是通過配置和擴展RequestProcessor類實現(xiàn)。下面將詳細介紹在Struts中解決中文亂碼的方法。

    (1)創(chuàng)建SelfRequestProcessor.java類文件,該類繼承了RequestProcessor類,并重寫processPreprocess()方法,在該方法中設(shè)置Request對象的請求編碼為gb2312編碼,具體代碼如下。

    例程18-138:光盤\mr\18\MaterialManage\src\com\action\SelfRequestProcessor.java

    package com.action;

    import org.apache.struts.action.RequestProcessor;

    import javax.servlet.http.*;

    import java.io.*;

    public class SelfRequestProcessor extends RequestProcessor  {

        public SelfRequestProcessor() {

        }

        protected boolean processPreprocess(HttpServletRequest request,HttpServletResponse response){

            try {

                request.setCharacterEncoding("gb2312");

            } catch (UnsupportedEncodingException ex) {

                ex.printStackTrace();

            }

            return true;

        }

    }

    (2)在struts-config.xml文件中利用<controller>元素配置自定義控制器組件SelfRequest Processor,用于對請求的參數(shù)進行轉(zhuǎn)碼,具體代碼如下:

    <controller processorClass="com.action.SelfRequestProcessor" />

    配置<controller>元素主要是為了能讓Struts識別開發(fā)者自定義的控制器組件。

    18.15.2  部門匯總模塊SQL語句解析

    在部門匯總模塊中需要將部門領(lǐng)用信息和部門報損信息按部門進行匯總并統(tǒng)計各部門正在使用物資的數(shù)量和金額,這可以通過以下SQL語句實現(xiàn):

    select g.name,g.spec,g.unit,g.price,t.branchname,t.lyamount,t.bsamount,

    (t.lyamount-t.bsamount) zyamount from tb_goods g inner join ( select goodsid,branchname,

    sum(bsamount) bsamount,sum(lyamount) lyamount from(select getuse.goodsid,0 as bsamount,

    sum(getuse.number) as lyamount,branch.name as branchname from tb_getuse getuse inner join

     tb_branch branch on getuse.branchid=branch.id group by branch.name,getuse.goodsid

    union select damage.goodsid,sum(damage.damagenum) as bsamount,0 as lyamount,

    branch.name as branchname from tb_damage damage inner join

     tb_branch branch on damage.branchid=branch.id group by branch.name,damage.goodsid ) as t

     group by goodsid,branchname) as t on g.id=t.goodsid

    下面將對上面的SQL語句進行詳細的分析。

    (1)查詢部門信息的SQL語句如下:

    select * from tb_getuse

    執(zhí)行結(jié)果如圖18.32所示。

    圖18.32  部門信息

    (2)查詢部門領(lǐng)用信息的SQL語句如下:

    select * from tb_getuse

    執(zhí)行結(jié)果如圖18.33所示。

    圖18.33  部門領(lǐng)用信息

    (3)通過INNER JOIN子句將部門領(lǐng)用信息表和部門信息表進行關(guān)聯(lián),具體SQL語句如下:

    select * from tb_getuse getuse inner join tb_branch branch on getuse.branchid=branch.id

    執(zhí)行結(jié)果如圖18.34所示。

    圖18.34  與部門信息表關(guān)聯(lián)后的部門領(lǐng)用信息

    (4)根據(jù)部門名稱和物資ID對關(guān)聯(lián)后的部門領(lǐng)用信息進行分組并統(tǒng)計部門領(lǐng)用各物資的數(shù)量,具體SQL語句如下:

    select getuse.goodsid,sum(getuse.number) as lyamount,branch.name as branchname from tb_getuse getuse inner join tb_branch branch on getuse.branchid=branch.id group by branch.name,getuse.goodsid

    執(zhí)行結(jié)果如圖18.35所示。

    (5)在步驟(4)中的SQL語句的輸出結(jié)果中添加一個新的列bsamount,該列的值均為0,具體SQL語句如下:

    select getuse.goodsid,0 as bsamount,sum(getuse.number) as lyamount,branch.name as branchname from

    tb_getuse getuse inner join tb_branch branch on getuse.branchid=branch.id

     group by branch.name,getuse.goodsid

    執(zhí)行結(jié)果如圖18.36所示。

            

             圖18.35  分組統(tǒng)計后的信息                 圖18.36  添加bsamount列后的信息

    (6)查詢部門報損信息的SQL語句如下:

    select * from tb_damage

    執(zhí)行結(jié)果如圖18.37所示。

    圖18.37  部門報損信息

    (7)通過INNER JOIN子句將部門報損信息表和部門信息表進行關(guān)聯(lián),具體SQL語句如下:

    select * from tb_damage damage inner join tb_branch branch on damage.branchid=branch.id

    執(zhí)行結(jié)果如圖18.38所示。

    圖18.38  與部門信息表關(guān)聯(lián)后的部門報損信息

    (8)根據(jù)部門名稱和物資ID對關(guān)聯(lián)后的部門報損信息進行分組并統(tǒng)計部門報損各物資的數(shù)量,具體SQL語句如下:

    select damage.goodsid,sum(damage.damagenum) as bsamount,branch.name as branchname from

    tb_damage damage inner join tb_branch branch on damage.branchid=branch.id group by

    branch.name,damage.goodsid

    執(zhí)行結(jié)果如圖18.39所示。

             

            圖18.39  分組統(tǒng)計后的信息                  圖18.40  添加lyamount列后的信息

    (9)在步驟(8)中的SQL語句的輸出結(jié)果中添加一個新的列l(wèi)yamount,該列的值均為0,具體SQL語句如下:

    select damage.goodsid,sum(damage.damagenum) as bsamount,0 as lyamount,

    branch.name as branchname from tb_damage damage inner join 

     tb_branch branch on damage.branchid=branch.id group by branch.name,damage.goodsid

    執(zhí)行結(jié)果如圖18.40所示。

    (10)通過UNION子句將步驟(5)和步驟(9)的結(jié)果合并,具體SQL語句如下:

    select getuse.goodsid,0 as bsamount,sum(getuse.number) as lyamount,branch.name as branchname from

    tb_getuse getuse inner join tb_branch branch on getuse.branchid=branch.id group by

    branch.name,getuse.goodsid

    union

    select damage.goodsid,sum(damage.damagenum) as bsamount,0 as lyamount,

    branch.name as branchname from tb_damage damage inner join

    tb_branch branch on damage.branchid=branch.id group by branch.name,damage.goodsid

    執(zhí)行結(jié)果如圖18.41所示。

    (11)對步驟(10)的合并結(jié)果進行分組統(tǒng)計,具體SQL語句如下:

     select goodsid,branchname,sum(bsamount) bsamount,sum(lyamount) lyamount from(

    select getuse.goodsid,0 as bsamount,sum(getuse.number) as lyamount,branch.name as branchname from

    tb_getuse getuse inner join  tb_branch branch on getuse.branchid=branch.id group by

    branch.name,getuse.goodsid

    union

    select damage.goodsid,sum(damage.damagenum) as bsamount,0 as lyamount,branch.name as branchname

    from tb_damage damage inner join tb_branch branch on damage.branchid=branch.id

    group by branch.name,damage.goodsid

    ) as t group by goodsid,branchname

    執(zhí)行結(jié)果如圖18.42所示。

          

               圖18.41  合并后的結(jié)果                         圖18.42  分組統(tǒng)計后的結(jié)果

    (12)將步驟(10)的分組統(tǒng)計結(jié)果與物資信息表tb_goods通過INNER JOIN子句進行關(guān)聯(lián),具體SQL語句如下:

    select g.name,g.spec,g.unit,g.price,t.branchname,t.lyamount,t.bsamount from tb_goods g inner join (

     select goodsid,branchname,sum(bsamount) bsamount,sum(lyamount) lyamount from(

    select getuse.goodsid,0 as bsamount,sum(getuse.number) as lyamount,branch.name as branchname from

    tb_getuse getuse inner join tb_branch branch on getuse.branchid=branch.id group by

    branch.name,getuse.goodsid

    union

    select damage.goodsid,sum(damage.damagenum) as bsamount,0 as lyamount,branch.name as branchname

    from tb_damage damage inner join tb_branch branch on damage.branchid=branch.id

    group by branch.name,damage.goodsid

    ) as t group by goodsid,branchname

    ) as t on g.id=t.goodsid

    執(zhí)行結(jié)果如圖18.43所示。

    圖18.43  分組統(tǒng)計后的結(jié)果

    (13)在步驟(12)的分組統(tǒng)計結(jié)果的基礎(chǔ)上添加一個新的輸出列zyamount,該列的值為領(lǐng)用數(shù)量減去報損數(shù)量,即正在使用數(shù)量,具體SQL語句如下:

    select g.name,g.spec,g.unit,g.price,t.branchname,t.lyamount,t.bsamount,(t.lyamount-t.bsamount) zyamount

    from tb_goods g inner join (

     select goodsid,branchname,sum(bsamount) bsamount,sum(lyamount) lyamount from(

    select getuse.goodsid,0 as bsamount,sum(getuse.number) as lyamount,branch.name as branchname from

    tb_getuse getuse inner join tb_branch branch on getuse.branchid=branch.id group by

    branch.name,getuse.goodsid

    union

    select damage.goodsid,sum(damage.damagenum) as bsamount,0 as lyamount,branch.name as branchname

    from tb_damage damage inner join tb_branch branch on damage.branchid=branch.id

    group by branch.name,damage.goodsid

    ) as t group by goodsid,branchname

    ) as t on g.id=t.goodsid

    執(zhí)行結(jié)果如圖18.44所示。

    圖18.44  最后執(zhí)行結(jié)果

    posted on 2009-01-07 10:46 rogerfan 閱讀(277) 評論(0)  編輯  收藏 所屬分類: 【開源技術(shù)】
    主站蜘蛛池模板: 亚洲一区二区三区国产精华液| 1000部拍拍拍18免费网站| 中文字幕 亚洲 有码 在线| 久久精品国产亚洲精品| 手机看片久久国产免费| av无码免费一区二区三区| 免费一区二区无码东京热| 亚洲AV日韩综合一区| 亚洲国产美女精品久久久久| 国产亚洲av片在线观看16女人 | 亚洲午夜视频在线观看| 俄罗斯极品美女毛片免费播放| 欧美日韩国产免费一区二区三区| 99re在线免费视频| 国产在线观看xxxx免费| 色老头综合免费视频| 男性gay黄免费网站| 激情无码亚洲一区二区三区 | 久久综合国产乱子伦精品免费| 国产成人无码免费看片软件| 国产午夜亚洲精品不卡电影| 亚洲国产成人AV在线播放| 亚洲a级在线观看| 亚洲另类小说图片| 亚洲色偷偷偷网站色偷一区| 亚洲人成影院在线| 亚洲av中文无码乱人伦在线咪咕| 亚洲精品高清无码视频| 亚洲国产精品一区二区成人片国内| 亚洲综合AV在线在线播放| 国产成人亚洲精品影院| 亚洲性久久久影院| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 中国在线观看免费国语版| 亚洲精品免费在线| 国产精品视频免费观看| 国产精品成人免费福利| 成人五级毛片免费播放| 热久久精品免费视频| 免费永久在线观看黄网站| 免费吃奶摸下激烈视频|