一、管家婆項目

01項目訓練目標

* A: 項目訓練目標
    * a: 項目目標
        * 綜合運用前面所學習的知識點
        * 熟練View層、Service層、Dao層之間的方法相互調用操做、
        * 熟練dbutils操做數據庫表完成增刪改查
        * 瞭解公司項目開發的流程,充分的掌握項目需求分析、設計與功能的代碼實現。提升同窗們獨立分析需求與功能實現的能力。

02項目中的功能模塊

* A: 項目中的功能模塊    
    * a: 五大模塊
        * 查詢帳務
        * 多條件組合查詢帳務
        * 添加帳務
        * 編輯帳務
        * 刪除帳務

03技術的選擇和相關jar包

* A: 技術的選擇和相關jar包
    * a: apache的commons組件:
        * commons-dbutils-1.4.jar:封裝並簡化了JDBC;
        * commons-dbcp-1.4.jar:apache commons提供的數據庫鏈接池組件,命名爲DBCP;
    * b: commons.pool-1.3.jar:DBCP鏈接池依賴該jar包;
        * mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驅動包,用JDBC鏈接MySQL數據庫必須使用該JAR包。

04項目中的工具類

* A: 項目中的工具類
    * a: 工具類的介紹    
        * 每一個項目中都會有不少個工具類,不要求每一個工具類對能獨立寫出來,可是要會使用工具類
        * JDBCUtils:用來建立數據庫鏈接池對象

05數據表的設計

* A: 數據表的設計
    * a: 數據表的設計(詳見:day34_source/表關係.JPG)
        * 表與表之間是有關係的
        * 主表和從表的關係
        * 主表中的主鍵做爲從表中的外鍵

06建立數據庫數據表寫入測試數據

* A: 建立數據庫數據表寫入測試數據
    * a: 建立數據庫數據表
        /*
          建立管家婆的數據庫
          名字 gjp
        */
        CREATE DATABASE gjp;

        USE gjp;

        /*
          建立數據表,表名帳務
          字段,列
          主鍵
          分類名稱  可變字符
          金額  double
          帳戶  可變字符 (支付,收入方法)
          建立日期 date
          帳務描述 可變字符
        */

        CREATE TABLE gjp_zhangwu(
           -- 主鍵
           zwid INT PRIMARY KEY AUTO_INCREMENT,
           -- 分類名稱   
           flname VARCHAR(200),
           -- 金額
           money DOUBLE,
           -- 帳戶
           zhanghu VARCHAR(100),
           -- 建立日期
           createtime DATE,
           -- 帳務描述
           description  VARCHAR(1000)
        );
        SELECT * FROM gjp_zhangwu;
    * b: 寫入數據
        -- 寫入測試的數據
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (1,'吃飯支出',247,'交通銀行','2016-03-02','家庭聚餐');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (2,'工資收入',12345,'現金','2016-03-15','開工資了');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (3,'服裝支出',1998,'現金','2016-04-02','買衣服');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (4,'吃飯支出',325,'現金','2016-06-18','朋友聚餐');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (5,'股票收入',8000,'工商銀行','2016-10-28','股票大漲');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (6,'股票收入',5000,'工商銀行','2016-10-28','股票又大漲');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (7,'工資收入',5000,'交通銀行','2016-10-28','又開工資了');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (8,'禮金支出',5000,'現金','2016-10-28','朋友結婚');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (9,'其餘支出',1560,'現金','2016-10-29','丟錢了');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (10,'交通支出',2300,'交通銀行','2016-10-29','油價還在漲啊');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (11,'吃飯支出',1000,'工商銀行','2016-10-29','又吃飯');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (12,'工資收入',1000,'現金','2016-10-30','開資');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (13,'交通支出',2000,'現金','2016-10-30','機票好貴');
        INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (14,'工資收入',5000,'現金','2016-10-30','又開資');

07項目中的分層設計

* A: 項目中的分層設計
    * a: 各層功能介紹
        * view層做用: 視圖層,即項目中的界面
        * controller層做用: 控制層, 獲取界面上的數據,爲界面設置數據; 將要實現的功能交給業務層處理
        * service層做用: 業務層, 功能的實現, 與controller控制層和數據訪問層DAO交互, 將對數據庫的操做交給DAO數據訪問層來處理
        * dao層做用: 數據訪問層, 用來操做數據庫表的數據
        * db數據庫: 這裏指MySQL
        * domain 實體包: 存放JavaBean
        * tools工具包:存放項目中使用到的工具類
        * test 測試包: 存放項目功能測試的代碼

