会员卡管理系统

//定义一个会员类Member
public class Member {
    //姓名
    private String name;
    //卡号
    private int cardId;
    //密码
    private String password;
    //积分
    private int score;
    //开卡日期
    private String registDate;
    //无参构造
    public Member() {
    }
    //有参构造
    public Member(String name, int cardId, String password, int score, String registDate) {
        this.name = name;
        this.cardId = cardId;
        this.password = password;
        this.score = score;
        this.registDate = registDate;
    }

    public String getName() {
        return name;
    }

    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;
    }
}
import java.text.SimpleDateFormat;
import java.util.*;


//定义一个会员管理类MemberMgr
public class MemberMgr {
    //所有会员卡//创建了一个ArrayList类型的List实例,用于存储Member类型的对象
    List<Member> memberList = new ArrayList<Member>();
    //创建键盘录入对象
    Scanner input = new Scanner(System.in);

    //输出欢迎菜单
    public void menu() {
        System.out.println("-----------------------------欢迎使用会员卡管理系统---------------------------");
        System.out.println("1.开卡    2.修改密码     3.积分累计     4.积分兑换     5.剩余积分查询     6.退出");
        System.out.println("---------------------------------------------------------------------------");
        System.out.println("请选择");

    }
    //搭建项目的整体流程
    public void start() {
        do {
            menu();//静态方法调用可以直接用方法名调用
            int choose = input.nextInt();
            switch (choose) {
                case 1:
                    register();
                    continue;//跳出当前循环迭代
                case 2:
                    if (changePwd()) {
                        System.out.println("新密码设置成功!");
                    }
                    continue;
                case 3:
                    if (savescore()) {
                        System.out.println("您的积分累计成功!");
                    }
                    continue;
                case 4:
                    if (minusscore()) {
                        System.out.println("积分兑换成功!");
                    }
                    continue;
                case 5:
                    showScore();
                    continue;
                case 6:
                    System.out.println("感谢您的使用,欢迎下次使用!");
                    break;//跳出switch
                default:
                    System.out.println("您的操作有误,请重新选择:");
                    continue;//结束本次循环,进入下次循环
            }
            break;

        } while (true);//可以一直重复运行循环

    }
        //系统随机生成一个会员卡号
        public int createId() {
            Random random = new Random();
            //随机函数random
            int id = random.nextInt(99999999);
            //保证生成的会员卡号不能和之前已有的会员卡号重复
            for (Member m : memberList) {
                if (m.getCardId() == id) {
                    id = random.nextInt(99999999);
                }
            }
            return id;
        }

     //开卡
        public void register(){
            Member member=new Member();//生成一串随机数字
            System.out.print("请输入注册姓名:");
            member.setName(input.next());//调用方法setName
            System.out.print("请输入注册密码");// 会员卡密码不能低于6位
            String pwd;boolean flag= true;//输入会员密码是否格式正确
        do {pwd = input.next();if(pwd.length()<6){
            System.out.print("会员密码不能小于6位,请重新输入注册密码:");
            flag = false;
        }else {
            flag = true;
            member.setPassword(pwd);}
        } while(!flag);
            member.setCardId (createId());//调用建卡的方法去建立一个新的卡号
            member.setScore(100);//给新卡赋予100积分
            // 开卡日期
            Date date =new Date();//调用date方法,导入包
            SimpleDateFormat formater = new SimpleDateFormat("MM月dd日");//写一个SimpleDateFormat方法生成一个格式划的日期
            String cardDate=formater.format(date);
            System.out.println("开卡日期是:" +cardDate);//调用了SimpleDateFormat对象的format方法,将Date对象转换为字符串,格式如上所述。
            // 结果将被存储在cardDate字符串变量中。
            member.setRegistDate(cardDate);//最后,将格式化后的日期字符串cardDate设置为member对象的registDate属性。
            //调用setRegistDate方法来建立一个新卡
            //将注册成功的会员添加到会员集合中,并提示开卡成功
            memberList.add(member);
            System.out.println("恭喜,开通会员卡成功!系统赠送您100积分,您的会员卡号是:"
                    + member.getCardId());
    }
    // 验证会员是否存在//查询条件(会员卡号和密码)--封装在参数m中传过来
    public Member hasMember(Member m) {//hasMember方法接收一个类型的参数m,这个参数应该是一个Member对象,包含了要验证的会员卡号和密码。
        // 方法的返回类型也是Member,意味着它将返回一个Member对象,或者在找不到匹配项时返回null。
        Member member = null;//用于存储找到的会员对象,如果没有找到匹配的会员,此变量将保持为null
        for (Member everyMember : memberList) {//这是一个增强型for循环,它遍历memberList集合中的每一个Member对象,everyMember是集合中当前迭代的元素。
            if (m.getCardId() == everyMember.getCardId() &&//检查传入的参数m的卡号getCardId()和密码getPassword()是否与everyMember对象的卡号和密码相匹配。
                    m.getPassword().equals(everyMember.getPassword())) {// 找到了会员,会员是存在的。这里还调用了equals方法
                member = everyMember;//若为真,则赋值给member

            }
        }
        return member;
    }
    //修改密码
    public boolean changePwd() {
        boolean flag = true;//密码修改是否成功
        Member member = new Member();
        System.out.print("请输入您的会员卡号:");
        member.setCardId(input.nextInt());//调用卡号中的member.setCardId方法
        System.out.print("请输入您的会员密码:");
        member.setPassword(input.next());
        member = hasMember(member);// member如果找到了,就是找到的会员对象。如果找不到,member是nu11
        if (member != null) {//会员卡号和密码正确,找到了该会员,此时允许修改密码
            System.out.print("请输入您新的会员密码:");
            String pwd;//声明一个字符串变量pwd,用于存储用户输入的新密码。
            boolean flagPwd = true;// 新设置的会员密码格式是否正确。
            // 声明一个布尔变量flagPwd,初始值为true,用于标记密码格式是否正确。这个标志用于控制密码输入的循环。
            do {
                pwd = input.next();
                if (pwd.length() < 6) {
                    System.out.print("会员密码不能小于6位,请重新输入会员密码:");
                    flagPwd = false;
                } else {
                    member.setPassword(pwd);
                    flag = true;
                    flagPwd = true;
                }
            } while (!flagPwd);
        } else {
            System.out.println("你输入的会员卡号或密码错误,无法修改密码");
            flag = false;
        }
        return flag;
    }
    //积分累计
    public boolean savescore() {
        System.out.print("请输入您的会员卡号:");
        int cardId = input.nextInt();//输入卡号的表达式
        Member member = memberList.stream()//Stream<T> filter(Predicate<? super T> predicate)
                .filter(e -> e.getCardId() == cardId)
                .findAny()
                .orElse(null);
        if (member != null) {
            System.out.print("请输入累计积分:");
            int points = input.nextInt();//读取用户输入的积分数值。
            member.setScore(member.getScore() + points);//将找到的会员的当前积分member.getScore()与新输入的积分points相加,
            // 然后使用setScore方法更新会员的积分。
            return true;
        } else {
            System.out.println("会员卡号不存在,无法累计积分");
            return false;
        }
    }
//积分兑换
    public boolean minusscore() {//因为积分兑换的结果只有正确和不正确,所以定义他为boolean
        System.out.print("请输入您的会员卡号:");
        int cardId = input.nextInt();//读取用户输入的数值
        Member member = memberList.stream()//调用stream方法
                .filter(e -> e.getCardId() == cardId)
                .findAny()
                                                                                                                                                                                                           .orElse(null);
        if (member != null) {//若输入的值不为空
            System.out.print("请输入兑换积分:");
            int points = input.nextInt();//读取用户输入的值
            if (points <= member.getScore()) {//积分够可以换
                member.setScore(member.getScore() - points);
                return true;
            } else {//为空或者不够
                System.out.println("积分不足,无法兑换");
                return false;
            }
        } else {//卡号不正确
            System.out.println("会员卡号不存在,无法兑换积分");
            return false;
        }
    }
//查询积分
    public void showScore() {
        System.out.print("请输入您的会员卡号:");
        int cardId = input.nextInt();//读取用户输入的值
        Member member = memberList.stream()//调用stream方法
                .filter(e -> e.getCardId() == cardId)
                .findAny()
                .orElse(null);
        if (member != null) {
            System.out.println("您的剩余积分为: " + member.getScore());
        } else {
            System.out.println("会员卡号不存在");
        }
    }
}
测试
public class Test{
    public static void main(String[]args) {
        MemberMgr mgr=new MemberMgr();
    mgr.start();
    }}

制作该系统的第一步即明确要创建的变量(需要用什木样的基础数据)

即创建一个基类,用私有属性private进行属性封装,然后进行无参构造方法的创建以及有参构造方法的创建,生成get和set方法。

创建一个会员管理类 ,整个代码的精华所在

1直接创建一个MemberMgr 类,创建一个Arraylist实列用于存储Member类型的对象

2输出欢迎菜单

3创建项目的整体流程

1>创建一个start方法

在start方法中调用菜单,静态方法可以直接调用,嵌套do while循环,然后在do while循环中嵌套一个switch case方法,在switch方法中调用各种方法,再switch case后写出各种要调用的方法

首先用系统生成一个随机的银行卡号,即调用创建卡号方法createId,这里用到随机函数random。并用加强for循环遍历了会员卡号,使其不能重复

之后调用开卡方法register,通过调用member类中的建卡方法来进行开卡工作,注:这里密码验证可以提前定义变量。利用do while循环内嵌套if else语句来完成密码的注册和验证,之后调用date方法来赋予开卡日期

这之后验证一下会员是否存在,之后的方法都需要先输入会员卡号,因此要先验证会员卡号是否存在,用加强for循环。嵌套一个if循环,并且调用.equals方法。

然后撰写修改密码的代码

1>首先定义一个boolean变量确定密码是否修改成功,2个scanner语句进行变量的输入并调用member里的set方法。

2>然后用if else 循环 (当卡号不为空时,可以输入会员卡号密码,此时需要声明变量来存储用户新密码,并检测新密码格式是否正确,或者当卡号为空或者卡号不正确是进入else条件)嵌套一个do while循环(即分为正确和不正确(格式不正确))来进行密码验证操作(包括密码长度和密码是否输入错误问题)

在之后就是积分累计的方法,常规输入输出语句的调用后就是Stream<T> filter(Predicate<? super T> predicate)语法的调用

.filter(e -> e.getCardId() == cardId)
.findAny()
.orElse(null);

代码的后半部分无非就是为空(重新输入)或者不为空(输入要累计的积分)的问题。

那木根据菜单下一步就是积分兑换,积分兑换在这里显示的结果无非是成功或者失败,所以可以创建一个boolean类型的变量以用于被switch case调用。键盘输入并读取用户输入的值然后同上调用Stream方法

.filter(e -> e.getCardId() == cardId)
.findAny()
                              

之后又是熟悉的不为空或者不够(或为空)的环节,这里加了一种不正确,也就是卡号不对,无法进行兑换。

到了代码的最后就是最后一项积分查询,相同的步骤创建方法,然后输入读取用户的值,调用Stream方法

.filter(e -> e.getCardId() == cardId)
.findAny()
.orElse(null);

后面就是为空不为空。

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值