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 hereCuser 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 hereCguanliyuan 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 hereCzhichu dlg;dlg.u_id = u_id;if(dlg.DoModal()==IDOK){}
}//增加收入
void CMyView::Onshouru()
{// TODO: Add your command handler code hereCshouru 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 hereCyusuan 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,后面的用SetItemTextm_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,后面的用SetItemTextm_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++;}elsestrsql += _T("yuqi=\'") + m_yqhf + _T("\'"); wqq++;}if (!m_start.IsEmpty()) {if (wqq){strsql += _T(",start=\'") + m_start + _T("\'"); wqq++;}elsestrsql += _T("start=\'") + m_start + _T("\'"); wqq++;}if (!m_end.IsEmpty()) {if (wqq) {strsql += _T(",end=\'") + m_end + _T("\'"); wqq++;}elsestrsql += _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,后面的用SetItemTextm_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 hereCxinxi 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 hereCjieru dlg;dlg.u_id = u_id;if(dlg.DoModal()==IDOK){}}//增加借出
void CMyView::Onjiechu()
{// TODO: Add your command handler code hereCjiechu 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 herefflag=1;fjbkg=fjbkg%9+1;Invalidate();
}//动漫背景,循环加一
void CMyView::Ondmbkg()
{// TODO: Add your command handler code herefflag=2;dmbkg=dmbkg%9+10;Invalidate();
}//可爱背景,循环加一
void CMyView::Onkabkg()
{// TODO: Add your command handler code herefflag=3;kabkg=kabkg%6+19;Invalidate();
}//简单背景,循环加一
void CMyView::Onjdbkg()
{// TODO: Add your command handler code herefflag=4;jdbkg=jdbkg%18+25;Invalidate();
}

7.8切换音乐

//打开借口音乐
void CMyView::Onjk()
{// TODO: Add your command handler code heresndPlaySound("res\\jk.wav",SND_ASYNC|SND_LOOP);
}//打开开不了口音乐
void CMyView::Onkblk()
{// TODO: Add your command handler code heresndPlaySound("res\\kblk.wav",SND_ASYNC|SND_LOOP);
}//打开女孩音乐
void CMyView::Onnh()
{// TODO: Add your command handler code heresndPlaySound("res\\nh.wav",SND_ASYNC|SND_LOOP);
}//打开海绵宝宝音乐
void CMyView::Onhmbb()
{// TODO: Add your command handler code heresndPlaySound("res\\hmbb.wav",SND_ASYNC|SND_LOOP);
}//关闭音乐
void CMyView::Ongbgm()
{// TODO: Add your command handler code heresndPlaySound(NULL,SND_SYNC);
}

7.9用户注册

//用户注册对话框
void CMyView::Onzhuce()
{// TODO: Add your command handler code hereCzhuce 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,后面的用SetItemTextm_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,后面的用SetItemTextm_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++;}elsestrsql += _T("money=\'") + m_jine + _T("\'"); wqq++;}if (!m_beijieren.IsEmpty()) {if (wqq){strsql += _T(",people=\'") + m_beijieren + _T("\'"); wqq++;}elsestrsql += _T("people=\'") + m_beijieren + _T("\'"); wqq++;}if (!m_beizhu.IsEmpty()) {if (wqq) {strsql += _T(",beizhu=\'") + m_beizhu + _T("\'"); wqq++;}elsestrsql += _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,后面的用SetItemTextm_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,后面的用SetItemTextm_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,后面的用SetItemTextm_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++;}elsestrsql += _T("money=\'") + m_jine + _T("\'"); wqq++;}if (!m_beijieren.IsEmpty()) {if (wqq){strsql += _T(",people=\'") + m_beijieren + _T("\'"); wqq++;}elsestrsql += _T("people=\'") + m_beijieren + _T("\'"); wqq++;}if (!m_beizhu.IsEmpty()) {if (wqq) {strsql += _T(",beizhu=\'") + m_beizhu + _T("\'"); wqq++;}elsestrsql += _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,后面的用SetItemTextm_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,后面的用SetItemTextm_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,后面的用SetItemTextm_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++;}elsestrsql += _T("user_password=\'") + m_mima + _T("\'"); wqq++;}if (!m_sex.IsEmpty()) {if (wqq){strsql += _T(",user_sex=\'") + m_sex + _T("\'"); wqq++;}elsestrsql += _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,后面的用SetItemTextm_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,后面的用SetItemTextm_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,后面的用SetItemTextm_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++;}elsestrsql += _T("yuqi=\'") + m_yqhf + _T("\'"); wqq++;}if (!m_start.IsEmpty()) {if (wqq){strsql += _T(",start=\'") + m_start + _T("\'"); wqq++;}elsestrsql += _T("start=\'") + m_start + _T("\'"); wqq++;}if (!m_end.IsEmpty()) {if (wqq) {strsql += _T(",end=\'") + m_end + _T("\'"); wqq++;}elsestrsql += _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,后面的用SetItemTextm_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,后面的用SetItemTextm_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,后面的用SetItemTextm_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++;}elsestrsql += _T("bill_date=\'") + m_riqi + _T("\'"); wqq++;}if (!m_shouru.IsEmpty()) {if (wqq){strsql += _T(",bill_income=\'") + m_shouru + _T("\'"); wqq++;}elsestrsql += _T("bill_income=\'") + m_shouru + _T("\'"); wqq++;}if (!m_zhichu.IsEmpty()) {if (wqq) {strsql += _T(",bill_outcome=\'") + m_zhichu + _T("\'"); wqq++;}elsestrsql += _T("bill_outcome=\'") + m_zhichu + _T("\'"); wqq++;}if (!m_beizhu.IsEmpty()) {if (wqq) {strsql += _T(",bill_beizhu=\'") + m_bz + _T("\'"); wqq++;}elsestrsql += _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,后面的用SetItemTextm_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:打开关闭音乐

基于MFC的记账系统—好好记帐相关推荐

  1. 基于springBoot的记账系统

    开发环境 idea+mysql8.0+jdk1.8 系统简介 本系统实现一个记账系统,用户登录系统以后,可以对自己的支出,收入,借入,借出账单进行管理,具体功能可看演示视频! 演示视频 基于sprin ...

  2. 基于android的记账本论文,(毕业论文)基于安卓的记账本.doc

    目录 1.概述3 1.1 设计目标3 1.2 开发工具3 2 需求分析4 2.1系统功能:4 2.2系统功能描述:4 2.3系统用例图:5 2.4运行环境需求5 3 系统设计6 3.1基本设计概念和处 ...

  3. Android记账系统可行性分析,毕业设计论文-基于安卓的大学生记账管理系统的设计与实现.doc...

    毕业设计论文-基于安卓的大学生记账管理系统的设计与实现 毕 业 设 计 中文题目基于安卓的大学生记账管理系统的设计与Design and Implementation of theCollege St ...

  4. 基于Android的记账APP论文,基于Android平台的手机记账系统的设计与实现

    摘要: 在经济社会中,"理财"一词对于人们来说已不再陌生.人们的生活收入稳步上升,用于工作,住房,休闲娱乐的财务支出增多,做好详细的收支计划,将有利于对个人,家庭的经济收入,支出状 ...

  5. 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: ...

  6. java记账系统,基于java记账管理系统

    记账管理系统,,项目介绍,研究目标: 研究的目标主要包含以下几个方面: 1.实现对用户信息的信息化管理: 2.实现对财务信息的管理: 3.满足用户对于记账所需的基本要求: 研究内容: 本系统为用户提供 ...

  7. (微信小程序毕业设计)基于微信小程序便捷记账系统

    基于微信小程序便捷记账系统 便捷记账系统用户端是基于微信小程序端,后端管理员是基于java编程语言,mysql数据库,idea开发工具,ssm框架开发,本系统分为用户和管理员两个角色,用户微信端可以注 ...

  8. 基于javaweb+jsp的大学生个人财务记账系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)

    基于javaweb+jsp的大学生个人财务记账系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot) JavaWeb JavaBean JSP M ...

  9. 基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)

    基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap) 运行环境 Java≥8.MySQL≥5.7. ...

