美食分享系统
摘 要
随着人们生活水平的提高,人们对美食的要求也越来越高,对各类美食信息需求越来越大。因此,结合计算机快速发展、普及,在此基础上制作一个页面简单、美观,功能实用的美食分享网站势在必行,满足用户分享美食的需求。
美食分享系统采用Java技术,Mysql数据库存储数据,基于Springboot框架开发。系统采用了模块化设计方法,根据用户的需求开发功能模块,方便了程序扩展维护,以便后期的更新。整个开发过程首先对系统进行需求分析,得出系统主要功能模块。接着对系统进行总体设计和详细设计。最后对系统进行了功能测试,并对测试结果进行了分析总结,得出系统的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为以后开发类似系统提供了借鉴和帮助。
本系统对美食从发布到展示进行科学化管理,实现了美食信息的最广泛共享,使美食信息可以通过计算机网络高效地完成发布,方便用户查询、发布美食信息,提高美食分享效率。
关键词:美食分享;Springboot框架;Mysql数据库
Food sharing system
Abstract
With the improvement of people’s living standards, people have higher and higher requirements for food, and there is an increasing demand for all kinds of food information. Therefore, combined with the rapid development and popularization of computers, it is imperative to make a food sharing website with simple, beautiful pages and practical functions on this basis, so as to meet the needs of users to share food.
The food sharing system adopts Java technology and MySQL database to store data, which is developed based on springboot framework. The system adopts modular design method and develops functional modules according to the needs of users, which facilitates the expansion and maintenance of the program for later update. The whole development process first analyzes the requirements of the system and obtains the main functional modules of the system. Then the overall design and detailed design of the system are carried out. Finally, the function test of the system is carried out, and the test results are analyzed and summarized. The shortcomings of the system and the areas that need to be improved are obtained, which not only provides convenience for the future system maintenance, but also provides reference and help for the future development of similar systems.
The system scientifically manages the food from release to display, and realizes the most extensive sharing of food information, so that the food information can be published efficiently through the computer network, which is convenient for users to query and publish food information and improve the efficiency of food sharing.
Key Words:Food sharing; Springboot framework; Mysql database
目 录
摘 要
Abstract
目 录
第1章 绪论
1.1开发背景与意义
1.2开发现状
1.3论文结构
第2章 主要技术和工具介绍
2.1 J2EE技术
2.2 MySQL 数据库
2.3 B/S结构
2.4 Springboot框架
2.5 MVVM模式
2.6 B/S体系工作原理
第3章 系统分析
3.1可行性分析
3.1.1经济可行性
3.1.2技术可行性
3.1.3操作可行性
3.2需求分析
3.3业务流程分析
3.4数据流程分析
第4章 系统设计
4.1开发环境
4.2系统结构设计
4.3主要功能模块设计
4.4数据库设计
4.4.1数据库设计概述
4.4.2概念设计
4.4.3表设计
第5章 系统实现
5.1登录模块的实现
5.2用户子系统模块的实现
5.2.1用户首页的实现
5.2.2注册模块的实现
5.2.3评论模块的实现
5.3管理员子系统模块的实现
5.3.1用户管理模块的实现
5.3.2密码修改模块的实现
5.3.3美食分类管理模块的实现
5.3.4美食分享管理模块的实现
第6章 系统测试
6.1软件测试
6.2功能测试
6.3测试结果
第7章 总结
致 谢
参考文献
第1章 绪论
1.1开发背景与意义
迅猛发展并日益成熟的网络已经彻底的影响了我们的方方面面。人们也确实真切的体会到了网络带给我们的便捷。本网站的设计理念在于作为一个美食网站,就是能够尽可能详细地展示、介绍各种美食信息,同时为广大美食爱好者提供一个良好的区域性美食主题网站。目的旨在涉及一种基于asp,net 及数据库网站的设计及实现,方便广大美食家及美食爱好者浏览。近两年来,一大批网站正吸引着人们的眼球。然而,除了有很少数的网站受到了投资者的青睐并且实现了进一步的发展之外,有很大得一部分网站正处于摸索甚至是挣扎的状态。在餐饮这一个与老百姓息息相关的传统领域,各种各样的网站呈现出了不同的风格。
随着生活质量的提高,对于饮食消费理性化,经营特色化和市场细分化的特点日益突现出来。越来越的年轻人成为消费的主力军,包括70后等年代的人们,而他们的选择也越来越主体化,希望可以品尝到一些有特色美食,那么在区域性美食主题网站里面,人们可以看到各种不同的美食,以及对于这些美食的评论,是否值得去试一试,而商家也可以在这个网站上分享自己餐厅的推荐美食,可以更新餐厅的地址,价格。让更多的惇人们了解到一份美食的详细信息,做到信息共享,丰富人们的闲暇时光。
网络信息时代在21世纪到来了,现代社会传播信息都是利用快速高效率的Internet。而且传播的信息量非常大,也是非常迅速的,人们通过浏览器来浏览信息,这种方式是最常用的,所以在这种方式的需求下形成了电子商务。它是指利用快捷、低成本、简单的电子通讯方式,买卖双方不出面也可以进行各种各样的商贸活动。电子商务真正的发展将是建立在Internet技术上。
1.2开发现状
近年来,互联网技术飞速发展,我们通过互联网可以了解到很多的信息,真正做到了“秀才不出门,尽知天下事”。而现在,80后,90后是互联网的使用的主力军,他们通过网络获取自己想要的消息,查阅仔细需要的信息,是非常便捷的一项技术,现在有很多的网站用于发布自己了解到的消息,例如:堆糖,same等一些主题网站,用于发现生活中的美好事物。而且企业对信息进行网络化管理的条件已经日趋成熟,而传统的通过电话和传真来处理信息的传统方式已经越来越难以满足企业的需求。建立基于网络的管理和销售信息系统,成为企业提高效率、降低成本、完善服务的有力保证。现在有很多的网站都是广泛的,很少有针对某一方面的主题网站,而对于餐饮业,由于一个行业本身的特性,它的流通性是非常高的,人们越来越要求可以实时的了解到自己想要的信息,可以随时随地的分享美食,也可以随时随地的了解到其他人用户分享到的美食信息,对于吃货的我们来说是很便捷的,而且现在的年轻人讲究的快捷,不需要花费很多的时间和精力去查找自己想要的信息,只求一步到位,开发这个网站,真是满足很多人的需求,使更多的可以方便的去了解信息。所以更对企业的效率提出了更高的要求。
微软的NET平台作为新一代的互联网平台,提供了支持未来计算的高效的Web服务开发工具。利用NET平台进行管理系统的开发成为此类系统未来开发的趋势。随着社会的进步,人们对食物的要求越来越高,不仅仅局限于吃饱,越来越多人追求的是好吃、美味的美食。迅猛发展并日益成熟的网络已经彻底的影响了我们的生活。人们真切的体会到了网络带给我们的诸多方便。现在各种团购美食的网站层出不穷。开发这个网站,是想在详细的展示和介绍各地方的美食信息,为中国的美食爱好者提供一个很好交流平台,使中国的美食文化可以得到更好地推广。
1.3论文结构
第一章是论文的绪论部分,主要介绍了课题的研究背景以及研究目的和意义。
第二章研究了美食分享系统所采用的开发技术和开发工具。
第三章研究了美食分享系统的需求分析,根据系统的特点,分析系统采用的体系结构及开发方法,以及该系统的运行环境,并分析了业务流程,绘制了业务流程以及数据流程。
第四章是对系统的详细设计进行说明。
第五章是系统的具体实现,介绍系统的各个模块的具体实现。
第六章在前几章的基础上对系统进行测试和运行。
最后对系统进行了认真的总结,以此对未来有一个新的展望。
第2章 主要技术和工具介绍
2.1J2EE技术
人可以掌握多门外语,而一个计算机科学家精通的大多是编程语言,它不是人类的自然语言,比如C语言、Java、Perl等等。由于不同的公司开发出的“中间件”不够规范,所以Sun公司推出J2EE,用这个标准来解决弊病。它提供了良好的机制,让每个层次允许与之相对的服务器、组件运行,使得系统的搭建稳定可用、开发高效、维护方便。
2.2 MySQL 数据库
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。因为其自身的功能相当强大,目前已成为最为流行的数据库软件之一]。
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
2.3 B/S结构
系统计划采用BS模式,是因为比传统的C/S结构具有明显的优越性。B/S模式也就是浏览器/服务器模式,它的界面部分是在浏览器端展示,而主要工作是由服务器端进行实现的,用户的请求由浏览器端提交给服务器端进行处理,而服务器将处理结果反馈给浏览器端,在浏览器端界面描画给用户查看。采用B/S模式不仅可以避免用户必须安装专业软件才能开发系统或者访问系统的局限性,而且更加便利。
2.4Spring boot框架
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平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。
2.5 MVVM模式
MVVM模式是常用的开发模式,主要是在代码实现上将其分为M层、V层和C层。
视图(View)代表用户交互界面,一个 Web 应用就可能有很多的界面,在 MVVM 模式中,视图仅仅处理的只有数据采集、处理,还有用户的请求, 并不包括业务流程的处理,业务流程由模型(Model)来处理。
模型(Model)就是业务流程/状态的处理及业务规则的制定。模型处理业务流程的过程其它层是无法看见了的,它就像黑箱子,在接受视图请求的数据之后,然后返回最终的处理结果。MVVM 最主要的核心就是业务模型的设计,一个典型的应用例子就是目前流行的 EJB 模型,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但是它不能作为应用设计模型的框架。
控制器(Controller)可以理解为接收用户的请求,然后视图和模型匹配在一起,一起再完成用户请求。它有非常明显的作用在划分控制层上,可以很清晰地告诉你,它就是一个分发器,选择什么样的模型、视图,可以完成用户的什么样的请求。控制层不做所有的数据处理,比如说:用户点击一个连接,控制层接受到请求之后,并不处理业务信息,它只是向模型传递用户的信息,同时告诉模型做什么,然后选择符合需求的视图返回给用户。
2.6 B/S体系工作原理
B/S架构采取浏览器请求,服务器响应的工作模式。
用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;
而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;
从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。
在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。
第3章 系统分析
3.1可行性分析
分析用户需求和数据需求,得到一个方案,然后设定系统的开发方案,为每个功能模块设计出物理设计方案,开发本系统的是否可行?本文从技术上、操作上和经济上对本系统的开发进行可行性分析。
3.1.1经济可行性
美食分享交流系统属于一个工具型的系统,它可以节省工作人员大量数据收集、方便快捷,能够极大地提高工作效率,最大限度的降低管理员的工作量,使管理尽量简便,同时促进电影管理的信息化、现代化,及时提供必要的信息统计。因为整个系统采用Springboot+MVVM+Mysql组合,这几个软件都是免费开源的,系统开发所需的费用是比较低的,由于系统并不复杂,其运行与培训费用也不会占用很多资金,可以预见系统完成后可以带来较大的经济效益。
3.1.2技术可行性
本系统采用Windows10作为操作平台。数据库开发平台选用MySQL,该数据库管理系统在Windows7和Windows8/10上都能运行,并提供数据库之间的数据复制功能,可代替现有系统单据数据的手工传递工作.
3.1.3操作可行性
本系统使用的是现流行的开发语言,即Springboot框架。同时所有的信息都是以网页的形式展示,系统中的信息都可以在后台操作数据库达到数据更新的效果。用户只需要会计算机的基本操作或者会上网就可以使用本系统。系统布局较简单,功能操作不复杂,完全符合现代市场需求。
3.2需求分析
针对现存的问题和需要,通过功能需求的分析,特建立了数字化、信息化的影视推荐与交流系统。
本系统主要包含了用户管理、美食分类、美食推荐管理、公告栏管理、美食资讯管理、美食交流等多个功能模块。下面分别简单阐述一下这几个功能模块需求。
表3-1功能需求表
编号 | 功能名称 | 功能描述 |
|
用户登录 | 保证用户通过身份验证进入系统进行操作 |
|
用户注册 | 没有账号并想使用系统的用户可以使用用户注册,检测用户的注册内容,信息通过检测之后成为本系统的用户 |
|
美食搜索 | 用户可以通过各种各样的关键字模糊搜索美食信息 |
|
评论添加 | 普通用户选择要评论的信息进行添加评论 |
|
评论管理 | 管理员对用户的评论信息进行管理,包括删除、修改 |
|
修改个人信息 | 用户可以根据自己当前的情况修改个人的信息 |
|
后台登录 | 仅管理员能够登录后台 |
|
添加美食信息 | 管理员添加美食信息 |
|
编辑美食信息 | 管理员修改美食信息 |
|
删除美食信息 | 管理员删除美食信息 |
|
添加资讯信息 | 管理员添加资讯信息 |
|
编辑资讯信息 | 管理员修改资讯信息 |
|
删除资讯信息 | 管理员删除资讯信息 |
|
论坛交流 | 论坛提供用户一个互相交流的论坛,管理员管理论坛版块,用户发布帖子、查看他人帖子、回复他人帖子 |
3.3业务流程分析
经过对系统功能的分析,调查,研究,总结出美食分享系统主要实现的是对¥留言信息、用户信息等管理功能。这样,可以对该系统绘制业务流程图。
系统的业务流程如下图所示。
图3-2系统业务流程图
3.4数据流程分析
根据上文所述的业务流程特点,首先对各个方面总的数据处理环节和外部实体进行了描述, 根据自顶向下原则,逐层分解功能,这个过程产生DFD图。
零层数据流程是流程中最抽象的一层,它包括了注册与登录管理、用户功能管理和检索维护管理等功能模块,在登录注册模块使用到的数据存储有用户账户信息文档、用户信息文档,用户功能管理模块需要的存储是用户动态信息文档、留言信息文档、电影信息文档,检索维护是通过以上这些文档信息通过关键词进行搜索。
系统的0层数据流图如下图所示。
图3-4系统数据流图(0层)
一层数据流程图是对零层数据流程图的细化,将登录与注册细分为¥填制登录注册信息和完善信息,用户功能管理细分为用户基本功能管理和用户特色功能管理。
系统的1层数据流图如下图所示。
图3-5系统数据流图(1层)
二层数据流程是对一层数据流层图中填写登录注册信息、用户基本功能和用户特色功能的细化。即:填写登录注册信息细化为填制信息、后台审核,用户基本功能细化为美食推荐、在线评论,用户特色功能细化为美食资讯浏览、美食点评、收藏美食、美食推荐、发表评论、美食交流。
第4章 系统设计
4.1系统结构设计
本系统使用的角色主要有系统管理员、普通用户,本系统分为系统前台和系统后台,首先在系统前台,游客用户可以经过账号注册,管理员审核通过后,用账号密码登录系统前台,进行美食资讯浏览、美食推荐、美食点评、收藏、发表评论、美食交流,在前台用户可以通过标题和类别进行前台信息的搜索,普通用户可以登录个人中心进行个人资料管等功能。
后台主要由管理员使用,以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用用户管理、美食分类管理、美食资讯管理、收藏评论管理、美食交流管理等功能操作。同时管理员可以通过关键字搜索可以搜索相应的信息,打印各种详细信息,导出各类信息列表至excel中。
系统的功能结构图如下图所示。
图4-1系统功能结构图
4.2主要功能模块设计
- 用户管理模块
该模块包括普通用户管理和系统用户管理,系统用户主要是普通管理员,对用户信息进行管理,只有普通用户才可在该系统上进行相应的操作。用户对个人信息可进行修改;管理员可对自己的个人信息进行维护,同时可对用户的密码信息进行修改,也可删除系统中的用户
- 登录模块
根据用户输入的 Id 和密码到数据库中查找该用户,如果未能找到该用户则做出 提醒“用户名或密码错误”,如果找到该用户,则要判断用户的类别然后根据用户类别进入相应的页面。
- 注册模块
当新用户第一次登陆时,要求注册账号。在登陆页点击注册后进入用户注册界面,新用户需要填写本人的手机号、用户名、设置登录密码,之后单击注册,则完成了初步信息的填写
- 美食资讯管理模块
(1)美食添加:必须填写美食名称、美食类型、海报、导演、主演、制片地区、语言、片长,美食编号必须是唯一的, 提交后判断某一项是否为填写, 如果是则做出提醒, 填写符合规则后方可添加到数据库。
(2)美食查询:可以根据美食编号等信息对美食进 行查询,查询结果可能有多个。
(3)美食修改:除了美食编号外,其他信息均可以修改。
(4)美食删除:首先找到要删除的美食(一个或多个),然后删除即可。
- 美食推荐管理模块
(1)美食推荐添加:必须填写标题、内容,且编号必须是唯一的,各项都不能为空。
(2)美食推荐查询:该功能能够显示美食推荐的基本信息,可以根据美食推荐的编号等信息对美食推荐做出查询。
(3)美食推荐修改:如果美食推荐需要被修改,可修改的信息包括美食推荐内容等基本信息,但是编号是唯一、固定 的,不能被修改。
(4)美食推荐删除:首先找到要删除的美食推荐(一个或多个),然后删除即可。
- 美食分享交流模块
用户可以选中某一部美食进行线上分享交流,提交美食信息,管理员在后台可以查看或搜索用户发表,同时审核发表内容信息。
- 评论信息管理模块
评论模块分为用户评论和管理员管理评论信息,用户登录系统后,选择想要评论的美食,添加评论,管理员查询该评论信息,并有权对其管理,包括删除。
4.3数据库设计
4.3.1数据库设计概述
为了实现系统的功能设计,就要有相应的数据库表设计。根据系统的功能设计要求为各个数据库表设计字段、数据类型、是否为空等的相关信息。在实际调研和需求分析的基础上,对该系统设计数据库。再有系统的需求分析可以看出,本系统有两个角色:普通用户和管理员,他们分别在系统的运行和使用中起着不同的作用。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。数据库中表的设计主要考虑两个方面:一是整个管理系统的所有表中的数据要共享性高、冗余度小、占用最可能小的存储空间。
4.3.2概念设计
概念设计是整个数据库设计的关键,在概念设计阶段,由需求分析得到了E-R模型。E-R图是识别功能模型与数据模型间关联关系的,在主题数据库的抽取和规范化的过程中,采用的是简化的E-R图表示方法,从而避免过繁过细的E-R图表示影响规划的直观和可用性。是对现实世界的抽象和概括,是数据库设计人员进行数据可设计的有力工具,能够方便直接地表达应用中的各种语义知识,令一方面它简单、清晰、易于用户理解。
系统总体ER图如下图所示。
图4-10系统总体ER图
4.3.3表设计
概念模型是独立于任何一种数据模型的信息结构。将概念模型转换成逻辑模型,转换的一般原则如下:
(1)一个实体性转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
(2)一个1:1联系可以转化为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
(3)一个1:n联系可以转化为一个独立的关系模式,也可以与n端对应的关系模式合并。
(4)一个m:n联系转化为一个关系模式。
本系统设计如下多个表,包括电影表、资讯表、评论表、论坛表。
group表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
group_id | mediumint | 8 | 是 | 是 | 用户组ID |
display | smallint | 4 | 是 | 否 | 显示顺序 |
name | varchar | 16 | 是 | 否 | 名称 |
description | varchar | 255 | 否 | 否 | 描述 |
source_table | varchar | 255 | 否 | 否 | 来源表: |
source_field | varchar | 255 | 否 | 否 | 来源字段: |
source_id | int | 10 | 是 | 否 | 来源ID: |
register | smallint | 1 | 否 | 否 | 注册位置: |
create_time | timestamp | 0 | 是 | 否 | 创建时间: |
update_time | timestamp | 0 | 是 | 否 | 更新时间: |
registered_user表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
registered_user_id | int | 11 | 是 | 是 | 注册用户ID |
user_number | varchar | 64 | 是 | 否 | 用户编号 |
age | varchar | 64 | 否 | 否 | 年龄 |
gender | varchar | 64 | 否 | 否 | 性别 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
sharing_classification表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
sharing_classification_id | int | 11 | 是 | 是 | 分享分类ID |
sharing_type | varchar | 64 | 否 | 否 | 分享类型 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
food_sharing表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
food_sharing_id | int | 11 | 是 | 是 | 美食分享ID |
title | varchar | 64 | 否 | 否 | 标题 |
sharing_type | varchar | 64 | 否 | 否 | 分享类型 |
user_number | int | 11 | 否 | 否 | 用户编号 |
cover | varchar | 255 | 否 | 否 | 封面 |
share_content | longtext | 0 | 否 | 否 | 分享内容 |
hits | int | 11 | 是 | 否 | 点击数 |
praise_len | int | 11 | 是 | 否 | 点赞数 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
comment表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
comment_id | int | 11 | 是 | 是 | 评论ID: |
user_id | int | 11 | 是 | 否 | 评论人ID: |
reply_to_id | int | 11 | 是 | 否 | 回复评论ID |
content | longtext | 0 | 否 | 否 | 内容: |
nickname | varchar | 255 | 否 | 否 | 昵称: |
avatar | varchar | 255 | 否 | 否 | 头像地址 |
create_time | timestamp | 0 | 是 | 否 | 创建时间: |
update_time | timestamp | 0 | 是 | 否 | 更新时间: |
source_table | varchar | 255 | 否 | 否 | 来源表: |
source_field | varchar | 255 | 否 | 否 | 来源字段: |
source_id | int | 10 | 是 | 否 | 来源ID: |
第5章 系统实现
5.1登录模块的实现
美食分享系统的平台入口就是用户登录功能,在浏览器输系统地址跳转至系统前台首页,系统前台的登录窗口在首页左面,包括用户名、密码、权限、验证码,除了权限框使用下拉列表,其他使用文本框,验证码下方为登录和重置两个按钮,用户点击登录按钮,则进行登录验证。
登录流程图如下所示。
图5-1登录流程图
系统登录界面如下所示。
图5-2系统登录
登录关键代码如下。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping(“login”)
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info(“[执行登录接口]”);
String username = data.get(“username”);
String email = data.get(“email”);
String phone = data.get(“phone”);
String password = data.get(“password”);
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && “”.equals(username) == false){
map.put(“username”, username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && “”.equals(email) == false){
map.put(“email”, email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && “”.equals(phone) == false){
map.put(“phone”, phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, “账号或密码不能为空”);
}
if (resultList == null || password == null) {
return error(30000, “账号或密码不能为空”);
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,”用户不存在”);
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put(“name”,byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,”用户组不存在”);
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = “select examine_state from “+ userGroup.getSourceTable() +” WHERE user_id = ” + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,”用户不存在”);
}
if (!res.equals(“已通过”)){
return error(30000,”该用户审核未通过”);
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,”用户非可用状态,不能登录”);
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll(“-“, “”));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put(“token”, accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put(“obj”,user);
return success(ret);
} else {
return error(30000, “账号或密码不正确”);
}
}
5.2用户子系统模块的实现
5.2.1用户首页的实现
在美食分享的用户首页,主要有用户登录页面,以及¥的展示等,在首页的导航栏中可看出,该系统主要有¥等主要模块。
如下图所示为系统的用户首页界面。
图5-3用户首页
5.2.2注册模块的实现
这块程序首先根据所取得的表单中的用户名查询数据库中是否有相同用户名的记录,如果数据库存在相同的用户名,则提示用户名已存在,否则,打开记录集并添加一条新的记录,然后系统默认要给用户发送注册成功的提醒。
用户注册流程图如下所示。
图5-4用户注册流程图
用户注册界面如下图所示。
图5-5用户注册
用户注册关键代码如下。
/**
* 注册
* @param user
* @return
*/
@PostMapping(“register”)
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put(“username”,user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, “用户已存在”);
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = “user_id”)
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = “state”)
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = “user_group”)
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = “login_time”)
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = “phone”)
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = “phone_state”)
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = “username”)
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = “nickname”)
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = “password”)
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = “email”)
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = “email_state”)
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = “avatar”)
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = “create_time”)
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
private Timestamp createTime;
@Basic
@Transient
private String code;
}
5.2.3评论模块的实现
用户点击某个美食点进入美食详细页,点击评论按钮进入评论页,提交评论信息,成功发布评论,管理员管理用户的评论信息。
用户评论流程图如下所示。
图5-6用户评论流程图
用户评论界面如图所示。
图5-6用户评论
5.3管理员子系统模块的实现
5.3.1用户管理模块的实现
系统用户管理主要是对新用户的添加和旧用户的删除。新用户的添加主要是指添加用户名称并确定其密码;旧用户的删除也是从下拉菜单中找到对应的用户名称将其删除。不论是新用户添加还是旧用户的删除,这个权限只有管理员具有。
系统用户管理界面如下图所示。
图5-7系统用户管理
5.3.2密码修改模块的实现
密码修改是对当前登录用户的密码进行修改,在用户登录后右上方也能进行密码修改。
密码修改流程图如下所示。
图5-8密码修改流程图
密码修改界面如图所示。
图5-9修改密码
5.3.3美食分类管理模块的实现
美食信息添加功能主要指对其美食名称、描述、美食类型、美食图片、分享内容等一些基本信息的添加、删除和修改。美食查询能根据美食id、名称、标题等多种条件对美食信息进行查询。
美食分类管理流程图如下所示。
图5-10美食分类管理流程图
美食分类如下图所示:
图5-11美食分类
美食分类管理关键代码如下所示。
@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);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder(“”);
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer(“INSERT INTO “);
sql.append(“`”).append(table).append(“`”).append(” (“);
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append(“`”+humpToLine(entry.getKey())+”`”).append(“,”);
}
sql.deleteCharAt(sql.length()-1);
sql.append(“) VALUES (“);
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append(“‘”).append(entry.getValue()).append(“‘”).append(“,”);
}else {
sql.append(entry.getValue()).append(“,”);
}
}
sql.deleteCharAt(sql.length() – 1);
sql.append(“)”);
log.info(“[{}] – 插入操作:{}”,table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
5.3.4美食分享管理模块的实现
用户根据自己兴趣搜索美食类型,前台显示美食信息,信息添加功能主要指对其标题、内容等一些基本信息的添加、删除和修改。用户可以在线进行美食分享,做法等操作等,流程图如下所示。
图5-13资讯管理流程图
美食分享表如下图所示:
图5-14美食分享表
美食分享表关键代码如下所示。
@RequestMapping(“/get_list”)
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
第6章 系统测试
6.1软件测试
在设计系统的过程中,存在一些错误是不可避免的。For语句语法错误,运行的提示,并要求立即纠正,因此,容易发现和纠正错误等。但另一种类型的错误是程序执行时由于不正确的操作或对某些数据计算公式的逻辑错误导致错误的结果。这种错误的隐蔽性强,有时会出现,有时不出现,因此,这种误差动态屏幕耗时。
6.2功能测试
功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项检测,检查产品是否达到用户要求的功能。下面列出的测试用例是基于需求分析阶段的用例描述而进行的设计。
下面将通过表格的形式介绍针对本系统每个功能模块所进行的功能测试。
1.注册模块功能测试,如下表所示。
表6-1注册测试
测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
用户注册 | 用户打开注册界面 | 输入合适的用户名,密码为空 | 无法注册 | 提示密码不得为空,无法注册 | 正常 |
|
用户注册 | 用户打开注册界面 | 输入不合适的用户名、2次相同的密码 | 无法注册 | 提示用户注册失败 | 正常 |
|
用户注册 | 用户打开注册界面 | 输入合适的用户名,两次密码不一致 | 无法注册 | 提示用户名不得为空,无法注册 | 正常 |
|
用户注册 | 用户打开注册界面 | 输入的用户名为空 | 无法注册 | 提示用户名不能为空 | 正常 |
|
用户注册 | 用户打开注册界面 | 输入合适的用户名和两次相同的密码 | 正常注册 | 注册成功 | 正常 |
2.登录模块功能测试,如下表所示。
表6-2登录测试
测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
登录系统 | 用户打开登录界面 | 输入正确的用户名,密码为空 | 无法登录 | 提示密码不得为空,无法登录 | 正常 |
|
登录系统 | 用户打开登录界面 | 输入正确的用户名,输入错误密码 | 无法登录 | 提示密码不正确,无法登录 | 正常 |
|
登录系统 | 用户打开登录界面 | 输入正确的密码,用户名为空 | 无法登录 | 提示用户名不得为空,无法登录 | 正常 |
|
登录系统 | 用户打开登录界面 | 输入正确的密码,错误的用户名 | 无法登陆 | 提示用户名不正确,无法登录 | 正常 |
|
登录系统 | 用户打开登录界面 | 用户名及密码都为空 | 无法登录 | 提示用户名和密码不得为空,无法登录 | 正常 |
|
登录系统 | 用户打开登录界面 | 用户名及密码都输入错误 | 无法登录 | 提示用户名和密码正确,无法登录 | 正常 |
|
登录系统 | 用户打开登录界面 | 输入正确的用户名和密码 | 正常登录 | 进入主界面 | 正常 |
3.修改密码模块功能测试,如下表所示。
表6-3修改密码测试
测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
修改密码 | 用户打开修改密码界面 | 输入正确初始密码和2次相同的新密码 | 密码修改成功 | 密码修改成功 | 正常 |
|
修改密码 | 用户打开修改密码界面 | 输入错误的原始密码 | 密码修改失败 | 密码修改失败 | 正常 |
|
修改密码 | 用户打开修改密码界面 | 输入正确初始密码和2次不相同的新密码 | 密码修改失败 | 密码修改失败 | 正常 |
4.评论功能测试,如下表所示。
表6-4评论测试
测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
在线评论 | 用户已登录,打开评论界面 | 输入评论标题、内容等信息 | 评论成功 | 评论成功,新评论成功显示 | 正常 |
|
在线评论 | 用户已登录,打开评论界面 | 用户未输入评论标题和内容 | 评论失败 | 评论失败 | 正常 |
5.个人中心功能测试,如下表所示。
表6-5个人中心测试
测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
用户信息修改 | 用户已登录,进入个人中心,且打开个人信息界面 | 输入内容不合法或必填项为空 | 修改失败 | 提示输入内容非法 | 正常 |
|
用户信息修改 | 用户已登录,进入个人中心,且打开个人信息界面 | 输入内容合法 | 修改成功 | 提示修改成功 | 正常 |
6.资讯管理功能测试,如下表所示。
表6-6资讯管理测试
测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
资讯信息添加 | 用户已登录,打开资讯添加界面 | 输入资讯标题、内容等信息 | 资讯添加成功 | 资讯添加成功,新资讯成功显示 | 正常 |
|
资讯信息添加 | 用户已登录,打开资讯添加界面 | 用户未输入资讯标题和内容 | 资讯添加失败 | 资讯添加失败 | 正常 |
7.美食分类管理功能测试,如下表所示。
表6-7美食分类管理测试
测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
美食分类信息添加 | 用户已登录,打开美食分类添加界面 | 输入美食分类标题、内容等信息 | 美食分类添加成功 | 美食分类添加成功,新美食分类成功显示 | 正常 |
|
美食分类信息添加 | 用户已登录,打开美食分类添加界面 | 用户未输入美食分类标题和内容 | 美食分类添加失败 | 美食分类添加失败 | 正常 |
7.美食点评功能测试,如下表所示。
表6-8美食点评测试
测试用例编号 | 测试用例描述 | 前提条件 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|
美食点评 | 用户已登录,打开美食点评界面 | 输入美食标题、内容等信息 | 美食点评成功 | 美食点评成功 | 正常 |
|
美食点评 | 用户已登录,打开美食点评界面 | 用户未输入美食标题和内容 | 美食点评失败 | 美食点评失败 | 正常 |
6.3测试结果
通过对美食分享整个系统功能的测试,发现了许多无法实现的功能并及时得到改正和实现,为美食推荐与交流系统的发布奠定了基础。此系统中各模块的功能都基本实现,不过还存在着许多不足,在以后的学习中通过测试还需加强和完善。
第7章 总结
本文主要研究了美食分享系统的设计与实现。本次论文主要研究的内容主要包括:
(1)分析研究了本课题的开发背景和课题的研究意义。
(2)对此次毕业设计进行了详尽的需求分析,并根据实际需求,分析了其数据字典。
(3)概要设计了系统的功能模块,详细设计了系统所使用的数据库表,并研究了该系统的ER图。
(4)详细介绍了该平台要实现的功能,构建了此系统。
从技术上来说,整个系统的基本实现环境是Win10操作系统,数据库的建立使用MySQL软件,系统开发使用Springboot框架,用Java语言进行系统的设计和开发,图片采用Photoshop CS6处理,使整个系统在视觉上和功能上尽量做到完整和美观。系统界面设计美观大方,功能较为完整,技术较先进且具有一定现实意义。
在摸索中前进。对MySQL数据库的使用,如何设计后台表结构,使得系统更加合理,健壮,是面临的又一个难题,通过查找相关资料,以及在充分的需求分析基础上,解决了以上问题。若条件允许,系统的功能模块能够更丰富,某些模块的功能也能更完善,用户之间权限的处理逻辑性也能更强。今后在改善客观条件的情况下,本系统还需要进一步进行研究开发。
致 谢
经历了几个月的毕业设计之旅,遭遇了无数难题与挑战,几经波折后,近乎要摧毁我当初选择这个题目的信心。好在我的导师一直坚持对我悉心支持,并对此套系统提出了诸多改善意见,解决了我所遇到的众多难题,电影点评平台也得以在这样的境况下圆满完成。老师给予了我正确的指导和极大的帮助,这不仅仅使我获得了足够多的开发经验,更使我在系统设计过程中少走了许多的弯路,巩固了以前所学的知识,提高了应用能力,这使我对以后的工作也信心满满。
敬业的工作态度都给予了我极大的鼓励与帮助。对于提出的问题和遇到的困难都给予细心的解答和真诚的帮助,再次表示衷心的感谢。我还要对学院及系里的各位领导、老师们表示谢意,在这次毕业论文期间给我们提供了良好的学习和生活环境,并给予软硬件的支持,使得我的系统设计工作及论文撰写工作更加顺畅、便利。最后我还要感谢所有为我的毕业设计提出指导意见的各位老师、同学。
参考文献
[1]姜广秀.中华美食是国际青年交流柔软且强大的力量[J].国际人才交流,2021(12):58-60.
[2]袁江琛.基于ASP.NET+三层架构的美食分享网站的设计与实现[J].信息与电脑(理论版),2021,33(18):164-166.
[3]依力·吐尔孙,艾孜尔古丽.基于Python的美食数据爬取及可视化研究[J].电脑知识与技术,2021,17(10):19-20+29.
[4]鲜易洲,杨蕊,吴蓉,巩培桢,吴丽丽.时食美食分享系统的设计与分析[J].电脑知识与技术,2021,17(09):85-87.
[5]吴晨,毛玉萃,张乐.一款基于SSM的中华美食网站的设计与实现[J].电脑知识与技术,2020,16(19):70-72.
[6]顾捷.舟山紫菜“海味”美食分享[J].农村百事通,2020(01):42-43.
[7]黄安.基于PHP+Mysql技术的网站设计与实现——以美食网站系统的设计为例[J].轻纺工业与技术,2019,48(07):168-170.
[8]Ma Yide,Peng Xue.Video Sharing Sites’ Fault Identification in Indirect Copyright Infringements[J].Contemporary Social Sciences,2019(03):109-127.
[9]夏菁. 移动互联网时代青年的美食社交[D].安徽大学,2019.
[10]闫薇.美食网站的设计与实现[J].数码世界,2019(07):107-108.
[11]于文强. 面向B2C商业模式的美食推荐系统设计与实现[D].哈尔滨工业大学,2018.
[12]刘琼宇,刘擎业,宋易欣,朱磊,宋雪瑶.互联网美食平台发展现状及对策——以菜谱类美食应用为例[J].现代食品,2018(01):31-35.
[13]卢红霞,方晓亮.社会化顾客价值在美食分享网站的应用研究[J].物流工程与管理,2018,37(11):230-233.
[14]宗英健. 基于LBS应用的美食推荐类互联网产品设计[D].扬州大学,2018.
[15]李彤.基于PHP和MySQL的小型应用设计——以Android的美食和出行信息分享平台为例[J].计算机光盘软件与应用,2018,17(10):263+265.