软件开发定制基于Java+SpringBoot+vue+element疫情药品采购出入库系统设计实现

博主介绍全网粉丝20W+,csdn特邀作者、博客专家、CSDN软件开发定制新星计划导师、java软件开发定制领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ软件开发定制等平台优质作者、专注于Java软件开发定制技术领域和毕业项目实战

🍅软件开发定制文末获取联系🍅软件开发定制精彩专栏推荐👇🏻👇🏻👇🏻👇🏻

目录


一、前言介绍:

         软件开发定制随着社会的发展,软件开发定制社会的各行各业都在利软件开发定制用信息化时代的优势。软件开发定制计算机的优势和普及使软件开发定制得各种信息系统的开发成为必需。软件开发定制医院药品管理系统,软件开发定制主要的模块包括首页、个人中心、用户管理、员工管理、软件开发定制供应商管理、软件开发定制药品种类管理、软件开发定制药品信息管理、软件开发定制药品入库管理、软件开发定制药品出库管理、软件开发定制药品采购管理、系统管理、软件开发定制订单管理等功能。软件开发定制系统中管理员主要是为软件开发定制了安全有效地存储和管软件开发定制理各类信息,软件开发定制还可以对系统进行管理与更新维护等操作,并且对后台有相应的操作权限。

要想实现医院药品管理系统的各项功能,需要后台数据库的大力支持。管理员验证注册信息,收集的信息,并由此分析得出的关联信息等大量的数据都由数据库管理。本文中数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及列表页面简洁等特点。

本系统的开发使获取医院药品管理系统信息能够更加方便快捷,同时也使药品管理变的更加系统化、有序化。系统界面较友好,易于操作。

二、系统设计:

2.1 系统设计原则:

本医院药品管理系统采用Java技术,Mysql数据库开发,充分保证了系统稳定性、完整性。

医院药品管理系统设计与实现的设计思路如下:

1.操作简单方便,页面布局简单清晰、界面安全良好:,便于查询医院药品的相关信息。

2.即时可视性:医院药品管理系统的信息处理将在相应的位置即时可用,以实现“即时发布、即时生效”的系统功能。

医院药品管理系统从功能、数据流程、可行性、运行环境等方面进行需求分析。对医院药品管理系统的数据库、功能进行了详细设计。分析了主要界面设计和相关组件设计,对医院药品管理系统的具体实现进行了介绍。采用Java技术,从数据库中获取数据、向数据库中写入数据,实现系统直接对数据库进行各种操作,在网页中加入动态内容,从而实现医院药品管理系统所需要的各种基本功能。

2.2  主要研究方法

本系统采用基于Java语言B/S架构模式实现的,即Java启动运行的客户端与服务器的结构,基于 J2EE的基本标准,Tomcat7.0及以上作为运行服务器支持,基于、java、springboot、vue等主要技术设计,idea作为开发环境,数据库采用Mysql 5.0以上

(1)项目调查法:参考基于java医院药品管理系统相关的系统设计和实现、结合这次毕业设计的自己的系统需求调研,设计出本系统的主要功能设计和架构。

(2)文献参考法:通过查阅阅读最近三年基于java医院药品管理系统有关的优质文献参考和相关书籍、了解基于java医院药品管理系统的现状和涉及的技术情况

(3)经验总结法:经过网络搜索查看、老师的指导、自己的学习开发经验结合、对系统开发整理、具体情况,进行归纳、分析总结,满足系统的各项可行性分析,使系统设计和实现的合理化、标准化。

(4)实证测试法:通过自己对前面资料的查询、阅读、以及利用自己所学习的计算机相关技术来完成编码实现、进行系统功能测试、代码编写、完成功能模块开发。最后进行测试。

2.3 系统结构设计:

系统图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。医院药品管理系统的整体结构设计如图所示

三、数据设计:

3.1 数据实体ER设计:

药品信息实体属性图,如图所示:

 订单实体属性图,如图所示

 供应商实体属性图如图所示

3.2 数据逻辑结构设计:

 逻辑结构设计是把概念结构设计阶段画好的数据库ER图转换为关系模型。该系统的关系模型的逻辑结构是由主要一下关系模式组成,具体的字段设计如下:

