目 录
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()}
}






























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

  1. 吃货联盟美食推荐系统

    [摘要]随着信息技术的飞速发展,计算机技术被广泛应用于生活,各管理系统.电子销售系统都是计算机技术的产物.中国作为美食之都,各色美食令人挑花眼,以往,人们要通过他人告知,才知道哪里有美食,这种口口相传 ...

  2. springboot+mysql美食推荐系统-计算机毕业设计源码30941

    摘要 随着人们生活水平的提高,人们对美食的要求也越来越高,对各类美食信息需求越来越大.因此,结合计算机快速发展.普及,在此基础上制作一个页面简单.美观,功能实用的美食推荐系统势在必行,满足用户分享美食 ...

  3. 基于微信小程序的美食点餐推荐系统的设计与实现+源码

    随着人们生活水平的不断提高, 外出吃饭的机会越来越多, 逢年过节聚餐, 同事聚餐, 同学聚餐等等. 当一说到吃饭,最先考虑的是去哪吃, 吃什么, 因此美食网站就成为了人们获取这些信息的主要来源[1] ...

  4. 一个完整推荐系统的设计实现

    工业界完整推荐系统的设计.结论是: 没有某种算法能够完全解决问题, 多重算法+交互设计, 才能解决特定场景的需求.下文也对之前的一些博文进行梳理,构成一个完整工业界推荐系统所具有的方方面面(主要以百度 ...

  5. Java语言springboot开发框架实现个性化美食推荐网 在线美食推荐系统 基于用户、物品的协同过滤推荐算法实现

    Java语言springboot开发框架实现个性化美食推荐网 在线美食推荐系统 基于用户.物品的协同过滤推荐算法实现WebFoodRecSystem 一.项目简介 1.开发工具和使用技术 IDEA/E ...

  6. 使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户、物品的协同过滤推荐算法实现 大数据、人工智能、机器学习项目开发

    使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户.物品的协同过滤推荐算法实现 大数据.人工智能.机器学习项目开发Fo ...

  7. 【附源码】计算机毕业设计SSM美食推荐系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  8. Java语言开发在线美食推荐网 美食推荐系统 基于用户、物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis框架 人工智能、大数据、机器学习项目开发

    Java语言开发在线美食推荐网 美食推荐系统 基于用户.物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis框架 人工智能.大数据.机器学习项目开发FoodRecomm ...

  9. python美食推荐系统 菜谱管理系统 django框架 购物车 网站 MySQL数据库 源码下载 计算机毕业设计

    python美食推荐系统 管理系统 django框架 购物车 网站 源码下载 一.功能 注册.登录.后台管理员管理.美食.菜谱.论坛.资讯.用户分享.公告信息. 论坛管理.个人中心模块.购物车.客服中 ...

最新文章

  1. dynamic.rnn()sequence_len理解
  2. 安卓能帮你检查密码泄露了!还有Messages定时发送等多项功能优化
  3. 郑州5月份的windows phone7小聚
  4. hdu1848(sg函数打表)
  5. Java基础:正则表达式
  6. 无线服务器软件,关于无线802.1x结合各服务器软件的配置总结
  7. 解决 avformat_alloc_context无法识别的问题
  8. 初识python多线程
  9. 【LeetCode】12. Integer to Roman 整型数转罗马数
  10. 为了在简历上写掌握【Java虚拟机JVM】,做了该篇总结
  11. 学hadoop需要什么基础
  12. python邮件模块_Python收发邮件模块,用,来,发送,接收
  13. 如何禁用电脑文件共享
  14. 计算机文本格式含义,文本格式是什么意思
  15. 解析DXF图形文件格式
  16. 究竟什么是冯诺依曼瓶颈(von Neumann Bottleneck)?
  17. 在不知道密码情况下卸载企业版360
  18. 时间同步装置(卫星时钟同步)工作原理介绍
  19. 86u 网页服务器,路由器怎么设置DMZ_华硕RT-AC86U路由器开启DMZ方法
  20. java上机实验作业 编写汽车类car,Java代写:CS103 Car Rental代做留学生SQL实验作业...

热门文章

  1. Matlab车辆配送路径规划问题 各类vrp代码 带时间窗的路径规划问题
  2. 小米商品详情HTML +CSS +JS
  3. 计算机要重启电脑才能检测出u盘启动,win7系统无法识别u盘需要重启电脑才可识别的解决方法...
  4. 前端工程师实战17:详解CSS背景图片、雪碧图
  5. 《我不知道该说什么,关于死亡还是爱情》······
  6. 华为单臂路由器+DHCP配置
  7. 路由基础之基本的路由策略配置
  8. 【大唐杯学习超快速入门】5G技术原理仿真教学——5G物理层过程
  9. 问卷:单选题的选项转换成1,2,3,4...数值
  10. VDS多签地址,你必须知道的秘密