javaweb图书商城系统带万字文档网上书城java项目java课程设计java毕业设计

文章目录

  • 图书商城系统
    • 一、项目演示
    • 二、项目介绍
    • 三、万字项目文档
    • 四、部分功能截图
    • 五、部分代码展示
    • 六、底部获取项目源码带万字文档(9.9¥带走)

图书商城系统

一、项目演示

网上书城

二、项目介绍

语言:java 数据库:MySQL

技术栈:javaweb、Servlet、JSP、JDBC、、Tomcat

系统角色:管理员、用户

管理员:书籍管理、分类管理、订单管理、用户管理、上架书籍等功能

用户:登录、注册、图书列表、商品详情、加入购物车、订单列表、订单详情等功能

三、万字项目文档

在这里插入图片描述

在这里插入图片描述

四、部分功能截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

五、部分代码展示

package com.shine.bookshop.dao.impl;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.shine.bookshop.bean.Admin;
import com.shine.bookshop.bean.PageBean;
import com.shine.bookshop.dao.AdminDao;
import com.shine.bookshop.util.DateUtil;
import com.shine.bookshop.util.DbUtil;public class AdminDaoImpl implements AdminDao {/*** @param user 传递要登录的用户信息* @return 返回一个boolean值,true登录成功,false失败*/@Overridepublic boolean userLogin(Admin admin) {boolean flag=false;String sql="select * from s_admin where userName=? and passWord=?";String sql2="update s_admin set lastLoginTime=? where id=?";List<Map<String,Object>> list=DbUtil.executeQuery(sql, admin.getUserName(),admin.getPassWord());if(list.size()>0){flag=true;//这里需要name值传入对象中admin.setName((String)list.get(0).get("name"));//通过登录成功用户的id更新最后登录时间DbUtil.excuteUpdate(sql2, DateUtil.getTimestamp(),list.get(0).get("id"));}return flag;}/*** @param pageBean 传递分页对象* @return 返回一个list集合,这里是通过limit分页查询的结果*/@Overridepublic List<Admin> userList(PageBean pageBean) {List<Admin> lu=new ArrayList<>();List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();String sql="select * from s_admin limit ?,?";list=DbUtil.executeQuery(sql,(pageBean.getCurPage()-1)*pageBean.getMaxSize(),pageBean.getMaxSize());if(list.size()>0) {for(Map<String,Object> map:list) {Admin u=new Admin(map);lu.add(u);}}return lu;}/*** @param user 要增加的用户对象* @return 返回一个boolean true用户增加成功 false用户增加失败*/@Overridepublic boolean userAdd(Admin user) {String sql="insert into s_admin(userName,password,name) values(?,?,?)";int i= DbUtil.excuteUpdate(sql, user.getUserName(),user.getPassWord(),user.getName());return i>0?true:false;	}/*** @param id 根据id查找一个用户信息* @return 返回一个list用户信息集合*///查找指定id用户信息@Overridepublic Admin findUser(Integer id) {String sql="select * from s_admin where id=?";Admin admin=null;List<Map<String,Object>> list=DbUtil.executeQuery(sql, id);if(list.size()>0) {admin=new Admin(list.get(0));}return admin;}//查找用户名是否存在true存在@Overridepublic boolean findUser(String userName) {String sql="select * from s_admin where userName=?";List<Map<String,Object>> list=DbUtil.executeQuery(sql, userName);return list.size()>0?true:false;}/*** * @param admin 更新用户,根据传过来的id* @return boolean*/@Overridepublic boolean userUpdate(Admin admin) {String sql="update s_admin set password=? , name=? where id =?";int i=DbUtil.excuteUpdate(sql, admin.getPassWord(),admin.getName(),admin.getId());return i>0?true:false;}/*** @param id 要删除的用户id* @return 返回boolean true删除用户成功,false删除用户失败*/@Overridepublic boolean delUser(int id) {String sql="delete from s_admin where id=?";int i=DbUtil.excuteUpdate(sql, id);return i>0?true:false;}/*** @param ids 要批量删除id组的字符串*/@Overridepublic boolean batDelUser(String ids) {String sql="delete from s_admin where id in ("+ids+")";int i=DbUtil.excuteUpdate(sql);return i>0?true:false;}@Overridepublic long bookReadCount() {long count=0;String sql="select count(*) as count from s_admin";List<Map<String, Object>> lm=DbUtil.executeQuery(sql);if(lm.size()>0){count=(long) lm.get(0).get("count");}return count;}}
package com.shine.bookshop.dao.impl;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.shine.bookshop.bean.Book;
import com.shine.bookshop.bean.Catalog;
import com.shine.bookshop.bean.PageBean;
import com.shine.bookshop.bean.UpLoadImg;
import com.shine.bookshop.dao.BookDao;
import com.shine.bookshop.util.DateUtil;
import com.shine.bookshop.util.DbUtil;public class BookDaoImpl implements BookDao {@Overridepublic List<Book> bookList(PageBean pageBean) {List<Book> list = new ArrayList<>();String sql = "select * from view_book limit ?,?";// 查询的分页结果集List<Map<String, Object>> lm = DbUtil.executeQuery(sql, (pageBean.getCurPage() - 1) * pageBean.getMaxSize(),pageBean.getMaxSize());// 把查询的book结果由List<Map<String, Object>>转换为List<Book>if (lm.size() > 0) {for (Map<String, Object> map : lm) {Book book = new Book(map);list.add(book);}}return list;}@Overridepublic long bookReadCount() {String sql = "select count(*) as count from s_book";List<Map<String, Object>> lm = DbUtil.executeQuery(sql);return lm.size() > 0 ? (long) lm.get(0).get("count") : 0;}@Overridepublic boolean bookAdd(Book book) {String sql = "insert into s_book(bookName,catalogId,author,press,price,description,imgId,addTime) values(?,?,?,?,?,?,?,?)";int i = DbUtil.excuteUpdate(sql, book.getBookName(), book.getCatalog().getCatalogId(), book.getAuthor(),book.getPress(), book.getPrice(), book.getDescription(), book.getUpLoadImg().getImgId(),DateUtil.getTimestamp());return i > 0 ? true : false;}@Overridepublic Book findBookById(int bookId) {String sql = "select * from view_book where bookId=?";Book book = null;List<Map<String, Object>> list = DbUtil.executeQuery(sql, bookId);if (list.size() > 0) {book = new Book(list.get(0));}return book;}/*** */@Overridepublic boolean findBookByBookName(String bookName) {String sql = "select * from s_book where bookName=?";List<Map<String, Object>> list = DbUtil.executeQuery(sql, bookName);return list.size() > 0 ? true : false;}/*** 更新图书信息*/@Overridepublic boolean bookUpdate(Book book) {String sql = "update s_book set catalogId=?,author=?,press=?,price=?,description=? where bookId=?";int i = DbUtil.excuteUpdate(sql, book.getCatalogId(), book.getAuthor(), book.getPress(), book.getPrice(),book.getDescription(), book.getBookId());return i > 0 ? true : false;}/*** 图书删除*/@Overridepublic boolean bookDelById(int bookId) {String sql = "SET FOREIGN_KEY_CHECKS = 0;delete from s_book where bookId=?";int i = DbUtil.excuteUpdate(sql, bookId);return i > 0 ? true : false;}/*** 批量查询*/@Overridepublic String findimgIdByIds(String ids) {String imgIds = "";String sql = "select imgId from s_book where bookId in(" + ids + ")";List<Map<String, Object>> list = DbUtil.executeQuery(sql);if (list.size() > 0) {for (int i = 0; i < list.size(); i++) {if (i != list.size() - 1) {imgIds += list.get(i).get("imgId") + ",";} else {imgIds += list.get(i).get("imgId");}}}return imgIds;}// 批量删除@Overridepublic boolean bookBatDelById(String ids) {String sql = "delete from s_book where bookId in(" + ids + ")";int i = DbUtil.excuteUpdate(sql);return i > 0 ? true : false;}// 随机查询一定数量的书@Overridepublic List<Book> bookList(int num) {List<Book> list = new ArrayList<>();String sql = "select * from view_book order by rand() LIMIT ?";List<Map<String, Object>> lm = DbUtil.executeQuery(sql, num);// 把查询的book结果由List<Map<String, Object>>转换为List<Book>if (lm.size() > 0) {for (Map<String, Object> map : lm) {Book book = new Book(map);list.add(book);}}return list;}/*** 查询指定数量新书*/@Overridepublic List<Book> newBooks(int num) {List<Book> list = new ArrayList<>();String sql = "SELECT * FROM view_book ORDER BY addTime desc limit 0,?";List<Map<String, Object>> lm = DbUtil.executeQuery(sql, num);// 把查询的book结果由List<Map<String, Object>>转换为List<Book>if (lm.size() > 0) {for (Map<String, Object> map : lm) {Book book = new Book(map);list.add(book);}}return list;}/*** 按分类id统计图书数量*/@Overridepublic long bookReadCount(int catalogId) {String sql = "select count(*) as count from s_book where catalogId=?";List<Map<String, Object>> lm = DbUtil.executeQuery(sql, catalogId);return lm.size() > 0 ? (long) lm.get(0).get("count") : 0;}/*** 按分类id获取图书列表*/@Overridepublic List<Book> bookList(PageBean pageBean, int catalogId) {List<Book> list = new ArrayList<>();String sql = "select * from view_book where catalogId=? limit ?,?";// 查询的分页结果集List<Map<String, Object>> lm = DbUtil.executeQuery(sql, catalogId,(pageBean.getCurPage() - 1) * pageBean.getMaxSize(), pageBean.getMaxSize());// 把查询的book结果由List<Map<String, Object>>转换为List<Book>if (lm.size() > 0) {for (Map<String, Object> map : lm) {Book book = new Book(map);list.add(book);}}return list;}/*** 按分类id获取图书列表*/@Overridepublic List<Book> bookList(PageBean pageBean, String bookname) {List<Book> list = new ArrayList<>();String sql = "select * from view_book where bookName like '%"+bookname+"%' limit ?,?";// 查询的分页结果集List<Map<String, Object>> lm = DbUtil.executeQuery(sql,(pageBean.getCurPage() - 1) * pageBean.getMaxSize(), pageBean.getMaxSize());// 把查询的book结果由List<Map<String, Object>>转换为List<Book>if (lm.size() > 0) {for (Map<String, Object> map : lm) {Book book = new Book(map);list.add(book);}}return list;}@Overridepublic long bookReadCount(String bookname) {String sql = "select count(*) as count from s_book where bookName like '%"+bookname+"%'";List<Map<String, Object>> lm = DbUtil.executeQuery(sql);return lm.size() > 0 ? (long) lm.get(0).get("count") : 0;}}
package com.shine.bookshop.dao.impl;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.shine.bookshop.bean.Catalog;
import com.shine.bookshop.bean.PageBean;
import com.shine.bookshop.dao.CatalogDao;
import com.shine.bookshop.util.DbUtil;public class CatalogDaoImpl implements CatalogDao {/*** 获取图书分类信息*/@Overridepublic List<Catalog> catalogList(PageBean pb) {List<Catalog> list=new ArrayList<Catalog>();String sql = "select * from s_catalog limit ?,?";// 查询的分页结果集List<Map<String, Object>> lm = DbUtil.executeQuery(sql, (pb.getCurPage() - 1) * pb.getMaxSize(),pb.getMaxSize());if(lm.size()>0){for(Map<String,Object> map:lm){Catalog catalog=new Catalog(map);list.add(catalog);}}	return list; }@Overridepublic long catalogReadCount() {long count=0;String sql="select count(*) as count from s_catalog";List<Map<String, Object>> lm=DbUtil.executeQuery(sql);if(lm.size()>0){count=(long) lm.get(0).get("count");}return count;}@Overridepublic List<Catalog> getCatalog() {List<Catalog> list=new ArrayList<Catalog>();String sql="select * from s_catalog";List<Map<String,Object>> lmso=DbUtil.executeQuery(sql);if(lmso.size()>0){for(Map<String,Object> map:lmso){Catalog catalog=new Catalog(map);list.add(catalog);}}	return list; }@Overridepublic boolean catalogDel(int catalogId) {String sql = "delete from s_catalog where catalogId=?";int i = DbUtil.excuteUpdate(sql, catalogId);return i > 0 ? true : false;}@Overridepublic boolean catalogBatDelById(String ids) {String sql="delete from s_catalog where catalogId in("+ids+")";int i=DbUtil.excuteUpdate(sql);return i>0?true:false;}@Overridepublic boolean findCatalogByCatalogName(String catalogName) {String sql = "select * from s_catalog where catalogName=?";List<Map<String, Object>> list = DbUtil.executeQuery(sql, catalogName);return list.size() > 0 ? true : false;}@Overridepublic boolean catalogAdd(String catalogName) {String sql="insert into s_catalog(catalogName) values(?)";int i = DbUtil.excuteUpdate(sql, catalogName);return i > 0 ? true : false;}}

六、底部获取项目源码带万字文档(9.9¥带走)

有问题,或者需要协助调试运行项目的也可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABAP中结合销售订单创建交货单的BAPI函数的使用方法

在ABAP中&#xff0c;结合销售订单创建交货单的BAPI是BAPI_OUTB_DELIVERY_CREATE_SLS。这个BAPI允许你基于一个或多个销售订单行项目来创建交货单。 如何使用BAPI_OUTB_DELIVERY_CREATE_SLS 准备数据&#xff1a; 确定销售订单号码和行项目号码。准备交货单的头数据&#xff0…

typora 两边太宽,设置宽度

步骤&#xff1a; 查看目前使用主题类型 文件 —> 偏好设置 —> 外观 —> 打开主题文件夹 修改对应的主题&#xff1a;max-width

MySQL 数据库支持存储emoji表情

当你通过node.js&#xff0c;往mysql存储emoji表情的时候&#xff0c;可能会遇到报错&#xff1a; code: ‘ER_TRUNCATED_WRONG_VALUE_FOR_FIELD’, errno: 1366, sqlMessage: “Incorrect string value: ‘\xF0\x9F\x8D\x94’ for column ‘nick_name’ at row 1”, sqlState…

AI推介-大语言模型LLMs之RAG(检索增强生成)论文速览(arXiv方向):2024.06.01-2024.06.20

文章目录&#xff5e; 1.StackRAG Agent: Improving Developer Answers with Retrieval-Augmented Generation2.FoRAG: Factuality-optimized Retrieval Augmented Generation for Web-enhanced Long-form Question Answering3.Model Internals-based Answer Attribution for T…

MySQL数据库主从复制+mycat读写分离+MHA实操

目录 一、主从复制 1.1 主从复制简介 1.2 MySQL支持的复制类型 1.3 主从复制的工作过程 1.4 主从复制的同步模式 1.4.1 异步复制&#xff08;Asynchronous replication&#xff09; 1.4.2 全同步复制&#xff08;Fully synchronous replication&#xff09; 1.4.3 半同…

力扣2356.二维差分模板——子矩阵元素加1

力扣2356.二维差分模板——子矩阵元素加1 模板题 最后将n2*n2的矩阵删去周围一圈变成n*n矩阵的操作 class Solution {public:vector<vector<int>> rangeAddQueries(int n, vector<vector<int>>& queries) {vector<vector<int>> res…

MyBatis(36)MyBatis 中如何有效地管理 SQL 语句

在MyBatis中有效地管理SQL语句是非常重要的&#xff0c;尤其是当面对较大或复杂的项目时。有效地管理SQL语句可以提高代码的可维护性、可读性和可重用性。以下是一些在MyBatis中有效管理SQL语句的策略&#xff1a; 1. 使用Mapper XML文件 MyBatis通过Mapper XML文件允许你将S…

前端 JS 经典:字符串比较

题目&#xff1a;比较两个字符串大小&#xff0c;两个字符串都是用-连接的数字&#xff0c;比如 1-2-33-55。比较方式是从左到右&#xff0c;依次比较每个数字的大小&#xff0c;遇到相等的数字继续往后比较&#xff0c;遇到不同的数字直接得到结果。 思路&#xff1a;定义一个…

【ubuntu22.04 安装软件报错】

ubuntu22.04 安装软件报错 报错信息&#xff1a; E: 文件 list 第 1 行的记录格式有误 /etc/apt/sources.list.d/archive_uri-http_security_ubuntu_com_ubuntu-jammy.list (Component)E: 无法读取源列表。分析 以前ubuntu安装软件使用的软件源是记录在 /etc/apt/sources.li…

【JavaWeb程序设计】Servlet(二)

目录 一、改进上一篇博客Servlet&#xff08;一&#xff09;的第一题 1. 运行截图 2. 建表 3. 实体类 4. JSP页面 4.1 login.jsp 4.2 loginSuccess.jsp 4.3 loginFail.jsp 5. mybatis-config.xml 6. 工具类&#xff1a;创建SqlSessionFactory实例&#xff0c;进行 My…

UI设计工具选择指南:Sketch、XD、Figma、即时设计

在数字产品设计产业链中&#xff0c;UI设计师往往起着连接前后的作用。产品经理从一个“需求”开始&#xff0c;制定一个抽象的产品概念原型。UI设计师通过视觉呈现将抽象概念具体化&#xff0c;完成线框图交互逻辑视觉用户体验&#xff0c;最终输出高保真原型&#xff0c;并将…

threadx netxduo stm32f407上实现http server

这次用的是CubeIDE CubeMX 要把NX_APP的mem分配的大一些&#xff0c;在app_azure_rtos.c中&#xff0c;我给的是40*1024&#xff0c;如果给的不够&#xff0c;会导致后面无法分配pool和thread等等 需要用到filex 要在CubeMX里面勾选上&#xff0c;还要用到http_server和dhcp …

使用 Audio Toolbox 的 Audio Services 播放 AAC

使用 Audio Toolbox 的 Audio Services 播放 AAC 使用 Audio Toolbox 的 Audio Services 播放 AAC 使用 Audio Toolbox 的 Audio Services 播放 AAC 主要分为 3 步&#xff1a; 使用 AudioServicesCreateSystemSoundID 创建系统声音。使用 AudioServicesAddSystemSoundComple…

1. InternLM - 入门岛

第1关 Linux 基础知识 1. 完成SSH连接与端口映射并运行hello_world.py SSH连接配置 # wsl2中生成密钥对&#xff08;~/.ssh/id_rsa, ~/.ssh/id_rsa.pub&#xff09; ssh-keygen -t rsa# 将id_rsa.pub在internStudio作为公钥导入SSH登录 $ ssh -p 38871 rootssh.intern-ai.o…

ceph gps backfill_toofull

目的 修复 backfill_toolfull 故障 故障显示如下 ceph -c -scluster:id: axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxhealth: HEALTH_WARN6 clients failing to respond to cache pressureLow space hindering backfill (add storage if this doesnt resolve itself): 2 pgs bac…

汽车免拆诊断案例 | 奥迪 Q7 e-tron无法通过插电式充电器充电

故障现象 车主反映&#xff0c;车辆无法使用自带的插电式充电器充电。&#xff08;这种充电方法是“Mode 2充电”&#xff0c;3针插头&#xff0c;10 A&#xff0c;2.2 kW&#xff09; 接车后验证故障&#xff0c;将Type 2充电插头连接到车辆时&#xff0c;充电口锁定销循环三…

3DSC(3D形状上下文特征)

形状上下文(shape context简写为SC)由Serge Belongie等人于2002年首次提出,是一种很流行的二维形状特征描述子,多用于目标识别和形状特征匹配。 2004年,Andrea Frome等人将形状上下文的工作从二维数据迁移到三维数据上提出了3D形状上下文(3DSC) 原理解析 2DSC的算法流程…

Git的基本知识点 + GitBash安装Pacman + Git命令含有中文,终端输出中文乱码

Git的基本知识点&#xff1a;整理自以下作者的文章繁华似锦Fighting的文章https://www.jianshu.com/nb/49854893另外还补充了git ls-file、.gitignore 等内容&#xff0c;涉及具体操作&#xff0c;还有命令总结。简略版可以看以上作者的文章&#xff0c;详细版可以看网盘里面的…

JAVA简单封装UserUtil

目录 思路 一、TokenFilterConfiguration 二、FilterConfig 三、TokenContextHolder 四、TokenUtil 五、UserUtil 思路 配置Token过滤器(TokenFilterConfiguration)&#xff1a;实现一个Token过滤器配置&#xff0c;用于拦截HTTP请求&#xff0c;从请求头中提取Token&…

IDEA Plugins 网络异常解决办法

设置HTTP代理&#xff1a; 进入 File -> Settings -> Appearance & Behavior -> System Settings -> HTTP Proxy。勾选 “Auto-detect proxy setting” 或者手动设置代理&#xff0c;例如 http://127.0.0.1:1080 或 https://plugins.jetbrains.com。重启 IDEA…