JAVA Swing + Jdbc 实现宿舍管理系统

课程设计目的

该系统为学生宿舍管理系统,鉴于学校规模的不断扩大,学生数量的增加导致宿舍数量不断增加,学校也逐渐认识到宿舍的卫生和安全的重要性,为避免学校使用人力,时间对大量的宿舍进行检查,本系统站在学生和学校的角度,方便大家对宿舍进行更加高效的管理共建美丽宿舍。

题目基本情况

本系统涉及权限管理,以管理员,学生分别登录以进行不同的操作,管理员可以对学生宿舍卫生,宿舍安全,学生打卡等信息进行管理,学生需要每天需要登录系统进行打卡,提交宿舍的卫生情况和安全情况.为了提高信息的处理效率,完成学生每天的宿舍信息提交,以及管理员对学生宿舍的检查的一款小型的宿舍管理系统。将数据库的内容以界面的形式表现出来,达到直观,方便的管理目的。

数据库表设计

管理员属性:职工号,姓名,出生日期,性别,权限级别。

学生属性:姓名,性别,出生日期,学号,专业,系院,所属宿舍,所属管理员。

宿舍安全属性:用电情况,烟雾浓度,宿舍楼号,宿舍号,社区号。

宿舍环境属性:空气湿度,温度,异味情况,宿舍楼号,宿舍号,社区号。

学生打卡属性:学生姓名,打卡时间,宿舍楼号,宿舍号,社区号。

系统流程:

c9fe02ab9c2c4e309fc05efb6eea08ae.png

主要操作

选择身份操作

本程序设计的权限管理中,不同身份可以进行的操作不一样,因此点击身份,决定执行什么样的操作,如图6-1所示为选择身份,其中布局为空布局,主要用到的是面板和按钮,以及监听器的使用。

a220925def8846058b18d4932ee0ffa7.png

登录操作

本系统的权限管理中,管理员,学生进入系统之前都需要登录,下面以管理员登录为例,学生登录类似。若用户名和姓名输入正确,则直接进入下一页面,若其中一项输入错误,则会显示:登录失败。若要注册,则点击注册,输入对应信息,进行注册,其中布局为空布局,在获取了用户输入信息后,会通过函数对用户的输入进行查找,若信息和数据库中一直,则登陆成功。如图6-2所示。

f0c89663c91949788f3fc9388dfd89d4.png

登录部分代码

public User finduser(String Sid)

{User user = null;

String  sql = "select Sid,Sname from student where Sid = ?";//查询sql语句

Connection conn = GetConn.getConnection();//获取连接

PreparedStatement ps =null;

ResultSet rs = null;

try {

ps = conn.prepareStatement(sql);//将sql语句放入快车

ps.setString(1, Sid);//绑定参数

rs = ps.executeQuery();//执行sql语句

if(rs.next())//向下查询

{user = new User();

user.setSid(rs.getString(1));

user.setSname(rs.getString(2));

}else{return null;}

}catch(SQLException e){e.printStackTrace();}

finally {GetConn.close(rs, ps, conn);}return user;}

