JavaEE学习总结(十四)— 人工智能微博
一、数据库与表
人工智能微博(blog)
note(id,bt,nr);
微博信息(编号,标题,内容)
列表
添加
数据库脚本
/* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50506 Source Host : localhost:3306 Source Database : blog Target Server Type : MYSQL Target Server Version : 50506 File Encoding : 65001 Date: 2017-07-13 08:58:01 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `wb` -- ---------------------------- DROP TABLE IF EXISTS `wb`; CREATE TABLE `wb` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号', `bt` varchar(128) NOT NULL COMMENT '标题', `nr` text COMMENT '内容', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of wb -- ---------------------------- INSERT INTO `wb` VALUES ('1', '微软建立新人工智能实验室 开发多用途学习系统', '微软公司凤凰科技讯据彭博社北京时间7月12日报道,微软公司将建立一个新研究实验室,专注于人工智能(AI),目标是开发出更为多用途的学习系统'); INSERT INTO `wb` VALUES ('2', '人工智能来袭 金融行业迎来下岗潮', '“在金融圈和用户教育上,对人工智能还未完全信任之前,我们只能采取人肉智能(HI)和人工智能(AI)相结合的方式”,朱明杰称,他们会机器先出一些模型,在专业的风控从'); INSERT INTO `wb` VALUES ('3', '即便取代脑力劳动AI还不能“打动”人心', '但AI革命不同, AI取代脑力劳动,将让人类转向创造性、情感性劳动,这些素质是每一个体都具有的。 事实上,人工智能导致失业,还属于一种弱人工智能观念。有人煞有介'); INSERT INTO `wb` VALUES ('4', 'Google 设立风投公司扶持 AI 新创团队', 'Google 在 AI 上的野心人尽皆知,但要让行业更好地发展,光有他们自己的力量是不够的。因此在最近他们新成立了一间名为 Gradient'); INSERT INTO `wb` VALUES ('5', 'AI来临,失业大势难以避免', 'AI来临,我们需要担心失业吗? 据斯坦福大学人工智能与伦理学教授卡普兰的一项统计,美国注册在案的720个职业中,将有47%被人工智能取代。未来10年机器人将取代1500万');
二、创建项目
三、添加驱动
四、创建实体层(Bean)
package com.weibo; /**微博Bean*/ public class Wb { /**编号*/ private int id; /**标题*/ private String bt; /**内容*/ private String nr; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getBt() { return bt; } public void setBt(String bt) { this.bt = bt; } public String getNr() { return nr; } public void setNr(String nr) { this.nr = nr; } }
五、创建数据访问层(Dao)
5.1、JDBCUtil辅助类
package com.dao; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JDBCUtils { public static String DRIVER="com.mysql.jdbc.Driver"; public static String URL="jdbc:mysql://127.0.0.1:3306/blog?useUnicode=true&characterEncoding=UTF-8"; public static String USER_NAME="root"; public static String PASSWORD=""; //加载驱动 static { try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private JDBCUtils() { } /** * 获得连接 * * @return */ public static Connection getconnnection() { Connection con = null; try { con = DriverManager.getConnection(URL, USER_NAME, PASSWORD); } catch (SQLException e) { e.printStackTrace(); } return con; } /** * 关闭连接 * * @param rs * @param st * @param con */ public static void close(ResultSet rs, Statement st, Connection con) { try { try { if (rs != null) { rs.close(); } } finally { try { if (st != null) { st.close(); } } finally { if (con != null) con.close(); } } } catch (SQLException e) { e.printStackTrace(); } } /** * 关闭连接 * * @param rs */ public static void close(ResultSet rs) { Statement st = null; Connection con = null; try { try { if (rs != null) { st = rs.getStatement(); rs.close(); } } finally { try { if (st != null) { con = st.getConnection(); st.close(); } } finally { if (con != null) { con.close(); } } } } catch (SQLException e) { e.printStackTrace(); } } /** * 关闭连接 * * @param st * @param con */ public static void close(Statement st, Connection con) { try { try { if (st != null) { st.close(); } } finally { if (con != null) con.close(); } } catch (SQLException e) { e.printStackTrace(); } } /** * insert/update/delete * 增加/更新/删除 * * @param sql 数据库语句 * @param args 可变参数(可以不带参数,可以带0-n个参数) * @return */ public static int update(String sql, Object... args) { int result = 0; Connection con = getconnnection(); PreparedStatement ps = null; try { ps = con.prepareStatement(sql); if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject((i + 1), args[i]); } } result = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { close(ps, con); } return result; } /** * query, because need to manually close the resource, so not recommended * for use it * * @param sql * @param args * @return ResultSet */ @Deprecated //注解 public static ResultSet query(String sql, Object... args) { ResultSet result = null; Connection con = getconnnection(); PreparedStatement ps = null; try { ps = con.prepareStatement(sql); if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject((i + 1), args[i]); } } result = ps.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } return result; } /** * Query a single record * 查询单个记录 * @param sql * @param args * @return Map<String,Object> */ public static Map<String, Object> queryForMap(String sql, Object... args) { Map<String, Object> result = new HashMap<String, Object>(); List<Map<String, Object>> list = queryForList(sql, args); if (list.size() > 0) { result = list.get(0); } return result; } /** * Query a single record * 查询单个记录返回强类型对象 * @param sql * @param args * @return <T> //泛型 */ public static <T> T queryForObject(String sql, Class<T> clz, Object... args) { T result = null; List<T> list = queryForList(sql, clz, args); if (list.size() > 0) { result = list.get(0); } return result; } /** * Query a single record * * @param sql * @param args * @return List<Map<String,Object>> */ public static List<Map<String, Object>> queryForList(String sql, Object... args) { List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); Connection con = null; ResultSet rs = null; PreparedStatement ps = null; try { con = getconnnection(); ps = con.prepareStatement(sql); if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject((i + 1), args[i]); } } rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 1; i <= columnCount; i++) { map.put(rsmd.getColumnLabel(i), rs.getObject(i)); } result.add(map); } } catch (SQLException e) { e.printStackTrace(); } finally { close(rs, ps, con); } return result; } /** * Query records * 查询多个对象,返回强类型集合 * @param sql * @param args * @return List<T> */ public static <T> List<T> queryForList(String sql, Class<T> clz, Object... args) { List<T> result = new ArrayList<T>(); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = getconnnection(); ps = con.prepareStatement(sql); if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject((i + 1), args[i]); } } rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); while (rs.next()) { T obj = clz.newInstance(); for (int i = 1; i <= columnCount; i++) { String columnName = rsmd.getColumnName(i); String methodName = "set" + columnName.substring(0, 1).toUpperCase() + columnName.substring(1, columnName.length()); Method method[] = clz.getMethods(); for (Method meth : method) { if (methodName.equals(meth.getName())) { meth.invoke(obj, rs.getObject(i)); } } } result.add(obj); } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } finally { close(rs, ps, con); } return result; } }
5.2、WbDao
package com.dao; import java.util.List; import com.weibo.Wb; /**微博数据访问*/ public class WbDao { /**获得所有的微博信息*/ public List<Wb> all(){ return JDBCUtils.queryForList("select * from wb;", Wb.class); } /**添加单条微博信息*/ public int add(String bt,String nr){ return JDBCUtils.update("insert into wb(bt,nr) values(?,?);", bt,nr); } }
六、展示微博列表
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@page import="com.weibo.Wb"%> <%@page import="com.dao.WbDao"%> <% //实例化数据访问对象 WbDao dao=new WbDao(); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>人工智能微博</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <h2>人工智能微博</h2> <ul> <%for(Wb obj : dao.all()){ %> <li><%=obj.getBt() %> <%=obj.getNr() %></li> <%} %> </ul> </body> </html>
运行效果:
七、添加新内容
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>人工智能微博</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <h2>人工智能微博 - 发布</h2> <form action="Add" method="Post"> <p> 标题:<input name="bt" /> </p> <p> 内容:<textarea name="bt" cols="50" rows="5"></textarea> </p> <p> <input type="submit" value="保存" /> </p> </form> </body> </html>
效果:
Add Servlet
package com.action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.dao.WbDao; public class Add extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应编码为utf-8 response.setCharacterEncoding("utf-8"); //设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); //实例化数据访问对象 WbDao dao=new WbDao(); //执行添加 dao.add(request.getParameter("bt"), request.getParameter("nr")); //转到首页 response.sendRedirect("index.jsp"); } }
八、资料与练习
电子书管理系统(rebot) 120分钟
要求:请使用JavaEE实现一个电子书管理系统,电子书的属性主要包含:标题(title)、页数(page)、类型(category),系统可以选择人工智能、计算机、文学、神话、自然科学。
1、 创建数据库Lib与表book,添加3行以上的数据,导出sql脚本。20分
2、 创建动态Java Web项目,添加数据库驱动程序。20分
3、 实现电子书展示功能,index.jsp。20分
4、 实现电子书添加功能,add.jsp。30分
5、 实现展示与添加功能间的跳转。5分
6、 代码规范,注释完整,命名合理,分层开发,界面美观。5分
将数据库脚本(导出)、JavaWeb项目、已实现功能的截图、项目截图打包成压缩文件,命名:班级_姓名,如:S2SR136_张三
示例下载:https://files.cnblogs.com/files/best/weibo.zip
九、人工智能微博二
9.1、wz bean
package com.weibo.bean; /*** * 文章 */ public class Wz { /** 编号 */ private int bh; /** 标题 */ private String bt; /** 内容 */ private String nr; public int getBh() { return bh; } public void setBh(int bh) { this.bh = bh; } public String getBt() { return bt; } public void setBt(String bt) { this.bt = bt; } public String getNr() { return nr; } public void setNr(String nr) { this.nr = nr; } }
9.2、JDBCUtil
package com.weibo.dao; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JDBCUtils { public static String DRIVER="com.mysql.jdbc.Driver"; public static String URL="jdbc:mysql://127.0.0.1:3306/weibo?useUnicode=true&characterEncoding=UTF-8"; public static String USER_NAME="root"; public static String PASSWORD="uchr@123"; //加载驱动 static { try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private JDBCUtils() { } /** * 获得连接 * * @return */ public static Connection getconnnection() { Connection con = null; try { con = DriverManager.getConnection(URL, USER_NAME, PASSWORD); } catch (SQLException e) { e.printStackTrace(); } return con; } /** * 关闭连接 * * @param rs * @param st * @param con */ public static void close(ResultSet rs, Statement st, Connection con) { try { try { if (rs != null) { rs.close(); } } finally { try { if (st != null) { st.close(); } } finally { if (con != null) con.close(); } } } catch (SQLException e) { e.printStackTrace(); } } /** * 关闭连接 * * @param rs */ public static void close(ResultSet rs) { Statement st = null; Connection con = null; try { try { if (rs != null) { st = rs.getStatement(); rs.close(); } } finally { try { if (st != null) { con = st.getConnection(); st.close(); } } finally { if (con != null) { con.close(); } } } } catch (SQLException e) { e.printStackTrace(); } } /** * 关闭连接 * * @param st * @param con */ public static void close(Statement st, Connection con) { try { try { if (st != null) { st.close(); } } finally { if (con != null) con.close(); } } catch (SQLException e) { e.printStackTrace(); } } /** * insert/update/delete * 增加/更新/删除 * * @param sql 数据库语句 * @param args 可变参数(可以不带参数,可以带0-n个参数) * @return */ public static int update(String sql, Object... args) { int result = 0; Connection con = getconnnection(); PreparedStatement ps = null; try { ps = con.prepareStatement(sql); if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject((i + 1), args[i]); } } result = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { close(ps, con); } return result; } /** * query, because need to manually close the resource, so not recommended * for use it * * @param sql * @param args * @return ResultSet */ @Deprecated //注解 public static ResultSet query(String sql, Object... args) { ResultSet result = null; Connection con = getconnnection(); PreparedStatement ps = null; try { ps = con.prepareStatement(sql); if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject((i + 1), args[i]); } } result = ps.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } return result; } /** * Query a single record * 查询单个记录 * @param sql * @param args * @return Map<String,Object> */ public static Map<String, Object> queryForMap(String sql, Object... args) { Map<String, Object> result = new HashMap<String, Object>(); List<Map<String, Object>> list = queryForList(sql, args); if (list.size() > 0) { result = list.get(0); } return result; } /** * Query a single record * 查询单个记录返回强类型对象 * @param sql * @param args * @return <T> //泛型 */ public static <T> T queryForObject(String sql, Class<T> clz, Object... args) { T result = null; List<T> list = queryForList(sql, clz, args); if (list.size() > 0) { result = list.get(0); } return result; } /** * Query a single record * * @param sql * @param args * @return List<Map<String,Object>> */ public static List<Map<String, Object>> queryForList(String sql, Object... args) { List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); Connection con = null; ResultSet rs = null; PreparedStatement ps = null; try { con = getconnnection(); ps = con.prepareStatement(sql); if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject((i + 1), args[i]); } } rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 1; i <= columnCount; i++) { map.put(rsmd.getColumnLabel(i), rs.getObject(i)); } result.add(map); } } catch (SQLException e) { e.printStackTrace(); } finally { close(rs, ps, con); } return result; } /** * Query records * 查询多个对象,返回强类型集合 * @param sql * @param args * @return List<T> */ public static <T> List<T> queryForList(String sql, Class<T> clz, Object... args) { List<T> result = new ArrayList<T>(); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = getconnnection(); ps = con.prepareStatement(sql); if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject((i + 1), args[i]); } } rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); while (rs.next()) { T obj = clz.newInstance(); for (int i = 1; i <= columnCount; i++) { String columnName = rsmd.getColumnName(i); String methodName = "set" + columnName.substring(0, 1).toUpperCase() + columnName.substring(1, columnName.length()); Method method[] = clz.getMethods(); for (Method meth : method) { if (methodName.equals(meth.getName())) { meth.invoke(obj, rs.getObject(i)); } } } result.add(obj); } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } finally { close(rs, ps, con); } return result; } }
9.3、WzDao
package com.weibo.dao; import java.util.List; import com.weibo.bean.Wz; /** * 文章服务 * 数据访问 * */ public class WzDao { /**获得所有的文章信息*/ public List<Wz> all(){ return JDBCUtils.queryForList("select bh,bt,nr from wz", Wz.class); } /**新增文章*/ public int add(String bt,String nr){ return JDBCUtils.update("insert into wz(bt,nr) values(?,?)", bt,nr); } }
9.4、index.jsp页面
<%@page import="com.weibo.bean.Wz"%> <%@page import="com.weibo.dao.WzDao"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% WzDao wzdao=new WzDao(); %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>人工智能微博</title> </head> <body> <h2>人工智能微博</h2> <ul> <%for(Wz wz : wzdao.all()) {%> <li><%=wz.getBh() %></li> <li><%=wz.getBt() %></li> <li><%=wz.getNr() %></li> <li><a href="Delwz?bh=<%=wz.getBh() %>">删除</a></li> <hr/> <%} %> </ul> <a href="add.jsp">发布</a> </body> </html>
9.5、add.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>人工智能微博 - 发布</title> </head> <body> <h2>人工智能微博 - 发布</h2> <form action="Addwz" method="post"> <p> 标题:<input type="text" name="bt" /> </p> <p> 内容:<textarea type="text" name="nr" cols="60" rows="6" ></textarea> </p> <p> <input type="submit" value="提交" /> </p> </form> <a href="index.jsp">列表</a> </body> </html>
9.6、Addwz Servlet
package com.weibo.action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.weibo.dao.WzDao; /** * Servlet implementation class Addwz */ @WebServlet("/Addwz") public class Addwz extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Addwz() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置编码 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //获得参数 String bt=request.getParameter("bt"); String nr=request.getParameter("nr"); //执行添加到数据库 WzDao dao=new WzDao(); dao.add(bt, nr); //跳转到指定页面 response.sendRedirect("index.jsp"); } }
9.7、运行结果
列表:
发布:
9.8、删除与样式
index.jsp
<%@page import="com.weibo.bean.Wz"%> <%@page import="com.weibo.dao.WzDao"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% WzDao wzdao=new WzDao(); %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>人工智能微博</title> <style> .nr{ border:1px dashed #666; color:#666; width:70%; line-height:26px; margin:8px; } .nr:hover{ color:red; box-shadow:5px 5px 3px #999; border-radius:10px; } </style> </head> <body> <h2>人工智能微博</h2> <ul> <%for(Wz wz : wzdao.all()) {%> <li><%=wz.getBh() %></li> <li><%=wz.getBt() %></li> <li class="nr"><%=wz.getNr() %></li> <hr/> <%} %> </ul> <table border="1" width="100%"> <tr> <th>编号</th> <th>标题</th> <th>内容</th> <th>操作</th> </tr> <%for(Wz wz : wzdao.all()) {%> <tr> <td><%=wz.getBh() %></td> <td><%=wz.getBt() %></td> <td><%=wz.getNr().length()>20?wz.getNr().substring(0,20)+"...":wz.getNr() %></td> <td><a href="Del?id=<%=wz.getBh() %>" onclick="return confirm('您确定要删除吗?');">删除</a></td> </tr> <%} %> </table> <a href="add.jsp">发布</a> </body> </html>
Del Servlet
package com.weibo.action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.weibo.dao.WzDao; /** * Servlet implementation class Del */ @WebServlet("/Del") public class Del extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Del() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //取得客户端名为id的参数转成int int id=Integer.parseInt(request.getParameter("id")); //执行删除 WzDao dao=new WzDao(); dao.del(id); //跳转到首页 response.sendRedirect("index.jsp"); } }
WzDao.java
package com.weibo.dao; import java.util.List; import com.weibo.bean.Wz; /** * 文章服务 * 数据访问 * */ public class WzDao { /**获得所有的文章信息*/ public List<Wz> all(){ return JDBCUtils.queryForList("select bh,bt,nr from wz", Wz.class); } /**新增文章*/ public int add(String bt,String nr){ return JDBCUtils.update("insert into wz(bt,nr) values(?,?)", bt,nr); } /**删除文章*/ public int del(int bh){ return JDBCUtils.update("delete from wz where bh=?", bh); } }
运行效果:
9.9、编辑
9.10、移动端
示例下载:https://files.cnblogs.com/files/best/Weibo_m.zip
9.11、详细
9.12、添加
示例下载:https://files.cnblogs.com/files/best/Weibo_3.zip
9.13、内部测试
题目:智能电子书管理系统(libs)
要求:请使用JavaEE实现一个智能电子书管理系统,智能电子书的属性主要包含:标题(title)、页数(page)、类型(booktype),系统可以选择科学、人文、宗教、经济、法律。
步骤与得分:
1、创建数据库libs与表books,添加5行以上的数据,导出sql脚本。10分
2、创建动态Java Web项目,添加数据库驱动程序。10分
3、实现智能电子书展示功能,index.jsp。20分
4、实现智能电子书添加功能,new.jsp。10分
5、实现智能电子书删除功能。10分
6、实现智能电子书编辑功能,edit.jsp。20分
7、实现智能电子书详细功能,details.jsp。10分
8、实现手机端展示功能,m.jsp。5分
9、实现手机端详细功能,d.jsp。5分
10、实现手机端添加功能,a.jsp。5分
11、实现手机端编辑功能,e.jsp。5分
提交:不提交,利用两周时间完成,28号将统一检查打分,作为平时成绩。