📄 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.text.SimpleDateFormat;
import java.util.Date;
import java.net.*;
import java.io.*;
import java.sql.*;
public class ClientThread extends Thread
{
Socket Sock;
DataInputStream inData;
DataOutputStream outData;
String Getcmd;
MainFrame MainWindow;
public ClientThread(Socket s,MainFrame mainframe)
{
Sock=s;
MainWindow=mainframe;
}
public void run()
{ System.out.println("Client 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());
}
while(true)
{
try
{
if((Getcmd=new String(inData.readUTF()))!=null);
{
System.out.println("Received from client:"+Getcmd);
ProcessData(Getcmd);
}
}
catch (IOException e)
{
System.out.println(" connect over!");
break;
}
catch (Exception e)
{
System.out.println("connect over!");
break;
}
}
}
public void SetPrice(String ProName,double Price) throws IOException
{
boolean FindFlag=false;
int ProductID=0;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:autosrv","","");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT * FROM Product WHERE Product='"+ProName+"'");
while(r.next())
{
ProductID=Integer.parseInt(r.getString("ProductID"));
FindFlag=true;
}
if(FindFlag==true){
s.executeUpdate("UPDATE Product SET Price="+String.valueOf(Price)+" WHERE Product='"+ProName+"'");
s.close();
MainWindow.lblPrice[ProductID-1].setText("单价:"+String.valueOf(Price)+" 元");
outData.writeUTF("820:|INFO:售货机上 "+ProName+" 的单价已设为"+String.valueOf(Price)+" 元");
((Product)MainWindow.m_Product.elementAt(ProductID-1)).Price=Price;
}
else
{outData.writeUTF("840:|INFO:售货机上无法找到要补充的商品类别");}
}catch(SQLException Exp)
{outData.writeUTF("840:|INFO:"+Exp.toString());}
catch(ClassNotFoundException Exp)
{outData.writeUTF("840:|INFO:"+Exp.toString());}
catch(Exception Exp)
{outData.writeUTF("840:|INFO:"+Exp.toString());}
}
public void getProduct(String ProName,int Num) throws IOException
{
int CurNum=0;
int AddNum=0;
int ProductID=0;
boolean FindFlag=false;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:autosrv","","");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT * FROM Product WHERE Product='"+ProName+"'");
while(r.next())
{
CurNum=r.getInt("Amount");
ProductID=Integer.parseInt(r.getString("ProductID"));
FindFlag=true;
}
if(FindFlag==true){
if (CurNum+Num>50) //每样商品在售货机上最多装50个
AddNum=50-CurNum;
else
AddNum=Num;
s.executeUpdate("UPDATE Product SET Amount=Amount+"+String.valueOf(AddNum)+" WHERE Product='"+ProName+"'");
s.close();
((Product)MainWindow.m_Product.elementAt(ProductID-1)).CurNum+=AddNum;
MainWindow.lblProNum[ProductID-1].setText("数量:"+String.valueOf(((Product)MainWindow.m_Product.elementAt(ProductID-1)).CurNum)+" 个");
if (CurNum+Num<=50)
outData.writeUTF("810:|NAME:"+ProName+"|ACCP:"+Num+"|INFO:"+"售货机上已接受到 "+ProName+" "+String.valueOf(AddNum)+" 个");
else
outData.writeUTF("830:|NAME:"+ProName+"|ACCP:"+String.valueOf(AddNum)+"|INFO:"+ProName+" 在售货机上已经装不下了,接收了"+String.valueOf(AddNum)+" 个,尚有 "+String.valueOf(CurNum+Num-50)+"个退回");
}else
{outData.writeUTF("840:|INFO:售货机上无法找到要补充的商品类别");}
}catch(SQLException Exp)
{outData.writeUTF("840:|INFO:"+Exp.toString());}
catch(ClassNotFoundException Exp)
{outData.writeUTF("840:|INFO:"+Exp.toString());}
catch(Exception Exp)
{outData.writeUTF("840:|INFO:"+Exp.toString());}
}
private void ProcessData(String command) throws IOException
{
StringTokenizer st=new StringTokenizer(command,"|");
String[] tokens=new String[st.countTokens()];
int i=0;
String ProName="";
int ProCont=0;
double Price=0;
while(st.hasMoreTokens())
{
tokens[i]=st.nextToken();
if(tokens[i].trim().substring(0,5).toUpperCase().equals("CASH:"))
Price = Double.parseDouble(new String(tokens[i].trim().substring(5)));
if(tokens[i].trim().substring(0,5).toUpperCase().equals("CONT:"))
ProCont = Integer.parseInt(new String(tokens[i].trim().substring(5)));
if(tokens[i].trim().substring(0,5).toUpperCase().equals("NAME:"))
ProName = new String(tokens[i].trim().substring(5));
i++;
}
if (command.trim().toUpperCase().substring(0,5).equals("PROD:"))
{getProduct(ProName,ProCont);}
if (command.trim().toUpperCase().substring(0,5).equals("PRIC:"))
{SetPrice(ProName,Price);}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -