PHP+mysql商品管理系统-计算机毕业设计源码19895
摘 要
在信息飞速发展的今天,网络已成为人们重要的信息交流平台。商品管理系统每天都有大量的信息需要通过网络来管理,为此,本人开发了一个基于B/S(浏览器/服务器)模式的商品管理系统商品管理平台。
该系统以PHP编程语言、MySQL和UI等为开发技术,实现了添加、修改、查看、删除系统数据。本系统采取组件化的方式对系统进行拆分,并对数据库中各个表的增删查改、表与表之间的约束关系进行分析与设计,最终实现符合用户需求功能的商业级应用。
系统界面简洁大方,布局合理,易操作易上手。对应用户的每一步操作,系统都能高响应地做出反馈。系统具体包含对用户的管理、登录注销、商品分类管理、商品管理、、商品订单管理、卖家管理等功能,为商品管理系统提供一个管理平台,实现对数据地高效、安全地管理。
关键词:B/S模式,PHP编程语言,易操作
PHP Commodity Management System
Abstract
With the rapid development of information, the network has become an important information exchange platform. The commodity management system has a lot of information to be managed through the network every day. Therefore, I have developed a commodity management system commodity management platform based on B/S (browser/server) mode.
The system uses PHP programming language, MySQL and UI as development technologies to add, modify, view and delete system data. This system adopts the component-based method to split the system, and analyzes and designs the addition, deletion, query and modification of each table in the database, and the constraint relationship between tables, so as to finally realize the business level application that meets the user's needs.
The system interface is simple and generous, the layout is reasonable, and the operation is easy. The system can provide highly responsive feedback for each step of user operation. The system specifically includes user management, login and logout, commodity classification management, commodity management, commodity order management, seller management and other functions, providing a management platform for the commodity management system to achieve efficient and safe management of data.
Keywords: B/S mode, PHP programming language, easy to operate
目 录
随着计算机技术的发展,越来越多的以往依靠人类手工完成的工作可以让计算机替代,从而大大地提高了工作的效率。过去的商家的管理模式大多以手工为主,商品的订单,客户的基本信息填写,商品的查询等大多停留在纸质手工的层面上。这种模式存在效率低下、人工成本巨大、数据容易遗失等缺点。一些比较大型的连锁商店由于规模大实力雄厚,已经使用了自己专用的信息管理系统,而一些小型的书店由于多方面因素还没有使用。但随着同行之间相互竞争的家具,为了书店的长远发展,甚至是为了自身的生存,商家越来越渴望使用商店管理系统。开发适合小型商店的信息管理系统势在必行。
我国在全国范围内推广计算机在管理中的应用,是在70年代末开始的,虽然起步较晚,近几年发展却较快,特别是微型计算机的出现和普及为信息处理提供了物美价廉的手段,对于推动我国管理信息处理的现代化起了重要的作用。
商店商品管理对企业来说是一项繁琐复杂的工作,每天要处理大量的单据数据。为及时结清每笔业务,盘点商店和货物流动情况,保证企业生产用料以及货物安全,库管人员要花费大量人力物力和时间来作数据记录统计工作。
在世界发达国家,商店商品管理的计算机化水平已经很高了,尽管我国的生产企业在这方面也有了很强的意识和长足的进步,但仍存在这样、那样的一些问题。
六个章节共同组成了本文研究及设计内容,包括:
第一章:绪论。本文章的开头部分,对本题目的研究背景和研究意义等一些做文字性的描述。
第二章:相关技术介绍。主要介绍PHP编程技术、PHP的开发工具、B/S模式等。
第三章:系统分析。包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。
第四章:系统设计。本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。
第五章:系统实现。将本系统分为前提的开发工具介绍和后期的功能代码实现。
第六章:系统测试。系统完成后,根据各个模块的测试用例才对各个模块进行功能测试。
Ajax的出现,也带来了另外一个问题,那就是有了Ajax以后,之前用模板语言实现起来的功能变得简单,之前模板语言实现不了的功能现在也能实现了。这样就造成越来越多的逻辑转移到了Javascript上,使其变得越来越复杂。
随着JS复杂度的增长,原来的开发模式出现了问题,一个程序员搞定全站变得越来越不靠谱,因此在这个时候就把网站开发这个职位划分成了前端和后端两个职位。但是只划分了前后端的职责范围还是远远不够的,在原来的开发模式下,前后端的代码也在一起的。现在既然已经分为前后端两波人在开发了,维护同一套代码就变得不那么方便。项目越复杂,出现你等我,我等你的情况就会越来越多,这样就拖慢了整体团队的节奏。所以为了团队的效率,前后端的代码也要做分离。
前后端的分离方式分为部分分离和全部分离两种,部分分离是只把脚本和样式分离出去,而Html模板还留在后端通过PHP,Velocity或者Freemarker来渲染;另一种就是完全分离,脚本样式以及模板全都放在前端来维护。
部分分离已经很大程度上解决了前后端开发时的协调问题,开发效率也得到了很大程度的提升。但也得承认,这种方式也还是有问题的。当要开发Html模板的时候,就需要搭起一整套后端的开发环境,或者是找后端程序员来协助。
而完全分离一般有两种方案,第一种就是使用Velocity这种在NodeJS和PHP下都可以编译的页面模板,在开发时放到前端项目里,但在发布时,会把模板发布到后端的模板目录下,这样,开发时就做到了完全分离。这种方式最大的好处就是线上模板的渲染还是由PHP来做的,形成的是带有动态数据的Html,比较有利于SEO。但这种方式下,前端的开发环境和发布系统的复杂度都相对较高,单纯的前端改动也还是要带着后端一起发布。
第二种完全分离的方式,就是把纯静态的Html模板完全放在前端,数据全部通过RESTful接口来进行交互。这样前后端就完全分开了,脱离了后端的模板,而这种方式的系统复杂度也会比第一种完全分离的方式低。但这种方案下,所有的页面数据都是用JS渲染的,没有动态模板,不太利于SEO。这个不足我们可以通过做Server Render或者给蜘蛛做一套定制页面来解决。
PHP采用函数或者过程来解析对于数据的操作,但又把数据和函数之间相互分开,这样并不利于维护,并会增加程序的工作量。而面向对象的编程将程序的函数和函数对于数据的操作封装在一个类中,作为一个整体来处理。所以PHP语言是主要通过面向对象来实现编程,并且摒除了C++语言中的指针、多继承等比较难理解部分,创造出了自身独有的单继承、多接口、高内聚、低耦合等特性[3] [4]。
PHP技术对动态Web页面的开发作用简直是举足轻重。可以很快的响应到客户端的发送请求。是甲骨文公司旗下的IT及互联网技术服务公司Sun Microsystems公司主导并创立的动态网页技术的标准。而且能依据请求内容动态地生成XML、HTML,为用户的网络请求提供技术服务,而且可以与服务器上的其它PHP程序共同处理先对复杂的业务需求[5] [6]。
PHP主要优势如下:
(1)一旦程序有一次成功的编写,就能在多处运行起来。
(2)支持面特别广,许多平台已经引入该技术。
计算机的系统软件主要分为两种:系统软件和应用软件。应用软件则是为了某个特定的应用而开发的一类软件,比如文字处理软件Word、QQ、开发本软件用的ZendStudio工具等。而应用型软件大致的分为B/S和C/S两种模式,常用的QQ、Office办公软件就是C/S结构的,另外常见基于的B/S结构开发的有各种网站,比如淘宝、企业的门户网站[7]。
B/S模式的优势有三个:第一是开发和业务扩展简单、只需要改变网页代码,就可以达到想要的网页效果;第二学生的操作显浅易懂;第三具有分布性特定,可以随时随地的进行查询、浏览等业务的处理。这是C/S所无法实现的。综上因素,选择B/S模式来设计和实现本系统[8]。
-
- HBuilder简介
HBuilder是由DCloud(数字天堂)公司的杰作,推出的这款Web开发IDE支持Html5。Java、C、Web和Ruby语言共同编写了HBuilder。主要由Java编写了HBuilder主体部分。使用Eclipse软件编写,Eclipse的插件兼容自然而然地到HBuilder中。
Html、JS、CSS的IDE是HBuilder的专注,所以Html语言、JS语言、CSS的语法是由HBuilder解析引擎的,它的智能化是众所周知的,当你是编写代码时它会智能提示你,告诉你转到哪儿选择什么,相比较sublime,开发速度更快、出错概率更低。
HBuilder是我们认为当前最好的Web开发工具。它能大幅提升开发效率,对程序员也设计了更人文关怀的UI,它包括最全面的语法库和浏览器兼容性数据。HBuilder是面向追求效率的极客开发者的,比如HBuilder强调的手不离键盘、飞一样编码。与之相对应的另一面代表是dreamweaver,dreamweaver拥有可视化拖拉拽布局页面的设计器,更多的是面向设计师或初学者。
相比其他开发工具,HBuilder的优势至少有四点:
1.最快的开发工具,五大助手大幅提升编码效率;
2.绿柔主题,保护健康;
3.最全的语法库;
4.最全的浏览器兼容性数据。
Apache是开发源代码,使用者可根据个人习惯、系统的需求对Apache进行配置;另外对于系统的发布和运行是非常简单的[10],开发人员只需要在开发工具中导入Apache,服务器的配置就算完成了;这是非常适合PHP程序的。对于程序人员开发程序经常可能会遇到乱码的问题,而使用Apache作为服务器,只需要在Apache的安装目录下找到配置文件夹conf下的服务器配置文件server.xml,打开后改动端口号为8080的接收环节与请求处理环节的连接器Connector为相对应的编码,运行项目后,就不会出现中文乱码问题。本系统的设计和实现编码使用的是UTF-8,所以需要在端口号为8080的连接器中设置编URIEncoding="UTF-8"[11] [12]。
MySQL是一个开放的、快速的、多线程的SQL关系型数据库服务器。由于其体积小、免费、运行速度快以及可以通过相关免费的软件来对MySQL数据库中的相关数据结构信息等等优点。受广大中等、小型企业所喜爱并占据了很大地位。本系统在数据库方面选用MySQL,并通过Nacivat来进行MySQL数据库的管理。在MySQL的安装过程中,最需要注意的就是数据库的编码问题,所以在安装数据库时需要设置数据库的编码为Utf-8,与前台页面和服务器的编码相一致[13]。
开发软件有没有触犯法律,这涉及到软件或者系统能不能发布的问题。如果触犯了法律,就必将会受到法律的制裁。常见法律问题就是软件抄袭问题,若是抄袭别人软件,将会受到严厉惩罚。
软件产业经过多年的发展,现在已经达到了很大的规模,从事软件开发的专业人员不计其数,软件产业的重要性已经上升到了影响和推动国民经济发展的核心地位。本系统基于的架构,目前技术已经非常的成熟,是不存在技术上面难以实现的麻烦。
开发软件所需的时间、人力和物力成本,开发完成后的收益如何,从投资回报的角度软件所需功能在现有经济条件能不能实现等进行深入的考虑,都符合实际的要求。所以商品管理系统商品管理平台具有经济可行性和实用性,可以节约管理成本
商品管理系统商品管理平台主要是为了管理和控制商品的管理情况,对用户的信息和商品分类管理、商品管理、商品订单管理、卖家管理提供了方便的机制。本系统有多类使用者,分别是管理员、卖家和普通用户。以下是从这三种用户的角度分别介绍本系统所要实现的功能。
普通用户:
登录:使用系统前提是需要登录账号。
通知搜索和浏览:通知展示功能模块主要包括通知搜索、查看通知详情功能。
商品搜索和浏览:商品展示功能模块主要包括商品搜索、查看商品详情功能。用户可以在首页进行商品搜索及查看商品详情。具体功能需求如下:(1)商品搜索:前台用户可以在前台输入关键词进行搜索,搜索成功后返回该商品的动态排序列表,且能够进行分页展示。(2)查看商品详情:用户可点击对应商品,从而查看该商品的商品详情。
商品下单:商品已存在的前提下,提供商品的下单功能,商品下单成功后,可以查看到个人已有的商品下单列表。
管理员:
用户管理:(1)新增用户,用于创建新用户。管理员在页面上选择"新增用户",输入用户所需的信息后保存。(2)查找用户信息,可根据条件查找用户。管理员第一次点击"用户列表"时,默认用户列表显示出全部的用户,可以根据用户姓名和出生年月进行模糊搜索,系统将查询到的用户显示到用户列表。如果不加限制、直接点击搜索按钮,则查询出全部的用户。(3)删除用户,用于删除已有用户。在用户列表显示出用户后,选择用户进行删除。在确定删除之后,该条记录将从数据库中删除,并提示删除成功,确认后列表会重新刷新。(4)修改用户信息,在用户列表显示出用户后,选择用户进行编辑。表单将出现已有用户信息,用户可以对已有信息进行确认更改。更改完成后选择确认,列表会重新刷新。
商品管理:
(1) 商品列表:展示所有商品信息,形成的列表样式。
(2) 商品搜索:通过商品名、商品类目来搜索商品。
(3) 图片上传:给商品添加商品图片。
(4) 增加商品;
(5) 更新商品:更新商品的信息,如商品名称、商品类型、售价、库存、图片等。
通知数据管理:
(1) 图片上传:给通知添加通知图片。
(2) 增加通知;
(3) 更新通知:更新通知的信息,如通知标题、内容等。
(4) 通知数据删除销毁;
类目管理:
(1)添加类目:管理员可对类目进行管理,点击添加类目选择父类并输入类目名称即可添加类目。
(2)修改类目:管理员可对类目的名称进行修改。
(3)查看子类目:管理员可查看所有平级类目的类目ID,类目名称等。
下单记录管理:
(1)按下单记录编号查询下单记录:
(2)查看下单记录详情:
系统非功能需求有非常多,比如性能需求、可承载最大用户数、稳定性、易用性需求等。本系统分析时考虑到易用性需求,因为系统是给人使用的,所以必须充分从用户的角度出发,考虑用户体验,使系统易理解易上手易操作。
1.普通用户主要使用系统的商品下单业务,下图所示为普通用户的用例图。
图3-1 普通用户用例图
2.管理员主要负责商品分类管理、商品管理、商品订单管理、用户管理,下图所示描述管理员的用例图。
图3-2 管理员用例图
系统业务流程图如下所示。
图3-3 系统业务流程图
首先系统使用用户分2种,使用下单功能的为普通用户,使用管理功能的为管理员用户,普通用户注册成功后得到账号和密码,在登录页输入账号密码后登录到系统,普通用户便可以浏览到系统展示的商品,然后进行商品下单,接着形成个人商品下单记录;管理员用户对系统的数据进行维护,包括商品信息的维护,对商品的属性及数据等进行更新和编辑,对客户的商品下单记录进行确认和维护等。
如下为系统的顶层数据流图,外部实体有用户和管理员,分别对系统输入数据,从而得到要输出的数据。
图3-4系统顶层数据流图
如下图所示为系统底层数据流图。
商品管理系统商品管理平台底层数据流图主要描述系统底层模块的数据流、数据载体、数据处理、外部实体的具体交互。本系统就是管理员和普通用户在商品分类管理、商品管理、卖家管理、商品订单管理、客户管理等模块上的数据交互。
商品管理系统商品管理平台采用三层开发设计模式,分为:用户界面层,业务逻辑层和数据访问层。用户界面层用来和用户交互,业务逻辑层负责业务的处理和各层之间的数据的传递;数据访问层负责对数据库的访问和检索。
系统的架构图如下图所示。
图4-1 系统架构图
系统各层之间的调用过程如下:
(1)用户通过用户界面层访问系统,向系统提交请求,界面层对请求进行初步的处理和包装,并判断是否要与业务逻辑层进行交互。
(2)业务逻辑层接收来自界面层的请求,对请求进行数据处理。然后调用数据访问层来实现数据库访问,数据访问层访问数据库,将数据读出并返回给逻辑层。
(3)逻辑层将处理的结果,返回给界面层。界面层加以处理呈现给用户。
为了将系统从“做什么”落实到“怎么做”,基于系统设计原则,对系统功能进行更适合编码实现的功能划分。根据上图的系统架构设计,整理出规范的系统功能结构图,为系统的实现编码做好准备。
如下图所示为系统功能结构图。
图4-2系统功能结构图
用户可进行登录使用更多功能,首先进入用户登录界面,输入用户账号和密码,后台对账号和密码信息进行核对验证,验证成功则页面直接显示登录用户昵称代表登录成功,否则返回用户登录界面。用户登录活动图如下图。
图4-4用户登录活动图
用户登录后,进入功能页面,可对自己的信息进行管理,包括个人信息,商品分类管理、商品管理、商品订单管理、客户管理。用户使用功能活动图如下图所示。
图4-5用户使用功能活动图
用户功能界面可对自己的密码进行修改。进入修改密码界面后核对当前密码,核对成功后填写新密码。如下图所示。
图4-6修改密码活动图
商品管理系统商品管理平台采用的数据库是MySQL,该部分将根据系统需求和设计,设计合理的数据库。本系统考虑到之后系统的扩展集群,数据库将不使用外键。此外,不用外键时数据管理也较为简单,操作更加方便,性能更高。
E-R图,更加直观的告诉开发人员系统的各个数据的属性,各个数据之间的联系,各个数据的类型。能通过该模型更直观地了解数据库的设计,并根据对其逐渐改善。
本系统图设计,如下图所示。
图4-7系统E-R图
本系统根据第三范式的思想设计数据库,减少最大程度的冗余,总共建立有多个表,用户表、管理员表、商品表、下单表、入库表、出库表、供应商表。
表结构如下所示。
chart |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
chart_id |
int |
10 |
是 |
主键 |
聊天ID |
user_id |
int |
11 |
是 |
用户ID |
|
title |
varchar |
64 |
否 |
标题 |
|
content |
longtext |
0 |
是 |
内容 |
|
nickname |
varchar |
32 |
是 |
昵称 |
|
avatar |
varchar |
255 |
否 |
头像 |
|
create_time |
timestamp |
0 |
是 |
创建时间 |
|
update_time |
timestamp |
0 |
是 |
更新时间 |
|
reply_id |
int |
11 |
是 |
回复ID |
|
collect |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
collect_id |
int |
10 |
是 |
主键 |
收藏ID |
user_id |
int |
10 |
是 |
收藏人ID |
|
source_table |
varchar |
255 |
否 |
来源表 |
|
source_field |
varchar |
255 |
否 |
来源字段 |
|
source_id |
int |
10 |
是 |
来源ID |
|
title |
varchar |
255 |
否 |
标题 |
|
img |
varchar |
255 |
否 |
封面 |
|
create_time |
timestamp |
0 |
是 |
创建时间 |
|
update_time |
timestamp |
0 |
是 |
更新时间 |
|
commodity_center |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
commodity_center_id |
int |
11 |
是 |
主键 |
商品中心ID |
article_no |
varchar |
64 |
否 |
商品编号 |
|
trade_name |
varchar |
64 |
否 |
商品名称 |
|
product_picture |
varchar |
255 |
否 |
商品图片 |
|
commodity_type |
varchar |
64 |
否 |
商品类型 |
|
product_description |
varchar |
64 |
否 |
商品描述 |
|
old_and_new_degree |
varchar |
64 |
否 |
新旧程度 |
|
commodity_details |
text |
0 |
否 |
商品详情 |
|
commodity_inventory |
int |
11 |
否 |
商品库存 |
|
original_price |
int |
11 |
否 |
原价 |
|
selling_price |
int |
11 |
否 |
卖价 |
|
seller_no |
int |
11 |
否 |
卖家编号 |
|
seller_name |
varchar |
64 |
否 |
卖家名称 |
|
praise_len |
int |
11 |
是 |
点赞数 |
|
examine_state |
varchar |
16 |
是 |
审核状态 |
|
recommend |
int |
11 |
是 |
智能推荐 |
|
create_time |
datetime |
0 |
是 |
创建时间 |
|
update_time |
timestamp |
0 |
是 |
更新时间 |
|
commodity_classification |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
commodity_classification_id |
int |
11 |
是 |
主键 |
商品分类ID |
commodity_type |
varchar |
64 |
否 |
商品类型 |
|
recommend |
int |
11 |
是 |
智能推荐 |
|
create_time |
datetime |
0 |
是 |
创建时间 |
|
update_time |
timestamp |
0 |
是 |
更新时间 |
|
order_information |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
order_information_id |
int |
11 |
是 |
主键 |
订单信息ID |
order_no |
varchar |
64 |
否 |
订单编号 |
|
article_no |
varchar |
64 |
否 |
商品编号 |
|
trade_name |
varchar |
64 |
否 |
商品名称 |
|
commodity_type |
varchar |
64 |
否 |
商品类型 |
|
old_and_new_degree |
varchar |
64 |
否 |
新旧程度 |
|
original_price |
int |
11 |
否 |
原价 |
|
selling_price |
int |
11 |
否 |
卖价 |
|
seller_no |
int |
11 |
否 |
卖家编号 |
|
seller_name |
varchar |
64 |
否 |
卖家名称 |
|
purchase_quantity |
int |
11 |
否 |
购买数量 |
|
total_amount |
varchar |
64 |
否 |
总金额 |
|
user_no |
int |
11 |
否 |
用户编号 |
|
user_name |
varchar |
64 |
否 |
用户姓名 |
|
ship_to_address |
text |
0 |
否 |
收货地址 |
|
contact_number |
varchar |
16 |
否 |
联系电话 |
|
pay_state |
varchar |
16 |
是 |
支付状态 |
|
pay_type |
varchar |
16 |
否 |
支付类型 微信、支付宝、网银 |
|
recommend |
int |
11 |
是 |
智能推荐 |
|
create_time |
datetime |
0 |
是 |
创建时间 |
|
update_time |
timestamp |
0 |
是 |
更新时间 |
|
seller_customers |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
seller_customers_id |
int |
11 |
是 |
主键 |
卖家用户ID |
seller_no |
varchar |
64 |
是 |
卖家编号 |
|
seller_name |
varchar |
64 |
否 |
卖家名称 |
|
sellers_id_card |
varchar |
255 |
否 |
卖家身份证 |
|
examine_state |
varchar |
16 |
是 |
审核状态 |
|
recommend |
int |
11 |
是 |
智能推荐 |
|
user_id |
int |
11 |
是 |
用户ID |
|
create_time |
datetime |
0 |
是 |
创建时间 |
|
update_time |
timestamp |
0 |
是 |
更新时间 |
|
slides |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
slides_id |
int |
10 |
是 |
主键 |
轮播图ID |
title |
varchar |
64 |
否 |
标题 |
|
content |
varchar |
255 |
否 |
内容 |
|
url |
varchar |
255 |
否 |
链接 |
|
img |
varchar |
255 |
否 |
轮播图 |
|
hits |
int |
10 |
是 |
点击量 |
|
create_time |
timestamp |
0 |
是 |
创建时间 |
|
update_time |
timestamp |
0 |
是 |
更新时间 |
|
system_user |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
system_user_id |
int |
11 |
是 |
主键 |
系统用户ID |
user_no |
varchar |
64 |
是 |
用户编号 |
|
user_name |
varchar |
64 |
否 |
用户姓名 |
|
age |
int |
11 |
否 |
年龄 |
|
examine_state |
varchar |
16 |
是 |
审核状态 |
|
recommend |
int |
11 |
是 |
智能推荐 |
|
user_id |
int |
11 |
是 |
用户ID |
|
create_time |
datetime |
0 |
是 |
创建时间 |
|
update_time |
timestamp |
0 |
是 |
更新时间 |
系统中应用的开发工具总结如下表所示。
表5-1开发工具
用户在首页点击登录,进入用户登录界面uerLogin.php,输入用户账号和密码,点击登录,用户账号和密码信息由界面传入控制层,调用userLogin方法,通过实现登录的接口向数据库用户表搜索该用户账号与密码,将最终结果反馈到前端。若成功则回到首页;用户成功登录,若失败则回到登录界面,并显示登录失败。
用户点击注销,清空浏览器session值,然后返回登录页或者首页。
登录界面如下所示。
图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' => '登录失败,账号不存在']];
}
}
登录用户在首页点击进入用户中心userCenter.php,再点击修改个人信息按钮进入userChangeInfo.php界面,系统根据session中存储的目前登录的用户的账号,向控制层发送请求,搜索当前用户信息,控制层向用户接口调用查询用户方法,向数据库的用户表搜索当前用户信息并将用户信息以对象的形式层层返回到userChangeInfo.php界面,显示出当前用户的个人信息。
若用户要对个人信息进行修改,则通过修改当前信息之后点击确认,向控制层发送更改后的用户信息,调用修改用户信息的方法,通过实现用户接口向数据库用户表更新用户信息,若成功则反馈注册成功,则返回的userChangeInfo.php界面被更改成功;若失败则显示修改失败。
用户可以在首页进行商品搜索,在搜索框输入关键词后,前台发起请求,将传递的keyword参数信息从前台传递商品控制类里,匹配到list()方法,list()方法调用商品服务接口的查询商品方法,如果没有该关键词,则返回空的结果集。
商品搜索界面如下。
图5-1商品搜索界面
商品搜索代码:
public function get_list($request=[],$table_name = '',$table_id = ''){
$page = 1;
$size = $table_name == "auth" ? 100 : 10;
$where = [];
$order = $table_id.'_id desc';
$field = '*';
// echo $order;exit;
$columns = Db::query( "show COLUMNS FROM `".$table_name."`");
foreach($columns as $key=>$val){
$field_name = $val['Field'];
if(isset($request['like'])){
if ($request['like']==true){
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, '=', $request[$field_name]];
}
}else{
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, 'like', '%' . $request[$field_name] . '%'];
}
}
}else{
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, 'like', '%' . $request[$field_name] . '%'];
}
}
//范围查询
if(isset($request[$field_name.'_min'])){
$where[] = [$field_name, '>=', $request[$field_name.'_min']];
}
if(isset($request[$field_name.'_max'])){
$where[] = [$field_name, '<=', $request[$field_name.'_max']];
}
}
//分页
if (isset($request['page'])){
$page = $request['page'];
}
if (isset($request['size'])){
$size = $request['size'];
}
//排序
if (isset($request['order'])){
$order = $request['order'];
}
//查询字段
if (isset($request['field'])){
$field = $request['field'];
}
//模糊查询
$list= $this->where($where)->order($order)->field($field)->page($page, $size)->select()->toArray();
foreach($list as &$l){
foreach($l as &$o){
if(strpos($o,$_SERVER['HTTP_HOST']) === false){
$o = str_replace('upload','http://'.$_SERVER['HTTP_HOST'].'/upload',$o);
}
}
}
return $list;
}
用户在登录状态下浏览商品时可将该商品加入购买订单,从session中取出该用户的信息,点击加入购买订单后前台发起请求,将对应的商品数量count、productId参数信息从前台传递购买订单控制类里,匹配到add()方法,add()方法调用购买订单服务接口类的add()方法。
商品下单界面如下所示。
图5-1商品下单界面
商品下单代码:
public function upload()
{
//上传文件目录获取
$month = date('Ym', time());
$data = 'file';//文件域
$path = 'upload/file/' . $month . "/";//上传文件保存位置
$allow_ext = explode(",", "jpg,jpeg,png,jfif,bmp,gif,ico,xls,xlsx,AVI,mov,rmvb,rm,FLV,mp4,3GP");
if ($_FILES) {
$file = $_FILES[$data];
$rst = [];
if (!empty($file['name'])) {
$file_type = explode('.', $file['name']);
$ext = end($file_type); //获取文件的格式
$ext = strtolower($ext);
if (!in_array($ext, $allow_ext)) {
$rst['error']['code'] = 30000;
$rst['message'] = '只能上传jpg,jpeg,png,jfif,bmp,gif,ico,xls,xlsx,AVI,mov,rmvb,rm,FLV,mp4,3GP类型文件';
} else {
if (!is_dir($path))//判断目录是否存在
{
mkdir($path, 0777, true);//如果目录不存在则创建目录
};
$name = date('YmdHis') . '_' . rand(10000, 99999) . '.' . $ext;
$save_rst = move_uploaded_file($file['tmp_name'], $path . $name);
if ($save_rst !== false) {
// $rst['code'] = 1;
$rst['result']['url'] = 'http://'.$_SERVER['HTTP_HOST'].'/'.$path . $name;
// $rst['ext'] = $ext;
} else {
$rst['error']['code'] = 30000;
$rst['error']['message'] = '文件上传失败';
}
}
} else {
$rst['error']['code'] = 30000;
$rst['error']['message'] = '未选择文件';
}
} else {
$rst['error']['code'] = 30000;
$rst['error']['message'] = '未获取到文件';
}
return json_encode($rst);
}
管理员选择个人中心的修改本人密码。通过密码框输入现密码和2次新密码,如果现密码错误,则提示修改失败。如果2次新密码不一致,则提示修改失败。都没问题的话,系统提示修改成功,并返回登录界面。
密码修改界面如下所示。
图5-1密码修改界面
密码修改代码如下:
public function change_password()
{
$accessTokenModel = new AccessTokenModel();
$token = Request::header('x-auth-token');
if (!empty($token)) {
$result = $accessTokenModel->getToken($token);
if (Request::isPost()) {
$get = Request::get();
$keys = array_keys($get);
$where = [];
if ($result) {
$where[] = ["user_id", '=', $result['user_id']];
$i = 0;
foreach ($get as $key => $val) {
$where[] = [$keys[$i], '=', $val];
$i++;
}
$request = Request::post();
$request['update_time'] = isset($request['update_time']) ? $request['update_time'] : date('Y-m-d H:i:s');
$result = $this->validate($request, $this->validate);
$new_password['password'] = $request['password'];
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
$result = $this->model->change_password($new_password, $this->table, $this->table_id, $where);
$data = $result;
}
} else {
$data['error'] = 30000;
$data['message'] = "token错误或失效,未查询到用户数据";
}
} else {
$data['error'] = 30000;
$data['message'] = "field的值不能为空!";
}
} else {
$data['error'] = 30000;
$data['message'] = "token的值不能为空!";
}
return json_encode($data);
}
管理员在后台管理界面点击到所有商品界面shangpin_list.php,向控制层发送请求,搜索当前所有商品信息,商品控制类向商品实现接口调用搜索全部商品的请求,向数据库的商品表搜索当前所有商品并将商品信息以对象的形式层层返回到shangpin_list.php界面,显示出当前所有商品信息。若要对商品信息进行修改和删除,则分别进入shangpin_updt.php或shangpin_delete.php,通过商品的控制层向商品实现接口调用对应的修改或删除方法,向数据库的商品表做相应的持久层操作。
商品管理界面如下所示。
图5-1商品管理界面
商品管理代码如下:
public function get_list($request=[],$table_name = '',$table_id = ''){
$page = 1;
$size = $table_name == "auth" ? 100 : 10;
$where = [];
$order = $table_id.'_id desc';
$field = '*';
// echo $order;exit;
$columns = Db::query( "show COLUMNS FROM `".$table_name."`");
foreach($columns as $key=>$val){
$field_name = $val['Field'];
if(isset($request['like'])){
if ($request['like']==true){
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, '=', $request[$field_name]];
}
}else{
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, 'like', '%' . $request[$field_name] . '%'];
}
}
}else{
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, 'like', '%' . $request[$field_name] . '%'];
}
}
//范围查询
if(isset($request[$field_name.'_min'])){
$where[] = [$field_name, '>=', $request[$field_name.'_min']];
}
if(isset($request[$field_name.'_max'])){
$where[] = [$field_name, '<=', $request[$field_name.'_max']];
}
}
//分页
if (isset($request['page'])){
$page = $request['page'];
}
if (isset($request['size'])){
$size = $request['size'];
}
//排序
if (isset($request['order'])){
$order = $request['order'];
}
//查询字段
if (isset($request['field'])){
$field = $request['field'];
}
//模糊查询
$list= $this->where($where)->order($order)->field($field)->page($page, $size)->select()->toArray();
foreach($list as &$l){
foreach($l as &$o){
if(strpos($o,$_SERVER['HTTP_HOST']) === false){
$o = str_replace('upload','http://'.$_SERVER['HTTP_HOST'].'/upload',$o);
}
}
}
return $list;
}
软件测试是软件开发完成后必须经过的一道程序,它在软件开发过程中地位十分重要,需要由专业的测试工程师来对软件进行各方面的测试,大到功能模块测试,小到代码的单元测试,这对测试工程师来说需要有足够的耐心和专业的测试方案,软件测试归根结底就是对软件的结构和功能的综合测评,需要做到结构稳定和功能正确,二者兼顾。软件测试也叫寻找系统Bug的过程,世界上没有完美无缺、不存在bug的软件,只能将软件的bug降到最低最小,来追求极致。
登录测试是系统最开始就要进行,测试用户能否登录,才能完成后续的功能操作。
登录测试用例表如下所示。
表6-1登录测试
用例编号 |
YL001 |
程序版本 |
1.00 |
功能名称 |
使用者登录测试 |
编制人 |
李铁蛋 |
功能描述 |
根据用户的登录情况测试 |
||
用例目的 |
测试用户登录情况是否正确 |
||
测试项 |
测试数据 |
测试结果 |
预期结果 |
用户名 |
为空 |
请输入用户名 |
请输入用户名 |
密码 |
为空 |
请输入密码 |
请输入密码 |
用户密码组合 |
用户名:klouse 密码 klouses |
用户与密码不匹配 |
用户与密码不匹配 |
用户密码组合 |
用户名 : klouse 密码 klouse |
进入系统 |
正确的用户名和密码 登录系统 |
管理员在发布信息页面,通过按照预先格式发布信息,如果因为输入时候缺少相关内容,就不能发布成功,且有相应错误提示
信息录入发布测试用例表如下所示。
表6-1信息录入发布测试
用例编号 |
YL002 |
程序版本 |
1.00 |
功能名称 |
信息发布测试 |
编制人 |
李铁蛋 |
功能描述 |
对使用者发布或者录入信息进行测试,判断其功能是否达到预期的要求 |
||
用例目的 |
对系统使用者录入发布信息进行原型测试。 |
||
测试项 |
测试数据 |
测试结果 |
预期结果 |
属性1 |
为空 |
请输入属性1对应的数据 |
请输入属性1对应的数据 |
属性2 |
为空 |
请输入属性2对应的数据 |
请输入属性2对应的数据 |
属性3 |
为空 |
请输入属性3对应的数据 |
请输入属性3对应的数据 |
全部输入 |
数据均填入 |
录入发布成功 |
录入发布成功 |
管理员在更新信息页面,通过按照预先格式更新信息,如果因为输入时候缺少相关内容或者更新的数据不符合当前规范的话,就不能更新成功,且有相应错误提示
信息更新测试用例表如下所示。
表6-1信息更新测试
用例编号 |
YL003 |
程序版本 |
1.00 |
功能名称 |
信息更新测试 |
编制人 |
李铁蛋 |
功能描述 |
对使用者更新信息进行测试,判断其功能是否达到预期的要求 |
||
用例目的 |
对系统使用者更新信息进行原型测试。 |
||
测试项 |
测试数据 |
测试结果 |
预期结果 |
属性1 |
编号:321 |
编号更新成功 |
编号更新成功 |
属性2 |
名称:名称1 |
名称更新成功 |
名称更新成功 |
属性3 |
内容:内容1234内容 |
内容更新成功 |
内容更新成功 |
全部输入 |
数据均未更改 |
更新成功 |
更新成功 |
管理员在信息页面,通过点击数据删除按钮来删除该条数据,如果该数据和其他数据有关联,则提示是否确定删除。
信息删除测试用例表如下所示。
表6-1信息删除测试
用例编号 |
YL004 |
程序版本 |
1.00 |
功能名称 |
信息删除测试 |
编制人 |
李铁蛋 |
功能描述 |
对使用者删除信息进行测试,判断其功能是否达到预期的要求 |
||
用例目的 |
对系统使用者删除信息进行原型测试。 |
||
测试项 |
测试数据 |
测试结果 |
预期结果 |
数据1 |
无任何关联的数据1 |
数据删除成功 |
数据删除成功 |
数据2 |
和其他数据有关联的数据2 |
请确认是否删除 |
请确认是否删除 |
在经过之前的所有的工作之后,通过对软件的测试方法、测试原则还有典型的测试用例进行全面的、深入的介绍。经过对系统的全面测试,系统目前所具有的所有功能均成功的实现并且通过了测试,整个系统实现了基于 Java 开发的期望。
商品管理系统商品管理平台采用MVVM结构,该结构非常完美的集优点于一身,成熟、强大、易理解易使用,通过使用这个结构,降低了开发的难度。本系统实现了基于PHP的商品管理系统商品管理平台,将销售流程转化成电脑操作流程,具体实现了对商品数据维护、下单数据维护、客户数据、维护卖家数据维护,并提供查询统计功能来对商品和下单的相关数据进行统计分析,让使用者能更清晰的掌握运营情况,帮助使用者进行数据操作维护,简化工作流程,提高工作效率和盈利。
目前完成的商品管理系统商品管理平台,还有许多有待改进的地方。一个是功能上的改进,用户理应可以修改自己的相关信息,故应增设个人中心功能;另外,系统如果能提供更多的功能就会使得系统更加丰富和多样化,比如数据当前分析和未来预测等。第二个是技术上的改进,由于对开发框架不太熟悉,权限管理这部分,本系统采用一个PHP页面来规定好导航栏,即跳转的页面,这相对比较不灵活,如果将URL路径记录到数据库并实现增删查改会比较好;另外就是对EasyUI的使用还不够熟练,视觉效果和界面观感有待提升,希望日后能对这个系统有所改进。
参考文献
[1]赵婉彤.基于PHP与MySQL的动态网站设计与实现[J].电脑编程技巧与维护,2022(08):103-105+109.DOI:10.16184/j.cnki.comprg.2022.08.022.
[2]么伟伟,张涛.PHP技术在企业网站开发中的应用研究[J].现代工业经济和信息化,2022,12(05):158-159+234.DOI:10.16525/j.cnki.14-1362/n.2022.05.065.
[3]庄梓飒,段华琼.基于C语言的商品管理系统的设计与实现[J].信息与电脑(理论版),2022,34(01):137-140.
[4]唐昌华,李沅倢.商品管理系统的设计与实现[J].电脑知识与技术,2021,17(29):76-78.DOI:10.14004/j.cnki.ckt.2021.2811.
[5]刘军.基于PHP技术的动态网页设计[J].信息记录材料,2021,22(10):142-143.DOI:10.16009/j.cnki.cn13-1295/tq.2021.10.068.
[6]巢晟盛.基于SpringBoot微服务架构下前后端分离的MVVM模型浅析[J].电脑知识与技术,2021,17(23):128-129+141.DOI:10.14004/j.cnki.ckt.2021.2412.
[7]方生.基于“MVVM”模式的“Web”前端的设计与实现[J].电脑知识与技术,2021,17(20):147-149.DOI:10.14004/j.cnki.ckt.2021.2004.
[8]刘紫薇. 基于MVVM设计模式的在线教育系统的设计与实现[D].北京邮电大学,2021.DOI:10.26969/d.cnki.gbydu.2021.002712.
[9]崔慧娟.MVVM模式在Android项目中的应用[J].信息与电脑(理论版),2021,33(06):1-3.
[10]Marufovich Aripov Masud,Horun Yahya,Usmon Nuriy Topbosh,Aripov M. M.,Normatov R. N.,Siddikov I. M.,Oripova U.,Ilya Golubev,Abdullaeva N. B.,Nurmatova M. A.,Yokubovna Y. H.. Encryption of the quran and forecasting events[J]. ACADEMICIA: AN INTERNATIONAL MULTIDISCIPLINARY RESEARCH JOURNAL,2021,11(2).
[11]王丹丹.PHP网站安全及加密技术对策[J].无线互联科技,2020,17(23):28-29.
[12]张文豪. 基于PHP的通用开发框架研究与实现[D].广东工业大学,2020.DOI:10.27029/d.cnki.ggdgu.2020.002249.
[13]Simon Bisson. Build MVVM applications with the Windows Community Toolkit[J]. InfoWorld.com,2020.
[14]朱飞,刘曼琳.PHP语言中mysql与mysqli应用浅析[J].数字技术与应用,2020,38(07):38-41.DOI:10.19695/j.cnki.cn12-1369.2020.07.17.
[15]景广军,郝墨轩.基于PHP语言开发的站址导航系统[J].信息与电脑(理论版),2020,32(08):88-92.
[16]赵伟. 一种PHP代码审计技术的研究与实现[D].西安电子科技大学,2020.DOI:10.27389/d.cnki.gxadu.2020.001097.
[17]黄昌平.基于php语言分析计算机编程的发展前景[J].数码世界,2019(04):46.
[18]蒋婷婷. 基于PHP-MySQL的公路隧道围岩云分级系统开发[D].长沙理工大学,2019.DOI:10.26985/d.cnki.gcsjc.2019.000141.
[19]QingHai Yin. Research and Implementation of Network Examination System Based on PHP Language[J]. Journal of Physics: Conference Series,2018,1087(6).
[20]张政,蒋永辉.基于UML技术的商品管理系统设计与实现[J].福建电脑,2018,34(06):100-101+108.DOI:10.16707/j.cnki.fjpc.2018.06.051.
在老师的教导和帮助下,本人完成了本篇论文,老师对论文的内容、格式都有非常严格的要求,在我写毕业论文的过程中,他多次给出了建议,并定期检查,对我们严格要求,帮助我们在文档的编写上写到极致和正确,他这种教学和工作态度,让我对他产生无限的敬佩感和尊敬感。写毕业论文的同时,作为应届生,我也忙着找工作中,遇到了很多选择,感到困惑迷茫的时候,老师给了我很多意见,感谢老师的耐心开导,跟她的聊天我明白了许多。
我还要感谢我的父母,一直以来都非常支持和相信我,在精神和经济上给了我很多力量,如今我将毕业走上工作之路,终于能报答父母的养育教导之恩。还有我大学期间所有老师和全体同学,遇到问题时,这些老师同学总是无私地帮助我,真的非常感谢,我也会加油努力成长为一个有用的人。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~