導讀:電子書代表人們所閱讀的數字化出版物, 從而區別于以紙張為載體的傳統出版物, 電子書是利用計算機技術將一定的文字、圖片、聲音、影像等資訊, 通過數碼方式記錄在以光、電、磁為介質的設備中, 借助于特定的設備來讀取、復制、傳輸,已經為人們所熟悉,
眾所周知,自20世紀80年代以來,電子圖書的出現和迅速發展已經引起社會各界的普遍關注,在資訊社會化和社會資訊化的今天,電子圖書極大地刺激了傳統圖書出版、發行市場,改變了讀者閱讀習慣,給人類社會文化和社會生活帶來了深刻的變革,一般情況下,閱讀電子圖書主要有兩種形式,一種是在線或在PC機上閱讀,即通過臺式電腦或筆記本電腦直接閱讀網站提供的免費或付費的電子圖書,也可以下載到本地計算機上閱讀;另一種是離線或脫機閱讀,即通過使用專用的手持閱讀器閱讀,手持閱讀器具有體積小,分量輕,容易攜帶的特點,不受時間、地點、環境的限制,而且,隨著閱讀器材技術、內容、格式的日臻完善,電子圖書必將展示其更為廣闊的發展空間,
對比傳統的圖書出租的書店,電子書租借平臺有許多的優越性,對租借者來說,方便了大家租借圖書的途徑,不必走出家門,只需有一臺電腦,一根網線,連上網就可以訪問因特網上大量的電子書網站,隨著因特網發展和上網用戶的增加,農村也已開始有越來越多的網路連接,上網早已不是難事,所以,一個網路的電子書租借平臺可以適應大眾的需求,對于管理者來說,便于管理,運營成本低,沒有地域限制,總之,電子書租借平臺有著很高的靈活性和方便性,隨著社會的發展,會為越來越多的人所接受,有著極高的應用前景,
在國外,電子圖書的發展體現在閱讀軟體和閱讀硬體兩個方面,閱讀軟體主要指在線閱讀器,閱讀硬體一般是手持式閱讀器,也包括手機,各軟硬體生產廠商為了更好的吸引消費者,在這上面都下了不小的精力來完善自己產品的功能,保證產品質量和提高其可用性,競爭也比較激烈,
在國內,最為普遍的電子書閱讀終端是PC,手機閱讀電子書的方式也在逐漸增加,而專用的手持閱讀器還有待推廣,國內已經出現了很多的電子書網站,比較出名的有晉江文學、瀟湘書院、小說閱讀網等,內容包括一些原創,各類小說和國內外名著,為了自身發展,網站往往和一些網路作家簽約,網路作家在簽約網站發表自己的原創并獲得不低的著作費,這樣也豐富了網站的內容,更好地吸引讀者,達到雙贏的目的,網站盈利的方式主要是向讀者收取閱讀費,收費方式不盡相同,一般分為按字數收取,按本數收取和按時間收取費用,所以,擁有一個廣大的用戶群是保證網站持續良好發展的基礎,網站也可以靠出租廣告位置獲得額外的利益,但是過多的廣告,會影響網頁的美觀簡潔,一些彈窗廣告甚至會影響讀者的操作,給用戶造成不必要的麻煩,所以廣告的投放一般不會過多

專案結構

專案截圖
首頁

后臺管理

結構設計

總結
瀏覽公告是前臺頁面的功能,只要登錄網站主頁即可進行公告的瀏覽,在主頁上顯示最新的幾條公告,
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();
發布公告是由管理員來進行的操作,只有管理員有權限進行公告的發布及修改、洗掉,其他人只能夠進行瀏覽,而管理員進行公告發布之前需要進行登錄

在登陸進入管理頁面之后,就可以進行公告的發布,管理員進入管理頁面之后可以進行很多操作,而公告的發布與管理只是管理員眾多作業之一
公告管理
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);
}
會員資訊的注冊有一定的限制條件,用戶名必填項,年齡必須為數字,密碼輸入兩次必須一致,否則會提示出錯
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);
}
點券充值應為條件限制,不能做到與付費介面的連接,再此只做模擬,點券充值后需由管理員來確認,
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);
}
登錄到系統的會員,可以搜索自己喜愛的書籍, 可以按照書名搜索,也可以按照作者搜索, 如果有符合搜索條件的書籍,則會顯示在主頁面,
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);
}
下載書籍
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>
<%}
書籍管理模塊包括電子書類別管理模塊和電子書的管理,由管理員來管理操作,可以添加和洗掉相應的電子書類別,電子書.電子書類別的管理包括添加和洗掉電子書
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);
}
會員之間的交流,每個會員可以在系統的留言版上進行留言,而其他會員看到留言后可以與之進行交流,
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);
}
采用資料庫的連接是用了一個java包來進行連接的,這樣方便了資料庫的管理,
在實作某一個功能時,首先要連接資料庫,那么,如果我們在每一次進行資料庫操作前都需要加載驅動、創建連接,則這些操作可以封裝在一個資料庫操作類中,這樣做有很大的優點,一旦系統移植、資料庫引數改變,則不需要重新修改所有的連接代碼并重新編譯,只要在這個封裝類中改變其中的引數即可,在jsp頁面中只需要引入這個包就可以,就不需要在每個頁面寫資料庫的鏈接,大大的提高了作業的效率以及方便了編程,我采用了如下代碼的一個類來統一管理資料庫的連接:
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();
}
}
}
雖然基本功能可以實作,但是系統還是不夠完善,在以后的學習和生活中需要繼續對此系統進行完善,
下載地址
點我下載完整專案及資料庫
CSDN認證博客專家
HTTPS
Node.js
JavaScript
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/248130.html
標籤:其他