08建立項目_分層_導入jar包

* A: 建立項目_分層_導入jar包
    * a: 建立工程包
        * cn.itcast.gjp.app: 存放main方法類;
        * cn.itcast.gjp.domain: 存放JavaBean;
        * cn.itcast.gjp.view: 存放界面,及表現層類;
        * cn.itcast.gjp.service: 存放業務層類;
        * cn.itcast.gjp.dao: 存放數據訪問層類;
        * cn.itcast.gjp.tools:存放工具類
    * b: 導入jar包
        * 在項目根路徑下創建文件夾lib
        * 導入如下jar包
            * mysql-connector-java-5.1.37-bin.jar:數據庫驅動
            * commons-dbutils-1.6.jar:提供QueryRunner類方便進行增刪改查操做
            * commons-dbcp-1.4.jar:
            * commons-pool-1.5.6.jar:提供高效的數據庫鏈接池技術                
        * 拷貝以上jar包,選定拷貝的jar包/右鍵/Build Path/Add to Build Path

09建立domain包中的類

* A: 建立domain包中的類
    * a: 案例代碼
        public class ZhangWu {
             private int  zwid;
              
             private String flname; 
            
             private double  money; 
              
             private String zhanghu;
            
             private String createtime; 
            
             private String description;
             //注意生成空參構造、有參構造、set和get方法、toString方法等
        }

10建立JDBCUtils工具類

* A:建立JDBCUtils工具類
    * a: 案例代碼
        public class JDBCUtils{
            //建立BasicDataSource對象
            private static BasicDataSource datasource = new BasicDataSource();
            //靜態代碼塊,實現必要參數設置
            static{
                datasource.setDriverClassName("com.mysql.jdbc.Driver");
                datasource.setUrl("jdbc:mysql://localhost:3306/gjp");
                datasource.setUsername("root");
                datasource.setPassword("123");
                datasource.setMaxActive(10);
                datasource.setMaxIdle(5);
                datasource.setMinIdle(2);
                datasource.setInitialSize(10);
            }
            public static DataSource getDataSource(){
                return datasource;
            }
        }

11建立其餘包中的類

* A: 建立其餘包中的類
    * a: cn.itcast.gjp.dao包中建立ZhangWuDao類
        /*
         *  實現對數據表 gjp_zhangwu 數據增刪改查操做
         *  dbuils工具類完成,類成員建立QueryRunner對象,指定數據源
         */
        public class ZhangWuDao {
            private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
        }
    * b: cn.itcast.gjp.service包中建立ZhangWuService類
        /*
         *  業務層類
         *  接收上一層,控制層controller的數據
         *  通過計算,傳遞給dao層,操做數據庫
         *  調用dao層中的類,類成員位置,建立Dao類的對象
         */
        public class ZhangWuService {
            private ZhangWuDao dao = new ZhangWuDao();
            
        }
    * c: cn.itcast.gjp.controller包中創建ZhangWuController類
        /*
         *  控制器層
         *  接收視圖層的數據,數據傳遞給service層
         *  成員位置,建立service對象
         */
        public class ZhangWuController {
            private ZhangWuService service = new ZhangWuService();                
        }
    * d: cn.itcast.gjp.view包中創建MainView類
        /*
         *  試圖層,用戶看到和操做的界面
         *  數據傳遞給controller層實現
         *  成員位置,建立controller對象
         */
        public class MainView {
            private ZhangWuController controller = new ZhangWuController();
            
        }
    * e: cn.itcast.gjp.app包中創建MainApp類
        /*
         *  主程序類,做用,開啓軟件程序
         */
        public class MainApp {
            public static void main(String[] args) {
                new MainView().run();
            }
        }

12實現用戶的界面菜單

* A: 實現用戶的界面菜單
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類中添加run方法
        /*
         *  實現界面效果
         *  接收用戶的輸入
         *  根據數據,調用不一樣的功能方法
         */
        public void run(){
            //建立Scanner類對象,反覆鍵盤輸入
            Scanner sc = new Scanner(System.in);
            while(true){
                System.out.println("---------------管家婆家庭記帳軟件---------------");
                System.out.println("1.添加帳務 2.編輯帳務 3.刪除帳務 4.查詢帳務 5.退出系統");
                System.out.println("請輸入要操做的功能序號[1-5]:");
                //接收用戶的菜單選擇
                int choose = sc.nextInt();
                //對選擇的菜單判斷,調用不一樣的功能
                switch(choose){
                case 1:
                   // 選擇添加帳務,調用添加帳務的方法
                    break;
                case 2:
                    // 選擇的編輯帳務,調用編輯帳務方法
                    break;
                case 3:
                    // 選擇的刪除帳務,調用刪除帳務方法
                    break;
                case 4:
                    // 選擇的是查詢帳務,調用查詢方法
                    //selectZhangWu();
                    break;
                case 5:
                    System.exit(0);
                    break;
                }
            }
        }

13實現查詢的界面菜單

* A: 實現查詢的界面菜單
    * a: 案例核心代碼
        *  cn.itcast.gjp.view包中創建MainView類中添加selectZhangWu方法、selectAll方法、select方法
            /*
             * 定義方法 selectZhangWu()
             * 顯示查詢的方式 1 全部查詢   2 條件查詢
             * 接收用戶的選擇
             */
             public void selectZhangWu(){
                 System.out.println("1. 查詢全部    2. 條件查詢");
                 Scanner sc = new Scanner(System.in);
                 int selectChooser = sc.nextInt();
                 //判斷根據用戶的選擇,調用不一樣的功能
                 switch(selectChooser){
                 case 1:
                     //選擇的查詢全部,調用查詢全部的方法
                     selectAll();
                     break;
                 case 2:
                     //選的條件查詢,調用帶有查詢條件的方法
                     select();
                     break;
                 }
             }
             /*
              * 定義方法,實現查詢全部的帳務數據
              */
             public void selectAll(){
                 
             }
            
             /*
              * 定義方法,實現條件查詢帳務數據
              * 提供用戶的輸入日期,開始日期結束日期
              * 就2個日期,傳遞到controller層
              * 調用controller的方法,傳遞2個日期參數
              * 獲取到controller查詢的結果集,打印出來
              */
             public void select(){
                
             }

14實現查詢全部帳務的控制,業務層的實現

* A: 實現查詢全部帳務的控制,業務層的實現
    * a: 案例核心代碼
        * a: cn.itcast.gjp.dao包中建立ZhangWuDao類
        /*
         *  實現對數據表 gjp_zhangwu 數據增刪改查操做
         *  dbuils工具類完成,類成員建立QueryRunner對象,指定數據源
         */
        public class ZhangWuDao {
            private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            /*
             * 定義方法,查詢數據庫,獲取全部的帳務數據
             * 方法,由業務層調用
             * 結果集,將全部的帳務數據,存儲到Bean對象中,存儲到集合中
             */
            public List<ZhangWu> selectAll(){                    
                return null;
            }
        }
        * b: cn.itcast.gjp.service包中建立ZhangWuService類
            /*
             *  業務層類
             *  接收上一層,控制層controller的數據
             *  通過計算,傳遞給dao層,操做數據庫
             *  調用dao層中的類,類成員位置,建立Dao類的對象
             */
            public class ZhangWuService {
                private ZhangWuDao dao = new ZhangWuDao();
                /*
                 *  定義方法,實現查詢全部的帳務數據
                 *  此方法,由控制層調用, 去調用dao層的方法
                 *  返回存儲ZhangWu對象的List集合
                 */
                public List<ZhangWu> selectAll(){
                    return dao.selectAll();
                }
            }
        * c: cn.itcast.gjp.controller包中創建ZhangWuController類
            /*
             *  控制器層
             *  接收視圖層的數據,數據傳遞給service層
             *  成員位置,建立service對象
             */
            public class ZhangWuController {
                private ZhangWuService service = new ZhangWuService();        
                /*
                 * 控制層類定義方法,實現查詢全部的帳務數據
                 * 方法由試圖層調用,方法調用service層
                 */
                public List<ZhangWu> selectAll(){
                    return service.selectAll();
                }                    
            }

15實現查詢全部帳務的dao層的實現

* A: 實現查詢全部帳務的dao層的實現
    * a: 案例核心代碼
        * a: cn.itcast.gjp.dao包中建立ZhangWuDao類selectAll方法
        /*
         *  實現對數據表 gjp_zhangwu 數據增刪改查操做
         *  dbuils工具類完成,類成員建立QueryRunner對象,指定數據源
         */
        public class ZhangWuDao {
            private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
            /*
             * 定義方法,查詢數據庫,獲取全部的帳務數據
             * 方法,由業務層調用
             * 結果集,將全部的帳務數據,存儲到Bean對象中,存儲到集合中
             */
            public List<ZhangWu> selectAll(){
                try{
                    //查詢帳務數據的SQL語句
                        String sql = "SELECT * FROM gjp_zhangwu";
                        //調用qr對象的方法,query方法,結果集BeanListHandler
                        List<ZhangWu> list = qr.query(sql, new BeanListHandler<>(ZhangWu.class));
                        return list;
                    }catch(SQLException ex){
                        System.out.println(ex);
                        throw new RuntimeException("查詢全部帳務失敗");
                    }
            }
        }

16實現查詢全部帳務的view層的實現

* A: 實現查詢全部帳務的view層的實現
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類selectAll方法
        /*
          * 定義方法,實現查詢全部的帳務數據
          */
         public void selectAll(){
             //調用控制層中的方法,查詢全部的帳務數據
             List<ZhangWu> list = controller.selectAll();
            //輸出表頭
             System.out.println("ID\t\t類別\t\t帳戶\t\t金額\t\t時間\t\t說明");
             //遍歷集合,結果輸出控制檯
             for(ZhangWu zw : list){
                 System.out.println(zw.getZwid()+"\t\t"+zw.getFlname()+"\t\t"+zw.getZhanghu()+"\t\t"+
                 zw.getMoney()+"\t\t"+zw.getCreatetime()+"\t"+zw.getDescription());
             }
         }

17實現條件查詢帳務的菜單實現

* A: 實現條件查詢帳務的菜單實現
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類select方法
          /*
          * 定義方法,實現條件查詢帳務數據
          * 提供用戶的輸入日期,開始日期結束日期
          * 就2個日期,傳遞到controller層
          * 調用controller的方法,傳遞2個日期參數
          * 獲取到controller查詢的結果集,打印出來
          */
         public void select(){
             System.out.println("選擇條件查詢,輸入日期格式XXXX-XX-XX");
             Scanner sc = new Scanner(System.in);
             System.out.print("請輸入開始日期:");
             String startDate = sc.nextLine();
             System.out.print("請輸入結果日期:");
             String endDate = sc.nextLine();
             //調用controller層的方法,傳遞日期,獲取查詢結果集
             
         }

18實現條件查詢帳務的控制層,業務層實現

* A: 實現條件查詢帳務的控制層,業務層實現
    * a: 案例核心代碼
        * a: cn.itcast.gjp.dao包中建立ZhangWuDao類
            /*
             *  實現對數據表 gjp_zhangwu 數據增刪改查操做
             *  dbuils工具類完成,類成員建立QueryRunner對象,指定數據源
             */
            public class ZhangWuDao {
                private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
                /*
                 * 定義方法,查詢數據庫,帶有條件去查詢帳務表
                 * 由業務層調用,查詢結果集存儲到Bean對象,存儲到List集合
                 * 調用者傳遞2個日期字符串
                 */
                public List<ZhangWu> select(String startDate,String endDate){
                    return null;
                }
            }
        * b: cn.itcast.gjp.service包中建立ZhangWuService類
            /*
             *  業務層類
             *  接收上一層,控制層controller的數據
             *  通過計算,傳遞給dao層,操做數據庫
             *  調用dao層中的類,類成員位置,建立Dao類的對象
             */
            public class ZhangWuService {
                private ZhangWuDao dao = new ZhangWuDao();
                /*
                 * 定義方法,實現條件查詢帳務
                 * 方法由控制層調用,傳遞2個日期字符串
                 * 調用dao層的方法,傳遞2個日期字符串
                 * 獲取到查詢結果集
                 */
                public List<ZhangWu> select(String startDate,String endDate){
                    return dao.select(startDate, endDate);
                }
            }
        * c: cn.itcast.gjp.controller包中創建ZhangWuController類
            /*
             *  控制器層
             *  接收視圖層的數據,數據傳遞給service層
             *  成員位置,建立service對象
             */
            public class ZhangWuController {
                private ZhangWuService service = new ZhangWuService();        
                /*
                 * 定義方法,實現條件查詢帳務
                 * 方法由試圖層調用,傳遞兩個日期的字符串
                 * 調用service層的方法,傳遞兩個日期字符串,獲取結果集
                 * 結果集返回給試圖
                 */
                public List<ZhangWu> select(String startDate,String endDate){
                    return service.select(startDate, endDate);
                }                    
            }

19實現條件查詢帳務的dao層實現

* A: 實現條件查詢帳務的dao層實現
    * a: 案例核心代碼
        * a: cn.itcast.gjp.dao包中建立ZhangWuDao類select方法
            /*
             *  實現對數據表 gjp_zhangwu 數據增刪改查操做
             *  dbuils工具類完成,類成員建立QueryRunner對象,指定數據源
             */
            public class ZhangWuDao {
                private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
                /*
                 * 定義方法,查詢數據庫,帶有條件去查詢帳務表
                 * 由業務層調用,查詢結果集存儲到Bean對象,存儲到List集合
                 * 調用者傳遞2個日期字符串
                 */
                public List<ZhangWu> select(String startDate,String endDate){
                    try{
                        //拼寫條件查詢的SQL語句
                        String sql = "SELECT * FROM gjp_zhangwu WHERE createtime BETWEEN ? AND ?";
                        //定義對象數組,存儲?佔位符
                        Object[] params = {startDate,endDate};
                        //調用qr對象的方法query查詢數據表,獲取結果集
                        return qr.query(sql, new BeanListHandler<>(ZhangWu.class),params);
                    }catch(SQLException ex){
                        System.out.println(ex);
                        throw new RuntimeException("條件查詢失敗");
                    }
                }
            }

20實現條件查詢帳務的view層實現

* A: 實現條件查詢帳務的view層實現
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類selectAll方法優化、抽取print方法、select方法
        /*
          * 定義方法,實現查詢全部的帳務數據
          */
         public void selectAll(){
             //調用控制層中的方法,查詢全部的帳務數據
             List<ZhangWu> list = controller.selectAll();
             if(list.size()!=0)
                 print(list);
             else
                 System.out.println("沒有查詢到數據");
         }
        
         /*
          * 定義方法,實現條件查詢帳務數據
          * 提供用戶的輸入日期,開始日期結束日期
          * 就2個日期,傳遞到controller層
          * 調用controller的方法,傳遞2個日期參數
          * 獲取到controller查詢的結果集,打印出來
          */
         public void select(){
             System.out.println("選擇條件查詢,輸入日期格式XXXX-XX-XX");
             Scanner sc = new Scanner(System.in);
             System.out.print("請輸入開始日期:");
             String startDate = sc.nextLine();
             System.out.print("請輸入結果日期:");
             String endDate = sc.nextLine();
             //調用controller層的方法,傳遞日期,獲取查詢結果集
             List<ZhangWu> list = controller.select(startDate, endDate);
             if(list.size()!=0)
                 print(list);
             else
                 System.out.println("沒有查詢到數據");
         }
         
         //輸出帳務數據方法,接收List集合,遍歷集合,輸出表格
         private void print(List<ZhangWu> list) {
                //輸出表頭
                 System.out.println("ID\t\t類別\t\t帳戶\t\t金額\t\t時間\t\t說明");
                 //遍歷集合,結果輸出控制檯
                 for(ZhangWu zw : list){
                     System.out.println(zw.getZwid()+"\t\t"+zw.getFlname()+"\t\t"+zw.getZhanghu()+"\t\t"+
                     zw.getMoney()+"\t\t"+zw.getCreatetime()+"\t"+zw.getDescription());
                 }
            }

21添加帳務功能分析

* A: 添加帳務功能分析
    * a: 編寫MainView類中addZhangWu方法
        * 鍵盤輸入新添加的帳務信息
        * 調用ZhangWuService類中addZhangWu方法,用來指定帳務的添加
        * 添加完畢後,使用輸出語句,提示「添加帳務成功!」
    * b: 編寫ZhangWuService類中addZhangWu方法
        * 調用ZhangWuDao類中addZhangWu方法,用來指定帳務的添加
    * c: 編寫ZhangWuDao類中addZhangWu方法
        * 經過QueryRunner對象,調用update方法更新數據庫表gjp_zhangwu,完成指定帳務添加到數據庫表中

22添加帳務功能菜單和輸入功能實現

