10.7.4 收支信息添加、修改的实现
从以上界面的设计来看,收支信息的添加和修改操作共用一个界面,在具体操作过程中要根据操作类型实现动态修改界面标题。进行添加操作时只需进行界面的初始化,而当进行修改操作时,不仅要进行组合框初始化,还要实现获取修改前的各项数据。具体实现时可通过添加和修改操作按钮消息判断当前操作类型。需要添加全局布尔型变量addflag来保存当前用户的操作类型。
给【新增收支信息】按钮添加单击按钮消息函数,在该函数中实现添加收支信息。函数代码如下:
代码位置:见光盘中本章源代码的PAGE1类。
- 1 void PAGE1::OnAdd()
//添加收支信息 - 2 {
- 3 addflag=true;
//操作类型为添加 - 4 int i=0;
- 5 add mydlg;
//定义添加对话框对象 - 6 if(mySet->IsOpen())
//记录集是否打开 - 7 mySet->Close();
//关闭记录集 - 8 mySet->Open();
//打开记录集 - 9 while(!mySet->IsEOF())
//是否到最后一条记录 - 10 {
- 11 mySet->MoveNext();
//记录后移 - 12 i++;
//记录个数统计 - 13 }
- 14 if(i==0)
//没有记录 - 15 {
- 16 mydlg.m_id=1;
//当前记录为1 - 17 }
- 18 else
- 19 mydlg.m_id=mySet->m_id+1;
//记录编号加1 - 20 if(mydlg.DoModal()==IDOK)
//按下【确定】按钮 - 21 {
- 22 mySet->AddNew();
//添加一条空记录 - 23 mySet->m_id=mydlg.m_id;
//编号字段赋值 - 24 mySet->m_time=mydlg.m_time;
//时间字段赋值 - 25 mySet->m_incomenum=mydlg.m_incomenum;
//收入数目字段赋值 - 26 mySet->m_incometype=mydlg.incometype;
//收入类型字段赋值 - 27 mySet->m_costtype=mydlg.costtype;
//消费类型字段赋值 - 28 mySet->m_costnum=mydlg.m_costnum;
//消费数目字段赋值 - 29 mySet->m_about=mydlg.m_about;
//备注字段赋值 - 30 mySet->Update();
//保存数据 - 31 mySet->Requery();
//重新打开记录集 - 32 UpdateData(false);
//显示数据 - 33 OnRequery();
//刷新列表控件 - 34 MessageBox("记录添加成功!","提示",
MB_OK|MB_ICONINFORMATION); - 35 …
//省略部分代码 - 36 }
- 37 }
第9~19行代码实现了记录编号的获取。如果没有记录,编号从1开始,否则,编号在原数值上加1即可
第20~36行代码实现了记录的添加。通过记录集类成员函数AddNew()添加一条空记录,再给各个字段赋值,最后,通过Update()函数保存到数据表中。
上面介绍了添加收支信息的实现过程,收支信息的修改操作基本相同。不同点是在界面初始化部分。下面介绍修改操作界面初始化的实现过程。
给【添加收入支出信息】对话框添加初始化消息函数WM_INITDIALOG,初始化函数OnInitDialog()中具体代码如下所列:
代码位置:见光盘中本章源代码的add类。
- 1 BOOL add::OnInitDialog()
- 2 {
- 3 CDialog::OnInitDialog();
- 4 int k1=-1,k2=-1;
//保存组合框索引 - 5 m_incometype.InsertString(0,"原有资金");
//向组合框中添加数据 - 6 m_incometype.InsertString(1,"工资收入");
- 7 m_incometype.InsertString(2,"奖金");
- 8 m_incometype.InsertString(3,"各类津贴补贴");
- 9 m_incometype.InsertString(4,"亲友馈赠");
- 10 m_incometype.InsertString(5,"经营所得资金");
- 11 m_incometype.InsertString(6,"投资所得");
- 12 m_incometype.InsertString(7,"其他各类收入");
- 13 m_incometype.SetCurSel(1);
//设置默认选项 - 14 m_costtype.InsertString(0,"基本生活费支出");
//向组合框中添加数据 - 15 m_costtype.InsertString(1,"医疗保健支出");
- 16 m_costtype.InsertString(2,"通信支出");
- 17 m_costtype.InsertString(3,"教育费");
- 18 m_costtype.InsertString(4,"休闲娱乐支出");
- 19 m_costtype.InsertString(5,"购物消费支出");
- 20 m_costtype.InsertString(6,"各类保养维护支出");
- 21 m_costtype.InsertString(7,"投资支出");
- 22 m_costtype.InsertString(8,"其他支出");
- 23 if(addflag)
//如果是添加操作 - 24 {
- 25 COleDateTime oleDt=COleDateTime::GetCurrentTime();
//获取当前时间 - 26 CString strFileName=oleDt.Format("%Y-%m-%d %H:%M:%S");
//数据格式转换 - 27 m_time=strFileName;
- 28 UpdateData(false);
//显示数据 - 29 m_costtype.SetCurSel(0);
//设置显示第一个选项 - 30 costtype="基本生活费支出";
- 31 m_incometype.SetCurSel(0);
//设置显示第一个选项 - 32 incometype="原有资金";
- 33 SetWindowText("添加收入支出信息");
//设置添加窗口标题 - 34 }
第4~22行代码实现了收入、支出组合框中数据项的添加。和插入数据InsertString()类似功能的函数还有AddString(),不同的是后者参数只有一个为字符串。
第23~34行代码实现了添加操作时当前时间的获取、组合框初始化和添加窗口标题的设置。
下面介绍收支信息修改操作的实现过程。对应代码如下:
- 35 else
//如果是修改操作 - 36 {
//收入选项对应索引 - 37 if(incometype=="原有资金")
- 38 k1=0;
- 39 if(incometype=="工资收入")
- 40 k1=1;
- 41 …
//省略部分代码 - 42 if(costtype=="基本生活费支出")
- 43 k2=0;
- 44 if(costtype=="医疗保健支出")
- 45 k2=1;
- 46 …
//省略部分代码 - 47 m_incometype.SetCurSel(k1);
//设置收入选项索引 - 48 m_costtype.SetCurSel(k2);
//设置支出选项索引 - 49 SetWindowText("修改收支信息");
//设置修改窗口标题 - 50 }
- 51 return TRUE;
- 52 }
第35~50行代码实现了修改操作时组合框数据项的显示当前选项和添加窗口标题的设置。收入、支出两个组合框中选项初始化显示是根据incometype和costtype的值来实现的。
【责任编辑:
云霞 TEL:(010)68476606】