📄 clientthread.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 ClientThread extends Thread
{
Socket Sock;
int CurID;
final int MAX_CONNECT=100;
DataInputStream inData;
DataOutputStream outData;
ObjectOutputStream outObject;
String Getcmd;
DefaultTreeModel treeModel;
DefaultMutableTreeNode newNode;
Vector Client_list;
AtmAccount Customer;
public ClientThread(Socket s,int n,Vector VecClient,DefaultTreeModel model,DefaultMutableTreeNode newnode)
{
Sock=s;
this.CurID=n;
Client_list=VecClient;
treeModel=model;
newNode=newnode;
}
public void run()
{ System.out.println("Client "+String.valueOf(CurID)+"Connected! IP:"+Sock.getInetAddress().getHostAddress());
try
{
inData = new DataInputStream(Sock.getInputStream());
outData = new DataOutputStream(Sock.getOutputStream());
}
catch (IOException e)
{
System.out.println("Error: "+e.toString());
}
if (CurID>MAX_CONNECT)
{
try{
outData.writeUTF("STOP");
Sock.close();
System.out.println("Thread number more than 3,closed!");
}
catch (IOException e)
{
System.out.println("Error: "+e.toString());
}
}
else
{
while(true)
{
try
{
if((Getcmd=new String(inData.readUTF()))!=null);
{
System.out.println("Received from client"+String.valueOf(CurID)+":"+Getcmd);
ProcessData(Getcmd);
//outData.writeUTF(Getcmd);
}
}
catch (IOException e)
{
System.out.println(String.valueOf(CurID)+" connect over!");
treeModel.removeNodeFromParent(newNode);
Client_list.remove(newNode);
break;
}
catch (Exception e)
{
System.out.println(String.valueOf(CurID)+" connect over!");
treeModel.removeNodeFromParent(newNode);
Client_list.remove(newNode);
break;
}
}
}
}
private void Pick(String card,double cash,String pass1)
{
try
{
System.out.println("取款操作:从卡号为"+card+"的ATM卡上取出"+String.valueOf(cash)+"元");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accounts","","");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT * FROM Accounts WHERE CardID='"+card+"'");
String UserPwd="";
double UserMoney=0;
while(r.next())
{
UserPwd = new String(r.getString("Password"));
UserMoney=r.getDouble("Sum");
}
if (pass1.equals(UserPwd)) //密码验证通过!
{
if (UserMoney>=cash)
{ s.executeUpdate("UPDATE Accounts SET Sum=Sum-"+cash+" WHERE CardID='"+card+"'");
outData.writeUTF("550 |CASH:"+String.valueOf(UserMoney-cash)+"|CARD:"+card);
}
else
outData.writeUTF("560 |CASH:"+String.valueOf(UserMoney));
}
else
outData.writeUTF("130");
s.close();
}
catch(SQLException Exp)
{ System.out.println("sqlexception "+Exp); }
catch(ClassNotFoundException Exp)
{ System.out.println("classnotfound"); }
catch(Exception Exp)
{ System.out.println("exp"); }
}
private void Turn(String card,String acct,double cash,String pass1)
{
System.out.println("转帐操作:从卡号为"+card+"的帐号转出"+String.valueOf(cash)+"元到卡号为"+acct+"的帐号里");
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accounts","","");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT * FROM Accounts WHERE CardID='"+card+"'");
String UserPwd="";
double UserMoney=0;
while(r.next())
{
UserPwd = new String(r.getString("Password"));
UserMoney=r.getDouble("Sum");
}
if (pass1.equals(UserPwd) || acct.equals("company")) //密码验证通过!
{
System.out.println(acct);
if (UserMoney>=cash){
s.executeUpdate("UPDATE Accounts SET Sum=Sum-"+cash+" WHERE CardID='"+card+"'");
s.executeUpdate("UPDATE Accounts SET Sum=Sum+"+cash+" WHERE CardID='"+acct+"'");
outData.writeUTF("250 |CASH:"+String.valueOf(UserMoney-cash)+"|CARD:"+card);
}
else
{outData.writeUTF("560 |CASH:"+String.valueOf(UserMoney));}
}
else
outData.writeUTF("240");
s.close();
}
catch(SQLException Exp)
{ System.out.println("sqlexception "+Exp); }
catch(ClassNotFoundException Exp)
{ System.out.println("classnotfound"); }
catch(Exception Exp)
{ System.out.println("exp"); }
}
private void Pass(String card,String pass1,String pass2)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accounts","","");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT * FROM Accounts WHERE CardID='"+card+"'");
String UserPwd="";
while(r.next())
{
UserPwd = new String(r.getString("Password"));
}
if (pass1.equals(UserPwd)) //密码验证通过!
{
s.executeUpdate("UPDATE Accounts SET Password='"+pass2+"' WHERE CardID='"+card+"'");
outData.writeUTF("350");
}
else
outData.writeUTF("320");
s.close();
}
catch(SQLException Exp)
{ System.out.println("sqlexception "+Exp); }
catch(ClassNotFoundException Exp)
{ System.out.println("classnotfound"); }
catch(Exception Exp)
{ System.out.println("exp"); }
}
private void SendProfit()
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accounts","","");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT * FROM Accounts WHERE CardID='Company'");
while(r.next())
{
outData.writeUTF("850:|INFO:"+String.valueOf(r.getDouble("Sum")));
}
s.close();}
catch(SQLException Exp)
{
System.out.println(Exp.toString());
}
catch(ClassNotFoundException Exp)
{
System.out.println(Exp.toString());
}
catch(Exception Exp)
{
System.out.println(Exp.toString());
}
}
private void Flsh(String card,String pass1)
{
try
{
System.out.println("返回卡号为:"+card+"的ATM客户所有信息");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accounts","","");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT * FROM Accounts WHERE CardID='"+card+"'");
System.out.println("SELECT * FROM Accounts WHERE CardID='"+card+"'");
String UserCard="";
String UserName="";
String UserPwd="";
double UserMoney=0;
boolean LostFlag=true;
boolean State=true;
while(r.next())
{
UserPwd = new String(r.getString("Password"));
UserName = new String(r.getString("Name"));
UserCard = new String(r.getString("CardID"));
UserMoney = r.getDouble("Sum");
LostFlag=r.getBoolean("LostFlag");
State=r.getBoolean("State");
}
s.close();
if (pass1.equals(UserPwd))
{ String SendString=new String("110|CARD:"+UserCard+"|NAME:"+UserName+"|CASH:"+String.valueOf(UserMoney)
+"|PASS:"+UserPwd+"|STAT:"+String.valueOf(State)+"|SIGN:"+String.valueOf(LostFlag));
outData.writeUTF(SendString);
}
else
outData.writeUTF("130");
}
catch(SQLException Exp)
{ System.out.println("sqlexception "+Exp); }
catch(ClassNotFoundException Exp)
{ System.out.println("classnotfound"); }
catch(Exception Exp)
{ System.out.println("exp"); }
}
private void ProcessData(String command)
{
StringTokenizer st=new StringTokenizer(command,"|");
String[] tokens=new String[st.countTokens()];
int i=0;
String Card = "";
String Acct ="";
String Pass1 ="";
String Pass2 ="";
double Cash=0;
while(st.hasMoreTokens())
{
tokens[i]=st.nextToken();
if(tokens[i].trim().substring(0,5).toUpperCase().equals("CARD:"))
Card = new String(tokens[i].trim().substring(5));
if(tokens[i].trim().substring(0,5).toUpperCase().equals("CASH:"))
Cash = Double.parseDouble(tokens[i].trim().substring(5));
if(tokens[i].trim().substring(0,5).toUpperCase().equals("ACCT:"))
Acct = new String(tokens[i].trim().substring(5));
if(tokens[i].trim().substring(0,5).toUpperCase().equals("PASS1"))
Pass1 = new String(tokens[i].trim().substring(5));
if(tokens[i].trim().substring(0,5).toUpperCase().equals("PASS2"))
Pass2 = new String(tokens[i].trim().substring(5));
i++;
}
if (command.trim().toUpperCase().substring(0,5).equals("PICK:"))
Pick(Card,Cash,Pass1);
if (command.trim().toUpperCase().substring(0,5).equals("TURN:"))
Turn(Card,Acct,Cash,Pass1);
if (command.trim().toUpperCase().substring(0,5).equals("PASS:"))
Pass(Card,Pass1,Pass2);
if (command.trim().toUpperCase().substring(0,5).equals("FLSH:"))
Flsh(Card,Pass1);
if (command.trim().toUpperCase().substring(0,5).equals("REPT:"))
SendProfit();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -