目 录
目 录 III
摘 要 V
关键词 V
Abstract VI
Key Word VI
第一章 绪论 6
1.1系统设计背景 1
1.2系统设计目的与意义 1
1.3国内外现状 2
1.4本文结构 3
第二章 需求分析 3
2.1系统需求分析 4
2.2系统角色设计 4
第三章 系统开发技术 4
3.1 PHP语言简介和特点 5
3.2 Mysql数据库简介 5
3.3 B/S结构介绍 5
3.4 Apace 简介 6
第四章 系统设计 6
4.1信息导入模块设计 7
4.2选题模块设计 7
4.3相关报表模块设计 8
4.4网上交流模块设计 8
4.5论文上传和查阅模块设计 8
4.6论文管理模块设计 9
4.7系统管理模块设计 9
4.8数据库系统设计 9
第五章 系统实现 11
5.1连接数据库 12
5.2登录界面 12
5.3系统权限模块 14
5.4安全过滤模块 16
5.5信息导入模块 17
5.6论文选题模块 21
5.7论文上传模块 24
5.8论文下载模块 25
第六章 测试 26
6.1登录功能 27
6.2选题模块 28
6.3论文及其相关资料上传模块 29
6.4学生信息导入模块 31
第七章 总结 32
参考文献 33
致 谢 34
附录一 登录页面代码 36
附录二 信息导入代码 37
附录三 论文上传代码 41
摘 要
随着现代信息技术的快速发展,使得计算机广泛应用于各领域,每个行业都在进行改革,计算机直接或间接的代替了大部分劳动力,也提高了管理的准确与效率性。教育信息化已成为目前教育改革的主旋律。而在高校教育中,论文的管理是一项非常重要的工作。但随着高校的扩招,毕业生日益增多[1],如何提高毕业论文管理效率,成为毕业论文管理工作亟待解决的一个难题。在一项调查中,全国50%以上的高校对毕业论文的选题、收集、处理、更新等毕业论文管理方式依旧采用人工处理的方式,处理效率非常低下,无法达到信息化处理的要求。
在此阐述了基于Web的论文管理系统的完整开发过程和细致的实现过程,主要包括系统需求分析、数据库的设计、系统功能设计、实现技术等[2]。在其中重点介绍了数据库的设计过程和系统详细功能的实现过程,不仅如此还介绍了系统构架。本系统采用目前较为流行的PHP+Mysql的组合进行开发,并且采取数据与业务逻辑分离,提高了系统的耦合度,大大的提高了系统的可维护性、可拓展性、可移植性。
关键词:开发;数据库;系统;论文管理
Abstract
With the rapid development of modern information technology, making computers are widely used in every industry are carrying out reform, direct or indirect, in place of the computer most of the labor force, but also improve the accuracy and efficiency of management. In the field of education, education, information technology has become one of the main theme of the current education reform and development. In higher education, the paper’s management is a very important job. But with the college enrollment, graduates increasing, how to improve management efficiency thesis, dissertation management has become a problem to be solved. In one survey, over 50% of university thesis topics for the collection, processing, updating thesis management still using manual processing mode, the efficiency is very low, can not meet the requirements of information processing.
In this paper the development and implementation of Web-based paper management system, including system requirements analysis, database design, system function design, implementation technology. Focuses on the design and implementation of the database system, also it introduced the system structure. The system uses the more popular combinations PHP + Mysql development, and take the data and business logic to improve the coupling of the system, greatly improve the maintainability, scalability, portability.
Key Word:Development; Database; System; Thesis management
第一章绪论
1.1系统设计背景
如今社会,网络已经走进千家万户,同人们生活息息相关[3]。计算机的发展加速了网络的社会化进程,随之而来的是以全球信息网络普及为标志的全球信息网络革命的快速发展。由此可见,世界已经进入了计算机信息管理领域发展的黄金时代,计算机已经发展成为非常普通的工具。
在高校中,人才蓓养的最后一个环节同时也是最重要的一个环节就是毕业设计和毕业论文。很多高校在毕业论文和毕业设计管理上依然采用传统的手工模式。第一步由导师出题,第二步导师指导学生选题,第三步撰写[4]。在这三步之间还需要对论文进行中期检查。最后收集论文评分和归档。在这些过程中,每一步都需要面对面进行交流,或者采用E-Mail、电话、QQ等即时聊天工具进行交流。这种方式虽然能够方便提供导师和学生当面探讨的几率,但也存在很多局限性。因此,各所高校迫切的需要一个能够利用计算机代替人工来进行毕业论文管理工作的智能系统,以提高论文管理的效率和毕业论文的质量,减少管理人员的工作量[5]。
1.2系统设计目的与意义
在高校所有的管理系统中论文管理系统是非常重要且不可缺少的一个管理系统,对于论文的管理者和导师以及学生来说都是非常重要的。随着现在高校的进一步扩招,学生规模的不断扩大,每年都将会使应届毕业生人数急剧膨胀,随之而来的便是论文信息管理量的成倍增长。面对庞大的信息量,论文管理系统便起到了提高毕业论文管理工作效率的重要责任,通过这个系统,可以大大的提升论文管的规范化、科学化、和快速化。从而方便导师全面的掌握学生关于毕业论文的进度,减少工作量,并推进无纸化办公的进程。
在社会信息化浪潮的推动下,各种信息系统正由传统单机模式向网络方向发展,这种信息系统的发展趋势要求当下的各种管理系统必然是以Web应用为基础,并根据不同的管理需求进行拓展。而论文管理系统基于Web进行开发,主要实现的功能有:论文选题、导师选择、相关资料上传、论文上传、论文题目批量导入、学生信息导入、导师信息导入、毕业论文导出等关于毕业论文从选题到最终评分的每一个环节[6]。并且大大的提高论文管理的效率。在功能设计方面采用模块化设计结构,使系统功能上的更改、二次开发、深度定制等变得容易同时大大提高了系统的可塑性。基于Web的论文管理系统顾名思义,是一款基于Internet的信息化信息管理系统,适应与多点管理要求。所以在开发模式上的选择也是经过深深的研讨,最传统的软件开发模式是基于客户/服务器即时(C/S)结构而进行构架的,因为C/S结构是基于2层结构的开发模式,其中在数据层和表示层之间有着清晰的界限,所以这种结构的系统一般都是应用在客户机上的[7]。相对的也有很多弊端和缺点。而本文介绍的论文管理系统则是基于浏览器进行开发的,不需要进行传统的安装操作,只需要在服务器端进行域名解析,客户端即可通过浏览器输入域名进行访问,这就是浏览器/服务器结构,也是时下最流行的Web开发模式,简称B/S结构[8]。使用B/S开发的应用软件,将系统功能实现的核心部分放在服务器上,简化了系统的开发、维护和使用。同时也解决了C/S结构开发出来的应用程序在不同客户端需要特殊组建支持和应用程序在不同系统的客户端兼容性的问题。大大提高了程序的兼容性。
1.3国内外现状
目前,国内外的高校在信息进行科学管理上都已经运用先进的信息管理系统和软件开发平台[9]。其中,毕业论文管理系统使毕业生在毕业设计的整个过程中以及导师对毕业论文设计管理的过程中实现了系统化、规范化。
在国外的高校,他们的信息化管理工作做的很到位,因为一般他们都具有较大规模的技术团队来提供服务和技术支持。而国内高校的信息化建设与国外相比还是有明显的差异。但是国内高校近年来一方面不断投资建设各种硬件、系统软件和网络,另一方面不断开发实施了各种信息化管理系统,当然也包括论文管理系统,已经初具一定规模的信息化建设体系。但是由于起步晚、体系不健全等多个原因,国内在信息化管理工作上还是与国外的信息化管理工作有很大的差距。
本系统是针对高校毕业论文管理的信息化管理工作而开发的,为了赶超国外高校的毕业论文管理系统所以在本系统设计之初就选择了基于当下最流行的B/S结构进行开发,而开发环境和工具也是选择在Web开发领域中最完美的组合Apache + PHP + Mysql。在系统的前端设计上采用了Html + Css 样式和逻辑代码分离的模式进行开发,大大简化二次发开的难度和提高界面美化。不仅如此,在数据库运行和逻辑程序运行上也采用了双向独立模式,提高数据库并发查询量,加速优化服务器进程,从而提高程序运行效率。
1.4本文结构
本文主要介绍了基于Web的毕业论文管理系统的设计与实现,为毕业生和导师提供了一个实用、快捷的论文信息管理平台,同时也解决了高校在毕业论文管理上的信息化推进工作。
本文分为七个章节,各章节的安排如下:
第一章:绪论。介绍了系统设计的目的、研究意义、背景以及国内外的发展现状和论文主要结构[10]。
第二章:需求分析。分析了论文管理系统的需求情况。
第三章:开发技术。介绍了用以开发论文管理系统的服务器环境、开发工具、数据库。
第四章:系统设计。根据对系统的需求分析结构,进行系统的模块化设计。
第五章:系统实现。根据系统设计的模块来实现系统所有功能。
第六章:测试。测试已完成开发的系统功能。
第七章:总结。总结论文的研究成功以及整个系统设计与实现的研究心得,探讨论文管理系统的未来发展方向,并包括最后的致谢和参考文献。
第二章需求分析
2.1系统需求分析
本系统设计的总体思路是将人工管理毕业论文正常流程划分为信息导入模块、选题模块、相关报表模块、网上交流模块、论文上传和查阅模块、论文管理模块以及系统管理模块[11]。通过对各个模块功能的实现,最终完成人工毕业论文管理到基于Web的论文管理系统的一个蜕变[12]。如图3.1所示。
图 3.1 系统需求分析图
2.2系统角色设计
通过对系统模块化分析,确定系统角色设计为三个分别是管理员、导师、和学生,其主要角色设计为[13]:
管理员:系统监控、管理和维护服务器上的导师信息、学生信息、论文信息[14]。
导师:提供论文题目并通过Web导入服务器、审核确定学生选题、审阅学生提交的相关报表和论文以及对论文成绩的评定。
学生:选择论文题目、提交相关文档、提交毕业论文、查看和提交留言[15]。
第三章系统开发技术
3.1 PHP语言简介和特点
PHP是一种通用开源脚本语言,由Rasmus Lerdorf于1995年开发,当时它还只是Perl的脚本集合,它的特性之一就是它是一个类似Perl的语言[16]。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。
主要特点:开源、免费、快捷、跨平台性强、效率高、执行速度快、支持面向对象、属于类C语言。
3.2 Mysql数据库简介
MySQL是当前数据库市场上最流行、最广泛的、多线程的开放源码数据库管理系统之一。是由Michael“Monty”Widenius在1995年创建的[17]。当然它也是是一个关系型数据库管理系统。并且MySQL 使用 标准化的数据库标准语言SQL。Mysql的许多特性使其成为一个优秀的数据库系统,运行速度快是它一个显著特点。
主要特点:储存引擎多样化、支持多线程、可移植性高、服务器兼容性强、查询速度快、开源、稳定性强。
3.3 B/S结构介绍
B/S结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。B/S结构是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server同数据库进行数据交互。 这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
主要特点:适用范围广、稳定性高、维护简单、安全性高、信息流向可变化。
3.4 Apace 简介
Apache HTTP Server是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一[18]。
主要特点:运行速度快、稳定性高、可靠性高、支持多平台、支持第三方模块进行功能拓展。
第四章系统设计
4.1信息导入模块设计
将论文导师信息、论文题目信息和学生信息通过Excel等数据储存文件导入到数据库中,并进行相关逻辑处理。如图4.1所示。
图 4.1信息导入模块设计流程图
4.2选题模块设计
学生通过身份认证进入系统之后可以根据自身优势选择论文题目,导师则可以通过学生提交的论文题目申请进行判断该学生是否具备该论文编写的相关优势,用以确认论文题目申请。如图4.2所示。
图 4.2 选题模块流程图
4.3相关报表模块设计
在该模块中,系统提供格式正确的案例下载,包含开题报告、任务书、文献综述和期中检查表。学生在对该案例下载之后填入相关资料进行上传。如图4.3所示。
图4.3 相关报表模块设计流程图
4.4网上交流模块设计
导师和学生可以可通过网页内镶入的WebQQ即时聊天工具进行交流。
4.5论文上传和查阅模块设计
学生将编写完成的论文通过Web方式上传到服务器,导师可直接在线查看或选择下载到本地查看。
4.6论文管理模块设计
导师可对学生上传到服务器上的论文进行阅读、删除和导出操作。
4.7系统管理模块设计
系统管理员可对学生信息、导师信息、论文信息进行增、删、查、改等操作,以及系统的正常维护工作[19]。
4.8数据库系统设计
在基于Web的相关系统开发中,数据库的设计是管理信息系统开发中一个至关重要的环节[20],需要全面的考虑和分析用户的各种需求,构造出最优的数据库设计。让系统能够快速、稳定、准确的运行。
本系统的设计也遵循这个设计思路,总共建立5张数据表:
在phpMyadmin的主界面中创建名为xt的数据库。如图3.4所示。
图3.4 数据库创建
● 管理员信息表:用于存储管理员信息,表名admin。具体如表3.4.1
表3.4.1 管理员信息表
列名 标识符 数据类型 长度 主键
管理员账户 Username varchar 100 Y
管理员密码 Password varchar 100 N
● 导师信息表:用于存储导师信息,表明daoshi。具体如表3.4.2
表3.4.2 导师信息表
列名 标识符 数据类型 长度 主键
导师编号 ID Int 100 Y
导师账户 Username varchar 100 N
导师密码 Password varchar 100 N
姓 名 Name varchar 50 N
性 别 Sex varchar 20 N
电 话 Phone varchar 60 N
Q Q Qq varchar 80 N
专 业 Zhuanye varchar 150 N
● 学生信息表:用于存储学生信息,表名students。具体如表3.4.3
表3.4.3 学生信息表
列名 标识符 数据类型 长度 主键
编 号 ID Int 100 Y
学 号 Username varchar 200 N
密 码 Password varchar 100 N
姓 名 Name varchar 50 N
性 别 Sex varchar 20 N
电 话 Phone varchar 60 N
Q Q Qq varchar 80 N
专 业 Zhuanye varchar 150 N
论文题目编号 Lunwen Int 20 N
导师编号 Daoshi Int 20 N
● 论文题目信息表:用于存储论文题目信息,表名lunwentimu。具体如表3.4.4
表3.4.4论文题目信息表
列名 标识符 数据类型 长度 主键
编 号 ID Int 100 Y
题 目 Title varchar 200 N
内 容 Content mediumtext \ N
要 求 Yaoqiu mediumtext \ N
状 态 State varchar 20 N
导师编号 Daoshi Int 20 N
● 论文信息表:用于存储论文信息,表名lunwen。具体如表3.4.5
表3.4.5 论文信息表
列名 标识符 数据类型 长度 主键
编 号 ID Int 100 Y
学生编号 Xuesheng Int 20 N
题 目 Title varchar 200 N
内 容 Content mediumtext \ N
要 求 Requirements mediumtext \ N
开题报告 Ktbg varchar 300 N
任务书 renwu varchar 300 N
文献综述 zongshu varchar 300 N
期中检查表 qizhong varchar 300 N
论文答辩申请表 dabian varchar 300 N
论文正稿 lunwen varchar 300 N
第五章系统实现
5.1连接数据库
在通过使用phpMyadmin进行数据库创建操作之后,整个系统进入编码阶段。在这个阶段中很重要的一个步骤就是将数据库和程序文件进行关联,以便在页面中使用PHP代码直接操作数据库。在php的数据库关联函数中我选择mysql_connect()来做数据库连接,因为mysql_connect()可以非持久的建立数据库和php的连接,节省服务器资源,做到最优资源最优服务的优化。同样在数据库指定函数的选择上也是采取最优资源最优服务的优化准则,当然依照此准则mysql_select_db()当之无愧。
在数据库连接中为了避免网页编码和数据库编码不同,在连接数据库时通过函数mysql_query()来指定网页编码,一般中文网站都使用UTF-8的编码。还有定义时区也是一个忘记的工作,特别是在基于php进行功能性平台开发中,而基于web的学生论文管理系统就是属于基于php的功能性平台,在这里我选择使用date_default_timezone_set()函数进行时区定义。具体代码如下:
5.2登录界面
本系统登录页面采用静态html语言作为基础进行搭建,符合w3c标准,兼容IE6、IE7、IE8等主流浏览器。如图5.2.1在程序逻辑方面为了考虑后期的维护和二次发开问题,采用了静态html代码和程序逻辑代码分离处理方式。原理如图5.2.2所示。
图5.2.1 登录页面静态html视图
图5.2.2 登录页面程序逻辑图
逻辑页面代码:
<?php include_once("js/config1.php"); $password=str_replace(array('<','>','"',"'",'%','*','.',';','select','update','delete','insert','join'),'',$_POST['password']); $username=str_replace(array('<','>','"',"'",'%','*','.',';','select','update','delete','insert','join'),'',$_POST['username']); $sf=str_replace(array('<','>','"',"'",'%','*','.',';','select','update','delete','insert','join'),'',$_POST['sf']); }else if($sf==2){ ... ... $rs=mysql_fetch_array($query); $us=$rs['username']; $pw=$rs['password']; } if($username==null || $password==null){ echo ""; } ?>5.3系统权限模块
本系统在设计之处就预设了三个系统角色,分别是学生、导师和管理员,这三个角色在系统扮演着不可分割的角色,但是为了便于程序的管理和安全性考虑,我们必须将给这三个角色定义权限,使之能够独立运行而又互相关联。定义权限必须在进入系统之前进行权限划分,这点从我们登录界面中就可以看得到,在登录页面中,可用系统使用者自行选择角色。如图5.3.1所示
图5.3.1系统角色选择界面
在登录页面进行角色选择便是定于权限的第一步,第二步则是权限的划分,在权限划分上我采取最简单的权限划分标准,即是学生权限为1,导师权限为2,管理员权限为3。第三步是权限功能的划分,进行权限划分的目的就是规范系统管理,所以在系统住页面中,我将学生角色会使用到的功能划分到学生系统栏目下,而该栏目布置的子栏目为信息浏览、导师信息、论文选题、论文信息。将导师角色会使用到的功能划分到导师系统栏目下,其子栏目包含指导学生、论文题目、论文题目导入。同理,管理员角色会使用到的功能划分为系统管理栏目,其包含学生管理、导师管理、论文管理和学生信息论文信息导入等子栏目。
具体实现代码为:
<?php if($_SESSION['sf']=="1"){ ?>- <?php }else if($_SESSION['sf']=="2"){ ?>
- <?php }else if($_SESSION['sf']=="3"){ ?>
- <?php } ?> 5.4安全过滤模块 在系统运行的过程中,经常存在数据库查询、读取和更新的操作,每一次正常的网页操作背后都有成百行代码的运行,按照微软提出的每一百行代码会存在一个Bug(程序漏洞)的说法来算,每次正常的网页操作都会出现可供黑客使用的bug一个,这对于一个正常运行的程序来说是致命的。而其中最严重的莫过于SQL注入攻击,SQL注入攻击是黑客对数据库进行攻击的常用手段之一[21]。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多[22]。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患[23]。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入[24]。 一般来说,SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.php?id=XX等带有参数 的php 动态网页中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入[25]。 反之在进行反SQL注入时,只需要过滤掉通过网页URL获取的参数或者通过POST获取的表单参数进行过滤即可达成。原理如图5.4所示。
图5.4 反SQL注入流程图
将SQL注入中的常用到的select、update、delete、insert、join等函数代码和标点符号写成数组array(‘<’,‘>’,‘"’,“'”,‘%’,‘*’,‘.’,‘;’,‘select’,‘update’,‘delete’,‘insert’,‘join’)。然后通过对比函数str_replace()将获取的参数进行过滤即可完成细致的反SQL注入过滤。
具体代码如下:
x x x = s t r r e p l a c e ( a r r a y ( ′ < ′ , ′ > ′ , ′ " ′ , " ′ " , ′ xxx=str_replace(array('<','>','"',"'",'%','*','.',';','select','update','delete','insert','join'),'', xxx=strreplace(array(′<′,′>′,′"′,"′",′_GET[‘pic’]);
x x x = s t r r e p l a c e ( a r r a y ( ′ < ′ , ′ > ′ , ′ " ′ , " ′ " , ′ xxx=str_replace(array('<','>','"',"'",'%','*','.',';','select','update','delete','insert','join'),'', xxx=strreplace(array(′<′,′>′,′"′,"′",′_POST’pic’]);
5.5信息导入模块
信息导入是整个系统智能化的一个风向标,在解决信息批量导入时,需要解决程序如何打开Excel,如何便识Excel表格中的数据,从而进行循环读取和分类操作最后写入数据库。图5.5.1为信息导入页面。图5.5.1信息导入页面
首先是如何打开Excel,因为本系统基于Web,不能直接打开本地文件,所以只能通过http进行文件上传,把文件传入服务器并记录下文件路径最后通过php相关函数进行打开操作。如图5.5.2所示。关于http上传功能我使用的是开源文本编辑器kindeditor提供的文件上传模块,其原理为通过JS读取本地文件,并对文件进行重命名之后提交给PHP程序进行上传并记录下服务器存放路径。
图5.5.2 信息导入模块程序流程图具体代码如下:
其次就是读取指定路径的Excel表格并将其写入数据库,在读取Excel表格时可以通过Excel表格自带的序号和编码进行数据识别,比如A1即时横1竖A数据块。具体实现代码为:
<?php include_once("config/config.php"); require_once 'phpexcel/Classes/PHPExcel.php'; require_once 'phpexcel/Classes/PHPExcel/IOFactory.php'; require_once 'phpexcel/Classes/PHPExcel/Reader/Excel5.php'; if(!empty($_POST['sub'])){ $a="http://localhost".$_POST['ktbg']; $objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format $objPHPExcel = $objReader->load($a); //$filename可以是上传的文件,或者是指定的文件 $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); // 取得总行数 $highestColumn = $sheet->getHighestColumn(); // 取得总列数 $k = 0; .... .... echo $sql="INSERT INTO `students` (`id` ,`username` ,`password` ,`name` ,`sex` ,`phoen` ,`qq` ,`zhuanye` ,`lunwen` ,`daoshi`)VALUES (NULL , '$a', '$b', '$c', '$d', '$e', '$f', '$g', '', '');"; if(mysql_query($sql)){ echo $a."写入成功"; } }} ?>5.6论文选题模块
论文选题模块是论文导入模块的一个延伸,也是本系统的一个关键技术功能,在论文选题之前必须将论文题目、要求、内容和导师信息列出,提供给学生参阅,以便选出最适合自己的题目。在确认选择题目之后,确认信息会推送到相关导师论文管理页面上以供导师确认选题。具体流程如图4.6.1所示。图4.6.1 选题流程
论文列出代码:
... ... $page_len = ($page_len%2)?$page_len:$pagelen+1;//页码个数 $pageoffset = ($page_len-1)/2;//页码个数左右偏移量 ipages}\">最后一页"; //最后一页 }else { $key.="下一页";//下一页 $key.="最后一页"; //最后一页 } $key.=''; ?><td colspan="6"><?php echo $key; ?></td> </tr></table>
序号 题目 导师 状态 操作 论文选题代码:
<?php $sql="select * from `lunwentimu` where `id` = '$id'"; $q=mysql_query($sql); $rs=mysql_fetch_array($q); $rsid=$rs['id']; $tm=$rs['title']; $ds=$rs['daoshi']; ... ...导师确认代码:
<?php $sql="select * from `lunwen` where `id` = '$id'"; $q=mysql_query($sql); $rs=mysql_fetch_array($q); ?>… …
if(!empty($_POST['sub'])){ $name=$_POST['name']; $lxr=$_POST['lxr']; $tell=$_POST['tell']; $phone=$_POST['phone']; $dizhi=$_POST['dizhi']; $email=$_POST['email']; `email` = '$email', `name` = '$name' WHERE `mb_lxfs`.`id` =1"; if(mysql_query($s)){ echo "";}
}
5.7论文上传模块 论文的上传就是文档的上传,是由JS读取本地文件,进行重命名和审核操作之后提交到PHP逻辑页面。当用户合法登录时,就可以实现文档的上传功能,当文档上传成功时PHP逻辑页面会记录下该文件最终路径,并保存于数据库中。 具体逻辑代码如下: <?php $sql="SELECT * FROM `lunwen` ... ... 内容: <?php echo $rs['content']; ?> 要求: s="left_title_2">任务书:
?>图5.8 论文下载流程图
第六章测试
为了检验检测依照本文编写的系统是否达到设计要求,将系统搭建在服务器进行测试,测试环境为win7 64位 旗舰版,Apache2.2 64位,PHP5.5,Mysql7.4,测试工具为360浏览器极速版。
6.1登录功能
打开浏览器,在地址栏输入服务器环回地址http://localhost/,进入系统登录页面,如图6.1.1所示。
图6.1.1 登录界面
输入测试学生账户:1320070319 测试密码:qaz123。登录结果如图6.1.2所示。
图6.1.2 登录成功提示
6.2选题模块
使用测试学生账户登录成功后进入学生管理界面,并选择左侧论文选题栏目,进入选题功能。如图6.2.1所示。
图6.2.1 论文选题列表
在论文列表中选择你认为最适合的论文题目,这里以题目“网上拍卖系统”为例,点击查看进入论文详细介绍页面同样也是论文申请页面。如图6.2.2所示。
图6.2.2 论文选题页面
进入论文选题页面以后可以清楚的看到论文题目、要求、内容、导师以及论文状态,并且可以在线点击“申请论文”按钮即可成功进行选题。
6.3论文及其相关资料上传模块
使用测试学生账户登录成功后进入学生管理界面,并选择左侧论文信息栏目,进入论文信息栏目。如图6.3.1所示。
图6.3.1 论文信息页面
因为开题报告、任务书、论文等信息的上传全部使用同一个类来实现,这里直接测试论文上传。准备好一个论文示例,如图6.3.2所示。
图6.3.2 本地测试上传论文
点击论文上传页面上的上传按钮,系统会弹出上传页面如图6.3.3所示。
图6.3.3 文档上传弹出页面
通过文件选择操作,即可进行上传,上传成功会出现提示,如图6.3.4所示。
图6.3.4 论文上传成功提示
6.4学生信息导入模块
使用管理员测试帐号(账户名:admin密码:admin)登录系统,进入管理员系统页面,系统左侧的学
生信息导入栏目可直接进入导入页面。如图6.4.1所示。图6.4.1 学生信息导入页面
在信息导入时,必须按照系统指定的导入格式进行导入,系统在信息导入页面上方提供了专用格式的示例文件下载,点击“点击下载”即可完成下载。在对下载的示例文件填入学生信息以后,可以直接点击选择文件对资料进行导入操作,导入程序会实时更新导入情况,如图6.4.2所示。
图6.4.2 学生信息导入
因为论文题目导入和导师信息导入都为同一个类来实现的,所以这里便不再过多测试。第七章 总结
基于web的毕业论文管理系统的发展前景着非常广阔,它的发展将对传统的管理模式产生巨大的影响。本文从计算机软件科学的两个重要领域计算机软件技术和数据库技术出发,着重分析了Web数据库以及php编程技术在基于Web的毕业设计管理系统中的应用。本文主要实现了如下功能:
1、探讨了B/S结构和工作原理极其特点,分析了基于B/S结构来构架Web软件的现实。
2、实现web数据库在PHP中使用的方法。
3、完成了基于JS的论文上传和读取功能。
4、实现了论文选题、论文管理、资料上传和批量导入数据库的功能。
通过完成这次毕业设计,我熟练的掌握基于B/S结构的程序开发工具的使用,深刻理解B/S结构对于程序的重要性,并且通过这次毕业设计让我从零到无的感受了一个软件诞生的全过程。而本文设计的论文管理系统对论文管理带来巨大的便利,也使我感觉到深深的自豪。参考文献
[1] 钟立扬 王金江.《如何开发利用高校档案资源建立毕业生就业档案》[J].现代营销,2012,第4期,pp306-307
[2] 方志聪.《西昌学院综合信息管理系统设计与实现》[D].电子科技大学,2009,pp11-12
[3] 訾冉 刘秀伦.《高校思想政治教育网络环境的优化》[J].洛阳师范学院学报,2009,第4期,pp30-32
[4] 董加强.《毕业论文管理系统的研究与开发》[D].电子科技大学,2006,pp30-32
[5] 金春玉 邢泽晶 赵军生.《高校毕业论文全过程管理系统设计》[J].黑龙江教育学院学报,2010,第11期,pp27-28
[6] 夏端峰 何龙.《基于B/S模式的毕业论文管理系统》[J].电脑知识与技术,2014,第13期,pp2919-2922
[7] 乌日其木格 马恒宇.《高校教务管理信息系统运行模式研究》[J].内蒙古师范大学学报(自然科学汉文版),2007,第02期,pp192-194
[8] 郑刚.《基于浏览器/服务器模式的网上教学系统》[J].安徽机电学院学报,2001,第01期,pp58-61
[9] 包子建.《基于B/S模式和JSP技术的教师办公管理系统的设计与实现》[D].华东师范大学,2006,pp01-84
[10] 时黎明.《基于B/S模式的中学图书管理系统的设计与实现》[D].厦门大学,2012,pp01-59
[11] 蒋鑫 陈潇怡.《对高校毕业论文管理系统设计的思考》[J].华人时刊(中旬刊),2014,第1期,pp208
[12] 应颂翔.《基于B/S架构的毕业论文管理信息系统设计》[D].浙江工业大学,2011 pp85
[13] 初雪.《网上选课系统的设计与实现》[D].山东大学,2010 pp59
[14] 李艳爽.《在职研究生信息管理系统的设计与实现》[D].大连理工大学,2009 pp52
[15] 宋燕.《基于ASP技术的本科毕业论文选题系统的设计与开发》[D].曲阜师范大学,2013 pp55
[16] Andi Gutmans.《PHP 5 Power Programming》[M].电子工业出版社,2007 pp01-05
[17] 李东震.《Mysql核心技术手册 第二版 》[M].机械工业出版社,2009 pp08-010
[18] 罗刊.基于WEBGIS的农田信息管理平台(FIMP)设计与实现[D].石河子大学,2010 pp56
[19] 田宸之 徐德新 史顺昌.论计算机数据库系统在信息管理中的应用[J].中国电子商务,2014,第1期pp1
[20] 黄燕云.籽棉收购信息管理系统的研究与开发[D].山东大学,2007 pp67
[21] 蒋磊.综合WEB防护系统的设计与实现[D].同济大学,2009 pp64
[22] 谢栋梁.浅谈SQL注入攻击与防范[J].中国西部科技,2010 ,第2期pp20-21
[23] 鲁扬.NET网站防SQL注入方法研究[J].华人时刊(下旬刊),2013 ,第1期pp1
[24] 谢栋梁.浅谈SQL注入攻击与防范[J].中国西部科技,2010 ,第2期pp20-21
[25] 谢栋梁.浅谈SQL注入攻击与防范[J].中国西部科技,2010 ,第2期pp20-21致 谢
从进入学校时的懵懵懂懂到今天我学会了专业知识,学会了如何去学习,如何去做人。大学的时光是美好的,美好到令人向往,但它也是短暂的,转瞬即逝犹如青春一晃而过。
在大学的最后一个阶段——毕业设计阶段。我首先要感谢我的指导老师。在我进行毕业设计时,她从选题到资料收集,然后是写作、修改、程序设计,到最后的论文定稿,她给了我绝对耐心的指导和无私的帮助。她让我深深的感悟到,一个园丁的艰辛。千万句言谢,千万次感恩和一个心中充满无私奉献和敬业精神的好榜样,这才是这次毕业设计中我最大的收获。谢谢您。
不仅如此,我还要感谢在校期间,我所有的任课老师、同学以及我人生的启蒙老师,王代强老师。是他们教会了我专业的知识,教会了我如何去学习,教会了我如何在逆境中成长,在此向他们表示我由衷的谢意。
由于我的学术水平有限,所写的论文和所设计的毕业设计难免有不足之处,恳请各位老师和学友批评指正。附录一 登录页面代码
登录名:密码:学生 导师 管理员备注:学生用户名默认为学号。基于Web 省心 省力 省时!!!作者:贵州大学 人民武装学院 信息工程系 13计算机科学与技术 杜天龙 201300070319}else if($sf==2){
q u e r y = m y s q l q u e r y ( " S E L E C T ∗ F R O M ‘ d a o s h i ‘ W H E R E ‘ u s e r n a m e ‘ L I K E ′ query=mysql_query("SELECT * FROM `daoshi` WHERE `username` LIKE ' query=mysqlquery("SELECT∗FROM‘daoshi‘WHERE‘username‘LIKE′username’ LIMIT 0 , 30");
r s = m y s q l f e t c h a r r a y ( rs=mysql_fetch_array( rs=mysqlfetcharray(query);
u s = us= us=rs[‘username’];
p w = pw= pw=rs[‘password’];}else if($sf==3){
q u e r y = m y s q l q u e r y ( " S E L E C T ∗ F R O M ‘ a d m i n ‘ W H E R E ‘ u s e r n a m e ‘ L I K E ′ query=mysql_query("SELECT * FROM `admin` WHERE `username` LIKE ' query=mysqlquery("SELECT∗FROM‘admin‘WHERE‘username‘LIKE′username’ LIMIT 0 , 30");
r s = m y s q l f e t c h a r r a y ( rs=mysql_fetch_array( rs=mysqlfetcharray(query);
u s = us= us=rs[‘username’];
p w = pw= pw=rs[‘password’];
}if($username==null || p a s s w o r d = = n u l l ) e c h o " < s c r i p t > a l e r t ( ′ 请填写完 整 ′ ) ; l o c a t i o n . h r e f = ′ i n d e x . h t m l ′ < / s c r i p t > " ; e l s e i f ( password==null){ echo "<script>alert('请填写完整');location.href='index.html'</script>"; }else if( password==null)echo"<script>alert(′请填写完整′);location.href=′index.html′</script>";elseif(us<>$username || p w m d 5 < > pwmd5<> pwmd5<>pw){
<?php if (!defined('PHPEXCEL_ROOT')) { define('PHPEXCEL_ROOT', dirname(__FILE__) . '/'); require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php')} class PHPExcel{ private $_uniqueID; private $_properties; private $_security; private $_workSheetCollection = array(); private $_calculationEngine = NULL; private $_activeSheetIndex = 0; private $_namedRanges = array(); private $_cellXfSupervisor; private $_cellXfCollection = array(); private $_cellStyleXfCollection = array(); private $_hasMacros = FALSE; private $_macrosCode=NULL; private $_macrosCertificate=NULL; private $_ribbonXMLData=NULL; private $_ribbonBinObjects=NULL; public function hasMacros(){ return $this->_hasMacros;} public function setHasMacros($hasMacros=false){ $this->_hasMacros=(bool)$hasMacros;} public function setMacrosCode($MacrosCode){ $this->_macrosCode=$MacrosCode; $this->setHasMacros(!is_null($MacrosCode));} public function getMacrosCode(){ return $this->_macrosCode;} public function setMacrosCertificate($Certificate=NULL){ $this->_macrosCertificate=$Certificate;} public function hasMacrosCertificate(){ return !is_null($this->_macrosCertificate);} public function getMacrosCertificate(){ return $this->_macrosCertificate; } public function discardMacros(){ $this->_hasMacros=false; $this->_macrosCode=NULL; $this->_macrosCertificate=NULL;} public function setRibbonXMLData($Target=NULL, $XMLData=NULL){ if(!is_null($Target) && !is_null($XMLData)){ $this->_ribbonXMLData=array('target'=>$Target, 'data'=>$XMLData);}else{ $this->_ribbonXMLData=NULL;}} public function getRibbonXMLData($What='all'){//we need some constants here... $ReturnData=NULL; $What=strtolower($What); switch($What){ case 'all': $ReturnData=$this->_ribbonXMLData; break; case 'target': case 'data': if(is_array($this->_ribbonXMLData) && array_key_exists($What,$this->_ribbonXMLData)){ $ReturnData=$this->_ribbonXMLData[$What]; }//else $ReturnData stay at nullbreak; }//default: $ReturnData at null return $ReturnData;} public function setRibbonBinObjects($BinObjectsNames=NULL, $BinObjectsData=NULL){ if(!is_null($BinObjectsNames) && !is_null($BinObjectsData)){ $this->_ribbonBinObjects=array('names'=>$BinObjectsNames, 'data'=>$BinObjectsData); }else{ $this->_ribbonBinObjects=NULL;}} private function _getExtensionOnly($ThePath){ return pathinfo($ThePath, PATHINFO_EXTENSION);} public function getRibbonBinObjects($What='all'){ $ReturnData=NULL; $What=strtolower($What); switch($What){ case 'all': return $this->_ribbonBinObjects; break; case 'names': case 'data': if(is_array($this->_ribbonBinObjects) && array_key_exists($What, $this->_ribbonBinObjects)){ $ReturnData=$this->_ribbonBinObjects[$What]; } break; case 'types': if(is_array($this->_ribbonBinObjects) && array_key_exists('data', $this->_ribbonBinObjects) && is_array($this->_ribbonBinObjects['data'])){ $tmpTypes=array_keys($this->_ribbonBinObjects['data']); $ReturnData=array_unique(array_map(array($this,'_getExtensionOnly'), $tmpTypes)); }else $ReturnData=array();//the caller want an array... not null if empty break;} return $ReturnData;} public function hasRibbon(){ return !is_null($this->_ribbonXMLData);} public function hasRibbonBinObjects(){ return !is_null($this->_ribbonBinObjects);} public function sheetCodeNameExists($pSheetCodeName) { return ($this->getSheetByCodeName($pSheetCodeName) !== NULL); } public function getSheetByCodeName($pName = '') { $worksheetCount = count($this->_workSheetCollection); for ($i = 0; $i < $worksheetCount; ++$i) { if ($this->_workSheetCollection[$i]->getCodeName() == $pName) { return $this->_workSheetCollection[$i]; } } return null; } public function __construct() { $this->_uniqueID = uniqid(); $this->_calculationEngine = PHPExcel_Calculation::getInstance($this); $this->_workSheetCollection = array(); $this->_workSheetCollection[] = new PHPExcel_Worksheet($this); $this->_activeSheetIndex = 0; $this->_properties = new PHPExcel_DocumentProperties(); $this->_security = new PHPExcel_DocumentSecurity(); $this->_namedRanges = array(); $this->_cellXfSupervisor = new PHPExcel_Style(true); $this->_cellXfSupervisor->bindParent($this); $this->addCellXf(new PHPExcel_Style); $this->addCellStyleXf(new PHPExcel_Style); } public function __destruct() { PHPExcel_Calculation::unsetInstance($this); $this->disconnectWorksheets(); } public function disconnectWorksheets() { $worksheet = NULL; foreach($this->_workSheetCollection as $k => &$worksheet) { $worksheet->disconnectCells(); $this->_workSheetCollection[$k] = null; } unset($worksheet); $this->_workSheetCollection = array(); } public function getCalculationEngine() {return $this->_calculationEngine;} // function getCellCacheController() public function getProperties() { return $this->_properties;} public function setProperties(PHPExcel_DocumentProperties $pValue) { $this->_properties = $pValue; } public function getSecurity(){ return $this->_security; public function setSecurity(PHPExcel_DocumentSecurity $pValue) public function getID() { return $this->_uniqueID; } } 附录三 论文上传代码 <?php <?php ?>
echo “”;
}
?>
附录二 信息导入代码
//信息导入类 PHPExcl.php温馨提示: 请按示例文档格式要求进行上传。示例文档下载 : 点击下载 导入文件: 提交: $objPHPExcel = o b j R e a d e r − > l o a d ( objReader->load( objReader−>load(a); //$filename可以是上传的文件,或者是指定的文件
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
k = 0 ; / / 循环读取 e x c e l 文件 , 读取一条 , 插入一条 f o r ( k = 0; //循环读取excel文件,读取一条,插入一条 for( k=0;//循环读取excel文件,读取一条,插入一条for(j=2; j < = j<= j<=highestRow;$j++)
{
echo $a = o b j P H P E x c e l − > g e t A c t i v e S h e e t ( ) − > g e t C e l l ( " A " . objPHPExcel->getActiveSheet()->getCell("A". objPHPExcel−>getActiveSheet()−>getCell("A".j)->getValue();//获取A列的值
$b = o b j P H P E x c e l − > g e t A c t i v e S h e e t ( ) − > g e t C e l l ( " B " . objPHPExcel->getActiveSheet()->getCell("B". objPHPExcel−>getActiveSheet()−>getCell("B".j)->getValue();//获取B列的值
$c = o b j P H P E x c e l − > g e t A c t i v e S h e e t ( ) − > g e t C e l l ( " C " . objPHPExcel->getActiveSheet()->getCell("C". objPHPExcel−>getActiveSheet()−>getCell("C".j)->getValue();//获取B列的值
$d = o b j P H P E x c e l − > g e t A c t i v e S h e e t ( ) − > g e t C e l l ( " D " . objPHPExcel->getActiveSheet()->getCell("D". objPHPExcel−>getActiveSheet()−>getCell("D".j)->getValue();//获取A列的值
$e = o b j P H P E x c e l − > g e t A c t i v e S h e e t ( ) − > g e t C e l l ( " E " . objPHPExcel->getActiveSheet()->getCell("E". objPHPExcel−>getActiveSheet()−>getCell("E".j)->getValue();//获取B列的值
$f = o b j P H P E x c e l − > g e t A c t i v e S h e e t ( ) − > g e t C e l l ( " F " . objPHPExcel->getActiveSheet()->getCell("F". objPHPExcel−>getActiveSheet()−>getCell("F".j)->getValue();//获取B列的值
$g = o b j P H P E x c e l − > g e t A c t i v e S h e e t ( ) − > g e t C e l l ( " G " . objPHPExcel->getActiveSheet()->getCell("G". objPHPExcel−>getActiveSheet()−>getCell("G".j)->getValue();//获取B列的值
// s q l = " I N S E R T I N T O t a b l e V A L U E S ( " . sql = "INSERT INTO table VALUES(". sql="INSERTINTOtableVALUES(".a.“,”. b . " ) " ; / / m y s q l q u e r y ( b.")"; // mysql_query( b.")";//mysqlquery(sql);
echo s q l = " I N S E R T I N T O ‘ s t u d e n t s ‘ ( ‘ i d ‘ , ‘ u s e r n a m e ‘ , ‘ p a s s w o r d ‘ , ‘ n a m e ‘ , ‘ s e x ‘ , ‘ p h o e n ‘ , ‘ q q ‘ , ‘ z h u a n y e ‘ , ‘ l u n w e n ‘ , ‘ d a o s h i ‘ ) V A L U E S ( N U L L , ′ sql="INSERT INTO `students` (`id` ,`username` ,`password` ,`name` ,`sex` ,`phoen` ,`qq` ,`zhuanye` ,`lunwen` ,`daoshi`)VALUES (NULL , ' sql="INSERTINTO‘students‘(‘id‘,‘username‘,‘password‘,‘name‘,‘sex‘,‘phoen‘,‘qq‘,‘zhuanye‘,‘lunwen‘,‘daoshi‘)VALUES(NULL,′a’, ‘ b ′ , ′ b', ' b′,′c’, ‘ d ′ , ′ d', ' d′,′e’, ‘ f ′ , ′ f', ' f′,′g’, ‘’, ‘’);";
if(mysql_query($sql)){
echo $a.“写入成功”;} }}?>