基于MFC的记账系统—好好记帐

1编写目的

从当今大学生的消费行为看,校园贷、月光族、卡奴等现象已不是新鲜事,这与消费升级的现状相背。大学生了解自己的消费结构并控制预算来买预期物品的愿望促生了记账需求,而在记账类APP市场上,较为知名的几款记账APP分别为鲨鱼记账、随手记、360记账挖财、圈子账本、网易有钱,但目前移动记账软件的核心仍是以消费后做记录为主,对事前消费起不到有效控制作用。我们设计的好好记账APP利用大数据技术创建一个大型数据库, 用于大学生日常记录个人财务借还情况、消费合理程度、计划未来开支、记录重大事项等内容具有重要意义,主要目标是为其理性消费、勤俭节约提供必要的劝导、指导和引导,我们设计的app有单独的借还页面,更加清晰明了学生之间日常消费的借还,进行消费合理化排序,实现大学生可支配额度效益最大化,改变大学生冲动消费与盲目消费的主观缺陷,创新实时追踪与动态调整机制,强化大学生消费的有效性。我们预期的读者是在读大学生、研究生等。

2目标

好好记账软件的目标锁定为“轻松上手、坚持记账”,不仅帮助用户改善自身的消费习惯,而且有助于提高理财能力、培养理财思维。“轻松上手”是通过简易设计的界面实现的,让记账更方便操作。“坚持记账”是建立在用户需求的基础上增加趣味元素,使用户对于网站的体验感更佳,进而形成记账习惯。

3用户的特点

好好记账软件主要使用用户的目标锁定为当代大学生,他们的主要特点是不善于理财、容易产生消费冲动、难以长时间记账、注重美观和个性化设计。用户使用本网站不仅可以培养理财思维,监测自身的消费状况,而且还能编辑账本内容,使用积分获取奖励。

4功能说明,用户,管理员总体功能说明:

管理员:可以通过成功登录管理员账号,弹出所有用户个人信息表,通过对用户信息进行增删改查来达到后台维护作用。可以通过查看用户信息,然后登陆用户账号对用户账本进行详细的增删改查。

用户:在没有注册用户帐号之前,先要注册一个用户账号。然后可以通过成功登录用户账号,进入用户界面。可以对收入,支出,借入,借出,预算进行增删改查,可以切换不同风格的背景,切换不同风格的音乐,并且可以查看个人信息,账号ID,用户名,密码和性别

5算法

本程序需要对hhjz数据库进行操作,即对数据库中的账单表,借入表,借出表,预算表和用户表进行查询,修改,增加,删除。

查询:select *from bill(user或jieru或jiechu或yusuan) where +条件;

修改:update bill(user或jieru或jiechu或yusuan) set +修改内容+where +条件;

增加:insert into bill(user或jieru或jiechu或yusuan) values(属性值列表);

删除:delete from bill(user或jieru或jiechu或yusuan) where +条件;

循环累加:在用户切换背景时,用到的算法是循环累加。

6.1新增类

4-1 新增加类列表

新增加类

说明

Cguanliyuan

弹出管理员对话框,对管理员登陆进行验证

Cjiechu

增加一笔借出

Cjiechubiao

弹出借出表,对用户借出进行增删改查

Cshouru

新增一笔收入

Cuser

用户进行登录,对用户登陆进行验证

Cuserbiao

弹出用户信息表,对用户信息进行增删改查

xinxi

弹出用户信息对话框

Cyuqi

弹出预算表,对用户预算进行增删改查

Czhangdan

弹出账单表,对用户支出收入进行增删改查

Czhichu

增加一笔支出

Czhuce

弹出注册对话框,用户可以进行注册

6.2  新增成员变量

4-2 增成员变量列表

新增成员变量

类型

所属类

功能

id

CString

Cguanliyuan

保存管理员id

 password

CString

Cguanliyuan

保存管理员密码

m_id

CString

Cjiechu

保存借出属性ID

m_shijian

CString

Cjiechu

保存借出属性时间

m_jine

CString

Cjiechu

保存借出属性金额

m_people

CString

Cjiechu

保存借出属性被借人

m_beizhu

CString

Cjiechu

保存借出属性备注

u_id

CString

Cjiechu

保存借出属性用户ID

sock

MYSQL *

Cjiechu

保存数据库

result

MYSQL_RES *

Cjiechu

保存数据库导入结果

row

MYSQL_ROW

Cjiechu

保存数据库指针

sock

MYSQL *

Cjiechubiao

保存数据库

result

MYSQL_RES *

Cjiechubiao

保存数据库导入结果

row

MYSQL_ROW

Cjiechubiao

保存数据库指针

i

int

Cjiechubiao

保存数据库浏览到第几行

flag

int

Cjiechubiao

控制列表头只绘制一次

m_sqlid

CString

Cjiechubiao

身体位图

m_id

CString

Cjieru

保存借入属性ID

m_shijian

CString

Cjieru

保存借入属性时间

m_jine

CString

Cjieru

保存借入属性金额

m_people

CString

Cjieru

保存借入属性被借人

m_beizhu

CString

Cjieru

保存借入属性备注

u_id

CString

Cjieru

保存借入属性用户ID

sock

MYSQL *

Cjieru

保存数据库

result

MYSQL_RES *

Cjieru

保存数据库导入结果

row

MYSQL_ROW

Cjieru

保存数据库指针

sock

MYSQL *

Cjierubiao

保存数据库

result

MYSQL_RES *

Cjierubiao

保存数据库导入结果

row

MYSQL_ROW

Cjierubiao

保存数据库指针

i

int

Cjierubiao

保存数据库浏览到第几行

flag

int

Cjierubiao

控制列表头只绘制一次

m_sqlid

CString

Cjierubiao

身体位图

bmp

BITMAP

CMyView

背景位图

rect

CRect

CMyView

获得客户区大小

fflag

int

CMyView

记录背景类型

fjbkg

int

CMyView

风景背景变量

mbkg

int

CMyView

动漫背景变量

kabkg

int

CMyView

可爱背景变量

jdbkg

int

CMyView

简单背景变量

u_name

CString

CMyView

记录用户姓名

u_id

CString

CMyView

记录用户ID

u_password

CString

CMyView

记录用户密码

u_sex

CString

CMyView

记录用户性别

m_id

CString

Cshouru

记录收入ID

m_riqi

CString

Cshouru

记录收入日期

m_jine

CString

Cshouru

记录收入金额

m_beizhu

CString

Cshouru

记录收入备注

m_leibie

CString

Cshouru

记录收入类别

u_id

CString

Cshouru

记录用户ID

m_id

CString

Cuser

记录用户ID

m_password

CString

Cuser

记录用户密码

m_mz

CString

Cuser

记录用户名字

m_sex

CString

Cuser

记录用户性别

m_id

CString

xinxi

记录用户ID

m_password

CString

xinxi

记录用户密码

m_mz

CString

xinxi

记录用户名字

m_sex

CString

xinxi

记录用户性别

m_sqlid

CString

Czhangdan

记录用户ID

flag

int

Czhangdan

只显示一次列头

m_id

CString

Czhichu

记录支出ID

m_riqi

CString

Czhichu

记录支出日期

m_jine

CString

Czhichu

记录支出金额

m_beizhu

CString

Czhichu

记录支出备注

m_leibie

CString

Czhichu

记录支出类别

u_id

CString

Czhichu

记录用户ID

m_id

CString

Czhuce

记录用户ID

m_name

CString

Czhuce

记录用户姓名

m_mima

CString

Czhuce

记录用户密码

6.3  新增成员函数

4-3 新增成员函数列表

新增成员函数名

所属类

函数功能

参数说明

OnClickedGdl

Cguanliyuan

判断管理员账号密码

OnClickedJcqd

Cjiechu

新增加一笔借出

OnBnClickedcx

Cjiechubiao

查询借出表

OnBnClickedsc

Cjiechubiao

删除借出表

OnBnClickedxg

Cjiechubiao

修改借出表

OnClickedXszd

Cjiechubiao

显示借出表

OnClickedZj

Cjiechubiao

增加借出

OnBnClickedcx

Cjierubiao

查询借入表

OnBnClickedsc

Cjierubiao

删除借入表

OnBnClickedxg

Cjierubiao

修改借入表

OnClickedXszd

Cjierubiao

显示借入表

OnClickedZj

Cjierubiao

增加借入

OnClickedJrqd

Cjieru

新增加一笔借入

Onuser

CMyView

用户登录

Onguanliyuan

CMyView

管理员登录

Onzhichu

CMyView

增加支出对话框

Onshouru

CMyView

增加收入对话框

Onyusuan

CMyView

增加预算

Onxinxi

CMyView

查看用户信息

Onjieru

CMyView

增加借入

Onjiechu

CMyView

增加借出

Onfjbkg

CMyView

风景背景,循环加一

Ondmbkg

CMyView

动漫背景,循环加一

Onkabkg

CMyView

可爱背景,循环加一

Onjdbkg

CMyView

简单背景,循环加一

Onjk

CMyView

打开借口音乐

Onkblk

CMyView

打开开不了口音乐

Onnh

CMyView

打开女孩音乐

Onhmbb

CMyView

打开海绵宝宝音乐

Ongbgm

CMyView

关闭音乐

Onzhuce

CMyView

用户注册对话框

Onzhangben

CMyView

打开账本对话框,进行增删改查

Onjrb

CMyView

打开借入表对话框,进行增删改查

Onjcb

CMyView

打开借出表对话框,进行增删改查

Onysb

CMyView

打开预算对话框,进行增删改查

OnClickedSrqd

Cshouru

新增一笔收入

OnBnClickedudl

Cuser

用户登录

OnBnClickedcx

Cuserbiao

查询用户表

OnBnClickedsc

Cuserbiao

删除用户表

OnBnClickedxg

Cuserbiao

修改用户表

OnClickedXszd

Cuserbiao

显示用户表

OnClickedZj

Cuserbiao

增加用户

OnBnClickedcx

Czhangdan

查询账单表

OnBnClickedsc

Czhangdan

删除账单表

OnBnClickedxg

Czhangdan

修改账单表

OnClickedXszd

Czhangdan

显示账单表

OnClickedZj

Czhangdan

增加账单

OnBnClickedcx

Cyuqi

查询预算表

OnBnClickedsc

Cyuqi

删除预算表

OnBnClickedxg

Cyuqi

修改预算表

OnClickedXszd

Cyuqi

显示预算表

OnClickedZj

Cyuqi

增加预算

OnBnClickedxsxx

Cxinxi

显示用户信息

 OnBnClickedazcqd

Czhichu

新增加一笔支出

OnClickedUzc

Czhuce

用户进行注册以及错误判断

