Java 小项目 01 简单记账软件

1 功能介绍

1.1 功能介绍
  1. 查询账务
  2. 多条件查询
  3. 添加账务
  4. 编辑账务
  5. 删除账务
1.2 运行结果

这里写图片描述

2 环境搭建

1)开发工具:eclipse

2)第三方jar包

jar 包下载

  • commons-dbutils-1.7.jar:封装并简化JDBC操作
  • commons-dbcp2-2.5.0.jar:数据库连接池组件
  • commons-pool2-2.6.0.jar:DBCP依赖该jar包
  • commons-logging-1.2.jar:依赖jar包
  • mysql-connector-java-5.1.27-bin.jar:MySQL的JDBC驱动包

3)数据表创建

# 新建数据库
create database jzb;

# 新建数据表
create table jzb_zhangwu(
    jid int primary key auto_increment,
    jname varchar(200),
    jmoney double,
    jzhanghu varchar(100),
    jcreatetime date,
    jdescription varchar(1000)
) default charset=utf8;

# 添加初识数据
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (1,'吃饭支出',247,'交通银行','2016-03-02','家庭聚餐');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (2,'工资收入',12345,'现金','2016-03-15','开工资了');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (3,'服装支出',1998,'现金','2016-04-02','买衣服');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (4,'吃饭支出',325,'现金','2016-06-18','朋友聚餐');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (5,'股票收入',8000,'工商银行','2016-10-28','股票大涨');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (6,'股票收入',5000,'工商银行','2016-10-28','股票又大涨');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (7,'工资收入',5000,'交通银行','2016-10-28','又开工资了');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (8,'礼金支出',5000,'现金','2016-10-28','朋友结婚');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (9,'其他支出',1560,'现金','2016-10-29','丢钱了');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (10,'交通支出',2300,'交通银行','2016-10-29','油价还在涨啊');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (11,'吃饭支出',1000,'工商银行','2016-10-29','又吃饭');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (12,'工资收入',1000,'现金','2016-10-30','开资');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (13,'交通支出',2000,'现金','2016-10-30','机票好贵');
INSERT  INTO jzb_zhangwu(jid,jname,jmoney,jzhanghu,jcreatetime,jdescription) VALUES (14,'工资收入',5000,'现金','2016-10-30','又开资');

4)项目分层(分包)

这里写图片描述

  • view:视图层->软件的界面
  • controller:控制层->获取界面数据,为界面设置数据,将功能交给业务层。
  • service:业务层->实现具体功能,与控制层和数据访问层交互。
  • dao:数据访问层->操作数据库
  • db:数据库->MySQL等
  • domain:实体包->存放JavaBean
  • tools:工具包->存放项目中使用到的工具类。
  • test:测试包->存放项目功能测试的代码。

5)项目目录结构
这里写图片描述

3 功能模块

3.1 主程序与实体类
package com.jzb.app;

import com.jzb.view.MainView;

/*
 * 主方法类
 */
public class Mainapp {

	public static void main(String[] args) {

		new MainView().run();
	}

}

package com.jzb.domain;

/*
 * 财务类
 */
public class ZhangWu {

	private int jid;
	private String jname;
	private String jzhanghu;
	private double jmoney;
	private String jcreatetime;
	private String jdescription;

	public ZhangWu() {
		super();
	}

	public int getJid() {
		return jid;
	}

	public void setJid(int jid) {
		this.jid = jid;
	}

	public String getJname() {
		return jname;
	}

	public void setJname(String jname) {
		this.jname = jname;
	}

	public String getJzhanghu() {
		return jzhanghu;
	}

	public void setJzhanghu(String jzhanghu) {
		this.jzhanghu = jzhanghu;
	}

	public double getJmoney() {
		return jmoney;
	}

	public void setJmoney(double jmoney) {
		this.jmoney = jmoney;
	}

	public String getJcreatetime() {
		return jcreatetime;
	}

	public void setJcreatetime(String jcreatetime) {
		this.jcreatetime = jcreatetime;
	}

	public String getJdescription() {
		return jdescription;
	}

	public void setJdescription(String jdescription) {
		this.jdescription = jdescription;
	}

}

3.2 视图层
package com.jzb.view;

import java.io.PrintWriter;
import java.util.List;
import java.util.Scanner;

import com.jzb.domain.ZhangWu;
import com.jzb.service.ZhangWuService;

/*
 * 视图层
 */
public class MainView {

	// view 依赖 service
	private ZhangWuService zWuService = new ZhangWuService();

	public void run() {

		/*
		 * 1 打印菜单 2 获取用户输入 3 调用对应方法
		 */

		boolean flag = true;
		Scanner inScanner = new Scanner(System.in);
		while (flag) {
			System.out.println("--------------- 记账本 ---------------");
			System.out.println("1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统");
			System.out.println("请输入功能序号【1-5】:");

			int op = inScanner.nextInt();
			switch (op) {
			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("输入错误!");
			}
		}
	}

	private void deleteZhangWu() {

		/*
		 * 1 用户输入,封装到bean中 2 调用service中方法完成功能
		 */
		Scanner inScanner = new Scanner(System.in);
		System.out.println("请输入ID:");

		zWuService.deleteZhangWu(inScanner.nextInt());
		System.out.println("删除账务成功!");
	}

	private void editZhangWu() {

		/*
		 * 1 用户输入,封装到bean中 2 调用service中方法完成功能
		 */
		Scanner inScanner = new Scanner(System.in);
		ZhangWu zw = new ZhangWu();
		System.out.println("请输入ID:");
		zw.setJid(inScanner.nextInt());
		System.out.println("请输入新类别:");
		zw.setJname(inScanner.next());
		System.out.println("请输入新账户:");
		zw.setJzhanghu(inScanner.next());
		System.out.println("请输入新金额:");
		zw.setJmoney(inScanner.nextDouble());
		System.out.println("请输入新时间:");
		zw.setJcreatetime(inScanner.next());
		System.out.println("请输入新备注:");
		zw.setJdescription(inScanner.next());

		zWuService.editZhangWu(zw);
		System.out.println("编辑账务成功!");

	}

	private void addZhangWu() {

		/*
		 * 1 用户输入数据,封装进bean中 2 调用service的方法完成添加功能
		 */
		Scanner inScanner = new Scanner(System.in);
		ZhangWu zw = new ZhangWu();

		System.out.println("请输入类别:");
		zw.setJname(inScanner.next());
		System.out.println("请输入账户:");
		zw.setJzhanghu(inScanner.next());
		System.out.println("请输入金额:");
		zw.setJmoney(inScanner.nextDouble());
		System.out.println("请输入时间:");
		zw.setJcreatetime(inScanner.next());
		System.out.println("请输入备注:");
		zw.setJdescription(inScanner.next());

		zWuService.addZhangWu(zw);
		System.out.println("添加账务成功!");
	}

	public void selectZhangWu() {

		System.out.println("1.查询所有 2.按条件查询");
		Scanner inScanner = new Scanner(System.in);
		int op = inScanner.nextInt();
		switch (op) {
		case 1:
			selectAll();
			break;
		case 2:
			select();
			break;
		default:
			System.out.println("输入错误!");
		}
	}

	private void select() {

		/*
		 * 1 用户输入查询的日期范围 2 调用service的select()方法完成查询功能
		 */

		Scanner inScanner = new Scanner(System.in);
		System.out.println("请输入查询起始时间:");
		String start = inScanner.next();
		System.out.println("请输入查询结束时间:");
		String end = inScanner.next();

		List<ZhangWu> zwList = zWuService.select(start, end);
		print(zwList);
	}

	private void selectAll() {

		List<ZhangWu> zwList = zWuService.selectAll();
		print(zwList);
	}

	private void print(List<ZhangWu> zwList) {

		System.out.println("ID\t类别\t\t账户\t\t金额\t\t时间\t\t备注");
		for (ZhangWu zWu : zwList) {
			System.out.println(zWu.getJid() + "\t" + zWu.getJname() + "\t" + zWu.getJzhanghu() + "\t" + zWu.getJmoney()
					+ "\t" + zWu.getJcreatetime() + "\t" + zWu.getJdescription());
		}
	}

}

3.3 业务层
package com.jzb.service;

import java.util.List;

import com.jzb.dao.ZhangWuDao;
import com.jzb.domain.ZhangWu;

/*
 * 业务层
 */
public class ZhangWuService {
	
	// service 依赖 dao
	private ZhangWuDao zWuDao=new ZhangWuDao();

	public List<ZhangWu> selectAll() {
		return zWuDao.selectAll();
	}

	public List<ZhangWu> select(String start, String end) {

		return zWuDao.select(start,end);
	}

	public void addZhangWu(ZhangWu zw) {

		zWuDao.addZhangWu(zw);
	}

	public void editZhangWu(ZhangWu zw) {

		zWuDao.editZhangWu(zw);
	}

	public void deleteZhangWu(int nextInt) {

		zWuDao.deleteZhangWu(nextInt);
	}
}

3.4 工具类
package com.jzb.tools;

import org.apache.commons.dbcp2.BasicDataSource;

public class JDBCUtils {

	public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
	public static final String URL = "jdbc:mysql://localhost:3306/my_db";
	public static final String USER = "root";
	public static final String PASSWORD = "rootroot";

	// 1 创建连接池 BasicDataSource
	public static BasicDataSource dataSource=new BasicDataSource();
	// 2 静态代码块
	static {
		// 对连接池对象进行进本的配置
		dataSource.setDriverClassName(DRIVERNAME);
		dataSource.setUrl(URL);
		dataSource.setUsername(USER);
		dataSource.setPassword(PASSWORD);
	}
	// 3 返回连接池对象
	public static javax.sql.DataSource getDataSource() {
		return dataSource;
	}
}
	

3.5 数据操作层
package com.jzb.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.jzb.domain.ZhangWu;
import com.jzb.tools.JDBCUtils;

/*
 * 数据访问
 */
public class ZhangWuDao {

	// 获取数据库连接池,得到操作表数据的对象
	QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());

	/*
	 * 查询所有账务
	 */
	public List<ZhangWu> selectAll() {
		String sql = "select * from jzb_zhangwu";
		try {
			return queryRunner.query(sql, new BeanListHandler<ZhangWu>(ZhangWu.class));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public List<ZhangWu> select(String start, String end) {

		String sql = "select * from jzb_zhangwu where jcreatetime between ? and ?";
		Object[] params = { start, end };
		try {
			return queryRunner.query(sql, new BeanListHandler<ZhangWu>(ZhangWu.class),params);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public void addZhangWu(ZhangWu zw) {

		String sql = "insert into jzb_zhangwu(jname,jmoney,jzhanghu,jcreatetime,jdescription) values(?,?,?,?,?)";
		Object[] params = { zw.getJname(), zw.getJmoney(), zw.getJzhanghu(), zw.getJcreatetime(),
				zw.getJdescription() };
		try {
			queryRunner.update(sql, params);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void editZhangWu(ZhangWu zw) {

		String sql = "update jzb_zhangwu set jname=?,jmoney=?,jzhanghu=?,jcreatetime=?,jdescription=? where jid=?";
		Object[] params = { zw.getJname(), zw.getJmoney(), zw.getJzhanghu(), zw.getJcreatetime(), zw.getJdescription(),
				zw.getJid() };
		try {
			queryRunner.update(sql, params);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void deleteZhangWu(int nextInt) {

		String sql="delete from jzb_zhangwu where jid=?";
		try {
			queryRunner.update(sql, nextInt);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  • 17
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
当然可以!以下是一个简单的示例代码,用于生成一个记账软件的前端界面,使用了HTML、CSS和JavaScript: ```html <!DOCTYPE html> <html> <head> <title>记账软件</title> <style> body { font-family: Arial, sans-serif; } h1 { text-align: center; } .form-group { margin-bottom: 10px; } .form-group label { display: block; font-weight: bold; } </style> </head> <body> <h1>记账软件</h1> <div id="app"> <div class="form-group"> <label for="date">日期:</label> <input type="text" id="date"> </div> <div class="form-group"> <label for="category">类别:</label> <input type="text" id="category"> </div> <div class="form-group"> <label for="amount">金额:</label> <input type="text" id="amount"> </div> <button onclick="addExpense()">添加支出</button> <table id="expenseTable"> <thead> <tr> <th>日期</th> <th>类别</th> <th>金额</th> </tr> </thead> <tbody id="expenseBody"> </tbody> </table> </div> <script> function addExpense() { var date = document.getElementById('date').value; var category = document.getElementById('category').value; var amount = document.getElementById('amount').value; var expenseTable = document.getElementById('expenseTable'); var expenseBody = document.getElementById('expenseBody'); var newRow = expenseBody.insertRow(); newRow.innerHTML = `<td>${date}</td><td>${category}</td><td>${amount}</td>`; document.getElementById('date').value = ''; document.getElementById('category').value = ''; document.getElementById('amount').value = ''; } </script> </body> </html> ``` 这段代码创建了一个基本的记账软件前端界面。它包含了输入表单和一个用于显示支出记录的表格。每当点击"添加支出"按钮时,会将输入的日期、类别和金额添加到表格中,并清空输入框。你可以根据自己的需求对界面进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值