基于SSM+jsp的电子商城系统设计与实现

news2024/10/6 22:21:26

 博主介绍:  

大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。
我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下进行项目开发,具有丰富的项目经验和开发技能。我的代码风格规范、优美、易读性强,同时也注重性能优化、代码重构等方面的实践和经验总结。
我有丰富的成品Java毕设项目经验,能够为学生提供各类个性化的开题框架和实际运作方案。同时我也提供相关的学习资料、程序开发、技术解答、代码讲解、文档报告等专业服务。

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

Java项目精品实战案例(300套)

电子商城系统源码下载地址:

https://download.csdn.net/download/weixin_54828627/87845601

一、效果演示

基于java+jsp+SSM的电子药品商城系统演示视频

二、前言介绍

随着社会的发展,计算机的优势和普及使得电子商城系统的开发成为必需。电子商城系统主要是借助计算机,通过对信息进行管理。减少管理员的工作,同时也方便广大用户对个人所需信息的及时查询以及管理,其次是大量信息的管理,最后是高度安全,以及使用简单等特性,这使得电子商城系统的管理和运营非常方便。

电子商城系统的开发过程中,采用B / S架构,主要使用jsp技术进行开发,中间件服务器是Tomcat服务器,使用Mysql数据库和Eclipse开发环境。该电子商城系统包括用户、医生和管理员。

三、主要技术

技术名作用
SSM后端框架
jsp前端框架
MySQL数据库

四、系统设计(部分)

4.1、主要功能模块设计         

主要功能包括管理员:个人中心、用户管理、医生管理、药品信息管理、线上诊疗管理、医生信息管理、管理员管理、论坛管理、系统管理、订单管理,用户:个人中心、个人中心、线上诊疗管理,医生;个人中心、线上诊疗管理,前台首页;首页、药品信息、医生信息、论坛信息、我的、跳转到后台、购物车、客服等功能。

4.2、管理员功能设计

五、运行截图

5.1、管理员功能模块

管理员登录,通过填写用户名、密码进行登录,如图5-1所示。

图5-1管理员登录界面图

管理员登录进入电子商城系统可以查看个人中心、用户管理、医生管理、药品信息管理、线上诊疗管理、医生信息管理、管理员管理、论坛管理、系统管理、订单管理等信息,如图5-2所示。

图5-2管理员功能界面图

5.1.1、医生管理

图5-3医生管理界面图

5.1.2、药品信息管理

图5-4药品信息管理界面图

5.1.3、线上诊疗管理

图5-5线上诊疗管理界面图

5.1.4、医生信息管理

图5-6医生信息管理界面图

5.1.5、管理员管理

图5-7管理员管理界面图

5.1.6、轮播图

图5-8轮播图管理界面图

5.1.7、订单管理

图5-9订单管理界面图

5.2、用户功能模块

用户登录进入电子商城系统可以查看个人中心、线上诊疗管理等内容,如图5-10所示。

图5-10用户功能界面图

5.3、医生功能模块

医生登录进入电子商城系统可以查看个人中心、线上诊疗管理等内容,如图5-11所示。

图5-11医生功能界面图

5.4、前台首页功能模块

 电子商城系统,在电子商城系统可以查看首页、药品信息、医生信息、论坛信息、我的、跳转到后台、购物车、客服等内容,如图5-12所示。

图5-12系统首页界面图

5.4.1、用户登录、用户注册

图5-13用户注册、用户登录界面图

5.4.2、药品信息

图5-14药品信息界面图

5.4.3、医生信息

图5-15医生信息界面图

功能太多,此处就不一一展示了

六、数据库设计(部分)

概念设计主要是通过数据库的概念结构和模式进行建立数据库嗯逻辑结构,然后利用数据库的DBMS进行完成,它不需要计算机系统的支持。通过系统的整体来看,主要是对数据库进行管理、整理、更新等操作。数据库的功能是非常强大的,每个系统的开发肯定离不开数据库,通过数据库可以看得出整个系统的质量和效率,根据以上的系统分析,对系统中的主要实体进行规划。以下是几个关键实体的实体关系图:

(1) 用户信息实体E-R图如图4-2所示:

图4-2用户信息实体属性图

 (2) 医生信息实体E-R图如图4-3所示:

 

 图4-3医生信息实体图

七、代码参考

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.AddressEntity;
import com.entity.view.AddressView;

import com.service.AddressService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 地址
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-31 23:55:45
 */