7原代码清单

 7.1添加背景

	//获得客户区大小
	GetClientRect(&rect);

	//添加背景图,切换背景
	CBitmap bking; 
	if(fflag==1)//风景
		switch(fjbkg)
		{
		case 1:bking.LoadBitmap(IDB_BITMAP1);break;
		case 2:bking.LoadBitmap(IDB_BITMAP2);break;
		case 3:bking.LoadBitmap(IDB_BITMAP3);break;
		case 4:bking.LoadBitmap(IDB_BITMAP4);break;
		case 5:bking.LoadBitmap(IDB_BITMAP5);break;
		case 6:bking.LoadBitmap(IDB_BITMAP6);break;
		case 7:bking.LoadBitmap(IDB_BITMAP7);break;
		case 8:bking.LoadBitmap(IDB_BITMAP8);break;
		case 9:bking.LoadBitmap(IDB_BITMAP9);break;
		}
	else if(fflag==2)//动漫
		switch(dmbkg)
		{
		case 10:bking.LoadBitmap(IDB_BITMAP10);break;
		case 11:bking.LoadBitmap(IDB_BITMAP11);break;
		case 12:bking.LoadBitmap(IDB_BITMAP12);break;
		case 13:bking.LoadBitmap(IDB_BITMAP13);break;
		case 14:bking.LoadBitmap(IDB_BITMAP14);break;
		case 15:bking.LoadBitmap(IDB_BITMAP15);break;
		case 16:bking.LoadBitmap(IDB_BITMAP16);break;
		case 17:bking.LoadBitmap(IDB_BITMAP17);break;
		case 18:bking.LoadBitmap(IDB_BITMAP18);break;
		}
	else if(fflag==3)//可爱
		switch(kabkg)
		{
		case 19:bking.LoadBitmap(IDB_BITMAP19);break;
		case 20:bking.LoadBitmap(IDB_BITMAP20);break;
		case 21:bking.LoadBitmap(IDB_BITMAP21);break;
		case 22:bking.LoadBitmap(IDB_BITMAP22);break;
		case 23:bking.LoadBitmap(IDB_BITMAP23);break;
		case 24:bking.LoadBitmap(IDB_BITMAP24);break;
		}
	else if(fflag==4)//简单
		switch(jdbkg)
		{
		case 30:bking.LoadBitmap(IDB_BITMAP30);break;
		case 31:bking.LoadBitmap(IDB_BITMAP31);break;
		case 32:bking.LoadBitmap(IDB_BITMAP32);break;
		case 33:bking.LoadBitmap(IDB_BITMAP33);break;
		case 34:bking.LoadBitmap(IDB_BITMAP34);break;
		case 35:bking.LoadBitmap(IDB_BITMAP35);break;
		case 36:bking.LoadBitmap(IDB_BITMAP36);break;
		case 37:bking.LoadBitmap(IDB_BITMAP37);break;
		case 38:bking.LoadBitmap(IDB_BITMAP38);break;
		case 39:bking.LoadBitmap(IDB_BITMAP39);break;
		case 40:bking.LoadBitmap(IDB_BITMAP40);break;
		case 41:bking.LoadBitmap(IDB_BITMAP41);break;
		case 42:bking.LoadBitmap(IDB_BITMAP42);break;
		case 25:bking.LoadBitmap(IDB_BITMAP25);break;
		case 26:bking.LoadBitmap(IDB_BITMAP26);break;
		case 27:bking.LoadBitmap(IDB_BITMAP27);break;
		case 28:bking.LoadBitmap(IDB_BITMAP28);break;
		case 29:bking.LoadBitmap(IDB_BITMAP29);break;

		}

	// 等比添加背景图片
	CDC memdc;
	memdc.CreateCompatibleDC(pDC);
	memdc.SelectObject(&bking);
	bking.GetBitmap(&bmp);
	pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);//等比缩放背景图

7.2登录

//用户登录
void CMyView::Onuser() 
{
	// TODO: Add your command handler code here
	Cuser dlg;
	if(dlg.DoModal()==IDOK)
	{
		u_id = dlg.m_id;
		u_name = dlg.m_mz;
		u_password = dlg.m_password;
		u_sex = dlg.m_sex;
	}
}

//管理员登录
void CMyView::Onguanliyuan() 
{
	// TODO: Add your command handler code here
	Cguanliyuan dlg;
	if(dlg.DoModal()==IDOK)
	{
	}
}
GetDlgItemText(IDC_gid, id);//获得控件的文本
	GetDlgItemText(IDC_gmm, password);

	if (id == "2206484123" && password == "577577577")
	{
		Cuserbiao dlg;
		if (dlg.DoModal() == IDOK)
		{

		}
		OnOK();//退出登录对话框
	}
	else {
		MessageBox("您的id或密码错误,请重新输入!");
	}
GetDlgItemText(IDC_gid, id);//获得控件的文本
	GetDlgItemText(IDC_gmm, password);

	if (id == "2206484123" && password == "577577577")
	{
		Cuserbiao dlg;
		if (dlg.DoModal() == IDOK)
		{

		}
		OnOK();//退出登录对话框
	}
	else {
		MessageBox("您的id或密码错误,请重新输入!");
	}

7.3增加一笔支出收入

//增加支出
void CMyView::Onzhichu() 
{
	// TODO: Add your command handler code here
	Czhichu dlg;
	dlg.u_id = u_id;
	if(dlg.DoModal()==IDOK)
	{
		
	}
}

//增加收入
void CMyView::Onshouru() 
{
	// TODO: Add your command handler code here
	Cshouru dlg;
	dlg.u_id = u_id;
	if(dlg.DoModal()==IDOK)
	{
	
	}
			
}
GetDlgItemText(IDC_azcid, m_id);//获得控件的文本
	GetDlgItemText(IDC_azcrq, m_riqi);
	GetDlgItemText(IDC_azcje, m_jine);
	GetDlgItemText(IDC_azcbz, m_beizhu);
	if (m_id.IsEmpty())
	{
		MessageBox(_T("至少要输入账单编号"), _T("插入操作"), IDI_ICON1);
		return;

	}
	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
		return;
	}
	CString m_leibie;

	switch (m_lb)
	{
	case 0:m_leibie = _T("服装"); break;
	case 1:m_leibie = _T("吃"); break;
	case 2:m_leibie = _T("购物"); break;
	case 3:m_leibie = _T("日常开支"); break;
	case 4:m_leibie = _T("生活消费"); break;
	default:
		break;
	}

	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into bill values(");
	strsql += m_id + _T(",") + u_id + _T(",\'") + m_leibie + _T("\',\'") + m_riqi + _T("\',\'0\',\'") + m_jine + _T("\',\'") + m_beizhu + _T("\')");
	//MessageBox(strsql);

	//判断插入数据是否失败,并且插入数据到数据库
	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}
// TODO: 在此添加控件通知处理程序代码
	GetDlgItemText(IDC_asrid, m_id);//获得控件的文本
	GetDlgItemText(IDC_asrrq, m_riqi);
	GetDlgItemText(IDC_asrje, m_jine);
	GetDlgItemText(IDC_asrbz, m_beizhu);
	if (m_id.IsEmpty())
	{
		MessageBox(_T("至少要输入账单编号"), _T("插入操作"), IDI_ICON1);
		return;

	}

	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
		return;
	}
	CString m_leibie;

	switch (m_lb)
	{
	case 0:m_leibie = _T("生活费"); break;
	case 1:m_leibie = _T("打工兼职"); break;
	case 2:m_leibie = _T("其他"); break;
	default:
		break;
	}

	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into bill values(");
	strsql += m_id + _T(",") + u_id + _T(",\'") + m_leibie + _T("\',\'") + m_riqi + _T("\',\'") + m_jine + _T("\',\'0\',\'") + m_beizhu + _T("\')");
	//MessageBox(strsql);

	//判断插入数据是否失败,并且插入数据到数据库
	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}

7.4增加预算

//增加预算
void CMyView::Onyusuan() 
{
	// TODO: Add your command handler code here
	Cyusuan dlg;
	if(dlg.DoModal()==IDOK)
	{
	}
}
void Cyuqi::OnClickedXsys()
{
	// TODO: 在此添加控件通知处理程序代码

	//只有第一次点击显示账单按钮,才会显示列名

		//初始化列表控件样式
		m_zd.DeleteAllItems();
		m_zd.ModifyStyle(0, LVS_REPORT);
		m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
		if (flag == 0) {
			//插入列,设置列字段名
			CString str_gradName[] = { _T("ID"),_T("预算"), _T("预期花费"), _T("start"), _T("end") };
			for (int i = 0; i < 5; i++)
			{
				m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 140, -1);
			}

			flag++;//保证只有第一次点击才会显示列名
		}

		//将数据库中的账单表显示出来
		CString m_id, m_yusuan, m_yqhf, m_start, m_end;
		//sql语句查询数据库
		CString str;
		str = _T("select * from yusuan where user_id=") + m_sqlid;
		char sql[100] = {};
		memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
		//开始查询
		mysql_real_query(sock, sql, (unsigned long)strlen(sql));
		result = mysql_store_result(sock); //mysql_free_result(result);
		while ((row = mysql_fetch_row(result)))
		{
			//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
			m_id = row[0];//账单表的第1列
			m_yusuan = row[2];
			m_yqhf = row[3];
			m_start = row[4];
			m_end = row[5];
			int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
			m_zd.SetItemText(nRow, 1, m_yusuan);
			m_zd.SetItemText(nRow, 2, m_yqhf);
			m_zd.SetItemText(nRow, 3, m_start);
			m_zd.SetItemText(nRow, 4, m_end);
			i++;//记录数据库访问到了第几行
		}
		//释放内存空间
		mysql_free_result(result);
		UpdateData(false);//将控件值更新到对话框
}


void Cyuqi::OnClickedZj()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_yusuan, m_yqhf, m_start, m_end;
	GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
	GetDlgItemText(IDC_yq, m_yusuan);
	GetDlgItemText(IDC_yqhf, m_yqhf);
	GetDlgItemText(IDC_start, m_start);
	GetDlgItemText(IDC_end, m_end);


	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into yusuan values(");
	strsql += m_id + _T(",") + m_sqlid + _T(",\'") + m_yusuan + _T("\',\'") + m_yqhf + _T("\',\'") + m_start + _T("\',\'") + m_end + _T("\')");

	//判断账单编号是否为空,若为空,则输出至少要输入账单编号
	if (m_id.IsEmpty())
	{
		MessageBox(_T("至少要输入ID编号"), _T("插入操作"), IDI_ICON1);
		return;
	}

	//判断插入数据是否失败,并且插入数据到数据库
	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("插入数据失败!"), _T("插入操作"), IDI_ICON1);
		return;
	}


	//将账单表更新到对话框上
	int nRow = m_zd.InsertItem(i, m_id);//插入行
	m_zd.SetItemText(nRow, 1, m_yusuan);//设置数据 
	m_zd.SetItemText(nRow, 2, m_yqhf);//设置数据
	m_zd.SetItemText(nRow, 3, m_start);//设置数据
	m_zd.SetItemText(nRow, 4, m_end);//设置数据
	i++;
	UpdateData(false);
}


void Cyuqi::OnBnClickedsc()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_yusuan, m_yqhf, m_start, m_end;
	GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
	GetDlgItemText(IDC_yq, m_yusuan);
	GetDlgItemText(IDC_yqhf, m_yqhf);
	GetDlgItemText(IDC_start, m_start);
	GetDlgItemText(IDC_end, m_end);

	/*if (m_id.IsEmpty())
	{
		MessageBox(_T("请输入要删除的ID!"), _T("删除操作"), IDI_ICON1);
		return;
	}*/

	CString strsql;//定义插入的sql语句
	strsql = _T("delete from yusuan where user_id=") + m_sqlid + _T(" and ");

	if (!m_id.IsEmpty()) {
		strsql += _T("id=") + m_id + _T(" and ");
	}
	if (!m_yusuan.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T("yusuan=") + m_yusuan + _T(" and ");
	}
	if (!m_yqhf.IsEmpty() && (!m_id.IsEmpty())) {

		strsql += _T("yuqi=") + m_yqhf + _T(" and ");
	}
	if (!m_start.IsEmpty() && (!m_id.IsEmpty())) {
	
		strsql += _T("start=\'") + m_start + _T("\'") + _T(" and ");
	}
	if (!m_end.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T("end=\'") + m_end + _T("\'") + _T(" and ");
	}

	//MessageBox(strsql);
	int nLength = strsql.GetLength();
	strsql = strsql.Left(nLength - 5);

	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
		return;
	}

	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
	//sql语句查询数据库
	CString str;
	str = _T("select * from yusuan where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_yusuan = row[2];
		m_yqhf = row[3];
		m_start = row[4];
		m_end = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_yusuan);
		m_zd.SetItemText(nRow, 2, m_yqhf);
		m_zd.SetItemText(nRow, 3, m_start);
		m_zd.SetItemText(nRow, 4, m_end);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框

}


void Cyuqi::OnBnClickedxg()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_yusuan, m_yqhf, m_start, m_end;
	GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
	GetDlgItemText(IDC_yq, m_yusuan);
	GetDlgItemText(IDC_yqhf, m_yqhf);
	GetDlgItemText(IDC_start, m_start);
	GetDlgItemText(IDC_end, m_end);

	CString strsql;//定义插入的sql语句
	strsql = _T("update yusuan set ");
	int wqq = 0;

	//sql语句拼接
	if (!m_yusuan.IsEmpty()) {
		strsql += _T("yusuan=\'") + m_yusuan + _T("\'"); wqq++;
	}
	if (!m_yqhf.IsEmpty()) {
		if (wqq) {
			strsql += _T(",yuqi=\'") + m_yqhf + _T("\'"); wqq++;
		}
		else
			strsql += _T("yuqi=\'") + m_yqhf + _T("\'"); wqq++;
	}
	if (!m_start.IsEmpty()) {
		if (wqq)
		{
			strsql += _T(",start=\'") + m_start + _T("\'"); wqq++;
		}
		else
			strsql += _T("start=\'") + m_start + _T("\'"); wqq++;
	}
	if (!m_end.IsEmpty()) {
		if (wqq) {
			strsql += _T(",end=\'") + m_end + _T("\'"); wqq++;
		}
		else
			strsql += _T("end=\'") + m_end + _T("\'"); wqq++;
	}

	strsql += _T(" where user_id=") + m_sqlid + _T(" and id=") + m_id;
	//MessageBox(strsql);

	int res = mysql_query(sock, strsql);//执行sql语句
	if (res != 0)
	{
		MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
		return;
	}


	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
//sql语句查询数据库
	CString str;
	str = _T("select * from yusuan where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_yusuan = row[2];
		m_yqhf = row[3];
		m_start = row[4];
		m_end = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_yusuan);
		m_zd.SetItemText(nRow, 2, m_yqhf);
		m_zd.SetItemText(nRow, 3, m_start);
		m_zd.SetItemText(nRow, 4, m_end);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
	UpdateData(false);//将控件值更新到对话框
}


void Cyuqi::OnBnClickedcx()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_yusuan, m_yqhf, m_start, m_end;
	GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
	GetDlgItemText(IDC_yq, m_yusuan);
	GetDlgItemText(IDC_yqhf, m_yqhf);
	GetDlgItemText(IDC_start, m_start);
	GetDlgItemText(IDC_end, m_end);

	//拼接sql查询语句
	CString strsql;//定义插入的sql语句
	int wqq = 1;//记录是否有了第一个查询条件

	if (m_id.IsEmpty() && m_yusuan.IsEmpty() && m_yqhf.IsEmpty() && m_start.IsEmpty() && m_end.IsEmpty())
	{
		strsql = _T("select *from yusuan where user_id=") + m_sqlid;
	}
	else
	{
		strsql = _T("select *from yusuan where user_id = ") + m_sqlid + _T(" and ");
		if (!m_id.IsEmpty()) {
			strsql += _T("id=") + m_id + _T(" and ");
		}
		if (!m_yusuan.IsEmpty()) {
				strsql += _T("yusuan=\'") + m_yusuan + _T("\' and ");
		}
		if (!m_yqhf.IsEmpty()) {
				strsql += _T("yuqi=\'") + m_yqhf + _T("\' and ");
		}
		if (!m_start.IsEmpty()) {
				strsql += _T("start=\'") + m_start + _T("\' and ");
		}
		if (!m_end.IsEmpty()) {
				strsql += _T("end=\'") + m_end + _T("\' and ");
		}
	}
	//MessageBox(strsql);
	int nLength = strsql.GetLength();
	strsql = strsql.Left(nLength - 5);

	//删除列表控件中的数据
	int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
	m_zd.DeleteAllItems();//删除所有行的数据

	//根据sql语句查询数据库
	//查询数据库
	mysql_query(sock, strsql);
	//保存数据库中的信息
	//resultSet代表数据表中的每一行的数据
	MYSQL_RES* resultSet = mysql_store_result(sock);

	//如果数据库中的没有对应的信息的话
	if (!resultSet)
	{
		//可能是数据出现错误
		MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
		return;
	}

	//弹出提示信息
	if (mysql_num_rows(resultSet) <= 0)
	{
		MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
		return;
	}

	//插入数据
	int nRow = 0;
	MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
	while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
	{
		int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
		for (int i = 0; i < nField; i++)
		{
			if (i == 0)
			{
				m_zd.InsertItem(nRow, row[i]);//插入第一列
			}
			else
			{
				m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
			}
		}
		nRow++;
	}
	mysql_free_result(resultSet);
}

7.5查看用户信息

//查看用户信息
void CMyView::Onxinxi() 
{
	// TODO: Add your command handler code here
	Cxinxi dlg;
	dlg.m_id = u_id;
	dlg.m_mz = u_name;
	dlg.m_password = u_password;
	dlg.m_sex = u_sex;
	if(dlg.DoModal()==IDOK)
	{

	}
}
void Cxinxi::OnBnClickedxsxx()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(false);
}

7.6增加借入借出

//增加借入
void CMyView::Onjieru() 
{
	// TODO: Add your command handler code here
	Cjieru dlg;
	dlg.u_id = u_id;
	if(dlg.DoModal()==IDOK)
	{
			
		}
	}

//增加借出
void CMyView::Onjiechu() 
{
	// TODO: Add your command handler code here
	Cjiechu dlg;
	dlg.u_id = u_id;
	if(dlg.DoModal()==IDOK)
	{
		
	}
}
GetDlgItemText(IDC_ajrid, m_id);//获得控件的文本
	GetDlgItemText(IDC_ajrrq, m_shijian);
	GetDlgItemText(IDC_ajrje, m_jine);
	GetDlgItemText(IDC_ajrr, m_people);
	GetDlgItemText(IDC_ajrbz, m_beizhu);

	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into jieru values(");
	strsql += m_id + _T(",") + u_id + _T(",\'") + m_shijian + _T("\',\'") + m_jine + _T("\',\'") + m_people + _T("\',\'") + m_beizhu + _T("\')");
	//MessageBox(strsql);

	//判断账单编号是否为空,若为空,则输出至少要输入账单编号
	if (m_id.IsEmpty())
	{
		MessageBox(_T("至少要输入ID编号"), _T("插入操作"), IDI_ICON1);
		return;
	}

	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
		return;
	}
	//判断插入数据是否失败,并且插入数据到数据库
	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}
GetDlgItemText(IDC_ajcid, m_id);//获得控件的文本
	GetDlgItemText(IDC_ajcrq, m_shijian);
	GetDlgItemText(IDC_ajcje, m_jine);
	GetDlgItemText(IDC_ajcr, m_people);
	GetDlgItemText(IDC_ajcbz, m_beizhu);

	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into jiechu values(");
	strsql += m_id + _T(",") + u_id + _T(",\'") + m_shijian + _T("\',\'") + m_jine + _T("\',\'") + m_people + _T("\',\'") + m_beizhu + _T("\')");
	//MessageBox(strsql);

	//判断账单编号是否为空,若为空,则输出至少要输入账单编号
	if (m_id.IsEmpty())
	{
		MessageBox(_T("至少要输入ID编号"), _T("插入操作"), IDI_ICON1);
		return;
	}

	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
		return;
	}

	//判断插入数据是否失败,并且插入数据到数据库
	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}

7.7切换背景

//风景背景,循环加一
void CMyView::Onfjbkg() 
{
	// TODO: Add your command handler code here
	
	fflag=1;
	fjbkg=fjbkg%9+1;
	Invalidate();
}

//动漫背景,循环加一
void CMyView::Ondmbkg() 
{
	// TODO: Add your command handler code here
	
	fflag=2;
	dmbkg=dmbkg%9+10;
	Invalidate();
}

//可爱背景,循环加一
void CMyView::Onkabkg() 
{
	// TODO: Add your command handler code here
	
	fflag=3;
	kabkg=kabkg%6+19;
	Invalidate();
}

//简单背景,循环加一
void CMyView::Onjdbkg() 
{
	// TODO: Add your command handler code here
	
	fflag=4;
	jdbkg=jdbkg%18+25;
	Invalidate();
}

7.8切换音乐

//打开借口音乐
void CMyView::Onjk() 
{
	// TODO: Add your command handler code here
	sndPlaySound("res\\jk.wav",SND_ASYNC|SND_LOOP);
}

//打开开不了口音乐
void CMyView::Onkblk() 
{
	// TODO: Add your command handler code here
	sndPlaySound("res\\kblk.wav",SND_ASYNC|SND_LOOP);
}

