登录注册功能:用户在未登录的情况下,只能浏览商城中的商品,但是要加入购物车购买东西必须登录;
管理员登陆:管理员可以登录后台管理系统,管理商城中的产品以及用户信息。
搜索功能
个人中心:查看、修改个人信息。
商品展示、商品分类:将该商城所售卖的商品进行分类展示。
购物车功能:用户可以将自己想购买的商品加入购物车,也可以从购物车中删除商品,设置购买数量,然后进行支付。
订单模块:用户可以查看自己所购买的全部商品信息。
后台管理模块:管理员可以对商城中的商品进行一些增删改查操作。
开发工具:IDEA 或者eclipse都支持
jdk版本:jdk1.8+
编程语言: java
框架支持:springboot/ssm/srpingcloud微服务分布式
数据库: mysql 版本不限
数据库工具:Navicat/SQLyog都可以
前端:vue.js+ElementUI
SpringBoot 是一个高效的后端开发框架,因为 SpringBoot 的开发几乎不用写配置文件,只需要利用SpringBoot 来构建网站的后台环境,在SpringBoot 的 YML配置文件中写项目启动端口,项目就可以启动了,项目的Java和静态文件由SpringBoot 管理。[9]
Mysql 数据库 MySQL 是一个开源的关系型数据库管理系统(RDBMS),稳定性和性能优异,在网络应用开发中得到了广泛的应用。MySQL具备强大的连接能力、高度的灵活性和安全性、较低的内存占用以及良好的跨平台兼容性,可以独立的运行,支持客户端-服务器架构,同时也能够作为嵌入式库集成到其他应用程序中。[11] 在信息管理中,对于数据库的应用也日益广泛,MySQL使用的SQL语言是访问数据库较为常用的标准化语言,它可以通过一些简单的操作从而实现对复杂的功能进行查询,并且具有良好的可扩展性和可维护性等优点,MySQL软件非常的适合用作中小型网站发展的网站数据库,因为它的体积小,速度快,总体拥有成本低,尤其是开放源码。[12
Vue 是一个灵活的、用于构建用户界面的JavaScript框架,支持从基础到复杂应用的逐层构建,在界面开发中极为流行,并且能够与现代开发工具很好的配合,为构建单页应用程序(SPA)提供强大的支持。Vue专注于视图层面的开发,采用增量式开发方法,允许开发者从简单的需求开始,逐步扩展至更复杂的功能,Vue 的设计能够轻松地与第三方库或现有项目集成。
为了确保系统正常运行,安装了JRE/JDK 8作为Java运行环境。JRE/JDK 8是Java平台的基础环境,支持系统的所有Java应用程序正常运行,提供丰富的API库和工具,为系统的开发和部署提供有力支持。通过以上平台的选择和配置,系统的稳定性、高效性和安全性得到了保障,用户能够获得更好的体验和服务[19]。
(1) 硬件环境
处理器: 1.4 GHz 四核Intel Core i5
内存:8G大小
硬盘:256G以上
(2) 软件环境
操作系统:Windows10操作系统
开发工具:IntellijIDEA2021
Java开发环境:JDK8.0
Web服务器:SpringBoot内置Tomcat
数据库:MySQL5.7数据库
浏览器:Google Chrome浏览器
/**
* 协同过滤算法
*/
public UserBasedCollaborativeFiltering(Map<String, Map<String, Double>> userRatings) {
this.userRatings = userRatings;
this.itemUsers = new HashMap<>();
this.userIndex = new HashMap<>();//辅助存储每一个用户的用户索引index映射:user->index
this.indexUser = new HashMap<>();//辅助存储每一个索引index对应的用户映射:index->user
// 构建物品-用户倒排表
int keyIndex = 0;
for (String user : userRatings.keySet()) {
Map<String, Double> ratings = userRatings.get(user);
for (String item : ratings.keySet()) {
if (!itemUsers.containsKey(item)) {
itemUsers.put(item, new ArrayList<>());
}
itemUsers.get(item).add(user);
}
//用户ID与稀疏矩阵建立对应关系
this.userIndex.put(user,keyIndex);
this.indexUser.put(keyIndex,user);
keyIndex++;
}
int N = userRatings.size();
this.sparseMatrix=new Long[N][N];//建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】
for(int i=0;i<N;i++){
for(int j=0;j<N;j++)
this.sparseMatrix[i][j]=(long)0;
}
for(String item : itemUsers.keySet()) {
List<String> userList = itemUsers.get(item);
for(String u1 : userList) {
for(String u2 : userList) {
if(u1.equals(u2)){
continue;
}
this.sparseMatrix[this.userIndex.get(u1)][this.userIndex.get(u2)]+=1;
}
}
}
}
public double calculateSimilarity(String user1, String user2) {
//计算用户之间的相似度【余弦相似性】
Integer id1 = this.userIndex.get(user1);
Integer id2 = this.userIndex.get(user2);
if(id1==null || id2==null) return 0.0;
return this.sparseMatrix[id1][id2]/Math.sqrt(userRatings.get(indexUser.get(id1)).size()*userRatings.get(indexUser.get(id2)).size());
}
public List<String> recommendItems(String targetUser, int numRecommendations) {
// 计算目标用户与其他用户的相似度
Map<String, Double> userSimilarities = new HashMap<>();
for (String user : userRatings.keySet()) {
if (!user.equals(targetUser)) {
double similarity = calculateSimilarity(targetUser, user);
userSimilarities.put(user, similarity);
}
}
// 根据相似度进行排序
List<Map.Entry<String, Double>> sortedSimilarities = new ArrayList<>(userSimilarities.entrySet());
sortedSimilarities.sort(Map.Entry.comparingByValue(Comparator.reverseOrder()));
// 选择相似度最高的K个用户
List<String> similarUsers = new ArrayList<>();
for (int i = 0; i < numRecommendations; i++) {
if (i < sortedSimilarities.size()) {
similarUsers.add(sortedSimilarities.get(i).getKey());
} else {
break;
}
}
// 获取相似用户喜欢的物品,并进行推荐
Map<String, Double> recommendations = new HashMap<>();
for (String user : similarUsers) {
Map<String, Double> ratings = userRatings.get(user);
for (String item : ratings.keySet()) {
if (userRatings.get(targetUser)!=null && !userRatings.get(targetUser).containsKey(item)) {
recommendations.put(item, ratings.get(item));
}
}
}