《大学生个人理财管理系统.docx》由会员分享,可在线阅读,更多相关《大学生个人理财管理系统.docx(108页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、密级:A南昌大争南昌大争软件学院SOFTWARECOLLEGE OFNANCHANGUNIVERSITY项目报告书PROJECTTRANSACTION(2007 2008 年)题 目大学生个人理财管理系统专业:软件工程班级:软件测试。62班学生姓名:赵麒,程爱财,齐辰升,任蕾蕾,修花平,袁宁英,易锦浩,祝胜康 撰稿人:赵麒(组长)单击选定列表框中的一个账户,即可在界面左下角的“账户余 额”文本框中显示该银行账户的余额。5、数据库管理管理用来存放用户所有数据的数据库。该软件采用利用默 认数据源动态连接数据库的方式,无需用户自己创建ODBC 数据源,非常方便,具有更高的可移植性。用户设置用户的密码
2、修改及使用偏好的设定:基本设置用户名称:Justdoit 登录密码:| 确认密码:偏好设置月平均收入:月支出上限:600.0元500.。元注:此设置可以使系统在需 要时提醒您合理安排消费。注:若不希望更改密码-话留空登录密码和确认密码即可。高级设置支出类型:支出类型:收入类型:添加删除借生奖兼款活学职费金添加删除款食食装落借主零服杂取消定 确更改数据源此功能可以让用户更改当前软件使用的数据源,此功能模块的 设计目的主要是是为了使用户可以在不改变现有数据库的情 况下先打开备份的数据库,察看一下数据库里面的收支记录 等,以便于用户选择正确的备份数据进行还原。5.1 数据库备份备份软件的数据库,有利
3、于防止因意外而造成的数据库损坏。MessageBox(”请填写金额。错误”,MB_OK | MBCONSTOP);m_amount.SetFocus();return;else if (m_account.GetCurSel()=-1)MessageBox(貌似忘记填帐户了吧?错误,MB_OK | MBCONSTOP);m_account.SetFocus();return;else if (m_type.GetCurSel()=-1)MessageBox(还没选择收支类型呢错误,MB_OK | MBCONSTOP);m_type.SetFocus();return;elseinRadio=(
4、CButton*)this-GetDlgItem(IDC_RADIO1);1);/初始化Radi。控件outRadio=(CButton*)this-GetDlgItem(IDC_RADI 02);m_amount.GetWindowT ext(amount);float f;sscanf (amountif (f=0)(MessageBox(金额不能为错误 ,MB_OK | MBJCONSTOP);return;m_time.GetWindowT ext(time);m_comment.GetWindowText (comment);account=AccountArrm_account.G
5、etCurSel();if (inRadio-GetCheck()= 1)type=inStrm_type.GetCurSel();/获得类型IDtemp=HInputH;elsetype=outStrm_type.GetCurSel(); temp=Out;amount=H-n+amount;strSQL.FormatfUPDATE %s SETAmount=%s,b_Date=#%s#,Type=%s,Card=%s,User=%s ,Comment=,%s,H, temp, amount, time, type?account?theU ser,comment);m_databas e.
6、 Execut eSQL(strSQL);Alarm(amount);/获得余额差值/CString amount_org,account_org;amount_org=m_list.GetItemText(row55);account_org=m_list.GetItemText(row,3);if (amount!=amount_org)float m,b;sscanf(amount_org?n%f&b);sscanf (amount/%fn,&m);type=m_list.GetItemText(row,6);if (account=account_org)Illi如二m=m-b;/修改
7、的金额差值b=GetBalance(account);b=b+m;balance. Format (%f,b);balance=balance. Left (balance. GetLength()-5);temp.Format(修改5 的“s”收支记录s元为s元,time, type,amount_org,amount);/ /余额表中的备注 strSQL.FormatfINSERT INTOBalance(Amount,b_Date? Us er.Type, Comment)Values (%s, #%s#, %s, %s,%s)balance, time, theUs er, ac co
8、unt,temp);m_database.ExecuteSQL(strSQL);elsefloat blc;blc=GetBalance(account_org);blc=blc-b;balance. Format (%f,blc);balance=balance.Left(balance.GetLength()-5);temp.Format(修改$ 的s” 收支记录”,time,type);/余额表中的备注strSQL.FormatfINSERT INTOBalance(Amount?b_Date? Us er,Type? Comment)Values (%s,#%s#,%s,%s,%s),
9、balance, time, theUser,ac count_org,temp);m_database.ExecuteSQL(strSQL);blc=GetBalance(account);blc=blc+m;balance. Format (n%fH,blc);balance=balance. Left (balance. GetLengthf)-5);strSQL.FormatfINSERT INTOBalance(Amount?b_Date, Us er,Type, Comment)Values (%s,#%s#,%s,%s,%s),balance, time, theUs er ?a
10、c count,temp);m_database.ExecuteSQL(strSQL);MessageBox(”修改收支记录成功!“,”成功 ,MB_OK | MBCONINFORMATION);/清空界面上的各个控件m_account.SetWindowText (请选择帐户);m_type.SetWindowText (请选择);m_amount. SetWindowT ext();m_amount.GetFocus();m_comment. SetWindowText ();CTime t;t=t.GetCurrentTime();m_time.SetTime(&t);RefreshLi
11、st();return;void CPagel:OnQuery()/单击查询按钮CStringtimefrom,timeto?account?strSQL?accountID?typeID;int row;/获/获/m_startTime.GetWindowText(timefrom);m_endTime.GetWindowText(timeto);row=q_account.GetCurSel();if (row= = -1) accountID=-1/获取账户所对应的ID值else accountID=AccountArrrow;row=q_type.GetCurSel();if (row
12、= = -1) typeID=-1/获取选项所对应的ID值else typeID=TypeArrrow;if (typeID= = n-ln)CString part;part=nwhere User=n+theUser;if (accountID! = -1) part+ = and Card=H+accountID;if (timefrom!=timeto) part+ = n andb_Date#+timefrom+ 00:00:00# andb Date#+timefrom+ 00:00:00# and b Date#+timeto+ 00:00:00#;strSQL.FormatfS
13、ELECT * FROM %s INNER JOIN %s ON %s.Type=%s.ID %s ORDER BY b_Date ASC,name,tName,name,tName,part);RefreshList(strSQL);CString title;float f;strSQL. FormatinAmount);strSQL=strSQL.Left(strSQL.GetLength()-5); title=查询成功!总收入”+strSQL+”元,”; m_invalue.SetWindowT ext(strSQL);strSQL. Format (%f,outAmount);st
14、rSQL=strSQL.Left(strSQL.GetLength()-5);title+=总支出+strSQL+”元。m_outvalue.SetWindowText (strSQL);f=0;if (accountID= = -1)for(row=0;rowa&inAlarm=false)MessageBox(恭喜啦,收入挺高的啊,这下可以小奢侈一下了八_A”,”提醒,MB_OK | MBCONINFORMATION);inAlarm=true;else if(am#%s 00:00:00# and b_Date#%s23:59:59#,theUser,temp,time.Format(%
15、Y-%m-%d);rs. Open (CRecordset:forwardOnly? strSQL);for(int i=0;il&outAlarm=false)(temp.Format(%f,out);temp=temp.Left(temp.GetLength()-5);MessageBox(您的本月总支出+temp+” 元已经超过了支出上限,要注意一下了哦提醒 ,MB_OK | MBCONINFORMATION);outAlarm=true;return;void CPagel:OnCancel()/ TODO: Add extra cleanup herem_account.SetWin
16、dowText(请选择帐户);m_type.SetWindowText(i);m_amount.SetWindowText();m_amount.GetFocus();m_comment.SetWindowText();CTime t;t=t.GetCurrentTime();m_time.SetTime(&t);inRadio=(CButton*)this-GetDlgItem(IDC_RADIO 1);/初始化Radi。控件outRadio=(CButton*)this-GetDlgItem(IDC_RADI 02); RefreshList();inRadio-SetCheck(fals
17、e);outRadio-SetCheck(true); / 自动选中“支出类 别”ListOut();q_account.SetWindowText(所有账户);q_type.SetWindowText(所有类型);m_startTime.SetTime(&t);m_endTime.SetTime(&t);m_invalu e. S etWindowT ext();m_outvalue.SetWindowText();m_blcValue. S etWindowText ();CPropertyPage:OnCancel();Page5.cpp/导出收支记录文件BOOL CPage5:OnIn
18、itDialog()CPropertyPage:OnInitDialog();/ TODO: Add extra initialization hereOpenDB();CString strSQL;m_list.DeleteAHItems();while(m_list.DeleteColumn(0);m_list.InsertColumn(OJ 编号”,LVCFMT_LEFT,O);mist.InsertColumn(l,”时 间”,LVCFMT_LEFT,O);mist. Insertcolumn (2 J 类型编号,LVCFMT_LEFT,O);m_list. InsertColumn
19、(3,帐户编号,LVCFMT_LEFT,O);m_list.InsertColumn(4,日期”,LVCFMT_LEFT,72);m_list. Insertcolumn (5,” 金额,LVCFMT_RIGHT,60);m_list.InsertColumn(6,gy,LVCFMT_LEFT566);m_list.InsertColumn(7,支付方式 ,LVCFMT_LEFT,80);m_list. InsertColumn (8,”备注 ,LVCFMT_LEFT,130);/设置header的宽度m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
20、/调用refreshList。初始化CList中的数据RefreshList();ListAccount(q_account);q_account.SetWindowText(所有帐户);/获取用户自定义的收入和支出类型strSQL.Formatfselect * from User whereID=%s,theUser);m_recordSet.Open(CRecordset:forwardOnly,strSQL);CString intype,outtype;m_recordSet.GetFieldValue(InType,intype);m_recordSet.GetFieldValue
21、(OutType,outtype); inStr. RemoveAllf);outStr.RemoveAll();int bc=SplitString(intype,inStr);bc=SplitString(outtype/?outStr);m_recordSet. Closed;ListAll();/列出所有支出类别return TRUE; / return TRUE unless you set the focus to a control/ EXCEPTION: OCX PropertyPages should return FALSE void CPage5:ListAll()(in
22、t i;q_type.ResetContent();q_type.SetWindowText(所有类别”);TypeArr.RemoveAll();q_type. AddString口所有收入)”);TypeArr.Add(O);for (i=O;iinStr.GetSize();i+)/添加收入列表项和其对应的ID值字符串数组q_type.AddString(FixInType(inStri);TypeArr.Add(inStri);)q_type.AddString( (所有支出)”);TypeArr.Add(-O);for (i=0;ioutStr.GetSize();i+)/添加支出列
23、表项和其对应的ID值字符串数组q_type.AddString(FixOutType(outStri);TypeArr.Add(outStri);void CPage5:RefreshList(CString strSQL)CString temp;float f;/删除CList的所有内容m_list.DeleteAHItems();/打开记录集m_recordSet.Open(CRecordset:forwardOnly,strSQL);/将记录集显示到CList中inAmount=outAmount=allAmount=0;for(int i=0;i0) inAmount+=f;else
24、 outAmount=outAmount-f;temp=temp.Left(temp.GetLength()-3);m_list.SetItemText(i55,temp);m_r ecordSet. GetFieldValue(nTitlen, temp);m_list.SetItemText(i?6?temp);m_recordS et.GetFieldValuef Card, temp);m_list.SetItemText(i?3?temp);m_list.SetItemText(i?7?FixAccount(temp);m_recordSet.GetFieldValue(n Comm
25、ent temp);m_list.SetItemText(i?8,temp);m_r ecord S et. M o veN ext();)/关闭数据库m_recordSet. Closed;void CPage5:ListAccount(CComboBox &m_acc)CString strSQL.temp;CRecordset rs;rs.m_pDatabase=&m_database;strSQL.FormatfSELECT * FROM Account where User=H+theUs er);rs.Open(CRecordset:forwardOnly, strSQL);五、系
26、统架构数据导出数据导出用户设置账户管理余额管理收支管理查 jgi4nL 刖 熊辗余额六、数据表及逻辑关系各数据表之间的关系六、数据表及逻辑关系各数据表之间的关系/将记录集显示到“帐户”列表框中AccountArr.RemoveAll();m_acc. ResetContent ();m_acc.SetWindowText(请选择帐户);AccountArr.AddfO);/添加代表“现金”的ID值m_acc.AddString(现金”);/获forfint i=0;i#n+timefrom+n 00:00:00# andb Date#+timefrom+ 00:00:00# andb Date
27、#n+timeto+n 00:00:00#”;strSQL.FormatfSELECT * FROM %s INNER JOIN %s ON %s.Type=%s.ID %s ORDER BY b_Date ASC?name,tName,name,tName,part);RefreshList(strSQL);void CPage5:OnOut()/单击导出按钮OnQryf);CTime time;CString temp,line,accountID,strSQL;time=time.GetCurrentTime(); int iYear=time.GetYear();int iMonth=
28、time.GetMonth();int iDay=time.GetDay();CString s;s(%d-%d-%d.txt, iYear, iMonth, iDay);C dlg(FALSE, txt, s,OFN_OVERWRITEPROMPT| OFN_HIDEREADONLY, i: 本文件| *.txt | |, this);dlg.m_ofn.lpstrTitle = _T(导出收支记录文件”); if (dlg.DoModal() = IDOK)/实现存盘CString = dlg.GetPathName();C(, C);CArchive ar(&file,CArchive:
29、store | CArchive:bNoFlushOnDelete);/查询用户名/CRecordset rs;rs.m_pDatabase=&m_database;strSQL.FormatfSELECT Name FROM User where ID=+theUser);rs.Open(CRecordset:forwardOnly,strSQL);rs.GetFieldValue(Name,temp);rs.Close();ar.WriteString(“用户 ”+temp+” 的收支记录: rnrn);ar.WriteString(时间tt金额t类型t支付方 式t备注rn”);for (
30、int i=0;im_list.GetItemCount();i+)temp=m_list.GetItemText(i,4);/时间line=temp+t;temp=m_list.GetItemText(i,5);/金额line+=temp+t;temp=m_list.GetItemText(i,6);/类型line+=temp+t;temp=m_list.GetItemText(i,7);/收支方式line+=temp+ t;temp=m_list.GetItemText(i,8);/备注line+=temp+ rn;ar.WriteString(line);ar.WriteString(n
31、rnn);temp . Format inAmount);temp=temp.Left(temp.GetLength()-5);line= 收入金额:”+temp+”元, temp. Format (n%fn,outAmount);temp=temp.Left(temp.GetLength()-5);line+ = ”支出金额:”+temp+”元,”; int row=q_account.GetCurSel();if (row= = -1) accountID=-l;/获取账户所对应的ID值else accountID=AccountArrrow;float f=0;if (accountID = = -1)for(row=0;rowIDooName PasswordAverLimi tInTypeOutTypeOutTypeIDTitleq攵入类别q攵入类别支出类别各数据表的实现:表1:用户信息表User序号字段名称字段描述类型位数属性1ID用户编号自动编号长整形主键2Name用户名称文本15无重复3Password用户密码文本204Aver月平均收入货币1 (小数)5Limi
限制150内