教学服务系统设计之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,无则返回所有条目 |
字段名 | 类型 | 语义 |
---|---|---|
cname | String | 课程名 |
cno | String | 课程编号 |
teacher | String | 教师姓名 |
grade | Number | 成绩(百分制) |
/studentQuery.php?func=stuGrade&stuid='201408010115'&semid=2
GET 个人信息
返回登录用户的个人信息返回值:
字段名 | 类型 | 语义 |
---|---|---|
sname | String | 学生姓名 |
/studentQuery.php?func=stuInfo
GET 选课列表
用户当前可用的选课列表如果当前不能选课,返回空
[]。
返回值(数组):
字段名 | 类型 | 语义 |
---|---|---|
cid | Number | 课程数据库索引号 |
cno | String | 课程编号 |
cname | String | 课程名 |
teacher | String | 任课教师 |
/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 选课
参数名 | 类型 | 语义 |
---|---|---|
cid | Number | 课程索引号 |
字段名 | 类型 | 语义 |
---|---|---|
status | Number | 0为成功;其它为失败 |
msg | String | 提示信息(失败原因) |
/studentQuery.php?func=selCourse&cid=3
GET 课程安排
返回用户指定学期的课程安排列表参数名 | 类型 | 语义 |
---|---|---|
seid | Number | 学期索引号 |
字段名 | 类型 | 语义 |
---|---|---|
cname | String | 课程名 |
cno | String | 课程号 |
teacher | String | 教师名 |
times | [Time] | 时间安排列表 |
字段名 | 类型 | 语义 |
---|---|---|
day | Number | 一周中的天序号 |
tstart | Number | 第几节课开始 |
tend | Number | 第几节课结束 |
wstart | Number | 开始周数 |
wend | Number | 结束周数 |
sel | Number | 单双周;0 为全部,1 为单周,2 为双周 |
loc | String | 上课地点 |
/studentQuery.php?func=courseTime
GET 学期列表
返回当前用户入学时间以后所有的学期列表返回值(数组):
字段名 | 类型 | 语义 |
---|---|---|
year | String | 年份 |
term | String | 春夏秋学期 |
seid | Number | 学期索引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数据内容
字段名 | 类型 | 语义 |
---|---|---|
idcourseset | int | Courseset的索引 |
sno | String | 学生学号 |
grade | int | 学生成绩 |
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大力力 [030节] php设计系统后台菜单
- php大力力 [031节] php设计系统后台菜单和样式设计
- 汉字输入教学系统中词组切分方法的设计
- 颜建生的毕业设计课题--校园网络打印服务系统---Web子系统
- VC实现系统热键激活后台服务程序
- 普通程序作为系统服务在后台运行
- 跟后台打印程序系统服务通讯时出现错误解决方法
- 程序的方法启动或停止指定的系统后台服务
- 公交车路线查询系统后台数据库设计——查询算法(转自卢春城专栏)
- IT服务管理系统设计思路
- VC实现系统热键激活后台服务程序
- 公交车路线查询系统后台数据库设计--关联地名和站点
- 网络教学系统之智能答疑系统的设计以及实现
- Web服务搜索与执行引擎(三)——系统设计方案
- Web服务搜索与执行引擎(四)——基于(三)的系统架构设计
- 面向服务设计的Web服务组合系统
- 吴刚兴的毕业设计课题--校园网络打印服务系统---客户端子系统
- Web服务搜索与执行引擎(三)——系统设计方案
- Web服务搜索与执行引擎(三)——系统设计方案
- Web服务搜索与执行引擎(三)——系统设计方案