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

📄 bankthreadserver.java

📁 本工程模拟网上社区,其中包括银行,软件销售公司,软件投资公司,茶餐馆,和多个服务器.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * BankThreadServer.java
 *
 * Created on 2007年9月9日, 下午3:40
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package bankserver;

import java.io.BufferedReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.util.Calendar;
import java.util.Vector;
import java.io.FileWriter;
import java.text.DecimalFormat;
/**
 *
 * @author owen
 */
public class BankThreadServer extends Thread {
    
    public static String JDriver="sun.jdbc.odbc.JdbcOdbcDriver";
    public static String conURL="jdbc:odbc:Bank";
    public Connection con;
    public static final double INTEREST=0.005;
    BankServer bankserver;
    private String currentAccount;
    
    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;
    private DecimalFormat decimalformat=new DecimalFormat("##################0.00#");
    
    /** Creates a new instance of BankThreadServer */
    public BankThreadServer(Socket s,BankServer bankserver) throws IOException {
        socket=s;
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
        this.bankserver=bankserver;
        try{  
             Class.forName(JDriver);
        }
        catch(java.lang.ClassNotFoundException e){
            System.out.println("forname: "+e.getMessage());
        }
        start();
    }
    
    public void connection()            //与数据库连接   
    {
        try {
            con=DriverManager.getConnection(conURL);
        }catch(SQLException e)
        {
            System.out.println("SQLException: "+e.getMessage());
        }
    }
    
    public String login(String account,String password)  //登录
    {
        currentAccount=account;
        if(bankserver.onService.contains(account)) return "exit";
        connection();
        try
        {
            int a=0;
            String name="";
            Statement s=con.createStatement();
            ResultSet rs=s.executeQuery("select * from Account");
            while(rs.next())
            {
                if(rs.getString("账号").equals(account)&&rs.getString("密码").equals(password))
                {
                    a=1;
                    name=rs.getString("姓名");
                    break;
                }
            }
            
            s.close();
            con.close();
            if(a==1) {
                bankserver.onService.add(account);
                bankserver.visitors++;
                return "success"+"+"+name;
            }
            else return "account or code wrong"+"+"+"none";
        }
        catch(SQLException e){  
            try{
               con.close();
           }
           catch(SQLException sqle){
               sqle.printStackTrace();
           }
           return e.getMessage();
        }
    }
    
  
    public  String deposit(String account,double money)     //存款
    {
        connection();
        try{
            Statement s=con.createStatement();
            ResultSet rs=s.executeQuery("select * from Account");
            String dtime=null;
            double moneyin=0.00;
            int exit=0;
            while(rs.next()){
                if(rs.getString("账号").equals(account)){
                    dtime=rs.getString("存款时间");
                    moneyin=rs.getDouble("余额");
                    exit=1;
                    break;
                }
            }
            s.close();
            if(exit==0){
                return "no account";
            }
            StringTokenizer st=new StringTokenizer(dtime,"-");
            String temp[]=new String[st.countTokens()];
            for(int i=0;i<temp.length;i++)
            {
               temp[i]=st.nextToken();
            }
            Calendar c=Calendar.getInstance();
            int time=(c.get(Calendar.YEAR)-Integer.parseInt(temp[0]))*12+c.get(Calendar.MONTH)+1-Integer.parseInt(temp[1]);
            money=Double.valueOf(decimalformat.format(money+moneyin*(time*INTEREST+1)));
            String newtime=String.valueOf(c.get(Calendar.YEAR))+"-"+String.valueOf(c.get(Calendar.MONTH)+1)+"-"+String.valueOf(c.get(Calendar.DAY_OF_MONTH));
            PreparedStatement ps=con.prepareStatement("UPDATE Account set 余额=?, 存款时间=? where 账号=?");
            ps.setDouble(1,money);
            ps.setString(2,newtime);
            ps.setString(3,account);
            ps.executeUpdate();
            ps.close();
            con.close();
            return "success";
        }
        catch(SQLException e) { 
            try{
               con.close();
           }
           catch(SQLException sqle){
               //sqle.printStackTrace();
           }
           System.out.println("SQLException:"+e.getMessage()+"\n"+"At BankThreadServer class while deposit() is called.");
           return "fail"; 
        }
    }
    
