利用集合框架实现-超市会员管理系统

news2024/11/16 22:29:26

借助集合框架来实现超市会员管理系统,实现以下功能:

1.开卡   2.积分累计   3.查询剩余积分   4.积分兑换   5.修改密码   6.退出

--------------------------------------------------------------------------------------------------

展示:

 

 

--------------------------------------------------------------------------------------------------

1.创建会员Member类

package dh05.test;
//会员类
public class Member {
	private String name;//会员名
	private int id;//会员卡号
	private String pwd;//会员密码
	private String firstDate;//开卡日期
	private int scores;//积分
	
	//构造函数-------------------------------
	public Member() {
	}
	
	public Member(String name, int id, String pwd, String firstDate, int scores) {
		this.name = name;
		this.id = id;
		this.pwd = pwd;
		this.firstDate = firstDate;
		this.scores = scores;
	}
	//-----------------------------------
	@Override
	public String toString() {
		return "Member [会员名=" + name + ", 卡号=" + id + ", 密码=" + pwd + ", 开卡日期=" + firstDate + ", 积分="
				+ scores + "]";
	}
	//set&get-----------------------------
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getFirstDate() {
		return firstDate;
	}
	public void setFirstDate(String firstDate) {
		this.firstDate = firstDate;
	}
	public int getScores() {
		return scores;
	}
	public void setScores(int scores) {
		this.scores = scores;
	}
	
	
	
}

--------------------------------------------------------------------------------------------------

2.创建会员服务类

部分分析:

  1. 每次进行操作的时候,都需要对集合中的数据进行查询,因此需要写查询会员是否存在集合的方法,便于后续操作的使用

    //验证会员是否存在
        public Member hasMember(Member m) {
            Member member = null;

            //如果输入的ID跟密码都正确,则证明该会员存在,可以进行下一步的操作
            for (Member everyMember : list) {
                if (m.getId() == everyMember.getId() && m.getPwd().equals(everyMember.getPwd())) {
                    member = everyMember;
                }
            }
            return member;
        }

  2. 循环打印系统信息便于操作

    //show方法
        public void show() {
            System.out.println("**********欢迎进入超市会员管理系统**********");
            System.out.println("1.开卡   2.积分累计   3.查询剩余积分   4.积分兑换   5.修改密码   6.退出");
            System.out.println("************************************");
            System.out.print("请选择:");
        }

  3. ​​​​​生成指定范围的随机数

    n=rand.nextInt(max-min+1)+min (范围)

详细代码如下:

//会员业务类

import java.util.List;
import java.util.Random;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Scanner;

public class MemberSer {
	Scanner sc = new Scanner(System.in);
	List<Member> list = new ArrayList<Member>();// 建立集合,member泛型
	
	/*
	 * 1.开卡 ---》赠送积分100 2.积分累计 3.查询剩余积分 4.积分兑换 5.修改密码 6.退出
	 */
	public void start() {

		boolean isIn = true;
		do {
			show();
			switch (sc.nextInt()) {
			case 1:
				// 开卡
				newVIP();
				continue;
			case 2:
				// 积分累计
				if (addScores()) {
					System.out.println("积分累计成功!");
				}
				continue;

			case 3:
				// 查询剩余积分
				lookScores();
				continue;
			case 4:
				// 积分兑换
				excScores();
				continue;

			case 5:
				// 修改密码
				if (changePwd()) {
					System.out.println("密码修改成功!");
				}
				continue;

			case 6:
				// 退出
				System.out.println("感谢使用!");
				isIn = false;
				continue;
			default:
				System.out.println("输入有误,请重新输入!");
				continue;
			}

		} while (isIn);

	}

//------------------------------------
//show方法
	public void show() {
		System.out.println("**********欢迎进入超市会员管理系统**********");
		System.out.println("1.开卡   2.积分累计   3.查询剩余积分   4.积分兑换   5.修改密码   6.退出");
		System.out.println("************************************");
		System.out.print("请选择:");
	}

//验证会员是否存在
	public Member hasMember(Member m) {
		Member member = null;
		for (Member everyMember : list) {
			if (m.getId() == everyMember.getId() && m.getPwd().equals(everyMember.getPwd())) {
				member = everyMember;
			}
		}
		return member;
	}

// 开卡方法
	public void newVIP() {
		Member member = new Member();// 定义member对象
		// 1.开卡 ---》赠送积分100
		// 生成随机卡号(6位卡号)
		System.out.print("请输入注册姓名:");
		member.setName(sc.next());
		System.out.print("请输入注册密码:");
		// 会员卡密码不能低于6位
		boolean bool = true;
		while (bool) {
			String pwd = sc.next();
			if (pwd.length() < 6) {
				System.out.print("密码长度不能小于6位,请重新输入密码:");
				continue;
			} else {
				member.setPwd(pwd);
				bool = false;
			}
		}
		// 记录第一次开卡时间
		Date date = new Date();
		// 格式化日期
		SimpleDateFormat formater = new SimpleDateFormat("yyyy年MM月dd日");
		String firstDate = formater.format(date);
		member.setFirstDate(firstDate);// 存第一次开卡时间

		member.setId(createID());// 存ID
		member.setScores(100);// 初始化积分100
		// 将注册成功的会员添加到会员集合中,并提示开卡成功
		list.add(member);
		System.out.println("开卡成功,赠送100积分,您的会员卡号为:" + member.getId());
	}

//生成会员卡号
	public int createID() {
		// 生成6位随机数
		// n=rand.nextInt(max-min+1)+min (范围)
		int min = 100000;
		int max = 999999;
		Random random = new Random();
		int newID = random.nextInt(max - min + 1) + min;
		// 保证生成的会员卡号和之前已有的的不重复
		for (Member member : list) {
			if (member.getId() == newID) {
				newID = random.nextInt(max - min + 1) + min;
			}
		}
		return newID;
	}

//积分累计	
	public boolean addScores() {
		boolean bool = true;//累计积分是否成功
		Member member = new Member();
		System.out.print("请输入您的会员卡号:");
		member.setId(sc.nextInt());
		System.out.print("请输入您的会员密码:");
		member.setPwd(sc.next());
		member = hasMember(member);//找member对象
		if (member != null) {
			// 进行加的操作
			System.out.print("请输入本次消费金额(积分取整比率  1:1)");
			int money = sc.nextInt();
			member.setScores(member.getScores() + money);
			bool = true;
			System.out.println("积分累计成功,您当前的积分为:" + member.getScores());
		} else {
			System.out.println("会员卡号或密码错误,无法累计积分!");
			bool = false;
		}
		return bool;
	}

//查询剩余积分
	public void lookScores() {
		Member member = new Member();
		System.out.print("请输入您的会员卡号:");
		member.setId(sc.nextInt());
		System.out.print("请输入您的会员密码:");
		member.setPwd(sc.next());
		member = hasMember(member);//找member对象
		if (member != null) {
			System.out.println("姓名\t会员卡号\t剩余积分\t开卡日期");
			System.out.println(member.getName()+"\t"+member.getId()+"\t"+member.getScores()+"\t"+member.getFirstDate());
		}else {
			System.out.println("您输入的额会员卡号或密码错误,无法查询积分!");
		}
	}
//积分兑换
	public boolean excScores() {
		boolean bool = true;//积分兑换是否完成
		Member member = new Member();
		System.out.print("请输入您的会员卡号:");
		member.setId(sc.nextInt());
		System.out.print("请输入您的会员密码:");
		member.setPwd(sc.next());
		
		member = hasMember(member);
		if (member != null) {
			System.out.print("请输入要兑换使用的积分(100积分抵用1元,不足100不能抵用):");
			int score = sc.nextInt();
			//对会员想要兑换的积分进行判断
			if (score<=member.getScores()) {
			//能兑换
				member.setScores(member.getScores()-score);
				System.out.println("您使用积分抵扣了"+score/100+"元");
				bool = true;
			}else {
				System.out.println("积分不够,无法抵扣!");
				bool = false;
			}
		}else {
			System.out.println("会员卡号或密码错误,无法完成积分兑换!!!!");
			bool = false;
		}
		
		return bool;
	}
//修改密码
	public boolean changePwd() {
		boolean bool = true;
		Member member = new Member();
		System.out.print("请输入您的会员卡号:");
		member.setId(sc.nextInt());
		System.out.print("请输入您的会员密码:");
		member.setPwd(sc.next());
		member = hasMember(member);
		// 找到会员对象才可以进行修改
		if (member != null) {
			System.out.print("请输入新的密码:");
			String newPwd;// 设置新的密码
			boolean bool1 = true;// 新的会员密码格式是否正确
			while (bool1) {
				newPwd = sc.next();
				if (newPwd.length() < 6) {
					System.out.print("密码长度不能小于6位,请重新输入密码:");
					continue;
				} else {
					member.setPwd(newPwd);
					bool1 = false;// 新设置的密码格式正确
					bool = true;// 密码修改成功
				}
			}

		} else {
			System.out.println("会员卡号或密码错误,无法修改密码。");
			bool = false;
		}
		return bool;
	}

}

