// SuperenalottoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Superenalotto.h"
#include "SuperenalottoDlg.h"
#include <iostream.h>
#include <fstream.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSuperenalottoDlg dialog
CSuperenalottoDlg::CSuperenalottoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSuperenalottoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSuperenalottoDlg)
m_bChk0 = FALSE;
m_bChk1 = FALSE;
m_bChk2 = FALSE;
m_bChk3 = FALSE;
m_bChk4 = FALSE;
m_bChk5 = FALSE;
m_bChk6 = FALSE;
i_CountScArchivio=0;
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSuperenalottoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSuperenalottoDlg)
DDX_Control(pDX, IDC_PSBAR, m_cPsbar);
DDX_Check(pDX, IDC_CHK0, m_bChk0);
DDX_Check(pDX, IDC_CHK1, m_bChk1);
DDX_Check(pDX, IDC_CHK2, m_bChk2);
DDX_Check(pDX, IDC_CHK3, m_bChk3);
DDX_Check(pDX, IDC_CHK4, m_bChk4);
DDX_Check(pDX, IDC_CHK5, m_bChk5);
DDX_Check(pDX, IDC_CHK6, m_bChk6);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSuperenalottoDlg, CDialog)
//{{AFX_MSG_MAP(CSuperenalottoDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(IDM_FILE_EXIT, OnFileExit)
ON_BN_CLICKED(IDC_BIARCHIVIO, OnBiarchivio)
ON_BN_CLICKED(IDC_BISISTEMA, OnBiSistema)
ON_BN_CLICKED(IDC_BLSISTEMA, OnBlSistema)
ON_BN_CLICKED(IDC_BLARCHIVIO, OnBlarchivio)
ON_BN_CLICKED(IDC_CHK3, OnChk3)
ON_BN_CLICKED(IDC_CHK0, OnChk0)
ON_BN_CLICKED(IDC_CHK1, OnChk1)
ON_BN_CLICKED(IDC_CHK2, OnChk2)
ON_BN_CLICKED(IDC_CHK4, OnChk4)
ON_BN_CLICKED(IDC_CHK5, OnChk5)
ON_BN_CLICKED(IDC_CHK6, OnChk6)
ON_BN_CLICKED(IDC_BSEXPORT, OnBsexport)
ON_EN_UPDATE(IDC_EE0, OnUpdateEe0)
ON_EN_UPDATE(IDC_EE1, OnUpdateEe1)
ON_EN_UPDATE(IDC_EE2, OnUpdateEe2)
ON_EN_UPDATE(IDC_EE3, OnUpdateEe3)
ON_EN_UPDATE(IDC_EE4, OnUpdateEe4)
ON_EN_UPDATE(IDC_EE5, OnUpdateEe5)
ON_EN_UPDATE(IDC_EE6, OnUpdateEe6)
ON_BN_CLICKED(IDC_BESEGUI, OnBesegui)
ON_COMMAND(IDM_INFO_ABOUT, OnInfoAbout)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSuperenalottoDlg message handlers
BOOL CSuperenalottoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
UpdateData(FALSE);
i_CountScExport = 0;
i_CountScSistema = 0;
s_ArchivioFileName="Enalotto.txt";
s_SistemaFileName="Sviluppo.txt";
s_ArchivioPath=GetProgramDir() + "\\" + s_ArchivioFileName;
s_SistemaPath=GetProgramDir() + "\\" + s_SistemaFileName;
if (File_Exists(s_ArchivioPath)){
SetDlgItemText(IDC_BIARCHIVIO,"File: " + s_ArchivioFileName);
b_ArchivioFileSelected = TRUE;
}
if (File_Exists(s_SistemaPath)){
SetDlgItemText(IDC_BISISTEMA,"File: " + s_SistemaFileName);
b_SistemaFileSelected=TRUE;
}
//i_ArchivioLines = GetFileLines(s_ArchivioPath);
//i_SistemaLines = GetFileLines(s_SistemaPath);
return TRUE; // return TRUE unless you set the focus to a control
}
void CSuperenalottoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CSuperenalottoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CSuperenalottoDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CSuperenalottoDlg::OnFileExit()
{
OnOK();
}
void CSuperenalottoDlg::GetArchivio()
{
char c_Date[9]="";
int i_Number=0;
int i_CountNumber=0;
bool b_is_zero = FALSE;
ifstream in(s_ArchivioPath, ios::in);
do{
//La data
in >> c_Date;
//ID della sestina (non serve)
in >> i_Number;
//Numeri
while(i_CountNumber<6){
in >> i_Number;
sc_Archivio[i_CountScArchivio].SetNumber(i_CountNumber++,i_Number);
if (!i_Number) b_is_zero = TRUE;
}
//Numeri Jolly che non va contato...
in >> i_Number;
if (b_is_zero) i_CountScArchivio--;
i_CountNumber=0;
i_CountScArchivio++;
b_is_zero = FALSE;
//Visualizza lo stato sulla progress bar...
SetProgressBar((100*i_CountScArchivio)/i_ArchivioLines);
}while(!in.eof());
in.close();
//Toglie l'ultimo record...
i_CountScArchivio--;
SetProgressBar(0);
}
CString CSuperenalottoDlg::GetProgramDir()
{
/* Funzione presa su Internet per determinare la dir corrente */
CString RtnVal;
char FileName[MAX_PATH];
GetModuleFileName(AfxGetInstanceHandle(), FileName, MAX_PATH);
RtnVal = FileName;
RtnVal = RtnVal.Left(RtnVal.ReverseFind('\\'));
return RtnVal;
}
void CSuperenalottoDlg::GetSistema()
{
int i_Number=0;
int i_Count;
int i_Value;
Sestina *sc_Sestina = new Sestina();
ifstream in(s_SistemaPath, ios::in);
InitMaxSistemaNumbers();
do{
sc_Sestina->SetMaxValue(0);
//Prende i numeri e li assegna ad un oggetto Sestina
for (i_Count=0; i_Count<6; i_Count++){
in >> i_Number;
sc_Sestina->SetNumber(i_Count,i_Number);
}
//Confronta la sestina con tutte quelle dell'archivio...
for (i_Count=0; i_Count<i_CountScArchivio; i_Count++){
i_Value = ConfrontaSestine(sc_Sestina,&sc_Archivio[i_Count]);
if (i_Value > sc_Sestina->GetMaxValue()) sc_Sestina->SetMaxValue(i_Value);
}
//Incrementa il contatore...
i_MaxSistemaNumbers[sc_Sestina->GetMaxValue()]++;
i_CountScSistema++;
SetProgressBar((100*i_CountScSistema)/i_SistemaLines);
}while(!in.eof());
//Decrementa se a EOF c'è una riga vuota (che viene considerata come sestina)
i_CountScSistema--;
i_MaxSistemaNumbers[sc_Sestina->GetMaxValue()]--;
in.close();
}
bool CSuperenalottoDlg::File_Exists(CString s_Path)
{
ifstream in(s_Path,ios::nocreate);
if (!in){
in.close();
return FALSE;
}else{
in.close();
return TRUE;
}
}
void CSuperenalottoDlg::OnBiarchivio()
{
// TODO: Add your control notification handler code here
CFileDialog m_ldFile(TRUE);
if (m_ldFile.DoModal()==IDOK){
s_ArchivioFileName = m_ldFile.GetFileName();
s_ArchivioPath = m_ldFile.GetPathName();
if (File_Exists(s_ArchivioPath)){
b_ArchivioFileSelected = TRUE;
SetDlgItemText(IDC_BIARCHIVIO,"File: " + s_ArchivioFileName);
}else{
b_ArchivioFileSelected = FALSE;
SetDlgItemText(IDC_BIARCHIVIO,"File: Non trovato");
}
}
}
int CSuperenalottoDlg::ConfrontaSestine(Sestina *sc1, Sestina *sc2)
{
int i_Count1;
int i_Count2;
int i_Points=0;
//Giri mentali assurdi per colpa dei puntatori di C++...
if (!sc1->GetMaxValueInitStatus()){
sc1->SetMaxValue(0);
sc1->SetMaxValueInitStatus(TRUE);
}
for (i_Count1=0; i_Count1<6; i_Count1++){
for (i_Count2=0; i_Count2<6; i_Count2++){
if (sc1->GetNumber(i_Count1)==sc2->GetNumber(i_Count2)) i_Points++;
}
}
return i_Points;
}
//Funzione con overloading per il numero jolly...
int CSuperenalottoDlg::ConfrontaSestine(Sestina *sc1, Sestina *sc2, int i_Jolly)
{
int i_Count1;
int i_Count2;
int i_Points=0;
bool b_Jolly_is_here = FALSE;
//Giri mentali assurdi per colpa dei puntatori di C++...
if (!sc1->GetMaxValueInitStatus()){
sc1->SetMaxValue(0);
sc1->SetMaxValueInitStatus(TRUE);
}
//Confronta i numeri normali...
for (i_Count1=0; i_Count1<6; i_Count1++){
for (i_Count2=0; i_Count2<6; i_Count2++){
if (sc1->GetNumber(i_Count1)==sc2->GetNumber(i_Count2)) i_Points++;
}
}
//... e il Jolly...
for (i_Count1=0; i_Count1<6; i_Count1++){
if (sc1->GetNumber(i_Count1) == i_Jolly){
b_Jolly_is_here = TRUE;
}
}
// 7 = 5+1, 6 = 6, 5 = 5....
if (b_Jolly_is_here && i_Points == 5) return 7;
return i_Points;
}
void CSuperenalottoDlg::ConfrontaArchivio()
{
int i_Count1;
int i_Count2;
int i_Value=0;
for (i_Count1 = 0; i_Count1 < i_CountScArchivio; i_Count1++){
for (i_Count2 = (i_Count1+1); i_Count2 < i_CountScArchivio; i_Count2++){
i_Value = ConfrontaSestine(&sc_Archivio[i_Count1],&sc_Archivio[i_Count2]);
if (i_Value > sc_Archivio[i_Count1].GetMaxValue()) sc_Archivio[i_Count1].SetMaxValue(i_Value);
}
SetProgressBar((100*(i_Count1+1))/i_CountScArchivio);
}
}
void CSuperenalottoDlg::ViewArchivio()
{
int i_Count=0;
CString s_Result;
InitMaxArchivioNumbers();
for (i_Count=0; i_Count<i_CountScArchivio; i_Count++)
i_MaxArchivioNumbers[sc_Archivio[i_Count].GetMaxValue()]++;
i_Count=0;
s_Result.Format("%d hanno ottenuto %d",i_MaxArchivioNumbers[i_Count],i_Count);
SetDlgItemText(IDC_SA0,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxArchivioNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SA1,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxArchivioNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SA2,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxArchivioNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SA3,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxArchivioNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SA4,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxArchivioNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SA5,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxArchivioNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SA6,s_Result);
s_Result.Format("Totale: %d",i_CountScArchivio);
SetDlgItemText(IDC_SACOUNT,s_Result);
SetProgressBar(0);
}
void CSuperenalottoDlg::ViewSistema()
{
int i_Count=0;
CString s_Result;
s_Result.Format("%d hanno ottenuto %d",i_MaxSistemaNumbers[i_Count],i_Count);
SetDlgItemText(IDC_SS0,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxSistemaNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SS1,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxSistemaNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SS2,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxSistemaNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SS3,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxSistemaNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SS4,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxSistemaNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SS5,s_Result);
s_Result.Format("%d hanno ottenuto %d",i_MaxSistemaNumbers[++i_Count],i_Count);
SetDlgItemText(IDC_SS6,s_Result);
s_Result.Format("Totale: %d",i_CountScSistema);
SetDlgItemText(IDC_SSCOUNT,s_Result);
ViewExportCount();
SetProgressBar(0);
}
void CSuperenalottoDlg::OnBiSistema()
{
// TODO: Add your control notification handler code here
CFileDialog m_ldFile(TRUE);
if (m_ldFile.DoModal()==IDOK){
s_SistemaFileName = m_ldFile.GetFileName();
s_SistemaPath = m_ldFile.GetPathName();
if (File_Exists(s_SistemaPath)){
b_SistemaFileSelected = TRUE;
SetDlgItemText(IDC_BISISTEMA,"File: " + s_SistemaFileName);
}else{
b_SistemaFileSelected = FALSE;
SetDlgItemText(IDC_BISISTEMA,"File: Non trovato");
}
}
}
void CSuperenalottoDlg::OnBlSistema()
{
// TODO: Add your control notification handler code here
if (b_ArchivioIsLoaded){
if (b_SistemaFileSelected){
i_CountScSistema = 0;
i_SistemaLines=GetFileLines(s_SistemaPath);
UnCheckAll();
InitMaxSistemaNumbers();
AfxBeginThread(CreateSistemaThread,this);
b_SistemaIsLoaded = TRUE;
}else{
ShowStatus("Non riesco a caricare il sistema, assicurati di aver selezionato un file valido.");
}
}else{
ShowStatus("Non riesco a caricare il sistema, assicurati di aver caricato l'archivio storico.");
}
}
void CSuperenalottoDlg::OnBlarchivio()
{
// TODO: Add your control notification handler code here
if (b_ArchivioFileSelected){
i_CountScArchivio = 0;
InitMaxArchivioNumbers();
UnCheckAll();
b_SistemaIsLoaded = FALSE;
i_ArchivioLines=GetFileLines(s_ArchivioPath);
AfxBeginThread(CreateArchivioThread,this);
b_ArchivioIsLoaded = TRUE;
}else{
ShowStatus("Non riesco a caricare l'archivio, assicurati di aver selezionato un file valido.");
}
}
void CSuperenalottoDlg::ShowStatus(CString s_Status)
{
SetDlgItemText(IDC_STATUS,"Status: " + s_Status);
}
void CSuperenalottoDlg::ViewExportCount()
{
CString s_Result;
s_Result.Format("Eliminate: %d",(i_CountScSistema-i_CountScExport));
SetDlgItemText(IDC_SEDELETED,s_Result);
s_Result.Format("Totale: %d",i_CountScExport);
SetDlgItemText(IDC_SECOUNT,s_Result);
}
void CSuperenalottoDlg::AddExportCount(int i_Number)
{
i_CountScExport += i_MaxSistemaNumbers[i_Number];
b_is_checked[i_Number]=TRUE;
ViewExportCount();
}
void CSuperenalottoDlg::SubExportCount(int i_Number)
{
i_CountScExport -= i_MaxSistemaNumbers[i_Number];
b_is_checked[i_Number]=FALSE;
ViewExportCount();
}
void CSuperenalottoDlg::OnChk0()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (!b_SistemaIsLoaded){
m_bChk0 = FALSE;
UpdateData(FALSE);
}
if (m_bChk0){
AddExportCount(0);
}else{
SubExportCount(0);
}
}
void CSuperenalottoDlg::OnChk1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (!b_SistemaIsLoaded){
m_bChk1 = FALSE;
UpdateData(FALSE);
}
if (m_bChk1){
AddExportCount(1);
}else{
SubExportCount(1);
}
}
void CSuperenalottoDlg::OnChk2()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (!b_SistemaIsLoaded){
m_bChk2 = FALSE;
UpdateData(FALSE);
}
if (m_bChk2){
AddExportCount(2);
}else{
SubExportCount(2);
}
}
void CSuperenalottoDlg::OnChk3()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (!b_SistemaIsLoaded){
m_bChk3 = FALSE;
UpdateData(FALSE);
}
if (m_bChk3){
AddExportCount(3);
}else{
SubExportCount(3);
}
}
void CSuperenalottoDlg::OnChk4()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (!b_SistemaIsLoaded){
m_bChk4 = FALSE;
UpdateData(FALSE);
}
if (m_bChk4){
AddExportCount(4);
}else{
SubExportCount(4);
}
}
void CSuperenalottoDlg::OnChk5()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (!b_SistemaIsLoaded){
m_bChk5 = FALSE;
UpdateData(FALSE);
}
if (m_bChk5){
AddExportCount(5);
}else{
SubExportCount(5);
}
}
void CSuperenalottoDlg::OnChk6()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (!b_SistemaIsLoaded){
m_bChk6 = FALSE;
UpdateData(FALSE);
}
if (m_bChk6){
AddExportCount(6);
}else{
SubExportCount(6);
}
}
bool CSuperenalottoDlg::SetExportPath()
{
CFileDialog m_svFile(FALSE);
if (m_svFile.DoModal()==IDOK){
s_ExportFileName = m_svFile.GetFileName();
s_ExportPath = m_svFile.GetPathName();
return TRUE;
}else{
return FALSE;
}
}
void CSuperenalottoDlg::OnBsexport()
{
// TODO: Add your control notification handler code here
if (b_ArchivioIsLoaded && b_SistemaIsLoaded){
if (i_CountScExport){
if(SetExportPath()){
AfxBeginThread(CreateExportThread,this);
SetProgressBar(0);
}
}else{
ShowStatus("Che cosa salvo se non hai selezionato niente?");
}
}else{
ShowStatus("Non posso salvare i dati se prima non li ho caricati.");
}
}
void CSuperenalottoDlg::WriteExport()
{
int i_Count;
int i_CountExport=0;
int i_Number;
int i_Value;
Sestina *sc_Sestina = new Sestina();
ifstream in(s_SistemaPath, ios::in);
ofstream out(s_ExportPath,ios::trunc);
do{
//Prende i numeri e li assegna ad un oggetto Sestina
for (i_Count=0; i_Count<6; i_Count++){
in >> i_Number;
sc_Sestina->SetNumber(i_Count,i_Number);
}
//Confronta la sestina con tutte quelle dell'archivio...
for (i_Count=0; i_Count<i_CountScArchivio; i_Count++){
i_Value = ConfrontaSestine(sc_Sestina,&sc_Archivio[i_Count]);
if (i_Value > sc_Sestina->GetMaxValue()) sc_Sestina->SetMaxValue(i_Value);
}
//Scrive le sestine se hanno il segno di spunta e sono una sestina valida...
if (b_is_checked[sc_Sestina->GetMaxValue()]){ //&& i_Number
for (i_Count=0; i_Count<6; i_Count++){
out << sc_Sestina->GetNumber(i_Count);
if (i_Count<5) out << " ";
}
out << endl;
}
i_Number=0;
sc_Sestina->SetMaxValue(0);
SetProgressBar((100*(++i_CountExport))/i_CountScExport);
}while(!in.eof());
in.close();
out.close();
SetProgressBar(0);
}
int CSuperenalottoDlg::GetFileLines(CString s_Path)
{
int i_nLines=0;
char buffer[40];
ifstream in(s_Path, ios::in);
while (in.getline(buffer,40)) i_nLines++;
in.close();
return i_nLines;
}
void CSuperenalottoDlg::SetProgressBar(int i_Value)
{
m_cPsbar.SendMessage(PBM_SETPOS,i_Value,0);
}
void CSuperenalottoDlg::InitMaxArchivioNumbers()
{
int i_Count;
for (i_Count=0; i_Count<7; i_Count++)
i_MaxArchivioNumbers[i_Count]=0;
}
void CSuperenalottoDlg::InitMaxSistemaNumbers()
{
int i_Count;
for (i_Count=0; i_Count<7; i_Count++)
i_MaxSistemaNumbers[i_Count]=0;
}
void CSuperenalottoDlg::ControllaNumero(int CURCONTROL, int NEXTCONTROL, int i_Number)
{
int i_Value;
CWnd *CWControl;
CWControl = GetDlgItem(NEXTCONTROL);
i_Value=GetDlgItemInt(CURCONTROL);
if (i_Value>90 || i_Value == NULL){
SetDlgItemInt(CURCONTROL,1);
i_EstrazioneNumbers[i_Number]=0;
}else{
if (i_Value>=10) CWControl->SetFocus();
i_EstrazioneNumbers[i_Number]=i_Value;
}
}
void CSuperenalottoDlg::OnUpdateEe0()
{
ControllaNumero(IDC_EE0,IDC_EE1,0);
}
void CSuperenalottoDlg::OnUpdateEe1()
{
ControllaNumero(IDC_EE1,IDC_EE2,1);
}
void CSuperenalottoDlg::OnUpdateEe2()
{
ControllaNumero(IDC_EE2,IDC_EE3,2);
}
void CSuperenalottoDlg::OnUpdateEe3()
{
ControllaNumero(IDC_EE3,IDC_EE4,3);
}
void CSuperenalottoDlg::OnUpdateEe4()
{
ControllaNumero(IDC_EE4,IDC_EE5,4);
}
void CSuperenalottoDlg::OnUpdateEe5()
{
ControllaNumero(IDC_EE5,IDC_EE6,5);
}
void CSuperenalottoDlg::OnUpdateEe6()
{
ControllaNumero(IDC_EE6,IDC_BESEGUI,6);
}
void CSuperenalottoDlg::OnBesegui()
{
// TODO: Add your control notification handler code here
int i_Count;
bool b_ArgsAreOK = TRUE;
for(i_Count=0; i_Count<7; i_Count++){
i_MaxEstrazioneNumbers[i_Count]=0; //Cancella i precendeti risultati
if (!i_EstrazioneNumbers[i_Count]) b_ArgsAreOK = FALSE;
}
i_MaxEstrazioneNumbers[7]=0; //cancella il precendete risultato (per non fare un altro for)..
if (b_SistemaFileSelected){
if (b_ArgsAreOK){
i_SistemaLines=GetFileLines(s_SistemaPath);
AfxBeginThread(CreateEstrazioneThread,this);
}else{
ShowStatus("Non riesco ad elaborare la richiesta, assicurati di aver inserito tutti i numeri.");
}
}else{
ShowStatus("Non riesco ad elaborare la richiesta, assicurati di aver selezionato un sistema valido.");
}
}
void CSuperenalottoDlg::ConfrontaEstrazione()
{
int i_Count;
int i_Number;
int i_CountScEstrazione = 0;
int i_Jolly = i_EstrazioneNumbers[6];
Sestina *sc_SisSestina = new Sestina();
Sestina *sc_EstSestina = new Sestina();
ifstream in(s_SistemaPath, ios::in);
//Assegna ad un oggetto sestina i valori immessi dall'utente...
for (i_Count=0; i_Count<6; i_Count++){
sc_EstSestina->SetNumber(i_Count,i_EstrazioneNumbers[i_Count]);
}
do{
//Prende i numeri dal file sistema e li assegna ad un oggetto Sestina
for (i_Count=0; i_Count<6; i_Count++){
in >> i_Number;
sc_SisSestina->SetNumber(i_Count,i_Number);
}
i_MaxEstrazioneNumbers[ConfrontaSestine(sc_SisSestina,sc_EstSestina,i_Jolly)]++;
SetProgressBar((100*(++i_CountScEstrazione))/i_SistemaLines);
}while(!in.eof());
//Decrementa se a EOF c'è una riga vuota (che viene considerata come sestina)
i_CountScEstrazione--;
i_MaxEstrazioneNumbers[ConfrontaSestine(sc_SisSestina,sc_EstSestina,i_Jolly)]--;
SetProgressBar(0);
in.close();
}
static UINT CreateArchivioThread(LPVOID pParam)
{
CSuperenalottoDlg *pClass = (CSuperenalottoDlg*)pParam;
pClass->ShowStatus("Sto caricando in memoria l'archivio storico...");
pClass->GetArchivio();
pClass->ShowStatus("Sto elaborando l'archivio storico...");
pClass->ConfrontaArchivio();
pClass->ShowStatus("Mi preparo a visualizzare i dati dell'archivio...");
pClass->ViewArchivio();
pClass->ShowStatus("Pronto");
return 0;
}
static UINT CreateSistemaThread(LPVOID pParam)
{
CSuperenalottoDlg *pClass = (CSuperenalottoDlg*)pParam;
pClass->ShowStatus("Sto caricando ed elaborando il sistema...");
pClass->GetSistema();
pClass->ShowStatus("Mi preparo a visualizzare i dati del sistema...");
pClass->ViewSistema();
pClass->ShowStatus("Pronto");
return 0;
}
static UINT CreateExportThread(LPVOID pParam)
{
CSuperenalottoDlg *pClass = (CSuperenalottoDlg*)pParam;
pClass->ShowStatus("Sto caricando, elaborando e scrivendo il sistema ridotto...");
pClass->WriteExport();
pClass->ShowStatus("Ho salvato il sistema ridotto in " + pClass->s_ExportPath);
return 0;
}
static UINT CreateEstrazioneThread(LPVOID pParam)
{
CSuperenalottoDlg *pClass = (CSuperenalottoDlg*)pParam;
pClass->ShowStatus("Sto caricando e confrontando il sistema...");
pClass->ConfrontaEstrazione();
pClass->ShowStatus("Visualizzo i risultati...");
pClass->ViewEstrazione();
pClass->ShowStatus("Pronto");
return 0;
}
void CSuperenalottoDlg::ViewEstrazione()
{
int i_Count=0;
CString s_Message;
s_Message.Format("Risultati dell'estrazione con il sistema:\n\n%d hanno ottenuto %d\n%d hanno ottenuto %d\n%d hanno ottenuto %d\n%d hanno ottenuto %d\n%d hanno ottenuto %d\n%d hanno ottenuto %d\n%d hanno ottenuto %s\n%d hanno ottenuto %d",
i_MaxEstrazioneNumbers[0],0,
i_MaxEstrazioneNumbers[1],1,
i_MaxEstrazioneNumbers[2],2,
i_MaxEstrazioneNumbers[3],3,
i_MaxEstrazioneNumbers[4],4,
i_MaxEstrazioneNumbers[5],5,
i_MaxEstrazioneNumbers[7],"5+1",
i_MaxEstrazioneNumbers[6],6);
MessageBox(s_Message,"Risultati",MB_OK);
}
void CSuperenalottoDlg::OnInfoAbout()
{
// TODO: Add your command handler code here
CAboutDlg *ca_AboutWin = new CAboutDlg();
ca_AboutWin->DoModal();
}
void CSuperenalottoDlg::UnCheckAll()
{
m_bChk0 = FALSE;
m_bChk1 = FALSE;
m_bChk2 = FALSE;
m_bChk3 = FALSE;
m_bChk4 = FALSE;
m_bChk5 = FALSE;
m_bChk6 = FALSE;
UpdateData(FALSE);
i_CountScExport = 0;
ViewExportCount();
}