课程设计报告
课程名称:_面向对象基础及java语言课程设计
设计题目:宾馆客房管理系统的设计与实现
学院:信息科学与工程学院
专业:计算机科学与技术(软件外包)_ 姓名:杨金石王栋张树鹏___
学号:20131214157 20131214134 20131214180 班级:计软1301
指导教师:董立凯
二零一五年七月二十四日
一、设计内容及要求
宾馆客房管理系统主要设计了管理员登陆,查询客房信息,修改、添加客房信息,通过java与数据库的连接,实现后台调用数据。通过调用数据库中的ID和password 登陆管理系统,做出相应的处理。
二、开发环境
1.Eclipse(java环境开发)
2.JDK1.7(进行java程序的编译和运行)
3.MySQL绿色版(数据库储存)
三、设计思路
1.整体框架
客房管理系统
客房信息查询添加客房信息修改客房信息
2.数据库设计
本系统使用MySQL绿色版来存储数据,其中有一个数据库home,数据库中包含两张表:xx表主要记录客房的信息(房间号,房间类型,单价,入住姓名,身份证号码,房间状态),如图表1-1;id表中记录管理员的信息(ID,password),如图1-2。
表1-1 xx
表1-2 id
3.数据库与Eclipse连接
使用ODBC为数据库Student配置ODBC数据源,使应用程序可以访问数据库,进行应用程序和数据库之间的数据交互。
四、详细设计过程与分析
1.登陆界面
(1)首先由用户输入账户和密码,由系统读取账号,并根据账号在数据库中查询相应的密码;
(2)根据数据库查询到的密码,与用户输入的密码进行匹配,如果相同,单击确定则可以进入功能界面。
2.功能界面
在功能界面,实现三个功能,分别是:查询客户信息,添加客户信息,修改客户信息。每个按钮添加单击事件。响应后进入相应的功能界面。
3.客房信息查询
进入客房信息查询界面,输入房间号,单击查询按钮,做出相应的事件处理事件,从home数据库xx表中读取房间类型,单价,入住姓名,身份证号码,入住状态。如果入住状态为未入住,则入住姓名,身份证号码为空。客房信息查询界面上方有客房信息查询、添加客房信息、修改客房信息三个单击按钮,点击可以直接实现事件响应。
4.添加客房信息
进入客房信息查询界面,界面上方有客房信息查询、添加客房信息、修改客房信息三个单击按钮,点击可以直接实现事件响应。添加客房信息中所需录入的客房信息,及其文本区域。当用户向文本区域录入数据完成单击添加时,响应增加事件。首先,进行数据库的连接,创建执行SQL的语句对象,执行SQL语句,将数据插入到数据库,关闭连接。添加完成后,显示“添加成功”确认对话框。重置按钮功能为重置各文本框内的内容,使清空文本框更加方便。
5.修改客房信息
进入修改客房信息界面,界面上方有客房信息查询、添加客房信息、修改客房信息三个单击按钮,点击可以直接实现事件响应。修改客房信息录入到文本区域,当用户向文本区域录入数据完成单击添加时,响应增加事件。首先,进行数据库的连接,创建执行SQL的语句对象,执行SQL语句,将数据插入到数据库,关闭连接。修改完成后,显示“修改成功”确认对话框。重置按钮功能为重置各文本框内的内容,使清空文本框更加方便。
6.数据库的建立
使用MySQL绿色版建立home数据库,在数据库中建立id表和xx表。
五、源代码
1.登陆界面源代码
package KF;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class HoteLand extends JFrame implements ActionListener{ private JPanel panel1,panel2,panel3,panel4,panel5;
private JLabel label1,label2,label3;
private JTextField text1;
private JTextField text2;
private JButton button1,button2;
public HoteLand()
{
super("客房系统登录");
this.setLocation(400,200);
this.setSize(300,200);
this.setBackground(java.awt.Color.LIGHT_GRAY);
//this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.getContentPane().setLayout(new BorderLayout());
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
panel4=new JPanel();
panel5=new JPanel();
panel3.setLayout(new java.awt.FlowLayout(FlowLayout.CENTER));
label1=new JLabel("————客房管理系统————");
label2=new JLabel("账号");
label3=new JLabel("密码");
text1=new JTextField(10);
text2=new JPasswordField(10);
button1=new JButton("确定");
button1.addActionListener(this);
button2=new JButton("退出");
button2.addActionListener(this);
panel4.add(label2);
panel4.add(text1);
panel5.add(label3);
panel5.add(text2);
panel1.add(panel4);
panel1.add(panel5);
panel2.add(button1);
panel2.add(button2);
panel3.add(label1);
this.getContentPane().add(panel3,"North");
this.getContentPane().add(panel1,"Center");
this.getContentPane().add(panel2,"South");
this.setVisible(true);
}
public static void main(String[] args){
new HoteLand();
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getSource()==button1){
DB db=new DB();//链接数据库
String sql="SELECT *FROM id WHERE ID='"+text1.getText()+"'";
ArrayList
if(list.get(0)[1].equals(text2.getText())){
new Jiemian();
this.dispose();
}else{
//JOptionPane.showMessageDialog(this,"\""+text1.getText()+"\"账号错误,请重新输入!");
JOptionPane.showMessageDialog(this,"\""+text2.getText()+"\"密码错误,请重新输入!");
text2.setText("");
text1.setText("");
}
}
if(arg0.getSource()==button2){
//text1.setText(null);
//text2.setText(null);
System.exit(0);
}
}
}
2.功能界面
package KF;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Jiemian extends JFrame implements ActionListener{ private JLabel label1,label2,label3;
private JPanel panel1,panel2,panel3,panel4,panel5;
private JButton button1,button2,button3;
public Jiemian()
{
this.setLocation(400,200);
this.setSize(400,130);
this.setBackground(java.awt.Color.LIGHT_GRAY);
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
panel4=new JPanel();
panel5=new JPanel();
button1=new JButton("客房信息查询");
button1.addActionListener(this);
button2=new JButton("添加客房信息");
button2.addActionListener(this);
button3=new JButton("修改客房信息");
button3.addActionListener(this);
label2=new JLabel("--欢迎使用客房管理系统--");
panel1.add(button1);
panel1.add(button2);
panel1.add(button3);
panel2.add(label2);
this.getContentPane().add(panel2,"South");
this.getContentPane().add(panel1,"Center");
this.getContentPane().add(panel3,"North");
this.setVisible(true);
}
public static void main(String[] args){
new Jiemian();
}
@Override
public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub
if(arg0.getSource()==button1){
new Chaxu();
this.dispose();
}
if(arg0.getSource()==button2){
new AddRooms();
this.dispose();
}
if(arg0.getSource()==button3){
new Xgkfxx();
this.dispose();
}
}
}
3.添加客房信息界面
package KF;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class AddRooms extends JFrame implements ActionListener{ private JLabel label1,label2,label3,label4,label5,label6,label7;
private JPanel
panel1,panel2,panel3,panel4,panel5,panel6,panel7,panel8,panel9;
private JButton button1,button2,button3,button4,button5;
private JTextField a,b,c,d,e,f;
private JComboBox> lx,dj,zt;
@SuppressWarnings({ "unchecked", "rawtypes" })
public AddRooms(){
super("客房管理系统");
this.setLocation(400,200);
this.setSize(420,400);
this.setBackground(java.awt.Color.LIGHT_GRAY);
this.getContentPane().setLayout(new FlowLayout(1));
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
panel4=new JPanel();
panel5=new JPanel();
panel6=new JPanel();
panel7=new JPanel();
panel8=new JPanel();
panel9=new JPanel();
button1=new JButton("客房信息查询");
button1.addActionListener(this);
button2=new JButton("添加客房信息");
button2.addActionListener(this);
button3=new JButton("修改客房信息");
button3.addActionListener(this);
label1=new JLabel(" 添加客房信息");
label2=new JLabel("房间号:");
a=new JTextField(25);
label3=new JLabel("房间类型:");
//b=new JTextField(25);
String t1[]={"大床房 ","标准间 ","家庭房"};
lx=new JComboBox(t1);
lx.setPreferredSize(new Dimension(280,25));
label4=new JLabel("单价:");
String t2[]={"148","168","256"};
dj=new JComboBox(t2);
dj.setPreferredSize(new Dimension(280,25));
label5=new JLabel("入住姓名:");
d=new JTextField(25);
label6=new JLabel("身份证号:");
e=new JTextField(25);
label7=new JLabel("状态:");
String t3[]={"入住 ","未入住 "};
zt=new JComboBox(t3);
zt.setPreferredSize(new Dimension(280,25));
button4=new JButton("添加");
button4.addActionListener(this);
button5=new JButton("重置");
button5.addActionListener(this);
panel1.add(button1);
panel1.add(button2);
panel1.add(button3);
panel2.add(label1);
panel3.add(label2);
panel3.add(a);
panel4.add(label3);
panel4.add(lx);
panel5.add(label4);
panel5.add(dj);
panel6.add(label5);
panel6.add(d);
panel7.add(label6);
panel7.add(e);
panel9.add(label7);
panel9.add(zt);
panel8.add(button4);
panel8.add(button5);
this.getContentPane().add(panel1,"Center");
this.getContentPane().add(panel2,"Center");
this.getContentPane().add(panel3,"Center");
this.getContentPane().add(panel4,"Center");
this.getContentPane().add(panel5,"Center");
this.getContentPane().add(panel6,"Center");
this.getContentPane().add(panel7,"Center");
this.getContentPane().add(panel9,"Center");
this.getContentPane().add(panel8,"Center");
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getSource()==button1){
new Chaxu();
this.dispose();
}
if(arg0.getSource()==button2){
new AddRooms();
this.dispose();
}
if(arg0.getSource()==button3){
new Xgkfxx();
this.dispose();
}
if(arg0.getSource()==button4){
//System.out.println(lx.getSelectedIndex());
DB db=new DB();//链接数据库
String sql="INSERT INTO xx VALUES
("+a.getText()+",'"+lx.getSelectedItem()+"',"+dj.getSelectedItem()+",'"+ d.getText()+"','"+e.getText()+"',"+"'"+zt.getSelectedItem()+"'"+")";
int n=db.update(sql);
if(n>0)
{
JOptionPane.showMessageDialog(this,"添加成功!");
a.setText("");
lx.getSelectedIndex();
dj.getSelectedIndex();
d.setText("");
e.setText("");
zt.getSelectedIndex();
}
}
if(arg0.getSource()==button5){
a.setText("");
b.setText("");
c.setText("");
d.setText("");
e.setText("");
}
}
public static void main(String[] args){
new AddRooms();
}
4.}客房信息查询
package KF;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Chaxu extends JFrame implements ActionListener{ private JLabel label1,label2,label3,label4,label5,label6,label7;
Private JPanel panel1,panel2,panel3,panel4,panel5,panel6,panel7,panel8;
private JButton button1,button2,button3,button4,button5;
private JTextField a,b,c,e,d,f;
Statement sqll;
public Chaxu(){
super("欢迎使用客房管理系统");
this.setLocation(400,200);
this.setSize(420,380);
this.setBackground(java.awt.Color.LIGHT_GRAY);
this.getContentPane().setLayout(new FlowLayout(1));
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
panel4=new JPanel();
panel5=new JPanel();
panel6=new JPanel();
panel7=new JPanel();
panel8=new JPanel();
button1=new JButton("客房信息查询");
button1.addActionListener(this);
button2=new JButton("添加客房信息");
button2.addActionListener(this);
button3=new JButton("修改客房信息");
button3.addActionListener(this);
label1=new JLabel(" 查询客房信息 ");
label2=new JLabel("房间号:");
a=new JTextField(19);
button4=new JButton("查询");
button4.addActionListener(this);
label3=new JLabel("房间类型:");
b=new JTextField(25);
label4=new JLabel("单价:");
c=new JTextField(25);
label5=new JLabel("入住姓名:");
d=new JTextField(25);
label6=new JLabel("身份证号:");
e=new JTextField(25);
label7=new JLabel("房间状态:");
f=new JTextField(25);
button5=new JButton("返回");
button5.addActionListener(this);
panel1.add(button1);
panel1.add(button2);
panel1.add(button3);
panel2.add(label2);
panel2.add(a);
panel2.add(button4);
panel3.add(label3);
panel3.add(b);
panel4.add(label4);
panel4.add(c);
panel5.add(label5);
panel5.add(d);
panel6.add(label6);
panel6.add(e);
panel8.add(label7);
panel8.add(f);
panel7.add(button5);
this.getContentPane().add(panel1,"Center");
this.getContentPane().add(label1,"Center");
this.getContentPane().add(panel2,"Center");
this.getContentPane().add(panel3,"Center");
this.getContentPane().add(panel4,"Center");
this.getContentPane().add(panel5,"Center");
this.getContentPane().add(panel6,"Center");
this.getContentPane().add(panel8,"Center");
this.getContentPane().add(panel7,"Center");
this.setVisible(true);
}
public static void main(String[] args){
new Chaxu();
}
@Override
public void actionPerformed(ActionEvent e1) {
// TODO Auto-generated method stub
if(e1.getSource()==button1){
new Chaxu();
this.dispose();
}
if(e1.getSource()==button2){
new AddRooms();
this.dispose();
}
if(e1.getSource()==button3){
new Xgkfxx();
this.dispose();
}
if(e1.getSource()==button4){
DB db=new DB();//链接数据库
String sql="SELECT 房间类型,单价,入住姓名,身份证号码,房间状态FROM xx WHERE 房间号="+a.getText();
ArrayList
b.setText(list.get(0)[0]);
c.setText(list.get(0)[1]);
d.setText(list.get(0)[2]);
e.setText(list.get(0)[3]);
f.setText(list.get(0)[4]);
}
if(e1.getSource()==button5){
new Jiemian();
this.dispose();
}
}
}
5.修改客房信息
package KF;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Xgkfxx extends JFrame implements ActionListener{ private JLabel label1,label2,label3,label4,label5,label6,label7;
private JPanel panel1,panel2,panel3,panel4,panel5,panel6,panel7,panel8,panel9;
private JButton button1,button2,button3,button4,button5;
private JTextField a,b,c,d,e,f;
public Xgkfxx(){
super("客房管理系统");
this.setLocation(400,200);
this.setSize(420,380);
this.setBackground(java.awt.Color.LIGHT_GRAY);
this.getContentPane().setLayout(new FlowLayout(1));
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
panel4=new JPanel();
panel5=new JPanel();
panel6=new JPanel();
panel7=new JPanel();
panel8=new JPanel();
panel9=new JPanel();
button1=new JButton("客房信息查询");
button1.addActionListener(this);
button2=new JButton("添加客房信息");
button2.addActionListener(this);
button3=new JButton("修改客房信息");
button3.addActionListener(this);
label1=new JLabel(" 修改客房信息");
label2=new JLabel("房间号:");
a=new JTextField(25);
label3=new JLabel("房间类型:");
b=new JTextField(25);
label4=new JLabel("单价:");
c=new JTextField(25);
label5=new JLabel("入住姓名:");
d=new JTextField(25);
label6=new JLabel("身份证号:");
e=new JTextField(25);
label7=new JLabel("状态:");
f=new JTextField(25);
button4=new JButton("修改");
button4.addActionListener(this);
button5=new JButton("重置");
button5.addActionListener(this);
panel1.add(button1);
panel1.add(button2);
panel1.add(button3);
panel2.add(label1);
panel3.add(label2);
panel3.add(a);
panel4.add(label3);
panel4.add(b);
panel5.add(label4);
panel5.add(c);
panel6.add(label5);
panel6.add(d);
panel7.add(label6);
panel7.add(e);
panel9.add(label7);
panel9.add(f);
panel8.add(button4);
panel8.add(button5);
this.getContentPane().add(panel1,"Center"); this.getContentPane().add(panel2,"Center"); this.getContentPane().add(panel3,"Center"); this.getContentPane().add(panel4,"Center"); this.getContentPane().add(panel5,"Center"); this.getContentPane().add(panel6,"Center"); this.getContentPane().add(panel7,"Center"); this.getContentPane().add(panel9,"Center"); this.getContentPane().add(panel8,"Center"); this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub
if(arg0.getSource()==button1){
new Chaxu();
this.dispose();
}
if(arg0.getSource()==button2){
new AddRooms();
this.dispose();
}
if(arg0.getSource()==button3){
new Xgkfxx();
this.dispose();
}
if(arg0.getSource()==button4){
if(arg0.getSource()==button4){
DB db=new DB();//链接数据库
String sql="update xx set 房间类型= '"+b.getText()+"',单价="+c.getText()+",入住姓名='"+d.getText()+"',身份证号码="+e.getText()+",房间状态='"+f.getText()+"' where 房间号="+a.getText();
int n=db.update(sql);
if(n>0)
{
JOptionPane.showMessageDialog(this,"修改成功!");
a.setText("");
b.setText("");
c.setText("");
d.setText("");
e.setText("");
f.setText("");
}
}
if(arg0.getSource()==button5){
a.setText("");
b.setText("");
c.setText("");
d.setText("");
e.setText("");
f.setText("");
}
}
}
public static void main(String[] args){
new Xgkfxx();
}
}
6.连接数据库
package KF;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
public class DB {
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
public void getConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");//加载驱动
conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/home","root","m ysql");//获取连接
stmt = conn.createStatement();//创建语句对象
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int update(String sql){
int num = -1;
getConnection();
try {
num = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally{
close();
}
return num;
}
public static void main(String[] args) {
DB db = new DB();
ArrayList
for (int i = 0; i < arr.size(); i++) {
String[] temp = arr.get(i);
for(String t : temp){
System.out.print(t+" ");
}
System.out.println();
}
}
public ArrayList
getConnection();
ArrayList
try {
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int num = rsmd.getColumnCount();
while(rs.next()){
String[] arr = new String[num];
for (int i = 1; i <=num; i++) {
String temp = rs.getString(i);
arr[i-1] = temp;
}
rsList.add(arr);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
close();
}
return rsList;
}
// 编写程序:
// 创建一个类DBTools,在DBTools中创建一个方法find,find方法用于对数据库进行查询操作,现在要求将结果集封装成数组线性表嵌套数组的形式:
// ArrayList
// 其中: String[] 用于存储一行记录的所有字段(的值)
// rsList存储所有的数组(String[]),即记录的总数
public ArrayList
ArrayList
try {
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();//获取结果集结构对象
while(rs.next()){
HashMap
for (int i = 1; i <=rsmd.getColumnCount(); i++) {
String key = rsmd.getColumnName(i);
String value = rs.getString(i);
hm.put(key, value);
alist.add(hm);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
close();
}
return alist;
}
public ArrayList
String newSql = sql+" limit "+(pageNum-1)*pageCount+","+pageCount;
return arrQuery(newSql);
}
public void close(){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {