教学服务系统设计之PHP后台设计

项目简介

本项目是与@nameoverflow同学合作。该同学负责vue 前端的设计,我负责php后台的接口实现。本文将主要记录php后台。
本项目的Github地址:https://github.com/He11oLiu/Student_Information_management_system
本项目仅作为尝试用途,很多功能尚未实现。
这里写图片描述

使用PHP连接MySQL数据库

利用MySQLi接口库来连接MySQL数据库,连接测试如下:

<html>
<body>
<?php
    //phpinfo();
    $con = mysqli_connect("127.0.0.1","root","","C_test");
    if(!$con){
        dir('Cannot connect "' . mysql_error());
    }
    echo "Connect Sucess!";
    echo "<br/>";
    $result = mysqli_query($con,"Select * from student");
    while($row = mysqli_fetch_array($result)){
        echo $row['student_no']." ".$row['student_name'];
        echo "<br/>";
    }
    mysqli_close($con);
    echo "Cannect Close!";
?>
</body>
</html>

这里写图片描述

数据库设计

这里写图片描述

PHP RESTful接口

服务器端PHP提供RESTful接口的框架主要如下:

<?php
    session_start();
    $func = $_GET['func'];
    switch($func){
        case 'func1':func1();break;
        case 'func2':func2();break;
        default: echo 'wrong func code';break;
    }

    function func1(){
      //func1 code
    }
    function func2(){
      //func2 code
    }
?>

服务器设计

.
├── adminQuery.php          #管理员功能
├── loginFunc.php           #登入登出控制
├── studentQuery.php        #学生功能
├── teacherQuery.php        #老师功能
├── test.py                 #测试
└── util.php

其中功能的设计大致框架如上RESTful框架所述,接口定义见接口文件。

为了防止出现越权调用接口,每个功能利用Session做了权限检测。

接口定义

学生

POST 登录

学生/loginFunc.php?func=stuLogin

老师/loginFunc.php?func=isTeacherLoggedIn

管理员/loginFunc.php?func=isTeacherLoggedIn

GET 登录信息

/loginFunc.php?func=isXXXLoggedIn 其中 XXX=Stu | Teacher | Admin

GET 成绩信息

如果用户为学生用户则只能查同班同学
为管理员则可以查任意学号
教师用户不允许使用

参数名类型语义
stuid(可选)String学号,无则返回自己成绩
semid(可选)number学期id,无则返回所有条目

返回值:

字段名类型语义
cnameString课程名
cnoString课程编号
teacherString教师姓名
gradeNumber成绩(百分制)

/studentQuery.php?func=stuGrade&stuid='201408010115'&semid=2

GET 个人信息

返回登录用户的个人信息

返回值:

字段名类型语义
snameString学生姓名

/studentQuery.php?func=stuInfo

GET 选课列表

用户当前可用的选课列表

如果当前不能选课,返回空[]

返回值(数组):

字段名类型语义
cidNumber课程数据库索引号
cnoString课程编号
cnameString课程名
teacherString任课教师

/studentQuery.php?func=stuSel

GET 可选课程

/studentQuery.php?func=courseList
返回值:

Course.idCourse,Course.Cno,Course.Cname,Course.Ccredit,Course.Cplace,Course.Cnum,Dept.Dname,Teacher.Tname

POST 选课

参数名类型语义
cidNumber课程索引号

返回值:

字段名类型语义
statusNumber0为成功;其它为失败
msgString提示信息(失败原因)

/studentQuery.php?func=selCourse&cid=3

GET 课程安排

返回用户指定学期的课程安排列表

参数名类型语义
seidNumber学期索引号

返回值(数组):

字段名类型语义
cnameString课程名
cnoString课程号
teacherString教师名
times[Time]时间安排列表

其中 Time 格式为

字段名类型语义
dayNumber一周中的天序号
tstartNumber第几节课开始
tendNumber第几节课结束
wstartNumber开始周数
wendNumber结束周数
selNumber单双周;0 为全部,1 为单周,2 为双周
locString上课地点

/studentQuery.php?func=courseTime

GET 学期列表

返回当前用户入学时间以后所有的学期列表

返回值(数组):

字段名类型语义
yearString年份
termString春夏秋学期
seidNumber学期索引id

GET 同班同学

url:/student/studentQuery.php?func=classmate

返回值:Sno,Sname

老师

GET 课程的学生

url : /student/teacherQuery.php?func=stuGrade`

返回值: Sno,Sname,Class.Cno,Class.Cyear,Grade

GET 授课时间

url : /student/teacherQuery.php?func=courseTime

返回值:Course.Cno,Course.Cname,Time.ds,Time.Week,Time.day,Time.section,Building,Room

POST 添加学生成绩

url:/student/teacherQuery.php?func=updateGrade

POST数据内容
字段名类型语义
idcoursesetintCourseset的索引
snoString学生学号
gradeint学生成绩

返回值

status
0成功
-1不成功带msg字段

管理员

POST Add student

url:/student/adminQuery.php?func=addStu

POST数据内容:

字段名语义
sname姓名
sno学号
idclass班级 可以用getclass获取可选id
sage年龄
ssex性别
iddept专业 可以用getdept获取可选dept
idsemester学期 可以用getSemester获取可选学期

返回值

status
0成功
-1不成功带msg字段

GET 学期

url:/student/adminQuery.php?func=getSemester

返回值:idSemester,Semyear,Semseason

GET 班级

url:/student/adminQuery.php?func=getClass&iddept=1

iddept为获取的专业

返回值:idClass,Cno,Cyear,Dept_idDept

GET 学期

url:/student/adminQuery.php?func=getSemester

返回值:idSemester,Semyear,Semseason

测试

利用Python写了接口测试脚本,类似如下:

import urllib2 
import urllib
import cookielib 

##########################
#     student test       #
##########################

print ('=========student test==========')
data = {}
data['sno'] = '201408010113'
data['spd'] = '123'
post_data = urllib.urlencode(data)
cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
print('Check Login Status...')
resp = opener.open("http://localhost/student/loginFunc.php?func=isStuLoggedIn")
print (resp.read()  )
print ('\n')

详细见源代码。

转载于:https://www.cnblogs.com/he11o-liu/p/7503222.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值