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

📄 customerthread.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.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 + -