📄 atm.java.bak
字号:
/* ATM柜员机模拟程序
要求:当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行(规则可以按照实际系统做需求):
1、查询余额:初始余额为10000元
2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
3、ATM存款:不能出现负存款。
4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码*/
import java.sql.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
//CardID:数据库中用户ID UseID:暂时用来保存输入ID Usepwd:保存输入密码 UseSQL:数据库实例 UserMoney:用户余额
class dataSQL
{
private Connection conn;
private Statement stmt;
/*--------------链接数据库-------------------*/
public dataSQL() //构造函数设置连接数据库
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=data\\Atminfo.mdb";
conn=DriverManager.getConnection(dburl);
stmt=conn.createStatement();
}
catch(Exception e1)
{
System.out.println(e1.toString());
}
}
/*-----------------用于返回某一特定数据集------------------*/
public ResultSet getData(String sqlstr)//返回查询的数据集
{
try
{
ResultSet rs=this.stmt.executeQuery(sqlstr);
return rs;
}
catch(Exception e)
{
System.out.println(e.toString());
return null;
}
}
/*-----------------用于返回某一特定数据集的行数-----------------*/
public int getRowcount(String sqlstr)
{
int i=0;
try
{
ResultSet rs=this.getData(sqlstr);
while(rs.next()) i++;
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
return i;
}
}
/*-----------------用于执行某一特定的无返回SQl语句-----------------*/
public boolean exeSql(String sqlstr)//执行无返回的SQL语句
{
try
{
stmt.execute(sqlstr);
return true;
}
catch(Exception e)
{
System.out.println(e.toString());
return false;
}
}
/*-----------------用于延时-----------------*/
public void sleep(int second)
{
try
{
Thread th=new Thread();
th.sleep(second*1000);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
protected void finalize()//析构函数
{
try
{
if(stmt!=null) stmt.close();
if(conn!=null) conn.close();
}
catch(Exception e)
{}
}
}
class readCard
{
public void exitCard()//退卡(退出系统)
{
System.exit(0);
}
public String getCardID(String cardID)//读卡号
{
return cardID;
}
}
class moneyMachine
{
public String printBill(float money,String CardID,float leftmoney)//打印取款清单和余额查询
{
String msg;
msg="帐号: "+CardID+" ";
msg+="操作类型: 取款"+" ";
msg+="操作金额: "+money+" ";
msg+="帐号余额: "+leftmoney+" ";
return msg;
}
}
class PutmoneyMachine
{
public String printBill(float money,String CardID,float leftmoney)//打印存款清单和余额查询
{
String msg;
msg="帐号: "+CardID+" ";
msg+="操作类型: 存款"+" ";
msg+="操作金额: "+money+" ";
msg+="帐号余额: "+leftmoney+" ";
return msg;
}
}
class Account
{
MD5 md=new MD5();
dataSQL UseSQL=new dataSQL();
/*-----------------------修改密码---------------------------------------*/
public int changePwd(String CardID,String pwd,String oldPwd,String newPwd,String newPwd2)
{
String pwd1,pwd2;
if(newPwd.length()==0 || newPwd.trim().equals("")) return -3;//新密码不能为空
else if(newPwd.length()!=6) return -4;//密码不等于6位
else if(!isNumeric(newPwd)) return -5;//密码不全是数字
else if(iseq(newPwd)) return -6;
else if(oldPwd.equals(pwd))
{
pwd1=md.getMD5Instance().compute(newPwd);//MD5加密
pwd2=md.getMD5Instance().compute(newPwd2);//MD5加密
if(pwd1.equals(pwd2))
{
UseSQL.exeSql("update Atminfo set pwd='"+pwd1+"' where CardID='"+CardID+"'");
return 1;//密码修改成功
}
else
{
return -2;//两次输入不同
}
}
else
{
return -1;//旧密码输入错误
}
}
/*---------------------- 验证用户ID-----------------------------------*/
public boolean checkAccount(String UseID)
{
String ssql;
ssql="select * from Atminfo where CardID='"+UseID+"'";
if(UseSQL.getRowcount(ssql)>0)//合法ID
{
return true;
}
else//非法ID
{
// System.out.println("OK");
return false;
}
}
/*---------------------- 设置帐号状态-----------------------------------*/
public boolean checkCardID(String CardID,int num)
{
String ssql;
ssql="update Atminfo set num='"+num+"'where CardID='"+CardID+"'";
if(UseSQL.exeSql(ssql))
{
return true;
}
else//非法ID
{
// System.out.println("OK");
return false;
}
}
/*----------------------查询帐号状态-----------------------------------*/
public float queryCard(String CardID)
{
ResultSet rs;
String ssql="select * from Atminfo where CardID='"+CardID+"'";
float balance=0;
try
{
rs=UseSQL.getData(ssql);
rs.next();
balance=rs.getFloat("num");
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
return balance;
}
}
/*---------------------- 验证是否为数字-----------------------------------*/
public boolean isNumeric(String str)
{
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() ) {
return false;
}
return true;
}
/*---------------------- 验证字符串是否全部重复-----------------------------------*/
public boolean iseq(String newPwd)
{
byte[] newPwd1=newPwd.getBytes();
byte pwd;
int n=0;
pwd=newPwd1[0];
for(int i=1;i<newPwd1.length;i++)
{
if(pwd==newPwd1[i]) n++;
}
if(n==5) return true;
else return false;
}
/*----------------------验证用户密码-----------------------------------*/
public boolean checkPwd(String UseID,String Usepwd)
{
String ssql,pwd;
pwd=md.getMD5Instance().compute(Usepwd);//MD5加密
ssql="select * from Atminfo where pwd='"+pwd+"' and CardID='"+UseID+"'";
if(UseSQL.getRowcount(ssql)>0)//合法pwd
{
return true;
}
else//非法pwd
{
return false;
}
}
/*----------------------查询余额-----------------------------------*/
public float queryBalance(String CardID)
{
ResultSet rs;
String ssql="select * from Atminfo where CardID='"+CardID+"'";
float balance=0;
try
{
rs=UseSQL.getData(ssql);
rs.next();
balance=rs.getFloat("UserMoney");
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
return balance;
}
}
/*----------------------查询当天交易额-----------------------------------*/
public float queryBalancetoday(String CardID)
{
ResultSet rs;
String ssql="select * from Atminfo where CardID='"+CardID+"'";
float balance=0;
try
{
rs=UseSQL.getData(ssql);
rs.next();
balance=rs.getFloat("TodayMoney");
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
return balance;
}
}
/*----------------------扣除取款数-----------------------------------*/
public boolean reduceMoney(String UseID,float money)
{
String ssql;
if(this.queryBalance(UseID)<money) return false; //查看卡上余额是否大于要取金额
ssql="update Atminfo set UserMoney=UserMoney-"+money+" where CardID='"+UseID+"'";
if(UseSQL.exeSql(ssql)) return true; //扣款成功
else return false; //扣款未成功
}
/*----------------------增加当天交易额-----------------------------------*/
public boolean addTodayMoney(String UseID,float money)
{
String ssql;
ssql="update Atminfo set TodayMoney=TodayMoney+"+money+" where CardID='"+UseID+"'";
if(UseSQL.exeSql(ssql)) return true; //记录成功
else return false; //记录未成功
}
/*----------------------增加存款-----------------------------------*/
public boolean addMoney(String UseID,float money)
{
String ssql;
ssql="update Atminfo set UserMoney=UserMoney+"+money+" where CardID='"+UseID+"'";
if(UseSQL.exeSql(ssql)) return true; //存款成功
else return false; //存款未成功
}
/*----------------------清空今日金额-----------------------------------*/
public boolean clear(){
String ssql;
ssql="update Atminfo set TodayMoney=0";
if(UseSQL.exeSql(ssql)) return true; //清空成功
else return false;
}
protected void finalize()//析构函数
{
UseSQL.finalize();
}
}
public class Atm
{
display dis=new display();//实例化ATM屏幕类
MD5 md=new MD5();
public void go()
{
dis.mainFram();
}
public static void main(String[] args) //系统主方法,只负责调用
{
Atm run=new Atm();
run.go();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -