01项目训练目标
1* A: 项目训练目标 2 * a: 项目目标 3 * 综合运用前面所学习的知识点 4 * 熟练View层、Service层、Dao层之间的方法相互调用操作、 5 * 熟练dbutils操作数据库表完成增删改查 6 * 了解公司项目开发的流程,充分的掌握项目需求分析、设计与功能的代码实现。提高独立分析需求与功能实现的能力。
02项目中的功能模块
1* A: 项目中的功能模块 2 * a: 五大模块 3 * 查询账务 4 * 多条件组合查询账务 5 * 添加账务 6 * 编辑账务 7 * 删除账务
03技术的选择和相关jar包
1* A: 技术的选择和相关jar包 2 * a: apache的commons组件: 3 * commons-dbutils-1.4.jar:封装并简化了JDBC; 4 * commons-dbcp-1.4.jar:apache commons提供的数据库连接池组件,命名为DBCP; 5 * b: commons.pool-1.3.jar:DBCP连接池依赖该jar包; 6 * mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驱动包,用JDBC连接MySQL数据库必须使用该JAR包。
04项目中的工具类
1* A: 项目中的工具类 2 * a: 工具类的介绍 3 * 每个项目中都会有很多个工具类,不要求每个工具类对能独立写出来,但是要会使用工具类 4 * JDBCUtils:用来创建数据库连接池对象
05数据表的设计
1* A: 数据表的设计 2 * a: 数据表的设计(详见:day34_source/表关系.JPG) 3 * 表与表之间是有关系的 4 * 主表和从表的关系 5 * 主表中的主键作为从表中的外键
06创建数据库数据表写入测试数据
1* A: 创建数据库数据表写入测试数据 2 * a: 创建数据库数据表 3 /* 4 创建管家婆的数据库 5 名字 gjp 6 */ 7 CREATE DATABASE gjp; 8 9 USE gjp; 10 11 /* 12 创建数据表,表名账务 13 字段,列 14 主键 15 分类名称 可变字符 16 金额 double 17 账户 可变字符 (支付,收入方法) 18 创建日期 date 19 账务描述 可变字符 20 */ 21 22 CREATE TABLE gjp_zhangwu( 23 -- 主键 24 zwid INT PRIMARY KEY AUTO_INCREMENT, 25 -- 分类名称 26 flname VARCHAR(200), 27 -- 金额 28 money DOUBLE, 29 -- 账户 30 zhanghu VARCHAR(100), 31 -- 创建日期 32 createtime DATE, 33 -- 账务描述 34 description VARCHAR(1000) 35 ); 36 SELECT * FROM gjp_zhangwu; 37 * b: 写入数据 38 -- 写入测试的数据 39 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (1,'吃饭支出',247,'交通银行','2016-03-02','家庭聚餐'); 40 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (2,'工资收入',12345,'现金','2016-03-15','开工资了'); 41 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (3,'服装支出',1998,'现金','2016-04-02','买衣服'); 42 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (4,'吃饭支出',325,'现金','2016-06-18','朋友聚餐'); 43 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (5,'股票收入',8000,'工商银行','2016-10-28','股票大涨'); 44 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (6,'股票收入',5000,'工商银行','2016-10-28','股票又大涨'); 45 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (7,'工资收入',5000,'交通银行','2016-10-28','又开工资了'); 46 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (8,'礼金支出',5000,'现金','2016-10-28','朋友结婚'); 47 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (9,'其他支出',1560,'现金','2016-10-29','丢钱了'); 48 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (10,'交通支出',2300,'交通银行','2016-10-29','油价还在涨啊'); 49 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (11,'吃饭支出',1000,'工商银行','2016-10-29','又吃饭'); 50 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (12,'工资收入',1000,'现金','2016-10-30','开资'); 51 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (13,'交通支出',2000,'现金','2016-10-30','机票好贵'); 52 INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (14,'工资收入',5000,'现金','2016-10-30','又开资');
07项目中的分层设计
1* A: 项目中的分层设计 2 * a: 各层功能介绍 3 * view层作用: 视图层,即项目中的界面 4 * controller层作用: 控制层, 获取界面上的数据,为界面设置数据; 将要实现的功能交给业务层处理 5 * service层作用: 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互, 将对数据库的操作交给DAO数据访问层来处理 6 * dao层作用: 数据访问层, 用来操作数据库表的数据 7 * db数据库: 这里指MySQL 8 * domain 实体包: 存放JavaBean 9 * tools工具包:存放项目中使用到的工具类 10 * test 测试包: 存放项目功能测试的代码
08创建项目_分层_导入jar包
1* A: 创建项目_分层_导入jar包 2 * a: 创建工程包 3 * cn.itcast.gjp.app: 存放main方法类; 4 * cn.itcast.gjp.domain: 存放JavaBean; 5 * cn.itcast.gjp.view: 存放界面,及表现层类; 6 * cn.itcast.gjp.service: 存放业务层类; 7 * cn.itcast.gjp.dao: 存放数据访问层类; 8 * cn.itcast.gjp.tools:存放工具类 9 * b: 导入jar包 10 * 在项目根路径下建立文件夹lib 11 * 导入以下jar包 12 * mysql-connector-java-5.1.37-bin.jar:数据库驱动 13 * commons-dbutils-1.6.jar:提供QueryRunner类方便进行增删改查操作 14 * commons-dbcp-1.4.jar: 15 * commons-pool-1.5.6.jar:提供高效的数据库连接池技术 16 * 拷贝以上jar包,选定拷贝的jar包/右键/Build Path/Add to Build Path
09创建domain包中的类
1* A: 创建domain包中的类 2 * a: 案例代码 3 public class ZhangWu { 4 private int zwid; 5 6 private String flname; 7 8 private double money; 9 10 private String zhanghu; 11 12 private String createtime; 13 14 private String description; 15 //注意生成空参构造、有参构造、set和get方法、toString方法等 16 }
10创建JDBCUtils工具类
1* A:创建JDBCUtils工具类 2 * a: 案例代码 3 public class JDBCUtils{ 4 //创建BasicDataSource对象 5 private static BasicDataSource datasource = new BasicDataSource(); 6 //静态代码块,实现必要参数设置 7 static{ 8 datasource.setDriverClassName("com.mysql.jdbc.Driver"); 9 datasource.setUrl("jdbc:mysql://localhost:3306/gjp"); 10 datasource.setUsername("root"); 11 datasource.setPassword("123"); 12 datasource.setMaxActive(10); 13 datasource.setMaxIdle(5); 14 datasource.setMinIdle(2); 15 datasource.setInitialSize(10); 16 } 17 public static DataSource getDataSource(){ 18 return datasource; 19 } 20 }
11创建其他包中的类
1* A: 创建其他包中的类 2 * a: cn.itcast.gjp.dao包中创建ZhangWuDao类 3 /* 4 * 实现对数据表 gjp_zhangwu 数据增删改查操作 5 * dbuils工具类完成,类成员创建QueryRunner对象,指定数据源 6 */ 7 public class ZhangWuDao { 8 private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 9 } 10 * b: cn.itcast.gjp.service包中创建ZhangWuService类 11 /* 12 * 业务层类 13 * 接收上一层,控制层controller的数据 14 * 经过计算,传递给dao层,操作数据库 15 * 调用dao层中的类,类成员位置,创建Dao类的对象 16 */ 17 public class ZhangWuService { 18 private ZhangWuDao dao = new ZhangWuDao(); 19 20 } 21 * c: cn.itcast.gjp.controller包中建立ZhangWuController类 22 /* 23 * 控制器层 24 * 接收视图层的数据,数据传递给service层 25 * 成员位置,创建service对象 26 */ 27 public class ZhangWuController { 28 private ZhangWuService service = new ZhangWuService(); 29 } 30 * d: cn.itcast.gjp.view包中建立MainView类 31 /* 32 * 试图层,用户看到和操作的界面 33 * 数据传递给controller层实现 34 * 成员位置,创建controller对象 35 */ 36 public class MainView { 37 private ZhangWuController controller = new ZhangWuController(); 38 39 } 40 * e: cn.itcast.gjp.app包中建立MainApp类 41 /* 42 * 主程序类,作用,开启软件程序 43 */ 44 public class MainApp { 45 public static void main(String[] args) { 46 new MainView().run(); 47 } 48 }
12实现用户的界面菜单
1* A: 实现用户的界面菜单 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类中添加run方法 4 /* 5 * 实现界面效果 6 * 接收用户的输入 7 * 根据数据,调用不同的功能方法 8 */ 9 public void run(){ 10 //创建Scanner类对象,反复键盘输入 11 Scanner sc = new Scanner(System.in); 12 while(true){ 13 System.out.println("---------------管家婆家庭记账软件---------------"); 14 System.out.println("1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统"); 15 System.out.println("请输入要操作的功能序号[1-5]:"); 16 //接收用户的菜单选择 17 int choose = sc.nextInt(); 18 //对选择的菜单判断,调用不同的功能 19 switch(choose){ 20 case 1: 21 // 选择添加账务,调用添加账务的方法 22 break; 23 case 2: 24 // 选择的编辑账务,调用编辑账务方法 25 break; 26 case 3: 27 // 选择的删除账务,调用删除账务方法 28 break; 29 case 4: 30 // 选择的是查询账务,调用查询方法 31 //selectZhangWu(); 32 break; 33 case 5: 34 System.exit(0); 35 break; 36 } 37 } 38 }
13实现查询的界面菜单
1* A: 实现查询的界面菜单 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类中添加selectZhangWu方法、selectAll方法、select方法 4 /* 5 * 定义方法 selectZhangWu() 6 * 显示查询的方式 1 所有查询 2 条件查询 7 * 接收用户的选择 8 */ 9 public void selectZhangWu(){ 10 System.out.println("1. 查询所有 2. 条件查询"); 11 Scanner sc = new Scanner(System.in); 12 int selectChooser = sc.nextInt(); 13 //判断根据用户的选择,调用不同的功能 14 switch(selectChooser){ 15 case 1: 16 //选择的查询所有,调用查询所有的方法 17 selectAll(); 18 break; 19 case 2: 20 //选的条件查询,调用带有查询条件的方法 21 select(); 22 break; 23 } 24 } 25 /* 26 * 定义方法,实现查询所有的账务数据 27 */ 28 public void selectAll(){ 29 30 } 31 32 /* 33 * 定义方法,实现条件查询账务数据 34 * 提供用户的输入日期,开始日期结束日期 35 * 就2个日期,传递到controller层 36 * 调用controller的方法,传递2个日期参数 37 * 获取到controller查询的结果集,打印出来 38 */ 39 public void select(){ 40 41 }
14实现查询所有账务的控制,业务层的实现
1* A: 实现查询所有账务的控制,业务层的实现 2 * a: 案例核心代码 3 * a: cn.itcast.gjp.dao包中创建ZhangWuDao类 4 /* 5 * 实现对数据表 gjp_zhangwu 数据增删改查操作 6 * dbuils工具类完成,类成员创建QueryRunner对象,指定数据源 7 */ 8 public class ZhangWuDao { 9 private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 10 /* 11 * 定义方法,查询数据库,获取所有的账务数据 12 * 方法,由业务层调用 13 * 结果集,将所有的账务数据,存储到Bean对象中,存储到集合中 14 */ 15 public List<ZhangWu> selectAll(){ 16 return null; 17 } 18 } 19 * b: cn.itcast.gjp.service包中创建ZhangWuService类 20 /* 21 * 业务层类 22 * 接收上一层,控制层controller的数据 23 * 经过计算,传递给dao层,操作数据库 24 * 调用dao层中的类,类成员位置,创建Dao类的对象 25 */ 26 public class ZhangWuService { 27 private ZhangWuDao dao = new ZhangWuDao(); 28 /* 29 * 定义方法,实现查询所有的账务数据 30 * 此方法,由控制层调用, 去调用dao层的方法 31 * 返回存储ZhangWu对象的List集合 32 */ 33 public List<ZhangWu> selectAll(){ 34 return dao.selectAll(); 35 } 36 } 37 * c: cn.itcast.gjp.controller包中建立ZhangWuController类 38 /* 39 * 控制器层 40 * 接收视图层的数据,数据传递给service层 41 * 成员位置,创建service对象 42 */ 43 public class ZhangWuController { 44 private ZhangWuService service = new ZhangWuService(); 45 /* 46 * 控制层类定义方法,实现查询所有的账务数据 47 * 方法由试图层调用,方法调用service层 48 */ 49 public List<ZhangWu> selectAll(){ 50 return service.selectAll(); 51 } 52 }
15实现查询所有账务的dao层的实现
1* A: 实现查询所有账务的dao层的实现 2 * a: 案例核心代码 3 * a: cn.itcast.gjp.dao包中创建ZhangWuDao类selectAll方法 4 /* 5 * 实现对数据表 gjp_zhangwu 数据增删改查操作 6 * dbuils工具类完成,类成员创建QueryRunner对象,指定数据源 7 */ 8 public class ZhangWuDao { 9 private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 10 /* 11 * 定义方法,查询数据库,获取所有的账务数据 12 * 方法,由业务层调用 13 * 结果集,将所有的账务数据,存储到Bean对象中,存储到集合中 14 */ 15 public List<ZhangWu> selectAll(){ 16 try{ 17 //查询账务数据的SQL语句 18 String sql = "SELECT * FROM gjp_zhangwu"; 19 //调用qr对象的方法,query方法,结果集BeanListHandler 20 List<ZhangWu> list = qr.query(sql, new BeanListHandler<>(ZhangWu.class)); 21 return list; 22 }catch(SQLException ex){ 23 System.out.println(ex); 24 throw new RuntimeException("查询所有账务失败"); 25 } 26 } 27 }
16实现查询所有账务的view层的实现
1* A: 实现查询所有账务的view层的实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类selectAll方法 4 /* 5 * 定义方法,实现查询所有的账务数据 6 */ 7 public void selectAll(){ 8 //调用控制层中的方法,查询所有的账务数据 9 List<ZhangWu> list = controller.selectAll(); 10 //输出表头 11 System.out.println("ID\t\t类别\t\t账户\t\t金额\t\t时间\t\t说明"); 12 //遍历集合,结果输出控制台 13 for(ZhangWu zw : list){ 14 System.out.println(zw.getZwid()+"\t\t"+zw.getFlname()+"\t\t"+zw.getZhanghu()+"\t\t"+ 15 zw.getMoney()+"\t\t"+zw.getCreatetime()+"\t"+zw.getDescription()); 16 } 17 }
17实现条件查询账务的菜单实现
1* A: 实现条件查询账务的菜单实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类select方法 4 /* 5 * 定义方法,实现条件查询账务数据 6 * 提供用户的输入日期,开始日期结束日期 7 * 就2个日期,传递到controller层 8 * 调用controller的方法,传递2个日期参数 9 * 获取到controller查询的结果集,打印出来 10 */ 11 public void select(){ 12 System.out.println("选择条件查询,输入日期格式XXXX-XX-XX"); 13 Scanner sc = new Scanner(System.in); 14 System.out.print("请输入开始日期:"); 15 String startDate = sc.nextLine(); 16 System.out.print("请输入结果日期:"); 17 String endDate = sc.nextLine(); 18 //调用controller层的方法,传递日期,获取查询结果集 19 20 }
18实现条件查询账务的控制层,业务层实现
1* A: 实现条件查询账务的控制层,业务层实现 2 * a: 案例核心代码 3 * a: cn.itcast.gjp.dao包中创建ZhangWuDao类 4 /* 5 * 实现对数据表 gjp_zhangwu 数据增删改查操作 6 * dbuils工具类完成,类成员创建QueryRunner对象,指定数据源 7 */ 8 public class ZhangWuDao { 9 private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 10 /* 11 * 定义方法,查询数据库,带有条件去查询账务表 12 * 由业务层调用,查询结果集存储到Bean对象,存储到List集合 13 * 调用者传递2个日期字符串 14 */ 15 public List<ZhangWu> select(String startDate,String endDate){ 16 return null; 17 } 18 } 19 * b: cn.itcast.gjp.service包中创建ZhangWuService类 20 /* 21 * 业务层类 22 * 接收上一层,控制层controller的数据 23 * 经过计算,传递给dao层,操作数据库 24 * 调用dao层中的类,类成员位置,创建Dao类的对象 25 */ 26 public class ZhangWuService { 27 private ZhangWuDao dao = new ZhangWuDao(); 28 /* 29 * 定义方法,实现条件查询账务 30 * 方法由控制层调用,传递2个日期字符串 31 * 调用dao层的方法,传递2个日期字符串 32 * 获取到查询结果集 33 */ 34 public List<ZhangWu> select(String startDate,String endDate){ 35 return dao.select(startDate, endDate); 36 } 37 } 38 * c: cn.itcast.gjp.controller包中建立ZhangWuController类 39 /* 40 * 控制器层 41 * 接收视图层的数据,数据传递给service层 42 * 成员位置,创建service对象 43 */ 44 public class ZhangWuController { 45 private ZhangWuService service = new ZhangWuService(); 46 /* 47 * 定义方法,实现条件查询账务 48 * 方法由试图层调用,传递两个日期的字符串 49 * 调用service层的方法,传递两个日期字符串,获取结果集 50 * 结果集返回给试图 51 */ 52 public List<ZhangWu> select(String startDate,String endDate){ 53 return service.select(startDate, endDate); 54 } 55 }
19实现条件查询账务的dao层实现
1* A: 实现条件查询账务的dao层实现 2 * a: 案例核心代码 3 * a: cn.itcast.gjp.dao包中创建ZhangWuDao类select方法 4 /* 5 * 实现对数据表 gjp_zhangwu 数据增删改查操作 6 * dbuils工具类完成,类成员创建QueryRunner对象,指定数据源 7 */ 8 public class ZhangWuDao { 9 private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 10 /* 11 * 定义方法,查询数据库,带有条件去查询账务表 12 * 由业务层调用,查询结果集存储到Bean对象,存储到List集合 13 * 调用者传递2个日期字符串 14 */ 15 public List<ZhangWu> select(String startDate,String endDate){ 16 try{ 17 //拼写条件查询的SQL语句 18 String sql = "SELECT * FROM gjp_zhangwu WHERE createtime BETWEEN ? AND ?"; 19 //定义对象数组,存储?占位符 20 Object[] params = {startDate,endDate}; 21 //调用qr对象的方法query查询数据表,获取结果集 22 return qr.query(sql, new BeanListHandler<>(ZhangWu.class),params); 23 }catch(SQLException ex){ 24 System.out.println(ex); 25 throw new RuntimeException("条件查询失败"); 26 } 27 } 28 }
20实现条件查询账务的view层实现
1* A: 实现条件查询账务的view层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类selectAll方法优化、抽取print方法、select方法 4 /* 5 * 定义方法,实现查询所有的账务数据 6 */ 7 public void selectAll(){ 8 //调用控制层中的方法,查询所有的账务数据 9 List<ZhangWu> list = controller.selectAll(); 10 if(list.size()!=0) 11 print(list); 12 else 13 System.out.println("没有查询到数据"); 14 } 15 16 /* 17 * 定义方法,实现条件查询账务数据 18 * 提供用户的输入日期,开始日期结束日期 19 * 就2个日期,传递到controller层 20 * 调用controller的方法,传递2个日期参数 21 * 获取到controller查询的结果集,打印出来 22 */ 23 public void select(){ 24 System.out.println("选择条件查询,输入日期格式XXXX-XX-XX"); 25 Scanner sc = new Scanner(System.in); 26 System.out.print("请输入开始日期:"); 27 String startDate = sc.nextLine(); 28 System.out.print("请输入结果日期:"); 29 String endDate = sc.nextLine(); 30 //调用controller层的方法,传递日期,获取查询结果集 31 List<ZhangWu> list = controller.select(startDate, endDate); 32 if(list.size()!=0) 33 print(list); 34 else 35 System.out.println("没有查询到数据"); 36 } 37 38 //输出账务数据方法,接收List集合,遍历集合,输出表格 39 private void print(List<ZhangWu> list) { 40 //输出表头 41 System.out.println("ID\t\t类别\t\t账户\t\t金额\t\t时间\t\t说明"); 42 //遍历集合,结果输出控制台 43 for(ZhangWu zw : list){ 44 System.out.println(zw.getZwid()+"\t\t"+zw.getFlname()+"\t\t"+zw.getZhanghu()+"\t\t"+ 45 zw.getMoney()+"\t\t"+zw.getCreatetime()+"\t"+zw.getDescription()); 46 } 47 }
21添加账务功能分析
1* A: 添加账务功能分析 2 * a: 编写MainView类中addZhangWu方法 3 * 键盘输入新添加的账务信息 4 * 调用ZhangWuService类中addZhangWu方法,用来指定账务的添加 5 * 添加完毕后,使用输出语句,提示“添加账务成功!” 6 * b: 编写ZhangWuService类中addZhangWu方法 7 * 调用ZhangWuDao类中addZhangWu方法,用来指定账务的添加 8 * c: 编写ZhangWuDao类中addZhangWu方法 9 * 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成指定账务添加到数据库表中
22添加账务功能菜单和输入功能实现
1* A: 添加账务功能菜单和输入功能实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类addZhangWu方法 4 /* 5 * 定义方法addZhangWu 6 * 添加账务的方法,用户在界面中选择菜单1的时候调用、 7 * 实现思想: 8 * 接收键盘输入,5项输入,调用controller层方法 9 */ 10 public void addZhangWu() { 11 System.out.println("选择的添加账务功能,请输入以下内容"); 12 Scanner sc = new Scanner(System.in); 13 System.out.println("输入分类名称"); 14 String flname = sc.next(); 15 System.out.println("输入金额"); 16 double money = sc.nextDouble(); 17 System.out.println("输入账户"); 18 String zhanghu = sc.next(); 19 System.out.println("输入日期:格式XXXX-XX-xx"); 20 String createtime = sc.next(); 21 System.out.println("输入具体描述"); 22 String description = sc.next(); 23 //将接收到的数据,调用controller层的方法,传递参数,实现数据添加 24 25 }
23添加账务功能控制层,业务层实现
1* A: 添加账务功能控制层,业务层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.controller包中的ZhangWuController类addZhangWu方法 4 /* 5 * 定义方法,实现账务添加功能 6 * 由视图层调用,传递参数(传递过来的参数不能是5个数据,传递的是一个ZhangWu类型的对象) 7 * 本方法调用service层的方法,传递ZhangWu对象,获取到添加后的结果集(添加成功影响的行数,int) 8 * 9 */ 10 public void addZhangWu(ZhangWu zw) { 11 service.addZhangWu(zw); 12 } 13 * cn.itcast.gjp.service包中的ZhangWuService类addZhangWu方法 14 /* 15 * 定义方法,实现添加账务 16 * 是由控制层调用,传递ZhangWu对象 17 */ 18 public void addZhangWu(ZhangWu zw) { 19 dao.addZhangWu(zw); 20 } 21 * cn.itcast.gjp.dao包中的ZhangWuDao类addZhangWu方法 22 /* 23 * 定义方法,实现添加账务功能 24 * 由业务层调用,传递ZhangWu对象 25 * 将ZhangWu对象中的数据,添加到数据库 26 */ 27 public void addZhangWu(ZhangWu zw) { 28 29 }
24添加账务功能dao层实现
1* A: 添加账务功能dao层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.dao包中的ZhangWuDao类的addZhangWu方法 4 public void addZhangWu(ZhangWu zw) { 5 try{ 6 //拼接添加数据的sql 7 String sql = "INSERT INTO gjp_zhangwu (flname,money,zhanghu,createtime,description) VALUES(?,?,?,?,?)"; 8 //创建对象数组,处处5个占位符的实际参数 9 //实际参数来源是传递过来的对象ZhangWu 10 Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription()}; 11 //调用qr对象中的方法update执行添加 12 qr.update(sql, params); 13 }catch(SQLException ex) { 14 System.out.println(ex); 15 throw new RuntimeException("账务添加失败"); 16 } 17 }
25添加账务功能view层实现
1* A: 添加账务功能view层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类addZhangWu方法 4 public void addZhangWu() { 5 System.out.println("选择的添加账务功能,请输入以下内容"); 6 Scanner sc = new Scanner(System.in); 7 System.out.println("输入分类名称"); 8 String flname = sc.next(); 9 System.out.println("输入金额"); 10 double money = sc.nextDouble(); 11 System.out.println("输入账户"); 12 String zhanghu = sc.next(); 13 System.out.println("输入日期:格式XXXX-XX-xx"); 14 String createtime = sc.next(); 15 System.out.println("输入具体描述"); 16 String description = sc.next(); 17 //将接收到的数据,调用controller层的方法,传递参数,实现数据添加 18 //将用户输入的所有参数,封装成ZhangWu对象 19 ZhangWu zw = new ZhangWu(0, flname, money, zhanghu, createtime, description); 20 controller.addZhangWu(zw); 21 System.out.println("恭喜添加账务成功"); 22 }
26编辑账务功能分析
1* A: 编辑账务功能分析 2 * a: 编写MainView类中editZhangWu方法 3 * 键盘输入要编辑的账务信息ID号 4 * 键盘输入要修改的账务信息内容 5 * 调用ZhangWuService类中editZhangWu方法,用来将指定的账务信息进行更新 6 * 更新完毕后,使用输出语句,提示 “编辑账务成功!” 7 * b: 编写ZhangWuService类中editZhangWu方法 8 * 调用ZhangWuDao类中editZhangWu方法,用来将指定的账务信息进行更新 9 * c: 编写ZhangWuDao类中editZhangWu方法 10 * 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成数据库表中指定账务更新操作
27编辑账务功能功能之前实现查询所有
1* A: 编辑账务功能功能之前实现查询所有 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类editZhangWu方法 4 public void editZhangWu() { 5 //调用查询所有账务数据的功能,显示出来 6 //看到所有数据,从中选择一项,进行修改 7 selectAll(); 8 System.out.println("选择的是编辑功能,请输入数据"); 9 10 11 12 }
28编辑账务功能菜单实现
1* A: 编辑账务功能菜单实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类editZhangWu方法 4 public void editZhangWu() { 5 //调用查询所有账务数据的功能,显示出来 6 //看到所有数据,从中选择一项,进行修改 7 selectAll(); 8 System.out.println("选择的是编辑功能,请输入数据"); 9 Scanner sc = new Scanner(System.in); 10 System.out.print("请输入ID"); 11 int zwid = sc.nextInt(); 12 System.out.println("输入分类名称"); 13 String flname = sc.next(); 14 System.out.println("输入金额"); 15 double money = sc.nextDouble(); 16 System.out.println("输入账户"); 17 String zhanghu = sc.next(); 18 System.out.println("输入日期:格式XXXX-XX-xx"); 19 String createtime = sc.next(); 20 System.out.println("输入具体描述"); 21 String description = sc.next(); 22 //将用户输入的数据,封装到ZhangWu对象中 23 //用户输入的ID,必须封装到到对象中 24 ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description); 25 //调用controller层中的方法,实现编辑账务 26 }
29编辑账务功能控制层,业务层实现
1* A: 编辑账务功能控制层,业务层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.controller包中的ZhangWuController类editZhangWu方法 4 /* 5 * 定义方法,实现编辑账务功能 6 * 由视图层调用,传递参数,也是ZhangWu对象 7 * 调用service层的方法,也是ZhangWu对象 8 */ 9 public void editZhangWu(ZhangWu zw) { 10 service.editZhangWu(zw); 11 } 12 * cn.itcast.gjp.service包中的ZhangWuService类editZhangWu方法 13 /* 14 * 定义方法,实现编辑账务 15 * 由控制层调用,传递ZhangWu对象 16 * 调用dao层的方法,传递ZhangWu对象 17 */ 18 public void editZhangWu(ZhangWu zw) { 19 dao.editZhangWu(zw); 20 } 21 * cn.itcast.gjp.dao包中的ZhangWuDao类editZhangWu方法 22 public void editZhangWu(ZhangWu zw) { 23 // TODO Auto-generated method stub 24 25 }
30编辑账务功能dao层实现
1* A:编辑账务功能dao层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.dao包中的ZhangWuDao类editZhangWu方法 4 /* 5 * 定义方法,实现编辑功能 6 * 由业务层调用,传递ZhangWu对象 7 * 将对象中的数据,更新到数据表 8 */ 9 public void editZhangWu(ZhangWu zw) { 10 try { 11 //更新数据的SQL 12 String sql = "UPDATE zhangwu SET flname=?,money=?,zhanghu=?,createtime=?,description=? WHERE zwid=?"; 13 //定义对象数组,封装所有数据 14 Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()}; 15 //调用qr对象方法update执行更新 16 qr.update(sql, params); 17 } catch (SQLException ex) { 18 System.out.println(ex); 19 throw new RuntimeException("编辑账务失败"); 20 } 21 22 }
31编辑账务功能view层实现
1* A: 编辑账务功能view层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类editZhangWu方法 4 /* 5 * 定义方法,实现对账务的编辑功能 6 * 实现思想: 7 * 接收用户的输入的信息 8 * 封装成ZhangWu对象 9 * 调用控制层的方法,传递ZhangWu对象,实现编辑 10 * 11 */ 12 public void editZhangWu() { 13 //调用查询所有账务数据的功能,显示出来 14 //看到所有数据,从中选择一项,进行修改 15 selectAll(); 16 System.out.println("选择的是编辑功能,请输入数据"); 17 Scanner sc = new Scanner(System.in); 18 System.out.print("请输入ID"); 19 int zwid = sc.nextInt(); 20 System.out.println("输入分类名称"); 21 String flname = sc.next(); 22 System.out.println("输入金额"); 23 double money = sc.nextDouble(); 24 System.out.println("输入账户"); 25 String zhanghu = sc.next(); 26 System.out.println("输入日期:格式XXXX-XX-xx"); 27 String createtime = sc.next(); 28 System.out.println("输入具体描述"); 29 String description = sc.next(); 30 //将用户输入的数据,封装到ZhangWu对象中 31 //用户输入的ID,必须封装到到对象中 32 ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description); 33 //调用controller层中的方法,实现编辑账务 34 controller.editZhangWu(zw); 35 System.out.println("账务编辑成功"); 36 }
32删除账务功能分析
1* A: 删除账务功能分析 2 * a: 编写MainView类中deleteZhangWu方法 3 * 键盘输入要删除的账务信息ID号 4 * 调用ZhangWuService类中deleteZhangWu方法,用来将指定的账务信息删除 5 * 删除完毕后,使用输出语句,提示 “删除账务成功!” 6 * b: 编写ZhangWuService类中deleteZhangWu方法 7 * 调用ZhangWuDao类中deleteZhangWu方法,用来将指定的账务信息删除 8 * c: 编写ZhangWuDao类中deleteZhangWu方法 9 * 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成数据库表中指定账务删除操作
33删除账务功能菜单实现
1* A: 删除账务功能菜单实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类deleteZhangWu方法 4 /* 5 * 定义方法,实现账务删除 6 * 实现思想: 7 * 接收用户的输入,输入一个主键数据 8 * 调用控制层方法,传递一个主键 9 */ 10 public void deleteZhangWu() { 11 //调用查询所有账务数据的功能,显示出来 12 //看到所有数据,从中选择一项,进行修改 13 selectAll(); 14 System.out.println("选择的是删除功能,请输入序号即可"); 15 int zwid = new Scanner(System.in).nextInt(); 16 //调用控制层方法,传递主键id即可 17 }
34删除账务功能控制层,业务层实现
1* A: 删除账务功能控制层,业务层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.controller包中的ZhangWuController类deleteZhangWu方法 4 /* 5 * 定义方法,实现删除功能 6 * 视图层调用,传递int类型主键 7 * 调用service层方法,传递int主键 8 */ 9 public void deleteZhangWu(int zwid) { 10 service.deleteZhangWu(zwid); 11 } 12 * cn.itcast.gjp.service包中的ZhangWuService类deleteZhangWu方法 13 /* 14 * 定义方法,实现删除账务功能 15 * 由控制层调用,传递主键id 16 * 调用dao层方法,传递主键id 17 */ 18 public void deleteZhangWu(int zwid) { 19 dao.deleteZhangWu(zwid); 20 } 21 * cn.itcast.gjp.dao包中的ZhangWuDao类deleteZhangWu方法 22 public void deleteZhangWu(int zwid) { 23 24 }
35删除账务功能dao实现
1* A: 删除账务功能dao实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.dao包中的ZhangWuDao类deleteZhangWu方法 4 /* 5 * 定义方法,实现删除业务 6 * 业务层调用,传递主键id 7 */ 8 public void deleteZhangWu(int zwid) { 9 try { 10 //拼写删除数据SQL 11 String sql = "DELETE FROM gjp_zhangwu WHERE zwid=?"; 12 qr.update(sql, zwid); 13 } catch (SQLException ex) { 14 System.out.println(ex); 15 throw new RuntimeException("删除账务失败"); 16 } 17 }
36删除账务功能view层实现
1* A: 删除账务功能view层实现 2 * a: 案例核心代码 3 * cn.itcast.gjp.view包中建立MainView类editZhangWu方法 4 /* 5 * 定义方法,实现账务删除 6 * 实现思想: 7 * 接收用户的输入,输入一个主键数据 8 * 调用控制层方法,传递一个主键 9 */ 10 public void deleteZhangWu() { 11 //调用查询所有账务数据的功能,显示出来 12 //看到所有数据,从中选择一项,进行修改 13 selectAll(); 14 System.out.println("选择的是删除功能,请输入序号即可"); 15 int zwid = new Scanner(System.in).nextInt(); 16 //调用控制层方法,传递主键id即可 17 controller.deleteZhangWu(zwid); 18 System.out.println("删除账务成功");