个人理财管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

个人理财管理系统
一、需求分析 (2)
1、系统需求背景 (2)
2、系统需求的设计步骤 (2)
3、系统需求的分析方法 (2)
4、数据库表设计 (3)
二、系统设计 (3)
1、个人理财管理系统E-R图 (3)
2、个人理财管理系统用例图 (5)
三、概要设计 (5)
1、具体模块功能框架及相互关系 (5)
2、各模块所包含的功能 (6)
3、各功能的简要说明 (7)
四、详细设计 (7)
2、个人理财管理员与普通用户的界面 (9)
3、添加用户功能 (10)
4、删除用户功能 (13)
5、修改密码功能 (14)
6、个人理财添加功能 (16)
7、个人理财修改功能 (18)
8、个人理财删除功能 (21)
9、个人理财搜索功能 (23)
10、个人理财月报表单统计功能 (24)
五、调试与实验体会 (27)
个人理财管理系统
一、需求分析
1、系统需求背景
个人理财管理系统是针对个人的的财务管理软件,它能轻松帮你完成记帐以及理财规划。

用户可以自设置自己的收支类型,可以制定每月的收入支出预算,还可以详细统计出各项个人理财指标,便于您分析自己的财务和管理自己的财务。

2、系统需求的设计步骤
(1)设计、构造数据库表;
(2)与VC++前台进行连接;
(3)搭建VC++前台,设计用户使用界面;
(4)对程序进行调试、完善,针对程序中出现的问题进行分析找出错误原因,并予以改正。

3、系统需求的分析方法
(1)安全性的需求分析
根据不同用户角色,设置相应权限,没有权限的用户禁止使用系统。

普通的普通用户用户可以查询财务信息、修改登录系统的密码以及打印月报表的功能:个人理财管理员可以添加、搜索、删除和修改个人理财信息,打印月报表,添加、删除普通用户和修改登录密码的功能
(2) 可用性的需求
①方便操作,操作流程合理。

尽量从用户角度出发, 在新增用户信息时,敲入回车键光标的自动跳转,方便用户录入信息、查询相应的功能。

②控制必须录入项。

本系统能够对必须录入的项目进行控制,使用户能够确保信息录入的完整。

同时对必录入项进行有效的统一的提示,如密码不能为空、用户重名等提示信息。

③操作完成时有统一规范的提示信息。

例如删除操作时,系统可提示警示框“删除成功!”用户点击确认后,系统才可直接返回相关页面。

4、数据库表设计
1.收支表
2.用户表
二、系统设计
1、个人理财管理系统E-R图
账号 密码 权限
个人财务
个人用户
处 理
备注
支出
收入
时间
2、个人理财管理系统用例图
三、 概要设计
1、具体模块功能框架及相互关系
个人理财管理员
普通用户成员
个人理财管理系统
添加个人理财管理员
修改登录密码
登录系统
搜索个人财务状况
统计月报表单添加、删除普通用户成员
<<uses>><<uses>><<uses>><<uses>>
<<uses>>
<<uses>>
<<uses>><<uses>>
<<uses>><<uses>>
添加个人财务收支
修改个人财务收支
删除个人财务收支<<uses>>
<<uses>>
<<uses>>
2、各模块所包含的功能
(1)用户登录模块:登录用户按使用该系统权限分为个人理财管理员 和普通用户成员; (2)个人理财管理员所享有的功能有:搜索个人理财信息功能,删除个人理财信息功能,修改个人理财信息功能,添加个人理财信息功能,普通用户管理,打印月报表; (3)普通用户成员享有的功能有:查询个人理财信息功能,用户管理中的修改密码功能,打印月报表功能。

个人理财管理系统
登录界面
个人理财管理员普通用户成员
搜索个人财务信息
用户信息管理添加个人财务信息
修改个人账务信息删除个人财务信息添加普通用户成员
搜索个人财务信息
用户信息管理打印月报表单
打印月报表单
修改普通用户成员删除普通用户成员
修改登录系统密码
3、各功能的简要说明
(1)搜索个人理财信息功能:就是用户可以根据年月日来查询个人相应的财务情况(收入与支出);
(2)删除个人理财信息功能:就是用户可以根据年月日来删除个人相应的财务情况(收入与支出);
(3)修改个人理财信息功能:就是用户可以根据年月日来修改个人相应的财务情况(收入与支出);
(4)添加个人理财信息功能:就是用户可以添加当天的个人相应的财务情况(收入与支出);
(5)个人理财管理员模块包含有以下几个功能模块:添加普通用户功能,删除普通用户功能,修改登录系统密码功能;
(6)添加普通用户功能:个人理财管理员根据需要添加普通用户,既可以是普通用户成员也可以是再一个个人理财管理员;
(7)删除普通用户功能:个人理财管理员根据需要删除普通用户;
(8)修改登录系统密码功能:用户可以就此修改自己的登录密码;
(9)统计功能:是用户可以让系统统计并显示月报表单,显示其每月的个人理财使用情况。

