用java和JDBC实现一个ATM机系统(2.1版)
文章目录用java和JDBC实现一个ATM机系统(2.1版)设计思路源代码需要一个配置文件ATM 类Data类JDBC工具类Bank类User类Demo测试类mysql代码用java和JDBC实现一个ATM机系统(2.1版)java和数据库实现银行ATM自助取款机,实现功能:用户登录、余额查询、存钱、取钱、转账、修改密码、退出系统。设计思路设计六个类包括测试类:1,ATM类也是主要的类,负责实现用
·
文章目录
用java和JDBC实现一个ATM机系统(2.1版)
java和数据库实现银行ATM自助取款机,实现功能:用户登录、余额查询、存钱、取钱、转账、修改密码、退出系统。
设计思路
设计六个类包括测试类:
1,ATM类也是主要的类,负责实现用户一系列的操作;
2,Data类,操作数据库的类,作为ATM类的一个属性,主要实现从数据库获取用户信息,并完成数据的更新;
3、JDBCUtil类,JDBC工具类,注册mysql驱动、获取连接对象及释放资源;
4,Bank类,有ATM机(has-a),欢迎用户来使用ATM机;
5,User类,使用ATM机(use-a);
6,Demo类,测试类,创建一个环境,让类产生关系。
源代码
导入mysql驱动的jar包,还需要一个配置文件
需要导入mysql驱动的jar包:
先创建一个libs文件夹,将mysql驱动的jar包复制到这个文件中,然后右键,点击Add as …
直接在src文件夹下创建jdbc.properties配置文件;
文件内容:
//atm是创建的数据库名称
url=jdbc:mysql://localhost:3306/atm
user=你的mysql的用户名
password=你的mysql用户密码
driver=com.mysql.jdbc.Driver
ATM 类
package atm;
import java.util.Scanner;
//ATM类
public class ATM {
//有一个类操作数据的类
private Data data = new Data();
//ATM机里的数据
private double userMoney;//用户账户里的钱
private double money;//变量,存,取,转账的钱
//ATM界面
public void show(){
System.out.println("欢迎使用ATM机");
//使用登录方法,输入账号和密码
int number = login();
//如果登录成功
if(number == 4)
working();//ATM机办理业务
}
//登录方法
private int login(){
int number = 3;//用户输入次数
while(number > 0) {
Scanner input = new Scanner(System.in);
System.out.println("请输入账号:");
//输入账号
String inUserName = input.nextLine();
//输入密码
System.out.println("请输入密码:");
String inUserPassword = input.nextLine();
//验证
if(data.isTrue(inUserName,inUserPassword)){
userMoney = data.getMoney();
System.out.println("登录成功");
number = 4;//次数变为4
break;
}
number --;//次数减一
System.out.println("账号或密码输入错误。。。");
System.out.println("您还有" + number + "次机会");
}
return number;//是否登录成功
}
//功能界面
private void functionShow(){
System.out.println("**********************");
System.out.println("\t欢迎使用ATM");
System.out.println("1,账户余额查询\n2,存钱\n3,取钱\n4,转账\n5,修改用户密码\n6,退出系统\n");
System.out.println("**********************");
}
//用户要进行的操作
private void working(){
String index;//业务序号
do{
functionShow();//调用功能界面
System.out.println("请输入要办理的业务序号:");
Scanner input = new Scanner(System.in);
index = input.nextLine();
switch(index){
case "1":
look();
break;
case "2":
saveMoney();
break;
case "3":
getMoney();
break;
case "4":
giveMoney();
break;
case "5":
changePassword();
break;
case "6":
System.out.println("欢迎下次光临!");
data.close();
break;
default:
System.out.println("您输入有误,请重新输入。。。。");
}
}while(!index.equals("6"));
}
//是否继续某项操作
private boolean isContinue(){
System.out.println("继续办理该项业务:请输入Y/y");
System.out.println("返回上一级:请输入N/n");
Scanner input = new Scanner(System.in);
String str = input.nextLine();
if(str.equalsIgnoreCase("Y"))
return true;
else
return false;
}
//存钱,取钱,转账共用
private void howMuch(String str){
System.out.println("欢迎办理"+ str +"业务。。。。。。");
System.out.println("请输入金额(只能是整数且是100的倍数,最多为10000):");
Scanner input = new Scanner(System.in);
Double money = input.nextDouble();
if(money%10 != 0) {
System.out.println("您输入有误!");
this.money = 0;
}
else
this.money = money;
}
//查询实现
private void look(){
userMoney = data.getMoney();
System.out.println("用户余额为:" + userMoney);
try{
Thread.sleep(2000);
}catch(Exception e){
e.printStackTrace();
}
}
//存钱实现
private void saveMoney(){
howMuch("存钱");
if(money != 0) {//如果存的钱正确
boolean a = data.changeMoney(money, true);//存上
if(a)
System.out.println("已存入");
look();//显示余额
}
if(isContinue())
saveMoney();
}
//判断余额是否充足
private boolean isEnough(){
userMoney = data.getMoney();
if(money <= userMoney)
return true;
else{
System.out.println("您的余额不足!");
return false;
}
}
//取钱实现
private void getMoney(){
howMuch("取钱");
//如果取的钱正确且如果转账账户余额够
if(money != 0 && isEnough()){
data.changeMoney(money, false);
look();
System.out.println("请收好您的钱");
}
if(isContinue())
getMoney();
}
//转账实现
private void giveMoney(){
//只判断用户账户是否存在
Scanner input = new Scanner(System.in);
System.out.println("请输入要转账账号:");
//输入账号
String inUserName = input.nextLine();
//如果该账户存在
if(data.isUser(inUserName)) {
howMuch("转账");
//如果转的钱正确且如果转账账户余额够
if (money != 0 && isEnough()) {
data.giveMoney(money);
System.out.println("转账成功");
look();
}
}
else
System.out.println("被转账账户不存在。。。");
if(isContinue())
giveMoney();
}
//修改密码实现
private void changePassword(){
System.out.println("请输入新密码:");
Scanner input = new Scanner(System.in);
String newPassword = input.nextLine();
boolean b = data.changePassword(newPassword);
if(b)
System.out.println("密码修改成功!");
else
System.out.println("密码修改失败!");
}
}
Data类
package atm;
import jdbc_util.JDBCUtil;
import java.sql.*;
public class Data {
private double umoney;//用户余额
private String uname; //用户
private String gname; //被转账用户
private Connection coon = null;//连接对象,程序结束时释放
private PreparedStatement pstmt = null;
private ResultSet res = null;
private String sql;//sql语句
{
try {
coon = JDBCUtil.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 获取该账户的余额
* @return 余额
*/
public double getMoney(){
try {
sql = "select * from atm where uname= ?";//查询语句
pstmt = coon.prepareStatement(sql);
pstmt.setString(1, uname);
res = pstmt.executeQuery();
if(res.next()){
umoney = res.getDouble("money");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.close(res, pstmt, null);//释放资源
}
return umoney;
}
/**
* 判断登录是否成功
*/
public boolean isTrue(String user,String password){
if(user == null || password == null){
return false;
}
try {
sql = "select * from atm where uname = ? and password = ?";
pstmt = coon.prepareStatement(sql);
pstmt.setString(1,user);
pstmt.setString(2,password);
res = pstmt.executeQuery();
uname = user;
return res.next();
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.close(res, pstmt, null);
}
return false;
}
/**
* 判断被转帐用户是否存在
* @param user 被转账用户名
* @return
*/
public boolean isUser(String user){
if(user == null){
return false;
}
try {
sql = "select * from atm where uname = ?";
pstmt = coon.prepareStatement(sql);
pstmt.setString(1,user);
res = pstmt.executeQuery();
gname = user;
return res.next();
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.close(res, pstmt, null);
}
return false;
}
/**
* 取钱、存钱操作
* @param money 钱数
* @param isOrNot 存钱or取钱
*/
public boolean changeMoney(double money,boolean isOrNot){
if(isOrNot){
sql = "update atm set money = money + ? where uname = ?";
}else{
sql = "update atm set money = money - ? where uname = ?";
}
return runSql(money,null);
}
/**
* 修改密码
* @param newPassword 新密码
* @return
*/
public boolean changePassword(String newPassword){
if(newPassword == null){
return false;
}
sql = "update atm set password = ? where uname = ?";
return runSql(0,newPassword);
}
//执行sql修改操作
private boolean runSql(double money,String newPassword){
try {
if(sql == null){
return false;
}
pstmt = coon.prepareStatement(sql);
if(newPassword == null){
pstmt.setDouble(1, money);
}else{
pstmt.setString(1, newPassword);
}
pstmt.setString(2,uname);
int count = pstmt.executeUpdate();
if(count != 0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
sql = null;
JDBCUtil.close(res, pstmt, null);
}
return false;
}
/**
* 转账操作,事务
* @param money 转账数
* @return
*/
public boolean giveMoney(double money){
PreparedStatement pstmt1 = null;
try {
coon.setAutoCommit(false); //开启事务
sql = "update atm set money = money - ? where uname = ?";
String sql1 = "update atm set money = money + ? where uname = ?";
pstmt = coon.prepareStatement(sql);
pstmt1 = coon.prepareStatement(sql1);
pstmt.setDouble(1,money);
pstmt.setString(2,uname);
pstmt1.setDouble(1,money);
pstmt1.setString(2,gname);
int a = pstmt.executeUpdate();
int b = pstmt1.executeUpdate();
coon.commit();//提交事务
if(a !=0 && b!=0) {
return true;
}
} catch (Exception e) {
try {
if(coon !=null)
coon.rollback();//回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
JDBCUtil.close(res, pstmt, null);
JDBCUtil.close(null, pstmt1, null);
}
return false;
}
/**
* 释放所有的资源
*/
public void close(){
JDBCUtil.close(res, pstmt, coon);
}
}
JDBC工具类
package jdbc_util;
import com.sun.org.apache.bcel.internal.util.ClassLoader;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/**
* JDBC工具类
*/
public class JDBCUtil {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 从配置文件读取所需要的数据
*/
static{
try {
//创建Properties集合类
Properties pro = new Properties();
//获取src下文件路径---->ClassLoader 类加载器(文件路径不有为中文)
ClassLoader classLoader = new ClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
//加载文件
//pro.load(new FileReader("/D:/java-idea2018File/jdbc/out/production/atm-gui-jdbc/jdbc.properties"));
pro.load(new FileReader(path));
//获取数据赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
/**
* 释放资源
* @param stmt
* @param coon
*/
public static void close(Statement stmt, Connection coon){
close(null,stmt,coon);
}
public static void close(ResultSet res,Statement stmt,Connection coon){
if(res != null){
try{
res.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (stmt != null) {
try{
stmt.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (coon != null) {
try{
coon.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
}
Bank类
package atm;
//银行类
public class Bank {
//银行有ATM机供给用户使用
private ATM atm = new ATM();
//欢迎用户使用
public void welcome(User user){
System.out.println("欢迎用户来我行使用ATM机");
user.useATM(atm);
}
}
User类
package atm;
//用户类
public class User {
//用户使用ATM机办理业务
public void useATM(ATM atm){
atm.show();
}
}
Demo测试类
package atm;
//测试类
public class Demo {
public static void main(String[] args){
//创建一个银行
Bank bank = new Bank();
//创建一个用户
User user = new User();
//银行欢迎用户
bank.welcome(user);
}
}
mysql代码
CREATE DATABASE atm;
CREATE TABLE atm(
id INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(30),
PASSWORD VARCHAR(6),
money DOUBLE(6,2)
);
INSERT INTO atm(id,uname,PASSWORD,money) VALUES(
NULL,
'张三',
'123',
0
);
INSERT INTO atm(id,uname,PASSWORD,money) VALUES(
NULL,
'李四',
'456',
0
);
INSERT INTO atm(id,uname,PASSWORD,money) VALUES(
NULL,
'王五',
'789',
0
);
SELECT * FROM atm;
运行结果:
更多推荐
已为社区贡献2条内容
所有评论(0)