4.程序设计与编码
4.1开发平台与工具
4.1.1 J2SE平台
J2SE是Java 2 standard edition是Java2的标准版,主要用于桌面应用软件的编程,Standard Edition(标准版) J2SE 包含那些构成Java语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程。
4.1.2 开发系统用的工具
表4.1 系统开发平台和工具
工具名称 JDK 1.6.0 MyEclipse MySQL
用途 Java 开发工具包 J2EE集成开发环境 中小型关系数据库管理系统
4.1.3 开发中使用的类与接口的描述
1.开发图形界面所用类:
JFrame:Swing 的三个基本构造块:标签、按钮和文本字段;但是现在需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。
JPanel:JPanel是一个容器,可以向其中添加其他的GUI组件(如按钮JButton组件);但是JPanel不是顶层容器,因此在屏幕上显示JPanel,必须将它添加到一个顶层容器(如JFrame)中。
JSplitPane:Split Pane(分割面版)一次可将两个组件同时显示在两个显示区中,若你想要同时在多个显示区显示组件,你便必须同时使用多个Split Pane。
JLabel: 用于短文本字符串或图像或二者的显示区。 JTextField:是一个轻量级组件,它允许编辑单行文本。
JTextArea:是一个显示纯文本的多行区域。
JPasswordField:JPasswordField 是一个轻量级组件,允许编辑单行文本,其视图指示键入内容,但不显示原始字符。
JButton: \按钮的实现。 通过 Action 可配置按钮,并进行一定程度的控制。 JScrollpane:提供轻量级组件的 scrollable 视图。JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口。
JComboBox:将按钮或可编辑字段与下拉列表组合的组件。用户可以从下拉列表中选择值,下拉列表在用户请求时显示。
JRadioButton:实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。 ButtonGroup:此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。使用相同的
ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。
17
2.开发表格接收数据并显示所使用的类:
Vector:可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。 DefaultTableModel:这是 TableModel 的一个实现,它使用一个 Vector 来存储单元格的值对象,该 Vector 由多个 Vector 组成。
JTable: 用来显示和编辑常规二维单元表。
3.开发树状结构目录所使用的类:
DefaultMutableTreeNode:是树数据结构中的通用节点。为检查和修改节点的父节点和子节点提供操作,也为检查节点所属的树提供操作。
DefaultTreeModel:使用 TreeNodes 的简单树数据模型。
JTree:将分层数据集显示为轮廓的控件。树中特定的节点可以由 TreePath(封装节点及其所
有祖先的对象)标识,或由其显示行(其中显示区域中的每一行都显示一个节点)标识。
4.开发数据库连接所使用的类:
Connection:与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。 Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的
信息。
Statement:Statement 对象表示基本语句,其中将单个方法应用于某一目标和一组参数,以返回结果。 ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
5.开发对事件响应所实现的接口:
ActionListener:用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。 MouseListener:用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。然后使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。
当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该侦听器对象中的相应方法,并将 MouseEvent 传递给该方法。 TreeSelectionListener:当 TreeSelectionModel 中的选择发生更改时收到通知的侦听器。
4.2程序设计
4.2.1程序设计概述
本系统是窗口式应用软件,采用C/S模式来设计,所以各个模块内的每一个功能都要
用窗口来显示。为了体现程序的封装性,每个窗口用一个类来实现。为实现窗口视图,应用的类都有继承窗口类对象,并实现事件响应监听接口,以便使用时产生相应功能的事件响应。
为体现窗口界面风格,在个窗口上各个控件的布局应当一致,用于显示的字体设置为同一字体,各窗口界面颜色须保持一致,以保证对用户的友好界面。具体实现过程现举例如下。
18
4.2.2数据库的连接与关闭
利用JDBC访问数据库包含三个步骤: 1. 建立与数据库的连接;
2. 通过发送SQL语句对数据库进行读写;
3. 处理语句的执行结果,特别是查询语句的返回数据。
数据库连接时采用连接池技术链接MySQL,具体代码实现如下:
public class DataBase {
Connection con = null;// 声明Connection引用 Statement stat; ResultSet rs; int count;
public static String message;// 声明一个静态成员变量 public static Login log; public DataBase() {
try {// 加载MySQL的驱动类,并创建数据库连接 Class.forName(\); }
con = DriverManager.getConnection(\+message+\, stat = con.createStatement();// 创建Statement对象
JOptionPane.showMessageDialog(log, \用户IP或端口号错误!!!\, \信息\, JOptionPane.INFORMATION_MESSAGE);
\, \);
} catch (Exception e) {// 如果从Login类传的参数不对,则提示出错
}
public void dbClose() {// 声明close方法
try {
con.close();
e.printStackTrace(); } catch (Exception e) {
} }
4.2.3登录模块程序设计
本模块主要是用户通过图书管理系统的首页登录进入该系统。用户输入正确的用户名和密码,系统会根据用户的身份进行相应权限划分;如果登录信息有错误,则系统提示登入错误的信息,并且禁止系统用户进行任何操作。图书借阅管理系统的登录主页面如图4.1所示。
19
图4.1 图书管理系统登录首页
用户在登录页面写好用户名和密码,选择登录,登录成功则跳转到系统的首页,否则提示错误信息。进行用户身份验证的程序流程图如图4.2程序流程图所示
图4.2用户登录流程图
实现此登陆模块的类与方法:
此模块命名为Login,继承了JFrame类,并实现ActionListener接口,使用JComponent的子类JPanel作为容器,以便加入GUI组件,实现ActionListener接口中的actionPerformed方法,在构造函数中进行了容器及相应标签和按钮等的布局,并针对相应的组件调用事件相应的方法。其主要的对象及方法如下表:
20
主要对象与方法
jp对象 jlArray对象 jbArray对象 jtxtArray对象 jpassword对象 Login()方法 actionPerformed( ActionEvent e)方
法 main()方法
功能与作用
以便向该模块中添加GUI组件
用于显示标签组(如:用户名和密码等标签) 创建的按钮组(如:学生登录和管理员登录按钮) 创建的文本框,用于接收键盘向其输入的字符串 创建的密码框,用于接收键盘输入的密码并以特殊字符显示 此为该类的构造函数,对组件的布局及方法的调用封装在这里 实现事件响应监听器接口中的方法,其响应的事件源有文本框、密码框和布局在此类中的按钮
程序的入口,JVM识别此main方法从而编译该程序生成.class
文件
表4.3 Login类主要对象与方法
4.2.4系统管理员功能模块的实现
本模块中最主要的是管理系统用户,设置图书馆信息等操作,其中管理系统用户包括对他们进行添加,修改,删除及权限划分操作。
其中系统管理员对系统用户进行管理的操作页面如下图所示:
图4.4 系统管理员管理用户操作界面
其中对系统用户权限的设置是该操作的重要部分也是系统提高效率的关键所在,其主要实现代码为:
public void actionPerformed(ActionEvent e){
sql=\+mgNo+\; db=new DataBase();
db.selectDb(sql);//查询管理员权限 String string=\; try{
while(db.rs.next()){//取到结果集 string=db.rs.getString(1).trim(); }
int p=0;
21