import java.util.HashMap; import java.util.Map; // 用户数据访问类(提供对用户数据的CRUD操作:增删改查) public class UserDao { // 全局变量:存储所有User的集合 private Map<Integer,User> userMap = new HashMap<>(); // 增 public boolean addUser(User user){ if(!userMap.containsKey(user.getUserNo())){ userMap.put(user.getUserNo(),user); return true; } return false; } // 删 public boolean deleteUser(int userNo){ if(userMap.containsKey(userNo)){ userMap.remove(userNo); return true; } return false; } // 改 public boolean updateUser(User user){ if(userMap.containsKey(user.getUserNo())){ userMap.put(user.getUserNo(),user); return true; } return false; } // 查 public User selectUser(int userNo,String userPwd){ if(userMap.containsKey(userNo)){ User user = userMap.get(userNo); if(userPwd.equalsIgnoreCase(user.getUserPwd())){ return user; } } return null; } // 根据账户查询是否存在指定用户 public boolean checkUserNoExists(int userNo){ return userMap.containsKey(userNo); } }
// 超市会员类 public class User { private String userName; // 用户名称 private Integer userNo; // 用户账号(用于登录的唯一标识) private String userPwd; // 用户密码 private Integer score; // 用户积分 private Date createDate; // 开户日期(yyyy-MM-dd) public User() { } public User(String userName, Integer userNo, String userPwd, Integer score, Date createDate) { this.userName = userName; this.userNo = userNo; this.userPwd = userPwd; this.score = score; this.createDate = createDate; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getUserNo() { return userNo; } public void setUserNo(Integer userNo) { this.userNo = userNo; } public String getUserPwd() { return userPwd; } public void setUserPwd(String userPwd) { this.userPwd = userPwd; } public Integer getScore() { return score; } public void setScore(Integer score) { this.score = score; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } }
// 日期格式化工具类 public class DateFormatUtils { // 将日期对象格式化为yyyy-MM-dd字符格式 public static String dateToString(Date date,String pattern){ if(pattern == null) { pattern = "yyyy-MM-dd"; } return new SimpleDateFormat(pattern).format(date); } }
// 用户业务功能相关实现类 public class UserService { // service依赖dao提供的数据操作能力来完成自己的业务处理能力 private UserDao userDao = new UserDao(); private Scanner input = new Scanner(System.in); // 管理系统启动方法 public void start(){ System.out.println("*********欢迎使用超市会员管理系统***********"); do { printMenu(); int choiceId = input.nextInt(); switch (choiceId){ case 1: addScore(); break; case 2: useScore(); break; case 3: changePwd(); break; case 4: showScore(); break; case 5: addUser(); break; case 6: dropUser(); break; default: System.out.println("谢谢使用!"); return; } System.out.println(); }while (true); } // 打印菜单的方法 private void printMenu(){ System.out.println("***************"); System.out.println("*1.积分累计 *"); System.out.println("*2.积分兑换 *"); System.out.println("*3.修改密码 *"); System.out.println("*4.查询剩余积分 *"); System.out.println("*5.开卡 *"); System.out.println("*6.销卡 *"); System.out.println("*7.退出 *"); System.out.println("****************"); System.out.print("请选择:"); } // 用于用户身份的检查(登录) private User findUser(){ System.out.print("请输入账户:"); int userNo = input.nextInt(); System.out.print("请输入密码:"); String userPwd = input.next(); // 调用Dao提供的“查”方法 User user = userDao.selectUser(userNo,userPwd); if (user == null) { System.out.println("用户账户或密码错误!"); } return user; } // 积分累计 private void addScore(){ // 先登录检查 User user = findUser(); if(user != null) { System.out.print("请输入本次消费金额(1元累计1积分)"); double pay = input.nextDouble(); // 对user积分属性进行修改 user.setScore(user.getScore()+(int)pay); // 修改用户信息 userDao.updateUser(user); System.out.println("用户积分累计成功!当前积分:" + user.getScore()); } } // 积分兑换 private void useScore(){ // 先登录检查 User user = findUser(); if(user != null) { System.out.print("请输入本次要兑换的积分(100积分兑换0.1元,不足100积分不能兑换)"); int payScore = input.nextInt(); // 验证积分是否充足 if(user.getScore() >= payScore){ // 对user积分属性进行修改 user.setScore(user.getScore() - payScore); // 修改用户信息 userDao.updateUser(user); System.out.println("用户积分兑换成功!本次兑换支付金额:" +(payScore * 0.001)+"元。当前剩余积分:" + user.getScore()); } else { System.out.println("您没有足够的积分来兑换!现有积分:" + user.getScore()); } } } // 查询剩余积分 private void showScore(){ // 先登录检查 User user = findUser(); if(user != null) { System.out.println("用户名称:" + user.getUserName()); System.out.println("用户账户:" + user.getUserNo()); System.out.println("剩余积分:" + user.getScore()); System.out.println("开卡日期:" + DateFormatUtils.dateToString(user.getCreateDate(),null)); } } // 修改密码 private void changePwd(){ // 先登录检查 User user = findUser(); if(user != null) { System.out.print("请输入新密码:"); String newPwd = input.next(); System.out.print("请再次输入新密码:"); String rePwd = input.next(); if(rePwd.equals(newPwd)){ // 更新用户 user.setUserPwd(newPwd); // 调用DAO更新用户 userDao.updateUser(user); System.out.println("密码修改成功!"); } else { System.out.println("两次输入密码不一致,修改失败!"); } } } // 开卡 private void addUser(){ User user = new User(); user.setCreateDate(new Date()); // 开卡日期 user.setScore(100); // 开卡即送100积分 System.out.print("请输入用户名:"); user.setUserName(input.next()); System.out.print("请输入开卡密码:"); // 参考修改密码进行二次密码确认,此处省略... user.setUserPwd(input.next()); // 随机生成用户账户(2种方式:1,使用随机数 2,使用日期时间) // 检查生成的账户是否存在 while(true) { Random random = new Random(); int randomNo = random.nextInt(100000000); if(!userDao.checkUserNoExists(randomNo)){ // 设置用户的账户(唯一性) user.setUserNo(randomNo); break; } } // 方式2:通过日期格式化+随机数生成唯一卡号 // String randomDateNo = DateFormatUtils.dateToString(new Date(),"HHmmss"); // randomDateNo+= new Random().nextInt(10000); // int randomNum = Integer.valueOf(randomDateNo); // 整数卡号 // 添加用户 userDao.addUser(user); System.out.println("用户开户成功!您的卡号:"+user.getUserNo()+",请牢记!"); } // 销卡 private void dropUser(){ // 先登录检查 User user = findUser(); if(user != null) { userDao.deleteUser(user.getUserNo()); System.out.println("用户销户成功!"); } } }
/** 测试类 */ public class Main { public static void main(String[] args) { // 启动管理系统 new UserService().start(); } }