如何使用ssm实现基于JSP的家纺用品销售管理系统

201 篇文章 0 订阅
147 篇文章 0 订阅

@TOC

ssm814基于JSP的家纺用品销售管理系统+jsp

绪论

1.1研究背景

从古到今,信息的录入,存储,检索都受制于社会生产力的发展,不仅仅浪费大量的人力资源还需要浪费大量的社会物资,并且不能长时间的保留,信息检索随着时间的跨度呈几何级的难于检索,并且如果对有些数据进行核对校验或者分析统计,需要用到的时间还有人力更是不可估计。但是随着计算机网络的发展,这些事情都不再是痛点,计算机语言的发展就是对传统行业各个方面进行了变革,尤其是信息管理方面。比如计算机各个系列各种型号,多种适配,哪些零件可以与其他零件进行组合,哪些不可以,这些如果是传统行业会弄成好多本书籍进行记录,但是通过软件的信息录入整合,程序进行判断,可以有效的提升效率。在这样的背景下,各行各业都在梳理自己的信息管理流程和需求。本设计就是在这样的环境下,针对家纺用品销售管理信息设计的家纺用品销售管理系统,用来解决家纺用品销售管理信息信息管理问题的痛点和难点,让家纺用品销售管理信息信息管理变得更加高效节能。

1.2国内外研究现状

国外品牌如下:

1.瑞士Bico(瑞士十大家纺品牌)

bico瑞柯创立于1861年,现已成为瑞士以健康与舒适睡眠所著称床具品牌,公司总部位于Schanis,St.Gallen。Bico现属于瑞典希丁安集团(HildingAndersGroup)。希丁安集团是欧洲及亚洲的床具行业的知名品牌,在全球拥有约24家工厂,超过8000名员工,业务遍及欧亚40多个国家及地区。

bico瑞柯是瑞非常受客户信赖的床具品牌,拥有极高的市场占有率。bico瑞柯一直致力于与睡眠专家、睡眠机构、瑞士联邦材料科学和技术实验室(EMPA)、瑞士人体工学研究中心(AEH)紧密合作,率先使用了HYTREL材料代替金属制造弹簧。2015年2月起,希丁安集团高端品牌Bico瑞柯和瑞士航空进行合作。为瑞士航空A340头等舱提供Bico瑞柯和其泡棉供应商FoamPartner合作研发的高品质ViscoPore泡棉床垫。

2.美国Serta(美国十大家纺品牌)

舒达(Serta),诞生于1931年,是一个全球性专业的健康睡眠品牌。舒达是专业制造床垫品牌,90多年来始终致力于为全球消费者提供优质健康的睡眠服务,让每个人都能“夜夜好眠”是舒达的愿景。当您躺下的瞬间,即可感受到与众不同。舒达自1998年进入中国以来,坚持并一贯秉承“制造世界上最好的床垫”为使命。

3.美国丝涟Sealy(美国十大家纺品牌)

“丝涟”于1881年创建,诞生于美国德克萨斯州休斯顿郊外的“丝涟”小镇,一位名叫DanielHaynes的轧棉机工匠开始一种棉塞床垫的生产。很快,“来自丝涟的床垫”闻名遐迩。

1949年,“丝涟”开始与当时顶尖骨科矫形外科专家合作进行产品研发,其中有美国著名骨科矫形外科和背部疼痛研究权威,并邀请了闻名全美的骨科矫形外科专家Dr. Robert G.Addison博士,成功将“护脊”概念引入床垫的制造当中。

1950年,经过骨科矫形外科专家的指导,“丝涟”推出首款“美姿”品牌产品,成为当时业内唯一专注于背部正确承托,保护脊柱健康的床垫品牌。

1977年,丝涟“美姿”品牌成为更强承托力的高性能弹簧床垫的代名词,并逐步在美国市场享有美誉。丝涟“美姿”床垫迅速走向全球,带给全世界用户一种全新的优质睡眠体验。

1988年,研发具有“感应”特性的美姿感应弹簧PostureTech,革新弹簧芯的设计和性能。

2002年盐湖城冬奥会以及2004年雅典奥运会,“丝涟”皆被选为美国国家代表团唯一指定床垫品牌。21世纪初,丝涟相继成功进入香港、新加坡、台湾、马来西亚等亚太地区。

2006年,丝涟创立骨科矫形咨询委员会OAB,将产品研发测试与人体科研结晶更紧密结合,使丝涟床垫在“健康睡眠”方面有了更加深度的优化。同年4月7日,正式在纽约证券交易所挂牌上市。

2008年,丝涟中国正式成立,将健康睡眠理念和舒适睡眠产品带入中国大陆市场。 [3]

丝涟品牌已成为全球享誉的床垫制造商,在机械化量产盛行之时,丝涟仍然坚持采用部分工序手工制造,以精良材质和创新科技,为用户带去优质睡眠体验和健康生活。

4.德国Breckle(德国十大家纺品牌)

德国“Breckle”(福莱哥勒)有限公司创立于1932年,时逢德国的魏玛共和国时代,当时德国的实用艺术和纯粹艺术结于一体的现代主义风格给了福莱哥勒最初的灵感和一贯的追求。创立初期的福莱哥勒,虽然只是Emil Breckle领导的4人小作坊,但是共同的理念追求,使福莱哥勒产品呈现出一种精确、简洁的独特之美,加之内在的工艺设计,打破了当时累赘、不切实际的家具风格,成为当时聚集魏玛的新贵人士的居家首选,更因品质优良成为欧美的上层社会梦寐以求的珍品,由此,福莱哥勒也迈出了通往世界顶级家具殿堂的第一步。目前拥有上百位经验丰富的专业设计研发人员,精良的机器设备,成熟的电脑监控生产流程,全力打造精品床垫。

认真严谨的“福莱哥勒人”通过坚持不懈的努力与付出,使“Breckle”品牌床垫在推出市场后受到消费者的一致好评与认可,迅速占有欧洲三分之二的床垫消费市场份额,平均每个销售点的年销售额达 €50,000,000.00(欧元)。在要求严苛的德国人眼中,“Breckle”品牌床垫早已成为“健康睡眠”的同义词。

理性、严谨,简约、恒久——78年的品牌积淀和绽放,后继的福莱哥勒子孙们坚持福莱哥勒开创的品牌风格,在工艺设计、科技研发和产品品质上不懈追求,凝聚起国际顶级的设计师和工程师团队,加之严苛的德国工序流程,和世界顶尖的制造工艺,福莱哥勒的每一款产品都精致完美到无懈可击——这就是福莱哥勒的标志,在创建极具个性风格的品质生活的同时,成就自身全球知名品牌。

5.希腊Coco-mat(希腊十大家纺品牌)

COCO-MAT品牌1989年诞生于希腊雅典。公司最初以制作纯天然材料的床垫为主。1992年,公司生产总部搬迁至希腊北部的桑西工业区,如今,COCO-MAT已拥有超过12.3万平方米的工厂。1999年COCO-MAT在西班牙的马德里开设了其国外第一家分店。几年后,也就是2003年,在中国开设第一家门店,地址就选在杭州,同年,COCO-MAT荣获了EFQM(欧洲质量管理基金会)颁发的金奖。截止目前,COCO-MAT在希腊已有家零售门店,除希腊外欧洲有门店,在中国拥有门店,在沙特阿拉伯和美国分别拥有一家门店。

COCO-MAT现已成为民用家居和酒店业内公认的领导品牌。销售网络发展迅速,目前在全球十一个国家设有直营店,覆盖世界各个角落。

我们致力于制造符合可持续发展要求的世界上最好的床。 COCO-MAT床以及家居床垫完全不使用金属弹簧,而由多层天然原料喷天然液态乳胶压制组合而成,可对人体提供更加完美舒适的有效支撑。并且COCO-MAT床垫充分发挥了天然乳胶的抗菌防螨特性,使得我们的寝具中微生物细菌的滋生可以有效地被抑制。

我们所有的产品都由可再生、天然原材料构成,如椰果纤维,羊毛,棉,丝绸,亚麻,原木等。

2009年,一场来势凶猛的金融危机让中国纺织业遭遇了其高速发展30年来的最冷"寒冬"。据调查,全国45%的家纺企业处于亏损,最糟糕的时候南通19%的中小家纺企业关停。而在国家拉动内需政策的支持下,原依赖出口加工的家纺企业因转为内销,在渠道、品牌等条件下有些"水土不服"、风雨飘摇,对于中国家纺2009年是个不平凡的一年。2010年,家纺行业历史最难过的一年,在这一年中,棉花价格暴涨三倍,导致很多纺织企业停产,由此引发胚布有价无市。家纺企业在大环境下,不得不提价。同时,房地产业带来的负面影响,买房人比例急速下跌。据行业统计,家纺企业2010年销售额相比2009年平均下滑13个点。

纵观我国家纺行业发展历程,共经历了三个阶段:原始期、起步期、井喷期,至2013年阶段正进入稳定增长期。经过多年鏖战,家纺行业的竞争格局开始悄然变化,品牌家纺正在崛起。在这个阶段,随着家纺行业消费与竞争的不断升级,家纺行业正处在起步阶段向发展阶段过渡的时期,即市场的最大变化是已进入高速发展中的结构性调整周期。

"十一五"时期,我国家纺行业成功应对全球金融危机、人民币汇率升值、生产成本大幅上涨等诸多不利因素的影响,在"十五"快速发展基础上,保持了稳定向上的运行态势。进一步加大了资源优化整合力度,在生产、经营、品牌建设等领域均取得了较大进步。加强国际接轨,促进了行业国际竞争力与比较优势的较大提升,基本实现了家纺大国的发展目标。家纺的一些知名品牌有罗莱、梦洁、艾莱依等。2011年作为"十二五"的开局之年,我国家纺行业形势良好。2011年家纺行业1548家规模以上企业累计完成工业总产值2097.65亿元,出口交货值539.11亿元,实现利润总额122.40亿元,产销率达97.97%。我国服装类纺织品消费约占纺织品消费总量的65%,家用纺织品消费仅占23%,且家用纺织品的人均消费所占消费性支出还不足1%。从国内外家纺用品消费的现实差距以及未来发展趋势看,中国家纺行业有着巨大的发展空间。"十二五"时期,家纺产业发展的主要任务是引导消费,积极扩大内需;创新渠道,促进企业做强做大;提倡家纺文化,加强品牌建设;优化产业布局,促进梯度发展;整合资源,提高科技贡献率;加强人才培养,夯实强国基础;践行低碳环保,实现可持续发展;完善公共服务平台,创造良好产业环境。

1.3目的和意义

开发这套系统的目的,就是让不同的人员对不同的信息进行录入,查询,汇总,分析,让职责更明了,权限更清晰,职能更细致,响应更及时。能快速提升信息检索效率,只需要输入自己想要的条件进行查询汇总,就能及时的得到信息,能快速的应对市场反应提升各个部门的协作效率,信息的存储更加的安全,不在害怕水火,信息备份更简便,只需要设计数据库定时备份,定时迁移,数据存储和数据迁移的成本微乎其微。如果还用之前的信息管理模式,就会发现在市场上失去了竞争力,在同行业内失去了先进性,负担更重,前进更缓慢。使用更先进的互联网信息管理模式,数据可以及时的进行处理,可以根据数据处理结果进行更直观更明锐的判断,在提升自我竞争力的同时也能节能环保,为社会绿化人类的美好家园增加了贡献。

1.4论文结构安排

本文对家纺用品销售管理系统的设计开发过程分为7个部分进行介绍。其中包括绪论部分,系统开发技术部分,系统分析,设计,实现,测试都会作为一个章节进行说明。

第1章绪论:这部分是论文的开头,主要介绍系统的背景,介绍系统的开发意义。

第2章开发环境:这部分主要针对系统开发的环境进行说明,主要有工具介绍,数据库介绍等。

第3章系统分析:这部分主要还是根据用户的操作需要,分析系统功能,也会分析系统是否值得开发的可行性问题。

第4章系统设计:这部分是在功能分析的层面上,进行更深层次的分析,设计,最终的设计成果是数据库结构与E-R图的设计,和功能结构图的设计。

第5章系统实现:这部分是程序开发的重点,主要还是依靠过硬的编程知识实现系统的功能。

第6章系统测试:这部分主要还是检验程序的合格性,各项指标,比如功能,性能,界面等是否达标。

第7章结论:这部分主要总结设计工作,并对未来工作进行展望。

2 开发环境

2.1 Mysql数据库

MYSQL数据库是由瑞典的一家名称为MySQL-AB的公司开发出一款延续至今的关系型数据库,接着被数据库公司老大Oracle给收购了,之前好多人认为Oralce公司收购之后会雪藏,然后把道路让给Oracle公司的拳头产品也就是Oracle数据库,没想到的是Oracle公司后续支持mysql数据库让它成为了公司另一个拳头产品,与Oracle市场定位完全不同,使Oracle公司在数据库行业的市场占有率遥遥领先,发展的越来越好。

