系统的开发技术及主要构架
根据本系统的功能需求,采用PHP编程语言与开源的MySQL数据库引擎进行开发。由于PHP作为一种高效而且语言结构清晰的编程语言,尤为适合于模块化功能的开发,而且因为其本身和服务器结合比较紧密,有大量优秀的函数库可以使用,在执行效率和安全性上有很大优势。而MySQL作为一种快速的、多线程、多用户和健壮的SQL数据库服务器,根据第三方测试结果,在千万级的数据环境中依然保持较高的执行速度。因此在技术层面上,是完全可行的。
PHP(“PHP Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到 HTML中,尤其适合 web开发。它还是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。
PHP代码在服务器端被解释转变成普通的HTML页面内容,送给浏览器端,这种模式可使我们用它来完成相当复杂的功能。它能运行在包括Windows、Linux等在内的绝大多数操作系统环境中,常与免费的Web服务器软件Apache和免费数据库软件MySQL配合使用于Linux平台上,具有较高的性价比。
强大的数据库支持:目前其支持范围覆盖了包括Oracle,Sybase,Microsoft SQL,MySQL,Informix,Solid dBase,ODBC,Unix dbm,PostgreSQL,Adabas D等在内的大多数常见数据库。用它编写一个含有数据库功能的网页程序十分简单。
PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是绝佳组合。
可扩展性:就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。
面向对象编程:PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP也支持构造器、提取类等。
系统功能分析:
系统权限分配:
本系统分为两个操作权限,1、管理员权限。2、学生权限。
1.管理员功能部分
使用管理员帐号登陆后即可进入管理员页面,其功能总体可以分为以下8个部分:
(1)实验设备管理 管理员可以新增实验室的设备以便在安排实验的时候选择,并对这些已经添加的实验室设备进行管理(包括修改属性与删除),并指定设备的开放时间,查看设备状态。
(2)学生信息管理 管理员可以在这里修改、查看学生信息,支持按学号查询。
(3)学生帐号管理 管理员可以在这里添加单个学生帐号,同时也可对学生帐号进行删除,对遗忘密码的学生提供恢复学生密码功能(注册的WEB帐号),锁定/解锁帐号。
(4)实验报告管理 管理员可以上传实验报告,并对实验报告进行管理(包括修改属性与删除),还可对学生上传的实验报告进行下载和在线评分。
(5)实验指导管理 管理员可以上传实验指导教案并对实验指导教案进行管理(包括修改属性与删除)。
(6)资费管理 查看用户余额,确定设备资费标准;以班为单位还是个人的充值,给非内部户充值使得该用户能够在非实验课上能够远程登陆系统进行正常实验操作,并查询用户的余额。
(7)公告管理 管理员可以添加公告并对公告进行管理(包括修改与删除),公告应当允许在首页套红显示各置顶显示、可以删除过期的公告。
(8)交流系统 在此查看学生留言,并可对其进行回复或删除。
2.学生功能部分
使用学生帐号登陆后即可进入学生页面,其功能总体可以分为以下5部分:
(1)实验指导下载 应当支持学生登陆后下载实验指导教案。
(2)实验报告上传下载 学生可以按教师或者按课程下载实验报告,在完成实验报告后能够通过本系统上传完成的实验报告,同时可以查看自己的实验报告的评分。
(3)信息查询 查看个信息,查看余额以及充值记录,和修改个人密码,以及所查询做过的实验的记录。
(4)远程实验 看开放几组设备;开放时间段;是否被占用;若有空闲组,点击进入,开始试验。
(5)交流系统 进入此系统后,学生可以给管理员留言,询问实验的一些问题,并可查看管理员的回复。
通过以上对系统基本操作的分析,得到以下功能模块。
1、 会员登陆模块。
在登陆的时候选择下拉列表框,是以管理员还是学生身份登录,登陆以后,各个不同的权限只能浏览和操作与之相对应的页面。
该功能要解决一个难点在于,要禁止同一学生用户同时在线的情况。我用了如下方法解决:
在学生表中设置一个名为check_login的字段,如果该字段值为0的时候,代表用户没登陆,值为1的时候,为登陆, 该字段为1的时候,就不能登陆。用户登陆的时候,把该字段的值改为1,点击注销的时候,把该字段的值改为0。
还要考虑到一个情况,如果用户没有通过点击注销按钮来正常的退出系统呢?比如:用户直接关闭浏览器。在这个问题解决上,我使用到了AJAX技术,在用户关闭浏览器的时候,把check_login字段的值改为0。
在后台框架主体页面admin.php中加入如下代码:
if($_SESSION['type'] == 1){
require("../config/dbconnect.inc.php");
$sql = "update `students` set `is_login`='1' where `id`=$_SESSION[id]";
mysql_query($sql,$Conn);
}
//以上PHP代码代码的作用在于,每次刷新该页面的时候,先把用户的登陆状态设置为1.
Js代码:
<script type=”text/javascript”>
var xmlHttp; //用于存储xmlHttp对象
var ajax_obj; //接收ajax请求页面返回值
//创建XMLHTTP对象
function createXmlHttp()
{
xmlHttp = false;
try{
//其他浏览器xmlHttp对象方法
xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
}catch(e){
try{
//ie浏览器xmlHttp对象方法
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
xmlHttp = false;
}
}
if(!xmlHttp && typeof XMLHttpRequest != 'undefined')
{
xmlHttp = new XMLHttpRequest();
}
}
</script>
//该方法作用:在关闭或者是刷新页面的时间执行某些动作
window.onbeforeunload = function () {
createXmlHttp(); //创建xmlHttp对象
//在ajax查询串后面跟一个随机数,这样可以防止ajax缓存的出现
var url = "ajax_chengeStuState.php?rand="+Math.random();
xmlHttp.open('get',url,true);
xmlHttp.send(null);
//注意:这里并没有onreadystatechange事件来接受请求页面的返回值,因为用window.onbeforeunload方法执行ajax请求的时候,xmlHttp对象只会出现状态—1,也就是说,只能发送ajax请求,
for(var i=0;i<5000;i++){} //防止有时候关闭浏览器的时候,没执行代码
}
ajax_chengeStuState.php部分代码:
require("../config/dbconnect.inc.php"); //数据库连接
$sql = "update `students` set `is_login`='0' where `id`=$_SESSION[id]";
mysql_query($sql,$Conn); //修改用户登陆状态
这样就实现了禁止同一用户名,同时在线的问题。
2、 实验设备管理模块。
该模块只是针对管理员用户才能操作,要实现实验设备的增、删、改、浏览、搜索。