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,一经查实,立即删除!

相关文章

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…

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…

【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 …

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…

汽车免拆诊断案例 | 奥迪 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;详细版可以看网盘里面的…

【STM32学习】stm32cubemx基础配置,点亮/闪烁一个LED灯

1、cubemx开始 打开cubemx&#xff0c;在help栏中&#xff0c;点击&#xff0c;选择安装你所需要的stm32芯片版本&#xff0c; 打开后&#xff0c;选择你所配置的芯片型号&#xff0c;如我配置的是stm32f4系列&#xff0c;勾选&#xff0c;点击Install。 安装好后&#xff0c;…

HybridCLR原理中的重点总结

序言 该文章以一个新手的身份&#xff0c;讲一下自己学习的经过&#xff0c;大家更快的学习HrbirdCLR。 我之前的两个Unity项目中&#xff0c;都使用到了热更新功能&#xff0c;而热更新的技术栈都是用的HybridCLR。 第一个项目本身虽然已经集成好了热更逻辑&#xff08;使用…

Java | Leetcode Java题解之第227题基本计算器II

题目&#xff1a; 题解&#xff1a; class Solution {public int calculate(String s) {Deque<Integer> stack new ArrayDeque<Integer>();char preSign ;int num 0;int n s.length();for (int i 0; i < n; i) {if (Character.isDigit(s.charAt(i))) {num…

Elasticseach学习

概念 是一个开源的分布式搜索引擎&#xff0c;可以应用于搜索、日志监控等 倒排索引 正向索引&#xff1a;基于文档id创建索引。查询词条时必须先找到文档&#xff0c;而后判断是否包含词条 倒排索引&#xff1a;对文档内容分词&#xff0c;对词条创建索引&#xff0c;并记录…

docker-compose mongodb 副本集

准备 cd /opt/mongos 把 3 个节点的数据目录创建好 mkdir -p ./mongos/{mongo1,mongo2,mongo3} mongodb 使用 keyFile 进行认证&#xff0c;副本集群中的每个节点的 mongodb 使用 keyFile 的内容作为认证其他成员的共享密码。mongodb 实例只有拥有正确的 keyFile 才可以加入副…

HCIP课堂笔记

第一章 1、数据转换---目标&#xff1a;抽象语言---二进制---电信号 2、应用程序---接收参数和指令&#xff08;编码&#xff1a;接收传递给计算机指令参数最终转换为二进制&#xff09; 3、二进制---电信号 4、对于整个互联网而言指定了统一的标准——OSI/RM参考模型 &…

GitLab和Git

GitLab保姆级教程 文章目录 GitLab保姆级教程一、GitLab安装二、添加组和用户三、新增项目四、Git上传项目说明五、命令行指引 根据以下说明从计算机中上传现有文件&#xff1a;六、创建与合并分支七、GitLab回滚到特定版本八、数据备份与恢复九、docker中创建gitlab GIT 常用命…

“金山-讯飞”杯2024年武汉理工大学程序设计竞赛 A. Mobiusp败走***(思维题-点双连通分量、连通性)

题目 思路来源 官方题解 题解 手玩发现&#xff0c;能换的话&#xff0c;当且仅当.和1在一个环里&#xff0c;而这就是点双连通分量 所以最优策略是先把.换到(x,y)的位置&#xff0c;然后判断.和1在不在一个环里 也就是&#xff1a; 1. 判断删掉1时&#xff0c;.和(x,y)联…

vue 搭建 pinia

文章目录 环境设置存储读取数据【 storeToRefs】借助storeToRefs将store中的数据转为ref对象&#xff0c;方便在模板中使用【getters】当state中的数据&#xff0c;需要经过处理后再使用时&#xff0c;可以使用getters配置【$subscribe】通过 store 的 $subscribe() 方法侦听 s…