说明:里面的主要代码都加的有注释部分,所以代码显得很长,如果有错误的地方,谢谢指出。

注意需要导入数据库jar包

---------------------------------------------------------------------------------

1. com.ll.test包下面类

1.1 test类

package com.ll.test;

import com.ll.service.Bank;

public class TestBank {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new Bank().mainMenu();// 启动程序
    }
}

2. com.ll.service包下面的类

2.1 Bank类

package com.ll.service;

import java.util.List;
import java.util.Scanner;

import com.ll.po.Admin;
import com.ll.po.Customer;

public class Bank {

    //创建Scanner对象接收用户从键盘输入
    Scanner input = new Scanner(System.in);
    //创建AdminService对象,该对象定义了管理员的所有功能
    AdminService as = new AdminService();
    //创建CustomerService对象,该对象定义了顾客的所有功能
    CustomerService cs = new CustomerService();
    //声明成员变量顾客对象,顾客登录时保存顾客信息,然后在顾客其他功能中使用
    Customer cust1 = null;
    /*
     * 银行系统主菜单及主菜单流程控制方法
     */
    public void mainMenu() {
        System.out.println("------------------银行系统--------------------");
        System.out.println("******************1.管理员********************");
        System.out.println("******************2.顾客**********************");
        System.out.println("-----------------------------------------------");
        //用户输入不合法时控制循环输入,输入合法时操作结束退出循环。
        while (true) {
            System.out.print("请选择:");
            //接收用户输入的菜单操作id
            int menuId = input.nextInt();
            //判断1,2为合法输入
            if (menuId == 1 || menuId == 2) {
                System.out.print("请输入用户名:");
                //接收用户输入的用户名
                String user = input.next();
                System.out.print("请输入密码:");
                //接收用户输入的密码
                String pwd = input.next();
                //用户选择1.管理员时的操作
                if (menuId == 1) {
                    //创建一个管理员对象(在这个项目中其实没啥大的用处,但是如果再添加功能的就方便多了,例如,更新密码)
                    Admin admin = new Admin();
                    admin.setAdminName(user);
                    admin.setAdminPwd(pwd);
                    //调用AdminService的登录方法将管理员对象当做参数传入进行登录验证
                    boolean isLogin = as.adminLogin(admin);
                    //返回结果为true表明登录成功,进入管理员菜单。
                    if (isLogin) {
                        System.out.println("登录成功!");
                        adminMenu();// 调用管理员功能菜单项
                        //返回结果为false表明登录失败,重新回到主菜单。
                    } else {
                        System.out.println("登录失败!");
                        mainMenu();// 递归,主菜单
                    }
                }
                //用户选择2.顾客时的操作
                if (menuId == 2) {
                    // 新建一个客户对象,保存这个登录对象,
                    Customer cust = new Customer();
                    //把接收的用户名和密码设置到顾客对象中
                    cust.setCustName(user);
                    cust.setCustPwd(pwd);
                    //调用CustomerService的登录方法将顾客对象当做参数传入进行登录验证,
                    //并拿到该顾客所有信息,存放到事先声明的成员变量cust1中
                    cust1 = cs.custLogin(cust);
                    if (cust1 != null) {
                        System.out.println("登录成功!");
                        custMenu();// 跳转到客户功能菜单
                        //判断如果返回的对象为空,则表示登录失败,回到主菜单
                    } else {
                        System.out.println("登录失败!");
                        mainMenu();// 返回主菜单
                    }
                }
                //合法操作完成时退出循环
                break;
                //非法输入时,输出信息,然后重新让用户输入。
            } else {
                System.out.println("非法输入,请重新输入。");
                continue;// 跳转到主菜单
            }
        }
    }

