彩票开奖系统

模拟双色球彩票系统

  1. 双色球规则:
    a)双色球分为红球和蓝球,红球选择的范围为1-33而且红球选择6个数字,蓝球1-16而且只能选择一个。
    b)选择方式为随机选择和手动输入选择号码。
    c)生成号码的顺序是由小到大。
  2. 功能描述: 通过JavaSE所学知识模拟彩票系统,首先系统能够让用户选择随机选择和手动选择。如果选择的是随机选择,则提示需要购买的注数;如果是手动选择,则让用户首选输入红球数字,然后输入篮球数字。
    用户选择或者输入完毕,则对比号码所匹配的奖次,并且把中奖号码都要显示出来。 中奖规则: 1等奖是中6+1,就是全部中了,奖金500万元
    2等奖是中6+0 就是红球全部中了,奖金保底3000-2000000元 3等奖是5+1 红球中5个,加篮球奖金3000元
    4等奖是5+0或者4+1,奖金200元 5等奖是4+0或者3+1,奖金10元 6等奖是2+1或者1+1或者0+1,奖金5元
    中奖号码,要系统自动生成。 业务说明
    1. 首先系统要生成中奖号码,而且中奖号码中不能有重复的数字,篮球可以和红球中某一个数字相同。
    2. 当用户输入中奖号码时,需要做判断用户输入的是否为数字,而且一定 要在1-33或1-16之间。
  3. 最后根据用户购买的注数,提示所中奖金的总金额,并且提示每注所属的奖项范围。4.扩展(选作):定义一个调度器,在一个规定的时间点来验证中奖信息。5.希望大家都能完成。

主程序入口

Test.java

package T;

import java.util.Scanner;


public class Test {

  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    Start start=new Start();
    System.out.println("本期号码:");
    for(int a:start.number){
      System.out.print(a+" ");
    }
    start.cross(start.door());
    System.out.println("还需要继续购票吗?Y/N");
    String s=sc.nextLine();
    if(s.equalsIgnoreCase("Y")){
      start.cross(start.door());
    }else{
      System.out.println("输入错误或者操作不当,正在退出!!!");
      System.exit(0);
    }
  }
}

双色球的接口类

Base.java

package Test;
/*
新建一个球类的顶级父类
 */
public class Base {
private String Color;
private int[] num;

  public Base() {
  }

  public Base(String color, int[] num) {
    Color = color;
    this.num = num;
  }

  public String getColor() {
    return Color;
  }

  public int[] getNum() {
    return num;
  }

  public void setColor(String color) {
    Color = color;
  }

  public void setNum(int[] num) {
    this.num = num;
  }

  @Override
  public String toString() {
    return "Base{" +
        "Color='" + Color + '\'' +
        '}';
  }
}

手动输入的接口类

HandSelect.java

package Test;

import java.util.HashSet;
import java.util.Scanner;
/*
  *手动选择号码的类
  * 该类只提供一个方法handSelect,该方法传入俩个数组,并返回一个7位的数组,前六位是从第一个数组中选择的,最后
  * 一位是从另外一个数组中选择的。
 */
public class HandSelect {
public int[] handSelect(int[] redBase,int[] blueBase){
  /*
  该段代码为红球编号数组转为HashSet集合的代码
   */
  HashSet<Integer> setArray=new HashSet<>();
  for (int i = 0; i < redBase.length; i++) {
    setArray.add(redBase[i]);
  }
  /*
  该段代码为蓝球编号数组转为HashSet集合的代码
   */
  HashSet<Integer> setArray1=new HashSet<>();
  for (int i = 0; i < blueBase.length; i++) {
    setArray1.add(blueBase[i]);
  }
  /*
  新建一个数组,用来返回红球和篮球的编号
   */
  int[] handSelectArray=new int[7];

  Scanner sc=new Scanner(System.in);
  System.out.println("请输入你要选择的红球的代号:");
  for (int i = 0; i <6 ; i++) {
    int s=sc.nextInt();
    if(setArray.contains(s)){
      handSelectArray[i]=s;
      setArray.remove(s);
    }else{
      System.out.println("您输入错误,正在退出〉〉〉〉");
      System.exit(-1);
    }
  }
  System.out.println("请输入蓝球编号: ");
  int s = sc.nextInt();
  if(setArray1.contains(s)){
    handSelectArray[6]=s;
  }
  return handSelectArray;

}

}

随机选择类

RandomSelect.java

package Test;


import java.util.Random;

public class RandomSelect {
public int[] randomSelect(int[] redBase,int[] blueBase){
  Random random=new Random();
  Plug plug=new Plug();
  int[] array=plug.randomCommon(1,33,6);
  int[] array1=new int[7];
  for (int i = 0; i < array.length; i++) {
    array1[i]=redBase[array[i]];
  }
  int i=random.nextInt(16)+1;
  array1[6]=i;
  return array1;
}

}

获取随机不同的数的小插件接口

Plug.java

package Test;

public class Plug {
  public static int[] randomCommon(int min, int max, int n) {
    if (n > (max - min + 1) || max < min) {
      return null;
    }
    int[] result = new int[n];
    int count = 0;
    while (count < n) {
      int num = (int) (Math.random() * (max - min)) + min;
      boolean flag = true;
      for (int j = 0; j < n; j++) {
        if (num == result[j]) {
          flag = false;
          break;
        }
      }
      if (flag) {
        result[count] = num;
        count++;
      }
    }
    return result;
  }
}

