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

📄 dominexmanagerview.cpp

📁 家庭收支管理程序
💻 CPP
字号:
// DomIneXManagerView.cpp : implementation of the CDomIneXManagerView class
//

#include "stdafx.h"
#include "DomIneXManager.h"

#include "DomIneXManagerDoc.h"
#include "DomIneXManagerView.h"

#include "MemberDlg.h"      // /
#include <fstream.h>        // /

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

/////////////////////////////////////////////////////////////////////////////
// CDomIneXManagerView

IMPLEMENT_DYNCREATE(CDomIneXManagerView, CFormView)

BEGIN_MESSAGE_MAP(CDomIneXManagerView, CFormView)
	//{{AFX_MSG_MAP(CDomIneXManagerView)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_DEL, OnDel)
	ON_BN_CLICKED(IDC_MODIFY, OnModify)
	ON_BN_CLICKED(IDC_STATISTICS, OnStatistics)
	ON_BN_CLICKED(IDC_SEARCH, OnSearch)
	ON_WM_CREATE()
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CDomIneXManagerView construction/destruction

CDomIneXManagerView::CDomIneXManagerView() 
	: CFormView(CDomIneXManagerView::IDD)  
{
	//{{AFX_DATA_INIT(CDomIneXManagerView)
	m_money = 0.0;
	m_name = _T("");
	m_no = 0;
	m_item = _T("");
	m_time = 0;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CDomIneXManagerView::~CDomIneXManagerView()
{
}

void CDomIneXManagerView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDomIneXManagerView)
	DDX_Text(pDX, IDC_MONEY, m_money);
	DDX_Text(pDX, IDC_NAME, m_name);
	DDX_Text(pDX, IDC_NUM, m_no);
	DDX_Text(pDX, IDC_ITEM, m_item);
	DDX_Text(pDX, IDC_TIME, m_time);
	//}}AFX_DATA_MAP
}

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

	return CFormView::PreCreateWindow(cs);
}

void CDomIneXManagerView::OnInitialUpdate()  // /VC程序调用OnInitialUpdate():初始化之后,更新界面之前
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	//初始化组合框
    CComboBox *pWnd = (CComboBox*) this->GetDlgItem(IDC_TYPE);  // /返回控件的指针
	pWnd->AddString("收入");       // /增加列表项
	pWnd->AddString("支出");       // /增加列表项
	pWnd->SetCurSel(0);            // /SetCurSel()设定某个列表项为选中状态,在此为"收入"

	SetDlgItemText(IDC_SEARCH_CONTENT, "请输入编号");  // /SetDlgItemText()设置控件显示文本
    SetDlgItemText(IDC_TIME, "格式:20080808");        // /
}

/////////////////////////////////////////////////////////////////////////////
// CDomIneXManagerView printing

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

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CDomIneXManagerView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CDomIneXManagerView message handlers

void CDomIneXManagerView::UpdateListBox()         // /更新列表框的显示内容
{
	CListBox *pWnd = (CListBox*) this->GetDlgItem(IDC_LIST1); 
	                               // /GetDlgItem(控件ID),返回该控件的指针 
   	pWnd->ResetContent();   // /清除列表框中所有的列表项

    CString temp;           // /CString 类,提供灵活的、可调整大小的字符串对象
	CString no, money, time;
    
	for(int i=0; i<members.size(); i++)
	{
        no.Format("%d", members[i].m_no);  //itoa
		// /Format()是封装在CString中的一个方法,它的用法和ANSIC++中的printf()相似
		temp = no + " " + members[i].m_name;

        temp = temp + " " + members[i].m_item;

		money.Format("%f", members[i].m_money);
        temp = temp + " " + money;

		time.Format("%ld", members[i].m_time);
        temp = temp + " " + time;

		temp = temp + " " + members[i].m_type;
		
		pWnd->AddString(temp);  // /AddString(),CListBox类的成员函数,向列表框增加列表项
	}
}

void CDomIneXManagerView::OnAdd()     // /“添加”按钮的消息处理函数
{
	// TODO: Add your control notification handler code here
	
	this->UpdateData(true);   // /将数据从对话框的控件中传送到对应的数据成员中

	if(m_name.IsEmpty() || m_item.IsEmpty())
		this->MessageBox("请输入相应值!");  // /MESSAGEBOX(cMessageText) 显示一个用户自定义对话框。
	else
	{
		m_no = members.size()+1;

		CString type;
		CComboBox *pWnd = (CComboBox*) this->GetDlgItem(IDC_TYPE);    // /指向“类型”组合框
	    pWnd->GetWindowText(type);   // /GetWindowText()将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内
		                             // /获取“类型”组合框的内容:收入/支出

		members.push_back(CMember(m_no, m_name, m_item, m_money, m_time, type));   // /保存记录
		this->UpdateData(false);  // /将数据从数据成员中传送到对应的控件中,主要是修改编号
	}

    UpdateListBox();
}

void CDomIneXManagerView::OnDel()      // /“删除”按钮的消息处理函数
{
	// TODO: Add your control notification handler code here
	
	CListBox *pWnd = (CListBox*)this->GetDlgItem(IDC_LIST1);
	int index = pWnd->GetCurSel();     // /获得列表框中当前选择的列表项的位置序号
	//pWnd->DeleteString(index);     // /方法二:DeleteString()删除指定的列表项

	if(index >= 0)  // /方法一
	{
		members.erase(members.begin() + index);      // /删除记录

		UpdateListBox();
	}
	else 
		this->MessageBox("请选择要删除的条目");
}

void CDomIneXManagerView::OnModify()    // /“修改”按钮的消息处理函数
{
	// TODO: Add your control notification handler code here
	
	CListBox *pWnd = (CListBox*) this->GetDlgItem(IDC_LIST1);
	int index = pWnd->GetCurSel();

	if(index < 0)
	{
		this->MessageBox("请选择要修改的条目");
	    return;
	}

    CMemberDlg memberDlg;
	if(IDOK == memberDlg.DoModal())  /*  两层意义:一,memberDlg.DoModal()作用是弹出CMemberDlg对话框,
									     二,IDOK==memberDlg.DoModal()代表点击了对话框上的OK按钮。
									     就是说你同时做了上述两件事时就执行if语句后面的程序。        */
	{
		int no = members[index].m_no;
		CString type = members[index].m_type;

		members.erase(members.begin()+index);  //没有用UpdateData()

		members.insert(members.begin()+index, CMember(no, memberDlg.m_name, memberDlg.m_item,
			                                          memberDlg.m_money, memberDlg.m_time, type));			
	}

    UpdateListBox();
}

void CDomIneXManagerView::OnStatistics()   // /“统计”按钮的消息处理函数
{
	// TODO: Add your control notification handler code here
/*	
	for(int i=1; i<members.size(); i++)
		for(int j=0; j<members.size()-i; j++)
		{
			if(members[j].m_money > members[j+1].m_money)
			{
				CMember temp;

				temp = members[j];
				members[j] = members[j+1];
				members[j+1] = temp;
			}
		}
*/
//	UpdateListBox();

	double moneyout = 0;
	double moneyin = 0;

	for(int k=0; k<members.size(); k++)
	{
		if(members[k].m_type.Compare("收入") == 0)        // /CString类的成员函数Compare()
			moneyin += members[k].m_money;
		else if(members[k].m_type.Compare("支出") == 0)   // /
			moneyout += members[k].m_money;
	}

	CString str;
	str.Format("收入: %f, 支出: %f", moneyin, moneyout);      // /Format()成员函数,用法类似于printf()

	this->MessageBox(str);
}

