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

📄 tallyview.cpp

📁 一个简单的记账软件
💻 CPP
字号:
// TallyView.cpp : implementation of the CTallyView class
//

#include "stdafx.h"
#include "Tally.h"
#include "matlib.h"

#include "TallyDoc.h"
#include "TallyView.h"
#include "CountDialog.h"
#include "InputDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define HASHSEED 67
/////////////////////////////////////////////////////////////////////////////
//hash function

long hash (CString s){
	long res = 1;
	for (int i=0; i<s.GetLength(); i++){
		res *=(int)s[i];
		res %= HASHSEED;
	}
	return res;
}
/////////////////////////////////////////////////////////////////////////////
//update
void CTallyView::Update (){
	CString temp;
	temp = m_MonthTreeCtrl.GetItemText(m_MonthTreeCtrl.GetSelectedItem());
	long hashMonth[12];
	hashMonth[0] = hash ("一月");
	hashMonth[1] = hash ("二月");
	hashMonth[2] = hash ("三月");
	hashMonth[3] = hash ("四月");
	hashMonth[4] = hash ("五月");
	hashMonth[5] = hash ("六月");
	hashMonth[6] = hash ("七月");
	hashMonth[7] = hash ("八月");
	hashMonth[8] = hash ("九月");
	hashMonth[9] = hash ("十月");
	hashMonth[10] = hash ("十一月");
	hashMonth[11] = hash ("十二月");
	long tmp = hash(temp);
	int iMonth = -1;
	for (int i=0; i<12; i++){
		if (tmp == hashMonth[i])
			iMonth = i;
	}	
	m_iMonth = iMonth;
	CDocument * CurDoc = this->GetDocument();
	CTallyDoc * MyCurDoc = (CTallyDoc *)CurDoc;


	this->m_ItemListCtrl.DeleteAllItems();
	this->m_OutEditBox = "";
	this->UpdateData(FALSE);
	if (iMonth <0 || iMonth>11){
		return;
	}
	
	//MyCurDoc->m_aMonth[iMonth];
	int iItemSize = MyCurDoc->m_aMonth[iMonth].GetSize();
	this->m_ItemListCtrl.SetItemCount(iItemSize);
	for (i=0; i<iItemSize; i++){
		this->m_ItemListCtrl.InsertItem(i,MyCurDoc->m_aMonth[iMonth][i].m_sName);
		temp.Format("%.2f",MyCurDoc->m_aMonth[iMonth][i].m_dCost);
		this->m_ItemListCtrl.SetItemText(i,1,temp);
		
		//temp.Format("%d",MyCurDoc->m_aMonth[iMonth][i].m_tType);
		
		switch (MyCurDoc->m_aMonth[iMonth][i].m_tType){
		case 0: temp.Format("%s","食品");break;
		case 1: temp.Format("%s","书籍");break;
		case 2: temp.Format("%s","服装");break;
		case 3: temp.Format("%s","医药");break;
		case 4: temp.Format("%s","礼物");break;
		case 5: temp.Format("%s","化妆品");break;
		case 6: temp.Format("%s","日用品");break;
		case 7: temp.Format("%s","收入");break;
		case 8: temp.Format("%s","其它");break;
		}
		this->m_ItemListCtrl.SetItemText(i,2,temp);//类别

		temp.Format("%d",MyCurDoc->m_aMonth[iMonth][i].m_uiDay);
		this->m_ItemListCtrl.SetItemText(i,3,temp);//日期

		this->m_ItemListCtrl.SetItemText(i,4,MyCurDoc->m_aMonth[iMonth][i].m_sRemark);//备注
	}
}
/////////////////////////////////////////////////////////////////////////////
// CTallyView

IMPLEMENT_DYNCREATE(CTallyView, CFormView)

BEGIN_MESSAGE_MAP(CTallyView, CFormView)
	//{{AFX_MSG_MAP(CTallyView)
	ON_WM_SIZE()
	ON_COMMAND(ID_SHOW_INPUT_DATE_DIA, OnShowInputDateDia)
	ON_COMMAND(ID_SHOW_COUNT_DIA, OnShowCountDia)
	ON_NOTIFY(TVN_SELCHANGED, IDC_MONTH_TREE, OnSelchangedMonthTree)
	ON_NOTIFY(NM_CLICK, IDC_ITEM_LIST, OnClickItemList)
	ON_COMMAND(ID_DELET_BUTTON, OnDeletButton)
	ON_COMMAND(ID_QQ, OnQq)
	ON_COMMAND(ID_EMAIL, OnEmail)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTallyView construction/destruction

CTallyView::CTallyView()
	: CFormView(CTallyView::IDD)
{
	//{{AFX_DATA_INIT(CTallyView)
	m_OutEditBox = _T("");
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	//pGraphDia = NULL;
}

CTallyView::~CTallyView()
{
	exitM();
}

void CTallyView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTallyView)
	DDX_Control(pDX, IDC_EDIT_BOX, m_EditCtrl);
	DDX_Control(pDX, IDC_ITEM_LIST, m_ItemListCtrl);
	DDX_Control(pDX, IDC_MONTH_TREE, m_MonthTreeCtrl);
	DDX_Text(pDX, IDC_EDIT_BOX, m_OutEditBox);
	//}}AFX_DATA_MAP
}