开奖系统

Kaijiang.java

package Test;

import java.util.HashSet;
import java.util.Random;


public class Kaijiang {
  public int[] getNumber(int[] redBase,int[] blueBase){
    Random random=new Random();
    Plug plug=new Plug();
    int[] array1=plug.randomCommon(1,33,6);
    int[] array2=new int[7];
    for (int i = 0; i < 6; i++) {
      array2[i]=redBase[array1[i]];
    }
    int i=random.nextInt(16)+1;
    array2[6]=i;
    return  array2;
  }
  /*
    1等奖是中6+1,就是全部中了,奖金500万元
    2等奖是中6+0  就是红球全部中了,奖金保底3000-200 0000元
    3等奖是5+1    红球中5个加篮球,奖金3000元
    4等奖是5+0或者4+1,奖金200元
    5等奖是4+0或者3+1,奖金10元
    6等奖是2+1或者1+1或者0+1,奖金5元
    中奖号码,要系统自动生成。
    3.业务说明1.首先系统要生成中奖号码,而且中奖号码中不能有重复的数字,
 篮球可以和红球中某一个数字相同。2.当用户输入中奖号码时,需要做判断用户
 输入的是否为数字,而且一定要在1-33或1-16之间。3.最后根据用户购买的注数,
 提示所中奖金的总金额,并且提示每注所属的奖项范围。
 4.扩展(选作):定义一个调度器,在一个规定的时间点来验证中奖信息。5.希望
 大家都能完成。
 */
public void kaiJiang(int[] number,int[] array){
  HashSet hashSet1=new HashSet();
  for (int i = 0; i < array.length-1; i++) {
    hashSet1.add(number[i]);//将开奖号码的前6个数放入HashSet集合中
  }
  if(number[6]==array[6]){//中了一个蓝球
    for (int i = 0; i < 6; i++) {
      if(hashSet1.contains(array[i])){
        hashSet1.remove(array[i]);
      }
    }
    if(hashSet1.size()==0){
      System.out.println("恭喜您中大奖了,奖金为500万元!!! 恭喜恭喜:)");
    }else if(hashSet1.size()==1){
      System.out.println("恭喜您中3等奖,奖金为3000元 !!!");
    }else if(hashSet1.size()==2){
      System.out.println("恭喜您中4等奖,奖金为200元 !!!");
    }else if(hashSet1.size()==3){
      System.out.println("恭喜您中5等奖,奖金为10元 !!!");
    }else if(hashSet1.size()==4||hashSet1.size()==5||hashSet1.size()==6){
      System.out.println("恭喜您中6等奖,奖金为5元 !!!");
    }else{
      System.out.println("抱歉,您是个非酋,好好学习吧!!");
    }
  }else if(number[6]!=array[6]){
    for (int i = 0; i < 5; i++) {
      if(hashSet1.contains(array[i])){
        hashSet1.remove(array[i]);
      }
    }
    if(hashSet1.size()==0){
      System.out.println("恭喜您中2等奖了,奖金为3000元到500万元!!! 恭喜恭喜:)");
    }else if(hashSet1.size()==1){
      System.out.println("恭喜您中4等奖了,奖金为200元!!!");
    }else if(hashSet1.size()==2){
      System.out.println("恭喜您中5等奖,奖金为10元 !!!");
    }else{
      System.out.println("抱歉,您是个非酋,好好学习吧!!");
    }
  }else {
    System.out.println("程序可能出错了emmmm!");
  }
}
}

封装系统入口类

Start.java

package T;

import java.util.Scanner;

public class Start {
  Base redBase=new Base("  红球", new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33});
  Base blueBase=new Base("蓝球",new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
  Kaijiang kaijiang=new Kaijiang();
  Scanner sc=new Scanner(System.in);
  int[] number = kaijiang.getNumber(redBase.getNum(), blueBase.getNum());//本期号码数组 number
/*
生成本期号码
 */
public int door(){

  System.out.println("请选择购号方式:\n 1. 手动购号\n 2. 自动随机购号");
  int a=sc.nextInt();
  return a;
}
public void cross(int a){
  if(a==1){
    HandSelect handSelect=new HandSelect();
    int[] array=handSelect.handSelect(redBase.getNum(),blueBase.getNum());
    System.out.println("您的号码为:");
//      Arrays.sort(array);
    for (int aa:array
    ) {
      System.out.print(aa+" ");
    }
      /*
      开始兑奖:
       */
    kaijiang.kaiJiang(number,array);

  }
  if(a==2){
    System.out.println("请输入您要下的注数: ");
    int n=sc.nextInt();
    zhushu(n);

  }
}
public void zhushu(int n){
  RandomSelect randomSelect=new RandomSelect();
  for (int i = 0; i < n; i++) {
    int[] array=randomSelect.randomSelect(redBase.getNum(),blueBase.getNum());
    System.out.println("您的号码为:");
//      Arrays.sort(array);
    for (int aa:array
    ) {
      System.out.print(aa+" ");
    }
      /*
      开始兑奖:
       */
    kaijiang.kaiJiang(number,array);
  }


}
}

运行结果:

彩票开奖系统_第1张图片

你可能感兴趣的:(简单项目,java,算法)