MYSQL数据库有自带的客户端管理工具,比如SQLYon,或者是native for mysql,或者是mysql-font,这些都是很友好的MySQL使用工具,可以视图化处理相关数据。虽然某些模块是收费的版本,但是作为课题来讲,免费功能是完全满足程序的需要,还有就是他的安装配置方面很简单,学习起来也是遵循于SQL语法的,网上也有充足的学习资料可以进行随时随地的学习,所以最终选择的数据库就是MYSQL数据库。

2.2 SSM框架

SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。

2.3 IDEA 开发工具

IDEA 全称IntelliJ IDEA,是用于java语言开发的集成环境(也可用于其他语言),IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

2.4 JSP技术

JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

能以模板化的方式简单、高效地添加动态网页内容。

可利用JavaBean和标签库技术复用常用的功能代码(设计好的组件容易实现重复利用,减少重复劳动)。标签库不仅带有通用的内置标签(JSTL),而且支持可扩展功能的自定义标签。

有良好的工具支持。

继承了Java语言的相对易用性。

继承了Java的跨平台优势,实现“一次编写,处处运行”。因为支持Java及其相关技术的开发平台多,网站开发人员可以选择在最适合自己的系统平台上进行JSP开发;不同环境下开发的JSP项目,在所有客户端上都能顺利访问。

页面中的动(控制变动内容的部分)/静(内容不需变动的部分)区域以分散但又有序的形式组合在一起,能使人更直观地看出页面代码的整体结构,也使得设计页面效果和程序逻辑这2部分工作容易分离(外观视图与逻辑分离)。从而方便分配人员并发挥各自长处,实现高效地分工合作。

可与其它企业级Java技术相互配合。JSP可以只专门负责页面中的数据呈现,实现分层开发。

包含内容编辑 播报

JSP指令

JSP指令控制JSP编译器如何去生成servlet,以下是可用的指令:

包含指令include –包含指令通知JSP编译器把另外一个文件完全包含入当前文件中。效果就好像被包含文件的内容直接被粘贴到当前文件中一样。这个功能和C预处理器所提供的很类似。被包含文件的扩展名一般都是"jspf"(即JSPFragment,JSP片段):

<%@ include file="somefile.jsp" %>

页面指令page –页面指令有以下几个选项:

import

使一个JAVA导入声明被插入到最终页面文件。

contentType

规定了生成内容的类型。当生成非HTML内容或者当前字符集并非默认字符集时使用。

errorPage

处理HTTP请求时,如果出现异常则显示该错误提示信息页面。

isErrorPage

如果设置为TRUE,则表示当前文件是一个错误提示页面。

isThreadSafe

表示最终生成的servlet是否具有线程安全性。

<%@ page import="java.util.*" %> //example import导入样例<%@ page contentType="text/html" %> //example contentType页面类型样例<%@ page isErrorPage=false %> //example for non error page无错页面样例<%@ page isThreadSafe=true %> //example for a thread safe JSP执行绪安全JSP样例

注意:在同一个JSP文件中只有“import”导入页面指令可以被多次使用。

标签库指令taglib –标签库指令描述了要使用的JSP标签库。该指令需要指定一个前缀prefix(和C++的名字空间很类似)和标签库的描述URI:

<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

JSP脚本元素和变量

标准脚本变量

以下是永远可用的脚本变量:

out:JSPWriter,用来写入响应流的数据

page:servlet自身

pageContext:一个PageContext实例包括和整个页面相联系的数据,一个给定的HTML页面可以在多个JSP之间传递。

request:HTTP request(请求)对象

response:HTTP response(响应)对象

session:HTTP session(服务端会话)对象

脚本元素

有三个基本的脚本元素,作用是使JAVA代码可以直接插入servlet.

一种是声明标签,在JAVA SERVLET的类体中放入一个变量的定义。静态的数据成员也可以如此定义。

<%! int serverInstanceVariable = 1; %>

一种是脚本标签,在JAVA SERVLET的类的_jspService()方法中放入所包含的语句。

1 <% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>

一种是表达式标签,在JAVA SERVLET的类中放入待赋值的表达式,表达式注意不能以分号结尾。

<%= "expanded inline data " + 1 %>

JSP动作

JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。JSP提供了以下动作:

jsp:include

和子过程类似,JAVA SERVLET暂时接管对其它指定的JSP页的请求和响应。当处理完该JSP页后就马上把控制权交还当前JSP页。这样JSP代码就可以在多个JSP页中共享而不用复制。

jsp:param

可以在jsp:include, jsp:forward或jsp:params块之间使用。指定一个将加入请求的当前参数组中的参数。

