校园 活动平台项目(swing+mysql)
跟着学校工作室学习JAVASE一段时间,我们完成了了工作室的项目。
项目需求:
一、 蓝点校园活动平台
基本需求:
1、带有登录注册功能
2、管理员
审核活动(决定学生会发布的活动是否通过)
审核学分(决定学生申请的学分是否通过)
指定学生会成员
3、普通用户
申请参加活动
修改自己的信息
申请学分
签到签退
4、学生会
申请发布活动
指定签到员
5、签到员
给其他用户进行签到签退
(以上是系统基础功能,自己有想法可以拓展其他功能)
程序设计思路
一:设计数据库
四张表
搭建三层架构
1:界面层 (view包)
2: 业务逻辑层 (service 包)
3:数据访问层 (sql 包)
但实际上我面对多个对象,不知道如何搭建业务逻辑,所以对数据的操作全都在数据访问层,造成了大量代码的重复
实现效果
登入注册
主界面
管理员
学生
学生
签到员
学生会
代码部分
以普通用户学生为例的代码展示
数据库(MySQL8.0.16)的连接
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class JdbcUtil {
private static String url = "jdbc:mysql://localhost:3306/userinformation?serverTimezone=GMT&characterEncoding=utf8";
private static String user = "root";
private static String password = "1234";
private JdbcUtil() {
}
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
public static void free(ResultSet rs, Statement st, Connection conn) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
实体类
package cn.sunshine.jdbc.domain;
public class User {
private String name;
private int id;
private String gener;
private int credit;
private String password;
private String major;
private String applyactivity;
private String age;
private String applycredit;
private String signinout;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getGener() {
return gener;
}
public void setGener(String gener) {
this.gener = gener;
}
public int getCredit() {
return credit;
}
public void setCredit(int credit) {
this.credit = credit;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getApplyactivity() {
return applyactivity;
}
public void setApplyactivity(String applyactivity) {
this.applyactivity = applyactivity;
}
public String getApplycredit() {
return applycredit;
}
public void setApplycredit(String applycredit) {
this.applycredit = applycredit;
}
public String getSigninout() {
return signinout;
}
public void setSigninout(String signinout) {
this.signinout = signinout;
}
}
dao接口
package cn.sunshine.jdbc.dao;
import cn.sunshine.jdbc.domain.User;
public interface UserDao {
public void addUser1(User user);// 增加用户(用户注册)
public void update(User user);// 修改用户信息
public void delete(User user);// 删除
public boolean login(String name, String password);// 登入和验证身份
public void applyactivity(User user);// 用户申请活动
public void applycredit(User user);// 用户申请学分
public void applycredit1(User user);//管理员审核学分
public void signinout(User user);// 用户申请签到签退
public void signinout1(User user);// 签到员审核签到签退
}
dao接口实现类
package cn.sunshine.jdbc.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import cn.sunshine.jdbc.dao.JdbcUtil;
import cn.sunshine.jdbc.dao.UserDao;
import cn.sunshine.jdbc.domain.User;
public class UserdaoImpl implements UserDao {
public boolean login(String name, String password) {
boolean flag = false;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
String sql = "select Name,PASSWORD from user";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
if (name.equals(rs.getString("Name")) && password.equals(rs.getString("PASSWORD"))) {
flag = true;
break;
}
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
return flag;
}
public void update(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
String sql = "update user set gener=?, major=?, age=? where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getGener());
ps.setString(2, user.getMajor());
ps.setString(3, user.getAge());
ps.setString(4, user.getName());
int a=ps.executeUpdate();
if (a == 1) {
JOptionPane.showMessageDialog(null,"修改成功");
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
}
public void delete(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
String sql = "delete from user where id=" + user.getId();
ps = conn.prepareStatement(sql);
int a = ps.executeUpdate();
if (a == 1) {
JOptionPane.showMessageDialog(null, "信息修改成功");
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
}
public void addUser1(User user) {
// TODO Auto-generated method stub
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
if (user.getName() == null || user.getName().trim().length() <= 0 || user.getPassword() == null
|| user.getPassword().trim().length() <= 0) {
JOptionPane.showMessageDialog(null, "请输入用户名或密码");
return;
}
String sql = "insert into user(name,password)values(?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setString(2, user.getPassword());
int a = ps.executeUpdate();
if (a == 1) {
JOptionPane.showMessageDialog(null, "用户注册成功,请登入");
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
}
@Override
public void applyactivity(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
if (user.getName() == null || user.getName().trim().length() <= 0 || user.getApplyactivity() == null
|| user.getApplyactivity().trim().length() <= 0) {
JOptionPane.showMessageDialog(null, "请输入用户名或活动名称");
return;
}
String sql = "update user set applyactivity=? where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getApplyactivity());
ps.setString(2, user.getName());
int a = ps.executeUpdate();
if (a == 1) {
JOptionPane.showMessageDialog(null, "活动申请成功");
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
}
@Override
public void applycredit(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
if (user.getName() == null || user.getName().trim().length() <= 0 || user.getApplycredit() == null
|| user.getApplycredit().trim().length() <= 0) {
JOptionPane.showMessageDialog(null, "请输入用户名或学分");
return;
}
String sql = "update user set applycredit=? where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getApplycredit());
ps.setString(2, user.getName());
int a = ps.executeUpdate();
if (a == 1) {
JOptionPane.showMessageDialog(null, "已申请,等待管理员审核");
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
}
public void signinout(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
if (user.getName() == null || user.getName().trim().length() <= 0) {
JOptionPane.showMessageDialog(null, "请输入用户名");
return;
}
String sql = "update user set signinout=? where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getSigninout());
ps.setString(2, user.getName());
int a = ps.executeUpdate();
if (a == 1) {
JOptionPane.showMessageDialog(null, "已申请,等待签到员审核");
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
}
public void signinout1(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
if (user.getName() == null || user.getName().trim().length() <= 0) {
JOptionPane.showMessageDialog(null, "请输入用户名");
return;
}
String sql = "update user set signinout=? where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getSigninout());
ps.setString(2, user.getName());
int a = ps.executeUpdate();
if (a == 1) {
JOptionPane.showMessageDialog(null, "已为其签到签退");
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
}
@Override
public void applycredit1(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
if (user.getName() == null || user.getName().trim().length() <= 0 || user.getApplycredit() == null
|| user.getApplycredit().trim().length() <= 0) {
JOptionPane.showMessageDialog(null, "请输入用户名或学分");
return;
}
String sql = "update user set applycredit=? where name=?";
ps = conn.prepareStatement(sql);
ps.setString(1,user.getApplycredit());
ps.setString(2, user.getName());
int a = ps.executeUpdate();
if (a == 1) {
JOptionPane.showMessageDialog(null, "已修改成功");
}
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtil.free(rs, ps, conn);
}
}
}
界面部分
学生主界面
package cn.sunshine.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class StudentView extends JFrame implements ActionListener {
public JButton activity = new JButton("活动申请");
public JButton information = new JButton("信息修改");
public JButton credit = new JButton("学分申请");
public JButton inout = new JButton("签到签退");
private JPanel student = new JPanel();
ImageIcon background = new ImageIcon("E:\\7.jpg");
JLabel label = new JLabel(background);
public StudentView() {
label.setBounds(0, 0, background.getIconWidth(), background.getIconHeight());
this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
JPanel jp = (JPanel) this.getContentPane();
/*
* JPanel对象才可以调用setOpaque(false);设置是否透明
*/
jp.setOpaque(false);
student.setOpaque(false);
student.setLayout(null);
activity.setBounds(80, 20, 120, 40);
information.setBounds(80, 60, 120, 40);
credit.setBounds(80, 100, 120, 40);
inout.setBounds(80, 140, 120, 40);
student.add(activity);
student.add(credit);
student.add(information);
student.add(inout);
activity.addActionListener(this);
information.addActionListener(this);
credit.addActionListener(this);
inout.addActionListener(this);
super.setTitle("菜单");
super.add(student);
super.setSize(350, 250);
super.setLocation(300, 400);
super.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == activity) {
this.dispose();
new StudentApplySignView();
} else if (e.getSource() == information) {
this.dispose();
new studentupdateView();
} else if (e.getSource() == credit) {
this.dispose();
new StudentApplySignView();
} else if (e.getSource() == inout) {
this.dispose();
new StudentApplySignView();
}
}
public static void main(String[] args) {
new StudentView ();
}
}
信息修改界面
package cn.sunshine.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import cn.sunshine.jdbc.dao.UserDao;
import cn.sunshine.jdbc.dao.impl.UserdaoImpl;
import cn.sunshine.jdbc.domain.User;
public class studentupdateView extends JFrame implements ActionListener {
private JPanel pan = new JPanel();
private JLabel namelab = new JLabel("用户名");
private JLabel generlab = new JLabel("性别");
private JLabel majorlab = new JLabel("专业");
private JLabel agelab = new JLabel("年龄");
private JTextField nametext = new JTextField();
private JTextField genertext = new JTextField();
private JTextField majortext = new JTextField();
private JTextField agetext = new JTextField();
public JButton button = new JButton("确认修改");
ImageIcon background = new ImageIcon("E:\\4.jpeg");
JLabel label = new JLabel(background);
public studentupdateView() {
label.setBounds(0, 0, background.getIconWidth(), background.getIconHeight());
this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
JPanel jp = (JPanel) this.getContentPane();
/*
* JPanel对象才可以调用setOpaque(false);设置是否透明
*/
jp.setOpaque(false);
pan.setOpaque(false);
pan.setLayout(null);
namelab.setBounds(20, 20, 60, 30);
generlab.setBounds(20, 50, 60, 30);
majorlab.setBounds(20, 80, 60, 30);
agelab.setBounds(20, 110, 60, 30);
nametext.setBounds(90, 20, 140, 30);
genertext.setBounds(90, 50, 140, 30);
majortext.setBounds(90, 80, 140, 30);
agetext.setBounds(90, 110, 140, 30);
button.setBounds(100, 140, 90, 30);
pan.add(namelab);
pan.add(nametext);
pan.add(agelab);
pan.add(agetext);
pan.add(majorlab);
pan.add(majortext);
pan.add(generlab);
pan.add(genertext);
pan.add(button);
button.addActionListener(this);
super.setTitle("信息修改");
super.add(pan);
super.setSize(350, 250);
super.setLocation(300, 400);
super.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == button) {
update();
}
}
private void update() {
String name = this.nametext.getText().trim();
String gener = this.genertext.getText().trim();
String major = this.majortext.getText().trim();
String age = this.agetext.getText().trim();
User user = new User();
user.setName(name);
user.setGener(gener);
user.setMajor(major);
user.setAge(age);
UserDao userdao = new UserdaoImpl();
userdao.update(user);
}
}
签到签退,活动报名,学分申请界面
package cn.sunshine.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import cn.sunshine.jdbc.dao.UserDao;
import cn.sunshine.jdbc.dao.impl.UserdaoImpl;
import cn.sunshine.jdbc.domain.User;
public class StudentApplySignView extends JFrame implements ActionListener {
private JPanel pan = new JPanel();
private JLabel namelab = new JLabel("用户名");
private JLabel activitylab = new JLabel("活动名称");
private JLabel creditlab = new JLabel("学分申请");
private JTextField nametext = new JTextField();
private JTextField activitytext = new JTextField();
private JTextField credittext = new JTextField();
public JButton apply1 = new JButton("申请活动");
public JButton apply2 = new JButton("申请学分");
public JButton in = new JButton("签到");
public JButton out = new JButton("签退");
ImageIcon background = new ImageIcon("E:\\9.jpg");
JLabel label = new JLabel(background);
public StudentApplySignView() {
label.setBounds(0, 0, background.getIconWidth(), background.getIconHeight());
this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
JPanel jp = (JPanel) this.getContentPane();
/*
* JPanel对象才可以调用setOpaque(false);设置是否透明
*/
jp.setOpaque(false);
pan.setOpaque(false);
pan.setLayout(null);
namelab.setBounds(20, 20, 60, 30);
activitylab.setBounds(20, 60, 60, 30);
creditlab.setBounds(20, 100, 60, 30);
nametext.setBounds(70, 20, 140, 30);
activitytext.setBounds(70, 60, 140, 30);
credittext.setBounds(70, 100, 140, 30);
in.setBounds(30, 140, 60, 30);
out.setBounds(100, 140, 60, 30);
apply2.setBounds(20, 170, 100, 30);
apply1.setBounds(150, 170, 100, 30);
pan.add(activitylab);
pan.add(activitytext);
pan.add(apply1);
pan.add(creditlab);
pan.add(credittext);
pan.add(in);
pan.add(out);
pan.add(namelab);
pan.add(nametext);
pan.add(apply2);
apply1.addActionListener(this);
apply2.addActionListener(this);
in.addActionListener(this);
out.addActionListener(this);
super.setTitle("申请和签到");
super.add(pan);
super.setSize(350, 250);
super.setLocation(300, 400);
super.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == in) {
inout();
} else if (e.getSource() == out) {
inout();
} else if (e.getSource() == apply1) {
apply1();
} else if (e.getSource() == apply2) {
apply2();
}
}
private void inout() {
// TODO Auto-generated method stub
String name = this.nametext.getText().trim();
User user = new User();
user.setName(name);
user.setSigninout("等待审核中");
UserDao userdao = new UserdaoImpl();
userdao.signinout(user);
}
private void apply1() {
String name = this.nametext.getText().trim();
String activity = this.activitytext.getText().trim();
User user = new User();
user.setApplyactivity(activity);
user.setName(name);
UserDao userdao = new UserdaoImpl();
userdao.applyactivity(user);
}
private void apply2() {
String name = this.nametext.getText().trim();
String credit = this.credittext.getText().trim();
User user = new User();
user.setApplycredit("等待审核中");
user.setName(name);
UserDao userdao = new UserdaoImpl();
userdao.applycredit(user);
}
}
感想
虽然是一个小项目,但做出来还是很有成就感的。作为一名初学者,在做项目的时候,一个问题困扰了很久,突然间知道怎么解决的时候真的很美好,而且当你发现自己解决了一些问题,自己感觉进步的时候也很会很开心。作为很喜欢很喜欢鬼怪的女生,所以界面背景用了鬼怪的照片。
最后我相信学习JAVA的钱途,我也相信通过学习,我也能到达一定的高度,那时候看到现在绞尽脑汁写出的代码就像看到现在看1+1这样简单。