摘要:項目訓練目標項目訓練目標項目目標綜合運用前面所學習的知識點熟練層層層之間的方法相互調(diào)用操作熟練操作數(shù)據(jù)庫表完成增刪改查了解公司項目開發(fā)的流程,充分的掌握項目需求分析設(shè)計與功能的代碼實現(xiàn)。
01項目訓練目標
* A: 項目訓練目標 * a: 項目目標 * 綜合運用前面所學習的知識點 * 熟練View層、Service層、Dao層之間的方法相互調(diào)用操作、 * 熟練dbutils操作數(shù)據(jù)庫表完成增刪改查 * 了解公司項目開發(fā)的流程,充分的掌握項目需求分析、設(shè)計與功能的代碼實現(xiàn)。提高同學們獨立分析需求與功能實現(xiàn)的能力。02項目中的功能模塊
* A: 項目中的功能模塊 * a: 五大模塊 * 查詢賬務(wù) * 多條件組合查詢賬務(wù) * 添加賬務(wù) * 編輯賬務(wù) * 刪除賬務(wù)03技術(shù)的選擇和相關(guān)jar包
* A: 技術(shù)的選擇和相關(guān)jar包 * a: apache的commons組件: * commons-dbutils-1.4.jar:封裝并簡化了JDBC; * commons-dbcp-1.4.jar:apache commons提供的數(shù)據(jù)庫連接池組件,命名為DBCP; * b: commons.pool-1.3.jar:DBCP連接池依賴該jar包; * mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驅(qū)動包,用JDBC連接MySQL數(shù)據(jù)庫必須使用該JAR包。04項目中的工具類
* A: 項目中的工具類 * a: 工具類的介紹 * 每個項目中都會有很多個工具類,不要求每個工具類對能獨立寫出來,但是要會使用工具類 * JDBCUtils:用來創(chuàng)建數(shù)據(jù)庫連接池對象05數(shù)據(jù)表的設(shè)計
* A: 數(shù)據(jù)表的設(shè)計 * a: 數(shù)據(jù)表的設(shè)計(詳見:day34_source/表關(guān)系.JPG) * 表與表之間是有關(guān)系的 * 主表和從表的關(guān)系 * 主表中的主鍵作為從表中的外鍵06創(chuàng)建數(shù)據(jù)庫數(shù)據(jù)表寫入測試數(shù)據(jù)
* A: 創(chuàng)建數(shù)據(jù)庫數(shù)據(jù)表寫入測試數(shù)據(jù) * a: 創(chuàng)建數(shù)據(jù)庫數(shù)據(jù)表 /* 創(chuàng)建管家婆的數(shù)據(jù)庫 名字 gjp */ CREATE DATABASE gjp; USE gjp; /* 創(chuàng)建數(shù)據(jù)表,表名賬務(wù) 字段,列 主鍵 分類名稱 可變字符 金額 double 賬戶 可變字符 (支付,收入方法) 創(chuàng)建日期 date 賬務(wù)描述 可變字符 */ CREATE TABLE gjp_zhangwu( -- 主鍵 zwid INT PRIMARY KEY AUTO_INCREMENT, -- 分類名稱 flname VARCHAR(200), -- 金額 money DOUBLE, -- 賬戶 zhanghu VARCHAR(100), -- 創(chuàng)建日期 createtime DATE, -- 賬務(wù)描述 description VARCHAR(1000) ); SELECT * FROM gjp_zhangwu; * b: 寫入數(shù)據(jù) -- 寫入測試的數(shù)據(jù) 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,"現(xiàn)金","2016-03-15","開工資了"); INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (3,"服裝支出",1998,"現(xiàn)金","2016-04-02","買衣服"); INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (4,"吃飯支出",325,"現(xiàn)金","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,"現(xiàn)金","2016-10-28","朋友結(jié)婚"); INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (9,"其他支出",1560,"現(xiàn)金","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,"現(xiàn)金","2016-10-30","開資"); INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (13,"交通支出",2000,"現(xiàn)金","2016-10-30","機票好貴"); INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (14,"工資收入",5000,"現(xiàn)金","2016-10-30","又開資");07項目中的分層設(shè)計
* A: 項目中的分層設(shè)計 * a: 各層功能介紹 * view層作用: 視圖層,即項目中的界面 * controller層作用: 控制層, 獲取界面上的數(shù)據(jù),為界面設(shè)置數(shù)據(jù); 將要實現(xiàn)的功能交給業(yè)務(wù)層處理 * service層作用: 業(yè)務(wù)層, 功能的實現(xiàn), 與controller控制層和數(shù)據(jù)訪問層DAO交互, 將對數(shù)據(jù)庫的操作交給DAO數(shù)據(jù)訪問層來處理 * dao層作用: 數(shù)據(jù)訪問層, 用來操作數(shù)據(jù)庫表的數(shù)據(jù) * db數(shù)據(jù)庫: 這里指MySQL * domain 實體包: 存放JavaBean * tools工具包:存放項目中使用到的工具類 * test 測試包: 存放項目功能測試的代碼08創(chuàng)建項目_分層_導入jar包
* A: 創(chuàng)建項目_分層_導入jar包 * a: 創(chuàng)建工程包 * cn.itcast.gjp.app: 存放main方法類; * cn.itcast.gjp.domain: 存放JavaBean; * cn.itcast.gjp.view: 存放界面,及表現(xiàn)層類; * cn.itcast.gjp.service: 存放業(yè)務(wù)層類; * cn.itcast.gjp.dao: 存放數(shù)據(jù)訪問層類; * cn.itcast.gjp.tools:存放工具類 * b: 導入jar包 * 在項目根路徑下建立文件夾lib * 導入以下jar包 * mysql-connector-java-5.1.37-bin.jar:數(shù)據(jù)庫驅(qū)動 * commons-dbutils-1.6.jar:提供QueryRunner類方便進行增刪改查操作 * commons-dbcp-1.4.jar: * commons-pool-1.5.6.jar:提供高效的數(shù)據(jù)庫連接池技術(shù) * 拷貝以上jar包,選定拷貝的jar包/右鍵/Build Path/Add to Build Path09創(chuàng)建domain包中的類
* A: 創(chuàng)建domain包中的類 * a: 案例代碼 public class ZhangWu { private int zwid; private String flname; private double money; private String zhanghu; private String createtime; private String description; //注意生成空參構(gòu)造、有參構(gòu)造、set和get方法、toString方法等 }10創(chuàng)建JDBCUtils工具類
* A:創(chuàng)建JDBCUtils工具類 * a: 案例代碼 public class JDBCUtils{ //創(chuàng)建BasicDataSource對象 private static BasicDataSource datasource = new BasicDataSource(); //靜態(tài)代碼塊,實現(xiàn)必要參數(shù)設(shè)置 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創(chuàng)建其他包中的類
* A: 創(chuàng)建其他包中的類 * a: cn.itcast.gjp.dao包中創(chuàng)建ZhangWuDao類 /* * 實現(xiàn)對數(shù)據(jù)表 gjp_zhangwu 數(shù)據(jù)增刪改查操作 * dbuils工具類完成,類成員創(chuàng)建QueryRunner對象,指定數(shù)據(jù)源 */ public class ZhangWuDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); } * b: cn.itcast.gjp.service包中創(chuàng)建ZhangWuService類 /* * 業(yè)務(wù)層類 * 接收上一層,控制層controller的數(shù)據(jù) * 經(jīng)過計算,傳遞給dao層,操作數(shù)據(jù)庫 * 調(diào)用dao層中的類,類成員位置,創(chuàng)建Dao類的對象 */ public class ZhangWuService { private ZhangWuDao dao = new ZhangWuDao(); } * c: cn.itcast.gjp.controller包中建立ZhangWuController類 /* * 控制器層 * 接收視圖層的數(shù)據(jù),數(shù)據(jù)傳遞給service層 * 成員位置,創(chuàng)建service對象 */ public class ZhangWuController { private ZhangWuService service = new ZhangWuService(); } * d: cn.itcast.gjp.view包中建立MainView類 /* * 試圖層,用戶看到和操作的界面 * 數(shù)據(jù)傳遞給controller層實現(xiàn) * 成員位置,創(chuàng)建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實現(xiàn)用戶的界面菜單
* A: 實現(xiàn)用戶的界面菜單 * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類中添加run方法 /* * 實現(xiàn)界面效果 * 接收用戶的輸入 * 根據(jù)數(shù)據(jù),調(diào)用不同的功能方法 */ public void run(){ //創(chuàng)建Scanner類對象,反復鍵盤輸入 Scanner sc = new Scanner(System.in); while(true){ System.out.println("---------------管家婆家庭記賬軟件---------------"); System.out.println("1.添加賬務(wù) 2.編輯賬務(wù) 3.刪除賬務(wù) 4.查詢賬務(wù) 5.退出系統(tǒng)"); System.out.println("請輸入要操作的功能序號[1-5]:"); //接收用戶的菜單選擇 int choose = sc.nextInt(); //對選擇的菜單判斷,調(diào)用不同的功能 switch(choose){ case 1: // 選擇添加賬務(wù),調(diào)用添加賬務(wù)的方法 break; case 2: // 選擇的編輯賬務(wù),調(diào)用編輯賬務(wù)方法 break; case 3: // 選擇的刪除賬務(wù),調(diào)用刪除賬務(wù)方法 break; case 4: // 選擇的是查詢賬務(wù),調(diào)用查詢方法 //selectZhangWu(); break; case 5: System.exit(0); break; } } }13實現(xiàn)查詢的界面菜單
* A: 實現(xiàn)查詢的界面菜單 * 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(); //判斷根據(jù)用戶的選擇,調(diào)用不同的功能 switch(selectChooser){ case 1: //選擇的查詢所有,調(diào)用查詢所有的方法 selectAll(); break; case 2: //選的條件查詢,調(diào)用帶有查詢條件的方法 select(); break; } } /* * 定義方法,實現(xiàn)查詢所有的賬務(wù)數(shù)據(jù) */ public void selectAll(){ } /* * 定義方法,實現(xiàn)條件查詢賬務(wù)數(shù)據(jù) * 提供用戶的輸入日期,開始日期結(jié)束日期 * 就2個日期,傳遞到controller層 * 調(diào)用controller的方法,傳遞2個日期參數(shù) * 獲取到controller查詢的結(jié)果集,打印出來 */ public void select(){ }14實現(xiàn)查詢所有賬務(wù)的控制,業(yè)務(wù)層的實現(xiàn)
* A: 實現(xiàn)查詢所有賬務(wù)的控制,業(yè)務(wù)層的實現(xiàn) * a: 案例核心代碼 * a: cn.itcast.gjp.dao包中創(chuàng)建ZhangWuDao類 /* * 實現(xiàn)對數(shù)據(jù)表 gjp_zhangwu 數(shù)據(jù)增刪改查操作 * dbuils工具類完成,類成員創(chuàng)建QueryRunner對象,指定數(shù)據(jù)源 */ public class ZhangWuDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); /* * 定義方法,查詢數(shù)據(jù)庫,獲取所有的賬務(wù)數(shù)據(jù) * 方法,由業(yè)務(wù)層調(diào)用 * 結(jié)果集,將所有的賬務(wù)數(shù)據(jù),存儲到Bean對象中,存儲到集合中 */ public List15實現(xiàn)查詢所有賬務(wù)的dao層的實現(xiàn)selectAll(){ return null; } } * b: cn.itcast.gjp.service包中創(chuàng)建ZhangWuService類 /* * 業(yè)務(wù)層類 * 接收上一層,控制層controller的數(shù)據(jù) * 經(jīng)過計算,傳遞給dao層,操作數(shù)據(jù)庫 * 調(diào)用dao層中的類,類成員位置,創(chuàng)建Dao類的對象 */ public class ZhangWuService { private ZhangWuDao dao = new ZhangWuDao(); /* * 定義方法,實現(xiàn)查詢所有的賬務(wù)數(shù)據(jù) * 此方法,由控制層調(diào)用, 去調(diào)用dao層的方法 * 返回存儲ZhangWu對象的List集合 */ public List selectAll(){ return dao.selectAll(); } } * c: cn.itcast.gjp.controller包中建立ZhangWuController類 /* * 控制器層 * 接收視圖層的數(shù)據(jù),數(shù)據(jù)傳遞給service層 * 成員位置,創(chuàng)建service對象 */ public class ZhangWuController { private ZhangWuService service = new ZhangWuService(); /* * 控制層類定義方法,實現(xiàn)查詢所有的賬務(wù)數(shù)據(jù) * 方法由試圖層調(diào)用,方法調(diào)用service層 */ public List selectAll(){ return service.selectAll(); } }
* A: 實現(xiàn)查詢所有賬務(wù)的dao層的實現(xiàn) * a: 案例核心代碼 * a: cn.itcast.gjp.dao包中創(chuàng)建ZhangWuDao類selectAll方法 /* * 實現(xiàn)對數(shù)據(jù)表 gjp_zhangwu 數(shù)據(jù)增刪改查操作 * dbuils工具類完成,類成員創(chuàng)建QueryRunner對象,指定數(shù)據(jù)源 */ public class ZhangWuDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); /* * 定義方法,查詢數(shù)據(jù)庫,獲取所有的賬務(wù)數(shù)據(jù) * 方法,由業(yè)務(wù)層調(diào)用 * 結(jié)果集,將所有的賬務(wù)數(shù)據(jù),存儲到Bean對象中,存儲到集合中 */ public List16實現(xiàn)查詢所有賬務(wù)的view層的實現(xiàn)selectAll(){ try{ //查詢賬務(wù)數(shù)據(jù)的SQL語句 String sql = "SELECT * FROM gjp_zhangwu"; //調(diào)用qr對象的方法,query方法,結(jié)果集BeanListHandler List list = qr.query(sql, new BeanListHandler<>(ZhangWu.class)); return list; }catch(SQLException ex){ System.out.println(ex); throw new RuntimeException("查詢所有賬務(wù)失敗"); } } }
* A: 實現(xiàn)查詢所有賬務(wù)的view層的實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類selectAll方法 /* * 定義方法,實現(xiàn)查詢所有的賬務(wù)數(shù)據(jù) */ public void selectAll(){ //調(diào)用控制層中的方法,查詢所有的賬務(wù)數(shù)據(jù) List17實現(xiàn)條件查詢賬務(wù)的菜單實現(xiàn)list = controller.selectAll(); //輸出表頭 System.out.println("ID 類別 賬戶 金額 時間 說明"); //遍歷集合,結(jié)果輸出控制臺 for(ZhangWu zw : list){ System.out.println(zw.getZwid()+" "+zw.getFlname()+" "+zw.getZhanghu()+" "+ zw.getMoney()+" "+zw.getCreatetime()+" "+zw.getDescription()); } }
* A: 實現(xiàn)條件查詢賬務(wù)的菜單實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類select方法 /* * 定義方法,實現(xiàn)條件查詢賬務(wù)數(shù)據(jù) * 提供用戶的輸入日期,開始日期結(jié)束日期 * 就2個日期,傳遞到controller層 * 調(diào)用controller的方法,傳遞2個日期參數(shù) * 獲取到controller查詢的結(jié)果集,打印出來 */ 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("請輸入結(jié)果日期:"); String endDate = sc.nextLine(); //調(diào)用controller層的方法,傳遞日期,獲取查詢結(jié)果集 }18實現(xiàn)條件查詢賬務(wù)的控制層,業(yè)務(wù)層實現(xiàn)
* A: 實現(xiàn)條件查詢賬務(wù)的控制層,業(yè)務(wù)層實現(xiàn) * a: 案例核心代碼 * a: cn.itcast.gjp.dao包中創(chuàng)建ZhangWuDao類 /* * 實現(xiàn)對數(shù)據(jù)表 gjp_zhangwu 數(shù)據(jù)增刪改查操作 * dbuils工具類完成,類成員創(chuàng)建QueryRunner對象,指定數(shù)據(jù)源 */ public class ZhangWuDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); /* * 定義方法,查詢數(shù)據(jù)庫,帶有條件去查詢賬務(wù)表 * 由業(yè)務(wù)層調(diào)用,查詢結(jié)果集存儲到Bean對象,存儲到List集合 * 調(diào)用者傳遞2個日期字符串 */ public List19實現(xiàn)條件查詢賬務(wù)的dao層實現(xiàn)select(String startDate,String endDate){ return null; } } * b: cn.itcast.gjp.service包中創(chuàng)建ZhangWuService類 /* * 業(yè)務(wù)層類 * 接收上一層,控制層controller的數(shù)據(jù) * 經(jīng)過計算,傳遞給dao層,操作數(shù)據(jù)庫 * 調(diào)用dao層中的類,類成員位置,創(chuàng)建Dao類的對象 */ public class ZhangWuService { private ZhangWuDao dao = new ZhangWuDao(); /* * 定義方法,實現(xiàn)條件查詢賬務(wù) * 方法由控制層調(diào)用,傳遞2個日期字符串 * 調(diào)用dao層的方法,傳遞2個日期字符串 * 獲取到查詢結(jié)果集 */ public List select(String startDate,String endDate){ return dao.select(startDate, endDate); } } * c: cn.itcast.gjp.controller包中建立ZhangWuController類 /* * 控制器層 * 接收視圖層的數(shù)據(jù),數(shù)據(jù)傳遞給service層 * 成員位置,創(chuàng)建service對象 */ public class ZhangWuController { private ZhangWuService service = new ZhangWuService(); /* * 定義方法,實現(xiàn)條件查詢賬務(wù) * 方法由試圖層調(diào)用,傳遞兩個日期的字符串 * 調(diào)用service層的方法,傳遞兩個日期字符串,獲取結(jié)果集 * 結(jié)果集返回給試圖 */ public List select(String startDate,String endDate){ return service.select(startDate, endDate); } }
* A: 實現(xiàn)條件查詢賬務(wù)的dao層實現(xiàn) * a: 案例核心代碼 * a: cn.itcast.gjp.dao包中創(chuàng)建ZhangWuDao類select方法 /* * 實現(xiàn)對數(shù)據(jù)表 gjp_zhangwu 數(shù)據(jù)增刪改查操作 * dbuils工具類完成,類成員創(chuàng)建QueryRunner對象,指定數(shù)據(jù)源 */ public class ZhangWuDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); /* * 定義方法,查詢數(shù)據(jù)庫,帶有條件去查詢賬務(wù)表 * 由業(yè)務(wù)層調(diào)用,查詢結(jié)果集存儲到Bean對象,存儲到List集合 * 調(diào)用者傳遞2個日期字符串 */ public List20實現(xiàn)條件查詢賬務(wù)的view層實現(xiàn)select(String startDate,String endDate){ try{ //拼寫條件查詢的SQL語句 String sql = "SELECT * FROM gjp_zhangwu WHERE createtime BETWEEN ? AND ?"; //定義對象數(shù)組,存儲?占位符 Object[] params = {startDate,endDate}; //調(diào)用qr對象的方法query查詢數(shù)據(jù)表,獲取結(jié)果集 return qr.query(sql, new BeanListHandler<>(ZhangWu.class),params); }catch(SQLException ex){ System.out.println(ex); throw new RuntimeException("條件查詢失敗"); } } }
* A: 實現(xiàn)條件查詢賬務(wù)的view層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類selectAll方法優(yōu)化、抽取print方法、select方法 /* * 定義方法,實現(xiàn)查詢所有的賬務(wù)數(shù)據(jù) */ public void selectAll(){ //調(diào)用控制層中的方法,查詢所有的賬務(wù)數(shù)據(jù) List21添加賬務(wù)功能分析list = controller.selectAll(); if(list.size()!=0) print(list); else System.out.println("沒有查詢到數(shù)據(jù)"); } /* * 定義方法,實現(xiàn)條件查詢賬務(wù)數(shù)據(jù) * 提供用戶的輸入日期,開始日期結(jié)束日期 * 就2個日期,傳遞到controller層 * 調(diào)用controller的方法,傳遞2個日期參數(shù) * 獲取到controller查詢的結(jié)果集,打印出來 */ 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("請輸入結(jié)果日期:"); String endDate = sc.nextLine(); //調(diào)用controller層的方法,傳遞日期,獲取查詢結(jié)果集 List list = controller.select(startDate, endDate); if(list.size()!=0) print(list); else System.out.println("沒有查詢到數(shù)據(jù)"); } //輸出賬務(wù)數(shù)據(jù)方法,接收List集合,遍歷集合,輸出表格 private void print(List list) { //輸出表頭 System.out.println("ID 類別 賬戶 金額 時間 說明"); //遍歷集合,結(jié)果輸出控制臺 for(ZhangWu zw : list){ System.out.println(zw.getZwid()+" "+zw.getFlname()+" "+zw.getZhanghu()+" "+ zw.getMoney()+" "+zw.getCreatetime()+" "+zw.getDescription()); } }
* A: 添加賬務(wù)功能分析 * a: 編寫MainView類中addZhangWu方法 * 鍵盤輸入新添加的賬務(wù)信息 * 調(diào)用ZhangWuService類中addZhangWu方法,用來指定賬務(wù)的添加 * 添加完畢后,使用輸出語句,提示“添加賬務(wù)成功!” * b: 編寫ZhangWuService類中addZhangWu方法 * 調(diào)用ZhangWuDao類中addZhangWu方法,用來指定賬務(wù)的添加 * c: 編寫ZhangWuDao類中addZhangWu方法 * 通過QueryRunner對象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成指定賬務(wù)添加到數(shù)據(jù)庫表中22添加賬務(wù)功能菜單和輸入功能實現(xiàn)
* A: 添加賬務(wù)功能菜單和輸入功能實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類addZhangWu方法 /* * 定義方法addZhangWu * 添加賬務(wù)的方法,用戶在界面中選擇菜單1的時候調(diào)用、 * 實現(xiàn)思想: * 接收鍵盤輸入,5項輸入,調(diào)用controller層方法 */ public void addZhangWu() { System.out.println("選擇的添加賬務(wù)功能,請輸入以下內(nèi)容"); 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(); //將接收到的數(shù)據(jù),調(diào)用controller層的方法,傳遞參數(shù),實現(xiàn)數(shù)據(jù)添加 }23添加賬務(wù)功能控制層,業(yè)務(wù)層實現(xiàn)
* A: 添加賬務(wù)功能控制層,業(yè)務(wù)層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.controller包中的ZhangWuController類addZhangWu方法 /* * 定義方法,實現(xiàn)賬務(wù)添加功能 * 由視圖層調(diào)用,傳遞參數(shù)(傳遞過來的參數(shù)不能是5個數(shù)據(jù),傳遞的是一個ZhangWu類型的對象) * 本方法調(diào)用service層的方法,傳遞ZhangWu對象,獲取到添加后的結(jié)果集(添加成功影響的行數(shù),int) * */ public void addZhangWu(ZhangWu zw) { service.addZhangWu(zw); } * cn.itcast.gjp.service包中的ZhangWuService類addZhangWu方法 /* * 定義方法,實現(xiàn)添加賬務(wù) * 是由控制層調(diào)用,傳遞ZhangWu對象 */ public void addZhangWu(ZhangWu zw) { dao.addZhangWu(zw); } * cn.itcast.gjp.dao包中的ZhangWuDao類addZhangWu方法 /* * 定義方法,實現(xiàn)添加賬務(wù)功能 * 由業(yè)務(wù)層調(diào)用,傳遞ZhangWu對象 * 將ZhangWu對象中的數(shù)據(jù),添加到數(shù)據(jù)庫 */ public void addZhangWu(ZhangWu zw) { }24添加賬務(wù)功能dao層實現(xiàn)
* A: 添加賬務(wù)功能dao層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.dao包中的ZhangWuDao類的addZhangWu方法 public void addZhangWu(ZhangWu zw) { try{ //拼接添加數(shù)據(jù)的sql String sql = "INSERT INTO gjp_zhangwu (flname,money,zhanghu,createtime,description) VALUES(?,?,?,?,?)"; //創(chuàng)建對象數(shù)組,處處5個占位符的實際參數(shù) //實際參數(shù)來源是傳遞過來的對象ZhangWu Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription()}; //調(diào)用qr對象中的方法update執(zhí)行添加 qr.update(sql, params); }catch(SQLException ex) { System.out.println(ex); throw new RuntimeException("賬務(wù)添加失敗"); } }25添加賬務(wù)功能view層實現(xiàn)
* A: 添加賬務(wù)功能view層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類addZhangWu方法 public void addZhangWu() { System.out.println("選擇的添加賬務(wù)功能,請輸入以下內(nèi)容"); 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(); //將接收到的數(shù)據(jù),調(diào)用controller層的方法,傳遞參數(shù),實現(xiàn)數(shù)據(jù)添加 //將用戶輸入的所有參數(shù),封裝成ZhangWu對象 ZhangWu zw = new ZhangWu(0, flname, money, zhanghu, createtime, description); controller.addZhangWu(zw); System.out.println("恭喜添加賬務(wù)成功"); }26編輯賬務(wù)功能分析
* A: 編輯賬務(wù)功能分析 * a: 編寫MainView類中editZhangWu方法 * 鍵盤輸入要編輯的賬務(wù)信息ID號 * 鍵盤輸入要修改的賬務(wù)信息內(nèi)容 * 調(diào)用ZhangWuService類中editZhangWu方法,用來將指定的賬務(wù)信息進行更新 * 更新完畢后,使用輸出語句,提示 “編輯賬務(wù)成功!” * b: 編寫ZhangWuService類中editZhangWu方法 * 調(diào)用ZhangWuDao類中editZhangWu方法,用來將指定的賬務(wù)信息進行更新 * c: 編寫ZhangWuDao類中editZhangWu方法 * 通過QueryRunner對象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成數(shù)據(jù)庫表中指定賬務(wù)更新操作27編輯賬務(wù)功能功能之前實現(xiàn)查詢所有
* A: 編輯賬務(wù)功能功能之前實現(xiàn)查詢所有 * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類editZhangWu方法 public void editZhangWu() { //調(diào)用查詢所有賬務(wù)數(shù)據(jù)的功能,顯示出來 //看到所有數(shù)據(jù),從中選擇一項,進行修改 selectAll(); System.out.println("選擇的是編輯功能,請輸入數(shù)據(jù)"); }28編輯賬務(wù)功能菜單實現(xiàn)
* A: 編輯賬務(wù)功能菜單實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類editZhangWu方法 public void editZhangWu() { //調(diào)用查詢所有賬務(wù)數(shù)據(jù)的功能,顯示出來 //看到所有數(shù)據(jù),從中選擇一項,進行修改 selectAll(); System.out.println("選擇的是編輯功能,請輸入數(shù)據(jù)"); 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(); //將用戶輸入的數(shù)據(jù),封裝到ZhangWu對象中 //用戶輸入的ID,必須封裝到到對象中 ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description); //調(diào)用controller層中的方法,實現(xiàn)編輯賬務(wù) }29編輯賬務(wù)功能控制層,業(yè)務(wù)層實現(xiàn)
* A: 編輯賬務(wù)功能控制層,業(yè)務(wù)層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.controller包中的ZhangWuController類editZhangWu方法 /* * 定義方法,實現(xiàn)編輯賬務(wù)功能 * 由視圖層調(diào)用,傳遞參數(shù),也是ZhangWu對象 * 調(diào)用service層的方法,也是ZhangWu對象 */ public void editZhangWu(ZhangWu zw) { service.editZhangWu(zw); } * cn.itcast.gjp.service包中的ZhangWuService類editZhangWu方法 /* * 定義方法,實現(xiàn)編輯賬務(wù) * 由控制層調(diào)用,傳遞ZhangWu對象 * 調(diào)用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編輯賬務(wù)功能dao層實現(xiàn)
* A:編輯賬務(wù)功能dao層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.dao包中的ZhangWuDao類editZhangWu方法 /* * 定義方法,實現(xiàn)編輯功能 * 由業(yè)務(wù)層調(diào)用,傳遞ZhangWu對象 * 將對象中的數(shù)據(jù),更新到數(shù)據(jù)表 */ public void editZhangWu(ZhangWu zw) { try { //更新數(shù)據(jù)的SQL String sql = "UPDATE zhangwu SET flname=?,money=?,zhanghu=?,createtime=?,description=? WHERE zwid=?"; //定義對象數(shù)組,封裝所有數(shù)據(jù) Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()}; //調(diào)用qr對象方法update執(zhí)行更新 qr.update(sql, params); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("編輯賬務(wù)失敗"); } }31編輯賬務(wù)功能view層實現(xiàn)
* A: 編輯賬務(wù)功能view層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類editZhangWu方法 /* * 定義方法,實現(xiàn)對賬務(wù)的編輯功能 * 實現(xiàn)思想: * 接收用戶的輸入的信息 * 封裝成ZhangWu對象 * 調(diào)用控制層的方法,傳遞ZhangWu對象,實現(xiàn)編輯 * */ public void editZhangWu() { //調(diào)用查詢所有賬務(wù)數(shù)據(jù)的功能,顯示出來 //看到所有數(shù)據(jù),從中選擇一項,進行修改 selectAll(); System.out.println("選擇的是編輯功能,請輸入數(shù)據(jù)"); 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(); //將用戶輸入的數(shù)據(jù),封裝到ZhangWu對象中 //用戶輸入的ID,必須封裝到到對象中 ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description); //調(diào)用controller層中的方法,實現(xiàn)編輯賬務(wù) controller.editZhangWu(zw); System.out.println("賬務(wù)編輯成功"); }32刪除賬務(wù)功能分析
* A: 刪除賬務(wù)功能分析 * a: 編寫MainView類中deleteZhangWu方法 * 鍵盤輸入要刪除的賬務(wù)信息ID號 * 調(diào)用ZhangWuService類中deleteZhangWu方法,用來將指定的賬務(wù)信息刪除 * 刪除完畢后,使用輸出語句,提示 “刪除賬務(wù)成功!” * b: 編寫ZhangWuService類中deleteZhangWu方法 * 調(diào)用ZhangWuDao類中deleteZhangWu方法,用來將指定的賬務(wù)信息刪除 * c: 編寫ZhangWuDao類中deleteZhangWu方法 * 通過QueryRunner對象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成數(shù)據(jù)庫表中指定賬務(wù)刪除操作33刪除賬務(wù)功能菜單實現(xiàn)
* A: 刪除賬務(wù)功能菜單實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類deleteZhangWu方法 /* * 定義方法,實現(xiàn)賬務(wù)刪除 * 實現(xiàn)思想: * 接收用戶的輸入,輸入一個主鍵數(shù)據(jù) * 調(diào)用控制層方法,傳遞一個主鍵 */ public void deleteZhangWu() { //調(diào)用查詢所有賬務(wù)數(shù)據(jù)的功能,顯示出來 //看到所有數(shù)據(jù),從中選擇一項,進行修改 selectAll(); System.out.println("選擇的是刪除功能,請輸入序號即可"); int zwid = new Scanner(System.in).nextInt(); //調(diào)用控制層方法,傳遞主鍵id即可 }34刪除賬務(wù)功能控制層,業(yè)務(wù)層實現(xiàn)
* A: 刪除賬務(wù)功能控制層,業(yè)務(wù)層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.controller包中的ZhangWuController類deleteZhangWu方法 /* * 定義方法,實現(xiàn)刪除功能 * 視圖層調(diào)用,傳遞int類型主鍵 * 調(diào)用service層方法,傳遞int主鍵 */ public void deleteZhangWu(int zwid) { service.deleteZhangWu(zwid); } * cn.itcast.gjp.service包中的ZhangWuService類deleteZhangWu方法 /* * 定義方法,實現(xiàn)刪除賬務(wù)功能 * 由控制層調(diào)用,傳遞主鍵id * 調(diào)用dao層方法,傳遞主鍵id */ public void deleteZhangWu(int zwid) { dao.deleteZhangWu(zwid); } * cn.itcast.gjp.dao包中的ZhangWuDao類deleteZhangWu方法 public void deleteZhangWu(int zwid) { }35刪除賬務(wù)功能dao實現(xiàn)
* A: 刪除賬務(wù)功能dao實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.dao包中的ZhangWuDao類deleteZhangWu方法 /* * 定義方法,實現(xiàn)刪除業(yè)務(wù) * 業(yè)務(wù)層調(diào)用,傳遞主鍵id */ public void deleteZhangWu(int zwid) { try { //拼寫刪除數(shù)據(jù)SQL String sql = "DELETE FROM gjp_zhangwu WHERE zwid=?"; qr.update(sql, zwid); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("刪除賬務(wù)失敗"); } }36刪除賬務(wù)功能view層實現(xiàn)
* A: 刪除賬務(wù)功能view層實現(xiàn) * a: 案例核心代碼 * cn.itcast.gjp.view包中建立MainView類editZhangWu方法 /* * 定義方法,實現(xiàn)賬務(wù)刪除 * 實現(xiàn)思想: * 接收用戶的輸入,輸入一個主鍵數(shù)據(jù) * 調(diào)用控制層方法,傳遞一個主鍵 */ public void deleteZhangWu() { //調(diào)用查詢所有賬務(wù)數(shù)據(jù)的功能,顯示出來 //看到所有數(shù)據(jù),從中選擇一項,進行修改 selectAll(); System.out.println("選擇的是刪除功能,請輸入序號即可"); int zwid = new Scanner(System.in).nextInt(); //調(diào)用控制層方法,傳遞主鍵id即可 controller.deleteZhangWu(zwid); System.out.println("刪除賬務(wù)成功");37總結(jié)
* 把今天的知識點總結(jié)一遍。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67180.html
摘要:餐飲服務(wù)明廚亮灶工作指導意見鼓勵餐飲服務(wù)者將視頻信息上傳網(wǎng)絡(luò),保存不少于天。而由網(wǎng)易和中國電信合力打造的青果云管家,已為明廚亮灶做出好榜樣。此外,青果云管家還一直與全國各地餐飲協(xié)會合作透明廚房項目?!恫惋嫹?wù)明廚亮灶工作指導意見》鼓勵餐飲服務(wù)者將視頻信息上傳網(wǎng)絡(luò),保存不少于7天。而由網(wǎng)易和中國電信合力打造的青果云管家,已為明廚亮灶做出好榜樣。今年初,青果云管家與浙江某小學再推陽光食堂二期建設(shè)...
摘要:運營管家是友盟微社區(qū)集成移動垂直領(lǐng)域的社交運營專業(yè)的數(shù)據(jù)服務(wù)等經(jīng)驗,為移動開發(fā)者推出一套微社區(qū)運營的完整解決方案。 運營管家是友盟微社區(qū)集成移動垂直領(lǐng)域的社交運營、專業(yè)的數(shù)據(jù)服務(wù)等經(jīng)驗,為移動開發(fā)者推出一套微社區(qū)運營的完整解決方案。它不僅幫助各類App實時接入社區(qū),提供全面的技術(shù)支持和運營建議,同時,它還利用友盟移動大數(shù)據(jù)優(yōu)勢,借助行業(yè)數(shù)據(jù)分析合理調(diào)整規(guī)劃社區(qū)運營架構(gòu),有針對性地提高用...
摘要:對比操作前后的來定位內(nèi)存泄露的根因所在。手機管家內(nèi)存泄露每日監(jiān)控方案目前手機管家的內(nèi)存泄露每日監(jiān)控會自動運行并輸出是否存在疑似泄露的報告郵件,不論泄露對象的大小。 騰訊Bugly特約作者: 姚潮生 最原始的內(nèi)存泄露測試 重復多次操作關(guān)鍵的可疑的路徑,從內(nèi)存監(jiān)控工具中觀察內(nèi)存曲線,是否存在不斷上升的趨勢且不會在程序返回時明顯回落。這種方式可以發(fā)現(xiàn)最基本,也是最明顯的內(nèi)存泄露問題,對用戶價...
閱讀 2760·2021-09-24 09:47
閱讀 4380·2021-08-27 13:10
閱讀 3031·2019-08-30 15:44
閱讀 1300·2019-08-29 12:56
閱讀 2601·2019-08-28 18:07
閱讀 2625·2019-08-26 14:05
閱讀 2584·2019-08-26 13:41
閱讀 1275·2019-08-26 13:33