当前位置:   article > 正文

计算机毕业设计选题推荐-药店管理系统-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("更新失败");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
/**
 * 药品种类控制层
 *
 * @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("更新失败");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

六、论文参考

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

七、系统视频

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

基于SpringBoot的药店管理系统

结语

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/690638
推荐阅读
相关标签
  

闽ICP备14008679号