家具网站

@TOC

springboot0791家具网站

第一章 绪 论

1.1研究背景

计算机网络的发展,促进了社会各行业的进步,带来了经济快速增长。计算机管理系统可以提高人们的工作效率,对人们生活的各个方面都有深远的影响。特别是销售公司,可以通过计算机网络进行在线销售,摆脱实体店的区域限制,最大限度的开展销售优势。企业通过电子商务网站发布产品,进行展示和推广,在网络上和客户进行实时的交流沟通,达成交易。网上销售为买卖双方都带了便利,节省了双方的时间。

目前,网络上有许多销售系统,提供了各种各样的商品信息,只需要一根网络就可以购买到需要的商品。电子商务将传统的商务进行简化,实现了交易流程的数字化,借助第三方平台进行数字支付,并通过物流进行配送,消费者无需出门就可以收到心仪的商品。电子商务系统的售后系统也很智能,对不满意或者出现问题的商品也可以提出服务,进行更换或者退货。电子商务模式改变了我们的生活,带来了便利和实惠,网上交易节省了流图环节,从生产到销售实现零环节交易,使得消费者可以买到优质商品。

家具网站主要为家具等企业使用的网上交易系统,可以结合实体店进行多方位销售,本家具网站主要进行家具销售活动,因此在网上购买家具时,一定需要提供对应的处方,以防购买到不合适的家具。家具网站利用网络技术和现代数据库理论,实现货物的在线浏览、在线交易、后台订单处理等功能。

家具与我们的生活是紧密联系的,有的时候家具代表着一种生活的品味与质量。而对于普通的大众,他们更倾向在线下的家具商城进行购买,但是有些时候线上购买更加方便快捷,所以设计这个网站,给顾客提供方便购买家具,并且可以让客户多了解家具。家具在每个家庭都有的,每户家庭都要依靠家具来“填充”自己的房屋。家具是一直都出现在我们生活里。我们可以依靠家具来装修自己生活的环境,并且还可以利用家具来美化我们的房屋。家具出现在我们家庭的概率是100%。很多人都有过在网上购买家具的经历,在网上购买家具可以浏览家具、查询家具资讯、购买方便快捷。这种方式能解决很多关于家具购买问题。并将在网上购买家具的方式推向了社会生活上。

1.2研究现状

电子商务是全球性的商业活动,一个大型网站可以实现全球购。在我国,电子商务活动也日趋成熟,以淘宝、京东、拼多多为代表的大型互联网公司独占鳌头,带动我国整体电子商务的发展。国家也非常重视我国电子商务的发展情况,国家两会也指出我们要实现产业转型,加快战略调整,并将电子商务作为新型发展的销售战略。从中央到地方,都提出各自措施来发展电子商务,电子商务的发展也带动了许多就业机会,对各小商品交易的用户提供了广阔的发展。

网上购买家具并不少见,因为网上家具在很大一部分会比较便宜,所以在网上购买家具具有一定的优越性。家具材料费用、劳动力成本费用等不断提高,导致大部分企业只能将这种压力转化到家具产品的价格上面。且传统的家具行业销售渠道单一、渠道建设很是不成熟,极大的限制了企业的发展。由于地域和资金方面的限制,家具行业中的一些地域品牌,还未能有更大的突破,还只是停留在“点”上.由于电子商务的快速发展,在成本方面,没有场地、装饰、样品,以及销售人员等费用的支出,家具电子商务极大的减少了中间环节,家具价格也出现普遍的降低,制作家具类网站也达到了薄利多销的目的.使更多人在网上购买家具。

电子商务逐渐和传统的产业进行融合,提高产业运行能力,发展创新。提倡绿色经济,惠及基础民生。我国电子商务的发展离不开全球化进程,加快和发达国家的交流,实现互惠互利,协同发展。特别是受新冠疫情的影响下,各国经济受到重创,只有通过电子商务的优势来逐渐整合资源,逐渐恢复。

我国电子商务的发展也异常曲折,从商品匮乏到支付瓶颈,发展到目前人人网购的局面,彰显了我国开拓电子商务市场过程的勇气和智慧。在今天,国内发展了许多电子商务网站,有各种连锁家具的线上家具网站。京东也可以通过处方购买对应的家具。

而美国是电子商务发展最早的国家,特别是以亚马逊为代表的巨头,销售额全球第一。自从94年开始,美国NetMDket实现第一笔网上交易开始,代表了传统交易迈入新的方式。美国的电子商务交易相对成熟,信用体系完善。在网购中,很少出现劣质商品,无论卖家和买家都受到社会信用体系影响,交易纠纷较少。但是目前,美国电子商务的时效性并可以国内发展的迅猛,总体交易量低,收货等待时间长,在线支付比例低。

1.3课题意义

社会的发展,web技术也得到了前所未有的机遇,以电子商务网站为代表的互联网企业快速的崛起,冲击着实体企业。各种网络购物狂欢日的销售额接二连三的打破记录,从6.18、双11、双12等活动,带来了一个又一个销售神话。可见,电子商务逐渐改变着我们的生活。

网络购物有着许多优势,降低了实体店的销售成本,不需要进行店面装修,商品库存积压和人员开销。店家只需要通过后台发布商品即可。而对于消费者,足不出户可以选购商品,在线比价,节省时间和费用。利用电子商务系统管理商品,大大提高管理效率,随时掌握商品销售情况,快速调整销售对策,发展企业。

家具网站利用电子商务的优势,为家具企业带来升级转型,建立和消费者在线的联系平台。开发家具网站,有以下几点实际意义。首先,降低了运营成本,节省了店铺装修成本。其次,节省了各种宣传成本,不需要印刷海报,利用多媒体技术进行促销即可。然后,可以实现7*24小时运营,自动售货。最后,通过家具网站发布各种信息,为客户免费提供在线服务,提高了客户获得感。同时,家具网站为企业减少了库存成本,提高了家具管理效率,一定可以带来更高的利润。

由于现在有很多家庭对家具的需求挺大的,所以家具的消费群体也是有大部分.当今互联网网民不断增多,客户群体大。此次设计的网站是家具购物平台,用户进行购买时更加直接和方便;现在网络能带来更多的消费需求,刺激消费;第三方支付,有利于双方的交易安全;便捷的沟通,拥有便捷的客服销售体系;并且家具质量也能得到保障.有够硬的家具制作技术,团队合作服务有利于家具产品满足需求。

家具网站的实现,最大可能的发挥了互联网的优势,适应了现代化发展要求,促进家具销售的科学性和规范化,因此,本课题值得大力推广。

第二章 相关技术简介

2.1 JAVA技术

JAVA是解释性的浏览器脚本语言,目前广泛运用于web开发,语法简单,入门快,开发系统效率高。而且JAVA是开源的,开发者可以根据需要对JAVA进行扩展。JAVA具有独特的语法,执行效率高,因为JAVA代码是在服务器端执行的,所以,效率也比较高。JAVA的引擎机制会把执行后的结果保存到客户端内存中,当用户再次访问这个页面时,直接从内存读取,不需要重新从服务器端解释执行,这个过程比较高效。

开发web有许多脚本语言,如ASP/PHP/PYTHON等,JAVA和其它语言相比较,有独特的优势。JAVA开发成本低,因为入门低,学习的程序员多,开源等。JAVA对数据库的支持简单,无需复杂的操作就可以链接各种数据库,特别是mysql是比较出色的搭配 。JAVA另外一个特点是跨平台,支持各种操作系统,不需要编译,就可以在服务器运行。

2.2 MYSQL数据库

家具网站使用MYSQL开发,MYSQL是开源的,是为数不多的免费关系型数据库之一。Mysql数据库部署和维护简单,并具有性能高效性和安全性,也可以跨平台进行运行,不但能在windows上,也可以运行在linux上。Mysql扩展了关系型引擎。Mysql不具有可视化管理界面,往往通过第三方软件进行管理,或者通过web端管理器进行管理。通过可视化操作可以快速的进行数据库表的创建、数据的插入读取等。Mysql支持通用的SQL语句,MYSQL还可以Windows集成,完成数据仓库,对数据进行分析的功能。

MySQL通过标准的SQL进行管理,支持多线程操作,通过操作系统的资源,提高运行速度。本系统可以通过TCP/IP或者ODBC等方式链接数据库,虽然不能处理大规模的数据,但是对于本系统足够。MYSQL数据库通过管理系统来访问,其中数据库管理系统和接口原理如图2.1数据库管理系统和接口的原理所示。

图2.1 数据库管理系统和接口的原理

MySQL通过DOS窗口进行管理,默认情况下,MySQL的端口为3306,也可以通过配置文件或者SQL命令进行修改。完成修改后,一般都需要重新启动MySQL的服务。MySQL查重的数据在data文件夹中,可以把数据文件进行备份,也可以通过SQL还原,保存脚本文件。

2.3 B/S结构

家具网站使用B/S结构,这种结构是当前广泛采用的框架。突破了传统的C/S结构,为用户带来独特的体验。用户通过浏览器查看系统,然后调用业务功能层的CGI,并根据相关业务读取数据库操作,最终返回到浏览器中。

B/S架构是软件发展必然的结果,当客户端软件足够大的时候,一个PC电脑一方面无法安装太多的应用,对存储空间要求太大,而且各种软件的维护成本太高。如果客户端的操作系统出现故障,那么这些软件的更新都是很大问题。所以,使用浏览器访问的B/S系统,就不存在这些问题,客户端可以整理各种系统或者网站的域名,通过域名访问即可,即使电脑系统出现问题,也不影响。

在家具网站中,只需要把系统的程序部署到服务器端即可,客户端通过互联网下任意电脑都可以访问,这也方便了用户,提高了用户体验。

B/S架构中,使用POST方法请求服务器,使用HTTP协议,通过URL传递路径,服务器端接收请求后,解析URL,根据问号传递的参数生成HTML文件,客户端接收信息后,解析数据,显示信息到界面。

2.4 SpringBoot

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。

第三章 系统分析

3.1可行性分析

3.1.1技术可行性

技术可行性分析是对开发家具网站的技术可行性评估,提前进行规范,现在适合的技术,可以事半功倍。

系统使用JAVA和MYSQL数据库。JAVA是比较成熟的语言,开发系统具有很多优势,完全开源免费。JAVA是嵌入在HTML中的,在服务器运行后,进行解释。JAVA具有独特的语法,执行效率高,因为JAVA代码是在服务器端执行的。JAVA的引擎机制会把执行后的结果保存到客户端内存中,当用户再次访问这个页面时,直接从内存读取,运行速度快。

JAVA是网络编程语言,对于本系统的开发作为合适,在技术上具有可行性。

3.1.2操作可行性

操作可行性主要考虑开发系统后,是否操作方便,是否可以解决现有的问题,是否可以提高相应的效率。本系统使用web模式,通过浏览器即可访问,操作简单。进入系统后,通过主页的菜单快速的进入各个子功能,通过鼠标和键盘就可以完成各种事项。在操作上具有可行性。

3.1.3经济可行性

经济比较包括两个方面,投入和收益。投入上包括开发系统需要的人力成本和服务器硬件成本。人力成本上,一个月的人力成本就5000元左右。服务器硬件成本1万元。而收益上,开发家具网站后可以使用多年,并可以分析给其它高校使用,投入使用一年的收益都将大于投入,所以,在经济上可行。

3.1.4时间可行性

计划使用两个月完成系统的分析、设计、实现和实施。通过前期的调研,完成系统时间需要一个月时间即可,考虑到后期的修改和实施,预留了足够的时间,所以,开发家具网站时间上可行。

3.2系统需求分析

3.2.1市场需求

计算机信息技术和互联网的发展,整个商业提供了更好的发展条件,忙碌的人民生活得到了更多的方便。在家具业,从传统的购买方式发展到如今的线上销售,客户通过家具网站查看家具信息,根据订购量和受欢迎程度来衡量家具的好坏,不仅可以订购到优质的家具,也可以享受到快捷的送货服务。

近年来,许多商家都关注网络销售,推广家具销售的同时,提高内部管理效率,家具网站使用,必将带动家具销售。 在当今竞争激烈的大环境下,构建家具网站势在必行。

3.2.2性能需求

分析家具网站的用户使用情况,整理系统所有性能要求,估算系统性能要求。预计系统最大访问量,对系统的数据库链接量,带宽访问量进行控制。对系统的技术参数进行设置,规划与探索系统并发要求等。

分析系统功能,对各项功能的设计分析和实现,达到整体性要求。系统数据库和程序实现具有条理化,系统业务清晰。另外,系统的编程规范统一,界面风格统一,系统数据库维护间隔统一,只有做到整体规划和要求,才能更好的持续性。

家具网站的安全性主要是系统的数据安全性,保证系统数据的完整和安全。在系统设计上,对必要信息进行加密,放在被窃取;系统访问控制,对于非法用户,禁止访问;对于数据库要定期备份;在网络传输上,使用专门的服务器和宽带线路进行搭建。尽最大可能的保证数据安全。

