您的位置:首页 > 编程语言 > PHP开发

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

2017-06-25 00:03 295 查看

项目简介

本项目是与@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')


详细见源代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 数据库