管家婆家庭记账软件

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: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:用来创建数据库连接池对象;
在项目的实现过程中,我们会说明工具类的使用,这里就不再过多介绍。
JDBCUtils.java

package cn.itcast.gjp.tools;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;/** 获取数据库连接的工具类* 实现连接池,DBCP连接池* 复制已编写好的工具类JDBCUtils.java 到 tools包中;*/
public class JDBCUtils {//创建BasicDataSource对象private static BasicDataSource datasource = new BasicDataSource();//静态代码块,实现必要的参数设置static{//连接数据库的4个最基本信息,通过对象方法setXXX设置进来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;}
}

2.3. 数据表创建


对一个项目而言,表设计是非常重要的,因为应用程序中所有的操作都是基于数据库表而进行的,所以我们第一步就是创建数据库表。
管家婆项目的数据库设计很简单,我们只需找到gjp.sql文件,然后执行之即可。下面是创建库及表的SQL语句:

2.3.1. 创建数据库(脚本必须留存,方便后续可能需要迁库)

/*创建管家婆的数据库名字 gjp
*/
CREATE DATABASE gjp;USE gjp;/*创建数据表,表名财务字段,列主键分类名称 可变字符金额 double账户 可变字符(支付,收入方法)创建日期 data账务描述 可变字符
*/
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_zhangwuINSERT  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','又开资');SHOW gjp_zhangwu;-- 按照用户指定日期区间,between and
SELECT * FROM  gjp_zhangwu WHERE createtime BETWEEN '2016-3-1' AND '2016-6-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文件夹中,通过Build Path操作,添加到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

package cn.itcast.gjp.app;import cn.itcast.gjp.view.MainView;/** 在app包中,创建类MainApp.java,编写main主方法,用来完成本项目的启动*/
public class MainApp {public static void main(String[] args) {new MainView().run();}}

编写domain包中Zhangwu.java

/*** 账务类*/
public class Zhangwu {
}

编写Dao包中ZhangwuDao.java

/**
* 账务数据层类*/
public class ZhangwuDao{//获取数据库连接池,得到操作表数据的对象 QueryRunnerprivate QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
}

编写Service包,ZhangwuService.java

/**
* 账务业务层类*/
public class ZhangwuService {//service都依赖daoprivate ZhangwuDao dao = new ZhangwuDao();
}

编写view包,MainView.java

public class MainView {//本项目中view依赖serviceprivate ZhangwucController controller = new ZhangwucController();
}

3.2. 账务JavaBean

JavaBean是指的是Java中的类,该类中的成员变量与数据库表中的字段相对应(变量名对应数据库表字段名、变量数据类型对应数据库表字段类型),并提供空参数构造方法、set、get方法。
我们现在来完成账务类的代码编写,如下:

package cn.itcast.gjp.domain;
/** 在domain包中,创建类ZhangWu.java,它是用来封装账务信息的JavaBean*/
public class Zhangwu {private int zwid;private String flname;private String zhanghu;private double money;private String createtime;private String description;public Zhangwu() {super();}public Zhangwu(int zwid, String flname, String zhanghu, double money, String createtime, String description) {super();this.zwid = zwid;this.flname = flname;this.zhanghu = zhanghu;this.money = money;this.createtime = createtime;this.description = description;}public String getZhanghu() {return zhanghu;}public void setZhanghu(String zhanghu) {this.zhanghu = zhanghu;}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 getCreatetime() {return createtime;}public void setCreatetime(String createtime) {this.createtime = createtime;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}@Overridepublic String toString() {return "Zhangwu [zwid=" + zwid + ", flname=" + flname + ", zhanghu=" + zhanghu + ", money=" + money+ ", createtime=" + createtime + ", 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方法
/** 实现界面效果* 接收用户的输入* 根据数据,调用不同的功能方法*/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://选择添加账务,调用添加账务的方法addZhangWu();break;case 2://选择的编辑财务,调用编辑财务方法editZhangWu();break;   case 3://选择的删除账务,调用删除账务的方法deleteZhangWu();break;case 4://选择的是查询账务,调用查询账务的方法selectZhangwu();break;case 5://退出系统System.exit(0);break;}}}
2.app包MainApp类的main主方法中,调用MainView类中run方法
public static void main(String[] args) {new MainView().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方法

/** 定义方法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;}}

2. 编写MainView类中selectAll方法

/** 定义方法,实现查询所有的账务数据*/public void selectAll(){//调用控制层中的方法,查询所有的账务数据List<Zhangwu> list = controller.selectAll();if(list.size() != 0){print(list);         }else{System.out.println("没有查询到数据");}}

3. 编写MainView类中print方法

//输出账务数据方法,接受List集合,遍历集合,输出表格//快捷键 Alt+Shift+M 抽取方法private void print(List<Zhangwu> list) {//输出表头System.out.println("ID\t\t类别\t\t账户\t\t金额\t\t时间\t\t\t说明");//遍历集合,结果输出控制台for(Zhangwu zw : list){System.out.println(zw.getZwid() + "\t\t" + zw.getFlname() + "\t\t" + zw.getZhanghu() + "\t\t"    + zw.getMoney() + "\t\t" + zw.getCreatetime() + "\t\t" + zw.getDescription());}}

4. 编写ZhangWuService类中selectAll方法

/** 定义方法,实现查询所有的账务数据* 此方法,由控制层调用,取调用dao层的方法*/public List<Zhangwu> selectAll(){//List<Zhangwu> list = dao.selectAll();return dao.selectAll();}

5. 编写ZhangWuDao类中selectAll()方法

/** 定义方法,查询数据库,获取所有的账务数据* 方法,由控制层调用* 结果集,将所有的账务数据,存储到Bean对象中,存储到集合中*/public List<Zhangwu> selectAll(){try{//查询账务数据的SQL语句String sql = "SELECT * FROM  gjp_zhangwu";//调用qr对象的方法,query方法,结果集BeanListHandlerList<Zhangwu> list = qr.query(sql, new BeanListHandler<>(Zhangwu.class));return list;}catch(SQLException ex){System.out.println(ex);throw new RuntimeException("查询所有账务失败");}}

3.5. 多条件查询账务

3.5.1. 功能分析

1 编写MainView类中select方法
1.1 通过键盘输入查询日期的范围
1.2 调用ZhangWuSerice类中select方法,返回查询日期范围内的账务信息集合List
1.3 调用MainView类中的print方法,将账务信息集合中的内容显示在控制台中
2 编写ZhangWuService类中select方法
2.1 调用ZhangWuDao 类中select方法,返回查询日期范围内的账务信息集合List
3 编写ZhangWuDao类中select方法
3.1 通过QueryRunner对象,调用query方法查询数据库表gjp_zhangwu,返回包含查询日期范围内的账务数据List集合

3.5.2. 功能实现步骤

1. 编写MainView类中select方法
/** 定义方法,实现条件查询账务数据* 提供用户的输入日期,开始日期和结束日期* 2个日期,传递到controller层* 调用controller的方法,传递2个日期参数* 获取到controller查询的结果集,并打印出来*/public void select(){System.out.println("选择条件查询,输入日期格式xxxx-xx-xx");Scanner sc = new Scanner(System.in);System.out.println("请输入开始日期:");String startDate = sc.nextLine();System.out.println("请输入结束日期:");String endDate = sc.nextLine();//调用controller层的方法,传递日期,获取查询结果集List<Zhangwu> list = controller.select(startDate, endDate);if(list.size() != 0){print(list);          }else{System.out.println("没有查询到数据");}}
2. 编写ZhangWuService类中select方法
/** 定义方法,实现条件查询账务* 方法由控制层调用,传递2个日期字符串* 调用dao层的方法,传递2个日期字符串* 获取到查询结果集*/public List<Zhangwu> select(String startDate,String endDate){return dao.select(startDate, endDate);}
3. 编写ZhangWuDao类中select方法
/** 定义方法,查询数据库,带有条件去查询账务表* 由业务层调用,查询结果集存储到Bean对象,存储到List集合* 调用者传递2个日期字符串* * -- 按照用户指定日期区间,between and SELECT * FROM  gjp_zhangwu WHERE createtime BETWEEN '2016-3-1' AND '2016-6-30'*/public List<Zhangwu> 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) {// TODO: handle exceptionSystem.out.println(ex);throw new RuntimeException("条件查询失败");}}

运行结果:

---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
2
选择条件查询,输入日期格式xxxx-xx-xx
请输入开始日期:
2016-3-1
请输入结束日期:
2016-6-30
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
2
选择条件查询,输入日期格式xxxx-xx-xx
请输入开始日期:
2018-1-1
请输入结束日期:
2019-2-20
ID      类别      账户      金额      时间          说明
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:

3.6. 添加账务

3.6.1. 功能分析

1 编写MainView类中addZhangWu方法
1.1 键盘输入新添加的账务信息
1.2 调用ZhangWuService类中addZhangWu方法,用来指定账务的添加
1.3 添加完毕后,使用输出语句,提示“添加账务成功!”
2 编写ZhangWuService类中addZhangWu方法
2.1 调用ZhangWuDao类中addZhangWu方法,用来指定账务的添加
3 编写ZhangWuDao类中addZhangWu方法
3.1 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成指定账务添加到数据库表中

3.6.2. 功能实现步骤

1. 编写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层的方法,传递参数//将用户输入的所有参数封装成一个Zhangwu对象//主键为0,没关系,因为传不了给其他函数用上Zhangwu zw = new Zhangwu(0, flname, zhanghu, money, createtime, description);controller.addZhangWu(zw);System.out.println("添加账务成功");}
2. 编写ZhangWuService类中addZhangWu方法
/** 定义方法,实现添加账务* 是由控制层调用,传递Zhangwu类型对象* 调用dao层方法,传递Zhangwu对象*/public void addZhangWu(Zhangwu zw){dao.addZhangWu(zw);}
3. 编写ZhangWuDao类中addZhangWu方法
/** 定义方法,实现添加账务功能* 由业务层调用,传递Zhangwu对象* 将Zhangwu对象中的数据,添加到数据表*/public void addZhangWu(Zhangwu zw){try {//拼写添加数据的SQL语句String sql = "INSERT  INTO gjp_zhangwu(flname,money,zhangHu,createtime,description) VALUES (?,?,?,?,?)";//创建对象数组,存储5个占位符的实际参数//实际参数来源是,传递过来的对象ZhangwuObject[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription()};//调用qr对象中的updata执行添加qr.update(sql, params);         } catch (SQLException ex) {// TODO: handle exceptionSystem.out.println(ex);throw new RuntimeException("账务添加失败");}}

运行结果:

---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
1
选择的添加账务功能,请输入以下内容:
输入分类名称:
捡到钱
输入金额:
100.9
输入账户:
现金
输入日期:格式XXXX-XX-XX
2016-7-7
请输入具体描述:
运气爆表,出门捡钱
添加账务成功
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
1
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
15      捡到钱     现金      100.9       2016-07-07      运气爆表,出门捡钱
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
2
选择条件查询,输入日期格式xxxx-xx-xx
请输入开始日期:
2016-7-7
请输入结束日期:
2016-7-7
ID      类别      账户      金额      时间          说明
15      捡到钱     现金      100.9       2016-07-07      运气爆表,出门捡钱
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:

3.7. 编辑账务

3.7.1. 功能分析

1 编写MainView类中editZhangWu方法
1.1 键盘输入要编辑的账务信息ID号
1.2 键盘输入要修改的账务信息内容
1.3 调用ZhangWuService类中editZhangWu方法,用来将指定的账务信息进行更新
1.4 更新完毕后,使用输出语句,提示 “编辑账务成功!”
2 编写ZhangWuService类中editZhangWu方法
2.1 调用ZhangWuDao类中editZhangWu方法,用来将指定的账务信息进行更新
3 编写ZhangWuDao类中editZhangWu方法
3.1 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成数据库表中指定账务更新操作

3.7.2. 功能实现步骤

1. 编写MainView类中editZhangWu方法
/** 定义方法,实现对账务的编辑功能* 实现思想:*     接收用户的输入*       数据的信息,封装成Zhangwu对象*    调用控制层的方法,传递Zhangwu对象,实现编辑*/public void editZhangWu(){//调用查询所有账务数据的功能,显示出来//看到所有数据,从中选择一句,进行编辑selectAll();System.out.println("选择的是编辑功能,请输入需要修改数据的ID:");Scanner sc = new Scanner(System.in);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对象//主键为0,没关系,因为传不了给其他函数用上//输入的ID,必须封装对象Zhangwu zw = new Zhangwu(zwid, flname, zhanghu, money, createtime, description);//调用controller层的方法,实现编辑账务功能controller.editZhangWu(zw);System.out.println("账务编辑成功");}
2. 编写ZhangWuService类中editZhangWu方法
/** 定义方法,实现编辑账务功能* 由控制层调用,传递Zhangwu对象* 调用dao层的方法,传递Zhangwu对象*/public void editZhangWu(Zhangwu zw) {dao.editZhangWu(zw);}
3. 编写ZhangWuDao类中editZhangWu方法
/** 定义方法,实现编辑账务功能* 由业务层(service层)调用,传递Zhangwu对象* 将Zhangwu对象中的数据,更新到数据表*/public void editZhangWu(Zhangwu zw) {try {//更新数据的SQL语句String sql = "UPDATE gjp_zhangwu SET flname=?,money=?,zhangHu=?,createtime=?,description=? WHERE zwid=?";//创建对象数组,存储所有占位符的实际参数//实际参数来源是,传递过来的对象ZhangwuObject[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()};//调用qr对象中的updata执行添加qr.update(sql, params);           } catch (SQLException ex) {// TODO: handle exceptionSystem.out.println(ex);throw new RuntimeException("账务编辑失败");}}

运行结果:

---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
2
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
15      捡到钱     现金      100.9       2016-07-07      运气爆表,出门捡钱
选择的是编辑功能,请输入需要修改数据的ID:
15
输入分类名称:
丢钱
输入金额:
199.99
输入账户:
支付宝
输入日期:格式XXXX-XX-XX
2016-8-8
请输入具体描述:
倒霉丢钱了
账务编辑成功
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
1
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
15      丢钱      支付宝     199.99      2016-08-08      倒霉丢钱了
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:

3.8. 删除账务

3.8.1. 功能分析

1 编写MainView类中deleteZhangWu方法
1.1 键盘输入要删除的账务信息ID号
1.2 调用ZhangWuService类中deleteZhangWu方法,用来将指定的账务信息删除
1.3 删除完毕后,使用输出语句,提示 “删除账务成功!”
2 编写ZhangWuService类中deleteZhangWu方法
2.1 调用ZhangWuDao类中deleteZhangWu方法,用来将指定的账务信息删除
3 编写ZhangWuDao类中deleteZhangWu方法
3.1 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成数据库表中指定账务删除操作

3.8.2. 功能实现步骤

1. 编写MainView类中deleteZhangWu方法
/** 定义方法,实现对账务的删除功能* 实现思想:*      接收用户的输入,输入一个主键数据(ID)*      调用控制层的方法,传递一个主键*/public void deleteZhangWu(){//调用查询所有账务数据的功能,显示出来//看到所有数据,从中选择一句,进行删除selectAll();System.out.println("选择的是删除功能,请输入需要删除数据的序号:");int zwid = new Scanner(System.in).nextInt();//调用控制层方法,传递主键ID即可controller.deleteZhangWu(zwid);System.out.println("删除账务成功");}
2. 编写ZhangWuService类中deleteZhangWu方法
/** 定义方法,实现删除账务功能* 由视图层调用,传递int类型主键* 调用service层的方法,传递int类型主键*/public void deleteZhangWu(int zwid){service.deleteZhangWu(zwid);}
3. 编写ZhangWuDao类中deleteZhangWu方法
/** 定义方法,实现删除账务功能* 由控制层调用,传递主键id* 调用dao层方法,传递主键id*/public void deleteZhangWu(int zwid) {dao.deleteZhangWu(zwid);}

运行结果:

---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
3
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
15      丢钱      支付宝     199.99      2016-08-08      倒霉丢钱了
选择的是删除功能,请输入需要删除数据的序号:
15
删除账务成功
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
1
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:

3.9. 功能模块总结

恭喜大家,我们已经完成了分类模块所有功能。通过分类模块功能的实现,大家可能会发现如下几个问题:
 难度大的地方:自行功能分析的能力欠缺,需要讲师来分析;
 代码实现:
 View(Controller):代码量最大;
 Service层:代码量最小;
 DAO层:相似度高,难度不大;

到现在为止我们是第一次写这么复杂的项目,所以大家之间也没有练习过功能分析的能力,所以第一次需要讲师来分析是正常的,当大家不断练习后,有了正确的思维模式,自然就能分析了。
view层的作用是“界面”,用来完成数据显示给用户。当前项目view层中,包含了Controller层代码。
Controller层的作用是“调度”,调度的是表现层view和业务层Service,主要功能分为:一是把表现层的数据交给业务层处理;二是把业务层返回的数据交给表现层显示。至于为什么这一层View(Controller)的代码量大,这里我要说明一下,其实不是View(Controller)层的代码量大,而是其他层代码量少,所以你会感觉View(Controller)层代码量大。
Service层的作用是“业务”,我们也可以把“业务”当成是“功能”。那为什么Service层代码量少呢?原因是现在我们写的项目很小,没有什么复杂的业务,而今后大家要写的大型项目代码量最大的就是Service层。
DAO层是操作数据库,现在我们使用的是commons-dbutils工具来简化JDBC,所以我们发现代码不多,比较简单。最后我们还会学习其他DAO层的工具,例如:hibernate和mybatis,他们都是JDBC的封装,用来简化JDBC。
总体的运行结果:

---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
1
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
2
选择条件查询,输入日期格式xxxx-xx-xx
请输入开始日期:
2016-10-30
请输入结束日期:
2016-10-30
ID      类别      账户      金额      时间          说明
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
1
选择的添加账务功能,请输入以下内容:
输入分类名称:
丢钱了
输入金额:
123.2
输入账户:
现金
输入日期:格式XXXX-XX-XX
2016-11-1
请输入具体描述:
倒霉了
添加账务成功
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
1
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
16      丢钱了     现金      123.2       2016-11-01      倒霉了
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
2
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
16      丢钱了     现金      123.2       2016-11-01      倒霉了
选择的是编辑功能,请输入需要修改数据的ID:
16
输入分类名称:
赚钱了
输入金额:
133.2
输入账户:
现金
输入日期:格式XXXX-XX-XX
2016-11-02
请输入具体描述:
幸运了
账务编辑成功
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
1
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
16      赚钱了     现金      133.2       2016-11-02      幸运了
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
3
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
16      赚钱了     现金      133.2       2016-11-02      幸运了
选择的是删除功能,请输入需要删除数据的序号:
16
删除账务成功
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:
4
1.查询所有 2.条件查询
1
ID      类别      账户      金额      时间          说明
1       吃饭支出        交通银行        247.0       2016-03-02      家庭聚餐
2       工资收入        现金      12345.0     2016-03-15      开工资了
3       服装支出        现金      1998.0      2016-04-02      买衣服
4       吃饭支出        现金      325.0       2016-06-18      朋友聚餐
5       股票收入        工商银行        8000.0      2016-10-28      股票大涨
6       股票收入        工商银行        5000.0      2016-10-28      股票又大涨
7       工资收入        交通银行        5000.0      2016-10-28      又开工资了
8       礼金支出        现金      5000.0      2016-10-28      朋友结婚
9       其他支出        现金      1560.0      2016-10-29      丢钱了
10      交通支出        交通银行        2300.0      2016-10-29      油价还在涨啊
11      吃饭支出        工商银行        1000.0      2016-10-29      又吃饭
12      工资收入        现金      1000.0      2016-10-30      开资
13      交通支出        现金      2000.0      2016-10-30      机票好贵
14      工资收入        现金      5000.0      2016-10-30      又开资
---------------管家婆家庭记账软件---------------
1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统
请输入要操作的功能序号[1-5]:

31_管家婆家庭记账软件相关推荐

  1. 家庭记账软件 —— Java

    <家庭记账软件> 模拟是实现一个基于文本界面的<家庭记账软件> 该程序是全网最全Java零基础入门教程的项目一,可以直接查看p127 掌握逐步的编程技巧和调试技巧 主要涉及以下 ...

  2. Java项目之家庭记账软件

    项目要求 要求实现一个基于文本界面的记账软件,模拟实现一个基于文本界面的<家庭记账软件>,掌握初步的编程技巧和调试技巧. 主要涉及以下知识点: - 局部变量和基本数据类型 - 循环语句 - ...

  3. Java模拟实现一个基于文本界面的《家庭记账软件》

    主要涉及以下知识点: 变量的定义 基本数据类型的使用 循环语句 分支语句 方法声明.调用和返回值的接收 简单的屏幕输出格式控制 需求说明 模拟实现基于文本界面的<家庭记账软件>. 该软件能 ...

  4. 家庭记账软件(项目一)

    目 标 • 模拟实现一个基于文本界面的<家庭记账软件> • 掌握初步的编程技巧和调试技巧 • 主要涉及以下知识点:    变量的定义    基本数据类型的使用    循环语句    ...

  5. 项目一. 家庭记账软件

    要求: 项目一 家庭记账软件 目 标• 模拟实现一个基于文本界面的<家庭记账软件>• 掌握初步的编程技巧和调试技巧• 主要涉及以下知识点: 变量的定义 基本数据类型的使用 循环语句 ...

  6. 项目一:家庭记账软件

    需求说明: 1.模拟实现一个基于文本界面的<家庭记账软件> 2.该软件能够记录家庭的收入.支出,并能够打印收支明细表 3.假设家庭起始的生活基本金为0元. 每次登记收入后,收入的金额应累加 ...

  7. Java实现家庭记账软件(文本界面)

    家庭记账软件 一.需求 模拟实现基于文本界面的家庭记账软件. 此软件能够记录家庭收入.支出,并打印收支明细表. 项目采用分级菜单方式.主菜单如下: 二.分析 主要设计以下知识点: 局部变量和基本数据类 ...

  8. 【项目1】家庭记账软件

    目录 目标 涉及知识点 需求说明 流程图(活动图) -主流程 -收入和支出处理流程 实现 1.Utility工具类 2.2.FamilyAccount框架及功能实现源码 ​​​​​​​ 目标 模拟实现 ...

  9. Java项目一 家庭记账软件

    目录 概述 项目要求 代码 概述 项目来源:B站的尚硅谷java教程 这套视频总的来说还是很良心的,适合快速上手,但是要想深入了解原理的话,深度上还是差一点. 其实这套视频里涉及的练习也谈不上是项目, ...

  10. 项目一 家庭记账软件 (目标 + 需求说明 + 代码详解 + 基本金和收支明细记录 + 键盘访问的实现)

    家庭记账软件 1. 目标 2. 需求说明 3. 代码详解 4. 基本金和收支明细的记录 5. 键盘访问的实现 1. 目标 模拟实现一个基于文本界面的<家庭记账软件> 掌握初步的编程技巧和调 ...

最新文章

  1. mysql棋牌管理_棋牌架构DB服务(Mysql+Redis)数据存储演进笔记
  2. GDCM:Dicom文件Empty Mask的测试程序
  3. C语言 数字和字符串的转换 error
  4. lua metatable 和 _index 实验
  5. android 设置线程优先级
  6. event.keyCode列表
  7. mosquitto源码分析(四)
  8. 洛奇 服务器文件,【公告】电信三区服务器合并说明...
  9. ASP中巧用Response属性
  10. 实用动效UI素材,高效向用户展示你的app功能!
  11. android继承图,Android图形系统(三)-View绘制流程
  12. 如何在Mac上使用屏幕共享
  13. SQL server 基础语法
  14. 编译原理(整体理解)
  15. 如何调整计算机显卡,教你n卡发挥最大性能,电脑怎么设置独立显卡-
  16. 初等证明:费马商的加法分配律证明
  17. 做国内最好的考勤软件,领航软件被评为2007中国软件创新100家典型企业
  18. 什么电脑录音软件是最好用的
  19. Windows RC版、RTM版、OEM版、RTL版、VOL版的区别
  20. StringBuffer的理解

热门文章

  1. 基于Java毕业设计/疫情展示平台源码+系统+mysql+lw文档+部署软件
  2. Elas Digital:定义一个Token的最简易方法
  3. Docker配置加速器
  4. C语言----最长公共子串(动态规划)
  5. 拼多多商品采集、商品数据解析详解
  6. spring学习-01编译spring5.0源码(亲测可用)
  7. 《上海悠悠接口自动化平台》-2.extract 提取结果与validate 校验结果
  8. python时间控件readonly属性_Selenium2+python自动化25-js处理日历控件(修改readonly属性)转自-上海悠悠...
  9. 内网DNS重要使用作用
  10. 计算机考研408-2010