1编写目的
从当今大学生的消费行为看,校园贷、月光族、卡奴等现象已不是新鲜事,这与消费升级的现状相背。大学生了解自己的消费结构并控制预算来买预期物品的愿望促生了记账需求,而在记账类APP市场上,较为知名的几款记账APP分别为鲨鱼记账、随手记、360记账挖财、圈子账本、网易有钱,但目前移动记账软件的核心仍是以消费后做记录为主,对事前消费起不到有效控制作用。我们设计的好好记账APP利用大数据技术创建一个大型数据库, 用于大学生日常记录个人财务借还情况、消费合理程度、计划未来开支、记录重大事项等内容具有重要意义,主要目标是为其理性消费、勤俭节约提供必要的劝导、指导和引导,我们设计的app有单独的借还页面,更加清晰明了学生之间日常消费的借还,进行消费合理化排序,实现大学生可支配额度效益最大化,改变大学生冲动消费与盲目消费的主观缺陷,创新实时追踪与动态调整机制,强化大学生消费的有效性。我们预期的读者是在读大学生、研究生等。
2目标
好好记账软件的目标锁定为“轻松上手、坚持记账”,不仅帮助用户改善自身的消费习惯,而且有助于提高理财能力、培养理财思维。“轻松上手”是通过简易设计的界面实现的,让记账更方便操作。“坚持记账”是建立在用户需求的基础上增加趣味元素,使用户对于网站的体验感更佳,进而形成记账习惯。
3用户的特点
好好记账软件主要使用用户的目标锁定为当代大学生,他们的主要特点是不善于理财、容易产生消费冲动、难以长时间记账、注重美观和个性化设计。用户使用本网站不仅可以培养理财思维,监测自身的消费状况,而且还能编辑账本内容,使用积分获取奖励。
4功能说明,用户,管理员总体功能说明:
管理员:可以通过成功登录管理员账号,弹出所有用户个人信息表,通过对用户信息进行增删改查来达到后台维护作用。可以通过查看用户信息,然后登陆用户账号对用户账本进行详细的增删改查。
用户:在没有注册用户帐号之前,先要注册一个用户账号。然后可以通过成功登录用户账号,进入用户界面。可以对收入,支出,借入,借出,预算进行增删改查,可以切换不同风格的背景,切换不同风格的音乐,并且可以查看个人信息,账号ID,用户名,密码和性别
5算法:
本程序需要对hhjz数据库进行操作,即对数据库中的账单表,借入表,借出表,预算表和用户表进行查询,修改,增加,删除。
查询:select *from bill(user或jieru或jiechu或yusuan) where +条件;
修改:update bill(user或jieru或jiechu或yusuan) set +修改内容+where +条件;
增加:insert into bill(user或jieru或jiechu或yusuan) values(属性值列表);
删除:delete from bill(user或jieru或jiechu或yusuan) where +条件;
循环累加:在用户切换背景时,用到的算法是循环累加。
6.1新增类
表4-1 新增加类列表
新增加类 | 说明 |
Cguanliyuan | 弹出管理员对话框,对管理员登陆进行验证 |
Cjiechu | 增加一笔借出 |
Cjiechubiao | 弹出借出表,对用户借出进行增删改查 |
Cshouru | 新增一笔收入 |
Cuser | 用户进行登录,对用户登陆进行验证 |
Cuserbiao | 弹出用户信息表,对用户信息进行增删改查 |
xinxi | 弹出用户信息对话框 |
Cyuqi | 弹出预算表,对用户预算进行增删改查 |
Czhangdan | 弹出账单表,对用户支出收入进行增删改查 |
Czhichu | 增加一笔支出 |
Czhuce | 弹出注册对话框,用户可以进行注册 |
6.2 新增成员变量
表4-2 新增成员变量列表
新增成员变量 | 类型 | 所属类 | 功能 |
id | CString | Cguanliyuan | 保存管理员id |
password | CString | Cguanliyuan | 保存管理员密码 |
m_id | CString | Cjiechu | 保存借出属性ID |
m_shijian | CString | Cjiechu | 保存借出属性时间 |
m_jine | CString | Cjiechu | 保存借出属性金额 |
m_people | CString | Cjiechu | 保存借出属性被借人 |
m_beizhu | CString | Cjiechu | 保存借出属性备注 |
u_id | CString | Cjiechu | 保存借出属性用户ID |
sock | MYSQL * | Cjiechu | 保存数据库 |
result | MYSQL_RES * | Cjiechu | 保存数据库导入结果 |
row | MYSQL_ROW | Cjiechu | 保存数据库指针 |
sock | MYSQL * | Cjiechubiao | 保存数据库 |
result | MYSQL_RES * | Cjiechubiao | 保存数据库导入结果 |
row | MYSQL_ROW | Cjiechubiao | 保存数据库指针 |
i | int | Cjiechubiao | 保存数据库浏览到第几行 |
flag | int | Cjiechubiao | 控制列表头只绘制一次 |
m_sqlid | CString | Cjiechubiao | 身体位图 |
m_id | CString | Cjieru | 保存借入属性ID |
m_shijian | CString | Cjieru | 保存借入属性时间 |
m_jine | CString | Cjieru | 保存借入属性金额 |
m_people | CString | Cjieru | 保存借入属性被借人 |
m_beizhu | CString | Cjieru | 保存借入属性备注 |
u_id | CString | Cjieru | 保存借入属性用户ID |
sock | MYSQL * | Cjieru | 保存数据库 |
result | MYSQL_RES * | Cjieru | 保存数据库导入结果 |
row | MYSQL_ROW | Cjieru | 保存数据库指针 |
sock | MYSQL * | Cjierubiao | 保存数据库 |
result | MYSQL_RES * | Cjierubiao | 保存数据库导入结果 |
row | MYSQL_ROW | Cjierubiao | 保存数据库指针 |
i | int | Cjierubiao | 保存数据库浏览到第几行 |
flag | int | Cjierubiao | 控制列表头只绘制一次 |
m_sqlid | CString | Cjierubiao | 身体位图 |
bmp | BITMAP | CMyView | 背景位图 |
rect | CRect | CMyView | 获得客户区大小 |
fflag | int | CMyView | 记录背景类型 |
fjbkg | int | CMyView | 风景背景变量 |
mbkg | int | CMyView | 动漫背景变量 |
kabkg | int | CMyView | 可爱背景变量 |
jdbkg | int | CMyView | 简单背景变量 |
u_name | CString | CMyView | 记录用户姓名 |
u_id | CString | CMyView | 记录用户ID |
u_password | CString | CMyView | 记录用户密码 |
u_sex | CString | CMyView | 记录用户性别 |
m_id | CString | Cshouru | 记录收入ID |
m_riqi | CString | Cshouru | 记录收入日期 |
m_jine | CString | Cshouru | 记录收入金额 |
m_beizhu | CString | Cshouru | 记录收入备注 |
m_leibie | CString | Cshouru | 记录收入类别 |
u_id | CString | Cshouru | 记录用户ID |
m_id | CString | Cuser | 记录用户ID |
m_password | CString | Cuser | 记录用户密码 |
m_mz | CString | Cuser | 记录用户名字 |
m_sex | CString | Cuser | 记录用户性别 |
m_id | CString | xinxi | 记录用户ID |
m_password | CString | xinxi | 记录用户密码 |
m_mz | CString | xinxi | 记录用户名字 |
m_sex | CString | xinxi | 记录用户性别 |
m_sqlid | CString | Czhangdan | 记录用户ID |
flag | int | Czhangdan | 只显示一次列头 |
m_id | CString | Czhichu | 记录支出ID |
m_riqi | CString | Czhichu | 记录支出日期 |
m_jine | CString | Czhichu | 记录支出金额 |
m_beizhu | CString | Czhichu | 记录支出备注 |
m_leibie | CString | Czhichu | 记录支出类别 |
u_id | CString | Czhichu | 记录用户ID |
m_id | CString | Czhuce | 记录用户ID |
m_name | CString | Czhuce | 记录用户姓名 |
m_mima | CString | Czhuce | 记录用户密码 |
6.3 新增成员函数
表4-3 新增成员函数列表
新增成员函数名 | 所属类 | 函数功能 | 参数说明 |
OnClickedGdl | Cguanliyuan | 判断管理员账号密码 | 无 |
OnClickedJcqd | Cjiechu | 新增加一笔借出 | 无 |
OnBnClickedcx | Cjiechubiao | 查询借出表 | 无 |
OnBnClickedsc | Cjiechubiao | 删除借出表 | 无 |
OnBnClickedxg | Cjiechubiao | 修改借出表 | 无 |
OnClickedXszd | Cjiechubiao | 显示借出表 | 无 |
OnClickedZj | Cjiechubiao | 增加借出 | 无 |
OnBnClickedcx | Cjierubiao | 查询借入表 | 无 |
OnBnClickedsc | Cjierubiao | 删除借入表 | 无 |
OnBnClickedxg | Cjierubiao | 修改借入表 | 无 |
OnClickedXszd | Cjierubiao | 显示借入表 | 无 |
OnClickedZj | Cjierubiao | 增加借入 | 无 |
OnClickedJrqd | Cjieru | 新增加一笔借入 | 无 |
Onuser | CMyView | 用户登录 | 无 |
Onguanliyuan | CMyView | 管理员登录 | 无 |
Onzhichu | CMyView | 增加支出对话框 | 无 |
Onshouru | CMyView | 增加收入对话框 | 无 |
Onyusuan | CMyView | 增加预算 | 无 |
Onxinxi | CMyView | 查看用户信息 | 无 |
Onjieru | CMyView | 增加借入 | 无 |
Onjiechu | CMyView | 增加借出 | 无 |
Onfjbkg | CMyView | 风景背景,循环加一 | 无 |
Ondmbkg | CMyView | 动漫背景,循环加一 | 无 |
Onkabkg | CMyView | 可爱背景,循环加一 | 无 |
Onjdbkg | CMyView | 简单背景,循环加一 | 无 |
Onjk | CMyView | 打开借口音乐 | 无 |
Onkblk | CMyView | 打开开不了口音乐 | 无 |
Onnh | CMyView | 打开女孩音乐 | 无 |
Onhmbb | CMyView | 打开海绵宝宝音乐 | 无 |
Ongbgm | CMyView | 关闭音乐 | 无 |
Onzhuce | CMyView | 用户注册对话框 | 无 |
Onzhangben | CMyView | 打开账本对话框,进行增删改查 | 无 |
Onjrb | CMyView | 打开借入表对话框,进行增删改查 | 无 |
Onjcb | CMyView | 打开借出表对话框,进行增删改查 | 无 |
Onysb | CMyView | 打开预算对话框,进行增删改查 | 无 |
OnClickedSrqd | Cshouru | 新增一笔收入 | 无 |
OnBnClickedudl | Cuser | 用户登录 | 无 |
OnBnClickedcx | Cuserbiao | 查询用户表 | 无 |
OnBnClickedsc | Cuserbiao | 删除用户表 | 无 |
OnBnClickedxg | Cuserbiao | 修改用户表 | 无 |
OnClickedXszd | Cuserbiao | 显示用户表 | 无 |
OnClickedZj | Cuserbiao | 增加用户 | 无 |
OnBnClickedcx | Czhangdan | 查询账单表 | 无 |
OnBnClickedsc | Czhangdan | 删除账单表 | 无 |
OnBnClickedxg | Czhangdan | 修改账单表 | 无 |
OnClickedXszd | Czhangdan | 显示账单表 | 无 |
OnClickedZj | Czhangdan | 增加账单 | 无 |
OnBnClickedcx | Cyuqi | 查询预算表 | 无 |
OnBnClickedsc | Cyuqi | 删除预算表 | 无 |
OnBnClickedxg | Cyuqi | 修改预算表 | 无 |
OnClickedXszd | Cyuqi | 显示预算表 | 无 |
OnClickedZj | Cyuqi | 增加预算 | 无 |
OnBnClickedxsxx | Cxinxi | 显示用户信息 | 无 |
OnBnClickedazcqd | Czhichu | 新增加一笔支出 | 无 |
OnClickedUzc | Czhuce | 用户进行注册以及错误判断 | 无 |
7原代码清单
7.1添加背景
//获得客户区大小
GetClientRect(&rect);
//添加背景图,切换背景
CBitmap bking;
if(fflag==1)//风景
switch(fjbkg)
{
case 1:bking.LoadBitmap(IDB_BITMAP1);break;
case 2:bking.LoadBitmap(IDB_BITMAP2);break;
case 3:bking.LoadBitmap(IDB_BITMAP3);break;
case 4:bking.LoadBitmap(IDB_BITMAP4);break;
case 5:bking.LoadBitmap(IDB_BITMAP5);break;
case 6:bking.LoadBitmap(IDB_BITMAP6);break;
case 7:bking.LoadBitmap(IDB_BITMAP7);break;
case 8:bking.LoadBitmap(IDB_BITMAP8);break;
case 9:bking.LoadBitmap(IDB_BITMAP9);break;
}
else if(fflag==2)//动漫
switch(dmbkg)
{
case 10:bking.LoadBitmap(IDB_BITMAP10);break;
case 11:bking.LoadBitmap(IDB_BITMAP11);break;
case 12:bking.LoadBitmap(IDB_BITMAP12);break;
case 13:bking.LoadBitmap(IDB_BITMAP13);break;
case 14:bking.LoadBitmap(IDB_BITMAP14);break;
case 15:bking.LoadBitmap(IDB_BITMAP15);break;
case 16:bking.LoadBitmap(IDB_BITMAP16);break;
case 17:bking.LoadBitmap(IDB_BITMAP17);break;
case 18:bking.LoadBitmap(IDB_BITMAP18);break;
}
else if(fflag==3)//可爱
switch(kabkg)
{
case 19:bking.LoadBitmap(IDB_BITMAP19);break;
case 20:bking.LoadBitmap(IDB_BITMAP20);break;
case 21:bking.LoadBitmap(IDB_BITMAP21);break;
case 22:bking.LoadBitmap(IDB_BITMAP22);break;
case 23:bking.LoadBitmap(IDB_BITMAP23);break;
case 24:bking.LoadBitmap(IDB_BITMAP24);break;
}
else if(fflag==4)//简单
switch(jdbkg)
{
case 30:bking.LoadBitmap(IDB_BITMAP30);break;
case 31:bking.LoadBitmap(IDB_BITMAP31);break;
case 32:bking.LoadBitmap(IDB_BITMAP32);break;
case 33:bking.LoadBitmap(IDB_BITMAP33);break;
case 34:bking.LoadBitmap(IDB_BITMAP34);break;
case 35:bking.LoadBitmap(IDB_BITMAP35);break;
case 36:bking.LoadBitmap(IDB_BITMAP36);break;
case 37:bking.LoadBitmap(IDB_BITMAP37);break;
case 38:bking.LoadBitmap(IDB_BITMAP38);break;
case 39:bking.LoadBitmap(IDB_BITMAP39);break;
case 40:bking.LoadBitmap(IDB_BITMAP40);break;
case 41:bking.LoadBitmap(IDB_BITMAP41);break;
case 42:bking.LoadBitmap(IDB_BITMAP42);break;
case 25:bking.LoadBitmap(IDB_BITMAP25);break;
case 26:bking.LoadBitmap(IDB_BITMAP26);break;
case 27:bking.LoadBitmap(IDB_BITMAP27);break;
case 28:bking.LoadBitmap(IDB_BITMAP28);break;
case 29:bking.LoadBitmap(IDB_BITMAP29);break;
}
// 等比添加背景图片
CDC memdc;
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(&bking);
bking.GetBitmap(&bmp);
pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);//等比缩放背景图
7.2登录
//用户登录
void CMyView::Onuser()
{
// TODO: Add your command handler code here
Cuser dlg;
if(dlg.DoModal()==IDOK)
{
u_id = dlg.m_id;
u_name = dlg.m_mz;
u_password = dlg.m_password;
u_sex = dlg.m_sex;
}
}
//管理员登录
void CMyView::Onguanliyuan()
{
// TODO: Add your command handler code here
Cguanliyuan dlg;
if(dlg.DoModal()==IDOK)
{
}
}
GetDlgItemText(IDC_gid, id);//获得控件的文本
GetDlgItemText(IDC_gmm, password);
if (id == "2206484123" && password == "577577577")
{
Cuserbiao dlg;
if (dlg.DoModal() == IDOK)
{
}
OnOK();//退出登录对话框
}
else {
MessageBox("您的id或密码错误,请重新输入!");
}
GetDlgItemText(IDC_gid, id);//获得控件的文本
GetDlgItemText(IDC_gmm, password);
if (id == "2206484123" && password == "577577577")
{
Cuserbiao dlg;
if (dlg.DoModal() == IDOK)
{
}
OnOK();//退出登录对话框
}
else {
MessageBox("您的id或密码错误,请重新输入!");
}
7.3增加一笔支出收入
//增加支出
void CMyView::Onzhichu()
{
// TODO: Add your command handler code here
Czhichu dlg;
dlg.u_id = u_id;
if(dlg.DoModal()==IDOK)
{
}
}
//增加收入
void CMyView::Onshouru()
{
// TODO: Add your command handler code here
Cshouru dlg;
dlg.u_id = u_id;
if(dlg.DoModal()==IDOK)
{
}
}
GetDlgItemText(IDC_azcid, m_id);//获得控件的文本
GetDlgItemText(IDC_azcrq, m_riqi);
GetDlgItemText(IDC_azcje, m_jine);
GetDlgItemText(IDC_azcbz, m_beizhu);
if (m_id.IsEmpty())
{
MessageBox(_T("至少要输入账单编号"), _T("插入操作"), IDI_ICON1);
return;
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
return;
}
CString m_leibie;
switch (m_lb)
{
case 0:m_leibie = _T("服装"); break;
case 1:m_leibie = _T("吃"); break;
case 2:m_leibie = _T("购物"); break;
case 3:m_leibie = _T("日常开支"); break;
case 4:m_leibie = _T("生活消费"); break;
default:
break;
}
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into bill values(");
strsql += m_id + _T(",") + u_id + _T(",\'") + m_leibie + _T("\',\'") + m_riqi + _T("\',\'0\',\'") + m_jine + _T("\',\'") + m_beizhu + _T("\')");
//MessageBox(strsql);
//判断插入数据是否失败,并且插入数据到数据库
if (mysql_query(sock, strsql))
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
// TODO: 在此添加控件通知处理程序代码
GetDlgItemText(IDC_asrid, m_id);//获得控件的文本
GetDlgItemText(IDC_asrrq, m_riqi);
GetDlgItemText(IDC_asrje, m_jine);
GetDlgItemText(IDC_asrbz, m_beizhu);
if (m_id.IsEmpty())
{
MessageBox(_T("至少要输入账单编号"), _T("插入操作"), IDI_ICON1);
return;
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
return;
}
CString m_leibie;
switch (m_lb)
{
case 0:m_leibie = _T("生活费"); break;
case 1:m_leibie = _T("打工兼职"); break;
case 2:m_leibie = _T("其他"); break;
default:
break;
}
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into bill values(");
strsql += m_id + _T(",") + u_id + _T(",\'") + m_leibie + _T("\',\'") + m_riqi + _T("\',\'") + m_jine + _T("\',\'0\',\'") + m_beizhu + _T("\')");
//MessageBox(strsql);
//判断插入数据是否失败,并且插入数据到数据库
if (mysql_query(sock, strsql))
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
7.4增加预算
//增加预算
void CMyView::Onyusuan()
{
// TODO: Add your command handler code here
Cyusuan dlg;
if(dlg.DoModal()==IDOK)
{
}
}
void Cyuqi::OnClickedXsys()
{
// TODO: 在此添加控件通知处理程序代码
//只有第一次点击显示账单按钮,才会显示列名
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
if (flag == 0) {
//插入列,设置列字段名
CString str_gradName[] = { _T("ID"),_T("预算"), _T("预期花费"), _T("start"), _T("end") };
for (int i = 0; i < 5; i++)
{
m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 140, -1);
}
flag++;//保证只有第一次点击才会显示列名
}
//将数据库中的账单表显示出来
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
//sql语句查询数据库
CString str;
str = _T("select * from yusuan where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_yusuan = row[2];
m_yqhf = row[3];
m_start = row[4];
m_end = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_yusuan);
m_zd.SetItemText(nRow, 2, m_yqhf);
m_zd.SetItemText(nRow, 3, m_start);
m_zd.SetItemText(nRow, 4, m_end);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cyuqi::OnClickedZj()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
GetDlgItemText(IDC_yq, m_yusuan);
GetDlgItemText(IDC_yqhf, m_yqhf);
GetDlgItemText(IDC_start, m_start);
GetDlgItemText(IDC_end, m_end);
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into yusuan values(");
strsql += m_id + _T(",") + m_sqlid + _T(",\'") + m_yusuan + _T("\',\'") + m_yqhf + _T("\',\'") + m_start + _T("\',\'") + m_end + _T("\')");
//判断账单编号是否为空,若为空,则输出至少要输入账单编号
if (m_id.IsEmpty())
{
MessageBox(_T("至少要输入ID编号"), _T("插入操作"), IDI_ICON1);
return;
}
//判断插入数据是否失败,并且插入数据到数据库
if (mysql_query(sock, strsql))
{
MessageBox(_T("插入数据失败!"), _T("插入操作"), IDI_ICON1);
return;
}
//将账单表更新到对话框上
int nRow = m_zd.InsertItem(i, m_id);//插入行
m_zd.SetItemText(nRow, 1, m_yusuan);//设置数据
m_zd.SetItemText(nRow, 2, m_yqhf);//设置数据
m_zd.SetItemText(nRow, 3, m_start);//设置数据
m_zd.SetItemText(nRow, 4, m_end);//设置数据
i++;
UpdateData(false);
}
void Cyuqi::OnBnClickedsc()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
GetDlgItemText(IDC_yq, m_yusuan);
GetDlgItemText(IDC_yqhf, m_yqhf);
GetDlgItemText(IDC_start, m_start);
GetDlgItemText(IDC_end, m_end);
/*if (m_id.IsEmpty())
{
MessageBox(_T("请输入要删除的ID!"), _T("删除操作"), IDI_ICON1);
return;
}*/
CString strsql;//定义插入的sql语句
strsql = _T("delete from yusuan where user_id=") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("id=") + m_id + _T(" and ");
}
if (!m_yusuan.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T("yusuan=") + m_yusuan + _T(" and ");
}
if (!m_yqhf.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T("yuqi=") + m_yqhf + _T(" and ");
}
if (!m_start.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T("start=\'") + m_start + _T("\'") + _T(" and ");
}
if (!m_end.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T("end=\'") + m_end + _T("\'") + _T(" and ");
}
//MessageBox(strsql);
int nLength = strsql.GetLength();
strsql = strsql.Left(nLength - 5);
if (mysql_query(sock, strsql))
{
MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from yusuan where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_yusuan = row[2];
m_yqhf = row[3];
m_start = row[4];
m_end = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_yusuan);
m_zd.SetItemText(nRow, 2, m_yqhf);
m_zd.SetItemText(nRow, 3, m_start);
m_zd.SetItemText(nRow, 4, m_end);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cyuqi::OnBnClickedxg()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
GetDlgItemText(IDC_yq, m_yusuan);
GetDlgItemText(IDC_yqhf, m_yqhf);
GetDlgItemText(IDC_start, m_start);
GetDlgItemText(IDC_end, m_end);
CString strsql;//定义插入的sql语句
strsql = _T("update yusuan set ");
int wqq = 0;
//sql语句拼接
if (!m_yusuan.IsEmpty()) {
strsql += _T("yusuan=\'") + m_yusuan + _T("\'"); wqq++;
}
if (!m_yqhf.IsEmpty()) {
if (wqq) {
strsql += _T(",yuqi=\'") + m_yqhf + _T("\'"); wqq++;
}
else
strsql += _T("yuqi=\'") + m_yqhf + _T("\'"); wqq++;
}
if (!m_start.IsEmpty()) {
if (wqq)
{
strsql += _T(",start=\'") + m_start + _T("\'"); wqq++;
}
else
strsql += _T("start=\'") + m_start + _T("\'"); wqq++;
}
if (!m_end.IsEmpty()) {
if (wqq) {
strsql += _T(",end=\'") + m_end + _T("\'"); wqq++;
}
else
strsql += _T("end=\'") + m_end + _T("\'"); wqq++;
}
strsql += _T(" where user_id=") + m_sqlid + _T(" and id=") + m_id;
//MessageBox(strsql);
int res = mysql_query(sock, strsql);//执行sql语句
if (res != 0)
{
MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from yusuan where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_yusuan = row[2];
m_yqhf = row[3];
m_start = row[4];
m_end = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_yusuan);
m_zd.SetItemText(nRow, 2, m_yqhf);
m_zd.SetItemText(nRow, 3, m_start);
m_zd.SetItemText(nRow, 4, m_end);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
UpdateData(false);//将控件值更新到对话框
}
void Cyuqi::OnBnClickedcx()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
GetDlgItemText(IDC_yq, m_yusuan);
GetDlgItemText(IDC_yqhf, m_yqhf);
GetDlgItemText(IDC_start, m_start);
GetDlgItemText(IDC_end, m_end);
//拼接sql查询语句
CString strsql;//定义插入的sql语句
int wqq = 1;//记录是否有了第一个查询条件
if (m_id.IsEmpty() && m_yusuan.IsEmpty() && m_yqhf.IsEmpty() && m_start.IsEmpty() && m_end.IsEmpty())
{
strsql = _T("select *from yusuan where user_id=") + m_sqlid;
}
else
{
strsql = _T("select *from yusuan where user_id = ") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("id=") + m_id + _T(" and ");
}
if (!m_yusuan.IsEmpty()) {
strsql += _T("yusuan=\'") + m_yusuan + _T("\' and ");
}
if (!m_yqhf.IsEmpty()) {
strsql += _T("yuqi=\'") + m_yqhf + _T("\' and ");
}
if (!m_start.IsEmpty()) {
strsql += _T("start=\'") + m_start + _T("\' and ");
}
if (!m_end.IsEmpty()) {
strsql += _T("end=\'") + m_end + _T("\' and ");
}
}
//MessageBox(strsql);
int nLength = strsql.GetLength();
strsql = strsql.Left(nLength - 5);
//删除列表控件中的数据
int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
m_zd.DeleteAllItems();//删除所有行的数据
//根据sql语句查询数据库
//查询数据库
mysql_query(sock, strsql);
//保存数据库中的信息
//resultSet代表数据表中的每一行的数据
MYSQL_RES* resultSet = mysql_store_result(sock);
//如果数据库中的没有对应的信息的话
if (!resultSet)
{
//可能是数据出现错误
MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
return;
}
//弹出提示信息
if (mysql_num_rows(resultSet) <= 0)
{
MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
return;
}
//插入数据
int nRow = 0;
MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
{
int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
for (int i = 0; i < nField; i++)
{
if (i == 0)
{
m_zd.InsertItem(nRow, row[i]);//插入第一列
}
else
{
m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
}
}
nRow++;
}
mysql_free_result(resultSet);
}
7.5查看用户信息
//查看用户信息
void CMyView::Onxinxi()
{
// TODO: Add your command handler code here
Cxinxi dlg;
dlg.m_id = u_id;
dlg.m_mz = u_name;
dlg.m_password = u_password;
dlg.m_sex = u_sex;
if(dlg.DoModal()==IDOK)
{
}
}
void Cxinxi::OnBnClickedxsxx()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(false);
}
7.6增加借入借出
//增加借入
void CMyView::Onjieru()
{
// TODO: Add your command handler code here
Cjieru dlg;
dlg.u_id = u_id;
if(dlg.DoModal()==IDOK)
{
}
}
//增加借出
void CMyView::Onjiechu()
{
// TODO: Add your command handler code here
Cjiechu dlg;
dlg.u_id = u_id;
if(dlg.DoModal()==IDOK)
{
}
}
GetDlgItemText(IDC_ajrid, m_id);//获得控件的文本
GetDlgItemText(IDC_ajrrq, m_shijian);
GetDlgItemText(IDC_ajrje, m_jine);
GetDlgItemText(IDC_ajrr, m_people);
GetDlgItemText(IDC_ajrbz, m_beizhu);
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into jieru values(");
strsql += m_id + _T(",") + u_id + _T(",\'") + m_shijian + _T("\',\'") + m_jine + _T("\',\'") + m_people + _T("\',\'") + m_beizhu + _T("\')");
//MessageBox(strsql);
//判断账单编号是否为空,若为空,则输出至少要输入账单编号
if (m_id.IsEmpty())
{
MessageBox(_T("至少要输入ID编号"), _T("插入操作"), IDI_ICON1);
return;
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
return;
}
//判断插入数据是否失败,并且插入数据到数据库
if (mysql_query(sock, strsql))
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
GetDlgItemText(IDC_ajcid, m_id);//获得控件的文本
GetDlgItemText(IDC_ajcrq, m_shijian);
GetDlgItemText(IDC_ajcje, m_jine);
GetDlgItemText(IDC_ajcr, m_people);
GetDlgItemText(IDC_ajcbz, m_beizhu);
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into jiechu values(");
strsql += m_id + _T(",") + u_id + _T(",\'") + m_shijian + _T("\',\'") + m_jine + _T("\',\'") + m_people + _T("\',\'") + m_beizhu + _T("\')");
//MessageBox(strsql);
//判断账单编号是否为空,若为空,则输出至少要输入账单编号
if (m_id.IsEmpty())
{
MessageBox(_T("至少要输入ID编号"), _T("插入操作"), IDI_ICON1);
return;
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
return;
}
//判断插入数据是否失败,并且插入数据到数据库
if (mysql_query(sock, strsql))
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
7.7切换背景
//风景背景,循环加一
void CMyView::Onfjbkg()
{
// TODO: Add your command handler code here
fflag=1;
fjbkg=fjbkg%9+1;
Invalidate();
}
//动漫背景,循环加一
void CMyView::Ondmbkg()
{
// TODO: Add your command handler code here
fflag=2;
dmbkg=dmbkg%9+10;
Invalidate();
}
//可爱背景,循环加一
void CMyView::Onkabkg()
{
// TODO: Add your command handler code here
fflag=3;
kabkg=kabkg%6+19;
Invalidate();
}
//简单背景,循环加一
void CMyView::Onjdbkg()
{
// TODO: Add your command handler code here
fflag=4;
jdbkg=jdbkg%18+25;
Invalidate();
}
7.8切换音乐
//打开借口音乐
void CMyView::Onjk()
{
// TODO: Add your command handler code here
sndPlaySound("res\\jk.wav",SND_ASYNC|SND_LOOP);
}
//打开开不了口音乐
void CMyView::Onkblk()
{
// TODO: Add your command handler code here
sndPlaySound("res\\kblk.wav",SND_ASYNC|SND_LOOP);
}
//打开女孩音乐
void CMyView::Onnh()
{
// TODO: Add your command handler code here
sndPlaySound("res\\nh.wav",SND_ASYNC|SND_LOOP);
}
//打开海绵宝宝音乐
void CMyView::Onhmbb()
{
// TODO: Add your command handler code here
sndPlaySound("res\\hmbb.wav",SND_ASYNC|SND_LOOP);
}
//关闭音乐
void CMyView::Ongbgm()
{
// TODO: Add your command handler code here
sndPlaySound(NULL,SND_SYNC);
}
7.9用户注册
//用户注册对话框
void CMyView::Onzhuce()
{
// TODO: Add your command handler code here
Czhuce dlg;
if(dlg.DoModal()==IDOK)
{
}
}
GetDlgItemText(IDC_zcid, m_id);//获得控件的文本
GetDlgItemText(IDC_zcmz, m_name);
GetDlgItemText(IDC_zcmm, m_mima);
//判断账单编号是否为空,若为空,则输出至少要输入账单编号
if (m_id.IsEmpty()&& m_mima.IsEmpty())
{
MessageBox(_T("请输入用户ID和密码"), _T("注册"), IDI_ICON1);
}
else if(m_id.IsEmpty())
MessageBox(_T("请输入用户ID"), _T("注册"), IDI_ICON1);
else if(m_mima.IsEmpty())
MessageBox(_T("请输入用户密码"), _T("注册"), IDI_ICON1);
else {
UpdateData(true);
CString sex;
switch (m_sex)
{
case 0:sex = _T("男"); break;
case 1:sex = _T("女"); break;
default:
break;
}
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into user values(");
strsql += m_id + _T(",\'") + m_name + _T("\',\'") + m_mima + _T("\',\'") + sex + _T("\')");
//MessageBox(strsql);
//判断插入数据是否失败,并且插入数据到数据库
if (mysql_query(sock, strsql))
{
MessageBox(_T("注册失败:ID已经存在,或者ID错误"), _T("注册"), IDI_ICON1);
}
}
7.10打开用户、账单、借入、借出、预算表
//打开账本对话框,进行增删改查
void CMyView::Onzhangben()
{
// TODO: 在此添加命令处理程序代码
Czhangdan dlg;
dlg.m_sqlid = u_id;
if (dlg.DoModal() == IDOK)
{
dlg.flag = 0;
}
}
//打开借入表对话框,进行增删改查
void CMyView::Onjrb()
{
// TODO: 在此添加命令处理程序代码
Cjierubiao dlg;
dlg.m_sqlid = u_id;
if (dlg.DoModal() == IDOK)
{
dlg.flag = 0;
}
}
//打开借出表对话框,进行增删改查
void CMyView::Onjcb()
{
// TODO: 在此添加命令处理程序代码
Cjiechubiao dlg;
dlg.m_sqlid = u_id;
if (dlg.DoModal() == IDOK)
{
dlg.flag = 0;
}
}
//打开预算对话框,进行增删改查
void CMyView::Onysb()
{
// TODO: 在此添加命令处理程序代码
Cyuqi dlg;
dlg.m_sqlid = u_id;
if (dlg.DoModal() == IDOK)
{
}
}
void Cjiechubiao::OnClickedXszd()
{
// TODO: 在此添加控件通知处理程序代码
//只有第一次点击显示账单按钮,才会显示列名
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
if (flag == 0) {
//插入列,设置列字段名
CString str_gradName[] = { _T("ID"),_T("借出时间"), _T("金额"), _T("who借me"), _T("备注") };
for (int i = 0; i < 5; i++)
{
m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 140, -1);
}
flag++;//保证只有第一次点击才会显示列名
}
//将数据库中的账单表显示出来
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
//sql语句查询数据库
CString str;
str = _T("select * from jiechu where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_time = row[2];
m_jine = row[3];
m_beijieren = row[4];
m_beizhu = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_time);
m_zd.SetItemText(nRow, 2, m_jine);
m_zd.SetItemText(nRow, 3, m_beijieren);
m_zd.SetItemText(nRow, 4, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cjiechubiao::OnClickedZj()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
GetDlgItemText(IDC_jcid, m_id);//获得控件的文本
GetDlgItemText(IDC_jcrq, m_time);
GetDlgItemText(IDC_jcje, m_jine);
GetDlgItemText(IDC_bjr, m_beijieren);
GetDlgItemText(IDC_jcbz, m_beizhu);
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into jiechu values(");
strsql += m_id + _T(",") + m_sqlid + _T(",\'") + m_time + _T("\',\'") + m_jine + _T("\',\'") + m_beijieren + _T("\',\'") + m_beizhu + _T("\')");
//MessageBox(strsql);
//判断账单编号是否为空,若为空,则输出至少要输入账单编号
if (m_id.IsEmpty())
{
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
return;
}
//判断插入数据是否失败,并且插入数据到数据库
int res = mysql_query(sock, strsql);//执行sql语句
if (res!=0)
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
//将账单表更新到对话框上
int nRow = m_zd.InsertItem(i, m_id);//插入行
m_zd.SetItemText(nRow, 1, m_time);//设置数据
m_zd.SetItemText(nRow, 2, m_jine);//设置数据
m_zd.SetItemText(nRow, 3, m_beijieren);//设置数据
m_zd.SetItemText(nRow, 4, m_beizhu);//设置数据
i++;
UpdateData(false);
}
void Cjiechubiao::OnBnClickedsc()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
GetDlgItemText(IDC_jcid, m_id);//获得控件的文本
GetDlgItemText(IDC_jcrq, m_time);
GetDlgItemText(IDC_jcje, m_jine);
GetDlgItemText(IDC_bjr, m_beijieren);
CString strsql;//定义插入的sql语句
strsql = _T("delete from jiechu where user_id=") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("id=") + m_id;
}
if (!m_time.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and time=\'") + m_time + _T("\'");
}
if (!m_jine.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and money=\'") + m_jine + _T("\'");
}
if (!m_beijieren.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and people=\'") + m_beijieren + _T("\'");
}
//判断删除条件是否为空
if (mysql_query(sock, strsql))
{
MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
return;
}
m_zd.DeleteAllItems();
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from jiechu where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_time = row[2];
m_jine = row[3];
m_beijieren = row[4];
m_beizhu = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_time);
m_zd.SetItemText(nRow, 2, m_jine);
m_zd.SetItemText(nRow, 3, m_beijieren);
m_zd.SetItemText(nRow, 4, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cjiechubiao::OnBnClickedxg()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
GetDlgItemText(IDC_jcid, m_id);//获得控件的文本
GetDlgItemText(IDC_jcrq, m_time);
GetDlgItemText(IDC_jcje, m_jine);
GetDlgItemText(IDC_bjr, m_beijieren);
GetDlgItemText(IDC_jcbz, m_beizhu);
if (m_id.IsEmpty())
{
MessageBox(_T("请输入要修改的ID!"), _T("修改操作"), IDI_ICON1);
return;
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("修改操作"), IDI_ICON1);
return;
}
CString strsql;//定义插入的sql语句
strsql = _T("update jiechu set ");
int wqq = 0;
//sql语句拼接
if (!m_time.IsEmpty()) {
strsql += _T("time=\'") + m_time + _T("\'"); wqq++;
}
if (!m_jine.IsEmpty()) {
if (wqq) {
strsql += _T(",money=\'") + m_jine + _T("\'"); wqq++;
}
else
strsql += _T("money=\'") + m_jine + _T("\'"); wqq++;
}
if (!m_beijieren.IsEmpty()) {
if (wqq)
{
strsql += _T(",people=\'") + m_beijieren + _T("\'"); wqq++;
}
else
strsql += _T("people=\'") + m_beijieren + _T("\'"); wqq++;
}
if (!m_beizhu.IsEmpty()) {
if (wqq) {
strsql += _T(",beizhu=\'") + m_beizhu + _T("\'"); wqq++;
}
else
strsql += _T("beizhu=\'") + m_beizhu + _T("\'"); wqq++;
}
strsql += _T(" where user_id=") + m_sqlid + _T(" and id=") + m_id;
//MessageBox(strsql);
int res = mysql_query(sock, strsql);//执行sql语句
if (res != 0)
{
MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from jiechu where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_time = row[2];
m_jine = row[3];
m_beijieren = row[4];
m_beizhu = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_time);
m_zd.SetItemText(nRow, 2, m_jine);
m_zd.SetItemText(nRow, 3, m_beijieren);
m_zd.SetItemText(nRow, 4, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cjiechubiao::OnBnClickedcx()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
GetDlgItemText(IDC_jcid, m_id);//获得控件的文本
GetDlgItemText(IDC_jcrq, m_time);
GetDlgItemText(IDC_jcje, m_jine);
GetDlgItemText(IDC_bjr, m_beijieren);
GetDlgItemText(IDC_jcbz, m_beizhu);
//拼接sql查询语句
CString strsql;//定义插入的sql语句
int wqq = 1;//记录是否有了第一个查询条件
if (m_id.IsEmpty() && m_time.IsEmpty() && m_jine.IsEmpty() && m_beijieren.IsEmpty() && m_beizhu.IsEmpty())
{
strsql = _T("select *from jiechu where user_id=") + m_sqlid;
}
else
{
strsql = _T("select *from jiechu where user_id = ") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("id=") + m_id + _T(" and ");
}
if (!m_time.IsEmpty()) {
strsql += _T("time=\'") + m_time + _T("\' and ");
}
if (!m_jine.IsEmpty()) {
strsql += _T("money=\'") + m_jine + _T("\' and ");
}
if (!m_beijieren.IsEmpty()) {
strsql += _T("people=\'") + m_beijieren + _T("\' and ");
}
if (!m_beizhu.IsEmpty()) {
strsql += _T("beizhu=\'") + m_beizhu + _T("\' and ");
}
}
//MessageBox(strsql);
int nLength = strsql.GetLength();
strsql = strsql.Left(nLength - 5);
//删除列表控件中的数据
int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
m_zd.DeleteAllItems();//删除所有行的数据
//根据sql语句查询数据库
//查询数据库
mysql_query(sock, strsql);
//保存数据库中的信息
//resultSet代表数据表中的每一行的数据
MYSQL_RES* resultSet = mysql_store_result(sock);
//如果数据库中的没有对应的信息的话
if (!resultSet)
{
//可能是数据出现错误
MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
return;
}
//弹出提示信息
if (mysql_num_rows(resultSet) <= 0)
{
MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
return;
}
//插入数据
int nRow = 0;
MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
{
int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
for (int i = 0; i < nField; i++)
{
if (i == 0)
{
m_zd.InsertItem(nRow, row[i]);//插入第一列
}
else
{
m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
}
}
nRow++;
}
mysql_free_result(resultSet);
}
void Cjierubiao::OnClickedXsjr()
{
// TODO: 在此添加控件通知处理程序代码
//只有第一次点击显示账单按钮,才会显示列名
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
if (flag == 0) {
//插入列,设置列字段名
CString str_gradName[] = { _T("ID"),_T("借入时间"), _T("金额"), _T("借出方"), _T("备注") };
for (int i = 0; i < 5; i++)
{
m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 140, -1);
}
flag++;//保证只有第一次点击才会显示列名
}
//将数据库中的账单表显示出来
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
//sql语句查询数据库
CString str;
str = _T("select * from jieru where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_time = row[2];
m_jine = row[3];
m_beijieren = row[4];
m_beizhu = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_time);
m_zd.SetItemText(nRow, 2, m_jine);
m_zd.SetItemText(nRow, 3, m_beijieren);
m_zd.SetItemText(nRow, 4, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cjierubiao::OnClickedZj()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
GetDlgItemText(IDC_jrid, m_id);//获得控件的文本
GetDlgItemText(IDC_jrrq, m_time);
GetDlgItemText(IDC_jrje, m_jine);
GetDlgItemText(IDC_bjr, m_beijieren);
GetDlgItemText(IDC_jrbz, m_beizhu);
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into jieru values(");
strsql +=m_id + _T(",") + m_sqlid + _T(",\'") + m_time + _T("\',\'") + m_jine + _T("\',\'") + m_beijieren + _T("\',\'") + m_beizhu + _T("\')");
//MessageBox(strsql);
//判断账单编号是否为空,若为空,则输出至少要输入账单编号
if (m_id.IsEmpty())
{
MessageBox(_T("至少要输入账单编号"), _T("插入操作"), IDI_ICON1);
return;
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
return;
}
//判断插入数据是否失败,并且插入数据到数据库
int res = mysql_query(sock, strsql);//执行sql语句
if (res!=0)
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
//将账单表更新到对话框上
int nRow = m_zd.InsertItem(i, m_id);//插入行
m_zd.SetItemText(nRow, 1, m_time);//设置数据
m_zd.SetItemText(nRow, 2, m_jine);//设置数据
m_zd.SetItemText(nRow, 3, m_beijieren);//设置数据
m_zd.SetItemText(nRow, 4, m_beizhu);//设置数据
i++;
UpdateData(false);
}
void Cjierubiao::OnBnClickedsc()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
GetDlgItemText(IDC_jrid, m_id);//获得控件的文本
GetDlgItemText(IDC_jrrq, m_time);
GetDlgItemText(IDC_jrje, m_jine);
GetDlgItemText(IDC_bjr, m_beijieren);
GetDlgItemText(IDC_jrbz, m_beizhu);
CString strsql;//定义插入的sql语句
strsql = _T("delete from jieru where user_id=") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("id=") + m_id;
}
if (!m_time.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and time=\'") + m_time + _T("\'");
}
if (!m_jine.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and money=\'") + m_jine + _T("\'");
}
if (!m_beijieren.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and people=\'") + m_beijieren + _T("\'");
}
//判断删除条件是否为空
if (mysql_query(sock, strsql))
{
MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
return;
}
int res = mysql_query(sock, strsql);//执行sql语句
if (res != 0)
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
m_zd.DeleteAllItems();
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from jieru where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_time = row[2];
m_jine = row[3];
m_beijieren = row[4];
m_beizhu = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_time);
m_zd.SetItemText(nRow, 2, m_jine);
m_zd.SetItemText(nRow, 3, m_beijieren);
m_zd.SetItemText(nRow, 4, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cjierubiao::OnBnClickedxg()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
GetDlgItemText(IDC_jrid, m_id);//获得控件的文本
GetDlgItemText(IDC_jrrq, m_time);
GetDlgItemText(IDC_jrje, m_jine);
GetDlgItemText(IDC_bjr, m_beijieren);
GetDlgItemText(IDC_jrbz, m_beizhu);
if (m_id.IsEmpty())
{
MessageBox(_T("请输入要修改的ID!"), _T("修改操作"), IDI_ICON1);
return;
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
return;
}
CString strsql;//定义修改的sql语句
strsql = _T("update jieru set ");
int wqq = 0;
//sql语句拼接
if (!m_time.IsEmpty()) {
strsql += _T("time=\'") + m_time + _T("\'"); wqq++;
}
if (!m_jine.IsEmpty()) {
if (wqq) {
strsql += _T(",money=\'") + m_jine + _T("\'"); wqq++;
}
else
strsql += _T("money=\'") + m_jine + _T("\'"); wqq++;
}
if (!m_beijieren.IsEmpty()) {
if (wqq)
{
strsql += _T(",people=\'") + m_beijieren + _T("\'"); wqq++;
}
else
strsql += _T("people=\'") + m_beijieren + _T("\'"); wqq++;
}
if (!m_beizhu.IsEmpty()) {
if (wqq) {
strsql += _T(",beizhu=\'") + m_beizhu + _T("\'"); wqq++;
}
else
strsql += _T("beizhu=\'") + m_beizhu + _T("\'"); wqq++;
}
strsql += _T(" where user_id=")+ m_sqlid + _T(" and id=")+ m_id;
//MessageBox(strsql);
int res = mysql_query(sock, strsql);//执行sql语句
if (res != 0)
{
MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from jieru where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_time = row[2];
m_jine = row[3];
m_beijieren = row[4];
m_beizhu = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_time);
m_zd.SetItemText(nRow, 2, m_jine);
m_zd.SetItemText(nRow, 3, m_beijieren);
m_zd.SetItemText(nRow, 4, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cjierubiao::OnBnClickedcx()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_time, m_jine, m_beijieren, m_beizhu;
GetDlgItemText(IDC_jrid, m_id);//获得控件的文本
GetDlgItemText(IDC_jrrq, m_time);
GetDlgItemText(IDC_jrje, m_jine);
GetDlgItemText(IDC_bjr, m_beijieren);
GetDlgItemText(IDC_jrbz, m_beizhu);
//拼接sql查询语句
CString strsql;//定义插入的sql语句
int wqq = 1;//记录是否有了第一个查询条件
if (m_id.IsEmpty() && m_time.IsEmpty() && m_jine.IsEmpty() && m_beijieren.IsEmpty() && m_beizhu.IsEmpty())
{
strsql = _T("select *from jieru where user_id=") + m_sqlid;
}
else
{
strsql = _T("select *from jieru where user_id = ") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("id=") + m_id + _T(" and ");
}
if (!m_time.IsEmpty()) {
strsql += _T("time=\'") + m_time + _T("\' and ");
}
if (!m_jine.IsEmpty()) {
strsql += _T("money=\'") + m_jine + _T("\' and ");
}
if (!m_beijieren.IsEmpty()) {
strsql += _T("people=\'") + m_beijieren + _T("\' and ");
}
if (!m_beizhu.IsEmpty()) {
strsql += _T("beizhu=\'") + m_beizhu + _T("\' and ");
}
}
//MessageBox(strsql);
int nLength = strsql.GetLength();
strsql = strsql.Left(nLength - 5);
//删除列表控件中的数据
int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
m_zd.DeleteAllItems();//删除所有行的数据
//根据sql语句查询数据库
//查询数据库
mysql_query(sock, strsql);
//保存数据库中的信息
//resultSet代表数据表中的每一行的数据
MYSQL_RES* resultSet = mysql_store_result(sock);
//如果数据库中的没有对应的信息的话
if (!resultSet)
{
//可能是数据出现错误
MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
return;
}
//弹出提示信息
if (mysql_num_rows(resultSet) <= 0)
{
MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
return;
}
//插入数据
int nRow = 0;
MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
{
int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
for (int i = 0; i < nField; i++)
{
if (i == 0)
{
m_zd.InsertItem(nRow, row[i]);//插入第一列
}
else
{
m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
}
}
nRow++;
}
mysql_free_result(resultSet);
}
void Cuserbiao::OnBnClickedxsu()
{
// TODO: 在此添加控件通知处理程序代码
//只有第一次点击显示账单按钮,才会显示列名
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
if (flag == 0) {
//插入列,设置列字段名
CString str_gradName[] = { _T("ID"),_T("用户名"), _T("密码"), _T("性别") };
for (int i = 0; i < 4; i++)
{
m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 180, -1);
}
flag++;//保证只有第一次点击才会显示列名
}
//将数据库中的账单表显示出来
CString m_id, m_name, m_mima, m_sex;
//sql语句查询数据库
char sql[100] = "select * from user";
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_name = row[1];
m_mima = row[2];
m_sex = row[3];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_name);
m_zd.SetItemText(nRow, 2, m_mima);
m_zd.SetItemText(nRow, 3, m_sex);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cuserbiao::OnBnClickedzj()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_name, m_mima, m_sex;
GetDlgItemText(IDC_uid, m_id);//获得控件的文本
GetDlgItemText(IDC_umz, m_name);
GetDlgItemText(IDC_umm, m_mima);
GetDlgItemText(IDC_usex, m_sex);
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into user values(");
strsql += m_id + _T(",\'") + m_name + _T("\',\'") + m_mima + _T("\',\'") + m_sex + _T("\')");
//MessageBox(strsql);
//判断账单编号是否为空,若为空,则输出至少要输入账单编号
if (m_id.IsEmpty())
{
MessageBox(_T("至少要输入账单编号"), _T("插入操作"), IDI_ICON1);
return;
}
//判断插入数据是否失败,并且插入数据到数据库
int res = mysql_query(sock, strsql);//执行sql语句
if (res != 0)
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
//将账单表更新到对话框上
int nRow = m_zd.InsertItem(i, m_id);//插入行
m_zd.SetItemText(nRow, 1, m_name);//设置数据
m_zd.SetItemText(nRow, 2, m_mima);//设置数据
m_zd.SetItemText(nRow, 3, m_sex);//设置数据
i++;
UpdateData(false);
}
void Cuserbiao::OnBnClickedsc()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_name, m_mima, m_sex;
GetDlgItemText(IDC_uid, m_id);//获得控件的文本
GetDlgItemText(IDC_umz, m_name);
GetDlgItemText(IDC_umm, m_mima);
GetDlgItemText(IDC_usex, m_sex);
CString strsql;//定义插入的sql语句
strsql = _T("delete from user where ");
if (!m_id.IsEmpty()) {
strsql += _T("user_id=") + m_id;
}
if (!m_name.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and user_name=\'") + m_name + _T("\'");
}
if (!m_mima.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and user_password=\'") + m_mima + _T("\'");
}
if (!m_sex.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T(" and user_sex=\'") + m_sex + _T("\'");
}
if (mysql_query(sock, strsql))
{
MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
return;
}
m_zd.DeleteAllItems();
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
char sql[100] = "select * from user";
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_name = row[1];
m_mima = row[2];
m_sex = row[3];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_name);
m_zd.SetItemText(nRow, 2, m_mima);
m_zd.SetItemText(nRow, 3, m_sex);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
//修改
void Cuserbiao::OnBnClickedxg()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_name, m_mima, m_sex;
GetDlgItemText(IDC_uid, m_id);//获得控件的文本
GetDlgItemText(IDC_umz, m_name);
GetDlgItemText(IDC_umm, m_mima);
GetDlgItemText(IDC_usex, m_sex);
if (m_id.IsEmpty())
{
MessageBox(_T("请输入要修改的ID!"), _T("修改操作"), IDI_ICON1);
return;
}
m_id, m_name, m_mima, m_sex;
CString strsql;//定义插入的sql语句
strsql = _T("update user set ");
int wqq = 0;
//sql语句拼接
if (!m_name.IsEmpty()) {
strsql += _T("user_name=\'") + m_name + _T("\'"); wqq++;
}
if (!m_mima.IsEmpty()) {
if (wqq) {
strsql += _T(",user_password=\'") + m_mima + _T("\'"); wqq++;
}
else
strsql += _T("user_password=\'") + m_mima + _T("\'"); wqq++;
}
if (!m_sex.IsEmpty()) {
if (wqq)
{
strsql += _T(",user_sex=\'") + m_sex + _T("\'"); wqq++;
}
else
strsql += _T("user_sex=\'") + m_sex + _T("\'"); wqq++;
}
strsql += _T(" where user_id=") + m_id;
//MessageBox(strsql);
int res = mysql_query(sock, strsql);//执行sql语句
if (res != 0)
{
MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
char sql[100] = "select * from user";
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_name = row[1];
m_mima = row[2];
m_sex = row[3];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_name);
m_zd.SetItemText(nRow, 2, m_mima);
m_zd.SetItemText(nRow, 3, m_sex);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cuserbiao::OnBnClickedcx()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_name, m_mima, m_sex;
GetDlgItemText(IDC_uid, m_id);//获得控件的文本
GetDlgItemText(IDC_umz, m_name);
GetDlgItemText(IDC_umm, m_mima);
GetDlgItemText(IDC_usex, m_sex);
//拼接sql查询语句
CString strsql;//定义插入的sql语句
int wqq = 0;//记录是否有了第一个查询条件
m_id, m_name, m_mima, m_sex;
if (m_id.IsEmpty() && m_name.IsEmpty() && m_mima.IsEmpty() && m_sex.IsEmpty())
{
strsql = _T("select *from user");
}
else
{
strsql = _T("select *from user where");
if (!m_id.IsEmpty()) {
strsql += _T(" user_id=") + m_id; wqq++;
}
if (!m_name.IsEmpty()) {
if (wqq) {
strsql += _T(" and user_name=\'") + m_name + _T("\'"); wqq++;
}
else
{
strsql += _T(" user_name=\'") + m_name + _T("\'"); wqq++;
}
}
if (!m_mima.IsEmpty()) {
if (wqq)
{
strsql += _T(" and user_password=\'") + m_mima + _T("\'"); wqq++;
}
else {
strsql += _T(" user_password=\'") + m_mima + _T("\'"); wqq++;
}
}
if (!m_sex.IsEmpty()) {
if (wqq) {
strsql += _T(" and user_sex=\'") + m_sex + _T("\'"); wqq++;
}
else
{
strsql += _T(" user_sex=\'") + m_sex + _T("\'"); wqq++;
}
}
}
//MessageBox(strsql);
//删除列表控件中的数据
int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
m_zd.DeleteAllItems();//删除所有行的数据
//根据sql语句查询数据库
//查询数据库
mysql_query(sock, strsql);
//保存数据库中的信息
//resultSet代表数据表中的每一行的数据
MYSQL_RES* resultSet = mysql_store_result(sock);
//如果数据库中的没有对应的信息的话
if (!resultSet)
{
//可能是数据出现错误
MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
return;
}
//弹出提示信息
if (mysql_num_rows(resultSet) <= 0)
{
MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
return;
}
//插入数据
int nRow = 0;
MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
{
int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
for (int i = 0; i < nField; i++)
{
if (i == 0)
{
m_zd.InsertItem(nRow, row[i]);//插入第一列
}
else
{
m_zd.SetItemText(nRow, i, row[i]);//插入第二三四列
}
}
nRow++;
}
mysql_free_result(resultSet);
}
void Cyuqi::OnClickedXsys()
{
// TODO: 在此添加控件通知处理程序代码
//只有第一次点击显示账单按钮,才会显示列名
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
if (flag == 0) {
//插入列,设置列字段名
CString str_gradName[] = { _T("ID"),_T("预算"), _T("预期花费"), _T("start"), _T("end") };
for (int i = 0; i < 5; i++)
{
m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 140, -1);
}
flag++;//保证只有第一次点击才会显示列名
}
//将数据库中的账单表显示出来
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
//sql语句查询数据库
CString str;
str = _T("select * from yusuan where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_yusuan = row[2];
m_yqhf = row[3];
m_start = row[4];
m_end = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_yusuan);
m_zd.SetItemText(nRow, 2, m_yqhf);
m_zd.SetItemText(nRow, 3, m_start);
m_zd.SetItemText(nRow, 4, m_end);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cyuqi::OnClickedZj()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
GetDlgItemText(IDC_yq, m_yusuan);
GetDlgItemText(IDC_yqhf, m_yqhf);
GetDlgItemText(IDC_start, m_start);
GetDlgItemText(IDC_end, m_end);
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into yusuan values(");
strsql += m_id + _T(",") + m_sqlid + _T(",\'") + m_yusuan + _T("\',\'") + m_yqhf + _T("\',\'") + m_start + _T("\',\'") + m_end + _T("\')");
//判断账单编号是否为空,若为空,则输出至少要输入账单编号
if (m_id.IsEmpty())
{
MessageBox(_T("至少要输入ID编号"), _T("插入操作"), IDI_ICON1);
return;
}
//判断插入数据是否失败,并且插入数据到数据库
if (mysql_query(sock, strsql))
{
MessageBox(_T("插入数据失败!"), _T("插入操作"), IDI_ICON1);
return;
}
//将账单表更新到对话框上
int nRow = m_zd.InsertItem(i, m_id);//插入行
m_zd.SetItemText(nRow, 1, m_yusuan);//设置数据
m_zd.SetItemText(nRow, 2, m_yqhf);//设置数据
m_zd.SetItemText(nRow, 3, m_start);//设置数据
m_zd.SetItemText(nRow, 4, m_end);//设置数据
i++;
UpdateData(false);
}
void Cyuqi::OnBnClickedsc()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
GetDlgItemText(IDC_yq, m_yusuan);
GetDlgItemText(IDC_yqhf, m_yqhf);
GetDlgItemText(IDC_start, m_start);
GetDlgItemText(IDC_end, m_end);
/*if (m_id.IsEmpty())
{
MessageBox(_T("请输入要删除的ID!"), _T("删除操作"), IDI_ICON1);
return;
}*/
CString strsql;//定义插入的sql语句
strsql = _T("delete from yusuan where user_id=") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("id=") + m_id + _T(" and ");
}
if (!m_yusuan.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T("yusuan=") + m_yusuan + _T(" and ");
}
if (!m_yqhf.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T("yuqi=") + m_yqhf + _T(" and ");
}
if (!m_start.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T("start=\'") + m_start + _T("\'") + _T(" and ");
}
if (!m_end.IsEmpty() && (!m_id.IsEmpty())) {
strsql += _T("end=\'") + m_end + _T("\'") + _T(" and ");
}
//MessageBox(strsql);
int nLength = strsql.GetLength();
strsql = strsql.Left(nLength - 5);
if (mysql_query(sock, strsql))
{
MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from yusuan where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_yusuan = row[2];
m_yqhf = row[3];
m_start = row[4];
m_end = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_yusuan);
m_zd.SetItemText(nRow, 2, m_yqhf);
m_zd.SetItemText(nRow, 3, m_start);
m_zd.SetItemText(nRow, 4, m_end);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Cyuqi::OnBnClickedxg()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
GetDlgItemText(IDC_yq, m_yusuan);
GetDlgItemText(IDC_yqhf, m_yqhf);
GetDlgItemText(IDC_start, m_start);
GetDlgItemText(IDC_end, m_end);
CString strsql;//定义插入的sql语句
strsql = _T("update yusuan set ");
int wqq = 0;
//sql语句拼接
if (!m_yusuan.IsEmpty()) {
strsql += _T("yusuan=\'") + m_yusuan + _T("\'"); wqq++;
}
if (!m_yqhf.IsEmpty()) {
if (wqq) {
strsql += _T(",yuqi=\'") + m_yqhf + _T("\'"); wqq++;
}
else
strsql += _T("yuqi=\'") + m_yqhf + _T("\'"); wqq++;
}
if (!m_start.IsEmpty()) {
if (wqq)
{
strsql += _T(",start=\'") + m_start + _T("\'"); wqq++;
}
else
strsql += _T("start=\'") + m_start + _T("\'"); wqq++;
}
if (!m_end.IsEmpty()) {
if (wqq) {
strsql += _T(",end=\'") + m_end + _T("\'"); wqq++;
}
else
strsql += _T("end=\'") + m_end + _T("\'"); wqq++;
}
strsql += _T(" where user_id=") + m_sqlid + _T(" and id=") + m_id;
//MessageBox(strsql);
int res = mysql_query(sock, strsql);//执行sql语句
if (res != 0)
{
MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from yusuan where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_yusuan = row[2];
m_yqhf = row[3];
m_start = row[4];
m_end = row[5];
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_yusuan);
m_zd.SetItemText(nRow, 2, m_yqhf);
m_zd.SetItemText(nRow, 3, m_start);
m_zd.SetItemText(nRow, 4, m_end);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
UpdateData(false);//将控件值更新到对话框
}
void Cyuqi::OnBnClickedcx()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_yusuan, m_yqhf, m_start, m_end;
GetDlgItemText(IDC_ysid, m_id);//获得控件的文本
GetDlgItemText(IDC_yq, m_yusuan);
GetDlgItemText(IDC_yqhf, m_yqhf);
GetDlgItemText(IDC_start, m_start);
GetDlgItemText(IDC_end, m_end);
//拼接sql查询语句
CString strsql;//定义插入的sql语句
int wqq = 1;//记录是否有了第一个查询条件
if (m_id.IsEmpty() && m_yusuan.IsEmpty() && m_yqhf.IsEmpty() && m_start.IsEmpty() && m_end.IsEmpty())
{
strsql = _T("select *from yusuan where user_id=") + m_sqlid;
}
else
{
strsql = _T("select *from yusuan where user_id = ") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("id=") + m_id + _T(" and ");
}
if (!m_yusuan.IsEmpty()) {
strsql += _T("yusuan=\'") + m_yusuan + _T("\' and ");
}
if (!m_yqhf.IsEmpty()) {
strsql += _T("yuqi=\'") + m_yqhf + _T("\' and ");
}
if (!m_start.IsEmpty()) {
strsql += _T("start=\'") + m_start + _T("\' and ");
}
if (!m_end.IsEmpty()) {
strsql += _T("end=\'") + m_end + _T("\' and ");
}
}
//MessageBox(strsql);
int nLength = strsql.GetLength();
strsql = strsql.Left(nLength - 5);
//删除列表控件中的数据
int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
m_zd.DeleteAllItems();//删除所有行的数据
//根据sql语句查询数据库
//查询数据库
mysql_query(sock, strsql);
//保存数据库中的信息
//resultSet代表数据表中的每一行的数据
MYSQL_RES* resultSet = mysql_store_result(sock);
//如果数据库中的没有对应的信息的话
if (!resultSet)
{
//可能是数据出现错误
MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
return;
}
//弹出提示信息
if (mysql_num_rows(resultSet) <= 0)
{
MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
return;
}
//插入数据
int nRow = 0;
MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
{
int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
for (int i = 0; i < nField; i++)
{
if (i == 0)
{
m_zd.InsertItem(nRow, row[i]);//插入第一列
}
else
{
m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
}
}
nRow++;
}
mysql_free_result(resultSet);
}
void Czhangdan::OnClickedXszd()
{
// TODO: 在此添加控件通知处理程序代码
//只有第一次点击显示账单按钮,才会显示列名
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
if (flag == 0) {
//插入列,设置列字段名
CString str_gradName[] = { _T("ID"),_T("类别"), _T("日期"), _T("收入"), _T("支出"), _T("备注") };
for (int i = 0; i < 6; i++)
{
m_zd.InsertColumn(i, str_gradName[i], LVCFMT_CENTER, 115, -1);
}
flag++;//保证只有第一次点击才会显示列名
}
//将数据库中的账单表显示出来
CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu;
//sql语句查询数据库
CString str;
str=_T("select * from bill where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_leibie = row[2];//账单表的第3列
m_riqi = row[3];//账单表的第4列
m_shouru = row[4];//账单表的第5列
m_zhichu = row[5];//账单表的第6列
m_beizhu = row[6];//账单表的第7列
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_leibie);
m_zd.SetItemText(nRow, 2, m_riqi);
m_zd.SetItemText(nRow, 3, m_shouru);
m_zd.SetItemText(nRow, 4, m_zhichu);
m_zd.SetItemText(nRow, 5, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
void Czhangdan::OnClickedZj()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; // 定义6个属性,即对话框6个文本框的值
GetDlgItemText(IDC_zdid, m_id);//获得控件的文本
GetDlgItemText(IDB_zdlb, m_leibie);
GetDlgItemText(IDC_zdrq, m_riqi);
GetDlgItemText(IDC_zdsr, m_shouru);
GetDlgItemText(IDC_zdzc, m_zhichu);
GetDlgItemText(IDC_zdbz, m_beizhu);
if (m_id.IsEmpty())
{
MessageBox(_T("请输入要增加的ID!"), _T("增加操作"), IDI_ICON1);
return;
}
if (!m_beizhu.IsEmpty() && m_beizhu.GetLength() > 50)
{
MessageBox(_T("备注不能超过50个字!"), _T("增加操作"), IDI_ICON1);
return;
}
//插入操作
CString strsql;//定义插入的sql语句
strsql = _T("insert into bill values(");
strsql += m_id + _T(",")+m_sqlid+_T(",\'") + m_leibie + _T("\',") + m_riqi + _T(",") + m_shouru + _T(",") + m_zhichu + _T(",\'") + m_beizhu + _T("\')");
//判断插入数据是否失败,并且插入数据到数据库
int res = mysql_query(sock, strsql);//执行sql语句
if (res!=0)
{
MessageBox(_T("插入数据失败:ID已经存在,或者ID错误"), _T("插入操作"), IDI_ICON1);
return;
}
//将账单表更新到对话框上
int nRow = m_zd.InsertItem(i, m_id);//插入行
m_zd.SetItemText(nRow, 1, m_leibie);//设置数据
m_zd.SetItemText(nRow, 2, m_riqi);//设置数据
m_zd.SetItemText(nRow, 3, m_shouru);//设置数据
m_zd.SetItemText(nRow, 4, m_zhichu);//设置数据
m_zd.SetItemText(nRow, 5, m_beizhu);//设置数据
i++;
UpdateData(false);
}
void Czhangdan::OnClickedSc()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; // 定义6个属性,即对话框6个文本框的值
GetDlgItemText(IDC_zdid, m_id);//获得控件的文本
GetDlgItemText(IDB_zdlb, m_leibie);
GetDlgItemText(IDC_zdrq, m_riqi);
GetDlgItemText(IDC_zdsr, m_shouru);
GetDlgItemText(IDC_zdzc, m_zhichu);
GetDlgItemText(IDC_zdbz, m_beizhu);
//删除数据 delete from bill where id=1 and zhichu='122'
CString strsql;//定义插入的sql语句
strsql = _T("delete from bill where user_id=")+m_sqlid+_T(" and ");
if (!m_id.IsEmpty()) {
strsql +=_T("bill_id=")+m_id+_T(" and ");
}
if (!m_leibie.IsEmpty()) {
strsql += _T("bill_sort=\'") + m_leibie+_T("\' and ");
}
if (!m_riqi.IsEmpty()) {
strsql += _T("bill_date=\'") + m_riqi + _T("\' and ");
}
if (!m_shouru.IsEmpty()) {
strsql += _T("bill_income=\'") + m_shouru + _T("\' and ");
}
if (!m_zhichu.IsEmpty()) {
strsql += _T("bill_outcome=\'") + m_zhichu + _T("\' and ");
}
int nLength = strsql.GetLength();
strsql = strsql.Left(nLength - 5);
//MessageBox(strsql);
//判断删除条件是否为空
if (mysql_query(sock, strsql))
{
MessageBox(_T("删除数据失败!"), _T("删除操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from bill where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_leibie = row[2];//账单表的第3列
m_riqi = row[3];//账单表的第4列
m_shouru = row[4];//账单表的第5列
m_zhichu = row[5];//账单表的第6列
m_beizhu = row[6];//账单表的第7列
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_leibie);
m_zd.SetItemText(nRow, 2, m_riqi);
m_zd.SetItemText(nRow, 3, m_shouru);
m_zd.SetItemText(nRow, 4, m_zhichu);
m_zd.SetItemText(nRow, 5, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
//修改数据操作
void Czhangdan::OnBnClickedxg()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; // 定义6个属性,即对话框6个文本框的值
GetDlgItemText(IDC_zdid, m_id);//获得控件的文本
GetDlgItemText(IDB_zdlb, m_leibie);
GetDlgItemText(IDC_zdrq, m_riqi);
GetDlgItemText(IDC_zdsr, m_shouru);
GetDlgItemText(IDC_zdzc, m_zhichu);
GetDlgItemText(IDC_zdbz, m_beizhu);
if (m_id.IsEmpty())
{
MessageBox(_T("请输入要修改的ID!"),_T("修改操作"),IDI_ICON1);
return;
}
if(!m_beizhu.IsEmpty()&&m_beizhu.GetLength()>50)
{
MessageBox(_T("备注不能超过50个字!"), _T("修改操作"), IDI_ICON1);
return;
}
//修改
CString strsql;//定义插入的sql语句
strsql = _T("update bill set ");
int wqq = 0;
//sql语句拼接
if (!m_leibie.IsEmpty()) {
strsql += _T("bill_sort=\'") + m_leibie + _T("\'"); wqq++;
}
if (!m_riqi.IsEmpty()) {
if (wqq) {
strsql += _T(",bill_date=\'") + m_riqi + _T("\'"); wqq++;
}
else
strsql += _T("bill_date=\'") + m_riqi + _T("\'"); wqq++;
}
if (!m_shouru.IsEmpty()) {
if (wqq)
{
strsql += _T(",bill_income=\'") + m_shouru + _T("\'"); wqq++;
}
else
strsql += _T("bill_income=\'") + m_shouru + _T("\'"); wqq++;
}
if (!m_zhichu.IsEmpty()) {
if (wqq) {
strsql += _T(",bill_outcome=\'") + m_zhichu + _T("\'"); wqq++;
}
else
strsql += _T("bill_outcome=\'") + m_zhichu + _T("\'"); wqq++;
}
if (!m_beizhu.IsEmpty()) {
if (wqq) {
strsql += _T(",bill_beizhu=\'") + m_bz + _T("\'"); wqq++;
}
else
strsql += _T("bill_beizhu=\'") + m_bz + _T("\'"); wqq++;
}
strsql += _T(" where user_id=") + m_sqlid + _T(" and bill_id=") + m_id;
//MessageBox(strsql);
if (mysql_query(sock, strsql))
{
MessageBox(_T("修改数据失败:ID已经存在,或者ID错误"), _T("修改操作"), IDI_ICON1);
return;
}
i = 0;
//初始化列表控件样式
m_zd.DeleteAllItems();
m_zd.ModifyStyle(0, LVS_REPORT);
m_zd.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//将数据库中的账单表显示出来
//sql语句查询数据库
CString str;
str = _T("select * from bill where user_id=") + m_sqlid;
char sql[100] = {};
memcpy(sql, LPCTSTR(str), str.GetLength() * sizeof(TCHAR));
//开始查询
mysql_real_query(sock, sql, (unsigned long)strlen(sql));
result = mysql_store_result(sock); //mysql_free_result(result);
while ((row = mysql_fetch_row(result)))
{
//row是字符数组,元素个数取决于数据库表的关键字个数,按顺序一一对应
m_id = row[0];//账单表的第1列
m_leibie = row[2];//账单表的第3列
m_riqi = row[3];//账单表的第4列
m_shouru = row[4];//账单表的第5列
m_zhichu = row[5];//账单表的第6列
m_beizhu = row[6];//账单表的第7列
int nRow = m_zd.InsertItem(i, m_id);//在列表控件中插入行插入行,第一个要用InsertItem,后面的用SetItemText
m_zd.SetItemText(nRow, 1, m_leibie);
m_zd.SetItemText(nRow, 2, m_riqi);
m_zd.SetItemText(nRow, 3, m_shouru);
m_zd.SetItemText(nRow, 4, m_zhichu);
m_zd.SetItemText(nRow, 5, m_beizhu);
i++;//记录数据库访问到了第几行
}
//释放内存空间
mysql_free_result(result);
UpdateData(false);//将控件值更新到对话框
}
//查询功能
void Czhangdan::OnBnClickedcx()
{
// TODO: 在此添加控件通知处理程序代码
CString m_id, m_leibie, m_riqi, m_shouru, m_zhichu, m_beizhu; // 定义6个属性,即对话框6个文本框的值
GetDlgItemText(IDC_zdid, m_id);//获得控件的文本
GetDlgItemText(IDB_zdlb, m_leibie);
GetDlgItemText(IDC_zdrq, m_riqi);
GetDlgItemText(IDC_zdsr, m_shouru);
GetDlgItemText(IDC_zdzc, m_zhichu);
GetDlgItemText(IDC_zdbz, m_beizhu);
//拼接sql查询语句
CString strsql;//定义插入的sql语句
int wqq = 1;
if (m_id.IsEmpty() && m_leibie.IsEmpty() && m_riqi.IsEmpty() && m_shouru.IsEmpty() && m_zhichu.IsEmpty() && m_beizhu.IsEmpty())
{
strsql = _T("select *from bill where user_id=") + m_sqlid;
}
else
{
strsql = _T("select *from bill where user_id = ") + m_sqlid + _T(" and ");
if (!m_id.IsEmpty()) {
strsql += _T("bill_id=") + m_id + _T(" and ");
}
if (!m_leibie.IsEmpty()) {
strsql += _T("bill_sort=\'") + m_leibie + _T("\' and ");
}
if (!m_riqi.IsEmpty()) {
strsql += _T("bill_date=\'") + m_riqi + _T("\' and ");
}
if (!m_shouru.IsEmpty()) {
strsql += _T("bill_income=\'") + m_shouru + _T("\' and ");
}
if (!m_zhichu.IsEmpty()) {
strsql += _T("bill_outcome=\'") + m_zhichu + _T("\' and ");
}
if (!m_beizhu.IsEmpty()) {
strsql += _T("bill_id=\'") + m_beizhu + _T("\' and ");
}
}
//MessageBox(strsql);
int nLength = strsql.GetLength();
strsql = strsql.Left(nLength - 5);
//删除列表控件中的数据
int nColumnCount = m_zd.GetHeaderCtrl()->GetItemCount();
m_zd.DeleteAllItems();//删除所有行的数据
//根据sql语句查询数据库
//查询数据库
mysql_query(sock, strsql);
//保存数据库中的信息
//resultSet代表数据表中的每一行的数据
MYSQL_RES* resultSet = mysql_store_result(sock);
//如果数据库中的没有对应的信息的话
if (!resultSet)
{
//可能是数据出现错误
MessageBox(_T("出现错误,可能:数据库中没有对应的表..."), _T("MYSQL"), MB_OK | MB_ICONERROR);
return;
}
//弹出提示信息
if (mysql_num_rows(resultSet) <= 0)
{
MessageBox(_T("数据库中没有任何记录"), _T("MYSQL"), MB_OK | MB_ICONWARNING);
return;
}
//插入数据
int nRow = 0;
MYSQL_ROW row;//获取数据库一行的数据 row对应是一个二级指针
while (row = mysql_fetch_row(resultSet))//获取到一行的真实数据
{
int nField = mysql_num_fields(resultSet);//获取到MySql数据库的字段//对应看他们有多少字段
for (int i = 0; i < nField; i++)
{
if (i == 0)
{
m_zd.InsertItem(nRow, row[i]);//插入第一列
}
else
{
m_zd.SetItemText(nRow, i, row[i+1]);//插入第二三四列
}
}
nRow++;
}
mysql_free_result(resultSet);
}
8页面展示
8.1、运初始界面
图 1:初始界面
8.2、管理员登陆
点击登录菜单的管理员登陆,输入账号ID和密码,若错误会提示你ID或密码错误,成功的话就弹出用户表,可以看到所有人的信息。管理员可以对用户信息进行新增、删除、修改、查讯,并且会自动更新数据库。
图 2:管理员登陆界面
图 3:登录成功弹出所有用户信息
8.3、用户登录
点击登录菜单的用户登陆,输入账号ID和密码,若错误会提示你ID或密码错误,成功的话就弹出登陆成功,可以进入用户记账系统,查看用户个人信息,对个人账单,预算,借入借出进行增删改查,并且会自动更新数据库。
图 4:用户登录界面
图 5:用户登录成功
图 6:查看用户个人信息
8.4、用户记账操作
8.4.1新增一笔支出
点击菜单项的记账下面的支出,可以新增加一笔支出,新增加的支出必须填写ID编号,否则会提示至少要输入ID。
图 7:新增一笔支出
8.4.2新增一笔收入
点击菜单项的记账下面的收入,可以新增加一笔收入,新增加的收入必须填写ID编号,否则会提示至少要输入ID。
图 8:新增一笔收入
8.4.3新增一笔借入
点击菜单项的借还下面的add 借入,可以新增加一笔借入,新增加的借入必须填写ID编号,否则会提示至少要输入ID。
图 9:新增一笔借入
8.4.4新增一笔借出
点击菜单项的借还下面的add 借出,可以新增加一笔借出,新增加的借出必须填写ID编号,否则会提示至少要输入ID。
图 10:新增一笔借出
8.4.5 对收入支出进行增删改查
点击菜单栏的账本,会弹出一个账单表,点击账单表的show账单,会显示本人的所有收入支出。
图 11:弹出账本
图 12:增删改查
8.4.6 对借入进行增删改查
点击菜单栏的借还中的借入表,会弹出一个借入表,点击借入表的show借入,会显示本人的所有借入。
图 13:弹出借入
图 14:增删改查
8.4.7 对借出进行增删改查
点击菜单栏的借还中的借出表,会弹出一个借出表,点击借出表的show借出,会显示本人的所有借出。
图 15:弹出借出
图 16:增删改查
8.4.8 对预算进行增删改查
点击菜单栏的预算表,会弹出一个预算表,点击预算表的show预算,会显示本人的所有预算。
图 17:弹出预算
图 18:增删改查
8.4、用户服务
用户可以根据喜好切换不同的背景以及打开不同音乐或者关掉音乐。其中背景分为4大类,风景、简单、可爱和动漫,每一种类别都有一定数量的图片。
图 19:切换不同背景
图 20:打开关闭音乐