DC00018基于java swing+MySQL花卉信息管理系统

news2024/12/25 14:48:07

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 方式二

点击此处直接获取项目。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ STL容器(四) —— vector底层剖析

这篇讲解vector&#xff0c;不说废话&#xff0c;直接开始&#xff01; 文章目录 原理UML类图代码实现构造函数插入元素删除元素清空容器析构函数赋值运算符 案例分析 原理 这里简单说一下 vector 的大致思想&#xff0c;动态数组&#xff0c;即它的长度会随着我们插入元素而产…

【YOLO目标检测二维码数据集】共3112张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;3112 标注数量(txt文件个数)&#xff1a;3112 标注类别数&#xff1a;1 标注类别名称&#xff1a;qrcode 数据集下载&#xff1a;二维码数据集 图片示例 数据集图片&#xff1a; 数据集…

【开源免费】基于SpringBoot+Vue.JS微服务在线教育系统(JAVA毕业设计)

本文项目编号 T 060 &#xff0c;文末自助获取源码 \color{red}{T060&#xff0c;文末自助获取源码} T060&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

【hot100-java】【合并两个有序链表】

记忆中&#xff0c;两个指针合并即可。 建立哨兵节点dum /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { t…

idea启动项目报错Command line is too long

idea启动项目报错 Command line is too long. Shorten command line for Idmap5CoreApplication or also for Spring Boot default configuration? 选择出问题的项目&#xff0c;shorten command line 选项选择 JAR manifest 或者 classpath file 选项

用责任链模式改造 if else

我的上一篇文章&#xff0c;因为if else 多了&#xff0c;捣鼓很久&#xff0c;今天用责任链模式改造一下。 代码写着写着&#xff0c;if else if 逻辑忘记了&#xff0c;哎。。。-CSDN博客 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 1. 什么是责任…

SpringBoot之Profile的两种使用方式

0. 需求 通常项目开发过程中&#xff0c;会经历多种环境转换&#xff0c;典型的如开发环境(dev)、测试环境(test)和生产环境(prod)。在这三种不同的环境下&#xff0c;连接数据库时使用的配置信息是不同的&#xff0c;即三个不同环境对应三个不同的数据库。 现在的需求是&#…

【论文导读】Graphusion (LLM + KGC)

序言 第一次论文出现在 《Leveraging Large Language Models for Concept Graph Recovery and Question Answering in NLP Education》 论文地址&#xff1a;https://arxiv.org/abs/2402.14293 七月份的时候应该是又改进了一次。但是又发了一篇新的地址&#xff1a;《Graphu…

css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis、::before的使用

1、~的使用直接看代码 <script setup> </script><template><div class"container"><p><a href"javascript:;">纪检委</a><a href"javascript:;">中介为</a><a href"javascript:…

SpringAOP实现的两种方式-JDK动态代理和CGLIB动态代理

前言 想要了解SpringAOP的实现方式&#xff0c;需要先了解什么是AOP OOP和AOP的区别 OOP 面向对象&#xff0c;允许开发者定义纵向的关系&#xff0c;但并适用于定义横向的关系&#xff0c;导致了大量代码的重复&#xff0c;而不利于各个模块的重用。 AOP&#xff0c;一般称为…

让小脚本成为自己高效测试的工具

测试中会遇到的工具 软件测试如果仅仅靠手工去执行会发现在很多地方力不从心&#xff0c;虽然市面上已经有大牛开源了一些测试工具可以供我们使用但是在一些公司特有的业务方面则需要我们借助开源或重新做一个自己的测试工具。 测试常用的开源工具 死链接检测工具 Xenu home…

如何使用便签高效管理自己的工作和时间?

在快节奏的现代生活中&#xff0c;我们每天都要面对众多工作任务&#xff0c;而时间却是有限的。如何在有限的时间内高效地完成工作&#xff0c;成为了每个职场人士必须面对的挑战。为了更好地管理时间&#xff0c;提高工作效率&#xff0c;我们往往需要借助一些工具来帮助我们…

Linux上Java项目环境安装

java环境 一.免费的管理Linux软件 家庭/学校免费 - NetSarang Website (xshell.com) 二.安装jdk // 检查以前是否安装过jdk java -version // 我们还可以通过以下指令来看我们安装了多少openJDK apt list --installed | grep openjdk// 如果你想卸载某个apt安装的java版本&am…

CMOS Sensor调试笔记

最近在调CMOS Sensor&#xff1b;基于无ISP的芯片。 第一步&#xff0c;找模组厂要到对应Sensor对应分辨率&#xff0c;YUV信息的驱动。 第二步&#xff0c;确认信号的极性&#xff0c;VSYNC&#xff0c;SYNC, PCLK。 第三步&#xff0c;开始测试。 问题解决&#xff1a; 1&am…

覆盖生活中各方面的5款软件,非常好用

​ 在现代生活中&#xff0c;各类工具软件为我们提供了便捷的解决方案&#xff0c;从日程管理到系统优化&#xff0c;再到文件传输与多媒体编辑&#xff0c;各类软件的功能多样&#xff0c;极大地提升了我们的工作与生活效率。 1.日历清单——日历清单 ​ 日历清单是一款集日…

运营计划管理——电商运营(案例分享)

运营计划&#xff0c;作为运营管理的重要组成部分&#xff0c;通过科学规划与有效执行&#xff0c;对确保企业目标实现起着至关重要的作用。 运营计划是指通过制定、执行、监控和调整运营计划&#xff0c;以确保企业资源得到合理配置&#xff0c;业务活动有序进行&#xff0c;最…

学习threejs,添加户外光照光源

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言二、&#x1f340;绘制任意字体模型…

windows 桌面采集音频

头文件&#xff1a; #ifndef __CAPTURE_AUDIO__ #define __CAPTURE_AUDIO__#include <functional> #include <windows.h> #pragma comment(lib, "winmm.lib")class CaptureAudio { public:CaptureAudio();~CaptureAudio();public:bool Init(const std::…

云计算Openstack Glance

OpenStack Glance&#xff08;或称为Glance&#xff0c;但通常OpenStack官方文档中使用的是“Glance”作为项目代号&#xff09;是OpenStack的镜像服务组件&#xff0c;为创建虚拟机提供镜像服务。以下是对OpenStack Glance的详细解析&#xff1a; 一、基本功能 Glance主要提…