一、题目(彩票/刮刮乐)
1. 题目1:
福利彩票 福利彩票35选7,随机生成7个数字,范围为10-35,数字不重复。用户可以选择自己的一组号码,并设置中奖规则。规则如下:猜中7个数字可获得500万奖金,猜中6个数字可获得100万奖金,猜中5个数字可获得1万奖金,猜中4个数字可获得5000奖金,猜中3个数字可获得500奖金,猜中0、1或2个数字则没有中奖。
要求如下:
- 实现用户注册功能。
- 实现用户登录功能,包括用户名、密码和验证码。
- 实现自选号码、机选号码和退出功能。
- 显示机选号码和当期双色球号码。
- 显示中奖数字并宣布中奖结果。
- 统计客户共购买了多少次彩票以及消费了多少金额(每张彩票5元)。
2. 题目2:
刮刮乐 随机生成一张刮刮乐,要求满足对应的图案。用户可以输入对应位置进行刮奖。
要求如下:
- 实现用户注册功能。
- 实现用户登录功能,包括用户名、密码和验证码。
- 实现自选号码、机选号码和退出功能。
- 显示所有号码。
- 显示中奖数字并宣布中奖结果。
- 统计客户共购买了多少次刮刮乐以及消费了多少金额(每张刮刮乐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;
}