📄 bankthreadserver.java
字号:
/*
* 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 + -