3D彩票系统,面向对象编程版

该代码实现了一个动态扩容的数组功能,并构建了一个3D彩票系统,包括查看余额、充值、自选和机选彩票、查看购买记录、开奖和退出等操作。用户可以选择不同的彩票类型和投注数量,系统会根据投注进行扣款,并在开奖时判断是否中奖。
摘要由CSDN通过智能技术生成

 扩展:动态扩容数组

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

  • src - 源数组。
  • srcPos - 源数组中的起始位置。
  • dest - 目标数组。
  • destPos - 目的地数据中的起始位置。
  • length - 要复制的数组元素的数量。
package com.hrf.lotterySystem01;

import java.util.Random;
import java.util.Scanner;

import com.hrf.lanou.java05.MyException;

public class LotterySystemClassTest {

	private static Scanner sc = new Scanner(System.in);
	private static Random r = new Random();
	private static int surplus = 100; // 剩余钱
	private static int maxCount = 200; // 用来统计最大购买数
	private static Lottery[] arr = new Lottery[maxCount];// 彩票数组
	// 二维数组,第一维数组代表统计最大购买数,第二维数组只有四个数字代表三个号码+直选/组六
	private static int index = 0;// 数组下标,已经购买的彩票数目

	public static void main(String[] args) {
		arr = extendsArray(arr);
		optional();
	}
	
//	动态扩容一维数组
	public static Lottery[] extendsArray(Lottery[] array) {	
		Lottery[] arr = new Lottery[array.length * 100]; // 扩展为原来100倍
		for (int i = 0; i < array.length; i++) {
//			System.arraycopy(src, srcPos, dest, destPos, length);
			System.arraycopy(array, 0, arr, 0, array.length); // 数组拷贝
		}
		return arr;
	}

//	3D彩票系统要实现 查询余额,充值,自选彩票,机选彩票,查看购买彩票,开奖,退出等功能
//	选择序号
	public static void optional() {
		program();
		System.out.println("请输入你要选择的项目数字 : ");
		while (true) {
			int num = sc.nextInt();
			if (num >= 0 && num <= 6) {
				switch (num) {
				case 1:
//					查看余额
					blance();
					break;
				case 2:
//					进行充值
					recharge();
					break;
				case 3:
//					自选
					selfOptionalLottery();
					break;
				case 4:
//					机选
					machineOptionalLottery();
					break;
				case 5:
//					查看购买彩票
					findBuyLottery();
					break;
				case 6:
//					开奖
					drawPrice();
					break;
				case 0:
//					退出
					exit();
					return;
				}
			} else {
				System.out.println("你输入的数字有误,请重新输入:");
				optional();
			}
			return;
		}
	}

//	属性元素,主菜单
	public static void program() {
		System.out.println("------华丽分割线------");
		System.out.println("1.查看余额");
		System.out.println("2.充值");
		System.out.println("3.自选");
		System.out.println("4.机选");
		System.out.println("5.查看购买彩票");
		System.out.println("6.开奖");
		System.out.println("0.退出");
	}

//	1.查看余额
	public static void blance() {// 初始余额
		System.out.println("当前余额为:" + surplus + "元");
		optional();
	}

//	2.充值
	public static void recharge() {
		System.out.println("充值活动:充50送20元,充100送50元,充500送300元");
		System.out.println("请输入充值额度:");
		int money = sc.nextInt();
		if (money >= 50 && money < 100) {
			money += 20;
			surplus += money;
			System.out.println("充值成功 ! 当前余额为:" + surplus);
		} else if (money >= 100 && money < 500) {
			money += 50;
			surplus += money;
			System.out.println("充值成功 ! 当前余额为:" + surplus);
		} else if (money >= 500) {
			money += 300;
			surplus += money;
			System.out.println("充值成功 ! 当前余额为:" + surplus);
		} else if (money < 0) {
			System.out.println("输入有误,请重新输入:");
			recharge();
		} else {
			surplus += money;
			System.out.println("充值成功 ! 当前余额为:" + surplus);
		}
		System.out.println("1.继续充值 , 2.退出");
		System.out.println("请选择:");
		int re = sc.nextInt();
		if (re == 1) {
			recharge();
		}else if (re == 2) {
			optional();
		}else {
			System.out.println("你输入的数字有误哦!系统为你调到主菜单");
			optional();
		}
	}

//	3.自选
	public static void selfOptionalLottery() {
		System.out.println("请输入购买彩票的类型: 1.直选 , 2.组六");
		int type = sc.nextInt();// 输入的类型
		if (type == 1 || type == 2) {
			System.out.println("请输入号码(0~9):");
			int num1 = sc.nextInt();
			int num2 = sc.nextInt();
			int num3 = sc.nextInt();
			if ((num1 >= 0 && num1 <= 9) && (num2 >= 0 && num2 <= 9) && (num3 >= 0 && num3 <= 9)) {
				Lottery lottery = new Lottery(num1, num2, num3, type);// 创建彩票
				arr[index] = lottery;// 把彩票存入数组
				index++;
				surplus -= 5;// 减钱
				System.out.println("购买成功!");
				optional();
			} else {
				System.out.println("输入有误,请重新输入!");
				selfOptionalLottery();
				// 如果想要抛出异常可以这样写,不过要自定义一个异常类去继承RuntimeException
				throw new MyException("输入的数字大于9或者小于0!");
			}

		}
	}

//	4.机选
	public static void machineOptionalLottery() {

		System.out.println("请输入购买彩票的类型: 1.直选 , 2.组六");
		int type = sc.nextInt();
		if (type == 1 || type == 2) {
			System.out.println("输入要买多少注:");
			int count = 0;// 输入买的注数,一维数组里面的下标
			while (true) {
				count = sc.nextInt();// 输入要买的注数
				if (count > 0) {
					if (count + index > arr.length) {
						System.out.println("超过最大购买次数!");// 最大购买次数为100
						System.out.println("请重新输入:");
					} else if (count * 5 < surplus) {

						break;// 跳出循环,余额充足
					} else {
						System.out.println("余额不足请先充值!为你跳到菜单页面!");
						optional();// 到菜单页面
					}
				} else {
					System.out.println("你的输入有误,请重新输入:");
				}

			}
//			条件小于count注数,随机生成count行,对index++操作;
			for (int i = 0; i < count; i++) {
				int num1 = r.nextInt(10);
				int num2 = r.nextInt(10);
				int num3 = r.nextInt(10);
				Lottery lottery = new Lottery(num1, num2, num3, type);// 创建彩票
				arr[index] = lottery;// 把彩票存到数组里面
				index++;// 每存一个就自增一个
			}
			surplus -= count * 5;// 减钱
			System.out.println("机选" + count + "次");
			optional();
		} else {
			System.out.println("你输入的有误,请重新输入:");
			machineOptionalLottery();
		}
	}

//	5.查看购买彩票
	public static void findBuyLottery() {
		if (index > 0) {
			for (int i = 0; i < index; i++) {
				System.out.print(arr[i] + " ");
				if (arr[i].getType() == 1) {
					System.out.println("直选");
				} else {
					System.out.println("组六");
				}
			}
		} else {
			System.out.println("你还没有购买任何彩票哦!");
		}
		optional();
	}

//	6.开奖
	public static void drawPrice() {
		int price1 = r.nextInt(10);
		int price2 = r.nextInt(10);
		int price3 = r.nextInt(10);
		System.out.println("开奖号码为:" + price1 + " " + price2 + " " + price3 + " ");
//			把中奖号码封装成一个彩票
		Lottery p1 = new Lottery(price1, price2, price3);
		for (int i = 0; i < index; i++) {
			// 找到买到的彩票
			Lottery lottery = arr[i];
//			判断彩票有没有中奖
			int type = lottery.getType();//购买彩票的第四个数的数据
			if (type == 1) {// 直选
				if (lottery.isDirectSelect(p1)) {
					System.out.println(lottery.toString()+"直选" + " " +"恭喜你中奖了!");
					// 加钱
					surplus += 1000;
				} else {
					System.out.println(lottery.toString()+"直选" + " " +"很遗憾你没有中奖!请再接再厉!");
				}
			} else {// 组六
				if (lottery.isSetOfSix(p1)) {
					System.out.println(lottery.toString()+ "组六" + " " +"恭喜你中奖了!");
					surplus += 100;
				} else {
					System.out.println(lottery.toString()+ "组六" + " " +"很遗憾你没有中奖!请再接再厉!");
				}
			}
		}
		index = 0;// 清空数组
		optional();
	}
//	0.退出
	public static void exit() {
		System.out.println("欢迎下次光临!");
	}

}

package com.hrf.lotterySystem01;

import java.util.Arrays;

public class Lottery {
//	彩票的对象代表一注信息
	private int num1;
	private int num2;
	private int num3;
	private int type;
	
	public Lottery(int num1, int num2, int num3, int type) {
		super();
		this.num1 = num1;
		this.num2 = num2;
		this.num3 = num3;
		this.type = type;
	}
	public Lottery(int num1, int num2, int num3) {
		super();
		this.num1 = num1;
		this.num2 = num2;
		this.num3 = num3;
	}
	public Lottery() {
		super();
	}
	public int getNum1() {
		return num1;
	}
	public void setNum1(int num1) {
		this.num1 = num1;
	}
	public int getNum2() {
		return num2;
	}
	public void setNum2(int num2) {
		this.num2 = num2;
	}
	public int getNum3() {
		return num3;
	}
	public void setNum3(int num3) {
		this.num3 = num3;
	}
	
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}
	@Override
	public String toString() {
		return num1 + " " + num2 + " " + num3 + " ";
	}
	
//	判断直选是否正确
	public boolean isDirectSelect(Lottery cp) {
		if(num1 == cp.num1 && num2 == cp.num2 && num3 == cp.num3) {
			return true;
		}else {
			return false;
		}
	}
//	判断组六是否正确
	public boolean isSetOfSix(Lottery cp) {
		int[] arr1 = {num1, num2, num3};
		int[] arr2 = {cp.num1, cp.num2, cp.num3};
		Arrays.sort(arr1);
		Arrays.sort(arr2);
		return Arrays.equals(arr1, arr2);
	}
	
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值