学生成绩管理系统(二)
来源:互联网 发布: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;}}
- 学生成绩管理系统(二)
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 计算机网络笔记整理
- 【算法】2013创新工场校园招聘笔试题--如何求出带环链表的入口节点
- 求1亿内的素数个数
- 系统消息
- hadoop集成hbase遇到的错误
- 学生成绩管理系统(二)
- linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结-
- nutch搜索返回结果按照时间排序
- java中throw和throws区别
- HOJ 1653 Heavy Transportation&& HOJ 1460 Heavy Cargo (Dijkstra 单源最短路)
- 对通用输入输出GPIO的深入理解
- Dbutils
- 精通CSS.DIV网页样式与布局(五) ——设置表格与表单样式
- The Architecture of Open Source Applications: The Bourne-Again Shell