|
|
|
@ -29,57 +29,44 @@
|
|
|
|
|
|
|
|
|
|
**1、首页**
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**2、登录页面**
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|
**3、注册页面**
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|
**4、用户购物车页面**
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
**5、 我的订单页面**
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
****
|
|
|
|
|
|
|
|
|
|
**6、图书管理页面**
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**7、订单管理页面**
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|
**8、榜单**
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**9、总账单页面**
|
|
|
|
|
|
|
|
|
|
<img src="C:\Users\jhu\AppData\Roaming\Typora\typora-user-images\image-20220215131957485.png" alt="image-20220215131957485" style="zoom:100%;" />
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**10、个人信息页面**
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
@ -88,35 +75,19 @@
|
|
|
|
|
### (三)数据库存储设计
|
|
|
|
|
|
|
|
|
|
根据前端页面以及之前大实验的分析,我们决定创建book数据库,建库语句如下:
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
并决定创建4张表如下:
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
<center>图为navicat for mysql提供</center>
|
|
|
|
|
|
|
|
|
|
建表语句如下:
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|

|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
说明:
|
|
|
|
|
|
|
|
|
@ -133,12 +104,7 @@
|
|
|
|
|
**用户模块:**
|
|
|
|
|
|
|
|
|
|
根据数据库表的设计创建我们的javaBean,创建User类,数据与数据库t_user表相对应。之后要设计我们的数据库层面的连接,这里导入数据库连接的jar包,已经测试包:
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
| ---- | ------------------------------------------------------------ |
|
|
|
|
|
| |  |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
编写基本的数据库连接操作,这里使用JDBCUtils,创建基本的配置文件,在JDBCUtils中编写代码:
|
|
|
|
|
|
|
|
|
@ -180,7 +146,7 @@ public class UserDaoImpl extends BaseDao implements UserDao {
|
|
|
|
|
|
|
|
|
|
 关于用户登录的模块也就是:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
其中在Dao层要进行一次test,在service层也要进行测试,如果出现错误,那么分层开发的优势就可以显示出来,我们可以很快的找出是哪一层出现了错误。在servlet层中我们用到了HTTP的相关知识,使用了doPost或者doGet方法,因此我们将servlet层中复用的代码放到baseServlet中,并利用反射技术去调用我们响应的方法(即通过类找到方法)。
|
|
|
|
|
|
|
|
|
@ -202,12 +168,43 @@ public Book queryBookById(Integer id) {
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
就是一个简单的sql语句,然后利用我们的数据库编程类库,之间得到我们查询之后的图书对象。之后的service层也是通过dao层来实现方法,而我们的servlet层也是如此,这个时候我们要去管理员的图书管理页面去设置我们数据显示。这里就用到了JSP技术,也就是为什么之前要将HTML换位JSP页面的原因,可以动态的显示书籍信息,例如:
|
|
|
|
|
|
|
|
|
|
<div id="main"> <table style="height: 350px"> <tr> <td>名称</td> <td>价格</td> <td>作者</td> <td>销量</td> <td>库存</td> <td colspan="2">操作</td> </tr> <c:forEach items="${requestScope.page.items}" var="book"> <tr> <td>${book.name}</td> <td>${book.price}</td> <td>${book.author}</td> <td>${book.sales}</td> <td>${book.stock}</td> <td><a href="manager/bookServlet?&action=getBook&id=${book.id}&pageNo=${requestScope.page.pageNo}">修改</a></td> <td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}&pageNo=${requestScope.page.pageNo}">删除</a></td> </tr> </c:forEach>
|
|
|
|
|
|
|
|
|
|
```html
|
|
|
|
|
<c:forEach items="${requestScope.page.items}" var="book">
|
|
|
|
|
<div class="b_list">
|
|
|
|
|
<div class="img_div">
|
|
|
|
|
<img class="book_img" alt="" src="${book.imgPath}" />
|
|
|
|
|
</div>
|
|
|
|
|
<div class="book_info">
|
|
|
|
|
<div class="book_name">
|
|
|
|
|
<span class="sp1">书名:</span>
|
|
|
|
|
<span class="sp2">${book.name}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="book_author">
|
|
|
|
|
<span class="sp1">作者:</span>
|
|
|
|
|
<span class="sp2">${book.author}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="book_price">
|
|
|
|
|
<span class="sp1">价格:</span>
|
|
|
|
|
<span class="sp2">¥${book.price}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="book_sales">
|
|
|
|
|
<span class="sp1">销量:</span>
|
|
|
|
|
<span class="sp2">${book.sales}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="book_amount">
|
|
|
|
|
<span class="sp1">库存:</span>
|
|
|
|
|
<span class="sp2">${book.stock}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="book_add">
|
|
|
|
|
<button bookId=${book.id} class="addToCart">加入购物车</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</c:forEach>
|
|
|
|
|
```
|
|
|
|
|
而整个的逻辑也是很好理解的:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
以上我们就可以试下图书的增加、删除和修改操作,在删除操作中我们需要在web页面上添加提示,避免用户不小心删除了数据。
|
|
|
|
|
|
|
|
|
@ -221,7 +218,7 @@ public Book queryBookById(Integer id) {
|
|
|
|
|
|
|
|
|
|
 为了保存用户购买书籍的信息和订单信息,我们依旧和之前一样,这里我们可以从servlet开始,反向操作。我们在servlet中的操作逆行逻辑如下:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**事务处理**
|
|
|
|
|
|
|
|
|
@ -233,7 +230,7 @@ public Book queryBookById(Integer id) {
|
|
|
|
|
|
|
|
|
|
逻辑也就是
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
*那么我们的网上书店就完成了!*
|
|
|
|
|
|
|
|
|
@ -248,5 +245,3 @@ public Book queryBookById(Integer id) {
|
|
|
|
|
 邮箱:yang2251335663@qq.com
|
|
|
|
|
|
|
|
|
|
 CSDN:[threecat.up](https://blog.csdn.net/qq_43919400?spm=1000.2115.3001.5343)
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|