首页 > 技术文章 > 抽奖

ljmmm1 2021-01-07 22:07 原文

项目需求

  • 用户注册
    新用户输入用户名和密码注册用户。当用户注册成功后,可以为用户分配一个4位随机会员号。
    开发时为了方便测试,会员号设置为1位。
  • 用户登录
    用户输入用户名和密码登录系统,若无该用户提示用户名密码错误,重新登录。
  • 幸运抽奖
    用户登录成功后可以进入抽奖功能进行抽奖,系统随机生成五个幸运数字,若该用户会员号等于某数组则抽奖成功。
    1.0使用字符串数组
import java.util.Random;
import java.util.Scanner;
public class User {
    static String[] user = new String[10] ;//用户名
    static String[] passwd = new String[10];//密码
    //static int[] ran = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} ;
    static int[] ran = new int[10];
    //会员号
    static boolean flag=false;//是否登陆成功
    static int cnt = 3;//登录次数
    static int i=0;//用户下标
    static int pos=0;//保存当前登录用户的下标
    static void print(){
        System.out.println("**欢迎使用抽奖系统**");
        System.out.println("*      1注册     *");
        System.out.println("*      2登录     *");
        System.out.println("*      3抽奖     *");
        System.out.println("*      4退出     *");
        System.out.println("*****************");
    }
    static boolean unContains(int[] arr,int a){//检查生成的随机数是否已生成过
        for(int j=0;j<arr.length;j++){
            if(arr[j]==a){
                return false;
            }
        }
        return true;
    }
    static void signUp(Scanner scan){
        System.out.println("请输入用户名");
        user[i] = scan.next();
        System.out.println("请输入密码");
        passwd[i] = scan.next();
        Random r = new Random();
        int tempRan = r.nextInt(9000)+1000;//(max -min )+min
        while(!unContains(ran,tempRan))  tempRan = r.nextInt(9000)+1000;//每个用户会员号不同
        ran[i] = tempRan;
        System.out.println("注册成功!");
        System.out.println("用户名:" + user[i]+ " 密码:" + passwd[i] + " 会员号:" + ran[i]);
        i++;
    }
    static void signIn(Scanner scan){
        String str1,str2;
        System.out.println("请输入用户名");
        str1 = scan.next();
        System.out.println("请输入密码");
        str2 = scan.next();
        boolean juStr1 = false;
        boolean juStr2 = false;
        for(int j=0;j<10;j++){
            if(str1.equalsIgnoreCase(user[j])) {
                juStr1 = true;
                if(str2.equalsIgnoreCase(passwd[j])) {
                    juStr2 = true;
                    pos = j;
                    break;
                }
            }

        }
            if (!juStr1||!juStr2) {
                System.out.println("输入有误");
                cnt--;
                if (cnt == 0) {
                    System.out.println("三次机会已用完");
                    System.exit(0);
                }
            } else {
                System.out.println("登陆成功!");
                flag = true;

           }
    }

    static void prize(){
        boolean tmp=false;
        Random r = new Random();
        int []arr = new int[5];
        int k = 1;
        arr[0] = r.nextInt(9000)+1000;//第一个不用检查 (max-min )+min
        while(k< arr.length){
            int a = r.nextInt(9000)+1000;
            if(unContains(arr,a))//生成的随机数之前没生成过
                arr[k++] = a;
        }
        for(int j=0;j<5;j++){
            if(arr[j] == ran[pos]) tmp = true;
            System.out.print("中奖的号码:"+arr[j]+" ");
        }
        System.out.println();
        System.out.println("您的号码:"+ran[pos]);
        if(tmp) System.out.println("恭喜您中奖了!");
        else System.out.println("很遗憾,您未中奖!");
    }
    public static void main(String[] args) {
        Scanner scan= new Scanner(System.in);
        String str;
        do{
            print();
            int choose = scan.nextInt();
            switch (choose) {
                case 1:
                    signUp(scan);//注册
                    break;
                case 2:
                    signIn(scan);//登录
                    break;
                case 3:
                    if(!flag){
                        System.out.println("请先登录!");
                        break;
                    }
                    prize();//抽奖
                    break;
                case 4:
                    System.exit(0);//退出
                    break;
                default:
                    System.out.println("输入有误!");
            }
            System.out.print("是否继续?y/n ");
            str = scan.next();
        }while(str.equalsIgnoreCase("y"));
        scan.close();
    }
}
  • 2.0使用对象数组

User类

mport java.util.Scanner;
import java.util.Random;
public class User
{
   private String name = null;
   private String passwd = null;
   private int no =-1;
   static Scanner input = new Scanner(System.in);
   public void setNo(int no){
       this.no = no;
   }
    public boolean judge2(int no){//判断会员号是否重复
        if(this.no==no) return true;
        return false;
    }
    public void signUp(){
        System.out.println("请输入用户名:");
        String name = input.next();
        this.name = name;
        System.out.println("请输入密码:");
        String passwd = input.next();
        this.passwd = passwd;
        System.out.println("注册成功!");
        System.out.println("用户名:" + this.name+ " 密码:" + this.passwd + " 会员号:" + this.no);
    }

    public boolean unContains(int[] arr,int a){//检查生成的随机数是否已生成过
        for (int j=0;j<arr.length;j++){
            if(arr[j]==a){
                return false;
            }
        }
        return true;
    }
    public boolean judge(String name,String passwd) {
       if(name.equals(this.name)&&passwd.equals(this.passwd))
           return true;

       return false;
    }

    public void prize(){
        boolean tmp=false;
        Random r = new Random();
        int []arr = {-1,-1,-1,-1,-1};
        //int []arr = new int[5];//存放幸运号码
        int k = 1;
        arr[0] = r.nextInt(5);//第一个不用检查 (max-min )+min
        while(k< arr.length){
            int a = r.nextInt(5);
            if(unContains(arr,a))//生成的随机数之前没生成过
                arr[k++] = a;
        }
        System.out.println("您的号码:"+this.no);
        for(int j=0;j<5;j++){
            if(arr[j] == this.no) tmp = true;
            System.out.print("中奖的号码:"+arr[j]+" ");
        }
        System.out.println("您的号码:"+this.no);
        if(tmp) System.out.println("恭喜您中奖了!");
        else System.out.println("很遗憾,您未中奖!");
    }
}

Main类

import java.util.Scanner;
import java.util.Random;
public class Main {
   static Scanner input = new Scanner(System.in);
   static int pos =-1;//当前登录的用户
    public static void print() {
        System.out.println("**欢迎使用抽奖系统**");
        System.out.println("*      1注册     *");
        System.out.println("*      2登录     *");
        System.out.println("*      3抽奖     *");
        System.out.println("*      4退出     *");
        System.out.println("*****************");
    }
    public static boolean unContains(User[]user,int num){
        for(int j=0;j<10;j++){
            if(user[j].judge2(num)) return false;
        }
        return true;
    }
    public static void signIn(User[] user){
        out:do {
            System.out.println("请输入用户名:");
            String name = input.next();
            System.out.println("请输入密码:");
            String passwd = input.next();
            for (int j = 0; j < 10; j++) {
                if (user[j].judge(name, passwd)) {
                    System.out.println("登陆成功");
                    pos = j;
                   break out;
                }
            }
            System.out.println("输入有误,请重新输入!");
        }while(true);
    }
    public static void main(String[] args) {
        int i = 0;//标记用户下标
       Random r = new Random();
       int num ;
        User[] user = new User[10];
        for (int j = 0; j < 10; j++) {
            user[j] = new User();
        }
        String str;
        do {
            print();
            int choose = input.nextInt();
            switch (choose) {
                case 1:
                    num = r.nextInt(5);
                    while(!unContains(user,num))
                           num = r.nextInt(5);
                    user[i].setNo(num);
                    user[i].signUp();
                    i++;
                    break;
                case 2:
                    signIn(user);
                    break;
                case 3:
                    if(pos == -1) {
                        System.out.println("请先登录!");
                        break;
                    }
                    else user[pos].prize();
                    break;
                case 4:
                    System.exit(0);
                default:
                    System.out.println("输入有误,请重新输入!");
            }
            System.out.println("continue?y/n");
            str = input.next();
        } while (str.equals("y"));
    }
}

运行结果

注册五个用户,每个用户会员号不同

image.png
image.png
image.png
image.png
image.png

登录

image.png

抽奖

抽出的5个幸运号码不同

未登录的情况下

image.png

已登录的情况下

image.png

推荐阅读