收藏 分享(赏)

数据库技术.doc

上传人:HR专家 文档编号:11514585 上传时间:2020-05-27 格式:DOC 页数:30 大小:1,008.50KB
下载 相关 举报
数据库技术.doc_第1页
第1页 / 共30页
数据库技术.doc_第2页
第2页 / 共30页
数据库技术.doc_第3页
第3页 / 共30页
数据库技术.doc_第4页
第4页 / 共30页
数据库技术.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、数据库技术课程设计报告专 业 计算机网络技术 班 级 网路专07-2班 学 号 07033060203 姓 名 冯 小 梅 指导教师 李 启 锐 完成时间 2009-2-27 成 绩 家 庭 收 支 管 理 系 统 一、设计目的:家庭理财系统可以有效地记录和管理家庭的收支情况,合理规划和支配家庭资金,是家庭理财的好帮手。 本系统后台数据库使用Access,前台开发工具使用Visual Basic。采用目前比较流行的ADO数据访问技术,通过参与此系统的开发,可以了解信息管理系统的需求分析、设计和实现的完整过程,掌握Access数据库的基本管理方法、常用SQl的使用方法以及Visual Basic

2、数据库开发技术,积累有效的数据应用系统实践经验。提高运用数据库解决实际问题的能力。二、系统需求分析: 基本信息的添加、修改、删除和查询。基本信息包括银行信息管理、收入分类管理和支出分类管理等。此功能为理财管理和数据统计模块提供依据。理财信息的添加、修改、删除和查询。理财信息包括日常收支信息、银行往来信息和银行账户信息。数据统计模块包括日常收支统计、银行交易统计和家庭资产统计等功能。 系统体系结构设计:根据需求分析中总结的用户需求设计系统的体系结构,所以系统的功能模块图如图一所示: 图一系统总共分为四个大模块,分别是:基本信息管理、家庭理财管理、数据统计管理、系统用户管理。系统流程分析图二:在系

3、统流程图中可以看到,每个用户有3此机会进行身份认证,如果3次输入用户名和密码都无法和数据库中的数据匹配,则强制退出系统。 关系如图三:图二运行系统后,首先会看到登录窗体,对用户的身份进行认证。身份认证有两个过程:1、确认用户是否是有效的系统用户。2、确定用户类型。如果需要对普通用户进行管理,则使用Admin用户登录;否则建议使用Users用户登录。如果还要创建其他用户,可以在用户管理模块中创建和管理。n 在本系统中,应该首先增加基本信息,之后才能增加理财信息。基本信息包括银行信息、收入类型信息和收入支出信息等。 n 添加基本信息后,就可以添加理财信息了。在理财信息管理模块中可以对日常收支信息、

4、银行往来信息和银行账户信息进行添加、修改、删除和查看等操作。 n 在数据统计管理模块中,可以对日常收支、银行交易和家庭资产等信息进行统计。三、概要结构设计本系统用到的的模块及其内容描述如下: Const 用来管理工程中的全局常量。DbFunc 用来管理与数据库操作相关的函数,例如连接数据库、断开与数据库的连接等。GeneralFunc 用来管理通用的用户自定义函数。Variable 用来管理工程中的全局变量,包括全局数组和全局对象。数据库连接字符串 :Public Const Conn As String = Provider=Microsoft.Jet.OLEDB.4.0;Data Sour

5、ce=FM.mdb;Provider 数据提供者。Data Source 指定Access数据库文件名。ADO数据访问技术ActiveX Data Objects 的缩写,提供对各种数据库访问的标准接口。包括的主要对象有:连接对象Connection。连接时必须指定要连接到的数据源以及连接所使用的用户名和口令等信息。 命令对象Command。可以通过已建立的连接发出命令,对数据源进行指定的操作。 记录集对象Recordset。查询命令可以将查询结果存储在本地,这些数据以“行”(记录)为单位,返回数据的集合被称为记录集。 字段对象Field。一个记录集行包含一个或多个字段。如果将记录集看作二维网

6、格,字段将排列起来构成列。每一字段(列)都分别包含有名称、数据类型和值的属性。Connection对象 :Connection对象代表与数据源的连接。如果是客户端/服务器数据库系统,该对象可以等价于到服务器的实际网络连接。(图) 图 图Command对象 :Command对象定义了将对数据源执行的命令。 (图)Recordset对象 :Recordset对象表示来自基本表或命令执行结果的记录全集。使用ADO时,通过Recordset对象可对几乎所有数据进行操作。(图 ) 图 图Field对象 :Field对象代表使用普通数据类型的数据的列 。(图)1、基本信息管理子系统:结构图分析银行信息管理

7、理删除修改添加查询基本信息管理 数据流程图分析:添加银行信息:系统登入单击确定填写信息添加银行信息添加成功修改银行信息:系统登入单击确定修改银行信息选定银行信息修改成功删除银行信息:系统登入单击确定删除银行信息选定银行信息成功删除查询银行信息系统登入查询输入银行名称对应于各个分数据流图的ER图设计为:银行信息查询:银行信息编号名称所在地简称(2)添加、修改、删除:因为都是对同一个表进行操作,所以E-R同银行信息查询。2、用户信息管理子系统:结构图家庭成员信息理删除修改添加返回用户信息管理删除、修改、添加的数据流程图与银行信息管理类似。对应于各个分数据流图的ER图设计为:家庭成员信息姓名性别工作

8、单位手机号出生日期3、理财信息管理: 理财信息管理银行帐户管理 删除查看返回修改添加注释:由结构图可以知道,用户登入系统后可以通过理财管理的下拉菜单中的银行帐户管理对银行帐户进行添加、修改、删除、查看、和退出等操作。对应于各个分数据流图的ER图设计为银行帐户管理信息帐号号开户人姓名帐户金额开户日期名称帐号类别存款类型说明4、数据统计管理:结构图数据统计管理日常收支统计银行交易统计家庭资产统计选择年份收支金额收支类型选择月份选择年份选择月份帐号交易金额所得利息银行总存款现金总额支出总额收入总额注释:由结构图可以看到数据统计管理包括日常收支统计、银行交易统计和家庭资产统计功能,系统登入后可以通过选

9、择年份、月份对家庭各个阶段的日常收支、银行交易信息进行查看,也可以对家庭资产进行统计。四、文件结构说明:Const 用来管理工程中的全局常量。DbFunc 用来管理与数据库操作相关的函数,例如连接数据库、断开与数据库的连接等。GeneralFunc 用来管理通用的用户自定义函数。Variable 用来管理工程中的全局变量,包括全局数组和全局对象。n 本系统使用类来管理数据库中的每个表,类的成员变量对应表中的每个列,类的成员函数则实现对表的各种操作,例如添加、修改、删除和读取数据等。在应用程序目录下创建Classes目录,用来存放类模块文件。 系统包含以下文件:数据库:FM.mdbTypes.c

10、ls:用来管理表Types的数据库操作Banks.cls 用来管理表Banks的数据库操作.InOutList.cls 用来管理表InOutList的数据库操作。Members.cls 用来管理表Members的数据库操作。BankOper.cls 用来管理表BankOper的数据库操作。Amount.cls 用来管理表Amount的数据库操作。Users.cls 用来管理表Users的数据库操作。五、数据结构说明 家庭收支管理系统各实体及联系数据关系:数据库中包含7个表,即基本信息表Types、银行信息表Banks、家庭成员信息表Members、日常收支信息表InOutList、银行往来信息

11、表BankOper、银行账号信息表Amount和用户信息表Users。 此数据库是用Accessf设计的数据字典:各个表的结构、功能以及相互之间的关系如下:基本信息表Types,用来保存收入类型信息和支出类型信息,结构如图编号字段名称数据结构说明1TypeId自动编号记录编号,主键2TypeName文本,长度50信息名称3Flag数字类型标.。0表示收入类型,1是支出银行信息表Bank,结构如图:编号字段名称数据结构说明1BankId自动编号记录编号,主键2BankName文本,长度100银行名称3Bshort文本,长度50简称4Place文本,长度200地点家庭成员信息表Members,结构

12、如图:编号字段名称数据结构说明1MemId自动编号记录编号,主键2MemName文本,长度50姓名3Sex文本,长度50性别4Birth文本,长度50生日5Mobile文本,长度50手机6Job文本,长度100工作单位日常收支信息表InOutList,结构如图:编号字段名称数据结构说明1Id自动编号记录编号,主键2TypeId数字/长整型收支类型编号3 UseDate日期/时间收支日期4ANO文本,长度50帐号5UseSum单精度收支金额6MemId数字/长整型家庭成员编号7Memos文本,长度50备注信息8Flag数字/字节类型标.。0表示收入类型,1是支出银行交易信息表BankOper,结

13、构如图:编号字段名称数据结构说明1Id自动编号记录编号,主键2BId数字/长整型银行编号3 MemId数字/长整型家庭成员编号4OperDate日期/时间交易日期5ANO文本,长度50帐号6OperSum数字/单精度型交易金额7Smonth数字/整型定期存款月份8Interest数字/单精度型利息9Memos文本,长度100备注信息10Flag数字/字节类型标.。0表示收入类型,1是支出银行帐号信息表,结构如图:编号字段名称数据结构说明1Iaccountno文本,长度50记录编号,主键2Atype文本,长度50帐号类型3Bid数字/长整型银行编号4MemId数字/长整型家庭成员编号5OpenD

