21、Java——超市会员管理系统(对象+集合)

简介: 21、Java——超市会员管理系统(对象+集合)

项目需求


        为某超市开发一个超市会员管理系统,实现会员的管理,具体实现功能如下:


               (1)积分累计


               (2)积分兑换


               (3)查询剩余积分


               (4)查询所有会员信息


               (5)修改密码


               (6)开卡(注册会员)


覆盖知识


       程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、集合、实用类等


开发思路

       (1)明确需求


       (2)编码顺序


               1)、数据初始化


               2)、循环完成各种超市会员管理操作


               3)、菜单切换


       (3)测试


开发具体逻辑


1、会员类:Member

   (1)姓名        name:String

   (2)卡号        cardId:int

   (3)密码        password:String

   (4)积分        score:int

   (5)开卡日期    registDate:String    


      代码:


public class Member {
  // 定义属性
  private String name;
  private int cardId;
  private String password;
  private int score;
  private String registDate;
  public String getName() {
  return name;
  }
  // 定义get/set方法
  public void setName(String name) {
  this.name = name;
  }
  public int getCardId() {
  return cardId;
  }
  public void setCardId(int cardId) {
  this.cardId = cardId;
  }
  public String getPassword() {
  return password;
  }
  public void setPassword(String password) {
  this.password = password;
  }
  public int getScore() {
  return score;
  }
  public void setScore(int score) {
  this.score = score;
  }
  public String getRegistDate() {
  return registDate;
  }
  public void setRegistDate(String registDate) {
  this.registDate = registDate;
  }
}

2、会员管理类:MemberMethod

   (1)所有会员(卡)--集合:ArrayList listM = new ArrayList();


   (2)程序整体流程搭建的方法

           循环

           分支

   (3)验证会员是否存在的方法

           集合的遍历,集合元素的查找

   (4)系统随机生成会员卡号的方法

           Math.random()方法


   A:开卡

       输入会员信息(会员卡密码的验证--String类相应方法-循环)

           姓名、密码

           卡号:系统随机生成会员卡号的方法

           积分:系统默认100

           开卡日期:日期时间操作(Date类、SimpleDateFormat类)

       将注册成功的会员添加进集合(ArrayList add())            

   B:修改密码

       验证会员是否存在

         会员对象密码属性重新赋值

   C:积分累计

       验证会员是否存在

       会员对象积分属性重新赋值

   D:积分兑换

       验证会员是否存在

       会员积分兑换过程(根据相应规则)

   E:查询剩余积分

       验证会员是否存在

       集合查找相应会员,显示信息(遍历)


   F:查询所有会员信息

       验证会员是否存在

       集合查找所有会员,显示信息(遍历)

   F:退出


   (5) 代码


