计算机毕业设计选题推荐-药店管理系统-Java项目实战

作者主页:IT研究室✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

一、前言

随着医药行业的快速发展,药店的数量和规模都在不断扩大,药店管理面临着越来越多的挑战。传统的手工管理方式已经无法满足药店管理的需要,因此,开发一款药店管理系统变得十分必要。本课题旨在开发一款适用于药店管理的系统,以提高药店管理的效率和质量。

目前,市面上已经存在一些药店管理系统,但是它们存在一些问题。首先,它们的功能比较简单,往往只涵盖了药品管理、进货管理等基础功能,而忽视了其他重要的管理环节,如供应商信息管理、销售管理等。其次,它们的数据管理方式比较落后,往往采用传统的数据库管理方式,操作复杂,效率低下。再次,它们缺乏智能化数据分析功能,无法为药店提供数据支持。

本课题旨在开发一款功能完善、操作简便、智能化程度高的药店管理系统。该系统将涵盖员工、管理人员两个角色,员工可以进行供应商信息管理、药品管理、进货管理、销售管理等操作,管理人员可以进行员工管理、基础数据管理(供应商类型、供应商信用等级类型、商品类型管理)、供应商信息管理、药品管理、进货管理、销售管理、销售数据统计报表等操作。该系统的研究目的在于提高药店管理的效率和质量,为药店的发展提供有力的支持。

本课题的研究意义在于为药店提供一套科学的管理方案,帮助药店更好地进行资源规划和管理。该系统可以实现以下功能:
提高药店管理的效率:通过系统化的管理方式,可以快速地完成各项管理任务,减少人工操作失误和时间成本。
提高药店管理的质量:通过系统化的管理方式,可以更好地掌握药品库存情况、销售情况等数据信息,及时调整经营策略和采购计划。
为药店提供数据支持:通过智能化数据分析功能,可以为药店提供销售数据统计报表等数据支持,帮助药店更好地了解市场需求和竞争情况。
提升药店竞争力:通过科学的管理方式,可以提高药店的服务质量和客户满意度,提升药店的竞争力和市场占有率。
为医药行业发展做出贡献:通过推广和应用本课题研究成果,可以为医药行业的发展做出贡献,提高整个行业的效率和水平。

二、开发环境

  • 开发语言:Java
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:SpringBoot
  • 前端:Vue

三、系统功能模块

  • 角色:员工、管理员
  • 功能:
    员工
    供应商信息管理、药品管理、进货管理、销售管理;
    管理员
    员工管理、基础数据管理(供应商类型、供应商信用等级类型、商品类型管理)、供应商信息管理、药品管理、进货管理、销售管理、销售数据统计报表。

四 、系统界面展示

  • 药店管理系统-界面展示:
    药店管理系统-基础数据管理
    药店管理系统-药品管理
    药店管理系统-进货管理
    药店管理系统-销售管理
    药店管理系统-销售统计
    药店管理系统-进货管理
    药店管理系统-销售管理-员工

五、代码参考

  • Java项目实战-代码参考:
/**
 * 药品信息
 *
 * @author ggk-911
 * @version 1.0 2023/3/9 12:17
 */
@RestController
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
@RequestMapping("/drug")
@Api(tags = "药品信息控制层")
public class DrugInfoController {
    private final DrugInfoServiceImpl service;
    private final DrugInfoTypeServiceImpl drugInfoTypeService;
    private final DrugPriceServiceImpl drugPriceService;

    //GET查询
    @GetMapping("/queryAll")
    @ApiOperation("查询所有药品信息")
    public RestResult queryAll(@RequestParam(defaultValue = "1") Integer page,
                               @RequestParam(defaultValue = "10") Integer size,
                               @RequestParam(defaultValue = "") @ApiParam("名称,别名关键字") String keyName,
                               @RequestParam(defaultValue = "") @ApiParam("制造商关键字") String manufacturer,
                               @RequestParam(defaultValue = "") @ApiParam("适应症关键字") String indications,
                               @RequestParam(defaultValue = "") @ApiParam("药品国家代码搜索") String nationalCode,
                               @RequestParam(defaultValue = "") @ApiParam("批准文号搜索") String approvalNo,
                               @ApiParam("类型搜索") Integer typeId) {
        Page<DrugInfo> drugInfoPage = new Page<>(page, size);
        LambdaQueryWrapper<DrugInfo> wrapper = new LambdaQueryWrapper<>();

        //wrapper条件
        wrapper.and(!"".equals(keyName), a -> a.like(DrugInfo::getDrugInfoName, keyName).or().like(DrugInfo::getDrugInfoAlias, keyName));
        wrapper.like(!"".equals(manufacturer), DrugInfo::getDrugInfoManufacturer, manufacturer);
        wrapper.like(!"".equals(indications), DrugInfo::getDrugInfoIndications, indications);
        wrapper.like(!"".equals(nationalCode), DrugInfo::getDrugInfoNationalCode, nationalCode);
        wrapper.like(!"".equals(approvalNo), DrugInfo::getDrugInfoApprovalNo, approvalNo);
        wrapper.eq(typeId != null, DrugInfo::getDrugInfoTypeId, typeId);

        try {
            service.page(drugInfoPage, wrapper);
//            drugInfoPage.getRecords().forEach(System.out::println);
        } catch (Exception e) {
            log.error(String.valueOf(e));
            return RestResult.error("查询错误");
        }

        return RestResult.ok("查询成功", drugInfoPage);
    }

    //GET获取所有数据集合
    @GetMapping("/list")
    public RestResult getList(@RequestParam(defaultValue = "") @ApiParam("名称,别名关键字") String keyName,
                              @RequestParam(defaultValue = "") @ApiParam("制造商关键字") String manufacturer,
                              @RequestParam(defaultValue = "") @ApiParam("适应症关键字") String indications,
                              @RequestParam(defaultValue = "") @ApiParam("药品国家代码搜索") String nationalCode,
                              @RequestParam(defaultValue = "") @ApiParam("批准文号搜索") String approvalNo,
                              @ApiParam("类型搜索") Integer typeId) {
        LambdaQueryWrapper<DrugInfo> wrapper = new LambdaQueryWrapper<>();

        //wrapper条件
        wrapper.and(!"".equals(keyName), a -> a.like(DrugInfo::getDrugInfoName, keyName).or().like(DrugInfo::getDrugInfoAlias, keyName));
        wrapper.like(!"".equals(manufacturer), DrugInfo::getDrugInfoManufacturer, manufacturer);
        wrapper.like(!"".equals(nationalCode), DrugInfo::getDrugInfoNationalCode, nationalCode);
        wrapper.like(!"".equals(indications), DrugInfo::getDrugInfoIndications, indications);
        wrapper.eq(typeId != null, DrugInfo::getDrugInfoTypeId, typeId);
        wrapper.like(!"".equals(approvalNo), DrugInfo::getDrugInfoApprovalNo, approvalNo);
        List<DrugInfo> drugInfoList = service.list(wrapper);
        return RestResult.ok("获取成功", drugInfoList);
    }

    //GET获取所有数据集合listExcel
    @SneakyThrows
    @GetMapping("/listExcel")
    public void getListExcel(@RequestParam(defaultValue = "") @ApiParam("名称,别名关键字") String keyName,
                             @RequestParam(defaultValue = "") @ApiParam("制造商关键字") String manufacturer,
                             @RequestParam(defaultValue = "") @ApiParam("适应症关键字") String indications,
                             @RequestParam(defaultValue = "") @ApiParam("药品国家代码搜索") String nationalCode,
                             @RequestParam(defaultValue = "") @ApiParam("批准文号搜索") String approvalNo,
                             @ApiParam("类型搜索") Integer typeId,
                             HttpServletResponse response) {
        LambdaQueryWrapper<DrugInfo> wrapper = new LambdaQueryWrapper<>();

        //wrapper条件
        wrapper.and(!"".equals(keyName), a -> a.like(DrugInfo::getDrugInfoName, keyName).or().like(DrugInfo::getDrugInfoAlias, keyName));
        wrapper.like(!"".equals(manufacturer), DrugInfo::getDrugInfoManufacturer, manufacturer);
        wrapper.like(!"".equals(nationalCode), DrugInfo::getDrugInfoNationalCode, nationalCode);
        wrapper.like(!"".equals(indications), DrugInfo::getDrugInfoIndications, indications);
        wrapper.eq(typeId != null, DrugInfo::getDrugInfoTypeId, typeId);
        wrapper.like(!"".equals(approvalNo), DrugInfo::getDrugInfoApprovalNo, approvalNo);
        List<DrugInfo> drugInfoList = service.list(wrapper);
        drugInfoList.forEach(System.out::println);

        //逻辑暂时放在controller

        // 设置响应头
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        // 设置防止中文名乱码
        String filename = URLEncoder.encode("用户列表", "utf-8");
        // 文件下载方式(附件下载还是在当前浏览器打开)
        response.setHeader("Content-disposition", "attachment;filename=" + filename + ".xls");

        // 生成excel
        ExportParams exportParams = new ExportParams();
        exportParams.setSheetName("药品信息");
        exportParams.setTitle("药品信息");
        Workbook sheets = ExcelExportUtil.exportExcel(exportParams, DrugInfo.class, drugInfoList);
        sheets.write(response.getOutputStream());
        sheets.close();
    }

    //POST表格导入
    @SneakyThrows
    @PostMapping("/importExcel")
    public RestResult importExcel(MultipartFile file) {

        //逻辑暂时放在controller
        if (file.isEmpty()) {
            throw new RuntimeException("上传文件为空");
        }
        ImportParams importParams = new ImportParams();
        importParams.setTitleRows(1);
        importParams.setHeadRows(1);
        InputStream inputStream = file.getInputStream();
        List<DrugInfoDTO> list = ExcelImportUtil.importExcel(inputStream, DrugInfoDTO.class, importParams);
        //拿到要导入的信息长度
        int size1 = list.size();
        inputStream.close();
        List<DrugInfo> drugInfoList = new ArrayList<>();
        list.forEach(item -> {
            //查询是否重复
            DrugInfo drugInfoTest = service.selectByDrugInfoNationalCode(item.getDrugInfoNationalCode());
            //类型不能为空
            if (item.getDrugInfoTypeName() != null && !"".equals(item.getDrugInfoName()) && drugInfoTest == null) {
                //通过名称取到类型ID
                int drugInfoTypeId = 0;
                try {
                    drugInfoTypeId = drugInfoTypeService.getIdByName(item.getDrugInfoTypeName());
                } catch (Exception e) {
                    return;
                }
                drugInfoList.add(new DrugInfo(item.getDrugInfoId(), item.getDrugInfoName(), item.getDrugInfoAlias(), drugInfoTypeId, item.getDrugInfoStrength(), item.getDrugInfoIndications(), item.getDrugInfoAdverseReactions(), item.getDrugInfoInteractions(), item.getDrugInfoDosage(), item.getDrugInfoSpecifications(), item.getDrugInfoStorageMethod(), item.getDrugInfoValidTime(), item.getDrugInfoManufacturer(), item.getDrugInfoNationalCode(), item.getDrugInfoApprovalNo(), item.getDrugInfoListingLicenseHolder(), null, null));
            }
        });
        //筛选后的长度
        int size = drugInfoList.size();
        if (size == 0) return RestResult.error("表中无数据或数据重复");
        if (service.saveBatch(drugInfoList)) {
            //批量导入成功后自动生成价格列
            drugInfoList.forEach(item -> {
                drugPriceService.save(new DrugPrice(item.getDrugInfoId(), 0D, null));
                log.info("添加价格ID:{}", item.getDrugInfoId());
            });
            return RestResult.ok("批量导入成功,总:" + size1 + ",成功导入:" + size);
        }
        return RestResult.error("批量导入失败");
    }

    //GET查询单个
    @GetMapping("/query/{id}")
    @ApiOperation("查询单个药品信息")
    public RestResult queryOne(@PathVariable Integer id) {
        DrugInfo drugInfo = null;
        try {
            drugInfo = service.getById(id);
        } catch (Exception e) {
            log.error("查询单个药品信息错误" + e);
            return RestResult.error("查询错误");
        }
        return RestResult.ok("查询成功", drugInfo);
    }

    //PUT插入
    @PutMapping("/insert")
    @ApiOperation("插入一条药品信息")
    public RestResult insert(DrugInfo drugInfo) {
        try {
            if (service.save(drugInfo)) {
                //药品插入成功后,药品价格插入
                if (drugPriceService.save(new DrugPrice(drugInfo.getDrugInfoId(), 0D, null))) {
                    return RestResult.ok("插入成功,药品信息编号为:" + drugInfo.getDrugInfoId(), drugInfo.getDrugInfoId());
                }
            }
        } catch (Exception e) {
            log.error(String.valueOf(e));
        }
        log.info("插入药品信息:" + drugInfo.toString());
        return RestResult.error("插入失败");
    }

    //DELETE删除
    @DeleteMapping("/delete")
    @ApiOperation("批量删除药品信息")
    public RestResult delete(Integer[] ids) {
        if (ids == null) return RestResult.error("删除失败,编号为空");

        if (!service.removeBatchByIds(Arrays.asList(ids))) return RestResult.error("删除失败");
        log.info("删除药品信息,编号为:" + Arrays.toString(ids));
        if (!drugPriceService.deleteByDrugInfoId(ids[0])) return RestResult.error("删除失败");

        return RestResult.ok("删除成功");
    }

    //POST更新
    @PostMapping("/update")
    @ApiOperation("更新一条药品信息")
    public RestResult update(DrugInfo drugInfo) {
        try {
            if (service.updateById(drugInfo)) return RestResult.ok("更新成功");
        } catch (Exception e) {
            log.error(String.valueOf(e));
        }
        return RestResult.error("更新失败");
    }
}
/**
 * 药品种类控制层
 *
 * @author ggk-911
 * @version 1.0 2023/3/19 18:39
 */
@RestController
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
@RequestMapping("/drugInfoType")
@Api("药品分类信息控制层")
public class DrugInfoTypeController {
    private final DrugInfoTypeServiceImpl service;

    //GET查询所有类别
    @GetMapping("/queryAll")
    public RestResult queryAll(@RequestParam(defaultValue = "1") Integer page,
                               @RequestParam(defaultValue = "10") Integer size,
                               @RequestParam(defaultValue = "") String keyName) {
        Page<DrugInfoType> drugInfoTypePage = new Page<>(page, size);
        QueryWrapper<DrugInfoType> wrapper = new QueryWrapper<>();

        wrapper.like(!"".equals(keyName), "drug_info_type_name", keyName);

        service.page(drugInfoTypePage, wrapper);

        return RestResult.ok("查询成功", drugInfoTypePage);
    }

    //GET获取所有数据集合
    @GetMapping("/list")
    public RestResult getList(@RequestParam(defaultValue = "") String keyName) {
        QueryWrapper<DrugInfoType> wrapper = new QueryWrapper<>();
        wrapper.like(!"".equals(keyName), "drug_info_type_name", keyName);
        List<DrugInfoType> drugInfoTypeList = service.list(wrapper);
        return RestResult.ok("获取成功", drugInfoTypeList);
    }


    //PUT添加
    @PutMapping("/insert")
    public RestResult insert(DrugInfoType drugInfoType) {
        if (service.save(drugInfoType)) {
            return RestResult.ok("添加成功,返回编号:" + drugInfoType.getDrugInfoTypeId(), drugInfoType.getDrugInfoTypeId());
        }
        return RestResult.error("添加失败");
    }

    //DELETE删除
    @DeleteMapping("/delete")
    public RestResult delete(Integer id) {
        if (service.removeById(id)) {
            return RestResult.ok("删除成功");
        }
        return RestResult.error("删除失败");
    }

    //POST更新
    @PostMapping("/update")
    public RestResult update(DrugInfoType drugInfoType) {
        if (service.updateById(drugInfoType)) {
            return RestResult.ok("更新成功");
        }
        return RestResult.error("更新失败");
    }
}

六、论文参考

  • 计算机毕业设计选题推荐-药店管理系统-论文参考:
    计算机毕业设计选题推荐-药店管理系统-论文参考

七、系统视频

药店管理系统-项目视频:

基于SpringBoot的药店管理系统

结语

计算机毕业设计选题推荐-药店管理系统-Java项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我

精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT研究室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值