齐齐哈尔大学毕业设计(论文)
应还时间放入数组,最后将数组添加到表格模型中作为表格新增的一行数据。
(5)这里需要创建取得应还时间的方法。在Dao类中定义一个取得当前书籍允许借阅时间的方法,取得当前书籍允许借阅的最大天数,取当前时间与此天数的加和,即返回应还时间。
(6)最后在“借阅当前书籍”按钮监听事件中,将相关信息存入图书借阅表中,如果存在成功,提示相应对话框。
2. 图书归还
实现图书归还模块的具体步骤如下:
(1)首先需要实现管理员输入读者条形码后,在窗体表格中显示相关内容的查询方法。这个方法与其他数据库操作方法相同,同样在Dao类中进行定义。由于需要查询的内容不在数据库中同一数据表中,所以需要利用表关系进行内部连接查询。其中用到的表包括tb_borrow(图书借阅信息表)、tb_reader(读者信息表)、tb_bookInfo(图书信息表)。
在BookBackIFrame类中定义一个创建表格的add()方法,在此方法中调用Dao类中的查询方法,然后在读者条形码文本框中添加监听事件,在actionPerformed()方法中调用add()方法,实现将查询结果添加到表格中的功能。
(2)在设计窗体时,需要实现用户单击表格中的某一行,在相应文本框中显示此书借阅的罚款信息。可以设置表格的鼠标监听事件,在mouseClicked()方法中实现上述操作。
(3)最后为“图书归还”按钮添加监听事件、图书归还操作主要是将图书借阅表中的“是否归还”字段内容设置为0,此操作可以在Dao类中完成,然后在监听事件的actionPerformed()方法中调用。
4.5.4 单元测试
在图书借阅模块开发过程中,在读者条形码文本框与图书条形码文本框中添加的是焦点监听事件,在focusLost()方法中查询读者相关信息与图书相关信息,然后在图书条形码文本框的focusLost()方法中设置将图书相关信息放入表格中。这样设置存在一个弊端,当管理员向图书条形码文本框中输入字符串后,引发图书条形码文本框失去焦点事件,此时会将相关内容放入窗体中进行显示,由于管理员并没有向读者条形码文本框输入任何字符串,所以在窗体表格中没有读者相关信息显示。同时,使用焦点监听事件也会误导管理员操作系统。
当管理员直接在图书条形码文本框中输入图书条形码后,没有向读者条形码文本框输入字符串,而在触发文本框失去焦点事件时,就会出现异常。
在这种情况下,为了避免出现上述问题,需要在触发图书条形码文本框失去焦点事件时,首先判断管理员是否在读者条形码文本框中输入字符串,如果读者条形码文本框
25 25
齐齐哈尔大学毕业设计(论文)
为空,则弹出提示对话框。同时为了避免误导管理员操作本系统,将失去焦点事件改为键盘按Enter键事件。
4.6 图书查询模块设计
4.6.1 图书查询模块概述
图书查询窗体主要包括条件查询与全部查询。窗体整个布局使用BorderLayout布局管理器,在窗体中部放置了JTabbedPane组件,分别在JTabbedPane组件的两个标签中放置一个面板,一个面板用于放置条件查询结果集,另一个面板用于放置查询全部图书信息的结果集。在条件查询面板中,用户可以在组合框中选择需要查询的字段,然后在条件文本框中输入需要查询的字符串;在全部查询面板中,用户选择“显示图书全部信息”选项卡,查看所有图书相关信息。
图4-7 图书查询界面
4.6.2 图书查询模块技术分析
图书查询窗体主要包括按条件查询功能,这时需要在窗体中使用选项卡,可以使用JTabbedPane组件。在窗体中使用JTabbedPane组件需要初始化JTabbedPane组件,然后在选项卡中添加选项卡名称。图书查询主要实现将查询结果集放入表格中,所以需要初始化表格。
初始化表格首先是将表头信息放入数组中,分别为图书名称、类别、作者等相关信
26 26
齐齐哈尔大学毕业设计(论文)
息。然后初始化表格数据,可以在Dao类中将图书相关信息查询出来,放入二维数组中。其中,查询包括全部信息查询与条件信息查询。在这里条件查询使用模糊查询,在SQL Server 2005中实现模糊查询可以使用带有like关键字的SQL语句,使用like的SQL语句可以确定给定的字符串是否与指定的模式匹配。模式可以包括常规字符和通配符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用“=”和“!=”字符串比较运算符相比,使用通配符看使like运算符更加灵活。
在Dao类查询图书相关信息后,可以将数据放入二维数组中,然后使用表头数组与表文数组初始化表格。Swing中的表格初始化有多种形式。一下是JTable类的所有构造函数:
1. JTable()
2. JTable(int numRows, int numColumns)
3. JTable(Object[][] rowData, Object[][]columnNames) 4. JTable(TableModel dm)
5. JTable(TableModel dm, TableColumnModel cm)
6. JTable(TableModel dm, TableColumnModel cm,ListSelectionModel sm) 7. JTable(Vector rowData, Vector columnNames)
4.6.3 图书查询模块实现过程
图书查询模块实现步骤如下:
1. 在Dao类中定义两个查询方法,分别为条件查询与全部查询,其中条件查询使用了模糊查询机制,查询完毕后将查询结果输入JavaBean中,然后将JavaBean对象添加到list中。
2. 在BookSearchIFrame类中创建表格。首先在一维数组中定义表头,然后在二维数组中定义表格内容,在定义表格内容过程中可以调用步骤1中提到的Dao类中的查询图书相关信息方法。
3. 最后在“查询”按钮中添加监听事件,重写actionPerformed()方法,在此方法中调用Dao类中的查询方法。
4.7 格式化的文本框
在Swing中,当限制文本框中只能输入数字,而不是其他字符时,可以为文本框添加键盘监听事件,并且在键盘按下事件方法中销毁所有非法字符。虽然这种方法被广泛使用,但这种方法存在某种弊端,当用户使用Ctrl+V将文本复制到文本框中,并没有触发键盘事件,这时同样可以输入非法字符而系统并不能进行相应处理。为了处理格式化文本框,Swing的设计者提供了JFormattedTextField类,该类不仅能用于数字的输入,
27 27
齐齐哈尔大学毕业设计(论文)
还能用于日期的输入。
4.7.1 使用JFormattedTextField限制整数输入
初始化一个格式化文本框有几种方式,Java API中提供了如下6个构造函数。 1. JFormattedTextField()
2. JFormattedTextField(Format format)
3. JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
4. JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory)
5. JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory, Object currentValue)
6. JFormattedTextField(Object value)
4.7.2 使用JFormattedTextField限制日期输入
格式化文本框不仅可以格式化整数数字,还可以格式化日期型数据。Java中格式日期通常使用SimpleDateFormat类,它继承自java.text.DateFormat类,而java.text.DateFormat继承自java.text.DateFormat类,DateFormat类中的getDateInsurance()方法返回DateFormat对象,所以在JFormattedTextField文本框中可以使用SimpleDateFormat类格式化日期。
这里使用SimpleDateFormat(String pattern)初始化SimpleDateFormat类对象。格式化完成日期,可以将Format对象放入格式化文本框中,这时如果用户在文本框中输入字符串格式不同时,系统会自动将文本框置为默认值。
28 28