📄 dlgstockinfo.cpp
字号:
// DlgStockInfo.cpp : implementation file
//
#include "stdafx.h"
#include "StockDataParse.h"
#include "DlgStockInfo.h"
#include "DataDefine.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DlgStockInfo dialog
DlgStockInfo::DlgStockInfo(CWnd* pParent /*=NULL*/)
: CDialog(DlgStockInfo::IDD, pParent)
{
//{{AFX_DATA_INIT(DlgStockInfo)
m_strOutput = _T("");
m_strStockCode = _T("");
//}}AFX_DATA_INIT
}
void DlgStockInfo::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DlgStockInfo)
DDX_Control(pDX, IDC_COMBO_BLOCK, m_COM_Block);
DDX_Control(pDX, IDC_COMBO_HY, m_comboHY);
DDX_Control(pDX, IDC_COMBO_DY, m_comboDY);
DDX_Text(pDX, IDC_EDIT_OUTPUT, m_strOutput);
DDX_Text(pDX, IDC_EDIT_STOCKCODE, m_strStockCode);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DlgStockInfo, CDialog)
//{{AFX_MSG_MAP(DlgStockInfo)
ON_BN_CLICKED(IDC_BTN_QUERY_STOCK_CODE, OnBtnQueryStockCode)
ON_BN_CLICKED(IDC_BTN_QUERY_DY, OnBtnQueryDy)
ON_BN_CLICKED(IDC_BTN_QUERY_HY, OnBtnQueryHy)
ON_BN_CLICKED(IDC_BTN_READ_REALATION, OnBtnReadRealation)
ON_BN_CLICKED(IDC_BTN_BANKUAI, OnBtnBankuai)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DlgStockInfo message handlers
void DlgStockInfo::OnBtnQueryStockCode()
{
UpdateData(TRUE);
ST_StockReportInfoList::iterator iter;
iter=mST_StockReportInfoList.begin();
for(;iter!=mST_StockReportInfoList.end();iter++)
{
if(m_strStockCode == iter->chGpdm)
{
m_strOutput = "更新时间:";
CString strTemp ;
m_strOutput +=iter->chGxrq;
strTemp = " 注意:以下数据的货币单位(元)为人民币\r\n\r\n";
m_strOutput +=strTemp;
CString strGpdm = iter->chGpdm;
CString strGpName = mStockDateProcess.StockCode2StockName(strGpdm,m_ST_StockNameInfoList);
strTemp.Format("\t\t\t\t%s: %s 基本资料\r\n",iter->chGpdm,strGpName);
m_strOutput += strTemp;
strTemp.Format("\t总股本: %0.2lf万股\t\t\t流通A股: %0.2lf万股\r\n",iter->fZgb,iter->fLtag);
m_strOutput +=strTemp;
strTemp.Format("\t总资产: %0.2lf万元\t\t\t流动资产: %0.2lf万元\r\n",iter->fZzc, iter->fLdzc);
m_strOutput +=strTemp;
strTemp.Format("\t固定资产: %0.2lf万元\t\t\t无形资产: %0.2lf万元\r\n",iter->fGdzc, iter->fWxzc);
m_strOutput +=strTemp;
strTemp.Format("\t长期投资: %0.2lf万元\t\t\t流动负债: %0.2lf万元\r\n",iter->fCqtz, iter->fLdfz);
m_strOutput +=strTemp;
strTemp.Format("\t长期负债: %0.2lf万元 \r\n", iter->fCqfz);
m_strOutput +=strTemp;
strTemp.Format("\t资本公积金: %0.2lf万元\t\t净资产: %0.2lf万元\r\n",iter->fZbgjj, iter->fJzc);
m_strOutput +=strTemp;
strTemp.Format("\t主营收入: %0.2lf万元\t\t\t主营利润: %0.2lf万元\r\n",iter->fZysy, iter->fZyly);
m_strOutput +=strTemp;
strTemp.Format("\t应收帐款: %0.2lf万元\t\t\t营业利润: %0.2lf万元\r\n",iter->fQtly, iter->fYyly);
m_strOutput +=strTemp;
strTemp.Format("\t投资收益: %0.2lf万元\t\t\t经营现金流量: %0.2lf万元\r\n",iter->fTzsy, iter->fBtsy);
m_strOutput +=strTemp;
strTemp.Format("\t总现金流量: %0.2lf万元\t\t存货: %0.2lf万元\r\n",iter->fYywsz, iter->fSnsytz);
m_strOutput +=strTemp;
strTemp.Format("\t利润总额: %0.2lf万元\t\t\t税后利润: %0.2lf万元\r\n",iter->fLyze, iter->fShly);
m_strOutput +=strTemp;
strTemp.Format("\t净利润: %0.2lf万元\t\t\t未分配利润: %0.2lf万元\r\n",iter->fJly, iter->fWfply);
m_strOutput +=strTemp;
strTemp.Format("\t所属地区: %s板块\t\t\t所属行业: %s行业\r\n",mStockDateProcess.ParseDy(iter->chDy),mStockDateProcess.ParseHy(iter->chHy));
m_strOutput +=strTemp;
strTemp.Format("\t报告类别: %s\r\n",mStockDateProcess.ParseJblx(iter->chZbnb));
m_strOutput +=strTemp;
strTemp.Format("\t上市日期: %s\r\n\r\n\r\n",iter->chSsDate);
m_strOutput +=strTemp;
//每股
float fAveJzc = (iter->fJzc)/(iter->fZgb); //每股净资产 =净资产 / 总股本
float fAvesy = (iter->fJly)/(iter->fZgb); //每股收益 =净利润 / 总股本
float fAvegjj = (iter->fZbgjj)/(iter->fZgb); //每股公积金 = 资本公积金 / 总股本
float fAveBtsy = (iter->fBtsy)/(iter->fZgb); //每股经营现金流= 经营现金流量 / 总股本
float fRatioZylr; ////主营业务利润率 = 主营利润 / 主营收入
if(iter->fZysy ==0)
{
fRatioZylr = 0.0;
}
else
{
fRatioZylr= 100*iter->fZyly / iter->fZysy;
}
float fRatioJzcSy; //净资产收益率 =每股收益 /每股净资产
if(iter->fZzc ==0.0)
{
fRatioJzcSy= 0.0;
}
else
{
fRatioJzcSy = 100*fAvesy/fAveJzc;
}
float fRatioZcfz = 100*(iter->fCqfz + iter->fLdfz)/(iter->fZzc); //资产负债率 =(长期负债+流动负债)/ 总资产
//股东权益比: =?
float fRatioGdqy = 100*(iter->fJzc)/(iter->fZzc) ; //股东权益比=股东权益/总资产
//速动比率: =?速动比率,也称酸性测试比率,是流动资产金额减去存货金额后,再除以流动负债的比值
float fRatioSudong ;// // 速动比率=(流动资产-存货)/流动负债
if(iter->fLdfz ==0.0)
{
fRatioSudong= 0.0;
}
else
{
fRatioSudong = 100*(iter->fLdzc - iter->fSnsytz)/ iter->fLdfz;
}
strTemp.Format("\t每股净资产: %0.3lf元\t\t\t 每股收益: %0.3lf元\r\n",fAveJzc, fAvesy);
m_strOutput +=strTemp;
strTemp.Format("\t每股公积金: %0.3lf元\t\t\t 每股经营现金流: %0.3lf元\r\n",fAvegjj, fAveBtsy);
m_strOutput +=strTemp;
strTemp.Format("\t主营业务利润率: %0.2lf%%\t\t\t 净资产收益率: %0.2lf%%\r\n",fRatioZylr, fRatioJzcSy);
m_strOutput +=strTemp;
strTemp.Format("\t资产负债率: %0.2lf%%\r\n",fRatioZcfz);
m_strOutput +=strTemp;
strTemp.Format("\t股东权益比: %0.2lf%%\t\t\t 速动比率: %0.2lf%%\r\n",fRatioGdqy, fRatioSudong);
m_strOutput +=strTemp;
//fRatioSudong
break;
}
}
UpdateData(FALSE);
}
void DlgStockInfo::OnBtnQueryDy()
{
int nIndex = m_comboDY.GetCurSel()+1;
CString strTemp;
//query
ST_StockReportInfoList::iterator iter;
iter=mST_StockReportInfoList.begin();
m_strOutput.Empty() ;
for(;iter!=mST_StockReportInfoList.end();iter++)
{
if((unsigned char)(nIndex) == iter->chDy)
{
CString strGpdm = iter->chGpdm;
CString strGpName = mStockDateProcess.StockCode2StockName(strGpdm,m_ST_StockNameInfoList);
strTemp.Format("stock code:%s\t\t stock name: %s\r\n",iter->chGpdm, strGpName);
//strTemp.Format("stock code:%s\r\n",iter->chGpdm);
m_strOutput += strTemp;
strTemp.Format("\t总股本: %0.2lf万股\t\t\t流通A股: %0.2lf万股\r\n",iter->fZgb,iter->fLtag);
m_strOutput += strTemp;
strTemp.Format("\t净资产: %0.2lf万\t\t\t\r\n",iter->fJzc);
m_strOutput += strTemp;
strTemp.Format("\t每股净资产: %0.3lf元\t\t\t 每股收益: %0.3lf元\r\n",iter->fAveJzc, iter->fAvesy);
m_strOutput +=strTemp;
strTemp.Format("\t每股净资产/每股收益: %0.3lf\r\n",iter->fAveJzc/iter->fAvesy);
m_strOutput +=strTemp;
}
}
UpdateData(FALSE);
}
void DlgStockInfo::OnBtnQueryHy()
{
// TODO: Add your control notification handler code here
int nIndex = m_comboHY.GetCurSel()+1;
ST_StockReportInfoList::iterator iter;
iter=mST_StockReportInfoList.begin();
CString strTemp;
/*
* float fRatioZylr; //主营业务利润率 = 主营利润 / 主营收入
float fRatioJzcSy ; //净资产收益率 =每股收益 /每股净资产
float fRatioZcfz; //资产负债率 =(长期负债+流动负债)/ 总资产
*/
float fAveRatioZylr=0.0; //行业平均主营业务利润率 = 主营利润 / 主营收入
float fAveRatioJzcSy=0.0 ; //行业净资产收益率 =每股收益 /每股净资产
float fAveRatioZcfz=0.0; //行业资产负债率 =(长期负债+流动负债)/ 总资产
float fZzc =0.0; //zongzichan
int iCount=0;
m_strOutput.Empty() ;
for(;iter!=mST_StockReportInfoList.end();iter++)
{
char chCmp[9]="20080101";
if(((unsigned char)(nIndex) == iter->chHy) &&(memcpy(iter->chGxrq ,chCmp,8)>0))
{
CString strGpdm = iter->chGpdm;
CString strGpName = mStockDateProcess.StockCode2StockName(strGpdm,m_ST_StockNameInfoList);
strTemp.Format("stock code:%s\t stock name: %s\r\n",iter->chGpdm, strGpName);
iCount++;
fAveRatioZylr += iter->fRatioZylr;
fAveRatioJzcSy += iter->fRatioJzcSy;
fAveRatioZcfz += iter->fRatioZcfz;
m_strOutput += strTemp;
strTemp.Format("\t总股本: %0.2lf万股\t\t\t流通A股: %0.2lf万股\r\n",iter->fZgb,iter->fLtag);
m_strOutput += strTemp;
strTemp.Format("\t净资产: %0.2lf万\t\t\t\r\n",iter->fJzc);
m_strOutput += strTemp;
strTemp.Format("\t每股净资产: %0.3lf元\t\t\t 每股收益: %0.3lf元\r\n",iter->fAveJzc, iter->fAvesy);
m_strOutput +=strTemp;
strTemp.Format("\t每股净资产/每股收益: %0.3lf\r\n",iter->fAveJzc/iter->fAvesy);
m_strOutput +=strTemp;
}
}
fAveRatioZylr /= iCount;
fAveRatioJzcSy /= iCount;
fAveRatioZcfz /= iCount;
strTemp.Format("%s行业平均主营业务利润率%0.3lf%%\r\n",mStockDateProcess.ParseHy(nIndex),fAveRatioZylr);
m_strOutput += strTemp;
strTemp.Format("净资产收益率%0.3lf%%\r\n",fAveRatioJzcSy);
m_strOutput += strTemp;
strTemp.Format("资产负债率%0.3lf%%\r\n",fAveRatioZcfz);
m_strOutput += strTemp;
UpdateData(FALSE);
}
//DEL void DlgStockInfo::OnBtnQueryJzcsy()
//DEL {
//DEL // TODO: Add your control notification handler code here
//DEL ST_StockReportInfoList::iterator iter;
//DEL iter=mST_StockReportInfoList.begin();
//DEL
//DEL m_strOutput.Empty();
//DEL CString strTemp;
//DEL const float cfJzcsylv = 10.0;
//DEL for(;iter!=mST_StockReportInfoList.end();iter++)
//DEL {
//DEL if(cfJzcsylv < iter->fRatioJzcSy) //
//DEL {
//DEL strTemp.Format("stock code:%s\r\n",iter->chGpdm);
//DEL
//DEL m_strOutput += strTemp;
//DEL }
//DEL }
//DEL UpdateData(FALSE);
//DEL }
void DlgStockInfo::OnBtnReadRealation()
{
static char displayname[MAX_PATH];
static char path[MAX_PATH];
LPITEMIDLIST pidlBrowse;
BROWSEINFO bi;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = displayname;
bi.lpszTitle = "请选择data文件夹";
bi.ulFlags = BIF_EDITBOX ;
bi.lpfn = NULL;
pidlBrowse=SHBrowseForFolder( &bi);
if(pidlBrowse!=NULL)
{
SHGetPathFromIDList(pidlBrowse,path);
}
CString strDir =path; //得到路径
if(strDir.IsEmpty())
{
return; //如果没有选择,就返回
}
strDir +='\\';
//read daima mingcheng
ReadRelationData(strDir);
//read database data
ReadDbData(strDir);
//read bank kuai data
ReadBanKuaiData(strDir);
}
int DlgStockInfo::ReadDbData(CString strFileName)
{
strFileName = strFileName+"base.dbf";
const int ci_FILE_LEN=24*1024*1024;
const int ci_Len=10;
ST_StockReportInfo oST_StockReportInfo;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -