基于JavaWeb的文献管理系统设计与实现

article/2025/10/20 19:15:25

目 录

摘 要 I
Abstract II
第1章 绪 论 1
1.1 课题研究背景和意义 1
1.2 国内外研究现状 1
1.2.1 国内研究现状 1
1.2.2 国外研究现状 2
1.3 论文研究内容 3
1.4 本文结构 3
第2章 相关技术 4
2.1 JSP技术简介 4
2.2 SQL Server数据库技术简介 5
2.3 JDBC 技术简介 6
2.4 B/S模式分析 7
2.5 JCOM 相关技术 9
2.6 POI 相关技术 10
2.7 PDFbox 相关技术 10
2.8 SWFTools 相关技术 11
2.9 JavaScript相关技术 11
第3章 需求分析 12
3.1 系统需求总述 12
3.2 功能性需求分析 12
3.2.1 用户管理 12
3.2.2 文献管理 14
3.2.3文献浏览 14
3.3 非功能需求分析 15
3.3.1 硬件环境 15
3.3.2 软件环境 16
3.3.3 界面需求 16
3.3.4 响应时间需求 17
3.3.5 经济可行性 17
3.3.6 操作可行性 17
3.3.7 法律可行性 17
3.3.8 系统安全性需求 17
3.4 本章小结 18
第4章 系统设计 19
4.1 概要设计 19
4.1.1 体系结构的设计 19
4.1.2 系统层次结构 19
4.2 详细设计 21
4.2.1 系统功能模块图 21
4.2.2 用户管理 21
4.2.3 文献管理 23
4.2.4 文献浏览 25
4.2.5 数据存储设计 27
4.3 本章小结 29
第5章 系统实现 30
5.1 模块功能的具体实现 30
5.1.1 用户管理模块 30
5.1.2 文献管理模块 31
5.1.3 文献浏览模块 33
5.2 主要技术难题及解决方案 36
5.2.1 在线浏览问题 36
5.2.2 word文件与PDF文件内容的检索 38
5.2.3 下载文件文件名中文显示问题 39
5.3 本章小结 40
第6章 系统测试 41
6.1 功能性测试 41
6.1.1 系统登录模块 41
6.1.2 用户管理模块 41
6.1.3 文献管理模块 42
6.1.4 文献浏览模块 43
6.2 非功能测试 44
6.2.1 GUI测试 44
6.2.2 性能测试 44
6.2.3 安全性测试 44
第7章 总结与展望 45
7.1 结论 45
7.2 展望 45
参考文献 46
致谢 47
第3章 需求分析
3.1 系统需求总述
典型的文档、文献管理系统应满足如下的基本需求:
能够处理大量的复合文档型的数据信息,一般认为,关系数据库对于非结构化数据的表示和存储存在一定的困难,而文献管理系统中的信息载体大多是以不可修改的文档形式出现,因此文献管理系统必须解决利用关系数据库存储复合文档信息的问题。
系统主要针对需要经常阅读大量文献的人员,如科研人员,企业的技术人员、学者等,他们所涉及的领域通常要分类很细,所以需要阅读的文献数量是大量的,由于数量的问题,使得文献的分类就成为一个大问题,这就需要文献综合起来管理
支持移动办公在日常的工作中,因为我们要在不同的地方进行文献的查看,而且随着网络技术的发展,学术研究打破了时间、地域的限制,使人们能够随时随地参与到学术研究、企业办公过程中来,大大提高工作的效率和方便性。
保证文档机密能够使得工作和存储的文档更加的安全,避免企业因为文档的丢失、内容的泄漏等安全原因造成不可避免的经济损失。
文献检索功能对存储的文档进行多条件的模糊检索,包括标题检索,关键词检索,全文检索,所有者检索,时间检索等多种检索手段。
3.2 功能性需求分析
3.2.1 用户管理
用户管理所完成的功能为:对文档管理系统的用户进行管理。
用户包括了三种用户类别。即系统管理员(三级用户)、文献管理员(二级用户)和普通用户(一级用户)。
系统管理员是属于系统自带用户的,拥有最高权限。可以进行系统的各类权限分配和数据维护,主要给每一个普通用户统一分配相应的系统使用权限,并实时维护系统数据,但对于文档数据也可以操作,但不是其主要职责。
文献管理员是专门对文献进行管理的角色,它是一种部门级别的角色,每个部门都拥有这样一个角色,来管理部门的文献,它是由系统管理员分配的。
普通用户是由系统管理员分配的,普通用户具有权限范围内的信息浏览和检索的权限。
系统初始化时只有系统管理员,通过系统管理员来建立其他用户。系统管理员可以建立低于自己用户类别的用户。新建用户时输入用户的相关的属性信息,选择用户的类别,分配用户的角色,可以保存、删除、修改、注册新建的用户。
对于已经注册的用户,系统管理员可以修改低于自己用户类别的用户信息,可以删除,禁止低于自己用户类别的用户,恢复已禁用同类别的用户。当前用户可以更改自己的相关的用户信息。
用户类别的高低为:系统管理员(三级用户)>文献管理员(二级用户)>普通用户(一级用户)。系统管理员的类别是最高,它可以对普通用户进行管理,普通用户只能对自己进行管理。用户同时只能属于一种用户类别。一个用户不能同时是文献管理员,系统管理员,普通用户中的两个。
对于用户管理的需求分析,得到图3.1的用户管理用例图。
在这里插入图片描述

图3.1系统管理员用例

3.2.2 文献管理
文献管理所完成的功能为:文献管理员对文献信息的管理。
主要包括:文献分类的管理和文献信息的管理。文献分类的管理包括添加文献分类,修改文献分类和删除文献分类等基本功能。文献信息管理则包括上传新文献并填写其题目、分类详细信息,修改已上传的文献详细信息,删除已上传的文献信息和其已上传的文件等功能。
对于文献管理的需求分析,得到图3.2的文献管理用例图。
在这里插入图片描述

图3.2文献管理员用例
4.2 详细设计
4.2.1 系统功能模块图
本系统的系统功能模块如图4.3所示。分为用户管理、文献管理和文献浏览三个大模块。每个模块下有若干子模块。本文转载自http://www.biyezuopin.vip/onews.asp?id=13102系统以各个模块为单位进行设计。
在这里插入图片描述

图4.3 系统的功能模块
4.2.2 用户管理
用户管理主要完成用户的增加,修改,删除等操作。在Web层中,给出了新建用户信息,修改用户信息,用户列表等界面显示实现代码。在业务逻辑中,定义了用户类的各种方法,在数据访问层,定义了和数据库进行用户信息存取的各种方法。这里,给出增加新用户的序列图,如图4.4所示。
在这里插入图片描述

