宾馆客房管理系统的设计与实现
课程设计(论文)任务书
软件 学院 软件工程 专业 2016 -07 班
一、课程设计(论文)题目 综合课程设计2
二、课程设计(论文)工作自 2018 年 1月 1 日起至 2018 年 1月 12 日止。
三、课程设计(论文) 地点:软件工程实训中心一部
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)使学生熟练掌握数据库基本原理;
(2)使学生熟练掌握数据库的分析和设计能力;
(3)培养学生熟练使用常见的数据库管理系统;
(4)培养学生使用Java语言进行面向对象设计的能力;
(5)培养学生熟练使用Java语言进行数据库应用程序设计的能力;
(6)提高学生的科技论文写作能力。
2.基本要求:
课程设计题目:
设计主要内容:
3.课程设计论文编写要求
(1)要按照书稿的规格打印誊写课设报告;
(2)报告分为封面、任务书(本文档)、正文、课程设计体会和参考文献四部分;
学生签名:
2018年1月 1日
课程设计(论文)评审意见
(1)题目分析 (20分):优( )、良( )、中( )、一般( )、差( );
(2)流程分析 (30分):优( )、良( )、中( )、一般( )、差( );
(3)数据定义 (30分):优( )、良( )、中( )、一般( )、差( );
(4)代码编写 (10分):优( )、良( )、中( )、一般( )、差( );
(5)创新能力 (10分):优( )、良( )、中( )、一般( )、差( );
(6)格式规范性、设计态度及考勤是否降等级:是( )、否( )
评阅人: 职称:讲师
2018年 1 月 12 日
标题:宾馆客房管理系统的设计与实现
一、 数据设计
1. 实体
宾馆客房管理系统设计中用到的实体如下:
1) 实体1:用户信息
属性1:用户编号
属性2:用户姓名
属性3:密码
属性4:性别(0-男,1-女)
属性5:Email地址
属性6:通讯地址
属性7:联系电话
属性8:所在部门
属性9:用户类型(1-酒店管理员,2-前台服务员)
2) 实体2:客户信息
l 属性1: 身份证号
l 属性2: 客户姓名
l 属性3: 联系电话
3) 实体3:客房类型
l 属性1:客房类型编号
l 属性2:类型名称
l 属性3:客房面积
l 属性4:配置床位
l 属性5:客房价格
l 属性6:配置空调(0-是,1-否)
l 属性7:配置电视(0-是,1-否)
4) 实体4:客房信息
l 属性1: 客房号
l 属性2:客房类型编号
l 属性3:客房位置
l 属性4:描述
5) 实体5:客房状态
l 属性1:客房编号
l 属性2:状态(1-空房,2-入住)
6) 实体6:客房业务
l 属性1:客房编号
l 属性2:入住时间
l 属性3:客户身份证号
l 属性4:备注
7) 实体7:业务记录
l 属性1:入住时间
l 属性2:退房时间
l 属性3:客房编号
l 属性4:金额
l 属性5:客户身份证号
l 属性6:客户姓名
l 属性7:客户电话
l 属性8:备注
2. 联系
宾馆客房管理系统设计中实体之间的联系如下(E-R图):
二、 数据库设计
1. 关系模式
宾馆客房管理设计中的关系模式如下:
客户(客户编号,姓名,电话,E-mail)。关系的主键:客户编号;外键:无
用户(用户编号,用户姓名,密码,性别(0-男,1-女),Email地址,通讯地址,联系电话,所在部门,用户类型(1-酒店管理员,2-前台服务员)。
关系主键:用户编号;外键:无
客户信息(身份证号,客户姓名,联系电话)
关系主键:身份证号;外键:客户姓名
客房类型(客房类型编号,类型名称,客房面积,配置床位,客房价格,配置空调 (0-是,1-否),配置电视(0-是,1-否))
关系主键:客房类型编号;外键:类型名称
客房信息(客房号,客房类型编号,客房位置,描述)
关系主键:客房号;外键:客房类型编号
客房状态(客房编号,状态(1-空房,2-入住))
关系主键:客房编号;外键:无。
客房业务(客房编号,入住时间客户身份证号,备注)
关系主键:客房编号;外键:入住身份证号
业务记录(入住时间,退房时间,客房编号,金额,客户身份证号,客,姓名,客户电话,备注)
关系主键:入住时间;外键:客房编号,客户身份证,姓名,电话。
2. 数据表
本设计中创建的数据库名为:
数据表分别为(将数据库中设计的数据表表截图至此)。
表1:用户信息
表2:客户信息
表3:客房信息类型表
表4:客房信息表
表5:客房状态表
表6:客房业绩表
表7:业务记录表
数据库关系图为:
三、 数据库实现
设计中实现数据库操作的SQL 语句如下:
新建数据表:
1)用户信息数据建表
1 CREATE TABLE [dbo].weiwei( UserId Int 用户编号 2 Name Varchar(50) 用户姓名 3 Password Varchar(50) 密码 4 Gender Int 性别(0-男,1-女) 5 Email Varchar(50) Email地址 6 Address Varchar(50) 通讯地址 7 Telephone Varchar(50) 联系电话 8 Department Varchar(50) 所在部门 9 10 Type 11 Int 用户类型(1-酒店管理员,2-前台服务员
2)客户信息数据建表
1 CREATE TABLE [dbo]. CustomersInfo ( CIdentityId nVarchar(50) 身份证号2 CName nVarchar(50) 客户姓名3 CPhone nVarchar(50) 联系电话)
3)客户类型数据建表
1 CREATE TABLE [dbo]. RoomCategory ( RCategoryId Int 客房类型编号2 Name nVarchar(50) 类型名称History3 Area Float 客房面积4 BedNum Int 配置床位5 Price Money 客房价格6 AirCondition Int 配置空调(0-是,1-否)7 TV Int 配置电视(0-是,1-否)8 9 )
4)业务记录数据建表
1 CREATE TABLE [dbo]. History ( BeginTime DateTime 入住时间2 EndTime DateTime 退房时间3 RoomId Int 客房编号4 TotalPrice Money 金额5 CIdentityId nVarchar(50) 客户身份证号6 CName nVarchar(50) 客户姓名7 CPhone nVarchar(50) 客户电话8 Remarks nVarchar(50) 备注
5)客房信息表
1 CREATE TABLE [dbo].RomsInfo (Room Int 客房号2 Rcategoryld Int 客房编号3 RPostition nvarchar(50) 客房位置4 5 Description nvarchar(50) 描述
6)客房状态
1 CREATE TABLE [dbo].RoomStatus (Roomld Int 客房编号2 3 Status Int 状态)
7)客房业务表
1 CREATE TABLE [dbo].RoomOPeration (Roomld Int 客房编号2 3 BeginTime DateTime 入住时间4 5 CIdentityId nVarchar(50) 客户身份证号
二、查询
1)业务记录增加,删除修改操作
插入:
1 INSERT2 3 INTO history(Roomld,Cname)4 5 Values('223456’,’345’)
删除:
1 DELETE 2 3 FROM history 4 5 WHERE Roomld=’57’ 6 7 修改:UPDATE history 8 9 SET Cname=’456’10 11 WHERE Roomld=’5678’
2)用户编号查询:
1 SELECT userid2 3 From usersinfo4 5 Where Gender=’女’
3)客房类型查询
1 select *2 3 from view_1 where 客房类型 in";4 5 where RCategoryld='123’)
4)客房信息查询
select *
from view_1 where 客房信息 in";
where Roomld='063’)
5)客房状态查询
1 select *2 3 from view_1 where 客房状态 in";4 5 where Roomld='723’)
6)客房业务表查询
1 select *2 3 from view_1 where 客房业务 in";4 5 where Roomld='793’)
7)客户信息查询
1 select * 2 3 from Customersinfo
四、 程序设计
1. 类
设计中定义的Java类如下:
1) weiwei类,表示设计中所有的客户信息类,连接数据库。
2) load类,表示设计中的客房管理,是weiwei的子类。
3) AddRooms类,表示设计中的客房管理,是weiwei的子类。
4) UseOfRooms类,表示设计中的客户,是weiwei的子类。
5) CustomerInformation类,表示设计中的员工信息,是weiwei的子类。
6) CheckStaff类,表示设计中的客户,是weiwei的子类。
2. 类设计
1)weiwei类
1 public class weiwei 2 3 { 4 5 private TAdminDAO adminDAO; 6 7 private TRenyuanDAO renyuanDAO; 8 9 public TAdminDAO getAdminDAO() 10 11 { 12 13 return adminDAO; 14 15 } 16 17 public void setAdminDAO(TAdminDAO adminDAO) 18 19 { 20 21 this.adminDAO = adminDAO; 22 23 } 24 25 26 27 public TRenyuanDAO getRenyuanDAO() 28 29 { 30 31 return renyuanDAO; 32 33 } 34 35 public void setRenyuanDAO(TRenyuanDAO renyuanDAO) 36 37 { 38 39 this.renyuanDAO = renyuanDAO; 40 41 } 42 43 public String login(String userName,String userPw,int userType) 44 45 { 46 47 System.out.println("userType"+userType); 48 49 try 50 51 { 52 53 Thread.sleep(700); 54 55 } catch (InterruptedException e) 56 57 { 58 59 // TODO Auto-generated catch block 60 61 e.printStackTrace(); 62 63 } 64 65 66 67 String result="no"; 68 69 70 71 if(userType==0)//系统管理员登陆 72 73 { 74 75 String sql="from TAdmin where userName=? and userPw=?"; 76 77 Object[] con={userName,userPw}; 78 79 List adminList=adminDAO.getHibernateTemplate().find(sql,con); 80 81 if(adminList.size()==0) 82 83 { 84 85 result="no"; 86 87 } 88 89 else 90 91 { 92 93 WebContext ctx = WebContextFactory.get(); 94 95 HttpSession session=ctx.getSession(); 96 97 TAdmin admin=(TAdmin)adminList.get(0); 98 99 session.setAttribute("userType", 0);100 101 session.setAttribute("admin", admin);102 103 result="yes";104 105 }106 107 }108 109 if(userType==1)110 111 {112 113 String sql="from TRenyuan where gonghao=? and loginpw=? and del='no'";114 115 Object[] con={userName.trim(),userPw.trim()};116 117 List renyuanList=renyuanDAO.getHibernateTemplate().find(sql,con);118 119 if(renyuanList.size()==0)120 121 {122 123 result="no";124 125 }126 127 else128 129 {130 131 WebContext ctx = WebContextFactory.get();132 133 HttpSession session=ctx.getSession();134 135 TRenyuan renyuan=(TRenyuan)renyuanList.get(0);136 137 session.setAttribute("userType", 1);138 139 session.setAttribute("renyuan", renyuan);140 141 result="yes";142 143 }144 145 }146 147 if(userType==2)148 149 {150 151 152 153 }154 155 return result;156 157 }158 159 160 161 public String adminPwEdit(String userPwNew)162 163 {164 165 System.out.println("DDDD");166 167 try168 169 {170 171 Thread.sleep(700);172 173 }174 175 catch (InterruptedException e)176 177 {178 179 // TODO Auto-generated catch block180 181 e.printStackTrace();182 183 }184 185 WebContext ctx = WebContextFactory.get();186 187 HttpSession session=ctx.getSession();188 189 190 191 TAdmin admin=(TAdmin)session.getAttribute("admin");192 193 admin.setUserPw(userPwNew);194 195 196 197 adminDAO.getHibernateTemplate().update(admin);198 199 session.setAttribute("admin", admin);200 201 202 203 return "yes";204 205 }206 207 208 209 }210 211 212 213 2) load 类214 215 public class load extends JFrame implements ActionListener {216 217 private boolean boo1=false,boo2=false;218 219 int Type=0;220 221 public JTextField []t ={new JTextField("用户名:",8),new JTextField(27),222 223 new JTextField("密码:",8),new JPasswordField(27),224 225 new JTextField("宾馆客房管理系统登陆界面--(设计人员:陈其巍)",36),226 227 new JTextField("后台技术:应用数据库加密技术--安全保护你的信息!请放心使用!",36),228 229 new JTextField("功能:管理宾馆客房!",36)};230 231 public JButton []b={new JButton("登陆"),new JButton("退出")};232 233 ImageIcon ic=new ImageIcon(HoteLand.class.getResource("/百吉星级酒店.jpg"));234 235 JFrame app;236 237 Statement statement;238 239 //构造方法240 241 public weiwei(){242 243 app= new JFrame("--宾馆客房管理系统登陆界面--");244 245 app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);246 247 app.setSize(438,583);248 249 app.setResizable(false);250 251 Container c=app.getContentPane();252 253 c.setLayout(new FlowLayout());254 255 JLabel aLabel=new JLabel(ic,JLabel.LEFT);256 257 t[0].setFont(new Font("TimesRoman",Font.BOLD,13));258 259 t[0].setForeground(Color.red);260 261 t[0].setEditable(false);262 263 t[2].setFont(new Font("TimesRoman",Font.BOLD,13));264 265 t[2].setForeground(Color.red);266 267 t[2].setEditable(false);268 269 for(int i=0;i<4;i++)270 271 c.add(t[i]);272 273 c.add(b[0]);274 275 c.add(b[1]);276 277 for(int j=4;j<7;j++)278 279 {280 281 c.add(t[j]);282 283 t[j].setFont(new Font("TimesRoman",Font.BOLD,13));284 285 t[j].setForeground(Color.blue);286 287 t[j].setEditable(false);288 289 }290 291 c.add(aLabel);292 293 t[0].addActionListener(this);294 295 t[2].addActionListener(this);296 297 b[0].addActionListener(this);298 299 b[1].addActionListener(this);300 301 app.setVisible(true);302 303 }304 305 //消息响应方法306 307 public void actionPerformed(ActionEvent e){308 309 JButton source=(JButton)e.getSource();310 311 //如果单击"登陆"按键,执行StudentManager程序,该部分应用到数据库加密技术312 313 if(source==b[0]){314 315 316 317 try{318 319 //基于SQL Server 2000 的 JDBC-ODBC 桥数据库连接(先要创建一个数据源lib)320 321 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");322 323 //使用网络登录ID的Windows NT 验证(W)324 325 Connection conn=DriverManager.getConnection("jdbc:odbc:宾馆客户数据库"); statement=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);326 327 String s1=t[1].getText();328 329 String s2=t[3].getText();330 331 ResultSet resultset=statement.executeQuery("select * from UsersInfo where Name='"+s1+"'and Password='"+s2+"'");332 333 resultset.next();334 335 Type=resultset.getInt("Type"); 336 337 if(resultset!=null){338 339 boo1=boo2=true;340 341 resultset.close();342 343 }344 345 }346 347 catch(Exception e1){348 349 JOptionPane.showMessageDialog(this,"用户名和密码不正确!","警告",JOptionPane.WARNING_MESSAGE); 350 351 } 352 353 //如果输入的用户名和密码都正确,则登陆354 355 if(boo1&&boo2&&Type==1){356 357 Type=0;358 359 boo1=boo2=true;360 361 new HoteMen(statement,"普通员工--"+t[1].getText());362 363 app.setVisible(false);364 365 }366 367 if(boo1&&boo2&&Type==2){368 369 Type=0;370 371 boo1=boo2=true;372 373 new HotelManagerMen(statement,"管理员--"+t[1].getText());374 375 //new StudentManager();376 377 app.setVisible(false);378 379 }380 381 }382 383 //如果单击"退出"按键,则退出登陆界面384 385 if(source==b[1]){386 387 System.exit(0);388 389 }390 391 }392 393 public static void main(String args[]){394 395 new weiwei();396 397 }398 399 }400 401 }
3)AddRooms类
1 public class AddRooms extends weiwei implements ActionListener 2 3 { 4 5 Hashtable 基本信息表=null; 6 7 JTextField 房间号,房间位置; 8 9 JTextArea 描述; 10 11 JButton 录入,重置; 12 13 Choice 房间类型; 14 15 Statement statement=null; 16 17 JLabel 添加客房信息=null; 18 19 public AddRooms(Statement statement) 20 21 { 22 23 this.statement=statement; 24 25 房间号=new JTextField(10); 26 27 房间位置=new JTextField(10); 28 29 描述 =new JTextArea(7,10); 30 31 录入=new JButton("录入"); 32 33 重置=new JButton("重置"); 34 35 录入.addActionListener(this); 36 37 重置.addActionListener(this); 38 39 Box box0=Box.createHorizontalBox(); 40 41 添加客房信息=new JLabel("--添加客房信息--",JLabel.CENTER); 42 43 添加客房信息.setFont(new Font("TimesRoman",Font.BOLD,25)); 44 45 添加客房信息.setForeground(Color.red); 46 47 box0.add(添加客房信息); 48 49 Box box1=Box.createHorizontalBox(); 50 51 box1.add(new JLabel("房间号:",JLabel.CENTER)); 52 53 box1.add(房间号); 54 55 房间类型=new Choice(); 56 57 房间类型.add("普通单人间"); 58 59 房间类型.add("普通双人间"); 60 61 房间类型.add("vip单人间"); 62 63 房间类型.add("vip双人间"); 64 65 房间类型.add("豪华贵宾间"); 66 67 房间类型.add("总统套间"); 68 69 Box box2=Box.createHorizontalBox(); 70 71 box2.add(new JLabel("房间类型:",JLabel.CENTER)); 72 73 box2.add(房间类型); 74 75 Box box3=Box.createHorizontalBox(); 76 77 box3.add(new JLabel("房间位置:",JLabel.CENTER)); 78 79 box3.add(房间位置); 80 81 Box box4=Box.createHorizontalBox(); 82 83 box4.add(new JLabel("单价 :",JLabel.CENTER)); 84 85 box4.add(new JScrollPane(描述),BorderLayout.CENTER); 86 87 Box boxH=Box.createVerticalBox(); 88 89 boxH.add(box0); 90 91 boxH.add(box1); 92 93 boxH.add(box2); 94 95 boxH.add(box3); 96 97 boxH.add(box4); 98 99 boxH.add(Box.createVerticalGlue());100 101 JPanel pCenter=new JPanel();102 103 pCenter.add(boxH);104 105 setLayout(new BorderLayout());106 107 add(pCenter,BorderLayout.CENTER);108 109 JPanel pSouth=new JPanel();110 111 pSouth.add(录入);112 113 pSouth.add(重置);114 115 add(pSouth,BorderLayout.SOUTH);116 117 validate();118 119 }120 121 public void actionPerformed(ActionEvent e)122 123 {124 125 ResultSet resultset=null;126 127 boolean boo=false;128 129 if(e.getSource()==录入)130 131 {132 133 int number=0;134 135 try{136 137 number=Integer.parseInt(房间号.getText().toString());138 139 boo=true;140 141 }142 143 catch(Exception e1){144 145 boo=false;146 147 }148 149 if(boo&&(number>0))150 151 {152 153 try{154 155 resultset=statement.executeQuery("use 宾馆客户数据库;select * from RoomsInfo where RoomId='"+number+"'");156 157 try{158 159 resultset.next();160 161 resultset.getInt("RoomId");162 163 String warning="该客房信息已存在,请到修改页面修改!";164 165 JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);166 167 }168 169 catch(Exception e1){170 171 int RoomId=Integer.parseInt(房间号.getText().toString());172 173 String RCategory=房间类型.getSelectedItem().toString();174 175 String RPostion=房间位置.getText().toString();176 177 String Description=描述.getText().toString();178 179 String str="use 宾馆客户数据库;insert into RoomsInfo values("+RoomId+",'"+RCategory+"','"+RPostion+"','"+Description+"')";180 181 try{182 183 statement.executeUpdate(str);184 185 statement.executeUpdate("use 宾馆客户数据库;insert into RoomStatus values("+RoomId+","+1+")");186 187 JOptionPane.showMessageDialog(this,"成功录入客房信息!","提示",JOptionPane.WARNING_MESSAGE);188 189 }190 191 catch(Exception e2){192 193 194 195 String warning="输入格式有误,请重新输入!";196 197 JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);198 199 e2.printStackTrace();200 201 }202 203 房间号.setText(null);204 205 房间类型.select("普通单人间");206 207 房间位置.setText(null);208 209 描述.setText(null);210 211 }212 213 214 215 }216 217 catch(Exception e1){218 219 String warning="输入格式有误,请重新输入!";220 221 JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);222 223 }224 225 226 227 }228 229 else {230 231 String warning="必须要输入房间号!";232 233 JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);234 235 }236 237 }238 239 if(e.getSource()==重置)240 241 {242 243 房间号.setText(null);244 245 房间类型.select("普通单人间");246 247 房间位置.setText(null);248 249 描述.setText(null);250 251 }252 253 }254 255 }
4)UseOfRooms类
1 public class UseOfRooms extends weiwei implements ActionListener 2 3 { 4 5 JButton 查询; 6 7 Choice 房间类型,状态; 8 9 Statement statement=null; 10 11 JTextArea 房间使用情况; 12 13 JLabel 客房使用情况=null; 14 15 public UseOfRooms(Statement statement) 16 17 { 18 19 this.statement=statement; 20 21 查询=new JButton("查询"); 22 23 查询.addActionListener(this); 24 25 房间类型=new Choice(); 26 27 房间类型.add("普通单人间"); 28 29 房间类型.add("普通双人间"); 30 31 房间类型.add("vip单人间"); 32 33 房间类型.add("vip双人间"); 34 35 房间类型.add("豪华贵宾间"); 36 37 房间类型.add("总统套间"); 38 39 状态=new Choice(); 40 41 状态.add("有"); 42 43 状态.add("否"); 44 45 Box box0=Box.createHorizontalBox(); 46 47 客房使用情况=new JLabel("--客房使用情况--",JLabel.CENTER); 48 49 客房使用情况.setFont(new Font("TimesRoman",Font.BOLD,25)); 50 51 客房使用情况.setForeground(Color.red); 52 53 box0.add(客房使用情况); 54 55 Box box1=Box.createHorizontalBox(); 56 57 box1.add(new JLabel("按房间类型:",JLabel.CENTER)); 58 59 box1.add(房间类型); 60 61 Box box2=Box.createHorizontalBox(); 62 63 box2.add(new JLabel("状态:",JLabel.CENTER)); 64 65 box2.add(状态); 66 67 box2.add(查询); 68 69 Box box3=Box.createHorizontalBox(); 70 71 box3.add(new JLabel("房间使用情况:",JLabel.CENTER)); 72 73 Box box4=Box.createHorizontalBox(); 74 75 box4.add(new JLabel("-客房号:")); 76 77 box4.add(new JLabel("-客房类型:")); 78 79 box4.add(new JLabel("-是否空房:")); 80 81 Box box5=Box.createHorizontalBox(); 82 83 房间使用情况=new JTextArea(8,12); 84 85 房间使用情况.setFont(new Font("TimesRoman",Font.BOLD,15)); 86 87 房间使用情况.setForeground(Color.red); 88 89 房间使用情况.setEditable(false); 90 91 box5.add(new JScrollPane(房间使用情况),BorderLayout.CENTER); 92 93 Box boxH=Box.createVerticalBox(); 94 95 boxH.add(box0); 96 97 boxH.add(box1); 98 99 boxH.add(box2);100 101 boxH.add(box3);102 103 boxH.add(box4);104 105 boxH.add(box5);106 107 boxH.add(Box.createVerticalGlue());108 109 JPanel pCenter=new JPanel();110 111 pCenter.add(boxH);112 113 setLayout(new BorderLayout());114 115 add(pCenter,BorderLayout.CENTER);116 117 validate();118 119 }120 121 public void actionPerformed(ActionEvent e)122 123 { int i=1;124 125 ResultSet resultset=null;126 127 String string="";128 129 if(e.getSource()==查询){130 131 String str=房间类型.getSelectedItem().toString();132 133 String str1=状态.getSelectedItem();134 135 if(str1.equals("有")){136 137 i=2;138 139 }140 141 else i=1;142 143 String str2="use 宾馆客户数据库;select RoomsInfo.RoomId,RCategory,RoomStatus.Status from RoomsInfo,RoomStatus where RoomsInfo.RoomId=RoomStatus.RoomId and Status="+i+" and RCategory='"+str+"'";144 145 try{146 147 resultset=statement.executeQuery(str2);148 149 while(resultset.next()){150 151 string+=resultset.getInt(1)+", "+resultset.getString(2)+", "+str1+"\n";152 153 }154 155 if(string==""){156 157 房间使用情况.setText("没有要找的客房!");158 159 }160 161 else162 163 房间使用情况.setText(string);164 165 }166 167 catch(Exception e1){168 169 e1.printStackTrace();170 171 }172 173 }174 175 }176 177 }178 179
5)CustomerInformation类
1 public class CustomerInformation extends weiwei implements ActionListener 2 3 { 4 5 JTextField 姓名; 6 7 JTextArea 查询结果; 8 9 JButton 查询,查询所有; 10 11 Statement statement=null; 12 13 JLabel 客户信息查询; 14 15 public CustomerInformation(Statement statement) 16 17 { 18 19 this.statement=statement; 20 21 姓名=new JTextField(10); 22 23 查询=new JButton("查询"); 24 25 查询所有=new JButton("查询所有"); 26 27 姓名.addActionListener(this); 28 29 查询.addActionListener(this); 30 31 查询所有.addActionListener(this); 32 33 查询结果=new JTextArea(8,10); 34 35 查询结果.setEditable(false); 36 37 查询结果.setFont(new Font("TimesRoman",Font.BOLD,15)); 38 39 查询结果.setForeground(Color.blue); 40 41 Box box0=Box.createHorizontalBox(); 42 43 客户信息查询=new JLabel("--客户信息查询--",JLabel.CENTER); 44 45 客户信息查询.setFont(new Font("TimesRoman",Font.BOLD,25)); 46 47 客户信息查询.setForeground(Color.red); 48 49 box0.add(客户信息查询); 50 51 Box box1=Box.createHorizontalBox(); 52 53 box1.add(new JLabel("输入要查询的姓名:",JLabel.CENTER)); 54 55 box1.add(姓名); 56 57 box1.add(查询); 58 59 Box box2=Box.createHorizontalBox(); 60 61 box2.add(new JLabel("查询结果:",JLabel.CENTER)); 62 63 box2.add(new JScrollPane(查询结果),BorderLayout.CENTER); 64 65 Box box3=Box.createHorizontalBox(); 66 67 box3.add(查询所有); 68 69 Box boxH=Box.createVerticalBox(); 70 71 boxH.add(box0); 72 73 boxH.add(box1); 74 75 boxH.add(box2); 76 77 boxH.add(box3); 78 79 boxH.add(Box.createVerticalGlue()); 80 81 JPanel pCenter=new JPanel(); 82 83 pCenter.add(boxH); 84 85 setLayout(new BorderLayout()); 86 87 add(pCenter,BorderLayout.CENTER); 88 89 validate(); 90 91 } 92 93 public void actionPerformed(ActionEvent e) 94 95 { 96 97 ResultSet resultset=null; 98 99 boolean boo=false;100 101 String CName="",CIdentityId="",CPhone="",CRoom,BeginTime,Remarks;102 103 String str="",chk;104 105 if(e.getSource()==查询)106 107 { CName=姓名.getText().toString();108 109 if(!CName.equals(""))110 111 {112 113 try{114 115 chk="use 宾馆客户数据库;select * from CustomersInfo,RoomOperation where CustomersInfo.CIdentityId=RoomOperation.CIdentityId and CName='"+CName+"'";116 117 resultset=statement.executeQuery(chk);118 119 resultset.next();120 121 CIdentityId=resultset.getString("CIdentityId");122 123 CPhone=resultset.getString("CPhone");124 125 CRoom=resultset.getString("RoomId");126 127 BeginTime=resultset.getString("BeginTime");128 129 Remarks=resultset.getString("Remarks");130 131 str="客房号:"+CRoom+"\n身份证号码:"+CIdentityId+"\n客户姓名:"+CName+"\n电话:"+CPhone+"\n订房时间:"+BeginTime+"\n备注:"+Remarks+"\n";132 133 查询结果.setText(str);134 135 }136 137 catch(Exception e1){138 139 String warning="该客房信息不存在!";140 141 查询结果.setText(warning);142 143 JOptionPane.showMessageDialog(this,warning,144 145 "警告",JOptionPane.WARNING_MESSAGE);146 147 }148 149 }150 151 else{152 153 String warning="必须要输入客户姓名!";154 155 JOptionPane.showMessageDialog(this,warning,156 157 "警告",JOptionPane.WARNING_MESSAGE);158 159 }160 161 }162 163 if(e.getSource()==查询所有){164 165 str="";166 167 try{168 169 chk="use 宾馆客户数据库;select * from CustomersInfo,RoomOperation where CustomersInfo.CIdentityId=RoomOperation.CIdentityId";170 171 resultset=statement.executeQuery(chk);172 173 while(resultset.next()){174 175 CIdentityId=resultset.getString("CIdentityId");176 177 CName=resultset.getString("CName");178 179 CPhone=resultset.getString("CPhone");180 181 CRoom=resultset.getString("RoomId");182 183 BeginTime=resultset.getString("BeginTime");184 185 Remarks=resultset.getString("Remarks");186 187 str="客房号:"+CRoom+"\n身份证号码:"+CIdentityId+"\n客户姓名:"+CName+"\n电话:"+CPhone+"\n订房时间:"+BeginTime+"\n备注:"+Remarks+"\n";188 189 }190 191 if(str.equals("")){192 193 姓名.setText("");194 195 查询结果.setText("客户信息不存在!");196 197 }198 199 else {200 201 姓名.setText("");202 203 查询结果.setText(str);204 205 }206 207 }208 209 catch(Exception e1){210 211 //e1.printStackTrace();212 213 姓名.setText("");214 215 查询结果.setText("客房信息不存在!");216 217 String warning="客房信息不存在!";218 219 JOptionPane.showMessageDialog(this,warning,220 221 "警告",JOptionPane.WARNING_MESSAGE);222 223 }224 225 }226 227 }228 229 }230 231
6) CheckStaff类
1 public class CheckStaff extends weiwei implements ActionListener 2 3 { 4 5 JTextField 姓名; 6 7 JTextArea 查询结果; 8 9 JButton 查询,查询所有; 10 11 Statement statement=null; 12 13 JLabel 客户信息查询; 14 15 public CheckStaff(Statement statement) 16 17 { 18 19 this.statement=statement; 20 21 姓名=new JTextField(10); 22 23 查询=new JButton("查询"); 24 25 查询所有=new JButton("查询所有"); 26 27 姓名.addActionListener(this); 28 29 查询.addActionListener(this); 30 31 查询所有.addActionListener(this); 32 33 查询结果=new JTextArea(7,10); 34 35 查询结果.setEditable(false); 36 37 查询结果.setFont(new Font("TimesRoman",Font.BOLD,15)); 38 39 查询结果.setForeground(Color.blue); 40 41 Box box0=Box.createHorizontalBox(); 42 43 客户信息查询=new JLabel("--员工信息查询--",JLabel.CENTER); 44 45 客户信息查询.setFont(new Font("TimesRoman",Font.BOLD,25)); 46 47 客户信息查询.setForeground(Color.red); 48 49 box0.add(客户信息查询); 50 51 Box box1=Box.createHorizontalBox(); 52 53 box1.add(new JLabel("输入要查询的姓名:",JLabel.CENTER)); 54 55 box1.add(姓名); 56 57 box1.add(查询); 58 59 Box box2=Box.createHorizontalBox(); 60 61 box2.add(new JLabel("查询结果:",JLabel.CENTER)); 62 63 box2.add(new JScrollPane(查询结果),BorderLayout.CENTER); 64 65 Box box3=Box.createHorizontalBox(); 66 67 box3.add(查询所有); 68 69 Box boxH=Box.createVerticalBox(); 70 71 boxH.add(box0); 72 73 boxH.add(box1); 74 75 boxH.add(box2); 76 77 boxH.add(box3); 78 79 boxH.add(Box.createVerticalGlue()); 80 81 JPanel pCenter=new JPanel(); 82 83 pCenter.add(boxH); 84 85 setLayout(new BorderLayout()); 86 87 add(pCenter,BorderLayout.CENTER); 88 89 validate(); 90 91 } 92 93 public void actionPerformed(ActionEvent e) 94 95 { 96 97 ResultSet resultset=null; 98 99 boolean boo=false;100 101 String Name,Password,Sex,Email,Address,Telephone,Department,Type;102 103 int UserId=-1,Gender=0;104 105 String str="";106 107 if(e.getSource()==查询)108 109 {110 111 Name=姓名.getText().toString();112 113 if(!Name.equals(""))114 115 {116 117 try{118 119 resultset=statement.executeQuery("use 宾馆客户数据库;select * from UsersInfo where Name='"+Name+"'");120 121 resultset.next();122 123 UserId=resultset.getInt("UserId");124 125 Name=resultset.getString("Name");126 127 Password=resultset.getString("Password");128 129 Gender=resultset.getInt("Gender");130 131 if(Gender==1){132 133 Sex="男";134 135 }136 137 else Sex="女";138 139 Email=resultset.getString("Email");140 141 Address=resultset.getString("Address"); Telephone=resultset.getString("Telephone");142 143 Department=resultset.getString("Department");144 145 Type=resultset.getInt("Type")==1?"普通员工":"宾馆管理员"; str=UserId+","+Name+","+Password+","+Sex+","+Email+","+Address+","+Telephone+","+Department+","+Type+"\n";146 147 查询结果.setText(str);148 149 }150 151 catch(Exception e1){152 153 String warning="该客房信息不存在!";154 155 查询结果.setText(warning);156 157 JOptionPane.showMessageDialog(this,warning158 159 ,"警告",JOptionPane.WARNING_MESSAGE);160 161 }162 163 }164 165 else{166 167 String warning="必须要输入客户姓名!";168 169 JOptionPane.showMessageDialog(this,warning,170 171 "警告",JOptionPane.WARNING_MESSAGE);172 173 }174 175 }176 177 if(e.getSource()==查询所有){178 179 str="";180 181 try{182 183 resultset=statement.executeQuery("use 宾馆客户数据库;select * from UsersInfo");184 185 while(resultset.next()){186 187 UserId=resultset.getInt("UserId");188 189 Name=resultset.getString("Name");190 191 Password=resultset.getString("Password");192 193 Gender=resultset.getInt("Gender");194 195 if(Gender==1){196 197 Sex="男";198 199 }200 201 else Sex="女";202 203 Email=resultset.getString("Email");204 205 Address=resultset.getString("Address");206 207 Telephone=resultset.getString("Telephone");208 209 Department=resultset.getString("Department");210 211 Type=resultset.getInt("Type")==1?"普通员工":"宾馆管理员";212 213 str+=UserId+","+Name+","+Password+","+Sex+","+Email+","+Address+","+Telephone+","+Department+","+Type+"\n";214 215 }216 217 if(str.equals("")){218 219 姓名.setText("");220 221 查询结果.setText("客户信息不存在!");222 223 }224 225 else {226 227 姓名.setText("");228 229 查询结果.setText(str);230 231 }232 233 }234 235 catch(Exception e1){236 237 姓名.setText("");238 239 查询结果.setText("客房信息不存在!");240 241 String warning="客房信息不存在!";242 243 JOptionPane.showMessageDialog(this,warning,244 245 "警告",JOptionPane.WARNING_MESSAGE);246 247 }}}}248 249 250 251 252 253 254 255
五、 Java源代码
1 package com.util; 2 3 4 5 import java.text.ParseException; 6 7 import java.util.Date; 8 9 import java.util.GregorianCalendar; 10 11 import java.net.URL.*; 12 13 import javax.swing.*; 14 15 import javax.swing.ImageIcon; 16 17 import javax.swing.JLabel; 18 19 import java.sql.*; 20 21 import java.awt.Container; 22 23 import java.awt.GridLayout; 24 25 import java.awt.FlowLayout; 26 27 import javax.swing.JButton; 28 29 import javax.swing.JFrame; 30 31 import javax.swing.JTextField; 32 33 import javax.swing.JPasswordField; 34 35 import java.awt.event.ActionEvent; 36 37 import java.awt.event.ActionListener; 38 39 import java.awt.*; 40 41 import java.awt.*; 42 43 import java.awt.event.*; 44 45 import javax.swing.*; 46 47 import java.io.*; 48 49 import java.util.*; 50 51 import java.sql.*; 52 53 54 55 56 57 public class Util { 58 59 public static Date newDate(String s) throws ParseException { 60 61 java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat( 62 63 "yyyy-MM-dd"); 64 65 Date date = new Date(); 66 67 date = sdf.parse(s); 68 69 return date; 70 71 } 72 73 74 75 public static Date newDate1(String s) throws ParseException { 76 77 java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat( 78 79 "yyyy-MM-dd HH:mm"); 80 81 Date date = new Date(); 82 83 date = sdf.parse(s); 84 85 return date; 86 87 } 88 89 90 91 public static Date FormatFullDate(String s) throws ParseException { 92 93 java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat( 94 95 "yyyy-MM-dd HH:mm:ss"); 96 97 Date date = new Date(); 98 99 date = sdf.parse(s);100 101 return date;102 103 104 105 }106 107 108 109 public static String splitDate(Date d) {110 111 java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(112 113 "yyyy-MM-dd");114 115 return sdf.format(d);116 117 }118 119 120 121 public static String splitDate1(Date d) {122 123 java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(124 125 "yyyy年MM月dd日");126 127 return sdf.format(d);128 129 }130 131 132 133 public static String chop(String orignalString, double length,134 135 String chopedString) {136 137 if (orignalString == null || orignalString.length() == 0) {138 139 return orignalString;140 141 }142 143 orignalString = orignalString.replaceAll(" ", " ");144 145 if (orignalString.length() < length) {146 147 return orignalString;148 149 }150 151 StringBuffer buffer = new StringBuffer((int) length);152 153 length = length * 2;154 155 int count = 0;156 157 int stringLength = orignalString.length();158 159 int i = 0;160 161 for (; count < length && i < stringLength; i++) {162 163 char c = orignalString.charAt(i);164 165 if (c < '\u00ff') {166 167 count++;168 169 } else {170 171 count += 2;172 173 }174 175 buffer.append(c);176 177 }178 179 if (i < stringLength) {180 181 buffer.append(chopedString);182 183 }184 185 return buffer.toString();186 187 }188 189 190 191 public static long getPrimeKey() {192 193 GregorianCalendar calendar = new GregorianCalendar();194 195 return calendar.getTimeInMillis();196 197 }198 199 200 201 public static long stringToLong(String source) {202 203 return Long.parseLong(source);204 205 }206 207 /*208 209 * public static void main(String[] args){ for(int i=0;i<10;i++){210 211 * System.out.println(Util.getPrimeKey()); } }212 213 */214 215 }
六、 实验结果
图:1-1客房管理管理页面的设计
图2-2客房经营管理页面
图3-3 客户信息查询页面
图4-4 员工信息管理页面
七、 实验小结
1. 数据库设计小结
当时对于数据库的选择,却走了一点弯路。因为平时对于数据库接触不多,所以一开始建表找工具花费时间作为数据库。这在初期是没啥问题的,但后来随着项目推进,产品经理不断地增加需求,慢慢对建表,查询和数据类型熟练。
2. Java应用小结
我是用这个学期刚开的java语言进行编写。这样不仅可以学习数据库,而且还可以对Java的知识进行巩固。知识是相互联系的,没有哪一门是单独而存在的。对java大项目应用程序,要灵活应用类的定义以及类当中的方法,在定义类时,善于用接口。面对对象中,多个实现功能,最好用类和类继承。
3. 需完善之处
数据库建表和java的可连接部分需要熟练,需要自己掌握。对SQL语句建表的变量需要记住,以后不需要查询书本。当我把这个数据库完整地设计出时,我心情是多么的激动,多么的自豪。这次实验主要是数据库设计,而应用程序是次要的。所以,在这次实验中,由于时间问题,我只是做了一部分功能,但也足已蔚我心了。这个宾馆客房管理系统完完全全是我自己做的,没有一点参照成分。做完这个实验后,尽管这个系统有不足之处,但我感觉自己的编程能力已经有了质的提升。我真的很高兴!很自豪!
课程设计体会
本次实验是对我进行一次全面的综合训练,这次实验不仅仅是把这个学期的数据库的知识总结,更是自入学以来一次知识大检查。自己学了什么,都会心里有底。这个不单要掌握数据库原理,还要熟练掌握一门编程语言。在这次实验中,我是用这个学期刚开的java语言进行编写。这样不仅可以学习数据库,而且还可以对Java的知识进行巩固。知识是相互联系的,没有哪一门是单独而存在的。所以,要学好一门课,就是应该横向思考,多联系,这样会学得更深刻。这次实验,首先是要纵观全局,从大处着眼,先是需求分析,这是设计过程的基础,是最困难,最耗时的一步。作为“地基”的分析是否做得充分与准确,决定了在其上构建数据库大厦的速度与质量。需求分析做得不好,甚至会导致整个数据库设计返工重做。接着就是概念结构设计,这也是整个数据库设计的关键,它通过对用户需求进行综合,归纳与抽象,形成一个独立具体DBMS的概念模型。再接着就是逻辑结构设计了,最后就是编程工作了。
参考文献
1.数据库系统概论(第5版)王珊 萨师煊编著 高等教育出版社 2014年9月
2.Java语言程序设计(第2版)丁振凡 编著 清华大学出版社2014年9月
3.求是科技编著SQLsever 2000数据库开发技术与工程实践 人民邮电出版社2004年6月
4.数据库系统实验指导 单建魁 赵启升 编著 清华大学出版社
5.互联网资源