目 录
论文总页数:27页
1 引言 1
2 系统需求 1
2.1 系统需求概述 1
2.2 系统详细需求分析 1
2.2.1 基于web开发 1
2.2.2 格式化文档 2
2.2.3 前台需求 2
2.2.4 性能需求 2
3 方案选择 2
3.1 方案比较 2
3.1.1 系统模式比较 2
3.1.2 程序语言选择与比较 3
3.1.3 数据库的选择 4
3.1.4 开发工具的选择 5
3.2 环境搭建 5
3.2.1 安装Apache web server 5
3.2.2 安装PHP 5
3.2.3 安装Mysql 5
4 总体设计 6
4.1 系统架构设计 6
4.1.1 网络架构 6
4.1.2 系统逻辑服务器 6
4.2 总体结构 7
4.3 系统工作流程图 7
5 实现和编码 8
5.1 数据库设计 8
5.2 数据库表结构设计 9
5.3 系统程序实现 12
5.3.1 前台javascript程序工作流程 12
5.3.2 首页的设计与javascript封装XML 13
5.3.3 通过XMLHttpRequest对象发送XML 14
5.3.4 Smart template简介 15
5.3.5 Smart template在本系统中的运用 15
5.3.6 系统数据库封装与操作 15
5.3.7 系统常用函数封装设计 17
5.3.8 Apache Rewrite功能在系统中的运用 17
6 特殊问题解决办法 19
6.1 mysql数据库密码修改问题 19
6.2 php自动转义问题 19
7 测试与结果分析 19
7.1 运行模块举例 19
7.1.1 前台上传记录模块举例 19
7.1.2 系统管理员模块举例 20
7.1.3 学生功能模块举例 21
7.1.4 导师功能模块举例 22
7.2 测试结果与分析 23
结 论 24
参考文献 25
致 谢 26
2系统需求
2.1系统需求概述
系统用于辅助大学毕业生毕业论文写作,给学生提供统一的文档规范格式化平台,并且需要一个方便学生和老师沟通的信息化平台。系统运行在网络环境,需要具有实用性,易用性和高效性。
2.2系统详细需求分析
2.2.1基于web开发
系统在网络环境下工作,采用B/S模式进行开发,需支持至少一种主流浏览器,系统字符集采用UTF8。
2.2.2格式化文档
用户提交表单后,后台需要能生成RTF和PDF文档,并自动提示用户下载存。
2.2.3前台需求
1.前台用户操作简易且人性化,支持用户填写信息的格式验证,不正确将给出提示;
2.支持学生、导师注册,填写信息验证,不正确将给出提示,填写信息完整才可进行提交;
3.支持学生、导师登录,填写信息验证,不正确将给出提示;
4.支持学生取回记录,自动还原到用户论文填写表单;
5.支持学生上传记录,自动风装成xml文件格式发送给服务器;
6.支持学生上传论文,只有学生有上传权限操作,上传选择文件,支持文件后缀名有pdf、rtf、doc、docx、rar、zip,并且有上传文件描述;
7.支持导师下载查看学生上传论文,只有导师有权限操作,导师只能查看到自己的所带学生上传的论文;
8.支持导师提出修改意见和评定分数,只有导师有权限操作,意见和分数与学生上传记录一一对应;
9.支持后台管理,包括后台管理用户的管理,学生管理,导师管理,院系管理,上传论文的管理,资源发布的管理,用户留言的管理,只有后台管理员有操作权限,并且后台管理员可以拥有不同的操作权限,本文转载自http://www.biyezuopin.vip/onews.asp?id=14569例如可以只能有资源发布权限,具有后台管理用户管理权限的管理员可以给不同的管理员分配操作权限。
2.2.4性能需求
1.安全性,后台管理设置管理者权限,学生、导师各有各的操作权限;
2.系统需要易用性和实用性,必定实现关键的功能;
3.能承受大的负荷,选用合适的开发环境,包括web服务器,数据库和开发语言。
3方案选择
3.1方案比较
3.1.1系统模式比较
目前开发模式主要有C/S结构和B/S结构:
C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。B/S结构利用不断成熟和普及的浏览器技术实现原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。
// JavaScript Document
// --------------
//如果当前层是关闭的,那么就显示,如果当前层是显示的就关闭;
ie4=(document.all)?true:false;
ns4=(document.layers)?true:false;
function visible(objName){
var visible;
var isVisible;
if(ns4){theObj=eval("document.layers[\'"+objName+"\']");if(theObj.display=='none'){visible='';isVisible=true;}if(theObj.display==''){visible='none';isVisible=false;}if(theObj)theObj.display=visible;}
else if(ie4){theObj=eval("document.all[\'"+objName+"\']");if(theObj.style.display=='none'){visible='';isVisible=true;}if(theObj.style.display==''){visible='none';isVisible=false;}if(theObj)theObj.style.display=visible;}
return(isVisible);
} //--------------------------------
//通过对当前层的判断,来设置lable的样式function setStyle(){var args=setStyle.arguments;
// window.alert(args[0]);var objId=document.getElementById(args[0]);
// window.alert(args[1]);var showText=args[1];
// window.alert(objId+textStyle+showText);objId.innerHTML="<div align='left'>"+showText+"</div>";
}//------------------------------------
//增加输入框
function addInput(obj,addClass,showName,inputId,explainText,foot_input){var textHtml1;var textHtml2;var textHtml3;if(addClass=="inputText"){textHtml1=showName+foot_input;textHtml2="<input name='"+inputId+foot_input+"' type='text' class='inputText'>";textHtml3="<div class='explain_blue' align='left'>"+explainText+"</div>";}else{textHtml1=showName+foot_input; textHtml2="<textarea name='"+inputId+foot_input+"' rows='6' class='text_area'></textarea>";textHtml3="<div class='explain_blue' align='left'>"+explainText+"</div>";}addHtml(obj,textHtml1,textHtml2,textHtml3);
}function addHtml(tableObj,tx1,tx2,tx3){
// window.alert(objId+":"+tx1);var rowObj=tableObj.insertRow(tableObj.rows.length);var newTd0=rowObj.insertCell(0);var newTd1=rowObj.insertCell(1);var newTd2=rowObj.insertCell(2);newTd0.align="right";newTd0.innerText=tx1+":";newTd0.width="10%";newTd1.width="50%";newTd1.innerHTML=tx2;newTd2.width="40%";newTd2.innerHTML=tx3;
}
//增加章节模块
var globalBodyVar=0;
function addBody(){
var objId=document.getElementById("table_body");
globalBodyVar++;
var foot_inputText=objId.rows.length-globalBodyVar;
addInput(objId,'inputText','章节标题','chapterTitle','输入章节标题',foot_inputText);
var foot_inputArea=objId.rows.length-globalBodyVar-1;
addInput(objId,'areaText','章节正文','chapterBody','输入章节正文',foot_inputArea);
}
function addReference(){
var objId=document.getElementById("table_reference");
var foot_inputReference=objId.rows.length;
addInput(objId,'inputText','参考文献','inputReference','输入参考文献,格式例如:耿祥义等. JAVA2实用教程, 清华大学出版社. 2001年10月, 第1版.. ',foot_inputReference);
//window.alert(foot_inputReference);
}
//文档对象,解析好后元素放入此对象好使用
function thesis(){this.thesis=function(){this.cover=function(){this.classNumber=function(value){this.value=value;}this.secrecyLevel=function(value){this.value=value;}this.udc=function(value){this.value=value;}this.schoolName=function(value){this.value=value;}this.title=function(value){this.value=value;}this.author=function(value){this.value=value;}this.degreeSpecialty=function(value){this.value=value;}this.degreeClass=function(value){this.value=value;}this.teacherName=function(value){this.value=value;}this.date=function(value){this.value=value;}}this.abstarct=function(){this.cnAbstract=function(title,value){this.title=title;this.value=value;}this.enAbstract=function(title,value){this.title=title;this.value=value;}}this.body=function(chapterNumer){this.chapterNumber=chapterNumber;this.chapter=function(title,value){this.title=title;this.value=value;}}this.conclusion=function(value){this.value=value;}this.reference=function(referenceNumber){this.referenceNumber=referenceNumber;this.rf=function(value){this.value=value;}}this.appendix=function(value){this.value=value;}this.acknowledgemen=function(value){this.value=value;} }
}
//开始验证表单
//验证分类号
function checkcateid()
{var regx = /^[A-Za-z0-9 ]+$/;var cateid;cateid=document.bodyForm.inputClassNumber.value;if(cateid==''){document.getElementById("ClassName").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";//document.bodyForm.inputClassNumber.focus();}return regx.test(cateid);
}
//验证密级
function checkSecrecyLevel()
{var regx = /^[a-zA-Z\u4e00-\u9fa5 ]+$/;var SecrecyLevel;SecrecyLevel=document.bodyForm.inputSecrecyLevel.value;if(SecrecyLevel==''){document.getElementById("SecrecyLevel").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";//document.bodyForm.inputSecrecyLevel.focus();}return regx.test(SecrecyLevel);
}
//验证UDC
function checkUdc()
{// var regx = /^([A-Za-z0-9]){6}-([0-9]){3}-(\([0-9]{4}\)\d{4})-([0-9]){1}$/;//var regx = /(^\([0-9]{4}\)\d{4})/;var regx = /^[A-Za-z0-9_ ]+$/;var Udc;Udc=document.bodyForm.inputUdc.value;if(Udc==''){document.getElementById("Udc").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";// document.bodyForm.inputClassNumber.focus();}return regx.test(Udc);
}
//验证编号
function checkNumber()
{var regx = /^[0-9]+$/;var Number;Number=document.bodyForm.inputNumber.value;if(Number==''){document.getElementById("Number").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(Number);
}
//验证学校名称
function checkSchoolName()
{var regx = /^[A-Za-z0-9\u4e00-\u9fa5 ]+$/;var SchoolName;SchoolName=document.bodyForm.inputSchoolName.value;if(SchoolName==''){document.getElementById("SchoolName").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(SchoolName);
}
//验证论文题目
function checkTitle()
{var Title;Title=document.bodyForm.inputTitle.value;if(Title==''){document.getElementById("Title").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}
}
//验证作者
function checkAuthor()
{var regx = /^[a-zA-Z\u4e00-\u9fa5 ]+[a-zA-Z\u4e00-\u9fa5 \、]*[a-zA-Z\u4e00-\u9fa5 ]+$/;var Author;Author=document.bodyForm.inputAuthor.value;if(Author==''){document.getElementById("Author").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(Author);
}
//验证学位专业
function checkDegreeSpecialty()
{var regx = /^[a-zA-Z\u4e00-\u9fa5 ]+$/;var DegreeSpecialty;DegreeSpecialty=document.bodyForm.inputDegreeSpecialty.value;if(DegreeSpecialty==''){document.getElementById("DegreeSpecialty").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(DegreeSpecialty);
}
//验证学位类别
function checkDegreeClass()
{var regx = /^[a-zA-Z\u4e00-\u9fa5 ]+$/;var DegreeClass;DegreeClass=document.bodyForm.inputDegreeClass.value;if(DegreeClass==''){document.getElementById("DegreeClass").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(DegreeClass);
}
//验证指导老师
function checkTeacherName()
{var regx = /^[a-zA-Z\u4e00-\u9fa5 ]+$/;var TeacherName;TeacherName=document.bodyForm.inputTeacherName.value;if(TeacherName==''){document.getElementById("TeacherName").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(TeacherName);
}
//验证提交日期
function checkDate()
{var regx = /^[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日$/;var Date1;Date1=document.bodyForm.inputDate.value;if(Date1==''){document.getElementById("Date").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(Date1);
}
//验证中文关键字
function checkCnKey()
{var regx = /^[a-zA-Z\u4e00-\u9fa5 ]+[a-zA-Z\u4e00-\u9fa5 \、]*[a-zA-Z\u4e00-\u9fa5 ]+$/;var CnKey;CnKey=document.bodyForm.inputCnKey.value;if(CnKey==''){document.getElementById("CnKey").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(CnKey);
}
//验证中文摘要
function checkCnAbstract()
{var regx = /^[a-zA-Z\u4e00-\u9fa5_0-9 \.\\,\^\$\|\(\)\*\+\{\}\?,/!@#%&\-=\"\';:<>`!·#¥%……—*()——|《》?〈〉:;“‘~`’”。]+.*$/;var CnAbstract;CnAbstract=document.bodyForm.inputCnAbstract.value;if(CnAbstract==''){document.getElementById("CnAbstract").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(CnAbstract);
}
//验证英文名字
function checkEnName()
{var regx = /^[a-zA-Z0-9 ]+$/;var EnName;EnName=document.bodyForm.inputEnName.value;if(EnName==''){document.getElementById("EnName").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(EnName);
}
//验证英文关键字
function checkEnKey()
{var regx = /^[a-zA-Z0-9 ]+[a-zA-Z0-9 、]*[a-zA-Z0-9 ]+$/;var EnKey;EnKey=document.bodyForm.inputEnKey.value;if(EnKey==''){document.getElementById("EnKey").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(EnKey);
}
//验证英文摘要
function checkEnAbstract()
{var regx = /^[a-zA-Z0-9_ \.\\,\^\$\|\(\)\*\+\{\}\?,/!@#%&\-=\"\';:<>`!·#¥%……—*()——|《》?〈〉:;“‘~`’”。]+$/;var EnAbstract;EnAbstract=document.bodyForm.inputEnAbstract.value;if(EnAbstract==''){document.getElementById("EnAbstract").innerHTML = "<span style='color:#FF0000'>该项不能为空</span>";}return regx.test(EnAbstract);
}//验证表单入口函数
function checkfeild(feild)
{switch (feild){case "inputClassNumber" :{if(!checkcateid()){document.getElementById("ClassName").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";//document.bodyForm.inputClassNumber.focus();}};break;case "inputSecrecyLevel" :{if(!checkSecrecyLevel()){document.getElementById("SecrecyLevel").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";//document.bodyForm.inputClassNumber.focus();}};break;case "inputUdc" :{if(!checkUdc()){document.getElementById("Udc").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";//document.bodyForm.inputClassNumber.focus();}};break;case "inputNumber" :{if(!checkNumber()){document.getElementById("Number").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputSchoolName" :{if(!checkSchoolName()){document.getElementById("SchoolName").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputTitle" :{checkTitle();};break;case "inputAuthor" :{if(!checkAuthor()){document.getElementById("Author").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputDegreeSpecialty" :{if(!checkDegreeSpecialty()){document.getElementById("DegreeSpecialty").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputDegreeClass" :{if(!checkDegreeClass()){document.getElementById("DegreeClass").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputTeacherName" :{if(!checkTeacherName()){document.getElementById("TeacherName").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputDate" :{if(!checkDate()){document.getElementById("Date").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputCnKey" :{if(!checkCnKey()){document.getElementById("CnKey").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputCnAbstract" :{if(!checkCnAbstract()){document.getElementById("CnAbstract").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputEnName" :{if(!checkEnName()){document.getElementById("EnName").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputEnKey" :{if(!checkEnKey()){document.getElementById("EnKey").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;case "inputEnAbstract" :{if(!checkEnAbstract()){document.getElementById("EnAbstract").innerHTML = "<span style='color:#FF0000'>请输入正确的格式</span>";}};break;default : alert('sdfds');}}
//当焦点集中的时候显示试列输入
function ShowFormat(feild)
{switch (feild){case "inputClassNumber" :{document.getElementById("ClassName").innerHTML = "<span>例如:tp315</span>";};break;case "inputSecrecyLevel" :{document.getElementById("SecrecyLevel").innerHTML = "<span>例如:公开</span>";};break;case "inputUdc" :{document.getElementById("Udc").innerHTML = "<span>例如:D10621-408-(2006)3512-0</span>";};break;case "inputNumber" :{document.getElementById("Number").innerHTML = "<span>例如:2003215065</span>";};break;case "inputSchoolName" :{document.getElementById("SchoolName").innerHTML = "<span>例如:成都信息工程学院</span>";};break;case "inputTitle" :{document.getElementById("Title").innerHTML = "<span>例如:WEB文档转换系统</span>";};break;case "inputAuthor" :{document.getElementById("Author").innerHTML = "<span>例如:余栋梁 多个作者用“、”号隔开</span>";};break;case "inputDegreeSpecialty" :{document.getElementById("DegreeSpecialty").innerHTML = "<span>例如:网络工程</span>";};break;;break;case "inputDegreeClass" :{document.getElementById("DegreeClass").innerHTML = "<span>例如:工学学士</span>";};break;case "inputTeacherName" :{document.getElementById("TeacherName").innerHTML = "<span>例如:高宏宇</span>";};break;case "inputDate" :{document.getElementById("Date").innerHTML = "<span>例如:2007年7月1日</span>";};break;case "inputCnKey" :{document.getElementById("CnKey").innerHTML = "<span>请输入本论文的中文关键字,关键字之间使用\"、\"号隔开</span>";};break;case "inputCnAbstract" :{document.getElementById("CnAbstract").innerHTML = "<span>输入中文摘要内容</span>";};break;case "inputEnName" :{document.getElementById("EnName").innerHTML = "<span>输入本论文的英文名字</span>";};break;case "inputEnKey" :{document.getElementById("EnKey").innerHTML = "<span>输入本论文英文关键字,多个关键字之间用\"、\"号隔开</span>";};break;case "inputEnAbstract" :{document.getElementById("EnAbstract").innerHTML = "<span>输入英文摘要内容</span>";};break;default : alert('sdfds');}
}