图书管理系统开发--问题解决

项目名称:图书管理系统

项目简介: 该系统主要面向图书馆的单机服务实体对象开发,适合中小型图书馆使用。此开发的“图书管理系统”项目的界面如图所示,主界面采用了多文档窗口,这样可以在窗      口内打开多个子窗口,同时进行多种操作。主界面中通过菜单实现不同模块的功能,包括系统管理员、书籍信息管理、读者信息管理、报表和窗口功能。管理员可      以根据自己的权限,对相应的模块进行操作。

项目目的:

掌握SQL数据

掌握JDBC连接SQL

掌握窗体的使用


涉及的主要技术:

Swing API  、JAVA EXCEL API、JDBC数据库的访问、多层架构模式


编程环境:

开发平台:JDK1.5.0以上版本

开发工具:NetBeans5.0以上版本

数据库: SQL2005以上版本


功能划分:



其中各个阶段问题解决:

1.登录问题:

关键代码:

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        String passname= jTextField1.getText();
      //  JPasswordField passwordField=new JPasswordField();
        String password=new String(jPasswordField1.getPassword());
        
       
        
         //判断用户名是否为空
               if (passname.length() == 0) {
                   JOptionPane.showOptionDialog(this, "用户名不能为空", "错误信息"
                                                , JOptionPane.DEFAULT_OPTION,
                                                JOptionPane.ERROR_MESSAGE,
                                                null, null, null);
               }
           //判断密码是否为空
              else if (password.length()==0)
               {
                   JOptionPane.showOptionDialog(this,"密码不能为空", "错误信息"
                                          , JOptionPane.DEFAULT_OPTION,
                                          JOptionPane.ERROR_MESSAGE,
                                          null, null, null);
              }
              else
              {
                 try
                 {
                     int m=0;   //统计字段个数
                         
                     Connection   conn = DriverManager.getConnection("jdbc:mysql://localhost/library?user=root&password=wafe5217");
                                        
                     DatabaseMetaData metadata=conn.getMetaData();
                     ResultSet rsl=metadata.getColumns(null, null,"booklagin",null);
          
                   while(rsl.next()){
                         m++;
                    }
                    Statement  sql=conn.createStatement();
                 ResultSet  rs=sql.executeQuery("select * from booklogin where name='"+passname+"'");
          
                 
//           while(rs.next()){
//                for(int k=1;k<=m;k++){
//                    System.out.print("   "+rs.getString(k));
//                }
//               
//            } 
            if (rs.next()){
                        
                if(password.equals(rs.getString(2))){

                             new bookMain().setVisible(true);
                            
                             this.setVisible(false);
                             
                        }
                        else
                        {
                            JOptionPane.showOptionDialog(this,"密码错误", "错误信息"
                                              , JOptionPane.DEFAULT_OPTION,
                                              JOptionPane.ERROR_MESSAGE,
                                              null, null, null);
                        }
                     }
                     else
                     {
                         JOptionPane.showOptionDialog(this,"没有所要找的用户名", "错误信息"
                                              , JOptionPane.DEFAULT_OPTION,
                                              JOptionPane.ERROR_MESSAGE,
                                              null, null, null);
                     }
                  if(num<3){
                     num++;
                 }else{
                                JOptionPane.showOptionDialog(this,"尝试的次数过多!", "错误信息"
                                              , JOptionPane.DEFAULT_OPTION,
                                              JOptionPane.ERROR_MESSAGE,
                                              null, null, null);
                                this.dispose();
                 }

                }
                 catch(Exception e){
                     JOptionPane.showOptionDialog(this,"连接数据库失败", "错误信息"
                                              , JOptionPane.DEFAULT_OPTION,
                                              JOptionPane.ERROR_MESSAGE,
                                              null, null, null);
                                    }
             
              }
                       
    } 

需要提取文本框中的数据连接数据库进行查找比对,当有该用户信息的时候就调用

 new bookMain().setVisible(true);//主菜单

this.setVisible(false);同时把登录界面隐藏


2.主界面:

该界面是一个枢纽用于调用各个功能模块:
例如打开借书功能模块时:

   private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
          new bookLend().setVisible(true);
          this.setVisible(false);
    }   

3.读者信息添加模块:

如何获取下拉框中的值: 利用该句  String code=(String) jComboBox1.getSelectedItem();

如何获取单选按钮中的值:声明一个局部String 变量,在事件处理当中进行赋相同的值,例如对性别的输入:

  private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
        sex="男";
    }                                             

    private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
        sex="女";
    }    

4.相应的读者信息删除:

如何读取数据库中的值来显示在单选按钮中:

例如显示男女:

 if(sex1.equals("男")){
                jRadioButton1.setSelected(true);
            }else{
            jRadioButton2.setSelected(true);
            }


如何把数据库的数据显示在对应的表格内:

例如:

class   SqlDemo2   extends   JFrame{  
SqlDemo2(){  
try{  
String[]   colHeads={ "name ", "sex ", "age"};  
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");  
String   url= "jdbc:odbc:pubs ";  
Connection   con=DriverManager. getConnection_r(url, "sa ", " ");  
Statement   stmt=con.createStatement();  
ResultSet   rs;  
rs=stmt.executeQuery( "SELECT   count(*)   as   au_count   from   authors ");  
rs.next();  
  
int   iCount=rs. getInt_r( "au_count ");  
  
Object[][]   data=new   Object[iCount][];  
int   i=0;  
rs=stmt.executeQuery( "SELECT   *   from   authors ");  
  
while(rs.next()){  
data[i]=new   Object[3];  
data[i][0]=rs. getString_r( "au_fname ");  
data[i][1]=rs. getString_r( "sex ");  
data[i][2]=rs. getString_r( "age");  
i++;  
}  
  
JTable   table=new   JTable(data,colHeads);  
JScrollPane   jsp=new   JScrollPane(table);  
this. getContentPane_r().add(jsp);  
this.setDefaultCloseOperation(EXIT_ON_CLOSE);  
}  
catch(Exception   e){  
System.out.println(e);  
}  
}


如何单击表格中的数据对应的显示在相应的文本框中:

 private void jScrollPane2MouseMoved(java.awt.event.MouseEvent evt) {                                        
        // TODO add your handling code here:
              row = jTable1.getSelectedRow();
            //获取单元格内的内容
            name1= jTable1.getValueAt(row,0).toString().trim();
            sex1= jTable1.getValueAt(row,1).toString().trim();
            age1 = jTable1.getValueAt(row,2).toString().trim();
            career1 = jTable1.getValueAt(row,3).toString().trim();
            card1 = jTable1.getValueAt(row,4).toString().trim();
            cardnum1 = jTable1.getValueAt(row,5).toString().trim();
            maxnum1 = jTable1.getValueAt(row,6).toString().trim();
            keepmoney1 = jTable1.getValueAt(row,7).toString().trim();
            tel1 = jTable1.getValueAt(row,8).toString().trim();
            readernum1 = jTable1.getValueAt(row,9).toString().trim();
            jTextField1.setText(name1);
            jTextField2.setText(age1);
            jTextField3.setText(card1);
            jTextField6.setText(career1);
            jTextField7.setText(cardnum1);
            jTextField5.setText(keepmoney1);
            jTextField8.setText(maxnum1);
            jTextField9.setText(tel1);
            jTextField10.setText(readernum1);
            if(sex1.equals("男")){
                jRadioButton1.setSelected(true);
            }else{
            jRadioButton2.setSelected(true);
            }

}


进行完删除修改操作后要进行及时更新表格中的数据:

我的处理方法是在点击按钮之后再重新加载一遍数据库中的数据


5.借书管理和还书管理就没有那么多问题了,处理好时间问题,以及对应的是否欠款,这都是小小的数学算法问题。

6.对应的图书查询的部分代码:

 try {  
          Connection   conn = DriverManager.getConnection("jdbc:mysql://localhost/library?user=root&password=wafe5217");
            
          DatabaseMetaData metadata=conn.getMetaData();
          ResultSet rsl=metadata.getColumns(null, null,"books",null);
          
          while(rsl.next()){
          m++;
             }
        Statement  sql=conn.createStatement();
         ResultSet  rs=sql.executeQuery(" select * from books where bookname='"+name+"' and bookwrite='"+write+"'and bookbress='"+press+"'");
            while(rs.next()){
                for(int k=1;k<=m;k++){
          //          System.out.print("   "+rs.getString(k));
                    qwe+=rs.getString(k);
                    qwe+="                   ";
                }
                 jTextField1.setText(qwe);
                System.out.println("");
            } 



7.图书添加书籍一览表等问题都不大。


8.更改口令 注意首先要进行查询数据库相应的用户信息,确认后方可更改口令。




  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值