📄 bankserver.java
字号:
/*2:17
* BankServer.java
*
* Created on 2007年9月3日, 下午4:11
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package bankserver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import java.io.IOException;
import java.util.Vector;
import java.util.StringTokenizer;
import java.util.Calendar;
import java.text.DecimalFormat;
import java.sql.ResultSet;
/**
*
* @author Administrator
*/
public class BankServer{
String ServerDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String ServerconURL="jdbc:odbc:Bank";
public Connection serverCon;
public static int PORT=3009;
public ServerSocket toClients;
public Vector onService=new Vector();
public boolean done=false;
public int visitors=0;
private DecimalFormat decimalformat=new DecimalFormat("##################0.00#");
public static final double INTEREST=0.005;
public String localIP;
private InetAddress inet;
public BankServer() { //加载jdbc-odbc桥驱动器
try{
Class.forName(ServerDriver);
}
catch(java.lang.ClassNotFoundException e){
System.out.println("forname: "+e.getMessage());
}
}
public void connection() //与数据库连接
{
try {
serverCon=DriverManager.getConnection(ServerconURL);
}catch(SQLException e)
{
System.out.println("SQLException: "+e.getMessage());
}
}
public String loan(String account,String name,double money,int time,double interest) //贷款
{
connection();
try{
//确定贷款
Statement s=serverCon.createStatement();
ResultSet rs=s.executeQuery("select * from Loan");
boolean exit=false;
while(rs.next()){
if(rs.getString("贷款人账号").equals(account)){
if(rs.getString("是否还款").equals("否")){
exit=true;
}
break;
}
}
if(exit) return "exit";
String r="insert into Loan values(0,0,0,0,0,0,0,0,0)";
s.executeUpdate(r);
s.close();
//记入贷款数据库
PreparedStatement ps=serverCon.prepareStatement("UPDATE Loan set 贷款人账号=?,贷款人姓名=?,贷款金额=?,贷款日期=?,还款日期=?,贷款时间=?,利率=?,是否还款=?, 编号=? WHERE 贷款金额=0");
Calendar c=Calendar.getInstance();
String ltime=String.valueOf(c.get(Calendar.YEAR))+"-"+String.valueOf(c.get(Calendar.MONTH)+1);
String ptime=String.valueOf(c.get(Calendar.YEAR)+time)+"-"+String.valueOf(c.get(Calendar.MONTH)+1);
ps.setString(1,account);
ps.setString(2,name);
ps.setDouble(3,money);
ps.setString(4,ltime);
ps.setString(5,ptime);
ps.setInt(6,time);
ps.setDouble(7,interest);
ps.setString(8,"否");
String str=String.valueOf(c.get(Calendar.YEAR))+String.valueOf(c.get(Calendar.MONTH))+String.valueOf(c.get(Calendar.DATE))+String.valueOf(c.get(Calendar.HOUR))+String.valueOf(c.get(Calendar.MINUTE));
ps.setString(9,str);
ps.executeUpdate();
ps.close();
serverCon.close();
return deposit(account,money);
}
catch(SQLException e){
try{
serverCon.close();
}
catch(SQLException sqle){
sqle.printStackTrace();
}
System.out.println(e.getMessage());
return "fail";
}
}
public String deposit(String account,double money) //存款
{
connection();
try{
Statement s=serverCon.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=serverCon.prepareStatement("UPDATE Account set 余额=?, 存款时间=? where 账号=?");
ps.setDouble(1,money);
ps.setString(2,newtime);
ps.setString(3,account);
ps.executeUpdate();
ps.close();
serverCon.close();
return "success";
}
catch(SQLException e) {
try{
serverCon.close();
}
catch(SQLException sqle){
//sqle.printStackTrace();
}
System.out.println("SQLException:"+e.getMessage()+"\n"+"At BankThreadServer class while deposit() is called.");
return "fail";
}
}
public void operate()throws IOException
{
toClients=new ServerSocket(PORT);
localIP=inet.getLocalHost().getHostAddress();
System.out.println("服务器已经启动.");
int customerNumber=1;
try{
while(!done){
Socket clientSocket=toClients.accept();
if(clientSocket!=null)
{
System.out.println("第"+customerNumber+"位客户连接上服务器..");
try{
new BankThreadServer(clientSocket,this);
}
catch(IOException ioe){
System.out.println("after new BankThreadServer"+ioe.getMessage());
}
customerNumber++;
}
}
}
finally{
toClients.close();
System.out.println("服务器关闭!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -