📄 customerthread.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.border.*;
import java.util.*;
import java.net.*;
import java.io.*;
import java.sql.*;
public class CustomerThread extends Thread
{
public static String Card;
public static String Name;
public static String ID;
public static String Password;
public static double Money;
public static boolean LostFlag;
public static boolean State;
Socket Winsock;
Socket Comsock;
DataInputStream inData;
DataOutputStream outData;
DataInputStream comeData;
DataOutputStream goData;
String getcmd;
Component f;
MainFrame MainF;
String NewPass="";
public CustomerThread(Socket s,Socket c,Component ComponentF,MainFrame mainf)
{
Winsock=s;
Comsock=c;
f=ComponentF;
MainF=mainf;
try{
inData = new DataInputStream(Winsock.getInputStream());
outData = new DataOutputStream(Winsock.getOutputStream());
comeData = new DataInputStream(Comsock.getInputStream());
goData = new DataOutputStream(Comsock.getOutputStream());
}
catch(IOException e)
{}
}
public void run()
{
while(true)
{
try
{
if((getcmd=new String(inData.readUTF()))!=null);
{
System.out.println("Received from Server:");
System.out.println(getcmd);
ProcessData(getcmd);
}
}
catch (IOException e)
{
System.out.println(e.toString());
break;
}
catch (Exception e)
{
System.out.println(e.toString());
break;
}
}
}
public void OverTrade()
{
int Number;
String Name;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:autosrv","","");
Statement s = c.createStatement();
for (int i=0;i<MainF.m_Bill.size();i++)
{
Number=((BillItem)MainF.m_Bill.elementAt(i)).buyNum;
Name=new String(((BillItem)MainF.m_Bill.elementAt(i)).Name);
s.executeUpdate("UPDATE Product SET Amount=Amount-"+String.valueOf(Number)+" WHERE Product='"+Name+"'");
}
for (int i=0;i<12;i++)
{
ResultSet r = s.executeQuery("SELECT * FROM Product WHERE ProductID='"+String.valueOf(i+1)+"'");
while(r.next())
{
int tmpNum=r.getInt("Amount");
//MainF.lblProNum[i]=new JLabel("数量:"+String.valueOf(tmpNum)+" 个");
}
}
s.close();
Winsock.close();
Comsock.close();
} catch(SQLException Exp)
{
System.out.println(Exp.toString());
}
catch(ClassNotFoundException Exp)
{
JOptionPane.showMessageDialog(f, Exp.toString(), "错误:", JOptionPane.INFORMATION_MESSAGE);
}
catch(IOException Exp){System.out.println(Exp.toString());}
catch(Exception Exp)
{
}
MainF.ListModel.removeAllElements();
MainF.BagList.setModel(MainF.ListModel);
MainF.m_Bill.removeAllElements();
MainF.tm.setItem(MainF.m_Bill);
MainF.payState(false);
}
public void QuitTrade()
{
MainF.ListModel.removeAllElements();
MainF.BagList.setModel(MainF.ListModel);
MainF.m_Bill.removeAllElements();
MainF.tm.setItem(MainF.m_Bill);
MainF.payState(false);
}
public void SendBuy(double Cash,String card,String password)
{
try{
outData.writeUTF("TURN:|CARD:"+card+"|ACCT:company"+"|CASH:"+Cash+"|PASS1 ");
}
catch(IOException e)
{}
catch(Exception e)
{}
}
public void Msgbox(String msg)
{
JOptionPane.showMessageDialog(f, msg, "提示:", JOptionPane.INFORMATION_MESSAGE);
}
private void ProcessData(String command)
{
StringTokenizer st=new StringTokenizer(command,"|");
String[] tokens=new String[st.countTokens()];
int i=0;
String tmpCard = "";
String tmpName="";
String tmpPass ="";
String tmpAcct="";
double tmpCash=0;
boolean tmpLostFlag=false;
boolean tmpState=false;
while(st.hasMoreTokens())
{
tokens[i]=st.nextToken();
if(tokens[i].length()>4){
if(tokens[i].trim().substring(0,5).toUpperCase().equals("CARD:"))
{
tmpCard = new String(tokens[i].trim().substring(5));
System.out.println(tmpCard);
}
if(tokens[i].trim().substring(0,5).toUpperCase().equals("CASH:"))
{
tmpCash = Double.parseDouble(tokens[i].trim().substring(5));
System.out.println(tmpCash);
}
if(tokens[i].trim().substring(0,5).toUpperCase().equals("ACCT:"))
{
tmpAcct = new String(tokens[i].trim().substring(5));
System.out.println(tmpAcct);
}
if(tokens[i].trim().substring(0,5).toUpperCase().equals("PASS:"))
{
tmpPass = new String(tokens[i].trim().substring(5));
System.out.println(tmpPass);
}
if(tokens[i].trim().substring(0,5).toUpperCase().equals("STAT:"))
{
tmpState = tokens[i].trim().substring(5).toUpperCase().equals("FALSE")?false:true;
System.out.println(tmpState);
}
if(tokens[i].trim().substring(0,5).toUpperCase().equals("SIGN:"))
{
tmpLostFlag = tokens[i].trim().substring(5).toUpperCase().equals("FALSE")?false:true;
System.out.println(tmpLostFlag);
}
if(tokens[i].trim().substring(0,5).toUpperCase().equals("NAME:"))
{
tmpName = new String(tokens[i].trim().substring(5));
System.out.println(tmpName);
}
}
i++;
}
switch (Integer.parseInt(command.trim().substring(0,3)))
{
case 110:
Card= tmpCard;
Name=tmpName;
Password=tmpPass;
Money=tmpCash;
LostFlag=tmpLostFlag;
State=tmpState;
break;
case 250:
try{
for (int j=0;j<MainF.m_Bill.size();j++) //向公司发送成功交易日志
{
String toCompany="TRAD:|NAME:"+((BillItem)MainF.m_Bill.elementAt(j)).Name
+"|CONT:"+String.valueOf(((BillItem)MainF.m_Bill.elementAt(j)).buyNum)
+"|CARD:"+tmpCard
+"|CASH:"+String.valueOf(((BillItem)MainF.m_Bill.elementAt(j)).Money);
System.out.println(toCompany);
goData.writeUTF(toCompany);
}
goData.writeUTF("OVER:");
}catch(IOException e)
{
Msgbox("向公司发送交易日志失败");
}
JOptionPane.showMessageDialog(f,"恭喜,交易成功,您消费卡尚有余额 "+tmpCash+" 元!\n请您不要忘记取出ATM卡和打印收据!", "提示:", JOptionPane.INFORMATION_MESSAGE);
OverTrade();
break;
case 560:JOptionPane.showMessageDialog(f,"抱歉,你卡上的金额不足,无法付款!\n请及时到银行为您的消费卡充钱,谢谢!", "提示:", JOptionPane.ERROR_MESSAGE);
break;
case 130:JOptionPane.showMessageDialog(f,"ATM密码错误,无法进行交易!", "警告:", JOptionPane.ERROR_MESSAGE);
break;
}
}
/*
服务器返回信息协议
110 ATM客户信息数据包
250 命令操作成功完成
500 命令不可识别
551 非法ATM卡号
553 ATM卡被冻结
554 ATM卡已挂失
221 密码验证失败
886 服务器要求关闭连接
452 服务器已超出最大连接数
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -