摘 要
在经济全球化的今天,建立以客户为中心的经营战略,可以加强企业和客户间的联系。对企业来讲,为客户提供一流的服务,是企业建立品牌、实现差别化服务、取得竞争的利器。一直以来人们使用传统人工的方式管理会员的基本档案,这种管理方式存在着许多缺点:效率低、保密性差,另外时间一长,将产生大量的文件和数据,对于查找、更新和维护都带来了不少的困难。而通过会员管理系统,企业就可以很轻松很方便的记录所有会员客户的资料,了解用户的兴趣爱好、消费特点、意向需求等;进而针对客户的需求,为其提供优质的个性化服务,还能为企业的产品开发、事业发展提供可靠的市场调研数据,是企业经营不可或缺的一个有利工具。
本文主要通过对化妆品店会员管理系统的前台和后台管理进行了功能性需求分析,对系统的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据系统的功能设计确定了数据库结构,实现完整的代码编写。化妆品店会员管理系统完成了主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、销售管理功能、会员管理、充值记录管理功能的实现过程。
关键词:会员管理;Thinkphp框架;化妆品店
PHP cosmetics store member management system
Abstract
In today's economic globalization, the establishment of a customer-centered business strategy can strengthen the relationship between enterprises and customers. For enterprises, providing first-class services to customers is a sharp weapon for enterprises to establish brands, realize differentiated services and obtain competition. For a long time, people use the traditional manual way to manage the basic files of members. This management method has many disadvantages: low efficiency and poor confidentiality. In addition, over a long time, it will produce a large number of documents and data, which has brought many difficulties to find, update and maintain. Through the member management system, enterprises can easily and conveniently record the information of all member customers and understand users' interests, consumption characteristics, intention and demand, etc; Furthermore, according to the needs of customers, providing them with high-quality personalized services can also provide reliable market research data for enterprise product development and career development. It is an indispensable and beneficial tool for enterprise management.
This paper mainly analyzes the functional requirements of the foreground and background management of the cosmetics store member management system, and analyzes the non functional requirements of the security and scalability of the system. Based on the detailed demand analysis, the database structure is determined according to the functional design of the system to realize the complete coding. The cosmetics store member management system has completed the page design and function realization of the main modules. This paper shows the implementation effect diagram of the home page, and introduces the implementation process of user registration function, sales management function, member management and recharge record management function through code and page。
Key words: Member management; Thinkphp framework; Cosmetics shop
目 录
-
(一) 研究背景与意义
在计算机飞速发展的今天,将计算机这一高效的利器应用于会员管理已是势必所然,它可以带来意想不到的效果,尤其对于复杂的会员信息处理和大量的数据查询,计算机能够充分发挥它的优越性。在给广大用户带来方便的同时也会为的商业的发展提供无限潜力。
计算机已经成为我们学习和工作的得力助手,使用其管理会员有助于提高工作效率。今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域。现在我国的中小商业机构中会员的管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。
随着Internet 的快速发展,会员管理己经成为所有Web应用的基础。从电子政府、企业信息化、综合性网站、到垂直门户、数字图书馆乃至所有的电子商务,一定会涉及到内容的采集、创建、存储、管理、发布、检索和服务。会员管理在企业管理中有重要的地位和意义。开发会员管理信息系统是提高管理水平和管理效率的客观需要,结合会员管理信息系统的研究和开发工作,阐述了会员管理信息系统的特点、作用及有关其实现的若干关键性技术问题。
-
(二)研究内容
化妆品店会员管理系统的开发及实现,所需要的工作内容:
(1)首先是确定选题,确定好所要做的系统,并对系统的背景及现在面临的一些问题等进行系统的初步确认。
(2)系统确认完成后,结合系统开发的需求进行确认系统开发所使用的技术,化妆品店会员管理系统的开发使用Thinkphp框架,数据库进行系统的搭建开发,确认好使用的技术进行技术分析,所使用的技术是否可以完成系统的实现。
(3)确定好系统使用的技术,进行在线确认系统所划分的用户角色,并且根据用户角色划分确定所要设计的功能模块,对于化妆品店会员管理系统的设计主要划分别为管理员和用户角色,并所使用的功能模块也相应不同,但是系统的数据库实现的内容是交互的,用户可以随时根据自己的需求进行信息搜索,对于系统工作人员可以根据自己的分管内容进行在线信息的处理及操作,管理员获取到所有用户的详细数据信息,并根据需求进行第一时间处理解决。
(4)系统的功能模块确认完成后进行程序及界面的设计,设计完成后,并且通过测试来判断程序是否完善,对于系统测试,需要不同的用户进行不同的内容编辑及提交,及使用不同的测试方式找出程序中存在的漏洞,并对程序出现的漏洞问题进行在线解决处理,如果测试系统没有任何问题时,可以将系统上传进行正式操作使用。
PHP是一种面向对象的程序设计语言,类是PHP程序的基本组成单元,类中又包含了属性和方法,在类中又可以创建无数个对象。类中包含的主要成员是字段和方法,字段是指一种数据变量,方法是指对字段进行操作的集合,包括给其他变量赋值、调用方法等。PHP代码都是编写在类体中,类体中的每个数据项都可以看作是一个对象,PHP不支持类的多重继承,但可以支持接口的多重继承,并且支持类和接口的实现。由于PHP通常在网络环境中使用,所以PHP提供了一个防止代码恶意攻击的安全机制,同时,PHP具有强类型机制、自动收集垃圾和异常处理等特性,这些都是PHP语言健壮性的重要保证。
1、PHP语言具有如下特点:
(1)PHP 结合 C、Java、Perl 以及自创的新语法形成了自己独特的语法。
(2)PHP可以更快速的执行动态网页,当然这只是相对于CGI或者Perl来说,PHP可以在HTML文档中嵌入程序,而且去执行,另外PHP能够实现CGI的所有功能,因此说明PHP具有很强大的功能。
(3)大部分当下流行的数据库和操作系统PHP语言都能够支持。
(4)PHP语言的最重要特点就是可以让C、C++进行扩展
2、PHP语言具有如下优势:
(1)开放源代码:事实上PHP的所有源代码都可以得到。
(2)免费性:PHP是开源代码并且免费
(3)快捷性:PHP对于初学者来说,它不止编辑简单可以嵌入与HTML语言中,而且对于程序开发和运行也是非常快速的,并且非常容易掌握。
(4)跨平台性强:PHP是可以在服务器运行的脚本语言,所以在UNIX、Android、Mac OS、WINDOWS等操作平台上都可以运行。
(5)效率高:PHP对系统资源的消耗相当少,所以它的效率高。
(6)图像处理:PHP不止是可以使用GD2对图像进行处理,而且他还可以完成对图像的创建。
(7)面向对象:php4、php5对于PHP在面向对象上,有了许多的改进,PHP语言开发大型商业程序也是可以胜任的。
-
(二)JavaScript脚本语言
此作品中,其中包含了页面的搭建,以及前后台数据接口的连接等,而对于实现用户页面交互以及一些页面逻辑性判断等功能都是用JavaScript完成的[7],而JavaScript是已经被广泛用于Web应用开发,是一种属于网络的脚本语言,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能。JavaScript作为一种描述语言,作用于web前端,它基于对象(object)和事件驱动(Event Driven)并且安全性也较好。它可以有效的在客户端运行并为服务器减轻负担。
1、JavaScript具有的特点:
(1)脚本语言。JavaScript是一种脚本语言并具有解释性,在程序运行过程中,它就可以进行解释。
(2)基于对象。JavaScript可以创建对象,而且还可以使用现在存在的对象,它是基于对象的脚本语言。
(3)简单。JavaScript不对使用的数据类型有着严格的要求,应用的是弱类型的变量类型,设计是十分紧凑简单。
(4)动态性。JavaScript是可以不经过Web服务器对用户的操作做出相应,是可以采用事件驱动的脚本语言。
(5)跨平台性。JavaScript可以不依赖操作系统,但需要浏览器的支持。所以在编写JavaScript脚本后可以在任意机器上使用,但要注意的一点,使用的浏览器是支持JavaScript脚本语言,现在大多浏览器也支持JavaScript。
2、JavaScript的用途
JavaScript的用途是解决页面交互和数据交互,最终目的是丰富客户端效果以及数据的有效传递。
(1)实现页面交互,提升用户体验实现页面特效。即js操作html的dom节构或操作样式。
(2)客户端表单验证。当数据传送到服务端前,可以将用户填入并上交的信息快速有效的验证,进行了数据的交互,为服务器减轻了负担。
Mysql Database,通常简称为Mysql,是一款关系型数据库的管理系统。Mysql数据库系统是目前最流行的关系型数据库管理系统之一,其系统具有良好的可移植性,功能强大且使用十分方便。Mysql支持很多系统和硬件,包括HP-UX,Linux,MicrosoftWindows,SunSolaris,AppleMac等。
Mysql系统的特点:
(1)Mysql的多线索服务器的体系结构使其只利用很少的资源就能够支持多用户的、大数据的高性能事务处理;
(2)Mysql支持大量的多媒体数据,例如声音、动画、二进制图形和多维数据结构等;
(3)Mysql提供了安全保密管理系统,具有良好的安全性、一致性和完整性;
(4)具有新的分布式数据库能力和分布处理的能力;
(5)提供了一些高级语言的接口软件,可以帮助快速开发基于客户端的应用程序,具有良好的移植性、可连结性和可兼容性。
Mysql数据库逻辑结构包含表空间(tablespace)、段(segment)、范围(extend)、数据块(datablock)、和模式对象(schemaobject) 。每一个数据库都可以逻辑划分为一个或多个表空间,每一个表空间都是由一个或多个数据文件来组成。Mysql数据库分为系统表空间和非系统表空间,每一个Mysql数据库都包含一个称作SYSTEM的系统表空间。
-
(四)AJAX技术
AJAX是创建交互式网页的一种开发技术,利用AJAX技术可以实现以无刷新网页的方式更新HTML元素中的内容。传统的网页如果要更新网页内容,必须重新加载整个页面,而AJAX使用异步数据传输在网页和Web服务器之前传递HTTP请求,这样可以使网页只请求少量信息,而不用刷新整个页面。
-
(五)Thinkphp框架介绍
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。
(六)B/S体系结构介绍
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server同数据库进行数据交互。
本系统将在经济、技术、操作这三个角度上进行可行性分析。
整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。
技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于PHP语言,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用Mysql数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。
化妆品店会员管理系统的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用PHP技术开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。
前台需求:
(1)用户模块:主要包括用户的注册和登陆、用户个人信息管理等功能。
(2)商品信息模块:主要存储包括商品编号、商品名称、商品类型、商品库存、商品价格等信息。
(3)销售管理模块:主要存储包括商品名称、商品类型、商品价格、销售数量、销售日期等信息。
(4)入库模块:主要存储包括商品编号、商品名称、商品类型、入库日期、如数数量等信息。
(5)充值记录:主要存储包括会员编号、会员姓名、会员性别、充值时间、充值金额等信息。
(6)消费记录:主要存储包括会员编号、消费金额、消费时间等信息
后台需求:
(1)用户管理:主要包括用户列表、用户等级管理等功能。
(2)商品管理:主要包括商品编号、商品名称、商品类型、商品价格、商品库存信息管理等功能。
(3)销售管理:主要包括订商品名称、销售数量、销售日期信息管理等功能。
(4)充值记录管理:主要对会员的充值记录进行维护管理。
(5)消费记录管理:主要对会员的消费记录信息进行维护管理。
(6)会员管理:主要对会员信息进行维护管理。
管理人员用例图如下所示。
图1 管理人员用例图
系统管理员用例图如下所示。
图2 系统管理员用例图
商品添加用例描述如下表所示。
表1商品添加用例描述
用例名称 | 添加新商品 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行添加新商品操作 | |
前置条件 | 管理员添加新商品前必须登录系统 | |
后置条件 | 系统中添加一个新商品 | |
基本事件流 | 参与者动作 | 系统响应 |
4、管理员填写新商品信息,点击“添加”按钮。 | 2、系统打开添加新商品界面。 3、系统检查管理员输入的商品信息是正确有效的。 5、系统将商品添加到数据库中。 6、系统提示“操作成功”。 7、系统跳转到商品管理界面。 | |
其他事件流 | 1、系统验证管理员输入的商品名为空,则提示“*请填写商品名称!”。 2、系统验证管理员输入的价格不是数字格式,则提示“*价格必须是数字格式!” |
商品删除用例描述如下表所示。
表2商品删除用例描述
用例名称 | 删除商品 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行删除商品操作 | |
前置条件 | 管理员删除商品前必须登录系统 | |
后置条件 | 系统中删除一个商品 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“商品管理”。 4、管理员选择一个商品,点击“删除”按钮。 6、管理员点击“确定”按钮。 | 2、系统从数据库中获取商品信息列表 3、系统打开商品列表界面。 5、系统提示“你确定要删除吗?”。 7、系统将商品从数据库中删除。 8、系统提示“删除成功”。 9、系统跳转到商品管理界面。 | |
其他事件流 | 无 |
用户编辑用例描述如下表所示。
表3用户编辑用例描述
用例名称 | 修改用户 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行修改用户信息操作 | |
前置条件 | 管理员已经登录系统 | |
后置条件 | 系统中更新一条用户记录 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“用户管理”。 4、管理员在用户列表中选择一个用户,点击“编辑”按钮。 6、管理员填写用户信息,点击“保存修改”按钮。 | 2、系统从数据库中获取用户信息。 3、系统打开用户列表界面。 5、系统打开修改用户信息界面。 7、系统将更改后的添加到数据库中。 8、系统提示“操作成功”。 9、系统跳转到用户管理界面。 | |
其他事件流 | 无 |
商品销售用例描述如下表所示。
表4商品销售用例描述
用例名称 | 商品销售 | |
参与者 | 用户 | |
用例概述 | 本用例用于用户进行对商品销售操作 | |
前置条件 | 用户已经登录系统 | |
后置条件 | 系统中增加一条用户销售记录 | |
基本事件流 | 参与者动作 | 系统响应 |
1、用户在前台首页选择任意一个商品分类。 4、管理员在用户列表中选择一个商品。 7、用户填写销售订单,点击“销售”按钮。 | 2、系统从数据库中获取商品列表信息。 3、系统打开商品列表界面。 5、系统从数据库中获取商品信息。 6、系统打开商品信息及销售界面。 8、系统检查用户输入的信息是正确有效的。 9、系统将销售记录添加到数据库中。 | |
其他事件流 | 1、系统验证用户输入的字段为空,则提示“*销售数量不能为空!”。 |
随着用户量的增加,系统可能会需要同时服务上千、上万个页面,服务器需要同时响应大量用户的操作,这就要求系统需要有良好的可扩展性,否则系统会出现延迟,卡顿甚至服务器崩溃的问题。高扩展性可以使软件保持旺盛的生命力,同时也能够使系统更好的适应用户增加、提高性能需求、增加应用功能等改变。
系统中保存了大量用户和管理员的个人信息,因此,保证系统服务器和数据安全是在开发过程中需要考虑的重要问题。安全性包括服务器安全、操作系统安全、数据库安全、程序代码安全以及用户个人信息和支付安全等,系统可以通过采用防火墙技术、加密技术、认证技术等来增强其安全性,只有一个健壮安全的系统才能具有长久的生命力。
化妆品店会员管理系统的前台中,会员模块和充值模块进行数据交互,前台的功能主要包括用户模块、商品模块、会员充值模块和消费记录模块。
化妆品店会员管理系统的后台中,管理员对用户在前台提交申请产生的数据进行处理,以满足用户的需求。前台系统和后台系统有数据交互,整个系统各个部分相互独立又密不可分。后台的功能主要包括用户管理、商品信息管理、充值记录管理、消费记录管理。
通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。
图4系统功能结构图
注册成功后,用户可以通过输入用户名来登录系统,输入密码后进行验证。登录成功后,进行商品入库、商品销售、会员充值记录管理等功能。
个人信息管理
用户登录系统后,在账户设置中,可以修改昵称、头像、登陆密码、收货地址等个人基本信息。
商品搜索
系统首页展示了商品搜索输入框,用户在输入框内输入与商品类型相关的关键字,系统通过模糊查询搜索到用户需要的商品并展示。
商品信息
用户在浏览商品时,点击某一个商品,跳转到该商品的信息展示页。在商品信息页面展示了商品的详情信息,比如商品介绍,商品详情等,用户通过浏览信息了解商品的具体信息,最终决定是否购买。
概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 ID 标识、用户名、密码、电话、地址等属性。联系是指实体之间有意义的关联,包括一对一、一对多、多对多三种类型。
系统E-R图如下所示。
图5系统E-R图
在图中,用户购买菜品,关系为1:N,管理员管理菜品信息,关系为1:N,用户和订单的关系为1:N。
连接数据库的文件在Resources 文件夹下的application.yml文件,代码如下:
server:
port: 5000
servlet:
context-path: /api
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/CS725260_20211101091736?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jackson:
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
default-property-inclusion: ALWAYS
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
针对系统的实体和属性,结合数据设计思想,对系统的逻辑设计的内容进行如下描述。
菜品(菜品编号、菜品名称、图片、价格、类目、介绍)。
订单(订单编号、菜品名称、价格、购买人、购买时间)。
订单(订单编号、用户名、订单内容、价格、是否支付)。
菜品信息(信息编号、标题、类别、内容、图片)。
美食资讯(美食资讯编号、标题、资讯内容、资讯列表)。
2. 数据库表设计
数据库表是设计和实现系统的一个重要基础。以下列出了小郑米粉店几个重要的数据库表。
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
controller_id | int | 11 | 是 | 是 | 管理者ID |
number | varchar | 64 | 否 | 否 | 编号 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
post | varchar | 64 | 否 | 否 | 工作岗位 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
warehousing_management_id | int | 11 | 是 | 是 | 入库管理ID |
commodity_number | varchar | 64 | 否 | 否 | 商品编号 |
trade_name | varchar | 64 | 否 | 否 | 商品名称 |
commodity_type | varchar | 64 | 否 | 否 | 商品类型 |
warehousing_date | date | 0 | 否 | 否 | 入库日期 |
receipt_quantity | int | 11 | 否 | 否 | 入库数量 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
sales_management_id | int | 11 | 是 | 是 | 销售管理ID |
commodity_number | varchar | 64 | 否 | 否 | 商品编号 |
trade_name | varchar | 64 | 否 | 否 | 商品名称 |
commodity_type | varchar | 64 | 否 | 否 | 商品类型 |
commodity_price | varchar | 64 | 否 | 否 | 商品价格 |
sales_volumes | varchar | 64 | 否 | 否 | 销售数量 |
date_of_sale | date | 0 | 否 | 否 | 销售日期 |
total | varchar | 64 | 否 | 否 | 总计 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
records_of_consumption_id | int | 11 | 是 | 是 | 消费记录ID |
member_number | varchar | 64 | 否 | 否 | 会员编号 |
member_name | varchar | 64 | 否 | 否 | 会员姓名 |
member_gender | varchar | 64 | 否 | 否 | 会员性别 |
dissipate | datetime | 0 | 否 | 否 | 消费时间 |
consumption_amount | varchar | 64 | 否 | 否 | 消费金额 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
recharge_record_id | int | 11 | 是 | 是 | 充值记录ID |
member_number | varchar | 64 | 否 | 否 | 会员编号 |
member_name | varchar | 64 | 否 | 否 | 会员姓名 |
member_gender | varchar | 64 | 否 | 否 | 会员性别 |
recharge_time | datetime | 0 | 否 | 否 | 充值时间 |
recharge_amount | int | 11 | 否 | 否 | 充值金额 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
类型 | 长度 | 不是null | 主键 | 注释 | |
commodity_management_id | int | 11 | 是 | 是 | 商品管理ID |
commodity_number | varchar | 64 | 是 | 否 | 商品编号 |
trade_name | varchar | 64 | 否 | 否 | 商品名称 |
commodity_type | varchar | 64 | 否 | 否 | 商品类型 |
commodity_price | int | 11 | 否 | 否 | 商品价格 |
merchandise_inventory | int | 11 | 否 | 否 | 商品库存 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
-
五、系统实现
用户注册完成后,点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。
登陆拦截管理器,在config文件夹下的WebAppConfig.java文件,代码如下:
@Configuration
@Slf4j
public class WebAppConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//登录拦截的管理器
InterceptorRegistration registration = registry.addInterceptor(loginInterceptor());
//拦截的地址
registration.addPathPatterns("/**");
//方行的地址
//registration.excludePathPatterns("/**");
//根据需要拦截,一般设置所有地址拦截,放行公共连接
}
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
}
登录界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/713b5fb48709498594ab5cdf1d8bc710.png)
图5-1登录界面
用户登录的关键代码如下。
public function login()
{
if (Request::isPost()) {
$request = Request::param();
$result = $this->validate($request, $this->validate);
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
$request['password'] = md5($request['password']);
$result = $this->model->login($request, $this->table);
$data = $result;
}
} else {
$data['error'] = 30000;
$data['message'] = "field的值不能为空!";
}
return json_encode($data);
}
public function login($request=[],$table_name = ''){
$username = $request['username'];
$password = $request['password'];
$bol = $this->where(['username'=>$username])->find();
if ($bol){
$password = md5($password);
if ($request['password']==$bol['password']) {
//添加token信息
$access_token['create_time'] = date('Y-m-d H:i:s');
$access_token['update_time'] = date('Y-m-d H:i:s');
$access_token['info'] = json_encode($bol);
// $access_token['info'] = $bol;
$access_token['token'] = md5(date('Y-m-d H:i:s'));
$bol_token = Db::name('AccessToken')->insert($access_token);
if ($bol_token){
$data['obj'] = $bol;
$data['obj']['token'] = $access_token['token'];
return ['result' => $data];
}else{
return ['error' => ['code' => 5000, 'message' => '登录失败,token生成失败']];
}
} else {
return ['error' => ['code' => 5000, 'message' => '登录失败,密码不正确']];
}
}else{
return ['error' => ['code' => 5000, 'message' => '登录失败,账号不存在']];
}
}
1、用户注册的实现
用户进入系统首页后,点击“注册”链接进入到注册页面,按照页面提示输入用户名密码和手机号,页面进行表单验证,验证输入的用户名和账号是否合法,表单验证通过后,点击“立即注册”按钮,利用 Ajax 技术,对用户名和账号实现页面无刷新验证,检测数据库中是否已经存在该用户名,若数据库中不存在,则注册成功,注册成功后,自动跳转到登录页面。
用户注册界面如下所示。
![](https://i-blog.csdnimg.cn/direct/d6bbc723d3344693840fbd87e60b5c3e.png)
图5-3用户注册界面
用户注册的关键代码如下。
public function register()
{
if (Request::isPost()) {
$request = Request::param();
$request['create_time'] = isset($request['create_time']) ? $request['create_time'] : date('Y-m-d H:i:s');
$request['update_time'] = isset($request['update_time']) ? $request['update_time'] : date('Y-m-d H:i:s');
$result = $this->validate($request, $this->validate);
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
$request['password'] = md5($request['password']);
$result = $this->model->register($request, $this->table);
$data = $result;
}
} else {
$data['error'] = 30000;
$data['message'] = "field的值不能为空!";
}
return json_encode($data);
}
public function register($request=[],$table_name = ''){
$username = $request['username'];
$bol = $this->where(['username'=>$username])->find();
if (!$bol){
$result = self::allowField(true)->save($request);
if ($result) {
return ['result' => 1];
} else {
return ['error' => ['code' => 3000, 'message' => '注册失败']];
}
}else{
return ['error' => ['code' => 3000, 'message' => '注册失败,账号已存在']];
}
}
2、商品信息的实现
商品信息页面,如下图所示。
![](https://i-blog.csdnimg.cn/direct/ebcef3efccd047d98d0fcf18f2634e14.png)
图5-4商品信息页面
商品信息的关键代码如下。
@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);
}
3销售管理的实现
系统首页提供了销售管理的输入框,用户在输入框内输入商品销售信息关键字,点击提交按钮,系统将用户输入的关键字传递到后台。首先创建一个实体类 PageBean,该实体类的属性包括页码 pageCode、每页记录数 pageSize、总记录数 totalRecord 和一个 List 集合 beanList,用循环将录入到的结果分页展示。
销售管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/281a26ad70ef47c8ae8d08e899c994c3.png)
图5-5销售管理界面
销售管理的关键代码如下。
public function avg_group()
{
$request = Request::param();
if (isset($request['groupby']) && isset($request['field'])) {
if (!empty($request['groupby']) && !empty($request['field'])) {
$result = $this->model->avg_group($request, $this->table, $this->table_id);
$data = $result;
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "groupby或者field的值不能为空!";
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "groupby或者field的值不能为空!";
}
return json_encode($data);
}
4.入库管理的实现
点击“入库管理”按钮,页面将该商品入库的数据传递到后台,首先查询数据库入库表中是否已经存在该商品,若存在直接将商品数量加一,若不存在则创建一个新的入库对象,添加成功,数据库中的入库表单添加一条信息。
入库添加界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/613d5b53e7b047459cdbd5ca0c501448.png)
图5-6入库添加界面
入库管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/9386b0d2d70540c7bde61da8695ddf20.png)
图5-7入库管理界面
入库管理的关键代码:
public function avg()
{
$request = Request::param();
if (isset($request['field'])) {
if (!empty($request['field'])) {
$result = $this->model->avg_field($request, $this->table, $this->table_id);
$data = $result;
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
return json_encode($data);
}
管理员对系统用户的管理,在管理员管理实现管理员用户的管理,包括录入、删除、修改,修改密码通过SESSION获取用户名,然后输入新密码,使用sql命令更新密码。
用户管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/ca18a4cb57304f66a846729b64b321c2.png)
图5-8用户管理界面
管理员可以获取系统中所有会员的充值记录,并对其进行编辑。管理员在添加会员充值记录信息时,需要输入充值基本信息,如会员编号、充值金额、充值时间等。添加充值信息完成,数据库中的充值记录表添加一条信息。
充值记录管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/71b63ff9e37a4879a4ecdef347942282.png)
图5-9充值记录管理界面
充值记录管理关键代码:
public function add()
{
if (Request::isPost()) {
$request = Request::param();
$request['create_time'] = isset($request['create_time']) ? $request['create_time'] : date('Y-m-d H:i:s');
$request['update_time'] = isset($request['update_time']) ? $request['update_time'] : date('Y-m-d H:i:s');
$result = $this->validate($request, $this->validate);
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
if($this->table == 'user'){
$request['password'] = md5($request['password']);
}
$res = $this->add_before($request, $this->table, $this->table_id);
if($res['code'] == 200){
$result = $this->model->add($request, $this->table, $this->table_id);
$this->add_after($this->table);
$data = $result;
}else{
$data['error'] = $res;
}
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
return json_encode($data);
管理员在后台管理界面点击到所有消费记录界面列表,可以搜索当前所有消费记录信息,调用搜索全部消费记录的请求,向数据库的消费记录表搜索当前所有消费记录并将消费记录信息以对象的形式层层返回到消费记录列表界面,显示出当前所有消费记录信息。同时可以删除过期消费记录,确认已有消费记录。
消费记录管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/c4f3cdfd5d8d402f8ea02c01055dde19.png)
图5-10消费记录管理界面
会员管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/e52b933738394f87b3b73130939c9cb1.png)
图5-11会员管理界面
消费记录管理的关键代码如下。
public function sum()
{
$request = Request::param();
if (isset($request['field'])) {
if (!empty($request['field'])) {
$result = $this->model->sum_field($request, $this->table, $this->table_id);
$data = $result;
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
return json_encode($data);
}
以进入系统首页的访问速度为例展示系统的性能测试;系统要在3秒钟内响应;需要完成页面的菜单栏、首页轮播图片、商品管理及销售管理、会员充值记录以及各功能模块入口等元素的显示。
功能性测试是指执行指定的工作流程,通过对一个系统的所有特性和功能都进行测试确保符合需求和规范。
系统功能性测试表如下表所示。
表11系统功能性测试表
编号 | 测试功能 | 测试内容 | 测试结果 |
1 | 用户登录 | 1.验证用户名与密码的正确性。 2.验证密码是否可见。 | 通过 |
2 | 首页展示 | 1.首页数据是否成功加载。 2.验证搜索功能的准确性。 3.验证是否可以异步加载。 4.验证导航栏按钮。 | 通过 |
3 | 个人信息修改 | 1.验证登录名是否可以正常更改。 2.验证联系方式是否可以更改。 3.验证收货地址可以正常修改。 4.验证密码是否可以修改。 | 通过 |
4 | 商品管理 | 1.购买商品清单是否可以生成。 2.验证消费信息是否准确。 | 通过 |
7 | 入库管理 | 1.验证商品入库新增是否可以成功。 2.验证商品入库删除是否可以成功。 | 通过 |
8 | 充值记录管理 | 1.充值记录是否与上传一致。 2.是否能完成信息修改。 3.验证信息修改。 | 通过 |
9 | 消费记录管理 | 1.能否正常上传消费记录信息。 2.验证数据准确性。 | 通过 |
10 | 会员管理 | 1.验证会员录入功能。 2.验证会员违规清理功能。 | 通过 |
集成测试后,所有的模块已经全部连接完毕,形成了一个完整的系统。合格性测试是在集成测试完毕后,进一步对系统进行综合性的检测。经过合格性测试,可以检查出系统是否符合系统的设计,能够完成需求的所有功能。本系统经过最后的测试,所有模块功能都能按预定要求工作。
在实际测试中,经过一系列系统性的测试,使我们能够及时发现一些系统在设计中出现的疏忽和漏洞。经过严密的测试,不仅发现了模块内部的错误,也查找到模块连接后产生的错误。经过测试,对系统产生错误的地方进行优化、修改和完善,使得系统能够实现最初设计的基本功能。
本文针对化妆品店会员管理系统的特点和用户需求,利用 PHP相关技术、Thinkphp框架等技术,通过详细的需求分析、页面设计和功能设计,系统利用JQuery 技术和 CSS 技术进行了页面设计,实现了包括用户模块、商品模块、销售模块。充值记录模块和消费记录模块的前台系统以及包括用户管理模块、入库管理模块、会员管理模块的后台系统。另外,系统还进行了数据安全设计,并添加了用户的访问控制,建立了一个完整、健壮、安全稳定的化妆品店会员管理系统。
由于时间限制和本人能力条件有限,还存在一些不足,今后也会出现许多新的开发技术,未来还可以对程序做出如下改进:
(1)优化程序页面,使页面更加美观且方便操作;
(2)优化信息搜索功能,提供多条件选择查询搜索;
(3)进一步提高使用程序的安全性,使其更加健壮;
(4)优化数据和代码,提升软件效率,方便维护和扩展。
参考文献
[1]张蒙蒙,曹成茂.基于MVC框架的会员管理系统的设计与实现[J].滁州学院学报,2021,23(05):27-32.
[2]黄志超,雷学峰.会员管理与备份系统的设计与实现[J].信息与电脑(理论版),2021,33(15):137-140.
[3]姜志敏,杨欢欢.在线化生存下的会员管理[J].中国药店,2021(05):74-77.
[4]梁增华,张书锋,尤澜涛.商业零售会员管理系统的设计与实现[J].电脑知识与技术,2021,17(05):67-70.
[5]徐驰. 基于分布式的会员管理系统的设计与实现[D].西安电子科技大学,2020.
[6]王娟,马薇.基于.NET的协会会员管理系统的设计与实现[J].电子技术与软件工程,2020(05):169-170.
[7]李坤. 大连宜家会员关系管理优化策略研究[D].大连理工大学,2019.
[8]段清阳. 基于会员分类的会员关系管理应用研究[D].长安大学,2019.
[9]罗苑瑜.PDCA循环法在会员管理制度的运用[J].管理观察,2019(05):88-89.
[10]顾宏. 高尔夫会员信息管理系统的设计与开发[D].湖北工业大学,2018.
[11]孙文宇. 电视台全媒体客户资源信息管理系统的设计与实现[D].山东大学,2018.
[12]周超. 会员管理系统运营支撑子系统的研究与实现[D].北京邮电大学,2018.
[13]泛舟.会员数据的“价值”[J].中国药店,2018(01):28.
[14]张朦博轩. 基于微信公众平台的电子会员信息管理系统研发[D].北京工业大学,2018.
致谢
时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。首先感谢我的导师,不仅在学习研究方面加以指导,也在生活和为人处世上给予帮助。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。