基于SpringBoot+Vue的逍遥大药房管理系统设计与实现

news2024/12/23 21:02:42

博主介绍:

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

🍅文末获取联系方式🍅

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

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

逍遥大药房管理系统源码下载地址:

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

一、效果演示

基于SpringBoot+Vue的逍遥大药房管理系统演示视频

二、前言介绍

伴随着全球信息化发展,行行业业都与计算机技术相衔接,计算机技术普遍运用于药房管理行业。实施计算机系统来管理可以降低逍遥大药房管理成本,使整个逍遥大药房行业的发展有显著提升。

本论文主要面向逍遥大药房管理中出现的一些常见问题,将其与计算机管理系统结合起来。通过这个系统,管理员可以更加方便的管理逍遥大药房信息;可以清楚的了解逍遥大药房信息管理情况;以管理员登录系统,通过首页,个人中心,用户管理,保健品分类管理,药品分类管理,药品信息管理,疫情常识管理,保健品管理,系统管理,订单管理等功能模板,可以有效的分配各用户的权限。逍遥大药房管理系统在逍遥大药房管理中的应用,可以很大程度上提高管理水平,获得更好的经济效益。

三、主要技术

技术名作用
SpringBoot后端框架
Vue前端框架
MySQL数据库

四、系统设计(部分)

4.1、主要功能模块设计         

统分为管理员功能模块,用户功能模块。

用户登录系统,可以实现首页,药品信息,疫情常识,保健品,系统公告,个人中心,购物车等内容进行操作;

管理员功能模块为管理员操作界面,主要包括首页,个人中心,用户管理,保健品分类管理,药品分类管理,药品信息管理,疫情常识管理,保健品管理,系统管理,订单管理等功能;

​​

4.2、系统登录设计 

​​

五、运行截图

5.1、系统功能模块

逍遥大药房管理系统,在系统首页可以查看首页,药品信息,疫情常识,保健品,系统公告,个人中心,购物车等内容进行详细操作,如图5-1所示。

图5-1系统首页界面图

5.1.1、药品信息

图5-2药品信息界面图

5.1.2、疫情常识

图5-3疫情常识界面图

5.1.3、保健品

图5-4保健品界面图

5.1.4、用户注册

图5-5用户注册界面图

5.1.5、个人中心

图5-6个人中心界面图

5.2、管理员功能模块

管理员进行登录,进入系统前在登录页面根据要求填写用户名和密码,等信息点击登录进行登录操作,如图5-7所示。

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

管理员登录系统后,可以对首页,个人中心,用户管理,保健品分类管理,药品分类管理,药品信息管理,疫情常识管理,保健品管理,系统管理,订单管理等进行相应的操作管理,如图5-8所示。

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

5.2.1、用户管理

图5-9用户管理界面图

5.2.2、保健品分类管理

图5-10保健品分类管理界面图

5.2.3、药品信息管理

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

5.2.4、疫情常识管理

图5-12疫情常识管理界面图

5.2.5、保健品管理

图5-13保健品管理界面图

5.2.6、系统管理

图5-14系统管理界面图

5.2.7、订单管理

图5-15订单管理界面图

六、数据库设计(部分)

1)根据用户需求,确定数据库信息进行保存

对用户的需求分析是数据库设计的第一阶段,用户的需求调研,熟悉药房运作流程,系统要求,这些都是以概念模型为基础的。

(2)设计数据的概念模型

概念模型与数据建模用户的观点一致,用于信息世界的建模工具。通过E-R图可以清楚地描述系统涉及到的实体之间的相互关系。

用户管理实体图如图所示:

​​

图用户管理实体图

药品信息管理实体图如图所示:

 ​​

 药品信息管理实体图

七、代码参考

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.transaction.annotation.Transactional;
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;
import java.io.IOException;

/**
 * 地址
 * 后端接口
 * @author 
 * @email 
 * @date 2022-04-24 10:26:04
 */
@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));

        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));
        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);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @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")
    @Transactional
    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项目精品实战案例(200套)

​​

​​​​​

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

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

相关文章

干货,一文弄懂RF检波器那些事

WiFi、4G、蓝牙等各种无线连接技术的普及带动各种终端设备井喷式增长&#xff0c;包括物联网、可穿戴等各种基于无线连接技术的新兴产业迅速成长起来&#xff0c;各种无线信号链解决方案涌现推动这种热潮的持续发展。在无线信号链中&#xff0c;很久没有听到有人提起一个关键的…

快速开发和使用Android串口

一、什么是串口 串口叫做串行接口&#xff0c;也称串行通信接口&#xff0c;也可以叫做COM口&#xff0c;按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB等。串行接口是指数据一位一位地顺序传送&#xff0c;其特点是通信线路简单&#xff0c;只要一对传输线就可以实现…

计算机视觉—YOLO V4

计算机视觉—YOLO V4 1、YOLO V41.1、网络结构1.1.1、BackBone&#xff1a;CSPDarknet531.1.2、Neck&#xff1a;SPP结构1.1.3、Neck&#xff1a;PAN结构1.1.4、YOLO v4整体结构 1.2、优化策略 1、YOLO V4 原论文下载地址&#xff1a;https://arxiv.org/abs/2004.10934 1.1、…

Windows中安装GCC教程

GCC的安装教程 GCC简介 GCC编译器通常在Linux系统下使用&#xff0c;一般来说大部分发行的系统会默认安装&#xff0c;GCC编译器使用gcc指令在终端进行shell操作。 对于新接触Linux的朋友来说&#xff0c;简单的在Windows中练习过渡一下应该就足够了。&#xff08;我就是因为…

Apache IoTDB 荣获国家网信办 2022 年中国开源创新大赛决赛一等奖,三位核心研发荣获表彰!...

项目获得权威认可&#xff01; 2023 年 5 月 15 日&#xff0c;2022 年中国开源创新大赛组委会对外公布“2022 中国互联网发展创新与投资大赛公益项目暨2022年中国开源创新大赛”决赛获奖名单&#xff0c;并于 2023 年 5 月 31 日在北京举办“2022年中国开源创新大赛总结发布活…

chatgpt赋能python:用Python编写FizzBuzz——解析最简单的编程题

用Python编写FizzBuzz——解析最简单的编程题 作为每个程序员的入门题目&#xff0c;FizzBuzz是一个简单但常见的问题。FizzBuzz要求我们用数字1到100来打印输出&#xff0c;但是当数字是3的倍数时&#xff0c;需要输出Fizz&#xff1b;当数字是5的倍数时&#xff0c;需要输出…

力扣高频SQL50题(基础版)——第三天

力扣高频SQL50题(基础版)——第三天 1 产品销售分析Ⅰ 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT p.product_name,s.year,s.price FROM Sales s INNER JOIN Product p …

chatgpt赋能python:Python几次方函数介绍

Python几次方函数介绍 Python作为一门高级编程语言&#xff0c;具有丰富的数学函数库。其中&#xff0c;几次方函数在许多数值计算、数据分析和科学计算中都得到广泛应用。Python中的几次方函数有多种实现方式&#xff0c;包括内置函数pow()、运算符**、NumPy库的numpy.power(…

(3)NUC 980 kenerl编译

解压 用到的配置文件位置&#xff1a; /NUC980-linux-4.4.y-master/arch/arm/configs/nuc980_defconfig 执行&#xff1a; 编译linux内核源码。了解其 配置文件在 arch/arm/configs/nuc980_defconfig (1) make nuc980_defconfig 载入配置文件 (2) make menuconfig --->Devi…

机器龙的制作

1. 功能说明 本文示例将实现R326样机机器龙边张合嘴巴、边煽动翅膀、边摆动尾巴运动的功能。 2. 结构说明 本项目使用的机器龙样机是用可以用探索者零件或者探索者兼容零件制作。样机主要由头部模块、翅膀模块、尾巴模块、四足行走模块四部分组成。其中头部模块由2自由度并联关…

从元宇宙到生成式AI:炒作、现实和未来前景

不久前&#xff0c;科技界充斥着一种被称为元宇宙的未来主义概念。这个相互关联的虚拟现实空间宇宙&#xff0c;个人可以在模拟环境中进行交互&#xff0c;被誉为技术的未来。如今围绕元宇宙的炒作已经彻底失败了。技术重点现在已经转向生成AI&#xff0c;重点是像GPT-4和谷歌的…

一文搞懂Flutter的手势事件——事件分发与冲突处理详解

本文字数&#xff1a;43617字 预计阅读时间&#xff1a;110分钟 前言 之前有两篇文章都围绕着runApp()进行展开&#xff0c;讲解了布局绘制的详细过程。 https://www.jianshu.com/p/2ef749ff4d40/https://www.jianshu.com/p/f37f8da235ec 那么接下来我们想详细的说一说Flutter是…

哔哩哔哩视频云画质与窄带高清AI落地实践

视频赛道卷到下半场&#xff0c;一定会面临体验与成本的对抗&#xff0c;尤其是在行业大环境“过冬”的背景下&#xff0c;想要在有限带宽下获得最佳的画质观感变得异常具备挑战性。从视频云业务场景的视角来看&#xff0c;如何有效解决cross-domain问题、如何突破低业务延迟下…

留学生用ChatGPT写论文?真的会被开除!!!

转眼进入6月&#xff0c;大家的论文完成的怎么样了&#xff1f;很多留学生都有这样的疑问&#xff0c;用ChatGPT写论文靠谱吗&#xff1f; 其实在最近&#xff0c;&#xff0c;ChatGPT被学生用来辅助写论文&#xff0c;已经不是什么新鲜事了。它作为新型人工智能&#xff0c;搜…

二十三种设计模式:状态模式

状态模式&#xff0c;就是把所有的状态抽象成一个个具体的类&#xff0c;然后继承一个抽象状态类&#xff0c;在每一个状态类内封装对应状态的行为&#xff0c;符合开放封闭原则&#xff0c;当增加新的状态或减少状态时&#xff0c;只需修改关联的类即可。很适合多分支行为方法…

SpringBoot使用flywaydb实现数据库版本管理【附源码】

一、项目背景 本文主要是配合SpringBoot使用用户输入的自定义数据源启动一文附带产出。前文主要介绍了SpringBoot无数据源启动&#xff0c;然后通过用户录入自定义数据库配置后&#xff0c;连接数据库的操作。但是当整个项目交给用户使用时&#xff0c;谁使用都不知道情况下&a…

JetBrains的.NET和ASP.NET集成开发环境Rider 2023版本在Linux系统的下载与安装配置教程

目录 前言一、Rider 安装二、使用配置总结 前言 Rider是一款专为.NET和ASP.NET开发人员设计的集成开发环境&#xff08;IDE&#xff09;。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地编写、调试和部署.NET和ASP.NET应用程序。注&#xff1a;已在CentOS7.9和…

Java课程设计之购物车管理系统

一、项目准备 1、开发工具&#xff1a;JDK、Eclipse 2、需求分析&#xff1a; 包括商品管理和购物车管理。 1&#xff09;商品管理主要功能 商品信息导入 显示所有商品信息 2&#xff09;购物车主要功能 添加商品到购物车 修改购物车中的商品数量 显示购物车中的所有商…

运维小白必学篇之基础篇第六集:权限实验

权限实验 实验作业&#xff1a; 1、创建1.txt文件&#xff0c;修改1.txt文件权限为属主最大&#xff0c;属组读写&#xff0c;其他人无权限 2、单独为1.txt文件的属组赋予执行权限 3、修改1.txt的属组为a1 4、修改用户a2的登录shell为/bin/bash 5、创建a1用户&#xff0c;设置…

chatgpt赋能python:Python内置函数求和

Python内置函数求和 Python是一种易学易用的编程语言&#xff0c;是许多开发人员和数据分析师的首选语言。Python提供了多种内置函数来处理不同的任务&#xff0c;其中包括求和函数。本文将介绍Python中的内置求和函数以及如何使用它们。 Python内置求和函数 在Python中&…