15管家婆小项目
作者:互联网
1项目介绍
1.1项目目标
本项目为JAVAEE基础班综合项目,包含了若干个知识点,达到将基础班所学知识综合使用,提高了我们对项目的理解与知识点的运用。
熟练View层、Service层、Dao层之间的方法相互调用操作、
熟练dbutils操作数据库表完成增删改查
通过本项目,让我们了解公司项目开发的流程,充分的掌握项目需求分析、设计与功能的代码实现。提高同学们独立分析需求与功能实现的能力。
1.2项目功能介绍
- 查询账务
- 多条件组合查询账务
- 添加账务
- 编辑账务
- 删除账务
2.项目环境搭建
2.1技术选型和jar包介绍
每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术。在今后的学习过程中,我们会逐渐对这些专业组织有所了解。本项目中使用的技术如下:
- apache的commons组件:
- commons-dbutils-1.4.jar:封装并简化了JDBC;
- commons-dbcp-1.4.jar:apache commons提供的数据库连接池组件,命名为DBCP;
- commons.pool-1.3.jar:DBCP连接池依赖该jar包;
- mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驱动包,用JDBC连接MySQL数据库必须使用该JAR包。
2.2工具类介绍
JDBCUtils:用来创建数据库连接池对象;
package cn.jxufe.java.chapter12.demo02; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; /* * 使用DBCP实现数据库的连接池 * 连接池配置,自定义类, * 最基本四项完整 * 对于数据库连接池其他配置,自定义 */ public class JDBCUtils { // 创建出BasicDataSource类对象 private static BasicDataSource datasource = new BasicDataSource(); // 静态代码块,对象BasicDataSource对象中的配置,自定义 static { // 数据库连接信息,必须的 datasource.setDriverClassName("com.mysql.jdbc.Driver"); datasource.setUrl("jdbc:mysql://localhost:3306/mydatabase"); datasource.setUsername("root"); datasource.setPassword("123456"); // 对象连接池中的连接数量配置,可选的 datasource.setInitialSize(10);// 初始化的连接数 datasource.setMaxActive(8);// 最大连接数量 datasource.setMaxIdle(5);// 最大空闲数 datasource.setMinIdle(1);// 最小空闲 } // 定义静态方法,返回BasicDataSource类的对象 public static DataSource getDataSource() { return datasource; } }
2.3数据表创建
对一个项目而言,表设计是非常重要的,因为应用程序中所有的操作都是基于数据库表而进行的,所以我们第一步就是创建数据库表。
- 创建数据库
CREATE DATABASE gjp;
- 创建数据库表
/* 创建管家婆的数据库 名字 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) ); -- 写入测试的数据 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','又开资'); SELECT * FROM gjp_zhangwu
2.4项目分层(分包)的作用
程序为什么要分包分层?
以顾客去饭店吃饭案例分析一下:
小饭店: 一个服务员搞定(接待顾客\点菜\炒菜)
大饭店:
- 迎宾员(是否有预定\ 询问吃中餐还是西餐或者烧烤等\ 几位用餐 \ 领路到指定的包间\ 找点菜员为顾客点菜 )
- 点菜员(记录顾客点餐内容\ 记录是否有忌口等问题\ 找厨师为顾客炒菜)
- 厨师(按照顾客菜肴清单,进行炒菜)
通过案例发现,当程序规模小的时候,可以一个人全部完成;但程序规模大的时候,一个人难以完成,这时,要采用多人合作的方式来完成程序开发。
多人合作方式将会碰到工作任务分配问题,这时我们会想,每个人负责完成项目的一块内容就可以了。那么,这一块块内容的划分,就需要我们采用分层(分包)的方式完成了。
- view层作用: 视图层,即项目中的界面
- controller层作用: 控制层, 获取界面上的数据,为界面设置数据; 将要实现的功能交给业务层处理
- service层作用: 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互, 将对数据库的操作交给DAO数据访问层来处理
- dao层作用: 数据访问层, 用来操作数据库表的数据
- db数据库: 这里指MySQL
- domain 实体包: 存放JavaBean
- tools工具包:存放项目中使用到的工具类
- test 测试包: 存放项目功能测试的代码
2.5 工程创建及包管理
- 使用Eclipse创建Java工程,命名为gjp
- 创建工程包
- 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:存放工具类
- 创建lib文件夹,用来存储使用的jar包
3.功能模块
3.1相关类创建
完成本项目中类的创建,无需在类中添加代码。
- 复制已编写好的工具类JDBCUtils.java 到 tools包中;
- 复制jar包mysql-connector-java-5.1.28-bin.jar 、commons-dbutils-1.4.jar 、commons-dbcp-1.4.jar 、commons-pool-1.3.jar,到lib文件夹中,通过Build Path操作,添加到classPath路径中,提供给JDBCUtils使用;
- 在app包中,创建类MainApp.java,编写main主方法,用来完成本项目的启动
- 在domain包中,创建类ZhangWu.java,它是用来封装账务信息的JavaBean。
- 在dao包中,创建类ZhangWuDao.java,给ZhangWuDao类添加一个成员变量QueryRunner对象,因为我们使用dbutils来操作数据库。
- 在service包中,创建类ZhangWuService.java,给ZhangWuService类添加一个类型为ZhangWuDao的成员变量,因为service依赖dao。
- 在view包中,创建类MainView.java,给MainView类添加一个类型为ZhangWuService的成员变量,因为本项目中view依赖service。
编写app包中MainApp.java
package cn.jxufe.gjp.app; /* * 主程序类,作用,开启软件程序 */ public class MainApp { public static void main(String[] args) { // TODO Auto-generated method stub } }
编写domain包中ZhangWu.java
package cn.jxufe.gjp.domain; public class ZhangWu { }
编写Dao包中ZhangWuDao.java
package cn.jxufe.gjp.dao; import org.apache.commons.dbutils.QueryRunner; import cn.jxufe.gjp.tools.JDBCUtils; /* * 账务数据层类 * 实现对数据表gjp_zhangwu 数据增删改查操作 * 使用dbutils工具类完成,类成员创建QueryRunner对象,指定数据源 */ public class ZhangWuDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); }
编写Service包,ZhangWuService.java
package cn.jxufe.gjp.service; /* * 业务层类 * 接收上一层,控制层controller的数据 * 经过计算,传递给dao层,操作数据库 * 调用dao层中的类,类成员位置,创建Dao类的对象 */ import cn.jxufe.gjp.dao.ZhangWuDao; public class ZhangWuService { private ZhangWuDao dao = new ZhangWuDao(); }
编写controller包,ZhangWuController.java
package cn.jxufe.gjp.controller; /* * 控制器层 * 接收视图层的数据,将数据传递给service层 * 成员位置创建service对象 */ import cn.jxufe.gjp.service.ZhangWuService; public class ZhangWuController { private ZhangWuService service = new ZhangWuService(); }
编写view包,MainView.java
package cn.jxufe.gjp.view; /* * 视图层,用户控制和操作的界面 * 数据传递给controller层实现 * 成员位置,创建一个controller对象 */ import cn.jxufe.gjp.controller.ZhangWuController; public class MainView { private ZhangWuController controller = new ZhangWuController(); }
3.2账务JavaBean
JavaBean是指的是Java中的类,该类中的成员变量与数据库表中的字段相对应(变量名对应数据库表字段名、变量数据类型对应数据库表字段类型),并提供空参数构造方法、set、get方法。
package cn.jxufe.gjp.domain; public class ZhangWu { private int zwid; private String flname; private double money; private String zhanghu; private String createtime; private String description; public ZhangWu() { // TODO Auto-generated constructor stub } public ZhangWu(int zwid, String flname, double money, String zhanghu, String createtime, String description) { this.zwid = zwid; this.flname = flname; this.money = money; this.zhanghu = zhanghu; this.createtime = createtime; this.description = description; } public int getZwid() { return zwid; } public void setZwid(int zwid) { this.zwid = zwid; } public String getFlname() { return flname; } public void setFlname(String flname) { this.flname = flname; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public String getZhanghu() { return zhanghu; } public void setZhanghu(String zhanghu) { this.zhanghu = zhanghu; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String toString() { return "ZhangWu [zwid=" + zwid + ", flname=" + flname + ", money=" + money + ", zhanghu=" + zhanghu + ", createtime=" + createtime + ", description=" + description + "]"; } }
3.3功能界面菜单
界面菜单的完成,是项目编写的第一步。
我们通过输出语句,完成界面菜单的输出,之后再根据输入的功能序号,进行对应功能的调用执行。
- 功能实现步骤
- 编写MainView类run方法
- 完成功能界面菜单显示
- 接收键盘输入的功能选项
- 根据选项值,调用对应的功能方法
- 编写MainApp类的main主方法
- 调用MainView类中run方法,实现将程序执行起来,显示功能界面菜单。
2.功能实现代码
package cn.jxufe.gjp.view; /* * 视图层,用户控制和操作的界面 * 数据传递给controller层实现 * 成员位置,创建一个controller对象 */ import java.util.Scanner; import cn.jxufe.gjp.controller.ZhangWuController; public class MainView { private ZhangWuController controller = new ZhangWuController(); /* * 实现界面效果 * 接收用户的输入 * 根据输入调用不同的功能方法 */ public void run() { // 创建Scanner对象,可以反复的键盘输入 Scanner scanner = new Scanner(System.in); while (true) { System.out.println("---------------管家婆家庭记账软件---------------"); System.out.println("1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统"); System.out.println("请输入要操作的功能序号[1-5]:"); // 接收用户的菜单选择 int choose = scanner.nextInt(); // 对选择的菜单判断,调用不同的功能 switch (choose) { // 选择添加账务,调用添加账务的方法 case 1: break; // 选择的编辑账务,调用编辑账务方法 case 2: break; // 选择的删除账务,调用删除账务方法 case 3: break; // 选择的是查询账务,调用查询方法 case 4: break; //退出系统 case 5: System.out.println("再见"); System.exit(0); default: System.out.println("输入错误,请重新输入"); ; } } } }
3.4查询所有账务
- 功能实现步骤
标签:15,description,zwid,项目,money,flname,gjp,管家婆,public 来源: https://www.cnblogs.com/xinmomoyan/p/11061272.html