基于SSM+mysql+mybatis+js+html+css实现电子产品在线商城系统,商品管理后台

2022-12-02 15:28:40 浏览数 (1)

针对线上移动电子及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;
		}	
	}
}

0 人点赞