@RestController
@RequestMapping("/address")
public class AddressController {
    @Autowired
    private AddressService addressService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,AddressEntity address, 
		HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		address.setUserid((Long)request.getSession().getAttribute("userId"));
    	}

        EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();
    	PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,AddressEntity address, HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		address.setUserid((Long)request.getSession().getAttribute("userId"));
    	}

        EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();
    	PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( AddressEntity address){
       	EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();
      	ew.allEq(MPUtil.allEQMapPre( address, "address")); 
        return R.ok().put("data", addressService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(AddressEntity address){
        EntityWrapper< AddressEntity> ew = new EntityWrapper< AddressEntity>();
 		ew.allEq(MPUtil.allEQMapPre( address, "address")); 
		AddressView addressView =  addressService.selectView(ew);
		return R.ok("查询地址成功").put("data", addressView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        AddressEntity address = addressService.selectById(id);
        return R.ok().put("data", address);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        AddressEntity address = addressService.selectById(id);
        return R.ok().put("data", address);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody AddressEntity address, HttpServletRequest request){
    	address.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(address);
    	address.setUserid((Long)request.getSession().getAttribute("userId"));
		Long userId = (Long)request.getSession().getAttribute("userId");
    	if(address.getIsdefault().equals("是")) {
    		addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", userId));
    	}
    	address.setUserid(userId);

        addressService.insert(address);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody AddressEntity address, HttpServletRequest request){
    	address.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(address);
    	address.setUserid((Long)request.getSession().getAttribute("userId"));
		Long userId = (Long)request.getSession().getAttribute("userId");
    	if(address.getIsdefault().equals("是")) {
    		addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", userId));
    	}
    	address.setUserid(userId);

        addressService.insert(address);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody AddressEntity address, HttpServletRequest request){
        //ValidatorUtils.validateEntity(address);
        if(address.getIsdefault().equals("是")) {
    		addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", request.getSession().getAttribute("userId")));
    	}
        addressService.updateById(address);//全部更新
        return R.ok();
    }
    
    /**
     * 获取默认地址
     */
    @RequestMapping("/default")
    public R defaultAddress(HttpServletRequest request){
    	Wrapper<AddressEntity> wrapper = new EntityWrapper<AddressEntity>().eq("isdefault", "是").eq("userid", request.getSession().getAttribute("userId"));
        AddressEntity address = addressService.selectOne(wrapper);
        return R.ok().put("data", address);
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        addressService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<AddressEntity> wrapper = new EntityWrapper<AddressEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}
		if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));
    	}


		int count = addressService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	


}

八、技术交流

大家点赞、收藏、关注、评论啦 、查看文章结尾👇🏻获取联系方式👇🏻

精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例(300套)

​​​​

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

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

相关文章

IT云运维技术分享

1 运维体系 1.1 市场对运维的需求 时代发展到今天&#xff0c;社会的生活方式与生产方式的全面的数字化&#xff0c;无论是传统企业还是互联网企业&#xff0c;都在全面上云&#xff0c;这也意味着企业的关键业务乃至“身家性命”都已经全部放在 IT 系统之上&#xff0c;因此…

UWB自组网定位方案_基于UWB技术的消防应急救援定位解决方案

目前国内应急救援市场都是基于被动定位应用&#xff0c;在特殊情况下救援也大多处于单兵作战的情况&#xff0c;并不能及时知道自己和自己组员的位置信息和状态&#xff0c;且没有场景感知和室内外一体位置信息结合&#xff0c;使相关救援人员处于更加危险境地。本篇就带大家详…

【SWAT水文模型】Tips1:土地利用/土壤类型以全国数据分类

Tips1&#xff1a;土地利用/土壤类型以全国数据分类 1 土壤类型处理Step1 从全国土壤数据库中裁剪得到研究区域内土壤类型Step2 确定研究区域内重分类标准及类型 参考 1 土壤类型处理 直接对全国土壤类型数据进行分类&#xff0c;在SWAT模型中输入全国土壤类型&#xff0c;亦可…

【Linux】文件权限解析

一、Linux用户分类 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户的…

近期煤矿事故及电力综合自动化系统的介绍

安科瑞虞佳豪 5月29日&#xff0c;山西灵石红杏鑫鼎泰煤业有限公司发生一起死亡1人的安全事故&#xff1b;5月24日&#xff0c;山西华阳集团新能股份有限公司二矿发生一起死亡1人的安全事故。 ​山西省应急管理厅、山西省地方煤矿安全监督管理局责令山西灵石红杏鑫鼎泰煤业有…

软考高级系统架构设计师(三) 基础知识之操作系统3文件管理

目录 文件管理 索引文件结构 位示图 ​树形目录结构 文件管理 文件管理&#xff0c;主要涉及文件的逻辑组织和物理组织&#xff0c;目录的结构和管理 索引文件结构 索引文件结构&#xff1a;通常是13个节点的结构&#xff0c;分为直接索引&#xff08;0-9&#xff09;&#…

星辰天合与中飞院合作 成立“民航高性能数据分析与存储联合实验室”

近日&#xff0c;星辰天合与中国民航飞行学院&#xff08;以下简称“中飞院”&#xff09;宣布合作成立“民航高性能数据分析与存储联合实验室”&#xff08;以下简称“存储实验室”&#xff09;&#xff0c;并由星辰天合 CTO 王豪迈与现任中飞院总飞行师的“中国民航英雄机长”…

Winfrom多语言切换

“ 实现多语言的切换原理和ResXResourceManager使用。” &#xff0c;时长00:08 实现多语言的切换原理就很简单了&#xff0c;例如默认是中文&#xff0c;from下就会有一个Form1.resx资源文件&#xff0c;所有的资源文件都是.resx。换个思路如果是WPF程序&#xff0c;那么资源文…

String类—javaSE

文章目录 1.常用方法1.1字符串构造1.2String对象的比较1.3字符串查找1.4转化1.5字符串替换1.6字符串拆分1.7字符串的截取1.8去掉字符串中的左右空格&#xff0c;保留中间空格 2.字符串常量池2.1 直接使用字符串常量进行赋值2.2通过new创建String类对象2.3 intern方法2.4String类…

韵达快递,你在玩我吗?请你不要挑战用户的底线!

这个周末真的是被韵达快递给气死了。 面对这样的服务&#xff0c;真的是不吐不快。 搞笑之处在于&#xff0c;表面功夫很到位&#xff0c;看似服务很全面&#xff0c;然后就是落实不到位。 为什么会被韵达快递气到呢&#xff1f;在网上买了 6 箱认养一头牛的儿童牛奶&#xff0…

持 PMP®证书增持 CSPM-2证书,大有用处,靠谱!

2023年起&#xff0c;持有PMP证书的朋友可以直接增持一个同等级证书CSPM-2&#xff0c;不用重新考试&#xff0c;不用重新学习&#xff0c;原PMP证书不影响正常使用&#xff0c;相当于多了一个国标项目管理领域的证书。 第一步准备资料 1、填写能力评价表(简历和业绩不用填&am…

ASP.NET Core Web API入门之三:使用EF Core

ASP.NET Core Web API入门之三&#xff1a;使用EF Core 一、引言二、EF Core 的优缺点2.1 优点&#xff1a;2.2 缺点&#xff1a; 三、使用前安装&#xff1a;NuGet包四、实体类更新到数据库实体表4.1 创建 DBEntity 属性4.2 appsettings.json 配置数据库连接串4.3 修改 DemoCo…

Spring Boot 如何使用 Web 容器

Spring Boot 如何使用 Web 容器 在使用 Spring Boot 进行开发时&#xff0c;我们通常需要使用 Web 容器来处理 HTTP 请求和响应。本文将介绍 Spring Boot 如何使用 Web 容器&#xff0c;包括如何配置 Web 容器、如何处理 HTTP 请求和响应等内容&#xff0c;并提供相应的代码示…

堡垒机免费版在哪里下载?是否安全可靠?

2023年整体大环境都不容乐观&#xff0c;很多企业预算有限。但安全运维又至关重要&#xff0c;因此很多企业都在寻找堡垒机免费版&#xff0c;都在问堡垒机免费版在哪里下载&#xff1f;是否安全可靠&#xff1f;这里我们小编就来简单解答一下。 堡垒机免费版在哪里下载&#…

聚焦行业云方案共性,Gartner 给出最新建议:建设行业云平台

出品 | CSDN 云计算 对绝大部分 IT 从业者来说&#xff0c;云计算是从 2005 年开始以 IaaS 进入他们眼中&#xff0c;同时&#xff0c;云计算的相关技术演化从基础设施、技术平台、数据/分析、人工智能机器学习等多个领域都产生了颠覆性的技术变革。不过&#xff0c;在云化之后…

如何监测Android网络类型:5G/4G/3G/2G能力

如何监测Android网络类型&#xff1a;5G/4G/3G/2G能力 App可以通过了解所连接的网络类型来获益&#xff0c;例如启用某些功能需要5G提供的带宽和低延迟。如果只有2G或3G网络可用&#xff0c;加载时间会比较慢&#xff0c;因此我们可以对加载时间有一定的预期。 在这里&#xf…

Chatterbot 打造游戏AI客服机器人

准备工具 1、开发语言&#xff1a;Python3 2、数据库&#xff1a;MongoDB 3、开源框架&#xff1a;Chatterbot 4、依赖类库&#xff1a; pip3 install chatterbotpip3 install spacy# 需要手动编译安装 en_core_web_sm(使用2.1版本)pip3 install jiebapip3 install colo…

Web网页制作期末复习(3)——HTML5新增标签、CSS简介、CSS的引入方式、选择器、字体属性、背景属性、表格属性、关系选择器

目录 HTML5新增标签 CSS简介 CSS概念 CSS的作用 语法 CSS的引入方式 内联样式&#xff08;行内样式&#xff09; 内部样式 外部样式&#xff08;推荐&#xff09; 选择器 全局选择器 元素选择器 类选择器 ID选择器 合并选择器 选择器的优先级 字体属性 …

python多线程----------主线程,子线程,任务讲解----拿下就是胜利

这一篇博客主要介绍给分不清楚主线程.子线程的小可爱们 在之前的一篇博客中我简单的介绍了并发,并行 并发:是在时段的完成多个任务 ,但是每个时间点只有一个任务运行 而多线程就是这一个原理 非守护线程 代码: from threading import Thread import requests from seleni…

规则引擎调研及初步使用 | 京东云技术团队

一、产生的背景 生产过程中&#xff0c;线上的业务规则内嵌在系统的各处代码中&#xff0c;每次策略的调整都需要更新线上系统&#xff0c;进行从需求->设计->编码->测试->上线这种长周期的流程&#xff0c;满足不了业务规则的快速变化以及低成本的更新试错迭代。…