⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientthread.java

📁 课程设计:ATM Project源码
💻 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 + -