c++_双色球辅助
vs2017分文件
//c_Ball.h 文件
#pragma once
#include <iostream>
#include <cctype>
#include <conio.h>
#include <string>
#include <fstream>
#include <cstring>
using namespace std;
#define RED_BALL 7
class c_Ball
{
public:
c_Ball();
~c_Ball();
void main_Display(void); //显示主界面
void count_Red(); //计算红球组合
void count_Red_Blue(); //计算蓝球组合
void add_Ball(); //添加新的号码
void red_File(void); //读取文件
void red_File(string *strP); //读取文件
void show_Ball(void); //打印号码
private:
int m_cBall[RED_BALL]; //双色球
int m_iRed_total; //红球组合总注
int m_iRed_Blue_total; // 红蓝球组合总注数
int m_iAdd_total; //添加的号码总数
string m_sUBall[RED_BALL]; //接收用户输入的号码
};
bool estimate_Ball(int *m_p); //判断红球各球之间不相等并且由左到右依次由小到大
int compare_Ball(string *str1, int i); //比较两数之间左数不可大于右数
//c_Ball.cpp文件
#include "c_Ball.h"
c_Ball::c_Ball()
{
m_iRed_total = 0;
m_iRed_Blue_total = 0;
m_iAdd_total = 0;
}
c_Ball::~c_Ball()
{
}
//判断红球各球之间不相等并且由左到右依次由小到大
bool estimate_Ball(int *m_p)
{
for (int i = 0;i < RED_BALL - 2;i++)
{
if (m_p[i] >= m_p[i + 1])
{
return false;
}
}
return true;
}
//显示号码
void c_Ball::show_Ball(void)
{
for (int i = 0; i < RED_BALL; i++)
{
cout << m_sUBall[i]<< " ";
}
cout << endl;
}
//读取文件
void c_Ball::red_File(void)
{
ifstream inFile;
inFile.open("add_Num.txt", ios_base::in);
if (!inFile.is_open())
{
cout << "Open file failure!" << endl;
exit(1);
}
while (!inFile.eof())
{
for (int i = 0; i < RED_BALL; i++)
{
inFile >> m_sUBall[i];
cout << m_sUBall[i] << " ";
}
cout << endl << endl;
m_iAdd_total++;
}
cout << "总计:" << m_iAdd_total << "注号码" << endl <<endl;
inFile.close();
cout << "按0退出!按其它任意键返回主界面!" << endl;
char m_cKey_red_File;
m_cKey_red_File = _getch();
switch (m_cKey_red_File)
{
case '0':
exit(1);
break;
default:
system("cls");
this->main_Display();
break;
}
}
//读取文件
void c_Ball::red_File(string *strP)
{
string m_stUBall[RED_BALL];
int m_iNum = 0;
ifstream inFile;
inFile.open("add_Num.txt", ios_base::in);
if (!inFile.is_open())
{
cout << "Open file failure!" << endl;
exit(1);
}
while (!inFile.eof())
{
int m_itNum = 0; //标记两个字符串是否全部相等,一共七个字符串,当=7时代表全相等
for (int i = 0; i < RED_BALL; i++)
{
inFile >> m_stUBall[i];
if (m_stUBall[i] == strP[i])
{
m_itNum++;
}
}
if (m_itNum == 7)
{
m_iNum++;
}
}
inFile.close();
cout << "此号已开过" << m_iNum << "次!" << endl;
}
//比较两数之间左数不可大于右数
int compare_Ball(string *str1, int i)
{
int num1;
int num2;
//将输入的字符串转换为数字之后进行比较大小
if (str1[i - 1][1] != '\0')
{
num1 = (str1[i - 1][0] - '0') * 10 + (str1[i - 1][1] - '0');
}
else if (str1[i - 1][1] == '\0')
{
num1 = str1[i - 1][0] - '0';
}
if (str1[i][1] != '\0')
{
num2 = (str1[i][0] - '0') * 10 + (str1[i][1] - '0');
}
else if (str1[i][1] == '\0')
{
num2 = str1[i][0] - '0';
}
//转换好的数字分别赋给num1和num2进行比较
if (num1 >= num2)
{
return 1;
}
return 0;
}
//显示主界面
void c_Ball::main_Display(void)
{
cout << "OOOOOOOOOOOOOOOOO 双色球号码辅助 OOOOOOOOOOOOOOOOO" << endl << endl;;
cout << " 1> 计算红球组合次数" << endl << endl;
cout << " 2> 计算红蓝球组合次数" << endl << endl;
cout << " 3> 添加已开号码" << endl << endl;
cout << " 4> 显示已开号码" << endl << endl;
cout << " 0> 退出" << endl << endl;
cout << "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" << endl;
char m_cKey_display;
cout << "请输入项目标签(1-4): ";
rst3:
cin >> m_cKey_display;
switch (m_cKey_display)
{
case '1':
this->count_Red();
break;
case '2':
this->count_Red_Blue();
break;
case '3':
this->add_Ball();
break;
case '4':
this->red_File();
break;
case '0':
exit(1);
break;
default:
cout << "请输入正确的标签!" << endl;
goto rst3;
break;
}
}
void c_Ball::count_Red()
{
for (m_cBall[0] = 1;m_cBall[0] <= 28;m_cBall[0]++)
{
for (m_cBall[1] = 2;m_cBall[1] <= 29;m_cBall[1]++)
{
for (m_cBall[2] = 3;m_cBall[2] <= 30;m_cBall[2]++)
{
for (m_cBall[3] = 4;m_cBall[3] <= 31;m_cBall[3]++)
{
for (m_cBall[4] = 5;m_cBall[4] <= 32;m_cBall[4]++)
{
for (m_cBall[5] = 6;m_cBall[5] <= 33;m_cBall[5]++)
{
if (true == estimate_Ball(m_cBall))
{
for (int i = 0;i < RED_BALL - 1;i++)
{
cout << m_cBall[i] << " ";
}
cout << endl;
m_iRed_total++;
}
}
}
}
}
}
}
cout << "红球组合总注数: " << m_iRed_total << endl;
}
void c_Ball::count_Red_Blue()
{
for (m_cBall[0] = 1;m_cBall[0] <= 28;m_cBall[0]++)
{
for (m_cBall[1] = 2;m_cBall[1] <= 29;m_cBall[1]++)
{
for (m_cBall[2] = 3;m_cBall[2] <= 30;m_cBall[2]++)
{
for (m_cBall[3] = 4;m_cBall[3] <= 31;m_cBall[3]++)
{
for (m_cBall[4] = 5;m_cBall[4] <= 32;m_cBall[4]++)
{
for (m_cBall[5] = 6;m_cBall[5] <= 33;m_cBall[5]++)
{
for (m_cBall[6] = 1;m_cBall[6] <= 16;m_cBall[6]++)
{
if (true == estimate_Ball(m_cBall))
{
for (int i = 0;i < RED_BALL;i++)
{
cout << m_cBall[i] << " ";
}
cout << endl;
m_iRed_Blue_total++;
}
}
}
}
}
}
}
}
cout << "红蓝球组合总注数: " << m_iRed_Blue_total << endl;
}
void c_Ball::add_Ball()
{
ofstream outFile; //创建文件
outFile.open("add_Num.txt", ios_base::app|ios_base::out); //打开文件,以只追加模式
if (!outFile.is_open())
{
cout << "Open file failure!" << endl;
exit(1);
}
rst:
for (int i = 0;i < RED_BALL - 1;i++)
{
cout << "请输入第" << i + 1 << "位红球号码(1-33):";
cin >> m_sUBall[i];
getchar();
if (m_sUBall[i][0] == '\0')
{
cout << "号码不可为空,请输入正确号码!" << endl;
goto rst;
}
//判断是否为不可超过两位数
if (m_sUBall[i][1] != '\0')
{
if (m_sUBall[i][2] != '\0')
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
}
//判断两位数时数为1-33之间
if (m_sUBall[i][1] != '\0')
{
if (!(m_sUBall[i][0] >= '1'&&m_sUBall[i][0] <= '3'))
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
if (m_sUBall[i][0] < '3')
{
if (!(m_sUBall[i][1] >= '0'&&m_sUBall[i][1] <= '9'))
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
}
else
{
if (!(m_sUBall[i][1] <= '3'))
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
}
}
else
{
if (!(m_sUBall[i][0] >= '1'&&m_sUBall[i][0] <= '9'))
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
}
if (i > 0)
{
if (compare_Ball(m_sUBall, i))
{
cout << "输入有误!左数不可大于或等于右数!请重新输入正确号码!" << endl;
goto rst;
}
}
}
cout << endl;
rst1:
cout << "请输入蓝球号码(1-16): ";
cin >> m_sUBall[RED_BALL - 1];
if (m_sUBall[RED_BALL - 1][0] == '\0')
{
cout << "号码不可为空,请输入正确号码!" << endl;
goto rst1;
}
//判断是否为不可超过两位数
if (m_sUBall[RED_BALL - 1][1] != '\0')
{
if (m_sUBall[RED_BALL - 1][2] != '\0')
{
cout << "输入有误!蓝球号码应为1-16之间包含1和16,请输入正确号码!" << endl;
goto rst1;
}
}
//判断两位数时数为1-33之间
if (m_sUBall[RED_BALL - 1][1] != '\0')
{
if (!(m_sUBall[RED_BALL - 1][0] == '1'))
{
cout << "输入有误!蓝球号码应为1-16之间包含1和16,请输入正确号码!" << endl;
goto rst1;
}
if (!(m_sUBall[RED_BALL - 1][1] <= '6'))
{
cout << "输入有误!蓝球号码应为1-16之间包含1和16,请输入正确号码!" << endl;
goto rst1;
}
}
else
{
if (!(m_sUBall[RED_BALL - 1][0] >= '1'&&m_sUBall[RED_BALL - 1][0] <= '9'))
{
cout << "输入有误!蓝球号码应为1-16之间包含1和16,请输入正确号码!" << endl;
goto rst1;
}
}
red_File(m_sUBall);
cout << "您输入的号码为: ";
for (int i = 0;i < RED_BALL;i++)
{
cout << m_sUBall[i] << " ";
}
cout << endl;
cout << "是否保存?(Y/N)";
char m_cKey_add;
rst2:
m_cKey_add = _getch();
if (m_cKey_add == 'y' || m_cKey_add == 'Y')
{
for (int j = 0; j < RED_BALL; j++)
{
outFile << m_sUBall[j] << " ";
}
}
else if (m_cKey_add == 'n' || m_cKey_add == 'N')
{
cout << endl;
this->show_Ball();
}
else
{
cout << endl << "输入有误,请输入Y或N!" << endl;
goto rst2;
}
outFile << endl;
outFile.close();
}
#include "c_Ball.h"
c_Ball::c_Ball()
{
m_iRed_total = 0;
m_iRed_Blue_total = 0;
m_iAdd_total = 0;
}
c_Ball::~c_Ball()
{
}
//判断红球各球之间不相等并且由左到右依次由小到大
bool estimate_Ball(int *m_p)
{
for (int i = 0;i < RED_BALL - 2;i++)
{
if (m_p[i] >= m_p[i + 1])
{
return false;
}
}
return true;
}
//显示号码
void c_Ball::show_Ball(void)
{
for (int i = 0; i < RED_BALL; i++)
{
cout << m_sUBall[i]<< " ";
}
cout << endl;
}
//读取文件
void c_Ball::red_File(void)
{
ifstream inFile;
inFile.open("add_Num.txt", ios_base::in);
if (!inFile.is_open())
{
cout << "Open file failure!" << endl;
exit(1);
}
while (!inFile.eof())
{
for (int i = 0; i < RED_BALL; i++)
{
inFile >> m_sUBall[i];
cout << m_sUBall[i] << " ";
}
cout << endl << endl;
m_iAdd_total++;
}
cout << "总计:" << m_iAdd_total << "注号码" << endl <<endl;
inFile.close();
cout << "按0退出!按其它任意键返回主界面!" << endl;
char m_cKey_red_File;
m_cKey_red_File = _getch();
switch (m_cKey_red_File)
{
case '0':
exit(1);
break;
default:
system("cls");
this->main_Display();
break;
}
}
//读取文件
void c_Ball::red_File(string *strP)
{
string m_stUBall[RED_BALL];
int m_iNum = 0;
ifstream inFile;
inFile.open("add_Num.txt", ios_base::in);
if (!inFile.is_open())
{
cout << "Open file failure!" << endl;
exit(1);
}
while (!inFile.eof())
{
int m_itNum = 0; //标记两个字符串是否全部相等,一共七个字符串,当=7时代表全相等
for (int i = 0; i < RED_BALL; i++)
{
inFile >> m_stUBall[i];
if (m_stUBall[i] == strP[i])
{
m_itNum++;
}
}
if (m_itNum == 7)
{
m_iNum++;
}
}
inFile.close();
cout << "此号已开过" << m_iNum << "次!" << endl;
}
//比较两数之间左数不可大于右数
int compare_Ball(string *str1, int i)
{
int num1;
int num2;
//将输入的字符串转换为数字之后进行比较大小
if (str1[i - 1][1] != '\0')
{
num1 = (str1[i - 1][0] - '0') * 10 + (str1[i - 1][1] - '0');
}
else if (str1[i - 1][1] == '\0')
{
num1 = str1[i - 1][0] - '0';
}
if (str1[i][1] != '\0')
{
num2 = (str1[i][0] - '0') * 10 + (str1[i][1] - '0');
}
else if (str1[i][1] == '\0')
{
num2 = str1[i][0] - '0';
}
//转换好的数字分别赋给num1和num2进行比较
if (num1 >= num2)
{
return 1;
}
return 0;
}
//显示主界面
void c_Ball::main_Display(void)
{
cout << "OOOOOOOOOOOOOOOOO 双色球号码辅助 OOOOOOOOOOOOOOOOO" << endl << endl;;
cout << " 1> 计算红球组合次数" << endl << endl;
cout << " 2> 计算红蓝球组合次数" << endl << endl;
cout << " 3> 添加已开号码" << endl << endl;
cout << " 4> 显示已开号码" << endl << endl;
cout << " 0> 退出" << endl << endl;
cout << "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" << endl;
char m_cKey_display;
cout << "请输入项目标签(1-4): ";
rst3:
cin >> m_cKey_display;
switch (m_cKey_display)
{
case '1':
this->count_Red();
break;
case '2':
this->count_Red_Blue();
break;
case '3':
this->add_Ball();
break;
case '4':
this->red_File();
break;
case '0':
exit(1);
break;
default:
cout << "请输入正确的标签!" << endl;
goto rst3;
break;
}
}
void c_Ball::count_Red()
{
for (m_cBall[0] = 1;m_cBall[0] <= 28;m_cBall[0]++)
{
for (m_cBall[1] = 2;m_cBall[1] <= 29;m_cBall[1]++)
{
for (m_cBall[2] = 3;m_cBall[2] <= 30;m_cBall[2]++)
{
for (m_cBall[3] = 4;m_cBall[3] <= 31;m_cBall[3]++)
{
for (m_cBall[4] = 5;m_cBall[4] <= 32;m_cBall[4]++)
{
for (m_cBall[5] = 6;m_cBall[5] <= 33;m_cBall[5]++)
{
if (true == estimate_Ball(m_cBall))
{
for (int i = 0;i < RED_BALL - 1;i++)
{
cout << m_cBall[i] << " ";
}
cout << endl;
m_iRed_total++;
}
}
}
}
}
}
}
cout << "红球组合总注数: " << m_iRed_total << endl;
}
void c_Ball::count_Red_Blue()
{
for (m_cBall[0] = 1;m_cBall[0] <= 28;m_cBall[0]++)
{
for (m_cBall[1] = 2;m_cBall[1] <= 29;m_cBall[1]++)
{
for (m_cBall[2] = 3;m_cBall[2] <= 30;m_cBall[2]++)
{
for (m_cBall[3] = 4;m_cBall[3] <= 31;m_cBall[3]++)
{
for (m_cBall[4] = 5;m_cBall[4] <= 32;m_cBall[4]++)
{
for (m_cBall[5] = 6;m_cBall[5] <= 33;m_cBall[5]++)
{
for (m_cBall[6] = 1;m_cBall[6] <= 16;m_cBall[6]++)
{
if (true == estimate_Ball(m_cBall))
{
for (int i = 0;i < RED_BALL;i++)
{
cout << m_cBall[i] << " ";
}
cout << endl;
m_iRed_Blue_total++;
}
}
}
}
}
}
}
}
cout << "红蓝球组合总注数: " << m_iRed_Blue_total << endl;
}
void c_Ball::add_Ball()
{
ofstream outFile; //创建文件
outFile.open("add_Num.txt", ios_base::app|ios_base::out); //打开文件,以只追加模式
if (!outFile.is_open())
{
cout << "Open file failure!" << endl;
exit(1);
}
rst:
for (int i = 0;i < RED_BALL - 1;i++)
{
cout << "请输入第" << i + 1 << "位红球号码(1-33):";
cin >> m_sUBall[i];
getchar();
if (m_sUBall[i][0] == '\0')
{
cout << "号码不可为空,请输入正确号码!" << endl;
goto rst;
}
//判断是否为不可超过两位数
if (m_sUBall[i][1] != '\0')
{
if (m_sUBall[i][2] != '\0')
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
}
//判断两位数时数为1-33之间
if (m_sUBall[i][1] != '\0')
{
if (!(m_sUBall[i][0] >= '1'&&m_sUBall[i][0] <= '3'))
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
if (m_sUBall[i][0] < '3')
{
if (!(m_sUBall[i][1] >= '0'&&m_sUBall[i][1] <= '9'))
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
}
else
{
if (!(m_sUBall[i][1] <= '3'))
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
}
}
else
{
if (!(m_sUBall[i][0] >= '1'&&m_sUBall[i][0] <= '9'))
{
cout << "输入有误!红球号码应为1-33之间包含1和33,请输入正确号码!" << endl;
goto rst;
}
}
if (i > 0)
{
if (compare_Ball(m_sUBall, i))
{
cout << "输入有误!左数不可大于或等于右数!请重新输入正确号码!" << endl;
goto rst;
}
}
}
cout << endl;
rst1:
cout << "请输入蓝球号码(1-16): ";
cin >> m_sUBall[RED_BALL - 1];
if (m_sUBall[RED_BALL - 1][0] == '\0')
{
cout << "号码不可为空,请输入正确号码!" << endl;
goto rst1;
}
//判断是否为不可超过两位数
if (m_sUBall[RED_BALL - 1][1] != '\0')
{
if (m_sUBall[RED_BALL - 1][2] != '\0')
{
cout << "输入有误!蓝球号码应为1-16之间包含1和16,请输入正确号码!" << endl;
goto rst1;
}
}
//判断两位数时数为1-33之间
if (m_sUBall[RED_BALL - 1][1] != '\0')
{
if (!(m_sUBall[RED_BALL - 1][0] == '1'))
{
cout << "输入有误!蓝球号码应为1-16之间包含1和16,请输入正确号码!" << endl;
goto rst1;
}
if (!(m_sUBall[RED_BALL - 1][1] <= '6'))
{
cout << "输入有误!蓝球号码应为1-16之间包含1和16,请输入正确号码!" << endl;
goto rst1;
}
}
else
{
if (!(m_sUBall[RED_BALL - 1][0] >= '1'&&m_sUBall[RED_BALL - 1][0] <= '9'))
{
cout << "输入有误!蓝球号码应为1-16之间包含1和16,请输入正确号码!" << endl;
goto rst1;
}
}
red_File(m_sUBall);
cout << "您输入的号码为: ";
for (int i = 0;i < RED_BALL;i++)
{
cout << m_sUBall[i] << " ";
}
cout << endl;
cout << "是否保存?(Y/N)";
char m_cKey_add;
rst2:
m_cKey_add = _getch();
if (m_cKey_add == 'y' || m_cKey_add == 'Y')
{
for (int j = 0; j < RED_BALL; j++)
{
outFile << m_sUBall[j] << " ";
}
}
else if (m_cKey_add == 'n' || m_cKey_add == 'N')
{
cout << endl;
this->show_Ball();
}
else
{
cout << endl << "输入有误,请输入Y或N!" << endl;
goto rst2;
}
outFile << endl;
outFile.close();
}
//Star.cpp文件
#include <iostream>
#include <stdlib.h>
#include "c_Ball.h"
using namespace std;
int main(void)
{
c_Ball ball;
ball.main_Display();
system("pause");
return 0;
}