本項目是與@nameoverflow同窗合做。該同窗負責vue
前端的設計,我負責php
後臺的接口實現。本文將主要記錄php
後臺。
本項目的Github地址:https://github.com/He11oLiu/Student_Information_management_system
本項目僅做爲嘗試用途,不少功能還沒有實現。
php
PHP
鏈接MySQL
數據庫利用MySQLi
接口庫來鏈接MySQL
數據庫,鏈接測試以下:html
<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
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
框架所述,接口定義見接口文件。vue
爲了防止出現越權調用接口,每一個功能利用Session
作了權限檢測。python
學生/loginFunc.php?func=stuLogin
mysql
老師/loginFunc.php?func=isTeacherLoggedIn
git
管理員/loginFunc.php?func=isTeacherLoggedIn
github
/loginFunc.php?func=isXXXLoggedIn 其中 XXX=Stu | Teacher | Admin
sql
若是用戶爲學生用戶則只能查同班同窗
爲管理員則能夠查任意學號
教師用戶不容許使用shell
參數名 | 類型 | 語義 |
---|---|---|
stuid(可選) | String | 學號,無則返回本身成績 |
semid(可選) | number | 學期id,無則返回全部條目 |
返回值:
字段名 | 類型 | 語義 |
---|---|---|
cname | String | 課程名 |
cno | String | 課程編號 |
teacher | String | 教師姓名 |
grade | Number | 成績(百分制) |
/studentQuery.php?func=stuGrade&stuid='201408010115'&semid=2
返回登陸用戶的我的信息
返回值:
字段名 | 類型 | 語義 |
---|---|---|
sname | String | 學生姓名 |
/studentQuery.php?func=stuInfo
用戶當前可用的選課列表
若是當前不能選課,返回空[]
。
返回值(數組):
字段名 | 類型 | 語義 |
---|---|---|
cid | Number | 課程數據庫索引號 |
cno | String | 課程編號 |
cname | String | 課程名 |
teacher | String | 任課教師 |
/studentQuery.php?func=stuSel
/studentQuery.php?func=courseList
返回值:
Course.idCourse,Course.Cno,Course.Cname,Course.Ccredit,Course.Cplace,Course.Cnum,Dept.Dname,Teacher.Tname
參數名 | 類型 | 語義 |
---|---|---|
cid | Number | 課程索引號 |
返回值:
字段名 | 類型 | 語義 |
---|---|---|
status | Number | 0爲成功;其它爲失敗 |
msg | String | 提示信息(失敗緣由) |
/studentQuery.php?func=selCourse&cid=3
返回用戶指定學期的課程安排列表
參數名 | 類型 | 語義 |
---|---|---|
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
返回當前用戶入學時間之後全部的學期列表
返回值(數組):
字段名 | 類型 | 語義 |
---|---|---|
year | String | 年份 |
term | String | 春夏秋學期 |
seid | Number | 學期索引id |
url:/student/studentQuery.php?func=classmate
返回值:Sno,Sname
url : /student/teacherQuery.php?func=stuGrade`
返回值: Sno,Sname,Class.Cno,Class.Cyear,Grade
url : /student/teacherQuery.php?func=courseTime
返回值:Course.Cno,Course.Cname,Time.ds,Time.Week,Time.day,Time.section,Building,Room
url:/student/teacherQuery.php?func=updateGrade
字段名 | 類型 | 語義 |
---|---|---|
idcourseset | int | Courseset的索引 |
sno | String | 學生學號 |
grade | int | 學生成績 |
返回值
status | |
---|---|
0 | 成功 |
-1 | 不成功帶msg 字段 |
url:/student/adminQuery.php?func=addStu
POST數據內容:
字段名 | 語義 |
---|---|
sname | 姓名 |
sno | 學號 |
idclass | 班級 能夠用getclass獲取可選id |
sage | 年齡 |
ssex | 性別 |
iddept | 專業 能夠用getdept獲取可選dept |
idsemester | 學期 能夠用getSemester獲取可選學期 |
返回值
status | |
---|---|
0 | 成功 |
-1 | 不成功帶msg 字段 |
url:/student/adminQuery.php?func=getSemester
返回值:idSemester,Semyear,Semseason
url:/student/adminQuery.php?func=getClass&iddept=1
iddept爲獲取的專業
返回值:idClass,Cno,Cyear,Dept_idDept
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')
詳細見源代碼。