基于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 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的记账系统—好好记帐相关推荐
- 基于springBoot的记账系统
开发环境 idea+mysql8.0+jdk1.8 系统简介 本系统实现一个记账系统,用户登录系统以后,可以对自己的支出,收入,借入,借出账单进行管理,具体功能可看演示视频! 演示视频 基于sprin ...
- 基于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基本设计概念和处 ...
- Android记账系统可行性分析,毕业设计论文-基于安卓的大学生记账管理系统的设计与实现.doc...
毕业设计论文-基于安卓的大学生记账管理系统的设计与实现 毕 业 设 计 中文题目基于安卓的大学生记账管理系统的设计与Design and Implementation of theCollege St ...
- 基于Android的记账APP论文,基于Android平台的手机记账系统的设计与实现
摘要: 在经济社会中,"理财"一词对于人们来说已不再陌生.人们的生活收入稳步上升,用于工作,住房,休闲娱乐的财务支出增多,做好详细的收支计划,将有利于对个人,家庭的经济收入,支出状 ...
- 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: ...
- java记账系统,基于java记账管理系统
记账管理系统,,项目介绍,研究目标: 研究的目标主要包含以下几个方面: 1.实现对用户信息的信息化管理: 2.实现对财务信息的管理: 3.满足用户对于记账所需的基本要求: 研究内容: 本系统为用户提供 ...
- (微信小程序毕业设计)基于微信小程序便捷记账系统
基于微信小程序便捷记账系统 便捷记账系统用户端是基于微信小程序端,后端管理员是基于java编程语言,mysql数据库,idea开发工具,ssm框架开发,本系统分为用户和管理员两个角色,用户微信端可以注 ...
- 基于javaweb+jsp的大学生个人财务记账系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)
基于javaweb+jsp的大学生个人财务记账系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot) JavaWeb JavaBean JSP M ...
- 基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
基于javaweb+jsp的大学生个人财务记账系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap) 运行环境 Java≥8.MySQL≥5.7. ...
最新文章
- leetcode--买股票的最佳时机II--python
- 2020南大计科考研实记(受难三跨)
- Linux重定向的理解
- css3禅密花园叫什么名字_新生儿起名:2021元旦出生男孩叫什么名字
- 各大媒体优劣对比_信息流投放广告丨各大平台的信息流都有什么特点与弊端
- 台式电脑耳机插孔在哪_吉林戴尔电脑音箱维修app,查看详情_曹操闪修
- sklearn学习笔记之preprocessing
- Vue——B站黑马程序员教程
- 远程控制软件和木马的区别——病毒木马 001
- Windows: 如何调整C盘分区大小
- 2021年中国石油市场回顾及2022年行业发展趋势分析预测:2021年石油需求震荡修复,石油对外依存度首次下降,预计2022年石油需求7.35亿吨[图]
- Tensorrt7踩坑记录
- oracle 查看cdb,Oracle基础操作——CDB-PDB
- 我只用了3步,实现了一个逼真的3D场景渲染
- excel怎么设置打印区域_Excel数据太多,无法完整打印在一张纸上?你这样设置即可搞定...
- Android凉了也要看的面试题,2020年5月美团Android面试真题(三面
- LinuxProbe学习笔记(一)
- 搜索词联想功能实现方案
- 智能音箱背后的自然语言理解和知识图谱技术
- Java设置mysql字段为null_MySQL字段的属性应该尽量设置为NOT NULL