毕业设计|基于Springboot实现药店管理系统

简介: 毕业设计|基于Springboot实现药店管理系统

项目编号:BS-YL-023

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:Springboot+Mybatis+HTML

二,项目简介

药店管理系统在国内外都有相关的研究和应用。国内外研究背景主要包括以下几个方面:

  1. 国内医药信息化发展:随着我国医疗卫生事业的不断发展,医药信息化已成为国家战略发展的一部分。国内很多高校、科研机构和企业对医药信息化管理系统进行了深入研究,包括药品管理、库存管理、销售管理、财务管理等方面。
  2. 国外医疗信息化应用:在美国、欧洲等发达国家,医疗信息化水平较高,药店管理系统也得到了广泛应用和研究。许多医药连锁企业和零售药店采用先进的信息技术来管理药品、订单、客户关系等,提高了运营效率和服务水平。
  3. 学术研究成果:学术界也对药店管理系统进行了一定的研究,涉及信息技术、管理学、医药学等多个领域,提出了许多关于系统设计、应用案例、管理模式等方面的理论成果和实践经验。
  4. 实际案例与经验总结:在实际应用中,一些药店管理系统的设计与应用案例也为国内外的研究提供了宝贵的经验和借鉴。

总的来说,国内外在药店管理系统方面的研究背景丰富多样,涉及医药、信息技术、管理学等多个领域,通过借鉴和总结这些研究成果,可以为药店管理系统的设计和实际应用提供更好的理论指导和实践经验。

本次项目主要基于Springboot+HTML开发实现一个药店管理系统。面向的用户有两类,一个是消费者用户,一类是药店的员工,不同的用户登录系统实现的功能操作不同。

员工用户注册登录后可以实现的主要操作为:图形报表信息统计,药品数量统计,供货商数量统计,客户数量统计,销量信息统计。个人信息管理、药品类别管理、药品管理、客户管理、供货商管理、进货管理、退货管理、销售管理等模块。

个人用户注册登录后可以实现的操作为:个人信息管理、药品查询与购买、个人订单查询管理等。

三,系统展示

消费者用户操作:

注册登录

个人信息管理

药品查询与购买

己购商品查询

员工登录系统后

信息统计

个人信息管理

客户管理

药品类别管理

药品管理

客户管理

供货商管理

进货管理

退货管理

销售账单管理

四,核心代码展示

package cn.tedu.drug.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.ExceptionHandler;
import cn.tedu.drug.service.exception.BarCodeDuplicateException;
import cn.tedu.drug.service.exception.CategoryNameDuplicateException;
import cn.tedu.drug.service.exception.DeleteException;
import cn.tedu.drug.service.exception.EmailDuplicateException;
import cn.tedu.drug.service.exception.ForeignKeyReferenceException;
import cn.tedu.drug.service.exception.InsertException;
import cn.tedu.drug.service.exception.InventoryException;
import cn.tedu.drug.service.exception.InventoryFoundException;
import cn.tedu.drug.service.exception.OnExistException;
import cn.tedu.drug.service.exception.PasswordNotMatchException;
import cn.tedu.drug.service.exception.PermissionsInsufficientException;
import cn.tedu.drug.service.exception.PhoneDuplicateException;
import cn.tedu.drug.service.exception.PhoneNotFoundException;
import cn.tedu.drug.service.exception.ServiceException;
import cn.tedu.drug.service.exception.SupplierNotFoundException;
import cn.tedu.drug.service.exception.UpdateException;
import cn.tedu.drug.service.exception.UserNotFoundException;
import cn.tedu.drug.service.exception.YearMonthException;
import cn.tedu.drug.util.ResponseResult;
/**
 * 控制器类的基类
 * 
 *
 */
public abstract class BaseController  {
  /**
   * 相应结果状态,成功
   */
  public static final Integer SUCCESS = 200;
  /**
   * 文件上传路径
   */
  public static final String UPLOAD_DIR = "upload";
  /**
   * 确定允许上传的文件的大小为一兆
   */
  public static final long UPLOAD_MAX_SIZE = 1*1024*1024;
  /**
   * 确定允许上传的文件类型列表
   */
  public static final List<String> UPLOAD_CONTENT_TYPE = new ArrayList<String>();
  static {
    UPLOAD_CONTENT_TYPE.add("image/png");
    UPLOAD_CONTENT_TYPE.add("image/jpeg");
    UPLOAD_CONTENT_TYPE.add("image/gif");
    UPLOAD_CONTENT_TYPE.add("image/bmp");
  }
  /**
   * 通过session获取uid
   * @param session
   * @return
   */
  protected final Integer getUidFromSession(HttpSession session) {
    return Integer.valueOf( session.getAttribute("uid").toString() );
  }
  /**
   * 处理异常
   * @param e
   * @return
   */
  @ExceptionHandler(ServiceException.class)
  public ResponseResult<Void> handleException(Throwable e){
    ResponseResult<Void> rr = new ResponseResult<Void>();
    rr.setMessage( e.getMessage() );
    if( e instanceof PhoneDuplicateException ) {
      rr.setState(400); //400-电话冲突
    }else if(e instanceof EmailDuplicateException){
      rr.setState(401); //401-邮箱冲突
    }else if(e instanceof OnExistException){
      rr.setState(402); //402-入库单号冲突
    }else if(e instanceof CategoryNameDuplicateException){
      rr.setState(403); //403-药品类别名称重复异常
    }else if(e instanceof UserNotFoundException){
      rr.setState(404); //404-用户不存在异常
    }else if(e instanceof BarCodeDuplicateException){
      rr.setState(405); //405-药品条形码重复异常
    }else if(e instanceof PhoneNotFoundException){
      rr.setState(406); //手机号不存在异常
    }else if(e instanceof PasswordNotMatchException){
      rr.setState(407); //密码不存在异常
    }else if(e instanceof YearMonthException){
      rr.setState(406); //客户时间异常
    }else if(e instanceof SupplierNotFoundException){
      rr.setState(407); //供货商不存在异常
    }else if(e instanceof PermissionsInsufficientException){
      rr.setState(406); //员工权限不足异常
    }else if(e instanceof InventoryFoundException){
      rr.setState(407); //库存不足异常
    }else if(e instanceof InventoryException){
      rr.setState(406); //修改库存异常
    }else if(e instanceof ForeignKeyReferenceException){
      rr.setState(407); //外键引用异常
    }
    else if(e instanceof InsertException){
      rr.setState(500); //500插入数据异常
    }else if(e instanceof UpdateException){
      rr.setState(501); //501修改数据异常
    }else if(e instanceof DeleteException){
      rr.setState(502); //501删除改数据异常
    }
    return rr;
  }
}
package cn.tedu.drug.controller;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.core.JsonProcessingException;
import cn.tedu.drug.controller.exception.FileContentTypeException;
import cn.tedu.drug.controller.exception.FileEmptyException;
import cn.tedu.drug.controller.exception.FileIOException;
import cn.tedu.drug.controller.exception.FileIllegalStateException;
import cn.tedu.drug.controller.exception.FileSizeException;
import cn.tedu.drug.entity.Customer;
import cn.tedu.drug.entity.CustomerTime;
import cn.tedu.drug.entity.domain.PaginationVO;
import cn.tedu.drug.service.ICustomerService;
import cn.tedu.drug.util.ResponseResult;
@RestController   //相当于配置文件(Controller,ResponseBody)
@RequestMapping("/customer")
public class CustomerController extends BaseController {
  @Autowired  //自动装配
  private ICustomerService customerService;
  /**
   * 注册用户
   * @param user
   * @return  返回成功
   */
  @RequestMapping("/reg")
  public ResponseResult<Void> reg(Customer customer) {
    customerService.reg(customer);
    return new ResponseResult<Void>(SUCCESS);
  }
  /**
   * 登录
   * @param username
   * @param password
   * @return
   */
  @PostMapping("/login")
  public ResponseResult<Customer> login(String phone,String password,HttpSession session) {
    Customer customer = customerService.getloginCustomer(phone, password);
    session.setAttribute( "user", customer );
    session.setAttribute( "uid", customer.getUid());
    session.setAttribute( "username", customer.getUsername() );
    return new ResponseResult<Customer>(SUCCESS,customer);
  }
  /**
   * 查询客户数据,多条件查询
   * @param drugCategory
   * @return
   * @throws JsonProcessingException 
   */
  @RequestMapping("/selectCustomer")
  public ResponseResult<PaginationVO<Customer>> selectCustomer
  (String username,String gender,String address,String pageNoStr,String pageSizeStr) throws JsonProcessingException {
    //获取参数
    long pageNo = 1;  //如果没有传数据,默认为第一页
    if( pageNoStr != null && pageNoStr.trim().length()>0 ){
      pageNo = Long.parseLong(pageNoStr);
    }
    int pageSize = 1; //如果没有传数据,默认为10条数据
    if( pageSizeStr != null && pageSizeStr.trim().length()>0 ){
      pageSize = Integer.parseInt(pageSizeStr);
    }
    long beginNo = (pageNo-1)*pageSize;
    Map<String ,Object> map = new HashMap<String ,Object>();
    map.put("beginNo", beginNo);
    map.put("pageSize", pageSize);
    map.put("username", username);
    map.put("gender", gender);
    map.put("address", address);
    PaginationVO<Customer> vo = customerService.getSelectCustomer(map);
    return new ResponseResult<PaginationVO<Customer>>(SUCCESS,vo);
  }
  /**
   * 删除客户数据
   * @param uid
   * @param session
   * @return
   */
  @RequestMapping("/deleteCustomer")
  public ResponseResult<Void> deleteCustomer(Integer uid,HttpSession session){
    String username = (String) session.getAttribute("username");
    customerService.getdeleteId(uid, username);
    return new ResponseResult<Void>(SUCCESS);
  }
  /**
   * 修改客户数据
   */
  @RequestMapping("/updateCustomer")
  public ResponseResult<Void> updateCustomer(Customer customer,HttpSession session){
    String username = (String) session.getAttribute("username");
    customerService.getupdateCustomer(customer, username);
    return new ResponseResult<Void>(SUCCESS);
  }
  /**
   * 展示个人信息
   */
  @RequestMapping("/getfindByUid")
  public ResponseResult<Customer> getfindByUid(Integer uid){
    Customer customer = customerService.getfindByUid(uid);
    return new ResponseResult<Customer>(SUCCESS,customer);
  }
  /**
   * 修改密码
   */
  @RequestMapping("/getfindByUidPassword")
  public ResponseResult<Void> getfindByUidPassword(Integer uid,HttpSession session,String oldPassword,String newPassword){
    String username = (String) session.getAttribute("username");
    customerService.getfindByUidPassword(uid, username, oldPassword, newPassword);
    return new ResponseResult<Void>(SUCCESS);
  }
  /**
   * 上传头像
   * @param request
   * @param file
   * @return MultipartFile file
   */
  @RequestMapping("/change_avatar")
  public ResponseResult<String> changeAvatar(HttpServletRequest request,@RequestParam("file") MultipartFile file){
    if(file.isEmpty()) {
      throw new FileEmptyException("上传头像错误!上传文件不能为空!");
    }
    if(!UPLOAD_CONTENT_TYPE.contains(file.getContentType())) {
      throw new FileContentTypeException("上传头像错误!不支持所选的文件类型!");
    }
    if(file.getSize()>UPLOAD_MAX_SIZE) {
      throw new FileSizeException("上传文件过大!请选择小于"+UPLOAD_MAX_SIZE+"的文件!");
    }
    String parentPath = request.getServletContext().getRealPath(UPLOAD_DIR);
    File parent = new File(parentPath);
    if(!parent.exists()) {
      parent.mkdirs();
    }
    String originalFilename = file.getOriginalFilename();
    //使用系统纳秒值给头像命名
    //String prefic = System.nanoTime()+"";
    //使用uid+username为头像文件命名,新头像会将旧头像替换
    HttpSession session = request.getSession();
    String prefic = session.getAttribute("uid").toString()+session.getAttribute("username").toString();
    int beginIndex = originalFilename.lastIndexOf(".");
    String suffix = "";
    if(beginIndex > 0) {
      suffix = originalFilename.substring(beginIndex);
    }
    String filename = prefic+suffix;
    File dest = new File(parent,filename);
    try {
      file.transferTo(dest);
    } catch (IllegalStateException e) {
      e.printStackTrace();
      throw new FileIllegalStateException("上传头像错误!存储头像文件时状态异常!");
    } catch (IOException e) {
      e.printStackTrace();
      throw new FileIOException("上传头像错误!读写文件时出现错误!");
    }
    Integer uid = getUidFromSession(session);
    String avatar = "/"+UPLOAD_DIR+"/"+filename;
    customerService.changeAvatar(avatar,uid);
    return new ResponseResult<String>(SUCCESS,avatar);
  }
  /**
   * 查询客户的数量
   */
  @RequestMapping("/selectIdCount")
  public ResponseResult<Long> selectIdCount(){
    Long count = customerService.getselectIdCount();
    return new ResponseResult<Long>(SUCCESS,count);
  }
  /**
   * 图表展示,客户流量,输入年份,展示该年每一个月的客户注册量
   * @param createdTime
   * @return
   */
  @RequestMapping("/selectYearTime")
  public ResponseResult<List<CustomerTime>> selectYearTime(String createdTime){
    String str = createdTime.substring(0, createdTime.indexOf("-"));
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("createdTime", str);
    List<CustomerTime> customerTimeList = customerService.getselectYearMonth(map);
    return new ResponseResult<List<CustomerTime>>(SUCCESS,customerTimeList);
  }
}

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

相关文章
|
5天前
|
Web App开发 编解码 Java
B/S基层卫生健康云HIS医院管理系统源码 SaaS模式 、Springboot框架
基层卫生健康云HIS系统采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医疗机构的主要工作流程,能够与监管系统有序对接,并能满足未来系统扩展的需要。
55 4
|
5天前
|
安全 前端开发 Java
基于springboot的微信公众号管理系统(支持多公众号接入)
基于springboot的微信公众号管理系统(支持多公众号接入)
45 2
|
5天前
|
运维 监控 安全
云HIS医疗管理系统源码——技术栈【SpringBoot+Angular+MySQL+MyBatis】
云HIS系统采用主流成熟技术,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同,服务可拆分,功能易扩展;支持多样化灵活配置,提取大量公共参数,无需修改代码即可满足不同客户需求;服务组织合理,功能高内聚,服务间通信简练。
40 4
|
5天前
|
存储 前端开发 Java
基于springboot的助农管理系统的设计与实现
基于springboot的助农管理系统的设计与实现
|
2天前
|
监控 安全 NoSQL
采用java+springboot+vue.js+uniapp开发的一整套云MES系统源码 MES制造管理系统源码
MES系统是一套具备实时管理能力,建立一个全面的、集成的、稳定的制造物流质量控制体系;对生产线、工艺、人员、品质、效率等多方位的监控、分析、改进,满足精细化、透明化、自动化、实时化、数据化、一体化管理,实现企业柔性化制造管理。
21 3
|
5天前
|
Java 关系型数据库 MySQL
【毕业设计】基于Springboot的B2B平台医疗病历交互系统
【毕业设计】基于Springboot的B2B平台医疗病历交互系统
17 0
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的4S店客户管理系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的4S店客户管理系统的详细设计和实现
50 4
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的教师管理系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的教师管理系统的详细设计和实现
42 2
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的设备故障报修管理系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的设备故障报修管理系统的详细设计和实现
31 1
|
5天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的健身管理系统及会员微信小程序的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的健身管理系统及会员微信小程序的详细设计和实现
36 0