//打开女孩音乐
void CMyView::Onnh() 
{
	// TODO: Add your command handler code here
	sndPlaySound("res\\nh.wav",SND_ASYNC|SND_LOOP);
}

//打开海绵宝宝音乐
void CMyView::Onhmbb() 
{
	// TODO: Add your command handler code here
	sndPlaySound("res\\hmbb.wav",SND_ASYNC|SND_LOOP);
}

//关闭音乐
void CMyView::Ongbgm() 
{
	// TODO: Add your command handler code here
	sndPlaySound(NULL,SND_SYNC);
}

7.9用户注册

//用户注册对话框
void CMyView::Onzhuce() 
{
	// TODO: Add your command handler code here
	Czhuce dlg;
	if(dlg.DoModal()==IDOK)
	{
		
	}
}
GetDlgItemText(IDC_zcid, m_id);//获得控件的文本
	GetDlgItemText(IDC_zcmz, m_name);
	GetDlgItemText(IDC_zcmm, m_mima);

	//判断账单编号是否为空,若为空,则输出至少要输入账单编号
	if (m_id.IsEmpty()&& m_mima.IsEmpty())
	{
		MessageBox(_T("请输入用户ID和密码"), _T("注册"), IDI_ICON1);
	}
	else if(m_id.IsEmpty())
		MessageBox(_T("请输入用户ID"), _T("注册"), IDI_ICON1);
	else if(m_mima.IsEmpty())
		MessageBox(_T("请输入用户密码"), _T("注册"), IDI_ICON1);
	else {

			UpdateData(true);
			CString sex;
			switch (m_sex)
			{
			case 0:sex = _T("男"); break;
			case 1:sex = _T("女"); break;
			default:
				break;
			}

			//插入操作 
			CString strsql;//定义插入的sql语句
			strsql = _T("insert into user values(");
			strsql += m_id + _T(",\'") + m_name + _T("\',\'") + m_mima + _T("\',\'") + sex + _T("\')");
			//MessageBox(strsql);

			//判断插入数据是否失败,并且插入数据到数据库
			if (mysql_query(sock, strsql))
			{
				MessageBox(_T("注册失败:ID已经存在,或者ID错误"), _T("注册"), IDI_ICON1);
			}
	}

7.10打开用户、账单、借入、借出、预算表

//打开账本对话框,进行增删改查
void CMyView::Onzhangben()
{
	// TODO: 在此添加命令处理程序代码

	Czhangdan dlg;
	dlg.m_sqlid = u_id;
	if (dlg.DoModal() == IDOK)
	{
		dlg.flag = 0;
	}
}

//打开借入表对话框,进行增删改查
void CMyView::Onjrb()
{
	// TODO: 在此添加命令处理程序代码

	Cjierubiao dlg;
	dlg.m_sqlid = u_id;

	if (dlg.DoModal() == IDOK)
	{
		dlg.flag = 0;
	}
}

//打开借出表对话框,进行增删改查
void CMyView::Onjcb()
{
	// TODO: 在此添加命令处理程序代码
	Cjiechubiao dlg;
	dlg.m_sqlid = u_id;

	if (dlg.DoModal() == IDOK)
	{
		dlg.flag = 0;
	}
}

//打开预算对话框,进行增删改查
void CMyView::Onysb()
{
	// TODO: 在此添加命令处理程序代码
	Cyuqi dlg;
	dlg.m_sqlid = u_id;

	if (dlg.DoModal() == IDOK)
	{

	}
}
void Cjiechubiao::OnClickedXszd()
{
	// TODO: 在此添加控件通知处理程序代码

	//只有第一次点击显示账单按钮,才会显示列名

		//初始化列表控件样式
		m_zd.DeleteAllItems();
		m_zd.ModifyStyle(0, LVS_REPORT);
		m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

		if (flag == 0) {
			//插入列,设置列字段名
			CString str_gradName[] = { _T("ID"),_T("借出时间"), _T("金额"), _T("who借me"), _T("备注") };
			for (int i = 0; i < 5; i++)
			{
				m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 140, -1);
			}

			flag++;//保证只有第一次点击才会显示列名
		}

	//将数据库中的账单表显示出来
	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	//sql语句查询数据库
	CString str;
	str = _T("select * from jiechu where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_time = row[2];
		m_jine = row[3];
		m_beijieren = row[4];
		m_beizhu = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_time);
		m_zd.SetItemText(nRow, 2, m_jine);
		m_zd.SetItemText(nRow, 3, m_beijieren);
		m_zd.SetItemText(nRow, 4, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框

}


void Cjiechubiao::OnClickedZj()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	GetDlgItemText(IDC_jcid, m_id);//获得控件的文本
	GetDlgItemText(IDC_jcrq, m_time);
	GetDlgItemText(IDC_jcje, m_jine);
	GetDlgItemText(IDC_bjr, m_beijieren);
	GetDlgItemText(IDC_jcbz, m_beizhu);

	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into jiechu values(");
	strsql += m_id + _T(",") + m_sqlid + _T(",\'") + m_time + _T("\',\'") + m_jine + _T("\',\'") + m_beijieren + _T("\',\'") + m_beizhu + _T("\')");
	//MessageBox(strsql);

	//判断账单编号是否为空,若为空,则输出至少要输入账单编号
	if (m_id.IsEmpty())
	{
	}
	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{

		MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
		return;
	}

	//判断插入数据是否失败,并且插入数据到数据库
	int res = mysql_query(sock, strsql);//执行sql语句
	if (res!=0)
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}


	//将账单表更新到对话框上
	int nRow = m_zd.InsertItem(i, m_id);//插入行
	m_zd.SetItemText(nRow, 1, m_time);//设置数据 
	m_zd.SetItemText(nRow, 2, m_jine);//设置数据
	m_zd.SetItemText(nRow, 3, m_beijieren);//设置数据
	m_zd.SetItemText(nRow, 4, m_beizhu);//设置数据
	i++;
	UpdateData(false);
}


void Cjiechubiao::OnBnClickedsc()
{
	// TODO: 在此添加控件通知处理程序代码
	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	GetDlgItemText(IDC_jcid, m_id);//获得控件的文本
	GetDlgItemText(IDC_jcrq, m_time);
	GetDlgItemText(IDC_jcje, m_jine);
	GetDlgItemText(IDC_bjr, m_beijieren);

	CString strsql;//定义插入的sql语句
	strsql = _T("delete from jiechu where user_id=") + m_sqlid + _T(" and ");

	if (!m_id.IsEmpty()) {
		strsql += _T("id=") + m_id;
	}
	if (!m_time.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and time=\'") + m_time + _T("\'");
	}
	if (!m_jine.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and money=\'") + m_jine + _T("\'");
	}
	if (!m_beijieren.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and people=\'") + m_beijieren + _T("\'");
	}


	//判断删除条件是否为空

	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
		return;
	}


	m_zd.DeleteAllItems();

	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
	//sql语句查询数据库
	CString str;
	str = _T("select * from jiechu where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_time = row[2];
		m_jine = row[3];
		m_beijieren = row[4];
		m_beizhu = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_time);
		m_zd.SetItemText(nRow, 2, m_jine);
		m_zd.SetItemText(nRow, 3, m_beijieren);
		m_zd.SetItemText(nRow, 4, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
}



void Cjiechubiao::OnBnClickedxg()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	GetDlgItemText(IDC_jcid, m_id);//获得控件的文本
	GetDlgItemText(IDC_jcrq, m_time);
	GetDlgItemText(IDC_jcje, m_jine);
	GetDlgItemText(IDC_bjr, m_beijieren);
	GetDlgItemText(IDC_jcbz, m_beizhu);


	if (m_id.IsEmpty())
	{
		MessageBox(_T("请输入要修改的ID!"), _T("修改操作"), IDI_ICON1);
		return;
	}
	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("修改操作"), IDI_ICON1);
		return;
	}

	CString strsql;//定义插入的sql语句
	strsql = _T("update jiechu set ");
	int wqq = 0;
	//sql语句拼接
	if (!m_time.IsEmpty()) {
		strsql += _T("time=\'") + m_time + _T("\'"); wqq++;
	}
	if (!m_jine.IsEmpty()) {
		if (wqq) {
			strsql += _T(",money=\'") + m_jine + _T("\'"); wqq++;
		}
		else
			strsql += _T("money=\'") + m_jine + _T("\'"); wqq++;
	}
	if (!m_beijieren.IsEmpty()) {
		if (wqq)
		{
			strsql += _T(",people=\'") + m_beijieren + _T("\'"); wqq++;
		}
		else
			strsql += _T("people=\'") + m_beijieren + _T("\'"); wqq++;
	}
	if (!m_beizhu.IsEmpty()) {
		if (wqq) {
			strsql += _T(",beizhu=\'") + m_beizhu + _T("\'"); wqq++;
		}
		else
			strsql += _T("beizhu=\'") + m_beizhu + _T("\'"); wqq++;
	}

	strsql += _T(" where user_id=") + m_sqlid + _T(" and id=") + m_id;
	//MessageBox(strsql);

	int res = mysql_query(sock, strsql);//执行sql语句
	if (res != 0)
	{
		MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
		return;
	}


	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
//sql语句查询数据库
	CString str;
	str = _T("select * from jiechu where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_time = row[2];
		m_jine = row[3];
		m_beijieren = row[4];
		m_beizhu = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_time);
		m_zd.SetItemText(nRow, 2, m_jine);
		m_zd.SetItemText(nRow, 3, m_beijieren);
		m_zd.SetItemText(nRow, 4, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
}


