⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 五分钟涨幅排行及其股票分析软件
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include <afxdlgs.h>
#include "stdafx.h"
#include "Messenger.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_SETFOCUS()
	ON_COMMAND(IDM_FILE_PARSER, OnFileParser)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	UINT i;

	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	//////////////////////////////////////////////////////////////////////////
	for(i = 0;i < 20;i++)
	{
		m_StockInfo[i].Format(_T("%s"),"");
	}
	//创建Tab
	if (!m_wndImageTab.Create(NULL, NULL, WS_CHILD|WS_VISIBLE,
		CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))	
	{
		TRACE0("Failed to create view window\n");
		return -1;
	}

	m_wndImageTab.SetBkImage(IDB_BITMAP_BACK);
	m_wndImageTab.SetLeftImage(IDB_BITMAP_LEFTMARGIN);
	m_wndImageTab.SetRightImage(IDB_BITMAP_RIGHTMARGIN);
	m_wndImageTab.SetTopImage(IDB_BITMAP_TOPMARGIN);
	m_wndImageTab.SetBottomImage(IDB_BITMAP_BOTTOMMARGIN);

	m_wndImageTab.SetTabCount(2);

	int nIndex = 0;
	m_wndImageTab.SetTabImage(nIndex, IDB_BITMAP_TAB1);
	m_wndImageTab.SetTabRect(nIndex, CRect(0, 0, 32, 42));
	m_wndImageTab.SetToolTip(nIndex, "Page A");
	m_wndDlgA.Create(IDD_DIALOG_PAGE1, &m_wndImageTab);
	m_wndImageTab.SetTabWnd(nIndex, &m_wndDlgA);
	nIndex++;

	m_wndImageTab.SetTabImage(nIndex, IDB_BITMAP_TAB2);
	m_wndImageTab.SetTabRect(nIndex, CRect(0, 52, 32, 94));
	m_wndImageTab.SetToolTip(nIndex, "Page B");
	m_wndDlgB.Create(IDD_DIALOG_PAGE2, &m_wndImageTab);
	m_wndImageTab.SetTabWnd(nIndex, &m_wndDlgB);

	CenterWindow();
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.x = 0;
	cs.y = 0;
	cs.cx = 300;
	cs.cy = 600;
	cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
	cs.lpszClass = AfxRegisterWndClass(0);
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
	// forward focus to the view window
	m_wndImageTab.SetFocus();
}

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
	// let the view have first crack at the command
	if (m_wndImageTab.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
		return TRUE;

	// otherwise, do default handling
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

typedef struct file_item_node
{
	UINT stock_id;
	UINT strbuffer_idx;
}FILE_ITEM_NODE;

#if 0 
int Get_Buffer_Len(char *p_str)
{
	int i;

	i = 0;
	while(p_str[i] == '\0')
	{
		i++;
	}

	return i;
}
#endif

void CMainFrame::OnFileParser() 
{
	char fp_ch;
	char** p_item;
	char* str_malloc;
	UINT i,j,items_cnt,item_node,dot_cnt;
	FILE_ITEM_NODE *p_node;
	FILE *fp_stock;
	CString szGetName;
	CFileDialog* lpszOpenFile;

	lpszOpenFile = new CFileDialog(TRUE,"","",OFN_FILEMUSTEXIST |OFN_HIDEREADONLY,"File Type(*.stp) | *.stp");
	if(lpszOpenFile->DoModal() == IDOK)
	{
		szGetName = lpszOpenFile->GetPathName();
		SetWindowText(szGetName);
	}
	delete lpszOpenFile;

	fp_stock = fopen(szGetName,"rt");/*Read-only as text mode*/
	if(fp_stock == NULL)
		ASSERT(0);

	items_cnt = 0;
	fseek(fp_stock,0,SEEK_SET);
	do
	{
		if(fread(&fp_ch,sizeof(char),1,fp_stock) == 0)
			break;

		if(fp_ch == 's')
		{
			fread(&fp_ch,sizeof(char),1,fp_stock);
			if((fp_ch == 'h') || (fp_ch == 'z'))
				items_cnt++;/*stock items head information got*/
		}
	}
	while(fp_ch != EOF);/*the First step get record items count*/

	/*malloc memory to load file information,the Second step*/
	//str_malloc = new char(items_cnt * STOCK_STR_LENGTH);/*Load all detail*/
	str_malloc = new char[items_cnt * 32];/*Load only part information*/
	memset(str_malloc,'\0',items_cnt * 32);
	p_item = new char *[items_cnt];
	memset(p_item,NULL,sizeof(char *)*items_cnt);
	p_node = new FILE_ITEM_NODE[items_cnt];
	memset(p_node,0,sizeof(FILE_ITEM_NODE)*items_cnt);
	for(i = 0;i < items_cnt;i++)
	{/*Assign memory address*/
		p_item[i] = str_malloc + 32*i;
	}/*Malloc & init*/

	/*load files*/
	item_node = 0;
	fseek(fp_stock,0,SEEK_SET);
	for(item_node = 0;item_node < items_cnt;/*do nothing*/)
	{
		fread(&fp_ch,sizeof(char),1,fp_stock);
		if(fp_ch == 's')
		{
			fread(&fp_ch,sizeof(char),1,fp_stock);
			if((fp_ch == 'h') || (fp_ch == 'z'))
			{
				char str_ids[7];
				UINT ch_cnt;
				
				ch_cnt = 0;
				dot_cnt = 0;
				_strset(str_ids,'\0');
				fread(str_ids,1,6,fp_stock);
				p_node[item_node].stock_id = atoi(str_ids);
				p_node[item_node].strbuffer_idx = item_node;

				while(dot_cnt < 6)
				{/*Each blank corresponding to a node data section*/
					fread(&fp_ch,sizeof(char),1,fp_stock);
					p_item[item_node][ch_cnt] = fp_ch;
					ch_cnt++;

					if(fp_ch == '.')
						dot_cnt++;
					if(dot_cnt >= 3)/*patch,to read two digit after .,eg:3.23*/
						dot_cnt++;
				}
				item_node++;
			}
		}
	}
	fclose(fp_stock);

#if 1/*sorting code section*/
	FILE_ITEM_NODE node_temp;
	
	for(i = 0;i < (item_node - 1);i++)
	{
		for(j = 0;j < (item_node - i - 1);j++)
		{
			if(p_node[j + 1].stock_id > p_node[j].stock_id)
			{
				memcpy(&node_temp,(p_node + j),sizeof(FILE_ITEM_NODE));
				memcpy((p_node + j),(p_node + j + 1),sizeof(FILE_ITEM_NODE));
				memcpy((p_node + j + 1),&node_temp,sizeof(FILE_ITEM_NODE));
			}
		}
	}

	UINT gross_cnt,temp_id;
	
	gross_cnt = 1;
	temp_id = p_node[0].stock_id;
	for(i = 0;i < item_node;i++)
	{
		if(temp_id != p_node[i].stock_id)
		{
			temp_id = p_node[i].stock_id;
			gross_cnt++;
		}
	}

	UINT gross_idx,node_num;
	FILE_ITEM_NODE *p_grossnode;

	node_num= 0;
	gross_idx = 0;
	p_grossnode = new FILE_ITEM_NODE[gross_cnt];
	memset(p_grossnode,0x0,sizeof(FILE_ITEM_NODE) * gross_cnt);
	p_grossnode[0].stock_id = p_node[0].stock_id;
	for(i = 0;i < item_node;i++)
	{
		if(p_grossnode[gross_idx].stock_id != p_node[i].stock_id)
		{
			p_grossnode[gross_idx].strbuffer_idx = node_num;
			gross_idx++;

			p_grossnode[gross_idx].stock_id = p_node[i].stock_id;
			node_num= 1;
		}
		else
		{
			node_num++;
			p_grossnode[gross_idx].strbuffer_idx = node_num;
		}
	}
	
	for(i = 0;i < (gross_cnt - 1);i++)
	{/*Bubble sorting for event frequency*/
		for(j = 0;j < (gross_cnt - i - 1);j++)
		{
			if(p_grossnode[j+1].strbuffer_idx > p_grossnode[j].strbuffer_idx)
			{
				memcpy(&node_temp,(p_grossnode + j),sizeof(FILE_ITEM_NODE));
				memcpy((p_grossnode + j),(p_grossnode + j + 1),sizeof(FILE_ITEM_NODE));
				memcpy((p_grossnode + j + 1),&node_temp,sizeof(FILE_ITEM_NODE));
			}
		}
	}
	
#if (12 == 12)
	FILE *fp_log;
	int	str_length;

	str_length = szGetName.GetLength();
	szGetName.SetAt(str_length-3,'t');
	szGetName.SetAt(str_length-2,'x');
	szGetName.SetAt(str_length-1,'t');/*Modify file format*/
	fp_log = fopen(szGetName,"wt");

	for(i = 0;i < gross_cnt;i++)
	{
		UINT strnode_idx;
		char strbuf_ids[16];
		
		sprintf(strbuf_ids,"ID:%06d FREQ:%03d\n",p_grossnode[i].stock_id,p_grossnode[i].strbuffer_idx);
		str_length = strlen(strbuf_ids);
		fwrite(strbuf_ids,str_length,1,fp_log);
		fwrite("______________________________\n",1,32,fp_log);

		for(j = 0;j < item_node;j++)
		{
			if(p_node[j].stock_id == p_grossnode[i].stock_id)
			{/*write match ones*/
				strnode_idx = p_node[j].strbuffer_idx;
				str_length = strlen(p_item[strnode_idx]);
				fwrite(p_item[strnode_idx],str_length,1,fp_log);
				fwrite("\n",1,1,fp_log);
			}
		}
		fwrite("*******************************\n",1,32,fp_log);
	}
	fclose(fp_log);
#endif

	delete []p_grossnode;
#endif

	/*Loading complete*/
	delete []p_item;
	delete []str_malloc;
	delete []p_node;/*Release*/

	AfxMessageBox("Parse compelete!Please consult corresponding txt files...");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -