当前位置:   article > 正文

基于PHP、MySql的宿舍管理系统_mysql学生宿舍管理系统

mysql学生宿舍管理系统

一、系统特点

1.该宿舍管理系统共有三大参与者:学生、宿管人员、管理员

2.系统亮点

(1)可以使用PHPExecl批量读取execl表格进行添加学生信息等。

(2)引入Echarts图形来展示住宿学生等信息。

二、总体设计

1.学生部分

2.宿管人员部分

3.管理员部分

三、数据库分析

1.实体与属性

(1)学生,属性有学生学号和学生密码。

(2)学生信息,属性有学生学号、学生姓名、性别、专业班级、手机号码、辅导员、宿舍区域(宿舍楼)、宿舍号、入住时间、家庭住址、奖罚分、晚归时间和签到日期。

(3)寝室,属性有寝室id、宿舍号、宿舍楼、宿舍费用、实住人数和应住人数。

(4)违纪,属性有违纪id、违纪宿舍楼、违纪宿舍号、违纪内容、违纪时间和惩罚。

(5)维修,属性有报修id、维修费、损坏照片、维修内容、联系电话、宿舍长、宿舍号和宿舍楼。

(6).宿管,属性有宿管id、宿管姓名、联系电话、管理楼和登录密码。

(7)来访人员,属性有来访id、来访人员姓名、来访人员身份证号、来访目的、来访时间和离开时间。

(8)管理员,属性有管理员号、姓名和登录密码。

2.实体间的关系

(1)一个学生只能拥有一条自己的相关信息,而一条信息也只能对应一个学生。

(2)一个学生只能居住在一个寝室中,而一个寝室可以住多个学生。

(3)一个寝室可以违纪多次,而一种违纪也可以多个寝室都违反。

(4)一个寝室可以有多个来访人员,而一个来访人员也可以到多个寝室探访。

(5)一个寝室只能同时申请一次维修,而维修信息可以接受多寝室的。

(6)一个宿管可以处理多个维修信息,而一个维修信息也可以由多个宿管处理。

(7)一个来访人员信息可以由多个宿管处理,而一个宿管人员也可以处理多个来访人员信息。

(8)一个管理员可以管理多个学生与宿管,同时一个学生或宿管也可以被多个学生和宿管管理。

3.E-R图

四、实现效果

 1.登录界面

使用简单的vue实现切换不同的登录窗口,实现代码如下:

  1. <div class="login_header">
  2. <span @click="cur=0" :class="{active:cur==0}" style="margin-left: 20px;">学生登录</span>
  3. <span @click="cur=1" :class="{active:cur==1}">宿管登录</span>
  4. <span @click="cur=2" :class="{active:cur==2}">管理员登录</span>
  5. </div>

2.学生界面

(1)简介

(2)规章制度(略)

(3)个人信息

        a.填写学生信息,若学生是新注册用户,则可填写个人信息。也可是填写完后再次更改提交,实现效果图如下。

 部分实现代码:

  1. <div class="aoligei">
  2. <div class="pc-kk-form">
  3. <form action="../process/stu_info_pro.php" method="post">
  4. <div class="pc-kk-form-list">
  5. <input type="text" value="<?php echo $username; ?>" name="stu_no" readonly>
  6. </div>
  7. <div class="pc-kk-form-list">
  8. <input type="text" placeholder="姓名" name="stu_name" value="<?php echo $row['stu_name']; ?>">
  9. </div>
  10. <div class="pc-kk-form-list pc-kk-form-list-clear">
  11. <div class="nice-select" name="nice-select">
  12. <input type="text" placeholder="宿舍区域" name="stu_homearea" value="<?php echo $row['stu_homearea']; ?>" readonly>
  13. <ul>
  14. <li data-value="北区一号">北区一号</li>
  15. <li data-value="北区二号">北区二号</li>
  16. <li data-value="北区三号">北区三号</li>
  17. <li data-value="北区四号">北区四号</li>
  18. <li data-value="北区五号">北区五号</li>
  19. <li data-value="北区六号">北区六号</li>
  20. <li data-value="西区一号">西区一号</li>
  21. <li data-value="西区二号">西区二号</li>
  22. <li data-value="西区三号">西区三号</li>
  23. <li data-value="西区四号">西区四号</li>
  24. <li data-value="东区一号">东区一号</li>
  25. <li data-value="动漫大厦">动漫大厦</li>
  26. </ul>
  27. </div>
  28. <div class="pc-kk-form-list" name="nice-select" style="float:left;width: 50%;margin-left: 33px">
  29. <input type="text" name="stu_homeid" placeholder="宿舍号(北区分AB)" value="<?php echo $row['stu_homeid']; ?>" required>
  30. </div>
  31. </div>
  32. <div class="pc-kk-form-list">
  33. <input type="text" placeholder="专业班级(计算机工程学院-软件工程-19-3)" name="stu_class" value="<?php echo $row['stu_class']; ?>" >
  34. </div>
  35. <div class="pc-kk-form-list">
  36. <input type="tel" placeholder="电话号码(11位)" name="stu_phone" value="<?php echo $row['stu_phone']; ?>" >
  37. </div>
  38. <div class="pc-kk-form-list">
  39. <input type="text" placeholder="辅导员" name="stu_teacher" value="<?php echo $row['stu_teacher']; ?>" >
  40. </div>
  41. <div class="pc-kk-form-list pc-kk-form-list-clear">
  42. <div class="nice-select" name="nice-select">
  43. <input type="text" id="date" placeholder="入住时间" name="stu_rtime" class="show_placeholder" value="<?php
  44. $dates = explode(" ",$row['stu_rtime'])[0];
  45. echo $dates;
  46. ?>" >
  47. </div>
  48. <div class="nice-select" name="nice-select" style="float:right">
  49. <input type="text" placeholder="性别" name="stu_sex" value="<?php echo $row['stu_sex']; ?>" readonly>
  50. <ul>
  51. <li data-value="男"></li>
  52. <li data-value="女"></li>
  53. </ul>
  54. </div>
  55. </div>
  56. <div class="pc-kk-form-list pc-kk-form-list-clear">
  57. <div class="pc-kk-form-list" name="nice-select" style="width:100%">
  58. <input type="text" placeholder="家庭住址" name="stu_home" value="<?php echo $row['stu_home']; ?>">
  59. </div>
  60. </div>
  61. <div class="pc-kk-form-list pc-kk-form-list-clear">
  62. <div class="pc-kk-form-list" name="nice-select" style="width:100%">
  63. <input type="text" placeholder="奖罚分" value="<?php echo $row['stu_score']; ?>" readonly>
  64. </div>
  65. </div>
  66. <div class="pc-kk-form-btn" style="margin-left: -80px">
  67. <input type="submit" value="保存信息">
  68. </div>
  69. </form>
  70. </div>
  71. </div>

         b.下载提交表格,学生需按时下载表格并定期提交需上交的表格,通过正则表达式控制学生提交表格的名称格式等是否正确。实现效果如下。

 上传,下载表格文件实现代码如下:

  1. <?php
  2. if(!isset($_FILES['fileload'])){
  3. echo "<script>";
  4. echo "alert('非法访问!');";
  5. echo "window.history.go(-1);";
  6. echo "</script>";
  7. exit();
  8. }
  9. $error = $_FILES['fileload']['error'];
  10. if($error == 4){
  11. echo "<script>";
  12. echo "alert('请传入文件!');";
  13. echo "window.history.go(-1);";
  14. echo "</script>";
  15. exit();
  16. }
  17. $named = array('xls','xlsx');
  18. $name = $_FILES['fileload']['name'];
  19. $names = explode(".",$_FILES['fileload']['name'])[1];
  20. if(!in_array($names,$named)){
  21. echo "<script>";
  22. echo "alert('请提交正确的文件后缀格式!');";
  23. echo "window.history.go(-1);";
  24. echo "</script>";
  25. exit();
  26. }
  27. $nameArray = explode("-",$name);
  28. if(!preg_match("/[0-9]{2}[A|B]/",$nameArray[1]) || explode(".",$nameArray[2])[0] != "通风消毒表"){
  29. echo "<script>";
  30. echo "alert('请提交正确的文件格式!');";
  31. echo "window.history.go(-1);";
  32. echo "</script>";
  33. exit();
  34. }
  35. $path = "../upkillvirus/";
  36. $tmp_name = $_FILES['fileload']['tmp_name'];
  37. if(move_uploaded_file($tmp_name,$path.$name)){
  38. echo "<script>";
  39. echo "alert('上传成功!');";
  40. echo "window.location.href='../pageStudent/studentinfo.php';";
  41. echo "</script>";
  42. exit();
  43. }else{
  44. echo "<script>";
  45. echo "alert('上传失败!');";
  46. echo "window.location.href='../pageStudent/studentinfo.php';";
  47. echo "</script>";
  48. exit();
  49. }

        c.学生打卡签到,学生可在每天9:00至22点30进行打卡签到,使用到php时间戳以及存储学生打卡日期从而达到显示每个学生打卡天数。实现效果如下。

 php代码以及js代码如下。

  1. <script>
  2. var divs = document.querySelectorAll(".days");
  3. console.log(divs);
  4. var arrs = [];
  5. <?php for ($i = 1;$i < count($arrays); $i++){ ?>
  6. var len = arrs.push(<?php echo $arrays[$i]; ?>)
  7. <?php } ?>
  8. for(var i = 0;i < arrs.length; i++){
  9. divs[arrs[i]-1].style.backgroundColor = '#00bfff';
  10. }
  11. </script>
  1. $stu_no = $_SESSION['username'];
  2. $selectQianDay = "select * from stuinfo where stu_no='{$stu_no}'";
  3. $row = selectOne($link,$selectQianDay);
  4. $timeday = $row['timeday'];
  5. $arrays = explode("*",$timeday);

(4)申报维修

a.申报维修,学生通过提交宿舍损坏信息从而提交进行申请。实现效果图如下

        点击马上申请后,可填写提交损坏信息,判断填写的信息的正确与否都由正则表达式判断。效果图如下。

 填写成功后,可在下面的表格中看到相关的提交信息。效果图如下。

 php实现代码如下

  1. $stu_homearea = $_POST["stu_homearea"];
  2. $stu_homeid = $_POST["stu_homeid"];
  3. $repair_host = $_POST["repair_host"];
  4. $repair_phone = $_POST["repair_phone"];
  5. $repair_content = $_POST["repair_content"];
  6. if ($repair_host == "" || $repair_phone == "" || $repair_content == ""){
  7. echo "<script>";
  8. echo "alert('值不能为空!');";
  9. echo "window.history.go(-1);";
  10. echo "</script>";
  11. exit();
  12. }
  13. $pattern = "/[0-9]{11}/";
  14. if (!preg_match($pattern, $repair_phone)) {
  15. echo "<script>";
  16. echo "alert('电话号码格式不匹配!');";
  17. echo "window.history.go(-1);";
  18. echo "</script>";
  19. exit();
  20. }
  21. $named = array('jpg','png');
  22. $name = $_FILES['file']['name'];
  23. $names = explode(".",$_FILES['file']['name'])[1];
  24. if(!in_array($names,$named)){
  25. echo "<script>";
  26. echo "alert('请提交正确的文件后缀格式!');";
  27. echo "window.history.go(-1);";
  28. echo "</script>";
  29. exit();
  30. }
  31. $picHomeArea = explode("-",$name)[0];
  32. $picHomeId = explode(".",explode("-",$name)[1])[0];
  33. if($picHomeArea != $stu_homearea || !preg_match("/[0-9]{3}[A|B]/",$picHomeId)){
  34. echo "<script>";
  35. echo "alert('请提交正确的文件命名格式!');";
  36. echo "window.history.go(-1);";
  37. echo "</script>";
  38. exit();
  39. }
  40. $size = $_FILES['file']['size'];
  41. $mb = $size / 1024 / 1024;
  42. if($mb > 5){
  43. echo "<script>";
  44. echo "alert('请提交正确的文件命名格式!');";
  45. echo "window.history.go(-1);";
  46. echo "</script>";
  47. exit();
  48. }
  49. $tmp_name = $_FILES['file']['tmp_name'];
  50. $path = "../repairimg/" . $name;
  51. $selectRepairSql = "select * from repairinfo where stu_homeid = '{$stu_homeid}'";
  52. $results = mysqli_query($link,$selectRepairSql);
  53. $num = mysqli_num_rows($results);
  54. if($num >= 1){
  55. echo "<script>";
  56. echo "alert('等待提交申请解决后再进行提交!');";
  57. echo "window.history.go(-1);";
  58. echo "</script>";
  59. exit();
  60. }
  61. if(move_uploaded_file($tmp_name,$path)){
  62. $insertRepairSql = "insert into repairinfo values ('','{$stu_homearea}','{$stu_homeid}','{$repair_host}','{$repair_phone}','{$repair_content}','{$path}','')";
  63. $result = mysqli_query($link,$insertRepairSql);
  64. if(!$result){
  65. echo mysqli_error($link);
  66. echo mysqli_errno($link);
  67. exit();
  68. }
  69. echo "<script>";
  70. echo "alert('提交成功!');";
  71. echo "window.history.go(-1);";
  72. echo "</script>";
  73. exit();
  74. }

b.提交费用,待报修处理完毕后,学生可在线进行支付维修费用。实现效果图如下。

 点击立即支付后,可输入支付密码,效果图如下。

 jquery实现代码如下

  1. <script>
  2. $(function () {
  3. var step = $("#myStep").step({
  4. animate: true,
  5. initStep: 1,
  6. speed: 1000
  7. });
  8. $("#preBtn").click(function (event) {
  9. var yes = step.preStep();
  10. });
  11. $("#applyBtn").click(function (event) {
  12. var yes = step.nextStep();
  13. });
  14. $("#submitBtn").click(function (event) {
  15. var yes = step.nextStep();
  16. });
  17. $("#goBtn").click(function (event) {
  18. var yes = step.goStep(3);
  19. });
  20. });
  21. //支付
  22. $(function(){
  23. //出现浮动层
  24. $(".ljzf_but").click(function(){
  25. $(".ftc_wzsf").show();
  26. });
  27. //关闭浮动
  28. $(".close").click(function(){
  29. $(".ftc_wzsf").hide();
  30. $(".mm_box li").removeClass("mmdd");
  31. $(".mm_box li").attr("data","");
  32. i = 0;
  33. });
  34. //数字显示隐藏
  35. $(".xiaq_tb").click(function(){
  36. $(".numb_box").slideUp(500);
  37. });
  38. $(".mm_box").click(function(){
  39. $(".numb_box").slideDown(500);
  40. });
  41. //----
  42. var i = 0;
  43. $(".nub_ggg li .zf_num").click(function(){
  44. if(i<6){
  45. $(".mm_box li").eq(i).addClass("mmdd");
  46. $(".mm_box li").eq(i).attr("data",$(this).text());
  47. i++
  48. if (i==6) {
  49. setTimeout(function(){
  50. var data = "";
  51. $(".mm_box li").each(function(){
  52. data += $(this).attr("data");
  53. });
  54. if($("#ineed").attr('value') != 0 && $(".zhifu_price").text() != "¥0¥0"){
  55. $(".ftc_wzsf").hide();
  56. $("#ineed").attr('value',0);
  57. $(".zhifu_price").text("¥0");
  58. alert("支付成功!");
  59. window.location.href = '../process/stu_repair_price_recall.php';
  60. }else{
  61. alert("支付失败!");
  62. }
  63. },100);
  64. };
  65. }
  66. });
  67. $(".nub_ggg li .zf_del").click(function(){
  68. if(i>0){
  69. i--
  70. $(".mm_box li").eq(i).removeClass("mmdd");
  71. $(".mm_box li").eq(i).attr("data","");
  72. }
  73. });
  74. $(".nub_ggg li .zf_empty").click(function(){
  75. $(".mm_box li").removeClass("mmdd");
  76. $(".mm_box li").attr("data","");
  77. i = 0;
  78. });
  79. });
  80. </script>

