目录
说明
代码完成步骤
步骤一:JDBC加载MySQL数据库驱动
步骤二:数据库建立(MySQL示例)
步骤三:代码实现
总结
说明
[问题描述]
建立一个功能比较完善的高校设备管理系统,该系统共有两种模式:管理员模式和领导模式(即使用者只有设备管理员和领导)。管理员模式包括查看设备信息、修改设备信息、添加设备、报废设备、维修设备五个基本功能。领导模式包括查看设备的基本情况、查看操作说明两个功能。管理员模式包括修改设备使用状态、设备基本属性,对设备进行报废和维修处理的登记,方便以后对设备管理的查询
系统的细节请看第一版(下方地址)
该系统使用的数据库是MySQL
不会使用或下载的请看这篇博文
一切准备就绪后,我们正式开始步入正题
代码完成步骤
步骤一:JDBC加载MySQL数据库驱动
可参考这篇博文
完成后进行第二步,步骤一完成的效果如图所示
步骤二:数据库建立(MySQL示例)
1.新建数据库时注意字符集和排列规则如下设置(防止中文乱码)
2.完成基本表的建立
建立基本表时需要了解的常用数据库数据类型可看
(1)设备管理员
账号:535014 密码:83622(登录时使用的数据,可自己在数据库的相应基本表中更改)
数据库中定义的equipment_manager表截图如下:
表3.1设备管理员信息表
(2)领导
账号:8175216 密码:571240(登录时使用的数据,可自己在数据库的相应基本表中更改)
数据库中定义的leader表截图如下:
表3.2领导信息表
(3)设备基本表的建立
1)设备信息表(设备编号,设备类型,设备名称,生产日期,生产厂家,购买日期,购买单价,数量,所属部门,设备状况,管理人员)其中设备编号设为主码
表3.3设备信息表
2)添加设备表(设备编号,添加号,购买登记人)其中设备编号和添加号设为主码
表3.4设备添加表
3)维修设备表(设备编号,维修号,维修数量,维修登记人,维修金额,维修日期,维修厂家)其中设备编号和维修号设为主码
表3.5设备维修表
4)报废设备表(设备编号,报废号,报废数量,报废登记人,报废日期,原有数量)其中设备编号和报废号设为主码
表3.6设备报废表
步骤三:代码实现
一、数据库的连接和使用
新手常常栽在这里,无法连接。有的问题容易解决有的很难解决,这需要自己解决了(因为问题非常多,我无法 一 一 说明)
JDBC的全称是:Java Database Connectivity,即Java数据库连接。
JDBC可以通过载入不同的数据库的“驱动程序”而与不同的数据库进行连接。
那么,在数据库连接的时候,我使用的是MySQL,Java集成开发环境是Eclipse。
要使用JDBC来访问MySQL数据库,首先需要添加MySQL数据库驱动程序。
数据库连接部分代码如下:
//用于连接数据库 static Connection ct=null; static PreparedStatement ps=null,ps1=null; static ResultSet rs=null,rs1=null; //连接数据库,可用于子类的继承 public static void getConnection() { try {//加载驱动,将其加载到内存中 Class.forName("com.mysql.jdbc.Driver"); //连接数据源,用户名,密码等 ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/management_equipment?useUnicode=true&characterEncoding=utf8","root","root"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }
其中 ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/management_equipment?useUnicode=true&characterEncoding=utf8","root","root")中的useUnicode=true&characterEncoding=utf8需要加上,否则数据库中使用中文会出现乱码,management_equipment是我创建的数据库名称,你可以改为你创建的数据库名称。
如我创建的数据库截图为:
二、登录
1.登录界面
登录界面代码如下:
package com.package_1;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
//import javax.swing.JSplitPane;//使用分割面板时,可以将其对应的注释去掉
import javax.swing.JTextField;
import com.package_3.GetSql;
public class Login extends JFrame implements ActionListener{
//定义组件
JLabel jl1,jl2,jl3,jl4;//标签
JButton jb1,jb2,jb3;//按钮
JTextField jtf;//输入文本框
JPasswordField jpf;//密码输入框
JPanel jp1,jp2,jp3,jp4,jp5,jp6;//普通面板
//JSplitPane jsp;//分割面板
JRadioButton jrb1,jrb2;//单选按钮
ButtonGroup bg;//复选按钮,用来添加单选按钮
public static void main(String[] args) {
// TODO Auto-generated method stub
Login log=new Login();
}
public Login() {
//创建标签
jl1=new JLabel("账号:");
jl2=new JLabel("密码:");
jl3=new JLabel("为了你的账号安全,建议你定期更换密码");
jl4=new JLabel("权限");
//创建按钮
jrb1=new JRadioButton("领导");//单选按钮
jrb2=new JRadioButton("设备管理员");
jrb2.setSelected(true);//设为默认设备管理员登录
bg=new ButtonGroup();//复选按钮中添加单选按钮
bg.add(jrb1);
bg.add(jrb2);
jb1=new JButton("登录");
jb2=new JButton("忘记密码");
jb3=new JButton("注册");
//设置监听
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
//创建文本框
jtf=new JTextField(15);
//创建密码框
jpf=new JPasswordField(15);
//创建面板
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();
jp5=new JPanel();
jp6=new JPanel();
//jsp=new JSplitPane();
//为每个面板添加组件
jp1.add(jl1);//账号
jp1.add(jtf);
jp2.add(jl2);//密码
jp2.add(jpf);
jp3.add(jl3);//提示定期更换密码
jp4.add(jl4);//权限
jp4.add(jrb1);//领导和设备管理员
jp4.add(jrb2);
jp5.add(jb1);//登录
jp6.add(jb2);//注册
jp6.add(jb3);//忘记密码
//jsp.setOrientation(JSplitPane.HORIZONTAL_SPLIT);//设置为水平分割面板
//jsp.setRightComponent(jb2);//将“忘记密码”按钮添加到面板的右侧
//jsp.setLeftComponent(jb3);//将“注册”按钮添加到面板的左侧
//jsp.setDividerLocation(150);//设置分割比例,左侧为150个像素
//向jframe中添加各个面板
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
this.add(jp5);
this.add(jp6);
//this.add(jsp);
//设置布局管理
this.setLayout(new GridLayout(6,1));//使用网格布局
//设置窗体
this.setTitle("用户登录");
this.setBounds(300,300,300,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出,关闭jfram窗体
this.setLocationRelativeTo(null);//设置窗体在屏幕中间显示
this.setResizable(false);//设置锁定窗体,不可改变
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="登录") {
if(!jtf.getText().isEmpty()&&!jpf.getText().isEmpty())
GetSql.getConnection();//先连接数据库
if(jrb1.isSelected()) {//领导登录
GetSql.queryLeader(jtf.getText(), jpf.getText());
if(GetSql.userID==null){//这里要使用账号进行查询,因为密码和姓名可能会有相同的情况
this.clear();
}else {
this.leaderLogin();
}
}else if(jrb2.isSelected()) {//设备管理员登录
try {
GetSql.queryEquipment_manager(jtf.getText(), jpf.getText());
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(GetSql.userID==null) {
this.clear();
}else {
this.equipmentManagermentLogin();
}
}
}else if(e.getActionCommand()=="注册") {
System.out.println("注册领导账号,还是设备管理员账号?");
}else if(e.getActionCommand().equals("忘记密码")){//这里使用equals没有用“==”只是说明可用两种方式,练习时可自己尝试
System.out.println("请输入你的密保手机号!");
}
}
//判断领导登录方法
public void leaderLogin() {
if(GetSql.userID.equals(jtf.getText())&&GetSql.pwd.equals(jpf.getText())) {//账号、密码正确
JOptionPane.showMessageDialog(null, "登陆成功","提示信息",JOptionPane.WARNING_MESSAGE);
clear();//将账号输入框和密码输入框清零,以方便下次输入
dispose();//关闭当前界面
Leader_UI Lead=new Leader_UI();//打开领导登录
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入账户名和密码!","提示信息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入账户名!","提示信息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入密码!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "账户或密码错误请输入账户名或密码!","提示信息",JOptionPane.WARNING_MESSAGE);
clear();
}
}
//判断设备管理员登陆方法
public void equipmentManagermentLogin() {
if(GetSql.userID.equals(jtf.getText())&&GetSql.pwd.equals(jpf.getText())) {//账号、密码正确
JOptionPane.showMessageDialog(null, "登陆成功","提示信息",JOptionPane.WARNING_MESSAGE);
clear();//将账号输入框和密码输入框清零,以方便下次输入
dispose();
EquipmentManager_UI manager=new EquipmentManager_UI();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入账户名和密码!","提示信息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入账户名!","提示信息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入密码!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "账户或密码错误请输入账户名或密码!","提示信息",JOptionPane.WARNING_MESSAGE);
clear();
}
}
//清空两个输入框方法
public void clear() {
jtf.setText("");
jpf.setText("");
}
}
运行界面如下图所示:
(1)设备管理员登录界面:
图1.1设备管理员登录图 | 图1.2设备管理员登录成功图 |
(2) 领导登录界面:
图1.4领导登录图 | 图1.5领导登录成功图 |
(这里说明一下)该界面使用网格布局,6行1列,每行有一个面板,并在每个面板中放置相应的组件,最后形成整体的登录界面。当然这两个界面是同一个只是在登陆时需要把权限更换一下就O了😀
2.用户功能界面
(1)设备管理员登陆后功能界面
代码如下:
package com.package_1;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import com.package_2.EquipmentAdd;
import com.package_2.EquipmentMaintain;
import com.package_2.EquipmentManager;
import com.package_2.EquipmentQuery;
import com.package_2.EquipmentScrap;
import com.package_2.HopeDirection;
public class EquipmentManager_UI extends JFrame implements ActionListener{
//设备管理员界面
public EquipmentManager_UI(){//这里不能使用void,否则无法显示该界面
JFrame frm1 = new JFrame("高校设备管理器");
frm1.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
frm1.setLayout(null);// 设置为不使用布局管理器
// 创建标签组件,设置位置及大小及字体
JLabel label = new JLabel("欢迎使用高校设备管理器");
label.setBounds(50, 10, 300, 22);
label.setFont(new Font("", Font.BOLD, 22));
label.setHorizontalAlignment(JLabel.CENTER);
// 创建按钮对象
JButton btn1 = new JButton("查询设备");
JButton btn2 = new JButton("维修设备");
JButton btn3 = new JButton("添加设备");
JButton btn4 = new JButton("报废设备");
JButton btn5 = new JButton("管理设备");
JButton btn6 = new JButton("帮助");
//为各个按钮添加监听
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
btn5.addActionListener(this);
btn6.addActionListener(this);
//设置按钮位置及大小
btn1.setBounds(60, 70, 120, 30);
btn2.setBounds(240, 70, 120, 30);
btn3.setBounds(60, 120, 120, 30);
btn4.setBounds(240, 120, 120, 30);
btn5.setBounds(60, 170, 120, 30);
btn6.setBounds(240, 170, 60, 30);
//窗体添加组件
frm1.add(btn1);
frm1.add(btn2);
frm1.add(btn3);
frm1.add(btn4);
frm1.add(btn5);
frm1.add(btn6);
frm1.add(label);
frm1.setBounds(400, 200, 400, 300);
frm1.setVisible(true);
frm1.setResizable(false);//锁定窗体
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="查询设备") {
new EquipmentQuery();
}else if(e.getActionCommand()=="维修设备") {
new EquipmentMaintain();
}else if(e.getActionCommand()=="添加设备") {
new EquipmentAdd();
}else if(e.getActionCommand()=="报废设备") {
new EquipmentScrap();
}else if(e.getActionCommand()=="管理设备") {
new EquipmentManager();
}else if(e.getActionCommand()=="帮助") {
new HopeDirection();
}
}
}
运行界面如下图所示:
图1.3设备管理员功能图
(2)领导登录后功能界面
代码如下:
package com.package_1;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import com.package_2.EquipmentQuery;
import com.package_2.HopeDirection;
//领导登录界面
public class Leader_UI extends JFrame implements ActionListener{
Leader_UI() {
JFrame frm = new JFrame("高校设备管理器");
frm.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//移出窗口,不能关闭窗口(用户可以切换账号登录)
frm.setLayout(null);// 设置为不使用布局管理器
// 创建标签组件,设置位置及大小及字体
JLabel label = new JLabel("欢迎使用高校设备管理器");
label.setBounds(50, 5, 300, 100);
label.setFont(new Font("", Font.BOLD, 22));
label.setHorizontalAlignment(JLabel.CENTER);
// 创建按钮对象
JButton btn1 = new JButton("查询设备");
JButton btn2 = new JButton("帮助");
btn1.setBounds(80, 100, 120, 30);
btn2.setBounds(250, 100, 60, 30);
frm.add(btn1);
frm.add(btn2);
frm.add(label);
// 创建按钮的监听器并注册,参数为事件处理者对象
btn1.addActionListener(this);// 与单击事件相关的授权处理的方法
btn2.addActionListener(this);
frm.setBounds(400, 200, 400, 200);
frm.setResizable(false);//设置窗体不可调节
frm.setLocationRelativeTo(null);//设置窗体在屏幕中间显示
frm.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="查询设备") {
new EquipmentQuery();
}
else if(e.getActionCommand()=="帮助") {
HopeDirection hope=new HopeDirection();
}
}
}
运行界面如下图所示:
图1.6领导功能图
3.操作说明
根据用户类别,选择相应的权限,输入登录信息,点击登录按钮,系统会根据数据库中的设备管理员和领导的账号和密码进行判断。若输入数据正确,则显示图1.2或者图1.5,点击图中提示信息的“确定”按钮,随后将根据用户类别分别显示领导功能界面(如图1.6)和设备管理员功能界面(如图1.3)。
三、功能实现
1.添加设备界面
代码如下:
package com.package_2;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.package_3.GetSql;
//设备添加界面
public class EquipmentAdd extends JFrame implements ActionListener{
//定义组件
JLabel jlb[],jlb1;//标签
JButton jb1,jb2;//按钮
JTextField jtf[];
JPanel jp;//面板
//创建一个查询表格,三个组件得一起使用
DefaultTableModel model;
JScrollPane jsp;//滚动面板
JTable table;//表格
public EquipmentAdd() {
// TODO Auto-generated constructor stub
int i=0;//循环控制
//定义添加设备所必要得属性
final String column[] = {"设备编号","添加号","设备名称","设备类型","生产日期","生产产家",
"购买日期","购买单价"," 数量","所属部门","设备状态","管理人员","购买登记人"};
jlb=new JLabel[column.length];//设置标签数组大小
jtf=new JTextField[column.length];//设置输入文本框数组大小
//创建按钮
jb1=new JButton("添加");
jb2=new JButton("查看");
// jb3=new JButton("录入");
//为每个按钮添加监听
jb1.addActionListener(this);
jb2.addActionListener(this);
//jb3.addActionListener(this);
//创建标签
for(i=0;i<column.length;i++) {
jlb[i]=new JLabel(column[i]);
}
jlb1=new JLabel("查询结果");
//创建文本输入框
for(i=0;i<column.length;i++) {
jtf[i]=new JTextField(20);
}
//创建普通面板
jp=new JPanel();
//设置普通面板布局格式
jp.setLayout(new FlowLayout(FlowLayout.LEFT));//使用流布局管理器,靠左排列
//向普通面板中添加组件
for(i=0;i<column.length;i++) {
if(i!=4||i!=6)//不是生产日期和购买日期
{jp.add(jlb[i]);//添加标签
jp.add(jtf[i]);//添加输入文本框
}else {//生产日期和购买日期需要指定输入格式为date型数据格式
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");/*使用SimpleDateFormat()中的parse方法
可以把string类型数据转化为date型数据,MM月份,mm是分钟*/
if(i==4) {//生产日期
jtf[i]=new JFormattedTextField(dateFormat.getDateInstance());//文本框格式为日期格式
}else {//购买日期
jtf[i]=new JFormattedTextField(dateFormat.getDateInstance());
}
}
}
jp.add(jb1);
jp.add(jb2);
// jp.add(jb3);
//设置表格
model=new DefaultTableModel(column,5);//定义表格可以显示五行数据信息
table=new JTable(model);
jsp=new JScrollPane(table);
//向窗体中添加组件
this.add(jp);
this.add(jlb1);
this.add(jsp);
//设置窗体格式,大小等属性
this.setTitle("添加设备");
this.setLayout(new GridLayout(3,1));//窗体为网格布局,3行1列
this.setSize(830,450);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setLocationRelativeTo(null);//设置窗体在屏幕中间显示
this.setVisible(true);
this.setResizable(true);//设置窗体大小可调节
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="添加") {//当所有输入框(除所属部门、设备状态、管理人员)都不为空时添加设备,因为设备信息表中的其他属性都设置为不为空
if(!jtf[0].getText().isEmpty()&&!jtf[1].getText().isEmpty()&&!jtf[2].getText().isEmpty()&&!jtf[3].getText().isEmpty()&&
!jtf[4].getText().isEmpty()&&!jtf[5].getText().isEmpty()&&!jtf[6].getText().isEmpty()&&!jtf[7].getText().isEmpty()&&
!jtf[8].getText().isEmpty()&&!jtf[12].getText().isEmpty()) {//所属部门、设备状态、管理人员这三个输入框不用判断
GetSql.getConnection();//首先连接数据库
try {
GetSql.add_equipmentData();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else {
JOptionPane.showMessageDialog(null, "请输入添加设备相应的所有属性!","提示信息",JOptionPane.WARNING_MESSAGE);
}
}else if(e.getActionCommand()=="查看") {
//将数据填入表格,和查询时填入的数据有所不同
table.setValueAt(GetSql.equipment_ID, 0, 0);
table.setValueAt(GetSql.add_id, 0, 1);
table.setValueAt(GetSql.equipment_name, 0, 2);
table.setValueAt(GetSql.equipment_type, 0, 3);
table.setValueAt(GetSql.production_date, 0, 4);
table.setValueAt(GetSql.productor, 0, 5);
table.setValueAt(GetSql.purchase_date, 0, 6);
table.setValueAt(GetSql.purchase_price, 0, 7);
table.setValueAt(GetSql.num, 0, 8);
table.setValueAt(GetSql.department, 0, 9);
table.setValueAt(GetSql.equipment_state, 0, 10);
table.setValueAt(GetSql.administrator, 0, 11);
table.setValueAt(GetSql.purchase_registrant, 0, 12);
//调用Dlear()方法将所有设备属性清空
GetSql.Clear();
}/*else if(e.getActionCommand()=="录入"){//注意jtf[7]不用判断
if(!jtf[0].getText().isEmpty()&&!jtf[1].getText().isEmpty()&&!jtf[2].getText().isEmpty()&&!jtf[3].getText().isEmpty()&&
!jtf[4].getText().isEmpty()&&!jtf[5].getText().isEmpty()&&!jtf[6].getText().isEmpty()&&
!jtf[8].getText().isEmpty()&&!jtf[9].getText().isEmpty()&&!jtf[10].getText().isEmpty()) {
GetSql.getConnection();//首先连接数据库
try {
GetSql.Date_entry();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}*/
}
//将添加界面中输入的值赋给相应的属性名,用于存入数据库,并将其填入表格
public boolean getAddValues() {
GetSql.equipment_ID=jtf[0].getText();
GetSql.add_id=jtf[1].getText();
GetSql.equipment_name=jtf[2].getText();
GetSql.equipment_type=jtf[3].getText();
GetSql.production_date=jtf[4].getText().trim();//将date型数据更改为字符串变量
GetSql.productor=jtf[5].getText();
GetSql.purchase_date=jtf[6].getText().trim();//将date型数据更改为字符串变量
GetSql.purchase_price=jtf[7].getText();
GetSql.num=jtf[8].getText();
// GetSql.num=Integer.parseInt(jtf[8].getText(),10);//将字符串转化为十进制数字
GetSql.department=jtf[9].getText();
GetSql.equipment_state=jtf[10].getText();
GetSql.administrator=jtf[11].getText();
GetSql.purchase_registrant=jtf[12].getText();
return true;
}
// //录入数据之前进行设备属性赋值
// public boolean getEntryValues() {
// GetSql.equipment_ID=jtf[0].getText();
// GetSql.equipment_name=jtf[1].getText();
// GetSql.equipment_type=jtf[2].getText();
// GetSql.production_date=jtf[3].getText();
// GetSql.productor=jtf[4].getText();
// GetSql.purchase_date=jtf[5].getText();
// GetSql.purchase_price=jtf[6].getText();
// GetSql.num=jtf[8].getText();
// GetSql.department=jtf[9].getText();
// GetSql.equipment_state=jtf[10].getText();
// return true;
// }
}
运行界面如下图所示:
图1.7设备查询图
操作说明
鼠标点击图1.3和图1.6中的“查询设备”按钮,显示图1.7中未进行查询的界面,输入设备编号或者设备名称的信息,系统将输入数据与数据库中的数据进行比较,若输入数据正确(一个或两个正确都可以),点击“查询”按钮,弹出提示信息“查询成功”,点击确定后结果就会显示再界面下方的表格中。
2.管理设备界面
代码如下:
package com.package_2;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.package_3.GetSql;
public class EquipmentManager extends JFrame implements ActionListener{
public int judge=0;
//定义组件
JButton jb1,jb2,jb3;//查询,修改,删除
JLabel jlb1,jlb2,jlb3,jlb4;//分别为设备编号,设备名称,设备状态,查询结果
JTextField jtf1,jtf2,jtf3;//设备编号和名称以及设备状态的输入框
JPanel jp,jp1;//普通面板,可加入设备的各个属性
//创建一个查询表格,下列三个组件必须有
DefaultTableModel model;
JScrollPane jsp;//滚动面板,向其中添加查询结果表
JTable table;
public EquipmentManager() {
int i=0;//用于循环控制
//创建按钮
jb1=new JButton("查询");
jb2=new JButton("修改");
jb3=new JButton("删除");
//设置监听
jb1.addActionListener(this);//当点击按钮“查询”时,触发事件
jb2.addActionListener(this);//当点击按钮“修改”时,触发事件
jb3.addActionListener(this);//当点击按钮“删除”时,触发事件
//创建标签
jlb1=new JLabel("设备编号");
jlb2=new JLabel("设备名称");
jlb3=new JLabel("设备状态");
jlb4=new JLabel("查询结果");
//创建输入文本框
jtf1=new JTextField(20);
jtf2=new JTextField(20);
jtf3=new JTextField(20);
//创建普通面板
jp=new JPanel();
//设置普通面板的布局方式(这里使用流布局管理器,可以自己选择其他布局管理器试试)
jp.setLayout(new FlowLayout(FlowLayout.LEFT));//流布局,靠左排列
//向普通面板中添加标签和输入框
jp.add(jlb1);
jp.add(jtf1);
jp.add(jlb2);
jp.add(jtf2);
jp.add(jlb3);
jp.add(jtf3);
jp.add(jb1);//添加按钮
jp.add(jb2);
jp.add(jb3);
jp1=new JPanel();
jp1.add(jlb4);//添加查询结果标签
//设置表格
final String column[] = {"设备编号","设备名称","设备类型","生产日期","生产产家","购买日期","购买单价"," 数量","所属部门","设备状态","管理人员"};
model=new DefaultTableModel(column,5);//可以在表格中显示五行记录
table=new JTable(model);
jsp=new JScrollPane(table);
//设置窗体布局格式
this.setLayout(new GridLayout(3, 1));
//窗体中添加组件
this.add(jp);
this.add(jp1);//添加查询结果标签
this.add(jsp);
//设置窗体大小,格式等
this.setTitle("设备管理");
this.setSize(830,400);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//移出窗口,不能关闭窗口(用户可以切换账号登录)
this.setLocationRelativeTo(null);//设置窗体在屏幕中间显示
this.setResizable(true);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="查询") {
if(!jtf1.getText().isEmpty()||!jtf2.getText().isEmpty()) {//使用设备编号和设备名称进行查询
//首先与数据库建立连接
GetSql.getConnection();
try {
GetSql.get_equipQueryData(jtf1.getText(),jtf2.getText());
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else if(jtf1.getText().isEmpty()&&jtf2.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "请输入设备编号或设备名称!","提示信息",JOptionPane.WARNING_MESSAGE);
}
//将数据填入表格
table.setValueAt(GetSql.equipment_ID, 0, 0);
table.setValueAt(GetSql.equipment_name, 0, 1);
table.setValueAt(GetSql.equipment_type, 0, 2);
table.setValueAt(GetSql.production_date, 0, 3);
table.setValueAt(GetSql.productor, 0, 4);
table.setValueAt(GetSql.purchase_date, 0, 5);
table.setValueAt(GetSql.purchase_price, 0, 6);
table.setValueAt(GetSql.num, 0, 7);
table.setValueAt(GetSql.department, 0, 8);
table.setValueAt(GetSql.equipment_state, 0, 9);
table.setValueAt(GetSql.administrator, 0, 10);
//调用Dlear()方法将所有设备属性清空
GetSql.Clear();
}else if(e.getActionCommand()=="修改") {
if(jtf3.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入你需要修改设备的编号或名称以及修改后的设备状态!","提示信息",JOptionPane.WARNING_MESSAGE);
}else if(jtf1.getText().isEmpty()&&jtf2.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入你需要修改设备的编号和名称!","提示信息",JOptionPane.WARNING_MESSAGE);
} else if(jtf1.getText().isEmpty()&&!jtf2.getText().isEmpty()) {//用设备名称进行修改
judge=1;
} else if(!jtf1.getText().isEmpty()&&jtf2.getText().isEmpty()) {//设备编号进行修改
judge=2;
}else {//设备编号和设备名称进行修改
judge=3;
}
//与数据库进行连接
GetSql.getConnection();
try {
GetSql.Date_maintain(jtf1.getText(), jtf2.getText(), jtf3.getText());//修改
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else if(e.getActionCommand()=="删除") {
if(!jtf1.getText().isEmpty()||!jtf2.getText().isEmpty()) {//这里我用设备编号和设备名称进行查询,可以自行添加其他属性进行查询
//首先与数据库建立连接
GetSql.getConnection();
try {
GetSql.Delete_date(jtf1.getText(),jtf2.getText());
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else if(jtf1.getText().isEmpty()&&jtf2.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "请输入设备编号或设备名称!","提示信息",JOptionPane.WARNING_MESSAGE);
}
}
}
}
运行界面如下图所示:
图1.11设备管理图
操作说明
鼠标点击图1.3中的“管理设备”按钮,进入如1.11图所示的界面,输入设备编号进行,进行相应的查询、修改和删除功能。
3.维修设备界面
代码如下:
package com.package_2;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.package_3.GetSql;
public class EquipmentMaintain extends JFrame implements ActionListener {
//定义组件
JLabel jlb[],jlb1;//标签
JButton jb1,jb2;//按钮
JTextField jtf[];
JPanel jp;//面板
//创建一个查询表格,三个组件得一起使用
DefaultTableModel model;
JScrollPane jsp;//滚动面板
JTable table;//表格
public EquipmentMaintain() {
// TODO Auto-generated constructor stub
int i=0;//循环控制
//定义添加设备所必要得属性
final String column[] = {"设备编号","维修号","维修登记人","维修日期","维修产家",
"维修金额","维修数量","设备状态"};
jlb=new JLabel[column.length];//设置标签数组大小
jtf=new JTextField[column.length];//设置输入文本框数组大小
//创建按钮
jb1=new JButton("维修");//插入维修记录的同时,修改设备信息表的设备状态为“维修中”
jb2=new JButton("查看维修记录");
//为每个按钮添加监听
jb1.addActionListener(this);
jb2.addActionListener(this);
//创建标签
for(i=0;i<column.length;i++) {
jlb[i]=new JLabel(column[i]);
}
jlb1=new JLabel("查询结果");
//创建文本输入框
for(i=0;i<column.length;i++) {
jtf[i]=new JTextField(20);
}
//创建普通面板
jp=new JPanel();
//设置普通面板布局格式
jp.setLayout(new FlowLayout(FlowLayout.LEFT));//使用流布局管理器,靠左排列
//向普通面板中添加组件
for(i=0;i<column.length;i++) {
if(i!=3)//不是维修日期
{jp.add(jlb[i]);//添加标签
jp.add(jtf[i]);//添加输入文本框
}else {//维修日期需要指定输入格式为date型数据格式
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");/*使用SimpleDateFormat()中的parse方法
可以把string类型数据转化为date型数据,MM月份,mm是分钟*/
jtf[i]=new JFormattedTextField(dateFormat.getDateInstance());//文本框格式为日期格式
}
}
jp.add(jb1);
jp.add(jb2);
//设置表格
model=new DefaultTableModel(column,5);//定义表格可以显示五行数据信息
table=new JTable(model);
jsp=new JScrollPane(table);
//向窗体中添加组件
this.add(jp);
this.add(jlb1);
this.add(jsp);
//设置窗体格式,大小等属性
this.setTitle("维修设备");
this.setLayout(new GridLayout(3,1));//窗体为网格布局,3行1列
this.setSize(830,400);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setLocationRelativeTo(null);//设置窗体在屏幕中间显示
this.setVisible(true);
this.setResizable(true);//设置窗体大小可调节
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="修改") {//当所有输入框都不为空时修改设备,设备状态也必须输入,因为需要修改设备状态为“维修中”,设备维修这个功能才有意义
if(!jtf[0].getText().isEmpty()&&!jtf[1].getText().isEmpty()&&!jtf[2].getText().isEmpty()&&!jtf[3].getText().isEmpty()&&
!jtf[4].getText().isEmpty()&&!jtf[5].getText().isEmpty()&&!jtf[6].getText().isEmpty()&&!jtf[7].getText().isEmpty()) {
GetSql.getConnection();//首先连接数据库
try {
GetSql.maintain_equipmentData(jtf[7].getText());
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else {
JOptionPane.showMessageDialog(null, "请输入维修设备相应的属性!","提示信息",JOptionPane.WARNING_MESSAGE);
}
}else if(e.getActionCommand()=="查看维修记录") {
//将数据填入表格,和查询时填入的数据有所不同
table.setValueAt(GetSql.equipment_ID, 0, 0);
table.setValueAt(GetSql.maintain_id, 0, 1);
table.setValueAt(GetSql.maintain_registrant, 0, 2);
table.setValueAt(GetSql.maintain_date, 0, 3);
table.setValueAt(GetSql.maintain_productor, 0, 4);
table.setValueAt(GetSql.maintain_price, 0, 5);
table.setValueAt(GetSql.maintain_num, 0, 6);
//调用Dlear()方法将所有设备属性清空
GetSql.Clear();
}
}
//将输入的维修信息赋给相应的变量
public boolean getMaintainValue() {
GetSql.equipment_ID=jtf[0].getText();
GetSql.maintain_id=jtf[1].getText();
GetSql.maintain_registrant=jtf[2].getText();
GetSql.maintain_date=jtf[3].getText();
GetSql.maintain_productor=jtf[4].getText();
GetSql.maintain_price=jtf[5].getText();
GetSql.maintain_num=jtf[6].getText();
GetSql.equipment_state=jtf[7].getText();
return true;
}
}
运行界面如下图所示:
图1.8设备维修图
操作说明
鼠标点击图1.3中“设备维修”按钮后,进入上图所示的界面,输入框中输入所有数据,然后点击“维修”按钮,若数据输入无误,点击按钮后界面弹出“设备维修成功”的提示信息,否则界面弹出“设备维修失败”的提示信息,若设备维修成功点击确认后结果将显示在界面的下方表格中,否则表格中不显示数据。
4.报废设备界面
代码如下:
package com.package_2;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.package_3.GetSql;
public class EquipmentScrap extends JFrame implements ActionListener {
//定义组件
JLabel jlb[],jlb1;//标签
JButton jb1,jb2;//按钮
JTextField jtf[];
JPanel jp;//面板
//创建一个查询表格,三个组件得一起使用
DefaultTableModel model;
JScrollPane jsp;//滚动面板
JTable table;//表格
public EquipmentScrap() {
// TODO Auto-generated constructor stub
int i=0;//循环控制
//定义添加设备所必要得属性
final String column[] = {"设备编号","报废号","报废登记人","报废日期","报废数量","原有数量","设备状态"};
jlb=new JLabel[column.length];//设置标签数组大小
jtf=new JTextField[column.length];//设置输入文本框数组大小
//创建按钮
jb1=new JButton("报废");//插入维修记录的同时,修改设备信息表的设备状态为“维修中”
jb2=new JButton("查看报废记录");
//为每个按钮添加监听
jb1.addActionListener(this);
jb2.addActionListener(this);
//创建标签
for(i=0;i<column.length;i++) {
jlb[i]=new JLabel(column[i]);
}
jlb1=new JLabel("查询结果");
//创建文本输入框
for(i=0;i<column.length;i++) {
jtf[i]=new JTextField(20);
}
//创建普通面板
jp=new JPanel();
//设置普通面板布局格式
jp.setLayout(new FlowLayout(FlowLayout.LEFT));//使用流布局管理器,靠左排列
//向普通面板中添加组件
for(i=0;i<column.length;i++) {
if(i!=3)//不是维修日期
{jp.add(jlb[i]);//添加标签
jp.add(jtf[i]);//添加输入文本框
}else {//维修日期需要指定输入格式为date型数据格式
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");/*使用SimpleDateFormat()中的parse方法
可以把string类型数据转化为date型数据,MM月份,mm是分钟*/
jtf[i]=new JFormattedTextField(dateFormat.getDateInstance());//文本框格式为日期格式
}
}
jp.add(jb1);
jp.add(jb2);
//设置表格
model=new DefaultTableModel(column,5);//定义表格可以显示五行数据信息
table=new JTable(model);
jsp=new JScrollPane(table);
//向窗体中添加组件
this.add(jp);
this.add(jlb1);
this.add(jsp);
//设置窗体格式,大小等属性
this.setTitle("报废设备");
this.setLayout(new GridLayout(3,1));//窗体为网格布局,3行1列
this.setSize(830,400);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setLocationRelativeTo(null);//设置窗体在屏幕中间显示
this.setVisible(true);
this.setResizable(true);//设置窗体大小可调节
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="修改") {//当所有输入框都不为空时报废设备,设备状态也必须输入,因为需要修改设备状态为“已报废”,设备报废这个功能才有意义
if(!jtf[0].getText().isEmpty()&&!jtf[1].getText().isEmpty()&&!jtf[2].getText().isEmpty()&&!jtf[3].getText().isEmpty()&&
!jtf[4].getText().isEmpty()&&!jtf[5].getText().isEmpty()&&!jtf[6].getText().isEmpty()) {
GetSql.getConnection();//首先连接数据库
try {
GetSql.scrap_equipmentData(jtf[6].getText());
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else {
JOptionPane.showMessageDialog(null, "请输入报废设备相应的属性!","提示信息",JOptionPane.WARNING_MESSAGE);
}
}else if(e.getActionCommand()=="查看报废记录") {
//将数据填入表格,和查询时填入的数据有所不同
table.setValueAt(GetSql.equipment_ID, 0, 0);
table.setValueAt(GetSql.scrap_id, 0, 1);
table.setValueAt(GetSql.scrap_registrant, 0, 2);
table.setValueAt(GetSql.scrap_date, 0, 3);
table.setValueAt(GetSql.scrap_num, 0, 4);
table.setValueAt(GetSql.original_num, 0, 5);
table.setValueAt(GetSql.equipment_state, 0, 6);
//调用Dlear()方法将所有设备属性清空
GetSql.Clear();
}
}
//将输入的维修信息赋给相应的变量
public boolean getScrapValue() {
GetSql.equipment_ID=jtf[0].getText();
GetSql.scrap_id=jtf[1].getText();
GetSql.scrap_registrant=jtf[2].getText();
GetSql.scrap_date=jtf[3].getText();
GetSql.scrap_num=jtf[4].getText();
GetSql.original_num=jtf[5].getText();
GetSql.equipment_state=jtf[7].getText();
return true;
}
}
运行界面如下图所示:
图1.10设备报废图
操作说明
鼠标点击图1.3中“设备报废”按钮后,进入上图所示的界面,输入框中输入所有数据,然后点击“报废”按钮,若数据输入无误,点击按钮后界面弹出“设备维修成功”的提示信息,否则界面弹出“设备维修失败”的提示信息,若设备维修成功点击确认后结果将显示在界面的下方表格中,否则表格中不显示数据。
5.查询设备界面
代码如下:
package com.package_2;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.package_3.GetSql;
public class EquipmentQuery extends JFrame implements ActionListener{
//定义组件
JButton jb;//查询
JLabel jlb1,jlb[];//设备的各个属性名
JTextField jtf[];//设备可输入的各个属性值
JPanel jp,jp1;//普通面板,可加入设备的各个属性
//创建一个查询表格,下列三个组件必须有
DefaultTableModel model;
JScrollPane jsp;//滚动面板,向其中添加查询结果表
JTable table;
public EquipmentQuery() {
int i=0;//用于循环控制
//创建按钮
jb=new JButton("查询");
//设置监听
jb.addActionListener(this);//当点击按钮“查询”时,触发事件
//创建标签
final String column[] = {"设备编号","设备名称","设备类型","生产日期","生产产家","购买日期",
"购买单价"," 数量","所属部门","设备状态","管理人员"};
jlb=new JLabel[column.length];//创建标签数组(必须创建,不然无法得到标签数组的大小会显示异常)
for( i=0;i<column.length;i++) {
jlb[i]=new JLabel(column[i]);
}
jlb1=new JLabel("查询结果");
//创建输入文本框
jtf=new JTextField[column.length];//必须创建,原因如上所示
for(i=0;i<column.length;i++) {
jtf[i]=new JTextField(20);//Jtextfiled()中可输入列值
}
//创建普通面板
jp=new JPanel();
//设置普通面板的布局方式(这里使用流布局管理器,可以自己选择其他布局管理器试试)
// jp.setLayout(new GridLayout(3,8));//网格布局,排列方式为3行8列
jp.setLayout(new FlowLayout(FlowLayout.LEFT));//流布局,靠左排列
//向普通面板中添加标签和输入框
for(i=0;i<column.length;i++) {
jp.add(jlb[i]);
jp.add(jtf[i]);
}
jp.add(jb);//添加查询按钮
jp1=new JPanel();//可取消注释并做相应得修改,自行查看效果
jp1.add(jlb1);//添加查询结果标签
//设置表格
model=new DefaultTableModel(column,5);//可以在表格中显示五行记录
table=new JTable(model);
jsp=new JScrollPane(table);
//设置窗体布局格式
this.setLayout(new GridLayout(3, 1));
//窗体中添加组件
this.add(jp);
this.add(jp1);//添加查询结果标签
this.add(jsp);
//设置窗体大小,格式等
this.setTitle("设备查询");
this.setSize(830,400);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//移出窗口,不能关闭窗口(用户可以切换账号登录)
this.setLocationRelativeTo(null);//设置窗体在屏幕中间显示
this.setResizable(true);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="查询") {
if(!jtf[0].getText().isEmpty()||!jtf[1].getText().isEmpty()) {//这里我用设备编号和设备名称进行查询,可以自行添加其他属性进行查询
//首先与数据库建立连接
GetSql.getConnection();
try {
GetSql.get_equipQueryData(jtf[0].getText(),jtf[1].getText());
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else if(jtf[0].getText().isEmpty()&&jtf[1].getText().isEmpty()){
JOptionPane.showMessageDialog(null, "请输入设备编号或设备名称!","提示信息",JOptionPane.WARNING_MESSAGE);
}
//jtf[0].setText("");//查询后,可以将设备编号输入框清零(一般不清零,方便查看查询的是那个设备)
//将数据填入表格
table.setValueAt(GetSql.equipment_ID, 0, 0);
table.setValueAt(GetSql.equipment_name, 0, 1);
table.setValueAt(GetSql.equipment_type, 0, 2);
table.setValueAt(GetSql.production_date, 0, 3);
table.setValueAt(GetSql.productor, 0, 4);
table.setValueAt(GetSql.purchase_date, 0, 5);
table.setValueAt(GetSql.purchase_price, 0, 6);
table.setValueAt(GetSql.num, 0, 7);
table.setValueAt(GetSql.department, 0, 8);
table.setValueAt(GetSql.equipment_state, 0, 9);
table.setValueAt(GetSql.administrator, 0, 10);
//调用Dlear()方法将所有设备属性清空
GetSql.Clear();
}
}
}
运行界面如下图所示:
图1.7设备查询图
操作说明
鼠标点击图1.3和图1.6中的“查询设备”按钮,显示图1.7中未进行查询的界面,输入设备编号或者设备名称的信息,系统将输入数据与数据库中的数据进行比较,若输入数据正确(一个或两个正确都可以),点击“查询”按钮,弹出提示信息“查询成功”,点击确定后结果就会显示再界面下方的表格中。
6.帮助界面(操作说明界面)
代码如下:
package com.package_2;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
public class HopeDirection {
JFrame frm;
JLabel lab;
public HopeDirection() {
// TODO Auto-generated constructor stub
frm=new JFrame("使用说明");
frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//移出窗口,不能关闭窗口(用户可以切换账号登录)
frm.setLayout(null);
helpDirection();
frm.add(lab);
frm.setSize(400,300);
frm.setLocationRelativeTo(null);//设置窗体显示在屏幕中间显示
frm.setVisible(true);
}
public void helpDirection() {
lab=new JLabel("系统使用说明");
lab.setBounds(100,0,200,40);
lab.setFont(new Font("",Font.BOLD,22));//设置字体大小
lab.setHorizontalAlignment(JLabel.CENTER);
final JTextArea textarea=new JTextArea("需要查询请选择查询按钮,可查看所有正常设备的信息\n\n"
+ "需要管理请选择管理设备按钮,可对设备的信息进行删除,同时可对当前\n设备的状态进行修改\n\n"
+"需要添加请选择添加设备按钮,同时可查看历史添加记录,此外还有录入\n功能,即可将新设备信息添加进总设备信息中\n\n"
+ "需要维修请选择维修设备按钮,同时可查看历史维修记录\n\n"
+"需要报废请选择报废设备按钮,同时可查看历史报废记录,还可以统计设\n备的报废率\n");
textarea.setBounds(2,60,400,150);
textarea.setEditable(false);//设置为文本不可编辑
textarea.setColumns(152);
frm.add(textarea);
}
}
运行界面如下图所示:
图1.12系统使用说明图
操作说明
点击图1.3和图1.6中的“帮助”按钮,系统就会弹出图1.12,显示相应的功能介绍,用户可按照图中的使用说明进行使用(你会发现和第一版中的一模一样,因为这个界面就没改)。
7.数据库连接及其相关的数据操作
该部分代码较长,需要静下心来与各个功能界面 一 一 对应进行分析理解。
代码如下:
package com.package_3;
//连接数据库mysql
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.sql.Date;
import javax.print.attribute.PrintServiceAttribute;
import javax.swing.JOptionPane;
import com.package_2.EquipmentAdd;
import com.package_2.EquipmentMaintain;
import com.package_2.EquipmentManager;
import com.package_2.EquipmentScrap;
public class GetSql {
//设定用户账号,密码,和姓名并将查询的结果赋值用于判断登录界面的输入是否正确
public static String userID=null;//这里为public,否则当其他方法调用这三个属性时无法调用
public static String pwd=null;
public static String name=null;
//设备属性
public static String equipment_ID;//设备编号
public static String equipment_name;//设备名称
public static String equipment_type;//设备类型
public static String production_date;//生产日期
public static String productor;//生产产家
public static String purchase_date;//购买日期
public static String purchase_price;//购买单价
public static String num;//数量
public static String department;//所属部门
public static String equipment_state;//设备状态
public static String administrator;//管理人员
//添加设备中的使用属性
public static String purchase_registrant;//购买登记人
public static String add_id;//添加号
//维修设备中的使用属性
public static String maintain_registrant;//维修登记人
public static String maintain_id;//维修号
public static String maintain_price;//维修金额
public static String maintain_date;//维修日期
public static String maintain_productor;//维修厂家
public static String maintain_num;//维修数量
//报废设备中的使用属性
public static String scrap_registrant;//报废登记人
public static String scrap_id;//报废号
public static String scrap_date;//报废日期
public static String scrap_num;//报废数量
public static String original_num;//原有数量
//用于连接数据库
static Connection ct=null;
static PreparedStatement ps=null,ps1=null;
static ResultSet rs=null,rs1=null;
//连接数据库,可用于子类的继承
public static void getConnection() {
try {//加载驱动,将其加载到内存中
Class.forName("com.mysql.jdbc.Driver");
//连接数据源,用户名,密码等
ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/management_equipment?useUnicode=true&characterEncoding=utf8","root","root");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//进行数据库查询,进行登录验证有无该用户
public static void queryLeader(String s,String t) {//领导信息查询
try {
ps=ct.prepareStatement("select * from leader where 账号=? and 密码=?");
ps.setString(1, s);
ps.setString(2, t);
rs=ps.executeQuery();
if(rs.next()) {
userID=rs.getString(1);
pwd=rs.getString(2);
name=rs.getString(3);
}else {
JOptionPane.showMessageDialog(null, "没有该用户!","提示信息",JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void queryEquipment_manager(String s,String t) throws SQLException {//设备管理员信息查询
try {
ps=ct.prepareStatement("select * from equipment_manager where 账号=? and 密码=?");
ps.setString(1, s);
ps.setString(2, t);
rs=ps.executeQuery();
if(rs.next()) {
userID=rs.getString(1);
pwd=rs.getString(2);
name=rs.getString(3);
}else {
JOptionPane.showMessageDialog(null, "没有该用户!","提示信息",JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
if(rs!=null) {
rs.close();//关闭顺序与使用顺序相反
}if(ps!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}
//根据设备编号,从数据库中将数据填入表格中
//用于领导界面和设备管理员界面中的共有的“设备查询”功能按钮
public static void get_equipQueryData(String s,String t) throws SQLException {//两个界面共同调用一个方法
try {
ps=ct.prepareStatement("select * from equipment_information where 设备编号=? or 设备名称=?");
ps.setString(1, s);
ps.setString(2, t);
rs=ps.executeQuery();
if(rs.next()) {//将设备的信息取出
equipment_ID=rs.getString(1);
equipment_name=rs.getString(2);
equipment_type=rs.getString(3);
production_date=rs.getString(4);
productor=rs.getString(5);
purchase_date=rs.getString(6);
purchase_price=rs.getString(7);
num=rs.getString(8);
department=rs.getString(9);
equipment_state=rs.getString(10);
administrator=rs.getString(11);
// EquipmentQuery.model.addRow(new Vector<>(Arrays.asList(equipment_ID,equipment_name,equipment_type,production_date,productor,
// purchase_date,purchase_price,num,department,equipment_state,administrator)));
if(rs.isLast()) {
JOptionPane.showMessageDialog(null,"查询成功!","提示信息",JOptionPane.WARNING_MESSAGE);
}
}else {
JOptionPane.showMessageDialog(null, "查询失败,没有该设备!","提示信息",JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
if(rs!=null) {
rs.close();//关闭顺序与使用顺序相反
}if(ps!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}
//添加设备,用于设备管理员中的功能实现
public static void add_equipmentData() throws SQLException{
Date pur_date=null,pro_date=null;//用来存放,数据库中的两个Date型数据(我们定义的是string型(jtf[])中的数据)
SimpleDateFormat date=new SimpleDateFormat("yyyy-MM-dd");//使用SimpleDateFormat()中的parse方法可以把string类型数据转化为date型数据,MM月份,mm是分钟
//将添加界面中输入的值赋给相应的属性名,用于存入数据库,并将其填入表格
EquipmentAdd add=new EquipmentAdd();//各个属性赋值
add.getAddValues();
try {//赋值后再将其转化为date型
// pur_date=new Date();
// pro_date=new Date();
pro_date= (Date) date.parse(production_date);
pur_date= (Date) date.parse(purchase_date);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
//由输入框中的数据向设备信息表中添加8个值
ct.setAutoCommit(false);//更改JDBC事务的默认提交方式
ps=ct.prepareStatement("insert into equipment_information values(?,?,?,?,?,?,?,?)");
ps.setString(1, equipment_ID);
ps.setString(2, equipment_name);
ps.setString(3, equipment_type);
ps.setDate(4, (java.sql.Date) pro_date);
ps.setString(5, productor);
ps.setDate(6, (java.sql.Date) pur_date);
ps.setString(7, purchase_price);
ps.setString(8, num);
int ret=ps.executeUpdate();
//由输入框中的数据向设备添加表中添加8个值
ps1=ct.prepareStatement("insert into add_equipment values(?,?,?)");
ps1.setString(1, equipment_ID);
ps1.setString(2, add_id);
ps1.setString(3, purchase_registrant);
int ret1=ps1.executeUpdate();
ct.commit();//提交JDBC事务
if(ret==1&&ret1==1) {/*******************上面两个sql语句应该使用事务特性,保证两个插入都在同时完成(数据库知识)**************/
JOptionPane.showMessageDialog(null, "添加设备成功!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "添加设备失败!","提示信息",JOptionPane.WARNING_MESSAGE);
}
ct.setAutoCommit(true);//恢复JDBC事务提交的默认方式
} catch (Exception e) {
// TODO: handle exception
ct.rollback();//回滚JDBC事务
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
//关闭顺序与使用顺序相反
if(ps!=null&&ps1!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}
// //添加设备中的设备录入
// public static void Date_entry() throws SQLException {
// //将添加界面中输入的值赋给相应的属性名,用于存入设备信息数据库
// EquipmentAdd add=new EquipmentAdd();//各个属性赋值
// add.getEntryValues();
// try {//注意顺序必须和数据库里一一对应
// ps=ct.prepareStatement("insert into equipment_information values(?,?,?,?,?,?,?,?,?,?,null)");//添加的值为输入框中的11个值
// ps.setString(1, equipment_ID);
// ps.setString(2, equipment_name);
// ps.setString(3, equipment_type);
// ps.setString(4, production_date);
// ps.setString(5, productor);
// ps.setString(6, purchase_date);
// ps.setString(7, purchase_price);
// ps.setString(11, administrator);
// ps.setString(8, num);
// ps.setString(9,department);
// ps.setString(10, equipment_state);
// int ret=ps.executeUpdate();
// if(ret==1) {
// JOptionPane.showMessageDialog(null, "设备录入成功!","提示信息",JOptionPane.WARNING_MESSAGE);
// }else {
// JOptionPane.showMessageDialog(null, "设备录入失败!","提示信息",JOptionPane.WARNING_MESSAGE);
// }
// } catch (Exception e) {
// // TODO: handle exception
// e.printStackTrace();
// }finally {//使用finally块来关闭数据库资源
// if(ps!=null) {
// ps.close();
// }if(ct!=null) {
// ct.close();
// }
// }
// //调用Dlear()方法将所有设备属性清空
// Clear();
// }
public static void Date_maintain(String d,String n,String s) throws SQLException {//S设备状态,n设备名称,d设备编号
EquipmentManager em=new EquipmentManager();
if(em.judge==1) {
try {
ps=ct.prepareStatement("update equipment_information set '设备状态'=? where '设备编号'=?" );//由设备编号修改设备状态
ps.setString(1, d);
ps.setString(10, s);
int i=ps.executeUpdate();
if(i!=0) {
JOptionPane.showMessageDialog(null, "修改成功!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "修改失败!","提示信息",JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
if(ps!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}else if(em.judge==2) {
try {
ps=ct.prepareStatement("update equipment_information set '设备状态'=? where '设备名称'=?" );//由设备名称修改设备状态
ps.setString(2, n);
ps.setString(10, s);
int i=ps.executeUpdate();
if(i!=0) {
JOptionPane.showMessageDialog(null, "修改成功!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "修改失败!","提示信息",JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
if(ps!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}else if(em.judge==3) {
try {
ps=ct.prepareStatement("update equipment_information set '设备状态'=? where '设备编号'=? '设备名称=?'");//修改设备状态
ps.setString(1, d);
ps.setString(2, n);
ps.setString(10, s);
int i=ps.executeUpdate();
if(i!=0) {
JOptionPane.showMessageDialog(null, "修改成功!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "修改失败!","提示信息",JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
if(ps!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}
}
//管理设备界面中对修改设备的删除
public static void Delete_date(String d,String n) throws SQLException {//d设备编号,n设备名称
try {
ps=ct.prepareStatement("delete from equipment_intformation where '设备编号=?' and '设备名称=?'");
ps.setString(1, d);
ps.setString(2, n);
int i=ps.executeUpdate();
if(i==1) {
JOptionPane.showMessageDialog(null, "删除成功!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "删除失败!","提示信息",JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
if(ps!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}
//维修设备,只需要更改设备信息表中的设备状态即可
public static void maintain_equipmentData(String s) throws SQLException {
//将维修界面中输入的值赋给相应的属性名,用于存入数据库,并将其填入表格
EquipmentMaintain maintain=new EquipmentMaintain();//各个属性赋值
maintain.getMaintainValue();
try {
ct.setAutoCommit(false);//更改JDBC事务的默认提交方式
ps=ct.prepareStatement("update equipment_intformation set 设备状态=?");
ps.setString(1, s);
int i=ps.executeUpdate();
ps1=ct.prepareStatement("insert into maintain_equipment values(?,?,?,?,?,?,?)");
ps1.setString(1,equipment_ID);
ps1.setString(2, maintain_id);
ps1.setString(3, maintain_registrant);
ps1.setString(4, maintain_date);
ps1.setString(5, maintain_productor);
ps1.setString(6, maintain_price);
ps1.setString(7, maintain_num);
int ret=ps.executeUpdate();
ct.commit();//提交JDBC事务
if(i==1&&ret==1) {
JOptionPane.showMessageDialog(null, "维修成功!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "维修失败!","提示信息",JOptionPane.WARNING_MESSAGE);
}
ct.setAutoCommit(true);//恢复JDBC默认的提交事务
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
if(ps!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}
//报废设备,只需要更改设备信息表中的设备状态即可
public static void scrap_equipmentData(String s) throws SQLException {
//将维修界面中输入的值赋给相应的属性名,用于存入数据库,并将其填入表格
EquipmentScrap scrap=new EquipmentScrap();//各个属性赋值
scrap.getScrapValue();
try {
ct.setAutoCommit(false);//更改JDBC事务的默认提交方式
ps=ct.prepareStatement("update equipment_intformation set 设备状态=?");
ps.setString(1, s);
int i=ps.executeUpdate();
ps1=ct.prepareStatement("insert into scrap_equipment values(?,?,?,?,?,?)");
ps1.setString(1,equipment_ID);
ps1.setString(2, scrap_id);
ps1.setString(3, scrap_registrant);
ps1.setString(4, scrap_date);
ps1.setString(5, scrap_num);
ps1.setString(6, original_num);
int ret=ps.executeUpdate();
ct.commit();//提交JDBC事务
if(i==1&&ret==1) {
JOptionPane.showMessageDialog(null, "报废成功!","提示信息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "报废失败!","提示信息",JOptionPane.WARNING_MESSAGE);
}
ct.setAutoCommit(true);//恢复JDBC默认的提交事务
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {//使用finally块来关闭数据库资源
if(ps!=null) {
ps.close();
}if(ct!=null) {
ct.close();
}
}
}
//将设备的所有属性都设置为空,以便进行下一次赋值,防止数据泄露
public static void Clear() {
equipment_ID=null;
equipment_name=null;
equipment_state=null;
equipment_type=null;
production_date=null;
productor=null;
purchase_date=null;
purchase_price=null;
purchase_registrant=null;
num=null;
department=null;
administrator=null;
}
}
总结
1.登录界面进行登录操作。可选择不同的身份进行登录,随后跳转到不同的功能界面以实现不同的功能。
2.程序中使用了事件监听,Java操作mysql数据库等知识,如数据库中的事务特性等。
3.界面中使用了JTable等组件,将查询结果显示在表格中。
该系统是我初学Java,在看了这篇博文后写的,作为一名初学者在网上进行学习的过程中找一篇优秀且免费的博文进行“copy”与学习很不容易(相信大部分同学都有这种体验哈,也可能是我low了苦笑😊😊),而且该博主不需要积分就可以观看学习,我深受启发写了这篇博文,目的是记录一下自己的学习过程,同时也希望可以帮助更多正在学习图形界面开发的小伙伴。而该系统中的设备添加等功能还有错误,我一直没有解决,若你们解决了可以私信我,我解决后再对内容进行更新。