最新文章

  1. leetcode--买股票的最佳时机II--python
  2. 2020南大计科考研实记(受难三跨)
  3. Linux重定向的理解
  4. css3禅密花园叫什么名字_新生儿起名:2021元旦出生男孩叫什么名字
  5. 各大媒体优劣对比_信息流投放广告丨各大平台的信息流都有什么特点与弊端
  6. 台式电脑耳机插孔在哪_吉林戴尔电脑音箱维修app,查看详情_曹操闪修
  7. sklearn学习笔记之preprocessing
  8. Vue——B站黑马程序员教程
  9. 远程控制软件和木马的区别——病毒木马 001
  10. Windows: 如何调整C盘分区大小
  11. 2021年中国石油市场回顾及2022年行业发展趋势分析预测:2021年石油需求震荡修复,石油对外依存度首次下降,预计2022年石油需求7.35亿吨[图]
  12. Tensorrt7踩坑记录
  13. oracle 查看cdb,Oracle基础操作——CDB-PDB
  14. 我只用了3步,实现了一个逼真的3D场景渲染
  15. excel怎么设置打印区域_Excel数据太多,无法完整打印在一张纸上?你这样设置即可搞定...
  16. Android凉了也要看的面试题,2020年5月美团Android面试真题(三面
  17. LinuxProbe学习笔记(一)
  18. 搜索词联想功能实现方案
  19. 智能音箱背后的自然语言理解和知识图谱技术
  20. Java设置mysql字段为null_MySQL字段的属性应该尽量设置为NOT NULL

热门文章

  1. 微信小程序app.js调用wx.login
  2. php curl获取腾讯视频教程,获取腾讯视频M3U8下载地址
  3. 操作系统——假脱机技术
  4. 非常经典的JAVA编程题(水仙花数)
  5. SAP GUI 730 windows 免费下载
  6. Istio 解决的问题及注入
  7. python快速入门【五】---- 面向对象编程、python类
  8. Python笔记(1-20)
  9. [转]赴澳大利亚监督指导世界拉力锦标赛的工作报告
  10. 【硬件】P沟道和N沟道MOS管开关电路设计