void Cjiechubiao::OnBnClickedcx()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	GetDlgItemText(IDC_jcid, m_id);//获得控件的文本
	GetDlgItemText(IDC_jcrq, m_time);
	GetDlgItemText(IDC_jcje, m_jine);
	GetDlgItemText(IDC_bjr, m_beijieren);
	GetDlgItemText(IDC_jcbz, m_beizhu);

	//拼接sql查询语句
	CString strsql;//定义插入的sql语句
	int wqq = 1;//记录是否有了第一个查询条件

	if (m_id.IsEmpty() && m_time.IsEmpty() && m_jine.IsEmpty() && m_beijieren.IsEmpty() && m_beizhu.IsEmpty())
	{
		strsql = _T("select *from jiechu where user_id=") + m_sqlid;
	}
	else
	{
		strsql = _T("select *from jiechu where user_id = ") + m_sqlid + _T(" and ");
		if (!m_id.IsEmpty()) {
			strsql += _T("id=") + m_id + _T(" and ");
		}
		if (!m_time.IsEmpty()) {
				strsql += _T("time=\'") + m_time + _T("\' and ");
		}
		if (!m_jine.IsEmpty()) {
				strsql += _T("money=\'") + m_jine + _T("\' and ");
		}
		if (!m_beijieren.IsEmpty()) {
				strsql += _T("people=\'") + m_beijieren + _T("\' and ");
		}
		if (!m_beizhu.IsEmpty()) {
				strsql += _T("beizhu=\'") + m_beizhu + _T("\' and ");
		}
	}
	//MessageBox(strsql);
	int nLength = strsql.GetLength();
	strsql = strsql.Left(nLength - 5);

	//删除列表控件中的数据
	int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
	m_zd.DeleteAllItems();//删除所有行的数据

	//根据sql语句查询数据库
	//查询数据库
	mysql_query(sock, strsql);
	//保存数据库中的信息
	//resultSet代表数据表中的每一行的数据
	MYSQL_RES* resultSet = mysql_store_result(sock);

	//如果数据库中的没有对应的信息的话
	if (!resultSet)
	{
		//可能是数据出现错误
		MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
		return;
	}

	//弹出提示信息
	if (mysql_num_rows(resultSet) <= 0)
	{
		MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
		return;
	}

	//插入数据
	int nRow = 0;
	MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
	while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
	{
		int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
		for (int i = 0; i < nField; i++)
		{
			if (i == 0)
			{
				m_zd.InsertItem(nRow, row[i]);//插入第一列
			}
			else
			{
				m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
			}
		}
		nRow++;
	}
	mysql_free_result(resultSet);
}
void Cjierubiao::OnClickedXsjr()
{
	// TODO: 在此添加控件通知处理程序代码


	//只有第一次点击显示账单按钮,才会显示列名

		//初始化列表控件样式
		m_zd.DeleteAllItems();
		m_zd.ModifyStyle(0, LVS_REPORT);
		m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
		if (flag == 0) {
			//插入列,设置列字段名
			CString str_gradName[] = { _T("ID"),_T("借入时间"), _T("金额"), _T("借出方"), _T("备注") };
			for (int i = 0; i < 5; i++)
			{
				m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 140, -1);
			}

			flag++;//保证只有第一次点击才会显示列名
		}

	//将数据库中的账单表显示出来
	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;

	//sql语句查询数据库
	CString str;
	str = _T("select * from jieru where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));

	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_time = row[2];
		m_jine = row[3];
		m_beijieren = row[4];
		m_beizhu = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_time);
		m_zd.SetItemText(nRow, 2, m_jine);
		m_zd.SetItemText(nRow, 3, m_beijieren);
		m_zd.SetItemText(nRow, 4, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
}


void Cjierubiao::OnClickedZj()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	GetDlgItemText(IDC_jrid, m_id);//获得控件的文本
	GetDlgItemText(IDC_jrrq, m_time);
	GetDlgItemText(IDC_jrje, m_jine);
	GetDlgItemText(IDC_bjr, m_beijieren);
	GetDlgItemText(IDC_jrbz, m_beizhu);

	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into jieru values(");
	strsql +=m_id + _T(",") + m_sqlid + _T(",\'") + m_time + _T("\',\'") + m_jine + _T("\',\'") + m_beijieren + _T("\',\'") + m_beizhu + _T("\')");
	//MessageBox(strsql);

	//判断账单编号是否为空,若为空,则输出至少要输入账单编号
	if (m_id.IsEmpty())
	{
		MessageBox(_T("至少要输入账单编号"), _T("插入操作"), IDI_ICON1);
		return;
	}
	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
		return;
	}
	//判断插入数据是否失败,并且插入数据到数据库
	int res = mysql_query(sock, strsql);//执行sql语句
	if (res!=0)
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}


	//将账单表更新到对话框上
	int nRow = m_zd.InsertItem(i, m_id);//插入行
	m_zd.SetItemText(nRow, 1, m_time);//设置数据 
	m_zd.SetItemText(nRow, 2, m_jine);//设置数据
	m_zd.SetItemText(nRow, 3, m_beijieren);//设置数据
	m_zd.SetItemText(nRow, 4, m_beizhu);//设置数据
	i++;
	UpdateData(false);
}


void Cjierubiao::OnBnClickedsc()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	GetDlgItemText(IDC_jrid, m_id);//获得控件的文本
	GetDlgItemText(IDC_jrrq, m_time);
	GetDlgItemText(IDC_jrje, m_jine);
	GetDlgItemText(IDC_bjr, m_beijieren);
	GetDlgItemText(IDC_jrbz, m_beizhu);

	CString strsql;//定义插入的sql语句
	strsql = _T("delete from jieru where user_id=") + m_sqlid + _T(" and ");

	if (!m_id.IsEmpty()) {
		strsql += _T("id=") + m_id;
	}
	if (!m_time.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and time=\'") + m_time + _T("\'");
	}
	if (!m_jine.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and money=\'") + m_jine + _T("\'");
	}
	if (!m_beijieren.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and people=\'") + m_beijieren + _T("\'");
	}


	//判断删除条件是否为空
	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
		return;
	}

	int res = mysql_query(sock, strsql);//执行sql语句
	if (res != 0)
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}

	m_zd.DeleteAllItems();

	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
	//sql语句查询数据库
	CString str;
	str = _T("select * from jieru where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));


	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_time = row[2];
		m_jine = row[3];
		m_beijieren = row[4];
		m_beizhu = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_time);
		m_zd.SetItemText(nRow, 2, m_jine);
		m_zd.SetItemText(nRow, 3, m_beijieren);
		m_zd.SetItemText(nRow, 4, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框

}


void Cjierubiao::OnBnClickedxg()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	GetDlgItemText(IDC_jrid, m_id);//获得控件的文本
	GetDlgItemText(IDC_jrrq, m_time);
	GetDlgItemText(IDC_jrje, m_jine);
	GetDlgItemText(IDC_bjr, m_beijieren);
	GetDlgItemText(IDC_jrbz, m_beizhu);


	if (m_id.IsEmpty())
	{
		MessageBox(_T("请输入要修改的ID!"), _T("修改操作"), IDI_ICON1);
		return;
	}
	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
		return;
	}
	
	CString strsql;//定义修改的sql语句
	strsql = _T("update jieru set ");
	int wqq = 0;
	//sql语句拼接
	if (!m_time.IsEmpty()) {
		strsql += _T("time=\'") + m_time + _T("\'"); wqq++;
	}
	if (!m_jine.IsEmpty()) {
		if (wqq) {
			strsql += _T(",money=\'") + m_jine + _T("\'"); wqq++;
		}
		else
			strsql += _T("money=\'") + m_jine + _T("\'"); wqq++;
	}
	if (!m_beijieren.IsEmpty()) {
		if (wqq)
		{
			strsql += _T(",people=\'") + m_beijieren + _T("\'"); wqq++;
		}
		else
			strsql += _T("people=\'") + m_beijieren + _T("\'"); wqq++;
	}
	if (!m_beizhu.IsEmpty()) {
		if (wqq) {
			strsql += _T(",beizhu=\'") + m_beizhu + _T("\'"); wqq++;
		}
		else
			strsql += _T("beizhu=\'") + m_beizhu + _T("\'"); wqq++;
	}

	strsql += _T(" where user_id=")+ m_sqlid + _T(" and id=")+ m_id;
	//MessageBox(strsql);

	int res = mysql_query(sock, strsql);//执行sql语句
	if (res != 0)
	{
		MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
		return;
	}


	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
//sql语句查询数据库
	CString str;
	str = _T("select * from jieru where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));

	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_time = row[2];
		m_jine = row[3];
		m_beijieren = row[4];
		m_beizhu = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_time);
		m_zd.SetItemText(nRow, 2, m_jine);
		m_zd.SetItemText(nRow, 3, m_beijieren);
		m_zd.SetItemText(nRow, 4, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框

}


void Cjierubiao::OnBnClickedcx()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
	GetDlgItemText(IDC_jrid, m_id);//获得控件的文本
	GetDlgItemText(IDC_jrrq, m_time);
	GetDlgItemText(IDC_jrje, m_jine);
	GetDlgItemText(IDC_bjr, m_beijieren);
	GetDlgItemText(IDC_jrbz, m_beizhu);

	//拼接sql查询语句
	CString strsql;//定义插入的sql语句
	int wqq = 1;//记录是否有了第一个查询条件

	if (m_id.IsEmpty() && m_time.IsEmpty() && m_jine.IsEmpty() && m_beijieren.IsEmpty() && m_beizhu.IsEmpty())
	{
		strsql = _T("select *from jieru where user_id=") + m_sqlid;
	}
	else
	{
		strsql = _T("select *from jieru where user_id = ") + m_sqlid + _T(" and ");
		if (!m_id.IsEmpty()) {
			strsql += _T("id=") + m_id + _T(" and ");
		}
		if (!m_time.IsEmpty()) {
				strsql += _T("time=\'") + m_time + _T("\' and ");
		}
		if (!m_jine.IsEmpty()) {
				strsql += _T("money=\'") + m_jine + _T("\' and ");
		}
		if (!m_beijieren.IsEmpty()) {
				strsql += _T("people=\'") + m_beijieren + _T("\' and ");
		}
		if (!m_beizhu.IsEmpty()) {
				strsql += _T("beizhu=\'") + m_beizhu + _T("\' and ");
		}
	}
	//MessageBox(strsql);
		int nLength = strsql.GetLength();
		strsql = strsql.Left(nLength - 5);

	//删除列表控件中的数据
	int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
	m_zd.DeleteAllItems();//删除所有行的数据

	//根据sql语句查询数据库
	//查询数据库
	mysql_query(sock, strsql);
	//保存数据库中的信息
	//resultSet代表数据表中的每一行的数据
	MYSQL_RES* resultSet = mysql_store_result(sock);

	//如果数据库中的没有对应的信息的话
	if (!resultSet)
	{
		//可能是数据出现错误
		MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
		return;
	}

	//弹出提示信息
	if (mysql_num_rows(resultSet) <= 0)
	{
		MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
		return;
	}

	//插入数据
	int nRow = 0;
	MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
	while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
	{
		int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
		for (int i = 0; i < nField; i++)
		{
			if (i == 0)
			{
				m_zd.InsertItem(nRow, row[i]);//插入第一列
			}
			else
			{
				m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
			}
		}
		nRow++;
	}
	mysql_free_result(resultSet);
}
void Cuserbiao::OnBnClickedxsu()
{
	// TODO: 在此添加控件通知处理程序代码

	//只有第一次点击显示账单按钮,才会显示列名

		//初始化列表控件样式
		m_zd.DeleteAllItems();
		m_zd.ModifyStyle(0, LVS_REPORT);
		m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
		if (flag == 0) {
			//插入列,设置列字段名
			CString str_gradName[] = { _T("ID"),_T("用户名"), _T("密码"), _T("性别") };
			for (int i = 0; i < 4; i++)
			{
				m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 180, -1);
			}

			flag++;//保证只有第一次点击才会显示列名
		}

	//将数据库中的账单表显示出来
		CString m_id, m_name, m_mima, m_sex;
		//sql语句查询数据库
		char sql[100] = "select * from user";
		//开始查询
		mysql_real_query(sock, sql, (unsigned long)strlen(sql));
		result = mysql_store_result(sock); //mysql_free_result(result);
		while ((row = mysql_fetch_row(result)))
		{
			//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
			m_id = row[0];//账单表的第1列
			m_name = row[1];
			m_mima = row[2];
			m_sex = row[3];
			int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
			m_zd.SetItemText(nRow, 1, m_name);
			m_zd.SetItemText(nRow, 2, m_mima);
			m_zd.SetItemText(nRow, 3, m_sex);
			i++;//记录数据库访问到了第几行
		}
		//释放内存空间
		mysql_free_result(result);
		UpdateData(false);//将控件值更新到对话框
}