    public  String withdraw(String account,double money)
    {
        connection();
        try{
            Statement s=con.createStatement();
            ResultSet rs=s.executeQuery("select * from Account");
            double moneyin=0.00;
            while(rs.next()){
                if(rs.getString("账号").equals(account)){
                    moneyin=rs.getDouble("余额");
                    break;
                }
            }
            if(moneyin<money-1.00){
                s.close();
                con.close();
                return "not enough";
            }
            else{
                String returnstr=deposit(account,money*-1);
                s.close();
                con.close();
                return returnstr;
            }
        }
        catch(SQLException e){ 
           try{
               con.close();
           }
           catch(SQLException sqle){
               sqle.printStackTrace();
           }
           System.out.println("SQLException:"+e.getMessage()+"\n"+"At BankThreadServer class while shift() method is called.");
            return "fail";
        }
    }
    
    public  String shift(String outaccount,String inaccount,double money) //转账
    {
        connection();
        try{
            Statement s=con.createStatement();
            ResultSet rs=s.executeQuery("select * from Account");
            int enough=1;
            while(rs.next()){
                if(rs.getString("账号").equals(inaccount)){
                    if(inaccount.equals("1000000")){
                            try{
                                s.close();
                                con.close();
                                String done=withdraw(outaccount,money);
                                if(done.equals("success")){
                                    connection();
                                    PreparedStatement ps=con.prepareStatement("UPDATE Loan set 是否还款=? where 贷款人账号=?");
                                    ps.setString(1,"是");
                                    ps.setString(2,outaccount);
                                    ps.executeUpdate();
                                    ps.close();
                                    s.close();
                                    con.close();
                                    deposit(inaccount,money);
                                    return "success";
                                }
                                else return done;
                            }
                            catch(Exception e){
                                try{
                                    con.close();
                                }
                                catch(Exception ex){
                                    //
                                }
                                System.out.println(e.getMessage());
                            }
                        }
                        else{
                            s.close();
                            con.close();
                            if(deposit(inaccount,money).equals("no account")) return "no account";
                            return withdraw(outaccount,money);
                        }
                     }
                }
                
           
            return "no account";
        }
        catch(SQLException e){ 
            try{
               con.close();
            }
            catch(SQLException sqle){
              System.out.println("SQLException:"+sqle.getMessage()+"\n"+"At BankThreadServer class shift() method while con.close() is called.");
            }
            System.out.println("SQLException:"+e.getMessage()+"\n"+"At BankThreadServer class shift() method is called.");
            return "fail";
       } 
   }
    
   public String  applyLoan(String account,String name,double money,int time,double interest){
       connection();
       try{
           Statement s=con.createStatement();
           String r="insert into ToLoan values(0,0,0,0,0,0)";
           
           s.executeUpdate(r);
           s.close();
           PreparedStatement ps=con.prepareStatement("UPDATE ToLoan set 贷款人账号=?,贷款人姓名=?,贷款金额=?,申请日期=?,贷款时间=?,利率=? WHERE 贷款金额=0");
           Calendar c=Calendar.getInstance();
           String applytime=String.valueOf(c.get(Calendar.YEAR))+"-"+String.valueOf(c.get(Calendar.MONTH)+1)+"-"+String.valueOf(c.get(Calendar.DAY_OF_MONTH));
           ps.setString(1,account);
           ps.setString(2,name);
           ps.setDouble(3,money);
           ps.setString(4,applytime);
           ps.setInt(5,time);
           ps.setDouble(6,interest);
           ps.executeUpdate();
           ps.close();
           con.close();
           return "arrive";
       }
       catch(SQLException e)
       {
           try{
               con.close();
           }
           catch(SQLException sqle){
               System.out.println("SQLException:"+sqle.getMessage()+"\n"+"At BankThreadServer class applyLoan() method while con.close() is called.");
           }
           System.out.println("SQLException:"+e.getMessage()+"\n"+"At BankThreadServer class while applyLoan() method is called.");
           return "fail";
       }
   }
   
   public  String ask(String account)         //查询
    {
        connection();
        try{
            Statement s=con.createStatement();
            ResultSet rs=s.executeQuery("select * from Account");
            String name=null;
            String idcard=null;
            String email=null;
            String phoneNum=null;
            Double money=0.00;
            while(rs.next()){
                if(rs.getString("账号").equals(account)){
                    name=rs.getString("姓名");
                    idcard=rs.getString("身份证号码");
                    email=rs.getString("邮件地址");
                    phoneNum=rs.getString("固定电话");
                    money=rs.getDouble("余额");
                    break;
                }
            }
            String str="success+"+account+"+"+name+"+"
                    +idcard+"+"
                    +email+"+"
                    +phoneNum+"+"
                    +String.valueOf(money);
                    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -