软件工程课程设计 个人账本管理系统文档格式.docx
《软件工程课程设计 个人账本管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计 个人账本管理系统文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
![软件工程课程设计 个人账本管理系统文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/4/8b59472c-e83b-4d4a-98a8-9b33cf537d28/8b59472c-e83b-4d4a-98a8-9b33cf537d281.gif)
2、收入;
3、全部)
时间(1、今天;
2、昨天;
3、本周;
4、上周;
5、本月;
6、上月;
7、本年;
8、去年;
9、全部;
)
以及什么类别
消费的金额在什么范围之类的记录
将时间,类别,金额,备注显示出来
●统计模块
统计
选择统计的类型(1、支出;
什么类别
统计的方式(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
if(tday<
day.Format(_T("
),tday);
start=year+_T("
-"
)+month+_T("
)+day;
end=year+_T("
}
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->
类别"
m_list.SetItemText(0,2,(_bstr_t)m_pRecordset->
金额"
m_list.SetItemText(0,3,(_bstr_t)m_pRecordset->
备注"
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.SetItemText(0,0,str1);
m_list.SetItemText(0,1,str2);
m_list.SetItemText(0,2,str3);
m_list.SetItemText(0,3,str4);
}
管理模块:
voidCManage:
OnBnClickedButton1()//数据库备份
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);
OnBnClickedButton2()//数据库还原
m_button2.EnableWindow(false);
m_button1.EnableWindow(true);
请选择还原文件目录:
flag=-1;
OnBnClickedButton3()//察看日志
CFilefile;
CTimet=CTime:
inttyear,tmonth,tday,thour,tmin,tsec;
CStringyear,month,day,hour,min,sec;
thour=t.GetHour();
tmin=t.GetMinute();
tsec=t.GetSecond();
year.Format(_T("
month.Format(_T("
day.Format(_T("
hour.Format(_T("
),thour);
min.Format(_T("
),tmin);
sec.Format(_T("
),sec);
CStringstr;
str=year+_T("
\\"
)+day+_T("
"
)+hour+_T("
)+min+_T("
察看日志\r\n\r\n"
OnBnClickedButton4()//浏览
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!
UpdateData(false);
}
收入模块:
//CIncome消息处理程序
voidCIncome:
OnBnClickedOk()//确定按钮
if(m_count.IsEmpty())
MessageBox(_T("
金额不能为空"
return;
_bstr_tsql;
sql="
select*frommymoney"
;
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
AddNew();
//添加新行
PutCollect("
类型"
(_bstr_t)_T("
(_bstr_t)mydate);
(_bstr_t)mykind);
(_bstr_t)m_count);
(_bstr_t)m_remark);
GetFields()->
GetItem("
)->
Value=(_bstr_t)_T("
Value=(_bstr_t)mydate;
Value=(_bstr_t)mykind;
Value=(_bstr_t)m_count;
Value=(_bstr_t)m_remark;
Update();
m_AdoConn.ExitConnect();
catch(...)
操作失败"
return;
统计模块:
//CCount消息处理程序
voidCCount:
OnBnClickedOk()//确定统计
CStringtype,date,kind,way,start,end;
m_way.GetLBText(m_way.GetCurSel(),way);
if(type=="
支出"
type=_T("
1"
else
month.Format(_T("
day.Format(_T("
if(kind!
所有支出"
way==_T("
总和"
selectsum(金额)asmyfrommymoneywhere类型="
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->
my"
catch(...)
m_list.SetItemText(0,3,_T("
支出模块:
//COutlay消息处理程序
voidCOutlay:
OnBnClickedOk()
五、项目测试
1、黑盒测试用例:
2、白盒测试用例:
3、黑盒测试记录:
4、白盒测试记录: