摘要:項目訓練目標項目訓練目標項目目標綜合運用前面所學習的知識點熟練層層層之間的方法相互調用操作熟練操作數據庫表完成增刪改查了解公司項目開發的流程,充分的掌握項目需求分析設計與功能的代碼實現。
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 Path09創建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 List15實現查詢所有賬務的dao層的實現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 selectAll(){ return dao.selectAll(); } } * c: cn.itcast.gjp.controller包中建立ZhangWuController類 /* * 控制器層 * 接收視圖層的數據,數據傳遞給service層 * 成員位置,創建service對象 */ public class ZhangWuController { private ZhangWuService service = new ZhangWuService(); /* * 控制層類定義方法,實現查詢所有的賬務數據 * 方法由試圖層調用,方法調用service層 */ public List selectAll(){ return service.selectAll(); } }
* 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 List16實現查詢所有賬務的view層的實現selectAll(){ try{ //查詢賬務數據的SQL語句 String sql = "SELECT * FROM gjp_zhangwu"; //調用qr對象的方法,query方法,結果集BeanListHandler List list = qr.query(sql, new BeanListHandler<>(ZhangWu.class)); return list; }catch(SQLException ex){ System.out.println(ex); throw new RuntimeException("查詢所有賬務失敗"); } } }
* A: 實現查詢所有賬務的view層的實現 * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類selectAll方法 /* * 定義方法,實現查詢所有的賬務數據 */ public void selectAll(){ //調用控制層中的方法,查詢所有的賬務數據 List17實現條件查詢賬務的菜單實現list = controller.selectAll(); //輸出表頭 System.out.println("ID 類別 賬戶 金額 時間 說明"); //遍歷集合,結果輸出控制臺 for(ZhangWu zw : list){ System.out.println(zw.getZwid()+" "+zw.getFlname()+" "+zw.getZhanghu()+" "+ zw.getMoney()+" "+zw.getCreatetime()+" "+zw.getDescription()); } }
* 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 List19實現條件查詢賬務的dao層實現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 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 select(String startDate,String endDate){ return service.select(startDate, endDate); } }
* 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 List20實現條件查詢賬務的view層實現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("條件查詢失敗"); } } }
* A: 實現條件查詢賬務的view層實現 * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類selectAll方法優化、抽取print方法、select方法 /* * 定義方法,實現查詢所有的賬務數據 */ public void selectAll(){ //調用控制層中的方法,查詢所有的賬務數據 List21添加賬務功能分析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 list = controller.select(startDate, endDate); if(list.size()!=0) print(list); else System.out.println("沒有查詢到數據"); } //輸出賬務數據方法,接收List集合,遍歷集合,輸出表格 private void print(List list) { //輸出表頭 System.out.println("ID 類別 賬戶 金額 時間 說明"); //遍歷集合,結果輸出控制臺 for(ZhangWu zw : list){ System.out.println(zw.getZwid()+" "+zw.getFlname()+" "+zw.getZhanghu()+" "+ zw.getMoney()+" "+zw.getCreatetime()+" "+zw.getDescription()); } }
* 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總結
* 把今天的知識點總結一遍。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67180.html
摘要:餐飲服務明廚亮灶工作指導意見鼓勵餐飲服務者將視頻信息上傳網絡,保存不少于天。而由網易和中國電信合力打造的青果云管家,已為明廚亮灶做出好榜樣。此外,青果云管家還一直與全國各地餐飲協會合作透明廚房項目。《餐飲服務明廚亮灶工作指導意見》鼓勵餐飲服務者將視頻信息上傳網絡,保存不少于7天。而由網易和中國電信合力打造的青果云管家,已為明廚亮灶做出好榜樣。今年初,青果云管家與浙江某小學再推陽光食堂二期建設...
摘要:運營管家是友盟微社區集成移動垂直領域的社交運營專業的數據服務等經驗,為移動開發者推出一套微社區運營的完整解決方案。 運營管家是友盟微社區集成移動垂直領域的社交運營、專業的數據服務等經驗,為移動開發者推出一套微社區運營的完整解決方案。它不僅幫助各類App實時接入社區,提供全面的技術支持和運營建議,同時,它還利用友盟移動大數據優勢,借助行業數據分析合理調整規劃社區運營架構,有針對性地提高用...
摘要:對比操作前后的來定位內存泄露的根因所在。手機管家內存泄露每日監控方案目前手機管家的內存泄露每日監控會自動運行并輸出是否存在疑似泄露的報告郵件,不論泄露對象的大小。 騰訊Bugly特約作者: 姚潮生 最原始的內存泄露測試 重復多次操作關鍵的可疑的路徑,從內存監控工具中觀察內存曲線,是否存在不斷上升的趨勢且不會在程序返回時明顯回落。這種方式可以發現最基本,也是最明顯的內存泄露問題,對用戶價...
閱讀 2716·2021-09-24 09:47
閱讀 4366·2021-08-27 13:10
閱讀 2981·2019-08-30 15:44
閱讀 1281·2019-08-29 12:56
閱讀 2594·2019-08-28 18:07
閱讀 2614·2019-08-26 14:05
閱讀 2552·2019-08-26 13:41
閱讀 1265·2019-08-26 13:33