针对线上移动电子及PC产品销售环节,建立一整套的前台销售,后台管理发货物流,订单管理等流程。系统基于Spring SpringMVC MyBatis技术实现,整体分为系统前端电脑等电子产品销售网站 后台管理系统。系统前端提供普通用户注册登录,在线查询商品,添加购物车,购买下单,付款等,系统管理后台提供管理员用户使用,具备商品管理,系统配置,用户管理,订单管理等等。
一、程序设计
本次基于SSM的电子商品商城系统主要内容涉及:
主要功能模块:商品首页、商品分类、商品列表、商品详情、购物车、用户订单,注册登录、商品管理、用户管理,订单管理,销售分析等
主要包含技术:java,Mysql,Spring,SpringMVC,MyBatis,javascript,html,css等
主要包含算法及方法:协同过滤推荐算法
二、效果实现
用户注册
系统首页
商品列表
商品详情
购物车
系统后台
其他效果省略
三、推荐算法设计
本次毕设系统在商品推荐算法设计中,主要采用基于用户协同过滤算法方式,其中基于用户协同过滤推荐算法主要利用用户历史购买商品的情况,开展相似用户计算发现相关商品之间的关联特征开展计算,不断优化提高商品推荐精准度。
推荐算法实现
部分核心算法代码
代码语言:java复制 class UserBaseCF{
public static final int USERSIZE=943;
public static final int ITEMSIZE=1682;
public static final int UN=10;//某一user的最近邻居数
//public static final int IN=10;//某一item的最近邻居数
public int [] num=new int[USERSIZE 1];//每个用户为几部评了分
public double[] average=new double[USERSIZE 1];//每个user的平均打分
public double[][] rate=new double[USERSIZE 1][ITEMSIZE 1];//评分矩阵
public double[][] DealedOfRate=new double[USERSIZE 1][ITEMSIZE 1];//针对稀疏问题处理后的评分矩阵
Neighbor[][] NofUser =new Neighbor[USERSIZE 1][UN 1];//每个用户的最近的UN个邻居
List<Double> x=new LinkedList<Double>();//LinkedList按照对象加入的顺序存储
List<Double> y=new LinkedList<Double>();
public static void main(String args[]) throws Exception{
UserBaseCF cf=new UserBaseCF();
if(cf.readFile("bin/ml-data_0/u1.base")){
System.out.println("请等待,正在分析");
cf.getAvr();//得到average[]
cf.dealRate();//得到DealedOfRate
cf.getNofUser();//得到NofUser
for(int i=1;i<=UN;i ){
System.out.println(cf.NofUser[1][i].getID() ":" cf.NofUser[1][i].getValue());
}
//读文件
File inputFile=new File("bin/ml-data_0/u1.test");
BufferedReader reader=null;
if(!inputFile.exists()||inputFile.isDirectory())
throw new FileNotFoundException();
reader=new BufferedReader(new FileReader(inputFile));
//写文件
File outputFile=new File("bin/testResult.txt");
FileWriter writer=null;
if(!outputFile.exists())
if(!outputFile.createNewFile())
System.out.println("输出文件创建失败");
writer=new FileWriter(outputFile);
String title ="UserID" "t" "ItemID" "t" "OriginalRate" "t" "PredictRate" "rn";
writer.write(title);
writer.flush();
String[] part=new String[3];
String tmpToRead="";
String tmpToWrite="";
while((tmpToRead=reader.readLine())!=null){
part=tmpToRead.split("t");
int userID=Integer.parseInt(part[0]);
int itemID=Integer.parseInt(part[1]);
double originalRate=Double.parseDouble(part[2]);
double predictRate=cf.predict(userID, itemID);
cf.x.add(originalRate);
cf.y.add(predictRate);
tmpToWrite=userID "t" itemID "t" originalRate "t" predictRate "rn";
writer.write(tmpToWrite);
writer.flush();
}
System.out.println("分析完成,请打开工程目录下bin文件夹中的testResult.txt");
System.out.println("利用RMSE分析结果为" cf.analyse(cf.x, cf.y));
}
else
System.out.println("失败");
}
//Chapter1:准备工作
//1-1:读取文件内容,得到评分矩阵 1:读取成功 -1:读取失败
public boolean readFile(String filePath){
File inputFile=new File(filePath);
BufferedReader reader=null;
try {
reader=new BufferedReader(new FileReader(inputFile));
} catch (FileNotFoundException e) {
System.out.println("文件不存在" e.getMessage());
return false;
}
String sentence="";
String[] part=new String[3];
try {
while((sentence=reader.readLine())!=null){
part=sentence.split("t");
int userID=Integer.parseInt(part[0]);
int itemID=Integer.parseInt(part[1]);
double Rate=Double.parseDouble(part[2]);
//构造矩阵
rate[userID][itemID]=Rate;
}
} catch (NumberFormatException|IOException e) {
System.out.println("读文件发生错误" e.getMessage());
return false;
}
return true;
}
//1-2计算每个用户的平均分
public void getLen(){//计算每个用户为几部电影打分
for(int i=1;i<=USERSIZE;i ){
int n=0;
for(int j=1;j<=ITEMSIZE;j ){
if(rate[i][j]!=0)
n ;
}
num[i]=n;
}
}
}