自己做一个简单的考试系统

更新时间:2018-05-18 10:03:43点击次数:294次

 做了一个简单的系统,其实也就是个小功能。是一个考试系统,主要试用人群是老师,大致功能与相关代码罗列一下:

大概涉及到了两个表,分别是学生表和分数表,暂时不需要太完善的功能,所以只有一个管理员,没必要再设计管理员表了。

学生表的字段说几个重要的: 名称,年龄,家长邮箱,年龄在数据库里可以给个char类型,长度给3就可以了,再添加的时候可以验证输入的是否为纯数字。分数表:分数(给int就可以了),考试时间,(给int,date类型都可以,直接存时间戳或者存date类型的时间),s_id,它是分数表与学生表的关联字段,这个s_id是学生表里的自增id,很重要,展示一下我自己的表结构

        接下来讲一下具体的功能以及实现的代码

为了方便用户进行操作,需要一个一次添加多条的功能,表单页面如下:


这里表单里的数据必须从学生表里查出来,循环展示就可以了,学生id和学生姓名必须给一个 readonly  的样式,因为这个数据不能更改,其余的样式随便给就可以了

[html] view plain copy
  1. <?php  
  2. header("content-type:text/html;charset=utf8");  
  3. $con=mysqli_connect('127.0.0.1','root','root','student') or die(mysql_error('1233211234567'));  
  4. $sql="select s_id,s_name from student";  
  5.   
  6. $res=mysqli_query($con,$sql);  
  7.     while($arr=mysqli_fetch_assoc($res)){  
  8.         $data[]=$arr;  
  9.     }  
  10.     $num=mysqli_num_rows($res);  
  11. ?>  
  12. <form action="pointAdd_do.php" method="post">  
  13.     <table>  
  14.             <tr>  
  15.                 <td>学生id</td>  
  16.                 <td>姓名</td>  
  17.                 <td>分数</td>  
  18.                 <td>考试时间</td>  
  19.             </tr>  
  20.             <?php foreach($data as $k=>$v){?>  
  21.             <tr>  
  22.                 <td><input type="text" name='s_id[]' value="<?php echo $v['s_id']?>" style='width: 70px;' readonly></td>  
  23.                 <td><input type="text" value="<?php echo $v['s_name']?>" style='width: 70px;' disabled></td>  
  24.                 <td><input type="text" name='point[]' style='width: 80px;'></td>  
  25.                 <td><input type="date" name="exam_time[]"></td>  
  26.             </tr>   
  27.             <?php }?>  
  28.             <tr>  
  29.                 <td><input type="submit" value="提交"></td>  
  30.             </tr>  
  31.         </table>    
  32. </form>  

    表单页面里文本框的name属性值后跟一个文本框,类似数组的写法,其实也真是数组,否则会被最后一行的值覆盖。

    提交后的值应该是这样的

    

    很重要的一环,数组处理