void Cuserbiao::OnBnClickedzj()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_name, m_mima, m_sex;
	GetDlgItemText(IDC_uid, m_id);//获得控件的文本
	GetDlgItemText(IDC_umz, m_name);
	GetDlgItemText(IDC_umm, m_mima);
	GetDlgItemText(IDC_usex, m_sex);


	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into user values(");
	strsql += m_id + _T(",\'") + m_name + _T("\',\'") + m_mima + _T("\',\'") + m_sex + _T("\')");
	//MessageBox(strsql);

	//判断账单编号是否为空,若为空,则输出至少要输入账单编号
	if (m_id.IsEmpty())
	{
		MessageBox(_T("至少要输入账单编号"), _T("插入操作"), IDI_ICON1);
		return;
	}

	//判断插入数据是否失败,并且插入数据到数据库
	int res = mysql_query(sock, strsql);//执行sql语句
	if (res != 0)
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}


	//将账单表更新到对话框上
	int nRow = m_zd.InsertItem(i, m_id);//插入行
	m_zd.SetItemText(nRow, 1, m_name);//设置数据 
	m_zd.SetItemText(nRow, 2, m_mima);//设置数据
	m_zd.SetItemText(nRow, 3, m_sex);//设置数据
	i++;
	UpdateData(false);
}


void Cuserbiao::OnBnClickedsc()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_name, m_mima, m_sex;
	GetDlgItemText(IDC_uid, m_id);//获得控件的文本
	GetDlgItemText(IDC_umz, m_name);
	GetDlgItemText(IDC_umm, m_mima);
	GetDlgItemText(IDC_usex, m_sex);

	CString strsql;//定义插入的sql语句
	strsql = _T("delete from user where ");

	if (!m_id.IsEmpty()) {
		strsql += _T("user_id=") + m_id;
	}
	if (!m_name.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and user_name=\'") + m_name + _T("\'");
	}
	if (!m_mima.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and user_password=\'") + m_mima + _T("\'");
	}
	if (!m_sex.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T(" and user_sex=\'") + m_sex + _T("\'");
	}


	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
		return;
	}

	m_zd.DeleteAllItems();

	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	char sql[100] = "select * from user";
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_name = row[1];
		m_mima = row[2];
		m_sex = row[3];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_name);
		m_zd.SetItemText(nRow, 2, m_mima);
		m_zd.SetItemText(nRow, 3, m_sex);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
}


//修改
void Cuserbiao::OnBnClickedxg()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_name, m_mima, m_sex;
	GetDlgItemText(IDC_uid, m_id);//获得控件的文本
	GetDlgItemText(IDC_umz, m_name);
	GetDlgItemText(IDC_umm, m_mima);
	GetDlgItemText(IDC_usex, m_sex);

	if (m_id.IsEmpty())
	{
		MessageBox(_T("请输入要修改的ID!"), _T("修改操作"), IDI_ICON1);
		return;
	}

	m_id, m_name, m_mima, m_sex;
	CString strsql;//定义插入的sql语句
	strsql = _T("update user set ");
	int wqq = 0;

	//sql语句拼接
	if (!m_name.IsEmpty()) {
		strsql += _T("user_name=\'") + m_name + _T("\'"); wqq++;
	}
	if (!m_mima.IsEmpty()) {
		if (wqq) {
			strsql += _T(",user_password=\'") + m_mima + _T("\'"); wqq++;
		}
		else
			strsql += _T("user_password=\'") + m_mima + _T("\'"); wqq++;
	}
	if (!m_sex.IsEmpty()) {
		if (wqq)
		{
			strsql += _T(",user_sex=\'") + m_sex + _T("\'"); wqq++;
		}
		else
			strsql += _T("user_sex=\'") + m_sex + _T("\'"); wqq++;
	}
	strsql += _T(" where user_id=") + m_id;
	//MessageBox(strsql);

	int res = mysql_query(sock, strsql);//执行sql语句
	if (res != 0)
	{
		MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
		return;
	}

	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	char sql[100] = "select * from user";
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_name = row[1];
		m_mima = row[2];
		m_sex = row[3];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_name);
		m_zd.SetItemText(nRow, 2, m_mima);
		m_zd.SetItemText(nRow, 3, m_sex);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
}


void Cuserbiao::OnBnClickedcx()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_name, m_mima, m_sex;
	GetDlgItemText(IDC_uid, m_id);//获得控件的文本
	GetDlgItemText(IDC_umz, m_name);
	GetDlgItemText(IDC_umm, m_mima);
	GetDlgItemText(IDC_usex, m_sex);

	//拼接sql查询语句
	CString strsql;//定义插入的sql语句
	int wqq = 0;//记录是否有了第一个查询条件

	m_id, m_name, m_mima, m_sex;
	if (m_id.IsEmpty() && m_name.IsEmpty() && m_mima.IsEmpty() && m_sex.IsEmpty())
	{
		strsql = _T("select *from user");
	}
	else
	{
		strsql = _T("select *from user where");
		if (!m_id.IsEmpty()) {
			strsql += _T(" user_id=") + m_id; wqq++;
		}
		if (!m_name.IsEmpty()) {
			if (wqq) {
				strsql += _T(" and user_name=\'") + m_name + _T("\'"); wqq++;
			}
			else
			{
				strsql += _T(" user_name=\'") + m_name + _T("\'"); wqq++;
			}
		}
		if (!m_mima.IsEmpty()) {
			if (wqq)
			{
				strsql += _T(" and user_password=\'") + m_mima + _T("\'"); wqq++;
			}
			else {
				strsql += _T(" user_password=\'") + m_mima + _T("\'"); wqq++;
			}
		}
		if (!m_sex.IsEmpty()) {
			if (wqq) {
				strsql += _T(" and user_sex=\'") + m_sex + _T("\'"); wqq++;
			}
			else
			{
				strsql += _T(" user_sex=\'") + m_sex + _T("\'"); wqq++;
			}
		}
	}
	//MessageBox(strsql);

	//删除列表控件中的数据
	int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
	m_zd.DeleteAllItems();//删除所有行的数据

	//根据sql语句查询数据库
	//查询数据库
	mysql_query(sock, strsql);
	//保存数据库中的信息
	//resultSet代表数据表中的每一行的数据
	MYSQL_RES* resultSet = mysql_store_result(sock);

	//如果数据库中的没有对应的信息的话
	if (!resultSet)
	{
		//可能是数据出现错误
		MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
		return;
	}

	//弹出提示信息
	if (mysql_num_rows(resultSet) <= 0)
	{
		MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
		return;
	}

	//插入数据
	int nRow = 0;
	MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
	while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
	{
		int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
		for (int i = 0; i < nField; i++)
		{
			if (i == 0)
			{
				m_zd.InsertItem(nRow, row[i]);//插入第一列
			}
			else
			{
				m_zd.SetItemText(nRow, i, row[i]);//插入第二三四列
			}
		}
		nRow++;
	}
	mysql_free_result(resultSet);
}
void Cyuqi::OnClickedXsys()
{
	// TODO: 在此添加控件通知处理程序代码

	//只有第一次点击显示账单按钮,才会显示列名

		//初始化列表控件样式
		m_zd.DeleteAllItems();
		m_zd.ModifyStyle(0, LVS_REPORT);
		m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
		if (flag == 0) {
			//插入列,设置列字段名
			CString str_gradName[] = { _T("ID"),_T("预算"), _T("预期花费"), _T("start"), _T("end") };
			for (int i = 0; i < 5; i++)
			{
				m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 140, -1);
			}

			flag++;//保证只有第一次点击才会显示列名
		}

		//将数据库中的账单表显示出来
		CString m_id, m_yusuan, m_yqhf, m_start, m_end;
		//sql语句查询数据库
		CString str;
		str = _T("select * from yusuan where user_id=") + m_sqlid;
		char sql[100] = {};
		memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
		//开始查询
		mysql_real_query(sock, sql, (unsigned long)strlen(sql));
		result = mysql_store_result(sock); //mysql_free_result(result);
		while ((row = mysql_fetch_row(result)))
		{
			//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
			m_id = row[0];//账单表的第1列
			m_yusuan = row[2];
			m_yqhf = row[3];
			m_start = row[4];
			m_end = row[5];
			int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
			m_zd.SetItemText(nRow, 1, m_yusuan);
			m_zd.SetItemText(nRow, 2, m_yqhf);
			m_zd.SetItemText(nRow, 3, m_start);
			m_zd.SetItemText(nRow, 4, m_end);
			i++;//记录数据库访问到了第几行
		}
		//释放内存空间
		mysql_free_result(result);
		UpdateData(false);//将控件值更新到对话框
}


void Cyuqi::OnClickedZj()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_yusuan, m_yqhf, m_start, m_end;
	GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
	GetDlgItemText(IDC_yq, m_yusuan);
	GetDlgItemText(IDC_yqhf, m_yqhf);
	GetDlgItemText(IDC_start, m_start);
	GetDlgItemText(IDC_end, m_end);


	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into yusuan values(");
	strsql += m_id + _T(",") + m_sqlid + _T(",\'") + m_yusuan + _T("\',\'") + m_yqhf + _T("\',\'") + m_start + _T("\',\'") + m_end + _T("\')");

	//判断账单编号是否为空,若为空,则输出至少要输入账单编号
	if (m_id.IsEmpty())
	{
		MessageBox(_T("至少要输入ID编号"), _T("插入操作"), IDI_ICON1);
		return;
	}

	//判断插入数据是否失败,并且插入数据到数据库
	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("插入数据失败!"), _T("插入操作"), IDI_ICON1);
		return;
	}


	//将账单表更新到对话框上
	int nRow = m_zd.InsertItem(i, m_id);//插入行
	m_zd.SetItemText(nRow, 1, m_yusuan);//设置数据 
	m_zd.SetItemText(nRow, 2, m_yqhf);//设置数据
	m_zd.SetItemText(nRow, 3, m_start);//设置数据
	m_zd.SetItemText(nRow, 4, m_end);//设置数据
	i++;
	UpdateData(false);
}


