⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 account.java

📁 模拟银行的ATM自动取款机
💻 JAVA
字号:
/**--------------Account类为Employer类的基类---------------------*/
import java.sql.*;
import java.util.*;
import java.io.*;
public class Account{
protected Connection con;
protected Statement stmt;
protected String customerCardNo;
protected String customerPassWord;
protected String customerName;
protected String customerID;
protected String customerTel;
int cardState;
protected float money;
protected int cardType;
protected String time;
/**--------------构造函数--------------------------------*/
public Account(){
customerCardNo=new String();
customerPassWord=new String();
customerName=new String();
customerID=new String();
customerTel=new String();
time=new String();
}
public String getCustomerCardNo(){return customerCardNo;}
public String getName(){return customerName;}
public String getTel(){return customerTel;}
public String getCustomerID(){return customerID;}
public String getTime(){return time;}
public int getCardState(){return cardState;}
public float getMoney(){return money;}

/**----------------setTime()将time(String)设置为操作时的时间---------------------*/
public void setTime(){
GregorianCalendar date=new GregorianCalendar();
int year=date.get(Calendar.YEAR);
int month=date.get(Calendar.MONTH)+1;
int day=date.get(Calendar.DATE);
int hour=date.get(Calendar.HOUR);
int min=date.get(Calendar.MINUTE);
int sec=date.get(Calendar.SECOND);
time=String.valueOf(year)+"/"+String.valueOf(month)+"/"
           +String.valueOf(day)+" "+String.valueOf(hour)+":"
           +String.valueOf(min)+":"+String.valueOf(sec); 
}
/**--------------------connectData()实现与数据库的连接-------------------*/
public void connectData(){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
System.out.println(e.getMessage());
}
try{
con=DriverManager.getConnection("jdbc:odbc:Bank");
stmt=con.createStatement();
}catch(SQLException e1){
System.out.println("SQLException:"+e1.getMessage());
}
}
/**-----------------breakConnect()断掉数据库与程序的连接---------------------*/
public void breakConnect(){
try{
stmt.close();
con.close();
}catch(SQLException e1){
System.out.println("SQLException:"+e1.getMessage());
}
}
/**---IsAccoutExsit(String cardNo)判断卡号为cardNo的帐号是否存在,其返回值为int型----
 --------返回0表示该卡号不存在,1表示该卡号可用,2表示该卡号已被冻结-----------
 */
public int IsAccountExsit(String cardNo){
connectData();
try{
ResultSet rs=stmt.executeQuery("SELECT * FROM AccountTab WHERE cardNo="
       +"'"+cardNo+"'");
if(!rs.next())
return 0;        //---------------此卡号不存在
else{
customerCardNo=cardNo;
customerPassWord=rs.getString(2);
money=rs.getFloat(3);
customerID=rs.getString(4);
customerName=rs.getString(5);
customerTel=rs.getString(6);
cardState=rs.getInt(7);
time=rs.getString(8);
cardType=rs.getInt(9);
breakConnect();
if(cardState==0) return 2;         //----------次卡号已被冻结
else return 1;             //------------此卡号存在
}
}catch(SQLException e1){
System.out.println("SQLException:"+e1.getMessage()+"\n检查帐户失败");
return -1;         //----------------系统问题,操做失败
}
finally{
breakConnect();
}
}
/**------checkPassWordCustomer(String passWord)判断passWord是否为用户密码------
   --------------密码正确返回true,否则返回false----------------------
*/
public boolean checkPassWordCustomer(String passWord){
if(customerPassWord.equals(passWord)) return true;//------密码正确
else return false;      //-------密码错误
}
/**-------------draw(float money)函数完成客户取款功能,以取款钱数money为参数----
-------------------------返回值为int型-----------------------
    -------------返回0表示一次取款超标(3000元),取款失败----------
    --------------------返回1表示取款成功------------------------
    --------------------返回2表示卡内钱数不够---------------------
*/
public int bankDraw(float money){
if(((this.money-1<money)&&cardType==0)
         ||((this.money+1000-1<money)&&cardType==1)){
return 2;       //----------------卡内今额不足或不能透支1000元
}
else{
this.money-=money;
connectData();
try{
stmt.execute("UPDATE AccountTab SET cardMoney='"+this.money+"'WHERE "+
     "cardNo='"+customerCardNo+"'");
return 1;          //--------------成功取款
}catch(SQLException e1){
System.out.println("SQLException:"+e1.getMessage()+"\n取款失败");
return -1;          //------------系统问题,取款失败
}
finally{
breakConnect();
}
}
}
/** -------以下save()函数完成客户存款功能,以存款钱数(float)为参数---------
     ----------------------返回值为boolean型-----------------------
     --------------------返回true表示存款成功------------------------
     ---------返回false表示存款失败(系统原因)------------------------
*/
public boolean save(float money){
this.money+=money;
connectData();
try{
stmt.execute("UPDATE AccountTab SET cardMoney='"+this.money+"' WHERE "
     +"cardNo='"+customerCardNo+"'");
return true;       //--------------------存款成功
}catch(SQLException e1){
System.out.println("SQLException:"+e1.getMessage()+"\n存款失败");
return false;      //-------------系统问题,存款失败
}
finally{
breakConnect();
}
}
/** -------以下createNewAccount()函数完成客户开帐功能-----------
    -----有5个参数:身份证号(String ID),姓名(String name)--------
    ------电话号码(String tel)  ,开帐存入钱数(float money)------        
    ----------------开卡类型(int cardType)------------------
    -------------------------返回值为int型-----------------------
    -------返回0表示一个身份证号只能办理一张信用卡,开帐失败---------
    --------------------返回1表示开帐成功------------------------
    --------------------返回2表示开帐钱数不够---------------------
    ----------返回-1表示开帐失败(系统原因)--------
 */   
public int createNewAccount(String ID,String name,String tel,
               float money,int cardType){
if(money<101)
return 2;//----------开帐钱数不够
connectData();
try{
if(cardType==1){
ResultSet ts=stmt.executeQuery("select * from AccountTab where ID='"
     +ID+"'");
if(ts.next()) return 0;//------一个身份证号只能办理一张信用卡
}
ResultSet rs=stmt.executeQuery("select max(cardNo) from AccountTab");
rs.next();
customerCardNo=rs.getString(1);
if(customerCardNo!=null)
customerCardNo=String.valueOf(Integer.parseInt(customerCardNo)+1);
else customerCardNo=("13000");
this.money=money-100;
cardState=1;
for(int i=1;i<7;i++)
customerPassWord+=String.valueOf((int)(Math.random()*9)+1);
setTime();
String source="新帐户卡号"+customerCardNo+"默认密码"+customerPassWord+"\n"+"请及时更改密码";
byte buf[]=source.getBytes();
try{
OutputStream fout=new FileOutputStream("E:/programs/java files/新帐户/account.txt");
fout.write(buf);
fout.close();
}catch(IOException e){}
stmt.executeUpdate("insert into AccountTab values('"+customerCardNo+"','"
    +customerPassWord+"','"+this.money+"','"+ID+"','"+name+"','"+tel+"',"
    +cardState+",'"+time+"',"+cardType+")");   
System.out.println("-----------现在打印客户开帐信息(只有客户可见)--------"
                   +"\n-----------客户:"+name+"于"+time+"开帐成功---------"
                   +"\n-----------帐号为:"+customerCardNo
                   +"   初始密码为:"+customerPassWord+"-----------");
if(cardType==1)
System.out.println("----------你的卡为信用卡,一次最多可透支1000元----------"
                   +"\n---------请你尽快到本银行各网点或ATM机修改初始密码-------");
else
System.out.println("-----------------你的卡为普通存储卡,不可透支----------------"
                   +"\n---------请你尽快到本银行各网点或ATM机修改初始密码-------");
return 1;           //------------新开帐户成功
}catch(SQLException e1){
System.err.println("SQLException:"+e1.getMessage()+"\n创建帐户失败");
return -1;             //---------------系统问题,操做失败
}
finally{
breakConnect();
}
}
/**----------------changeCardState()修该客户卡的状态--------------------
  --------------------修改成功返回true,否则返回false-------------------
 */
public boolean changeCardState(){
if(cardState==0) cardState=1;
else cardState=0;
connectData();
try{
stmt.execute("UPDATE AccountTab SET cardState='"+cardState+"' WHERE "
    +"cardNo='"+customerCardNo+"'");
return true;            //-------成功改变某卡的状态
}catch(SQLException e1){
System.err.println("SQLException:"+e1.getMessage()+"\n修改信用卡失败");
return false;       //---------------系统问题,操做失败
}
finally{
breakConnect();
}
}
/**----------changePassWordCustomer(String passWord)将客户密码改成passWord-------
  ---------------------修改成功返回true,否则返回false---------------
*/
public boolean changePassWordCustomer(String passWord){
connectData();
try{
stmt.execute("UPDATE AccountTab SET passWord ='"+passWord+"' WHERE "
     +"cardNo ='"+customerCardNo+"'");
customerPassWord=passWord;
return true;        //----------------修改密码成功
}catch(SQLException e1){
System.err.println("SQLException:"+e1.getMessage()+"\n修改密码失败");
return false;        //--------------------系统问题,操做失败
}
finally{
breakConnect();
}
}
/**---------moveMoney(String cardNumber,float money)------------------------
---------------完成客户转帐功能,以转帐钱数money,转入卡号cardNumber为参数---------
    -------------------------返回值为int型-----------------------
    -------------返回0表示卡内钱数不够,转帐失败----------
    --------------------返回1表示转帐成功------------------------
    -------------返回2表示输入的帐号为本身,转帐失败---------------------
    ------------返回3表示输入的帐号不存在,转帐失败--------------
*/
public int moveMoney(String cardNumber,float money){
if(cardState==0) return 4;
if(this.money-1<money)
return 0;        //----------卡内金额不足
if(cardNumber.equals(customerCardNo))return 2;    //-------不能将钱自己转给自己
connectData();
try{
ResultSet rs=stmt.executeQuery("select * from AccountTab where cardNo='"
               +cardNumber+"'");
if(!rs.next())
return 3;  
     //------------转入的帐号不存在
if(rs.getInt(7)==0)return 4;
this.money-=money;
money+=rs.getFloat(3);
stmt.execute("update AccountTab set cardMoney="+money
             +" where cardNo='" +cardNumber+"'");
stmt.execute("update AccountTab set cardMoney="+this.money
             +" where cardNo='"+customerCardNo+"'");
return 1;      //---------------转帐成功
}catch(SQLException e1){
System.err.println("SQLException:"+e1.getMessage());
return -1;      //-----------系统问题,转帐失败
}   
finally{
breakConnect();
}
}
public int cardstate(){
   return cardState;
}
/**---------------该函数注销本卡号-----------------------
----------------------成功返回true,否则返回false--------------------
*/
public boolean delCard(){
connectData();
try{
stmt.executeUpdate("delete * from AccountTab where cardNo='"+customerCardNo+"'");
return true;           //---------成功注销某帐号
}catch(SQLException e1){
System.err.println("SQLException:"+e1.getMessage());
return false;          //----------系统问题,操做失败
} 
finally{
breakConnect();
}
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -