“Java任务:缓存购物车”的版本间的差异
来自CloudWiki
(→Java任务:缓存购物车) |
(→任务实现) |
||
第13行: | 第13行: | ||
==任务实现== | ==任务实现== | ||
− | + | 将上个实训中的UserDao用文件存储的形式实现,其余不变。 | |
− | === | + | ===文件存储类UserDaoFile=== |
− | |||
− | |||
− | + | <nowiki>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); | |
− | try( | + | success=false; |
− | + | } | |
− | + | ||
− | } catch ( | + | if(success) { |
− | + | System.out.println("用户 "+user.getName() +" 注册成功"); | |
− | + | System.out.println(); | |
− | } | + | } |
− | + | ||
− | + | } | |
− | + | ||
− | + | /** | |
− | + | * 查询文件存储中的用户 | |
− | + | */ | |
− | public | + | 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){ | |
− | } catch ( | + | System.out.println("出现异常:"+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; | ||
+ | } | ||
+ | |||
+ | |||
}</nowiki> | }</nowiki> | ||
− | |||
− | + | ===业务逻辑类UserService=== | |
+ | 将红框内代码做如下改动: | ||
− | + | [[文件:java6-18.png]] | |
− | + | 返回 [[Java程序设计]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==程序代码== | ==程序代码== | ||
2018年6月16日 (六) 14:32的版本
Java任务:缓存购物车
当退出程序的时候,需要实现缓存购物车中数据,完成效果如图6-5所示。
图6-5 缓存购物车中数据的文件
当登录后需要读取缓存文件数据,此时若在控制台显示,完成效果如图6-6所示。
图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
将红框内代码做如下改动:
返回 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程序设计