1.创建数据库

/*
SQLyog Ultimate v12.4.0 (64 bit)
MySQL - 5.5.49
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;create table `gjp_zhangwu` (`zwid` int (11),`flname` varchar (600),`money` double ,`zhangHu` varchar (300),`createtime` date ,`description` varchar (3000)
);
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','又开资');
insert into `gjp_zhangwu` (`zwid`, `flname`, `money`, `zhangHu`, `createtime`, `description`) values('17','发压岁钱','500','现金','2017-01-27','给小朋友们发的压岁钱');
insert into `gjp_zhangwu` (`zwid`, `flname`, `money`, `zhangHu`, `createtime`, `description`) values('18','干活','100','现金','2017-01-01','好开心啊');

2.导入需要的jar包


3.创建JDBC连接数据库的工具类

名字为JDBCUtils.java

package cn.itcast.gjp.tools;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;public class JDBCUtils {public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";public static final String URL = "jdbc:mysql://localhost:3306/gjp";public static final String USERNAME = "root";public static final String PASSWORD = "123456";private static BasicDataSource dataSource = new BasicDataSource();static {dataSource.setDriverClassName(DRIVER_CLASS_NAME);dataSource.setUrl(URL);dataSource.setUsername(USERNAME);dataSource.setPassword(PASSWORD);}public static DataSource getDataSource() {return dataSource;}
}

4.创建数据库表的domain类

package cn.itcast.gjp.domain;
/*** 账务类* @author Administrator**/
public class ZhangWu {private int zwid;// idprivate String flname;// 分类名称private String zhangHu;// 账户名称private double money;// 金额private String createtime;// 创建时间private String description;// 说明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 ZhangWu() {super();// TODO Auto-generated constructor stub}public String getFlname() {return flname;}public void setFlname(String flname) {this.flname = flname;}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 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 + "]";}}

5.程序的逻辑视图,存放逻辑代码

package cn.itcast.gjp.view;import java.util.List;
import java.util.Scanner;import cn.itcast.gjp.controller.ZhangWuController;
import cn.itcast.gjp.domain.ZhangWu;public class MainView {//本项目中view依赖serviceprivate ZhangWuController controller = new ZhangWuController();public void run() {/** 运行方法* 1.打印菜单,2,获取用户输入,3,调用对应方法*/boolean flag = true;Scanner sc = new Scanner(System.in);while(flag) {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.out.println("再见!");flag = false;break;default:System.out.println("输入错误,请重新输入");}}}/*** 删除账务中的某一条数据*/public void deleteZhangWu() {//先显示出表中的所有的数据selectAll();Scanner sc = new Scanner(System.in);System.out.println("请输入要删除数据的ID值");int zwid = sc.nextInt();//调用控制层的删除方法int num = controller.deleteZhangWu(zwid);if(num > 0) {System.out.println("删除成功");}else {System.out.println("删除失败");}}/*** 编辑账务的方法*/public void editZhangWu() {selectAll();System.out.println("您选择的是编辑账务,请输入数据");Scanner sc = new Scanner(System.in);System.out.println("请输入编辑的ID值");int zwid = sc.nextInt();System.out.println("请输入类别:");String flname = sc.next();System.out.println("请输入金额:");double money = sc.nextDouble();System.out.println("请输入账户:");//next和nextLine有什么区别String zhangHu = sc.next();System.out.println("请输入时间:");String createtime = sc.next();System.out.println("请输入描述:");String description = sc.next();//封装为ZhuangWu对象ZhangWu zhangWu = new ZhangWu(zwid, flname, zhangHu, money, createtime, description);//调用控制层的editZhangWu方法int num = controller.editZhangWu(zhangWu);if(num > 0) {System.out.println("编辑成功");}else {System.out.println("编辑失败");}selectAll();}/*** 查询账务方法*/public void selectZhangWu() {System.out.println("1.查询所有 2.按条件查询");Scanner in = new Scanner(System.in);int selectChoose = in.nextInt();switch (selectChoose) {case 1://查询所有的账务selectAll();break;case 2://按条件查询账务select();break;default:System.out.println("输入错误");}}/*** 添加账务的方法,addZhangWu()* 键盘输入新添加的账务信息调用ZhangWuController类中addZhangWu方法,用来指定账务的添加添加完毕后,使用输出语句,提示“添加账务成功!”* */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("请输入账户:");//next和nextLine有什么区别String zhangHu = sc.next();System.out.println("请输入时间:");String createtime = sc.next();System.out.println("请输入描述:");String description = sc.next();//将输入的内容封装成ZhangWu对象ZhangWu zhangWu = new ZhangWu(0, flname, zhangHu, money, createtime, description);//调用控制层的addZhangWu的方法int num = controller.addZhangWu(zhangWu);if(num > 0) {System.out.println("添加账务成功");}else {System.out.println("添加账务失败");}}/*** 查询所有账务方法*/public void selectAll() {//调用控制层的方法,查询所有的账务数据List<ZhangWu> list = controller.selectAll();print(list);}private void print(List<ZhangWu> list) {//打印一条表头System.out.println("ID\t类别\t\t账户\t\t金额\t\t时间\t\t说明");//遍历集合拿到账务中所有的数据//一定要用ZhangWu类中的get方法获取字段,不然拿到的就是每一条数据的地址值for (ZhangWu zw : list) {System.out.println(zw.getZwid() + "\t" + zw.getFlname() + "\t\t"+ zw.getZhangHu() + "\t\t" + zw.getMoney() + "\t\t"+ zw.getCreatetime() + "\t" + zw.getDescription());}}/*** 定义方法,实现条件查询账务* 提供用户的输入日期,开始日期和结束日期,将两个日期传递到controller层,传递两个日期参数* 获取到controller层的查询结果,遍历集合*/public void select() {System.out.println("请输入条件查询的开始和结束日期");Scanner sc = new Scanner(System.in);System.out.print("请输入开始日期:");String startDate = sc.nextLine();System.out.print("请输入结束日期:");String endDate = sc.nextLine();//调用controller层条件查询的方法,获取查询结果集List<ZhangWu> list = controller.select(startDate, endDate);if(list.size() > 0) {print(list);}else {System.out.println("日期输入错误,请重新操作");}}
}

6.账务的数据层

package cn.itcast.gjp.dao;import java.sql.SQLException;
import java.util.List;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;import cn.itcast.gjp.domain.ZhangWu;
import cn.itcast.gjp.tools.JDBCUtils;/*** 账务数据层类* * @author Administrator**/
public class ZhangWuDao {// 获取数据库连接池,得到操作表数据的对象 QueryRunnerprivate QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());/*** 删除账务的方法*/public int deleteZhangWu(int zwid) {try{String sql = "DELETE FROM gjp_zhangwu WHERE zwid=?";Object[] params = {zwid};return qr.update(sql, params);}catch(SQLException ex) {System.out.println(ex);throw new RuntimeException("删除账务失败");}}/*** 编辑账务的方法*/public int editZhangWu(ZhangWu zhangWu) {try {// 编辑的sql语句String sql = "UPDATE gjp_zhangwu SET flname=?,money=?,zhangHu=?,createtime=?,description=? WHERE zwid=?;";// 创建对象数组,存储占位符中的内容Object[] params = { zhangWu.getFlname(), zhangWu.getMoney(),zhangWu.getZhangHu(), zhangWu.getCreatetime(),zhangWu.getDescription(), zhangWu.getZwid() };return qr.update(sql, params);} catch (SQLException ex) {System.out.println(ex);throw new RuntimeException("编辑账务失败,请重现选择");}}/*** 添加账务的方法*/public int addZhangWu(ZhangWu zhangWu) {try {// 定义添加账务的sql语句String sql = "INSERT INTO gjp_zhangwu(flname,money,zhangHu,createtime,description)VALUES (?,?,?,?,?)";// 定义占位符的对象数组Object[] params = { zhangWu.getFlname(), zhangWu.getMoney(),zhangWu.getZhangHu(), zhangWu.getCreatetime(),zhangWu.getDescription() };//return qr.update(sql, params);} catch (SQLException ex) {System.out.println(ex);throw new RuntimeException("添加账务失败");}}/*** 定义方法,实现条件查询* * 返回查询到的list集合*/public List<ZhangWu> select(String startDate, String endDate) {try {// 写出需要查询的条件sql语句String sql = "SELECT *FROM gjp_zhangwu WHERE createtime BETWEEN ? AND ?";// 定义对象数组,存储?占位符的数据Object[] params = { startDate, endDate };return qr.query(sql, new BeanListHandler<ZhangWu>(ZhangWu.class),params);} catch (SQLException ex) {System.out.println(ex);throw new RuntimeException("条件查询失败");}}/*** 定义方法,实现查询所有的数据 此方法由业务层调用 结果集,将所有的账务数据,存储到Bean对象中,然后再存储到集合中*/public List<ZhangWu> selectAll() {try {// 查询所有账务的sql语句String sql = "SELECT *FROM gjp_zhangwu";// 调用QueryRunner的query方法List<ZhangWu> list = qr.query(sql, new BeanListHandler<ZhangWu>(ZhangWu.class));return list;} catch (SQLException ex) {System.out.println(ex);throw new RuntimeException("查询所有账务失败");}}
}

7.账务的业务层类

package cn.itcast.gjp.service;import java.util.List;import cn.itcast.gjp.dao.ZhangWuDao;
import cn.itcast.gjp.domain.ZhangWu;/*** 账务业务层类* @author Administrator**/
public class ZhangWuService {//service都依赖daoprivate ZhangWuDao dao = new ZhangWuDao();/*** 删除账务的方法*/public int deleteZhangWu(int zwid) {return dao.deleteZhangWu(zwid);}/*** 编辑账务的方法* */public int editZhangWu(ZhangWu zhangWu) {return dao.editZhangWu(zhangWu);}/*** 添加账务的方法*/public int addZhangWu(ZhangWu zhangWu) {return dao.addZhangWu(zhangWu);}/*** 定义方法,实现条件查询* 调用dao层的条件查询方法* 返回查询到的list集合*/public List<ZhangWu> select(String startDate, String endDate) {return dao.select(startDate, endDate);}/*** 定义方法,实现查询所有的账务数据* 此方法,由控制层调用,去调用dao层的方法* */public List<ZhangWu> selectAll() {return dao.selectAll();}
}

8.账务的控制器层

package cn.itcast.gjp.controller;import java.util.List;import cn.itcast.gjp.domain.ZhangWu;
import cn.itcast.gjp.service.ZhangWuService;/** 控制器层* 接收用户的视图层的数据,数据传递给Service层* 成员位置,创建service对象* * */
public class ZhangWuController {private ZhangWuService service = new ZhangWuService();/*** 定义方法,实现条件查询* 调用service层的条件查询方法* 返回查询到的list集合*/public List<ZhangWu> select(String startDate, String endDate) {return service.select(startDate,endDate);}/*** 删除账务的方法*/public int deleteZhangWu(int zwid) {return service.deleteZhangWu(zwid);}/*** 编辑账务的方法* */public int editZhangWu(ZhangWu zhangWu) {return service.editZhangWu(zhangWu);}/*** 添加账务的方法*/public int addZhangWu(ZhangWu zhangWu) {return service.addZhangWu(zhangWu);}/*** 控制层定义方法,实现查询所有的账务数据* 方法由视图层调用,方法调用service层*/public List<ZhangWu> selectAll() {return  service.selectAll();}
}

9.程序的主入口方法类

package cn.itcast.gjp.app;import cn.itcast.gjp.view.MainView;/*** 主方法类* @author Administrator**/
public class MainApp {public static void main(String[] args) {new MainView().run();}
}

具体的操作

简易的记账软件设计与实现相关推荐

  1. 用python写了一个简易的记账软件,后期有可能更新

    用python写了一个简易的记账软件,后期有可能更新 记账程序由来 程序介绍 模块 数据写入 gui图形化界面 关于输入空值 新建工作簿 完整代码 记账程序由来 曾经在iOS14的快截指令中写了一个快 ...

  2. 用python写了一个简易的记账软件,后期有可能更新!

    记账程序由来 曾经在iOS14的快截指令中写了一个快捷指令用来记账,但是由于快捷指令的限制,只能把数据记录到备忘录或者numbers,数据的迁移性很差.所以最后干脆用python写了一个程序 程序介绍 ...

  3. 安卓--记账软件课程设计

    安卓课程设计 记账软件课程设计 目录 1 引言............................................................................. ...

  4. 基于android的记账软件,基于Android的记账软件的设计与实现

    摘要: 随着经济社会的发展,人们的资金流动更加频繁,对记账的需求也逐渐提高.目前移动设备已经普及,移动记账以其随时随地记账,高效统计的特点,受到了广大记账理财人士的青睐.本文通过对国内外手机记账软件发 ...

  5. 基于Android的个人记账软件的设计与实现

    基于Android的个人记账软件的设计与实现 [系统要求] 通过查阅和分析相关资料,应用所学知识与技术,独自完成一套基于Android的个人记账系统.系统开发过程应遵循软件工程思想,任务包括系统架构的 ...

