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:42public static String getDefaultDate(){return SimpleDateFormat.getDateTimeInstance().format(new Date());}//采用默认格式输出一个时间日期字符串,如2014-1-6 17:10:42public static String getDefaultDate(Date date){return SimpleDateFormat.getDateTimeInstance().format(date);}//采用默认格式输出一个日期字符串,如2014-1-6public static String getDate(){return SimpleDateFormat.getDateInstance().format(new Date());}//采用默认格式输出一个时间字符串,如17:13:27public 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:27public 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 blocke.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 blocke.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 blocke.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();} elseJOptionPane.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 blocke.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() {@Overridepublic 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 方式二
点击此处直接获取项目。