idea开发 java web 酒店推荐系统bootstrap框架开发协同过滤算法web结构java编程计算机网页

一、源码特点

java 酒店推荐推荐系统是一套完善的完整信息系统,结合java web开发和bootstrap UI框架完成本系统 采用协同过滤算法进行推荐 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。

前段主要技术 css jquery bootstrap UI框架

后端主要技术 java jsp

数据库 mysql

开发工具 IDEA JDK1.8

java web基于协同过滤酒店推荐系统1

二、功能介绍

前台功能:

1)系统首页

2)公告浏览

3)酒店浏览、查看酒店详情 ,系统并记录用户浏览记录,系统采用协同过滤算法,根据用户的行为习惯进行推荐其他酒店

4)客房预定、入住、查看订单

5)用户注册、登录

后台功能:

(1)管理员管理:对管理员信息进行添加、删除、修改和查看

(2)用户管理:对用户信息进行添加、删除、修改和查看

(3)员工管理:对员工信息进行添加、删除、修改和查看

(4)公告管理:对公告信息进行添加、删除、修改和查看

(5)酒店管理:对酒店信息进行添加、删除、修改和查看

(6)浏览管理:对浏览信息进行添加、删除、修改和查看

(7)客房类型管理:对客房类型信息进行添加、删除、修改和查看

(8)客房管理:对客房信息进行添加、删除、修改和查看

(9)预定管理:对预定信息进行添加、删除、修改和查看

(10)入住管理:对入住信息进行添加、删除、修改和查看

(11)商品管理:对商品信息进行添加、删除、修改和查看

(12)订单管理:对订单信息进行删除、修改和查看

(13)订单明细管理:对订单明细信息进行删除、修改和查看

(14)用户登录、个人信息修改

数据库设计

CREATE TABLE `gly` (
`glyid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名',  PRIMARY KEY  (`glyid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `yonghu` (
`yhid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名',
`lxdh` VARCHAR(40) default NULL COMMENT '联系电话',
`lxdz` VARCHAR(40) default NULL COMMENT '联系地址',  PRIMARY KEY  (`yhid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `yuangong` (
`ygid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名',
`lxdh` VARCHAR(40) default NULL COMMENT '联系电话',
`jd` VARCHAR(40) default NULL COMMENT '酒店',  PRIMARY KEY  (`ygid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `gonggao` (
`ggid` int(11) NOT NULL auto_increment,
`bt` VARCHAR(40) default NULL COMMENT '标题',
`nr` VARCHAR(40) default NULL COMMENT '内容',
`fbsj` VARCHAR(40) default NULL COMMENT '发布时间',  PRIMARY KEY  (`ggid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `jiudian` (
`jdid` int(11) NOT NULL auto_increment,
`jdmc` VARCHAR(40) default NULL COMMENT '酒店名称',
`wz` VARCHAR(40) default NULL COMMENT '位置',
`tp` VARCHAR(40) default NULL COMMENT '图片',
`lxdh` VARCHAR(40) default NULL COMMENT '联系电话',  PRIMARY KEY  (`jdid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `liulan` (
`llid` int(11) NOT NULL auto_increment,
`jd` VARCHAR(40) default NULL COMMENT '酒店',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`llsj` VARCHAR(40) default NULL COMMENT '浏览时间',  PRIMARY KEY  (`llid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

代码设计

  int N = scanner.nextInt();  
        int[][] sparseMatrix = new int[N][N];//建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】  
        Map<String, Integer> userItemLength = new HashMap();//存储每一个用户对应的不同物品总数  eg: A 3  
        Map<String, Set<String>> itemUserCollection = new HashMap();//建立物品到用户的倒排表 eg: a A B  
        Set<String> items = new HashSet();//辅助存储物品集合  
        Map<String, Integer> userID = new HashMap();//辅助存储每一个用户的用户ID映射  
        Map<Integer, String> idUser = new HashMap();//辅助存储每一个ID对应的用户映射  
        System.out.println("Input user--items maping infermation:<eg:A a b d>");  
        scanner.nextLine();  
        for(int i = 0; i < N ; i++){//依次处理N个用户 输入数据  以空格间隔  
            String[] user_item = scanner.nextLine().split(" ");  
            int length = user_item.length;  
            userItemLength.put(user_item[0], length-1);//eg: A 3  
            userID.put(user_item[0], i);//用户ID与稀疏矩阵建立对应关系  
            idUser.put(i, user_item[0]);  
            //建立物品--用户倒排表  
            for(int j = 1; j < length; j ++){  
                if(items.contains(user_item[j])){//如果已经包含对应的物品--用户映射,直接添加对应的用户  
                    itemUserCollection.get(user_item[j]).add(user_item[0]);  
                }else{//否则创建对应物品--用户集合映射  
                    items.add(user_item[j]);  
                    itemUserCollection.put(user_item[j], new HashSet<String>());//创建物品--用户倒排关系  
                    itemUserCollection.get(user_item[j]).add(user_item[0]);  
                }  
            }  
        }  
        System.out.println(itemUserCollection.toString());  
        //计算相似度矩阵【稀疏】  
        Set<Entry<String, Set<String>>> entrySet = itemUserCollection.entrySet();  
        Iterator<Entry<String, Set<String>>> iterator = entrySet.iterator();  
        while(iterator.hasNext()){  
            Set<String> commonUsers = iterator.next().getValue();  
            for (String user_u : commonUsers) {  
                for (String user_v : commonUsers) {  
                    if(user_u.equals(user_v)){  
                        continue;  
                    }  
                    sparseMatrix[userID.get(user_u)][userID.get(user_v)] += 1;//计算用户u与用户v都有正反馈的物品总数  
                }  
            }  
        }  
        System.out.println(userItemLength.toString());  
        System.out.println("Input the user for recommendation:<eg:A>");  
        String recommendUser = scanner.nextLine();  
        System.out.println(userID.get(recommendUser));  
        //计算用户之间的相似度【余弦相似性】  
        int recommendUserId = userID.get(recommendUser);  
        for (int j = 0;j < sparseMatrix.length; j++) {  
                if(j != recommendUserId){  
                    System.out.println(idUser.get(recommendUserId)+"--"+idUser.get(j)+"相似度:"+sparseMatrix[recommendUserId][j]/Math.sqrt(userItemLength.get(idUser.get(recommendUserId))*userItemLength.get(idUser.get(j))));  
                }  
        }  
          
        //计算指定用户recommendUser的物品推荐度  
        for(String item: items){//遍历每一件物品  
            Set<String> users = itemUserCollection.get(item);//得到购买当前物品的所有用户集合  
            if(!users.contains(recommendUser)){//如果被推荐用户没有购买当前物品,则进行推荐度计算  
                double itemRecommendDegree = 0.0;  
                for(String user: users){  
                    itemRecommendDegree += sparseMatrix[userID.get(recommendUser)][userID.get(user)]/Math.sqrt(userItemLength.get(recommendUser)*userItemLength.get(user));//推荐度计算  
                }  
                System.out.println("The item "+item+" for "+recommendUser +"'s recommended degree:"+itemRecommendDegree);  
            }  
        }  

三、注意事项

1、管理员账号:admin密码:admin 数据库配置文件DBO.java

2、开发环境为IDEA开发,数据库为mysql,使用java语言开发。

3、数据库文件名是jspjdtj.sql 系统名称jdtj

4、地址:qt/index.jsp

四系统实现

代码下载

https://download.csdn.net/download/qq_41221322/89064345

需要源码 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

相关推荐
落落落sss9 分钟前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
码爸13 分钟前
flink doris批量sink
java·前端·flink
深情废杨杨14 分钟前
前端vue-父传子
前端·javascript·vue.js
Monodye1 小时前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
一丝晨光1 小时前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
J不A秃V头A1 小时前
Vue3:编写一个插件(进阶)
前端·vue.js
无名指的等待7121 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端
司篂篂2 小时前
axios二次封装
前端·javascript·vue.js
Tatakai252 小时前
Mybatis Plus分页查询返回total为0问题
java·spring·bug·mybatis
武子康2 小时前
大数据-133 - ClickHouse 基础概述 全面了解
java·大数据·分布式·clickhouse·flink·spark