📄 peninsula.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.util.*;
import java.io.*;
import java.sql.*;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class Peninsula extends JFrame
{
JLabel lab1 = new JLabel("Users from Broker Online");
JLabel lab2 = new JLabel("Message");
JTextArea ta = new JTextArea(9,30);
java.awt.List list = new java.awt.List(9);
JTextField tf = new JTextField(24);
//JButton b = new JButton("Send");
JScrollPane sp = new JScrollPane();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
ServerSocket serverSocket;
Socket socket;
ArrayList array = new ArrayList(); // the connected client list
int connect;
public Peninsula()
{
super("Peninsula Hotel");
sp.getViewport().add(ta);
p1.setLayout(new BorderLayout());
p3.add(lab1);
p1.add(p3,BorderLayout.NORTH);
p1.add(list,BorderLayout.SOUTH);
p2.add(lab2);
p2.add(tf);
//p2.add(b);
getContentPane().add(sp,BorderLayout.NORTH);
getContentPane().add(p1,BorderLayout.CENTER);
getContentPane().add(p2,BorderLayout.SOUTH);
pack();
//display the broker server in the center of the screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if(frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
if(frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
setLocation((screenSize.width - frameSize.width)/2,
(screenSize.height - frameSize.height)/2);
//add button to handle events
//b.addActionListener(this);
setSize(450,450);
setVisible(true);
setResizable(false);
//server starts to listen ports
if(serverSocket == null)
{
try
{
serverSocket = new ServerSocket(5001);
ta.append("SYSTEM:" + " Peninsula Hotel Server "
+ " started successfully......\n");
}
catch(IOException ex)
{
ta.append("SYSTEM:"+" Peninsula Hotel Server "
+" started unsuccessfully.....\n");
}
}
else
{
ta.append("SYSTEM:"+" Peninsula Hotel Server "
+" started successfully......\n");
}
////////////////////////////////////////////////////
while(true)
{
if(array.size() <= 10)
{
try
{
socket = serverSocket.accept();
ta.append("One Client login successfully\n");
}
catch(IOException ex)
{
ta.append("SYSTEM: "+ex+"\n");
}
/////////////////////////////////////////////////////
//Create client thread,one thread for one client only
Client c = new Client(socket); //Client class extends thread
array.add(c);
c.start();
ta.append("Broker thread ready to run\n");
/////////////////////////////////////////////////////
}
else
{
ta.append("SYSTEM:"+"Peninsula Hotel"
+" has been fully connected,please try later!\n");
}
}
}
////////////////////////////////////////////////////////////////////////////////
class Client extends Thread
{
String brokerName;
String ip;
String ipAddress;
Socket socket;
BufferedReader br;
PrintStream ps;
//List<String> rs; // for containing the data retrived from the database
public Client(Socket s)
{
try
{ socket = s;
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
ps = new PrintStream(s.getOutputStream());
ta.append("socket established"+"\n");
}
catch (IOException ex)
{
ta.append("SYSTEM: "+ex+"\n");
}
}
public void run()
{
ta.append("Broker thread starts to run\n");
String info;
try
{
ta.append("Broker thread ready to read info\n");
info = br.readLine();
ta.append ("information read:\n");
ta.append(info+"\n");
StringTokenizer st = new StringTokenizer(info, ":");
String keyword = st.nextToken();
if(keyword.equals("BOOK"))
{
String name = st.nextToken();
String phoneNumber = st.nextToken();
String creditNumber = st.nextToken();
String roomName = st.nextToken();
String checkinDate = st.nextToken();
String checkoutDate = st.nextToken();
int phone_number = Integer.parseInt(phoneNumber);
int credit_number = Integer.parseInt(creditNumber);
Date checkin_date = java.sql.Date.valueOf(checkinDate);
Date checkout_date = java.sql.Date.valueOf(checkoutDate);
String result = InsertBooking(name,phone_number,credit_number,roomName,checkin_date,checkout_date);
ps.println(new StringBuffer(result));
ps.flush();
ta.append(result);
}
if(keyword.equals("TYPE"))
{
List<String> roomType = getRoomType();
Iterator it = roomType.iterator();
while(it.hasNext())
{
ps.println(new StringBuffer(" " + it.next()));
ps.flush();
}
socket.close();
ta.append ("Room Type retrive successful!\n");
}
if(keyword.equals ("SINGLE") || keyword.equals ("DOUBLE") || keyword.equals ("KING") || keyword.equals ("SUITE"))
{
List<String> emptyRoom = getEmptyRoom(keyword);
Iterator it = emptyRoom.iterator();
while(it.hasNext())
{
ps.println(new StringBuffer(" " + it.next()));
ps.flush();
}
socket.close();
ta.append ("Empty room retrive successful!\n");
}
if(keyword.equals("AVAILABILITY"))
{
String roomType = st.nextToken();
String checkinDate = st.nextToken();
String checkoutDate = st.nextToken();
Date checkin_date = java.sql.Date.valueOf(checkinDate);
Date checkout_date = java.sql.Date.valueOf(checkoutDate);
String result =checkAvailability(roomType,checkin_date,checkout_date);
ps.println(new StringBuffer(result));
ps.flush();
ta.append(result);
}
}
catch (IOException ex)
{
ta.append("SYSTEM:"+ex+"\n");
}
ta.append("Client thread stop to run\n");
}
public void send(StringBuffer msg)
{
ps.println(msg);
ps.flush();
}
}
public synchronized void sendToClients(StringBuffer msg) //send messages to all of the hotels
{
for(int i=0;i<array.size();i++)
{
Client c = (Client)array.get(i);
c.send(msg);
}
}
public synchronized void sendToClient(StringBuffer msg,String s) //send message to single hotels
{
for(int i=0;i<array.size();i++)
{
Client c = (Client)array.get(i);
if(c.brokerName.equals(s))
{
c.send(msg);
break;
}
}
}
public static void main(String[] args)
{
Peninsula app = new Peninsula();
}
public void refreshClientList()
{
StringBuffer sb = new StringBuffer("PEOPLE");
for(int i=0;i<array.size();i++)
{
Client c =(Client)array.get(i);
sb.append(":"+c.brokerName);
}
sendToClients(sb);
}
/////////////////////////////////////////////
//database methods
public ArrayList<String> getRoomType()
{
final String sql = "SELECT TYPENAME,TYPEPRICE FROM TYPE";
final ArrayList<String> result = new ArrayList();
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=melbourne_peninsula.mdb";//此为NO-DSN方式
//String dburl ="jdbc:odbc:odbcName";//此为ODBC连接方式
connection=DriverManager.getConnection(dburl);
statement=connection.createStatement();
resultSet=statement.executeQuery(sql);
while(resultSet.next())
{
result.add(resultSet.getString("TYPENAME"));
result.add(resultSet.getString("TYPEPRICE"));
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
if (connection != null)
{
try
{
connection.close();
}
catch (Exception e)
{
// do nothing
}
}
if (statement != null)
{
try
{
statement.close();
}
catch (Exception e)
{
// do nothing
}
}
if (resultSet != null)
{
try
{
resultSet.close();
}
catch (Exception e)
{
// do nothing
}
}
}
return result;
}
public ArrayList<String> getEmptyRoom(String roomType)
{
final String sql = "SELECT ROOM_NAME FROM ROOM " +
"WHERE ROOM_STATUS = 0 " +
"AND ROOM_TYPE =?";
final ArrayList<String> result = new ArrayList();
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=melbourne_peninsula.mdb";//此为NO-DSN方式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -