软件工程课程设计 个人账本管理系统.docx
- 文档编号:6193347
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:20
- 大小:220.41KB
软件工程课程设计 个人账本管理系统.docx
《软件工程课程设计 个人账本管理系统.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计 个人账本管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
软件工程课程设计个人账本管理系统
软件工程课程设计报告
---个人帐本管理
一、需求分析
1、系统开发背景
当今社会是一个信息与科技并行的时代,在社会中消费时每个人都有的社会行为,消费与人的日常生活是息息相关的,一个人如果有一个很好的消费观的话能给自己带来很到好处。
鉴于此目的,编写了一个小型的个人账本管理系统。
此系统是一个简单的系统,可以管理个人的日常消费,可以为一般人所使用。
对于业务较多的用户来说此系统就不是一个很好的选择。
2、软件主要组成及功能
●收入模块
功能:
录入收入
任何时间录入你所得到的收入(共有以下几种选择:
1、工资;2、奖金;3、其他收入;);
输入你所的到的金额;
录入金额的原因(可选);
●支出模块
功能:
支出的记录
什么时候
什么类型的支出(1、生活费;2、日常用品;3、休闲娱乐;4、社交应酬;5、交通费;6、通讯费;7、医疗保健;8、其他支出)
输入支出的金额
什么原因的支出
●查询模块
功能:
查询
以选择查询的类型(1、支出;2、收入;3、全部)
时间(1、今天;2、昨天;3、本周;4、上周;5、本月;6、上月;7、本年;8、去年;9、全部;)
以及什么类别
消费的金额在什么范围之类的记录
将时间,类别,金额,备注显示出来
●统计模块
功能:
统计
选择统计的类型(1、支出;2、收入;)
时间(1、今天;2、昨天;3、本周;4、上周;5、本月;6、上月;7、本年;8、去年;9、全部;)
什么类别
统计的方式(1、总和;2、平均值;3、最大值;4、最小值;)
将时间,类别,方式,数值显示出来
●管理模块
功能:
完成系统相应的管理
可以对数据库进行备份
数据库的还原
查看日志操作。
●修改模块
功能:
对已有数据进行修改更新操作
对记录进行修改
对记录删除。
●退出模块
退出此系统
3、用户特点及一般约束
4、功能需求(DFD图)
收入
顶层图:
一层图:
支出
顶层图:
一层图:
查询
顶层图:
一层图:
统计
顶层图:
一层图:
管理
顶层图:
一层图:
修改
顶层图:
一层图:
5、外部接口需求
在用户界面方面要求对每一个操作都以主界面为前提弹出相应的对话框,硬软件接口方面没有特别的需求,一般用户都可以直接使用。
6、性能需求
因为系统本身较小,实际使用的人群的特点,响应时间可能有不同的要求。
7、软件属性需求
在数据的检索、数据的增删改方面必须做到丝毫不差,满足软件开发的正确性的要求。
必须充分考虑软件的异常处理机制以及软件的复用性,以增强软件的健壮性。
在软件的保密性方面可以不用考虑,此软件主要是面向小型用户,对系统的保密没有要求。
所开发出来的软件必须是可维护的,要有可以升级的空间,要预留接口,方便后面软件的升级。
8、数据需求(ER图)
二、项目概要设计
1、总体设计(系统总流程图)
2、各个界面的截图及相应的操作规则
在第一次运行是要首先运行此文件对控件进行注册。
●第一次运行的结果如图所示
●收入
●支出
●查询
●统计
●管理
●退出
三、详细设计
1、进行项目详细设计工作;
2、写出详细设计说明书。
四、编码
1、此系统用MFC来编写。
2、编码分工:
3、各个模块核心代码
查询模块:
//CSelect消息处理程序
voidCSelect:
:
OnBnClickedOk()//确定查询
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
CStringtype,date,kind,count,start,end;
m_type.GetLBText(m_type.GetCurSel(),type);
m_date.GetLBText(m_date.GetCurSel(),date);
m_kind.GetLBText(m_kind.GetCurSel(),kind);
m_count.GetLBText(m_count.GetCurSel(),count);
CTimet=CTime:
:
GetCurrentTime();
inttyear,tmonth,tday;
CStringyear,month,day;
tyear=t.GetYear();
tmonth=t.GetMonth();
tday=t.GetDay();
if(date=="今天")
{
year.Format(_T("%d"),tyear);
if(tmonth<10)
month.Format(_T("0%d"),tmonth);
else
month.Format(_T("%d"),tmonth);
if(tday<10)
day.Format(_T("0%d"),tday);
else
day.Format(_T("%d"),tday);
start=year+_T("-")+month+_T("-")+day;
end=year+_T("-")+month+_T("-")+day;
}
CStringstr,str1,str2,str3,str4;
ADOConnm_AdoConn;
m_AdoConn.OnInitADOConn();
CStringsql;
if(type==_T("0")&&kind!
=_T("所有收入"))
sql.Format(_T("select时间,类别,金额,备注frommymoneywhere类型="+type+"and类别='"+kind+"'and时间>='"+start+"'and时间<='"+end+"'and金额>="+count+"orderby时间asc"));
_RecordsetPtrm_pRecordset;
m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
m_list.DeleteAllItems();
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
m_list.InsertItem(0,_T(""));
m_list.SetItemText(0,0,(_bstr_t)m_pRecordset->GetCollect(_T("时间")));
m_list.SetItemText(0,1,(_bstr_t)m_pRecordset->GetCollect(_T("类别")));
m_list.SetItemText(0,2,(_bstr_t)m_pRecordset->GetCollect(_T("金额")));
m_list.SetItemText(0,3,(_bstr_t)m_pRecordset->GetCollect(_T("备注")));
m_pRecordset->MoveNext();
}
str=m_list.GetItemText(0,0);
if(str==_T(""))
{
m_list.DeleteAllItems();
m_date.GetLBText(m_date.GetCurSel(),str1);
m_kind.GetLBText(m_kind.GetCurSel(),str2);
m_count.GetLBText(m_count.GetCurSel(),str3);
str4=_T("无此记录");
m_list.InsertItem(0,_T(""));
m_list.SetItemText(0,0,str1);
m_list.SetItemText(0,1,str2);
m_list.SetItemText(0,2,str3);
m_list.SetItemText(0,3,str4);
}
}
管理模块:
voidCManage:
:
OnBnClickedButton1()//数据库备份
{
//TODO:
在此添加控件通知处理程序代码
m_button1.EnableWindow(false);
m_button2.EnableWindow(true);
m_static.SetWindowTextW(_T("请选择备份目录:
"));
m_static.ShowWindow(SW_SHOW);
m_button.ShowWindow(SW_SHOW);
m_edit.ShowWindow(SW_SHOW);
m_edit.SetWindowTextW(_T(""));
flag=1;
strname=_T("");
UpdateData(false);
Invalidate(true);
}
voidCManage:
:
OnBnClickedButton2()//数据库还原
{
//TODO:
在此添加控件通知处理程序代码
m_button2.EnableWindow(false);
m_button1.EnableWindow(true);
m_static.SetWindowTextW(_T("请选择还原文件目录:
"));
m_static.ShowWindow(SW_SHOW);
m_button.ShowWindow(SW_SHOW);
m_edit.ShowWindow(SW_SHOW);
m_edit.SetWindowTextW(_T(""));
flag=-1;
strname=_T("");
UpdateData(false);
Invalidate(true);
}
voidCManage:
:
OnBnClickedButton3()//察看日志
{
//TODO:
在此添加控件通知处理程序代码
CFilefile;
CTimet=CTime:
:
GetCurrentTime();
inttyear,tmonth,tday,thour,tmin,tsec;
CStringyear,month,day,hour,min,sec;
tyear=t.GetYear();
tmonth=t.GetMonth();
tday=t.GetDay();
thour=t.GetHour();
tmin=t.GetMinute();
tsec=t.GetSecond();
year.Format(_T("%d"),tyear);
month.Format(_T("%d"),tmonth);
day.Format(_T("%d"),tday);
hour.Format(_T("%d"),thour);
min.Format(_T("%d"),tmin);
sec.Format(_T("%d"),sec);
CStringstr;
str=year+_T("\\")+month+_T("\\")+day+_T("")+hour+_T(":
")+min+_T("察看日志\r\n\r\n");
}
voidCManage:
:
OnBnClickedButton4()//浏览
{
//TODO:
在此添加控件通知处理程序代码
if(flag==1)
{
UpdateData(true);
TCHARszDir[MAX_PATH];
BROWSEINFObi;
ITEMIDLIST*pidl;
bi.hwndOwner=this->m_hWnd;
bi.pidlRoot=NULL;
bi.pszDisplayName=szDir;
bi.lpszTitle=_T("请选择目录");
bi.ulFlags=BIF_RETURNONLYFSDIRS;
bi.lpfn=NULL;
bi.lParam=0;
bi.iImage=0;
pidl=SHBrowseForFolder(&bi);
if(pidl==NULL)return;
if(!
SHGetPathFromIDList(pidl,szDir))return;
elsestrname=szDir;
UpdateData(false);
}
elseif(flag==-1)
{
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,_T("数据库文件|moneyback.db||"));
if(dlg.DoModal()==IDOK)
{
strname=dlg.GetPathName();
}
if(strname!
=_T(""))
{
UpdateData(false);
}
}
}
收入模块:
//CIncome消息处理程序
voidCIncome:
:
OnBnClickedOk()//确定按钮
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
if(m_count.IsEmpty())
{
MessageBox(_T("金额不能为空"));
return;
}
ADOConnm_AdoConn;
m_AdoConn.OnInitADOConn();
_bstr_tsql;
sql="select*frommymoney";
_RecordsetPtrm_pRecordset;
m_pRecordset=m_AdoConn.GetRecordSet(sql);
CStringmydate,mykind;
m_date.GetLBText(m_date.GetCurSel(),mydate);
m_kind.GetLBText(m_kind.GetCurSel(),mykind);
mydate.Remove('');
try
{
m_pRecordset->AddNew();//添加新行
m_pRecordset->PutCollect("类型",(_bstr_t)_T("0"));
m_pRecordset->PutCollect("时间",(_bstr_t)mydate);
m_pRecordset->PutCollect("类别",(_bstr_t)mykind);
m_pRecordset->PutCollect("金额",(_bstr_t)m_count);
m_pRecordset->PutCollect("备注",(_bstr_t)m_remark);
m_pRecordset->GetFields()->GetItem("类型")->Value=(_bstr_t)_T("0");
m_pRecordset->GetFields()->GetItem("时间")->Value=(_bstr_t)mydate;
m_pRecordset->GetFields()->GetItem("类别")->Value=(_bstr_t)mykind;
m_pRecordset->GetFields()->GetItem("金额")->Value=(_bstr_t)m_count;
m_pRecordset->GetFields()->GetItem("备注")->Value=(_bstr_t)m_remark;
m_pRecordset->Update();
m_AdoConn.ExitConnect();
}
catch(...)
{
MessageBox(_T("操作失败"));
return;
}
}
统计模块:
//CCount消息处理程序
voidCCount:
:
OnBnClickedOk()//确定统计
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
CStringtype,date,kind,way,start,end;
m_type.GetLBText(m_type.GetCurSel(),type);
m_date.GetLBText(m_date.GetCurSel(),date);
m_kind.GetLBText(m_kind.GetCurSel(),kind);
m_way.GetLBText(m_way.GetCurSel(),way);
if(type=="支出")
type=_T("1");
else
type=_T("0");
CTimet=CTime:
:
GetCurrentTime();
inttyear,tmonth,tday;
CStringyear,month,day;
tyear=t.GetYear();
tmonth=t.GetMonth();
tday=t.GetDay();
if(date=="今天")
{
year.Format(_T("%d"),tyear);
month.Format(_T("%d"),tmonth);
day.Format(_T("%d"),tday);
start=year+_T("-")+month+_T("-")+day;
end=year+_T("-")+month+_T("-")+day;
}
ADOConnm_AdoConn;
m_AdoConn.OnInitADOConn();
CStringsql;
if(kind!
=_T("所有收入")&&kind!
=_T("所有支出")&&way==_T("总和"))
sql.Format(_T("selectsum(金额)asmyfrommymoneywhere类型="+type+"and类别='"+kind+"'and时间>='"+start+"'and时间<='"+end+"'"));
_RecordsetPtrm_pRecordset;
m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
m_list.InsertItem(0,_T(""));
m_list.SetItemText(0,0,date);
m_list.SetItemText(0,1,kind);
m_list.SetItemText(0,2,way);
try
{
m_list.SetItemText(0,3,(_bstr_t)m_pRecordset->GetCollect(_T("my")));
}
catch(...)
{
m_list.SetItemText(0,3,_T("0"));
}
m_pRecordset->MoveNext();
}
}
支出模块:
//COutlay消息处理程序
voidCOutlay:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
if(m_count.IsEmpty())
{
MessageBox(_T("金额不能为空"));
return;
}
ADOConnm_AdoConn;
m_AdoConn.OnInitADOConn();
_bstr_tsql;
sql="select*frommymoney";
_RecordsetPtrm_pRecordset;
m_pRecordset=m_AdoConn.GetRecordSet(sql);
CStringmydate,mykind;
m_date.GetLBText(m_date.GetCurSel(),mydate);
m_kind.GetLBText(m_kind.GetCurSel(),mykind);
mydate.Remove('');
try
{
m_pRecordset->AddNew();//添加新行
m_pRecordset->PutCollect("类型",(_bstr_t)_T("1"));
m_pRecordset->PutCollect("时间",(_bstr_t)mydate);
m_pRecordset->PutCollect("类别",(_bstr_t)mykind);
m_pRecordset->PutCollect("金额",(_bstr_t)m_count);
m_pRecordset->PutCollect("备注",(_bstr_t)m_remark);
m_pRecordset->GetFields()->GetItem("类型")->Value=(_bstr_t)_T("1");
m_pRecordset->GetFields()->GetItem("时间")->Value=(_bstr_t)mydate;
m_pRecordset->GetFields()->GetItem("类别")->Value=(_bstr_t)mykind;
m_pRecordset->GetFields()->GetItem("金额")->Value=(_bstr_t)m_count;
m_pRecordset->GetFields()->GetItem("备注")->Value=(_bstr_t)m_remark;
m_pRecordset->Update();
m_AdoConn.ExitConnect();
}
catch(...)
{
MessageBox(_T("操作失败"));
return;
}
}
五、项目测试
1、黑盒测试用例:
2、白盒测试用例:
3、黑盒测试记录:
4、白盒测试记录:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程课程设计 个人账本管理系统 软件工程 课程设计 个人 账本 管理 系统