* A: 添加帳務功能菜單和輸入功能實現    
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類addZhangWu方法
        /*
         * 定義方法addZhangWu
         * 添加帳務的方法,用戶在界面中選擇菜單1的時候調用、
         * 實現思想:
         *       接收鍵盤輸入,5項輸入,調用controller層方法
         */
        public void addZhangWu() {
            System.out.println("選擇的添加帳務功能,請輸入如下內容");
            Scanner sc = new Scanner(System.in);
            System.out.println("輸入分類名稱");
            String flname = sc.next();
            System.out.println("輸入金額");
            double money = sc.nextDouble();
            System.out.println("輸入帳戶");
            String zhanghu = sc.next();
            System.out.println("輸入日期:格式XXXX-XX-xx");
            String createtime = sc.next();
            System.out.println("輸入具體描述");
            String description = sc.next();
            //將接收到的數據,調用controller層的方法,傳遞參數,實現數據添加
            
        }

23添加帳務功能控制層,業務層實現

* A: 添加帳務功能控制層,業務層實現
    * a: 案例核心代碼
        * cn.itcast.gjp.controller包中的ZhangWuController類addZhangWu方法
            /*
             * 定義方法,實現帳務添加功能
             * 由視圖層調用,傳遞參數(傳遞過來的參數不能是5個數據,傳遞的是一個ZhangWu類型的對象)
             * 本方法調用service層的方法,傳遞ZhangWu對象,獲取到添加後的結果集(添加成功影響的行數,int)
             * 
             */
            public void addZhangWu(ZhangWu zw) {
                service.addZhangWu(zw);
            }
        * cn.itcast.gjp.service包中的ZhangWuService類addZhangWu方法
            /*
             * 定義方法,實現添加帳務
             * 是由控制層調用,傳遞ZhangWu對象
             */
            public void addZhangWu(ZhangWu zw) {
                dao.addZhangWu(zw);
            }
        * cn.itcast.gjp.dao包中的ZhangWuDao類addZhangWu方法
            /*
             * 定義方法,實現添加帳務功能
             * 由業務層調用,傳遞ZhangWu對象
             * 將ZhangWu對象中的數據,添加到數據庫
             */
            public void addZhangWu(ZhangWu zw) {
                 
            }

24添加帳務功能dao層實現

* A: 添加帳務功能dao層實現
    * a: 案例核心代碼    
        * cn.itcast.gjp.dao包中的ZhangWuDao類的addZhangWu方法
            public void addZhangWu(ZhangWu zw) {
                try{
                     //拼接添加數據的sql
                    String sql = "INSERT INTO gjp_zhangwu (flname,money,zhanghu,createtime,description) VALUES(?,?,?,?,?)";
                    //建立對象數組,到處5個佔位符的實際參數
                    //實際參數來源是傳遞過來的對象ZhangWu
                    Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription()};
                    //調用qr對象中的方法update執行添加
                    qr.update(sql, params);
                }catch(SQLException ex) {
                    System.out.println(ex);
                    throw new RuntimeException("帳務添加失敗");
                }
            }

25添加帳務功能view層實現

* A: 添加帳務功能view層實現
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類addZhangWu方法
            public void addZhangWu() {
                System.out.println("選擇的添加帳務功能,請輸入如下內容");
                Scanner sc = new Scanner(System.in);
                System.out.println("輸入分類名稱");
                String flname = sc.next();
                System.out.println("輸入金額");
                double money = sc.nextDouble();
                System.out.println("輸入帳戶");
                String zhanghu = sc.next();
                System.out.println("輸入日期:格式XXXX-XX-xx");
                String createtime = sc.next();
                System.out.println("輸入具體描述");
                String description = sc.next();
                //將接收到的數據,調用controller層的方法,傳遞參數,實現數據添加
                //將用戶輸入的全部參數,封裝成ZhangWu對象
                ZhangWu zw = new ZhangWu(0, flname, money, zhanghu, createtime, description);
                controller.addZhangWu(zw);
                System.out.println("恭喜添加帳務成功");
            }

26編輯帳務功能分析

* A: 編輯帳務功能分析
    * a: 編寫MainView類中editZhangWu方法
        * 鍵盤輸入要編輯的帳務信息ID號
        * 鍵盤輸入要修改的帳務信息內容
        * 調用ZhangWuService類中editZhangWu方法,用來將指定的帳務信息進行更新
        * 更新完畢後,使用輸出語句,提示 「編輯帳務成功!」
    * b: 編寫ZhangWuService類中editZhangWu方法
        * 調用ZhangWuDao類中editZhangWu方法,用來將指定的帳務信息進行更新
    * c: 編寫ZhangWuDao類中editZhangWu方法
        * 經過QueryRunner對象,調用update方法更新數據庫表gjp_zhangwu,完成數據庫表中指定帳務更新操做