    /*
     * 管理员主菜单及管理员菜单流程控制方法
     */
    public void adminMenu() {
        System.out.println("\t\t银行系统[管理员]                ");
        System.out.println("************************************************");
        System.out
                .println("1.添加顾客          2.计算储蓄总额           3.富豪排行榜            4.退出  ");
        System.out.println("************************************************");
        //管理员输入不合法时控制循环输入,输入合法时操作结束退出循环。
        while (true) {
            System.out.print("请选择:");
            //接收管理员输入的菜单操作id
            int menuId = input.nextInt();
            //判断1,2,3,4为合法输入
            if (menuId == 1 || menuId == 2 || menuId == 3 || menuId == 4) {
                //管理员选择1.添加顾客时的操作
                if (menuId == 1) {
                    System.out.print("请输入顾客银行卡号:");
                    //接收用户输入的顾客银行卡号
                    String custNumber = input.next();
                    System.out.print("请输入顾客姓名:");
                    //接收用户输入的顾客姓名
                    String custName = input.next();
                    System.out.print("请输入顾客身份证:");
                    //接收用户输入的顾客身份证
                    String custIdCard = input.next();
                    System.out.print("请输入顾客开户金额:");
                    //接收用户输入的顾客开户金额
                    double custMoney = input.nextDouble();
                    System.out.print("请输入初始密码:");
                    //接收用户输入的初始密码
                    String custPwd = input.next();
                    // 新建一个对象
                    Customer cust = new Customer();
                    //将接收到的输入值设定到顾客对象中
                    cust.setCustNumber(custNumber);
                    cust.setCustName(custName);
                    cust.setCustIdCard(custIdCard);
                    cust.setCustPwd(custPwd);
                    cust.setCustMoney(custMoney);
                    //开户日期取系统的当前日期来设置
                    // 注意时间类的使用
                    cust.setCustDate(new java.sql.Date(new java.util.Date()
                            .getTime()));
                    System.out.println(new java.sql.Date(new java.util.Date()
                            .getTime()));
                    //调用AdminService的添加顾客方法将顾客对象当做参数传入进行添加操作。
                    boolean isInsert = as.addCust(cust);
                    //判断如果返回为true说明添加成功,进入管理员子菜单
                    if (isInsert) {
                        System.out.println("添加成功!");
                        //进入管理员子菜单
                        subMenu();
                        //判断如果返回为false说明添加失败,回到管理员主菜单
                    } else {
                        System.out.println("添加失败!");
                        adminMenu();
                    }
                }
                //管理员选择2.计算储蓄总额时的操作
                if (menuId == 2) {
                    //调用AdminService的计算储蓄总额方法。
                    double sumMoney = as.calSumMoney();
                    //输出计算结果
                    System.out.println("当前存款总额为:" + sumMoney);
                    //进入管理员子菜单
                    subMenu();
                }
                //管理员选择2.富豪排行榜时的操作
                if (menuId == 3) {
                    //调用AdminService的富豪排行榜方法。
                    List<Customer> custList = as.rankMoney();
                    System.out.println("名次\t姓名\t\t\t身份证号\t\t\t金额");
                    //遍历结果List,输出信息
                    for (int i = 0; i < custList.size(); i++) {
                        Customer cust = custList.get(i);
                        System.out.println((i + 1) + "\t" + cust.getCustName()
                                + "\t\t\t" + cust.getCustIdCard() + "\t"
                                + cust.getCustMoney());
                    }
                    //进入管理员子菜单
                    subMenu();
                }
                //管理员选择4.退出时的操作
                if (menuId == 4) {
                    System.out.println("感谢使用,欢迎下次光临!");
                    System.exit(0);
                }
                //合法操作完成时退出循环
                break;
                //非法输入时,输出信息,然后重新让用户输入。
            } else {
                System.out.println("非法输入,请重新输入。");
                continue;
            }
        }
    }
    /*
     * 顾客主菜单及顾客主菜单流程控制方法
     */
    public void custMenu() {
        // 顾客登录成功显示界面
        System.out.println("\t\t银行系统[顾客]                ");
        System.out.println("************************************************");
        System.out
                .println("1.存款     2.取款      3.查询余额      4.转账     5.修改密码     6.退出  ");
        System.out.println("************************************************");
        //顾客输入不合法时控制循环输入,输入合法时操作结束退出循环。
        while (true) {
            System.out.print("请选择:");
            //接收顾客输入的菜单操作id
            int menuId = input.nextInt();
            //判断1,2,3,4,5,6为合法输入
            if (menuId == 1 || menuId == 2 || menuId == 3 || menuId == 4
                    || menuId == 5 || menuId == 6) {
                //顾客选择1.存款时的操作
                if (menuId == 1) {
                    System.out.print("请输入存款金额:");
                    //接收输入的存款金额
                    double money = input.nextDouble();
                     //设定当前登录顾客的账户金额为原账户金额+存款金额
                    cust1.setCustMoney(cust1.getCustMoney() + money);
                    //调用CustomerService的存取款方法将当前设定好的cust1作为参数传入进行存款操作。
                    boolean isUpdate = cs.addsubMoney(cust1);
                    //如果返回true表明存款成功,打印当前余额,进入顾客子菜单
                    if(isUpdate){
                        System.out.println("存款成功,当前余额:" + cust1.getCustMoney());
                        //进入顾客子菜单
                        subMenu();
                    //如果返回false表明存款失败,回到顾客主菜单
                    }else{
                        System.out.println("存款失败!");
                        //如果存款失败,因为cust1中的数据已经改变,所以重新从数据库获取最新的数据
                        cust1 = cs.selectCust(cust1);
                        //回到顾客主菜单
                        custMenu();
                    }
                }
                //顾客选择2.取款时的操作
                if(menuId == 2){
                    System.out.print("请输入取款金额:");
                    //接收输入的取款金额
                    double money = input.nextDouble();
                    //判断取款金额和当前余额的大小关系,若余额不足打印输出,进入顾客子菜单
                    if(money > cust1.getCustMoney()){
                        System.out.println("余额不足,当前余额:" + cust1.getCustMoney());
                        //进入顾客子菜单
                        subMenu();
                    //若余额充足,进行取款操作
                    }else{
                        //设定当前登录顾客的账户金额为原账户金额-取款金额
                        cust1.setCustMoney(cust1.getCustMoney() - money);
                        //调用CustomerService的存取款方法将当前设定好的cust1作为参数传入进行取款操作。
                        boolean isUpdate = cs.addsubMoney(cust1);
                        //如果返回true表明取款成功,打印当前余额,进入顾客子菜单
                        if(isUpdate){
                            System.out.println("取款成功,当前余额:" + cust1.getCustMoney());
                            //进入顾客子菜单
                            subMenu();
                        //如果返回false表明取款失败,回到顾客主菜单
                        }else{
                            System.out.println("取款失败!");
                            //如果取款失败,因为cust1中的数据已经改变,所以重新从数据库获取最新的数据
                            cust1 = cs.selectCust(cust1);
                            //回到顾客主菜单
                            custMenu();
                        }
                    }
                }
                //顾客选择3.查询余额时的操作
                if(menuId == 3){
                    //打印输出当前余额
                    System.out.println("当前余额:" + cust1.getCustMoney());
                    //进入顾客子菜单
                    subMenu();
                }
                //顾客选择4.转账时的操作
                if(menuId == 4){
                    //顾客输入不存在转入账户时控制循环输入,输入正常转入账户时操作结束退出循环。
                    while(true){
                        System.out.print("请输入转入账号:");
                        //接收顾客输入转入账户Id
                        String inNumber = input.next();
                        //新建一个顾客对象
                        Customer cust = new Customer();
                        //将输入的输入转入账户Id设定到新建的顾客对象中
                        cust.setCustNumber(inNumber);
                        //调用CustomerService的查询顾客方法将当前设定好的cust作为参数传入进行查询。
                        Customer cust2 = cs.selectCust(cust);
                        //如果返回的结果为null,表明输入的账号不存在,打印输出信息并继续输入
                        if(cust2 == null){
                            System.out.println("输入账号不存在,请重新输入。");
                            continue;
                        //如果返回的结果不为null,表明输入的账号存在,继续转账操作
                        }else{
                            System.out.print("请输入转入金额:");
                            //接收顾客输入转账金额
                            double transMoney = input.nextDouble();
                            //判断转账金额和当前余额的大小关系,若余额不足打印输出,进入顾客子菜单
                            if(transMoney > cust1.getCustMoney()){
                                System.out.println("账户余额不足,当前余额:" + cust1.getCustMoney());
                                //进入顾客子菜单
                                subMenu();
                            //若余额充足,进行转账操作
                            }else{
                                //调用CustomerService的转账方法,传入当前顾客对象,转入账户Id,转账金额进行转账操作。
                                boolean isTrans = cs.transMoney(cust1, inNumber, transMoney);
                                //如果返回为true,表明转账成功,重新获取当前顾客信息,进入顾客子菜单
                                if(isTrans){
                                    System.out.println("转账成功!");
                                    //重新获取当前顾客信息
                                    cust1 = cs.selectCust(cust1);
                                    //进入顾客子菜单
                                    subMenu();
                                //如果返回为false,表明转账失败,回到顾客主菜单
                                }else{
                                    System.out.println("转账失败!");
                                    //回到顾客主菜单
                                    custMenu();
                                }
                            }
                            //转账操作完成时退出循环
                            break;
                        }
                    }
                }
                //顾客选择5.修改密码时的操作
                if(menuId == 5){
                    //顾客输入错误密码时控制循环输入,输入正确密码时操作结束退出循环。
                    while(true){
                        System.out.print("请输入旧密码:");
                        //接收顾客输入旧密码
                        String oldPwd = input.next();
                        //判断顾客输入的旧密码与当前顾客的密码是否一致
                        //输入正确密码时
                        if(oldPwd.equals(cust1.getCustPwd())){
                            System.out.print("请输入新密码:");
                            //接收用户输入新密码
                            String newPwd = input.next();
                            //设定当前顾客的密码为新密码
                            cust1.setCustPwd(newPwd);
                            //调用CustomerService的修改密码方法,传入当前顾客对象进行修改密码操作。
                            boolean isUpdate = cs.updatePwd(cust1);
                            //如果返回为true,表明密码修改成功,回到登录主菜单重新登录
                            if(isUpdate){
                                System.out.println("密码修改成功!");
                                //回到登录主菜单
                                mainMenu();
                            //如果返回为false,表明密码修改失败,回到顾客主菜单
                            }else{
                                System.out.println("密码修改失败!");
                                //重新获取当前顾客信息
                                cust1 = cs.selectCust(cust1);
                                //回到顾客主菜单
                                custMenu();
                            }
                            break;
                        //输入错误密码时,打印输出信息,重新输入
                        }else{
                            System.out.println("旧密码错误,请重新输入。");
                            continue;
                        }
                    }
                }
                //顾客选择6.退出时的操作
                if(menuId == 6){
                    //输出信息,退出系统
                    System.out.println("感谢使用,欢迎下次光临!");
                    System.exit(0);
                }
                //合法操作完成时退出循环
                break;
            //非法输入时,输出信息,然后重新让用户输入。
            }else{
                System.out.println("非法输入,请重新输入。");
                continue;
            }
        }
    }
    /*
     * 顾客子菜单及顾客子菜单流程控制方法
     */
    public void subMenu(){
        System.out.println("1.返回登录主菜单\t2.返回顾客主菜单\t3.退出系统");
        //顾客输入不合法时控制循环输入,输入合法时操作结束退出循环。
        while(true){
            System.out.print("请选择:");
            //接收顾客输入的子菜单操作id
            int menuId = input.nextInt();
            //判断1,2,3为合法输入
            if(menuId == 1 || menuId == 2 || menuId == 3){
                //顾客选择1.返回登录主菜单时的操作
                if(menuId == 1){
                    //返回登录主菜单
                    mainMenu();
                }
                //顾客选择2.返回顾客主菜单时的操作
                if(menuId == 2){
                    //返回顾客主菜单
                    custMenu();
                }
                //顾客选择3.退出系统时的操作
                if(menuId == 3){
                    //输出信息,退出系统
                    System.out.println("感谢使用,欢迎下次光临!");
                    System.exit(0);
                }
                //合法操作完成时退出循环
                break;
            //非法输入时,输出信息,然后重新让用户输入。
            }else{
                System.out.println("非法输入,请重新输入。");
                continue;
            }
        }
    }
}

2.2 AdminService类

package com.ll.service;

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

import com.ll.dao.AdminDao;
import com.ll.dao.AdminDaoImpl;
import com.ll.dao.BaseDao;
import com.ll.po.Admin;
import com.ll.po.Customer;

//这个类进行处理从数据库操作的结果,然后返回到前台显示界面,起逻辑处理功能
public class AdminService extends BaseDao {

    AdminDao adao = new AdminDaoImpl();

    // 处理数据库登录查询的结果
    public boolean adminLogin(Admin admin) {
        ResultSet rs = adao.adminLogin(admin);
        int count = 0;
        try {
            while (rs.next()) {
                count = rs.getInt(1);
            }
            if (count > 0) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        } finally {
            close();// 关闭所有开启的连接
        }
    }

    // 处理添加顾客的数据库操作
    public boolean addCust(Customer cust) {
        int count = adao.addCust(cust);
        if (count > 0) {
            return true;
        } else {
            return false;
        }
    }

    // 处理数据库查询总额的结果
    public double calSumMoney() {
        ResultSet rs = adao.calSumMoney();
        double sumMoney = 0.0;
        try {
            while (rs.next()) {
                sumMoney = rs.getDouble(1);// 获得总金额
            }
            return sumMoney;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return sumMoney;
        } finally {
            close();
        }
    }

    // 处理数据库查询以金额排序的操作
    public List<Customer> rankMoney() {
        ResultSet rs = adao.rankMoney();
        List<Customer> custList = new ArrayList<Customer>();
        try {
            while (rs.next()) {
                // 每次都是new的对象,都是新对象,加入到集合中
                Customer cust = new Customer();
                cust.setCustNumber(rs.getString("custnumber"));
                cust.setCustName(rs.getString("custname"));
                cust.setCustPwd(rs.getString("custpwd"));
                cust.setCustIdCard(rs.getString("custidcard"));
                cust.setCustMoney(rs.getDouble("custmoney"));
                cust.setCustDate(rs.getDate("custdate"));
                custList.add(cust);// 添加到集合
            }
            return custList;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        } finally {
            close();
        }
    }
}

2.3 CustomerService类

package com.ll.service;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.ll.dao.BaseDao;
import com.ll.dao.CustomerDao;
import com.ll.dao.CustomerDaoImpl;
import com.ll.po.Customer;

//此类处理数据库操作结果,返回到客户前台显示
public class CustomerService extends BaseDao {

    CustomerDao cdao = new CustomerDaoImpl();

    // 处理顾客登录的数据库操作结果
    public Customer custLogin(Customer cust) {
        ResultSet rs = cdao.custLogin(cust);
        Customer cust1 = null;
        try {
            while (rs.next()) {
                // 把登录的客户所有信息保存在一个对象中
                cust1 = new Customer();
                cust1.setCustNumber(rs.getString("custnumber"));
                cust1.setCustName(rs.getString("custname"));
                cust1.setCustPwd(rs.getString("custpwd"));
                cust1.setCustIdCard(rs.getString("custidcard"));
                cust1.setCustMoney(rs.getDouble("custmoney"));
                cust1.setCustDate(rs.getDate("custdate"));
            }
            return cust1;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        } finally {
            close();// 关闭所有连接
        }
    }

