教学服务系统设计之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
接口的框架主要如下:
<?phpsession_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] | 时间安排列表 |
其中 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后台设计相关推荐
- 【java毕业设计】基于Spring Boot+mysql的线上教学平台系统设计与实现(程序源码)-线上教学平台
基于Spring Boot+mysql的线上教学平台系统设计与实现(程序源码+毕业论文) 大家好,今天给大家介绍基于Spring Boot+mysql的线上教学平台系统设计与实现,本论文只截取部分文章 ...
- 关于优惠券后台设计思考
优惠券是大部分产品都强依赖的营销工具,运营在工作中常常会遇到配置和管理各种优惠券的工作,如果你们的产品足够给力,系统做的足够完善,那么你很幸运,但中小型公司或创业项目并没有足够多的时间积累,那么运营面 ...
- 新零售驱动下,超市购物服务系统设计策略研究
编辑导语:新零售(New Retailing),即个人.企业以互联网为依托,通过运用大数据.人工智能等先进技术手段,对商品的生产.流通与销售过程进行升级改造,进而重塑业态结构与生态圈,并对线上服务.线 ...
- 【2017年第3期】交通大数据:一种基于微服务的敏捷处理架构设计
杜圣东, 杨燕, 滕飞 西南交通大学信息科学与技术学院,四川 成都 610031 摘要:面对智慧交通广泛的大数据应用场景和技术需求,一般大数据系统难以适应多种处理情况并做出快速响应.针对这一问题,首次 ...
- 腾讯优测优社区干货精选|手Q刷一刷红包后台设计总结
文 / 腾讯 邓建俊 优测小优有话说: 以为优社区除了测试知识就没有其他东西啦?手Q大牛带你走一波红包的后台设计!!! 1. 前言 2016除夕夜注定是一个不平凡的夜晚,除了陪家人吃团圆饭.看春晚,还 ...
- 腾讯优测|优社区干货精选-手Q红包后台设计!
优测小优有话说: 你以为优社区只有测试相关的知识吗?手机QQ大牛带你走一波红包后台设计! 前言 2016除夕夜注定是一个不平凡的夜晚,除了陪家人吃团圆饭.看春晚,还得刷一刷.摇一摇.咻一咻,忙得不亦乐 ...
- 腾讯优测优社区干货精选|手Q红包后台设计
文 / 腾讯 邓建俊 优测小优有话说: 以为优社区除了测试知识就没有其他东西啦?手Q大牛带你走一波红包的后台设计!!! --------------------------------------- ...
- 实践教学管理系统设计与实现
其他项目,点击作者主页 目录 1 系统简介 2 系统相关技术 2.1 Java简介 2.2 JSP技术的简介 2.3 MySql数据库 2.4 B/S结构 2.5 SSM框架 3 需求分析 3.1 ...
- 微服务之API网关接口设计
微服务之API网关接口设计 API网关,顾名思义,就是外部到内部的一道门,其主要功能: 服务路由:将前段应用的调用请求路由定位并负载均衡到具体的后端微服务实例,对于前端应用看起来就是1个应用提供的服务 ...
- Python可以这样学(第八季:课堂教学管理系统设计与开发实战)-董付国-专题视频课程...
Python可以这样学(第八季:课堂教学管理系统设计与开发实战)-1398人已学习 课程介绍 董付国老师系列教材<Python可以这样学>(ISBN:97873024564 ...
最新文章
- 寻找最大的K个数(上)
- 折叠屏市场价值在哪里?
- 计算机三级交换机允许中继配置,计算机三级交换机配置命令总结
- WS-Security:使用BinarySecurityToken进行身份验证
- mysql启动报错:Another MySQL daemon already running with the same unix socket.
- 深入理解Javascript中构造函数和原型对象的区别
- 2021-01-29
- 国内工业机器人发展水平综述
- 利用APPium获取自动浏览获取喵币
- 等一场春,行走在心上
- C# wpf 封装成dll供C++调用
- activiti5.22整合官方编辑器
- C# 字符串操作--减少垃圾回收压力
- linux firefox xvfb,持续集成:采用Xvfb+Selenium+Firefox搭建linux服务器下的自动化测试环境...
- java ikvm viewer,通过IPMI KVM安装操作系统
- 微服务架构设计基础之立方体模型
- 层层剖析,让你彻底搞懂Self-Attention、MultiHead-Attention和Masked-Attention的机制和原理
- Django+小程序打造个人助手-----2小程序项目工程目录
- 详解如何处理海量定时任务
- brit打印日志的问题
热门文章
- 正则验证手机号码和邮箱格式
- 神州数码云平台网络环境
- mxh缩写英语_mxht的含义,mxht是什么的缩写,mxht的词语,mxht代表的意思
- 微博除夕日活达1.34亿 借阿里云化解流量洪峰
- 电脑知识:如何将旧的Windows笔记本电脑切换到Linux
- 【PC】如何让程序开机自启动/如何打开开机自启动文件夹
- git 使用代理加速
- Node.js常用console中的几种方法
- ACDSee Photo Manager 15.0.169 crack by XenoCoder
- 三原色是红黄蓝对吗_为什么三原色是红黄蓝而?