package atm;
import java.sql.*; //引入数据库方法 所在的类
import java.util.Scanner; //引入“键盘输入”方法 所在的类
public class JavaAtm {
int UserId = 0; //保存当前登陆的卡号
String UserName = ""; //保存用户姓名
double balance = -1; //保存用户余额,登陆成功后第一次自动赋值
double inUserbalance = -1; //转入账户余额
int times = 1; //定义全局变量 times,用来计算 循环次数,如:登陆失败三次自动退出
Scanner scan = new Scanner(System.in);
//主方法
public static void main(String[] args){
System.out.println("*****************");
System.out.println("*欢迎使用ATM自助服务!*");
System.out.println("*****************");
JavaAtm myAtm = new JavaAtm();
myAtm.Login();
}
//登陆
public void Login(){
System.out.printf("请输入您的【卡号】,并按Enter键确认:\n");
int scanUserId = scan.nextInt();
UserId = scanUserId;
System.out.printf("请输入您的【密码】,并按Enter键确认:\n");
int scanUserPwd = scan.nextInt();
String sql = "select * from account where UserId='" + scanUserId + "'"
+ " and UserPwd='" + scanUserPwd + "'"; //数据库查询语句
ResultSet rs = DataAccess.GetResultSetByMySql(sql);
try {
if(rs.next()) //判断账号密码是否匹配
{
UserName = rs.getString(2);
balance = rs.getDouble(4); //登陆自动后台查询余额,防止取款、转账和存款报错。
System.out.println("登录成功");
System.out.println(UserName + "您好,欢迎使用本系统!");
mainMenu(); //登陆成功则调用主界面方法
}else
{
System.out.println("您输入的卡号或密码错误,请重新输入!");
if(times < 3) { //计算输入次数,最多三次
times++;
Login(); //返回调用登录界面方法 Login()
}else {
System.out.println("密码的错误次数超过3次,系统即将强行退出!");
Quit(); //调用退出方法 Quit()
}
}
} catch (SQLException e) {
e.printStackTrace(); //打印异常信息
} finally{
DataAccess.close(); //查询完毕,关闭数据库连接
}
}
//主界面
public void mainMenu()
{
System.out.println("请选择自助服务:");
System.out.println("1:查询余额");
System.out.println("2:取款");
System.out.println("3:存款");
System.out.println("4:转账");
System.out.println("5:改密码");
System.out.println("6:退出");
System.out.println("选择功能请输入对应数字,并按Enter键确认:");
int sacnNum=scan.nextInt(); //存放用户选择的功能
switch(sacnNum) //判断用户输入的数字,选择相应的功能
{
case 1:Balance(); //查询余额
break;
case 2:Draw(); //取款
break;
case 3:Deposit(); //存款
break;
case 4:Transfer(); //转账
break;
case 5:ChangePwd(); //修改密码
break;
case 6:Quit(); //退出
default:System.out.println("您的输入有误,请重新输入!");
mainMenu();
break; //输入无效选项,跳转回选择界面
}
}
//查询余额
public void Balance() {
String sql = "select * from account where UserId='" + UserId + "'"; //数据库查询语句
ResultSet rs = DataAccess.GetResultSetByMySql(sql); //查询后返回结果集,并将结果集赋给rs
try {
if(rs.next()) { //如果查询结果集部位空
balance = rs.getDouble(4); //取结果集第4列即用户余额
System.out.println("您的余额为:" + balance + " 元");
} else{
System.out.println("查询失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
DataAccess.close(); //查询完毕,关闭数据库连接
}
System.out.println("请输入任意数字返回主界面:");
int scanNum = scan.nextInt();
mainMenu(); //调用主界面方法,返回主界面
}
//取款
public void Draw() {
System.out.println("请输入取款金额:");
double scanMoney = scan.nextDouble();
if(scanMoney <= 0){ //判断用户输入是否小于或者等于0
System.out.println("取款金额必须大于0!");
Draw();
}
if(scanMoney < balance) { //取款金额小于用户余额
double money = balance - scanMoney; //取款后的余额
String sql = "update account set UserBalance='" + money + "'"
+ " where UserId='" + UserId + "'";
if(DataAccess.UpdateByMySql(sql)) { //取款成功
balance = money; //更改余额变量值
System.out.println("取款成功!");
System.out.println("您的当前余额为:" + balance + " 元");
} else {
System.out.println("对不起,取款失败!");
System.out.println("");
}
System.out.println("继续取款请输入1,返回主菜单请输入其他数:");
int scanNum = scan.nextInt();
if(scanNum == 1)
Draw();
else
mainMenu();
} else {
System.out.println("余额不足,重新输入请输入1,返回主菜单请输入其他数:");
int scanNum = scan.nextInt();
if(scanNum == 1)
Draw();
else
mainMenu();
}
}
//存款
public void Deposit() {
System.out.println("请输入存款金额:");
double scanMoney = scan.nextDouble();
if(scanMoney >= 0){ //判断用户输入是否小于或者等于0
double money = balance + scanMoney; //取款后的余额
String sql = "update account set UserBalance='" + money + "'"
+ " where UserId='" + UserId + "'";
if(DataAccess.UpdateByMySql(sql)) { //存款成功
balance = money; //更改余额变量值
System.out.println("存款成功!");
System.out.println("您的当前余额为:" + balance + " 元");
} else {
System.out.println("对不起,存款失败!");
System.out.println("");
}
System.out.println("继续存款请输入1,返回主菜单请输入其他数:");
int scanNum = scan.nextInt();
if(scanNum == 1)
Deposit();
else
mainMenu();
} else {
System.out.println("存款不能小于或者等于0,重新输入请输入1,返回主菜单请输入其他数:");
int scanNum = scan.nextInt();
if(scanNum == 1)
Deposit();
else
mainMenu();
}
}
//转账
public void Transfer() {
System.out.println("请输入转入账户:");
int scanUserIdA = scan.nextInt();
System.out.println("请再次输入转入账户:");
int scanUserIdB = scan.nextInt();
if(scanUserIdA != scanUserIdB) {
System.out.println("两次输入不一致!");
System.out.println("重新输入请输入1,返回主菜单请输入其他数:");
int scanNum = scan.nextInt();
if(scanNum == 1)
Transfer();
else
mainMenu();
}
//查询转入账户是否存在
String sqlA = "select * from account where UserId='" + scanUserIdA + "'"; //数据库查询语句,判断用户名是否存在
ResultSet rs = DataAccess.GetResultSetByMySql(sqlA); //返回结果集
try {
if(rs.next()) {
inUserbalance = rs.getDouble(4);
//如果用户存在则不执行返回操作
} else{
System.out.println("转入账户不存在!");
System.out.println("重新输入请输入1,返回主菜单请输入其他数:");
int scanNum = scan.nextInt();
if(scanNum == 1)
Transfer();
else
mainMenu();
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
DataAccess.close(); //查询完毕,关闭数据库连接
}
System.out.println("请输入转账金额:");
double scanMoney = scan.nextDouble();
if(scanMoney <= 0){ //判断用户输入是否小于或者等于0
System.out.println("取款金额必须大于0,取消转账请输入1,返回主菜单请输入其他数:");
int scanNum = scan.nextInt();
if(scanNum == 1)
Transfer();
else
mainMenu();
}
if(scanMoney > balance) { //如果取款金额大于余额
System.out.println("余额不足,重新输入请输入1,返回主菜单请输入其他数:");
int scanNum = scan.nextInt();
if(scanNum == 1)
Transfer();
else
mainMenu();
}
double myMoney = balance - scanMoney; //转出账户余额
inUserbalance = inUserbalance + scanMoney; //转入账户余额
//执行转出操作
String sqlB = "update account set UserBalance='" + myMoney + "'"
+ " where UserId='" + UserId + "'";
//执行转入操作
String sq