14、ate文本,长度50开户日期6Flag数字/字节存款类型标.。0表示活期,1是定期7Asum数字/单精度型帐户金额8Memos文本,长度200备注信息用户信息表Users,结构如图:编号字段名称数据结构说明1UserName文本,长度50记录编号,主键2UserPwd文本,长度50密码表与表的关系可以用下表来说明主键表主键字段相关表外键字段TypesTypeIdInOutListTypeIdMembersMemIdInOutListMemIdAccountAccountNoInOutListANOBanksBankIdAccountBidMembersMemIdAccountMemIdBank

15、sBankIdBankOperBidMembersMemIdBankOperMemIdAccountAccountNoBankOperAno六、程序清单(各个模块窗体管理的设计):1登入窗体和系统主页面设计登入窗体:当系统运行时,首先打开登入窗体,只有有权限的用户才能进入系统。登入窗体的名称为FrmLogin,它的界面布局如图四所示: 图四 双击窗体,进行代码输入:变量声明:Public PasswordKey As StringPublic Try_times As IntegerPublic NameKey As StringCmd-OK-Click过程:Private Sub Cmd_C

16、ancel_Click() EndEnd SubPrivate Sub Cmd_OK_Click() Dim j As Single /数据有效性检查 If txtUser = Then MsgBox 请输入用户名 txtUser.SetFocus Exit Sub End If If txtPwd = Then MsgBox 请输入密码 txtPwd.SetFocus Exit Sub End If NameKey = Trim(txtUser) PasswordKey = Trim(txtPwd)判断用户是否存在 If MyUser.In_DB(NameKey) = False Then

17、MsgBox 用户名不存在 Try_times = Try_times + 1 If Try_times = 3 Then MsgBox 您已经三次尝试进入本系统,均不成功,系统将关闭 DBapi_Disconnect End Else Exit Sub End If End If 判断密码是否正确 MyUser.GetInfo (NameKey) If MyUser.UserPwd PasswordKey Then MsgBox 密码错误 Try_times = Try_times + 1 If Try_times = 3 Then MsgBox 您已经三次尝试进入本系统,均不成功,系统将关

18、闭 DBapi_Disconnect End Else Exit Sub End If End If登录成功,将当前用户的信息保存在CurUser中 CurUser.GetInfo (MyUser.UserName)关闭自己 Unload MeEnd Sub设计主页面:图五在该页面上添加如下代码:Private Sub Form_Load() FrmLogin.Show 1End SubPrivate Sub mn_Account_Click() FrmAccountMan.Show 1End SubPrivate Sub mn_Bank_Click() FrmBankMan.Show 1En

19、d SubPrivate Sub mn_Exit_Click() DBapi_Disconnect EndEnd SubPrivate Sub mn_List_Click() FrmListMan.Show 1End SubPrivate Sub mn_Member_Click() FrmMemberMan.Show 1End SubPrivate Sub mn_Oper_Click() FrmOperMan.Show 1End SubPrivate Sub mn_PwdChange_Click() With FrmUserEdit .OriUser = CurUser.UserName .t

20、xtUserName = CurUser.UserName .Show 1 End WithEnd SubPrivate Sub mn_SS1_Click() FrmSList.Show 1End SubPrivate Sub mn_SS2_Click() FrmSBank.Show 1End SubPrivate Sub mn_SS3_Click() FrmSFund.Show 1End SubPrivate Sub mn_TIn_Click() FrmTypes.nFlag = 0 FrmTypes.Caption = 收入类型设置 FrmTypes.Show 1End SubPrivat

21、e Sub mn_TOut_Click() FrmTypes.nFlag = 1 FrmTypes.Caption = 支出类型设置 FrmTypes.Show 1End SubPrivate Sub mn_Users_Click() If CurUser.UserName = Admin Then FrmUserMan.Show 1 Else MsgBox 没有权限 End IfEnd Sub2、基本信息管理模块设计设计银行信息编辑窗体(图六)图六:双击确定按钮添加如下代码:公共变量定义:(定义了两个公共变量)Public OriBId As Long (用来标识当前编辑的银行编号)Publ

22、ic Modify As Boolean (用来标识当前的数据库访问状态)单击“确定”按钮Cmd-OK-Click过程:Private Sub Cmd_Cancel_Click() Unload MeEnd SubPrivate Sub Cmd_OK_Click() If Len(Trim(txtBName) = 0 Then MsgBox 请输入银行全称 txtBName.SetFocus Exit Sub End If With MyBank .BankName = Trim(txtBName) .BShort = Trim(txtShort) .Place = Trim(txtPlace

23、) If Modify = False Then .Insert MsgBox 添加成功 Else .Update (OriBId) MsgBox 修改成功 End If End With Unload MeEnd Sub设计银行信息管理窗体(图七) 图七双击窗口添加代码:当用户单击“添加”按钮时触发Cmd-Add-Click事件,代码如下Private Sub Cmd_Add_Click() FrmBankEdit.Modify = False FrmBankEdit.Show 1 刷新数据 DataRefreshEnd Sub当用户单击“删除”按钮时触发Cmd-Del-Click事件,代码

24、如下Private Sub Cmd_Back_Click() Unload MeEnd SubPrivate Sub Cmd_Del_Click() If Adodc1.Recordset.BOF = True Then MsgBox 请选择记录 Exit Sub End If 查找帐户信息Account表是否存在此银行编号,如果存在则不允许删除 If MyAcc.GetInfo(Adodc1.Recordset.Fields(0) Then MsgBox 帐户信息中包含此银行信息,不能删除记录 Exit Sub End If 确认删除 If MsgBox(是否确定要删除银行信息?, vbYe

25、sNo, 请确认) = vbNo Then Exit Sub End If 删除银行信息 MyBank.Delete (Adodc1.Recordset.Fields(0) MsgBox 成功删除 刷新数据 DataRefreshEnd Sub当用户单击“修改”按钮时触发Cmd-Modi-Click事件,代码如下Private Sub Cmd_Modi_Click() If Adodc1.Recordset.BOF = True Then MsgBox 请选择记录 Exit Sub End If FrmBankEdit.Modify = True FrmBankEdit.OriBId = Ad

26、odc1.Recordset.Fields(0) FrmBankEdit.txtBName = Trim(Adodc1.Recordset.Fields(1) FrmBankEdit.txtShort = Trim(Adodc1.Recordset.Fields(2) FrmBankEdit.txtPlace = Trim(Adodc1.Recordset.Fields(3) FrmBankEdit.Show 1 刷新数据 DataRefreshEnd Sub设计收入类型窗体:(图八) 图八窗口代码如下:全局变量OriId用来标识当前选择的记录编号,OiTypeName用在修改类型名称时记录原

27、类型编号,Private OriId As Long 类型编号Private rOiTypeName As String 原来的类型名称类型分类编号,0-收入类型;1-支出类型Public nFlag As IntegerPrivate Sub Cmd_Add_Click() 添加类型名称,先判断域是否为空 If Len(Trim(txtName) = 0 Then MsgBox (请输入类型名称) txtName.SetFocus Exit Sub End If 判断数据库中是否已经存在此类型名称 If MyType.In_DB(Trim(txtName), nFlag) = True Th

28、en MsgBox (已经存在此类型名称) txtName.SetFocus Exit Sub End If 插入新记录 With MyType .TypeName = Trim(txtName) .Flag = nFlag .Insert MsgBox 添加成功 End With DataRefreshEnd SubPrivate Sub Cmd_Del_Click() If Len(Trim(DataList1.BoundText) = 0 Then MsgBox (请选择记录) Exit Sub End If 确定删除 If MsgBox(是否确定要删除 , vbYesNo, 请确认)

29、= vbNo Then Exit Sub End If 删除类型 MyType.Delete (Val(DataList1.BoundText) MsgBox 删除成功 DataRefresh 刷新DataList1End SubPrivate Sub Cmd_Exit_Click() Unload MeEnd SubPrivate Sub Cmd_Modi_Click() 修改类型名称 If Len(Trim(DataList1.BoundText) = 0 Then MsgBox (请选择记录) Exit Sub End If 判断新的名称是否和原来的相同 If Trim(txtName)

30、 = OriTypeName Then Exit Sub End If 判断新的名称是否已经存在 If MyType.In_DB(Trim(txtName), nTypeId) = True Then MsgBox (已经存在此类型名称) txtName.SetFocus Exit Sub End If 更新名称 MyType.TypeName = Trim(txtName) MyType.Update (OriId) MsgBox 修改成功 DataRefresh 刷新类型列表End SubPrivate Sub DataList1_Click() 点击列表记录,将编号和名称放入变量和txt

31、Name域 If Len(Trim(DataList1.BoundText) = 0 Then MsgBox (请选择记录) Exit Sub End If OriId = Val(DataList1.BoundText) 记录编号 If MyType.GetInfo(OriId) = True Then 判断是否存在此记录信息 OriTypeName = Trim(MyType.TypeName) 将类型名称保存到变量中 txtName = Trim(MyType.TypeName) 文本框中显示类型名称 End IfEnd SubPrivate Sub Form_Load() 刷新Data

32、List1中的数据 DataRefreshEnd SubPrivate Sub DataRefresh() 设置连接字符串 AdoType.ConnectionString = Conn 设置SQL语句 AdoType.RecordSource = SELECT * FROM Types WHERE Flag= + Trim(nFlag) AdoType.Refresh 设置数据源 Set DataList1.RowSource = AdoType DataList1.ListField = TypeName 设置列表中显示字段 DataList1.BoundColumn = TypeId 设

33、置列表绑定字段 DataList1.RefreshEnd Sub设计支出类型信息管理窗体:也是FrmTypes,只是公共变量nFlag的值为一。设计家庭成员信息编辑窗体,下图:窗体的代码与银行信息编辑窗体的相似。设计家庭成员信息管理窗体,下图:代码如下:DataRefresh过程的功能是根据查询条件设置SELECT语句,从表Members中读取家庭成员信息,并显示在表格中。Private Sub DataRefresh() Dim TmpSource As String TmpSource = Select MemId,MemName AS 姓名,Sex AS 性别,Birth AS 出生日期

34、, _ + Mobile AS 手机,Job AS 工作单位 From Members Order By MemId Adodc1.ConnectionString = Conn Adodc1.RecordSource = TmpSource Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 DataGrid1.Columns(0).Width = 0 DataGrid1.Columns(1).Width = 1000 DataGrid1.Columns(2).Width = 600 DataGrid1.Columns(3).Width = 12

35、00 DataGrid1.Columns(4).Width = 1200 DataGrid1.Columns(5).Width = 1800End Sub3、理财信息管理模块设计设计日常收支信息编辑窗体,下图:窗体主要代码:Private Sub Form_Load() cob_Flag.AddItem 收入, 0 cob_Flag.AddItem 支出, 1 cob_Flag.ListIndex = 0 载入分类信息 Ado_Type.ConnectionString = Conn Ado_Type.RecordSource = Select * From Types Where Flag=

36、0 Order By TypeId Ado_Type.Refresh Set dco_Type.RowSource = Ado_Type dco_Type.ListField = TypeName dco_Type.BoundColumn = TypeId 载入家庭成员信息 Ado_Mem.ConnectionString = Conn Ado_Mem.RecordSource = Select * From Members Order By MemId Ado_Mem.Refresh Set dco_Mem.RowSource = Ado_Mem dco_Mem.ListField = Me

37、mName dco_Mem.BoundColumn = MemId 载入帐户信息 Ado_Acc.ConnectionString = Conn Ado_Acc.RecordSource = Select AccountNo From Account Order By AccountNo Ado_Acc.Refresh Set dco_Acc.RowSource = Ado_Acc dco_Acc.ListField = AccountNo dco_Acc.BoundColumn = AccountNoEnd Subcod-Flag-Click过程:Private Sub cob_Flag_C

38、lick() 根据选择的收支类型读取对应的类别信息 Ado_Type.ConnectionString = Conn Ado_Type.RecordSource = Select * From Types Where Flag= _ + Trim(cob_Flag.ListIndex) + Order By TypeId Ado_Type.Refresh Set dco_Type.RowSource = Ado_Type dco_Type.ListField = TypeName dco_Type.BoundColumn = TypeIdEnd Sub设计日常收支信息管理窗体,下图Privat

39、e Sub DataRefresh() Dim TmpSource As String Dim StrSch As String Dim StrDate As String 设置查询条件 判断是否选中“全部”,如果没有则提取不同的查询条件 If Check1.Value = 1 Then StrSch = Else If cob_Flag.ListIndex 0 Then StrSch = And l.Flag= + Trim(cob_Flag.ListIndex) End If If Len(Trim(dco_Type.Text() 0 Then StrSch = StrSch + And

40、l.TypeId= + dco_Type.BoundText() End If If Len(Trim(cob_Date.Text) 0 Then StrDate = Format(cob_Date.Text, yyyy-mm-dd) StrSch = AND l.UseDate= + Trim(StrDate) + End If End If TmpSource = Select l.Id, IIF(l.Flag=0,收入,支出) AS 收支类型, _ + t.TypeName AS 分类名称,l.ANo AS 账号,l.UseDate AS 收支日期, _ + l.UseSum AS 收支金额,m.MemName AS 使用人,l.Memos AS 说明,l.Flag _ + From InOutList l,Types t

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

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报