数据库课程设计报告个人记账系统.docx
- 文档编号:11075446
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:41
- 大小:444.37KB
数据库课程设计报告个人记账系统.docx
《数据库课程设计报告个人记账系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告个人记账系统.docx(41页珍藏版)》请在冰豆网上搜索。
数据库课程设计报告个人记账系统
一、课程设计目的……………………1
二、系统设计…………………………1
三、数据库逻辑结构设计……………2
四、系统功能模块图…………………4
五、源程序代码………………………11
六、课程设计总结……………………30
七、存在的问题及不足………………30
一、课程设计目的
通过数据库课程设计,培养学生数据库设计的综合能力。
从需求分析和数据库逻辑、物理设计,到功能分析和应用程序的最终实现,让学生亲自动手参与一个具有一定规模的数据库应用系统的设计和开发,真正理解和掌握数据库设计和开发的思路和方法,并更好的理解和消化课本所学的知识,为今后的实际应用打下良好的基础。
二、系统设计
本课程设计(个人记账系统)是用VB+SQL设计完成的。
在本系统里可以对家庭人员基本信息以及家庭账目的收入支出进行简单维护。
主要功能包括对家庭人员信息以及家庭收支的添加、修改、删除、查找、统计等功能。
三、数据库逻辑结构设计
1.SQL数据库设计
表格设计:
userinfo表,记录用户信息
familyinfo表,记录家庭人员信息
income表,记录收入方面信息
pay表,记录支出方面信息
account表,汇总收支信息
allaccount表,计算总收支及结余
存储过程
定义countall存储过程,统计account表中的收支信息,并对收支金额进行求和,算出结余插入到allaccount表中。
触发器:
familyinfo表上定义update触发器完成对income和pay上收支人员的一致性更新。
income表上定义insert,delete及update触发器,完成对于account表上的各个数据的一致性更新。
pay表上定义insert,delete及update触发器,完成对于account表上的各个数据的一致性更新。
account表上定义insert,delete及update触发器,调用countall存储过程完成对于allacount表上数据的统计更新。
四、系统功能模块图
1、数据源连接
2、界面设计
登陆界面:
注册界面:
收入管理界面:
界面中分为三个部分,第一部分收入信息,第二部分显示当前总收支及与结余,并随着用户添加修改删除的操作及时更新,第三部分是操作信息,包括查询、添加、修改、删除。
住处管理界面:
界面中分为三个部分,第一部分收入信息,第二部分显示当前总收支及与结余,并随着用户添加修改删除的操作及时更新,第三部分是操作信息,包括查询、添加、修改、删除。
收支界面显示:
家庭人员信息显示:
五、附:
源程序代码
SQL代码
触发器pay表上
de_pay
createtriggerde_pay
onpay
fordelete
as
declare@new_timechar(20)
declare@new_itemchar(20)
declare@new_monint
declare@new_relachar(20)
declare@new_explchar(200)
select@new_time=支出时间fromdeleted
select@new_item=支出项目fromdeleted
select@new_mon=支出金额fromdeleted
select@new_rela=支出人员fromdeleted
select@new_expl=支出说明fromdeleted
deletefromaccountwhere录入时间=@new_timeand收支金额=@new_monand收支项目=@new_itemand收支人员=@new_relaand收支说明=@new_expl
out_tr
createtriggerout_tr
onpay
forinsert
as
declare@new_timechar(20)
declare@new_itemchar(20)
declare@new_monint
declare@new_relachar(20)
declare@new_explchar(200)
select@new_time=支出时间frominserted
select@new_item=支出项目frominserted
select@new_mon=支出金额frominserted
select@new_rela=支出人员frominserted
select@new_expl=支出说明frominserted
insertintoaccount(录入时间,收支类型,收支金额,收支项目,收支人员,收支说明)
values(@new_time,'支出',@new_mon,@new_item,@new_rela,@new_expl)
up_pay
createtriggerup_pay
onpay
forupdate
as
declare@new_timechar(20)
declare@new_itemchar(20)
declare@new_monint
declare@new_relachar(20)
declare@new_explchar(200)
declare@old_timechar(20)
declare@old_itemchar(20)
declare@old_monint
declare@old_relachar(20)
declare@old_explchar(200)
select@old_time=支出时间fromdeleted
select@old_item=支出项目fromdeleted
select@old_mon=支出金额fromdeleted
select@old_rela=支出人员fromdeleted
select@old_expl=支出说明fromdeleted
select@new_time=支出时间frominserted
select@new_item=支出项目frominserted
select@new_mon=支出金额frominserted
select@new_rela=支出人员frominserted
select@new_expl=支出说明frominserted
updateaccountset录入时间=@new_timewhere录入时间=@old_time
updateaccountset收支金额=@new_monwhere收支金额=@old_mon
updateaccountset收支项目=@new_itemwhere收支项目=@old_item
updateaccountset收支人员=@new_relawhere收支人员=@old_rela
updateaccountset收支说明=@new_explwhere收支说明=@old_expl
income表上
createtriggerde_income
onincome
fordelete
as
declare@new_timechar(20)
declare@new_itemchar(20)
declare@new_monint
declare@new_relachar(20)
declare@new_explchar(200)
select@new_time=收入日期fromdeleted
select@new_item=收入项目fromdeleted
select@new_mon=收入金额fromdeleted
select@new_rela=收入人员fromdeleted
select@new_expl=收入说明fromdeleted
deletefromaccountwhere录入时间=@new_timeand收支金额=@new_monand收支项目=@new_itemand收支人员=@new_relaand收支说明=@new_expl
createtriggerin_tr
onincome
forinsert
as
declare@new_timechar(20)
declare@new_itemchar(20)
declare@new_monint
declare@new_relachar(20)
declare@new_explchar(200)
select@new_time=收入日期frominserted
select@new_item=收入项目frominserted
select@new_mon=收入金额frominserted
select@new_rela=收入人员frominserted
select@new_expl=收入说明frominserted
insertintoaccount(录入时间,收支类型,收支金额,收支项目,收支人员,收支说明)
values(@new_time,'收入',@new_mon,@new_item,@new_rela,@new_expl)
createtriggerup_income
onincome
forupdate
as
declare@new_timechar(20)
declare@new_itemchar(20)
declare@new_monint
declare@new_relachar(20)
declare@new_explchar(200)
declare@old_timechar(20)
declare@old_itemchar(20)
declare@old_monint
declare@old_relachar(20)
declare@old_explchar(200)
select@old_time=收入日期fromdeleted
select@old_item=收入项目fromdeleted
select@old_mon=收入金额fromdeleted
select@old_rela=收入人员fromdeleted
select@old_expl=收入说明fromdeleted
select@new_time=收入日期frominserted
select@new_item=收入项目frominserted
select@new_mon=收入金额frominserted
select@new_rela=收入人员frominserted
select@new_expl=收入说明frominserted
updateaccountset录入时间=@new_timewhere录入时间=@old_time
updateaccountset收支金额=@new_monwhere收支金额=@old_mon
updateaccountset收支项目=@new_itemwhere收支项目=@old_item
updateaccountset收支人员=@new_relawhere收支人员=@old_rela
updateaccountset收支说明=@new_explwhere收支说明=@old_expl
familyinfo表上
createtriggerup_family
ondbo.familyinfo
forupdate
as
declare@new_relachar(20)
declare@old_relachar(20)
select@new_rela=家庭人员frominserted
select@old_rela=家庭人员fromdeleted
updateincomeset收入人员=@new_relawhere收入人员=@old_rela
updatepayset支出人员=@new_relawhere支出人员=@old_rela
account表上
createtriggerde_account
onaccount
fordelete
as
execcountall
createtriggerin_account
onaccount
forinsert
as
execcountall
createtriggerup_account
onaccount
forupdate
as
execcountall
存储过程
CREATEproccountall
as
declare@sum_incomeint
declare@sum_payint
declare@sum_countint
declare@old_incomeint
declare@old_payint
declare@old_sumint
select@old_income=总收入,@old_pay=总支出,@old_sum=结余fromallaccount
select@sum_income=sum(收支金额)fromaccountwhere收支类型='收入'
select@sum_pay=sum(收支金额)fromaccountwhere收支类型='支出'
set@sum_count=@sum_income-@sum_pay
updateallaccountset总收入=@sum_incomewhere总收入=@old_income
updateallaccountset总支出=@sum_paywhere总支出=@old_pay
updateallaccountset结余=@sum_countwhere结余=@old_sum
VB代码
'模块
PubliccnAsADODB.Connection
PublicrsAsADODB.Recordset
'菜单
PrivateSubCommand1_Click()
菜单.Hide
收入管理.Show
EndSub
PrivateSubCommand2_Click()
菜单.Hide
支出管理.Show
EndSub
PrivateSubCommand3_Click()
菜单.Hide
收支显示.Show
EndSub
PrivateSubCommand4_Click()
菜单.Hide
登录.Show
EndSub
PrivateSubCommand5_Click()
IfMsgBox("你确定要退出吗?
",vbOKCancel,"提示")=vbOKThen
End
EndIf
EndSub
PrivateSubCommand6_Click()
菜单.Hide
家庭人员.Show
EndSub
'登录
PrivateSubCommand1_Click()
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
cn.Open"dsn=keep_account"
rs.Open"select*fromuserinfowhereusername='"&Text1&"'"&"andpassword='"&Text2&"'",cn,adOpenStatic,adLockOptimistic
Ifrs.RecordCount>0Then
菜单.Show
登录.Hide
Else
MsgBox"密码错误或用户名不存在!
请重新输入。
"
a=a+1'密码没输入一次a的数值就增加1
Text1.Text=""
Text2.Text=""
Ifa>2Then'三次输入错误,程序强制退出
MsgBox"三次输入错误,强制退出!
"
End
EndIf
EndIf
EndSub
PrivateSubCommand2_Click()
登录.Hide
注册.Show
EndSub
PrivateSubCommand3_Click()
IfMsgBox("你确定要退出吗?
",vbOKCancel,"提示")=vbOKThen
End
EndIf
EndSub
'家庭人员
PublicSubexport()
Text1.Text=rs.Fields("家庭人员")
Text2.Text=rs.Fields("年龄")
Text3.Text=rs.Fields("政治面貌")
Text4.Text=rs.Fields("职业")
Text5.Text=rs.Fields("说明")
EndSub
PublicSubimport()
rs.Fields("家庭人员")=Text1.Text
rs.Fields("年龄")=Text2.Text
rs.Fields("政治面貌")=Text3.Text
rs.Fields("职业")=Text4.Text
rs.Fields("说明")=Text5.Text
EndSub
PublicSubclear()
Text1.Text=""
Text2.Text=""
Text3.Text=""
Text4.Text=""
Text5.Text=""
EndSub
PrivateSubCommand1_Click()
OnErrorGoToflag
rs.MoveFirst
Callexport
ExitSub
flag:
MsgBox"数据库空或当前已是第一条!
"
EndSub
PrivateSubCommand10_Click()
IfMsgBox("你确定要退出吗?
",vbOKCancel,"提示")=vbOKThen
End
EndIf
EndSub
PrivateSubCommand2_Click()
OnErrorGoToflag
rs.MovePrevious
Ifrs.BOFThen
MsgBox"当前已是第一条记录!
",,"提示"
rs.MoveFirst
Else
Callexport
EndIf
ExitSub
flag:
MsgBox"数据库无记录或当前已是第一条!
"
EndSub
PrivateSubCommand3_Click()
OnErrorGoToflag
rs.MoveNext
Ifrs.EOFThen
MsgBox"当前已是最后一条记录!
",,"提示"
rs.MoveLast
Else
Callexport
EndIf
ExitSub
flag:
MsgBox"数据库无记录或当前已是最后一条记录!
"
EndSub
PrivateSubCommand4_Click()
OnErrorGoToflag
rs.MoveLast
Callexport
ExitSub
flag:
MsgBox"数据库无记录或当前已是最后一条记录!
"
EndSub
PrivateSubCommand5_Click()
OnErrorGoToflag
Ifrs.RecordCount>0Then
rs.MoveLast
rs.AddNew
Callimport
rs.Update
Else
rs.AddNew
Callimport
rs.Update
EndIf
收入管理.Combo3.AddItem(Text1.Text)
收入管理.Hide
支出管理.Combo3.AddItem(Text1.Text)
支出管理.Hide
'Callclear
rs.Close
rs.Open"select*fromfamilyinfo",cn,adOpenStatic,adLockOptimistic
rs.MoveLast
ExitSub
flag:
MsgBox"请检查你输入的格式是否正确."
EndSub
PrivateSubCommand6_Click()
IfMsgBox("你确定要修改该条记录?
",vbOKCancel,"提示")=vbOKThen
rs.Delete
rs.Update
rs.AddNew
Callimport
rs.Update
EndIf
rs.Close
rs.Open"select*fromfamilyinfo",cn,adOpenStatic,adLockOptimistic
EndSub
PrivateSubCommand7_Click()
OnErrorGoToflag
DimaAsInteger
DimbAsInteger
a=收入管理.Combo3.ListCount-1
b=支出管理.Combo3.ListCount-1
IfMsgBox("你确定要删除这一条记录?
",vbOKCancel,"提示")=vbOKThen
rs.Delete
rs.Update
rs.MovePrevious
Callexport
收入管理.Combo3.RemoveItema
收入管理.Hide
支出管理.Combo3.RemoveItemb
EndIf
rs.Close
rs.Open"select*fromfamilyinfo",cn,adOpenStatic,adLockOptimistic
ExitSub
flag:
MsgBox"数据库无记录或已删除记录!
"
EndSub
PrivateSubCommand8_Click()
OnErrorGoToflag
IfCombo2.Text="全部显示"Then
Set家庭人员显示.DataGrid1.DataSource=rs
家庭人员显示.Show
Else
IfText6.Text=""Then
MsgBox"请输入查找信息!
"
Else
rs.Close
rs.Open"select*fromf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程设计 报告 个人 记账 系统