Java项目管理系统

介绍:

本项目只是一个简单图形化界面项目,该项目运用面向对象,JDBC连接MySQL数据库实现增、删、改、查,用于学习使用

技术栈:

开发工具:eclipse,Navicat,MySQL

开发语言:Java,MySQL

开发插件:swing,JFarm,mysql-connector-java-8.0.28.jar

开发过程:

1.建立数据库

首先我们先创建好对应的数据库,这是一个项目管理的一个数据库

要求:

具体代码:

/*
 Navicat Premium Data Transfer

 Source Server         : A1
 Source Server Type    : MySQL
 Source Server Version : 50628
 Source Host           : localhost:3306
 Source Schema         : project_db

 Target Server Type    : MySQL
 Target Server Version : 50628
 File Encoding         : 65001

 Date: 29/12/2023 11:19:23
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tb_prj
-- ----------------------------
DROP TABLE IF EXISTS `tb_prj`;
CREATE TABLE `tb_prj`  (
  `prj_id` int(11) NOT NULL AUTO_INCREMENT,
  `prj_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `prj_cycle` int(11) NOT NULL,
  `prj_count` int(11) NOT NULL,
  `prj_manager` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`prj_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of tb_prj
-- ----------------------------
INSERT INTO `tb_prj` VALUES (16, '苍穹外卖', 2, 1, '张三');

SET FOREIGN_KEY_CHECKS = 1;
2.创建Java项目,并创建四个包

注意,这里我使用的是8.0版本,加载驱动时需要写cj

连接过具体代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBconnection {
	static {
		try {
			// 加载驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static Connection getConnection() {
		Connection connection = null;
		try {        // 获取jdbc,端口号,账号和密码
			return connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/project_db?serverTimezone=GMT%2B8", "root", "1234");
					           
					
		} catch (SQLException e) {
// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return connection;
	}

	// 释放资源
	public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) {
		try {
			if (resultSet != null) {
				resultSet.close();
			}
			if (statement != null) {
				statement.close();
			}
			if (connection != null) {
				connection.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		DBconnection conn = new DBconnection();
		System.out.println(conn);
	}
}
3.封装

写完了具体连接过程,接下来就需要封装字段,生成get和set,toString方法

package Project;

public class Project {
	private int prjId;
	private String prjName;
	private int prjCycle;
	private int prjCount;
	private String prjManager;
	public int getPrjId() {
		return prjId;
	}
	public void setPrjId(int prjId) {
		this.prjId = prjId;
	}
	public String getPrjName() {
		return prjName;
	}
	public void setPrjName(String prjName) {
		this.prjName = prjName;
	}
	public int getPrjCycle() {
		return prjCycle;
	}
	public void setPrjCycle(int prjCycle) {
		this.prjCycle = prjCycle;
	}
	public int getPrjCount() {
		return prjCount;
	}
	public void setPrjCount(int prjCount) {
		this.prjCount = prjCount;
	}
	public String getPrjManager() {
		return prjManager;
	}
	public void setPrjManager(String prjManager) {
		this.prjManager = prjManager;
	}
	@Override
	public String toString() {
		return "Project [prjId=" + prjId + ", prjName=" + prjName + ", prjCycle=" + prjCycle + ", prjCount=" + prjCount
				+ ", prjManager=" + prjManager + "]";
	}
	
	

}
4.执行语句

第四步最为关键,里面写入了实现刚才和SQL语句和存放SQL的数据

具体代码如下:

package Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import DBconnection.DBconnection;
import Project.Project;
public class ProjectDao {
	//查询
	public ArrayList<Project>Query(String name){
		//准备需要访问数据的对象
		Connection connection=null;
		PreparedStatement statement=null;
		ResultSet resultSet=null;
		//存数数据的内容
		ArrayList<Project>list=new ArrayList<Project>();
		try {
			//查询sql
			String sqlString="select * from tb_prj where prj_name like ?";
			//获取对象
			connection=DBconnection.getConnection();
			statement=connection.prepareStatement(sqlString);
			statement.setString(1, "%"+name+"%");
			//执行查询sql 并且返回resultset结果集
			resultSet=statement.executeQuery();
			while (resultSet.next()) {
				Project project=new Project();
				project.setPrjId(resultSet.getInt("prj_id"));
				project.setPrjName(resultSet.getString("prj_name"));
				project.setPrjCycle(resultSet.getInt("prj_cycle"));
				project.setPrjCount(resultSet.getInt("prj_count"));
				project.setPrjManager(resultSet.getString("prj_manager"));
				//数据库里面每一条记录都要转化为单独的对象
				list.add(project);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBconnection.close(connection, statement, resultSet);
		}
		return list;
	}
	//新增
	public boolean add(Project project){
		//准备需要访问数据的对象
		Connection connection=null;
		PreparedStatement statement=null;
		try {
			//新增sql
			String sqlString="insert into tb_prj values(null,?,?,?,?)";
			//获取对象
			connection=DBconnection.getConnection();
			statement=connection.prepareStatement(sqlString);
			//替换问号 上面有几个问号 下面就有几个值
			statement.setString(1, project.getPrjName());
			statement.setInt(2, project.getPrjCycle());
			statement.setInt(3, project.getPrjCount());
			statement.setString(4, project.getPrjManager());
			//执行语句并且返回
			return statement.executeUpdate()>0;
		} catch (Exception e) {
			
			e.printStackTrace();
		}finally {
			DBconnection.close(connection, statement, null);
		}
		return false;
	}
	//删除
	public boolean del(int id){
		//准备需要访问数据的对象
		Connection connection=null;
		PreparedStatement statement=null;
		try {
			//删除sql
			String sqlString="delete from tb_prj where prj_id=?";
			//获取对象
			connection=DBconnection.getConnection();
			statement=connection.prepareStatement(sqlString);
			//替换问号
			statement.setInt(1, id);
			return statement.executeUpdate()>0;
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBconnection.close(connection, statement, null);
		}
		return false;
	}
}

这里我只写入了增、删、查,修改可根据自己的需要自行写入,(原理都是一样的,修改一下SQL语句,照葫芦画瓢也可以做哈哈哈)

5.写入窗体

写入窗体事件,也就是最后一步,这里注意,eclipse默认是没有JFrame插件的,需要我们自行去安装,具体步骤网上都有教程,这里就不一一演示了。

这里有两个要求,一个查看,一个新增,那么就需要两个界面了,我们首先写入第一个页面

查看页面:

查看页面只需要写入三个按钮就即可,数据都是对应数据库上的数据,具体代码如下:

package swing;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.util.ArrayList;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import Dao.ProjectDao;
import Project.Project;

import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Demo {

	private JFrame frame;

	/**
	 * Launch the application.
	 */
	//列头
	private static String[] head= {"序号","项目名称","项目周期","参与人数","项目负人"};
	//数据源
	private static Object[][]data;
	private JTable table;
	//查询
	public static void init(String name) {
		//创建数据库访问对象
		ProjectDao dao=new ProjectDao();
		//调用数据库访问方法 返回结果
		ArrayList<Project> list=dao.Query(name);
		//设置数据源 有N条记录 有5个字段
		data= new Object [list.size()][5];
		//把我们的数据循环的录入到data中
		for (int i = 0; i < list.size(); i++) {
		data[i][0]=list.get(i).getPrjId();
		data[i][1]=list.get(i).getPrjName();
		data[i][2]=list.get(i).getPrjCycle();
		data[i][3]=list.get(i).getPrjCount();
		data[i][4]=list.get(i).getPrjManager();
		}
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Demo window = new Demo();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Demo() {
		init("");
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setTitle("\u9879\u76EE\u7BA1\u7406\u7A97\u53E3");
		frame.setBounds(100, 100, 864, 738);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		
		JButton btnNewButton = new JButton("\u5237\u65B0");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//刷新
				init("");
				table.setModel(new DefaultTableModel(
				data,
				head
				));
				table.updateUI();
			}
		});
		btnNewButton.setFont(new Font("宋体", Font.BOLD, 25));
		btnNewButton.setBounds(78, 603, 172, 64);
		frame.getContentPane().add(btnNewButton);
		
		JButton btnNewButton_1 = new JButton("\u5220\u9664");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//删除
				//1.删除的时候 先判定是否选择了一行
				int rows=table.getSelectedRow();
				if (rows==-1) {
				JOptionPane.showMessageDialog(null, "删除必须选中一行");
				}else {
				int result=JOptionPane.showConfirmDialog(null, "是否确认删除","选择一个选项",JOptionPane.YES_NO_CANCEL_OPTION);
				if (result==0) {
				//选中行中的第一列
				int id=(int) table.getValueAt(rows, 0);
				ProjectDao dao=new ProjectDao();
				if (dao.del(id)) {
				JOptionPane.showMessageDialog(null, "删除成功");
				}else {
				JOptionPane.showMessageDialog(null, "删除失败");
				}
				//重点 不管结果如何 最后要刷新我们都数据
				}
				init("");
				table.setModel(new DefaultTableModel(data, head));
				table.updateUI();
				}
			}
		});
		btnNewButton_1.setFont(new Font("宋体", Font.BOLD, 25));
		btnNewButton_1.setBounds(369, 603, 172, 64);
		frame.getContentPane().add(btnNewButton_1);
		
		JButton btnNewButton_2 = new JButton("\u65B0\u589E");
		btnNewButton_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				AddMain addMain=new AddMain();
				addMain.frame.setVisible(true);
			}
		});
		btnNewButton_2.setFont(new Font("宋体", Font.BOLD, 25));
		btnNewButton_2.setBounds(614, 603, 172, 64);
		frame.getContentPane().add(btnNewButton_2);
		
		JPanel panel = new JPanel();
		panel.setBounds(10, 0, 840, 541);
		frame.getContentPane().add(panel);
		panel.setLayout(new GridLayout(1, 0, 0, 0));
		
		JScrollPane scrollPane = new JScrollPane();
		panel.add(scrollPane);
		
		table = new JTable();
		//一定要将我们都数据绑定上去
		table.setModel(new DefaultTableModel(
		data,
		head
		));
		scrollPane.setViewportView(table);
	}
}

写入第一个界面,当我们点击新增时,就会跳转到新增选项卡界面

这里面面具体的跳转时间上面代码都已经写好了,我们只需要把新增选项卡界面写出来就行了

新增选项卡界面具体的代码实现如下:

package swing;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.JTextField;

import Dao.ProjectDao;
import Project.Project;

import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class AddMain {

	 JFrame frame;
	private JTextField textField_name;
	private JTextField textField_cycle;
	private JTextField textField_count;
	private JTextField textField_manager;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					AddMain window = new AddMain();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public AddMain() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setTitle("\u65B0\u589E\u9879\u76EE\u4FE1\u606F");
		frame.setBounds(100, 100, 660, 667);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		
		JLabel lblNewLabel = new JLabel("\u9879\u76EE\u540D\u79F0:");
		lblNewLabel.setFont(new Font("宋体", Font.BOLD, 25));
		lblNewLabel.setBounds(68, 42, 138, 48);
		frame.getContentPane().add(lblNewLabel);
		
		textField_name = new JTextField();
		textField_name.setBounds(229, 42, 210, 48);
		frame.getContentPane().add(textField_name);
		textField_name.setColumns(10);
		
		JLabel lblNewLabel_1 = new JLabel("\u9879\u76EE\u5468\u671F:");
		lblNewLabel_1.setFont(new Font("宋体", Font.BOLD, 25));
		lblNewLabel_1.setBounds(68, 128, 138, 48);
		frame.getContentPane().add(lblNewLabel_1);
		
		textField_cycle = new JTextField();
		textField_cycle.setColumns(10);
		textField_cycle.setBounds(229, 128, 158, 48);
		frame.getContentPane().add(textField_cycle);
		
		JLabel lblNewLabel_1_1 = new JLabel("\u53C2\u4E0E\u4EBA\u6570:");
		lblNewLabel_1_1.setFont(new Font("宋体", Font.BOLD, 25));
		lblNewLabel_1_1.setBounds(68, 214, 138, 48);
		frame.getContentPane().add(lblNewLabel_1_1);
		
		textField_count = new JTextField();
		textField_count.setColumns(10);
		textField_count.setBounds(229, 214, 158, 48);
		frame.getContentPane().add(textField_count);
		
		JLabel lblNewLabel_1_1_1 = new JLabel("\u9879\u76EE\u8D1F\u8D23\u4EBA:");
		lblNewLabel_1_1_1.setFont(new Font("宋体", Font.BOLD, 25));
		lblNewLabel_1_1_1.setBounds(68, 299, 144, 48);
		frame.getContentPane().add(lblNewLabel_1_1_1);
		
		textField_manager = new JTextField();
		textField_manager.setColumns(10);
		textField_manager.setBounds(229, 299, 210, 48);
		frame.getContentPane().add(textField_manager);
		
		JButton btnNewButton = new JButton("\u786E\u5B9A");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//新增数据
				Project project=new Project();
				project.setPrjName(textField_name.getText());
				project.setPrjCycle(Integer.parseInt(textField_cycle.getText()));
				project.setPrjCount(Integer.parseInt(textField_count.getText()));
				project.setPrjManager(textField_manager.getText());
				ProjectDao dao=new ProjectDao();
				if (dao.add(project)) {
					JOptionPane.showConfirmDialog(null, "新增成功");
				}else {
					JOptionPane.showConfirmDialog(null, "新增失败");
				}
			}
		});
		btnNewButton.setFont(new Font("宋体", Font.BOLD, 23));
		btnNewButton.setBounds(68, 438, 144, 60);
		frame.getContentPane().add(btnNewButton);
		
		JButton btnNewButton_1 = new JButton("\u53D6\u6D88");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
		
			}
		});
		btnNewButton_1.setFont(new Font("宋体", Font.BOLD, 23));
		btnNewButton_1.setBounds(329, 438, 144, 60);
		frame.getContentPane().add(btnNewButton_1);
	}
}

 OK,写到这就基本上全部写完了,接下来就是功能的测试

功能测试:

1.查看数据:

 当点击运行按钮,默认就会打开查看页面

新增:

 当点击新增按钮,就会显示新增选项卡:

 新增成功

删除:

为了防止误删,当点击删除时,需要选择数据,还会有一个是否确认

完结: 

好了,以上就是项目管理系统的全部代码实现过程了,喜欢的小伙伴可以点赞和收藏!!!

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.祝小码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值