🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示
摘要
随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,自助购药小程序就是信息时代变革中的产物之一。
任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于java技术、ssm框架、B/S机构、Mysql数据库设计并实现了自助购药小程序。系统主要包括首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能模块。
本文首先介绍了自助购药小程序管理技术的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E-R图。然后,设计框架并根据设计的框架编写代码以实现系统的各个功能模块。最后,对初步完成的系统进行测试,主要是功能测试、单元测试和性能测试。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。
**关键字:**自助购药小程序;ssm;Mysql数据库
第一章概述
1.1研究背景
21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企业、公司等机构都有自己的管理系统,由传统的管理模式向互联网发展,如今开发自己的系统是时代发展的必然产物。那么开发自助购药小程序意义和用处有哪些呢?
首先提升工作效率:这是很多机构系统的目的之一。自助购药小程序对于企业或者公司来说,可以摆脱传统手写记录的管理模式。利用计算机系统,进行用户信息、管理员信息的管理,其中包含首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能的管理,不只是节省了人力和物力,还提高了工作的效率,让管理员和用户可以更加高效地工作。
其次,对于用户来说,不需要到公司进行查看,在家里就可以通过计算机查看个人信息、菜谱信息,进行后台管理等内容,并进行新增、修改或删除,有些还能进行导出和打印,非常的便利。
一个好的系统能将自助购药小程序管理手段提上一个新的台阶。系统内容可以随时更新,这点对于自助购药小程序拥有者来说是很重要,但这是传统的管理方式都无法做到的。自助购药小程序就可以每天更新,随时了解自助购药小程序的最新情况。
自助购药小程序能够通过互联网得到广泛的、全面的宣传,让尽可能多的用户了解和熟知自助购药小程序的便捷高效,为管理者和用户提供了服务,节省人力、物力和时间,提高工作效率。
1.2开发意义
人类的进步带动信息化的发展,使人们生活节奏越来越快,所以人们越来越重视信息的时效性。以往的管理方式已经满足不了人们对获得信息的方式、方便快捷的需求。自助购药小程序慢慢的被人们关注。首先,网上获取信息十分的实时、便捷,只要系统在线状态,无论在哪里都能第一时间查找到理想的信息。
计算机技术在管理中成为人们的重要工具。可以有效快捷的解决想要获取的信息,提高工作效率。
1.3 研究现状
在国外很多发达国家,软件产业早已得到全面普及,但我国经济已不断发展,不断引进国外信息化建设,使国内软件行业得以不断发展,在摸索中进步,最终也得到一些成果,我国的软件业迎来了高速的发展,使更多的软件系统得以开发出来,从此逐渐地改变人们的生活工作方式。但是,对于信息化的建设,与很多发达国家相比,由于信息化程度的落后以及经费的不足,我国的自助购药小程序开发方面还是相对落后的,因此,要不断的努力探索,争取开发出一个实用的信息化的自助购药小程序,来实现自助购药小程序管理的信息化。因此本课题以自助购药为例,目的是开发一个实用的自助购药小程序。
自助购药小程序的开发运用java技术、ssm框架,MIS的总体思想,以及Mysql等技术的支持下共同完成了该系统的开发,实现了自助购药小程序管理的信息化,使用户体验到更优秀的自助购药小程序管理,管理员管理操作将更加方便,实现目标。
1.4 研究内容
自助购药小程序的需求和管理上的不断提升,自助购药小程序的潜力将无限扩大,自助购药小程序在业界被广泛关注,本网站及对此进行总体分析,将自助购药小程序信息管理的发展提供参考。自助购药小程序对个人都有着明显的带动效应,尤其对管理者的帮助更大。
根据现有的模块,除管理员对系统所有的信息进行管理;另外网站前端还需要:首页、药品信息、购物车、我的等内容进行配合管理。
1.5论文结构
(1)绪论
系统的开发背景,意义和系统状况等,详细讲述了系统的用处,对本章进行总结。
(2)系统开发技术的介绍
分别对java技术、Ssm框架、Mysql和B/S进行详细介绍。
(3)系统分析
本章主要是对系统可行性、系统性能、还有系统功能需求进行分析。
(4)系统设计
对系统功能和数据库等进行详细讲解。
(5)系统的实现
主要对首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理的实现。
(6)系统的测试
在系统编码实现后,就需要对系统进行检测,检测的方法有黑盒测试和白盒测试两种方式,本系统采用的是黑白盒测试方法对不同组的数据进行功能模块测试。
第二章开发技术介绍
此系统的关键技术和架构,Java技术、B/S结构、Ssm框架和Mysql数据库,是本系统的关键开发技术,对系统的整体、数据库、功能模块、系统页面以及系统程序等设计进行了详细的研究与规划。
2.1 系统开发平台
在线自助购药小程序中,Eclipse能给用户提供更多的方便,其特点一是方便学习,方便快捷;二是有非常大的信息储存量,主要功能是用在对数据库中查询和编程。其功能有比较灵活的数据应用,只需利用小部分代码就能实现非常强大的功能。因此,利用Eclipse 技术进行系统代码管理是该系统数据库的首选。
2.2微信开发者工具
在传统web浏览器中,在加载htm15页面时先加载视图层的html和css,后加载逻辑层的java script,然后返回数据并在浏览器中展示页面。而微信开发者工具的系统层是基于Native System的,视图层和逻辑层会同时被加载。微信小程序的这种逻辑方式大大的优化了页面响应速度,减少了页面加载的等待时间,提高了用户体验。微信开发者工具可以实现同步本地文件,开发调试,编译预览,上传,发布等一整套流程。
2.3 Java技术
JavaScript是一种网络脚本语言,广泛运用于web应用开发,可以用来添加网页的格式动态效果,该语言不用进行预编译就直接运行,可以直接嵌入HTML语言中,写成js语言,便于结构的分离,支持多种浏览器可以在多平台下运行。它具有三个不同的体系,分别为J2SE、J2EE、J2ME。Java 语言比较容易理解,而且也容易学习和上手,其语法与C语言和C++语言很相似,它可以自动的处理废料,而且不会受到内存的影响。
Java 程序被编译后形成的class 文件,这样就能够实现在多系统中正常运行。Java语言支持多个线程同吋执行,Java程序所需要的类能够动态的或者通过网络被载入到运行环境。Java开发工具支持JavaJDK7\8,开发集成环境IDE为Eclipse。
2.4 Mysql数据库介绍
利用Mysql的数据独立性、安全性等特点,在软件项目中对数据进行操作,可以保证数据准确无误,并降低了程序员的应用开发时间。
Mysql的特点是支持多线程,能方便的对系统资源充分利用,有效提高速度,还提供多种方式途径来对数据库进行连接;Mysql的功能相对弱小、规模也小,但本系统要求不高,Mysql完全可以满足本系统使用。
利用Mysql建立系统数据库,不仅有利于数据处理业务的早期整合,还能利于发展后两种数据扩展的操作。
2.5 Mysql环境配置
本系统的数据使用的是Mysql,所以要将Mysql安装到指定目录,如果下载的是非安装的Mysql压缩包,直接解压到指定目录就可以了。然后点击C:\Program Files\Mysql\bin\winMysqladmin.exe这个文件其中C:\Program Files\Mysql是Mysql安装目录。输入winMysqladmin的初始用户、密码(注:这不是Mysql里的用户、密码)随便填不必在意,确定之后右下角任务的启动栏会出现一个红绿灯的图标,红灯亮代表服务停止,绿灯亮代表服务正常,左击这个图标->winnt->install the service 安装此服务,再左击这个图标->winnt->start the service 启动Mysql服务。
修改Mysql数据库的root密码。用cmd进入命令行模式输入如下命令:
cd C:\Program Files\Mysql\bin
Mysqladmin -u root -p password 123
回车出现Enter password: ,这是要输入原密码. 刚安装时密码为空,所以直接回车,此时Mysql中账号 root 的密码被改为 123 安装完毕。
2.6 B/S架构
B/S结构是目前使用最多的结构模式,它可以使得系统的开发更加的简单,好操作,而且还可以对其进行维护。使用该结构时只需要在计算机中安装数据库,和一些很常用的浏览器就可以了。浏览器就会与数据库进行信息的连接,可以实现很多的功能,B/S结构是可以直接进行使用的,而且B/S结构在使用中极大的减少了工作的维护。基于B/S的软件,所有的数据库之间都是相互独立的,因此是非常安全的。因为基于B/S结构可以清楚的看到系统正在处理的业务,并且能够及时的让管理人员做出决策,这样就可以避免企业的损失。B/S结构的基本特点是集中式的管理模式,用户使用系统生成数据后,这些数据就可以存储到系统的数据库中,方便日后能够用到,这样就可以满足人们的所有的需求。
图2-1 B/S模式三层结构图
2.7Ssm框架
开发信息管理系统的主流框架是SSM(Spring + Spring MVC + MyBatis),SSM框架web层使用Spring MVC框架,使传输前后端数据变得简单;对于业务层使用Spring作为轻量级控制反转和面向切面的容器框架;对于相关SQL操作,采用Mybatis作为持久层框架,对JDBC进行封装,使得数据库的底层面向开发者操作处于一种透明状态。
第三章系统分析
3.1 可行性分析
一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本系统来补充线下自助购药小程序管理模式中的缺限,去解决其中的不足等,通过对本系统,不仅能使工作量不断地减少,还能使工作和管理的效率更加高。所以开发该系统能实现更大的意义和价值,系统完成后,能否达到预期效果就要通过可行性分析,分析之后,决定此系统是否开发。该自助购药小程序的开发设计中,对技术、经济、操作方面进行了可行性分析。
3.1.1技术可行性
本系统开发选择Java语言,它被研究的目的就是在于能够为网页创建等可以看到的信息。随着移动互联网技术的不断发展和创新,Java俨然已成为下一代互联网的Web标准。所以后台设计选择使用Mysql,数据库主要用来的建立和维护信息。对于前台开发要求应具备功能完善、易于操作等优点,后台数据库的要求则是能够建立和维护数据信息的统一性和完整性。
3.1.2操作可行性
现在随着科技的飞速发展,计算机早已经进入了人们的日常生活中,人们的工作环境也不像以前有那么多的要求,需要员工一定要到公司办公,有的工作在家也可以完成。这使得人们的工作效益有了很大的提高。操作的多样性也变高了。因此,管理的计算机化,智能化是社会发展而带来的必然趋势,各种智能的软件层出不穷,不同的软件能完成用户不同的需求,这不仅提高了工作效率还能完成一些客户特定的一些需求。本系统不仅界面简洁明了还采用可视化界面,用户只要用鼠标和键盘就可以完成对相关信息的修改,删除,添加等操作。因为这个系统的操作十分简单,方便上手,对于第一次使用系统的人,只需要很少的时间就可以上手操作。由此可见,本系统在操作上是可行的。
3.1.3经济可行性
基于Ssm框架的自助购药小程序,该系统软件开发仅需要一台普通的计算机便可完成实现开发,其成本很低。另外,作为毕业设计作品来讲,开发成本基本上可以忽略不计,且该系统软件的投入使用,可以实现更加快速高效的自助购药小程序管理,同时还能实现对人力资源和管理资源的有效节约,该自助购药小程序在经济上完全可行。
3.2性能需求分析
对系统的性能,从(功能、运行、界面、安全)等方面进行,下面我们逐一进行分析;
-
系统的功能是否完整进行分析:系统的功能,能对应设计出原始代码和算法,以表格同文字的形式进行详细介绍个人信息保证功能完整;
-
系统的运行是否通畅进行分析:系统的每个功能都有编写数据的关系和应对的代码,通过需求分析和可行性分析进行分析和显示系统的物理数据,保证其进行通畅;
-
系统的界面设计进行分析:对系统中的软件进行处理与分析的方式是由不同代码来进行的;从而使界面容易操作。
4.系统的安全性进行分析:这样才可以每个角色的不同对应的信息也就不同,在登录系统务必使用自己的账号,密码登录,账号与密码错误自然就登录失败了。登录成功可以对自己的信息进行操作,不能对别人的账号的信息进行查看等操作,这样自然保证系统的安全性。
第四章系统设计
4.1功能结构
为了更好的去理清本系统整体思路,对该系统以结构图的形式表达出来,设计实现该自助购药小程序的功能结构图如下所示:
图4-1 系统总体结构图
4.2数据库设计
4.2.1 数据库E/R图
ER图是由实体及其关系构成的图,通过E/R图可以清楚地描述系统涉及到的实体之间的相互关系。在系统中对一些主要的几个关键实体如下图:
(1)用户注册E/R图如下所示:
图4-2用户注册E/R图
(2)药品信息E/R图如下所示:
图4-3药品信息E/R图
4.2.2数据库表
数据库表的设计,如下表:
表4-1:地址
|-----------|-----------|-----|---------------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| userid | bigint | | 用户id | | |
| address | varchar | 200 | 地址 | | |
| name | varchar | 200 | 收货人 | | |
| phone | varchar | 200 | 电话 | | |
| isdefault | varchar | 200 | 是否默认地址[是/否] | | |
表4-2:药品分类
|--------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| yaopinfenlei | varchar | 200 | 药品分类 | | |
表4-3:用户表
|----------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| username | varchar | 100 | 用户名 | | |
| password | varchar | 100 | 密码 | | |
| role | varchar | 100 | 角色 | | 管理员 |
| addtime | timestamp | | 新增时间 | | CURRENT_TIMESTAMP |
表4-4:token表
|---------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| userid | bigint | | 用户id | | |
| username | varchar | 100 | 用户名 | | |
| tablename | varchar | 100 | 表名 | | |
| role | varchar | 100 | 角色 | | |
| token | varchar | 200 | 密码 | | |
| addtime | timestamp | | 新增时间 | | CURRENT_TIMESTAMP |
| expiratedtime | timestamp | | 过期时间 | | CURRENT_TIMESTAMP |
表4-5:收藏表
|-----------|-----------|-----|--------------------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| userid | bigint | | 用户id | | |
| refid | bigint | | 收藏id | | |
| tablename | varchar | 200 | 表名 | | |
| name | varchar | 200 | 收藏名称 | | |
| picture | varchar | 200 | 收藏图片 | | |
| type | varchar | 200 | 类型(1:收藏,21:赞,22:踩) | | 1 |
| inteltype | varchar | 200 | 推荐类型 | | |
表4-6:商家
|-------------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| shangjiazhanghao | varchar | 200 | 商家账号 | | |
| mima | varchar | 200 | 密码 | | |
| shangjiamingcheng | varchar | 200 | 商家名称 | | |
| fuzeren | varchar | 200 | 负责人 | | |
| shenfenzheng | varchar | 200 | 身份证 | | |
| lianxishouji | varchar | 200 | 联系手机 | | |
| xiangpian | varchar | 200 | 相片 | | |
| money | float | | 余额 | | 0 |
表4-7:订单
|------------------|-----------|------------|-------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| orderid | varchar | 200 | 订单编号 | | |
| tablename | varchar | 200 | 商品表名 | | yaopinxinxi |
| userid | bigint | | 用户id | | |
| goodid | bigint | | 商品id | | |
| goodname | varchar | 200 | 商品名称 | | |
| picture | varchar | 200 | 商品图片 | | |
| buynumber | int | | 购买数量 | | |
| price | float | | 价格 | | 0 |
| discountprice | float | | 折扣价格 | | 0 |
| total | float | | 总价格 | | 0 |
| discounttotal | float | | 折扣总价格 | | 0 |
| type | int | | 支付类型 | | 1 |
| status | varchar | 200 | 状态 | | |
| address | varchar | 200 | 地址 | | |
| tel | varchar | 200 | 电话 | | |
| consignee | varchar | 200 | 收货人 | | |
| logistics | longtext | 4294967295 | 物流 | | |
| shangjiazhanghao | varchar | 200 | 商户名称 | | |
表4-8:公告信息
|--------------|-----------|------------|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| title | varchar | 200 | 标题 | | |
| introduction | longtext | 4294967295 | 简介 | | |
| picture | varchar | 200 | 图片 | | |
| content | longtext | 4294967295 | 内容 | | |
表4-9:发票信息
|-------------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| fapiaomingcheng | varchar | 200 | 发票名称 | | |
| yaopinmingcheng | varchar | 200 | 药品名称 | | |
| yaopinfenlei | varchar | 200 | 药品分类 | | |
| goumaishuliang | int | | 购买数量 | | |
| goumaijine | int | | 购买金额 | | |
| fapiaoleixing | varchar | 200 | 发票类型 | | |
| fapiaotupian | varchar | 200 | 发票图片 | | |
| zhanghao | varchar | 200 | 账号 | | |
| xingming | varchar | 200 | 姓名 | | |
| shoujihaoma | varchar | 200 | 手机号码 | | |
| shibiehao | varchar | 200 | 识别号 | | |
| dizhi | varchar | 200 | 地址 | | |
| shangjiazhanghao | varchar | 200 | 商家账号 | | |
| shangjiamingcheng | varchar | 200 | 商家名称 | | |
| kaipiaoriqi | date | | 开票日期 | | |
| userid | bigint | | 用户id | | |
表4-10:配置文件
|-------|---------|-----|--------|----|-----|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| name | varchar | 100 | 配置参数名称 | | |
| value | varchar | 100 | 配置参数值 | | |
表4-11:用户
|--------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| zhanghao | varchar | 200 | 账号 | | |
| mima | varchar | 200 | 密码 | | |
| xingming | varchar | 200 | 姓名 | | |
| xingbie | varchar | 200 | 性别 | | |
| shenfenzheng | varchar | 200 | 身份证 | | |
| shoujihaoma | varchar | 200 | 手机号码 | | |
| xiangpian | varchar | 200 | 相片 | | |
| money | float | | 余额 | | 0 |
表4-12:购物车表
|------------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| tablename | varchar | 200 | 商品表名 | | yaopinxinxi |
| userid | bigint | | 用户id | | |
| goodid | bigint | | 商品id | | |
| goodname | varchar | 200 | 商品名称 | | |
| picture | varchar | 200 | 图片 | | |
| buynumber | int | | 购买数量 | | |
| price | float | | 单价 | | |
| discountprice | float | | 会员价 | | |
| shangjiazhanghao | varchar | 200 | 商户名称 | | |
表4-13:药品信息
|-------------------|-----------|------------|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| yaopinmingcheng | varchar | 200 | 药品名称 | | |
| yaopintupian | varchar | 200 | 药品图片 | | |
| yaopinfenlei | varchar | 200 | 药品分类 | | |
| yaopinchengfen | varchar | 200 | 药品成分 | | |
| shengchanshang | varchar | 200 | 生产商 | | |
| yaopinjianjie | longtext | 4294967295 | 药品简介 | | |
| yaopingongxiao | varchar | 200 | 药品功效 | | |
| fuyongfangshi | varchar | 200 | 服用方式 | | |
| shangjiariqi | date | | 上架日期 | | |
| shangjiazhanghao | varchar | 200 | 商家账号 | | |
| shangjiamingcheng | varchar | 200 | 商家名称 | | |
| lianxishouji | varchar | 200 | 联系手机 | | |
| price | float | | 价格 | | |
| onelimittimes | int | | 单限 | | -1 |
| alllimittimes | int | | 库存 | | -1 |
第五章系统功能实现
5.1前台功能模块
登录,用户通过输入账号和密码等信息并点击登录进行系统登录操作,如图5-1所示。
用户注册,在注册页面通过填写账号、密码、确认密码、姓名、性别、身份证、手机号码等详细信息进行注册操作;如图5-2所示。
图5-2用户注册界面图
用户登陆系统后,可以对首页、药品信息、购物车、我的等功能进行详细操作,如图5-3所示。
图5-3小程序首页界面图
药品信息,在药品信息页面可以查看药品名称、药品图片、药品分类、药品成分、生产商、药品功效、服用方式、上架日期、商家账号、商家名称、联系手机、价格、单限、库存、药品简介等详细信息;并进行评加入购物车,立即订购,评论和收藏操作;如图5-4所示。
图5-4药品信息界面图
用户功能,用户在我的页面可以对发票信息、我的收藏管理、用户充值、购物车、我的订单等详细信息进行操作,如图5-5所示。
图5-5用户功能界面图
用户信息,在用户信息页面通过填写账号、密码、姓名、性别、身份证、手机号码、相片等详细信息进行保存或退出登录操作,如图5-6所示。
图5-6用户信息界面图
5.2后台功能模块
管理员和商家登录,管理员和商家通过输入账号、密码,选择角色并点击登录进行系统登录操作,如图5-7所示。
图5-7管理员登录界面图
5.2.1 管理员功能
管理员登录系统后,可以对首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能进行相应操作,如图5-8所示。
用户管理,在用户管理页面可以对索引、账号、姓名、性别、身份证、手机号码、相片等内容进行详情,修改和删除操作,如图5-9所示。
图5-9用户管理界面图
商家管理,在商家管理页面可以对索引、商家账号、商家名称、负责人、身份证、联系手机、相片等内容进行详情,修改和删除操作,如图5-10所示。
图5-10商家管理界面图
药品信息管理,在药品信息管理页面可以对索引、药品名称、药品图片、药品分类、药品成分、生产商、药品功效、服用方式、上架日期、商家账号、商家名称、联系手机、价格、单限、库存等内容进行详情,修改,查看评论和删除操作,如图5-11所示。
图5-11药品信息管理界面图
药品分类管理,在药品分类管理页面可以对索引、药品分类等内容进行详情,修改和删除操作,如图5-12所示。
图5-12药品分类管理界面图
发票信息管理,在发票信息管理页面可以对索引、发票名称、药品名称、药品分类、购买数量、购买金额、发票类型、发票图片、账号、姓名、手机、识别号、地址、商家账号、商家名称、开票日期等内容进行详情和删除操作,如图5-13所示。
图5-13发票信息管理界面图
系统管理,在公告信息页面可以对索引、标题、图片等内容进行详情,修改和删除操作,还可对轮播图管理进行相对应操作,如图5-14所示。
图5-14系统管理界面图
5.2.2商家功能
商家登录系统后,可以对首页、个人中心、药品信息管理、发票信息管理、订单管理等功能进行相应操作,如图5-15所示。
图5-15商家功能界面图
个人中心,在个人中心页面通过填写商家账号、商家名称、负责人、身份证、联系手机、相片等信息进行个人信息修改操作,如图5-16所示。
图5-16个人中心界面图
药品信息管理,在药品信息管理页面可以对索引、药品名称、药品图片、药品分类、药品成分、生产商、药品功效、服用方式、上架日期、商家账号、商家名称、联系手机、价格、单限、库存等内容进行详情,开票,修改,查看评论和删除操作,如图5-17所示。
图5-17药品信息管理界面图
订单管理,在已支付订单页面可以对索引、订单编号、商品名称、商品图片、购买数量、价格、折扣价格、总价格、折扣总价格、支付类型、状态、地址、电话、收货人、商户名称、下单时间等内容进行详情,物流和发货操作,还可以对已完成订单,已发货订单,未支付订单,已取消订单,已退款订单进行详细操作如图5-18所示。
图5-18订单管理界面图
第六章系统测试
系统测试是软件开发过程中最后一步,但也是不可或缺的重要的一步,没有人可以保证一次性编写完成的系统不会出错,而系统测试就是将自己开发的系统成为成品前的最后一步。在测试过程中需要进行严谨细致的测试,要尽可能全面地在不同情况下运行该系统,排除一切出现错误的可能。
系统测试不仅仅是发现系统潜在的BUG或错误,而更为重要的是为用户提供一个良好的体验和安全可使用的产品服务。而通过发现错误或潜在的问题,将有助于提升产品的竞争力,这也是软件测试的其中的重要目的之一。
软件测试的方法有好几种,但目前主要采用的是包括以功能为主要测试方向的黑盒测试以及以逻辑为主要测试方向的白盒测试,这是两种不同的测试方法,针对的测试侧重点不同,本课题根据实际需求情况,选择以功能为主要的黑盒测试方法,同时测试是要遵循一定的规则来执行的,一个测试要执行其执行的依据一般是由测试用例来规定的,而测试用例一般是依据需求或说明书来综合制定的,测试在硬件出厂前是十分重要的一个过程,本课题由于时间和精力的关系,选择以实现的功能作为测试要点来进行测试。具体测试过程如下:
测试用例1及测试过程:
登录:录入登录信息,账号,密码,权限,然后单击登录进行操作,会出现两种情况:一种情况是登录成功,进入用户相应的功能界面进行下一步操作;另一种情况是提示登录失败,系统会弹出一个对话框要求重新登录操作;
测试用例2及测试过程:
管理员登录:录入登录信息,管理员账号,密码,权限,然后单击登录进行操作,会出现两种情况:登录成功进入管理员具有权限的功能界面和提示登录失败。一种情况是登录成功,进入管理员界面进行下一步操作;另一种情况是提示登录失败,系统会弹出一个对话框要求重新登录操作。
第七章总结与心得体会
7.1总结
通过完成该自助购药小程序和本论文的撰写让我更加明白了软件开发过程中软件工程思想的重要性。在项目的前期由于对需求分析做的不够谨慎和明确,导致了后面在设计甚至编码时候造成了许多不必要的麻烦。由此在今后的学习和工作开发之中必须要牢牢把握住软件工程的设计思想和方法,这样可以进一步保证项目开发的健壮性和准确性。
本网站所实现的是一个自助购药小程序,该系统严格按照需求分析制作相关模块,并利用所学知识尽力完成,但是本人由于学识浅薄,无法真正做到让该程序可以投入市场使用,仅仅简单实现部分功能,希望日后还能改善。
本系统具有以下优点:
该系统具有较高的适用性,选用B/S结构,可以在绝大部分个人平台上使用该系统。
系统将用户权限进行划分,管理员,商家和用户能看到及操作的信息不一样,三者具备不同的操作权限。
该系统操作界面简单明了,大部分人都可以正常使用。
但也存在以下问题需要改进:
运行时窗口不能被刷新,可以改进。
系统过于简单,显示的信息有限。
不能添加多个管理员账号,如果可以则将利于发展自助购药小程序规模,便于自助购药小程序信息集中管理。
7.2心得体会
由于经验和能力不足,导致在开发、设计该系统的时候,出现了比较多的问题,例如需要用到的技术不熟悉、程序报错等,后来我积极地向同学询问自己出现的问题同时也会找一些相关的书进行学习,慢慢的一点点将自己遇到的问题逐渐解决。所以不管以后在任何时候合作都会让自己事半功倍。通过本系统的完整的开发,可以遇到自己平时写一些简单的小程序遇不到的问题,不仅仅局限与技术与业务方面的,同时也使得自己更加深入的了解软件过程的开发设计思想,对于即将踏入社会工作而言,这些心得都十分重要。在以后的研究生学习生涯也必须加深这方面的理解,将最好的开发技术和最新的科学原理运用到自己以后的开发工作和学习研究中去。
致谢
过程永远比结果重要。毕业设计是大学生活中最为浓墨重彩的一笔,在这个过程中不仅学到更为全面的书本和实践知识,更让我感受到了浓浓的同窗之情及师生情。虽然大学四年间做过不少实验作业,但是独立完成这样一个操作系统还是第一次,遇到困难时理所当然,我也有所心理准备,但是超出自身能力的部分还是需要寻求教师及同学的帮助。在此,我衷心地感谢我的指导教师,可以说,没有教师我就不能顺利完成这次设计。他总是在一筹莫展的时候为我指引方向。比如在开题报告,我的指导教师就细致地指导我该怎么有逻辑地将自己的想法和做法表达清楚,在此由衷感谢他。在设计的过程中,教师百忙之中也乐于给予我指导,不管多晚给教师发消息,不管是不是上班时间去教师办公室寻求帮助,他总能在第一时间对我施以援手。在我开始着手实现这个设计的时候,通过需求分析及可行性分析对该系统有了较为浅显的认识;但是在我真正开始实现时发现事情并没有这么简单。任何成功都不是一蹴而就的,就算是一个简单的毕业设计也需要日积月累的知识和经验。于是,我便去寻求老师和同学的帮助,这也使得我得以从不同的角度重新考虑我的设计。终于,这个系统在我内心有了雏形。在真正实现这个设计的过程中,学习新知识是必定的,同时那些由于时间关系或者本来就没有掌握牢固的知识也有了进一步巩固的机会。然而最重要的是了解到如何作为一个开发人员,以开发人员的思维来看待软件开发的步骤和方法策略。
本次毕业设计的完成预示着大学时代的句号,在这个设计过程中,我收获到的绝不仅仅是做项目过程中要到的知识,更多的是同窗情谊和师生情谊,最重要的是做任何事情都要具备的认真态度,以及真正职业的思考方式方法。
最后真心祝愿师生们前程似锦!工作顺利,祝学校越办越好!
参考文献
[1]韩舶。微信小程序发展现状及其前景探析,2020(08)5-9
[6]邵荣强; 王慧敏; 陈燕; 胡孔法; 龚庆悦。基于微信小程序的检验查询系统设计与开发2020(4)78-87
[7]傅旭鹏。媒介传播视野下微信小程序的发展[J].新媒体研究,2018(11)
[1]杨选辉.信息系统分析与设计[J].北京:清华大学出版社.2017
[2]钱雪忠.数据库原理及应用[M].北京:北京邮电大学出版社.2017.08
[3]吴建.张旭东.java网络开发入门与实践[J].人民邮电出版社.2016
[4]贺松平.基于MVC的B/S的架构的研究及应用[D].武汉:华中科技大学.2016
[5]毕国锋.java技术的Web应用程序三层设计模型研究[J].黑龙江科技信息.2017.03
[6]青龙老贼,赵黎,方雨,刘琪.微信终极秘籍:精通小程序商业运营[M].北京:电子工业出版社,2019.
[7]戴晟晖.微信公众平台搭建、开发与实践指南[M].北京:中国铁道出版社,2016.
[8]微网.微商城细节知多少?微信小程序在未来几年的发展方向[EB/OL].2019.
[9]李刚.疯狂Ajax讲义:jQuery/ExtJS/Proto.义:jQuery/ExtJS/Prototype/DWR企业应用前端开发实战[M].3版.北京:电子工业出版社,2018.
[10]PaulDeck,林仪明,崔毅.SpringMVC学习指南[M].北京:民邮电出版社,2017
[11]王珊.数据库系统原理教程[M].北京:清华大学出版社,2018,56.
[12]求是科技.java数据库开发技术与工程实践[M].北京:人民邮电出版社,2016,131.
[13]王群,李馥娟.java数据库系统开发完全手册[M].北京:人民邮电出版社,2016.3.39-44
[14]李严,于亚芳,王国辉.java数据库开发实例解析[M].北京:电子工业出版社,2019.12.78-93
[15]王国辉、牛强、李南南java工程应用与项目实践[M].北京:电子工业出版社,2015.4.162-171.
核心代码展示
java
/**
* 公告通知
* 后端接口
* @author
* @email
* @date 2021-03-09 11:33:59
*/
@RestController
@RequestMapping("/news")
public class NewsController {
@Autowired
private NewsService newsService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( NewsEntity news){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
return R.ok().put("data", newsService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(NewsEntity news){
EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
NewsView newsView = newsService.selectView(ew);
return R.ok("查询公告通知成功").put("data", newsView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.updateById(news);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
newsService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<NewsEntity> wrapper = new EntityWrapper<NewsEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = newsService.selectCount(wrapper);
return R.ok().put("count", count);
}
}