学生信息管理系统--(Java+MySQL实现)

来源:互联网 发布:淘宝已买到宝贝打不开 编辑:程序博客网 时间:2024/05/16 02:25

基于Java swing+MySQL实现学生信息管理系统:主要实现JDBC对学生信息进行增删改查,应付一般课设足矣,分享给大家。(由于篇幅原因,代码未全部列出,如有需要留下邮箱)


鉴于太多同学要源码,实在发不过来,上传到github上 https://github.com/ZhuangM/student.git






1、 开发环境:jdk7+MySQL5+win7

代码结构:model-dao-view


2、 数据库设计--建库建表语句:

CREATE DATABASE student;
DROP TABLE IF EXISTS `admin`;CREATE TABLE `admin` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL,  `username` varchar(20) NOT NULL,  `password` varchar(20) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;LOCK TABLES `admin` WRITE;INSERT INTO `admin` VALUES (1,'admin','admin','admin');UNLOCK TABLES;DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL,  `sno` varchar(20) NOT NULL,  `department` varchar(20) NOT NULL,  `hometown` varchar(20) NOT NULL,  `mark` varchar(20) NOT NULL,  `email` varchar(20) NOT NULL,  `tel` varchar(20) NOT NULL,  `sex` varchar(20) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;LOCK TABLES `student` WRITE;INSERT INTO `student` VALUES (18,'张三','001','信息科学技术学院','辽宁','80','zhangsan@163.com','13888888888','男'),(19,'李四','002','理学院','上海','70','lisi@sina.com','13812341234','男'),(20,'王五','003','外国语学院','北京','88','wangwu@126.com','13698765432','女');UNLOCK TABLES;

3、model--管理员、学生

/** * 项目名:student * 修改历史: * 作者: MZ * 创建时间: 2016年1月6日-上午9:42:48 */package com.student.model;/** * 模块说明:admin *  */public class Admin {private int id;private String name;private String username;private String password;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 getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

/** * 项目名:student * 修改历史: * 作者: MZ * 创建时间: 2016年1月6日-上午9:42:36 */package com.student.model;/** * 模块说明: 学生 *  */public class Student {private int id;private String sno;// 学号private String name;private String sex;private String department;// 院系private String homeTown;// 籍贯private String mark;// 学分private String email;private String tel;// 联系方式public int getId() {return id;}public void setId(int id) {this.id = id;}public String getSno() {return sno;}public void setSno(String sno) {this.sno = sno;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}public String getHomeTown() {return homeTown;}public void setHomeTown(String homeTown) {this.homeTown = homeTown;}public String getMark() {return mark;}public void setMark(String mark) {this.mark = mark;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}}

4、 工具类DBUtil(对jdbc进行封装)

/** * 项目名:student * 修改历史: * 作者: MZ * 创建时间: 2016年1月6日-上午9:43:21 */package com.student.util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.student.AppConstants;/** * 模块说明:数据库工具类 *  */public class DBUtil {private static DBUtil db;private Connection conn;private PreparedStatement ps;private ResultSet rs;private DBUtil() {}public static DBUtil getDBUtil() {if (db == null) {db = new DBUtil();}return db;}public int executeUpdate(String sql) {int result = -1;if (getConn() == null) {return result;}try {ps = conn.prepareStatement(sql);result = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return result;}public int executeUpdate(String sql, Object[] obj) {int result = -1;if (getConn() == null) {return result;}try {ps = conn.prepareStatement(sql);for (int i = 0; i < obj.length; i++) {ps.setObject(i + 1, obj[i]);}result = ps.executeUpdate();close();} catch (SQLException e) {e.printStackTrace();}return result;}public ResultSet executeQuery(String sql) {if (getConn() == null) {return null;}try {ps = conn.prepareStatement(sql);rs = ps.executeQuery();} catch (SQLException e) {e.printStackTrace();}return rs;}public ResultSet executeQuery(String sql, Object[] obj) {if (getConn() == null) {return null;}try {ps = conn.prepareStatement(sql);for (int i = 0; i < obj.length; i++) {ps.setObject(i + 1, obj[i]);}rs = ps.executeQuery();} catch (SQLException e) {e.printStackTrace();}return rs;}private Connection getConn() {try {if (conn == null || conn.isClosed()) {Class.forName(AppConstants.JDBC_DRIVER);conn = DriverManager.getConnection(AppConstants.JDBC_URL, AppConstants.JDBC_USERNAME,AppConstants.JDBC_PASSWORD);}} catch (ClassNotFoundException e) {System.out.println("jdbc driver is not found.");e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return conn;}public void close() {try {if (rs != null) {rs.close();}if (ps != null) {ps.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}

5、 dao:主要调用DBUtil操作相应的model--增删改查

BaseDAO.java

/** * 项目名:student * 修改历史: * 作者: MZ * 创建时间: 2016年1月6日-上午10:04:37 */package com.student.base;import java.sql.ResultSet;import java.sql.SQLException;import com.student.DAO;import com.student.dao.AdminDAO;import com.student.dao.StudentDAO;import com.student.util.DBUtil;/** * 模块说明: DAO基类 *  */public abstract class BaseDAO {protected final DBUtil db = DBUtil.getDBUtil();protected ResultSet rs;private static BaseDAO baseDAO;public BaseDAO() {init();}private void init() {// buildAbilityDAO();}// protected abstract void buildAbilityDAO();public static synchronized BaseDAO getAbilityDAO(DAO dao) {switch (dao) {case AdminDAO:if (baseDAO == null || baseDAO.getClass() != AdminDAO.class) {baseDAO = AdminDAO.getInstance();}break;case StudentDAO:if (baseDAO == null || baseDAO.getClass() != StudentDAO.class) {baseDAO = StudentDAO.getInstance();}break;default:break;}return baseDAO;}protected void destroy() {try {if (rs != null) {rs.close();}} catch (SQLException se) {se.printStackTrace();} finally {db.close();}}}

AdminDAO.java

/** * 项目名:student * 修改历史: * 作者: MZ * 创建时间: 2016年1月6日-上午9:59:58 */package com.student.dao;import java.sql.SQLException;import com.student.base.BaseDAO;/** * 模块说明: 管理员增删改查 *  */public class AdminDAO extends BaseDAO {private static AdminDAO ad = null;public static synchronized AdminDAO getInstance() {if (ad == null) {ad = new AdminDAO();}return ad;}public boolean queryForLogin(String username, String password) {boolean result = false;if (username.length() == 0 || password.length() == 0) {return result;}String sql = "select * from admin where username=? and password=?";String[] param = { username, password };rs = db.executeQuery(sql, param);try {if (rs.next()) {result = true;}} catch (SQLException e) {e.printStackTrace();} finally {destroy();}return result;}}

StudentDAO.java

/** * 项目名:student * 修改历史: * 作者: MZ * 创建时间: 2016年1月6日-上午10:00:07 */package com.student.dao;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.student.base.BaseDAO;import com.student.model.Student;/** * 模块说明: 学生增删改查 *  */public class StudentDAO extends BaseDAO {private final int fieldNum = 9;private final int showNum = 15;private static StudentDAO sd = null;public static synchronized StudentDAO getInstance() {if (sd == null) {sd = new StudentDAO();}return sd;}// updatepublic boolean update(Student stu) {boolean result = false;if (stu == null) {return result;}try {// checkif (queryBySno(stu.getSno()) == 0) {return result;}// updateString sql = "update student set sex=?,department=?,email=?,tel=?,hometown=?,mark=? where name=? and sno=?";String[] param = { stu.getSex(), stu.getDepartment(), stu.getEmail(), stu.getTel(), stu.getHomeTown(),stu.getMark(), stu.getName(), stu.getSno() };int rowCount = db.executeUpdate(sql, param);if (rowCount == 1) {result = true;}} catch (SQLException se) {se.printStackTrace();} finally {destroy();}return result;}// deletepublic boolean delete(Student stu) {boolean result = false;if (stu == null) {return result;}String sql = "delete from student where name=? and sno=?";String[] param = { stu.getName(), stu.getSno() };int rowCount = db.executeUpdate(sql, param);if (rowCount == 1) {result = true;}destroy();return result;}// addpublic boolean add(Student stu) {boolean result = false;if (stu == null) {return result;}try {// checkif (queryBySno(stu.getSno()) == 1) {return result;}// insertString sql = "insert into student(name,sno,sex,department,hometown,mark,email,tel) values(?,?,?,?,?,?,?,?)";String[] param = { stu.getName(), stu.getSno(), stu.getSex(), stu.getDepartment(), stu.getHomeTown(),stu.getMark(), stu.getEmail(), stu.getTel() };if (db.executeUpdate(sql, param) == 1) {result = true;}} catch (SQLException se) {se.printStackTrace();} finally {destroy();}return result;}// query by namepublic String[][] queryByName(String name) {String[][] result = null;if (name.length() < 0) {return result;}List<Student> stus = new ArrayList<Student>();int i = 0;String sql = "select * from student where name like ?";String[] param = { "%" + name + "%" };rs = db.executeQuery(sql, param);try {while (rs.next()) {buildList(rs, stus, i);i++;}if (stus.size() > 0) {result = new String[stus.size()][fieldNum];for (int j = 0; j < stus.size(); j++) {buildResult(result, stus, j);}}} catch (SQLException se) {se.printStackTrace();} finally {destroy();}return result;}// querypublic String[][] list(int pageNum) {String[][] result = null;if (pageNum < 1) {return result;}List<Student> stus = new ArrayList<Student>();int i = 0;int beginNum = (pageNum - 1) * showNum;String sql = "select * from student limit ?,?";Integer[] param = { beginNum, showNum };rs = db.executeQuery(sql, param);try {while (rs.next()) {buildList(rs, stus, i);i++;}if (stus.size() > 0) {result = new String[stus.size()][fieldNum];for (int j = 0; j < stus.size(); j++) {buildResult(result, stus, j);}}} catch (SQLException se) {se.printStackTrace();} finally {destroy();}return result;}// 将rs记录添加到list中private void buildList(ResultSet rs, List<Student> list, int i) throws SQLException {Student stu = new Student();stu.setId(i + 1);stu.setName(rs.getString("name"));stu.setDepartment(rs.getString("department"));stu.setEmail(rs.getString("email"));stu.setHomeTown(rs.getString("hometown"));stu.setMark(rs.getString("mark"));stu.setSex(rs.getString("sex"));stu.setSno(rs.getString("sno"));stu.setTel(rs.getString("tel"));list.add(stu);}// 将list中记录添加到二维数组中private void buildResult(String[][] result, List<Student> stus, int j) {Student stu = stus.get(j);result[j][0] = String.valueOf(stu.getId());result[j][1] = stu.getName();result[j][2] = stu.getSno();result[j][3] = stu.getSex();result[j][4] = stu.getDepartment();result[j][5] = stu.getHomeTown();result[j][6] = stu.getMark();result[j][7] = stu.getEmail();result[j][8] = stu.getTel();}// query by snoprivate int queryBySno(String sno) throws SQLException {int result = 0;if ("".equals(sno) || sno == null) {return result;}String checkSql = "select * from student where sno=?";String[] checkParam = { sno };rs = db.executeQuery(checkSql, checkParam);if (rs.next()) {result = 1;}return result;}}

6、 view:与用户交互的界面(包括LoginView.java、MainView.java、AddView.java、DeleteView.java、UpdateView.java),主要使用DAO提供的接口,由于篇幅原因,仅列出MainView即首页。

/** * 项目名:student * 修改历史: * 作者: MZ * 创建时间: 2016年1月6日-下午1:37:39 */package com.student.view;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableColumn;import com.student.AppConstants;import com.student.DAO;import com.student.base.BaseDAO;import com.student.dao.StudentDAO;/** * 模块说明: 首页 *  */public class MainView extends JFrame {private static final long serialVersionUID = 5870864087464173884L;private final int maxPageNum = 99;private JPanel jPanelNorth, jPanelSouth, jPanelCenter;private JButton jButtonFirst, jButtonLast, jButtonNext, jButtonPre, jButtonAdd, jButtonDelete, jButtonUpdate,jButtonFind;private JLabel currPageNumJLabel;private JTextField condition;public static JTable jTable;private JScrollPane jScrollPane;private DefaultTableModel myTableModel;public static String[] column = { "id", AppConstants.STUDENT_NAME, AppConstants.STUDENT_SNO,AppConstants.STUDENT_SEX, AppConstants.STUDENT_DEPARTMETN, AppConstants.STUDENT_HOMETOWN,AppConstants.STUDENT_MARK, AppConstants.STUDENT_EMAIL, AppConstants.STUDENT_TEL };public static int currPageNum = 1;public MainView() {init();}private void init() {setTitle(AppConstants.MAINVIEW_TITLE);// north paneljPanelNorth = new JPanel();jPanelNorth.setLayout(new GridLayout(1, 5));condition = new JTextField(AppConstants.PARAM_FIND_CONDITION);condition.addKeyListener(new FindListener());jPanelNorth.add(condition);// query by namejButtonFind = new JButton(AppConstants.PARAM_FIND);jButtonFind.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {find();}});jButtonFind.addKeyListener(new FindListener());// addjPanelNorth.add(jButtonFind);jButtonAdd = new JButton(AppConstants.PARAM_ADD);jButtonAdd.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new AddView();}});jPanelNorth.add(jButtonAdd);// deletejButtonDelete = new JButton(AppConstants.PARAM_DELETE);jButtonDelete.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new DeleteView();}});jPanelNorth.add(jButtonDelete);// updatejButtonUpdate = new JButton(AppConstants.PARAM_UPDATE);jButtonUpdate.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new UpdateView();}});jPanelNorth.add(jButtonUpdate);// center paneljPanelCenter = new JPanel();jPanelCenter.setLayout(new GridLayout(1, 1));// init jTableString[][] result = ((StudentDAO) BaseDAO.getAbilityDAO(DAO.StudentDAO)).list(currPageNum);myTableModel = new DefaultTableModel(result, column);jTable = new JTable(myTableModel);DefaultTableCellRenderer cr = new DefaultTableCellRenderer();cr.setHorizontalAlignment(JLabel.CENTER);jTable.setDefaultRenderer(Object.class, cr);initJTable(jTable, result);jScrollPane = new JScrollPane(jTable);jPanelCenter.add(jScrollPane);// south paneljPanelSouth = new JPanel();jPanelSouth.setLayout(new GridLayout(1, 5));jButtonFirst = new JButton(AppConstants.MAINVIEW_FIRST);jButtonFirst.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {currPageNum = 1;String[][] result = ((StudentDAO) BaseDAO.getAbilityDAO(DAO.StudentDAO)).list(currPageNum);initJTable(jTable, result);currPageNumJLabel.setText(AppConstants.MAINVIEW_PAGENUM_JLABEL_DI + currPageNum+ AppConstants.MAINVIEW_PAGENUM_JLABEL_YE);}});jButtonPre = new JButton(AppConstants.MAINVIEW_PRE);jButtonPre.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {currPageNum--;if (currPageNum <= 0) {currPageNum = 1;}String[][] result = ((StudentDAO) BaseDAO.getAbilityDAO(DAO.StudentDAO)).list(currPageNum);initJTable(jTable, result);currPageNumJLabel.setText(AppConstants.MAINVIEW_PAGENUM_JLABEL_DI + currPageNum+ AppConstants.MAINVIEW_PAGENUM_JLABEL_YE);}});jButtonNext = new JButton(AppConstants.MAINVIEW_NEXT);jButtonNext.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {currPageNum++;if (currPageNum > maxPageNum) {currPageNum = maxPageNum;}String[][] result = ((StudentDAO) BaseDAO.getAbilityDAO(DAO.StudentDAO)).list(currPageNum);initJTable(jTable, result);currPageNumJLabel.setText(AppConstants.MAINVIEW_PAGENUM_JLABEL_DI + currPageNum+ AppConstants.MAINVIEW_PAGENUM_JLABEL_YE);}});jButtonLast = new JButton(AppConstants.MAINVIEW_LAST);jButtonLast.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {currPageNum = maxPageNum;String[][] result = ((StudentDAO) BaseDAO.getAbilityDAO(DAO.StudentDAO)).list(currPageNum);initJTable(jTable, result);currPageNumJLabel.setText(AppConstants.MAINVIEW_PAGENUM_JLABEL_DI + currPageNum+ AppConstants.MAINVIEW_PAGENUM_JLABEL_YE);}});currPageNumJLabel = new JLabel(AppConstants.MAINVIEW_PAGENUM_JLABEL_DI + currPageNum + AppConstants.MAINVIEW_PAGENUM_JLABEL_YE);currPageNumJLabel.setHorizontalAlignment(JLabel.CENTER);jPanelSouth.add(jButtonFirst);jPanelSouth.add(jButtonPre);jPanelSouth.add(currPageNumJLabel);jPanelSouth.add(jButtonNext);jPanelSouth.add(jButtonLast);this.add(jPanelNorth, BorderLayout.NORTH);this.add(jPanelCenter, BorderLayout.CENTER);this.add(jPanelSouth, BorderLayout.SOUTH);setBounds(400, 200, 750, 340);setResizable(false);setDefaultCloseOperation(DISPOSE_ON_CLOSE);setVisible(true);}public static void initJTable(JTable jTable, String[][] result) {((DefaultTableModel) jTable.getModel()).setDataVector(result, column);jTable.setRowHeight(20);TableColumn firsetColumn = jTable.getColumnModel().getColumn(0);firsetColumn.setPreferredWidth(30);firsetColumn.setMaxWidth(30);firsetColumn.setMinWidth(30);TableColumn secondColumn = jTable.getColumnModel().getColumn(1);secondColumn.setPreferredWidth(60);secondColumn.setMaxWidth(60);secondColumn.setMinWidth(60);TableColumn thirdColumn = jTable.getColumnModel().getColumn(2);thirdColumn.setPreferredWidth(90);thirdColumn.setMaxWidth(90);thirdColumn.setMinWidth(90);TableColumn fourthColumn = jTable.getColumnModel().getColumn(3);fourthColumn.setPreferredWidth(30);fourthColumn.setMaxWidth(30);fourthColumn.setMinWidth(30);TableColumn seventhColumn = jTable.getColumnModel().getColumn(6);seventhColumn.setPreferredWidth(30);seventhColumn.setMaxWidth(30);seventhColumn.setMinWidth(30);TableColumn ninthColumn = jTable.getColumnModel().getColumn(8);ninthColumn.setPreferredWidth(90);ninthColumn.setMaxWidth(90);ninthColumn.setMinWidth(90);}private class FindListener extends KeyAdapter {@Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode() == KeyEvent.VK_ENTER) {find();}}}private void find() {currPageNum = 0;String param = condition.getText();if ("".equals(param) || param == null) {initJTable(MainView.jTable, null);currPageNumJLabel.setText(AppConstants.MAINVIEW_FIND_JLABEL);return;}String[][] result = ((StudentDAO) BaseDAO.getAbilityDAO(DAO.StudentDAO)).queryByName(param);condition.setText("");initJTable(MainView.jTable, result);currPageNumJLabel.setText(AppConstants.MAINVIEW_FIND_JLABEL);}}

end.


19 0
原创粉丝点击