swing图书管理系统视频来自这里
http://www.java1234.com/a/yuanchuang/swing/
一,代码的重用性和面向对象思想
明确面向对象的一个特点:低耦合高内聚,相似功能代码尽量封装到一块。
例如,第八讲中图书查询和表单维护这两块都有一个图书类别下拉框,代码实现用一个函数搞定
1 private void fillBookType(String type) { 2 Connection conn = null; 3 BookType bookType = null; 4 try { 5 conn = dbUtil.getCon(); 6 ResultSet rs = (ResultSet) bookTypeDao.bookTypeList(conn, 7 new BookType()); 8 bookType = new BookType(); 9 bookType.setBookTypeName("请选择..."); 10 bookType.setId(-1); 11 if ("search".equals(type)) { 12 this.s_jcbBookType.addItem(bookType); 13 } else if ("modify".equals(type)) { 14 this.jcb_bookTypeName.addItem(bookType); 15 } 16 while (rs.next()) { 17 bookType = new BookType(); 18 bookType.setId(rs.getInt("id")); 19 bookType.setBookTypeName(rs.getString("bookTypeName")); 20 if ("search".equals(type)) { 21 this.s_jcbBookType.addItem(bookType); 22 } else if ("modify".equals(type)) { 23 this.jcb_bookTypeName.addItem(bookType); 24 } 25 } 26 dbUtil.conClose(conn); 27 } catch (Exception e) { 28 e.printStackTrace(); 29 }
图书查询这块调用发方法时传递变量“search”,表单操作这一块调用时传递参数“modify”
1 this.fillBookType("search"); 2 this.fillBookType("modify");
代码的重用性的另一个好处是:图书类别和图书的修改,删除这两个功能上的相似,当前者相应功能代码编写完成后,后者代码编写时可以完全copy过来,只需修改少许变量名称,增删少许语句即可,可以大大提高项目代码的编写效率。
看代码说话,下面的是图书类别的修改删除功能代码块
private void jb_deleteActionPerformed(java.awt.event.ActionEvent evt) { String id = idTxt.getText(); if (StrUtil.isEmpty(id)) { JOptionPane.showMessageDialog(null, "请选择您要删除的图书类别"); return; } Connection conn = null; try { conn = dbUtil.getCon(); if(bookDao.getBookList(conn, Integer.parseInt(id))){ JOptionPane.showMessageDialog(null, "该图书类下包含有图书,不能删除"); return; } int deleteNum = bookTypeDao.bookTypeDelete(conn, id); if (deleteNum == 1) { JOptionPane.showMessageDialog(null, "删除成功"); resertValues(); fillTable(new BookType()); }else{ JOptionPane.showMessageDialog(null, "删除失败"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); JOptionPane.showMessageDialog(null, "删除成功"); } finally { try { dbUtil.conClose(conn); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void jb_modfiyActionPerformed(java.awt.event.ActionEvent evt) { //通过插件搞的swing组件默认都是当前类容器的属性对象,都可以通过this.来调用 String id = idTxt.getText(); String bookTypeName = bookTypeNameTxt.getText(); String bookTypeDesc = bookTypeDescTxt.getText(); if (StrUtil.isEmpty(id)) { JOptionPane.showMessageDialog(null, "请选择您要修改的图书类别"); return; } BookType bookType = new BookType(Integer.parseInt(id), bookTypeName, bookTypeDesc); Connection conn = null; try { conn = dbUtil.getCon(); int modifyNum = bookTypeDao.bookTypeModify(conn, bookType); if (modifyNum == 1) { JOptionPane.showMessageDialog(null, "修改成功"); resertValues(); fillTable(new BookType()); }else{ JOptionPane.showMessageDialog(null, "修改失败"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); JOptionPane.showMessageDialog(null, "修改失败"); } finally { try { dbUtil.conClose(conn); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
下面的则是图书的修改和删除的代码块
1 private void jb_deleteActionPerformed(java.awt.event.ActionEvent evt) { 2 String id = idTxt.getText(); 3 if (StrUtil.isEmpty(id)) { 4 JOptionPane.showMessageDialog(null, "请选择您要删除的图书类别"); 5 return; 6 } 7 Connection conn = null; 8 try { 9 conn = dbUtil.getCon(); 10 int deleteNum = bookDao.bookDelete(conn, Integer.parseInt(id)); 11 if (deleteNum == 1) { 12 JOptionPane.showMessageDialog(null, "删除成功"); 13 resertValues(); 14 fillTable(new Book()); 15 }else{ 16 JOptionPane.showMessageDialog(null, "删除失败"); 17 } 18 } catch (Exception e) { 19 // TODO Auto-generated catch block 20 e.printStackTrace(); 21 JOptionPane.showMessageDialog(null, "删除成功"); 22 } finally { 23 try { 24 dbUtil.conClose(conn); 25 } catch (Exception e) { 26 // TODO Auto-generated catch block 27 e.printStackTrace(); 28 } 29 } 30 } 31 32 private void jb_modifyActionPerformed(java.awt.event.ActionEvent evt) { 33 String id = idTxt.getText(); 34 String bookName = bookNameTxt.getText(); 35 String author = this.authorTxt.getText(); 36 String sex = ""; 37 if (this.jrbmale.isSelected()) { 38 sex = "男"; 39 } else if (this.jrbfemale.isSelected()) { 40 sex = "女"; 41 } 42 float price = Float.valueOf(this.priceTxt.getText()); 43 String bookDesc = bookDescTxt.getText(); 44 if (StrUtil.isEmpty(id)) { 45 JOptionPane.showMessageDialog(null, "请选择您要修改的图书类别"); 46 return; 47 } 48 BookType bookType = (BookType) this.jcb_bookTypeName.getSelectedItem(); 49 String bookTypeName = bookType.getBookTypeName(); 50 Book book = new Book(Integer.parseInt(id), bookName, author, sex, 51 price, bookDesc, bookTypeName); 52 Connection conn = null; 53 try { 54 conn = dbUtil.getCon(); 55 int modifyNum = bookDao.bookModify(conn, book); 56 if (modifyNum == 1) { 57 JOptionPane.showMessageDialog(null, "修改成功"); 58 resertValues(); 59 fillTable(new Book()); 60 } else { 61 JOptionPane.showMessageDialog(null, "修改失败"); 62 return; 63 } 64 } catch (Exception e) { 65 // TODO Auto-generated catch block 66 e.printStackTrace(); 67 JOptionPane.showMessageDialog(null, "修改失败"); 68 } finally { 69 try { 70 dbUtil.conClose(conn); 71 } catch (Exception e) { 72 // TODO Auto-generated catch block 73 e.printStackTrace(); 74 } 75 } 76 }
代码的重用性和面向对象编程的思想很重要,很重要!!!
二,数据库实现多表操作时注意主外键关联的问题,例如本讲删除某个图书类别时应该考虑该类别是否包含有图书数据,有相应的数据时就应提示用户不能实现删除操作
1 if(bookDao.getBookList(conn, Integer.parseInt(id))){ 2 JOptionPane.showMessageDialog(null, "该图书类下包含有图书,不能删除"); 3 return; 4 }
三,人每天都应该反省下今天的自己,今天的时间是否花费在高效率的工作当中,今天为人处事是否有哪一点不很合理,该怎样做才更合理...自我约束,戒急戒躁。