Java连接Oracle数据库开发银行管理系统【三、实现篇】
说明:里面的主要代码都加的有注释部分,所以代码显得很长,如果有错误的地方,谢谢指出。
注意需要导入数据库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数据库开发银行管理系统【三、实现篇】的更多相关文章
- Java连接Oracle数据库开发银行管理系统【二、设计篇】
一.总体分析 此系统的实现并不难,但是如何更好的设计出实现方式还是需要更深入的分析,例如:如果再增加其他功能,是不是需要变动的 代码很少,只是直接再增加一点功能就可以了呢?如果使用的不是Ora ...
- Java连接Oracle数据库开发银行管理系统【一、需求篇】
此系统开发共分为三篇完成. 第一篇[需求篇]:效果展示图,也就是需求部分的展示 第二篇[设计篇]:需求分析和类,接口的设计 第三篇[实现篇]:具体代码实现
- Java连接Oracle数据库的三种连接方式
背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...
- oracle入门(5)——java连接oracle数据库
[本文介绍] 前面几篇说了那么多,最终还没讲到如何用java连接数据库,本文实用一点,讲讲如何连接数据库. [java连接oracle数据库] 1.导入jdbc驱动:看到这里,就忙着上网找驱动?不,安 ...
- Java连接Oracle数据库常用方法
JDBC的六大步骤: 注册驱动 获取连接 获取执行sql语句对象 执行sql语句 处理结果集 关闭资源 oracle URL: jdbc:oracle:thin:@localhost:1521:SID ...
- java连接Oracle数据库
Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表: create table student ( id ) not null primary key, ...
- 一个非常标准的Java连接Oracle数据库的示例代码
最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择“D:\Oracle\app\ ...
- java连接oracle数据库的实现代码
package connectionOracleDatabase; import java.sql.Connection; import java.sql.DatabaseMetaData; impo ...
- Java连接Oracle数据库的示例代码
最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径 ->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择 “D:\Oracle\ap ...
随机推荐
- js之数据类型
1.数组类型 var Array=new Array(); 长度可变 var Array=new Array(n); 长度为n的数组 var Array=new Array("A" ...
- zabbix server配置文件
这样的错误日志,并且在web端也没有画出图来. 解决方法: ①编辑zabbix服务器端的配置文件/etc/zabbix/zabbix_server.conf找到"Timeout"把 ...
- javaWeb开发小工具---MailUtils及其单元测试
本次介绍的是,在javaWeb开发中,我们不免会遇到发送邮件的需求,比如:用户注册账号,需要激活登录,以及服务器定期向会员发送礼品信息等.所以参考有关资料,写了这个MailUtils工具类. 1.Ma ...
- MIMO下的MES均方误差详细推导过程
- [机器学习] 在茫茫人海中发现相似的你:实现局部敏感哈希(LSH)并应用于文档检索
简介 局部敏感哈希(Locality Sensitive Hasing)是一种近邻搜索模型,由斯坦福大学的Mose Charikar提出.我们用一种随机投影(Random Projection)的方式 ...
- xilium CefGlue集成包
最近很苦B的要做一个C#的HTM5项目,build了一下xilium CefGlue包,提供下载地址,供那些无法下载的同学们使用. http://yun.baidu.com/s/1slEdNEt
- 再谈CSHELL对C程序员的价值
几个礼拜前,介绍了CSHELL.http://www.cnblogs.com/hhao020/p/4974542.html今天再试着介绍下,希望能有更多C程序员留意到它,从中获益. 很多年前,我在调试 ...
- 《TCP/IP高效编程:改善网络程序的44个技巧》源码在Linux上的编译
为了先完整编译通过,需要以下几个步骤: 1.进入linux子目录,执行 make.(此步骤为打补丁.) 2.返回上一级目录,打开文件 simplec.c,添加头文件 #include <stdi ...
- android开发中监控android软件网络请求的软件Charles使用入门
1.下载并安状软件,官网在此: http://www.charlesproxy.com/ 2.前题条件,电脑和手机必须在同一网段 3.在Charles界面选择菜单 proxy->proxy se ...
- PHP多文件上传(二维数组$_FILES('文件域的名称'),move_uploaded_file(‘临时文件名’,‘新的文件名’))
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...