家具网站的开发不是一次开发后就一成不变的,后期需要改变业务规则,升级维护其它功能等。所以,系统结构选择B/S的,只需要在服务器上就可以维护升级,不需要关心客户端。另外,在功能和系统架构设计上,对应数据字段,需要单独设计为数据库表,后期维护表数据即可,对应创建的需求功能,如商品管理,可以设计额外的接口实现数据的导入或者导出。

3.2.3功能需求

家具网站为用户提供在线购买的服务,前台用户注册后,进行在线购买需要的家具,后台管理员登录后管理家具信息。

会员未登录前,浏览系统上的所有公告信息,查看最新的活动,查看各种通知或者优惠信息。通过家具分类,查看分类对应的家具。家具信息一般包括家具图片,家具描述和价格信息。会员使用本系统前,进行注册,填写个人信息。包括账号和密码,设置地址信息。信息注册后,后台需要对信息进行审核,通过审核的才能进行登录。会员通过搜索查找到家具后,先把家具加入到购物车中,也可以收藏家具,以供下次继续预订。在个人购物车中,可以修改订购的家具数量,或者删除家具。完成购物车的编辑后,提交购物车家具到收银台进行订单结算。订单生成中,默认加载登录用户的购物地址信息,确定无误后,提交订单并进行支付,因为是毕业设计,没法设置收款方,模拟支付成功。购物完毕后,等待接收家具。会员的信息不是一成不变的,比如更换了电话、或者地址信息后,通过会员中心对这些信息进行修改,及时保持最新的个人信息。

管理员是系统的后台管理者,一般是家具的经营者或者经理等角色。管理员控制系统整个的信息。开通家具网站后,录入新闻公告等各类型的文章,后期的运行中,发布的优惠信息,都可以通过这个及时的补充。

管理者对家具类别进行设置,录入家具类别下的家具。对现有家具进行拍照,上传家具图片,设置一个合适的价格,并发布出去。家具信息是家具网站非常重要的信息,所以在发布时,一定要认真编辑。价格根据实际情况,再经营过程中,进行合理的调整。

管理员对订单的管理,会员购物后,在购物记录中,可以查看对应的订单信息。通知操作员及时准备家具,第一时间进行配送。订单信息包括了家具记录和会员的地址和电话信息。一段时间的订单,也可以进行统计,查看订单量,为决策做依据。

3.3系统UML用例分析

UML是统一建模语言,而用例图是UML需求分析阶段的一种方式,通过对家具网站的分析,系统包括前后台两种用户,不同的用户功能不同,其中系统UML用例图如图3.1系统UML用例图所示。

管理员

分类管理

家具管理

新闻管理

会员管理

订单管理

新闻查看

家具浏览

注册登录

在线购买

会员

图3.1 系统UML用例图

使用家具网站前,需要进行登录,登录用户包括前台会员和后台管理员,其中登录流程一样。

用户注册是家具网站前台的操作,游客用户没有账号前,需要进行注册,注册前,录入自己的实际信息,特别是用户名和密码需要牢记,用户注册后,把信息保存到数据库中。

家具网站中的个人账户是比较重要的信息,记录的有个人购买记录和各种积分。为了保护个人信息的安全,建议用户每月更换自己的密码,用户登录后,进行密码的修改。修改的时候,先检查之前的密码,进行验证,确认是本人操作后,输入新的密码,验证是否符合规则,并重复输入修改的密码,防止录入过程中出现错误,都得到验证后,修改数据库中的密码信息,更新完成,建议,重新登录系统后生效。

家具网站的销售中,可以先从管理员开始,管理员登录后,录入各种信息,重要的是家具分类和家具信息。系统前台中,会员登录系统,输入家具的查询条件,查询家具分类和家具信息。查看具体的家具信息,符合自己的要求后,加入家具到购物车中,未提交购物车时,可以对购物车内信息进行修改,提交购物车后,将要生成订单,初始订单状态为未支付,会员完成在线支付后,状态修改为已支付。管理员查看已支付订单,安排家具仓库管理员进行发货,修改状态为发货。让会员收到家具后,确认收货,订单状态修改为已完成,最终,管理员通过已完成的订单查看销售量。

第四章 系统设计

4.1系统架构设计

家具网站使用SpringBoot架构开发。家具网站的视图层使用JAVA和HTML开发,通过表单处理客户端的请求,获取控制器的响应结果后,使用JAVA标签显示数据。在分层的开发模式中,视图层可以和控制层分开开发,通过接口实现相互调用。

家具网站的控制器层来获取视图层的响应,并可以单独实现业务逻辑层进行调用,判断结果返回到界面层。

模型层是比较简单的层次,和数据库表进行对应,一个数据库表往往对应一个实体类,创建模型层后,编程人员不需要关注数据库,通过模型即可明确对应的字段信息。

4.2系统功能设计

本家具网站主要包括前台购买和后台管理,系统结构图如图4.2系统结构图所示。

图4.2系统结构图

4.2.1系统后台设计

家具网站的后台包括管理员登录、家具分类设计、家具管理设计、公告管理、订单管理设计、用户设计。

家具网站的登录还有管理员后台的登录,管理员登录的流程和会员的登录流程一样,管理员也存在一个数据库信息表,在初始化数据库的时候,默认插入几个管理员账号以供使用。

家具管理包括家具分类和家具信息管理。管理员先对家具进行分类,整理所有的分类信息。具有分类信息后,才能进行家具的管理。一个分类下对应多个家具信息,后台上架所有的家具信息后,前台显示家具。前台的家具显示分为所有的家具显示、家具分类下的查询、和单独家具搜索查询。

在删除商品分类的时,先要删除分类下的商品后,才能删除分类。修改一个家具分类名称后,在家具的类型中对应的分类名称都将改正。

家具网站的公告管理包括资讯信息和公告信息管理。管理员先公告进行管理。后台上传所有的公告信息后,前台显示公告。前台的公告显示分为所有的公告显示、公告分类下的查询、和公告点击排行等操作。

管理员对订单进行管理,查看订单信息,并把订单信息提交到后台。管理员统计一段时间内的订单信息。

用户管理是对管理员的管理和注册用户的管理。管理员一般设置一个用户即可,根据需求也可以另外添加,而注册用户只需要审核即可。

4.2.2系统前台设计

家具网站的前台包括首页、家具分类、全部家具、网站公告、我的购物车、我的订单、注册登录、个人中心。

首页显示了系统菜单页面,用户注册登录模块,首页是系统设计的关键页面,需要做的美观,赏心悦目,这样才能让更多的人留下来继续使用网站。

家具分类是查看对应分类下的家具信息。

全部家具是通过查询语句查询到系统所有的家具。

网站公告查询管理员录入的所有公告信息,点击标题查看具体的公告内容。

家具网站的用户购物前,需要登录。用户通过查询条件等方式查看家具信息,点击加入购物车,然后确定家具信息,提交到收银台,支付订单,然后完成购物的流程。对于不想要的订单,取消操作。

用户登录前需要进行注册,用户注册后把信息保存到数据库,然后进行登录。登录前,先进行信息的必填项验证,然后到会员数据库表查询输入的用户名和密码是否存在,然后返回用户信息。

其中用户密码使用MD5进行加密,加密后的信息是无法破解的。数据库查询到密码也是一串字符串密文,不能作为密码进行登录。用户输入密码登录的时候,再次使用MD5进行加密,最终比对的是加密后的字符串,这种密文保证了密码传输过程的安全性。

用户登录后可以查看我的历史订单,并更新个人信息等。

4.3数据库设计

4.3.1 数据库E-R图

ER图反映数据类型的关系,也可以映射现实模型。而且可以给出属性信息,下面给出家具网站的ER图信息。因为表的属性比较多,而界面篇幅有限,下面仅列出主要的属性。

管理员

订单

家具分类

家具

会员

购物车

管理

包括

审核

订购

结账

明细

1

1

n

n

1

N

1

n

1

N

n

1

名称

类型

名称

价格

图片

描述

类型

编号

编号

密码

登录名

商品

会员

数量

价格

家具

编号

用户名

密码

性别

编号

电话

邮箱

姓名

购买

N

属于

m

n

m

图4-3 系统整体E-R图

4.3.2 数据库表设计

本系统采用MYSQL数据库作为数据存储,下面介绍数据库中的各个表的详细信息。

管理员表是保存在线家具销售的用户信息表,其中表结构如4.1所示。

表4-1 admin管理员表

列名解释类型大小主键
Idyaopin主键int4是主键不能为空
Usernameyaopin用户名varchar50不是可以为空
Passwordyaopin密码varchar50不是可以为空
typeyaopin类型varchar30不是可以为空

订单表是保存在线家具销售的订单信息表,其中id为主键,表结构如4.2所示。

表4-2 orders订单表

列名解释类型大小主键
idyaopin主键int11是主键不能为空
onumberyaopin订单号varchar50不是可以为空
Spcyaopin家具varchar50不是可以为空
Slcyaopin数量varchar50不是可以为空
addressyaopin地址varchar50不是可以为空
teyaopin电话varchar13不是可以为空
emailyaopin用户邮箱varchar20不是可以为空
shffyaopin收货varchar60不是可以为空
zfffyaopin用户支付varchar10不是可以为空
leavewordyaopin用户留言varchar2000不是可以为空
addtimeyaopin日期time不是可以为空
xnameyaopin下单人varchar10不是可以为空
ztyaopin订单的状态varchar2不是可以为空
totalyaopin总价格varchar10不是可以为空
kuaidiyaopin快递名称varchar20不是可以为空
knumberyaopin单号int20不是可以为空
Receiveryaopin收货人姓名varchar10不是可以为空

类别表是保存在线家具销售的类别信息表,其中id为主键,表结构如4.3所示。

表4-3 category类别表

列名解释类型大小主键
idyaopin主键int4是主键不能为空
pidyaopin分类类型int6不是可以为空
titleyaopin分类名称varchar60不是可以为空

商品表是保存在线家具销售的商品信息表,其中id为主键,表结构如4.4所示。

表4-4 goods商品表

列名解释类型大小主键
idyaopin主键int4是主键不能为空
pidyaopin类型编号int4不是可以为空
categoryidyaopin分类编号int4不是可以为空
pnumberyaopin商品的编号varchar10不是可以为空
titleyaopin商品的名称varchar10不是可以为空
amountyaopin库存数量int10不是可以为空
cishuyaopin销量int10不是可以为空
mpriceyaopin市场的价格decimal10不是可以为空
spriceyaopin会员的价格decimal10不是可以为空
contentyaopin详细介绍text不是可以为空
apvyaopin点击int4不是可以为空
imgyaopin图片varchar50不是可以为空
statusyaopin状态int2不是可以为空
addtimeyaopin添加时间timestamp不是可以为空

会员表是保存在线家具销售的会员信息表,其中id为主键,表结构如4.5所示。

表4-5 user会员表

列名解释类型大小主键
idyaopin主键smallint5是主键不能为空
accountyaopin用户名varchar64不是可以为空
nicknameyaopin昵称varchar50不是可以为空
passwordyaopin密码char32不是可以为空
emailyaopin邮箱varchar50不是可以为空
addtimeyaopin注册时间timestamp不是可以为空
imgyaopin头像varchar255不是可以为空
sexyaopin性别varchar255不是可以为空
telyaopin电话varchar50不是可以为空
addressyaopin地址varchar50不是可以为空
statusyaopin状态int2不是可以为空

公告表是保存在线家具销售的公告信息表,其中id为主键,表结构如4.6所示。

表4-6 content公告表

列名解释类型大小主键
idyaopin主键smallint5是主键不能为空
titleyaopin公告标题char32不是可以为空
contentyaopin公告内容varchar50不是可以为空

购物车表是保存在线家具销售的购物车信息表,其中id为主键,表结构如4.7所示。

表4-7 购物车信息表

列名解释类型大小主键
id主键smallint5是主键不能为空
titleyaopin家具信息char32不是可以为空
shuliang数量varchar50不是可以为空
Huiyuan会员varchar50不是可以为空

第五章 系统的实现

5.1前台功能模块的实现

用户可进入家具网站可查看网站信息,包括网站首页,家具信息、网站公告等。系统前台主界面展示如图5.1系统前台主界面图所示。

图5.1系统前台主界面图

首页的导航栏为单独的一个页面,系统所有的页面在开发前,引入这个top页,就可以显示出导航栏的内容。再项目需要修改导航栏的时候,就可以单独修改top页面的代码,实现所有页面都进行修改的目的。

5.1.1 用户注册界面

未注册用户可进注册界面进行注册操作,用户注册界面展示如图5.2用户注册界面图所示。

图5.2 用户注册界面图

在用户信息添加界面,填写信息后,通过客户端验证后,提交数据到数据库。后台对用户信息进行保存操作,保存数据就,在数据库中可以查看到刚才录入的数据。用户注册在操作上属于数据的插入操作,用户注册前,需要验证该用户是否存在数据库,如果有这个用户,就不能继续注册。

5.1.2 用户登录界面

用户要想实现家具购买操作必须进行登录系统,用户登录界面展示如图5.3用户登录界面图所示。

图5.3 用户登录界面图

登录界面比较简洁,输入信息后,进行登录,登录验证需要经过两个步骤。第一个步骤是客户端验证,通过js实现必填项校验,一般情况,js也可以校验是否为数字,字符串大小等。通过验证后提交到服务器端进行验证,服务器验证是查询数据库的记录,得到数据后,返回验证通过信息。

5.1.3 个人资料界面

用户登录后可进行修改个人信息,个人资料界面展示如图5.4个人资料界面图所示。

图5.4 个人资料界面图

5.1.4 家具详情界面

用户在家具详情界面可查看家具详情,可点击购买按钮进行购买操作,家具详情界面展示如图5.5家具详情界面图所示。

图5.5 家具详情界面图

5.1.5 购物车界面

用户可进购物车界面查看购物车家具信息,购物车界面展示如图5.6购物车界面图所示。点击收银台按钮时进入地址填写界面。

图5.6 购物车界面图

在用户点击加入购物车后,通过客户端验证后,提交数据到数据库。后台对用户信息进行保存操作,保存数据就,在数据库中可以查看到刚才插入的数据。

5.1.6 我的订单界面

用户在我的订单界面可查看订单信息,对已发货的订单可进行确认收货操作,我的订单界面展示如图5.8我的订单界面图所示。

图5.8 我的订单界面图

在订单列表中,通过后台查询方法,把所有的订单信息读取到集合对象,订单界面使用JAVA标签,把集合对象通过html的方式显示到界面。查询有两种类型,一个是查询所有的订单集合,也可以通过条件查询订单,实现的sql语句不同而已,最终实现的流程一样。

5.2后台功能模块的实现

5.2.1 管理员登录界面

管理员要想进入系统后台对系统进行管理操作,必须进行登录,管理员登录界面展示如图5.9管理员登录界面图所示。

图5.9 管理员登录界面图

5.2.3 家具管理界面

管理员可进行家具管理操作,可添加、删除和编辑家具信息,家具管理界面展示如图5.11家具管理界面图所示。

图5.11 家具管理界面图

点击家具管理链接,录入家具信息。在家具信息添加界面,填写信息后,通过客户端验证后,提交数据到数据库。后台对家具信息进行保存操作,保存数据就,在数据库中可以查看到刚才录入的数据。录入家具信息后,在家具列表中,通过后台查询方法,把所有的家具信息读取到集合对象,把集合对象通过html的方式显示到界面。查询有两种类型,一个是查询所有的家具集合,也可以通过条件查询家具,实现的sql语句不同而已,最终实现的流程一样。在列表中,可以对家具信息进行删除,删除前,需要提示信息,是否确定删除。这一步骤的提示属于客户端控制,当确定删除后,调用服务器端删除方法,实现数据库数据删除,并刷新家具列表。

5.2.4 家具分类管理界面

管理员可添加、编辑和删除家具分类信息,家具分类管理界面展示如图5-12家具分类管理界面图所示。

图5.12家具分类管理界面图

点击家具分类管理链接,录入家具分类信息。在家具分类信息添加界面,填写信息后,通过客户端验证后,提交数据到数据库。后台对家具分类信息进行保存操作,保存数据就,在数据库中可以查看到刚才录入的数据。录入家具分类信息后,在家具分类列表中,通过后台查询方法,把所有的家具分类信息读取到集合对象,把集合对象通过html的方式显示到界面。查询有两种类型,一个是查询所有的家具分类集合,也可以通过条件查询家具分类,实现的sql语句不同而已,最终实现的流程一样。在列表中,可以对家具分类信息进行删除,删除前,需要提示信息,是否确定删除。这一步骤的提示属于客户端控制,当确定删除后,调用服务器端删除方法,实现数据库数据删除,并刷新家具分类列表。

5.2.5 订单管理界面

管理员可进行订单管理操作,可查看所有订单信息,并可对其订单进行发货和删除操作,订单管理界面展示如图5.13订单管理界面图所示。

图5.13订单管理界面图

5.2.6会员管理界面

管理员可查看所有会员信息,并可修改会员资料以及删除操作,会员管理界面展示如图5-14 会员管理界面图所示。

图5-14 会员管理界面图

在会员列表中,通过后台查询方法,把所有的会员信息读取到集合对象,把集合对象通过html的方式显示到界面。查询有两种类型,一个是查询所有的会员集合,也可以通过条件查询会员,实现的sql语句不同而已,最终实现的流程一样。在列表中,可以对会员信息进行删除,删除前,需要提示信息,是否确定删除。这一步骤的提示属于客户端控制,当确定删除后,调用服务器端删除方法,实现数据库数据删除,并刷新会员列表。

DiscussjiajuxinxiController.java
package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
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.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.DiscussjiajuxinxiEntity;
import com.entity.view.DiscussjiajuxinxiView;

import com.service.DiscussjiajuxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 家具信息评论表
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-27 17:11:41
 */
@RestController
@RequestMapping("/discussjiajuxinxi")
public class DiscussjiajuxinxiController {
    @Autowired
    private DiscussjiajuxinxiService discussjiajuxinxiService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,DiscussjiajuxinxiEntity discussjiajuxinxi,
		HttpServletRequest request){
        EntityWrapper<DiscussjiajuxinxiEntity> ew = new EntityWrapper<DiscussjiajuxinxiEntity>();
		PageUtils page = discussjiajuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussjiajuxinxi), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,DiscussjiajuxinxiEntity discussjiajuxinxi, HttpServletRequest request){
        EntityWrapper<DiscussjiajuxinxiEntity> ew = new EntityWrapper<DiscussjiajuxinxiEntity>();
		PageUtils page = discussjiajuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussjiajuxinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( DiscussjiajuxinxiEntity discussjiajuxinxi){
       	EntityWrapper<DiscussjiajuxinxiEntity> ew = new EntityWrapper<DiscussjiajuxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( discussjiajuxinxi, "discussjiajuxinxi")); 
        return R.ok().put("data", discussjiajuxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(DiscussjiajuxinxiEntity discussjiajuxinxi){
        EntityWrapper< DiscussjiajuxinxiEntity> ew = new EntityWrapper< DiscussjiajuxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( discussjiajuxinxi, "discussjiajuxinxi")); 
		DiscussjiajuxinxiView discussjiajuxinxiView =  discussjiajuxinxiService.selectView(ew);
		return R.ok("查询家具信息评论表成功").put("data", discussjiajuxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        DiscussjiajuxinxiEntity discussjiajuxinxi = discussjiajuxinxiService.selectById(id);
        return R.ok().put("data", discussjiajuxinxi);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        DiscussjiajuxinxiEntity discussjiajuxinxi = discussjiajuxinxiService.selectById(id);
        return R.ok().put("data", discussjiajuxinxi);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody DiscussjiajuxinxiEntity discussjiajuxinxi, HttpServletRequest request){
    	discussjiajuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(discussjiajuxinxi);
        discussjiajuxinxiService.insert(discussjiajuxinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody DiscussjiajuxinxiEntity discussjiajuxinxi, HttpServletRequest request){
    	discussjiajuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(discussjiajuxinxi);
        discussjiajuxinxiService.insert(discussjiajuxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody DiscussjiajuxinxiEntity discussjiajuxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(discussjiajuxinxi);
        discussjiajuxinxiService.updateById(discussjiajuxinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        discussjiajuxinxiService.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<DiscussjiajuxinxiEntity> wrapper = new EntityWrapper<DiscussjiajuxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = discussjiajuxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

NewsServiceImpl.java
package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;


import com.dao.NewsDao;
import com.entity.NewsEntity;
import com.service.NewsService;
import com.entity.vo.NewsVO;
import com.entity.view.NewsView;

@Service("newsService")
public class NewsServiceImpl extends ServiceImpl<NewsDao, NewsEntity> implements NewsService {
	
	
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<NewsEntity> page = this.selectPage(
                new Query<NewsEntity>(params).getPage(),
                new EntityWrapper<NewsEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<NewsEntity> wrapper) {
		  Page<NewsView> page =new Query<NewsView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<NewsVO> selectListVO(Wrapper<NewsEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public NewsVO selectVO(Wrapper<NewsEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<NewsView> selectListView(Wrapper<NewsEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public NewsView selectView(Wrapper<NewsEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}

}

InterceptorConfig.java
package com.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import com.interceptor.AuthorizationInterceptor;

@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport{
	
	@Bean
    public AuthorizationInterceptor getAuthorizationInterceptor() {
        return new AuthorizationInterceptor();
    }
	
	@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
        super.addInterceptors(registry);
	}
	
	/**
	 * springboot 2.0配置WebMvcConfigurationSupport之后,会导致默认配置被覆盖,要访问静态资源需要重写addResourceHandlers方法
	 */
	@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/**")
        .addResourceLocations("classpath:/resources/")
        .addResourceLocations("classpath:/static/")
        .addResourceLocations("classpath:/admin/")
        .addResourceLocations("classpath:/front/")
        .addResourceLocations("classpath:/public/");
		super.addResourceHandlers(registry);
    }
}

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值