ssm药店管理系统-计算机毕业设计源码81276
目 录
摘要
1 绪论
1.1课题目的及意义
1.2主要工作内容
1.3论文结构与章节安排
2 药店管理系统系统分析
2.1 可行性分析
2.2 系统流程分析
2.2.1 数据流程
3.3.2 业务流程
2.3 系统功能分析
2.3.1 功能性分析
2.3.2 非功能性分析
2.4 系统用例分析
2.5本章小结
3 药店管理系统总体设计
3.1 系统架构设计
3.2 系统功能模块设计
3.2.1整体功能模块设计
3.2.2用户模块设计
3.2.3 评论管理模块设计
3.2.4商城管理模块设计
3.2.5订单管理模块设计
3.3 数据库设计
3.3.1 数据库概念结构设计
3.3.2 数据库逻辑结构设计
3.4本章小结
4 药店管理系统详细设计与实现
4.1用户功能模块
4.1.1 前台首页界面
4.1.2注册界面
4.1.3 登录界面
4.1.4药品详情界面
4.1.5 新闻资讯界面
4.1.6购物车界面
4.1.7我的订单界面
4.2管理员功能模块
4.2.1用户管理界面
4.2.2公共管理界面
4.2.3药品信息管理界面
4.2.4资讯管理界面
5系统测试
5.1系统测试的目的
5.2 系统测试用例
5.3 系统测试结果
总结
参考文献
致 谢
随着计算机技术的飞速发展,计算机领域不断取得新的研究成果。计算机技术的应用也在全球范围内日益普及,并在代替脑力劳动方面发挥越来越重要的作用,从而使我们从繁杂的事务中解放出来,提高了我们的工作效率。如何利用现代化信息技术使药店拥有快速的市场反应能力和较高的工作效率,已是药店特别关心的问题,尽快建立一个适合实际需要的药店管理系统,完善药店的各种信息管理,已成为某药店生存发展的当务之急。
本系统是基于SSM框架,采用Java编程语言,利用面向对象的设计思想,在Eclipse集成开发环境下开发,使用的数据库是MySQL。该系统的主要功能有:用户管理、药品中心、订单列表、会员等级、药品信息、药品入库、药品出库。本论文从系统开发所使用工具、系统分析、系统设计、系统实现、系统测试等一系列开发过程介绍药店管理系统的设计与实现。
关键词:SSM框架;MySQL数据库;药店管理系统
Abstract
With the rapid development of computer technology, new research achievements are constantly being made in the field of computer science. The application of computer technology is also becoming increasingly popular worldwide and playing an increasingly important role in replacing mental labor, freeing us from complex tasks and improving our work efficiency. How to use modern information technology to enable pharmacies to have fast market response capabilities and high work efficiency has become a special concern for pharmacies. Establishing a pharmacy management system that is suitable for practical needs as soon as possible and improving various information management of pharmacies has become an urgent task for the survival and development of a certain pharmacy.
This system is based on the SSM framework, using Java programming language and object-oriented design concepts, developed in the Eclipse integrated development environment, using MySQL as the database. The main functions of this system include: user management, drug center, order list, member level, drug information, drug storage, and drug outbound. This paper introduces the design and implementation of a pharmacy management system through a series of development processes, including tools used in system development, system analysis, system design, system implementation, and system testing.
Keywords: SSM framework; MySQL database; Pharmacy Management System
1 绪论
现代化科学技术的高速发展,使药店的经营管理越来越复杂。工作人员在日常工作中需要处理的信息,不但在数量上逐渐增加,而且各种数据之间的相互关联及其加工整理的要求更为复杂。因此,药店药品信息处理必须更加迅速、准确无误,否则无法满足现代化管理的需要。但在手工操作方式下,随着工作量的不断增大,药店管理人员整日忙于繁琐的事务性工作,既无时间,又不能很好地对药品信息进行处理,对药品的信息很难及时进行分析、实施监督。同时要提高市场竞争力,还要有好的客户服务。在手工管理的情况下,药品销售人员很难对客户做出正确的供货承诺。药店要做到及时响应客户的需求,就必须有准确无误的相关信息,只有这样才能在竞争中获得最佳效益。一个较好的管理系统能够提供相关信息的查询,实时、准确地反映药店药品的经营状况,使管理者做出更好的预测和决策。药店管理系统正是为了适应这种形势,利用现代化管理工具,使药店的管理更高效更快捷,并由人工管理向计算机管理转化。它既减少了人力、财力的消耗,也提高了管理的效率和准确度,使管理者能更加方便、快捷、有效的完成工作。
药店管理平台包括该药品信息、药品的销售、药品出库、药品入库等,它是药店信息化管理的重要组成部分。药店管理是一项琐碎、复杂而又十分细致的工作,手工进行药房日常的进销存等工作,容易出现“开空单”的现象,且呆账,错账时有发生。正是药店管理的这种蜇复性、规律性、时间性,使得药店管理计算机信息化成为可能。计算机进行药店的日常管理工作,不仅能够保证药品的进销存的核算正确无误,而且还可以严格规范企业的应收应付管理,并利用先进的管理模式,推动药店的快速发展,实现店管理工作的系统化、规范化和自动化。
1.2主要工作内容
随着21世纪的来到,计算机软件得到了前所未有的发展,正在影响我们身边的每一件事。从过去学术的角度来看软件,它正在越来越走向实际,已然成为这个世界重要的元素组成之一,所以我们才会想要利用所学来解决当前药店的麻烦以及困惑,加快企业的发展。这几年以来,发展迅速的不止其它行业,计算机行业发展的十分快,并且规模没有停下来过的一直在扩大,软件渗透到各行各业的应用中,在促进信息化产业的发展中发挥了非常积极的作用。网络软件现如今成为网络上最基本运行的平台,互联网的蓬勃发展以及应运而生的电子商务给软件开发带来了巨大的商机。围绕互联网开发软件成为软件的开发新潮和热潮。软件作为信息产业的核心、国家经济和社会发展的战略性基础,软件的价值及其巨大辐射性将会得到社会各方面的足够重视,这将是未来的必然发展趋势以及未来的新潮流。
1.3论文结构与章节安排
论文将分层次经行编排,除去论文摘要致谢文献参考部分,正文部分还会对网站需求做出分析,以及阐述大体的设计和实现的功能,最后罗列部分调测记录,论文主要架构如下:
第一章:引言。第一章主要介绍了课题研究的背景及意义,主要工作内容和本文的主要工作。
第二章:系统需求分析。第二章主要从系统的用户、功能等方面进行需求分析。
第三章:系统设计。第三章主要对系统框架、系统功能模块、数据库进行功能设计。
第四章:系统实现。第四章主要介绍了系统框架搭建、系统界面的实现。
第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试
2 药店管理系统系统分析
系统分析是开发一个项目的先决条件,通过系统分析可以很好的了解系统的主体用户的基本需求情况,同时这也是项目的开发的原因。进而对系统开发进行可行性分析,通常包括技术可行性、经济可行性等,可行性分析同时也是从项目整体角度进行的分析。然后就是对项目的具体需求进行分析,分析的手段一般都是通过用户的用例图来实现。下面是详细的介绍。
经济可行性在此仅代表网站的运维成本,开发成本不在此考虑。
目前该模式下的药店管理系统的数量日益增多,网上进行药店管理系统相关信息的查询管理变得平民化普及化,用户人数呈上升趋势,当用户人数庞大了,运维成本可以由广告费进行填补,包括开发成本。
所以经济可行性没有问题。
(2)操作可行性:
此次项目设计参考了几个该模式下网站的开发案例,对他们的操作界面分析,将众多案例结合在一起,突出以人为本简化操作,所以具有基本计算机知识的人都会操作本项目。
因此操作可行性也没有问题。
(3)技术可行性:
技术可行性指的是对于搭建框架的可行性,以及有更优秀的技术出现时系统的技术更新换代的纳新性如何,开发时间成本费用比如何。
现有的 Java语言能够迎合所有信息管理系统的搭建,系统技术设备的可扩展性可以由SSM构架的资源优势予以促成。我采用了编译器eclipse+java+mysql用以运行整体程序。
综上所述技术可行性也没有问题。
(4)法律可行性:
从开发者角度来看,SSM框架是网上开源且免费的,在知识产权方面不会产生任何法律纠纷。
从用户使用角度来看,只要不再系统上贩卖违禁品,对系统做出条约协议,杜绝非法支付即可。
综上所述法律可行性也没有问题。
药店管理系统主要的目的就是实现对药品的在线选购,图2-1就是系统的数据流图。
图2-1药品购买操作展开图
分析完系统的数据流,接下来我们来看系统的业务流程,图2-2就是业务流程图:
图2-2业务流程图
按照药店管理系统的角色,我划分为了普通用户模块和管理员管理模块这两大部分。
用户管理模块:
(1)用户注册登录:用户注册为会员并登录药店管理系统;用户对个人信息的增删改查,比如个人资料,密码修改。
(2)用户查看药品:用户进行药品信息的阅览,通过发现喜欢的药品后可以购买+评论+收藏。
(3)药品购买:用户对喜欢的药品可以加购,在购物车里面,当用户确定提交完毕后,将其提交给服务器后台系统,并生成订单。
(4)购物车:用户对喜欢的药品可以加购,在购物车里面,可以查看到所有加购的药品,支持对药品数量的更改、删除药品,可以进行选择购买。
(5)我的订单:用户在提交订单后,可以对提交的订单进行管理。
(6)通知公告:用户点击“通知公告”菜单显示管理员在后台发布的所有的通知公告信息,可以查看通知公告详情。
(7)新闻资讯:点击“新闻资讯”这个菜单按钮,就会显示所有的新闻资讯信息,可以通过关键字或者标签搜索新闻资讯信息,用户可对新闻资讯信息进行点赞、收藏或者评论。
管理员管理模块:
(1)登录:管理员在后台可以输入用户名+密码进行登录,管理员的用户名和密码是在数据库中直接设定好的。
(2)公共管理:管理员点击“公共管理”这一菜单会显示轮播图、通知公告这两个子菜单,管理员可以对前台展示的通知公告和轮播图进行设置;
(3)用户管理:管理员可以对前台上注册过的用户信息进行管控,也可以对管理员信息进行管控。
(5)药品中心:管理员对商家用户提交的药品订单进行管控。
(6)通知公告:管理员点击“通知公告”菜单可以查看到系统中的所有通知公告信息,对已经存在的通知公告,管理员可以修改,也可以添加新的通知公告或者删除通知公告。
(7)订单列表:查看购买的药品订单,对用户提交的订单进行管理。
(8)药品信息:管理员点击“药品信息”这一菜单,管理员可以对药品信息进行增删改查。
2.3.2 非功能性分析
药店管理系统的非功能性需求比如药店管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1药店管理系统非功能需求表
安全性 | 主要指药店管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指药店管理系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响药店管理系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着药店管理系统的页面展示内容进行操作,就可以了。 |
可维护性 | 药店管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
通过2.3功能的分析,得出了本药店管理系统的用例图:
用户角色用例如图2-3所示。
图2-3 药店管理系统用户角色用例图
web后台管理上的管理员是维护整个药店管理系统中所有数据信息的。管理员角色用例如图2-4所示。
本章主要通过对药店管理系统的可行性分析、流程分析、功能需求分析、系统用例分析,确定整个药店管理系统要实现的功能。同时也为药店管理系统的代码实现和测试提供了标准。
本章主要讨论的内容包括药店管理系统的功能模块设计、数据库系统设计。
本药店管理系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图3-1药店管理系统系统架构设计图
表现层(UI):又称UI层,主要完成本药店管理系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本药店管理系统时的舒适度。UI的界面设计也要适应不同版本的药店管理系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成本药店管理系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于本药店管理系统的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本药店管理系统的数据存储和管理功能。
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本药店管理系统中的用例。那么接下来就要开始对本药店管理系统的架构、主要功能和数据库开始进行设计。药店管理系统根据前面章节的需求分析得出,其总体设计模块图如图3-2所示。
图3-2 药店管理系统功能模块图
后台管理者能够实现对前台注册的用户增删改查操作,用户模块结构图如下图:
图3-3用户模块结构图
药店管理系统是一个交流性质的公开平台,用户可以在平台上交流,增加用户之间的互动性。但是同时也为了更好的规范留言的内容,给予管理员删除不合适的言论的功能,所以需要专门设计一个评论管理模块,具体的结构图如下:
图3-4评论模块结构图
药店管理系统是中需要存储不少药品信息,其模块功能结构,具体的结构图如下:
图3-5商城模块结构图
药店管理系统最重要的一个功能就是购买,其模块功能结构,具体的结构图如下:
图3-5订单模块结构图
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
下面是整个药店管理系统中主要的数据库表总E-R实体关系图。
图3-6 药店管理系统总E-R关系图
下面根据药店管理系统的数据库总E-R关系图可以得出药店管理系统需要很多E-R图,在此罗列出来一些主要的数据库E-R模型图。
图3-7普通用户信息E-R关系图
图3-8 药品中心信息E-R关系图
图3-9 订单信息E-R关系图
图3-10评论信息E-R关系图
通过上一小节中药店管理系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表cart (购物车)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | cart_id | int | 10 | 0 | N | Y | 购物车ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | img | varchar | 255 | 0 | N | N | 0 | 图片: |
4 | user_id | int | 10 | 0 | N | N | 0 | 用户ID: |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | state | int | 10 | 0 | N | N | 0 | 状态:使用中,已失效 |
8 | price | double | 9 | 2 | N | N | 0.00 | 单价: |
9 | price_ago | double | 9 | 2 | N | N | 0.00 | 原价: |
10 | price_count | double | 11 | 2 | N | N | 0.00 | 总价: |
11 | num | int | 10 | 0 | N | N | 1 | 数量: |
12 | goods_id | mediumint | 8 | 0 | N | N | 商品id:[0,8388607] | |
13 | type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
14 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 |
表collect (收藏)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
6 | title | varchar | 255 | 0 | Y | N | 标题: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表comment (评论)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表drugs_warehousing (药品入库)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | drugs_warehousing_id | int | 10 | 0 | N | Y | 药品入库ID | |
2 | drug_number | varchar | 64 | 0 | Y | N | 药品编号 | |
3 | drug_name | varchar | 64 | 0 | Y | N | 药品名称 | |
4 | production_date | date | 10 | 0 | Y | N | 生产日期 | |
5 | inventory_quantity | int | 10 | 0 | Y | N | 0 | 入库数量 |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表drug_center (药品中心)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | drug_center_id | int | 10 | 0 | N | Y | 药品中心ID | |
2 | information_remarks | varchar | 64 | 0 | Y | N | 信息备注 | |
3 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
4 | cart_title | varchar | 125 | 0 | Y | N | 标题:[0,125]用于产品html的标签中 | |
5 | cart_img | text | 65535 | 0 | Y | N | 封面图:用于显示于产品列表页 | |
6 | cart_description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 | |
7 | cart_price_ago | double | 8 | 2 | N | N | 0.00 | 原价:[1] |
8 | cart_price | double | 8 | 2 | N | N | 0.00 | 卖价:[1] |
9 | cart_inventory | int | 10 | 0 | N | N | 0 | 商品库存 |
10 | cart_type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
11 | cart_content | longtext | 2147483647 | 0 | Y | N | 正文:产品的主体内容 | |
12 | cart_img_1 | text | 65535 | 0 | Y | N | 主图1: | |
13 | cart_img_2 | text | 65535 | 0 | Y | N | 主图2: | |
14 | cart_img_3 | text | 65535 | 0 | Y | N | 主图3: | |
15 | cart_img_4 | text | 65535 | 0 | Y | N | 主图4: | |
16 | cart_img_5 | text | 65535 | 0 | Y | N | 主图5: | |
17 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
18 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表drug_information (药品信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | drug_information_id | int | 10 | 0 | N | Y | 药品信息ID | |
2 | drug_number | varchar | 64 | 0 | Y | N | 药品编号 | |
3 | drug_name | varchar | 64 | 0 | Y | N | 药品名称 | |
4 | drug_introduction | varchar | 64 | 0 | Y | N | 药品简介 | |
5 | number_of_drugs | int | 10 | 0 | Y | N | 0 | 药品数量 |
6 | production_date | date | 10 | 0 | Y | N | 生产日期 | |
7 | drug_images | varchar | 255 | 0 | Y | N | 药品图片 | |
8 | shelf_life_to | date | 10 | 0 | Y | N | 保质期至 | |
9 | remarks_description | text | 65535 | 0 | Y | N | 备注说明 | |
10 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表drug_outbound (药品出库)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | drug_outbound_id | int | 10 | 0 | N | Y | 药品出库ID | |
2 | drug_number | varchar | 64 | 0 | Y | N | 药品编号 | |
3 | drug_name | varchar | 64 | 0 | Y | N | 药品名称 | |
4 | production_date | date | 10 | 0 | Y | N | 生产日期 | |
5 | outbound_quantity | int | 10 | 0 | Y | N | 0 | 出库数量 |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表goods (商品信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | goods_id | mediumint | 8 | 0 | N | Y | 产品id:[0,8388607] | |
2 | title | varchar | 125 | 0 | Y | N | 标题:[0,125]用于产品和html的<title>标签中 | |
3 | img | text | 65535 | 0 | Y | N | 封面图:用于显示于产品列表页 | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 | |
5 | price_ago | double | 8 | 2 | N | N | 0.00 | 原价:[1] |
6 | price | double | 8 | 2 | N | N | 0.00 | 卖价:[1] |
7 | sales | int | 10 | 0 | N | N | 0 | 销量:[0,1000000000] |
8 | inventory | int | 10 | 0 | N | N | 0 | 商品库存 |
9 | type | varchar | 64 | 0 | N | N | 商品分类: | |
10 | hits | int | 10 | 0 | N | N | 0 | 点击量:[0,1000000000]访问这篇产品的人次 |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:产品的主体内容 | |
12 | img_1 | text | 65535 | 0 | Y | N | 主图1: | |
13 | img_2 | text | 65535 | 0 | Y | N | 主图2: | |
14 | img_3 | text | 65535 | 0 | Y | N | 主图3: | |
15 | img_4 | text | 65535 | 0 | Y | N | 主图4: | |
16 | img_5 | text | 65535 | 0 | Y | N | 主图5: | |
17 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
18 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
19 | customize_field | text | 65535 | 0 | Y | N | 自定义字段 | |
20 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
21 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
22 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
23 | user_id | int | 10 | 0 | Y | N | 0 | 添加人 |
表goods_type (商品类型)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | int | 10 | 0 | N | Y | 商品分类ID: | |
2 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
3 | name | varchar | 255 | 0 | Y | N | 商品名称: | |
4 | desc | varchar | 255 | 0 | Y | N | 描述: | |
5 | icon | varchar | 255 | 0 | Y | N | 图标: | |
6 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
7 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表notice (公告)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
2 | title | varchar | 125 | 0 | N | N | 标题: | |
3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表order (订单)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | order_id | int | 10 | 0 | N | Y | 订单ID: | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单号: | |
3 | goods_id | mediumint | 8 | 0 | N | N | 商品id:[0,8388607] | |
4 | title | varchar | 32 | 0 | Y | N | 商品标题: | |
5 | img | varchar | 255 | 0 | Y | N | 商品图片: | |
6 | price | double | 10 | 2 | N | N | 0.00 | 价格: |
7 | price_ago | double | 10 | 2 | N | N | 0.00 | 原价: |
8 | num | int | 10 | 0 | N | N | 1 | 数量: |
9 | price_count | double | 8 | 2 | N | N | 0.00 | 总价: |
10 | norms | varchar | 255 | 0 | Y | N | 规格: | |
11 | type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
12 | contact_name | varchar | 32 | 0 | Y | N | 联系人姓名: | |
13 | contact_email | varchar | 125 | 0 | Y | N | 联系人邮箱: | |
14 | contact_phone | varchar | 11 | 0 | Y | N | 联系人手机: | |
15 | contact_address | varchar | 255 | 0 | Y | N | 收件地址: | |
16 | postal_code | varchar | 9 | 0 | Y | N | 邮政编码: | |
17 | user_id | int | 10 | 0 | N | N | 0 | 买家ID: |
18 | merchant_id | mediumint | 8 | 0 | N | N | 0 | 商家ID: |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
21 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 | |
22 | state | varchar | 16 | 0 | N | N | 待付款 | 订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成 |
23 | remark | text | 65535 | 0 | Y | N | 订单备注 | |
24 | delivery_state | varchar | 16 | 0 | Y | N | 未配送 | 发货状态:未配送,已配送 |
25 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 折扣 |
表regular_users (普通用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
4 | contact_phone_number | varchar | 64 | 0 | Y | N | 联系电话 | |
5 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
6 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
3.4本章小结
整个药店管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 药店管理系统详细设计与实现
药店管理系统的详细设计与实现主要是根据前面的药店管理系统的需求分析和药店管理系统的总体设计来设计页面并实现业务逻辑。主要从药店管理系统界面实现、业务逻辑实现这两部分进行介绍。
当进入药店管理系统的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
不是药店管理系统中正式用户的是可以在线进行注册的,如果你没有本药店管理系统的账号的话,添加“注册”,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-2所示。
图4-2 前台注册界面图
/**
* 注册
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
4.1.3 登录界面
药店管理系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到药店管理系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3登录界面图
登录的逻辑代码如下所示:
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
4.1.4药品详情界面
当访客点击了任意药品后将会进入该款药品的详情界面,可以了解到该药品的图片信息、药品信息、价钱信息等,同时可以对该药品进行立即购买+收藏+点赞+评论,药品详情展示页面如图4-4所示。
图4-4药品详情界面图
用户点击“新闻资讯”菜单显示所有的新闻资讯信息,可以按照条件进行新闻资讯的筛选或者输入关键词进行局部搜索,点击可以进入新闻资讯详细展示界面,在此界面用户可以收藏、点赞和评论。界面如下图4-5所示。
图4-5新闻资讯界面图
4.1.6购物车界面
当用户点击导航栏上的“购物车”菜单后,会出现自己加入购物车的药品列表,在购物管理页面可以对药品删除、修改药品的数量,选择部分或者全选进行购买,购物车展示页面如图4-6所示。
图4-6 购物车界面图
4.1.7我的订单界面
当用户点击“我的订单”链接后就进入自己购买的订单的界面展示,界面如下图4-7所示。
图4-7 我的订单界面图
4.2管理员功能模块
药店管理系统中的管理人员是可以对前台注册的用户进行管理的,也可以对管理员进行管控。界面如下图4-8所示。
用户管理关键代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
4.2.2公共管理界面
管理员点击“公共管理”这一菜单会显示轮播图、通知公告这两个子菜单,管理员可以对前台展示的通知公告和轮播图进行设置,界面如下图4-9所示。
图4-9公共管理界面图
公共管理关键代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
4.2.3药品信息管理界面
管理员点击“药品信息”会显示出所有的药品信息,支持输入药品名称或者药品编号对药品信息进行查询,如果想要添加新的药品信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条药品信息,点击“删除”进行删除,也可以点击后面的“入库”、“出库”按钮对药品信息的入库/出库信息进行更新维护。界面如下图4-10所示。
图4-10药品信息管理界面图
商城管理关键代码如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
管理员点击“资讯管理”菜单能够对其下子菜单新闻资讯和新闻的分类进行增删改查。界面如下图4-11所示。
图4-11资讯管理界面图
资讯管理关键代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5系统测试
系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些bug,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。
系统测试包括:用户登录功能测试、药品展示功能测试、药品添加、药品搜索、密码修改功能测试,如表5-1、5-2、5-3、5-4、5-5所示:
表5-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
药品查看功能测试:
表5-2 药品查看功能测试表
用例名称 | 药品查看 |
目的 | 测试药品查看功能 |
前提 | 用户登录 |
测试流程 | 点击药品列表 |
预期结果 | 可以查看到所有药品信息 |
实际结果 | 实际结果与预期结果一致 |
管理员添加药品界面测试:
表5-3 管理员添加药品界面测试表
用例名称 | 药品发布测试用例 |
目的 | 测试药品发布功能 |
前提 | 用户正常登录情况下 |
测试流程 | 1)点击药品信息管理就,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 | 提交以后,页面首页会显示新的药品信息 |
实际结果 | 实际结果与预期结果一致 |
药品搜索功能测试:
表5-4药品搜索功能测试表
用例名称 | 药品搜索测试 |
目的 | 测试药品搜索功能 |
前提 | 无 |
测试流程 | 1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 | 页面显示包含有搜索关键字的药品信息 |
实际结果 | 实际结果与预期结果一致 |
密码修改功能测试:
表5-5 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
通过编写药店管理系统的测试用例,已经检测完毕用户登录模块、药品查看模块、药品添加模块、药品搜索模块、密码修改功能测试,通过这5大模块为药店管理系统的后期推广运营提供了强力的技术支撑。
总结
本系统通过对java和Mysql数据库的简介,从硬件和软件两反面说明了药品管理系统平台的可行性,本文结论及研究成果如下:实现了java与Mysql相结合构建的药品管理系统平台,网站可以响应式展示。通过本次药品管理系统平台的研究与实现,我感到学海无涯,学习是没有终点的,而且实践出真知,只有多动手才能尽快掌握它,经验对系统的开发非常重要,经验不足,就难免会有许多考虑不周之处。比如要有美观的界面,更完善的功能,才能吸引更多的用户。
由于在此之前对于java知识没有深入了解,所以从一开始就碰到许多困难,例如一开始的页面显示不规范、数据库连接有问题已经无法实现参数的传递等等,不过通过在网上寻找有关资料以及同学的帮助下最后都得到了解决,在此过程中,我不仅学到了很多知识,也提高了自己解决问题的能力,尤其是学会如何从大量的信息中筛选出所需有用的信息,同时我更加深刻的体会到了,虽然书本上的大部分知识都是有价值,正确的,但实际上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们一定要通过实践才能找到解决问题的方案。在此次毕业设计活动中,我不断的提高了自己,也得到了宝贵的经验,我相信这些对我以后的发展都会有很大帮助。
通过这次药品管理系统平台的开发,我参考了很多相关系统的例子,取长补短,吸取了其他系统的长处,逐步对该系统进行了完善,但是该系统还是有很多的不足之处,有待以后进一步学习。
实践证明,药品管理系统平台有着非常好的发展前景,经过测试运行,系统各项功能都十分完善,界面漂亮,使用方便,操作容易,在技术理论上已经成熟。
[1]张超,陈曦. 一种线上线下药店一体化管理系统[P]. 安徽省: CN117291487A, 2023-12-26.
[2]袁爱平,陈畅,孙士兵等. 基于SSM框架的高校学生信息管理系统设计与实现 [J]. 工业控制计算机, 2023, 36 (12): 127-129.
[3]赵进步,袁慧. 基于SSM框架的“云节”系统设计与实现 [J]. 电脑编程技巧与维护, 2023, (10): 90-92.
[4]Liang C . School Vehicle Management System Based on JAVA Language [J]. Academic Journal of Computing & Information Science, 2023, 6 (9):
[5]谭康康,胡支滨,韩阳等. 药店药品信息管理系统的设计及优化 [J]. 华北理工大学学报(自然科学版), 2023, 45 (02): 104-109.
[6]李亚君. 基于SSM框架的B2C电子商城系统的设计与实现[D]. 合肥工业大学, 2022.
[7]Liu S . Explore Java Language and Android Mobile Software Development [J]. International Journal of Frontiers in Engineering Technology, 2021, 3.0 (2.0):
[8]颜杰群. 以HTML5和ASP.NET开发中小型药店线上管理系统 [J]. 常州信息职业技术学院学报, 2021, 20 (01): 29-32+41.
[9]Kline K . The Java Language Extension for SQL Server Is Now Open Source [J]. Database Trends and Applications, 2020, 34 (4): 31-31.
[10]颜杰群. 基于互联网+的中小型药店管理系统的设计与实现 [J]. 上饶师范学院学报, 2019, 39 (03): 21-25+81.
[11]赵浩翔. 基于SSM框架的网上商城系统的设计与实现[D]. 北京邮电大学, 2019.
[12]胡建文, 世杰智慧云药店管理系统. 湖南省, 湖南世杰信息技术有限公司, 2019-07-27.
[13]李愈盛, 连锁药店管理系统5.0. 广西壮族自治区, 广西金庚科技有限责任公司, 2019-04-20.
[14]王雪丽. 基于云计算服务平台的单体药店管理系统[D]. 浙江工业大学, 2019.
[15]尧夏禹. 博世药店管理系统的研究与分析[D]. 云南大学, 2019.
[16]陈凡亮. 药店信息管理系统的设计与实现[D]. 南昌大学, 2019.
[17]张红军. 某药店管理系统的设计与实现[D]. 厦门大学, 2019.
致 谢
大学的学习生活总是感觉短暂的,总感到知识还没有学够,但大学毕业就在我们面前,即毕业设计即将的结束,意味着我们的大社区用户涯即将结束。毕业设计是我们在大学所学知识的一次总结,更是对我们过去所学知识的提炼和升华,通过毕业设计,我们认识到大学学习过程中还有那些知识没有掌握,那些知识需要我们进入深入研究。这次毕业设计让我学到了很多新的知识,研究了一些新的以前自己不熟悉的领域,使我处理问题的能力得到了一定的提升,同时也为今后的继续深造或踏入社会大门提供了很好的锻炼机会。
我也曾经沮丧过,失落过,想放弃过,可是因为你们这不厌其烦的鼓励和支持才使得我坚持了下来,这里我要对我的老师和同学们说句“谢谢你们”。因为我们的知识是有限的,所以本文将不可避免的会出现一些错误和不足之处,还请老师指正。