模拟 彩票/刮刮乐(C语言)

                        一、题目(彩票/刮刮乐)

1. 题目1:

        福利彩票 福利彩票35选7,随机生成7个数字,范围为10-35,数字不重复。用户可以选择自己的一组号码,并设置中奖规则。规则如下:猜中7个数字可获得500万奖金,猜中6个数字可获得100万奖金,猜中5个数字可获得1万奖金,猜中4个数字可获得5000奖金,猜中3个数字可获得500奖金,猜中0、1或2个数字则没有中奖。

要求如下:

  1. 实现用户注册功能。
  2. 实现用户登录功能,包括用户名、密码和验证码。
  3. 实现自选号码、机选号码和退出功能。
  4. 显示机选号码和当期双色球号码。
  5. 显示中奖数字并宣布中奖结果。
  6. 统计客户共购买了多少次彩票以及消费了多少金额(每张彩票5元)。

2. 题目2:

        刮刮乐 随机生成一张刮刮乐,要求满足对应的图案。用户可以输入对应位置进行刮奖。

要求如下:

  1. 实现用户注册功能。
  2. 实现用户登录功能,包括用户名、密码和验证码。
  3. 实现自选号码、机选号码和退出功能。
  4. 显示所有号码。
  5. 显示中奖数字并宣布中奖结果。
  6. 统计客户共购买了多少次刮刮乐以及消费了多少金额(每张刮刮乐10元)。

根据以上两个题目,可以结合起来完善和完美化。

   3. 思维导图:        

二、部分功能模块详解:

1. 数组输出:

        因为题中经常输出彩票信息,所以采用函数,便于多处使用。

// 输出一个n位数组数字
void output_sz(int a[], int n) {
	int i;
	for (i = 0; i < n; i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
}

2. 验证码

        验证码在登录,注册,用户信息修改等多处使用。


//生成验证码
void Code() {
	int sum, sum_c;
	char f;
	while (1) {
		int a, b, c;
		a = rand() % 10;
		b = rand() % 10;
		c = rand() % 3 + 1;//生成加减乘
		switch (c) {
		case 1: {
			f = '+';
			sum = a + b;
			break;
		}
		case 2: {
			f = '-';
			sum = a - b;
			break;
		}
		case 3: {
			f = '*';
			sum = a * b;
			break;
		}
		default: {
			f = '+';
			break;
		}
		}

		printf("验证码:%d%c%d=", a, f, b);
		scanf("%d", &sum_c);
		if (sum_c == sum) return;
		else {
			printf("验证码错误!!!\n");
			//Code();
		}
	}
}

3. 用户/密码查询

       int user_query(char name_query[20], char password_query[20], int n);

        在代码中,首先通过判断n的值来确定查询类型。当n等于1时,表示要查询用户名是否存在。函数会遍历一个数据结构中的用户信息(假设用户信息存在名为data的数组中),与输入的用户名进行比较。如果找到与输入的用户名相同的记录,函数会返回1,表示存在与输入用户名相同的用户记录,否则返回0。

        当n等于2时,表示要查询用户名和密码是否匹配。函数会遍历用户信息,查找与输入的用户名相同的记录。如果找到了相同的用户名,则会比较该记录的密码与输入的密码是否相同。如果密码相同,则函数返回1,表示用户名和密码匹配成功;如果记录中没有与输入用户名相同的记录,则函数返回-1,表示用户名不存在。

int user_query(char name_query[20], char password_query[20], int n) {
	int i;
	if (n == 1) {
		for (i = 0; i < 100; i++) {
			//表示有与用户名相同的则为1
			if (strcmp(name_query, data[i].name) == 0) return 1;
		}
		return 0;
	}
	else if (n == 2) {
		for (i = 0; i < 100; i++) {
			if (strcmp(name_query, data[i].name) == 0) break;
		}
		//密码相等则输出1
		if (i < 100) return !strcmp(password_query, data[i].password);
		else return -1;
	}
}

4. 用户注册

        首先通过system("cls")函数来清屏,然后输出提示信息,显示注册页面的标题。

接着使用一个while循环,循环内部有个嵌套的while循环。第一个while循环是用来输入用户名的,当用户输入的用户名与已存在的用户名不重复时,循环会结束。如果输入的用户名已存在,会显示提示信息要求重新输入。

接下来,用户需要输入密码,并进行进一步的验证码验证。

然后再次通过system("cls")函数来清屏,重新显示注册页面的标题。然后打印出用户输入的信息,包括用户名和余额,密码被注释掉不显示。

接着提示用户确认注册、重新注册或退出。用户需要输入相应的选项。

如果用户选择重新注册(选择2),则执行一些操作(重新进行循环)。

如果用户选择确认注册(选择1)或不注册(选择0),则根据选择执行相应的操作。如果选择确认注册,则将输入的用户名、密码和初始余额存储在数据结构中的下一个位置(假设数据结构为名为data的数组),然后返回1。如果选择不注册,则直接返回0。


int User_Registration(int n) {
	char name_x[20];
	char password_x[20];
	while (1) {
		system("cls");//清屏
		printf("		福利彩票-注册中心\n");
		while (1) {
			printf("用户名:");
			scanf("%s", name_x);
			if (user_query(name_x, name_x, 1) == 0)break;
			else printf("该用户名已有,请重新输入\n");
		}
		printf("密  码:");
		scanf("%s", password_x);
		Code();
		sxym(3);

		system("cls");//清屏
		printf("		福利彩票-注册中心\n");
		printf("您的信息为: \n");
		printf("	用户名:%s\n", name_x);
		//printf("	密  码:%s\n", password_x);
		printf("	余  额:%d\n", 0);
		printf("确认注册(1)	重新注册(2)	退出(0不注册)\n");
		int user_key;
		printf("请输入您的选择:");
		scanf("%d", &user_key);
		if (user_key == 2) {
			sxym(5);
		}
		else if (user_key == 1 || user_key == 0) {
			if (user_key == 1) {
				strcpy(data[n].name, name_x);
				strcpy(data[n].password, password_x);
				data[n].balance = 0;
			}
			return user_key;
		}
	}
}

5. 用户登录

首先输出登录页面的标题。接着用户需要输入用户名和密码,并进行进一步的验证码验证。

然后调用user_query函数,传入用户名和密码以及查询类型参数2,来判断用户名和密码是否匹配。如果用户名和密码匹配成功(user_query函数返回值为1),则进一步遍历用户信息数组,找到与输入的用户名相同的记录,并返回该记录在数组中的索引。

如果用户名和密码匹配失败(user_query函数返回值不为1),则输出提示信息:"用户名或密码错误"。如果没有找到与输入的用户名相同的记录,则返回-1,表示登录失败。


int user_in() {
	int i = 0;
	char name_x[20];
	char password_x[20];
	printf("		福利彩票-登录中心\n");
	printf("用户名:");
	scanf("%s", name_x);
	//printf("%s", name_x);
	printf("密  码:");
	scanf("%s", password_x);
	//printf("%s", password_x);
	Code();
	if (user_query(name_x, password_x, 2) == 1) {
		int j;
		for (j = 0; j < 100; j++) {
			if (strcmp(name_x, data[i].name) == 0) return i;
		}
	}
	else printf("用户名或密码错误\n");
	return -1;
}

6. 生成刮刮乐数据

//生成刮刮乐的数据
int lottery_ticket_ggl(int ggl[]) {
	int i, j;
	for (i = 0; i < 10; i++) {
		//10-40的数'
		ggl[i] = rand() % 30 + 10;
	}
	for (i = 10; i < 20; i++) {
		//设置中奖金额
		ggl[i] = (rand() % 9 + 1) * pow(10, rand() % 4);
	}
	for (i = 20; i < 30; i++) {
		//设置1-8的符号编码
		//可调节概率
		ggl[i] = rand() % ggl_jl + 1;
	}
	int cnt = 0;
	for (i = 30; i < 33; i++) {
		while (1) {
			ggl[i] = rand() % 30 + 10;
			for (j = 0; j < 10; j++) {
				if (ggl[i] == ggl[j]) cnt++;
			}
			if (cnt >= 2) cnt = 1;
			else break;

		}
		//ggl[i] = rand() % 30 + 10;
	}
}

7. 刮刮乐显示

在显示中我们采用3行一组,共十组,五组一行,如下图:

首先输出刮刮乐游戏的标题和当前是第几张刮刮乐。

然后打印出兑奖数,该部分数据存储在名为ggl的三维数组中。循环遍历数组的一部分元素,并将其打印出来。

接下来打印刮刮乐的规则,以及刮刮乐的图案。图案由7行和5列组成,循环遍历数组的一部分元素,并根据元素的值来决定打印的内容。如果元素的值为1,则表示未刮开,打印****;如果元素的值不为1,则表示已刮开,根据情况打印相应的金额或符号。

注意,这里的数据是0-33,而显示中采用了3行一组、共十组、五组一行的方式展示。


void ggl_xs(int n) {
	int i, j, k, g;
	printf("		刮刮乐		\n");
	printf("第%d张刮刮乐", n);
	Kong(2);
	printf("兑奖数:");
	for (i = 30; i < 33; i++) {
		ggl[n - 1][1][i] = 0;
		printf("%3d ", ggl[n - 1][0][i]);
	}
	printf("\n");
	printf("刮刮乐规则:第一行数字与兑奖数相同且第三行符号是‘%c’\n", '%');
	printf("	  则可获得中间行金额,如有两个‘%c' 则金额翻倍\n", '%');
	k = 0;
	g = 0;
	for (i = 0; i < 7; i++) {
		if (i == 3) {
			i++;
			printf("\n");
			g = 5;
		}
		Kong(4);
		for (j = 0; j < 5; j++) {
			//等于1表示未刮开
			if (ggl[n - 1][1][k * 10 + j + g] == 1) {
				if (k == 1) {
					printf("**%c*", 65 + j + g);
				}
				else	printf("****");
			}
			else {
				if (k == 2) {
					ggl_tx(ggl[n - 1][0][k * 10 + j + g]);
				}
				else printf("%4d", ggl[n - 1][0][k * 10 + j + g]);
			}
			Kong(2);
		}
		k++;
		if (k >= 3) k = 0;
		printf("\n");
	}
}

三、总程序(main.c)

main.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>
#pragma warning(disable:4996);

/*
中国福利彩票35选7 随机生成10-35内不重复的7个数字
然后让用户选择自己的一组号码 中奖规则,
猜中7个500万 6个100万 5个1万 4个5000 3个500 0,1,2个没中奖

要求如下:
1.要实现用户注册功能
2.要实现用户登录功能(包括:用户名,密码,验证码)
3.要实现自选号码,机选号码,以及退出功能
4.要显示机选号码,以及当期双色球号码
5.要显示中奖数字,以及宣布中奖结果
6.统计客户一共购买了多少次彩票,以及共消费了多少金额(每张彩票为5元)

*/



//初始化函数 
void Init() {
	srand(time(0));

}





// 输出一个n位数组数字
void output_sz(int a[], int n) {
	int i;
	for (i = 0; i < n; i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
}

//用于刷新页面,当换行过多适合使用
void sxym(int n) {
	int i;
	for (i = 0; i < n; i++) {
		printf("\n");
	}
}

//延时,等待,给人卡顿或者系统处理感觉
void Delay(int n) {
	int cnt = 0;
	int cnt_c = 0;
	while (1) {
		cnt_c++;
		if (cnt_c >= 10000 * n) {
			cnt++;
			cnt_c = 0;
		}
		if (cnt >= 10000) return;
	}
}

//用于空格输出,便于程序编写
void Kong(int i) {
	int j;
	for (j = 0; j < i; j++) {
		printf(" ");
	}
}

//生成验证码
void Code() {
	int sum, sum_c;
	char f;
	while (1) {
		int a, b, c;
		a = rand() % 10;
		b = rand() % 10;
		c = rand() % 3 + 1;//生成加减乘
		switch (c) {
		case 1: {
			f = '+';
			sum = a + b;
			break;
		}
		case 2: {
			f = '-';
			sum = a - b;
			break;
		}
		case 3: {
			f = '*';
			sum = a * b;
			break;
		}
		default: {
			f = '+';
			break;
		}
		}

		printf("验证码:%d%c%d=", a, f, b);
		scanf("%d", &sum_c);
		if (sum_c == sum) return;
		else {
			printf("验证码错误!!!\n");
			//Code();
		}
	}
}

//登录系统
//用户信息结构体
struct {
	char name[20];
	char password[20];
	int  balance;
}data[100];

//用于返回是否有相同的用户,或者密码是否正确
// n==1  则查用户名		n==2则查密码
//user 表示要查询的用户
//	返回1则表示与需要查询的信息相等,0则不相等
int user_query(char name_query[20], char password_query[20], int n) {
	int i;
	if (n == 1) {
		for (i = 0; i < 100; i++) {
			//表示有与用户名相同的则为1
			if (strcmp(name_query, data[i].name) == 0) return 1;
		}
		return 0;
	}
	else if (n == 2) {
		for (i = 0; i < 100; i++) {
			if (strcmp(name_query, data[i].name) == 0) break;
		}
		//密码相等则输出1
		if (i < 100) return !strcmp(password_query, data[i].password);
		else return -1;
	}
}
//用户注册	n为第n个用户
//返回1 用户注册成功,返回0注册失败
int User_Registration(int n) {
	char name_x[20];
	char password_x[20];
	while (1) {
		system("cls");//清屏
		printf("		福利彩票-注册中心\n");
		while (1) {
			printf("用户名:");
			scanf("%s", name_x);
			if (user_query(name_x, name_x, 1) == 0)break;
			else printf("该用户名已有,请重新输入\n");
		}
		printf("密  码:");
		scanf("%s", password_x);
		Code();
		sxym(3);

		system("cls");//清屏
		printf("		福利彩票-注册中心\n");
		printf("您的信息为: \n");
		printf("	用户名:%s\n", name_x);
		//printf("	密  码:%s\n", password_x);
		printf("	余  额:%d\n", 0);
		printf("确认注册(1)	重新注册(2)	退出(0不注册)\n");
		int user_key;
		printf("请输入您的选择:");
		scanf("%d", &user_key);
		if (user_key == 2) {
			sxym(5);
		}
		else if (user_key == 1 || user_key == 0) {
			if (user_key == 1) {
				strcpy(data[n].name, name_x);
				strcpy(data[n].password, password_x);
				data[n].balance = 0;
			}
			return user_key;
		}
	}
}

//用户登录
//返回的是用户信息i 结构体 data[i]
int user_in() {
	int i = 0;
	char name_x[20];
	char password_x[20];
	printf("		福利彩票-登录中心\n");
	printf("用户名:");
	scanf("%s", name_x);
	//printf("%s", name_x);
	printf("密  码:");
	scanf("%s", password_x);
	//printf("%s", password_x);
	Code();
	if (user_query(name_x, password_x, 2) == 1) {
		int j;
		for (j = 0; j < 100; j++) {
			if (strcmp(name_x, data[j].name) == 0) return j;
		}
	}
	else printf("用户名或密码错误\n");
	return -1;
}


#define ggl_jl  20
//生成刮刮乐彩票数据
int lottery_ticket_ggl(int ggl[]) {
	int i, j;
	for (i = 0; i < 10; i++) {
		//10-40的数'
		ggl[i] = rand() % 30 + 10;
	}
	for (i = 10; i < 20; i++) {
		//设置中奖金额
		ggl[i] = (rand() % 9 + 1) * pow(10, rand() % 4);
	}
	for (i = 20; i < 30; i++) {
		//设置1-8的符号编码
		//可调节概率
		ggl[i] = rand() % ggl_jl + 1;
	}
	int cnt = 0;
	for (i = 30; i < 33; i++) {
		while (1) {
			ggl[i] = rand() % 30 + 10;
			for (j = 0; j < 10; j++) {
				if (ggl[i] == ggl[j]) cnt++;
			}
			if (cnt >= 2) cnt = 1;
			else break;
			
		}
		//ggl[i] = rand() % 30 + 10;
	}
}


//根据不同的数打印不一样图案
//刮刮乐中使用
void ggl_tx(int n) {
	switch (n) {
	case 1: {
		printf("%4c", '!');
		break;
	}
	case 2: {
		printf("%4c", '%');
		break;
	}
	case 3: {
		printf("%4c", '#');
		break;
	}
	case 4: {
		printf("%4c", '@');
		break;
	}
	case 5: {
		printf("%4c", '$');
		break;
	}
	case 6: {
		printf("%4c", '<');
		break;
	}
	case 7: {
		printf("%4c", '>');
		break;
	}
	case 8: {
		Kong(2);
		printf("%c%c", '%', '%');
		break;
	}
	default: {
		printf("%4c", '&');
		break;
	}
	}
}

#define ggl_xz 100
#define ggl_yuan 10
int ggl[ggl_xz][2][33];

//刮刮乐显示对应的刮刮乐信息
void ggl_xs(int n) {
	int i, j, k, g;
	printf("		刮刮乐		\n");
	printf("第%d张刮刮乐", n);
	Kong(2);
	printf("兑奖数:");
	for (i = 30; i < 33; i++) {
		ggl[n - 1][1][i] = 0;
		printf("%3d ", ggl[n - 1][0][i]);
	}
	printf("\n");
	printf("刮刮乐规则:第一行数字与兑奖数相同且第三行符号是‘%c’\n", '%');
	printf("	  则可获得中间行金额,如有两个‘%c' 则金额翻倍\n", '%');
	k = 0;
	g = 0;
	for (i = 0; i < 7; i++) {
		if (i == 3) {
			i++;
			printf("\n");
			g = 5;
		}
		Kong(4);
		for (j = 0; j < 5; j++) {
			//等于1表示未刮开
			if (ggl[n - 1][1][k * 10 + j + g] == 1) {
				if (k == 1) {
					printf("**%c*", 65 + j + g);
				}
				else	printf("****");
			}
			else {
				if (k == 2) {
					ggl_tx(ggl[n - 1][0][k * 10 + j + g]);
				}
				else printf("%4d", ggl[n - 1][0][k * 10 + j + g]);
			}
			Kong(2);
		}
		k++;
		if (k >= 3) k = 0;
		printf("\n");
	}
}

//刮刮乐开刮,根据不同输入,改变刮刮乐数组是否被刮的信息
void ggl_kg(int n) {
	sxym(3);
	int i, j, k, g;
	while (1) {
		system("cls");//清屏
		ggl_xs(n);
		int key;
		char key_f[2];

		printf("输入您想刮开的区域  退出(0) 全刮(F 8)\n	A1	123为上中下:");
		scanf("%s", &key_f[0]);
		scanf("%d", &key);

		if (key_f[0] == 'F' && key == 8) {
			for (i = 0; i < 33; i++)	ggl[n - 1][1][i] = 0;
		}
		if (key == 0) return;
		key--;
		for (i = 65; i < 75; i++) {
			if (key_f[0] == i) {
				//用于计算当前为那一块区域值
				int ii = i - 65;
				ggl[n - 1][1][ii + key * 10] = 0;
			}
		}
		sxym(2);
	}
}

//刮刮乐总处理函数
//输出 -1 则系统错误
//返回正常值为当前余额
int guagualue(int balance) {
	//瓜瓜乐张数,0为具体信息,1为是否被挂开
	//				0被刮开,1未被刮开			
	//最后33位表示	://前十为对比数字,
	//					11-20为相对应的金额,
	// 21-30为符号,33-33为彩票相应对比数字
	int ggl_i = 0;

	int i, j;
	while (1) {
		system("cls");//清屏
		printf("		欢迎进入刮刮乐		\n");
		printf("您当前已购买刮刮乐:%d		当前余额:%d	刮刮乐十元一张\n", ggl_i, balance);
		printf("	购买刮刮乐(1)		开刮(2)\n");
		printf("	   兑奖(3)		退出(0)\n");
		int key;
		printf("请输入您的选择:");
		scanf("%d", &key);
		if (balance - ggl_yuan < 0 && key == 1) {
			printf("当前余额不足,请返回首页充值。\n");
			key = 2;
		}
		switch (key) {
		case 1: {
			balance = balance - ggl_yuan;
			//将刮刮乐数值都视为未刮开
			for (i = 0; i < 33; i++) {
				ggl[ggl_i][1][i] = 1;
			}
			//生成30个满足要求数
			lottery_ticket_ggl(ggl[ggl_i][0]);
			ggl_i++;
			printf("刮刮乐打印中.......\n");
			Delay(3);
			printf("打印完毕,可回刮刮乐首页查看\n");
			Delay(1);
			sxym(3);
			break;
		}
		case 2: {
			while (1) {
				int key2;
				printf("共有%d张刮刮乐    退出(0)\n", ggl_i);
				printf("请输入张数:");
				scanf("%d", &key2);
				if (key2 == 0 || key2 > ggl_i) break;
				ggl_kg(key2);
			}
			break;
		}
		case 3: {
			int sum = 0;
			int sum_c = 0;
			system("cls");//清屏
			printf("以下为您的刮刮乐:\n");
			sxym(1);
			for (i = 0; i < ggl_i; i++) {
				for (j = 0; j < 33; j++) {
					ggl[i][1][j] = 0;//将刮刮乐全部视为刮开
				}
				ggl_xs(i + 1);
				for (j = 20; j < 30; j++) {
					//比较数字
					if (ggl[i][0][j - 20] == ggl[i][0][30] || ggl[i][0][j - 20] == ggl[i][0][31] || ggl[i][0][j - 20] == ggl[i][0][32]) {
						//比较图案
						if (ggl[i][0][j] == 2)	sum_c = ggl[i][0][j - 10];//取中间的金额
						if (ggl[i][0][j] == 8)	sum_c = 2 * ggl[i][0][j - 10];//两倍奖金
					}
				}
				printf("第%d张刮刮乐 ", i + 1);
				if (sum_c == 0) printf("未中奖\n");
				else printf("中奖金额:%5d\n", sum_c);
				sum = sum + sum_c;
				sum_c = 0;
				printf("总中奖金额:%5d\n", sum);
				sxym(3);
				Delay(5);
			}
			int key3;
			while (1) {
				printf("总中奖金额:%5d\n", sum);
				printf("	退出(0):");
				scanf("%d", &key3);
				if (key3 == 0) break;
			}
			balance = balance + sum;
			ggl_i = 0;
			break;
		}
		case 0: {
			return balance;
			break;
		}
		default:
			break;
		}


	}
	return -1;
}

//根据中奖个数,进行返回奖金
int cp_js(int i) {
	int jg = 0;
	switch (i)
	{
	case 7: {
		jg = 500 * 10000;
		break;
	}
	case 6: {
		jg = 100 * 10000;
		break;
	}
	case 5: {
		jg = 10000;
		break;
	}
	case 4: {
		jg = 5000;
		break;
	}
	case 3: {
		jg = 500;
		break;
	}
	default:
		jg = 0;
		break;
	}
	return jg;
}

//福利彩票 

//随机生成几位的满足范围的彩票 
int lottery_ticket(int cp[], int n) {
	int i, j;
	int cnt;
	int cnt_c = 0;
	for (i = 0; i < n; i++) {
		int tc = 1;	//退出随机使能 
		cnt = 0;
		while (1) {
			cp[i] = rand() % 26 + 10;
			for (j = 0; j < i; j++) {
				if (cp[j] == cp[i]) {
					tc = 0;
					break;
				}
			}
			if (tc == 1) break;

			//正好到人能感受到的卡顿状态 
			cnt_c++;
			if (cnt_c >= 1000) {
				cnt++;
				cnt_c = 0;
			}
			//如果10万次还未生成,将报告1 
			if (cnt >= 100000)	return 1;
		}
	}
	return 0;
}

//	返回 -1 表示在随机数中过多次数
#define cp_xz  10
#define cp_yuan 5
int China_Welfare_Lottery(int balance) {
	int i, j;
	i = 0;
	int cp_j[7];
	do {
		i++;
		printf("福利彩票欢迎您,系统正在加载,请等待 %d%c  \n", i * 8+rand()%7,'%');
		if (i >= 10)	return -1;
	} while (lottery_ticket(cp_j, 7) == 1);
	printf("福利彩票欢迎您,系统正在加载,请等待 %d  \n", 100);
	Delay(1);
	int purchase_cp[cp_xz][10];

	int cp_i = 0;

	while (1) {
		system("cls");//清屏
		int cp[7];
		int key;

		printf("\n			欢迎进入福利彩票		\n");
		printf("您当前已购买彩票数:%d		当前余额:%d	福利彩票五元一张\n", cp_i, balance);
		if (cp_i >= cp_xz) {
			printf("福利彩票提醒您,每次最大限购买%d彩票\n", cp_xz);
		}
		else if (balance >= cp_yuan)
			printf("机选号码(1)    自选号码    (2)\n");

		printf("  开奖  (3)    查看已购彩票(4)	   退出(0)\n");

		printf("请输入您的选择:");
		scanf("%d", &key);

		if (key != 3 && key != 4 && cp_i >= cp_xz) {
			//彩票购买数已达上线 
			key = 3;
		}

		if (key == 2 || key == 1) {
			if (balance - cp_yuan >= 0)	balance = balance - cp_yuan;
			else {
				printf("当前余额不足,还差%d元,请返回首页充值。\n", cp_yuan - balance);
				key = 4;//进入彩票查询
			}
		}

		//显示 
		switch (key) {
		case 1: {
			while (1) {
				int k_cp = 0;
				while (lottery_ticket(cp, 7) == 1) {
					k_cp++;
					if (k_cp >= 100) return 1;
					printf("系统较忙,请耐心等待  %d  \n", k_cp);

				}
				printf("您的随机号码为:");
				output_sz(cp, 7);	//输出彩票七位数
				printf("确认随机号码(1) 	重新随机(2)\n");
				int key1;
				scanf("%d", &key1);
				if (key1 == 2);

				else if (key1 == 1) {
					for (i = 0; i < 7; i++) {
						purchase_cp[cp_i][i] = cp[i];
					}
					cp_i++;
					break;
				}
			}
			break;
		}
		case 2: {
			while (1) {
				while (1) {
					printf("请手动输入7位不相等号码(10-35):");
					for (i = 0; i < 7; i++) {
						scanf("%d", &cp[i]);
					}
					int tc = 0;
					for (i = 0; i < 7; i++) {
						if (cp[i] < 10 || cp[i]>35) {
							tc = 1;
							break;
						}
						for (j = 0; j < 7; j++) {
							if (j == i) j++;
							if (j >= 7) break;
							if (cp[i] == cp[j]) {
								tc = 1;
								break;
							}
						}
						if (tc == 1) break;
					}
					if (tc == 0)break;
					else if (tc == 1) {
						printf("该号码无效,请按要求输入不同号码(10-35)\n");
					}
				}
				printf("确认号码(1) 	重新选择(2)\n");
				int key2;
				scanf("%d", &key2);
				if (key2 == 2);
				else if (key2 == 1) {
					for (i = 0; i < 7; i++) {
						purchase_cp[cp_i][i] = cp[i];
					}
					cp_i++;
					break;
				}

			}
			break;
		}
		case 3: {
			int key3;
			int kjbc[cp_xz][8];
			//保存中奖信息,第一位为该张中个数
			for (i = 0; i < cp_i; i++) {
				kjbc[i][0] = 0;
			}
			system("cls");//清屏
			printf("动动发财小手,输入888 马上开奖:");
			scanf("%d", &key3);
			//sxym(5);
			for (i = 0; i < 7; i++) {
				Delay(5);
				sxym(2);
				printf("本期双色球第%d个号码为:%d\n", i + 1, cp_j[i]);
				for (j = 0; j < cp_i; j++) {
					int k;
					for (k = 0; k < 7; k++) {
						if (cp_j[i] == purchase_cp[j][k]) {
							printf("恭喜您		您的第%d张有该号码:%d\n", j + 1, cp_j[i]);
							kjbc[j][0]++;
							kjbc[j][kjbc[j][0]] = cp_j[i];
						}
					}
				}
			}
			Delay(3);
			sxym(3);
			printf("双色球已全部开完,系统将计算您的所有彩票\n");
			printf("双色球开奖号码为:");
			output_sz(cp_j, 7);

			int sum = 0;
			for (i = 0; i < cp_i; i++) {
				Delay(3);
				if (kjbc[i][0] >= 3) {
					sum = sum + cp_js(kjbc[i][0]);
					printf("第%d张彩票中奖  该彩票7位号码为:", i + 1);
					output_sz(purchase_cp[i], 7);	//输出该中奖彩票所有号码
					printf("				中奖号码:");
					for (j = 1; j <= kjbc[i][0]; j++) {
						printf("%d ", kjbc[i][j]);
					}
					sxym(1);
				}
				else {
					printf("第%d张彩票	未中奖 该彩票号码:", i + 1);
					output_sz(purchase_cp[i], 7);
					sxym(1);

				}
			}
			Delay(5);
			while (1) {
				printf("您本次中奖金额共为:%d\n", sum);
				printf("         退出(0):");
				scanf("%d", &key3);
				if (key3 == 0) break;
				else sxym(1);
			}
			balance = balance + sum;//跟新当前余额
			cp_i = 0;
			i = 0;
			do {
				i++;
				printf("系统正在返回首页 %d\n", i);
			} while (lottery_ticket(cp_j, 7) == 1);


			break;
		}
		case 4: {
			int key4 = 888;
			while (1) {
				system("cls");//清屏
				printf("\n			欢迎进入福利彩票		\n");
				printf("您已购买%d张彩票:\n", cp_i);
				for (i = 0; i < cp_i; i++) {
					if (i + 1 == key4) {
						printf("	第%d张彩票:", i + 1);
						output_sz(purchase_cp[i], 7);
					}
					else if (key4 == 888) {
						printf("	第%d张彩票:", i + 1);
						output_sz(purchase_cp[i], 7);
					}
				}
				printf("首页(0) 	查看彩票,请输入张数 全部请输入(888):");
				scanf("%d", &key4);
				sxym(3);
				//防止输入超出范围
				if ((key4 == 0 || key4 > cp_i || key4 <= 0) && key4 != 888)	break;
			}
			break;
		}
		case 0: {
			return balance;//退出函数 
			break;
		}
		default: {
			break;
		}


		}

	}
	return 0;
}

int main() {
	Init();
	int key_main;
	int yh_i = 0;
	int i,j;
	//guagualue(110);
	//China_Welfare_Lottery(10);
	while (1) {
		system("cls");//清屏
		printf("	欢迎进入福利彩票中心	\n");
		printf("登录(1)	注册(2)	退出(0)\n");
		printf("请输入您的选择:");
		scanf("%d", &key_main);
		system("cls");//清屏
		switch (key_main) {
		case 1: {
			int key_main_1;
			for (i = 0; i < 3; i++) {
				system("cls");//清屏
				key_main_1 = user_in();
				Delay(1);
				if (key_main_1 != -1) break;
			}
			if (key_main_1 == -1) key_main_1 = 888;
			if (key_main_1 != 888) {
				while (1) {
					system("cls");//清屏
					int tc = 0;
					printf("	欢迎进入福利彩票中心	\n");
					printf("余额:%6d", data[key_main_1].balance);
					Kong(5);
					printf("       用户:%s\n", data[key_main_1].name);
					printf("福利彩票(1)           刮 刮 乐(2)\n");
					printf("  充值  (3)           信息查询(4)\n");
					printf("                        退出登录(0)\n");
					int key_1;
					printf("请输入您的选择:");
					scanf("%d", &key_1);
					switch (key_1) {
					case 1: {
						system("cls");//清屏
						data[key_main_1].balance = China_Welfare_Lottery(data[key_main_1].balance);
						break;
					}
					case 2: {
						system("cls");//清屏
						data[key_main_1].balance = guagualue(data[key_main_1].balance);
						break;
					}
					case 3: {
						printf("请输入充值金额:");
						int czje;
						scanf("%d", &czje);
						printf("正在充值中......\n");
						Delay(1);
						data[key_main_1].balance = data[key_main_1].balance + czje;
						break;
					}
					case 4: {
						int password_xs=0;
						while (1) {
							system("cls");//清屏
							printf("	欢迎进入福利彩票中心	\n");
							printf("您的信息为: \n");
							printf("	用户名:%s\n", data[key_main_1].name);
							if(password_xs==1) printf("	密  码:%s\n", data[key_main_1].password);
							printf("	余  额:%d\n", data[key_main_1].balance);
							printf("更改用户名(1) 更改密码(2)	显示/关闭密码(3)\n") ;
							printf("	                            退    出(0)\n");
							printf("请输入您的选择:");
							int key_main_4;
							scanf("%d", &key_main_4);
							char name_4[20];
							char password_4[20];
							if (key_main_4 == 0) break;
							else if(key_main_4==1 || key_main_4==2||key_main_4==3){
								i = 0;
								while(1){
									printf("请输入密码:");
									scanf("%s",password_4);
									if(user_query(data[key_main_1].name,password_4,2)==1) break;
									else{
										printf("密码错误\n");
										i++;
										if(i>=3) break;
									}
								}
							} 
							//小于3则密码正确 
							if(i<3){
								if(key_main_4==1){
									j=0;
									while(1){
										printf("请输入更改用户名:");
										scanf("%s",name_4);
										Code();
										if(user_query(name_4,name_4,1) == 0) break;
										else{
											printf("已有该用户名\n");
											j++;
										}
										if(j>=3) break;
									}
									if(j>=3) printf("更改失败\n");
									else{
										printf("更改成功\n");
										strcpy(data[key_main_1].name, name_4);
									}
									Delay(1);
								} 
								else if(key_main_4==2){
									j=0;
									printf("请输入更改密码:");
									scanf("%s",password_4);
									Code();
									printf("更改成功\n");
									strcpy(data[key_main_1].password, password_4);
									Delay(1);									
								}
								else if(key_main_4==3){
									if(password_xs==0)
									password_xs=1;	
									else password_xs=0;				
								}
							}
						}
						break;
					}
					case 0: {
						tc = 1;
						break;
					}
					default:
						break;
					}
					sxym(5);
					if (tc == 1)break;
				}
			}
			//sxym(5);
			break;
		}
		case 2: {
			if (User_Registration(yh_i) == 1) {
				printf("注册成功:%s,新用户送十元体验金。\n", data[yh_i].name);
				data[yh_i].balance = 10;
				yh_i++;
			}
			Delay(3);
			system("cls");//清屏
			break;
		}
		case 0: {
			return 0;
			break;
		}
		default:
			break;
		}
	}

	return 0;
}

四、运行效果截图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0X78

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值