C++课程设计--家庭财务管理系统(MFC)

课设题目

家庭财务管理系统

课设要求

  1. 用户管理
  2. 成员管理
  3. 日常收入信息的录入、修改、删除
  4. 日常支出信息的录入、修改、删除
  5. 对成员的收支信息进行浏览、查询
  6. 按月、季、年对成员的收支情况进行统计
  7. 数据导入和导出

程序运行界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

核心代码

财务管理 pay.cpp

// pay.cpp : implementation file
//

#include "stdafx.h"
#include "家庭管理系统.h"
#include "pay.h"
#include"Cai.h"

#include <vector>
#include <ostream>
#include<fstream>
#include "iostream.h"
#include <string>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// pay dialog
class Studentx{
public:
	CString phone;
	CString name;

};

vector <Studentx>stu;
int m=-1;
pay::pay(CWnd* pParent /*=NULL*/)
	: CDialog(pay::IDD, pParent)
{
	//{{AFX_DATA_INIT(pay)
	//}}AFX_DATA_INIT
}


void pay::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(pay)
	DDX_Control(pDX, IDC_COMBO3, m_flag);
	DDX_Control(pDX, IDC_COMBO1, m_name);
	DDX_Control(pDX, IDC_LIST1, m_pay);
	//}}AFX_DATA_MAP
}
BOOL pay::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_pay.InsertColumn(0,"编号",LVCFMT_CENTER,100);
	m_pay.InsertColumn(1,"名称",LVCFMT_CENTER,100);
	m_pay.InsertColumn(2,"类别",LVCFMT_CENTER,100);
	m_pay.InsertColumn(3,"价格",LVCFMT_CENTER,100);
   	m_pay.InsertColumn(4,"收入or支出",LVCFMT_CENTER,100);
	m_pay.InsertColumn(5,"月份",LVCFMT_CENTER,100);
	m_pay.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

 
	showname();
	ShowCai();

	m_name.SetCurSel(0);
    m_flag.SetCurSel(0);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
void pay::showname()
{
	
//	m_list.DeleteAllItems(); // 全部清空 	
	ifstream fin("members.txt",ios_base::in); 
	string a,b;
	fin>>a>>b;
	for(int i=0;!fin.fail();++i){

		m_name.AddString(_T(a.data()));
       	rname=a.data();
	
		Studentx s1;
		
		s1.phone=a.data();
		s1.name=b.data();
		stu.reserve(stu.size()+1);//增加容量以防止溢出

	stu.push_back(s1);
	fin>>a>>b;
	}
	fin.close();
}
void pay::ShowCai()
{
	m_pay.DeleteAllItems();
	int num=ReadCai();
	for(int i=0;i<num;i++)
	{
		m_pay.InsertItem(i,0);
		m_pay.SetItemText(i,0,cai[i].id);
		m_pay.SetItemText(i,1,cai[i].name);
		m_pay.SetItemText(i,2,cai[i].type);
		m_pay.SetItemText(i,3,cai[i].price);
		m_pay.SetItemText(i,4,cai[i].flag);
		m_pay.SetItemText(i,5,cai[i].time);
	}
}

int pay::ReadCai()
{
	CString txt_name;// 临时文件名
	txt_name=rname+".txt";
		MessageBox(txt_name);
	FILE *file=fopen(txt_name,"r");
	int a=0;
	while(!feof(file))
	{
		fscanf(file,"%s%s%s%s%s%s",&cai[a].id,&cai[a].name,&cai[a].type,&cai[a].price,&cai[a].flag,&cai[a].time);
		a++;
	}
	fclose(file);
	a--;
	return a;
}


BEGIN_MESSAGE_MAP(pay, CDialog)
	//{{AFX_MSG_MAP(pay)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
	ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// pay message handlers

void pay::OnButton1() 
{
	// TODO: Add your control notification handler code here
	CString txt_name;// 临时文件名
	txt_name=rname+".txt";
	CString time; //获取系统时间
	CTime tm; tm=CTime::GetCurrentTime();
	//time=tm.Format("%Y-%m-%d");

	time=tm.Format("%m");

		CString id,name,type,price,flag;// flag为输入or支出
	GetDlgItem(IDC_EDIT1)->GetWindowText(id);
	GetDlgItem(IDC_EDIT3)->GetWindowText(name);
	GetDlgItem(IDC_EDIT2)->GetWindowText(price);
	GetDlgItem(IDC_COMBO2)->GetWindowText(type);
    GetDlgItem(IDC_COMBO3)->GetWindowText(flag);

	if(id==""||name==""||price==""||type=="")
	{
		MessageBox("添加信息不能为空");
		return;
	}
	
	FILE *file=fopen(txt_name,"a+");
	fprintf(file,"%s   %s   %s   %s   %s   %s\r\n",id,name,type,price,flag,time);
	fclose(file);	
	MessageBox("添加成功");
	ShowCai();
}

void pay::OnButton5() 
{
		CString txt_name;// 临时文件名
	txt_name=rname+".txt";

	// TODO: Add your control notification handler code here
		CString id,name,type,price,flag;
	GetDlgItem(IDC_EDIT1)->GetWindowText(id);
	GetDlgItem(IDC_EDIT3)->GetWindowText(name);
	GetDlgItem(IDC_EDIT2)->GetWindowText(price);
	GetDlgItem(IDC_COMBO2)->GetWindowText(type);
GetDlgItem(IDC_COMBO3)->GetWindowText(flag);

	if(id==""||name==""||price==""||type=="")
	{
		MessageBox("修改信息不能为空");
		return;
	}
	int num=ReadCai();
	FILE *file=fopen(txt_name,"w");	
	for(int i=0;i<num;i++)
	{
		if(strcmp(id,cai[i].id)==0)
		{
			strcpy(cai[i].name,name);
			strcpy(cai[i].type,type);
			strcpy(cai[i].price,price);
            	strcpy(cai[i].flag,flag);

		}
		fprintf(file,"%s   %s   %s   %s   %s   %s\r\n",cai[i].id,cai[i].name\
			,cai[i].type,cai[i].price,cai[i].flag,cai[i].time);
	}
	fclose(file);

	MessageBox("修改成功");
	ShowCai();
}

void pay::OnButton6() 
{	CString txt_name;// 临时文件名
	txt_name=rname+".txt";

	// TODO: Add your control notification handler code here
	int sel = m_pay.GetSelectionMark();
	if(sel ==-1)
	{
		MessageBox("请先选择需要删除的菜品信息");
	}

	CString id=	m_pay.GetItemText(sel,0);
	int num=ReadCai();
	FILE *file=fopen(txt_name,"w+");

	for(int i=0;i<num;i++)
	{
		if(strcmp(id,cai[i].id)==0)  
			continue;
		fprintf(file,"%s   %s   %s   %s   %s   %s\r\n",cai[i].id,cai[i].name\
			,cai[i].type,cai[i].price,cai[i].flag,cai[i].time);
	}
	fclose(file);
	MessageBox("删除成功","提示");
	ShowCai();
}

void pay::OnButton7() 
{
	m_pay.DeleteAllItems();

	int index = m_name.GetCurSel();
 CString str_name;  
  CString strI;  
   m_name.GetLBText(index,str_name); 
   rname=str_name;
 	MessageBox(rname);
    	ShowCai();
	
}

void pay::OnButton8() 
{
	// TODO: Add your control notification handler code here
	if(MessageBox("请保存信息后退出!",NULL,MB_YESNO)==IDNO);
	else	CDialog::OnCancel();
}

项目源码

需要源码的小伙伴请前往
微信公众号:海轰Pro
回复: 海轰
O(∩_∩)O哈哈~

发布了155 篇原创文章 · 获赞 110 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_44225182/article/details/103738006