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


    课程设计目的

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

    题目基本情况

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

    数据库表设计

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

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

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

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

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

    系统流程:

    主要操作

    选择身份操作

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

    登录操作

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

    登录部分代码

    1. public User finduser(String Sid)
    2. {User user = null;
    3. String  sql = "select Sid,Sname from student where Sid = ?";//查询sql语句
    4. Connection conn = GetConn.getConnection();//获取连接
    5. PreparedStatement ps =null;
    6. ResultSet rs = null;
    7. try {
    8. ps = conn.prepareStatement(sql);//将sql语句放入快车
    9. ps.setString(1, Sid);//绑定参数
    10. rs = ps.executeQuery();//执行sql语句
    11. if(rs.next())//向下查询
    12. {user = new User();
    13. user.setSid(rs.getString(1));
    14. user.setSname(rs.getString(2));
    15. }else{return null;}
    16. }catch(SQLException e){e.printStackTrace();}
    17. finally {GetConn.close(rs, ps, conn);}return user;}
    18. public void actionPerformed(ActionEvent e) {
    19. UserDaoImpl userDaolmpl=new UserDaoImpl();
    20. if(userDaolmpl.findUserm(t1.getText())==null) {
    21. JOptionPane.showMessageDialog(getContentPane(), "用户名不存在!");}else if(t1.getText().equals(userDaolmpl.findUserm( t1.getText()).getMid())&&t2.getText().equals(userDaolmpl.findUserm( t1.getText()).getMname())) { //查询用户信息JOptionPane.showMessageDialog(getContentPane(), "登录成功!");
    22. new manager_main();//进入主界面}else {JOptionPane.showMessageDialog(getContentPane(), "密码错误!");}});
    23. 注册部分代码
    24. public int insertUserm(Userm userm) {
    25. int count=0;//ֵ
    26. Connection conn=GetConn.getConnection();//获取连接
    27. String sql="insert into manager value(?,?,?,?,?)";//插入的sql语句
    28. PreparedStatement ps = null;
    29. try {
    30. //将sql语句放入快车中
    31. ps=conn.prepareStatement(sql);
    32. //给sql语句中?绑定参数
    33. ps.setString(1, userm.getMid());
    34. ps.setString(2, userm.getMname());
    35. ps.setString(3, userm.getMsex());
    36. ps.setString(4, userm.getHDnumber());
    37. ps.setString(5, userm.getHCnumber());
    38. //执行sql语句
    39. count=ps.executeUpdate();
    40. } catch (SQLException e) {
    41. e.printStackTrace();}
    42. finally { GetConn.close(ps, conn);}return count;}
    43. //查找管理员
    44. public Userm findUserm(String Mid)
    45. {Userm userm = null;
    46. String  sql = "select Mid,Mname from manager where Mid = ?";//查询
    47. Connection conn = GetConn.getConnection();//获取连接
    48. PreparedStatement ps =null;
    49. ResultSet rs = null;
    50. try {ps = conn.prepareStatement(sql);//将sql语句放入快车
    51. ps.setString(1, Mid);//绑定参数
    52. rs = ps.executeQuery();//执行sql语句
    53. //向下查询
    54. if(rs.next())
    55. {userm = new Userm();
    56. userm.setMid(rs.getString(1));
    57. userm.setMname(rs.getString(2));
    58. }else{ return null;}
    59. }catch(SQLException e){
    60. e.printStackTrace();}finally {
    61. GetConn.close(rs,ps,conn);}
    62. return userm;}
    63. public void actionPerformed(ActionEvent e) {
    64. if (e.getSource().equals(this.an1)) {
    65. //点击确认后,获取输入的数值
    66. String s_tf1 = tf1.getText();
    67. String s_tf2 = tf2.getText();
    68. String s_tf3 = tf3.getText();
    69. String s_tf6 = tf6.getText();
    70. String s_tf7 = tf7.getText();
    71. if(s_tf1.equals("")) {
    72. JOptionPane.showMessageDialog(getContentPane(), "不可以为空!");}else {try {Userm userm = new Userm(s_tf1,s_tf2,s_tf3, s_tf6, s_tf7);
    73. //将得到的值封装在一个对象内
    74. UserDaoImpl userDao = new UserDaoImpl();//新建对象userDao.insertUserm(userm);//插入数据库
    75. } catch (Exception s) {}//弹出界面(注册成功)
    76. JOptionPane.showMessageDialog(getContentPane(), "注册成功!");
    77. frame.dispose();}
    78. if (e.getSource().equals(an2))
    79. {//点击取消frame.dispose();}}

    选择操作

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

    管理员注册界面

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

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

    1. public int insertUserm(Userm userm) {
    2. int count=0;//ֵ
    3. Connection conn=GetConn.getConnection();//获取连接
    4. String sql="insert into manager value(?,?,?,?,?)";//插入的sql语句
    5. PreparedStatement ps = null;
    6. try {
    7. //将sql语句放入快车中
    8. ps=conn.prepareStatement(sql);
    9. //给sql语句中?绑定参数
    10. ps.setString(1, userm.getMid());
    11. ps.setString(2, userm.getMname());
    12. ps.setString(3, userm.getMsex());
    13. ps.setString(4, userm.getHDnumber());
    14. ps.setString(5, userm.getHCnumber());
    15. //执行sql语句
    16. count=ps.executeUpdate();
    17. } catch (SQLException e) {e.printStackTrace();
    18. }finally {GetConn.close(ps, conn);}
    19. public void actionPerformed(ActionEvent e) {
    20. if (e.getSource().equals(this.an1)) {
    21. //点击确认后,获取输入的数值
    22. String s_tf1 = tf1.getText();
    23. String s_tf2 = tf2.getText();
    24. String s_tf3 = tf3.getText();
    25. String s_tf6 = tf6.getText();
    26. String s_tf7 = tf7.getText();
    27. if(s_tf1.equals("")) {
    28. JOptionPane.showMessageDialog(getContentPane(), "不可以为空!");
    29. }else {try {
    30. Userm userm = new Userm(s_tf1,s_tf2,s_tf3, s_tf6, s_tf7);
    31. //将得到的值封装在一个对象内
    32. UserDaoImpl userDao = new UserDaoImpl();//新建对象
    33. erDao.insertUserm(userm);//插入数据库
    34. } catch (Exception s) {
    35. }//弹出界面(注册成功)
    36. JOptionPane.showMessageDialog(getContentPane(), "注册成功!");
    37. frame.dispose();}
    38. if (e.getSource().equals(an2))
    39. {frame.dispose();//点击取消}}

    管理员注销界面

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

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

    关键代码:

    1. public int deleteuserm(String Mid,String Mname) {
    2. Connection conn = GetConn.getConnection();
    3. String sql = "delete from manager where Mid = ?and Mname = ?";
    4. PreparedStatement ps = null;
    5. int row = 0;
    6. try {
    7. ps = conn.prepareStatement(sql);
    8. ps.setString(1, Mid);// 绑定参数
    9. ps.setString(2, Mname);
    10. row = ps.executeUpdate(); // 执行sql
    11. } catch (SQLException e) {e.printStackTrace();}finally {
    12. GetConn.close(ps,conn);}return row;}
    13. public void actionPerformed(ActionEvent e) {
    14. UserDaoImpl userDaolmpl=new UserDaoImpl();
    15. int num =  userDaolmpl.deleteuserm(t1.getText(),t2.getText());
    16. if(num == 1){JOptionPane.showMessageDialog(getContentPane(), "注销成功!");System.exit(0);}
    17. else {JOptionPane.showMessageDialog(getContentPane(), "注销失败!");}}

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

    管理员修改信息界面

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

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

    关键代码:

    1. public int updateuserm(Userm userm) {
    2. Connection con = GetConn.getConnection();
    3. String sql = "update manager set Mname = ?,Msex =?,HCnumber = ?,HDnumber=? where Mid = ?";
    4. PreparedStatement ps = null;
    5. int row = 0;
    6. try { ps = con.prepareStatement(sql);
    7. // 绑定数据
    8. ps.setString(5, userm.getMid());
    9. ps.setString(1, userm.getMname());
    10. ps.setString(2, userm.getMsex());
    11. ps.setString(3, userm.getHCnumber());
    12. ps.setString(4, userm.getHDnumber());
    13. // 执行sql
    14. row = ps.executeUpdate();
    15. } catch (SQLException e) {e.printStackTrace();}finally { GetConn.close(ps, con);}return row;}
    16. public void actionPerformed(ActionEvent e) {
    17. if (e.getSource().equals(this.an1)) {
    18. //点击确认后,获取输入的数值
    19. String s_tf1 = tf1.getText();
    20. String s_tf2 = tf2.getText();
    21. String s_tf3 = tf3.getText();
    22. String s_tf6 = tf6.getText();
    23. String s_tf7 = tf7.getText();
    24. if(s_tf1.equals("")||s_tf2.equals("")||s_tf3.equals("")||s_tf6.equals("")||s_tf7.equals("")) {
    25. JOptionPane.showMessageDialog(getContentPane(), "不可以为空!");
    26. }else {try {Userm userm = new Userm(s_tf1,s_tf2,s_tf3, s_tf6, s_tf7);
    27. //将得到的值封装在一个对象内
    28. UserDaoImpl userDao = new UserDaoImpl();//新建对象
    29. int num = userDao.updateuserm(userm);//插入数据库
    30. if(num == 1){JOptionPane.showMessageDialog(this, "修改成功", "",JOptionPane.ERROR_MESSAGE);
    31. frame.dispose();}
    32. else {JOptionPane.showMessageDialog(this, "修改失败", "",JOptionPane.ERROR_MESSAGE);frame.dispose();}} catch (Exception s) {s.printStackTrace();}} }
    33. if (e.getSource().equals(an2))
    34. {frame.dispose();//点击取消}}

    管理员查询学生信息界面

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

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

    关键代码:

    1. public ResultSet findUsers(String Sid)
    2. {User user = null;
    3. String  sql = "select Sname,Ssex,Sdate,Sid,Sdept,Sc,Class1,HCnumber,HDnumber,HBnumber,Mid from student where Sid = ?";//查询sql语句
    4. Connection conn = GetConn.getConnection();//获取连接
    5. PreparedStatement ps =null;
    6. ResultSet rs = null;
    7. try {
    8.  ps = conn.prepareStatement(sql);//将sql语句放入快车
    9. ps.setString(1, Sid);//绑定参数
    10. rs = ps.executeQuery();//执行sql语句
    11. }catch(SQLException e){
    12. e.printStackTrace();}return rs;}
    13. //查询学生
    14. public ResultSet findUserl(String HCnumber,String HDnumber,String HBnumber){User user = null;
    15. String  sql = "select Sname,Ssex,Sdate,Sid,Sdept,Sc,Class1,HCnumber,
    16. HDnumber,HBnumber,Mid from student where HCnumber = ? and HDnumber = ? and HBnumber = ?";//查询sql语句
    17. Connection conn = GetConn.getConnection();//获取连接
    18. PreparedStatement ps =null;
    19. ResultSet rs = null;
    20. try { ps = conn.prepareStatement(sql);//将sql语句放入快车
    21. ps.setString(1, HCnumber);//绑定参数
    22. ps.setString(2, HDnumber);
    23. ps.setString(3, HBnumber);
    24. rs = ps.executeQuery();//执行sql语句
    25. }catch(SQLException e){ e.printStackTrace();}
    26. return rs;}
    27. public void actionPerformed(ActionEvent e) {
    28. if (e.getSource().equals(this.l7)) {
    29. ResultSet rs1 =null;
    30. UserDaoImpl userDaolmpl=new UserDaoImpl();
    31. rs1 = userDaolmpl.findUsers(tf1.getText());
    32. //计算有多少条记录
    33. int count = 0;
    34. try {while(rs1.next()){count++;}
    35. } catch (SQLException e1) {
    36. e1.printStackTrace();}
    37. rs1 = userDaolmpl.findUsers(tf1.getText());
    38. // 将查询获得的记录数据,转换成适合生成JTable的数据形式
    39. Object[][] info = new Object[count][11];
    40. count = 0;
    41. try {while(rs1.next()){
    42. info[count][0] = rs1.getString("Sname");
    43. info[count][1] = rs1.getString("Ssex");
    44. info[count][2] = rs1.getString("Sdate");
    45. info[count][3] = rs1.getString("Sid");
    46. info[count][4] = rs1.getString("Sdept");
    47. info[count][5] = rs1.getString("Sc");
    48. info[count][6] = rs1.getString("Class1");
    49. info[count][7] = rs1.getString("HCnumber");
    50. info[count][8] = rs1.getString("HDnumber");
    51. info[count][9] = rs1.getString("HBnumber");
    52. info[count][10] = rs1.getString("Mid");
    53. count++; }
    54. } catch (SQLException e1) e1.printStackTrace();}
    55. // 定义表头
    56. String[] title = {"姓名","性别","出生日期","学号","专业","院 系","班级","社区号","宿舍楼号","宿舍号","管理员职工号"};
    57. tabDemo1 = new JTable(info,title);// 创建JTable
    58. tabDemo1.getTableHeader();
    59. // 将JTable加入到带滚动条的面板中
    60. scpDemo1.getViewport().add(tabDemo1);}
    61. if (e.getSource().equals(this.l8)) {
    62. ResultSet rs2 =null;
    63. UserDaoImpl userDaolmpl=new UserDaoImpl();rs2 = userDaolmpl.findUserl(tf2.getText(),tf3.getText() ,tf4.getText());
    64. //计算有多少条记录
    65. int count = 0;
    66. try {while(rs2.next()){count++;}
    67. } catch (SQLException e1) {
    68. e1.printStackTrace();}rs2 = userDaolmpl.findUserl(tf2.getText(),tf3.getText() ,tf4.getText());
    69. // 将查询获得的记录数据,转换成适合生成JTable的数据形式
    70. Object[][] info = new Object[count][11];
    71. count = 0;
    72. try {while(rs2.next()){
    73. info[count][0] = rs2.getString("Sname");
    74. info[count][1] = rs2.getString("Ssex");
    75. info[count][2] = rs2.getString("Sdate");
    76. info[count][3] = rs2.getString("Sid");
    77. info[count][4] = rs2.getString("Sdept");
    78. info[count][5] = rs2.getString("Sc");
    79. info[count][6] = rs2.getString("Class1");
    80. info[count][7] = rs2.getString("HCnumber");
    81. info[count][8] = rs2.getString("HDnumber");
    82. info[count][9] = rs2.getString("HBnumber");
    83. info[count][10] = rs2.getString("Mid");
    84. count++;}
    85. } catch (SQLException e1) {e1.printStackTrace();}// 定义表头
    86. String[] title = {"姓名","性别","出生日期","学号","专业"," 院系","班级","社区号","宿舍楼号","宿舍号","管理员职工号"};
    87. tabDemo2 = new JTable(info,title);// 创建JTable
    88. tabDemo2.getTableHeader();
    89. // 将JTable加入到带滚动条的面板中
    90. scpDemo2.getViewport().add(tabDemo2);}}}

    学生打卡操作

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

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

    关键代码:

    1. public int inserthpush(Hpush hpush) {
    2. int count=0;//ֵ
    3. Connection conn=GetConn.getConnection();//获取连接
    4. String sql="insert into hpush value(?,?,?,?,?)";//插入的sq语句PreparedStatement ps = null;
    5. try {//将sql语句放入快车中
    6. ps=conn.prepareStatement(sql);
    7. //给sql语句中?绑定参数
    8. ps.setString(1, hpush.getSname());
    9. ps.setString(2, hpush.getPush_time());
    10. ps.setString(3, hpush.getHCnumber());
    11. ps.setString(4, hpush.getHDnumber());
    12. ps.setString(5, hpush.getHBnumber());
    13. //执行sql语句
    14. count=ps.executeUpdate();
    15. } catch (SQLException e) {e.printStackTrace();}finally {
    16. GetConn.close(ps, conn);}
    17. return count;}
    18. public void actionPerformed(ActionEvent e) {
    19. if (e.getSource().equals(this.l4)) {
    20. //点击确认后,获取输入的数值
    21. String s_tf1 = tf1.getText();
    22. String s_tf2 = tf2.getText();
    23. String s_tf3 = tf3.getText();
    24. String s_tf4 = tf4.getText();
    25. String s_tf5 = tf5.getText();
    26. if (s_tf1 != null) {
    27. try {Hpush hpush = new Hpush(s_tf1, s_tf2,s_tf3, s_tf4, s_tf5);UserDaoImpl userDao = new UserDaoImpl();//新建对象
    28. userDao.inserthpush(hpush);//插入数据库
    29. } catch (Exception s) {}//弹出界面(注册成功)
    30. JOptionPane.showMessageDialog(this, "打卡成功", "",JOptionPane.ERROR_MESSAGE);jf.dispose();
    31. } else//弹出界面(不可以为空)
    32. JOptionPane.showMessageDialog(this, "不可以为空哦", "",JOptionPane.ERROR_MESSAGE) }
    33. if (e.getSource().equals(l9))
    34. {//点击取消
    35. jf.dispose();}

    项目完整源码+说明书+软件说明+数据库表设计 :

     点他:🍞正在为您运送作品详情

  • 相关阅读:
    【JAVA-Day05】深入理解Java数据类型和取值范围
    Red Hat 8中安装Python3.8.8和pip3
    民安智库(第三方满意度调研公司)购物商场消费者满意度研究报告
    2022年音视频面试题 C/C++/Linux/FFmpeg/webRTC/rtmp/hls/rtsp/ffplay/srs
    别再用 hao123 360等垃圾导航了,这款主页插件让你浏览器首页高效简洁,高清好看
    RSS订阅微信公众号初探-feed43
    能直接运营的发接任务平台小程序搭建开发演示
    Idea执行Pom.xml导入jar包提示sun.misc.BASE64Encoder jar找不到---SpringCloud工作笔记197
    nVisual网络可视化管理平台在金融行业的应用价值分析
    第十四章·享元模式
  • 原文地址:https://blog.csdn.net/qq_47982709/article/details/125468599