void Cyuqi::OnBnClickedsc()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_yusuan, m_yqhf, m_start, m_end;
	GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
	GetDlgItemText(IDC_yq, m_yusuan);
	GetDlgItemText(IDC_yqhf, m_yqhf);
	GetDlgItemText(IDC_start, m_start);
	GetDlgItemText(IDC_end, m_end);

	/*if (m_id.IsEmpty())
	{
		MessageBox(_T("请输入要删除的ID!"), _T("删除操作"), IDI_ICON1);
		return;
	}*/

	CString strsql;//定义插入的sql语句
	strsql = _T("delete from yusuan where user_id=") + m_sqlid + _T(" and ");

	if (!m_id.IsEmpty()) {
		strsql += _T("id=") + m_id + _T(" and ");
	}
	if (!m_yusuan.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T("yusuan=") + m_yusuan + _T(" and ");
	}
	if (!m_yqhf.IsEmpty() && (!m_id.IsEmpty())) {

		strsql += _T("yuqi=") + m_yqhf + _T(" and ");
	}
	if (!m_start.IsEmpty() && (!m_id.IsEmpty())) {
	
		strsql += _T("start=\'") + m_start + _T("\'") + _T(" and ");
	}
	if (!m_end.IsEmpty() && (!m_id.IsEmpty())) {
		strsql += _T("end=\'") + m_end + _T("\'") + _T(" and ");
	}

	//MessageBox(strsql);
	int nLength = strsql.GetLength();
	strsql = strsql.Left(nLength - 5);

	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
		return;
	}

	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
	//sql语句查询数据库
	CString str;
	str = _T("select * from yusuan where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_yusuan = row[2];
		m_yqhf = row[3];
		m_start = row[4];
		m_end = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_yusuan);
		m_zd.SetItemText(nRow, 2, m_yqhf);
		m_zd.SetItemText(nRow, 3, m_start);
		m_zd.SetItemText(nRow, 4, m_end);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框

}


void Cyuqi::OnBnClickedxg()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_yusuan, m_yqhf, m_start, m_end;
	GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
	GetDlgItemText(IDC_yq, m_yusuan);
	GetDlgItemText(IDC_yqhf, m_yqhf);
	GetDlgItemText(IDC_start, m_start);
	GetDlgItemText(IDC_end, m_end);

	CString strsql;//定义插入的sql语句
	strsql = _T("update yusuan set ");
	int wqq = 0;

	//sql语句拼接
	if (!m_yusuan.IsEmpty()) {
		strsql += _T("yusuan=\'") + m_yusuan + _T("\'"); wqq++;
	}
	if (!m_yqhf.IsEmpty()) {
		if (wqq) {
			strsql += _T(",yuqi=\'") + m_yqhf + _T("\'"); wqq++;
		}
		else
			strsql += _T("yuqi=\'") + m_yqhf + _T("\'"); wqq++;
	}
	if (!m_start.IsEmpty()) {
		if (wqq)
		{
			strsql += _T(",start=\'") + m_start + _T("\'"); wqq++;
		}
		else
			strsql += _T("start=\'") + m_start + _T("\'"); wqq++;
	}
	if (!m_end.IsEmpty()) {
		if (wqq) {
			strsql += _T(",end=\'") + m_end + _T("\'"); wqq++;
		}
		else
			strsql += _T("end=\'") + m_end + _T("\'"); wqq++;
	}

	strsql += _T(" where user_id=") + m_sqlid + _T(" and id=") + m_id;
	//MessageBox(strsql);

	int res = mysql_query(sock, strsql);//执行sql语句
	if (res != 0)
	{
		MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
		return;
	}


	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
//sql语句查询数据库
	CString str;
	str = _T("select * from yusuan where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_yusuan = row[2];
		m_yqhf = row[3];
		m_start = row[4];
		m_end = row[5];
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_yusuan);
		m_zd.SetItemText(nRow, 2, m_yqhf);
		m_zd.SetItemText(nRow, 3, m_start);
		m_zd.SetItemText(nRow, 4, m_end);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
	UpdateData(false);//将控件值更新到对话框
}


void Cyuqi::OnBnClickedcx()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_yusuan, m_yqhf, m_start, m_end;
	GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
	GetDlgItemText(IDC_yq, m_yusuan);
	GetDlgItemText(IDC_yqhf, m_yqhf);
	GetDlgItemText(IDC_start, m_start);
	GetDlgItemText(IDC_end, m_end);

	//拼接sql查询语句
	CString strsql;//定义插入的sql语句
	int wqq = 1;//记录是否有了第一个查询条件

	if (m_id.IsEmpty() && m_yusuan.IsEmpty() && m_yqhf.IsEmpty() && m_start.IsEmpty() && m_end.IsEmpty())
	{
		strsql = _T("select *from yusuan where user_id=") + m_sqlid;
	}
	else
	{
		strsql = _T("select *from yusuan where user_id = ") + m_sqlid + _T(" and ");
		if (!m_id.IsEmpty()) {
			strsql += _T("id=") + m_id + _T(" and ");
		}
		if (!m_yusuan.IsEmpty()) {
				strsql += _T("yusuan=\'") + m_yusuan + _T("\' and ");
		}
		if (!m_yqhf.IsEmpty()) {
				strsql += _T("yuqi=\'") + m_yqhf + _T("\' and ");
		}
		if (!m_start.IsEmpty()) {
				strsql += _T("start=\'") + m_start + _T("\' and ");
		}
		if (!m_end.IsEmpty()) {
				strsql += _T("end=\'") + m_end + _T("\' and ");
		}
	}
	//MessageBox(strsql);
	int nLength = strsql.GetLength();
	strsql = strsql.Left(nLength - 5);

	//删除列表控件中的数据
	int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
	m_zd.DeleteAllItems();//删除所有行的数据

	//根据sql语句查询数据库
	//查询数据库
	mysql_query(sock, strsql);
	//保存数据库中的信息
	//resultSet代表数据表中的每一行的数据
	MYSQL_RES* resultSet = mysql_store_result(sock);

	//如果数据库中的没有对应的信息的话
	if (!resultSet)
	{
		//可能是数据出现错误
		MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
		return;
	}

	//弹出提示信息
	if (mysql_num_rows(resultSet) <= 0)
	{
		MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
		return;
	}

	//插入数据
	int nRow = 0;
	MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
	while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
	{
		int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
		for (int i = 0; i < nField; i++)
		{
			if (i == 0)
			{
				m_zd.InsertItem(nRow, row[i]);//插入第一列
			}
			else
			{
				m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
			}
		}
		nRow++;
	}
	mysql_free_result(resultSet);
}
void Czhangdan::OnClickedXszd()
{
	// TODO: 在此添加控件通知处理程序代码

	//只有第一次点击显示账单按钮,才会显示列名
	

		//初始化列表控件样式
		m_zd.DeleteAllItems();
		m_zd.ModifyStyle(0, LVS_REPORT);
		m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

		if (flag == 0) {
		//插入列,设置列字段名
		CString str_gradName[] = { _T("ID"),_T("类别"), _T("日期"), _T("收入"), _T("支出"), _T("备注") };
		for (int i = 0; i < 6; i++)
		{
			m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 115, -1);
		}
	
		flag++;//保证只有第一次点击才会显示列名
		}

	//将数据库中的账单表显示出来
	CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; 
	//sql语句查询数据库

	CString str;
	str=_T("select * from bill where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));

	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_leibie = row[2];//账单表的第3列
		m_riqi = row[3];//账单表的第4列
		m_shouru = row[4];//账单表的第5列
		m_zhichu = row[5];//账单表的第6列
		m_beizhu = row[6];//账单表的第7列
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_leibie);
		m_zd.SetItemText(nRow, 2, m_riqi);
		m_zd.SetItemText(nRow, 3, m_shouru);
		m_zd.SetItemText(nRow, 4, m_zhichu);
		m_zd.SetItemText(nRow, 5, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
	
}


void Czhangdan::OnClickedZj()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; // 定义6个属性,即对话框6个文本框的值
	GetDlgItemText(IDC_zdid, m_id);//获得控件的文本
	GetDlgItemText(IDB_zdlb, m_leibie);
	GetDlgItemText(IDC_zdrq, m_riqi);
	GetDlgItemText(IDC_zdsr, m_shouru);
	GetDlgItemText(IDC_zdzc, m_zhichu);
	GetDlgItemText(IDC_zdbz, m_beizhu);

	if (m_id.IsEmpty())
	{
		MessageBox(_T("请输入要增加的ID!"), _T("增加操作"), IDI_ICON1);
		return;
	}

	if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
		return;
	}

	//插入操作 
	CString strsql;//定义插入的sql语句
	strsql = _T("insert into bill values(");
	strsql += m_id + _T(",")+m_sqlid+_T(",\'") + m_leibie + _T("\',") + m_riqi + _T(",") + m_shouru + _T(",") + m_zhichu + _T(",\'") + m_beizhu + _T("\')");

	//判断插入数据是否失败,并且插入数据到数据库
	int res = mysql_query(sock, strsql);//执行sql语句
	if (res!=0)
	{
		MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
		return;
	}
	//将账单表更新到对话框上
	int nRow = m_zd.InsertItem(i, m_id);//插入行
	m_zd.SetItemText(nRow, 1, m_leibie);//设置数据 
	m_zd.SetItemText(nRow, 2, m_riqi);//设置数据
	m_zd.SetItemText(nRow, 3, m_shouru);//设置数据
	m_zd.SetItemText(nRow, 4, m_zhichu);//设置数据
	m_zd.SetItemText(nRow, 5, m_beizhu);//设置数据
	i++;
	UpdateData(false);

}


