当前位置: 首页 > news >正文

27、Java——超市会员管理系统(对象+IO流)

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。

🍎个人主页:乐趣国学的博客

🍊个人信条:不迁怒,不贰过。小知识,大智慧。

💞当前专栏:Java案例分享专栏

✨特色专栏:国学周更-心性养成之路

🥭本文内容:Java——超市会员管理系统(对象+IO流)

更多内容点击👇

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

目录

项目需求

覆盖知识

开发思路 

开发具体逻辑

1、会员类:Member

2、会员管理类:MemberMethod

3、测试类:MemberTest


项目需求

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

                (1)积分累计

                (2)积分兑换

                (3)查询剩余积分

                (4)查询所有会员信息

                (5)修改密码

                (6)开卡(注册会员)

覆盖知识

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

开发思路 

        (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<Member> listM = new ArrayList<Member>();
            将集合的数据序列化写入members.txt文件中:

	// 定义方法实现向members.txt文件中写入信息
	public static void writeMember(List<Member> listM) {
		ObjectOutputStream oosOrder = null;
		try {
			oosOrder = new ObjectOutputStream(new FileOutputStream("members.txt"));
			oosOrder.writeObject(listM);
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (oosOrder != null) {
					oosOrder.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

    (2)程序整体流程搭建的方法
            循环
            分支
    (3)验证会员是否存在的方法
            反序列化从members.txt文件中读取信息
            然后利用集合的遍历,集合元素的查找

	// 定义方法实现从members.txt文件中读取信息
	@SuppressWarnings("resource")
	public static List<Member> readMember() {
		// 创建输入流
		ObjectInputStream oisOrder = null;
		try {
			oisOrder = new ObjectInputStream(new FileInputStream("members.txt"));
			Object object = oisOrder.readObject();
			@SuppressWarnings("unchecked")
			ArrayList<Member> al = (ArrayList<Member>) object;
			return al;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;

	}

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

    A:开卡
        输入会员信息(会员卡密码的验证--String类相应方法-循环)
            姓名、密码
            卡号:系统随机生成会员卡号的方法
            积分:系统默认100
            开卡日期:日期时间操作(Date类、SimpleDateFormat类)
        将注册成功的会员添加进集合(ArrayList add())            
    B:修改密码
        验证会员是否存在
          会员对象密码属性重新赋值
    C:积分累计
        验证会员是否存在
        会员对象积分属性重新赋值
    D:积分兑换
        验证会员是否存在
        会员积分兑换过程(根据相应规则)
    E:查询剩余积分
        验证会员是否存在
        集合查找相应会员,显示信息(遍历)

    F:查询所有会员信息
        验证会员是否存在
        集合查找所有会员,显示信息(遍历)
    F:退出

    (5) MemberMethod类全部代码

package cn.bdqn.demo01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class MemberMethod {

	// 定义一个Scanner
	Scanner sc = new Scanner(System.in);
	// 定义Member对象
	Member member ;
	// 定义一个Member集合
	List<Member> listM = new ArrayList<Member>();
	
	// 定义方法实现向members.txt文件中写入信息
	public static void writeMember(List<Member> listM) {
		ObjectOutputStream oosOrder = null;
		try {
			oosOrder = new ObjectOutputStream(new FileOutputStream("members.txt"));
			oosOrder.writeObject(listM);
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (oosOrder != null) {
					oosOrder.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	// 定义方法实现从members.txt文件中读取信息
	@SuppressWarnings("resource")
	public static List<Member> readMember() {
		// 创建输入流
		ObjectInputStream oisOrder = null;
		try {
			oisOrder = new ObjectInputStream(new FileInputStream("members.txt"));
			Object object = oisOrder.readObject();
			@SuppressWarnings("unchecked")
			ArrayList<Member> al = (ArrayList<Member>) object;
			return al;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;

	}
	
	// 菜单选择栏
	public void showFirst() {

		writeMember(listM);
		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) {
		listM=readMember();
		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) {
		member=new Member();
		listM=readMember();
		boolean isCId = false;
		if (listM.size() > 0) {
			for (Member memberC : listM) {
				if (mm == memberC.getCardId()
						&& pwd.equals(memberC.getPassword())) {
					isCId = true;
					member = memberC;
					listM.remove(memberC);
					return isCId;
				}
			}
		}
		return isCId;
	}

	// 1、开卡
	public void OpenCard() {
		// 每次都初始化一条member对象
		listM=readMember();
		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);
		writeMember(listM);
		System.out.println("恭喜,开通会员卡成功!系统赠送您" + member.getScore()
				+ "积分,您的会员卡号是:" + member.getCardId());
	}

	// 2、修改密码
	public void changePassword() {
//		listM=readMember();
		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());
			listM.add(member);
			writeMember(listM);
			System.out.println("新密码设置成功!");
		} else {
			System.out.println("您输入的会员卡号或密码错误,无法修改密码!");
		}
	}

	// 3、积分累计
	public void scoresAdd() {
//		listM=readMember();
		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());
			listM.add(member);
			writeMember(listM);
			System.out.println("积分累计成功!你重新累计的积分为:" + member.getScore() + "分");
		} else {
			System.out.println("您输入的会员卡号或密码错误,无法累计积分!");
		}
	}

	// 4、积分兑换
	public void scoresConver() {
//		listM=readMember();
		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("积分不足!");
			}

			listM.add(member);
			writeMember(listM);
		} else {
			System.out.println("您输入的会员卡号或密码错误,无法进行兑换!");
		}
	}

	// 5、剩余积分查询
	public void scoresRemain() {
//		listM=readMember();
		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() {
		listM=readMember();
		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();
	}

}

       码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,请关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

相关文章:

  • 嵌入式分享合集74
  • 布尔模型,向量空间模型
  • 详解数商云采购协同系统供应商准入流程,加强汽修供应商管理革新企业采购渠道
  • 基于JAVA医护人员排班系统计算机毕业设计源码+系统+lw文档+部署(2)
  • Springboot 一个注解搞定返回参数key转换 【实用】
  • 【新手向】Rock5B启动fan接口并设置开机自启(pwm调速)
  • 史上最简SLAM零基础解读(7) - Jacobian matrix(雅可比矩阵) → 理论分析与应用详解(Bundle Adjustment)
  • 深度理解CNN中的感受野(大杀器)
  • Html实现简单的拖拉拽功能
  • Unity Addressables 热更新 基础
  • Spring IOC核心知识
  • y160.第九章 GitOps从入门到精通 -- Tekton Trigger(九)
  • Lambda表达式详解
  • Intel汇编-使用SBB和DAS执行减法操作
  • 10-11 周二 vscode搭建python开发环境
  • Angular 响应式表单 基础例子
  • git 常用命令
  • Golang-长连接-状态推送
  • Java 多线程编程之:notify 和 wait 用法
  • Java编程基础24——递归练习
  • k个最大的数及变种小结
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Python_OOP
  • React-Native - 收藏集 - 掘金
  • Vultr 教程目录
  • 二维平面内的碰撞检测【一】
  • 分布式任务队列Celery
  • 观察者模式实现非直接耦合
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 前端性能优化--懒加载和预加载
  • 区块链分支循环
  • 如何在GitHub上创建个人博客
  • 小程序测试方案初探
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 栈实现走出迷宫(C++)
  • Hibernate主键生成策略及选择
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 如何在招聘中考核.NET架构师
  • 通过调用文摘列表API获取文摘
  • 移动端高清、多屏适配方案
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (力扣)循环队列的实现与详解(C语言)
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)终结任务
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (转)程序员技术练级攻略
  • .net 微服务 服务保护 自动重试 Polly
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • []sim300 GPRS数据收发程序
  • [APIO2012] 派遣 dispatching