27編輯帳務功能功能以前實現查詢全部

* A: 編輯帳務功能功能以前實現查詢全部
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類editZhangWu方法
            public void editZhangWu() {
                //調用查詢全部帳務數據的功能,顯示出來
                //看到全部數據,從中選擇一項,進行修改
                selectAll();
                System.out.println("選擇的是編輯功能,請輸入數據");
                
                
            }

28編輯帳務功能菜單實現

* A: 編輯帳務功能菜單實現
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類editZhangWu方法
            public void editZhangWu() {
                //調用查詢全部帳務數據的功能,顯示出來
                //看到全部數據,從中選擇一項,進行修改
                selectAll();
                System.out.println("選擇的是編輯功能,請輸入數據");
                Scanner sc = new Scanner(System.in);
                System.out.print("請輸入ID");
                int zwid = sc.nextInt();
                System.out.println("輸入分類名稱");
                String flname = sc.next();
                System.out.println("輸入金額");
                double money = sc.nextDouble();
                System.out.println("輸入帳戶");
                String zhanghu = sc.next();
                System.out.println("輸入日期:格式XXXX-XX-xx");
                String createtime = sc.next();
                System.out.println("輸入具體描述");
                String description = sc.next();
                //將用戶輸入的數據,封裝到ZhangWu對象中
                //用戶輸入的ID,必須封裝到到對象中
                ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description);
                //調用controller層中的方法,實現編輯帳務
            }

29編輯帳務功能控制層,業務層實現

* A: 編輯帳務功能控制層,業務層實現
    * a: 案例核心代碼
        * cn.itcast.gjp.controller包中的ZhangWuController類editZhangWu方法
            /*
             * 定義方法,實現編輯帳務功能
             * 由視圖層調用,傳遞參數,也是ZhangWu對象
             * 調用service層的方法,也是ZhangWu對象
             */
            public void editZhangWu(ZhangWu zw) {
                service.editZhangWu(zw);
            }
        * cn.itcast.gjp.service包中的ZhangWuService類editZhangWu方法
            /*
             * 定義方法,實現編輯帳務
             * 由控制層調用,傳遞ZhangWu對象
             * 調用dao層的方法,傳遞ZhangWu對象
             */
            public void editZhangWu(ZhangWu zw) {
                dao.editZhangWu(zw);
            }
        * cn.itcast.gjp.dao包中的ZhangWuDao類editZhangWu方法
            public void editZhangWu(ZhangWu zw) {
                // TODO Auto-generated method stub
                
            }

30編輯帳務功能dao層實現

* A:編輯帳務功能dao層實現
    * a: 案例核心代碼
        * cn.itcast.gjp.dao包中的ZhangWuDao類editZhangWu方法
            /*
             * 定義方法,實現編輯功能
             * 由業務層調用,傳遞ZhangWu對象
             * 將對象中的數據,更新到數據表
             */
            public void editZhangWu(ZhangWu zw) {
                try {
                    //更新數據的SQL
                    String sql = "UPDATE zhangwu SET flname=?,money=?,zhanghu=?,createtime=?,description=? WHERE zwid=?";
                    //定義對象數組,封裝全部數據
                    Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()};
                    //調用qr對象方法update執行更新
                    qr.update(sql, params);
                } catch (SQLException ex) {
                    System.out.println(ex);
                    throw new RuntimeException("編輯帳務失敗");
                }
                
            }

31編輯帳務功能view層實現

* A: 編輯帳務功能view層實現
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類editZhangWu方法
            /*
             * 定義方法,實現對帳務的編輯功能
             * 實現思想:
             *     接收用戶的輸入的信息
             *  封裝成ZhangWu對象
             *  調用控制層的方法,傳遞ZhangWu對象,實現編輯
             * 
             */
            public void editZhangWu() {
                //調用查詢全部帳務數據的功能,顯示出來
                //看到全部數據,從中選擇一項,進行修改
                selectAll();
                System.out.println("選擇的是編輯功能,請輸入數據");
                Scanner sc = new Scanner(System.in);
                System.out.print("請輸入ID");
                int zwid = sc.nextInt();
                System.out.println("輸入分類名稱");
                String flname = sc.next();
                System.out.println("輸入金額");
                double money = sc.nextDouble();
                System.out.println("輸入帳戶");
                String zhanghu = sc.next();
                System.out.println("輸入日期:格式XXXX-XX-xx");
                String createtime = sc.next();
                System.out.println("輸入具體描述");
                String description = sc.next();
                //將用戶輸入的數據,封裝到ZhangWu對象中
                //用戶輸入的ID,必須封裝到到對象中
                ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description);
                //調用controller層中的方法,實現編輯帳務
                controller.editZhangWu(zw);
                System.out.println("帳務編輯成功");
            }