四、详细设计
1、登录界面
(1)当用户启动该程序时,首先进入用户登录界面,如图(1),只有当用户输入正确的账号和密码时,用户才能正常进入该系统。

图(1)
(2)用户登录对话框中类Clogin的相关函数代码:
OnCheck函数,即准许用户登入的许可。

void CLogin::OnCheck()
{
CString _command;
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("select * from users where 权限= true ",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("insert into users values('admin','dhh',1)",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOp timistic,adCmdText);
}
UpdateData();
if(m_user.IsEmpty())
{
MessageBox("请输入帐号","提示");
m_userC.SetFocus();
return ;
}
if(m_passwd.IsEmpty())
{
MessageBox("请输入密码","提示");
m_passwdC.SetFocus();
return;
}
_command="select * from users where 账号 = '" + m_user + "' and 密码 = '" + m_passwd + "'";
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection,true),adOpe nStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
MessageBox("帐号或密码错误","错误");
return ;
}
user = m_user;
pass = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("权限");
power=1;
if(pass=="0")
power=0;
pass = m_passwd;
CDialog::OnOK();
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
}
2、个人理财管理员与普通用户的界面
当用户正常进入系统后,就进入了基本的数据操作界面,但由于有权限设置,所以,只有是管理员才能做所有操作,而普通用户只能进行搜索,用户管理以及月报表功能的使用,所以如果是管理员进入时就会进入界面如图(2),如果是普通用户进入时就会进入界面如图(3),不可以用的功能按钮就会变灰,不可使用。

下面写的是管理员界面与功能介绍。

(1)个人理财管理员界面
图(2)
(2)普通用户界面
图(3)
3、添加用户功能
(1)在用户编辑框中输入新用户的名字,然后再输入设置的密码,如果要求设为管理员就在管理员权限一栏中打勾,最后单击添加即可,如图(4),并可以同步的在删除用户的下拉列表中找到刚新建的用户名。

图(4)
(2)添加用户代码,函数为OnAddUser
void Manage::OnAddUser()
{
try
{
CString _command;
UpdateData(true);
if(m_add_passwd=="")
{
MessageBox("密码不能为空","提示");
m_add_passwd_e.SetFocus();
return;
}
_command.Format("select * from users where 账号 = '%s'",m_add_user);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection, true),adOpenStatic,adLockOptimistic,adCmdText);
if(!m_pRecordset->adoEOF)
{
MessageBox("用户名已被使用","提示");
m_add_user_e.SetFocus();
}
else
{
_command.Format("insert into users values('%s' , '%s' , %d)",m_add_user,m_add_passwd,m_isadmin);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection, true),adOpenStatic,adLockOptimistic,adCmdText);
int i=m_del_user_l.GetCount();
while(--i>=0)
m_del_user_l.DeleteString(i);
for(i=m_mod_user_l.GetCount();--i>=0;)
m_mod_user_l.DeleteString((UINT)i);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("select 账号from users ",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,ad CmdText);
while(!m_pRecordset->adoEOF)
{
Cstring s = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("");
m_mod_user_l.InsertString(i,s);
m_del_user_l.InsertString(i,s);
if(s == user)
{
m_mod_user_l.SetCurSel(i);
m_del_user_l.SetCurSel(i);
}
i++;
m_pRecordset->MoveNext();///移到下一条记录
}
m_del_user_l.SetCurSel(m_del_user_l.FindString(0,user));
m_mod_user_l.SetCurSel(m_mod_user_l.FindString(0,user));
MessageBox("添加成功","成功");
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
}
4、删除用户功能
(1)删除用户功能,只需在删除用户的下拉列表框中选择所需删除的用户名,如图(5),然后再单击删除按钮就可成功删除。

图(5)
(2)删除用户代码,函数为OnDelUser
void Manage::OnDelUser()
{
if(power)
{
UpdateData();
CString _command;
m_del_user_l.GetLBText(m_del_user_int,_command);
m_del_user_l.DeleteString(m_del_user_int);
m_del_user_l.SetCurSel(m_del_user_l.FindString(0,user));
m_mod_user_l.DeleteString(m_mod_user_l.FindString(0,_command));
m_mod_user_l.SetCurSel(m_mod_user_l.FindString(0,user));
_command = "delete from users where 账号 = '" + _command + "'" ;
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection, true),adOpenStatic,adLockOptimistic,adCmdText);
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
MessageBox("删除成功","成功");
}
5、修改密码功能
(1)正常修改密码:
先在修改密码中的用户下拉列表框中选择所需修改的用户名,然后再在新密码的编辑框中输入需要修改的新密码,然后再在确认密码的编辑框中输入刚设的新密码系统进行确认,如图(6),最后再单击修改按钮就成功了,如图(6)。

(2)异常修改密码:
当在输入新密码和确认密码后,两个密码不一致时,系统会报错,如图(7),当没有输入新密码或确认密码时,系统也会有相应的提示信息。

图(6)
图(7)
(3)修改用户密码代码,函数为OnModUser
void Manage::OnModUser()
{
UpdateData();
if(m_new_passwd=="")
{
MessageBox("修改密码不能为空","提示");
m_new_passwd_e.SetFocus();
return;
}
if(m_new_passwd_2=="")
{
MessageBox("确认密码不能为空","提示");
m_new_passwd_2_e.SetFocus();
return;
}
if(m_new_passwd != m_new_passwd_2)
{
MessageBox("输入的密码不一致,请重新输入","提示");
m_new_passwd_e.SetFocus();
return;
}
try
{
CString _command;
m_del_user_l.GetLBText(m_del_user_int,_command);
_command = "update users set 密码 = '" + m_new_passwd + "' where 账号 = '" + _command + "'";
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection, true),adOpenStatic,adLockOptimistic,adCmdText);
MessageBox("修改成功","成功");
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
}
6、个人理财添加功能
(1)用户可以根据界面右侧的收入、支出以及备注的编辑框添加记录,如图(8),至于时间是由系统设置取当时的时间,然后单击添加按钮就可以成功了(9)。

图(8)
图(9)(2)添加功能的代码,函数为OnAdd。

void CFamilyDlg::OnAdd()
{
try
{
CString _command;
CTime ct;
UpdateData(true);
ct=ct.GetCurrentTime();
if(m_inmoney=="")
m_inmoney="0";
if(m_outmoney=="")
m_outmoney="0";
_command.Format("insert into family values('%.2d:%.2d:%.2d %.2d/%.2d/%.4d',%s,%s,'%s')",
ct.GetHour(),ct.GetMinute(),ct.GetSecond(),ct.GetMonth(),
ct.GetDay(),ct.GetYear(),m_inmoney,m_outmoney,m_tip);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection,true),a dOpenStatic,adLockOptimistic,adCmdText);
MessageBox("添加成功","成功");
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
}
7、个人理财修改功能
(1)用户在右侧的收入、支出以及备注的编辑框中输入需要修改的记录,然后再单击修改按钮,就可以修改成功了,如图(10)。

如果没有输入修改的记录,结果会出错,当输入了修改内容但没有选中需要修改的记录,也会出错,如图(11)。

图(10)
图(11)(2)修改功能代码,函数为OnModify
void CFamilyDlg::OnModify()
{
char buf[1024]={0};int i=-1,n=m_list.GetItemCount();
try
{
while(++i<n)
{
if(m_list.GetItemState(i,2))
{
CString _command;
m_list.GetItemText(i,0,buf,sizeof buf);
char t[6][5];int m,n,k;m=n=k=0;
while(buf[m])
{
if(buf[m]>='0' && buf[m]<='9')
t[n][k++]=buf[m++];
else
{
t[n][k]=0;k=0;n++;
while(buf[m]<'0' || buf[m]>'9')
m++;
}
}
t[n][k]=0;CString zhiduan="set ";
UpdateData(true);
int ii=0;
if(m_inmoney!="")
{
zhiduan+= "收入 = " + m_inmoney;
m_list.SetItemText(i,1,m_inmoney);
ii++;
}
if(m_tip!="")
{
if(ii)
zhiduan+= " , 备注 = '" + m_tip + "'";
else
zhiduan+= " 备注 = '" + m_tip + "'";
m_list.SetItemText(i,3,m_tip);
ii++;
}
if(m_outmoney!="")
{
if(ii)
zhiduan+=" , 支出 = " + m_outmoney ;
else
zhiduan+=" 支出 = " + m_outmoney;
m_list.SetItemText(i,2,m_outmoney);
ii++;
}
if(!ii)
{
MessageBox("'收入支出备注' 中请至少修改一个","提示");
return;
}
_command.Format("update family %s where 时间 = #%s:%s:%s %s/%s/%s# ",
zhiduan,t[3],t[4],t[5],t[1],t[2],t[0]);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection,true),a dOpenStatic,adLockOptimistic,adCmdText);
MessageBox("修改成功","成功");
return;
}
}
MessageBox("修改失败,请先选中一条记录","失败");
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
}
8、个人理财删除功能
(1)用户只需要先在列表框中选中所需要删除的记录,然后单击删除按钮就可成功删除记录,如图(12),如果需要删除多个记录,可以在列表框中使用键盘的shift键选中多个记录,然后单击删除按钮就可以成功删除。

图(12)
(2)删除功能的代码,函数为OnDelete
void CFamilyDlg::OnDelete()
{
char buf[1024]={0};
try
{
int i=m_list.GetItemCount(),err=1;
while(--i>=0)
{
if(m_list.GetItemState(i,2))
{
err=0;CString _command;
m_list.GetItemText(i,0,buf,sizeof buf);
char t[6][5];int m,n,k;m=n=k=0;
while(buf[m])
{
if(buf[m]>='0' && buf[m]<='9')
t[n][k++]=buf[m++];
else
{
t[n][k]=0;k=0;n++;
while(buf[m]<'0' || buf[m]>'9')
m++;
}
}
t[n][k]=0;
_command.Format("delete * from family where 时间 = #%s:%s:%s %s/%s/%s# ",t[3],t[4],t[5],t[1],t[2],t[0]);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection,true),a dOpenStatic,adLockOptimistic,adCmdText);
m_list.DeleteItem(i);
}
}
if(err)
MessageBox("请至少选中一条记录","提示");
else
MessageBox("删除成功","成功");
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
}
9、个人理财搜索功能
(1)用户只需要选择好搜索的时间范围,然后再单击搜索按钮就可成功进行搜索,如图(13)。

图(13)
10、个人理财月报表单统计功能
(1)月报表单打印功能,只要单击月报表单按钮,就会弹出月报表单的对话框,并把从1970年起的每一年的每一个月的总收入、总支出以及总余额显示出来,并把最终的总收入和总支出以及总余额显示出来,如图(14)。

图(14)
(2)月报表打印功能代码,函数为OnMonthPrint
void CFamilyDlg::OnMonthPrint()
{
CMonthReport dlg;
dlg.m_pConnection = m_pConnection;
dlg.m_pRecordset = m_pRecordset;
dlg.DoModal();
}
(3)月报表打印的对话框中类CMonthReport的相关代码
初始化对话框代码,函数为OnInitDialog
BOOL CMonthReport::OnInitDialog()
{
CDialog::OnInitDialog();
int year,month,flag,current=((CTime::GetCurrentTime()).GetYear());
CString _command;
_variant_t a,b,c;
CString in,out,bal;
try
{
for(year=1970;year<=current;year++)
{
for(month=1;month<12;month++)
{
_command.Format("select sum(收入),sum(支出) ,(sum(收入)-sum(支出)) from family where 时间between #00:00:00 %.2d/01/%.4d# and #00:00:00 %.2d/01/%.4d#",month,year,month+1,year);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection,true),a dOpenStatic,adLockOptimistic,adCmdText);
flag=0;
a = m_pRecordset->GetCollect((long)0);///取得第1列的值,从0开始计数,你也可以直接给出列的名称,如下一行
b = m_pRecordset->GetCollect((long)1);///取得username字段值
c = m_pRecordset->GetCollect((long)2);
in="0"; out="0"; bal="0";
if(a.vt != VT_NULL)
{
in=(LPCTSTR)(_bstr_t)a;
flag++;
}
if(b.vt != VT_NULL)
{
out=(LPCTSTR)(_bstr_t)b;
flag++;
}
if(c.vt != VT_NULL)
{
bal=(LPCTSTR)(_bstr_t)c;
flag++;
}
if(flag)
{
_command.Format("%.4d年%.2d月\r\n\t总收入:%s\r\n\t总支出:%s\r\n\t余额%s\r\n************************************************\r\n",year,month,in,out,bal);
m_report+=_command;
}
}
_command.Format("select sum(收入) , sum(支出) ,(sum(收入)-sum(支出)) from
family where 时间 between #00:00:00 12/01/%.4d# and #00:00:00 01/01/%.4d#",year,year+1);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection,true),a dOpenStatic,adLockOptimistic,adCmdText);
flag=0;
a = m_pRecordset->GetCollect((long)0);///取得第1列的值,从0开始计数,你也可以直接给出列的名称,如下一行
b = m_pRecordset->GetCollect((long)1);///取得username字段值
c = m_pRecordset->GetCollect((long)2);
in="0"; out="0"; bal="0";
if(a.vt != VT_NULL)
{
in=(LPCTSTR)(_bstr_t)a;
flag++;
}
if(b.vt != VT_NULL)
{
out=(LPCTSTR)(_bstr_t)b;
flag++;
}
if(c.vt != VT_NULL)
{
bal=(LPCTSTR)(_bstr_t)c;
flag++;
}
if(flag)
{
_command.Format("%.4d年%.2d月\r\n\t总收入:%s\r\n\t总支出:%s\r\n\t余额%s\r\n************************************************\r\n",year,month,in,out,bal);
m_report+=_command;
}
}
_command = "select sum(收入),sum(支出),(sum(收入)-sum(支出)) from family";
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((LPCTSTR)_command,_variant_t((IDispatch*)m_pConnection,true),a dOpenStatic,adLockOptimistic,adCmdText);
flag=0;
a = m_pRecordset->GetCollect((long)0);///取得第1列的值,从0开始计数,你也可以直接给出列的名称,如下一行
b = m_pRecordset->GetCollect((long)1);///取得username字段的值
c = m_pRecordset->GetCollect((long)2);
in="0"; out="0"; bal="0";
if(a.vt != VT_NULL)
{
in=(LPCTSTR)(_bstr_t)a;
flag++;
}
if(b.vt != VT_NULL)
{
out=(LPCTSTR)(_bstr_t)b;
flag++;
}
if(c.vt != VT_NULL)
{
bal=(LPCTSTR)(_bstr_t)c;
flag++;
}
if(flag)
{
_command.Format("总收入:%s\r\n总支出:%s\r\n余额:%s\r\n************************************************\r\n",in,out,bal);
m_report+=_command;
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
UpdateData(0);
return TRUE;
}
五、调试与实验体会
通过了这次课程设计,我不仅提高了模型规划、系统设计和软件编程的能力,自身的各方面的素质也得到了提高。

这次课程设计不仅充实了我的计算机专业知识,扩大了知识面,增强分析问题和解决问题的能力,也提高自学的能力与软件开发能力,为今后的工作打下了坚实的基础。

由于这次设计涉及到数据库,我的学到了不少编程工具与数据库连接的知识,对数据库的操作有了进一步的了解。

这次设计对我的综合能力是一次很好的锻炼,但是我必须承认自己的能力和知识还很肤浅。

所以今后我的学习道路还是很漫长的。

由于
我水平有限,加之时间短暂,故个人理财管理系统中还有许多不足之处,请老师批评指正,我会在以后的制作中不断改进,不断完善。

在调试各功能模块代码运行过程中并没有出现很大的问题,在系统的提示下总能发现错误并改正错误。

在每个模块的设计过程中,类的定义非常重要,可能一个公有变量和私有变量或者类的公有继承和私有继承都会使你的代码错误百出。

当然处理这类问题是比较简单的,但当遇到比较复杂的问题时,就应该具体分析,具体讨论,这也是我在以后编程的过程中不容忽视的问题。

在整个设计过程当中,组员之间的功能模块连接非常重要,各函数之间的连接关系和调用关系要很清楚,这也是我们在调试及测试阶段消耗时间最长的一个阶段。

相关文档
最新文档