--------------------------------------------------------------------------------------------------

3.测试类

//测试类
/*
 * 为某超市开发一个超市会员管理系统,实现会员的管理,具体实现功能如下:
      1.积分累计   2.积分兑换   3.查询剩余积分   4.修改密码   5.开卡   6.退出
 */
public class Test {

	public static void main(String[] args) {
		MemberSer memberSer = new MemberSer();
		memberSer.start();
	}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/757233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一堂棒球课:MLB棒球大联盟青训体系·野球1号位

介绍MLB棒球大联盟青训体系 1. 引言 这里我们将深入探讨MLB棒球大联盟青训体系的故事&#xff0c;了解它是如何成为全球青少年最梦寐以求的梦想&#xff0c;以及它对世界棒球运动产生的深远影响。 MLB棒球大联盟青训体系&#xff0c;即MLB Youth Coaching Program&#xff0c…

java项目之东理咨询交流论坛(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的东理咨询交流论坛。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架…

Java并发编程(10) —— ReentrantLock类详解

一、ReentrantLock介绍 ReentrantLock是juc.locks包中的一个独占式可重入锁&#xff0c;相比synchronized&#xff0c;它可以创建多个条件等待队列&#xff0c;还支持公平/非公平锁、可中断、超时、轮询等特性。 ReentrantLock实现Lock接口实现了一个锁所需的方法&#xff0c…

CSS基础特性

一、CSS概述 1.1、概述 CSS&#xff08;层叠样式表&#xff09;是一种用来表现HTML&#xff08;标准通用标记语言的一个应用&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。CSS 不仅可以静态地修饰网页&#xff0c;还可以配合…

[JVM] 3. 类加载子系统(2)-- 类加载器、双亲委派机制(JDK1.8及之前)及其他

前言 JDK1.8及之前和JDK9及之后的双亲委派模型是不一样的&#xff0c;这里学习了1.8及以前的双亲委派模型&#xff0c;记录笔记 一、类加载器 1.8之前主要是这几种类加载器&#xff1a; 1. 启动类加载器(Bootstrap ClassLoader)&#xff1a; 负责将存放在<JAVA_HOME>…

JavaScript中值和变量

值是指可以存储在计算机内存中的数据。这些数据可以是数字、字符串、布尔值、对象等。变量是一种用于存储值的容器。 ● 在JS中&#xff0c;我们可以使用let参数也创建一个变量&#xff0c;使用给变量赋值&#xff0c;例如 let ITshare "IT知识一享";● 之后我们打…

力扣小技巧:如何用最简单的方式实现小写字母转换

本篇博客会讲解力扣“709. 转换成小写字母”的解题思路&#xff0c;这是题目链接。 本题的解法非常简单&#xff0c;只需利用tolower函数即可。这个函数的作用是将所有大写字母转换为小写字母&#xff0c;而对其他字符不做任何改变。 char * toLowerCase(char * s){// 把字符串…

1769_Source Insight数字前缀后缀乱码解决方法

全部学习汇总&#xff1a; GreyZhang/editors_skills: Summary for some common editor skills I used. (github.com) 这算是一个偶然的发现&#xff0c;写代码的时候发现十六进制的数字显示前缀0x显示错误。如果只输入一个0x正常&#xff0c;写成一个十六进制数据诸如0x123之后…

分析中心常见的协议字段以及语法

布尔运算符 基本语法 图中以及描述得很详细了。 日志检索高级查询语法 通配符查询&#xff1a;在一项内的单个字符用&#xff1f;去查&#xff0c;多个字符用*去查询&#xff0c;例如想查mysql和mssql就可以使用db_type:m?sql 去查询&#xff0c;而要查sql结尾就用 *sql 去…

SQL Server启用sa账户

一、简介 在安装好 SQL Server 后&#xff0c;默认 sa 用户是禁用且也没有启用 SQL Server 登陆验证&#xff0c;这需要手动开启。接下来&#xff0c;开始我们今天的教程吧。 二、sa 登陆 2.1 启用 sa 首先&#xff0c;使用 Windows 验证登陆 登陆成功后&#xff0c;找到…

Java032——反射(Reflection)

一、Java中的反射及作用 Java的反射(reflection)机制是指在程序的运行状态中&#xff1a; 可以构造任意一个类的对象&#xff0c;可以了解任意一个对象所属的类&#xff0c;可以了解任意一个类的成员变量和方法&#xff0c;可以调用任意一个对象的属性和方法。 一句话&#…

数据结构day2(2023.7.15)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;定义车的信息&#xff1a;品牌&#xff0c;单价&#xff0c;颜色&#xff0c;车牌号 struct Car{char name[20]; //品牌int price; //单价char color[10] //颜色char id[20] //车牌…

Spring【 Spring整合MyBatis、SpringAOP(AOP简介 、AOP相关术语、AOP入门)】(五)-全面详解(学习总结---从入门到深化)

目录 Spring整合MyBatis_准备数据库和实体类 Spring整合MyBatis_编写持久层接口和service类 Spring整合MyBatis_Spring整合Junit进行单元测试 Spring整合MyBatis_自动创建代理对象 SpringAOP_AOP简介 SpringAOP_AOP相关术语 SpringAOP_AOP入门 Spring整合MyBatis_准备数据…

推荐几个github上非常受欢迎的库

推荐几个github上非常受欢迎的库 The Book of Secret Knowledge the-book-of-secret-knowledge 这个仓库里边包含了一系列非常有趣的手册、备忘单、博客、黑客、单行话、cli/web 工具等。 Coding Interview University coding-interview-university 这里列出的项目可以帮助…

基于Ubuntu20.4的TMS320C6678开发环境(CCS8.3.1)的搭建

网上关于ccs的安装大多是基于ccs5及以前的版本安装介绍或基于windows版本的ccs软件的安装,没有关于linux系统上安装CCS8.3.1的集成开发环境。本文介绍在ubuntu20.4的系统上安装ccs8.3.1的DSP开发环境&#xff0c;本文包括CCS软件和插件的下载&#xff0c;安装。本文在ubuntu20.…

fpga下载程序到flash后无法在重新上电后自动加载程序

可能是接的调试器没有断电&#xff0c;断电一次再给调试器上电。如果调试器一直连着可以连续断电上电fpga开发板&#xff0c;直到成功。fpga貌似上电后什么程序都不加载则引脚为高电平&#xff0c;而vivado默认.xdc的BITSTREAM.CONFIG.UNUSEDPIN&#xff08;未使用的引脚&#…

vue3 - 01搭建工程

1. 使用vue-cli创建工程 1. 命令&#xff1a;vue create xxx2. 选择vue3版本3. 进入目录4. 运行&#xff1a; npm run serve 在执行完运行指令后如果报错请查看是否是以下错误&#xff0c;如果是可以按以下步骤进行解决&#xff1a; ERROR in Conflict: Multiple assets emit …

命令执行绕过

首先以一道BUUCTF题目来开下胃 查看flag&#xff1a; 其次给大家上主菜-----命令执行绕过 命令执行漏洞绕过方式&#xff1a; 管道符 windows中常见管道符&#xff1a; | 直接执行后面的语句 || 如果前面命令是错的那么就执行后面的语句&#xff0c;否则只执行前面的语…

DEV C++ 更改界面语言

第一步&#xff1a;选中tools&#xff0c;然后从里面找Environment optional 第二步&#xff1a;从里面找到Language选项&#xff0c;找到简体中文 选中简体中文后点击“OK”就可以了

go语言 socket: too many open files 错误分析

问题背景&#xff1a; 近期针对老的PHP接口做了迁移重构&#xff0c;用golang重新实现&#xff0c;在上线之前&#xff0c;测试进行了压测&#xff0c;压测的量级为&#xff1a;200请求/s, 连续请求10s&#xff0c;发现接口出现大量超时错误&#xff0c;查看日志发现错误信息为…