void Czhangdan::OnClickedSc()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; // 定义6个属性,即对话框6个文本框的值
	GetDlgItemText(IDC_zdid, m_id);//获得控件的文本
	GetDlgItemText(IDB_zdlb, m_leibie);
	GetDlgItemText(IDC_zdrq, m_riqi);
	GetDlgItemText(IDC_zdsr, m_shouru);
	GetDlgItemText(IDC_zdzc, m_zhichu);
	GetDlgItemText(IDC_zdbz, m_beizhu);

	//删除数据 delete from bill where id=1 and zhichu='122'
	CString strsql;//定义插入的sql语句
	strsql = _T("delete from bill where user_id=")+m_sqlid+_T(" and ");

	if (!m_id.IsEmpty()) {
		strsql +=_T("bill_id=")+m_id+_T(" and ");
	}
	if (!m_leibie.IsEmpty()) {
		strsql += _T("bill_sort=\'") + m_leibie+_T("\' and ");
	}
	if (!m_riqi.IsEmpty()) {
		strsql += _T("bill_date=\'") + m_riqi + _T("\' and ");
	}
	if (!m_shouru.IsEmpty()) {
		strsql += _T("bill_income=\'") + m_shouru + _T("\' and ");
	}
	if (!m_zhichu.IsEmpty()) {
		strsql += _T("bill_outcome=\'") + m_zhichu + _T("\' and ");
	}

	int nLength = strsql.GetLength();
	strsql = strsql.Left(nLength - 5);

	//MessageBox(strsql);


	//判断删除条件是否为空

	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
		return;
	}

	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

	//将数据库中的账单表显示出来
	//sql语句查询数据库
	CString str;
	str = _T("select * from bill where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));

	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_leibie = row[2];//账单表的第3列
		m_riqi = row[3];//账单表的第4列
		m_shouru = row[4];//账单表的第5列
		m_zhichu = row[5];//账单表的第6列
		m_beizhu = row[6];//账单表的第7列
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_leibie);
		m_zd.SetItemText(nRow, 2, m_riqi);
		m_zd.SetItemText(nRow, 3, m_shouru);
		m_zd.SetItemText(nRow, 4, m_zhichu);
		m_zd.SetItemText(nRow, 5, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
}


//修改数据操作
void Czhangdan::OnBnClickedxg()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; // 定义6个属性,即对话框6个文本框的值
	GetDlgItemText(IDC_zdid, m_id);//获得控件的文本
	GetDlgItemText(IDB_zdlb, m_leibie);
	GetDlgItemText(IDC_zdrq, m_riqi);
	GetDlgItemText(IDC_zdsr, m_shouru);
	GetDlgItemText(IDC_zdzc, m_zhichu);
	GetDlgItemText(IDC_zdbz, m_beizhu);

	if (m_id.IsEmpty())
	{
		MessageBox(_T("请输入要修改的ID!"),_T("修改操作"),IDI_ICON1);
		return;
	}

	if(!m_beizhu.IsEmpty()&&m_beizhu.GetLength()>50)
	{
		MessageBox(_T("备注不能超过50个字!"), _T("修改操作"), IDI_ICON1);
		return;
	}

	//修改
	CString strsql;//定义插入的sql语句
	strsql = _T("update bill set ");
	int wqq = 0;

	//sql语句拼接
	if (!m_leibie.IsEmpty()) {
		strsql += _T("bill_sort=\'") + m_leibie + _T("\'"); wqq++;
	}
	if (!m_riqi.IsEmpty()) {
		if (wqq) {
			strsql += _T(",bill_date=\'") + m_riqi + _T("\'"); wqq++;
		}
		else
			strsql += _T("bill_date=\'") + m_riqi + _T("\'"); wqq++;
	}
	if (!m_shouru.IsEmpty()) {
		if (wqq)
		{
			strsql += _T(",bill_income=\'") + m_shouru + _T("\'"); wqq++;
		}
		else
			strsql += _T("bill_income=\'") + m_shouru + _T("\'"); wqq++;
	}
	if (!m_zhichu.IsEmpty()) {
		if (wqq) {
			strsql += _T(",bill_outcome=\'") + m_zhichu + _T("\'"); wqq++;
		}
		else
			strsql += _T("bill_outcome=\'") + m_zhichu + _T("\'"); wqq++;
	}
	if (!m_beizhu.IsEmpty()) {
		if (wqq) {
			strsql += _T(",bill_beizhu=\'") + m_bz + _T("\'"); wqq++;
		}
		else
			strsql += _T("bill_beizhu=\'") + m_bz + _T("\'"); wqq++;
	}
	strsql += _T(" where user_id=") + m_sqlid + _T(" and bill_id=") + m_id;
	//MessageBox(strsql);

	if (mysql_query(sock, strsql))
	{
		MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
		return;
	}


	i = 0;
	//初始化列表控件样式
	m_zd.DeleteAllItems();
	m_zd.ModifyStyle(0, LVS_REPORT);
	m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);


	//将数据库中的账单表显示出来
	//sql语句查询数据库
	CString str;
	str = _T("select * from bill where user_id=") + m_sqlid;
	char sql[100] = {};
	memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));

	//开始查询
	mysql_real_query(sock, sql, (unsigned long)strlen(sql));
	result = mysql_store_result(sock); //mysql_free_result(result);
	while ((row = mysql_fetch_row(result)))
	{
		//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
		m_id = row[0];//账单表的第1列
		m_leibie = row[2];//账单表的第3列
		m_riqi = row[3];//账单表的第4列
		m_shouru = row[4];//账单表的第5列
		m_zhichu = row[5];//账单表的第6列
		m_beizhu = row[6];//账单表的第7列
		int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
		m_zd.SetItemText(nRow, 1, m_leibie);
		m_zd.SetItemText(nRow, 2, m_riqi);
		m_zd.SetItemText(nRow, 3, m_shouru);
		m_zd.SetItemText(nRow, 4, m_zhichu);
		m_zd.SetItemText(nRow, 5, m_beizhu);
		i++;//记录数据库访问到了第几行
	}
	//释放内存空间
	mysql_free_result(result);
	UpdateData(false);//将控件值更新到对话框
}

//查询功能
void Czhangdan::OnBnClickedcx()
{
	// TODO: 在此添加控件通知处理程序代码

	CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; // 定义6个属性,即对话框6个文本框的值
	GetDlgItemText(IDC_zdid, m_id);//获得控件的文本
	GetDlgItemText(IDB_zdlb, m_leibie);
	GetDlgItemText(IDC_zdrq, m_riqi);
	GetDlgItemText(IDC_zdsr, m_shouru);
	GetDlgItemText(IDC_zdzc, m_zhichu);
	GetDlgItemText(IDC_zdbz, m_beizhu);

	//拼接sql查询语句
	CString strsql;//定义插入的sql语句
	int wqq = 1;

	if (m_id.IsEmpty() && m_leibie.IsEmpty() && m_riqi.IsEmpty() && m_shouru.IsEmpty() && m_zhichu.IsEmpty() && m_beizhu.IsEmpty())
	{
		strsql = _T("select *from bill where user_id=") + m_sqlid;
	}
	else
	{
		strsql = _T("select *from bill where user_id = ") + m_sqlid + _T(" and ");
		if (!m_id.IsEmpty()) {
			strsql += _T("bill_id=") + m_id + _T(" and ");
		}
		if (!m_leibie.IsEmpty()) {
			strsql += _T("bill_sort=\'") + m_leibie + _T("\' and ");
		}
		if (!m_riqi.IsEmpty()) {
			strsql += _T("bill_date=\'") + m_riqi + _T("\' and ");
		}
		if (!m_shouru.IsEmpty()) {
			strsql += _T("bill_income=\'") + m_shouru + _T("\' and ");
		}
		if (!m_zhichu.IsEmpty()) {
			strsql += _T("bill_outcome=\'") + m_zhichu + _T("\' and ");
		}
		if (!m_beizhu.IsEmpty()) {
			strsql += _T("bill_id=\'") + m_beizhu + _T("\' and ");
		}
	}
		//MessageBox(strsql);
		int nLength = strsql.GetLength();
		strsql = strsql.Left(nLength - 5);

		//删除列表控件中的数据
		int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
		m_zd.DeleteAllItems();//删除所有行的数据

		//根据sql语句查询数据库
		//查询数据库
		mysql_query(sock, strsql);
		//保存数据库中的信息
		//resultSet代表数据表中的每一行的数据
		MYSQL_RES* resultSet = mysql_store_result(sock);

		//如果数据库中的没有对应的信息的话
		if (!resultSet)
		{
			//可能是数据出现错误
			MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
			return;
		}

		//弹出提示信息
		if (mysql_num_rows(resultSet) <= 0)
		{
			MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
			return;
		}

		//插入数据
		int nRow = 0;
		MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
		while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
		{
			int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
			for (int i = 0; i < nField; i++)
			{
				if (i == 0)
				{
					m_zd.InsertItem(nRow, row[i]);//插入第一列
				}
				else
				{
					m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
				}
			}
			nRow++;
		}
		mysql_free_result(resultSet);
	}

8页面展示

8.1、运初始界面

 

图 1:初始界面

8.2、管理员登陆

点击登录菜单的管理员登陆,输入账号ID和密码,若错误会提示你ID或密码错误,成功的话就弹出用户表,可以看到所有人的信息。管理员可以对用户信息进行新增、删除、修改、查讯,并且会自动更新数据库。

 

图 2:管理员登陆界面

 

图 3:登录成功弹出所有用户信息

8.3、用户登录

点击登录菜单的用户登陆,输入账号ID和密码,若错误会提示你ID或密码错误,成功的话就弹出登陆成功,可以进入用户记账系统,查看用户个人信息,对个人账单,预算,借入借出进行增删改查,并且会自动更新数据库。

 

图 4:用户登录界面

 

图 5:用户登录成功

 

图 6:查看用户个人信息

8.4、用户记账操作

8.4.1新增一笔支出

点击菜单项的记账下面的支出,可以新增加一笔支出,新增加的支出必须填写ID编号,否则会提示至少要输入ID。

 

图 7:新增一笔支出

8.4.2新增一笔收入

点击菜单项的记账下面的收入,可以新增加一笔收入,新增加的收入必须填写ID编号,否则会提示至少要输入ID。

 

图 8:新增一笔收入

8.4.3新增一笔借入

点击菜单项的借还下面的add 借入,可以新增加一笔借入,新增加的借入必须填写ID编号,否则会提示至少要输入ID。

 

图 9:新增一笔借入

8.4.4新增一笔借出

点击菜单项的借还下面的add 借出,可以新增加一笔借出,新增加的借出必须填写ID编号,否则会提示至少要输入ID。

 

图 10:新增一笔借出

8.4.5 对收入支出进行增删改查

点击菜单栏的账本,会弹出一个账单表,点击账单表的show账单,会显示本人的所有收入支出。

 

图 11:弹出账本

 

图 12:增删改查

8.4.6 对借入进行增删改查

点击菜单栏的借还中的借入表,会弹出一个借入表,点击借入表的show借入,会显示本人的所有借入。

 

图 13:弹出借入

 

图 14:增删改查

8.4.7 对借出进行增删改查

点击菜单栏的借还中的借出表,会弹出一个借出表,点击借出表的show借出,会显示本人的所有借出。

 

图 15:弹出借出

 

图 16:增删改查

8.4.8 对预算进行增删改查

点击菜单栏的预算表,会弹出一个预算表,点击预算表的show预算,会显示本人的所有预算。

 

图 17:弹出预算

 

图 18:增删改查

8.4、用户服务

用户可以根据喜好切换不同的背景以及打开不同音乐或者关掉音乐。其中背景分为4大类,风景、简单、可爱和动漫,每一种类别都有一定数量的图片。

 

图 19:切换不同背景

 

图 20:打开关闭音乐

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值