《家庭财务管理系统》数据库技术及应用课程设计报告.docx
- 文档编号:10287572
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:29
- 大小:118.03KB
《家庭财务管理系统》数据库技术及应用课程设计报告.docx
《《家庭财务管理系统》数据库技术及应用课程设计报告.docx》由会员分享,可在线阅读,更多相关《《家庭财务管理系统》数据库技术及应用课程设计报告.docx(29页珍藏版)》请在冰豆网上搜索。
《家庭财务管理系统》数据库技术及应用课程设计报告
广西民族大学
高级数据库技术及应用
课程设计报告
课程设计题目:
家庭财务管理系统
所属学院:
信息科学与工程学院
软件学院
专业年级:
2010网络
姓名:
郭璇
学号:
110263100129
指导教师:
葛丽娜蒋荣萍
一.课程设计名称………………………………………………….……………….2
二.课程设计目的………………………………………………….……………….2
三.系统概述……………………………………………………….……………….2
四.系统需求分析………………………………………………….……………….2
4.1系统分析……………………………………………….…………………..2
4.2系统需要实现的功能………………………………….………………….2
五.系统设计说明………………………………………………….……………….2
5.1系统E-R图设计………………………………….………………………...3
5.2系统数据库设计……………………………………………………………4
六.实现方案描述………………………………………………….……………….4
6.1信息管理…………………………………………….……………………..4
6.1.1读取信息…………………………………….……………………...4
6.1.2添加信息…………………………………….……………………...6
6.1.3删除信息…………………………………….……………………...8
6.2信息查询…………………………………………….……………………..8
6.2.1按收支人员统计查询……………………….……………………....8
6.2.2按类型进行统计查询……………………….……………………...11
6.2.3同时按类型和人员查询…………………….……………………..16
七.课程设计总结…………………………………………………………………19
一.课程设计名称
家庭财务管理系统。
二.课程设计目的
1、通过本次课程设计,对之前课程中学习的VisualC++6.0编程技术和数据库系统与应用进行一次综合的使用。
2、通过开发小型数据库应用系统,充分地实践数据库系统开发的全过程,将书本中学到的数据库理论、数据库设计原理与技术应用到实践中,提高学生的动手能力。
三.系统概述
随着经济的发展,人们的消费水平越来越高,消费的类型也在基本的柴米油盐上多了精神层次上的消费。
但是这并不能让我们盲目消费,因此,家庭财务管理系统可对每天的收支进行记账,让我们清楚的知道家庭的收支情况。
平衡收支情况能让我们的生活更加稳定,不会盲目消费,也可在有剩余闲钱的时候去娱乐放松一下。
四.系统需求分析
4.1系统分析
家庭财务管理系统可以对家庭成员,收支类型管理,并根据成员和收支类型添加和管理相应的收支信息。
可对每个时间段中某成员或某类型的收支进行统计查询。
4.2系统需要实现的功能
实现家庭财务管理系统支出的相关功能,可以对每天的支出进行记账,记账要实现分类:
1、按不同的支出类型分类;
2、按不同的消费人员进行分类。
可以对历史数据进行查询,查询要实现的功能:
1、指定时间段,可以按类型进行该时间段的支出统计查询。
2、指定时间段,可以按消费人员进行该时间段的支出统计查询。
3、指定时间段,可以同时按类型和消费人员进行该时间段的支出统计查询。
注:
对历史数据的查询需要实现的是:
设定消费,则可以查看该消费人员在特定时间段的消费总额,或者设定消费类型,则可以查看在特定时间段内该消费类型总额为多少。
扩展功能:
能同时实现家庭财务管理系统收入的相关功能,具体功能按照自己的想法实现。
五.系统设计说明
5.1系统E-R图设计
5.2系统数据库设计
家庭成员表(Member)
字段名字
字段类型
主键
外键
是否为空
描述
Mname
Char(10)
是
成员名字
Mno
Char
(2)
成员编号
Sex
Char
(2)
成员性别
Age
int
成员年龄
Phone
Char(11)
是
成员电话
支出类型表(Consume)
字段名字
字段类型
主键
外键
是否为空
描述
Cname
Char(20)
是
支出类型名称
Cno
Char
(2)
支出类型编号
成员支出表(CM)
字段名字
字段类型
主键
外键
是否为空
描述
Mname
Char(10)
是
是
成员名字
Cname
Char(20)
是
是
支出类型名称
Ctime
Datetime
是
支出时间
Cmoney
Money
支出金额
收入类型信息(Income)
字段名字
字段类型
主键
外键
是否为空
描述
Iname
Char(20)
是
收入类型名称
Ino
Char
(2)
收入类型编号
成员收入信息(IM)
字段名字
字段类型
主键
外键
是否为空
描述
Mname
Char(10)
是
是
成员名字
Iname
Char(20)
是
是
收入类型名称
Itime
Datetime
是
收入时间
Imoney
Money
收入金额
六.实现方案描述
6.1信息管理
6.1.1读取信息
对表格中的信息进行读取,方便用户查看已有的信息,对相应的信息进行管理。
第一条:
点击“第一条”按钮,显示表中第一条信息。
上一条:
点击“上一条”按钮,显示上一条信息,若直接点此按钮,从第一条记录开始显示。
若记录已是第一条,提示用户已经是第一条信息。
下一条:
点击“下一条”按钮,显示下一条信息,若直接点此按钮,从第一条记录开始显示。
若记录已是最后一条,提示用户已经是最后的信息。
读取信息功能代码
voidCMemberInfoDialog:
:
OnTOOLBARMemberFirst()
{
//TODO:
Addyourcommandhandlercodehere
MyMemberInfoSet.MoveFirst();//移动到第一条记录
DisplayRecord();//更新窗口显示
}
voidCMemberInfoDialog:
:
OnTOOLBARMemberPrevious()
{
//TODO:
Addyourcommandhandlercodehere
if(m_MemberID.IsEmpty())
{
MyMemberInfoSet.MoveFirst();
DisplayRecord();
}
else
{
if(!
MyMemberInfoSet.IsBOF())//不是第一条记录
{
MyMemberInfoSet.MovePrev();
if(!
MyMemberInfoSet.IsBOF())
DisplayRecord();
else
{
MyMemberInfoSet.MoveNext();
AfxMessageBox("已是第一条信息!
");
}
}
/*else
{
MyMemberInfoSet.MoveNext();
AfxMessageBox("已是第一条信息!
");
}*/
}
}
voidCMemberInfoDialog:
:
OnTOOLBARMemberNext()
{
//TODO:
Addyourcommandhandlercodehere
if(m_MemberID.IsEmpty())
{
MyMemberInfoSet.MoveFirst();
DisplayRecord();
}
else
{
if(!
MyMemberInfoSet.IsEOF())//不是移动到了最后一条
{
MyMemberInfoSet.MoveNext();//移动到下一条记录
if(!
MyMemberInfoSet.IsEOF())//下一条不是移动到了最后一条
DisplayRecord();
else
{
MyMemberInfoSet.MovePrev();
AfxMessageBox("已是最后一条信息!
");
}
}
else
{
MyMemberInfoSet.MovePrev();
AfxMessageBox("已是最后一条信息!
");
}
}
}
6.1.2添加信息
为每一个表格添加记录,对于不能为空的选项,在用户未填写的时候做出相应的提示,只有正确输入后才能添加。
但由于主码要唯一,所以要进行判断用户输入的信息是否与表中记录冲突,如果冲突,提示用户修改相应的选项。
正确无误后可以将记录保存到相应的表格里,实现对信息的添加。
添加信息功能代码
voidCMemberInfoDialog:
:
OnTOOLBARMemberSave()
{
//TODO:
Addyourcommandhandlercodehere
UpdateData(true);//读入输入的资料
if(m_MemberName.IsEmpty())
AfxMessageBox("请输入成员名字!
");
elseif(m_MemberID.IsEmpty())
AfxMessageBox("请输入成员编号!
");
elseif(m_MemberSex.IsEmpty())
AfxMessageBox("请输入成员性别!
");
elseif(m_MemberAge<0||m_MemberAge>100)
AfxMessageBox("成员年龄应在到!
");
else{
CStringFind_MName;
CStringFind_MNo;
Find_MNo.Format("SELECT*FROMMemberWHEREMno='%s'",m_MemberID);
if(MyMemberInfoSet_MNo.IsOpen())//关闭表
MyMemberInfoSet_MNo.Close();
if(!
MyMemberInfoSet_MNo.Open(AFX_DB_USE_DEFAULT_TYPE,Find_MNo))
AfxMessageBox("成员信息表打开失败!
");
if(MyMemberInfoSet_MNo.GetRecordCount()!
=0)
{
AfxMessageBox("成员编号不能重复,请修改后再保存!
");
if(MyMemberInfoSet_MNo.IsOpen())
MyMemberInfoSet_MNo.Close();
return;
}
else
{
Find_MName.Format("SELECT*FROMMemberWHEREMname='%s'",m_MemberName);
if(MyMemberInfoSet_MName.IsOpen())//关闭表
MyMemberInfoSet_MName.Close();
if(!
MyMemberInfoSet_MName.Open(AFX_DB_USE_DEFAULT_TYPE,Find_MName))
AfxMessageBox("成员信息表打开失败!
");
if(MyMemberInfoSet_MName.GetRecordCount()!
=0)
{
AfxMessageBox("成员名字不能重复,请修改后再保存!
");
if(MyMemberInfoSet_MName.IsOpen())
MyMemberInfoSet_MName.Close();
return;
}
MyMemberInfoSet.AddNew();//如果是添加记录,就调用添加记录的函数处理
MyMemberInfoSet.m_Mname=m_MemberName;//对应变量更新
MyMemberInfoSet.m_Mno=m_MemberID;
MyMemberInfoSet.m_Sex=m_MemberSex;
MyMemberInfoSet.m_Age=m_MemberAge;
MyMemberInfoSet.m_Phone=m_MemberPhone;
MyMemberInfoSet.Update();
MyMemberInfoSet.Requery();
AfxMessageBox("保存成功!
");
//m_Add=false;//设置添加状态为false
DisplayRecord();//更新显示
}
}
}
6.1.3删除信息
用户点击“删除”按钮,可以对当前信息进行删除。
因为删除信息后不可恢复,所以当用户删除信息时,再次询问是否要删除,只有用户确认后才能删除。
删除信息功能代码
voidCMemberInfoDialog:
:
OnTOOLBARMemberDelete()
{
//TODO:
Addyourcommandhandlercodehere
intret=MessageBox("是否要删除该记录?
","提示",MB_OKCANCEL);
if(ret==1)
{
MyMemberInfoSet.Delete();//删除记录
MyMemberInfoSet.Requery();
AfxMessageBox("删除成功!
");
}
else
;
DisplayRecord();//更新显示
}
6.2信息查询
6.2.1按收支人员统计查询
按家庭成员查询收支情况,在下来列表中可供用户选择已用的成员,避免出现打错字等麻烦。
用户选择时间,在相应的时间段内查询信息。
如果该成员在该时段内没有收支情况,提示用户没有该成员的记录,如果有便在下来列表中显示详情和总额。
如果选择的时间有错,提示用户重新输入。
按支出人员统计查询界面和功能代码
voidCSelect_CM_By_Member:
:
OnBUTTONSelect()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_List.DeleteAllItems();
UpdateData(true);
if(m_MemberName.IsEmpty())
{
AfxMessageBox("请输入要查询的成员名字!
");
return;
}
if(m_BeginTime>m_EndTime)
{
AfxMessageBox("时间输入有错,请重新输入!
");
return;
}
if(m_MemberName=="全部")
{
m_TotalMoney=0;
while(!
By_MemberSet.IsEOF())
{
if(m_BeginTime>By_MemberSet.m_Ctime||By_MemberSet.m_Ctime>m_EndTime)
{
By_MemberSet.MoveNext();
continue;
}
CStringMname=By_MemberSet.m_Mname;
CStringCname=By_MemberSet.m_Cname;
Mname.TrimRight();
Cname.TrimRight();
CStringCtime=By_MemberSet.m_Ctime.Format("'%Y-%m-%d'");
CStringCMoney=By_MemberSet.m_Cmoney;
m_List.InsertItem(0,"");
m_List.SetItemText(0,0,Mname);
m_List.SetItemText(0,1,Cname);
m_List.SetItemText(0,2,Ctime);
m_List.SetItemText(0,3,CMoney);
intMoney=atoi(CMoney);
m_TotalMoney+=Money;
By_MemberSet.MoveNext();
}
UpdateData(false);
return;
}
else
{
CStringSelectMember;
SelectMember="SELECT*FROMCMWHEREMname='";
SelectMember+=m_MemberName;
SelectMember+="'";
if(By_MemberSet.IsOpen())
{
By_MemberSet.Close();
}
if(!
By_MemberSet.Open(AFX_DB_USE_DEFAULT_TYPE,SelectMember))
{
AfxMessageBox("Mumber表打开失败!
");
}
if(By_MemberSet.GetRecordCount()==0)
{
AfxMessageBox("此成员不存在,请确认后再输入!
");
if(By_MemberSet.IsOpen())
{
By_MemberSet.Close();
}
return;
}
while(m_BeginTime>By_MemberSet.m_Ctime||By_MemberSet.m_Ctime>m_EndTime)
{
if(!
By_MemberSet.IsEOF())
By_MemberSet.MoveNext();
else
{
AfxMessageBox("此成员在此时段无消费记录!
");
if(By_MemberSet.IsOpen())
{
By_MemberSet.Close();
}
return;
}
}
m_TotalMoney=0;
while(!
By_MemberSet.IsEOF())
{
if(m_BeginTime>By_MemberSet.m_Ctime||By_MemberSet.m_Ctime>m_EndTime)
{
By_MemberSet.MoveNext();
continue;
}
CStringMname=By_MemberSet.m_Mname;
CStringCname=By_MemberSet.m_Cname;
CStringCtime=By_MemberSet.m_Ctime.Format("'%Y-%m-%d'");
CStringCMoney=By_MemberSet.m_Cmoney;
Mname.TrimRight();
Cname.TrimRight();
m_List.InsertItem(0,Mname);
m_List.SetItemText(0,1,Cname);
m_List.SetItemText(0,2,Ctime);
m_List.SetItemText(0,3,CMoney);
intMoney=atoi(CMoney);
m_TotalMoney+=Money;
By_MemberSet.MoveNext();
}
UpdateData(false);
return;
}
}
6.2.2按类型进行统计查询
按收支类型查询收支情况,在下来列表中可供用户选择已用的类型,避免出现打错字等麻烦。
用户选择时间,在相应的时间段内查询信息。
如果该类型在该时段内没有收支情况,提示用户没有该类型的记录,如果有便在下来列表中显示详情和总额。
如果选择的时间有错,提示用户重新输入。
按类型进行统计查询界面和功能代码
BOOLCSelect_CM_By_Consume:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
CStringSelectAll;
SelectAll="SELECT*FROMCM";
if(SelectAllConsume.IsOpen())
{
SelectAllConsume.Close();
}
if(!
SelectAllConsume.Open(AFX_DB_USE_DEFAULT_TYPE,SelectAll))
{
AfxMessageBox("消费信息表打开失败!
");
}
while(!
SelectAllConsume.IsEOF())
{
m_SelectConsumeName.AddString(SelectAllConsume.m_Cname);
SelectAllConsume.MoveNext();
}
m_List.InsertColumn(0,"消费者");
m_List.InsertColumn(1,"消费类型");
m_List.InsertColumn(2,"时间");
m_List.InsertColumn(3,"金额(元)");
RECTrect;
m_List.GetWindowRect(&rect);
intwid=rect.right-rect.left;
m_List.SetColumnWidth(0,wid/4-5);
m_List.SetColumnWidth(1,wid/4);
m_List.SetColumnWidth(2,wid/4);
m_List.SetColumnWidth(3,wid/4);
m_List.SetExtendedStyle(LVS_EX_FULLROW
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 家庭财务管理系统 家庭 财务管理 系统 数据库技术 应用 课程设计 报告