=宿舍管理系统=======
----------dao层
package com.imti.dao;
import java.util.List;
import com.imti.entity.Student;
public interface IStudentDao
{
// 添加学生信息
public int addStudentInfo(Student stu);
// 获取已经入住的总人数
public int getHaveStudentCount();
// 查询指定宿舍号中入住的学生信息
public List<Student> getStudentInfoListWithRoomId(int roomId);
// 根据身份证号码删除学生信息
public int deleteStudentInfoWithCardNumber(String cardNumber);
// 根据身份证号码修改学生的宿舍信息
public int updateStudentDidWithCardNumber(int did, String cardNumber);
}
package com.imti.dao;
import java.util.List;
import com.imti.entity.Student;
public interface IStudentDao
{
// 添加学生信息
public int addStudentInfo(Student stu);
// 获取已经入住的总人数
public int getHaveStudentCount();
// 查询指定宿舍号中入住的学生信息
public List<Student> getStudentInfoListWithRoomId(int roomId);
// 根据身份证号码删除学生信息
public int deleteStudentInfoWithCardNumber(String cardNumber);
// 根据身份证号码修改学生的宿舍信息
public int updateStudentDidWithCardNumber(int did, String cardNumber);
}
package com.imti.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.imti.entity.Admin;
import com.imti.util.JDBCManager;
/*
-
管理员:数据访问层
-
*/
public class AdminDao
{
// 验证登录用户
public Admin checkUser(Admin admin) {
Connection conn = null;
PreparedStatement preparedStmt = null;
ResultSet rs = null;// 创建一个管理员对象 Admin mAdmin = null; try { // 1.获取连接 conn = JDBCManager.getConnection(); // 2.创建PreparedStatement对象 String sql = "select * from tab_admin where aname = ? and password = ?"; preparedStmt = conn.prepareStatement(sql); // 3.设置参数 preparedStmt.setString(1, admin.getAname()); preparedStmt.setString(2, admin.getPassword()); // 4.执行并返回结果集 rs = preparedStmt.executeQuery(); // 5.循环遍历数据 // boolean bool = rs.next(); // System.out.println("bool=" + bool); while (rs.next()) { int aid = rs.getInt("aid"); String aname = rs.getString("aname"); String password = rs.getString("password"); int selectLimit = rs.getInt("select_limit"); int updateLimit = rs.getInt("update_limit"); int deleteLimit = rs.getInt("delete_limit"); int addLimit = rs.getInt("add_limit"); // 实例化管理员对象 mAdmin = new Admin(aid, aname, password, selectLimit, updateLimit, deleteLimit, addLimit); System.out.println("管理员信息:" + mAdmin); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JDBCManager.close(conn, preparedStmt, rs); } return mAdmin;
}
}
package com.imti.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.imti.entity.Admin;
import com.imti.util.JDBCManager;
/*
-
管理员:数据访问层
-
*/
public class AdminDao
{
// 验证登录用户
public Admin checkUser(Admin admin) {
Connection conn = null;
PreparedStatement preparedStmt = null;
ResultSet rs = null;// 创建一个管理员对象 Admin mAdmin = null; try { // 1.获取连接 conn = JDBCManager.getConnection(); // 2.创建PreparedStatement对象 String sql = "select * from tab_admin where aname = ? and password = ?"; preparedStmt = conn.prepareStatement(sql); // 3.设置参数 preparedStmt.setString(1, admin.getAname()); preparedStmt.setString(2, admin.getPassword()); // 4.执行并返回结果集 rs = preparedStmt.executeQuery(); // 5.循环遍历数据 // boolean bool = rs.next(); // System.out.println("bool=" + bool); while (rs.next()) { int aid = rs.getInt("aid"); String aname = rs.getString("aname"); String password = rs.getString("password"); int selectLimit = rs.getInt("select_limit"); int updateLimit = rs.getInt("update_limit"); int deleteLimit = rs.getInt("delete_limit"); int addLimit = rs.getInt("add_limit"); // 实例化管理员对象 mAdmin = new Admin(aid, aname, password, selectLimit, updateLimit, deleteLimit, addLimit); System.out.println("管理员信息:" + mAdmin); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JDBCManager.close(conn, preparedStmt, rs); } return mAdmin;
}
}
=实体类=====
package com.imti.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.imti.entity.Admin;
import com.imti.util.JDBCManager;
/*
-
管理员:数据访问层
-
*/
public class AdminDao
{
// 验证登录用户
public Admin checkUser(Admin admin) {
Connection conn = null;
PreparedStatement preparedStmt = null;
ResultSet rs = null;// 创建一个管理员对象 Admin mAdmin = null; try { // 1.获取连接 conn = JDBCManager.getConnection(); // 2.创建PreparedStatement对象 String sql = "select * from tab_admin where aname = ? and password = ?"; preparedStmt = conn.prepareStatement(sql); // 3.设置参数 preparedStmt.setString(1, admin.getAname()); preparedStmt.setString(2, admin.getPassword()); // 4.执行并返回结果集 rs = preparedStmt.executeQuery(); // 5.循环遍历数据 // boolean bool = rs.next(); // System.out.println("bool=" + bool); while (rs.next()) { int aid = rs.getInt("aid"); String aname = rs.getString("aname"); String password = rs.getString("password"); int selectLimit = rs.getInt("select_limit"); int updateLimit = rs.getInt("update_limit"); int deleteLimit = rs.getInt("delete_limit"); int addLimit = rs.getInt("add_limit"); // 实例化管理员对象 mAdmin = new Admin(aid, aname, password, selectLimit, updateLimit, deleteLimit, addLimit); System.out.println("管理员信息:" + mAdmin); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JDBCManager.close(conn, preparedStmt, rs); } return mAdmin;
}
}
package com.imti.entity;
import java.util.Vector;
public class Student
{
private int sid;
private int did;
private String sname;
private String cardNumber;
private String gender;
private int age;
// 构造方法
public Student() {
super();
}
/**
* @param sid
* @param did
* @param sname
* @param cardNumber
* @param gender
* @param age
*/
public Student(int sid, int did, String sname, String cardNumber, String gender, int age) {
super();
this.sid = sid;
this.did = did;
this.sname = sname;
this.cardNumber = cardNumber;
this.gender = gender;
this.age = age;
}
public Student(int did, String sname, String cardNumber, String gender, int age) {
super();
this.did = did;
this.sname = sname;
this.cardNumber = cardNumber;
this.gender = gender;
this.age = age;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public int getDid() {
return did;
}
public void setDid(int did) {
this.did = did;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Vector<Object> getVector() {
Vector<Object> vec = new Vector<>();
vec.add(this.getSname());
vec.add(this.getCardNumber());
vec.add(this.getGender());
vec.add(this.getAge());
return vec;
}
// toString()
@Override
public String toString() {
// TODO Auto-generated method stub
return "学生id:" + this.getSid() + ",宿舍id:" + this.getDid() + ",姓名:" + this.getSname() + ",身份证号码:"
+ this.getCardNumber() + ",性别:" + this.getGender() + ",年龄:" + this.getAge();
}
}
package com.imti.entity;
public class Admin
{
// 属性
private int aid;
private String aname;
private String password;
// 权限:权限的值只能0和1
private int selectLimit;
private int updateLimit;
private int deleteLimit;
private int addLimit;
// 构造方法
public Admin() {
super();
}
/**
* @param aid
* @param aname
* @param password
* @param selectLimit
* @param updateLimit
* @param deleteLimit
* @param addLimit
*/
public Admin(int aid, String aname, String password, int selectLimit, int updateLimit, int deleteLimit,
int addLimit) {
super();
this.aid = aid;
this.aname = aname;
this.password = password;
this.selectLimit = selectLimit;
this.updateLimit = updateLimit;
this.deleteLimit = deleteLimit;
this.addLimit = addLimit;
}
public int getAid() {
return aid;
}
public void setAid(int aid) {
this.aid = aid;
}
public String getAname() {
return aname;
}
public void setAname(String aname) {
this.aname = aname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getSelectLimit() {
return selectLimit;
}
public void setSelectLimit(int selectLimit) {
this.selectLimit = selectLimit;
}
public int getUpdateLimit() {
return updateLimit;
}
public void setUpdateLimit(int updateLimit) {
this.updateLimit = updateLimit;
}
public int getDeleteLimit() {
return deleteLimit;
}
public void setDeleteLimit(int deleteLimit) {
this.deleteLimit = deleteLimit;
}
public int getAddLimit() {
return addLimit;
}
public void setAddLimit(int addLimit) {
this.addLimit = addLimit;
}
// 重写toString
@Override
public String toString() {
// TODO Auto-generated method stub
return "编号:" + this.getAid() + ",姓名:" + this.getAname() + ",密码:" + this.getPassword() + ",查询权限:"
+ this.getSelectLimit() + ",修改权限:" + this.getUpdateLimit() + ",删除权限:" + this.getDeleteLimit() + ",添加权限:"
+ this.getAddLimit();
}
}
===Logic层=
package com.imti.logic;
import java.util.ArrayList;
import java.util.List;
import com.imti.dao.DormDao;
/*
-
宿舍类:业务逻辑层
-
*/
public class DormLogic
{
// 创建数据访问层的对象
private DormDao mDormDao = new DormDao();// 根据性别,查询可以入住的房间号码
public List getRoomIdWithType(String typeStr) {
List roomNumList = new ArrayList<>();// 判断对象不为空,则执行相应的程序 if (mDormDao != null) { roomNumList = mDormDao.getRoomIdWithType(typeStr); return roomNumList; } // System.out.println("DormLogic获取宿舍id为null!"); return null;
}
// 根据roomid获取did
public int getDidWithRoomId(int roomId) {
// 判断对象不为空,则执行相应的程序
if (mDormDao != null) {
int count = mDormDao.getDidWithRoomId(roomId);
return count;
}
return 0;
}// 获取可以入住的总人数
public int getDormTotal() {
if (mDormDao == null)
return 0;int total = mDormDao.getDormTotal(); return total;
}
// 获取所有的宿舍号
public List getAllRoomIdList() {
if (mDormDao == null)
return null;List<Integer> roomNumList = mDormDao.getAllRoomIdList(); return roomNumList;
}
// 根据宿舍号查询可以入住的人数
public int getCountWithRoomId(int roomId) {
if (mDormDao == null)
return 0;int count = mDormDao.getCountWithRoomId(roomId); return count;
}
// 根据did更新宿舍类型
public int updateDormTypeWhitDid(String gender, int did) {
if (mDormDao == null)
return 0;int count = mDormDao.updateDormTypeWhitDid(gender, did); return count;
}
}
package com.imti.logic;
import java.util.List;
import com.imti.dao.StudentDaoImpl;
import com.imti.entity.Student;
public class StudentLogic
{
private StudentDaoImpl mStudentDaoImpl = new StudentDaoImpl();
// 插入数据
public int insertStudentInfo(Student stu) {
if (mStudentDaoImpl != null) {
int count = mStudentDaoImpl.addStudentInfo(stu);
if (count > 0)
System.out.println("入住成功!");
else {
System.out.println("入住失败!");
}
return count;
}
return 0;
}
// 获取已经入住的人数
public int getHaveStudentCount() {
if (mStudentDaoImpl == null)
return 0;
int count = mStudentDaoImpl.getHaveStudentCount();
return count;
}
// 根据宿舍号查询入住的学生信息
public List<Student> getStudentInfoListWithRoomId(int roomId) {
if (mStudentDaoImpl == null)
return null;
List<Student> stuList = mStudentDaoImpl.getStudentInfoListWithRoomId(roomId);
return stuList;
}
// 根据身份证号码删除学生信息
public int deleteStudentInfoWithCardNumber(String cardNumber) {
if (mStudentDaoImpl == null)
return 0;
int dcount = mStudentDaoImpl.deleteStudentInfoWithCardNumber(cardNumber);
return dcount;
}
// 更换宿舍
public int updateStudentDidWithCardNumber(int did, String cardNumber) {
if (mStudentDaoImpl == null)
return 0;
int ucount = mStudentDaoImpl.updateStudentDidWithCardNumber(did, cardNumber);
return ucount;
}
}
package com.imti.logic;
import com.imti.dao.AdminDao;
import com.imti.entity.Admin;
/*
-
管理员的业务逻辑层
-
*/
public class AdminLogic
{
// 创建数据访问层对象
private AdminDao mAdminDao = new AdminDao();// 验证登录用户
public Admin checkUser(Admin admin) {
Admin mAdmin = mAdminDao.checkUser(admin);if (mAdmin == null) System.out.println("此管理员不存在!"); return mAdmin;
}
}
=UI层===
package com.imti.ui;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import com.imti.logic.DormLogic;
import com.imti.logic.StudentLogic;
import com.imti.util.FrameUtil;
/**
-
1.宿舍信息界面: a.已经入住的总人数 b.宿舍一共可入住的人数 c.获取所有宿舍的房间号码
*/
public class RoomNumFrame extends JFrame
{
private static final long serialVersionUID = 1L;// 主面板
private JPanel mainPanel = new JPanel();private JLabel infoLabel = null;
private JPanel roomPanel = null;
private JButton addNewStuBtn = null;
private GridLayout roomGridLayout = null;// 创建业务逻辑层对象
private StudentLogic mStudentLogic = new StudentLogic();
private DormLogic mDormLogic = new DormLogic();// 获取入住的学生人数
private int havaCount = 0;
private int dormTotal = 0;
private List roomIdList = new ArrayList<>();// 行和列
private int rows = 0;
private int column = 0;public RoomNumFrame() {
// TODO Auto-generated constructor stub
super(“宿舍信息表”);
initData();initView(); setData();
}
// 获取数据
public void initData() {
if (mStudentLogic == null || mDormLogic == null)
return;// 获取入住的学生人数 havaCount = mStudentLogic.getHaveStudentCount(); // 获取可以入住的总人数 dormTotal = mDormLogic.getDormTotal(); // 获取所有的房间号 roomIdList = mDormLogic.getAllRoomIdList(); System.out.println("宿舍界面:" + roomIdList); // 计算除需要的行和列 if (roomIdList.size() % 4 == 0) { rows = roomIdList.size() / 4; }
}
// 设置数据
public void setData() {
// 显示信息
setLabelMessage(havaCount, dormTotal);
}// 初始化view
public void initView() {
this.setSize(520, 520);
FrameUtil.windowToCenterWithWindow(this);
mainPanel.setLayout(null);
this.add(mainPanel);infoLabel = new JLabel(); infoLabel.setBounds(60, 50, 270, 30); infoLabel.setFont(new Font("楷体", Font.BOLD, 15)); infoLabel.setHorizontalAlignment(JLabel.LEFT); mainPanel.add(infoLabel); addNewStuBtn = new JButton("新生入住"); addNewStuBtn.setActionCommand("new"); addNewStuBtn.setBounds(350, 50, 100, 30); addNewStuBtn.setFont(new Font("楷体", Font.BOLD, 15)); addNewStuBtn.setHorizontalAlignment(JLabel.LEFT); addNewStuBtn.addActionListener(new MyActionListener()); mainPanel.add(addNewStuBtn); roomGridLayout = new GridLayout(5, 4, 30, 30); roomPanel = new JPanel(); roomPanel.setBounds(60, 100, this.getWidth() - 60 * 2, this.getHeight() - 20 * 2 - 120); roomPanel.setLayout(roomGridLayout); mainPanel.add(roomPanel); addRoomNum(); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
// 添加宿舍号
public void addRoomNum() {
// 总的宿舍号
int total = roomGridLayout.getColumns() * roomGridLayout.getRows();for (int i = 0; i < roomIdList.size(); i++) { // 循环向roomPanel添加房间号按钮 JButton jb = new JButton(String.valueOf(roomIdList.get(i))); jb.setActionCommand(String.valueOf(roomIdList.get(i))); jb.setPreferredSize(new Dimension(40, 40)); jb.addActionListener(new MyActionListener()); roomPanel.add(jb); }
}
// 显示信息
public void setLabelMessage(int num1, int num2) {
String msg = “已住” + num1 + “人,还可以住”
+ (num2 - num1) + “人”;infoLabel.setText(msg);
}
// 使用内部类添加监听器
class MyActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String command = e.getActionCommand();
if (command.equals(“new”)) {
new AddStudentDialog(RoomNumFrame.this);
} else {
System.out.println(“command=” + command);
new ScholasticInfoTableDialog(RoomNumFrame.this, Integer.parseInt(command));
}
}
}public static void main(String[] args) {
new RoomNumFrame();
}
}
package com.imti.ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import com.imti.entity.Student;
import com.imti.logic.DormLogic;
import com.imti.logic.StudentLogic;
import com.imti.util.FrameUtil;
public class ScholasticInfoTableDialog extends JDialog implements ActionListener
{
private static final long serialVersionUID = 1L;
private String[] columnNames = { "姓名", "身份证号", "性别", "年龄" };
private DefaultTableModel dm = new DefaultTableModel(columnNames, 0);
private JTable stuTable = new JTable(dm);
// 主面板
private JPanel mainPanel = new JPanel();
private JLabel roomInfoLabel = null;
private JButton addNewBtn = null;
// 创建业务逻辑层StudentLogic对象
private StudentLogic mStudentLogic = new StudentLogic();
private DormLogic mDormLogic = new DormLogic();
private List<Student> stuList = new ArrayList<>();
private int roomId = 0;
private int havaCount = 0;
private int total = 0;
public ScholasticInfoTableDialog(Window window, int roomId) {
// TODO Auto-generated constructor stub
super(window, "宿舍信息");
this.roomId = roomId;
initData();
initView();
setData();
setTableData();
}
public void initData() {
// 判断是否为null
if (mStudentLogic == null || mDormLogic == null)
return;
// 根据宿舍号获取入住的学生信息
stuList = mStudentLogic.getStudentInfoListWithRoomId(roomId);
havaCount = stuList.size();
// 获取宿舍可入住的人数
total = mDormLogic.getCountWithRoomId(roomId);
}
public void initView() {
this.setSize(520, 520);
FrameUtil.windowToCenterWithWindow(this);
mainPanel.setLayout(null);
this.add(mainPanel);
roomInfoLabel = new JLabel();
roomInfoLabel.setBounds(30, 40, 350, 30);
roomInfoLabel.setFont(new Font("楷体", Font.BOLD, 15));
roomInfoLabel.setHorizontalAlignment(JLabel.LEFT);
mainPanel.add(roomInfoLabel);
addNewBtn = new JButton("新生入住");
addNewBtn.setBounds(roomInfoLabel.getX() + roomInfoLabel.getWidth() + 10, roomInfoLabel.getY(), 100, 30);
addNewBtn.setActionCommand("add");
addNewBtn.setFont(new Font("楷体", Font.BOLD, 15));
addNewBtn.setHorizontalAlignment(JLabel.CENTER);
addNewBtn.addActionListener(this);
mainPanel.add(addNewBtn);
JTableHeader mHeader = stuTable.getTableHeader();
mHeader.setBackground(Color.GRAY);
mHeader.setForeground(Color.WHITE);
mHeader.setFont(new Font("楷体", Font.BOLD, 16));
// 设置表头是否可以重新排序
mHeader.setReorderingAllowed(false);
// 设置表头是否可以调整大小;
mHeader.setResizingAllowed(false);
stuTable.setRowHeight(22); // 默认是16px
stuTable.setGridColor(Color.gray);
// 这是单元格内容居中
DefaultTableCellRenderer dr = (DefaultTableCellRenderer) stuTable.getDefaultRenderer(dm.getColumnClass(0));
dr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
JScrollPane mScrollPane = new JScrollPane(stuTable);
mScrollPane.setBounds(roomInfoLabel.getX(), 90, this.getWidth() - roomInfoLabel.getX() * 2, 320);
mScrollPane.setAlignmentX(CENTER_ALIGNMENT);
mScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
mScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
mainPanel.add(mScrollPane);
String[] btnText = { "删除", "转出" };
String[] command = { "delete", "update" };
// 按钮面板
JPanel btnPanel = new JPanel();
// 给面板设置布局管理器为流布局
btnPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 15));
// 将面板使用边框布局放在窗口的最南边
add(btnPanel, BorderLayout.SOUTH);
for (int i = 0; i < btnText.length; i++) {
JButton jb = new JButton(btnText[i]);
jb.setActionCommand(command[i]);
jb.setPreferredSize(new Dimension(80, 40));
jb.addActionListener(this);
btnPanel.add(jb);
}
this.setResizable(false);
this.setVisible(true);
// 关闭窗口时不能使用EXIT_ON_CLOSE
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
public void setData() {
// 宿舍号为401,已住2人,还可以容纳2人
String message = "<html><body>宿舍号为<font color = 'red' size = '5'>" + roomId + "</font>,"
+ "已住<font color = 'red' size = '5'>" + havaCount + "</font>人," + "还可以容纳<font color = 'red' size = '5'>"
+ (total - havaCount) + "</font>人</body></html>";
roomInfoLabel.setText(message);
// 如果已经住满,则不让继续入住
if (havaCount == total)
addNewBtn.setEnabled(false);
}
public void setTableData() {
// 将信息添加至列表
if (stuList.isEmpty())
return;
// for-each循环
for (Student mStudent : stuList) {
addStudentInfoToRow(mStudent);
}
}
// 添加
public void addStudentInfoToRow(Student stu) {
dm.addRow(stu.getVector());
}
// 删除
public void removeStudentInfoWithIndex(int rowIndex) {
dm.removeRow(rowIndex);
}
// 根据索引获取学生的信息
public Student getStudentInfoWithIndex(int rowIndex) {
// getValueAt(int row, int column):row和 column返回单元格的属性值。 下标从0开始
String sname = (String) dm.getValueAt(rowIndex, 0);
String cardNumber = (String) dm.getValueAt(rowIndex, 1);
String gender = (String) dm.getValueAt(rowIndex, 2);
int age = (int) dm.getValueAt(rowIndex, 3);
Student stu = new Student();
stu.setSname(sname);
stu.setCardNumber(cardNumber);
stu.setGender(gender);
stu.setAge(age);
// 根据获取的额数据,创建学生对象
return stu;
}
// 刷新界面
public void refreshUI() {
initData();
setData();
// setTableData();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String command = e.getActionCommand();
// 添加
if (command.equals("add")) {
new AddStudentDialog(ScholasticInfoTableDialog.this);
return;
} else {
}
// 获取选中的行号
int rowIndex = stuTable.getSelectedRow();
if (rowIndex == -1) {
JOptionPane.showMessageDialog(this, "请选择需要操作的行!");
return;
}
// 先删除数据库:身份证号码
Student stu = getStudentInfoWithIndex(rowIndex);
// 转出
if (command.equals("update")) {
if (stu != null)
new UpdateRoomDialog(ScholasticInfoTableDialog.this, stu);
}
// 删除操作
if (command.equals("delete")) {
if (stu != null) {
int dcount = mStudentLogic.deleteStudentInfoWithCardNumber(stu.getCardNumber());
if (dcount > 0) {
// 删除表格数据
removeStudentInfoWithIndex(rowIndex);
// 刷新界面
refreshUI();
} else
JOptionPane.showMessageDialog(this, "删除失败!");
}
}
}
public void showMessage(String name) {
JOptionPane.showMessageDialog(ScholasticInfoTableDialog.this, name + ",对不起,您没有此操作权限!");
}
}
package com.imti.ui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.imti.entity.Student;
import com.imti.logic.DormLogic;
import com.imti.logic.StudentLogic;
import com.imti.util.FrameUtil;
public class UpdateRoomDialog extends JDialog implements ActionListener
{
private static final long serialVersionUID = 1L;
private JPanel mainPanel = new JPanel();
private JTextField cardIdField = new JTextField();
private JTextField nameField = new JTextField();
private JTextField ageField = new JTextField();
private JTextField sexField = new JTextField();
private JComboBox<Object> roomNumComboBox = new JComboBox<Object>();
//
private Student mStudent = null;
private List<Integer> roomNumList = new ArrayList<Integer>();
// 创建业务逻辑DormLogic层对象
private DormLogic mDormLogic = new DormLogic();
private StudentLogic mStudentLogic = new StudentLogic();
private List<Student> stuList = new ArrayList<>();
// 表示当前房间已经入住的学生,和总人数
private int havaCount = 0;
private int total = 0;
private int roomId = 0;
private ScholasticInfoTableDialog window;
public UpdateRoomDialog(ScholasticInfoTableDialog window, Student mStudent) {
// TODO Auto-generated constructor stub
super(window, "更换宿舍");
this.window = window;
this.mStudent = mStudent;
initData();
initView();
setData();
}
// 获取数据
public void initData() {
if (mDormLogic == null || mStudentLogic == null)
return;
// 根据性别获取可以入住的宿舍号
roomNumList = mDormLogic.getRoomIdWithType(mStudent.getGender());
}
// 验证是否已经入住满
public boolean isCheckFull(int roomId) {
// 根据宿舍号获取入住的学生信息
stuList = mStudentLogic.getStudentInfoListWithRoomId(roomId);
havaCount = stuList.size();
// 获取宿舍可入住的人数
total = mDormLogic.getCountWithRoomId(roomId);
// 如果相等,则表示入住满
if (havaCount == total) {
return true;
}
return false;
}
// 设置数据
public void setData() {
if (mStudent == null)
return;
nameField.setText(mStudent.getSname());
cardIdField.setText(mStudent.getCardNumber());
sexField.setText(mStudent.getGender());
ageField.setText(mStudent.getAge() + "");
// 显示可以入住的宿舍号
if (roomNumComboBox.getItemCount() > 0)
roomNumComboBox.removeAllItems();
for (Integer roomId : roomNumList) {
roomNumComboBox.addItem(roomId);
}
}
// 初始化view
public void initView() {
this.setSize(500, 450);
FrameUtil.windowToCenterWithWindow(this);
mainPanel.setLayout(null);
this.add(mainPanel);
JLabel label = new JLabel("更换宿舍");
label.setBounds(50, 20, this.getWidth() - 100, 40);
label.setFont(new Font("楷体", Font.BOLD, 15));
label.setHorizontalAlignment(JLabel.CENTER);
mainPanel.add(label);
JPanel contentPanel = new JPanel();
contentPanel.setLocation(50, label.getHeight() + label.getY());
contentPanel.setBounds(label.getX(), label.getHeight() + label.getY() + 10, label.getWidth(), 280);
contentPanel.setLayout(new GridLayout(5, 2, 10, 15));
mainPanel.add(contentPanel);
JLabel nameLabel = new JLabel("学生姓名:");
nameLabel.setHorizontalAlignment(JLabel.CENTER);
contentPanel.add(nameLabel);
nameField.setPreferredSize(new Dimension(60, 15));
contentPanel.add(nameField);
nameField.setEditable(false);
JLabel idLabel = new JLabel("身份证号:");
idLabel.setHorizontalAlignment(JLabel.CENTER);
contentPanel.add(idLabel);
cardIdField.setPreferredSize(new Dimension(60, 15));
contentPanel.add(cardIdField);
cardIdField.setEditable(false);
JLabel subLabel = new JLabel("性别:");
subLabel.setHorizontalAlignment(JLabel.CENTER);
contentPanel.add(subLabel);
sexField.setPreferredSize(new Dimension(60, 15));
contentPanel.add(sexField);
sexField.setEditable(false);
JLabel ageLabel = new JLabel("年龄:");
ageLabel.setHorizontalAlignment(JLabel.CENTER);
contentPanel.add(ageLabel);
ageField.setPreferredSize(new Dimension(60, 15));
contentPanel.add(ageField);
ageField.setEditable(false);
JLabel roomLabel = new JLabel("宿舍号:");
roomLabel.setHorizontalAlignment(JLabel.CENTER);
contentPanel.add(roomLabel);
roomNumComboBox.setPreferredSize(new Dimension(60, 15));
contentPanel.add(roomNumComboBox);
// 按钮
String[] btnText = { "确定", "取消" };
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 15));
add(btnPanel, BorderLayout.SOUTH);
for (int i = 0; i < btnText.length; i++) {
JButton jb = new JButton(btnText[i]);
jb.addActionListener(this);
btnPanel.add(jb);
}
this.setResizable(false);
this.setVisible(true);
// 关闭窗口时不能使用EXIT_ON_CLOSE
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String text = ((JButton) e.getSource()).getText();
if (text.equals("确定")) {
/**
* 1.先判断当前宿舍是否已注满 2.跟新数据库的操作 3.删除表中当前房间的学生 4.更新显示信息
*
* 如果转入的是预留宿舍,则需要更新宿舍类型
*/
// 1.判断是否入住满
int roomId = (int) roomNumComboBox.getSelectedItem();
boolean isFull = isCheckFull(roomId);
System.out.println("是否住满:" + isFull);
if (isFull) {
JOptionPane.showMessageDialog(this, "对不起,此房间已经住满!");
return;
}
// 2.跟新数据库的操作
// 获取did
int did = mDormLogic.getDidWithRoomId(roomId);
int ucount = mStudentLogic.updateStudentDidWithCardNumber(did, mStudent.getCardNumber());
if (ucount > 0) {
// 3. 如果转入的是预留宿舍,则需要更新宿舍类型
int count = mDormLogic.updateDormTypeWhitDid(mStudent.getGender(), did);
System.out.println("更新成功!");
// 3.删除表中当前房间的学生
// window.removeStudentInfoWithIndex(rowIndex);
// 4.更新显示信息
window.refreshUI();
}
} else if (text.equals("取消")) {
}
this.dispose();
}
}
package com.imti.ui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.imti.entity.Student;
import com.imti.logic.DormLogic;
import com.imti.logic.StudentLogic;
import com.imti.util.FrameUtil;
/**
-
学生入住
*/
public class AddStudentDialog extends JDialog implements ActionListener, ItemListener
{
private static final long serialVersionUID = 1L;private JPanel mainPanel = new JPanel();
private JTextField IdField = new JTextField();
private JTextField nameField = new JTextField();
private JTextField ageField = new JTextField();private JComboBox sexComboBox = new JComboBox();
private JComboBox roomNumComboBox = new JComboBox();// 实例化业务逻辑层对象
private DormLogic mDormLogic = new DormLogic();public AddStudentDialog(Window window) {
// TODO Auto-generated constructor stub
this.setTitle(“新生入住”);
initView();
setData();
}// 设置data
public void setData() {
sexComboBox.setSelectedItem(“女”);
}// 根据性别,显示可入住的房间号码
public void showRoomNumsWithGender(String gender) {
if (mDormLogic == null || roomNumComboBox == null) {
System.out.println(“对象为空!”);
return;
}// 清除下拉列表数据 if (roomNumComboBox.getItemCount() > 0) roomNumComboBox.removeAllItems(); // 获取数据 List<Integer> roomIdList = mDormLogic.getRoomIdWithType(gender); // System.out.println("roomIdList:" + roomIdList); // 将值设置给下拉列表 for (Integer roomId : roomIdList) { roomNumComboBox.addItem(roomId); }
}
// 初始化view
public void initView() {
this.setSize(500, 450);
FrameUtil.windowToCenterWithWindow(this);
mainPanel.setLayout(null);
this.add(mainPanel);JLabel label = new JLabel("新生入住"); label.setBounds(50, 20, this.getWidth() - 100, 40); label.setFont(new Font("楷体", Font.BOLD, 15)); label.setHorizontalAlignment(JLabel.CENTER); mainPanel.add(label); JPanel contentPanel = new JPanel(); contentPanel.setLocation(50, label.getHeight() + label.getY()); contentPanel.setBounds(label.getX(), label.getHeight() + label.getY() + 10, label.getWidth(), 280); contentPanel.setLayout(new GridLayout(5, 2, 10, 15)); mainPanel.add(contentPanel); JLabel nameLabel = new JLabel("学生姓名:"); nameLabel.setHorizontalAlignment(JLabel.CENTER); contentPanel.add(nameLabel); nameField.setPreferredSize(new Dimension(60, 15)); contentPanel.add(nameField); JLabel idLabel = new JLabel("身份证号:"); idLabel.setHorizontalAlignment(JLabel.CENTER); contentPanel.add(idLabel); IdField.setPreferredSize(new Dimension(60, 15)); contentPanel.add(IdField); JLabel subLabel = new JLabel("性别:"); subLabel.setHorizontalAlignment(JLabel.CENTER); contentPanel.add(subLabel); sexComboBox.setPreferredSize(new Dimension(60, 15)); sexComboBox.addItem("男"); sexComboBox.addItem("女"); sexComboBox.addItemListener(this); contentPanel.add(sexComboBox); JLabel ageLabel = new JLabel("年龄:"); ageLabel.setHorizontalAlignment(JLabel.CENTER); contentPanel.add(ageLabel); ageField.setPreferredSize(new Dimension(60, 15)); contentPanel.add(ageField); JLabel roomLabel = new JLabel("宿舍号:"); roomLabel.setHorizontalAlignment(JLabel.CENTER); contentPanel.add(roomLabel); roomNumComboBox.setPreferredSize(new Dimension(60, 15)); contentPanel.add(roomNumComboBox); // 按钮 String[] btnText = { "确定", "取消" }; String[] commandText = { "ok", "cancel" }; JPanel btnPanel = new JPanel(); btnPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 15)); add(btnPanel, BorderLayout.SOUTH); for (int i = 0; i < btnText.length; i++) { JButton jb = new JButton(btnText[i]); jb.setActionCommand(commandText[i]); jb.addActionListener(this); btnPanel.add(jb); } this.setResizable(false); this.setVisible(true); // 关闭窗口时不能使用EXIT_ON_CLOSE setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stubString command = e.getActionCommand(); if (command.equals("ok")) { String sname = nameField.getText().trim(); String cardNumber = IdField.getText().trim(); String gender = (String) sexComboBox.getSelectedItem(); String ageStr = ageField.getText().trim(); System.out.println("ageStr=" + ageStr); int age = ageStr != null && !ageStr.equals("") ? Integer.parseInt(ageStr) : 0; // 通过roomid获取did int roomId = (int) roomNumComboBox.getSelectedItem(); // 通过roomid获取did int did = mDormLogic.getDidWithRoomId(roomId); System.out.println("did=" + did); // 将数据进行封装 Student stu = new Student(did, sname, cardNumber, gender, age); // 将数据存放数据库 StudentLogic mStudentLogic = new StudentLogic(); int icount = mStudentLogic.insertStudentInfo(stu); if (icount > 0) JOptionPane.showMessageDialog(this, "入住成功!"); else JOptionPane.showMessageDialog(this, "入住失败!"); }
}
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
if (e.getStateChange() == ItemEvent.SELECTED) {
String item = (String) e.getItem();
showRoomNumsWithGender(item);
}
}
}
package com.imti.ui;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import com.imti.entity.Admin;
import com.imti.logic.AdminLogic;
import com.imti.util.FrameUtil;
/**
-
用户登录界面
*/
public class LoginFrame extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;// private JPanel mainPanel = null;
private JTextField nameField = null;
private JTextField passwordField = null;public LoginFrame() {
// TODO Auto-generated constructor stub
initView();
}public void initView() {
this.setSize(400, 320);
this.setTitle(“登陆”);
FrameUtil.windowToCenterWithWindow(this);JPanel mainPanel = new JPanel(); mainPanel.setLayout(null); this.add(mainPanel); JLabel label = new JLabel("宿舍管理系统"); label.setBounds(50, 30, this.getWidth() - 100, 40); label.setFont(new Font("楷体_gb2312", Font.BOLD, 26)); label.setHorizontalAlignment(JLabel.CENTER); mainPanel.add(label); JPanel contentPanel = new JPanel(); contentPanel.setLocation(50, label.getHeight() + label.getY()); contentPanel.setBounds(label.getX(), label.getHeight() + label.getY() + 10, label.getWidth(), 280); contentPanel.setLayout(null); mainPanel.add(contentPanel); JLabel nameLabel = new JLabel("用户名"); nameLabel.setBounds(5, 20, 80, 40); nameLabel.setFont(new Font("楷体", Font.BOLD, 18)); nameLabel.setHorizontalAlignment(JLabel.CENTER); contentPanel.add(nameLabel); nameField = new JTextField(); nameField.setBounds(100, 20, 180, 40); contentPanel.add(nameField); JLabel passLabel = new JLabel("密码"); passLabel.setBounds(5, 70, 80, 40); passLabel.setFont(new Font("楷体", Font.BOLD, 18)); passLabel.setHorizontalAlignment(JLabel.CENTER); contentPanel.add(passLabel); passwordField = new JTextField(); // passwordField.setText("tiger"); passwordField.setBounds(100, 70, 180, 40); contentPanel.add(passwordField); JButton loginBtn = new JButton("登陆"); loginBtn.setSize(100, 40); loginBtn.setLocation((contentPanel.getWidth() - loginBtn.getWidth()) / 2, 130); loginBtn.setActionCommand("login"); contentPanel.add(loginBtn, FlowLayout.CENTER); loginBtn.addActionListener(this); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stubString command = e.getActionCommand(); // 获取信息 String name = nameField.getText().trim(); String password = passwordField.getText().trim(); // 验证 Admin mAdmin = new Admin(); mAdmin.setAname(name); mAdmin.setPassword(password); System.out.println("账户:" + name + ",密码:" + password); if (command.equals("login")) { // 实例化业务逻辑层对象 AdminLogic mAdminLogic = new AdminLogic(); // 根据条件查询管理员是否存在 Admin myAdmin = mAdminLogic.checkUser(mAdmin); if (myAdmin == null) { JOptionPane.showMessageDialog(this, "管理员不存在或账户密错误!"); return; } // 进入宿舍信息界面 new RoomNumFrame(); this.dispose(); }
}
}
package com.imti.ui;
public class Main
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
new LoginFrame();
}
}
==Util工具层=
package com.imti.util;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Window;
public class FrameUtil
{
public static void windowToCenterWithWindow(Window window) {
// 获取屏幕的宽和高
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
// System.out.println("屏幕的宽:" + screenWidth); // 1440
// System.out.println("屏幕的高:" + screenHeight); // 900
// 计算坐标
int x = (screenWidth - window.getWidth()) / 2;
int y = (screenHeight - window.getHeight()) / 2;
// 设置坐标
window.setLocation(x, y);
}
}
package com.imti.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*
-
数据库管理工具类:
-
1.连接数据库
-
2.关闭数据库
-
*/
public class JDBCManager
{
private static final String DRIVER = “oracle.jdbc.driver.OracleDriver”;
private static final String URL = “jdbc:oracle:thin:@localhost:1521:orcl”;
private static final String USER = “scott”;
private static final String PASSWORD = “tiger”;private static Connection conn = null;
// 加载驱动
static {
try {
Class.forName(DRIVER);
System.out.println(“驱动加载成功!”);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}// 获取连接
public static Connection getConnection() {
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println(“连接成功:” + conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}// 关闭数据库
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (stmt != null)
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}public static void close(Connection conn, PreparedStatement stmt, ResultSet rs) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (stmt != null)
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.imti.util;
import java.awt.Window;
import javax.swing.JFrame;
/*
- 创建一个公共窗口
- */
public class BaseFrame
{
public static void createBaseFrame(Window window, int width, int height) {
window.setSize(width, height);
FrameUtil.windowToCenterWithWindow(window);
((JFrame) window).setResizable(false);
((JFrame) window).setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}