jsp:forward

用于处理对另一个JSP或SERVLET的请求和响应。控制权永远不会交还给当前JSP页。

jsp:plugin

Netscape Navigator的老版本和Internet Explorer使用不同的标签以嵌入一个applet。这个动作产生为嵌入一个APPLET所需要的指定浏览器标签。

jsp:fallback

如果浏览器不支持APPLETS则会显示的内容。

jsp:getProperty

从指定的JavaBean中获取一个属性值。

jsp:setProperty

在指定的JavaBean中设置一个属性值。

jsp:useBean

创建或者复用一个JavaBean变量到JSP页。

3 系统分析

3.1系统可行性分析

在初步确定设计的课题之后,首先就需要对该课题的可行性问题进行思考,通常程序的开发是一个长期并对专业知识要求较高的任务。在决定制作之前,要进行充分的分析与考虑,对其进行可行性分析也是衡量程序的投入成本与产生的效益问题,假如投入成本远远大于产生的效益,那么此程序就可以不用进行制作了,只有当其产生的效益远远大于投入的成本时,并可以确定程序是可以制作出来,以及使用中并不存在操作困难的前提下,才可以将程序的开发提上议程。

3.1.1 时间可行性分析

首先此程序的制作主要是学院的统一安排,所以在时间上,学院给出的时间以及安排的各个时间节点对应的配套任务都可以保证程序的开发如期完成。也就是说只要跟随学院的时间安排进行设计制作作品,是可以完成开发任务的。

3.1.2 技术可行性分析

此程序是作为计算机专业学生的一个毕业答辩项目,它运用到的专业知识,大学期间,学校老师都已经讲授过,并且也在学习期间以及期末考核中,老师们安排了一些类似课程设计这样的作业,本人也通过这些作业进行了练习,也知晓程序的设计流程,也熟悉软件环境的安装,通过平时的实践,本人也具备一定的开发基础以及经验,并具备一定的学以致用的能力。因此,此程序开发在技术上准备充分,开发确实可行!

3.1.3 经济可行性分析

通过对程序制作中需要花费的资金进行分析,可以得出此程序无需考虑资金投入问题。首先程序制作涉及到软件以及硬件环境都有现成的资源,硬件环境就是一台可以上网的笔记本,也可以是学院的图书馆的机房里面的电脑,软件环境也能从各大浏览器进行下载安装,无论软件还是硬件上所需要的资源都不需要资金投入。对于程序完成制作之后,在使用者的使用期间,此程序还会节省人工成本,节省时间成本,并给使用者带来较客观的收益。

3.1.4 操作可行性分析

程序的各个操作功能都有对应的界面,每个功能界面都有相应的功能提示,比如导航条是每个程序必备的界面设置,点击程序的各个功能导航条,会进入相应的操作界面,从这个角度来看,可以得出的信息就是,该程序的操作逻辑并不复杂,就算生活中的普通用户操作该程序,也能根据程序里面的功能提示进行操作。因此,程序的运行使用是可以进行的。

总而言之,此程序从技术角度分析可以进行开发,从时间角度分析,预留时间完全够用,从操作角度分析,程序的操作难度较低,使用者可以顺利操作等,因此,程序也就可以投入人力与时间进行制作。

3.2系统性能分析

如何制作出一款性能优良的程序也是需要提前分析和考虑的,程序的性能首先要保证稳定性,主要是让使用者可以信赖程序。程序现有的功能需求是为了解决当前面临的问题,在此基础上,也需要把社会的进步,科技的发展考虑在内。多年以后,相信用户的需求就不仅仅是现在提出来的需求了,肯定会额外增加许多新的功能,因为在早期,由于用户需求还有程序开发者的技术水平的影响,早期的程序大都只是简单的增加,删除,以及数据更新等,并不存在数据的分析功能,比如数据统计等。然而,现在科学也在进步,开发技术也在迭代更新,开发者的开发经验以及开发技能也得到提升,程序具备的功能也是在同步更新,比如以前的程序,基本就是数据的增加,修改等功能,现在开发的程序都开始考虑对数据进行统计与分析的功能。因此,对于一般系统的开发或者对于旧系统的更新等,都需要涉及到升级,一个是性能上保持优越,另一个是功能上保持更加齐全等,这些都需要在原来的系统上进行改变,并达到升级的目的,所以,任何可开发程序都要模块化,也都要具备可扩展性,并且在进行程序功能扩展时,程序原本正常运行的功能可以继续使用,程序本身的整体结构保持原样。一个稳定性强,并可迭代升级的程序,在满足使用者日常操作需求的同时,也能更好应对当前时代的变化。

3.3系统流程分析

流程图更能反映程序处理信息的逻辑,本部分内容对程序的流程进行说明。

信息添加流程:程序里面的所有数据都是是操作者录入的数据,之所以可以成功录入这些数据,主要还是逻辑判断,判断输入的信息合理,程序数据库才会保存数据。

图3.1 信息添加流程图

信息修改流程:程序里面的所有数据也是需要使用者不断检查的,当检查某个数据项的信息有错误,也能修改。所以程序设置的修改功能,主要还是帮助用户更高效地更正程序数据,保持数据的正确性与可用性。

图3.2 信息修改流程图

信息查询流程:程序后台存放的数据很多,当用户需要某种信息时,不可能再去一行行寻找,所以查询功能的设置也是必要的,相应的程序查询流程(见下图)也是需要检验用户填写的查询条件的合理性与可靠性。

图3.3 信息查询流程图

4 系统设计

程序的系统设计阶段任务比较重,需要具体设计程序功能,也需要设计存储数据的数据库。设计功能可以以功能结构图展示设计结果,设计数据库,可以以E-R图和表结构展示设计的数据库。

4.1系统功能结构设计

在使用用例图绘制管理员的功能之后,需要对管理员的功能进行更加细致的设计,也是为下阶段的系统实现做好准备。设计管理员的功能使用结构图展示(见下图)。管理员功能有个人中心,轮播图管理,公告类型管理,商家信用类型管理,商品类型管理,公告管理,商品管理,商品评价管理,商品评价管理,商品留言管理,商品订单管理,用户管理,商家管理。商家可以注册和登录,修改个人信息,修改密码,商品管理,商品评价管理,商品留言管理,商品订单管理。用户可以注册和登录,修改个人信息和修改个人密码,查看公告信息,查看商品信息,查看商家信息,可以对商品信息进行搜索和购买,可以把商品添加到购物车里进行操作,也可以对商品进行留言和评价以及收藏,可以管理自己的收获地址和商品收藏以及查看自己的商品订单等操作。

图4.1 管理员功能结构图

4.2数据库设计

操作者使用程序,不管是信息添加,信息删除和查询等都是在处理和访问程序数据,程序的数据只会越来越多,所以一个专门保存数据的工具就显得很有必要。这个工具就是数据库,为了让所选数据库更好的服务于开发的程序,就要对这个数据库创建相应的数据库文件,并进行规则设计,让数据库在应对程序的各种数据处理请求时可以及时进行反馈。

4.2.1数据库E-R图

在分析出并设计好程序的相关功能之后,还有一个比较重要的设计任务,就是参照程序的功能设计出此程序的数据库,这部分内容设计到数据库实体的确定,主要是绘制其E-R图,也涉及到在数据库中创建表,完成表结构的具体设计。说到E-R图的绘制,市场上也有很多绘制其的软件,它们大都提供了E-R图的基本表示符号,所以通过鼠标的选择与拖拽就可以完成初步的绘制,由于使用习惯的问题,本人更加倾向于微软的Visio,对PowerDesigner建模工具,还有对比较受欢迎的Navicat等工具接触较少,为了如期提交作品,这里就不再花费额外的时间去学习一些E-R图的建模工具了,仅仅使用常用的,比较熟悉的Visio工具就行了。代表E-R图符号的有矩形,椭圆,菱形。它们分别表示不同的信息,第一种是矩形符号,绘制实体时选用,第二种是椭圆符号,专门代表矩形实体的属性,第三种是菱形符号,专门代表各个矩形实体当中的某种联系。

(1)此数据库设计了管理员实体,它对应的E-R图(见下图)需要使用Visio工具绘制。

图4.7 管理员实体E-R图

(2)此数据库设计了用户实体,它对应的E-R图(见下图)需要使用Visio工具绘制。

图4.8 用户实体E-R图

(3)此数据库设计了商家实体,它对应的E-R图(见下图)需要使用Visio工具绘制。

图4.9 商家实体E-R图

4.2.2 数据库表结构

存储程序数据需要一定的规则进行,这样才可以确保后期在对数据库的数据进行使用时,可以使用一定的规则进行查询并显示出来。数据库里面的每个表的结构设计都是不一样的,但是都包含了字段名,字段对应的数据类型,以及数据类型的长度值等。每当设计好一个数据表结构时,在程序运行中,就会依照这样的表结构依次存储数据,所以在程序进行数据添加时,数据库中就会新增数据,程序进行数据更新时,数据库也是同步更新数据。程序执行删除功能时,也会在对应数据表中清除相应的数据。所以,每当使用者在执行功能时,都会在操作界面查看实时变化的数据,这些数据同样也是在数据库当中进行变化,最后会把数据库当中的已经发生变化的信息同步显示在程序操作界面。所以,数据表的结构的设计一定要多花时间进行思考。设计出最优秀的结构,可以减少数据冗余,让数据检索更快捷,让数据存储可以更方便,让程序的整体性能可以提升。

1商品评价表

序号列名数据类型说明允许空
1IdIntid
2shangpin_idInteger商品
3yonghu_idInteger用户
4shangpin_commentback_textString评价内容
5insert_timeDate评价时间
6reply_textString回复内容
7update_timeDate回复时间
8create_timeDate创建时间

2收货地址表

序号列名数据类型说明允许空
1IdIntid
2yonghu_idInteger创建用户
3address_nameString收货人
4address_phoneString电话
5address_dizhiString地址
6isdefault_typesInteger是否默认地址
7insert_timeDate添加时间
8update_timeDate修改时间
9create_timeDate创建时间

3商品表

序号列名数据类型说明允许空
1IdIntid
2shangjia_idInteger商家
3shangpin_nameString商品名称
4shangpin_uuid_numberString商品编号
5shangpin_photoString商品照片
6shangpin_typesInteger商品类型
7mingxingchanpin_typesInteger是否明星产品
8shangpin_kucun_numberInteger商品库存
9shangpin_old_moneyBigDecimal商品原价
10shangpin_new_moneyBigDecimal现价
11shangpin_clicknumInteger商品热度
12shangpin_contentString商品介绍
13shangxia_typesInteger是否上架
14shangpin_deleteInteger逻辑删除
15create_timeDate创建时间

4商品收藏表

序号列名数据类型说明允许空
1IdIntid
2shangpin_idInteger商品
3yonghu_idInteger用户
4shangpin_collection_typesInteger类型
5insert_timeDate收藏时间
6create_timeDate创建时间

5商品留言表

序号列名数据类型说明允许空
1IdIntid
2shangpin_idInteger商品
3yonghu_idInteger用户
4shangpin_liuyan_textString留言内容
5insert_timeDate留言时间
6reply_textString回复内容
7update_timeDate回复时间
8create_timeDate创建时间

6购物车表

序号列名数据类型说明允许空
1IdIntid
2yonghu_idInteger所属用户
3shangpin_idInteger商品
4buy_numberInteger购买数量
5create_timeDate添加时间
6update_timeDate更新时间
7insert_timeDate创建时间

7商家表

序号列名数据类型说明允许空
1IdIntid
2usernameString账户
3passwordString密码
4shangjia_nameString商家名称
5shangjia_phoneString联系方式
6shangjia_emailString邮箱
7shangjia_photoString营业执照展示
8shangjia_xingji_typesInteger商家信用类型
9new_moneyBigDecimal现有余额
10shangjia_contentString商家简介
11shangjia_deleteInteger逻辑删除
12create_timeDate创建时间

8管理员表

序号列名数据类型说明允许空
1IdIntid
2usernameString用户名
3passwordString密码
4roleString角色
5addtimeDate新增时间

9token表

序号列名数据类型说明允许空
1IdIntid
2useridInteger用户id
3usernameString用户名
4tablenameString表名
5roleString角色
6tokenString密码
7addtimeDate新增时间
8expiratedtimeDate过期时间

10字典表

序号列名数据类型说明允许空
1IdIntid
2dic_codeString字段
3dic_nameString字段名
4code_indexInteger编码
5index_nameString编码名字
6super_idInteger父字段id
7beizhuString备注
8create_timeDate创建时间

11用户表

序号列名数据类型说明允许空
1IdIntid
2usernameString账户
3passwordString密码
4yonghu_uuid_numberString用户唯一编号
5yonghu_nameString用户姓名
6yonghu_phoneString用户手机号
7yonghu_id_numberString用户身份证号
8yonghu_photoString用户头像
9sex_typesInteger性别
10yonghu_emailString电子邮箱
11new_moneyBigDecimal余额
12create_timeDate创建时间

12商品订单表

序号列名数据类型说明允许空
1IdIntid
2shangpin_order_uuid_numberString订单号
3address_idInteger收货地址
4shangpin_idInteger商品
5yonghu_idInteger用户
6buy_numberInteger购买数量
7shangpin_order_true_priceBigDecimal实付价格
8shangpin_order_courier_nameString快递公司
9shangpin_order_courier_numberString订单快递单号
10shangpin_order_typesInteger订单类型
11shangpin_order_payment_typesInteger支付类型
12insert_timeDate订单创建时间
13create_timeDate创建时间

13配置文件表

序号列名数据类型说明允许空
1IdIntid
2nameString配置参数名称
3valueString配置参数值

14公告表

序号列名数据类型说明允许空
1IdIntid
2gonggao_nameString公告名称
3gonggao_photoString公告图片
4gonggao_typesInteger公告类型
5insert_timeDate公告发布时间
6gonggao_contentString公告详情
7create_timeDate创建时间

5 系统实现

程序设计阶段的完成,就可以使用设计结果,比如功能结构的设计结果,数据库的设计结果来指导程序的开发内容,主要还是使用开发技术来实现程序功能。实现部分不仅包括了界面的布局与排版,也涉及到对功能的实现。

5.1管理员功能介绍

5.1.1用户管理

管理员可以添加,修改,删除,查询用户信息。

图5.1 用户管理页面

5.1.2 商家管理

管理员可以添加,修改,删除,查询商家信息。

图5.2 商家管理页面

5.1.3 公告管理

管理员可以添加,修改,删除,查询公告信息。

图5.3 公告管理页面

5.2 商家功能介绍

5.2.1商品管理

商家可以对商品信息进行添加,修改,删除,查询,上架,下架,增加和减少库存等操作。

图5.4 商品管理页面

5.2.2商品评价

商家可以查看和搜索以及回复商品评价信息。

图5.5 商品评价页面

5.2.3商品订单

商家可以搜索,查看用户提交的订单信息。

图5.6 商品订单页面

5.3 用户功能介绍

5.3.1商品信息

用户可以查看商品信息,收藏商品信息,留言和评价,添加到购物车和立即购买操作。

图5.7 商品信息页面

5.3.2购物车

用户可以把商品添加到购物车,在购物车里面进行修改数量和点击结算操作。

图5.8 购物车页面

5.3.3提交订单

用户可以提交订单,可以选择收货人和收货地址。

图5.9 提交订单页面

5.3.4我的订单

用户可以查看自己的订单信息。

图5.810 我的订单页面

系统

ConfigController.java

package com.controller;


import java.util.Arrays;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("config")
@RestController
public class ConfigController{
	
	@Autowired
	private ConfigService configService;

	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }
    
	/**
     * 列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 详情
     */
    @IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 根据name获取信息
     */
    @RequestMapping("/info")
    public R infoByName(@RequestParam String name){
        ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
        return R.ok().put("data", config);
    }
    
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody ConfigEntity config){
//    	ValidatorUtils.validateEntity(config);
    	configService.insert(config);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ConfigEntity config){
//        ValidatorUtils.validateEntity(config);
        configService.updateById(config);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
    	configService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

CartServiceImpl.java
package com.service.impl;

import com.utils.StringUtil;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import com.dao.CartDao;
import com.entity.CartEntity;
import com.service.CartService;
import com.entity.view.CartView;

/**
 * 购物车 服务实现类
 */
@Service("cartService")
@Transactional
public class CartServiceImpl extends ServiceImpl<CartDao, CartEntity> implements CartService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        if(params != null && (params.get("limit") == null || params.get("page") == null)){
            params.put("page","1");
            params.put("limit","10");
        }
        Page<CartView> page =new Query<CartView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }


}

ShangpinLiuyanServiceImpl.java
package com.service.impl;

import com.utils.StringUtil;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import com.dao.ShangpinLiuyanDao;
import com.entity.ShangpinLiuyanEntity;
import com.service.ShangpinLiuyanService;
import com.entity.view.ShangpinLiuyanView;

/**
 * 商品留言 服务实现类
 */
@Service("shangpinLiuyanService")
@Transactional
public class ShangpinLiuyanServiceImpl extends ServiceImpl<ShangpinLiuyanDao, ShangpinLiuyanEntity> implements ShangpinLiuyanService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        if(params != null && (params.get("limit") == null || params.get("page") == null)){
            params.put("page","1");
            params.put("limit","10");
        }
        Page<ShangpinLiuyanView> page =new Query<ShangpinLiuyanView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }


}

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值