public void actionPerformed(ActionEvent e) {

UserDaoImpl userDaolmpl=new UserDaoImpl();

if(userDaolmpl.findUserm(t1.getText())==null) {

JOptionPane.showMessageDialog(getContentPane(), "用户名不存在!");}else if(t1.getText().equals(userDaolmpl.findUserm( t1.getText()).getMid())&&t2.getText().equals(userDaolmpl.findUserm( t1.getText()).getMname())) { //查询用户信息JOptionPane.showMessageDialog(getContentPane(), "登录成功!");

new manager_main();//进入主界面}else {JOptionPane.showMessageDialog(getContentPane(), "密码错误!");}});

注册部分代码

public int insertUserm(Userm userm) {

int count=0;//ֵ

Connection conn=GetConn.getConnection();//获取连接

String sql="insert into manager value(?,?,?,?,?)";//插入的sql语句

PreparedStatement ps = null;

try {

//将sql语句放入快车中

ps=conn.prepareStatement(sql);

//给sql语句中?绑定参数

ps.setString(1, userm.getMid());

ps.setString(2, userm.getMname());

ps.setString(3, userm.getMsex());

ps.setString(4, userm.getHDnumber());

ps.setString(5, userm.getHCnumber());

//执行sql语句

count=ps.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();}

finally { GetConn.close(ps, conn);}return count;}

//查找管理员

public Userm findUserm(String Mid)

{Userm userm = null;

String  sql = "select Mid,Mname from manager where Mid = ?";//查询

Connection conn = GetConn.getConnection();//获取连接

PreparedStatement ps =null;

ResultSet rs = null;

try {ps = conn.prepareStatement(sql);//将sql语句放入快车

ps.setString(1, Mid);//绑定参数

rs = ps.executeQuery();//执行sql语句

//向下查询

if(rs.next())

{userm = new Userm();

userm.setMid(rs.getString(1));

userm.setMname(rs.getString(2));

}else{ return null;}

}catch(SQLException e){

e.printStackTrace();}finally {

GetConn.close(rs,ps,conn);}

return userm;}

public void actionPerformed(ActionEvent e) {

if (e.getSource().equals(this.an1)) {

//点击确认后,获取输入的数值

String s_tf1 = tf1.getText();

String s_tf2 = tf2.getText();

String s_tf3 = tf3.getText();

String s_tf6 = tf6.getText();

String s_tf7 = tf7.getText();

if(s_tf1.equals("")) {

JOptionPane.showMessageDialog(getContentPane(), "不可以为空!");}else {try {Userm userm = new Userm(s_tf1,s_tf2,s_tf3, s_tf6, s_tf7);

//将得到的值封装在一个对象内

UserDaoImpl userDao = new UserDaoImpl();//新建对象userDao.insertUserm(userm);//插入数据库

} catch (Exception s) {}//弹出界面(注册成功)

JOptionPane.showMessageDialog(getContentPane(), "注册成功!");

frame.dispose();}

if (e.getSource().equals(an2))

{//点击取消frame.dispose();}}

选择操作

管理登录完毕后,将会进入图6-3-1所示的管理员界面,管理员可以对学生信息宿舍信息以及个人信息进行管理;学生登录完毕后,将会进入图6-3-2所示的学生界面,学生可以填写当日的宿舍环境信息和宿舍安全信息以及自身的打卡,布局采用空布局,其他主要是面板和监听器的使用。

ec6d9d72358e418f8e90ff4a570d27e1.png

d115bf03791f417e91565a89d680c424.png

管理员注册界面

因为最多的是对学生宿舍信息的了解,操作主要以查询为主,增加,修改,删除操作这里以管理员为例,具体以管理员的注册,修改个人信息,注销账户体现,系统主要操作以学生打卡和管理员查找学生信息体现.

点击注册按钮后,进入如图6-4-1的界面,按照要求填写信息即可添加信息,因为工号为主键,所以不写课程号会提示,不可以为空。 代码部分:按照提示信息进行填写,进行插入操作。其中,布局仍然采用空布局,其他主要是面板的使用和对按钮的监听。

public int insertUserm(Userm userm) {

int count=0;//ֵ

Connection conn=GetConn.getConnection();//获取连接

String sql="insert into manager value(?,?,?,?,?)";//插入的sql语句

PreparedStatement ps = null;

try {

//将sql语句放入快车中

ps=conn.prepareStatement(sql);

//给sql语句中?绑定参数

ps.setString(1, userm.getMid());

ps.setString(2, userm.getMname());

ps.setString(3, userm.getMsex());

ps.setString(4, userm.getHDnumber());

ps.setString(5, userm.getHCnumber());

//执行sql语句

count=ps.executeUpdate();

} catch (SQLException e) {e.printStackTrace();

}finally {GetConn.close(ps, conn);}

public void actionPerformed(ActionEvent e) {

if (e.getSource().equals(this.an1)) {

//点击确认后,获取输入的数值

String s_tf1 = tf1.getText();

String s_tf2 = tf2.getText();

String s_tf3 = tf3.getText();

String s_tf6 = tf6.getText();

String s_tf7 = tf7.getText();

if(s_tf1.equals("")) {

JOptionPane.showMessageDialog(getContentPane(), "不可以为空!");

}else {try {

Userm userm = new Userm(s_tf1,s_tf2,s_tf3, s_tf6, s_tf7);

//将得到的值封装在一个对象内

UserDaoImpl userDao = new UserDaoImpl();//新建对象

erDao.insertUserm(userm);//插入数据库



} catch (Exception s) {

}//弹出界面(注册成功)

JOptionPane.showMessageDialog(getContentPane(), "注册成功!");

frame.dispose();}

if (e.getSource().equals(an2))

{frame.dispose();//点击取消}}

2f867e06de19431ca7e3505a008be5ff.png

管理员注销界面

点击注销账户按钮后,进入如图6-4-2的界面,按照提示输入要注销的账号即可住下该账户.

代码部分:首先在建好的管理员表表里查找要删除的账号,若课程号不存在,提示:该账号不存在。若课程号存在,则将用户填写的管理员所对应的一条记录从管理员表里删除。其中,布局仍然采用空布局,其他主要是面板的使用和对按钮的监听。

关键代码:

public int deleteuserm(String Mid,String Mname) {

Connection conn = GetConn.getConnection();

String sql = "delete from manager where Mid = ?and Mname = ?";

PreparedStatement ps = null;

int row = 0;

try {

ps = conn.prepareStatement(sql);

ps.setString(1, Mid);// 绑定参数

ps.setString(2, Mname);

row = ps.executeUpdate(); // 执行sql

} catch (SQLException e) {e.printStackTrace();}finally {

GetConn.close(ps,conn);}return row;}

public void actionPerformed(ActionEvent e) {

UserDaoImpl userDaolmpl=new UserDaoImpl();

int num =  userDaolmpl.deleteuserm(t1.getText(),t2.getText());

if(num == 1){JOptionPane.showMessageDialog(getContentPane(), "注销成功!");System.exit(0);}

else {JOptionPane.showMessageDialog(getContentPane(), "注销失败!");}}

图6-4-2 管理员注销界面

管理员修改信息界面

点击修改信息按钮后,进入如图6-4-3所示的界面,按照要求填写文本框中的信息即可更改成功。

代码部分:首先在建好的管理员表里查找要修改的管理员工号,若工号不存在,提示:该课程不存在,请重新检查修改信息。若工号存在,则将管理员表中的信息改为用户填写的信息。其中,布局仍然采用空布局,其他主要是面板的使用和对按钮的监听。

关键代码:

public int updateuserm(Userm userm) {

Connection con = GetConn.getConnection();

String sql = "update manager set Mname = ?,Msex =?,HCnumber = ?,HDnumber=? where Mid = ?";

PreparedStatement ps = null;

int row = 0;

try { ps = con.prepareStatement(sql);

// 绑定数据

ps.setString(5, userm.getMid());

ps.setString(1, userm.getMname());

ps.setString(2, userm.getMsex());

ps.setString(3, userm.getHCnumber());

ps.setString(4, userm.getHDnumber());

// 执行sql

row = ps.executeUpdate();

} catch (SQLException e) {e.printStackTrace();}finally { GetConn.close(ps, con);}return row;}

public void actionPerformed(ActionEvent e) {

if (e.getSource().equals(this.an1)) {

//点击确认后,获取输入的数值

String s_tf1 = tf1.getText();

String s_tf2 = tf2.getText();

String s_tf3 = tf3.getText();

String s_tf6 = tf6.getText();

String s_tf7 = tf7.getText();

if(s_tf1.equals("")||s_tf2.equals("")||s_tf3.equals("")||s_tf6.equals("")||s_tf7.equals("")) {

JOptionPane.showMessageDialog(getContentPane(), "不可以为空!");

}else {try {Userm userm = new Userm(s_tf1,s_tf2,s_tf3, s_tf6, s_tf7);

//将得到的值封装在一个对象内

UserDaoImpl userDao = new UserDaoImpl();//新建对象

int num = userDao.updateuserm(userm);//插入数据库

if(num == 1){JOptionPane.showMessageDialog(this, "修改成功", "",JOptionPane.ERROR_MESSAGE);

frame.dispose();}

else {JOptionPane.showMessageDialog(this, "修改失败", "",JOptionPane.ERROR_MESSAGE);frame.dispose();}} catch (Exception s) {s.printStackTrace();}} }

if (e.getSource().equals(an2))

{frame.dispose();//点击取消}}

管理员查询学生信息界面

点击学生信息查询按钮后,进入界面,本功能分为两个查找方式,可以根据学号查找,也可以根据宿舍信息查找,按照要求填写文本框中的信息。点击查询按钮后,下方文本框就会显示出信息。

代码部分:首先在建好的学生表里查找用户输入的学号后者宿舍信息,若学号不存在,提示:没有该信息,请重新查询。若学号存在,则将课程表中的信息显示在文本框中。其中,布局仍然采用空布局,通过对用户输入的信息进行查询,以结果集的形式进行返回。

关键代码:

public ResultSet findUsers(String Sid)

{User user = null;

String  sql = "select Sname,Ssex,Sdate,Sid,Sdept,Sc,Class1,HCnumber,HDnumber,HBnumber,Mid from student where Sid = ?";//查询sql语句

Connection conn = GetConn.getConnection();//获取连接

PreparedStatement ps =null;

ResultSet rs = null;



try {

 ps = conn.prepareStatement(sql);//将sql语句放入快车

ps.setString(1, Sid);//绑定参数

rs = ps.executeQuery();//执行sql语句

}catch(SQLException e){

e.printStackTrace();}return rs;}

//查询学生

public ResultSet findUserl(String HCnumber,String HDnumber,String HBnumber){User user = null;

String  sql = "select Sname,Ssex,Sdate,Sid,Sdept,Sc,Class1,HCnumber,

HDnumber,HBnumber,Mid from student where HCnumber = ? and HDnumber = ? and HBnumber = ?";//查询sql语句

Connection conn = GetConn.getConnection();//获取连接

PreparedStatement ps =null;

ResultSet rs = null;

try { ps = conn.prepareStatement(sql);//将sql语句放入快车

ps.setString(1, HCnumber);//绑定参数

ps.setString(2, HDnumber);

ps.setString(3, HBnumber);

rs = ps.executeQuery();//执行sql语句

}catch(SQLException e){ e.printStackTrace();}

return rs;}

public void actionPerformed(ActionEvent e) {

if (e.getSource().equals(this.l7)) {

ResultSet rs1 =null;

UserDaoImpl userDaolmpl=new UserDaoImpl();

rs1 = userDaolmpl.findUsers(tf1.getText());

//计算有多少条记录

int count = 0;

try {while(rs1.next()){count++;}

} catch (SQLException e1) {

e1.printStackTrace();}

rs1 = userDaolmpl.findUsers(tf1.getText());

// 将查询获得的记录数据,转换成适合生成JTable的数据形式

Object[][] info = new Object[count][11];

count = 0;

try {while(rs1.next()){

info[count][0] = rs1.getString("Sname");

info[count][1] = rs1.getString("Ssex");

info[count][2] = rs1.getString("Sdate");

info[count][3] = rs1.getString("Sid");

info[count][4] = rs1.getString("Sdept");

info[count][5] = rs1.getString("Sc");

info[count][6] = rs1.getString("Class1");

info[count][7] = rs1.getString("HCnumber");

info[count][8] = rs1.getString("HDnumber");

info[count][9] = rs1.getString("HBnumber");

info[count][10] = rs1.getString("Mid");

count++; }

} catch (SQLException e1) e1.printStackTrace();}

// 定义表头

String[] title = {"姓名","性别","出生日期","学号","专业","院 系","班级","社区号","宿舍楼号","宿舍号","管理员职工号"};

tabDemo1 = new JTable(info,title);// 创建JTable

tabDemo1.getTableHeader();

// 将JTable加入到带滚动条的面板中

scpDemo1.getViewport().add(tabDemo1);}

if (e.getSource().equals(this.l8)) {

ResultSet rs2 =null;

UserDaoImpl userDaolmpl=new UserDaoImpl();rs2 = userDaolmpl.findUserl(tf2.getText(),tf3.getText() ,tf4.getText());

//计算有多少条记录

int count = 0;

try {while(rs2.next()){count++;}

} catch (SQLException e1) {

e1.printStackTrace();}rs2 = userDaolmpl.findUserl(tf2.getText(),tf3.getText() ,tf4.getText());

// 将查询获得的记录数据,转换成适合生成JTable的数据形式

Object[][] info = new Object[count][11];

count = 0;

try {while(rs2.next()){

info[count][0] = rs2.getString("Sname");

info[count][1] = rs2.getString("Ssex");

info[count][2] = rs2.getString("Sdate");

info[count][3] = rs2.getString("Sid");

info[count][4] = rs2.getString("Sdept");

info[count][5] = rs2.getString("Sc");

info[count][6] = rs2.getString("Class1");

info[count][7] = rs2.getString("HCnumber");

info[count][8] = rs2.getString("HDnumber");

info[count][9] = rs2.getString("HBnumber");

info[count][10] = rs2.getString("Mid");

count++;}

} catch (SQLException e1) {e1.printStackTrace();}// 定义表头

String[] title = {"姓名","性别","出生日期","学号","专业"," 院系","班级","社区号","宿舍楼号","宿舍号","管理员职工号"};

tabDemo2 = new JTable(info,title);// 创建JTable

tabDemo2.getTableHeader();

// 将JTable加入到带滚动条的面板中

scpDemo2.getViewport().add(tabDemo2);}}}

学生打卡操作

点击学生打卡按钮后,进入界面,按照要求填写文本框中的信息即可打卡成功。

代码部分:首先获取用户输入的各项信息,当输入的信息为空时,会提示不可以为空,信息正常时,执行插入数据库的操作,并提示打卡成功。其中,布局仍然采用空布局,其他主要是面板的使用和对按钮的监听。

关键代码:

public int inserthpush(Hpush hpush) {

int count=0;//ֵ

Connection conn=GetConn.getConnection();//获取连接

String sql="insert into hpush value(?,?,?,?,?)";//插入的sq语句PreparedStatement ps = null;

try {//将sql语句放入快车中

ps=conn.prepareStatement(sql);

//给sql语句中?绑定参数

ps.setString(1, hpush.getSname());

ps.setString(2, hpush.getPush_time());

ps.setString(3, hpush.getHCnumber());

ps.setString(4, hpush.getHDnumber());

ps.setString(5, hpush.getHBnumber());

//执行sql语句

count=ps.executeUpdate();

} catch (SQLException e) {e.printStackTrace();}finally {

GetConn.close(ps, conn);}

return count;}

public void actionPerformed(ActionEvent e) {

if (e.getSource().equals(this.l4)) {

//点击确认后,获取输入的数值

String s_tf1 = tf1.getText();

String s_tf2 = tf2.getText();

String s_tf3 = tf3.getText();

String s_tf4 = tf4.getText();

String s_tf5 = tf5.getText();

if (s_tf1 != null) {

try {Hpush hpush = new Hpush(s_tf1, s_tf2,s_tf3, s_tf4, s_tf5);UserDaoImpl userDao = new UserDaoImpl();//新建对象

userDao.inserthpush(hpush);//插入数据库

} catch (Exception s) {}//弹出界面(注册成功)

JOptionPane.showMessageDialog(this, "打卡成功", "",JOptionPane.ERROR_MESSAGE);jf.dispose();

} else//弹出界面(不可以为空)

JOptionPane.showMessageDialog(this, "不可以为空哦", "",JOptionPane.ERROR_MESSAGE) }

if (e.getSource().equals(l9))

{//点击取消

jf.dispose();}
信息的网络化和商业经济的高效化促使计算机深入到现实生活中的各行各业,计算机的工作效率更是传统的手工操作的成几何倍数,在信息科技的冲击下,几乎所有的行业都在使用计算机代替手工工作,大量的节省了人力物力财力,大大提高了工作效率,同时带来更多的经济效益。与此不想对应的是,学校作为科学技术的传播者,却并没有好好的利用信息科技,特别是学生宿舍,大多数学校目前还停留在需要宿舍管理员手工记录一些信息的低效率阶段,对于一所每年培育无数学子的学校来说,学生信息量实在是太过庞大,如果想要把一届届的学生记录在案,不能通过手工的方式,这种方式不仅工作效率低,浪费大量的时间,需要大量的资源,并且这种管理往往是不稳定,不安全的,也许宿舍管理员的一个不小心,就有不法分子潜入宿舍,也许记录在册的学生信息因为一次涨潮全部变为废纸。 在这样的前提条件下,我们设计了一套完整的宿舍管理系统,对学生的管理计算机化、规模化。利用数据库具有稳定性、安全性高、运行速度快等优点,由管理员将学生信息输入到数据库,这样的数据安全、永久、稳定、存储数据量巨大、可扩展性强,并且能够很快的查询,修改,删除学生记录等。宿舍管理员只需要掌握简单的计算机基础和熟练掌握软件环境,就可以上岗工作,入门需求低。 二、 建设目标 通过简单的数据库的应用,对学校学生进行格式化、规模化管理,加强学校宿舍管理效率,加强学校宿舍的安全管理,加强学校对学生的约束高度。学校通过宿舍管理系统能够实时掌握学生动态,更好的制定和完善出宿舍管理意见和规章,管理员通过学生信息管理系统,可以随时随地的接收学生的需求,并把需求分类传递给相关部门。 三、 系统的主要功能 本系统主要由门禁机、宿舍管理员模块和学生模块3部分组成 3.1 楼栋闸机模块 在本模块中,学生需要通过校园卡刷卡的方式进入宿舍,同时也是学生正常出入宿舍的唯一方式,如果校园卡遗失,需要在用身份证宿舍管理员处进行登记,经过同意后才能进入宿舍 3.1.11 学生验证 学生刷卡进出时,闸机会获取校园卡的信息,判断该学生是否属于该楼栋,如果验证成功,者允许通过,验证不成功,则不允许通过,提示学生重新刷卡。学生在多次验证不成功的情况下,可以向管理员申请。 3.1.12 学生信息管理 闸机需要记录每个学生每天的出入信息,对于24小时未刷卡进入宿舍的学生记录在数据库,同时把消息提醒给管理员,管理员通过一定的整理后把消息发送给学生的辅导员,同时闸机监控这位学生的下次进入时间,把消息传递给管理员进行处理。
校园宿舍管理系统是一个非常典型的信息管理系统,主要用于管理学生宿舍信息、学生信息以及宿舍设备等。下面是一个简单的实现思路: 1. 数据库设计 首先需要设计数据库,包括宿舍表、学生表、设备表等。其中,宿舍表包括宿舍编号、宿舍类型、宿舍楼号、宿舍电话等信息;学生表包括学生编号、学生姓名、学生性别、学生电话、所属宿舍等信息;设备表包括设备编号、设备名称、设备型号、设备数量、所属宿舍等信息。 2. 界面设计 使用JavaSwing框架进行界面设计,主要包括登录界面、主界面、宿舍信息界面、学生信息界面、设备信息界面等。可以使用JFrame、JPanel等组件进行布局。 3. 数据库连接 使用JDBC连接数据库,将数据库中的宿舍信息、学生信息、设备信息读取到程序中,显示在对应的界面中。同时,可以在程序中对数据库进行增、删、改、查等操作。 4. 功能实现 根据需求,实现宿舍信息、学生信息、设备信息的增加、删除、修改、查询等功能。同时,还可以实现一些其他的功能,比如统计宿舍设备数量、查询某个学生所在的宿舍等。 5. 安全性设计 在程序中添加一些安全性措施,比如登录时进行身份验证、对数据库进行加密等。 以上是一个简单的校园宿舍管理系统实现思路,具体实现细节需要根据需求进行调整。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是饿梦啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值