第五次项目《超市会员管理Plus》

2024-02-26 10:38

本文主要是介绍第五次项目《超市会员管理Plus》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

超市会员管理系统

先写架构,在补全方法,找一个好头开始一步步完善。

/*** 会员类* @author 周太阳* @version 1.0* @date 2019年4月23日 下午4:32:27*/
class Member {/**姓名*/private String name;/**卡号*/private int cardId;/**密码*/private String password;/**开卡时间*/private Date registDate;/**积分*/private int score;public Member() {super();}public Member(String name, int cardId, String password,Date registDate, int score) {super();this.name = name;this.cardId = cardId;this.password = password;this.registDate = registDate;this.score = score;}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 Date getRegistDate() {return registDate;}public void setRegistDate(Date registDate) {this.registDate = registDate;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");sb.append("姓名:"+name).append("\n卡号:"+cardId).append("\n积分:"+score).append("\n开卡时间:"+format.format(registDate));return sb.toString();}
}/*** 超市会员管理Plus* @author 周太阳* @version 1.0* @date 2019年4月22日 下午5:22:16*/
class SuperMarketMember {static Scanner input = new Scanner(System.in);/**开卡*/public void createCard() {System.out.println("***欢迎进入注册系统***");System.out.print("请输入您的姓名:");String userName = input.next();do {System.out.print("请输入密码(密码长度不能小于6!):");String userPwd = input.next();if (userPwd.length() < 6) {System.out.println("密码长度不能小于6!");continue;}else {System.out.print("请再次输入密码:");String again = input.next();// 判断再次输入密码是否正确if (again.equals(userPwd)) {// 生成随机卡号int userNo = createRandom();// 创建用户Member member = new Member(userName, userNo, userPwd, new Date(), UserData.GIVE_SCORE);// 存入Set集合UserData.user.add(member);// 时间转换SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");// 获得转换后的时间String regisertDate = format.format(member.getRegistDate());System.out.println("开卡成功!请牢记您的卡号和密码!系统赠送您"+member.getScore()+"积分,您的卡号是:"+userNo+"\n开卡时间是:"+regisertDate);break;}else {System.out.println("两次输入的密码不相同!");continue;}}}while(true);}/**登陆*/public void login() {System.out.print("请请输入卡号:");Integer inputUserNo = input.nextInt();System.out.print("请输入密码:");String inputUserPwd = input.next();// 判断用户账号是否存在且密码是否和用户输入相同Member user = userInfo(inputUserNo, inputUserPwd);if (user != null) {// 给予对象并执行菜单selectFunction(user);}else {System.out.println("您的账号或密码错误!");}}/**菜单*/public void menu() {System.out.println("******************☆欢迎进入主菜单☆************************");System.out.println("1、积分累计 2、积分兑换 3、查询剩余积分 4、修改密码 5、退出");System.out.println("************************************************************");System.out.print("请选择:");}/**选择功能*/public void selectFunction(Member user) {outer:do {menu();int chooise = input.nextInt();// 菜单选项switch(chooise) {case 1:// 积分累计addScore(user);break;case 2:// 积分兑换exchangeScore(user);break;case 3:// 查询积分searchScore(user);break;case 4:// 修改密码modifyPwd(user);System.out.println("密码已修改,请重新登录!");break outer;case 5:// 退出System.out.println("已登出");break outer;default:System.out.println("输入错误!");break;}}while(true);}/**Set循环判断用户对象是否存在,且账号密码是否正确*/public Member userInfo(Integer inputUserNo,String inputUserPwd) {// 创建迭代器Iterator<Member> iterator = UserData.user.iterator();// 查找对象声明变量valueMember user = null;// 循环while(iterator.hasNext()) {user = iterator.next();// 如果找到用户输入卡号和Set中的对象卡号一致就停止if (user.getCardId() == inputUserNo) {break;}}// 判断卡号和密码是否正确if (user.getCardId() == inputUserNo && user.getPassword().equals(inputUserPwd)) {// 返回对应卡号的对象return user;}return null;}/**积分累计*/public void addScore(Member user) {System.out.println("请输入您此次的消费金额(消费1元累计1积分):");int expense = input.nextInt();if (expense > 100) {// 当前积分int score = user.getScore();// 将新的积分装进Set集合user.setScore(score+expense);System.out.println("您此次消费"+expense+"元"+"兑换积分:"+expense+"分\n当前积分为:"+user.getScore());}else {System.out.println("100以下的积分不予累计!多购些商品吧~");}}/**积分兑换*/public void exchangeScore(Member user) {System.out.println("您的积分是:"+user.getScore());do {System.out.println("请输入您需要兑换的积分(100分抵0.1元,不足100的积分不抵用):");int exchange = input.nextInt();// 判断积分是否合理if (exchange <= user.getScore() || exchange > 0) { // 积分取100整int money = Math.floorDiv(exchange, 100);// 消费积分int expense = money*100;// 新的积分user.setScore(user.getScore()-expense);System.out.printf("您的此次消费中已用"+expense+"积分抵消%.2f元。\n\r",money*0.1);break;}else {System.out.println("您输入的积分错误,请输入正确的积分!");continue;}}while(true);}/**查询剩余积分*/public void searchScore(Member user) {System.out.println(user);}/**修改密码*/public void modifyPwd(Member user) {do {System.out.print("请输入您的密码:");String userPwd = input.next();// 判断密码是否输入正确if (user.getPassword().equals(userPwd)) {System.out.print("请输入您的新密码:");String newPws = input.next();if (newPws.length() >= 6) {user.setPassword(newPws);System.out.println("密码修改成功!");break;}else {System.out.println("密码不能小于6位!");continue;}}else {System.out.println("密码输入错误!请重新输入!");continue;}}while(true);}/**生成不重复的随机卡号*/public int createRandom() {Random random = new Random();// 当随机数在集合中的对象存在时,重新生成int userRandom;again:while(true) {userRandom = random.nextInt(90000000)+10000000;for (Member user : UserData.user) {// 如果存在相同卡号,继续生成随机号if (user.getCardId() == userRandom) {continue again;}}// 卡号不一样退出循环break;}return userRandom;}}/*** 数据库* @author 周太阳* @version 1.0* @date 2019年4月23日 下午8:53:23*/
class UserData {// 储存每个用户信息Member member = new Member();static Set<Member> user = new HashSet<Member>();// 赠送积分public static final int GIVE_SCORE = 100;// 测试用户static{Member member = new Member();member.setName("篮球高手蔡徐坤");member.setCardId(1234);member.setPassword("1234");member.setScore(-10000);user.add(member);}
}/*** 用户类* @author 周太阳* @version 1.0* @date 2019年4月23日 下午8:52:51*/
public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);SuperMarketMember smm = new SuperMarketMember();System.out.println("******************☆欢迎进入超市会员管理系统Plus☆****************************");do {System.out.println("1、登陆\n2、开卡\n3、退出");// 判断登陆或开卡int num = input.nextInt();if (num == 1) {// 登陆smm.login();}else if(num == 2){// 开卡smm.createCard();}else {// 退出System.out.println("欢迎下次光临!!!O(∩_∩)O~~");System.exit(0);}}while(true);}
}

这篇关于第五次项目《超市会员管理Plus》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748582

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl