自助兑奖C++实现(vscode)

1、彩票的规则

        根据购买的彩票进行兑奖,彩票每注通常为一串7个数字(可以一注也可以五注,且数字可以机选也可以自定义),其中前五个为红球,后两个为蓝球。每期会出现一串7个数字,根据不同区对应重复多少个对应几等奖(下图就是超级大乐透的中奖规则)。

2、为何会想写这个程代码

        为何会想要尝试写一个兑奖的程序呢,因为本人嫌买彩票麻烦,所以每次正常都是机选两三期,导致自己在每次线上兑奖时重复圈同一张彩票,第二第三次会比较难受,而且每次都得盯着一串数字,寻找重复了几个红球(前五个数)几个蓝球(后两个数)。虽然一开始觉得挺有趣,但后来为了方便,我就想写一个程序,只要输入你买的彩票的每一注号码和中奖的号码,就可以确定每一注的中奖情况。

3、C++实现 

构建彩票父类

//彩票父类(需要重写规则和奖金)
class Lottery
{
public:
	virtual int Rule() = 0;
	virtual void Bonus(int a) = 0;
	void DuiJiang(){
		Bonus(Rule());
	}

};

Rule()返回int的中奖等级,输入给Bonus函数公布奖金。

子类Chaos继承父类Lottery,并重写Rule()和Bonus函数


//超级大乐透
class Chao : public Lottery
{

public:
	Chao(int *Num,int *num){
		M_number = Num;
		m_number = num;
	}

int Rule() {
	//初始化中奖等级
	int Rank = -1;

	//看命中多少个红球和蓝球
	int *Count = new int [2]{0,0};

	//前五个为红球
	int Location = 5;

	//前五个
	for (int i = 0; i < Location; i++){
		for(int k = 0; k < Location; k++){
			if(M_number[i] == m_number[k]){
				Count[0]++;
			}
		}
	}
	//后两个
	for (int i = Location; i < 7; i++){
		for(int k = Location; k < 7; k++){
			if(M_number[i] == m_number[k]){
				Count[1]++;
			}
		}
	}

	//中奖规则
	if(Count[0] == 5 && Count[1] == 2){
		Rank = 1;
	}
	else if(Count[0] == 5 && Count[1] == 1){
		Rank = 2;
	}
		else if(Count[0] == 5 && Count[1] == 0){
		Rank = 3;
	}
		else if(Count[0] == 4 && Count[1] == 2){
		Rank = 4;
	}
		else if(Count[0] == 4 && Count[1] == 1){
		Rank = 5;
	}
		else if(Count[0] == 3 && Count[1] == 2){
		Rank = 6;
	}
		else if(Count[0] == 4 && Count[1] == 0){
		Rank = 7;
	}
		else if((Count[0] == 2 && Count[1] == 2) || (Count[0] == 3 && Count[1] == 1)){
		Rank = 8;
	}
		else if((Count[0] == 1 && Count[1] == 2) ||
				(Count[0] == 3 && Count[1] == 0) ||
				(Count[0] == 2 && Count[1] == 1) ||
				(Count[0] == 0 && Count[1] == 2) ){
		Rank = 9;
	}

	
	cout << "现在开始兑奖!" << endl;
	return Rank;
}

void Bonus(int rank) {
	//奖金设置
	int bonus_1 = 7180775;
	int bonus_2 = 5744620;
	int bonus_3 = 10000;
	int bonus_4 = 3000;
	int bonus_5 = 300;
	int bonus_6 = 200;
	int bonus_7 = 100;
	int bonus_8 = 15;
	int bonus_9 = 5;

	//奖金输出
	if (rank > 0 && rank <=9){
		cout << "恭喜您,中了 "<< rank << " 等奖!" <<  endl;

		if(rank == 1){
		cout << rank << " 等奖奖金为 " << bonus_1 << " 元" << endl;
		}
		else if(rank == 2){
		cout << rank << " 等奖奖金为 " << bonus_2 << " 元" << endl;
		}
		else if(rank == 3){
		cout << rank << " 等奖奖金为 " << bonus_3 << " 元" << endl;
		}
		else if(rank == 4){
		cout << rank << " 等奖奖金为 " << bonus_4 << " 元" << endl;
		}
		else if(rank == 5){
		cout << rank << " 等奖奖金为 " << bonus_5 << " 元" << endl;
		}
		else if(rank == 6){
		cout << rank << " 等奖奖金为 " << bonus_6 << " 元" << endl;
		}
		else if(rank == 7){
		cout << rank << " 等奖奖金为 " << bonus_7 << " 元" << endl;
		}
		else if(rank == 8){
		cout << rank << " 等奖奖金为 " << bonus_8 << " 元" << endl;
		}
		else if(rank == 9){
		cout << rank << " 等奖奖金为 " << bonus_9 << " 元" << endl;
		}
	}
	//未中奖提示
	else{
		cout << "很遗憾,您没有中奖! " <<  endl;
	}
}


private:
	int *m_number = new int [7];
	
	int *M_number = new int [7];

};

DoWork 函数

void DoWork(Lottery* m_p1) {
	m_p1->DuiJiang();
}

主要是创建一个父类指针,方便调用DuiJiang函数而已。

Test01()测试函数


void test01()
{
	//中奖号码
	int *Array  = new int [7]{ 03,16,23,27,32,03,06};
	//彩民号码
	int *array1 = new int [7]{ 04,13,26,27,29,03,9};
	int *array2 = new int [7]{ 03,05,11,16,26,07,8};
	int *array3 = new int [7]{ 14,22,23,27,35,9,12};
	int *array4 = new int [7]{ 10,17,18,19,23,01,14};
	int *array5 = new int [7]{ 07,8,9,16,24,5,10};


	cout << "第一注:" << endl;
	Lottery* p1 = new Chao(Array,array1);
	DoWork(p1);
	cout << '\n' << "第二注:" <<endl;
	Lottery* p2 = new Chao(Array,array2);
	DoWork(p2);
	cout << '\n' << "第三注:" <<endl;
	Lottery* p3 = new Chao(Array,array3);
	DoWork(p3);
	cout << '\n' << "第四注:" <<endl;
	Lottery* p4 = new Chao(Array,array4);
	DoWork(p4);
	cout << '\n' << "第五注:" <<endl;
	Lottery* p5 = new Chao(Array,array5);
	DoWork(p5);

	cout << "------- 祝您生活愉快! -------" << endl;
	

}

Array 为中奖的号码,连买多期的话,只需输入一次array1,...array5,然后根据每期中奖号码的不同更改Array内的值即可。(上面数字只是为了测试随机挑选,值得注意的是,C++语言中并不能识别08,09这两个数,会不知道你是几进制,所以正常输入8,9就没事)。

相对比连买三期手动网上兑奖,此程序只需输入一次购买的号码,每次更改中奖号码,运行即可知道是否中奖。方便了许多!

若你买的是只有一注的话,可以注释掉后面四个创建出来的数组和对象,并将对应输出也进行相应的注释设置。

main()函数

int main(){

	test01();

	return 0;
}

4、运行

下载附件后,在其caipiao的目录下打开vscode,里面已有配置好的环境和设置。

然后执行以下命令

//进入目录下的终端
ctrl + shift + ~

//进入build
cd build/

//编译和运行
cmake ..

make

./code

终端执行的的结果

附件:

https://download.csdn.net/download/mengshenglo/87141080

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值