基于Map的用户注册、登录、抽奖系统
期望功能
方法设计
1.类的设计:
定义两个参与者的属性:
private String username;
private String userpassword;
2.注册方法:
public void register(){
System.out.println("[抽奖系统 > 注册]");
System.out.println("请填写个人注册信息");
System.out.println("请输入用户名:");
String regusername = scanner.next(); //获取控制台输入的注册用户名
System.out.println("请输入密码:");
String reguserpassword = scanner.next(); //获取控制台输入的注册密码
Participant regparticipant = new Participant(regusername,reguserpassword); //将输入的用户名和密码存入新的参与者对象
int id = random.nextInt(8999)+1000; //获取1000~9999随机数卡号
map.put(id,regparticipant); //将卡号和参与者对象存入Map中
System.out.println("注册成功,请记好你的会员卡号");
System.out.println("用户名:" + regusername);
System.out.println("密码:" + reguserpassword);
System.out.println("卡号:" + id);
jud = judge();
}
3.登录方法:
public void login(){
if (d == 1)
{
System.out.println("[抽奖系统 > 登录]");
System.out.println("请填写个人登录信息");
System.out.println("请输入用户名:");
String loginusername = scanner.next();
System.out.println("请输入密码:");
String loginuserpassword = scanner.next();
Participant loginparticipant = new Participant(loginusername,loginuserpassword);
boolean c = false; //设置一个布尔值用来判断是否登录成功
for (Object o : map.values()){
if (o.equals(loginparticipant)) { //遍历values,将对象与对象相比较(重写equals方法)
System.out.println("登录成功!");
b = 1;
c = true;
}
}if(!c) {
System.out.println("登录失败,请重新登录!"); //如果登录失败重新登录
login();
}
jud = judge();
}
else
{
System.out.println("您还未注册,请先注册!"); //当d!=1时,未注册状态,执行注册方法
register();
}
}
3.抽奖方法:
public void join() {
System.out.println("[抽奖系统 > 抽奖]");
if (b == 1) { //当b=1时,是已经登录的状态
System.out.println("请输入您的卡号:");
int inputid = scanner.nextInt(); //获取控制台输入的卡号
System.out.println("本日的幸运数字是:");
int[] a = new int[5]; //新建数组用于判断是否中奖
for (int i = 0; i < 5; i++) {
int luckynum = random.nextInt(8999) + 1000; //生成五个中奖随机数
System.out.println(luckynum);
if (inputid != luckynum) { //每当生成一个中奖数,和input的卡号相比较,如果相同,数组里输1,如果不相同,数组里输0
a[i] = 0;
} else {
a[i] = 1;
}
}
boolean exist = false; //设定一个布尔值判断数组中是否有1
for (int j = 0; j < 5; j++) {
if (a[j] == 1) {
exist = true;
}
}
if (exist) { //如果有1,就是中奖了
System.out.println("恭喜您中奖了!");
} else {
System.out.println("很遗憾您没有中奖!请下次再来!");
}
}
else{ //当b=0时,是未登录状态,执行登录函数
System.out.println("您未登录!请登录");
login();
}
jud = judge();
}
4.重写后的equals方法判断类相等
@Override
public boolean equals(Object obj) {
if (this == obj){
return true;
}
if (getClass() != obj.getClass()){
return false;
}
Participant participant = (Participant)obj;
//判断属性与属性相等
return (username.equals(participant.username)) && (userpassword.equals(participant.userpassword));
}
5.判断是否继续
public boolean judge(){
boolean booljudge = true;
System.out.println("是否继续?y/n");
String judgeinput = scanner.next();
if (judgeinput.equals("y")){ //输入y继续
return booljudge;
}
else {
return !booljudge;
}
}
6.Main主函数
while(booljudge){
System.out.println("-----欢迎进入抽奖系统-----");
System.out.println(" 1.注册 ");
System.out.println(" 2.登录 ");
System.out.println(" 3.参加抽奖 ");
System.out.println(" 4.退出系统 ");
System.out.println("-----------------------");
System.out.println("请选择菜单:");
int i = scanner.nextInt();
if (i == 1) {
participant.register();
booljudge = Participant.jud;
}
else if (i ==2){
participant.login();
booljudge = Participant.jud;
}
else if (i == 3){
participant.join();
booljudge = Participant.jud;
}
else if (i == 4){
System.out.println("您已成功退出系统!");
break;
}
}
还未实现的和想优化的
- 1.Map接口过于给自己找难度,其实只用list就可以;
- 2.抽奖时卡号还要自己输入,因为map无法根据value来获取key;
- 3.登录是参与者对象与对象相比,有点绕弯,还要重写equals方法,应该可以直接get到value的对象中的值;
- 4.判断是否中奖的方法可能会有更简便的,我想不到了才用这个睿智方法;
- 5.界面优化;
6.一个操作结束后判断是否继续y/n 1.1版本更新修改7.我什么时候能中一次????????
样例测试
主页面
注册
登录
抽奖
中奖,不存在的
未注册登录
未登录抽奖
退出系统
工程及完整代码
- 1.0版本
链接:https://pan.baidu.com/s/18_gUwDIYJ2m_IgQpneaCRw
提取码:bu26 - 1.1版本
链接:https://pan.baidu.com/s/1lOmxq35E0O4iISB8bzSyyQ
提取码:mffp - 版本合集
链接:https://pan.baidu.com/s/1OnDS1msiuiCiKPx_dU5UDA
提取码:rnyn