    // 处理顾客存款的数据库操作结果
    public boolean addsubMoney(Customer cust) {
        int count = cdao.addsubMoney(cust);
        if (count > 0) {
            return true;
        } else {
            return false;
        }
    }

    // 处理查询用户的所有的数据的数据库操作结果
    public Customer selectCust(Customer cust) {
        ResultSet rs = cdao.selectCust(cust);
        Customer cust1 = null;
        try {
            while (rs.next()) {
                // 把查询到的最新数据重新保存在新的对象中
                cust1 = new Customer();
                cust1.setCustNumber(rs.getString("custnumber"));
                cust1.setCustName(rs.getString("custname"));
                cust1.setCustPwd(rs.getString("custpwd"));
                cust1.setCustIdCard(rs.getString("custidcard"));
                cust1.setCustMoney(rs.getDouble("custmoney"));
                cust1.setCustDate(rs.getDate("custdate"));
            }
            return cust1;// 把新对象返回
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        } finally {
            close();
        }
    }

    // 处理转账的数据库操作结果
    public boolean transMoney(Customer cust, String inNumber, double money) {
        boolean isTrans = cdao.transMoney(cust, inNumber, money);
        return isTrans;
    }

    // 处理更新密码的数据库操作结果
    public boolean updatePwd(Customer cust) {
        int count = cdao.updatePwd(cust);
        if (count > 0) {
            return true;
        } else {
            return false;
        }
    }
}

3. com.ll.po包下面的类

3.1 Admin类

package com.ll.po;

//Admin类是数据库表administrator的映射类,用来存储administrator表的数据
public class Admin {

    private String adminId;
    private String adminPwd;
    private String adminName;

    public String getAdminId() {
        return adminId;
    }

    public void setAdminId(String adminId) {
        this.adminId = adminId;
    }

    public String getAdminPwd() {
        return adminPwd;
    }

    public void setAdminPwd(String adminPwd) {
        this.adminPwd = adminPwd;
    }

    public String getAdminName() {
        return adminName;
    }

    public void setAdminName(String adminName) {
        this.adminName = adminName;
    }
}

3.2 Customer类

package com.ll.po;

import java.sql.Date;

//Customer类是数据库表customer的映射类,用来存储customer表的数据
public class Customer {

    private String custNumber;
    private String custName;
    private String custPwd;
    private String custIdCard;
    private double custMoney;
    private Date custDate;

    public String getCustNumber() {
        return custNumber;
    }

    public void setCustNumber(String custNumber) {
        this.custNumber = custNumber;
    }

    public String getCustName() {
        return custName;
    }

    public void setCustName(String custName) {
        this.custName = custName;
    }

    public String getCustPwd() {
        return custPwd;
    }

    public void setCustPwd(String custPwd) {
        this.custPwd = custPwd;
    }

    public String getCustIdCard() {
        return custIdCard;
    }

    public void setCustIdCard(String custIdCard) {
        this.custIdCard = custIdCard;
    }

    public double getCustMoney() {
        return custMoney;
    }

    public void setCustMoney(double custMoney) {
        this.custMoney = custMoney;
    }

    public Date getCustDate() {
        return custDate;
    }

    public void setCustDate(Date custDate) {
        this.custDate = custDate;
    }
}

4. com.ll.dao包下面的类

4.1 db.properties数据库配置信息文档

DRIVER_CLASS=oracle.jdbc.driver.OracleDriver
DB_URL=jdbc:oracle:thin:@
DB_IP=localhost
DB_PORT=:1521
DB_SID=:BANK
USER=system
PASS=123456

#下面是Mysql的
#DRIVER_CLASS=com.mysql.jdbc.Driver
#DB_URL=jdbc:mysql://
#DB_IP=localhost
#DB_PORT=:3306
#DB_SID=/BANK
#USER=root
#PASS=123456

4.2 Config类

package com.ll.dao;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class Config {

    private static Properties pros = new Properties();

    static {
        try {
            //加载配置文件内容到Properties对象中
            pros.load(Config.class.getResourceAsStream("db.properties"));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static final String DRIVER_CLASS = (String) pros.get("DRIVER_CLASS");
    public static final String DB_URL = (String) pros.get("DB_URL");
    public static final String DB_IP = (String) pros.get("DB_IP");
    public static final String DB_PORT = (String) pros.get("DB_PORT");
    public static final String DB_SID = (String) pros.get("DB_SID");
    public static final String USER = (String) pros.get("USER");
    public static final String PASS = (String) pros.get("PASS");

}

4.3 BaseDao类

package com.ll.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class BaseDao {
    private Connection con = null;
    private PreparedStatement psm = null;
    private Statement sm = null;
    private ResultSet rs = null;

    // 进行数据库连接
    private void getConn() {
        try {
            // 1.加载驱动
            Class.forName(Config.DRIVER_CLASS);
            // 2.获取连接
            String url = Config.DB_URL + Config.DB_IP + Config.DB_PORT
                    + Config.DB_SID;
            String user = Config.USER;
            String pass = Config.PASS;
            con = DriverManager.getConnection(url, user, pass);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    // 查询操作
    public ResultSet select(String sql, Object[] objs) {
        // 获得数据库的连接
        getConn();
        try {
            psm = con.prepareStatement(sql);
            if (objs != null) {
                for (int i = 0; i < objs.length; i++) {
                    psm.setObject(i + 1, objs[i]);
                }
            }
            rs = psm.executeQuery();
            return rs;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    // 更新操作
    public int update(String sql, Object[] objs) {
        // 获得数据库连接
        getConn();
        try {
            psm = con.prepareStatement(sql);
            if (objs != null) {
                for (int i = 0; i < objs.length; i++) {
                    psm.setObject(i + 1, objs[i]);
                }
            }
            int count = psm.executeUpdate();
            return count;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return -1;
        }
    }

    // 事务管理
    public boolean batch(String[] sql) {
        getConn();
        try {
            con.setAutoCommit(false);
            sm = con.createStatement();
            if (sql != null) {
                for (int i = 0; i < sql.length; i++) {
                    sm.addBatch(sql[i]);
                }
            }
            int[] count = sm.executeBatch();
            boolean flg = true;
            for (int i : count) {
                if (i <= 0) {
                    flg = false;
                    break;
                }
            }
            if (flg) {
                con.commit();// 提交事物
            } else {
                con.rollback();// 进行回滚
            }
            return flg;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
    }

    // 关闭所有的连接
    public void close() {
        try {
            if (rs != null) {
                rs.close();
            }
            if (psm != null) {
                psm.close();
            }
            if (sm != null) {
                sm.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

4.4  AdminDao接口

package com.ll.dao;

import java.sql.ResultSet;

import com.ll.po.Admin;
import com.ll.po.Customer;

public interface AdminDao {
    // 返回的类型有操作数据库的返回的类型决定
    // 管理员登陆
    public ResultSet adminLogin(Admin admin);

    // 添加顾客(开户)
    public int addCust(Customer cust);

    // 计算储蓄总额
    public ResultSet calSumMoney();

    // 富豪排行榜
    public ResultSet rankMoney();
}

4.5 CustomerDao接口

package com.ll.dao;

import java.sql.ResultSet;

import com.ll.po.Customer;

public interface CustomerDao {

    // 顾客登陆
    public ResultSet custLogin(Customer cust);

    // 存款、取款
    public int addsubMoney(Customer cust);

    // 查询余额
    public double selectMoney(Customer cust);

    // 转账
    public boolean transMoney(Customer cust, String inNumber, double money);

    // 修改密码
    public int updatePwd(Customer cust);

    // 查询顾客
    public ResultSet selectCust(Customer cust);
}

4.6 AdminDaoImpl类

package com.ll.dao;

import java.sql.ResultSet;

import com.ll.po.Admin;
import com.ll.po.Customer;

public class AdminDaoImpl extends BaseDao implements AdminDao {
    // 此类只负责操作数据库,把查询结果不做处理直接返回,返回到service中进行处理
    // 管理员登录
    @Override
    public ResultSet adminLogin(Admin admin) {
        // TODO Auto-generated method stub
        //管理员查询的sql
        String sql = "select count(adminname) from administrator where adminname = '"
                + admin.getAdminName()
                + "' and adminpwd = '"
                + admin.getAdminPwd() + "'";
        //调用共通的查询方法执行sql
        ResultSet rs = select(sql, null);
        //查询到的结果不做处理直接返回
        return rs;
    }

    // 添加客户
    @Override
    public int addCust(Customer cust) {
        // TODO Auto-generated method stub
        //添加顾客的sql
        String sql = "insert into customer values('" + cust.getCustNumber()
                + "','" + cust.getCustName() + "','" + cust.getCustPwd()
                + "','" + cust.getCustIdCard() + "'," + cust.getCustMoney()
                + ",to_date('" + cust.getCustDate() + "','yyyy-MM-dd'))";// 一定要进行格式转换,Mysql中不用
        //调用共通的增删改方法执行sql
        int count = update(sql, null);
        close();
        return count;
    }

    // 计算总金额
    @Override
    public ResultSet calSumMoney() {
        // TODO Auto-generated method stub
        //计算储蓄总额的sql
        String sql = "select sum(custmoney) from customer";
        //调用共通的查询方法执行sql
        ResultSet rs = select(sql, null);
        return rs;
    }

    // 富豪排行榜,以金额进行排序
    @Override
    public ResultSet rankMoney() {
        // TODO Auto-generated method stub
        //查询所有顾客信息并按金额排序的sql
        String sql = "select * from customer order by custmoney desc";
        //调用共通的查询方法执行sql
        ResultSet rs = select(sql, null);
        return rs;
    }
}

4.7 CustomerDaoImpl类

package com.ll.dao;

import java.sql.ResultSet;

import com.ll.po.Customer;

public class CustomerDaoImpl extends BaseDao implements CustomerDao {
    // 此类只操作用户功能关于数据库的操作,返回操作结果
    // 用户登录
    @Override
    public ResultSet custLogin(Customer cust) {
        // TODO Auto-generated method stub
        //顾客查询的sql
        String sql = "select * from customer where custname = '"
                + cust.getCustName() + "' and custpwd = '" + cust.getCustPwd()
                + "'";
        //调用共通的查询方法执行sql
        ResultSet rs = select(sql, null);
        return rs;
    }

    @Override
    public int addsubMoney(Customer cust) {
        // TODO Auto-generated method stub
        //存取款的sql
        String sql = "update customer set custmoney = " + cust.getCustMoney()
                + " where custnumber = '" + cust.getCustNumber() + "'";
        //调用共通的增删改方法执行sql
        int count = update(sql, null);
        close();
        //返回影响行数
        return count;
    }

    @Override
    public double selectMoney(Customer cust) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public boolean transMoney(Customer cust, String inCustId, double money) {
        //转账的两个更新sql
        String sql1 = "update customer set custmoney = custmoney - " + money
                + " where custnumber = '" + cust.getCustNumber() + "'";
        String sql2 = "update customer set custmoney = custmoney + " + money
                + " where custnumber = '" + inCustId + "'";
        //用数组保存两个sql
        String[] sqlArr = { sql1, sql2 };
        //调用共通的批处理方法执行多个sql
        boolean isTrans = batch(sqlArr);
        close();
        return isTrans;
    }

    @Override
    public int updatePwd(Customer cust) {
        // TODO Auto-generated method stub
        //修改密码的sql
        String sql = "update customer set custpwd = '" + cust.getCustPwd()
                + "'";
        //调用共通的增删改方法执行sql
        int count = update(sql, null);
        //调用共通关闭资源方法
        close();
        return count;
    }

    @Override
    public ResultSet selectCust(Customer cust) {
        // TODO Auto-generated method stub
        //查询顾客的sql
        String sql = "select * from customer where custnumber = '"
                + cust.getCustNumber() + "'";
        //调用共通的查询方法执行sql
        ResultSet rs = select(sql, null);
        return rs;
    }
}

Java连接Oracle数据库开发银行管理系统【三、实现篇】的更多相关文章

  1. Java连接Oracle数据库开发银行管理系统【二、设计篇】

    一.总体分析     此系统的实现并不难,但是如何更好的设计出实现方式还是需要更深入的分析,例如:如果再增加其他功能,是不是需要变动的 代码很少,只是直接再增加一点功能就可以了呢?如果使用的不是Ora ...

  2. Java连接Oracle数据库开发银行管理系统【一、需求篇】

    此系统开发共分为三篇完成. 第一篇[需求篇]:效果展示图,也就是需求部分的展示 第二篇[设计篇]:需求分析和类,接口的设计 第三篇[实现篇]:具体代码实现

  3. Java连接Oracle数据库的三种连接方式

    背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...

  4. oracle入门(5)——java连接oracle数据库

    [本文介绍] 前面几篇说了那么多,最终还没讲到如何用java连接数据库,本文实用一点,讲讲如何连接数据库. [java连接oracle数据库] 1.导入jdbc驱动:看到这里,就忙着上网找驱动?不,安 ...

  5. Java连接Oracle数据库常用方法

    JDBC的六大步骤: 注册驱动 获取连接 获取执行sql语句对象 执行sql语句 处理结果集 关闭资源 oracle URL: jdbc:oracle:thin:@localhost:1521:SID ...

  6. java连接Oracle数据库

    Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表: create table student ( id ) not null primary key, ...

  7. 一个非常标准的Java连接Oracle数据库的示例代码

    最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择“D:\Oracle\app\ ...

  8. java连接oracle数据库的实现代码

    package connectionOracleDatabase; import java.sql.Connection; import java.sql.DatabaseMetaData; impo ...

  9. Java连接Oracle数据库的示例代码

    最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径 ->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择 “D:\Oracle\ap ...

随机推荐

  1. 浅论ViewController的加载 -- 解决 viewDidLoad 被提前加载的问题(pushViewController 前执行)

    一个ViewController,一般通过init或initWithNibName来加载.二者没有什么不同,init最终还是要调用initWithNibName方法(除非这个ViewControlle ...

  2. HTTP中的POST、GET区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...

  3. Area区域

    1.mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时 ...

  4. ulipad源码包配置环境及安装

    一.准备下载的安装包: 1.python(我电脑配置的是2.7)下载地址http://pan.baidu.com/s/1qWrGZk4 2.wxpython(我这里是wxpy3.0,配套python2 ...

  5. command not found,系统很多命令都用不了 ,修改环境变量

    bash: ***: command not found,系统很多命令都用不了,均提示没有此命令. 突然之间linux很多命令都用不了,均提示没有此命令. 这应该是系统环境变量出现了问题导致的. 解决 ...

  6. Win7 64位qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包

    今天开始系统的学习QT,第一个测试的问题就是在纯净的系统中如何正常运行,也就是找出QT生成的exe的依赖库问题 网上搜了下可以简单粗暴的用 D:\Qt\Qt5.6.0\5.6\msvc2015\bin ...

  7. MMC不能打开文件D:\Program Files\Microsoft SQL Server\80\Tools\BINN\SQL Server Enterprise Manager.MSC

    以上问题的解决方式如下: 1. 打开windows运行对话框.在对话框输入mmc.打开了如图所示的控制台. 2. 文件---添加/删除管理单元(M). 3. 添加.然后选择Microsoft SQL ...

  8. CSS3多列

    CSS3多列,通过创建列对页面内容进行布局,轻松实现类似Pinterest.花瓣的瀑布流式布局. 主要包含: column-count  列数 column-gap     列间宽度 column-r ...

  9. c++中的指针

    指针用起来是一把利器,但用得不好的童鞋 无异于 火上浇油 ,下面笔者将自己学习 的一点小小心得,与君共享 指针在类中 1.对象指针 初始化 Point a(4,5); Point *p1 = & ...

  10. oracle数据库导入导出

    简单记录下数据泵导出导入expdp .impdp 和 普通导出导入 exp.imp 一.数据泵导出数据库(按用户)步骤: 1.以oracle用户登录oracle所在服务器,创建数据库备份文件目录 &g ...