“Java任务:缓存购物车”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
Java任务:缓存购物车
程序代码
 
(未显示同一用户的1个中间版本)
第13行: 第13行:
  
 
==任务实现==
 
==任务实现==
===实施思路===
+
将上个实训中的UserDao用文件存储的形式实现,其余不变。
===第一步:启动Eclipse,导入工程Project0601===
+
===文件存储类UserDaoFile===
在项目根目录下创建文件夹cache。
 
  
===第二步:创建购物车数据缓存操作类===
 
  
创建购物车数据缓存操作类:CartCacheManager。
+
<nowiki>package dao;
 +
import java.io.*;
  
1.定义常量用于缓存文件的路径。
+
import entity.*;
  
public static String FILE_PATH = "cache/";
+
public class UserDaoFile implements UserDao {
2.定义User成员变量,用于获取购物车对象。
+
 
+
/**
private User user=null;//当前登陆用户
+
* 定义常量用于缓存文件的路径。
 
+
*/
3.创建1参构造函数,负责给成员变量赋值。
 
 
 
<nowiki>public CartCacheManager(User user) {
 
super();
 
this.user = user;
 
}
 
</nowiki>
 
4.定义并实现存储购物车数据的方法saveCart。
 
 
 
public void saveCart() {}
 
具体步骤如下:
 
 
 
*(1)获取用户购物车对象:
 
 
 
<nowiki>ShoppingCart cart=user.getCart();</nowiki>
 
 
 
*(2)如果购物车中没有商品,则不存储商品信息:
 
 
 
<nowiki>if(cart.size()==0)
 
return;</nowiki>
 
*(3)如果购物车中存在商品,遍历购物车,把购物车商品信息转换成字符串,格式为:商品编号+,+数量。
 
 
 
<nowiki>StringBuffer cache=new StringBuffer("");
 
  for(Entry<Book, Integer> e:cart.entrySet()) {
 
cache.append(e.getKey().getBid()).append(",");
 
cache.append(e.getValue()).append("\n");
 
  }</nowiki>
 
*(4)则把商品数据保存到缓存文件中,缓存文件路径:项目工程/cache文件夹,缓存文件命名:用户编号 + _cache.txt(例如:u01_cache.txt)。
 
<nowiki>String filename=user.getId()+"_cache.txt";
 
try(PrintWriter pw=new PrintWriter(new File(FILE_PATH+filename))){
 
System.out.println(cache.toString());
 
pw.println(cache.toString());
 
} catch (FileNotFoundException e1) {
 
e1.printStackTrace();
 
return;
 
} </nowiki>
 
 
 
===第三步:创建测试类TestWriter,测试方法saveCart===
 
 
 
具体代码如下:
 
 
 
<nowiki>public class TestWriter {
 
public static void main(String[] args) {
 
BookDataSet booksData=new BookDataSet();//创建商品库
 
//创建用户,设置用户的ID为01
 
User u01=new User();
 
u01.setId("01");
 
//用户购买商品
 
ShoppingCart cart= u01.getCart();
 
Book book1=booksData.getBooks()[0];
 
try {
 
cart.buy(book1, 10);
 
} catch (CartException e) {
 
System.out.println(e.getMessage());
 
return;
 
}
 
//存储购物车中数据
 
CartCacheManager cm=new CartCacheManager(u01);
 
cm.saveCart();
 
}
 
}</nowiki>
 
===第四步:定义并实现读取用户购物车文件的方法loadCacheToCart
 
 
 
public void loadCacheToCart(BookDataSet books) {}
 
 
 
具体步骤如下:
 
 
 
(1)购物车缓存文件不存在,则不做任何处理。
 
<nowiki>
 
String fileName=user.getId()+"_cache.txt";
 
File file= new File(FILE_PATH+fileName);
 
if(!file.exists())
 
return;
 
</nowiki>
 
(2)如购物车缓存文件存在,则利用字符流对象读取缓存文件。
 
 
 
<nowiki>// 获取用户购物车对象
 
ShoppingCart cart = user.getCart();
 
// 读取文件并把文件中,相应商品添加到购物车中
 
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
 
String line = null;
 
while ((line = reader.readLine()) != null) {
 
System.out.println(line);
 
String[] datas = line.split(",");
 
cart.put(books.getBookById(datas[0]), Integer.parseInt(datas[1]));
 
}
 
} catch (FileNotFoundException e) {
 
e.printStackTrace();
 
} catch (IOException e) {
 
e.printStackTrace();
 
}</nowiki>
 
===第五步:在main方法中验证测试loadCacheToCart===
 
 
 
<nowiki>public class TestReader {
 
public static void main(String[] args) {
 
BookDataSet booksData=new BookDataSet();//创建商品库
 
//创建用户,设置用户的ID为01
 
User u01=new User();
 
u01.setId("01");
 
CartCacheManager cm=new CartCacheManager(u01);
 
cm.loadCacheToCart(booksData);
 
System.out.println(u01.getCart());
 
}
 
}</nowiki>
 
==程序代码==
 
 
 
<nowiki>public class CartCacheManager {
 
// 缓存文件存放目录
 
 
public static String FILE_PATH = "cache/";
 
public static String FILE_PATH = "cache/";
private User user = null;// 当前登陆用户
+
public static String FILE_NAME ="user.txt";
 
+
public CartCacheManager(User user) {
+
public UserDaoFile() {
super();
+
this.user = user;
 
 
}
 
}
 
+
 +
 +
 +
 
 +
 +
 
/**
 
/**
* 退出时,缓存购物车中数据
+
* 用于向文件存储中添加用户
 
*/
 
*/
public void saveCart() {
+
public void addUser(User user) {
ShoppingCart cart = user.getCart();
+
// 购物车内没有数据时,不做任何处理
+
String cache = "";
if (cart.size() == 0)
+
Boolean success= true;
return;
+
cache += (user.getId()+" "+user.getName()+" "+user.getPassword()+" \n");
// 把购物车中的数据,转换成字符串,格式为:商品编号++数量
+
try(FileWriter fw = new FileWriter(FILE_PATH+FILE_NAME,true);
StringBuffer cache = new StringBuffer();
+
BufferedWriter bw = new BufferedWriter(fw);){
for (Entry<Book, Integer> e : cart.entrySet()) {
+
cache.append(e.getKey().getBid()).append(",");
+
bw.write(cache);
cache.append(e.getValue()).append("\n");
+
bw.newLine();
 +
 +
 +
}catch(Exception e){
 +
System.out.println("出现异常:"+e);
 +
success=false;
 
}
 
}
// 把数据存储到文件中:用户编号_cache.txt
+
String filename = user.getId() + "_cache.txt";
+
if(success) {
try (PrintWriter pw = new PrintWriter(new File(FILE_PATH + filename))) {
+
      System.out.println("用户 "+user.getName() +" 注册成功");      
pw.print(cache.toString());
+
      System.out.println();
} catch (FileNotFoundException e1) {
+
  }
e1.printStackTrace();
+
return;
+
}
}
+
}
+
/**
 
+
* 查询文件存储中的用户
public void loadCacheToCart(BookDataSet books) {
+
*/
// 读取缓存中的文件
+
public void queryUser( ){
String fileName = user.getId() + "_cache.txt";
+
Boolean success=true;//用于标识文件读取是否成功
File file = new File(FILE_PATH + fileName);
+
System.out.println("本店现有如下用户:");
if (!file.exists())
+
//userset.getUser();
return;
+
try (FileReader fr = new FileReader(FILE_PATH+"/"+FILE_NAME);
// 获取用户购物车对象
+
BufferedReader br = new BufferedReader(fr)) {
ShoppingCart cart = user.getCart();
+
while (br.ready()) {
// 读取文件并把文件中,相应商品添加到购物车中
+
System.out.println(br.readLine());
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
 
String line = null;
 
while ((line = reader.readLine()) != null) {
 
System.out.println(line);
 
String[] datas = line.split(",");
 
//添加缓存文件中的对象到购物车
 
cart.put(books.getBookById(datas[0]), Integer.parseInt(datas[1]));
 
 
}
 
}
} catch (FileNotFoundException e) {
+
}catch(Exception e){
e.printStackTrace();
+
System.out.println("出现异常:"+e);
} catch (IOException e) {
+
success=false;
e.printStackTrace();
 
 
}
 
}
 +
 +
if(success) {
 +
      System.out.println("用户信息读取成功!");       
 +
      System.out.println();
 +
}
 +
System.out.println();
 
}
 
}
 +
//查询某个用户是否存在
 +
  public boolean hasUser(String name){
 +
  Boolean success=false;//用于标识是否登录成功
 +
 +
  try (FileReader fr = new FileReader(FILE_PATH+"/"+FILE_NAME);
 +
BufferedReader br = new BufferedReader(fr)) {
 +
while (br.ready()) {
 +
String UserInfo =br.readLine();
 +
if(UserInfo.contains(name)){
 +
success=true;//找到相关用户
 +
break;
 +
}
 +
}
 +
  }catch(Exception e){
 +
System.out.println("出现异常:"+e);
 +
success=false;
 +
}
 +
  return success;
 +
 +
 
 +
  }
 +
  /**
 +
* 登录验证,判断用户名与密码是否存在
 +
*
 +
* @param name 用户输入的登录账号
 +
* @param pwd 用户输入的登录密码
 +
* @return 登录信息有效:返回用户对象,否则返回NULL
 +
*/
 +
  public boolean verify(String name, String pwd){
 +
  boolean success=false;//用于标识是否登录成功
 +
  try (FileReader fr = new FileReader(FILE_PATH+"/"+FILE_NAME);
 +
BufferedReader br = new BufferedReader(fr)) {
 +
while (br.ready()) {
 +
String UserInfo =br.readLine();
 +
if(UserInfo.contains(name)){
 +
        String[] info = UserInfo.split(" ");        
 +
       
 +
        if(info[2].equals(pwd)){//验证密码是否相符
 +
        success=true;
 +
        }
 +
}
 +
}
 +
}catch(Exception e){
 +
System.out.println("出现异常:"+e);
 +
success=false;
 +
}
 +
  return success;
 +
  }
 +
 +
 
}</nowiki>
 
}</nowiki>
 +
 +
===业务逻辑类UserService===
 +
将红框内代码做如下改动:
 +
 +
[[文件:java6-18.png]]
  
 
返回 [[Java程序设计]]
 
返回 [[Java程序设计]]

2018年6月16日 (六) 14:33的最新版本

Java任务:缓存购物车

当退出程序的时候,需要实现缓存购物车中数据,完成效果如图6-5所示。

Java6-4.png

图6-5 缓存购物车中数据的文件

当登录后需要读取缓存文件数据,此时若在控制台显示,完成效果如图6-6所示。

Java6-5.png

图6-6 读取缓存购物车数据的文件并输出显示

任务实现

将上个实训中的UserDao用文件存储的形式实现,其余不变。

文件存储类UserDaoFile

package dao;
import java.io.*;

import entity.*;

public class UserDaoFile implements UserDao {
	
	/**
	 * 定义常量用于缓存文件的路径。 
	 */
	public static String FILE_PATH = "cache/";
	public static String FILE_NAME ="user.txt";
	
	public UserDaoFile() {
		
	}
	
	 
	 
	  
	
	
	/**
	 * 用于向文件存储中添加用户
	 */
	public void addUser(User user) {
		
		String cache = "";
		Boolean success= true;
		cache += (user.getId()+" "+user.getName()+" "+user.getPassword()+" \n");	
		try(FileWriter fw = new FileWriter(FILE_PATH+FILE_NAME,true);
			BufferedWriter bw = new BufferedWriter(fw);){
			
			bw.write(cache);
			bw.newLine();
			
			
		}catch(Exception e){
			System.out.println("出现异常:"+e); 	
			success=false;
		}
		
		if(success) {
		       System.out.println("用户 "+user.getName() +" 注册成功");        
		      System.out.println();
		   }
		
	}	
	
	/**
	 * 查询文件存储中的用户
	 */
	public void queryUser( ){
		Boolean success=true;//用于标识文件读取是否成功
		System.out.println("本店现有如下用户:");
		//userset.getUser();
		try (FileReader fr = new FileReader(FILE_PATH+"/"+FILE_NAME);
			BufferedReader br = new BufferedReader(fr)) {
			while (br.ready()) {
				System.out.println(br.readLine());
			}
		}catch(Exception e){
			System.out.println("出现异常:"+e); 	
			success=false;
		}
		
		if(success) {
		      System.out.println("用户信息读取成功!");        
		      System.out.println();
		 }
		System.out.println();
	}
	//查询某个用户是否存在
	  public boolean hasUser(String name){
		  Boolean success=false;//用于标识是否登录成功
			
		  try (FileReader fr = new FileReader(FILE_PATH+"/"+FILE_NAME);
				BufferedReader br = new BufferedReader(fr)) {
				while (br.ready()) {
					String UserInfo =br.readLine();
					if(UserInfo.contains(name)){
						success=true;//找到相关用户
						break;
					}
				}
		  }catch(Exception e){
					System.out.println("出现异常:"+e); 	
					success=false;
		 }	
		  return success;
			
		  
	  }
	  /**
		 * 登录验证,判断用户名与密码是否存在
		 * 
		 * @param name 用户输入的登录账号
		 * @param pwd 用户输入的登录密码
		 * @return 登录信息有效:返回用户对象,否则返回NULL
		 */
	  public boolean verify(String name, String pwd){
		  boolean success=false;//用于标识是否登录成功
		  try (FileReader fr = new FileReader(FILE_PATH+"/"+FILE_NAME);
					BufferedReader br = new BufferedReader(fr)) {
					while (br.ready()) {
						String UserInfo =br.readLine();
						if(UserInfo.contains(name)){					
					        String[] info = UserInfo.split(" ");	        
					        
					        if(info[2].equals(pwd)){//验证密码是否相符
					        	success=true;
					        }
						}
					}
				}catch(Exception e){
					System.out.println("出现异常:"+e); 	
					success=false;
				}
		  return success;
	  }
	
	
}

业务逻辑类UserService

将红框内代码做如下改动:

Java6-18.png

返回 Java程序设计