void CDomIneXManagerView::OnSearch()         // /“查找”按钮的消息处理函数
{
	// TODO: Add your control notification handler code here
	
	CString str;
	( (CEdit*)this->GetDlgItem(IDC_SEARCH_CONTENT) )->GetWindowText(str);
	int n = atoi(str);         // /atoi()

    CListBox *pWnd = (CListBox*)this->GetDlgItem(IDC_LIST1);
	bool flag = true;

    CString temp;     // /用于输出查找结果(如果存在)
	CString no, money, time;

	for(int i=0; i<members.size(); i++)
		if(members[i].m_no == n)
		{
            no.Format("%d", members[i].m_no);     //itoa()
		    temp = no + " " + members[i].m_name + " " + members[i].m_item;

		    money.Format("%f", members[i].m_money);
            temp = temp + " " + money;

		    time.Format("%ld",members[i].m_time);
            temp = temp + " " + time + " " + members[i].m_type; 

			this->MessageBox(temp);
			flag = false;
			break;
		}

	if(flag)
		this->MessageBox("Not Found!");
}

int CDomIneXManagerView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	
	return 0;
}

void CDomIneXManagerView::OnFileOpen()                         // /
{
	// TODO: Add your command handler code here
	
	CFileDialog fileDlg(true);
	//fileDlg.m_ofn.lpstrFilter="文本文件(*.txt)|*.txt";
	if(IDOK!=fileDlg.DoModal())
		return;
	
	CFile file(fileDlg.GetFileName(),CFile::modeRead);
	CArchive ar(&file,CArchive::load);
	int count;
	ar>>count;
	if(!members.empty())
		members.clear();	
	
	int no;
	CString name,item,type;
	double money;
	long time;
	for(int i=0;i<count;i++)
	{
		ar>>no>>name>>item>>money>>time>>type;
		members.push_back(CMember(no,name,item,money,time,type));
	}
	//ar.Close();
	//file.Close();
    /*方法2  
	ifstream in(fileDlg.GetFileName(),ios::in); //type
    if(!in)
	{
		MessageBox("Can not open file to read",NULL,MB_OK);
		exit(-1);
	}	
	if(!members.empty())
		members.clear();
    while(!in.eof())
	{
		int count=0;
		in>>count;//多一个换行时,没结束但也没输入数据!!

		//if(count==0)
		//	break;
		
		int no;
		char name[10],item[10];
        //CString name,item;
		double money;
		long time;
		for(int i=0;i<count;i++)
		{
			in>>no>>name>>item>>money>>time;
			members.push_back(CMember(no,name,item,money,time));
		}
	}*/	

    UpdateListBox();
}

void CDomIneXManagerView::OnFileSaveAs()                                  // /
{
	// TODO: Add your command handler code here
	
	CFileDialog fileDlg(false);
	//fileDlg.m_ofn.lpstrFilter="文本文件(*.txt)|*.txt";
	if(IDOK!=fileDlg.DoModal())
		return;
	
	CFile file(fileDlg.GetFileName(),CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate);
	CArchive ar(&file,CArchive::store);
	int count=members.size();
	ar<<count;
	for(int i=0;i<count;i++)
	{
		ar<<members[i].m_no<<members[i].m_name<<members[i].m_item
		<<members[i].m_money<<members[i].m_time<<members[i].m_type;
	}
    //ar.Close();
	//file.Close();
	/*方法2
	ofstream out(fileDlg.GetFileName(),ios::out|ios::app);
    if(!out)
	{
		MessageBox("Can not open file to write",NULL,MB_OK);
		exit(-1);
	}
    int count=members.size();
	out<<count<<endl;
	for(int i=0;i<count;i++)
	{
		out<<members[i].m_no<<'\t'<<
			members[i].m_name<<'\t'<<			
			members[i].m_item<<'\t'<<
			members[i].m_money<<'\t'<<
			members[i].m_time;
		out<<endl;
	}*/
}

⌨️ 快捷键说明

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