美食推荐系统的设计与实现

目 录
1绪论 1
1.1课题背景及意义 1
1.2课题研究现状 1
1.3课题主要研究内容 2
2相关技术 3
2.1系统开发模式 3
2.2 JSP开发技术 4
2.3 MySQL数据库 5
2.4 Html5 6
2.5 DIV+CSS简介 6
2.5个性化推荐技术 7
3系统分析 10
3.1系统可行性分析 10
3.2系统功能需求分析 10
3.3系统流程分析 10
4系统设计 12
4.1总体设计原则 12
4.2系统功能结构设计 12
4.3系统数据库设计 13
5 系统实现 16
5.1 Html5网页前端 16
5.1.1注册登录模块 16
5.1.2首页餐厅美食推荐列表模块 17
5.1.3热销推荐模块 18
5.2后台管理端 20
5.2.1管理员登录模块 20
5.2.2菜品管理模块 21
6 系统测试 23
6.1 软件测试的目的和原则 23
6.2 测试环境 24
6.3 软件测试 24
总结 26
参考文献 27
致谢 28

课题设计推荐系统是一款美食推荐系统,该系统是基于C/S+B/S模式来设计,技术上采用Html5+JSP网页技术+个性化推荐技术开发,利用Java技术来实现,通过MySQL数据库来存取美食推荐系统相关的信息,Html5注册用户和商家用户可餐厅美食推荐列表、购物车订单及个人中心等,后台管理端可对菜品信息、菜品类别信息、优惠资讯管理、订单管理、统计及用户管理等。
3系统分析
3.1系统可行性分析
(1)技术可行性:开发这套河池学院美食推荐系统B/S架构的Java+SSM+HTML技术来实现;以Html5开发者工具进行开发,采用MySQL数据库来储存平台系统数据,使用最经典的协同过滤算法来推荐排名,以上的Html5和网站开发组合已被大量的Html5应用所证明,运行稳定可靠,可作为学院美食推荐运算推荐的开发技术,因此技术上可行。
(2)经济可行性:Html5是集合在上的功能,所以并不需要安装或者是下载,只需要人力物力的投入,时间上也合适,不需要很多额外支出,后期可以通过推广商铺来收取一定的利益,因此具有经济可行性。
(3)操作可行性:本系统实现了用户与数据库的互动,界面简单友好,操作方便。能够为用户提供更加具体的商铺数据。与此同时对于许多客户来说,Html5不占用手机的内存,而且也不受手机系统的限制,本文转载自http://www.biyezuopin.vip/onews.asp?id=14103可以使用起来特别的快捷,具有操作可行性。
(4)法律可行性:是合法的研究方向课题,符合法律要求。
系统可行性分析从技术可行性、经济可行性、运行可行性以及法律可行性等方面分析。
3.2系统功能需求分析
课题设计美食推荐系统包括Html5前端和后台管理端两个部分,注册用户和商家用户可餐厅美食推荐列表、购物车订单及个人中心等,后台管理端可对菜品信息、菜品类别信息、优惠资讯管理、订单管理、统计及用户管理等。
3.3系统流程分析
登录是使用该美食推荐系统的入口,只有合法用户方可使用软件,同时系统会根据用户属性分配不同的用户权限,进入不同的业务界面操作不同的业务模块。

package com.share.spark.project.sparkimport com.share.spark.project.dao.CourseClickCountDAO
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.log4j.{Level, Logger}
import org.apache.spark.mllib.recommendation.{ALS, Rating}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}/*** 使用Spark 和 Spark Streaming 分别对用户产生离线和实时的推荐结果*/
object FoodRecommendStreamingApp {def main(args: Array[String]): Unit = {if (args.length != 4) {System.err.println("Usage: KafkaReceiverWordCount <zkQuorum> <group> <topics> <numThreads>")System.exit(1)}//设置日志提示等级Logger.getLogger("org.apache.spark").setLevel(Level.WARN)//args为 hadoop:2181 test streamingtopic 1val Array(zkQuorum, group, topics, numThreads) = argsval sparkConf = new SparkConf().setAppName("FoodRecommendStreamingApp").setMaster("local[2]").set("spark.akka.frameSize", "2000").set("spark.network.timeout", "1200")val sparkContext = new SparkContext(sparkConf)val hbaseConf = HBaseConfiguration.create()hbaseConf.set("hbase.zookeeper.quorum", "hadoop")hbaseConf.set("hbase.zookeeper.property.clientPort", "2181")hbaseConf.set("zookeeper.session.timeout", "6000000")println("\n=====================step 2 load data==========================")//加载HBase中的数据//读取数据并转化成rddhbaseConf.set(TableInputFormat.INPUT_TABLE, "ratings")val ratingsData = sparkContext.newAPIHadoopRDD(hbaseConf, classOf[TableInputFormat],classOf[ImmutableBytesWritable],classOf[Result])val hbaseRatings = ratingsData.map { case (_, res) =>val foodId = Bytes.toString(res.getValue(Bytes.toBytes("info"), Bytes.toBytes("fid")))val rating = Bytes.toString(res.getValue(Bytes.toBytes("info"), Bytes.toBytes("rating")))val userId = Bytes.toString(res.getValue(Bytes.toBytes("info"), Bytes.toBytes("uid")))Rating(userId.toInt, foodId.toInt, rating.toDouble)}.cache()val numTrainRatings = hbaseRatings.count()println(s"[DEBUG]get $numTrainRatings train data from hbase")val rank = 10val lambda = 0.01val numIter = 10//第一次运行,初始化用户的推荐信息println("\n=====================system initiallizing...==========================")println("\n[DEBUG]training model...")val firstTrainTime = System.nanoTime()val model = ALS.train(hbaseRatings, rank, numIter, lambda)val firstTrainEndTime = System.nanoTime() - firstTrainTimeprintln("[DEBUG]first training consuming:" + firstTrainEndTime / 1000000000 + "s")println("\n[DEBUG]save recommended data to hbase...")val firstPutTime = System.nanoTime()//为每一个用户产生初始的推荐食物,取top10for (i <- 1 to 60) {val topRatings = model.recommendProducts(i, 10)var recFoods = ""for (r <- topRatings) {val rating = r.rating.toString.substring(0, 4)recFoods += r.product + ":" + rating + ","}CourseClickCountDAO.put("users", i.toString, "info", "recFoods", recFoods.substring(0, recFoods.length - 1))}val firstPutEndTime = System.nanoTime() - firstPutTimeprintln("[DEBUG]finish job consuming:" + firstPutEndTime / 1000000000 + "s")//实时推荐引擎部分println("\n=====================start real-time recommendation engine...==========================")val streamingTime = 120println(s"[DEBUG]The time interval to refresh model is: $streamingTime s")//接受实时的用户行为数据//    val streamingContext = new StreamingContext(sparkContext, Seconds(streamingTime))//    val ssc = new StreamingContext(sparkContext, Seconds(60))val ssc = new StreamingContext(sparkContext, Seconds(10))val topicMap = topics.split(",").map((_, numThreads.toInt)).toMap// TODO... Spark Streaming 如何对接 Kafkaval logs = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap).map(_._2)val cleanData = logs.map(line => {val infos = line.split("::")Rating(infos(0).toInt, infos(1).toInt, infos(2).toDouble)})var allData = hbaseRatingsallData.cache.count()hbaseRatings.unpersist()var index = 0cleanData.foreachRDD { rdd =>index += 1println("\n[DEBUG]this round (" + index + ") received: " + rdd.count + " data lines.")val refreshStartTime = System.nanoTime()val tmpData = allData.union(rdd).cachetmpData.count()allData = tmpDatatmpData.unpersist()allData = allData.union(rdd).repartition(10).cache()val model = ALS.train(allData, rank, numIter, lambda)val refreshEndTime = System.nanoTime() - refreshStartTimeprintln("[DEBUG]training consuming:" + refreshEndTime / 1000000000 + " s")println("[DEBUG]begin refresh hbase user's recBooks...")val refreshAgainStartTime = System.nanoTime()//只更新当前有行为产生的用户的推荐数据val usersId = rdd.map(_.user).distinct().collect()for (u <- usersId) {val topRatings = model.recommendProducts(u, 10)var recFoods = ""for (r <- topRatings) {val rating = r.rating.toString.substring(0, 4)recFoods += r.product + ":" + rating + ","}CourseClickCountDAO.put("users", u.toString, "info", "recFoods", recFoods.substring(0, recFoods.length - 1))}val refreshAgainConsumingTime = System.nanoTime() - refreshAgainStartTimeprintln("[DEBUG]finish refresh job,consuming:" + refreshAgainConsumingTime / 1000000000 + " s")}ssc.start()ssc.awaitTermination()sparkContext.stop()}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20313.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 ChatGPT 来快速编写产品需求文档(PRD)

PRD 生成 ChatGPT 即了解具体的编程知识&#xff0c;也了解编程之前的需求设计过程。因此产品经理也可以使用 ChatGPT 来快速编写PRD(产品需求文档, production requirement documentation)。 根据需求编写 PRD 首先&#xff0c;我们可以尝试把需求交给 ChatGPT&#xff0c;…

Shopee、ebay、亚马逊等跨境卖家了解测评的一篇干货

随着时代的发展&#xff0c;大家越来越喜欢网购&#xff0c;国外也有亚马逊、沃尔码、阿里国际、速卖通、ebay、shopee、Lazada、ozon、temu等等&#xff0c;而国外这些平台也有很大的市场&#xff0c;跨境电商也随时诞生&#xff0c;而当今社会环境实体生意越来越难做&#xf…

亚马逊Amazon站内信对接

亚马逊新版API&#xff1a;https://developer-docs.amazon.com/sp-api/docs/messaging-api-v1-reference#confirmcustomizationdetailshttps://developer-docs.amazon.com/sp-api/docs/messaging-api-v1-reference#confirmcustomizationdetails 亚马逊站内信没有API可以对接&am…

【WhatsApp营销】如何将WhatsApp Business作为有效的跨境电商营销工具?

关键词&#xff1a;WhatsApp营销&#xff0c;跨境电商&#xff0c;营销工具 截至2022年&#xff0c;WhatsApp已成为中小型企业营销的流行平台&#xff0c;对于跨境电商独立站来说&#xff0c;WhatsApp是一个绝佳的营销工具&#xff0c;是独立站卖家与潜在客户进行一对一接触的…

亚马逊、速卖通、虾皮、lazada、沃尔玛高概率打造爆款的方法

做跨境电商最难的就是起步阶段&#xff0c;是从0到1的阶段&#xff0c;小卖家和大卖家最大的区别是 对试错成本的承受能力&#xff0c;都知道测图测款的重要性&#xff0c;但是有时候明明这个款在测试时&#xff0c;各方面数据都OK&#xff0c;但正式操作的时候&#xff0c;出单…

速卖通、Lazada、美客多、亚马逊新品流量如何利用测评快速提升?

熟悉亚马逊的卖家应该清楚&#xff0c;亚马逊对于新发布的产品会有一定的流量倾向&#xff0c;特别是产品刚上架的2-4周&#xff0c;你的产品将在搜索结果中显示更多&#xff0c;排名比通常情况下更快。 第一步&#xff1a;优化好自己的产品listing1.新品上架标题要点标题权重…

WhatsApp-跨境电商必争之地

作为世界上最受欢迎的即时通讯软件&#xff0c;WhatsApp在全球拥有超过20亿的月活跃用户&#xff0c;覆盖180多个国家&#xff0c;每天通过WhatsApp发送的消息数量超过了1000亿条。作为中国企业出海的热门国家&#xff0c;印度、巴西、美国、印尼...同时也是WhatsApp受众排名前…

亚马逊、沃尔玛、eBay、wish的测评风险:源头控制与有效规避

测评补单已逐渐成为跨境电商卖家的一种重要推广方式。然而&#xff0c;近期&#xff0c;一些卖家反映&#xff0c;由于平台规则日益严格&#xff0c;测评变得更为棘手。若违反评论政策并被捕获&#xff0c;卖家可能会面临一系列的处罚&#xff0c;如删除店铺所有产品的评论&…

chatgpt赋能python:Python免费下载指南

Python免费下载指南 Python是一种高级编程语言&#xff0c;由于其易学易用的特点&#xff0c;被广泛应用于软件开发、数据科学、机器学习等领域。本文将介绍用户如何免费下载Python并开始使用它的步骤。 下载Python Python官网提供了Python解释器的安装包&#xff0c;Window…

chatgpt赋能python:如何快速下载Python:指南和技巧

如何快速下载Python&#xff1a;指南和技巧 如果您是一名 Python 开发人员&#xff0c;下载和安装一个Python解释器可能是您日常工作中最常见的任务之一。幸运的是&#xff0c;Python的下载和安装风格很多&#xff0c;这就意味着您有很多选择。本篇文章将向您介绍几个快速下载…

初中生直升高中定下来了?预计2023年全面落实?教育部的回应来了

一直以来&#xff0c;我国实行的是九年义务教育&#xff0c;也就是小学6年和初中3年&#xff0c;学生进入高中之前需要经历一次被迫分流&#xff0c;从目前普职比5:5的占比来看&#xff0c;将会有一半的学生通过中考被分流到职高。 而不管是学生本人还是家长&#xff0c;都不希…

AI视频动画制作《狼来了》全揭秘!

前言 大家好&#xff01;今天大饱又来分享好东西了&#xff0c;主要是给大家分享最近发现的一个AI宝藏工具&#xff0c;即LeiaPix Converter&#xff01;以及如何将AI工具联合使用&#xff0c;打出漂亮的组合拳&#xff0c;例如如何使用AI工具制作类似《狼来了》的视频动画。 言…

chatgpt赋能python:Python制作滚动字幕,让你的视频更加生动有趣

Python制作滚动字幕&#xff0c;让你的视频更加生动有趣 作为一种流行的视频制作工具&#xff0c;滚动字幕是为了添增视频趣味性而必不可少的元素。Python作为一种简单易用的编程语言&#xff0c;也可以用来制作滚动字幕。在本文中&#xff0c;我们将向您介绍如何使用Python来…

chatgpt赋能python:Python中转换列表的实现方式

Python中转换列表的实现方式 Python是一种非常强大的编程语言&#xff0c;它提供了许多很实用的方法和函数&#xff0c;可以帮助开发者轻松地完成各种任务。其中一个非常常见的任务是将一种数据类型转换成另一种数据类型。在本文中&#xff0c;我们将探讨Python中如何转换列表…

chatgpt赋能python:Python编写接口实践:让API更高效、更可靠

Python编写接口实践&#xff1a;让API更高效、更可靠 随着互联网技术的不断发展&#xff0c;API已经成为了现代应用架构的基石之一。而Python作为一种高效、灵活的语言&#xff0c;也逐渐成为了接口开发的首选。 什么是API接口&#xff1f; API是应用程序接口&#xff08;Ap…

chatgpt赋能python:Python中转化为列表的详细介绍

Python中转化为列表的详细介绍 Python是一门高级编程语言&#xff0c;它使用起来简单易学&#xff0c;被广泛应用于大数据处理、科学计算、机器学习等领域。在Python编程中&#xff0c;列表是一种非常重要的数据结构&#xff0c;它允许我们存储和操作一组数据&#xff0c;并且…

使用腾讯云服务器搭建离线(中转)网盘

使用腾讯云服务器搭建离线&#xff08;中转&#xff09;网盘 本文中&#xff0c;使用Aria2实现离线下载&#xff0c;使用Rclone实现上传。应当说&#xff0c;Aria2Rclone是一个很好的组合。其中&#xff0c;Aria2是一款非常好用的命令行下载工具。当然&#xff0c;为了推广这款…

吴恩达、Bengio等大佬年度展望!懂理性的AI模型要来了?

来源&#xff1a;新智元 辞旧迎新之际&#xff0c;吴恩达、Bengio等一众AI大佬们在DeepLearning.ai聚在一起&#xff0c;展望了自己眼中的2023年。 作为DeepLearning.ai的创始人&#xff0c;吴恩达首先发表了欢迎致辞&#xff0c;并回忆起自己刚开始搞研究的那段岁月 &#xff…

2023将至,吴恩达、Bengio等大佬年度展望!懂理性的AI模型要来了?

新智元报道 编辑&#xff1a;编辑部 【导读】2022年对AI来说注定是不平凡的一年&#xff0c;这不吴恩达、Bengio等一众圈内大佬在接受DeepLearning.ai的采访中展望了2023年AI的发展趋势&#xff0c;还分享了自己的科研小故事。 还有不到3天&#xff0c;2022年就要过去了。 辞…

2023将至,Bengio等大佬年度展望!懂理性的AI模型要来了?

来源&#xff1a;新智元 【导读】2022年对AI来说注定是不平凡的一年&#xff0c;这不吴恩达、Bengio等一众圈内大佬在接受DeepLearning.ai的采访中都展望了2023年AI的发展趋势&#xff0c;还分享了自己的科研小故事。 还有1天&#xff0c;2022年就要过去了。 此前我们报道了吴恩…