花费长达两周的时间学习了连接池相关技术和数据库的知识,做了一个小型银行系统的小程序,此次开发不考虑并发的问题。本此项目采用mvc框架实现,如有问题请指正。实现的功能如下:
顾客功能:
- 登录
- 存款
- 取款
- 修改密码
- 退出
程序运行截图:
用户登录:
用户存款:
用户取款:
查询余额:
用户转账:
修改密码:
退出:
程序代码:
实体类:
package com.blb.bean;
public class User {
private int userId;//用户编号
private String userName;//用户名
private String userPwd;//用户密码
private float userBalance;//用户账户余额
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public float getUserBalance() {
return userBalance;
}
public void setUserBalance(float userBalance) {
this.userBalance = userBalance;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userPwd='" + userPwd + '\'' +
", userBalance=" + userBalance +
'}';
}
public User() {
}
public User(String userName) {
this.userName = userName;
}
public User(String userName, String userPwd) {
this.userName = userName;
this.userPwd = userPwd;
}
public User(int userId, String userName, String userPwd, float userBalance) {
this.userId = userId;
this.userName = userName;
this.userPwd = userPwd;
this.userBalance = userBalance;
}
}
model层:
package com.blb.model;
import com.blb.bean.User;
import com.blb.utils.DBUtils;
import com.blb.utils.DataManager;
public class BankModel {
//登录验证
public boolean loginCheck(User u){
String sql="select * from bank where userName=? and userPwd=?";
User user = DBUtils.queryOneToBean(sql, User.class, u.getUserName(), u.getUserPwd());
boolean b=user!=null;
if(b){
DataManager.getInstance().setData("userName",u.getUserName());
DataManager.getInstance().setData("userPwd",u.getUserPwd());
}
return b;
}
//查询余额
public float showBalance(User u){
//String userName = (String) DataManager.getInstance().getData("userName");
String sql="select userBalance from bank where userName=?";
User user = DBUtils.queryOneToBean(sql, User.class, u.getUserName());
return user.getUserBalance();
}
//存款
public int deposit(User u,float money){
float balance = showBalance(u);
String userName = (String) DataManager.getInstance().getData("userName");
String sql="update bank set userBalance=? where userName=?";
int i = DBUtils.udpate(sql, balance + money, userName);
return i;
}
//取款
public int draw(User u,float money){
float balance = showBalance(u);
String userName = (String) DataManager.getInstance().getData("userName");
String sql="update bank set userBalance=? where userName=?";
int i = DBUtils.udpate(sql, balance - money, userName);
return i;
}
//修改密码
public int changePwd(String newPwd){
String userName = (String) DataManager.getInstance().getData("userName");
String sql="update bank set userPwd=? where userName=?";
int i = DBUtils.udpate(sql, newPwd, userName);
return i;
}
//验证转账用户是否存在
public boolean showAccountIsExist(User u){
String sql="select * from bank where userName=?";
User user = DBUtils.queryOneToBean(sql, User.class, u.getUserName());
boolean b=user!=null;
if(b){
DataManager.getInstance().setData("userName1",u.getUserName());
}
return b;
}
//开始转账
public int transferMoney(User u,float money,User u1){
float balance = showBalance(u);
float balance1 = showBalance(u1);//被转账的用户余额
String sql="update bank set userBalance=? where userName=?";
int i1 = DBUtils.udpate(sql, balance - money, u.getUserName());
String sql1="update bank set userBalance=? where userName=?";
int i2 = DBUtils.udpate(sql1, balance1 + money, u1.getUserName());
return i1+i2;
}
}
view层:
package com.blb.view;
import com.blb.bean.User;
import com.blb.utils.DataManager;
import java.util.Scanner;
public class BankView {
//显示主菜单
private Scanner sc=new Scanner(System.in);
public int showMenu(){
System.out.println("-----------银行系统-----------");
System.out.println("************1.管理员**************");
System.out.println("************2.顾客******************");
System.out.println("------------------------------");
System.out.println("请选择:");
int i = sc.nextInt();
return i;
}
//用户登录操作
public User login(){
System.out.println("请输入用户名:");
String userName = sc.next();
System.out.println("请输入用户密码");
String userPwd = sc.next();
User user = new User(userName, userPwd);
return user;
}
//进入顾客银行操作系统
public int init(){
System.out.println("\t\t\t银行系统\t\t\t");
System.out.println("*************************************************");
System.out.println("1.存款 2.取款 3.查询余额 4.转账 5.修改密码 6.退出");
System.out.println("**************************************************");
System.out.println("请选择:");
int i = sc.nextInt();
return i;
}
//存款
public float deposit(){
System.out.println("请输入存款金额:");
float money = sc.nextFloat();
return money;
}
//返回存款成功结果
public void showDepositInfo(int x){
if(x>0){
System.out.println("存款成功!");
}else {
System.out.println("存款失败..");
}
}
//查询余额
public void showBalanceInfo(float balance){
System.out.println("当前的余额为:"+balance);
}
//取款
public float drawMoneyInfo(){
System.out.println("请输入取款金额:");
float v = sc.nextFloat();
return v;
}
//判断账户能否取款,开始取款
public int drawMoney(float x,float y) {
//x表示用户取款的金额,y表示余额
int i=0;
if (x > 0) {
if (y >= x) {
System.out.println("开始取款...");
i=1;
} else {
System.out.println("账户余额不足,不能取款...");
i=0;
}
}else {
System.out.println("您的输入有误....");
i=0;
}
return i;
}
//返回取款成功与否结果
public void showDrawMoneyInfo(int i,float balance){
if(i>0){
System.out.println("取款成功,当前余额为"+balance);
}
}
//修改密码
public String changePassword(){
while (true){
System.out.println("请输入旧密码:");
String usedPwd = sc.next();
String userPwd = (String) DataManager.getInstance().getData("userPwd");
if(usedPwd.equals(userPwd)){
System.out.println("请输入新密码:");
String newPwd = sc.next();
return newPwd;
}else {
System.out.println("旧密码输入错误,请重新输入");
}
}
}
//返回修改密码成功与否结果
public void showChangePwdInfo(int i){
if(i>0){
System.out.println("修改密码成功!");
}
}
//转账
public User transferMoney(){
System.out.println("请输入转账账户:");
String name = sc.next();
User user = new User(name);
return user;
}
public void transfer(boolean b){
if(!b){
System.out.println("输入账户不存在,请重新输入");
transferMoney();
}
}
//开始转账
public float transferMoneyTo(){
System.out.println("请输入转账金额:");
float v = sc.nextFloat();
return v;
}
//判断能否转账
public void transferMoneyOrNot(float m,float money){
//转账用户余额m,转账金额money
if(money>0){
if(m<money){
System.out.println("账户余额不足");
showBalanceInfo(m);
}
}else {
System.out.println("您的输入有误....");
}
}
//返回是否转账成功
public void transferMoneySuccess(int i){
if(i>1){
System.out.println("转账成功!");
}
}
//退出系统
public int exit(){
System.out.println("1.返回顾客主菜单 2.退出系统");
int num = sc.nextInt();
return num;
}
}
controller层:
package com.blb.controller;
import com.blb.bean.User;
import com.blb.model.BankModel;
import com.blb.view.BankView;
public class BankController {
private static BankModel model=new BankModel();
private static BankView view=new BankView();
public static void main(String[] args) {
int e=1;
while (e!=0){
int i = view.showMenu();
if(i==1){
//管理员界面
}else if(i==2){
//顾客界面
User u = view.login();
boolean b = model.loginCheck(u);
if(b){
//返回顾客界面
while (e==1) {
int num = view.init();
switch (num) {
case 1:
//存款
float money = view.deposit();
int x = model.deposit(u, money);
view.showDepositInfo(x);
float balance1 = model.showBalance(u);
view.showBalanceInfo(balance1);
break;
case 2:
//取款
float v = view.drawMoneyInfo();//用户输入取款金额
float bc = model.showBalance(u);//用户余额
int i1 = view.drawMoney(v, bc);
if (i1 > 0) {
int i3 = model.draw(u, v);
float bl = model.showBalance(u);//用户取款后的余额
view.showDrawMoneyInfo(i3, bl);
}
break;
case 3:
//查询余额
float balance = model.showBalance(u);
view.showBalanceInfo(balance);
break;
case 4:
//转账
User u1 = view.transferMoney();//被转账用户
boolean b1 = model.showAccountIsExist(u1);
view.transfer(b1);
float m = view.transferMoneyTo();//转账金额
float bl2 = model.showBalance(u);//转账用户余额
view.transferMoneyOrNot(bl2, m);
int i4 = model.transferMoney(u, m, u1);
view.transferMoneySuccess(i4);
break;
case 5:
//修改密码
String s = view.changePassword();//新密码
int i2 = model.changePwd(s);
view.showChangePwdInfo(i2);
break;
case 6:
break;
//退出
}
e = view.exit();
}
}
}
if(e==2){
break;
}
}
}
}
使用到自己编写的工具类包:
- DataManager类用Hashmap临时存放数据的
package com.blb.utils;
import java.util.HashMap;
import java.util.Map;
public class DataManager {
/*
专门用来保存数据
*/
private static Map<String,Object> map = new HashMap();
private static DataManager dataManager ;
private DataManager(){
}
public static DataManager getInstance(){
if(dataManager==null){
dataManager = new DataManager();
}
return dataManager;
}
public void setData(String key, Object value){
map.put(key,value);
}
public Object getData(String key){
return map.get(key);
}
}
- Dbutil工具包:
package com.blb.utils;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.GenerousBeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class DBUtils {
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE = "ks" ;
private static final String USER = "root";
private static final String PWD = "root";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/"+DATABASE+"?useUnicode=true&characterEncoding=UTF-8";
private static QueryRunner runner ;
static{
DruidDataSource ds = new DruidDataSource();
ds.setUrl(URL);
ds.setUsername(USER);
ds.setPassword(PWD);
ds.setDriverClassName(DRIVER);
runner = new QueryRunner(ds);
}
public static int udpate(String sql ,Object... param ){
try {
return runner.update(sql, param);
} catch (SQLException e) {
e.printStackTrace();
}
return 0 ;
}
public static<T> T queryOneToBean(String sql, Class<T> clazz,Object... param ){
try {
BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
return runner.query(sql, new BeanHandler<T>(clazz,brp),param);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static Map<String,Object> queryOneToMap(String sql, Object... param ){
try {
return runner.query(sql,new MapHandler(),param);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static<T> List<T> queryAllList(String sql, Class<T> clazz,Object... param ){
try {
BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
return runner.query(sql, new BeanListHandler<T>(clazz,brp),param);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static List<Map<String,Object>> queryAllMap(String sql, Object... param ){
try {
return runner.query(sql,new MapListHandler(),param );
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
数据库字段:
用到的几个外部访问资源lib包:
commons-dbutils-1.7.jar和druid-1.1.0.jar