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

来自CloudWiki
跳转至: 导航搜索
第二步:创建购物车数据缓存操作类
Java任务:缓存购物车
第2行: 第2行:
 
当退出程序的时候,需要实现缓存购物车中数据,完成效果如图6-5所示。
 
当退出程序的时候,需要实现缓存购物车中数据,完成效果如图6-5所示。
  
[[文件:java6-4.png]]
+
[[文件:java6-4.png]]
  
 
图6-5 缓存购物车中数据的文件
 
图6-5 缓存购物车中数据的文件

2018年6月16日 (六) 14:25的版本

Java任务:缓存购物车

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

Java6-4.png

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

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

Java6-5.png

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

任务实现

实施思路

第一步:启动Eclipse,导入工程Project0601

在项目根目录下创建文件夹cache。

第二步:创建购物车数据缓存操作类

创建购物车数据缓存操作类:CartCacheManager。

1.定义常量用于缓存文件的路径。

public static String FILE_PATH = "cache/";

2.定义User成员变量,用于获取购物车对象。

private User user=null;//当前登陆用户

3.创建1参构造函数,负责给成员变量赋值。

public CartCacheManager(User user) {
		super();
		this.user = user;
	}

4.定义并实现存储购物车数据的方法saveCart。

public void saveCart() {}

具体步骤如下:

  • (1)获取用户购物车对象:
ShoppingCart cart=user.getCart();
  • (2)如果购物车中没有商品,则不存储商品信息:
if(cart.size()==0)
	return;
  • (3)如果购物车中存在商品,遍历购物车,把购物车商品信息转换成字符串,格式为:商品编号+,+数量。
StringBuffer cache=new StringBuffer("");
	   for(Entry<Book, Integer> e:cart.entrySet()) {
			cache.append(e.getKey().getBid()).append(",");
			cache.append(e.getValue()).append("\n");			
	   }
  • (4)则把商品数据保存到缓存文件中,缓存文件路径:项目工程/cache文件夹,缓存文件命名:用户编号 + _cache.txt(例如:u01_cache.txt)。
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;
		}	

第三步:创建测试类TestWriter,测试方法saveCart

具体代码如下:

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();
	}
}

===第四步:定义并实现读取用户购物车文件的方法loadCacheToCart

public void loadCacheToCart(BookDataSet books) {}

具体步骤如下:

(1)购物车缓存文件不存在,则不做任何处理。 String fileName=user.getId()+"_cache.txt"; File file= new File(FILE_PATH+fileName); if(!file.exists()) return; (2)如购物车缓存文件存在,则利用字符流对象读取缓存文件。

// 获取用户购物车对象
		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();
}

第五步:在main方法中验证测试loadCacheToCart

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());
	}
}

程序代码

public class CartCacheManager {
	// 缓存文件存放目录
	public static String FILE_PATH = "cache/";
	private User user = null;// 当前登陆用户

	public CartCacheManager(User user) {
		super();
		this.user = user;
	}

	/**
	 * 退出时,缓存购物车中数据
	 */
	public void saveCart() {
		ShoppingCart cart = user.getCart();
		// 购物车内没有数据时,不做任何处理
		if (cart.size() == 0)
			return;
		// 把购物车中的数据,转换成字符串,格式为:商品编号+,+数量
		StringBuffer cache = new StringBuffer();
		for (Entry<Book, Integer> e : cart.entrySet()) {
			cache.append(e.getKey().getBid()).append(",");
			cache.append(e.getValue()).append("\n");
		}
		// 把数据存储到文件中:用户编号_cache.txt
		String filename = user.getId() + "_cache.txt";
		try (PrintWriter pw = new PrintWriter(new File(FILE_PATH + filename))) {
			pw.print(cache.toString());
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
			return;
		}
	}

	public void loadCacheToCart(BookDataSet books) {
		// 读取缓存中的文件
		String fileName = user.getId() + "_cache.txt";
		File file = new File(FILE_PATH + fileName);
		if (!file.exists())
			return;
		// 获取用户购物车对象
		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();
		}
	}
}

返回 Java程序设计