毕业设计管理系统设计说明书Word文档格式.docx
《毕业设计管理系统设计说明书Word文档格式.docx》由会员分享,可在线阅读,更多相关《毕业设计管理系统设计说明书Word文档格式.docx(42页珍藏版)》请在冰豆网上搜索。
![毕业设计管理系统设计说明书Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/22/b5edb545-d055-4846-a7d1-a6c86f771f75/b5edb545-d055-4846-a7d1-a6c86f771f751.gif)
现在国内外也有很多毕业论文选题的软件,采用的技术也是多种多样,如基于JSP、FTP模式,但大多数毕业论文选题主要用于网络学院的远程教学。
至于校园内的正规教学,利用毕业论文选题组织管理教学活动的并不多。
针对国内外对教学管理软件的巨大需要和基本需要,一个好的教学管理软件,必须功能齐全,操作简便,向用户展示友善的操作界面。
在完善功能的同时又必须兼顾系统的灵活性,安全性,健壮性。
一个好的教学管理系统,不管是计算机专业人员还是其他用户都能很快上手,操作简单,便于安装,容易普及。
1.2毕业论文管理系统的优势
由于学校教学功能的特殊定位,致使教师和学生必须在除了简单的师生区别外,还有合作意味的关系。
学生上交毕业设计和老师批改毕业设计,这本身除了学习交流外,还是一个合作的概念。
所以,这其中的信息管理流程,需要以一个规范的MIS来管理。
毕业论文管理系统的优势主要表现在三个方面:
1、毕业设计无纸化,环保又方便。
传统的毕业设计上交方式,都是经由学生科目代表统一收齐后,交到教师办公室,然后教师抽取一个整段的时间,或是若干分时间段,一份一份地手工翻阅批改,然后再做好相关记录。
这种传统的方式,一是会有很大的体力消耗,二是在精力上也是不小的付出,而且这种辛苦在很多时候往往没能得到满意的回复。
而无纸化毕业设计,只需在电脑前点点鼠标,在体力上几乎没有多大的消耗,而且在环保、效率、针对性教学指导方面做得要比传统的毕业论文选题科学得多。
2、科学管理,安全可靠。
传统的毕业论文选题方式,都是一份份独立的毕业设计,一个学生对应一份,而这么一撂的设计,经常会由于各种原因,丢失或是污损,给毕业论文选题和教学进程带来很大的麻烦和不便。
而毕业论文选题的动作,只需做好系统数据库的保护,以上问题可以迎刃而解了。
3、简化工作,促进其他方面的综合发展。
由于毕业论文选题的介入运行,可以使教师腾出更多的时间,做更多针对性的个性化教学服务,从而使每个学生都有机会在学业上有更大的进步。
1.3系统流程图
图1-1系统流程图
1.4层次结构图
图1-2学生层次结构图
图1-3教师层次结构图
图1-4评审人层次结构图
图1-5管理员层次结构图
1.5数据流程图
图1-6系统数据流图
1.5数据字典
主要的数据字典:
表1-1管理员信息数据字典
名字:
管理员信息
别名:
administrator
描述:
管理员的相关信息
定义:
管理员信息=管理员id+管理员name+管理员password
位置:
存于数据库
表1-2教师信息数据字典
教师信息
teacher
教师的相关信息
教师信息=教师id+教师密码+教师姓名+教师职称+教师性别+教师工作地点+教师QQ+教师电话
表1-3学生信息数据字典
学生信息
student
学生的相关信息
学生信息=学生id+学生姓名+学生性别+学生系别+学生专业+学生年级+学生班级+学生成绩+学生电话+学生密码
表1-4课题信息数据字典
课题信息
topic
课题的相关信息
课题信息=课题id+课题名+出题教师+课题类别+所属专业+需求人数+课题要求+课题内容
表1-5学生选题数据字典
学生选题信息
choosetopic
学生和已选的课题的对应关系
学生选题信息=学生id+课题id
存于数据库,在选题时应用
表1-6管理员分配答辩老师数据字典
管理员分配答辩老师
answer
管理员为每一个课题分配5位答辩老师,其中一名为答辩组长。
管理员分配答辩老师=答辩题目id+答辩题目+答辩组长+答辩老师1+答辩老师2+答辩老师3+答辩老师4+答辩时间+答辩教室
存于数据库,在答辩时应用
表1-7学生成绩信息数据字典
学生成绩信息
score
学生成绩的相关信息
学生成绩信息=成绩id+学生名字+实习成绩+指导成绩+评阅成绩+答辩成绩
存于数据库,在归档时应用
二、概念结构设计
2.1系统E-R图
本系统涉及的实体主要由管理员、教师、学生、课题组成,主要有监督、出题、审题、选题等几个关系。
各实体属性和关系图如下图所示。
图2-1系统E-R图
三、逻辑结构设计
3.1各个表的结构
表3-1教师表(T_teacher)
序号
列号
数据类型
长度
小数
标识
主键
允许空
默认值
示意
说明
1
Tid
int
20
是
否
教工号
2
Tname
vachar
姓名
3
Tpassword
varchar
32
密码
MD5加密
表3-2教师详细信息表(T_teadetail)
Int
外键(T_teacher:
:
Tid)
Vachar
Tsex
char
性别
4
Schid
tinyint
学院号
外键(T_schools:
Schid)
5
Tphone
bigint
电话
6
Tqq
qq
7
Tmail
50
邮箱
8
Tworkplace
30
办公地点
9
Ttitle
10
职称
表3-3毕设题目表(T_topic)
Topid
题目编号
Topname
题目名称
Topproperty
题目性质
理论研究,生产实践,科学实验
Toptype
题目类型
工程设计型,工程技术型,实验研究型,软件开发型
Topsource
题目来源
Topcontent
text
题目内容
Toptime
datetime
getdate()
发布日期
Topselect
bit
是否已被选
1为是;
0为否
教师编号
表3-4毕设题目临时表(T_temptopictb)
上报日期
Rid
评审编号
外键(T_reviewer:
Rid)
表3-5系(专业)表(T_faculties)
Fid
系编号
Fname
系名称
表3-6-学院表(T_schools)
学院编号
Schname
学院名称
四、系统实现
4.1建立数据库
数据库采用SqlServer2008,数据库名称为GPMS。
4.1.1数据库创建流程
数据库创建流程如下:
图4.1.1数据库创建流程
4.1.2数据库关系
数据库关系图如下:
图4.1.2数据库关系图
4.2程序设计
4.2.1工程目录结构
4.2.2核心技术说明
1、J2EE中重量级框架
我们采用JavaServlet+JavaServerPages(JSP)+EnterpriseJavaBean(EJB)的J2EE中重量级框架,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境。
2、DAO(数据库接口层)的封装
在核心J2EE模式中是这样介绍DAO模式的:
为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。
用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。
在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
我们采用DAO的思想,将所有对数据源数据库的访问操作抽象封装在几个接口类中,使事务界限更加清晰,分离了业务逻辑和数据库基础操作,代码结构也看起来非常清晰。
还有一个好处是,数据库的修改只要修改DAO层的访问方式就可以了,不用整个项目都进行修改。
3、Ajax技术异步刷新
传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。
服务器接收并处理传来的表单,然后返回一个新的网页。
这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码往往是相同的。
由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。
这导致了用户界面的响应比本地应用慢得多。
与此不同,AJAX应用可以仅向服务器发送并取回必需的数据(而不是返回整个页面,只是把从服务器端上取出的数据填充到div或span层上去而已,实现无刷新的效果),它使用SOAP或其它一些基于XML的webservice接口,并在客户端采用JavaScript处理来自服务器的响应。
因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。
同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。
这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。
Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
4、数据库连接池
在传统的两层结构中,客户端程序在启动时打开数据库连接,在退出程序时关闭数据库连接。
这样,在整个程序运行中,每个客户端始终占用一个数据库连接,即使在大量没有数据库操作的空闲时间,如用户输入数据时,从而造成数据库连接的使用效率低下。
在三层结构模式中,数据库连接通过中间层的连接池管理。
只有当用户真正需要进行数据库操作时,中间层才从连接池申请一个连接,数据库操作完毕,连接立即释放到连接池中,以供其他用户使用。
这样,不仅大大提高了数据库连接的使用效率,使得大量用户可以共享较少的数据库连接,而且省去了建立连接的时间。
我们以Tomcat7数据库连接池配置sqlserver2008。
TomcatJDBC连接池提供对多种数据库的支持。
前提要修改tomcat服务器目录下面的conf中的Context.xml配置文件和程序中的Web.xml文件,代码中以如下方式实现:
Context
c
=
new
InitialContext();
DataSource
ds
(DataSource)c.lookup("
java:
comp/env/jdbc/books"
);
conn
ds.getConnection();
5、动态页面的实现(CSS+动态js脚本)
JS的作用是制作动.态网页效果等,是提高用户体验的利器!
而CSS是定义网页样式,让网页元素更好的表现给用户,好的的网页表现形式也能提高用户体验!
js可以使网页的功能更加丰富,给网页添加更多实时的、动态的、交互的内容。
当服务端需要对数据进行验证时,使用javascript可以在客户端验证数据,不需要把数据传到服务器端再传回来,比较节省时间。
你可以把网页里的内容隐藏起来,然后当鼠标放到某个地方的时候把隐藏的内容显示出来,就像这个页面右上角的”我的知道“那个菜单做的事情。
网页里的下拉菜单基本上都使用js完成。
当你查看表格的时候,表格的内容很多,你可以使用js给每一行数据设置不同的颜色以示区分,也可以用js完成鼠标指到表格上表格就变色的功能。
6、批量信息图表统计
程序以javascript实现将数据库中动态数据以图表形式显示在页面上,利用ajax将实现更好的用户体验。
这样做减轻了服务端的压力。
不过,这种方式的确定是客户端变得庞大。
而且其实现原理很复杂,基本是div实现点阵字原理(一点点画上去的)来实现的。
效率就显得不够快。
和原来用jfreechart比较,感觉jfreechart不好的地方是他总是先生成图。
然后利用src来显示,其效率也不怎么高。
不过服务器好的话,客户端就轻松。
7、中文字符串相似度检测的实现
Levenshtein距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。
许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫LevenshteinDistance算法。
在程序中,为实现题目相似度匹配功能,我采用了LevenshteinDistance算法和最长公共子序列算法LCS(LongestCommonSubsequence)相结合的方式,计算预上报题目名称和已发布题目的相似百分度。
经过大量数据测试,发现计算结果大于60%题目存在较为明显的相似,故将结果定为相似度大于60%无法上报。
核心代码如下:
//LCSalgorithm最长公共子序列算法
privatestaticintlongestCommonSubstringLength(StringS1,StringS2){
returnlongestCommonSubstrings(S1,S2,0).toString().length();
}
privatestaticCollection<
String>
longestCommonSubstrings(StringS1,StringS2,intminimumLength){
Collection<
Integer>
indexes=newArrayList<
();
intMax=minimumLength;
for(inti=0;
i<
S1.length();
i++){
for(intj=0;
j<
S2.length();
j++){
intx=0;
inty=Math.min(S1.length()-i,S2.length()-j);
while(x<
y&
&
(S1.charAt(i+x)==S2.charAt(j+x))){
x++;
if(x>
Max){
Max=x;
indexes=newArrayList<
indexes.add(i);
}elseif(x==Max){
results=newHashSet<
for(Integeri:
indexes){
results.add(S1.substring(i,(i+Max)));
returnresults;
//LevenshteinDistance算法实现
publicstaticdoublegetEditDistance(Strings,Stringt){
intd[][];
//matrix
intn;
//lengthofs
intm;
//lengthoft
inti;
//iteratesthroughs
intj;
//iteratesthrought
chars_i;
//ithcharacterofs
chart_j;
//jthcharacteroft
intcost;
//cost
intdistance;
//editdistance
doublesimilarity;
//Step1
n=s.length();
m=t.length();
Stringss=s+s;
intlen=longestCommonSubstringLength(ss,t);
if(len>
s.length())len=s.length();
len*=2;
//Prevent100%similaritybetweenastringandits
//cyclicallyshiftedversion(e.g."
aircon"
and"
conair"
)
if(len==s.length()+t.length()&
s.length()==t.length()){
len--;
similarity=len/((s.length()+t.length())*1.0)*100;
returnsimilarity;
}else{
if(n==0){
returnm;
}
if(m==0){
returnn;
d=newint[n+1][m+1];
//Step2
for(i=0;
=n;
i++){
d[i][0]=i;
for(j=0;
=m;
j++){
d[0][j]=j;
//Step3
for(i=1;
s_i=s.charAt(i-1);
//Step4
for(j=1;
t_j=t.charAt(j-1);
//Step5
if(s_i==t_j){
cost=0;
}else{
cost=1;
//Step6
d[i][j]=Minimum(d[i-1][j]+1,d[i][j-1]+1,
d[i-1][j-1]+cost);
distance=d[n][m];
similarity=(1-distance/((s.length()+t.length())*1.0))*100;
re