(1 药品资讯 ) 主键,创建时间,标题,简介,图片信息,内容
(2 员工信息 ) 主键,创建时间,员工工号,用户密码,员工用户姓名,性别,头像信息,手机号码,身份证,余额
(3 供应商信息 ) 主键,创建时间,供应商编号,供应商名称,联系人,联系方式,供应商地址,备注
(4 用户信息 ) 主键,创建时间,用户名,用户密码,用户姓名,头像信息,性别,联系方式,余额
(5 评论信息 ) 主键,创建时间,关联表id,用户id,用户名,评论内容,回复内容
(6 药品信息 ) 主键,创建时间,药品名称,药品种类,图片信息,规格信息,厂家信息,有效日期,数量,药品详情,最近点击时间,点击次数,药品价格
(7 配置信息 ) 主键,配置参数名称,配置参数值
(8 药品入库信息 ) 主键,创建时间,入库单号,药品名称,药品种类,规格信息,厂家信息,数量,备注,入库时间,员工工号,员工用户姓名
(9 药品种类信息 ) 主键,创建时间,药品种类
(10 提问信息 ) 主键,创建时间,用户id,管理员id,提问,回复,是否回复
(11 药品出库信息 ) 主键,创建时间,药品名称,药品种类,规格信息,厂家信息,数量,备注,出库日期,员工工号,员工用户姓名
(12 药品购物车信息 )   主键,创建时间,商品表名,用户id,商品id,药品名称,图片信息,购买数量,单价,会员价
(13 药品采购信息 )  主键,创建时间,供应商编号,供应商名称,采购单号,药品名称,药品种类,厂家信息,规格信息,数量,采购的单价,采购金额,备注,采购日期,员工工号,员工用户姓名,是否审核,审核回复
(14 收货信息 )   主键,创建时间,用户id,地址,收货人,电话,是否默认地址[是/否]
(15 用户信息 )  主键,用户名,用户密码,角色,新增时间
(16 token信息 )   主键,用户id,用户名,表名,角色,用户密码,新增时间,过期时间
(17 收藏信息 )  主键,创建时间,用户id,收藏id,表名,收藏名称,收藏图片信息,类型(1:收藏,21:赞,22:踩),推荐类型
(18 订单信息 )  主键,创建时间,订单编号,商品表名,用户id,商品id,药品名称,商品图片信息,购买数量,药品价格,折扣药品价格,总药品价格,折扣总药品价格,支付方式,状态,地址,电话,收货人,物流

四、功能截图: 

4.1 用户登录注册:

4.2 用户前端首页:

首页模块:

药品信息模块:

药品资讯模块:

 

个人中心模块:

 

购物车模块:

在线客服模块: 

4.3 用户后端管理:

个人中心管理:

4.4 供应商后端管理:

供应商管理:

药品信息管理:

4.5 管理员后端管理:

用户模块管理:

供应商管理:

药品类型管理:

药品信息管理:

药品出入库管理:

药品采购管理:

药品资讯管理:

系统设置管理:

药品订单管理:

五、代码实现:

5.1 用户登录模块:

  1. /**
  2. * 登录相关
  3. */
  4. @RequestMapping("users")
  5. @RestController
  6. public class UserController{
  7. @Autowired
  8. private UserService userService;
  9. @Autowired
  10. private TokenService tokenService;
  11. /**
  12. * 登录
  13. */
  14. @IgnoreAuth
  15. @PostMapping(value = "/login")
  16. public R login(String username, String password, String captcha, HttpServletRequest request) {
  17. UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
  18. if(user==null || !user.getPassword().equals(password)) {
  19. return R.error("账号或密码不正确");
  20. }
  21. String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
  22. return R.ok().put("token", token);
  23. }
  24. /**
  25. * 注册
  26. */
  27. @IgnoreAuth
  28. @PostMapping(value = "/register")
  29. public R register(@RequestBody UserEntity user){
  30. // ValidatorUtils.validateEntity(user);
  31. if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
  32. return R.error("用户已存在");
  33. }
  34. userService.insert(user);
  35. return R.ok();
  36. }
  37. /**
  38. * 退出
  39. */
  40. @GetMapping(value = "logout")
  41. public R logout(HttpServletRequest request) {
  42. request.getSession().invalidate();
  43. return R.ok("退出成功");
  44. }
  45. /**
  46. * 密码重置
  47. */
  48. @IgnoreAuth
  49. @RequestMapping(value = "/resetPass")
  50. public R resetPass(String username, HttpServletRequest request){
  51. UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
  52. if(user==null) {
  53. return R.error("账号不存在");
  54. }
  55. user.setPassword("123456");
  56. userService.update(user,null);
  57. return R.ok("密码已重置为:123456");
  58. }
  59. /**
  60. * 列表
  61. */
  62. @RequestMapping("/page")
  63. public R page(@RequestParam Map<String, Object> params,UserEntity user){
  64. EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
  65. PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
  66. return R.ok().put("data", page);
  67. }
  68. /**
  69. * 列表
  70. */
  71. @RequestMapping("/list")
  72. public R list( UserEntity user){
  73. EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
  74. ew.allEq(MPUtil.allEQMapPre( user, "user"));
  75. return R.ok().put("data", userService.selectListView(ew));
  76. }
  77. /**
  78. * 信息
  79. */
  80. @RequestMapping("/info/{id}")
  81. public R info(@PathVariable("id") String id){
  82. UserEntity user = userService.selectById(id);
  83. return R.ok().put("data", user);
  84. }
  85. /**
  86. * 获取用户的session用户信息
  87. */
  88. @RequestMapping("/session")
  89. public R getCurrUser(HttpServletRequest request){
  90. Long id = (Long)request.getSession().getAttribute("userId");
  91. UserEntity user = userService.selectById(id);
  92. return R.ok().put("data", user);
  93. }
  94. /**
  95. * 保存
  96. */
  97. @PostMapping("/save")
  98. public R save(@RequestBody UserEntity user){
  99. // ValidatorUtils.validateEntity(user);
  100. if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
  101. return R.error("用户已存在");
  102. }
  103. userService.insert(user);
  104. return R.ok();
  105. }
  106. /**
  107. * 修改
  108. */
  109. @RequestMapping("/update")
  110. public R update(@RequestBody UserEntity user){
  111. // ValidatorUtils.validateEntity(user);
  112. UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
  113. if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
  114. return R.error("用户名已存在。");
  115. }
  116. userService.updateById(user);//全部更新
  117. return R.ok();
  118. }
  119. /**
  120. * 删除
  121. */
  122. @RequestMapping("/delete")
  123. public R delete(@RequestBody Long[] ids){
  124. userService.deleteBatchIds(Arrays.asList(ids));
  125. return R.ok();
  126. }
  127. }

5.2 文件下载模块:

  1. /**
  2. * 下载文件
  3. */
  4. @IgnoreAuth
  5. @RequestMapping("/download")
  6. public ResponseEntity<byte[]> download(@RequestParam String fileName) {
  7. try {
  8. File path = new File(ResourceUtils.getURL("classpath:static").getPath());
  9. if(!path.exists()) {
  10. path = new File("");
  11. }
  12. File upload = new File(path.getAbsolutePath(),"/upload/");
  13. if(!upload.exists()) {
  14. upload.mkdirs();
  15. }
  16. File file = new File(upload.getAbsolutePath()+"/"+fileName);
  17. if(file.exists()){
  18. /*if(!fileService.canRead(file, SessionManager.getSessionUser())){
  19. getResponse().sendError(403);
  20. }*/
  21. HttpHeaders headers = new HttpHeaders();
  22. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
  23. headers.setContentDispositionFormData("attachment", fileName);
  24. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
  25. }
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
  30. }

5.3 药品采购模块:

  1. /**
  2. * 药品采购
  3. * 后端接口
  4. * @author
  5. * @email
  6. * @date 2022-03-28 20:09:08
  7. */
  8. @RestController
  9. @RequestMapping("/yaopincaigou")
  10. public class YaopincaigouController {
  11. @Autowired
  12. private YaopincaigouService yaopincaigouService;
  13. /**
  14. * 查询
  15. */
  16. @RequestMapping("/query")
  17. public R query(YaopincaigouEntity yaopincaigou){
  18. EntityWrapper< YaopincaigouEntity> ew = new EntityWrapper< YaopincaigouEntity>();
  19. ew.allEq(MPUtil.allEQMapPre( yaopincaigou, "yaopincaigou"));
  20. YaopincaigouView yaopincaigouView = yaopincaigouService.selectView(ew);
  21. return R.ok("查询药品采购成功").put("data", yaopincaigouView);
  22. }
  23. /**
  24. * 后端列表
  25. */
  26. @RequestMapping("/page")
  27. public R page(@RequestParam Map<String, Object> params,YaopincaigouEntity yaopincaigou,
  28. HttpServletRequest request){
  29. String tableName = request.getSession().getAttribute("tableName").toString();
  30. if(tableName.equals("yuangong")) {
  31. yaopincaigou.setYuangonggonghao((String)request.getSession().getAttribute("username"));
  32. }
  33. EntityWrapper<YaopincaigouEntity> ew = new EntityWrapper<YaopincaigouEntity>();
  34. PageUtils page = yaopincaigouService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yaopincaigou), params), params));
  35. return R.ok().put("data", page);
  36. }
  37. /**
  38. * 后端详情
  39. */
  40. @RequestMapping("/info/{id}")
  41. public R info(@PathVariable("id") Long id){
  42. YaopincaigouEntity yaopincaigou = yaopincaigouService.selectById(id);
  43. return R.ok().put("data", yaopincaigou);
  44. }
  45. /**
  46. * 删除
  47. */
  48. @RequestMapping("/delete")
  49. public R delete(@RequestBody Long[] ids){
  50. yaopincaigouService.deleteBatchIds(Arrays.asList(ids));
  51. return R.ok();
  52. }
  53. /**
  54. * 修改
  55. */
  56. @RequestMapping("/update")
  57. public R update(@RequestBody YaopincaigouEntity yaopincaigou, HttpServletRequest request){
  58. //ValidatorUtils.validateEntity(yaopincaigou);
  59. yaopincaigouService.updateById(yaopincaigou);//全部更新
  60. return R.ok();
  61. }
  62. }

六、论文参考目录

七、项目总结: 

      在设计医院药品管理系统的过程中还遇到了一些棘手的问题,那就是自己的英语水平还有待提高,很多关于网站技术开发的资料文献都是英文版的,关键词语以及技术性词汇不能很好的理解。只有在借助翻译软件的实时性翻译功能的辅助下才勉强看懂。显然英语水平的高低直接影响到系统的开发过程。还有一些错误信息、比如用户空指针异常、还有MYSQL5.7版本数据库版本5.5和5.7不一致的问题、会导致SQL语句无法正常运行、还要就是管理员用户名设置的时候,后台没有判断好、在输入错误用户密码的的时候还是可以登录。这样的错原则上是不能发生的,在返回代码检查的情况下发现是在管理员信息与数据库的DAO类代码里出现了错误,代码和数据库之间没有建立好连接。还有比如管理员添加用户的时候报java.lang.NullPointException、解决的方法:查看控制台打印信息、发现添加的时候未填写相关信息、报java.lang.NullPointException、通过断电调试发现、用户信息为空的数据项、在前端保存的时候、必须填写用户完整相关信息、或者数据库设置字段可以为空都可以解决。经过本次测试,我会更加的对代码和数据库的操作上更加细心,不再出现这种原则上的错误。

     通过这次医院药品管理系统的开发,我参考了很多相关系统的例子,取长补短,吸取了其他系统的长处,逐步对该系统进行了完善,但是该系统还是有很多的不足之处,有待以后进一步学习。实践证明,医院药品管理系统有着非常好的发展前景,经过测试运行,系统各项功能都十分完善,界面漂亮,使用方便,操作容易,在技术理论上已经成熟。

八、源码获取:

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

打卡 文章 更新 308/  365天

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发