Java任务:缓存购物车

来自CloudWiki
Cloud17讨论 | 贡献2018年6月16日 (六) 14:32的版本 任务实现
跳转至: 导航搜索

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程序设计

程序代码

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程序设计