记账本这个程序,如过想要做出来其实用不了七天,主要是自己做完后要学会发现程序的不足,并进行修改,去解决一些自己不熟悉的问题,而且学会一些新的东西不断对程序进行优化,这几天开发的记账本就修改到这,以下是源码。
mainapp
package cn.cyxd.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.cyxd.gjp.domain.Users; import cn.cyxd.gjp.tools.JDBCUtils; /* * 实现对数据表gjp_users数据增、删、改、查操作。 * dbutils工具类完成,类成员创建QueryRunner对象,指定数据源 */ public class UsersDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); /* * 定义方法:实现删除用户 * 业务层调用,传递主键id值 */ public void deleteUsers(int uid) { try { //拼写删除数据SQl语句 String sql = "DELETE FROM gjp_users WHERE uid=?"; qr.update(sql, uid); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("删除用户失败"); } } /* * 定义方法:实现编辑用户功能 * 由业务层调用,传递Users对象 * 将对象中的数据,更新到数据表中 */ public void editUsers(Users user) { try{ //拼写编辑账务的SQL语句 String sql = "UPDATE gjp_users SET uname=?,upassword=? WHERE uid=?"; //定义对象数组,将所有的参数传递给对象数组 Object[] params = {user.getUname(),user.getUpassword(),user.getUid()}; qr.update(sql, params); }catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("很遗憾!用户编辑失败"); } } /* * 定义方法:实现添加用户 * 由业务层调用,传递Users对象 * 将Users对象中的数据,添加到数据表 */ public void addUsers(Users user){ try{ //拼写添加数据的SQL语句 String sql = "INSERT INTO gjp_users(uname,upassword) VALUES (?,?)"; //创建对象数据,存储2个占位符的实际参数 //实际参数来源是:传递过来的对象Users Object[] params = {user.getUname(),user.getUpassword()}; //调用qr对象中的方法updata执行添加 qr.update(sql,params); }catch(SQLException ex){ System.out.println(ex); throw new RuntimeException("用户添加失败"); } } /* * 定义方法:查询数据库,带有条件去查询账务表 * 由业务层调用,查询结果集存储到Bean对象,存储到List集合 * 调用者传递2个日期字符串 */ public List<Users> select(String uname,String upassword){ try{ //拼写条件查询的SQL语句 String sql = "SELECT *FROM gjp_users WHERE uname = ? AND upassword = ?"; //定义对象数组,存储?占位符 Object[] params = {uname,upassword}; //调用qr对象的方法query查询数据表,获取结果集 return qr.query(sql, new BeanListHandler<>(Users.class),params); }catch(SQLException ex){ System.out.println(ex); throw new RuntimeException("无法识别用户"); } } /* * 定义方法:查询用户信息 * 由业务层调用 * 结果集,将所有的账务数据,存储到Bean对象,存储到集合中 */ public List<Users> selectAll(){ try{ //查询用户数据的SQL语句 String sql = "SELECT * FROM gjp_users"; //调用qr对象的方法,query方法,结果集BeanListHandler return qr.query(sql,new BeanListHandler<>(Users.class) ); }catch(SQLException e){ System.out.println(e); throw new RuntimeException("查询所有用户失败"); } } }
usersController
package cn.cyxd.gjp.controller; import java.util.List; import cn.cyxd.gjp.domain.Users; import cn.cyxd.gjp.service.UsersService; /* * 控制器层 * 接收视图层的数据,数据传递给service层 * 成员位置,创建service对象 */ public class UsersController { private UsersService uservice = new UsersService(); /* * 定义方法:删除管理员的功能 * 视图层调用,传递int类型的主键 * 调用serivtce层方法,传递int主键 */ public void deleteUsers(int uid){ uservice.deleteUsers(uid); } /* * 定义方法:实现编辑管理员的功能 * 由视图层调用,传递Users对象参数 * 调用service层的方法,传递Users对象 */ public void editUsers(Users user){ uservice.editUsers(user); } /* * 定义方法,实现管理员添加功能 * 由视图层调用,传递参数(传递的是1个Users类型的对象) * 方法调用service层的方法,传递Users对象,获取到添加后的结果集(添加成功的行数,int) */ public void addUsers(Users user){ uservice.addUsers(user); } /* * 定义方法,实现判断用户是否存在 * 方法由视图层调用,传递两个日期的字符串 * 调用service层, */ public List<Users> select(String uname,String upassword){ return uservice.select(uname, upassword); } /* * 控制层类定义方法,查询所有的管理员数据 * 方法由视图层调用,方法调用service层 */ public List<Users> selectAll(){ return uservice.selectAll(); } }
ZhangWuController
package cn.cyxd.gjp.controller; import java.util.List; import cn.cyxd.gjp.domain.ZhangWu; import cn.cyxd.gjp.service.ZhangWuService; /* * 控制器层 * 接收视图层的数据,数据传递给service层 * 成员位置,创建service对象 */ public class ZhangWuController { private ZhangWuService service = new ZhangWuService(); /* * 定义方法:删除账务功能 * 视图层调用,传递int类型的主键 * 调用serivtce层方法,传递int主键 */ public void deleteZhangWu(int zwid){ service.deleteZhangWu(zwid); } /* * 定义方法:实现编辑账务功能 * 由视图层调用,传递ZhangWu对象参数 * 调用service层的方法,传递ZhangWu对象 */ public void editZhangWu(ZhangWu zw){ service.editZhangWu(zw); } /* * 定义方法,实现账务添加功能 * 由视图层调用,传递参数(传递的是1个ZhangWu类型的对象) * 方法调用service层的方法,传递ZhangWu对象,获取到添加后的结果集(添加成功的行数,int) */ public void addZhangWu(ZhangWu zw){ service.addZhangWu(zw); } /* * 定义方法,实现条件查询账务 * 方法由视图层调用,传递两个日期的字符串 * 调用service层, */ public List<ZhangWu> select(String startDate,String endDate){ return service.select(startDate, endDate); } /* * 控制层类定义方法,查询所有的账务数据 * 方法由视图层调用,方法调用service层 */ public List<ZhangWu> selectAll(){ return service.selectAll(); } }
UserDao
package cn.cyxd.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.cyxd.gjp.domain.Users; import cn.cyxd.gjp.tools.JDBCUtils; /* * 实现对数据表gjp_users数据增、删、改、查操作。 * dbutils工具类完成,类成员创建QueryRunner对象,指定数据源 */ public class UsersDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); /* * 定义方法:实现删除用户 * 业务层调用,传递主键id值 */ public void deleteUsers(int uid) { try { //拼写删除数据SQl语句 String sql = "DELETE FROM gjp_users WHERE uid=?"; qr.update(sql, uid); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("删除用户失败"); } } /* * 定义方法:实现编辑用户功能 * 由业务层调用,传递Users对象 * 将对象中的数据,更新到数据表中 */ public void editUsers(Users user) { try{ //拼写编辑账务的SQL语句 String sql = "UPDATE gjp_users SET uname=?,upassword=? WHERE uid=?"; //定义对象数组,将所有的参数传递给对象数组 Object[] params = {user.getUname(),user.getUpassword(),user.getUid()}; qr.update(sql, params); }catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("很遗憾!用户编辑失败"); } } /* * 定义方法:实现添加用户 * 由业务层调用,传递Users对象 * 将Users对象中的数据,添加到数据表 */ public void addUsers(Users user){ try{ //拼写添加数据的SQL语句 String sql = "INSERT INTO gjp_users(uname,upassword) VALUES (?,?)"; //创建对象数据,存储2个占位符的实际参数 //实际参数来源是:传递过来的对象Users Object[] params = {user.getUname(),user.getUpassword()}; //调用qr对象中的方法updata执行添加 qr.update(sql,params); }catch(SQLException ex){ System.out.println(ex); throw new RuntimeException("用户添加失败"); } } /* * 定义方法:查询数据库,带有条件去查询账务表 * 由业务层调用,查询结果集存储到Bean对象,存储到List集合 * 调用者传递2个日期字符串 */ public List<Users> select(String uname,String upassword){ try{ //拼写条件查询的SQL语句 String sql = "SELECT *FROM gjp_users WHERE uname = ? AND upassword = ?"; //定义对象数组,存储?占位符 Object[] params = {uname,upassword}; //调用qr对象的方法query查询数据表,获取结果集 return qr.query(sql, new BeanListHandler<>(Users.class),params); }catch(SQLException ex){ System.out.println(ex); throw new RuntimeException("无法识别用户"); } } /* * 定义方法:查询用户信息 * 由业务层调用 * 结果集,将所有的账务数据,存储到Bean对象,存储到集合中 */ public List<Users> selectAll(){ try{ //查询用户数据的SQL语句 String sql = "SELECT * FROM gjp_users"; //调用qr对象的方法,query方法,结果集BeanListHandler return qr.query(sql,new BeanListHandler<>(Users.class) ); }catch(SQLException e){ System.out.println(e); throw new RuntimeException("查询所有用户失败"); } } }
ZhangwuDao
package cn.cyxd.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.cyxd.gjp.domain.ZhangWu; import cn.cyxd.gjp.tools.JDBCUtils; /* * 实现对数据表gjp_zhangwu数据增、删、改、查操作。 * dbutils工具类完成,类成员创建QueryRunner对象,指定数据源 */ public class ZhangWuDao { private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); /* * 定义方法:实现删除账务 * 业务层调用,传递主键id值 */ public void deleteZhangWu(int zwid) { try{ //拼写删除数据SQl语句 String sql = "DELETE FROM gjp_zhangwu WHERE zwid=?"; qr.update(sql, zwid); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("删除账务失败"); } } /* * 定义方法:实现编辑账务功能 * 由业务层调用,传递ZhangWu对象 * 将对象中的数据,更新到数据表中 */ public void editZhangWu(ZhangWu zw) { try{ //拼写编辑账务的SQL语句 String sql = "UPDATE gjp_zhangwu SET flname=?,money=?,zhanghu=?,createtime=?,description=? WHERE zwid=?"; //定义对象数组,将所有的参数传递给对象数组 Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()}; qr.update(sql, params); }catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("很遗憾!账务编辑失败"); } } /* * 定义方法:实现添加账务功能 * 由业务层调用,传递ZhangWu对象 * 将ZhangWu对象中的数据,添加到数据表 */ public void addZhangWu(ZhangWu zw){ try{ //拼写添加数据的SQL语句 String sql = "INSERT INTO gjp_zhangwu(flname,money,zhangHu,createtime,description) VALUES (?,?,?,?,?)"; //创建对象数据,存储5个占位符的实际参数 //实际参数来源是:传递过来的对象ZhangWu Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhanghu(),zw.getCreatetime(),zw.getDescription()}; //调用qr对象中的方法updata执行添加 qr.update(sql,params); }catch(SQLException ex){ System.out.println(ex); throw new RuntimeException("账务添加失败"); } } /* * 定义方法:查询数据库,带有条件去查询账务表 * 由业务层调用,查询结果集存储到Bean对象,存储到List集合 * 调用者传递2个日期字符串 */ 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){ System.out.println(ex); throw new RuntimeException("条件查询失败"); } } /* * 定义方法:查询数据库,获取所有的账务数据 * 由业务层调用 * 结果集,将所有的账务数据,存储到Bean对象,存储到集合中 */ public List<ZhangWu> selectAll(){ try{ //查询账务数据的SQL语句 String sql = "SELECT * FROM gjp_zhangwu"; //调用qr对象的方法,query方法,结果集BeanListHandler return qr.query(sql,new BeanListHandler<>(ZhangWu.class) ); }catch(SQLException e){ System.out.println(e); throw new RuntimeException("查询所有账务失败"); } } }
Users
package cn.cyxd.gjp.domain; public class Users { private int uid; private String uname; private String upassword; public Users(int uid, String uname, String upassword) { super(); this.uid = uid; this.uname = uname; this.upassword = upassword; } public Users(){ } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpassword() { return upassword; } public void setUpassword(String upassword) { this.upassword = upassword; } @Override public String toString() { return "Users [uid=" + uid + ", uname=" + uname + ", upassword=" + upassword + "]"; } }
ZhangWu
package cn.cyxd.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(int zwid, String flname, double money, String zhanghu, String createtime, String description) { super(); this.zwid = zwid; this.flname = flname; this.money = money; this.zhanghu = zhanghu; this.createtime = createtime; this.description = description; } public ZhangWu(){ } 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 + "]"; } }
UsersService
package cn.cyxd.gjp.service; import java.util.List; import cn.cyxd.gjp.dao.UsersDao; import cn.cyxd.gjp.domain.Users; /* * 业务层类: * 接收上一层,控制层controller的数据 * 经过计算,传递给dao层,操作数据库 * 调用dao层中的类,类成员位置,创建Dao类的对象 */ public class UsersService { private UsersDao udao = new UsersDao(); /* * 定义方法:删除管理员功能 * 由控制层调用,传递主键int * 调用dao层方法,传递主键int */ public void deleteUsers(int uid) { udao.deleteUsers(uid); } /* * 定义方法:实现编辑管理员信息 * 由控制层调用,传递Users对象 * 调用dao层的方法,传递Users对象 */ public void editUsers(Users user) { udao.editUsers(user); } /* * 定义方法,实现添加管理员 * 是由控制层调用,传递Users类型对象 * 调用dao层方法,传递Users对象 */ public void addUsers(Users user){ udao.addUsers(user); } /* * 定义方法:实现判断管理员是否存在 * 方法由控制层调用,传递用户名和密码字符串 * 调用dao层的方法,传递用户名和密码字符串 * 获取到查询结果集 */ public List<Users> select(String startDate,String endDate){ return udao.select(startDate, endDate); } /* * 定义方法:查询所有的管理员数据 * 此方法由控制层调用,去调用dao层的方法 */ public List<Users> selectAll(){ return udao.selectAll(); } }
ZhangWuService
package cn.cyxd.gjp.service; import java.util.List; import cn.cyxd.gjp.dao.ZhangWuDao; import cn.cyxd.gjp.domain.ZhangWu; /* * 业务层类: * 接收上一层,控制层controller的数据 * 经过计算,传递给dao层,操作数据库 * 调用dao层中的类,类成员位置,创建Dao类的对象 */ public class ZhangWuService { private ZhangWuDao dao = new ZhangWuDao(); /* * 定义方法:删除账务功能 * 由控制层调用,传递主键int * 调用dao层方法,传递主键int */ public void deleteZhangWu(int zwid) { dao.deleteZhangWu(zwid); } /* * 定义方法:实现编辑账务 * 由控制层调用,传递ZhangWu对象 * 调用dao层的方法,传递ZhangWu对象 */ public void editZhangWu(ZhangWu zw) { dao.editZhangWu(zw); } /* * 定义方法,实现添加账务 * 是由控制层调用,传递ZhangWu类型对象 * 调用dao层方法,传递ZhangWu对象 */ public void addZhangWu(ZhangWu zw){ dao.addZhangWu(zw); } /* * 定义方法:实现条件查询账务 * 方法由控制层调用,传递2个日期字符串 * 调用dao层的方法,传递2个日期字符串 * 获取到查询结果集 */ public List<ZhangWu> select(String startDate,String endDate){ return dao.select(startDate, endDate); } /* * 定义方法:查询所有的账务数据 * 此方法由控制层调用,去调用dao层的方法 */ public List<ZhangWu> selectAll(){ return dao.selectAll(); } }
JDBCUtils
package cn.cyxd.gjp.tools; /* * 获取数据库连接的工具类 * 实现连接池,dbcp连接池 */ import java.io.InputStream; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; public class JDBCUtils { //设置四个最基本的连接信息 private static String driverClass; private static String url; private static String username; private static String password; // 创建出BasicDataSource类对象 private static BasicDataSource dataSource = new BasicDataSource(); //静态代码块,对象BasicDataSource对象中的配置,自定义 static{ try { readConfig(); //数据库连接信息,必须的 dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); //对象链接池中的连接数量配置 dataSource.setInitialSize(10);//初始化的链接数 dataSource.setMaxActive(8);//最大链接数 dataSource.setMaxIdle(5);//最大空闲数 dataSource.setMinIdle(1);//最小空闲数 } catch (Exception e) { e.printStackTrace(); System.out.println("数据链接失败"); } } //读取配置文件 private static void readConfig() throws Exception{ InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("database.properties"); Properties pro = new Properties(); pro.load(in); driverClass = pro.getProperty("driverClass"); url = pro.getProperty("url"); username = pro.getProperty("username"); password = pro.getProperty("password"); } public static DataSource getDataSource(){ return dataSource; } }