32刪除帳務功能分析

* A: 刪除帳務功能分析
    * a: 編寫MainView類中deleteZhangWu方法
        * 鍵盤輸入要刪除的帳務信息ID號
        * 調用ZhangWuService類中deleteZhangWu方法,用來將指定的帳務信息刪除
        * 刪除完畢後,使用輸出語句,提示 「刪除帳務成功!」
    * b: 編寫ZhangWuService類中deleteZhangWu方法
        * 調用ZhangWuDao類中deleteZhangWu方法,用來將指定的帳務信息刪除
    * c: 編寫ZhangWuDao類中deleteZhangWu方法
        * 經過QueryRunner對象,調用update方法更新數據庫表gjp_zhangwu,完成數據庫表中指定帳務刪除操做

33刪除帳務功能菜單實現

* A: 刪除帳務功能菜單實現
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類deleteZhangWu方法
            /*
             * 定義方法,實現帳務刪除
             * 實現思想:
             *     接收用戶的輸入,輸入一個主鍵數據
             *  調用控制層方法,傳遞一個主鍵
             */
            public void deleteZhangWu() {
                //調用查詢全部帳務數據的功能,顯示出來
                //看到全部數據,從中選擇一項,進行修改
                selectAll();
                System.out.println("選擇的是刪除功能,請輸入序號便可");
                int zwid = new Scanner(System.in).nextInt();
                //調用控制層方法,傳遞主鍵id便可
            }

34刪除帳務功能控制層,業務層實現

* A: 刪除帳務功能控制層,業務層實現
    * a: 案例核心代碼
        * cn.itcast.gjp.controller包中的ZhangWuController類deleteZhangWu方法
            /*
             * 定義方法,實現刪除功能
             * 視圖層調用,傳遞int類型主鍵
             * 調用service層方法,傳遞int主鍵
             */
            public void deleteZhangWu(int zwid) {
                service.deleteZhangWu(zwid);
            }
        * cn.itcast.gjp.service包中的ZhangWuService類deleteZhangWu方法
            /*
             * 定義方法,實現刪除帳務功能
             * 由控制層調用,傳遞主鍵id
             * 調用dao層方法,傳遞主鍵id
             */
            public void deleteZhangWu(int zwid) {
                dao.deleteZhangWu(zwid);
            }
        * cn.itcast.gjp.dao包中的ZhangWuDao類deleteZhangWu方法
            public void deleteZhangWu(int zwid) {
    
            }

35刪除帳務功能dao實現

* A: 刪除帳務功能dao實現
    * a: 案例核心代碼
        * cn.itcast.gjp.dao包中的ZhangWuDao類deleteZhangWu方法
            /*
             * 定義方法,實現刪除業務
             * 業務層調用,傳遞主鍵id
             */
            public void deleteZhangWu(int zwid) {
                try {
                    //拼寫刪除數據SQL
                    String sql = "DELETE FROM gjp_zhangwu WHERE zwid=?";
                    qr.update(sql, zwid);
                } catch (SQLException ex) {
                    System.out.println(ex);
                    throw new RuntimeException("刪除帳務失敗");
                }
            }

36刪除帳務功能view層實現

* A: 刪除帳務功能view層實現
    * a: 案例核心代碼
        * cn.itcast.gjp.view包中創建MainView類editZhangWu方法
            /*
             * 定義方法,實現帳務刪除
             * 實現思想:
             *     接收用戶的輸入,輸入一個主鍵數據
             *  調用控制層方法,傳遞一個主鍵
             */
            public void deleteZhangWu() {
                //調用查詢全部帳務數據的功能,顯示出來
                //看到全部數據,從中選擇一項,進行修改
                selectAll();
                System.out.println("選擇的是刪除功能,請輸入序號便可");
                int zwid = new Scanner(System.in).nextInt();
                //調用控制層方法,傳遞主鍵id便可
                controller.deleteZhangWu(zwid);
                System.out.println("刪除帳務成功");

37總結

* 把今天的知識點總結一遍。
相關文章
相關標籤/搜索