  6. 家庭收支记账软件(Java简易版)

    设计一个 家庭收支记账软件 需求说明 模拟实现基于文本界面的<家庭记账软件> 该软件能够记录家庭的收入.支出,并能够打印收支明细表. 项目采用分级菜单方式.主菜单如下: 分析 需要使用Sc ...

  7. java课程设计——家庭收入记账软件

    一个简易的小东西 尚硅谷java项目一 package work1;import java.util.Scanner;public class Utility {private static Scan ...

  8. 淘宝记账王3.1【为淘宝卖家设计的记账软件】

    淘宝记账王 3.1 [为淘宝卖家设计的记账软件] 软件语言:简体中文 授权方式:共享软件 软件大小:60KB 更新时间:2013-08-09 运行环境:Win2K,WinXP,Win2003,Vist ...

  9. OnlyBill 简易记账软件(续)

    <OnlyBill>记账软件正式上架啦! <OnlyBill>于2.17号正式上架, 这是一款简单的记账软件, 1. 支持多个账单, 每个账单下可以有很多单笔收入或支出记录 2 ...

最新文章

  1. SpringBoot配置文件放在jar外部
  2. C++_STL——unordered_map、unordered_multimap、unordered_set、unordered_multiset
  3. CentOS 6.5 安装 Mysql 5.7.* (tar.gz)
  4. numpy.argmax详解
  5. 中国无烟煤市场需求规模与未来发展形势分析报告2022版
  6. 玻璃体浑浊的分子原理
  7. 连接pgsql_Laravel 数据库连接配置和读写分离
  8. 让多核CPU占用率曲线听你指挥(Windows实现)——《编程之美》1.1学习笔记
  9. 本地mongochef连接其他计算机上的数据库认证失败解决方法
  10. Centos 操作系统常用log日志
  11. Uber牵手戴姆勒共事自动驾驶,探索未来出行模式
  12. 《LeetCode刷题》954. 二倍数对数组(java篇)
  13. 深度优先搜索-迷宫问题
  14. RMB小写转换成大写
  15. 计算机考试打字合格速度,雅思考试使用机考,打字速度决定最终成绩
  16. Unity 碰撞位置
  17. Gitlab+Docker构建流水线部署
  18. 微信小程序实现手机号登录:报40029, 错误信息:code 无效,微信原始报文:{“errcode“:40029,“errmsg“:“invalid code
  19. SAP云集成 SAP Integration Suite启用过程,踩坑记
  20. win10安装elasticSearch8.1.2,报错解决方案

热门文章

  1. MapReduce基本概述——分布式计算框架
  2. 虚拟地址,虚拟地址空间, 交换分区
  3. 韦东山嵌入式第一期学习笔记DAY_4——8_3编写第1个程序点亮LED
  4. Uibot 浏览器窗口最大化
  5. axios请求拦截器 和 响应拦截器
  6. 车牌识别之二:字符分割
  7. codeforce_div3_round527_ABCDEF
  8. 【TransMEF】
  9. OLE程序开发利用(开发EXCEL) 之 一
  10. Go使用grpc+http打造高性能微服务