因为偶是个彩迷,为了方便自己玩彩票,就写了个工具,可以查询历史中奖记录,添加最新中奖号码,产生随机号码以及和历史记录对比等功能,下面介绍一下使用方法:
1、首先是运行截图:
程序运行后会提示用户选择功能进行操作,有add, compare, query, last, luck, clear, exit 7个命令,分别代表增加新号码,历史对比,历史查询,最近一期,随机产生号码,清空屏幕,退出程序,下面分别介绍几个功能的使用方法。
2、增加新号码
在命令提示栏输入 add 然后回车,接着输入最新一期的年份和号码,每个数字之间用空格隔开,如上图。
3、历史对比
在命令提示栏输入 compare 然后回车,接着输入要对比的号码,每个数字之间用空格隔开,如上图,结果效果图如下:
Prize1代表输入号码能在历史记录中 中1等奖的次数,Prize2,Prize3...依次类推。
4、历史查询
在命令提示栏输入 query 然后回车,接着输入年份和期数,回车即可看到结果。
5、查询最近一期的年份和期号:
在命令提示栏输入 last 然后回车,即可看到结果。
6、随机产生号码:
在命令提示栏输入 luck 然后回车,接着输入机选的份数,回车即可看到结果。
7、清空屏幕
在命令提示栏输入 clear 然后回车,屏幕内容就会被清空,如下图:
8、退出程序:
在命令提示栏输入 exit 然后回车,即可退出程序。
如果有哪位票友用俺的软件中了大奖,别忘了救济一下偶,,让我脱离苦逼的程序猿。
程序下载地址:点击下载
下面附上代码:
// TestCPData.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include <stdlib.h> #include <time.h> #include "resource.h" BOOL CheckDelete(); void SetTxtColor( int nFg ); void SortData( BYTE* byData, int nSize ); void DoLuck(); void DoAdd( BYTE* bySrc ); void DoQuery( BYTE* bySrc ); void DoCompare( BYTE* bySrc ); void DoLastestItem( BYTE* bySrc ); int GetTotal( BYTE* bySrc ); void GetLuckNumbers( int nTimes ); void GetFileData( BYTE* bySrc, int nSize ); void WriteFileData( BYTE* bySrc, int nSize ); void FindPrizeData( BYTE* bySrc, BYTE* byCmp, int nTotal ); int main(int argc, char* argv[]) { system( "cls" ); if ( CheckDelete()) { return 0; } system( "cls" ); BYTE byTmpBuffer[32000] = { 0 }; GetFileData( byTmpBuffer, 32000 ); while ( 1 ) { SetTxtColor( FOREGROUND_INTENSITY ); printf( "---------------------------------------------------------------------------\n" ); printf( "Command: 'add','compare','query','last','luck','clear' or 'exit': " ); SetTxtColor( FOREGROUND_GREEN ); char szCmd[256] = { 0 }; scanf( "%s", szCmd ); fflush( stdin ); if ( !strnicmp( "add", szCmd, 3 )) { DoAdd( byTmpBuffer ); break; } else if ( !strnicmp( "compare", szCmd, 7 )) { DoCompare( byTmpBuffer ); } else if ( !strnicmp( "clear", szCmd, 5 )) { system( "cls" ); } else if ( !strnicmp( "query", szCmd, 5 )) { DoQuery( byTmpBuffer ); } else if ( !strnicmp( "last", szCmd, 4 )) { DoLastestItem( byTmpBuffer ); } else if ( !strnicmp( "exit", szCmd, 4 )) { break; } else if ( !strnicmp( "luck", szCmd, 4 )) { DoLuck(); } else { SetTxtColor( FOREGROUND_RED ); printf( "Invalid command!\n" ); } } return 0; } int GetTotal( BYTE* bySrc ) { int nTotal = 0; if ( bySrc ) { short* pData = ( short* )bySrc; for ( int i = 0; i < 20; ++i ) { if ( pData[i*2] ) { nTotal += pData[i*2+1]; } else { break; } } } return nTotal; } void DoAdd( BYTE* bySrc ) { SetTxtColor( FOREGROUND_INTENSITY ); printf( "Please input the year and data: " ); SetTxtColor( FOREGROUND_GREEN ); int nYear = 0; BYTE byData[12] = { 0 }; scanf( "%d%d%d%d%d%d%d%d", &nYear, byData, byData + 1, byData + 2, byData + 3, byData + 4, byData + 5, byData + 6 ); SortData( byData, 6 ); fflush( stdin ); if ( bySrc ) { int nTotal = GetTotal( bySrc ); FindPrizeData( bySrc, byData, nTotal ); short* pData = ( short* )bySrc; for ( int i = 0; i < 20; ++i ) { if ( nYear == pData[i*2] ) { ++pData[i*2+1]; break; } } memcpy( bySrc + 80 + nTotal * 7, byData, 7 ); WriteFileData( bySrc, 32000 ); } } void DoCompare( BYTE* bySrc ) { SetTxtColor( FOREGROUND_INTENSITY ); printf( "Please input the data: " ); BYTE byData[12] = { 0 }; SetTxtColor( FOREGROUND_GREEN ); scanf( "%d%d%d%d%d%d%d", byData, byData + 1, byData + 2, byData + 3, byData + 4, byData + 5, byData + 6 ); SortData( byData, 6 ); fflush( stdin ); FindPrizeData( bySrc, byData, GetTotal( bySrc )); } void DoLastestItem( BYTE* bySrc ) { if ( bySrc ) { short* pData = ( short* )bySrc; int i = 0; for ( i = 0; i < 20; ++i ) { if ( !pData[i*2] ) { break; } } SetTxtColor( FOREGROUND_INTENSITY ); if ( 0 < i && pData[(i-1)*2] ) { printf( "The lastest item is: " ); SetTxtColor( FOREGROUND_RED ); printf( "%d %d\n", pData[(i-1)*2], pData[(i-1)*2+1] ); } else { SetTxtColor( FOREGROUND_RED ); printf( "Invalid data!\n" ); } } } void DoQuery( BYTE* bySrc ) { SetTxtColor( FOREGROUND_INTENSITY ); printf( "Please input the year and number: " ); int nYear = 0; int nNumber = 0; SetTxtColor( FOREGROUND_GREEN ); scanf( "%d%d", &nYear, &nNumber ); fflush( stdin ); if ( bySrc ) { int nTotal = 0; short* pData = ( short* )bySrc; BOOL bFind = FALSE; for ( int i = 0; i < 20; ++i ) { if ( pData[i*2] == nYear ) { if ( nNumber <= pData[i*2+1] ) { nTotal += nNumber; bFind = TRUE; } break; } else if ( pData[i*2] ) { nTotal += pData[i*2+1]; } } int nSum = GetTotal( bySrc ); if ( bFind ) { BYTE* pbyData = bySrc + 80 + ( nTotal - 1 ) * 7; SetTxtColor( FOREGROUND_INTENSITY ); printf( "Query result is: " ); SetTxtColor( FOREGROUND_RED ); printf( "%d %d %d %d %d %d %d\n", pbyData[0], pbyData[1], pbyData[2], pbyData[3], pbyData[4], pbyData[5], pbyData[6] ); } else { SetTxtColor( FOREGROUND_RED ); printf( "The item does not exsit!\n" ); } } } void FindPrizeData( BYTE* bySrc, BYTE* byCmp, int nTotal ) { int nPrize[6] = { 0 }; BYTE* pbyDst = byCmp; int i = 0; for ( i = 0; i < nTotal; ++i ) { BYTE* pbySrc = bySrc + 80 + i * 7; int nSames = 0; for ( int l = 0; l < 7; ++l ) { if ( pbyDst[l] == pbySrc[l] ) { ++nSames; } } if ( 7 == nSames ) { ++nPrize[0]; } else if ( 6 == nSames ) { if ( pbyDst[6] == pbySrc[6] ) { ++nPrize[2]; } else { ++nPrize[1]; } } else if ( 5 == nSames ) { if ( pbyDst[6] == pbySrc[6] ) { ++nPrize[3]; } } else if ( 4 == nSames ) { if ( pbyDst[6] == pbySrc[6] ) { ++nPrize[4]; } } else { if ( pbyDst[6] == pbySrc[6]) { ++nPrize[5]; } } } for ( i = 0; i < 6; ++i ) { SetTxtColor( FOREGROUND_INTENSITY ); printf( "Prize%d repeat: ", i + 1 ); SetTxtColor( FOREGROUND_RED ); printf( "%d \n", nPrize[i] ); } } void SortData( BYTE* byData, int nSize ) { for ( int i = 0; i < nSize - 1; ++i ) { for ( int j = i + 1; j < nSize; ++j ) { if ( byData[i] > byData[j] ) { BYTE byTmp = byData[i]; byData[i] = byData[j]; byData[j] = byTmp; } } } } void SetTxtColor( int nFg ) { HANDLE hConsole = GetStdHandle( STD_OUTPUT_HANDLE ); SetConsoleTextAttribute( hConsole, nFg ); } void GetFileData( BYTE* bySrc, int nSize ) { HMODULE hModule = GetModuleHandle( NULL ); HRSRC hRes = FindResource( hModule, MAKEINTRESOURCE( IDR_DAT1 ), "DAT" ); if ( hRes ) { HGLOBAL hGlobal = LoadResource( hModule, hRes ); BYTE* pbyData = ( BYTE* )LockResource( hGlobal ); memcpy( bySrc, pbyData, nSize ); } } void WriteFileData( BYTE* bySrc, int nSize ) { char szFileName[256] = { 0 }; GetModuleFileName( NULL, szFileName, 256 ); char szTmpFile[256] = { 0 }; strcpy( szTmpFile, szFileName ); char* pszPath = strrchr( szTmpFile, '\\' ); char* pszNumb = strrchr( pszPath, '_' ); if ( pszNumb ) { strcpy( pszNumb, ".exe" ); } else { strcpy( strrchr( pszPath, '.' ), "_.exe" ); } CopyFile( szFileName, szTmpFile, TRUE ); BOOL bResult = DeleteFile( szFileName ); HANDLE hInstance = BeginUpdateResource( szTmpFile, FALSE ); UpdateResource( hInstance, "DAT", MAKEINTRESOURCE( IDR_DAT1 ), MAKELANGID( LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED ), bySrc, nSize ); EndUpdateResource( hInstance, FALSE ); WinExec( szTmpFile, SW_SHOW ); } BOOL CheckDelete() { char szFileName[256] = { 0 }; GetModuleFileName( NULL, szFileName, 256 ); char szTmpFile[256] = { 0 }; strcpy( szTmpFile, szFileName ); char* pszPath = strrchr( szFileName, '\\' ); char* pszSignal = strrchr( pszPath, '_' ); if ( pszSignal ) { Sleep( 1000 ); strcpy( pszSignal, ".exe" ); CopyFile( szTmpFile, szFileName, FALSE ); WinExec( szFileName, SW_SHOW ); return TRUE; } else { strcpy( strrchr( pszPath, '.' ), "_.exe" ); if ( INVALID_FILE_ATTRIBUTES != GetFileAttributes( szFileName )) { Sleep( 1000 ); DeleteFile( szFileName ); } } return FALSE; } void DoLuck() { SetTxtColor( FOREGROUND_INTENSITY ); printf( "Please input the times you want: " ); SetTxtColor( FOREGROUND_GREEN ); int nTimes = 0; scanf( "%d", &nTimes ); fflush( stdin ); SetTxtColor( FOREGROUND_RED ); if ( 0 < nTimes && 10 > nTimes ) { GetLuckNumbers( nTimes ); } else { printf( "Invalid times, it should be (1-10)\n" ); } } void GetLuckNumbers( int nTimes ) { int iArrR[33] = { 0 }; int iArrB[16] = { 0 }; int iArrD[ 7] = { 0 }; int iSum = nTimes; int i = 0, j = 0, k = 0, l = 0, ll = 0; srand( time( NULL )); for ( ll = 0; ll < iSum; ++ll ) { memset( iArrR, 0, 132 ); memset( iArrB, 0, 64 ); for ( i = 0; i < 36; ++i ) { memset( iArrD, 0, 28 ); iArrD[0] = rand() % 33; ++iArrR[iArrD[0]]; for ( j = 1; j < 6; ++j ) { iArrD[j] = rand() % 33; for ( l = 0; l < j; ++l ) { if ( iArrD[j] == iArrD[l] ) { Sleep( 10 ); iArrD[j] = rand() % 33; l = -1; continue; } } ++iArrR[iArrD[j]]; } Sleep( 10 ); iArrD[6] = rand() % 16; ++iArrB[iArrD[6]]; } int nGoodNumber[6] = { 0 }; for ( k = 0; k < 6; ++k ) { int nSel = 0; for ( i = 1; i < 33; ++i ) { if ( iArrR[i] > iArrR[nSel] ) { nSel = i; } } nGoodNumber[k] = nSel + 1; iArrR[nSel] = 0; } int nSel = 0; for ( i = 1; i < 16; ++i ) { if ( iArrB[i] > iArrB[nSel] ) { nSel = i; } } SetTxtColor( FOREGROUND_INTENSITY ); printf( "The luck numbers is: " ); SetTxtColor( FOREGROUND_RED ); for ( i = 0; i < 6; ++i ) { printf( "%02d ", nGoodNumber[i] ); } printf( "%02d\n", nSel + 1 ); Sleep( 20 ); } }