public class MemberMethod {
  // 定义一个Scanner
  Scanner sc = new Scanner(System.in);
  // 定义Member对象
  Member member = new Member();
  // 定义一个Member集合
  ArrayList listM = new ArrayList();
  // 菜单选择栏
  public void showFirst() {
  System.out
    .println("****************************************欢迎使用超市会员管理系统*****************************************");
  System.out
    .println("1.开卡\t2.修改密码\t3.积分累计\t4.积分兑换\t5.剩余积分查询\t6.查看所有会员信息\t7.退出");
  System.out
    .println("*******************************************************************************************************");
  }
  // 会员卡号随机产生方法
  public int cardRandom() {
  return (int) (Math.random() * (19999999 - 10000000) + 10000000);
  }
  // 注册时判断会员是否存在
  public boolean isCardId(int mm) {
  boolean isCId = false;
  if (listM.size() > 0) {
    for (Member memberC : listM) {
    if (mm == memberC.getCardId()) {
      isCId = true;
      return isCId;
    }
    }
  }
  return isCId;
  }
  // 判断会员卡和密码是否正确
  public boolean isMember(int mm, String pwd) {
  boolean isCId = false;
  if (listM.size() > 0) {
    for (Member memberC : listM) {
    if (mm == memberC.getCardId()
      && pwd.equals(memberC.getPassword())) {
      isCId = true;
      member = memberC;
      return isCId;
    }
    }
  }
  return isCId;
  }
  // 1、开卡
  public void OpenCard() {
  // 每次都初始化一条member对象
  member = new Member();
  do {
    member.setCardId(cardRandom());
  } while (isCardId(member.getCardId()));
  System.out.print("请输入注册姓名:");
  member.setName(sc.next());
  System.out.print("请输入注册密码:");
  String password1 = sc.next();
  do {
    if (password1.length() < 6) {
    System.out.print("会员密码不能小于6位,请重新输入注册密码:");
    password1 = sc.next();
    }
  } while (password1.length() < 6);
  member.setPassword(password1);
  member.setScore(100);
  Date data = new Date();
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
  member.setRegistDate(sdf.format(data));
  listM.add(member);
  System.out.println("恭喜,开通会员卡成功!系统赠送您" + member.getScore()
    + "积分,您的会员卡号是:" + member.getCardId());
  }
  // 2、修改密码
  public void changePassword() {
  System.out.print("请输入您的会员卡号:");
  int cardNum = sc.nextInt();
  System.out.print("请输入您的会员密码:");
  String cardPwd = sc.next();
  if (isMember(cardNum, cardPwd)) {
    System.out.print("请输入您的会员新密码:");
    member.setPassword(sc.next());
    System.out.println("新密码设置成功!");
  } else {
    System.out.println("您输入的会员卡号或密码错误,无法修改密码!");
  }
  }
  // 3、积分累计
  public void scoresAdd() {
  System.out.print("请输入您的会员卡号:");
  int cardNum = sc.nextInt();
  System.out.print("请输入您的会员密码:");
  String cardPwd = sc.next();
  if (isMember(cardNum, cardPwd)) {
    System.out.print("请输入本次消费金额(消费1元累计1分):");
    int scoreCurrent = sc.nextInt();
    member.setScore(scoreCurrent + member.getScore());
    System.out.println("积分累计成功!你重新累计的积分为:" + member.getScore() + "分");
  } else {
    System.out.println("您输入的会员卡号或密码错误,无法累计积分!");
  }
  }
  // 4、积分兑换
  public void scoresConver() {
  System.out.print("请输入您的会员卡号:");
  int cardNum = sc.nextInt();
  System.out.print("请输入您的会员密码:");
  String cardPwd = sc.next();
  if (isMember(cardNum, cardPwd)) {
    System.out.print("请输入您要兑换使用的积分(100积分抵用0.1元,不足100的积分不做抵用):");
    int scoreCurrent = sc.nextInt();
    if (scoreCurrent < member.getScore()&&scoreCurrent>100) {
    member.setScore(member.getScore() - scoreCurrent);
    System.out.println("您消费金额中使用会员积分抵扣了0."
      + (scoreCurrent /100) + "元");
    }else if(scoreCurrent<100){
    System.out.println("不满足积分兑换规则,不足100的积分不做抵用!");
    }else {   
    System.out.println("积分不足!");
    }
  } else {
    System.out.println("您输入的会员卡号或密码错误,无法进行兑换!");
  }
  }
  // 5、剩余积分查询
  public void scoresRemain() {
  System.out.print("请输入您的会员卡号:");
  int cardNum = sc.nextInt();
  System.out.print("请输入您的会员密码:");
  String cardPwd = sc.next();
  if (isMember(cardNum, cardPwd)) {
    System.out.println("会员信息【会员卡号:" + member.getCardId() + ",姓名:"
      + member.getName() + ",可用积分:" + member.getScore()
      + ",开卡时间:" + member.getRegistDate() + "】");
  } else {
    System.out.println("您输入的会员卡号或密码错误,无法查询到信息!");
  }
  }
  // 6、查看所有会员信息
  public void LookMembers() {
  int i = 0;
  for (Member member : listM) {
    i++;
    System.out.println("会员" + i + "信息【会员卡号:" + member.getCardId()
      + ",姓名:" + member.getName() + ",可用积分:" + member.getScore()
      + ",开卡时间:" + member.getRegistDate() + "】");
  }
  }
  public void MainMethod() {
  boolean isIn = true;
  do {
    showFirst();
    System.out.print("请选择:");
    switch (sc.nextInt()) {
    case 1:
    OpenCard();
    break;
    case 2:
    changePassword();
    break;
    case 3:
    scoresAdd();
    break;
    case 4:
    scoresConver();
    break;
    case 5:
    scoresRemain();
    break;
    case 6:
    LookMembers();
    break;
    case 7:
    isIn = false;
    break;
    }
  } while (isIn);
  }


3、测试类:MemberTest

   会员管理类的调用


   代码:

public class MemberTest {
  public static void main(String[] args) {
  MemberMethod memberM=new MemberMethod();
  memberM.MainMethod();
  }
}


相关文章
|
2天前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
15 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
13天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
32 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
|
14天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
40 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统
|
14天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的美容预约管理系统
基于Java+Springboot+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的美容预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
25 3
基于Java+Springboot+Vue开发的美容预约管理系统
|
6天前
|
存储 算法 安全
深入理解Java中的集合框架
【9月更文挑战第34天】本文将带你走进Java的集合框架,探索其背后的设计哲学和实现细节。我们将从集合的基本概念出发,逐步深入到具体的接口和类的实现,最后通过一个实际的例子来展示如何在Java程序中高效地使用集合。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深度理解。
12 1
|
16天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
14 2
|
2天前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
8 0
|
12天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
32 2
|
1天前
|
Java 关系型数据库 MySQL
如何用java的虚拟线程连接数据库
本文介绍了如何使用Java虚拟线程连接数据库,包括设置JDK版本、创建虚拟线程的方法和使用虚拟线程连接MySQL数据库的示例代码。
14 6
如何用java的虚拟线程连接数据库
|
4天前
|
Java 数据库 UED
Java的多线程有什么用
Java的多线程技术广泛应用于提升程序性能和用户体验,具体包括:提高性能,通过并行执行充分利用多核CPU;保持响应性,使用户界面在执行耗时操作时仍流畅交互;资源共享,多个线程共享同一内存空间以协同工作;并发处理,高效管理多个客户端请求;定时任务,利用`ScheduledExecutorService`实现周期性操作;任务分解,将大任务拆分以加速计算。多线程尤其适用于高并发和并行处理场景。