网络知识 娱乐 基于PHP、MySql的宿舍管理系统

基于PHP、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实现切换不同的登录窗口,实现代码如下:

2.学生界面

(1)简介

(2)规章制度(略)

(3)个人信息

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

 部分实现代码:

<input type="text" value="" name="stu_no" readonly>
<input type="text" placeholder="姓名" name="stu_name" value="">
<input type="text" placeholder="宿舍区域" name="stu_homearea" value="" readonly>
  • 北区一号
  • 北区二号
  • 北区三号
  • 北区四号
  • 北区五号
  • 北区六号
  • 西区一号
  • 西区二号
  • 西区三号
  • 西区四号
  • 东区一号
  • 动漫大厦
<input type="text" name="stu_homeid" placeholder="宿舍号(北区分AB)" value="" required>
<input type="text" placeholder="专业班级(计算机工程学院-软件工程-19-3)" name="stu_class" value="" >
<input type="tel" placeholder="电话号码(11位)" name="stu_phone" value="" >
<input type="text" placeholder="辅导员" name="stu_teacher" value="" >
<input type="text" id="date" placeholder="入住时间" name="stu_rtime" class="show_placeholder" value="" >
<input type="text" placeholder="性别" name="stu_sex" value="" readonly>
<input type="text" placeholder="家庭住址" name="stu_home" value="">
<input type="text" placeholder="奖罚分" value="" readonly>

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

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

<?php

if(!isset($_FILES['fileload'])){
    echo "";
    echo "alert('非法访问!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
$error = $_FILES['fileload']['error'];
if($error == 4){
    echo "";
    echo "alert('请传入文件!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
$named = array('xls','xlsx');
$name = $_FILES['fileload']['name'];
$names = explode(".",$_FILES['fileload']['name'])[1];
if(!in_array($names,$named)){
    echo "";
    echo "alert('请提交正确的文件后缀格式!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
$nameArray = explode("-",$name);
if(!preg_match("/[0-9]{2}[A|B]/",$nameArray[1]) || explode(".",$nameArray[2])[0] != "通风消毒表"){
    echo "";
    echo "alert('请提交正确的文件格式!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}

$path = "../upkillvirus/";
$tmp_name = $_FILES['fileload']['tmp_name'];
if(move_uploaded_file($tmp_name,$path.$name)){
    echo "";
    echo "alert('上传成功!');";
    echo "window.location.href='../pageStudent/studentinfo.php';";
    echo "";
    exit();
}else{
    echo "";
    echo "alert('上传失败!');";
    echo "window.location.href='../pageStudent/studentinfo.php';";
    echo "";
    exit();
}

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

 php代码以及js代码如下。


    var divs = document.querySelectorAll(".days");
    console.log(divs);
    var arrs = [];
    <?php for ($i = 1;$i 
        var len = arrs.push()
    
    for(var i = 0;i < arrs.length; i++){
        divs[arrs[i]-1].style.backgroundColor = '#00bfff';
    }
$stu_no = $_SESSION['username'];
$selectQianDay = "select * from stuinfo where stu_no='{$stu_no}'";
$row = selectOne($link,$selectQianDay);
$timeday = $row['timeday'];
$arrays = explode("*",$timeday);

(4)申报维修

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

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

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

 php实现代码如下

$stu_homearea = $_POST["stu_homearea"];
$stu_homeid = $_POST["stu_homeid"];
$repair_host = $_POST["repair_host"];
$repair_phone = $_POST["repair_phone"];
$repair_content = $_POST["repair_content"];
if ($repair_host == "" || $repair_phone == "" || $repair_content == ""){
    echo "";
    echo "alert('值不能为空!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
$pattern = "/[0-9]{11}/";
if (!preg_match($pattern, $repair_phone)) {
    echo "";
    echo "alert('电话号码格式不匹配!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
$named = array('jpg','png');
$name = $_FILES['file']['name'];
$names = explode(".",$_FILES['file']['name'])[1];
if(!in_array($names,$named)){
    echo "";
    echo "alert('请提交正确的文件后缀格式!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
$picHomeArea = explode("-",$name)[0];
$picHomeId = explode(".",explode("-",$name)[1])[0];
if($picHomeArea != $stu_homearea || !preg_match("/[0-9]{3}[A|B]/",$picHomeId)){
    echo "";
    echo "alert('请提交正确的文件命名格式!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
$size = $_FILES['file']['size'];
$mb = $size / 1024 / 1024;
if($mb > 5){
    echo "";
    echo "alert('请提交正确的文件命名格式!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
$tmp_name = $_FILES['file']['tmp_name'];
$path = "../repairimg/" . $name;
$selectRepairSql = "select * from repairinfo where stu_homeid = '{$stu_homeid}'";
$results = mysqli_query($link,$selectRepairSql);
$num = mysqli_num_rows($results);
if($num >= 1){
    echo "";
    echo "alert('等待提交申请解决后再进行提交!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}
if(move_uploaded_file($tmp_name,$path)){
    $insertRepairSql = "insert into repairinfo values ('','{$stu_homearea}','{$stu_homeid}','{$repair_host}','{$repair_phone}','{$repair_content}','{$path}','')";
    $result = mysqli_query($link,$insertRepairSql);
    if(!$result){
        echo mysqli_error($link);
        echo mysqli_errno($link);
        exit();
    }
    echo "";
    echo "alert('提交成功!');";
    echo "window.history.go(-1);";
    echo "";
    exit();
}

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

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

 jquery实现代码如下


    $(function () {
        var step = $("#myStep").step({
            animate: true,
            initStep: 1,
            speed: 1000
        });
        $("#preBtn").click(function (event) {
            var yes = step.preStep();
        });
        $("#applyBtn").click(function (event) {
            var yes = step.nextStep();
        });
        $("#submitBtn").click(function (event) {
            var yes = step.nextStep();
        });
        $("#goBtn").click(function (event) {
            var yes = step.goStep(3);
        });
    });
    //支付
    $(function(){
        //出现浮动层
        $(".ljzf_but").click(function(){
            $(".ftc_wzsf").show();
        });
        //关闭浮动
        $(".close").click(function(){
            $(".ftc_wzsf").hide();
            $(".mm_box li").removeClass("mmdd");
            $(".mm_box li").attr("data","");
            i = 0;
        });
        //数字显示隐藏
        $(".xiaq_tb").click(function(){
            $(".numb_box").slideUp(500);
        });
        $(".mm_box").click(function(){
            $(".numb_box").slideDown(500);
        });
        //----
        var i = 0;
        $(".nub_ggg li .zf_num").click(function(){

            if(i0){
                i--
                $(".mm_box li").eq(i).removeClass("mmdd");
                $(".mm_box li").eq(i).attr("data","");
            }
        });

        $(".nub_ggg li .zf_empty").click(function(){
            $(".mm_box li").removeClass("mmdd");
            $(".mm_box li").attr("data","");
            i = 0;
        });
    });

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实现代码如下。

$path = "../bossInsert/";
$tmp_name = $_FILES['file']['tmp_name'];
if(move_uploaded_file($tmp_name,$path.$name)){
    $fileName = "../bossInsert/学生住宿信息表.xlsx";
    if (!file_exists($fileName)){
        exit("文件".$fileName."不存在");
    }
    require_once "../PHPExecl/Classes/PHPExcel/IOFactory.php";
    $objPHPExcel = PHPExcel_IOFactory::load($fileName);
    $sheetCount = $objPHPExcel->getSheetCount();
    $sheetSelected = 0;$objPHPExcel->setActiveSheetIndex($sheetSelected);
    $rowCount = $objPHPExcel->getActiveSheet()->getHighestRow();
    $columnCount = $objPHPExcel->getActiveSheet()->getHighestColumn();
    $dataArr = array();
    echo "
"; $is = []; for ($row = 2; $row <= $rowCount; $row++){ for ($column = 'A'; $column getActiveSheet()->getCell($column.$row)->getValue(); } $is[$row-2] = $dataArr; $dataArr = NULL; } echo "
";
    print_r($is);
    echo "
"; require_once "connect.php"; require_once "functions.php"; for($i = 0;$i<count($is);$i++){ $everyStu = $is[$i][0]; $homearea = $is[$i][5]; $homeid = $is[$i][6]; $selectIsHave = "select *from stuinfo where stu_no='{$everyStu}'"; $row = selectOne($link,$selectIsHave); $selectSql = "select * from roominfo where stu_homearea='{$homearea}' and stu_homeid='{$homeid}'"; $result = mysqli_query($link,$selectSql); $numCol = mysqli_num_rows($result); echo $numCol; if(isset($row['stu_no']) || $numCol==0){ continue; }else{ echo "p"; $insertStuLoginInfoSql ="insert into stulogininfo(stu_no,stu_psw) values ('{$everyStu}','123456')"; $result1 = mysqli_query($link,$insertStuLoginInfoSql); if(!$result1){ if(mysqli_errno($link) == 1062){ continue; }else{ echo ""; echo "alert('有误!');"; echo "window.history.go(-1);"; echo ""; exit(); } } $time = date("Y-m-d H:i:s",PHPExcel_Shared_Date::ExcelToPHP($is[$i][7])); $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]}')"; $result2 = mysqli_query($link,$insertInfoSql); if(!$result2){ echo mysqli_error($link); } } } echo ""; echo "alert('上传成功!');"; echo "window.location.href='../pageBoss/students.php';"; echo ""; exit(); }else{ echo ""; echo "alert('上传失败!');"; echo "window.history.go(-1);"; echo ""; exit(); }

b.学生住宿信息展示

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

js实现代码如下

 


            var chartDom = document.getElementById('main');
            var myChart = echarts.init(chartDom);
            var option;
            const colors = ['#5470C6', '#91CC75', '#EE6666'];
            option = {
                color: colors,
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'cross'
                    }
                },
                grid: {
                    right: '20%'
                },
                toolbox: {
                    feature: {
                        dataView: { show: true, readOnly: false },
                        restore: { show: true },
                        saveAsImage: { show: true }
                    }
                },
                legend: {
                    data: ['男生人数', '女生人数', '总人数']
                },
                xAxis: [
                    {
                        type: 'category',
                        axisTick: {
                            alignWithLabel: true
                        },
                        // prettier-ignore
                        data: ['北区宿舍', '西区宿舍', '东区宿舍', '动漫大厦']
                    }
                ],
                yAxis: [
                    {
                        type: 'value',
                        name: '男生人数',
                        min: 0,
                        max: 50,
                        position: 'right',
                        axisLine: {
                            show: true,
                            lineStyle: {
                                color: colors[0]
                            }
                        },
                        axisLabel: {
                            formatter: '{value}人'
                        }
                    },
                    {
                        type: 'value',
                        name: '女生人数',
                        min: 0,
                        max: 50,
                        position: 'right',
                        offset: 80,
                        axisLine: {
                            show: true,
                            lineStyle: {
                                color: colors[1]
                            }
                        },
                        axisLabel: {
                            formatter: '{value}人'
                        }
                    },
                    {
                        type: 'value',
                        name: '总人数',
                        min: 0,
                        max: 50,
                        position: 'left',
                        axisLine: {
                            show: true,
                            lineStyle: {
                                color: colors[2]
                            }
                        },
                        axisLabel: {
                            formatter: '{value}人'
                        }
                    }
                ],
                series: [
                    {
                        name: '男生人数',
                        type: 'bar',
                        data: [
                            
                        ]
                    },
                    {
                        name: '女生人数',
                        type: 'bar',
                        yAxisIndex: 1,
                        data: [
                            
                        ]
                    },
                    {
                        name: '总人数',
                        type: 'line',
                        yAxisIndex: 2,
                        data: []
                    }
                ]
            };
            option && myChart.setOption(option);
        

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

需源码 私信扣扣 1351097431