BOOL CTallyView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CTallyView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	ResizeParentToFit();

	m_ItemListCtrl.InsertColumn(0,"名称",LVCFMT_CENTER,100);
	m_ItemListCtrl.InsertColumn(1,"金额",LVCFMT_CENTER,100);
	m_ItemListCtrl.InsertColumn(2,"类别",LVCFMT_CENTER,100);
	m_ItemListCtrl.InsertColumn(3,"日期",LVCFMT_CENTER,100);
	m_ItemListCtrl.InsertColumn(4,"备注",LVCFMT_CENTER,100);
	m_ItemListCtrl.SetExtendedStyle(m_ItemListCtrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

	tvMONTH.hParent = NULL;
	tvMONTH.item.mask = TVIF_TEXT;

	tvMONTH.item.pszText = "全年";
	HTREEITEM hDad = m_MonthTreeCtrl.InsertItem(&tvMONTH);

	tvMONTH.hParent = hDad;
	tvMONTH.item.pszText = "一月";
	hMONTH1 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "二月";
	hMONTH2 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "三月";
	hMONTH3 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "四月";
	hMONTH4 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "五月";
	hMONTH5 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "六月";
	hMONTH6 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "七月";
	hMONTH7 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "八月";
	hMONTH8 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "九月";
	hMONTH9 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "十月";
	hMONTH10 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "十一月";
	hMONTH11 = m_MonthTreeCtrl.InsertItem(&tvMONTH);
	tvMONTH.item.pszText = "十二月";
	hMONTH12 = m_MonthTreeCtrl.InsertItem(&tvMONTH);


	initM (MATCOM_VERSION);
	Mm plothandle = winaxes (NULL);//初始化图像窗口
}

/////////////////////////////////////////////////////////////////////////////
// CTallyView printing

BOOL CTallyView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTallyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CTallyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CTallyView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CTallyView diagnostics

#ifdef _DEBUG
void CTallyView::AssertValid() const
{
	CFormView::AssertValid();
}

void CTallyView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CTallyDoc* CTallyView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTallyDoc)));
	return (CTallyDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTallyView message handlers

void CTallyView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	CRect rc1,rc2,rc3;
	this->GetClientRect(&rc1);
	this->GetClientRect(&rc2);
	this->GetClientRect(&rc3);
	rc1.SetRect(20,20,(int)((double)cx*0.3),(int)((double)cy*0.7));
	rc2.SetRect((int)((double)cx*0.3),20,cx-20,(int)((double)cy*0.7));
	rc3.SetRect(20,(int)((double)cy*0.7),cx-20,cy-20);	
	if (m_ItemListCtrl)
		m_ItemListCtrl.MoveWindow(rc2);
	if (m_MonthTreeCtrl)
		m_MonthTreeCtrl.MoveWindow(rc1);
	if (m_EditCtrl)
		m_EditCtrl.MoveWindow(rc3);
	
}

void CTallyView::OnShowInputDateDia() 
{
	// TODO: Add your command handler code here
	CInputDialog InputDia;
	InputDia.DoModal();
		
}

void CTallyView::OnShowCountDia() 
{
	// TODO: Add your command handler code here
	CCountDialog CountDia;
	CountDia.DoModal();
	
}

void CTallyView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	// TODO: Add your specialized code here and/or call the base class
/*	HTREEITEM hCurrentItem = m_MonthTreeCtrl.GetSelectedItem();
	hCurrentItem->TVIF_TEXT
	AfxMessageBox("update view");
	*/
	Update();
	
}

void CTallyView::OnSelchangedMonthTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	Update();

	
	*pResult = 0;
}

void CTallyView::OnClickItemList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here

	CString temp="";
	int iFirstSelectedItem = m_ItemListCtrl.GetSelectionMark( );
	
	if (iFirstSelectedItem !=-1){
		for (int i=0; i<5; i++){
			temp += m_ItemListCtrl.GetItemText(iFirstSelectedItem,i);
			temp +="        ";
		}
	
		m_OutEditBox = temp;
		this->UpdateData(FALSE);
	}
	else
	{
		m_OutEditBox = "";
		this->UpdateData(FALSE);
	}
	*pResult = 0;
}

void CTallyView::OnDeletButton() 
{
	// TODO: Add your command handler code here
	int iFirstSelectedItem = m_ItemListCtrl.GetSelectionMark( );
	if (iFirstSelectedItem !=-1 && m_iMonth>=0&&m_iMonth<12){
		CDocument * CurDoc = this->GetDocument();
		CTallyDoc * MyCurDoc = (CTallyDoc *)CurDoc;
		MyCurDoc->DeleteItem(m_iMonth+1, iFirstSelectedItem);
		MyCurDoc->UpdateAllViews(NULL);		
	}
}

void CTallyView::OnQq() 
{
	// TODO: Add your command handler code here
	::ShellExecute (NULL,NULL,"Tencent://Message/?uin=254602631",NULL,NULL,SW_HIDE);
	
}

void CTallyView::OnEmail() 
{
	// TODO: Add your command handler code here
	::ShellExecute (NULL,NULL,"mailto:mayjojo@yeah.net",NULL,NULL,SW_SHOW);
	
}

⌨️ 快捷键说明

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