📄 account.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 + -