31管家婆项目文档讲义.docx
- 文档编号:30530907
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:28
- 大小:140.02KB
31管家婆项目文档讲义.docx
《31管家婆项目文档讲义.docx》由会员分享,可在线阅读,更多相关《31管家婆项目文档讲义.docx(28页珍藏版)》请在冰豆网上搜索。
31管家婆项目文档讲义
管家婆家庭记账软件
1.项目介绍
1.1.项目安排
1.1.1.项目目标
本项目为JAVAEE基础班综合项目,包含了若干个知识点,达到将基础班所学知识综合使用,提高了我们对项目的理解与知识点的运用。
熟练View层、Service层、Dao层之间的方法相互调用操作、
熟练dbutils操作数据库表完成增删改查
通过本项目,让我们了解公司项目开发的流程,充分的掌握项目需求分析、设计与功能的代码实现。
提高同学们独立分析需求与功能实现的能力。
1.1.2.项目时间
本项目通过1天课程时间完成。
1.2.项目功能分析
1.2.1.项目演示
1.2.2.项目功能介绍
●查询账务
●多条件组合查询账务
●添加账务
●编辑账务
●删除账务
2.项目环境搭建
2.1.技术选型和jar包介绍
每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术。
在今后的学习过程中,我们会逐渐对这些专业组织有所了解。
本项目中使用的技术如下:
●apache的commons组件:
Øcommons-dbutils-1.4.jar:
封装并简化了JDBC;
Øcommons-dbcp-1.4.jar:
apachecommons提供的数据库连接池组件,命名为DBCP;
Øcommons.pool-1.3.jar:
DBCP连接池依赖该jar包;
●mysql-connector-java-5.1.28-bin.jar:
MySQL的JDBC驱动包,用JDBC连接MySQL数据库必须使用该JAR包。
2.2.工具类介绍
每个项目都会用到一些工具类,本项目也不例外。
我们不会教大家如何实现这些类,而是让大家知道在项目我们如何使用这些工具类,下面是本项目中所使用的工具类以及介绍:
●JDBCUtils:
用来创建数据库连接池对象;
在项目的实现过程中,我们会说明工具类的使用,这里就不再过多介绍。
JDBCUtils.java
publicclassJDBCUtils{
publicstaticfinalStringDRIVER_CLASS_NAME="com.mysql.jdbc.Driver";
publicstaticfinalStringURL="jdbc:
mysql:
//localhost:
3306/gjp";
publicstaticfinalStringUSERNAME="root";
publicstaticfinalStringPASSWORD="root";
privatestaticBasicDataSourcedataSource=newBasicDataSource();
static{
dataSource.setDriverClassName(DRIVER_CLASS_NAME);
dataSource.setUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
}
publicstaticDataSourcegetDataSource(){
returndataSource;
}
}
2.3.数据表创建
对一个项目而言,表设计是非常重要的,因为应用程序中所有的操作都是基于数据库表而进行的,所以我们第一步就是创建数据库表。
管家婆项目的数据库设计很简单,我们只需找到gjp.sql文件,然后执行之即可。
下面是创建库及表的SQL语句:
2.3.1.创建数据库
创建管家婆数据库gjp
CREATEDATABASEgjp;
2.3.2.创建数据库表
创建账务表gjp_zhangwu
CREATETABLEgjp_zhangwu(
zwidINTPRIMARYKEYAUTO_INCREMENT,
flnameVARCHAR(200),
moneyDOUBLE,
zhangHuVARCHAR(100),
createtimeDATE,
descriptionVARCHAR(1000)
);
2.3.3.添加表数据
添加账务表数据
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(1,'吃饭支出',247,'交通银行','2016-03-02','家庭聚餐');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(2,'工资收入',12345,'现金','2016-03-15','开工资了');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(3,'服装支出',1998,'现金','2016-04-02','买衣服');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(4,'吃饭支出',325,'现金','2016-06-18','朋友聚餐');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(5,'股票收入',8000,'工商银行','2016-10-28','股票大涨');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(6,'股票收入',5000,'工商银行','2016-10-28','股票又大涨');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(7,'工资收入',5000,'交通银行','2016-10-28','又开工资了');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(8,'礼金支出',5000,'现金','2016-10-28','朋友结婚');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(9,'其他支出',1560,'现金','2016-10-29','丢钱了');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(10,'交通支出',2300,'交通银行','2016-10-29','油价还在涨啊');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(11,'吃饭支出',1000,'工商银行','2016-10-29','又吃饭');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(12,'工资收入',1000,'现金','2016-10-30','开资');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(13,'交通支出',2000,'现金','2016-10-30','机票好贵');
INSERTINTOgjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES(14,'工资收入',5000,'现金','2016-10-30','又开资');
2.4.项目分层(分包)的作用
程序为什么要分包分层?
以顾客去饭店吃饭案例分析一下:
小饭店:
一个服务员搞定(接待顾客\点菜\炒菜)
大饭店:
●迎宾员(是否有预定\询问吃中餐还是西餐或者烧烤等\几位用餐\领路到指定的包间\找点菜员为顾客点菜)
●点菜员(记录顾客点餐内容\记录是否有忌口等问题\找厨师为顾客炒菜)
●厨师(按照顾客菜肴清单,进行炒菜)
通过案例发现,当程序规模小的时候,可以一个人全部完成;但程序规模大的时候,一个人难以完成,这时,要采用多人合作的方式来完成程序开发。
多人合作方式将会碰到工作任务分配问题,这时我们会想,每个人负责完成项目的一块内容就可以了。
那么,这一块块内容的划分,就需要我们采用分层(分包)的方式完成了。
通过下图(用户注册功能)来讲解下,项目中常见的分层(分包)。
●view层作用:
视图层,即项目中的界面
●controller层作用:
控制层,获取界面上的数据,为界面设置数据;将要实现的功能交给业务层处理
●service层作用:
业务层,功能的实现,与controller控制层和数据访问层DAO交互,将对数据库的操作交给DAO数据访问层来处理
●dao层作用:
数据访问层,用来操作数据库表的数据
●db数据库:
这里指MySQL
●domain实体包:
存放JavaBean
●tools工具包:
存放项目中使用到的工具类
●test测试包:
存放项目功能测试的代码
2.5.工程创建及包管理
1.使用Eclipse创建Java工程,命名为gjp
2.创建工程包
Ø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:
存放工具类
3.创建lib文件夹,用来存储使用的jar包
3.功能模块
3.1.相关类创建
完成本项目中类的创建,无需在类中添加代码。
1.复制已编写好的工具类JDBCUtils.java到tools包中;
2.复制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文件夹中,通过BuildPath操作,添加到classPath路径中,提供给JDBCUtils使用;
3.在app包中,创建类MainApp.java,编写main主方法,用来完成本项目的启动
4.在domain包中,创建类ZhangWu.java,它是用来封装账务信息的JavaBean。
5.在dao包中,创建类ZhangWuDao.java,给ZhangWuDao类添加一个成员变量QueryRunner对象,因为我们使用dbutils来操作数据库。
6.在service包中,创建类ZhangWuService.java,给ZhangWuService类添加一个类型为ZhangWuDao的成员变量,因为service依赖dao。
7.在view包中,创建类MainView.java,给MainView类添加一个类型为ZhangWuService的成员变量,因为本项目中view依赖service。
编写app包中MainApp.java
/**
*主方法类
*/
publicclassMainApp{
publicstaticvoidmain(String[]args){
}
}
编写domain包中ZhangWu.java
/**
*账务类
*/
publicclassZhangWu{
}
编写Dao包中ZhangWuDao.java
/**
*账务数据层类
*/
publicclassZhangWuDao{
//获取数据库连接池,得到操作表数据的对象QueryRunner
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
}
编写Service包,ZhangWuService.java
/**
*账务业务层类
*/
publicclassZhangWuService{
//service都依赖dao
privateZhangWuDaozhangWuDao=newZhangWuDao();
}
编写view包,MainView.java
publicclassMainView{
//本项目中view依赖service
privateZhangWuServicezhangWuService=newZhangWuService();
}
3.2.账务JavaBean
JavaBean是指的是Java中的类,该类中的成员变量与数据库表中的字段相对应(变量名对应数据库表字段名、变量数据类型对应数据库表字段类型),并提供空参数构造方法、set、get方法。
我们现在来完成账务类的代码编写,如下:
/**
*账务类
*/
publicclassZhangWu{
privateintzwid;//id
privateStringflname;//分类名称
privateStringzhangHu;//账户名称
privatedoublemoney;//金额
privateStringcreatetime;//创建时间
privateStringdescription;//说明
publicStringgetFlname(){
returnflname;
}
publicvoidsetFlname(Stringflname){
this.flname=flname;
}
publicStringgetZhangHu(){
returnzhangHu;
}
publicvoidsetZhangHu(StringzhangHu){
this.zhangHu=zhangHu;
}
publicintgetZwid(){
returnzwid;
}
publicvoidsetZwid(intzwid){
this.zwid=zwid;
}
publicdoublegetMoney(){
returnmoney;
}
publicvoidsetMoney(doublemoney){
this.money=money;
}
publicStringgetCreatetime(){
returncreatetime;
}
publicvoidsetCreatetime(Stringcreatetime){
this.createtime=createtime;
}
publicStringgetDescription(){
returndescription;
}
publicvoidsetDescription(Stringdescription){
this.description=description;
}
}
3.3.功能界面菜单
界面菜单的完成,是项目编写的第一步。
我们通过输出语句,完成界面菜单的输出,之后再根据输入的功能序号,进行对应功能的调用执行。
3.3.1.功能实现步骤
1编写MainView类run方法
1.1完成功能界面菜单显示
1.2接收键盘输入的功能选项
1.3根据选项值,调用对应的功能方法
2编写MainApp类的main主方法
2.1调用MainView类中run方法,实现将程序执行起来,显示功能界面菜单。
3.3.2.功能实现代码
1.在view包MainView类中编写run方法
/**
*运行方法
*/
publicvoidrun(){
/*
*1.打印菜单2.获取用户输入3.调用对应方法
*/
booleanflag=true;
Scannerin=newScanner(System.in);
while(flag){
System.out.println("---------------管家婆家庭记账软件---------------");
System.out.println(1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统");
System.out.println("请输入要操作的功能序号[1-5]:
");
intop=in.nextInt();
switch(op){
case1:
addZhangWu();
break;
case2:
editZhangWu();
break;
case3:
deleteZhangWu();
break;
case4:
selectZhangWu();
break;
case5:
System.out.println("再见!
");
flag=false;
break;
default:
System.out.println("输入错误!
");
}
}
}
2.app包MainApp类的main主方法中,调用MainView类中run方法
publicstaticvoidmain(String[]args){
newMainView().run();
}
3.4.查询所有账务
3.4.1.功能实现步骤
1编写MainView类中selectZhangWu方法
1.1通过输出语句,显示出要查询账务的方式
1.2接收键盘的输入项,调用对应的方法(1.查询所有 2.按条件查询)
2编写MainView类中selectAll查询所有账务方法
2.1调用ZhangWuService类selectAll方法,返回包含所有账务数据的List
2.2调用MainView类中print方法,实现控制台显示所有账务数据
3编写MainView类中print方法
3.1使用输出语句,打印出账务表的表头名称
3.2遍历账务集合,将每个账务信息输出打印
4编写ZhangWuService类中selectAll方法
4.1调用ZhangWuDao类中selectAll方法,返回包含所有账务数据的List
5编写ZhangWuDao类中selectAll()方法
5.1通过QueryRunner对象,调用query方法查询数据库表gjp_zhangwu,返回包含所有账务数据的List
3.4.2.功能实现代码
1.编写MainView类中selectZhangWu方法
/**
*查询账务方法
*/
publicvoidselectZhangWu(){
System.out.println("1.查询所有 2.按条件查询");
Scannerin=newScanner(System.in);
intop=in.nextInt();
switch(op){
case1:
selectAll();
break;
case2:
select();
break;
default:
System.out.println("输入错误!
");
}
}
2.编写MainView类中selectAll方法
/**
*查询所有账务方法
*/
publicvoidselectAll(){
List
print(zhangWuList);
}
3.编写MainView类中print方法
/*
*输出账务方法
*/
privatevoidprint(List
System.out.println("ID\t类别\t\t账户\t\t金额\t\t时间\t\t说明");
for(ZhangWuzw:
zhangWuList){
System.out.println(zw.getZwid()+"\t"+zw.getFlname()+"\t\t"
+zw.getZhangHu()+"\t\t"+zw.getMoney()+"\t\t"
+zw.getCreatetime()+"\t"+zw.getDescription());
}
}
4.编写ZhangWuService类中selectAll方法
/**
*查询所有
*/
publicList
returnzhangWuDao.selectAll();
}
5.编写ZhangWuDao类中selectAll()方法
/**
*查询所有账务
*/
publicList
Stringsql="select*fromgjp_zhangwu";
try{
returnqr.query(sql,newBeanListHandler
}catch(SQLExceptione){
thrownewRuntimeException(e);
}
}
3.5.多条件查询账务
3.5.1.功能分析
1编写MainView类中select方法
1.1通过键盘输入查询日期的范围
1.2调用ZhangWuSerice类中select方法,返回查询日期范围内的账务信息集合List
1.3调用MainView类中的print方法,将账务信息集合中的内容显示在控制台中
2编写ZhangWuService类中select方法
2.1调用Zha
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 31 管家婆 项目 文档 讲义