1、项目功能演示
DC00018基于java swing+MySQL花卉信息管理系统java项目信息管理系统
2、项目功能描述
基于java swing+MySQL花卉信息管理系统
系统包括用户信息管理以及花卉信息管理等功能。
3、项目运行截图
4、项目核心代码
4.1 日期格式化
package utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 日期时间工具类
* @author Administrator
*
*/
public class DateUtils {
//采用默认格式输出一个时间日期字符串,如2014-1-6 17:10:42
public static String getDefaultDate(){
return SimpleDateFormat.getDateTimeInstance().format(new Date());
}
//采用默认格式输出一个时间日期字符串,如2014-1-6 17:10:42
public static String getDefaultDate(Date date){
return SimpleDateFormat.getDateTimeInstance().format(date);
}
//采用默认格式输出一个日期字符串,如2014-1-6
public static String getDate(){
return SimpleDateFormat.getDateInstance().format(new Date());
}
//采用默认格式输出一个时间字符串,如17:13:27
public static String getTime(){
return SimpleDateFormat.getTimeInstance().format(new Date());
}
//采用指定pattern格式输出一个字符串
public static String getDateFromPattern(String pattern){
return new SimpleDateFormat(pattern).format(new Date());
}
//采用yyyy-MM-dd HH:mm:ss格式输出一个时间字符串,如 2014-01-06 17:13:27
public static String getDefaultDateFromPattern(){
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
//把一个字符串日期解析成一个date类型
public static Date toDate(String date){
try {
return SimpleDateFormat.getDateTimeInstance().parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new Date();
}
}
4.2 数据库操作类
package db;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
//数据库工具类
public class DBService {
private static String driver=null;
private static String url=null;
private static String name=null;
private static String pwd=null;
public static void load(){
Properties pro = new Properties();
try {
//File file=new File("db.properties");
//FileInputStream in=new FileInputStream("db.properties");
//查找具有给定名称的资源,返回一个inputstream输入流,不加/时候,默认从此类所在的包下查找
InputStream in=DBService.class.getResourceAsStream("db.properties");
pro.load(in);
driver=pro.getProperty("driver");
url=pro.getProperty("url");
name=pro.getProperty("name");
pwd=pro.getProperty("pwd");
Class.forName(driver);
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static{
load();
}
public static Connection getConn(){
try {
return DriverManager.getConnection(url, name, pwd);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static Statement openStmt(){
try {
return getConn().createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static int exxcuteUpdate(String sql){
try {
return openStmt().executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
public static ResultSet executeQuery(String sql){
try {
return openStmt().executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void close(ResultSet rs) {
if (rs != null)
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Statement stmt) {
if (stmt != null)
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection conn){
if (conn!=null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet rs,Statement stmt,Connection conn){
close(rs);
close(stmt);
close(conn);
}
}
4.3 登录窗口
package view;
import java.awt.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import model.Manager;
import dao.ManagerDao;
import java.awt.event.*;
import java.util.*;
//登陆界面
public class UserLogin extends JFrame implements ActionListener {
// 定义所需要的基本控件
JLabel jl1, jl2;
JTextField jtf1;
JPasswordField jpf1;
JButton jb1, jb2;
// 定义字体样式
Font f1 = new Font("宋体", Font.PLAIN, 16);
public static void main(String[] args) {
new UserLogin();
}
public UserLogin() {
init();
}
// 初始化界面
private void init() {
Container ct = this.getContentPane();
this.setLayout(null);
jl1 = new JLabel("请输入用户名: ");
jl1.setFont(f1);
jl1.setBounds(47, 170, 119, 20);
ct.add(jl1);
jtf1 = new JTextField();
jtf1.setBounds(165, 165, 115, 30);
jtf1.setFont(f1);
ct.add(jtf1);
jl2 = new JLabel("请输入密码: ");
jl2.setFont(f1);
jl2.setBounds(47, 218, 119, 20);
ct.add(jl2);
jpf1 = new JPasswordField();
jpf1.setBounds(165, 213, 115, 30);
jpf1.setFont(f1);
jpf1.setEchoChar('*');// 设置回显字符是*
ct.add(jpf1);
jb1 = new JButton("登陆");
jb1.setFont(f1);
jb1.setBounds(86, 265, 80, 30);
jb1.addActionListener(this);
ct.add(jb1);
jb2 = new JButton("清空");
jb2.setFont(f1);
jb2.setBounds(196, 265, 80, 30);
jb2.addActionListener(this);
ct.add(jb2);
BackImage bi = new BackImage();
bi.setBounds(0, 0, 348, 330);
ct.add(bi);
// 获取屏幕的宽度和高度
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setSize(355, 365);
this.setLocation(width / 2 - 200, height / 2 - 150);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setTitle("用户登陆");
this.setResizable(false);// 设置不可更改大小
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
String name = jtf1.getText().trim();// 拿到输入的用户名
if (e.getSource() == jtf1) {// 切换输入焦点到密码框,输入用户名后光标自动跳到密码框
jpf1.requestFocus();
} else if (e.getSource() == jb2) {// 单击"清空"按钮,将清空界面上的所有信息
jtf1.setText("");
jpf1.setText("");
jtf1.requestFocus();// 将输入焦点设置到文本框
} else if (e.getSource() == jb1) {// 事件源为登录按钮
if (name.equals("")) {
JOptionPane.showMessageDialog(this, "用户名不能为空!");
return;
}
if (jpf1.getText().trim().equals("")) {
JOptionPane.showMessageDialog(this, "用户密码不能为空!");
return;
}
ManagerDao mdao = new ManagerDao();
Manager m = mdao.findByName(name);
if (m == null)
JOptionPane.showMessageDialog(this, "用户名不存在,请重新输入!!!");
if (m!=null && String.valueOf(jpf1.getPassword()).equals(m.getPwd())) {
JOptionPane.showMessageDialog(this, "恭喜您,登录成功!!!");
new MainMenu(m.getName());
this.dispose();
} else
JOptionPane.showMessageDialog(this, "密码错误,请重新输入!!!");
}
}
}
class BackImage extends JPanel {
Image im;
public BackImage() {
try {
im = ImageIO.read(new File("imgs/login.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 重写jpanel的paint方法
public void paint(Graphics g) {
// 参数含义:要绘制的指定图像,x坐标,y坐标,weight,height,画在那个容器上
g.drawImage(im, 0, 0, 348, 330, this);
}
}
4.4 主界面窗口
package view;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
//管理员登录后的主界面
public class MainMenu extends JFrame{
private String name;//用于接收登录人的名字
//初始化所需要的基本控件
//创建树的节点数组
private DefaultMutableTreeNode nodes[]={
new DefaultMutableTreeNode(new MyNode("花卉信息管理系统")),
new DefaultMutableTreeNode(new MyNode("用户信息管理")),
new DefaultMutableTreeNode(new MyNode("花卉信息管理")),
new DefaultMutableTreeNode(new MyNode("退出系统"))
};
//创建根模型
private DefaultTreeModel model=null;
//创建树状列表控件
private JTree jt=null;
private JScrollPane scroll=null;
//创建存放主功能模块的面板
private JPanel jp=null;
//创建分隔板,设置水平分割
private JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true);
//声明卡片布局
private CardLayout c1=null;
public MainMenu(String name){
this.name=name;
initTree();
initPanel();
initFrame();
addListener();
}
private void addListener() {
jt.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
//拿到用户选中的节点
DefaultMutableTreeNode dmt=(DefaultMutableTreeNode)e.getPath().getLastPathComponent();
MyNode node=(MyNode)dmt.getUserObject();
if(node.value.equals("花卉信息管理系统"))
c1.show(jp, "root");
if(node.value.equals("用户信息管理"))
c1.show(jp, "um");
if(node.value.equals("花卉信息管理"))
c1.show(jp, "fm");
else if(node.value.equals("退出系统")){
int i=JOptionPane.showConfirmDialog(MainMenu.this, "是否退出系统");
if(i==JOptionPane.YES_OPTION)
System.exit(0);
}
}
});
}
//初始化主窗体
public void initFrame(){
jsp.setDividerLocation(200);
jsp.setDividerSize(4);
this.add(jsp);
this.setTitle("花卉信息管理系统");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//获取屏幕的宽度和高度
Dimension ds=Toolkit.getDefaultToolkit().getScreenSize();
int centerX = ds.width / 2;
int centerY = ds.height / 2;
int w = 950;// 本窗体宽度
int h = 650;// 本窗体高度
this.setBounds(centerX - w / 2, centerY - h / 2 - 30, w, h);// 设置窗体出现在屏幕中央
this.setResizable(false);
this.setVisible(true);
}
//初始化主功能面板的方法
public void initPanel(){
jp=new JPanel();
c1=new CardLayout();
//设置卡片布局
jp.setLayout(c1);
// 将各功能模块以卡片布局的形式放入主面板
jp.add("root",new Welcome(this.name));
jp.add("um",new UserManager());//用户管理
jp.add("fm",new FlowerManager());//花卉信息管理
//添加到分隔板的右边
jsp.setRightComponent(jp);
}
//初始化树状列表的方法
public void initTree(){
model=new DefaultTreeModel(nodes[0]);
for(int i=1;i<4;i++){
model.insertNodeInto(nodes[i],nodes[0], i-1);
}
jt=new JTree(model);
jt.setEditable(false);
scroll=new JScrollPane(jt);
//把带有树状列表的滚动面板添加到分隔板的左边
jsp.setLeftComponent(scroll);
}
public static void main(String[] args) {
new MainMenu("asdf");
}
// 自定义的初始化树节点的数据对象的类
class MyNode {
private String value;
public MyNode(String value) {
this.value = value;
}
public String toString() {
return this.value;
}
}
}
5、项目包含内容
6、项目获取
6.1 方式一
私聊或者扫描下方名片获取项目。
6.2 方式二
点击此处直接获取项目。