[php] view plain copy
  1. $arr=[];  
  2. foreach ($data['s_id'as $k => $v) {  
  3.     foreach ($data['point'as $key => $val) {  
  4.         foreach ($data['exam_time'as $key1 => $value) {  
  5.         $arr[$k]['s_id']=$v;  
  6.         $arr[$k]['point']=$val;  
  7.         $arr[$k]['exam_time']=$value;  
  8.         }  
  9.           
  10.     }  
  11. }  

处理后的数据

处理完循环添加就可以了,在这里我调了一个自己封装的Db类中的添加单条的一个方法

接下来是展示页面,

做了一个搜索的功能,根据姓名精确搜和根据分数搜,在这里用到了js的一些技术,跨页面传值和页面替换无刷新,替换页面作用挺大的,可以减少服务器压力,实现页面无刷新,这个页面数据少,用不用都可以,以下是实现代码,

[javascript] view plain copy
  1. <script type="text/javascript" src="jquery-1.9.1.min.js"></script>  
  2. <script type="text/javascript">  
  3.     function _username(){  
  4.         var name = $("[name='s_name']").val();  
  5.         var type = $("[name='type']").val();  
  6.         var fraction = $("[name='fraction']").val();  
  7.         $.ajax({  
  8.             type:'post',  
  9.             data:{name:name,type:type,fraction:fraction},  
  10.             // dataType:'json',  
  11.             url:"pointList_do.php",  
  12.             success:function(json_info){  
  13.                 $('#data').html(json_info);  
  14.             }  
  15.         })  
  16.     }  
  17.   
  18.   
  19. </script>  

主要是将关键字和分数条件传到php页面,根据这两个条件查询数据库,将查到的数据响应回来将之前的页面替换

[php] view plain copy
  1. <?php  
  2.     header("content-type:text/html;charset=utf8");  
  3.     // $con = mysqli_connect('127.0.0.1','root','root','student') or die('链接数据库出错');  
  4.     // $con->set_charset("utf8");  
  5.     include('./database/db.php');  
  6.     connect();  
  7.     $where = 1;  
  8.     $name  = $_POST['name'];  
  9.     $fraction  = $_POST['fraction'];  
  10.     $type  = $_POST['type'];  
  11.     if(!empty($name)){  
  12.         $where .=  " and s_name like '%$name%'";  
  13.     }  
  14.     if(!empty($fraction) && !empty($type)){  
  15.         $where .=  " and point $type $fraction";  
  16.     }  
  17.       
  18.     $sql = "select * from student join point on point.s_id = student.s_id where $where";  
  19. // echo $sql;exit;  
  20.   
  21.     $arr = mysqli_query($con,$sql);  
  22.     // var_dump($arr);exit;  
  23.     if($arr){  
  24.         while ($array = mysqli_fetch_assoc($arr)) {  
  25.             $data[] = $array;  
  26.         }  
  27.     }  
  28.       
  29. ?>  
  30. <table border="1">  
  31.     <thead>  
  32.         <tr>  
  33.             <td>学号</td>  
  34.             <td>学生姓名</td>  
  35.             <td>分数</td>  
  36.             <td>考试时间</td>  
  37.         </tr>  
  38.     </thead>  
  39.     <tbody>  
  40.         <?php   
  41.             if (!empty($data)) {  
  42.                 foreach ($data as $k => $v) {   
  43.         ?>  
  44.         <tr>  
  45.             <td><?php echo $v['p_id']; ?></td>  
  46.             <td><?php echo $v['s_name']; ?></td>  
  47.             <td><?php echo $v['point']; ?></td>  
  48.             <td><?php echo $v['exam_time']; ?></td>  
  49.         </tr>  
  50.         <?php } }else{ ?>  
  51.               
  52.         <?php } ?>  
  53.     </tbody>  
  54. </table>  

还有一个功能,是 用户可以将学生最近一次的考试成绩发送给家长的邮箱,是这样的,将学生表和分数表关联,查询最近一次的考试信息,展示

[html] view plain copy
  1. <?php   
  2. header("content-type:text/html;charset=utf8");  
  3. include_once("./database/db.php");  
  4. $con=mysqli_connect('127.0.0.1','root','root','student') or die(mysql_error(1231231));  
  5. $sql="select distinct s_id from point";  
  6. $res=mysqli_query($con,$sql);  
  7. while ($arr=mysqli_fetch_assoc($res)){  
  8.     $data[]=$arr;  
  9. }  
  10. foreach ($data as $k => $v) {  
  11.     $id=$v['s_id'];  
  12.     $sql1="select * from `point` join `student` on `point`.s_id=`student`.s_id where `point`.s_id=$id order by exam_time desc limit 1";  
  13.     $result=mysqli_query($con,$sql1);  
  14.     while ($arr1=mysqli_fetch_assoc($result)){  
  15.         $data1[]=$arr1;  
  16.     }  
  17. }  
  18. ?>  
  19. <table border="1">  
  20.     <tr>  
  21.         <td>姓名</td>  
  22.         <td>性别</td>  
  23.         <td>分数</td>  
  24.         <td>入学时间</td>  
  25.         <td>毕业时间</td>  
  26.         <td>邮箱</td>  
  27.         <td>考试时间</td>  
  28.         <td>发送邮件</td>  
  29.     </tr>·  
  30.     <?php foreach($data1 as $k=>$v){?>  
  31.         <tr>  
  32.             <td><?php echo $v['s_name'];?></td>  
  33.             <td><?php echo $v['s_sex'];?></td>  
  34.             <td><?php echo $v['point'];?></td>  
  35.             <td><?php echo $v['into_time'];?></td>  
  36.             <td><?php echo $v['gradtime'];?></td>   
  37.             <td><?php echo $v['email'];?></td>  
  38.             <td><?php echo $v['exam_time'];?></td>  
  39.             <td><a href="dome.php?email=<?php echo $v['email']?>&point=<?dome.php echo $v['point'];?>">发送邮件</a></td>  
  40.         </tr>  
  41.     <?php }?>  
  42. </table>  
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息