数据库课程设计报告个人记账系统.docx

上传人:b****8 文档编号:11075446 上传时间:2023-02-24 格式:DOCX 页数:41 大小:444.37KB
下载 相关 举报
数据库课程设计报告个人记账系统.docx_第1页
第1页 / 共41页
数据库课程设计报告个人记账系统.docx_第2页
第2页 / 共41页
数据库课程设计报告个人记账系统.docx_第3页
第3页 / 共41页
数据库课程设计报告个人记账系统.docx_第4页
第4页 / 共41页
数据库课程设计报告个人记账系统.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

数据库课程设计报告个人记账系统.docx

《数据库课程设计报告个人记账系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告个人记账系统.docx(41页珍藏版)》请在冰豆网上搜索。

数据库课程设计报告个人记账系统.docx

数据库课程设计报告个人记账系统

一、课程设计目的……………………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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1