我这个程序是关于 ATM 的!!问题出在转账时,在运行时就是他(收钱)的账户上不能显示转账后的价钱!!求大神,代码有点长,请谅解!!
//ATM.javaimport javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.nio.channels.SelectableChannel;
import java.sql.*;
public class ATM extends JFrame{
private JTextArea messageArea;
private JPanel buttonPanel;
private JPanel commandPanel;
private JButton buttonNumber[]=new JButton[10];
private String buttonName[]={"1","2","3","4","5","6","7","8","9","0"};
private JButton queryButton;
private JButton ckButton;
private JButton withdrawButton;
private JButton enterButton;
private JButton exitButton;
private JButton zhuanButton;
private JButton alterButton;
private double balance,x,sum;
private double accountAmount;
private String accountNumber="",accountPin="",accountPin1="",accountPin2="",accountPin3="";
private int enterState=0;
private String s="";
private String account;
private Connection myCon;
private Statement myStatement;
private ResultSet myResultSet;
public ATM()
{
String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:account";
try {
//①加载驱动程序,必须要安装驱动程序并注册数据源,此处实例的数据源名称为account
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
//驱动程序加载不成功,打印错误信息并退出
System.out.println("Can not find driver " + driverClass);
System.exit( -1);
}
try {
//②获得jdbc 连接,参数包括连接数据源,数据源名称,密码
myCon = DriverManager.getConnection(url, "account","");
//③创建Statement对象,用于将 SQL 语句发送到数据库中,并返回结果。
myStatement = myCon.createStatement();
} catch (SQLException sqe) {
sqe.printStackTrace();
}
CreateUI();
}
private void CreateUI()
{
Container contentPane=getContentPane();
contentPane.setLayout(null);
messageArea=new JTextArea();
messageArea.setBounds(20,16,250,80);
messageArea.setText("欢迎使用ATM,请输入帐号:\n");
messageArea.setEditable(false);
contentPane.add(messageArea);
buttonPanel=new JPanel();
buttonPanel.setBounds(24,110,140,150);
buttonPanel.setLayout(new GridLayout(4,3,5,6));
contentPane.add(buttonPanel);
commandPanel=new JPanel();
commandPanel.setBounds(180,110,100,150);
commandPanel.setLayout(new GridLayout(7,1,5,1));
contentPane.add(commandPanel);
for(int i=0;i<10;i++)
{
buttonNumber[i]=new JButton(buttonName[i]);
buttonNumber[i].addActionListener(new buttonNumber());
buttonPanel.add(buttonNumber[i]);
}
queryButton=new JButton("查询");
queryButton.addActionListener(new queryButtonAction());
commandPanel.add(queryButton);
withdrawButton=new JButton("取款");
withdrawButton.addActionListener(new withdrawButtonAction());
commandPanel.add(withdrawButton);
ckButton=new JButton("存款");
ckButton.addActionListener(new ckButtonAction());
commandPanel.add(ckButton);
zhuanButton=new JButton("转账");
zhuanButton.addActionListener(new zhuanButtonAction());
commandPanel.add(zhuanButton);
alterButton=new JButton("修改密码");
alterButton.addActionListener(new alterButtonAction());
commandPanel.add(alterButton);
enterButton=new JButton("确定");
enterButton.addActionListener(new enterButtonAction());
commandPanel.add(enterButton);
exitButton=new JButton("退出");
exitButton.addActionListener(new exitButtonAction());
commandPanel.add(exitButton);
setTitle("ATM");
setSize(320,300);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e){
//⑤窗口关闭时,要关闭数据库连接
try{
myStatement.close();
myCon.close();
}catch(SQLException exp){exp.printStackTrace();}
finally
{
System.exit(0);
}
}
});
}
class buttonNumber implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(enterState==0)
{s=s+e.getActionCommand().charAt(0);//e.getActionCommand() 返回的是当前动作指向对象的名称,charAt(0)检名称中的第一个字符
messageArea.append(e.getActionCommand());}//append():往尾部增加元素
else if(enterState==1)//输入密码
{s=s+e.getActionCommand().charAt(0);
messageArea.append("*");}
else if(enterState==2) //enterState=2表示取款状态
{s=s+e.getActionCommand().charAt(0);
messageArea.append(e.getActionCommand());}
else if(enterState==4) //enterState=4表示存款状态
{s=s+e.getActionCommand().charAt(0);
messageArea.append(e.getActionCommand());}
else if(enterState==5) //enterState=5表示转账状态
{s=s+e.getActionCommand().charAt(0);
messageArea.append(e.getActionCommand());}
else if(enterState==6)
{s=s+e.getActionCommand().charAt(0);
messageArea.append(e.getActionCommand());}
else if(enterState==8) //enterState=8表示修改密码状态
{s=s+e.getActionCommand().charAt(0);
messageArea.append("*");}
else if(enterState==9)
{s=s+e.getActionCommand().charAt(0);
messageArea.append("*");}
else if(enterState==10)
{s=s+e.getActionCommand().charAt(0);
messageArea.append("*");}
}
}
class queryButtonAction implements ActionListener//查询按钮
{
public void actionPerformed(ActionEvent e)
{
messageArea.setText("当前余额为:"+accountAmount);
messageArea.append("\n\n需要继续服务请按确定,否则请按退出!");
enterState=3;
}
}
class withdrawButtonAction implements ActionListener//取款按钮
{
public void actionPerformed(ActionEvent e)
{
messageArea.setText("请输入取款金额(应为50或100的整数倍):\n");
enterState=2;
s="";
}
}
class ckButtonAction implements ActionListener//存款
{
public void actionPerformed(ActionEvent e)
{
messageArea.setText("请输入存款金额(应为0到50000之间):\n");
enterState=4;
s="";
}
}
class zhuanButtonAction implements ActionListener//转账按钮
{
public void actionPerformed(ActionEvent e)
{
messageArea.setText("请输入要转入的帐号:\n");
enterState=5;
s="";
}
}
class alterButtonAction implements ActionListener//修改密码按钮
{
public void actionPerformed(ActionEvent e)
{
messageArea.setText("请输入您原来的密码:\n");
enterState=8;
s="";
}
}
class exitButtonAction implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
enterState=0;
s="";
accountAmount=0;
accountNumber="";
accountPin="";
messageArea.setText("欢迎使用ATM,请输入帐号:\n");
}
}
class enterButtonAction implements ActionListener//确定按钮
{
public void actionPerformed(ActionEvent e)
{
enterState++;
enterState%=13;
if(enterState==1)//判断用户名是否存在
{
accountNumber=s;
account=s;
s="";
try{
// ④得到查询结果
myResultSet=myStatement.executeQuery("SELECT * FROM account WHERE accountNumber='"+accountNumber+"'");
if(myResultSet.next())
messageArea.setText("请输入密码:\n");
else{
messageArea.setText("帐号输入错误,请重新输入!\n");
enterState=0;
}
}catch(SQLException exp)
{exp.printStackTrace();}
}
if(enterState==2)//判断密码是否正确
{
accountPin=s;
s="";
try{
// ④得到查询结果
if(myResultSet.getString("accountPin").compareTo(accountPin)==0)
{
accountAmount=myResultSet.getDouble("accountAmount");
messageArea.setText("请选择服务种类\n");
}
else {messageArea.setText("密码错误,请重新输入\n");
enterState=1;}
}catch(SQLException exp)
{
exp.printStackTrace();
}
}
if(enterState==3)//取款
{
balance=Double.parseDouble(s);
s="";
if(accountAmount>balance)
{accountAmount-=balance;
messageArea.setText("\n请等待。。。");
try{
// ④执行更新更新操作
myStatement.executeUpdate("UPDATE account SET accountAmount="
+accountAmount+" WHERE accountNumber='"+accountNumber+"'");
messageArea.setText("\n请取走钞票\n继续服务请按确定,退出请按取消!");
}catch(SQLException exp)
{
exp.printStackTrace();
}
}
else {messageArea.setText("对不起,余额不足!请重新输入金额!\n");
enterState=2;}
}
if(enterState==4)
{
s="";
messageArea.setText("请选择服务种类\n");
}
if(enterState==5)//存款
{
balance=Double.parseDouble(s);
s="";
if(balance>0||balance<50000)
{accountAmount+=balance;
messageArea.setText("\n请等待。。。");
try{
// ④执行更新更新操作
myStatement.executeUpdate("UPDATE account SET accountAmount="
+accountAmount+" WHERE accountNumber='"+accountNumber+"'");
messageArea.setText("\n已存入钞票\n继续服务请按确定,退出请按取消!");
}catch(SQLException exp)
{
exp.printStackTrace();
}
}
else {messageArea.setText("对不起!请重新输入金额!\n");
enterState=4;}
}
if(enterState==6)//判断要转帐的用户是否存在
{
accountNumber=s;
//x=SELECT accountAmount FROM account WHERE accountNumber='"+accountNumber+"'";
s="";
//messageArea.setText("请选择服务种类\n");
try{
// ④得到查询结果
myResultSet=myStatement.executeQuery("SELECT * FROM account WHERE accountNumber='"+accountNumber+"'");
if(myResultSet.next())
messageArea.setText("请输入要转入的金额:\n");
else{
messageArea.setText("帐号输入错误,请重新输入!\n");
enterState=5;
}
}catch(SQLException exp)
{exp.printStackTrace();}
}
if(enterState==7)//转账
{
balance=Double.parseDouble(s);
s="";
try{x=myStatement.executeUpdate("select accountAmount from account where accountNumber='"+account+"'");//这条语句是在求收账的用户的原有金额吗?主要问题应该在这附近
//System.out.print(x);
}catch(SQLException exp)
{exp.printStackTrace();
}
if(accountAmount>balance)
{
accountAmount-=balance;
messageArea.setText("\n请等待。。。");
//sum=x+balance;
try{
// ④执行更新更新操作
myStatement.executeUpdate("UPDATE account SET accountAmount="
+accountAmount+" WHERE accountNumber='"+account+"'");
myStatement.executeUpdate("UPDATE account SET accountAmount="
+x+" WHERE accountNumber='"+accountNumber+"'");
messageArea.setText("\n已转出!\n继续服务请按确定,退出请按取消!");
}catch(SQLException exp)
{exp.printStackTrace();
}}
else {messageArea.setText("对不起,余额不足!请重新输入金额!\n");
enterState=6;}
}
if(enterState==8)
{
s="";
messageArea.setText("请选择服务种类\n");
}
if(enterState==9)//修改密码,判断输入的密码是否与原密码相等
{
accountPin1=s;
s="";
// ④得到查询结果
if(accountPin.trim().equals(accountPin1.trim()))//myResultSet.getString("accountPin").compareTo(accountPin1)==0)
{
//accountAmount=myResultSet.getDouble("accountAmount");
messageArea.setText("请输入新密码\n");
}
else {messageArea.setText("密码错误,请重新输入\n");
enterState=8;}
}
if(enterState==10)//输入新密码
{
accountPin2=s;
s="";
messageArea.setText("请再一次输入密码\n");
}
if(enterState==11)//再次输入密码,且判断两次输入的密码是否相同
{
accountPin3=s;
s="";
try {
if (accountPin2.trim().equals(accountPin3.trim())) {
myStatement.executeUpdate("UPDATE account SET accountPin="
+accountPin3+" WHERE accountNumber='"+account+"'");
}
else {
messageArea.setText("两次输入的密码不一致,请重新输入\n");
enterState=10;
}}catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if(enterState==12)
{
s="";
messageArea.setText("请选择服务种类\n");
}
}
}
public static void main(String args[])
{
ATM atm=new ATM();
}
}