package com.util;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;import jp.ne.so_net.ga2.no_ji.jcom.IDispatch;
import jp.ne.so_net.ga2.no_ji.jcom.ReleaseManager;/*** doc docx格式转换* * @author Administrator* */
public class DocConverter {private static final int environment = 1;// 环境 1:windows 2:linux// (只涉及pdf2swf路径问题)private String fileString;private String outputPath = "\\pic";// 输入路径 ,如果不设置就输出在默认的位置private String fileName;private String type;private File pdfFile;private File swfFile;private File docFile;private File textFile;private File file;final static int BUFFER_SIZE = 1024*1024; 
//SWFTools的环境安装路径  public static String SWFTOOLS_PATH="F:"+File.separator+"毕设"+File.separator+"SWFTools"+File.separator;  //播放器样式文件rfxview.swf的路径  public static String RFXVIEW_SWF_PATH="F:"+File.separator+"毕设"+File.separator+"SWFTools"+File.separator+"rfxview.swf";public DocConverter(String fileString) {ini(fileString);}/*** 重新设置file* * @param fileString*/public void setFile(String fileString) {ini(fileString);}/*** 初始化* * @param fileString*/private void ini(String fileString) {this.fileString = fileString;file = new File(fileString);type = fileString.substring(fileString.lastIndexOf(".")+1,fileString.length());type = type.toLowerCase();fileName = fileString.substring(0, fileString.lastIndexOf("."));if(type.equals("doc")||type.equals("docx")||type.equals("txt")){docFile = new File(fileString);}//if(type == "text")//  textFile = new File(fileString);pdfFile = new File(fileName + ".pdf");swfFile = new File(fileName + ".swf");}/*** 转为PDF* * @param file*/private void doc2pdf() throws Exception {ReleaseManager rm = null; IDispatch app = null; try { rm=new ReleaseManager(); app = new IDispatch(rm, "PDFMakerAPI.PDFMakerApp"); app.method("CreatePDF",new Object[]{docFile.getPath(),pdfFile.getPath()});} catch (Exception e) { throw e; } finally { try { app=null; rm.release(); rm = null; } catch (Exception e) { throw e; } } }/*** 转换成 swf*/private void pdf2swf() throws Exception {Runtime r = Runtime.getRuntime();if (!swfFile.exists()) {if (pdfFile.exists()) {if (environment == 1) {// windows环境处理try {
//      Process p = r.exec("F:\\毕设\\SWFTools\\pdf2swf.exe "
//        + pdfFile.getPath() + " -o "
//        + swfFile.getPath());String[] envp = new String[1];       envp[0] = "PATH="+SWFTOOLS_PATH;       String command = "cmd /c \""+SWFTOOLS_PATH+"pdf2swf\" -z -s flashversion=9 " + pdfFile.getPath() + " -o " + swfFile.getPath() ;       Process p = Runtime.getRuntime().exec(command, envp);       BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(p.getInputStream()));       while (bufferedReader.readLine() != null) {       }       try {       p.waitFor();       } catch (InterruptedException e) {       e.printStackTrace();       }       command =  "cmd /c \""+SWFTOOLS_PATH+"swfcombine\" "+RFXVIEW_SWF_PATH+" viewport=" + swfFile.getPath() + " -o " + swfFile.getPath();       p = Runtime.getRuntime().exec(command, envp);bufferedReader = new BufferedReader( new InputStreamReader(p.getInputStream()));       while (bufferedReader.readLine() != null) {       }       try {       p.waitFor();       } catch (InterruptedException e) {       e.printStackTrace();       } System.out.print(loadStream(p.getInputStream()));System.err.print(loadStream(p.getErrorStream()));System.out.print(loadStream(p.getInputStream()));if(swfFile.exists())System.err.println("****swf转换成功,文件输出:"+ swfFile.getPath() + "****");elseSystem.err.println("****swf转换失败****");if (pdfFile.exists()&&(type.equals("doc")||type.equals("docx")||type.equals("txt"))) {pdfFile.delete();}} catch (IOException e) {e.printStackTrace();throw e;}} else if (environment == 2) {// linux环境处理try {Process p = r.exec("pdf2swf " + pdfFile.getPath()+ " -o " + swfFile.getPath() + " -T 9");System.out.print(loadStream(p.getInputStream()));System.err.print(loadStream(p.getErrorStream()));if(swfFile.exists())System.err.println("****swf转换成功,文件输出:"+ swfFile.getPath() + "****");elseSystem.err.println("****swf转换失败****");if (pdfFile.exists()&&(type.equals("doc")||type.equals("docx")||type.equals("txt"))) {pdfFile.delete();}} catch (Exception e) {e.printStackTrace();throw e;}}} else {System.out.println("****pdf不存在,无法转换****");}} else {System.out.println("****swf已经存在不需要转换****");}}static String loadStream(InputStream in) throws IOException {int ptr = 0;in = new BufferedInputStream(in);StringBuffer buffer = new StringBuffer();while ((ptr = in.read()) != -1) {buffer.append((char) ptr);}return buffer.toString();}/*** 转换主方法*/public boolean conver() {/*if (swfFile.exists()) {System.out.println("****swf转换器开始工作,该文件已经转换为swf****");return true;}*/if (environment == 1) {System.out.println("****swf转换器开始工作,当前设置运行环境windows****");} else {System.out.println("****swf转换器开始工作,当前设置运行环境linux****");}if (swfFile.exists()) {System.out.println("****swf已经存在不需要转换****");return true;}try {if(type.equals("doc")||type.equals("docx")||type.equals("txt"))doc2pdf();pdf2swf();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}if (swfFile.exists()) {return true;} else {return false;}}/*** 返回文件路径* * @param s*/public String getswfPath() {if (swfFile.exists()) {String tempString = swfFile.getPath();tempString = tempString.replaceAll("\\\\", "/");return tempString;} else {return "";}}public String fileToString() throws Exception{ FileInputStream in=new FileInputStream(file);if(getFileType().equals("doc")){WordExtractor extractor = new WordExtractor(in); String text2003 = extractor.getText(); text2003 = text2003.replace(" ", "");return text2003;}else if(getFileType().equals("docx")){OPCPackage opcPackage = POIXMLDocument.openPackage(fileString);  POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);  String text2007 = extractor.getText(); text2007 = text2007.replace(" ", "");return text2007;}else if(getFileType().equals("pdf")){PDDocument doc=PDDocument.load(fileString); PDFTextStripper stripper=new PDFTextStripper(); String textPdf = stripper.getText(doc);textPdf = textPdf.replace(" ", "");doc.close();return textPdf;}else{ByteArrayOutputStream outStream = new ByteArrayOutputStream();  byte[] data = new byte[BUFFER_SIZE];  int count = -1;  while((count = in.read(data,0,BUFFER_SIZE)) != -1)  outStream.write(data, 0, count);  data = null; String text =new String(outStream.toByteArray(),"GB2312");outStream.close();return text;  }}  
// public String InputStreamToString(InputStream is) throws IOException { 
//	 	if (is != null) { 
//	 		StringBuilder sb = new StringBuilder(); 
//	 		String line; 
//
//	 		try { 
//		 			BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
//		 			while ((line = reader.readLine()) != null) { 
//		 				sb.append(line).append("\n"); 
//		 			} 
//	 		} finally { 
//	 			is.close(); 
//	 		} 
//	 		return sb.toString(); 
//	 	} else { 
//	 		return ""; 
//	 	} 
// 	}
public boolean findText(String text) throws Exception{try {String fText =fileToString();for(int t=0;t<fText.length()-text.length();t++){if(fText.regionMatches(true,t,text,0,text.length())==true)return true;}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} return false;}public String getRealName() {String realName = fileName.substring(fileName.lastIndexOf("\\")+1,fileName.lastIndexOf("\\")+13);return realName;}public String getFileType() {return type;}/*** 设置输出路径*/public void setOutputPath(String outputPath) {this.outputPath = outputPath;if (!outputPath.equals("")) {char t = outputPath.charAt(outputPath.length()-1);if (outputPath.charAt(outputPath.length()-1) == '\\') {swfFile = new File(outputPath + getRealName().substring(0, 12) + ".swf");} else {swfFile = new File(outputPath +"\\"+ getRealName().substring(0, 12) + ".swf");}}}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/91JOajf5.shtml

相关文章

高校教师科研文献管理系统

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

【软件相关】文献管理工具——Zotero

文章目录 0 前期教程1 前言2 一些说明3 下载安装4 功能一&#xff1a;插入文献引用格式5 功能二&#xff1a;从网页下载文献pdf和题录6 功能三&#xff1a;数据多平台同步7 功能四&#xff1a;通过DOI添加条目及添加订阅8 安装xpi插件9 功能五&#xff1a;智能识别中英文文献10…

文献管理软件--zotero基本使用

文章目录 一、下载与安装1、下载插件&#xff08;以火狐浏览器为例&#xff09;2、注册账户3、下载桌面版 二、文献导入1、新建文件2、导入文献3、本地导入4、支持批量下载 三、文献管理1、添加标签2、添加子目录3、添加笔记 四、添加插件五、数据管理与同步六、文献引用1、引用…

endnote文献管理

简易参考文献管理教程&#xff0c;解决参考文献格式&#xff0c;以及其序号顺序的问题。 文献下载 地址&#xff1a;Web of Science 谷歌学术-谷粉学术 直接搜索论文名称&#xff0c;导出endnote格式&#xff1a; 文献导入 选择刚刚下载的endnote格式文件&#xff0c;导入…

文献管理软件

文献管理软件 前言文献管理软件商业软件1. EndNote2. Citavi3. Paperpile4. 知网研学&#xff08;原E-Study&#xff09;5.NoteExpress 开源软件1. Zotero 2. Mendeley3. JabRef4. IvySci 和 小绿鲸SCI阅读器 前言 科研第一步&#xff0c;文献阅读必不可少&#xff0c;文献阅读…

文献管理软件 linux,5款常用的文献管理软件

来源:木耶百新 编辑:小文 文献管理软件的便利之处在于: 可以直接联网到不同的数据库进行检索,免去登录不同数据库的劳累之苦,提高效率; 可以非常方便地管理文献信息,包括文摘、全文、笔记、以及其它的附件材料等等;检索功能方便查找到需要的文献;多数软件还具备一定的…

文献管理

怎样高效地管理自己阅读过的文献资料&#xff1f; woshicver 2020-05-09 21:35:22 1178 收藏 3 来源&#xff1a;https://www.zhihu.com/question/29395840 编辑&#xff1a;深度学习与计算机视觉 声明&#xff1a;仅做学术分享&#xff0c;侵删 看过的文献&#xff0c;放在…

【工善事,必利器】文献管理

目录 英文文献 个人需求 使用工具 下载过程 中文文献 个人需求 使用工具 下载过程 英文文献 个人需求 1. 获取一篇文献的所有的参考文献 2. 将参考文献一键批量导入到文献管理器EndNote 3. 将参考文献一键批量下载PDF 使用工具 1. Scopus检索文献Scopus preview -…

五分钟学会文献管理神器—— Zotero

宋森安&#xff1a;五分钟学会文献管理神器—— Zotero 作者&#xff1a;宋森安&#xff08;西南财经大学&#xff09;&#xff1b;王梦潇&#xff08;西南财经大学&#xff09; E-Mail&#xff1a; songsean88.com 注释&#xff1a;本文首发于—— 微信公众号【连享会】 1. 前…

电脑画图和计算机不见了,电脑中自带的Window画图工具不见了如何恢复

? 在Windows系统中有很多系统自带的非常实用的小工具&#xff0c;其中有一个画图工具&#xff0c;我们可以通过画图工具进行简单地图片处理&#xff0c;虽然功能不是很强大&#xff0c;但有时还是比较实用的。接下来 PConline 小编主要以 Windows xp系统 为例&#xff0c;介绍…

怎么检测计算机硬件好坏,电脑硬件检测,电脑硬件好坏检测工具

电脑硬件检测工具有很多,但好的常用的也就下面这几款,而电脑硬件的检测不止列出常规的硬件信息,而主要还是体现在硬件的测试上,毕竟一台先的电脑除了看到硬件的参数信息外,还得看看具体某一个硬件的参数和性能的,下面就给大家介绍常规的硬件检测工具和硬件测试软件,主要…

非华为电脑安装华为电脑管家步骤

下载安装包和工具 下载最新的电脑管家&#xff08;目前12版本的不支持了&#xff09; PCManager_Setup_11.1.6.31(C233D005)&#xff1a; 华为电脑管家官方下载-笔记本驱动更新 | 华为官网 下载安装器 PCManagerMgr.exe&#xff1a; 多屏协同-汉客儿(www.hankeer.org) |…

如何远程控制电脑

右击此电脑&#xff0c;点击属性&#xff0c;点击远程设置 设置允许远程 CtrlR打开一下窗口&#xff0c;并输入命令 mstsc&#xff0c;点击确定 弹出窗口&#xff0c;输入需要远程的电脑IP&#xff0c;点击连接 win10开启远程桌面的多种方法&#xff08;win10使用这4招启用远程…

电脑端微信多开小工具

网上确实有其他版本&#xff0c;但是我这个版本更小&#xff0c;更方便&#xff0c;下载了设置微信路径&#xff0c;然后直接使用。支持拖拽画面&#xff0c;保存设置&#xff0c;绝对原创。话不多说&#xff0c;直接上下载链接。 电脑端微信多开小工具 就一个压缩包&#xf…

如何在桌面添加计算机日历工具,如何在电脑桌面上添加日历小工具?

如何在电脑桌面上添加日历小工具? 电脑作为我们现在家庭必不可少的电子产品之一,我们如何在电脑桌面上设置显示日历呢?下面就让小编带你们来看看吧! 电脑桌面怎么设置日历在桌面 1. 首先我们需要将鼠标光标移动到桌面空白处,并点击鼠标右键,接着在出现如图所示的功能选择…

计算机工具栏文件夹选项在哪里,windows10系统下工具栏里找不到文件夹选项如何解决...

近日小编在逛论坛的时候&#xff0c;发现有一win10系统用户在咨询这样一个情况&#xff0c;就是在工具栏里找不到文件夹选项&#xff0c;碰到这样的问题该怎么办呢&#xff0c;经过分析是系统设置不当导致的&#xff0c;现在为大家分享一下windows10系统下工具栏里找不到文件夹…

忘记电脑密码的解决方法——使用pe工具重置电脑密码

文章目录 1.准备工作2.下载并安装pe工具3.设置U盘为第一启动项4.修改密码 如果我们忘记了电脑密码该怎么办呢?我们可以使用pe工具来重置密码。 我已以身试毒,这种方式不会丢失我们电脑中的任何文件,请大家放心! 少说多做,直接进入正题: 1.准备工作 一台可供使用的电脑来下载…

计算机桌面工具栏,win7电脑计算机界面菜单工具栏不见了怎么办?

因为在咱们的windows系统中&#xff0c;具有很多的工具栏配置&#xff0c;咱们很多界面的窗口上方都有这样的一个工具栏&#xff0c;大家不妨随意的在自己的win7电脑中找到一个文件夹&#xff0c;之后咱们双击打开&#xff0c;在打开的文件夹窗口上方&#xff0c;咱们就可以看到…

怎么用计算机画图工具,如何用电脑自带画图工具画平面图

电脑自带了画图工具&#xff0c;使用也非常简单&#xff0c;今天教教大家用电脑自带画图工具画平面图。 启动程序&#xff1a;单击“开始&#xff0d;所有程序&#xff0d;附件&#xff0d;画图”&#xff0c;这样就打开了画图窗口。 在窗口中&#xff0c;上边是工具栏&#xf…

计算机桌面工具栏出现闪烁,电脑任务栏图标一直闪动怎么解决

电脑任务栏图标一直闪动的情况&#xff0c;相信许多用户在操作电脑的过程中都遇到过&#xff0c;可是在碰到该问题之后的具体的解决方法是什么呢&#xff1f;有许多不熟悉电脑的小伙伴不是很清楚&#xff0c;那么针对该问题&#xff0c;接下来本文就来为大家分享关于任务栏图标…