• java毕业设计——基于java+jsp+Tomcat的电子书下载系统设计与实现(毕业论文+程序源码)——电子书下载系统


    基于java+jsp+Tomcat的电子书下载系统设计与实现(毕业论文+程序源码)

    大家好,今天给大家介绍基于java+jsp+Tomcat的电子书下载系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。

    文章目录:

    1、项目简介

    1. 对比传统的图书出租的书店,电子书租借平台有许多的优越性。对租借者来说,方便了大家租借图书的途径,不必走出家门,只需有一台电脑,一根网线,连上网就可以访问因特网上大量的电子书网站。

    2、资源详情

    项目难度:中等难度
    适用场景:相关题目的毕业设计
    配套论文字数:12239个字44页
    包含内容:整套源码+完整毕业论文+辅导视频+运行截图


    3、关键词:

    B/S结构;SpringMVC;Spring ;MyBatis;jsp

    4、毕设简介

    提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。

    绪论
    省略

    第2章 主要技术概述
    2.1 B/S结构
    B/S 是 Brower/Server 就是用浏览器(如IE)为应用程序客户端操作服务器。这样用浏览器来操作简单易用,但是对输入没有很好的验证。逻辑实现不多。本地只是用于获取数据然后大部分验证需要提交服务器来完成。

    B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构[4]。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

    以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。

    省略

    2.2 JSP技术
    JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。

    Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。

    JSP与Java Servlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览[5]。

    JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

    2.3 SQL Server 2000数据库
    省略

    SQL Server 2000提供了数据转换服务、联机分析处理(OLAP)、数据挖掘支持、English Query、Meta Data Services等等工具,以便对数进行析取、分析汇总资料并对数据库的设计提供帮助。

    2.4 JDBC数据库连接
    JDBC(Java DataBase Connectivity)称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一个标准的API,使他们能够用纯Java API来编写数据库应用程序。

    JDBC定义了Java语言同SQL数据之间的程序设计接口。JDBC有一个非常独特的动态连接结构,它使得系统模块化。使用JDBC来完成对数据库的访问包括以下四个主要组件:Java的应用程序、JDBC驱动器管理器、驱动器和数据源。简单地说,JDBC可做三件事:与数据库建立连接、发送SQL语句,处理结果。

    省略

    2.5 TOMCAT应用服务器
    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

    省略

    第3章 需求分析
    3.1 系统功能描述
    该系统是用于用户对电子书的租借和相互交流,运营者可以管理此平台盈利,是一个基于在线阅读的平台,怎样可以方便管理者的管理并实现盈利,方便用户的使用,提供搜索和租借功能并且提供一个给用户的交流平台是研究的主要内容。重点在于对访问该系统的身份进行基于角色的识别,使系统可以允许三种不同的角色进行访问,即游客、会员、管理员,并赋予他们不同的访问权限。

    3.1.1 用户及主要操作功能
    游客可以浏览网站的主页,但是需要注册为会员后才能对电子书进免费行阅读或租借。会员登录需要输入帐号和密码信息,每个会员的帐号下都会对应有相关的个人信息,如个人邮箱,地址等,不同的会员等级在租借图书时会有不同的待遇。以管理员身份登录也需要输入账号和密码,可以管理会员信息,添加公告,管理留言板等,管理员的角色在该系统中拥有最高的权限。

    3.1.2 系统角色管理模块
    包括系统管理员模块和会员模块
    (1)在会员模块,作为会员,可以查看个人的信息,修改自己的密码;作为管理员可以查看,管理,删除会员信息。
    (2)在管理员模块,可以添加、删除管理员,管理员可以修改自己的密码。

    3.1.3 电子书管理模块
    电子书管理模块包括不同电子书类别的添加,删除以及电子书的上传,删除管理。
    (1)电子书类别的添加是由管理员进行的,可以包括武侠小书,都市言情,穿越小书等各个类别。按照付费与否可以添加免费和付费两种类别,当然这和前一种分类方式并不冲突。
    (2)各类电子书由管理员上传,上传时如果是付费电子书,可以设置下载此电子书是所需费用。
    (3)对于一些过时,或人气不高的电子书,系统管理员可以进行删除操作。

    3.1.4 公告模块
    公告模块主要包括了公告的发布、编辑、删除和浏览;公告的发布、编辑和删除只能由管理员来进行。

    3.2 系统性能需求分析
    电子书租赁下载系统是对广大读书爱好者设计的一个系统,提供给读者一个寻找读物的平台,因此必须方便用户的注册,搜索和下载等功能,并提供一个交流平台。系统应该具有开放性和可靠性,同时又要方便进行操作和维护。

    3.3 开发环境及开发工具
    操作系统:Windows XP SP3;
    语言选择:JSP 、JavaScript;
    数据库选择:SQL Server 2000;
    主要开发工具:Dreamweaver CS3、Eclipse 3.4;
    Web应用服务器:Tomcat 5.5。

    第4章 概要设计
    本章详细的介绍了本系统的设计实现,包括系统功能模块的设计和数据库的设计,系统功能模块设计主要介绍了系统的功能和各功能实现的流程,数据库设计主要介绍了数据库表的设计和各字段的意义。

    4.1 系统的体系结构
    结构设计是系统设计的关键,结构是整个系统的骨架,将对系统的性能起决定性的作用,采用如图4-1所示的结构模式。图中客户端可分别为:管理员、游客、和会员三种角色。
    在这里插入图片描述

    4.2 系统功能结构设计
    系统功能框图如图4-2所示。
    电子书租赁下载系统包括了用户登录模块和匿名模块,在用户登录模块中角色分为管理员和会员三种角色。管理员可以对用户进行管理,可以建立数目类别,上传电子书,公告的编辑和发布;会员可以浏览系统公告、电子书信息,可以同其他会员进行交流。
    在这里插入图片描述

    4.2.1 管理员模块
    本模块包括会员管理、公告管理和书籍管理三部分。具体功能结构分析如图4-3所示。
    在这里插入图片描述

    4.2.2 会员模块
    本模块包括信息管理,点券充值,书籍搜索三部分,具体的功能结构如图4-4所示。
    在这里插入图片描述

    4.3 系统流程图
    4.3.1 会员管理
    会员管理包括对公司新近员的信息进行查看和删除等操作。还有对点券充值的确认。

    (1)删除会员
    首先查看会员的信息,查看的会员的信息必须在库里存在,如果有即可找到,如果没有就不能看到。当找到相应的记录后就会显示出来,然后对会员信息进行删除,删除完成该会员的信息就不存在数据库中。

    具体的操作流程如图4-5所示。
    在这里插入图片描述

    4.3.2 公告管理
    系统公告的管理由管理员来进行管理,系统公告发布后所有人都可以看见,系统公告的数据表(newsinfo),所有公司公告的相关操作均在本表了进行操作。

    4.4 数据库设计
    数据库设计是系统设计中非常重要的环节。数据库设计是整个系统的根基,如果设计不好,在后来的系统维护、变更和功能扩充时,甚至在系统开发过程中,将会引起比较大的问题,有时将会重新进行大量的工作。

    创建数据库:
    数据库名:manage(软件项目团队管理系统)
    本系统中一共用到了以下几个数据表:
    (1)电子书类别表(t_catelog):存储电子书类别信息,具体为表4-1所示。
    表4-1 电子书类别表(t_catelog)
    在这里插入图片描述

    (2)电子书表(t_book):用于存放电子书信息,具体如表4-2所示。
    表4-2 电子书信息表(t_book)
    在这里插入图片描述

    (3)会员信息表 (t_user):记录会员信息,具体如表4-3所示。
    表4-3 会员信息表(t_user)
    在这里插入图片描述

    (4)充值表(t_chongzhi):用来存放会员充值信息,具体设计如表4-4所示。
    表4-4 充值表(t_chongzhi)
    在这里插入图片描述

    (5)留言表(t_liuyan):用来存放所有的留言信息,具体设计如表4-5所示。
    表4-5 留言表(t_liuyan)
    在这里插入图片描述

    (6)公告表(t-gonggao):用来存放公告信息,具体设计如表4-6所示。
    表4-6 公告表(t_gonggao)
    在这里插入图片描述

    (7)系统管理员表(t_admin):用来存放管理员信息,具体设计如表4-7所示。
    表4-7 管理员表(t_admin)
    在这里插入图片描述

    第5章 详细设计
    本章介绍的是软件项目团队管理系统的详细功能,包括了页面的设计以及程序的设计。
    5.1 公告管理模块
    公告管理包括了公告的发布、管理和浏览,下面介绍这些功能。

    5.1.1 浏览公告
    浏览公告是前台页面的功能,只要登录网站主页即可进行公告的浏览,在主页上显示最新的几条公告。
    图5-1为主页显示的部分公告页面:
    在这里插入图片描述

    下面为公告模板的核心代码。

    List gonggaoList=new ArrayList();
    		String sql="select * from t_gonggao order by id desc";
    		Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			while(rs.next())
    			{
    				Tgonggao gonggao=new Tgonggao();
    				
    				gonggao.setId(rs.getString("id"));
    				gonggao.setTitle(rs.getString("title"));
    				gonggao.setContent(rs.getString("content"));
    				gonggao.setShijian(rs.getString("shijian"));
    				
    				gonggaoList.add(gonggao);
    		    }
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    图5-3为某条公告的显示页面:
    在这里插入图片描述

    5.1.2 发布公告
    发布公告是由管理员来进行的操作,只有管理员有权限进行公告的发布及修改、删除,其他人只能够进行浏览,而管理员进行公告发布之前需要进行登录,登录界面如图5-5所示:
    在这里插入图片描述

    在登陆进入管理页面之后,就可以进行公告的发布,管理员进入管理页面之后可以进行很多操作,而公告的发布与管理只是管理员众多工作之一,图5-6为管理员登陆后的界面:
    在这里插入图片描述

    5.1.3 管理公告
    公告发布后要及时对公告进行管理,管理界面如图5-7所示:
    在这里插入图片描述

    以下公告管理的核心代码:

    public void gonggaoAdd(HttpServletRequest req,HttpServletResponse res)
    	{
    		String id=String.valueOf(new Date().getTime());
    		String title=req.getParameter("title");
    		String content=req.getParameter("content");
    		String shijian=new Date().toLocaleString();
    		
    		
    		String sql="insert into t_gonggao values(?,?,?,?)";
    		Object[] params={id,title,content,shijian};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "gonggao?type=gonggaoMana");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
            
    	}
    	
    	
    	public void gonggaoDel(HttpServletRequest req,HttpServletResponse res)
    	{
    		String id=req.getParameter("id");
    		
    		String sql="delete from t_gonggao where id=?";
    		Object[] params={id};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "gonggao?type=gonggaoMana");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
    	}
    
    	public void gonggaoMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{
    		List gonggaoList=new ArrayList();
    		String sql="select * from t_gonggao";
    		Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			while(rs.next())
    			{
    				Tgonggao gonggao=new Tgonggao();
    				
    				gonggao.setId(rs.getString("id"));
    				gonggao.setTitle(rs.getString("title"));
    				gonggao.setContent(rs.getString("content"));
    				gonggao.setShijian(rs.getString("shijian"));
    				
    				gonggaoList.add(gonggao);
    		    }
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    		
    		req.setAttribute("gonggaoList", gonggaoList);
    		req.getRequestDispatcher("admin/gonggao/gonggaoMana.jsp").forward(req, res);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    5.2 会员模块
    会员模块包括会员注册,搜索租借和点券的充值。
    5.2.1 会员注册
    首先介绍会员信息的注册,具体界面如图5-9所示:
    在这里插入图片描述

    会员信息的注册有一定的限制条件,用户名必填项,年龄必须为数字,密码输入两次必须一致,否则会提示出错。
    会员注册的核心代码如下:

    public void userReg(HttpServletRequest req,HttpServletResponse res)
    	{
    		String id=String.valueOf(new Date().getTime());
    		String loginname=req.getParameter("loginname");
    		String loginpw=req.getParameter("loginpw");
    		String name=req.getParameter("name");
    		String sex=req.getParameter("sex");
    		String age=req.getParameter("age");
    		String address=req.getParameter("address");
    		String tel=req.getParameter("tel");
    		String email=req.getParameter("email");
    		String qq=req.getParameter("qq");
    		int dianquan=0;
    		String del="no";
    		
    		String sql="insert into t_user values(?,?,?,?,?,?,?,?,?,?,?,?)";
    		Object[] params={id,loginname,loginpw,name,sex,age,address,tel,email,qq,dianquan,del};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
            String targetURL = "/common/add_success.jsp";
    		dispatch(targetURL, req, res);
    	}
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    5.2.2 点券充值
    点券充值应为条件限制,不能做到与付费接口的连接,再此只做模拟,点券充值后需由管理员来确认。具体界面如图5-10所示:
    在这里插入图片描述

    点券充值的核心代码如下:

    public void chongzhiAdd(HttpServletRequest req,HttpServletResponse res)
    	{
    		
    		String user_id=req.getParameter("user_id");
    		int jine=Integer.parseInt(req.getParameter("jine"));
    		String fukuanfangshi=req.getParameter("fukuanfangshi");
    		String shijian=new Date().toLocaleString();
    		String zhuangtai="a";
    		
    		String sql="insert into t_chongzhi values(?,?,?,?,?)";
    		Object[] params={user_id,jine,fukuanfangshi,shijian,zhuangtai};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("msg", "申请成功。等待管理员审核");
    		String targetURL = "/common/msg.jsp";
    		dispatch(targetURL, req, res);
            
    	}
    	
    	
    	public void chongzhiMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{
    		List chongzhiList=new ArrayList();
    		String sql="select * from t_chongzhi order by zhuangtai";
    		Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			while(rs.next())
    			{
    				Tchongzhi chongzhi=new Tchongzhi();
    				
    				chongzhi.setId(rs.getInt("id"));
    				chongzhi.setUser_id(rs.getString("user_id"));
    				chongzhi.setJine(rs.getInt("jine"));
    				chongzhi.setFukuanfangshi(rs.getString("fukuanfangshi"));
    				chongzhi.setShijian(rs.getString("shijian"));
    				chongzhi.setZhuangtai(rs.getString("zhuangtai"));
    				
    				chongzhiList.add(chongzhi);
    		    }
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    		
    		req.setAttribute("chongzhiList", chongzhiList);
    		req.getRequestDispatcher("admin/chongzhi/chongzhiMana.jsp").forward(req, res);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    5.2.3 搜索和下载书籍
    登录到系统的会员,可以搜索自己喜爱的书籍, 可以按照书名搜索,也可以按照作者搜索, 如果有符合搜索条件的书籍,则会显示在主页面。
    以下为搜索书籍的界面:
    在这里插入图片描述

    核心代码如下:

    public void bookSearch(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{
    		List bookList=new ArrayList();
    		String sql="select * from t_book where del='no' and name like '%"+req.getParameter("name").trim()+"%'"+" and zuozhe like '%"+req.getParameter("zuozhe").trim()+"%'";
    		System.out.println(sql+"^^^^^");
    		Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			while(rs.next())
    			{
    				Tbook book=new Tbook();
    				
    				book.setId(rs.getInt("id"));
    				book.setCatelog_id(rs.getInt("catelog_id"));
    				book.setName(rs.getString("name"));
    				book.setShifoumianfei(rs.getString("shifoumianfei"));
    				book.setDianquan(rs.getInt("dianquan"));
    				book.setDaxiao(rs.getString("daxiao"));
    				
    				book.setJieshao(rs.getString("jieshao"));
    				book.setMianfeizhangjie(rs.getString("mianfeizhangjie"));
    				book.setFujian(rs.getString("fujian"));
    				book.setFujianYuanshiming(rs.getString("fujianYuanshiming"));
    				book.setFabushijian(rs.getString("fabushijian"));
    				book.setDel(rs.getString("del"));
    				
    				book.setCatelog(liuService.getCatelog(rs.getInt("catelog_id")));
    				
    				bookList.add(book);
    		    }
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    		
    		req.setAttribute("bookList", bookList);
    		req.getRequestDispatcher("qiantai/book/bookSearch.jsp").forward(req, res);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    下载书籍界面:
    在这里插入图片描述

    下载核心代码:

    try
              {
                  String fujianPath=request.getParameter("fujianPath");
    	          String fujianYuashiMing=request.getParameter("fujianYuashiMing");
    	          fujianYuashiMing=java.net.URLDecoder.decode(fujianYuashiMing,"UTF-8");
    	          System.out.println(fujianYuashiMing+fujianPath);
    	          
    	          SmartUpload su = new SmartUpload(); // 新建一个SmartUpload对象 
    	
    	          su.initialize(pageContext); // 初始化 
    	
    	          su.setContentDisposition(null); 
    	          // 设定contentDisposition为null以禁止浏览器自动打开文件, 
    	          //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 
    	          //doc时,浏览器将自动用word打开它。扩展名为pdf时,将用acrobat打开
    	          //response.sendRedirect(path+"/updown/updown_err.jsp");
    	          //su.downloadFile("/uploadPath/file/liu.doc"); // 下载英文文件
    	         
    	          su.downloadFile(fujianPath, null, new String(fujianYuashiMing.getBytes(), "ISO8859-1")); // 下载中文文件
    	          //downloadFile(String sourceFilePathName, String contentType, String destFileName)
    	          out.clear();
    	          out=pageContext.pushBody(); 
              }
              catch(Exception e)
              {%>
                  <script type="text/javascript">
                        alert("文件不存在。请联系管理人员");
                        window.history.back();
                  </script>
            <%}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    5.3 书籍管理模块
    书籍管理模块包括电子书类别管理模块和电子书的管理,由管理员来管理操作,可以添加和删除相应的电子书类别,电子书,下面详细介绍各个功能。

    5.3.1 电子书类别的管理
    电子书类别的管理包括添加和删除电子书,界面如下图所示。类别建立时,需要要确定好类别的名称:
    设计界面如下:
    在这里插入图片描述

    核心代码如下:

    public void catelogAdd(HttpServletRequest req,HttpServletResponse res)
    	{
    		String name=req.getParameter("name");
    		String jieshao=req.getParameter("jieshao");
    		String del="no";
    		String sql="insert into t_catelog values(?,?,?)";
    		Object[] params={name,jieshao,del};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "catelog?type=catelogMana");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
    	}
    	
    	public void catelogDel(HttpServletRequest req,HttpServletResponse res)
    	{
    		String sql="update t_catelog set del='yes' where id="+Integer.parseInt(req.getParameter("id"));
    		Object[] params={};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "catelog?type=catelogMana");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
    	}
    
    	public void catelogMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{
    		List catelogList=new ArrayList();
    		String sql="select * from t_catelog where del='no'";
    		Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			while(rs.next())
    			{
    				Tcatelog catelog=new Tcatelog();
    				catelog.setId(rs.getInt("id"));
    				catelog.setName(rs.getString("name"));
    				catelog.setJieshao(rs.getString("jieshao"));
    				catelogList.add(catelog);
    		    }
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    		
    		req.setAttribute("catelogList", catelogList);
    		req.getRequestDispatcher("admin/catelog/catelogMana.jsp").forward(req, res);
    	}
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    5.3.2 电子书管理
    电子书的管理包括各个类别中,电子书的上传和已有电子书的删除,上传时,有上传类别,付费和免费的选择。
    电子书管理的界面如图所示:
    在这里插入图片描述

    5.3 留言版模块
    下面介绍的是会员之间的交流,每个会员可以在系统的留言版上进行留言,而其他会员看到留言后可以与之进行交流。留言版界面如下图所示:
    在这里插入图片描述

    留言版代码如下所示:

    public void liuyanAdd(HttpServletRequest req,HttpServletResponse res)
    	{
    		String id=String.valueOf(new Date().getTime());
    		String title=req.getParameter("title");
    		String content=req.getParameter("content");
    		String shijian=new Date().toLocaleString();
    		String user_id="0";
    		if(req.getSession().getAttribute("user")!=null)
    		{
    			Tuser user=(Tuser)req.getSession().getAttribute("user");
    			user_id=user.getId();
    		}
    		
    		String sql="insert into t_liuyan values(?,?,?,?,?)";
    		Object[] params={id,title,content,shijian,user_id};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "liuyan?type=liuyanAll");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
            
    	}
    	
    	public void liuyanAll(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{
    		List liuyanList=new ArrayList();
    		String sql="select * from t_liuyan";
    		Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			while(rs.next())
    			{
    				Tliuyan liuyan=new Tliuyan();
    				
    				liuyan.setId(rs.getString("id"));
    				liuyan.setTitle(rs.getString("title"));
    				liuyan.setContent(rs.getString("content"));
    				liuyan.setShijian(rs.getString("shijian"));
    				liuyan.setUser_id(rs.getString("user_id"));
    				liuyan.setUser_name(liuService.getUserName(rs.getString("user_id")));
    				liuyanList.add(liuyan);
    		    }
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    		
    		req.setAttribute("liuyanList", liuyanList);
    		req.getRequestDispatcher("qiantai/liuyan/liuyanAll.jsp").forward(req, res);
    	}
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    5.4 通用模块
    5.4.1 登录、修改个人信息及注销退出
    登录是系统的每个角色都会进行的,但是由于权限的不同所以登录后的功能不同,但是每个人都有修改个人信息、修改密码和注销退出的功能。

    由于此处的修改个人信息与管理员进行修改没有太大的区别,在此就不做详细介绍,而修改密码和注销退出也是比较简单的功能,在此也就不再详细介绍。

    5.4.2 数据库的连接接
    本系统采用数据库的连接是用了一个java包来进行连接的,这样方便了数据库的管理。

    在实现某一个功能时,首先要连接数据库。那么,如果我们在每一次进行数据库操作前都需要加载驱动、创建连接,则这些操作可以封装在一个数据库操作类中。这样做有很大的优点,一旦系统移植、数据库参数改变,则不需要重新修改所有的连接代码并重新编译,只要在这个封装类中改变其中的参数即可。我采用了如下代码的一个类来统一管理数据库的连接:
    //数据库连接封装

    public class DB
    {
    	private Connection con;
    
    	private PreparedStatement pstm;
    
    	private String user = "sa";
    
    	private String password = "sa";
    
    	private String className = "net.sourceforge.jtds.jdbc.Driver";
    
    	private String url = "jdbc:jtds:sqlserver://localhost:1433;DatabaseName=db_ebook";
    
    	public DB()
    	{
    		try
    		{
    			Class.forName(className);
    		} catch (ClassNotFoundException e)
    		{
    			System.out.println("加载数据库驱动失败!");
    			e.printStackTrace();
    		}
    	}
    
    	/** 创建数据库连接 */
    	public Connection getCon()
    	{
    		try
    		{
    			con = DriverManager.getConnection(url, user, password);
    		} catch (SQLException e)
    		{
    			System.out.println("创建数据库连接失败!");
    			con = null;
    			e.printStackTrace();
    		}
    		return con;
    	}
    
    	public void doPstm(String sql, Object[] params)
    	{
    		if (sql != null && !sql.equals(""))
    		{
    			if (params == null)
    				params = new Object[0];
    
    			getCon();
    			if (con != null)
    			{
    				try
    				{
    					System.out.println(sql);
    					pstm = con.prepareStatement(sql,
    							ResultSet.TYPE_SCROLL_INSENSITIVE,
    							ResultSet.CONCUR_READ_ONLY);
    					for (int i = 0; i < params.length; i++)
    					{
    						pstm.setObject(i + 1, params[i]);
    					}
    					pstm.execute();
    				} catch (SQLException e)
    				{
    					System.out.println("doPstm()方法出错!");
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    
    	public ResultSet getRs() throws SQLException
    	{
    		return pstm.getResultSet();
    	}
    
    	public int getCount() throws SQLException
    	{
    		return pstm.getUpdateCount();
    	}
    
    	public void closed()
    	{
    		try
    		{
    			if (pstm != null)
    				pstm.close();
    		} catch (SQLException e)
    		{
    			System.out.println("关闭pstm对象失败!");
    			e.printStackTrace();
    		}
    		try
    		{
    			if (con != null)
    			{
    				con.close();
    			}
    		} catch (SQLException e)
    		{
    			System.out.println("关闭con对象失败!");
    			e.printStackTrace();
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105

    以上就是数据库的连接函数,在jsp页面中只需要引入这个包就可以,就不需要在每个页面写数据库的链接,大大的提高了工作的效率以及方便了编程。

    5.5 小结
    以上是对本系统做的详细介绍,里面对各个模块的功能和界面都做了比较详细的介绍。虽然基本功能可以实现,但是系统还是不够完善,在以后的学习和生活中需要继续对此系统进行完善。

    第6章 系统测试
    省略

    6.1 公告管理模块
    6.1.1 公告的浏览
    经过系统测试公告的浏览已能够成功进行,只要登录网站的主页就可以进行公告的浏览,用户可以看到公告的题目和发布时间。
    6.1.2 公告的添加
    公告的添加只能由管理员来进行,经过系统测试可以顺利的进行公告的添加,通过id号来确定公告不会重复出现。
    6.1.3 公告的编辑、删除
    经过系统测试,会员可以进行对公告的浏览,管理员可以进行公告的添加与删除,管理员登录后可以点击公告管理来进行公告的操作,在添加公告时点击添加按钮就可以进行对公告的添加才操作了,每条公告后都有删除按钮,可以进行删除操作。
    6.2 会员管理模块
    6.2.1 成员注册
    经过测试,会员可以进行注册操作,用注册的帐号可以成功登录系统。
    6.2.2 点券充值
    会员登录后,需要用点券来下载书籍,经过测试,点券充值可以把点券充值在自己的帐号之下,成功的用来下载付费书籍。
    6.2.3 搜索书籍
    会员登录后,可以顺利地搜索出系统拥有的电子书信息,能够按照书名或作者搜索,并且可以进行下载。
    6.3 书籍管理模块
    6.3.1 电子书类别的管理
    经测试,电子书类别只可以由系统管理员进行操作,管理员根据需要添加和删除电子书类别,可以成功进行电子书类别的添加和删除操作。
    6.3.2 电子书管理
    经测试,电子书的管理只可以。由系统管理员进行操作,管理员根据需要添加和删除电子书,可以成功地进行电子书的添加和删除操作。
    6.3.3 留言版
    经过系统测试可以进行会员间的交流,每个人都可以在系统查看别人的留言,留下自己的留言,管理员可以对留言进行删除。

    第7章 结论与展望
    省略

    参考文献
    [1] 杨崑,王二平. 软件开发管理中的沟通与协调问题研究[J]. 中国管理科学,2004,12(3):141-148.
    [2] 张珞玲,李师贤. 软件项目风险管理方法比较和研究[J]. 计算机工程,2003,29(3):91-94.
    [3] 李丽. 项目管理与项目经理的技能及策略选择[J]. 公路,2001,11:39-42.
    [4] 孙鑫编著. Java Web开发详解[M].北京: 电子工业出版社,2006
    [5] 贾更新,赵立超编著. JSP完全实力教程[M].电子工业出版社,2001.
    [6] 龙马工作室.典型网站建设[M].北京:人民邮电出版社,2004(8):20-54.
    [7] 薛华成主编.管理信息系统[M].北京:清华大学出版社,1999.
    [8] 成典勤. 基于JSP技术的Web应用[J]. 安康师专学报,2005年6期.
    [9] 邓松良.软件工程[M] .西安:西安电子科技大学出版社,2004.
    [10] David B. L. Client Needs and The Design Process in Web Projects[J]. Sydney: University of Technology,2002,1.
    [11] Thomas R. Peltier.Information Security Risk Analysis[J].Rothstein Associates Inc,2001

    致 谢
    省略


    5、资源下载

    本项目源码及完整论文如下,有需要的朋友可以点击进行下载

  • 相关阅读:
    面试官:“谈谈Spring中都用到了那些设计模式?”
    GPT & R 生态环境领域数据统计分析
    [ue5]建模场景学习笔记(5)——必修内容可交互的地形,交互沙(3)
    Android12启动页适配
    使用 Messenger 跨进程通信
    vcpkg切换 Visual Studio 版本
    什么是SpringMVC
    衍三的硬件笔记之如何选择MOS管
    Python in Visual Studio Code 2023年10月发布
    Nginx Web服务器搭建
  • 原文地址:https://blog.csdn.net/m0_66238867/article/details/125561311