3.宿管界面

        宿管界面可进行学生管理、房间管理、来访登记和维修处理。由于四大板块实现代码基本相似,下面仅进行效果展示。
(1)学生管理

a.学生管理

 b.学生违规信息

c.学生晚归信息

 (2)来访登记

a.来访登记信息

 b.来访人员表

(3)房间管理(略)

(4)维修处理

 a.维修信息表

 b.处理维修费

 4、管理员界面

对宿管信息、学生信息的增删改查.

(1)宿管管理

 (2)学生管理

        a.学生信息管理

        除对学生单个的正删改查外,使用了PHPExecl对学生信息进行批量添加导出等,实现效果图如下。

注意:

        PHPExcel在1.8.0版本后就放弃更新,且需要的php环境在7.0及以下。其中配置文件中获取数组元素使用的数组下标在大括号内,在php7.0后就弃用了该获取方式,统一使用中括号。即若使用PHPExecl读取Execl表格时,首先需从官网下载低版本php环境,其次修改PHPExcel配置文件,将所有大括号改为中括号。

引用PHPExecl后使用php读取Execl实现代码如下。

  1. $path = "../bossInsert/";
  2. $tmp_name = $_FILES['file']['tmp_name'];
  3. if(move_uploaded_file($tmp_name,$path.$name)){
  4. $fileName = "../bossInsert/学生住宿信息表.xlsx";
  5. if (!file_exists($fileName)){
  6. exit("文件".$fileName."不存在");
  7. }
  8. require_once "../PHPExecl/Classes/PHPExcel/IOFactory.php";
  9. $objPHPExcel = PHPExcel_IOFactory::load($fileName);
  10. $sheetCount = $objPHPExcel->getSheetCount();
  11. $sheetSelected = 0;$objPHPExcel->setActiveSheetIndex($sheetSelected);
  12. $rowCount = $objPHPExcel->getActiveSheet()->getHighestRow();
  13. $columnCount = $objPHPExcel->getActiveSheet()->getHighestColumn();
  14. $dataArr = array();
  15. echo "<br />";
  16. $is = [];
  17. for ($row = 2; $row <= $rowCount; $row++){
  18. for ($column = 'A'; $column <= $columnCount; $column++) {
  19. $dataArr[] = $objPHPExcel->getActiveSheet()->getCell($column.$row)->getValue();
  20. }
  21. $is[$row-2] = $dataArr;
  22. $dataArr = NULL;
  23. }
  24. echo "<pre>";
  25. print_r($is);
  26. echo "</pre>";
  27. require_once "connect.php";
  28. require_once "functions.php";
  29. for($i = 0;$i<count($is);$i++){
  30. $everyStu = $is[$i][0];
  31. $homearea = $is[$i][5];
  32. $homeid = $is[$i][6];
  33. $selectIsHave = "select *from stuinfo where stu_no='{$everyStu}'";
  34. $row = selectOne($link,$selectIsHave);
  35. $selectSql = "select * from roominfo where stu_homearea='{$homearea}' and stu_homeid='{$homeid}'";
  36. $result = mysqli_query($link,$selectSql);
  37. $numCol = mysqli_num_rows($result);
  38. echo $numCol;
  39. if(isset($row['stu_no']) || $numCol==0){
  40. continue;
  41. }else{
  42. echo "p";
  43. $insertStuLoginInfoSql ="insert into stulogininfo(stu_no,stu_psw) values ('{$everyStu}','123456')";
  44. $result1 = mysqli_query($link,$insertStuLoginInfoSql);
  45. if(!$result1){
  46. if(mysqli_errno($link) == 1062){
  47. continue;
  48. }else{
  49. echo "<script>";
  50. echo "alert('有误!');";
  51. echo "window.history.go(-1);";
  52. echo "</script>";
  53. exit();
  54. }
  55. }
  56. $time = date("Y-m-d H:i:s",PHPExcel_Shared_Date::ExcelToPHP($is[$i][7]));
  57. $insertInfoSql = "insert into stuinfo(stu_no,stu_name,stu_sex,stu_class,stu_phone,stu_homearea,stu_homeid,stu_rtime,stu_home,stu_teacher) values ('{$is[$i][0]}','{$is[$i][1]}','{$is[$i][2]}','{$is[$i][3]}','{$is[$i][4]}','{$is[$i][5]}','{$is[$i][6]}','{$time}','{$is[$i][8]}','{$is[$i][9]}')";
  58. $result2 = mysqli_query($link,$insertInfoSql);
  59. if(!$result2){
  60. echo mysqli_error($link);
  61. }
  62. }
  63. }
  64. echo "<script>";
  65. echo "alert('上传成功!');";
  66. echo "window.location.href='../pageBoss/students.php';";
  67. echo "</script>";
  68. exit();
  69. }else{
  70. echo "<script>";
  71. echo "alert('上传失败!');";
  72. echo "window.history.go(-1);";
  73. echo "</script>";
  74. exit();
  75. }

