/**
* 超市会员
*/
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) {
this.name = name;
this.cardId = cardId;
this.password = password;
this.score = score;
}
public Member(String name, int cardId, String password, int score, String registDate) {
this(name, cardId, password, 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;
}
@Override
public String toString() {
return "Member{" +
"name='" + name + '\'' +
", cardId=" + cardId +
", password='" + password + '\'' +
", score=" + score +
", registDate='" + registDate + '\'' +
'}';
}
}
import java.text.SimpleDateFormat;
import java.util.*;
public class MemberDao {
private static final int MEMBER_SIZE = 100;//最多的会员数
Scanner input = new Scanner(System.in);
List<Member> memberList = new ArrayList<Member>();
//打印主菜单
private void menu() {
System.out.println("*************************欢迎进入超市会员管理系统*************************");
System.out.println("1.积分累计 2.积分兑换 3.查询剩余积分 4.修改密码 5.开卡 6.退出");
System.out.println("*******************************************************************");
}
/**
* 积分累计
*
* @return
*/
private boolean saveScore() {
Member member;
int cardId = Util.inputValidInt(input, "请输入您的会员卡号(0-" + (MEMBER_SIZE - 1) + "):", 0, MEMBER_SIZE - 1);
System.out.print("请输入您的会员卡密码:");
String password = input.next();
if ((member = hasMember(cardId, password)) != null) {
int score = Util.inputValidInt(input, "请输入您此次消费金额(消费1元累计1积分):", 1, Integer.MAX_VALUE);
member.setScore(member.getScore() + score);
return true;
} else {
System.out.println("您输入的会员卡号或密码错误,无法积累积分!");
}
return false;
}
/**
* 查询会员是否存在,会员密码不区分大小写
* @param cardId:卡号
* @param password:密码
* @return
*/
private Member hasMember(int cardId, String password) {
for (Member m : memberList) {
if (m != null) {
if (m.getCardId() == cardId && m.getPassword().equalsIgnoreCase(password)) {
return m;
}
}
}
return null;
}
/**
* 生成随机卡号
*
* @return
*/
private int createId() {
if (memberList.size() == MEMBER_SIZE) {
System.out.println("卡号已满");
throw new RuntimeException("卡号已满");
}
Random random = new Random();
int id = random.nextInt(MEMBER_SIZE);//[0,99]
for (int index = 0; index < memberList.size(); index++) {
if (memberList.get(index).getCardId() == id) {
id = random.nextInt(MEMBER_SIZE);
index = -1;
}
}
return id;
}
// 开卡
private void register() {
Member member = new Member();
System.out.print("请输入注册姓名:");
member.setName(input.next());
// 会员卡号随机生成
member.setCardId(this.createId());
System.out.print("请输入注册密码:");
// 会员密码不能小于6位
String pwd;
do {
pwd = input.next();
if (pwd.length() < 6) {
System.out.print("会员密码不能小于6位,请重新输入注册密码:");
} else {
member.setPassword(pwd);
break;
}
} while (true);
member.setScore(100);
// 增加会员开卡日期
Date date = new Date();
String registDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
member.setRegistDate(registDate);
memberList.add(member);
System.out.println("恭喜,开通会员卡成功,系统赠送您100积分!您的会员卡信息:\n" + member);
}
//查询积分
public void showScore() {
Member member;
int cardId = Util.inputValidInt(input, "请输入您的会员卡号(0-" + (MEMBER_SIZE - 1) + "):", 0, MEMBER_SIZE-1);
System.out.print("请输入您的会员卡密码:");
String password = input.next();
if ((member = hasMember(cardId, password)) != null) {
System.out.println("姓名\t会员卡号\t剩余积分\t开卡日期");
System.out.println(member.getName() + "\t\t" + member.getCardId() + "\t\t" + member.getScore() + "\t\t" + member.getRegistDate());
} else {
System.out.println("您输入的会员卡号或密码错误,无法查询积分!");
}
}
//积分兑换
public boolean minusScore() {
Member member;
int cardId = Util.inputValidInt(input, "请输入您的会员卡号(0-" + (MEMBER_SIZE-1) + "):", 0, MEMBER_SIZE-1);
System.out.print("请输入您的会员卡密码:");
String password = input.next();
if ((member = hasMember(cardId, password)) != null) {
int score = Util.inputValidInt(
input, "请输入您需要兑换使用的积分(100积分抵用0.1元,不足100的积分不做抵用):", 1, Integer.MAX_VALUE);
if (score <= member.getScore()) {
member.setScore(member.getScore() - score);
System.out.println("您的消费金额中使用会员积分抵消" + score / 100 * 0.1 + "元");
return true;
} else {
System.out.println("抱歉,您的积分不够,无法抵用消费金额.");
}
} else {
System.out.println("您输入的会员卡号或密码错误,无法完成积分兑换!");
}
return false;
}
//修改会员密码
public boolean changePwd() {
Member member;
int cardId = Util.inputValidInt(input, "请输入您的会员卡号(0-"+(MEMBER_SIZE-1)+"):", 0, MEMBER_SIZE-1);
System.out.print("请输入您的会员卡密码:");
String password = input.next();
if ((member = hasMember(cardId, password)) != null) {
System.out.print("请输入新的会员密码:");
//新的会员密码不能小于6位
String pwd;
do {
pwd = input.next();
if (pwd.length() < 6) {
System.out.print("会员密码不能小于6位,请重新输入会员密码:");
} else {
member.setPassword(pwd);
break;
}
} while (true);
return true;
} else {
System.out.println("您输入的会员卡号或密码错误,无法修改密码!");
}
return false;
}
//主程序
public void start() {
boolean flag = true;// 是否退出
while (flag) {
menu();
int choice = Util.inputValidInt(input, "请选择[1-6]:", 1, 6);
switch (choice) {
case 1:
if (saveScore()) {
System.out.println("积分累计成功!");
} else {
System.out.println("积分累计失败!");
}
break;
case 2:
if (minusScore()) {
System.out.println("积分兑换成功!");
} else {
System.out.println("积分兑换失败!");
}
break;
case 3:
showScore();
break;
case 4:
if (changePwd()) {
System.out.println("密码修改成功!");
} else {
System.out.println("密码修改失败!");
}
break;
case 5:
register();
break;
case 6:
flag = false;
break;
}
}
System.out.println("谢谢光临!");
}
}
public class Main {
public static void main(String[] args) {
MemberDao memberDao = new MemberDao();
memberDao.start();
}
}