学生成绩管理系统(二)

来源:互联网 发布:sql exists in的区别 编辑:程序博客网 时间:2024/06/05 01:53

3.2 数据库连接类

        我们先写一个数据库连接类,测试一下和数据库的连接。这里使用Proxool配置了一个数据库连接池,简单地使用了Log4J。

package org.ygy.util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import org.apache.log4j.Logger;import org.logicalcobwebs.proxool.ProxoolException;import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;public class DBUtil {private static Logger logger = Logger.getLogger(DBUtil.class);static {try {PropertyConfigurator.configure("src/org/ygy/configuration/proxool.properties");} catch (ProxoolException e) {e.printStackTrace();} }private DBUtil() {}public static Connection getConnection() {logger.info("getConection() start.");Connection con = null;try {con = DriverManager.getConnection("proxool.stu_pool");logger.info("getConnection() ok");} catch (SQLException e) {logger.error(e.getMessage());}return con;}public static void close(Connection con) {if(con != null) {try {con.close();con = null;} catch (SQLException e) {e.printStackTrace();}}}public static void close(Connection con , PreparedStatement pstmt) {if(pstmt != null) {try {pstmt.close();pstmt = null;} catch (SQLException e) {e.printStackTrace();}}close(con);}public static void close(Connection con , PreparedStatement pstmt , ResultSet rs) {if(rs != null) {try {rs.close();rs = null;} catch (SQLException e) {e.printStackTrace();}}close(con , pstmt);}}


 


 Proxool的配置文件:

jdbc-0.proxool.alias=stu_pooljdbc-0.proxool.driver-url=jdbc:mysql://localhost/StudentManageSystemjdbc-0.proxool.driver-class=com.mysql.jdbc.Driverjdbc-0.user=rootjdbc-0.password=5210jdbc-0.proxool.maximum-connection-count=50jdbc-0.proxool.minimum-connection-count=5jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE


 我们测试一下:

@Testpublic void testGetConnection() {Connection con = DBUtil.getConnection();assertNotNull(con);DBUtil.close(con);}


 3.3 登录模块-管理员

        我们先写一个登录界面:先实现了管理员的登录,对界面不是很擅长,简单地做了一个。

注:数据库中的密码,没有进行处理,都是明文。


图1 登录界面

 

package org.ygy.view;import java.awt.Container;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JRadioButton;import javax.swing.JTextField;import org.ygy.exception.ServiceException;import org.ygy.service.IAdminService;import org.ygy.service.impl.AdminService;/** * 登录时的选择登录类型界面 *  * @author Administrator * */public class StartFrame extends JFrame {private static final long serialVersionUID = -1264932141929172778L;private Container container = null;private JPanel inputPanel = null;private JPanel buttonPanel = null;private JPanel typePanel = null;private JLabel idLabel = null;private JLabel pwdLabel = null;private JLabel typeLabel = null;private JRadioButton studentRadio = null;private JRadioButton adminRadio = null;private JTextField idText = null;private JPasswordField pwdText = null;private JButton loginButton = null;private JButton resetButton = null;private int width = 460;private int height = 270;private int locationX = 0;private int locationY = 0;public StartFrame() {setTitle("登录界面");//设置居中显示locationX = (Toolkit.getDefaultToolkit().getScreenSize().width - width) / 2;locationY = (Toolkit.getDefaultToolkit().getScreenSize().height - height) / 2;setBounds(locationX, locationY , width , height);container = this.getContentPane();container.setLayout(null);initialInputPanel();initialRadioPanel();initialButtonPanel();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);}/** * 初始化输入面板 */private void initialInputPanel() {inputPanel = new JPanel();inputPanel.setLayout(null);inputPanel.setBounds(0 , 0 , width , height * 2 / 4);idLabel = new JLabel("账号:");pwdLabel = new JLabel("密码:");idText = new JTextField(10);pwdText = new JPasswordField(10);inputPanel.add(idLabel);inputPanel.add(idText);inputPanel.add(pwdLabel);inputPanel.add(pwdText);container.add(inputPanel);}/** * 初始化按钮面板 */private void initialButtonPanel() {buttonPanel =  new JPanel();buttonPanel.setLayout(null);buttonPanel.setBounds(0 ,  height * 3 / 4 , width ,  height/ 4);loginButton = new JButton("登录");loginButton.addActionListener(new LoginListener());resetButton = new JButton("重置");resetButton.addActionListener(new LoginListener());idLabel.setBounds(50, 50, 30, 30);pwdLabel.setBounds(50, 100, 30, 30);idText.setBounds(150, 50, 170, 30);pwdText.setBounds(150, 100, 170, 30);loginButton.setBounds(70, 0, 130, 30);resetButton.setBounds(230 ,0 ,  130 , 30);buttonPanel.add(loginButton);buttonPanel.add(resetButton);container.add(buttonPanel);}/** * 初始化单选面板 */private void initialRadioPanel() {studentRadio = new JRadioButton("学生");studentRadio.setBounds(200 , 17 , 80 ,  height/ 8);studentRadio.setSelected(true);adminRadio = new JRadioButton("管理员");adminRadio.setBounds(300 , 17 , 100 ,  height/ 8);ButtonGroup loginGroup = new ButtonGroup();loginGroup.add(studentRadio);loginGroup.add(adminRadio);typeLabel = new JLabel("请选择登录类型:");typeLabel.setBounds(50 , 0, 100 ,  height/ 4);typePanel = new JPanel();typePanel.setBounds(0 ,  height * 2 / 4 , width ,  height/ 4);typePanel.setLayout(null);typePanel.add(typeLabel);typePanel.add(studentRadio);typePanel.add(adminRadio);container.add(typePanel);}/** * 按钮的监听器 *  * @author Administrator * */class LoginListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {if("登录".equals(e.getActionCommand())) {if(validateNotNull()) {if(studentLogin()) {System.out.println("su login");} else {IAdminService adminService = new AdminService();try {adminService.login(idText.getText(), new String(pwdText.getPassword()));StartFrame.this.setVisible(false);StartFrame.this.dispose();} catch (ServiceException e1) {display(e1.getMessage() , "错误提示");}}}} else if("重置".equals(e.getActionCommand())) {clearInput();}}}/** * 清空输入信息 */private void clearInput() {idText.setText("");pwdText.setText("");studentRadio.setSelected(true);}/** * 验证登录信息不为空 *  * @return */private boolean validateNotNull() {boolean result = true;String id = idText.getText();String password = new String(pwdText.getPassword());if(id == null || "".equals(id.trim())) {display("账号不能为空!" , "错误提示");result = false;} else if(password == null || "".equals(password.trim())) {display("密码不能为空" , "错误提示");result = false;}return result;}private boolean studentLogin() {boolean result = false;if(studentRadio.isSelected()) {result = true;}return result;}/** * 显示提示框,显示信息 *  * @param message要显示的内容 * @param title提示框标题 */private void display(String message , String title) {JOptionPane.showMessageDialog(container, message, title, JOptionPane.INFORMATION_MESSAGE);}public static void main(String[] args) {new StartFrame();}}


package org.ygy.service;import org.ygy.exception.ServiceException;public interface IAdminService {public void login(String name , String password) throws ServiceException;}



 

package org.ygy.service.impl;import org.apache.log4j.Logger;import org.ygy.dao.IAdminDao;import org.ygy.dao.impl.AdminDao;import org.ygy.exception.DaoException;import org.ygy.exception.ServiceException;import org.ygy.model.Administrator;import org.ygy.service.IAdminService;public class AdminService implements IAdminService {private Logger logger = Logger.getLogger(AdminService.class);private IAdminDao adminDao = null;public AdminService () {adminDao = new AdminDao();}@Overridepublic void login(String name, String password) throws ServiceException {try {Administrator admin = adminDao.findByName(name);if(admin == null) {logger.debug("账户不存在!");throw new ServiceException("该账户不存在!");} else {if(password.equals(admin.getPassword())) {logger.debug("成功登录!");return;} else {logger.debug("密码不正确!");throw new ServiceException("密码不正确!");}}} catch (DaoException e) {logger.debug(e.getMessage());throw new ServiceException(e.getMessage());}}}


package org.ygy.dao;import org.ygy.exception.DaoException;import org.ygy.model.Administrator;public interface IAdminDao {public Administrator findByName(String name) throws DaoException;}


package org.ygy.dao.impl;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import org.apache.log4j.Logger;import org.ygy.dao.IAdminDao;import org.ygy.exception.DaoException;import org.ygy.model.Administrator;import org.ygy.util.DBUtil;public class AdminDao implements IAdminDao {private Logger logger = Logger.getLogger(AdminDao.class);private Connection con = null;private PreparedStatement pstmt = null;private ResultSet rs = null;@Overridepublic Administrator findByName(String name) throws DaoException {String sql = "select password from t_administrator where name=?";Administrator admin = null;con = DBUtil.getConnection();try {pstmt = con.prepareStatement(sql);pstmt.setString(1 , name);rs = pstmt.executeQuery();if(rs.next()) {admin = new Administrator();admin.setName(name);admin.setPassword(rs.getString("password"));}} catch (SQLException e) {logger.debug(e.getMessage());throw new DaoException(e.getMessage());} finally {DBUtil.close(con, pstmt, rs);}return admin;}}