b.学生住宿信息展示

使用Echarts中的图形API对学生信息进行实时统计,实现效果图如下。

js实现代码如下

  1. <script>
  2. var chartDom = document.getElementById('main');
  3. var myChart = echarts.init(chartDom);
  4. var option;
  5. const colors = ['#5470C6', '#91CC75', '#EE6666'];
  6. option = {
  7. color: colors,
  8. tooltip: {
  9. trigger: 'axis',
  10. axisPointer: {
  11. type: 'cross'
  12. }
  13. },
  14. grid: {
  15. right: '20%'
  16. },
  17. toolbox: {
  18. feature: {
  19. dataView: { show: true, readOnly: false },
  20. restore: { show: true },
  21. saveAsImage: { show: true }
  22. }
  23. },
  24. legend: {
  25. data: ['男生人数', '女生人数', '总人数']
  26. },
  27. xAxis: [
  28. {
  29. type: 'category',
  30. axisTick: {
  31. alignWithLabel: true
  32. },
  33. // prettier-ignore
  34. data: ['北区宿舍', '西区宿舍', '东区宿舍', '动漫大厦']
  35. }
  36. ],
  37. yAxis: [
  38. {
  39. type: 'value',
  40. name: '男生人数',
  41. min: 0,
  42. max: 50,
  43. position: 'right',
  44. axisLine: {
  45. show: true,
  46. lineStyle: {
  47. color: colors[0]
  48. }
  49. },
  50. axisLabel: {
  51. formatter: '{value}人'
  52. }
  53. },
  54. {
  55. type: 'value',
  56. name: '女生人数',
  57. min: 0,
  58. max: 50,
  59. position: 'right',
  60. offset: 80,
  61. axisLine: {
  62. show: true,
  63. lineStyle: {
  64. color: colors[1]
  65. }
  66. },
  67. axisLabel: {
  68. formatter: '{value}人'
  69. }
  70. },
  71. {
  72. type: 'value',
  73. name: '总人数',
  74. min: 0,
  75. max: 50,
  76. position: 'left',
  77. axisLine: {
  78. show: true,
  79. lineStyle: {
  80. color: colors[2]
  81. }
  82. },
  83. axisLabel: {
  84. formatter: '{value}人'
  85. }
  86. }
  87. ],
  88. series: [
  89. {
  90. name: '男生人数',
  91. type: 'bar',
  92. data: [
  93. <?php echo $AllNan; ?>
  94. ]
  95. },
  96. {
  97. name: '女生人数',
  98. type: 'bar',
  99. yAxisIndex: 1,
  100. data: [
  101. <?php echo $AllNu; ?>
  102. ]
  103. },
  104. {
  105. name: '总人数',
  106. type: 'line',
  107. yAxisIndex: 2,
  108. data: [<?php echo $AllAreaStu; ?>]
  109. }
  110. ]
  111. };
  112. option && myChart.setOption(option);
  113. </script>

至此,该宿舍管理系统的设计与实现大致流程与效果已讲解完毕,如对您有所帮助,请收藏保留并留下宝贵一赞!谢谢!

源码:q:  one   three  five  one  zero  nine  seven  four  three  one

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/747737
推荐阅读
相关标签
  

闽ICP备14008679号