vb家庭理财管理.doc
徐州师范大学物电学院课程设计报告课 程 名 称: 计算机程序设计实训 题 目: 家庭理财管理系统 专 业 班 级: 电子科学与技术0831 学 生 姓 名: 张海龙 学 生 学 号: 日 期: 2010-12-16 指 导 教 师: 赵纪平 物电学院教务部印制说明:1、报告中的第一、二、三项由学生在课程设计开始前填写,由指导教师指导并确认签字。2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩,并填写成绩评定表。3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。答辩小组成员应由2人及以上教师组成。答辩后学生根据答辩情况填写答辩记录表。4、报告正文字数一般应不少于3000字,也可由指导教师根据本门课程设计的情况另行规定。5、平时表现成绩低于6分的学生,取消答辩资格,其该课程设计成绩按不及格处理。6、课程设计完成后,由指导教师根据完成情况写出总结。7、此表格式为徐州师范大学物理与电子工程学院提供的基本格式,指导教师可根据本门课程设计的特点及内容做适当的调整。一、课程设计目的、任务和内容要求:计算机语言程序设计是一门以编程实践为主的专业课,目的在于培养学生利用计算机语言进行软件开发所必需的基本思想和基本技能,进一步提高综合应用计算机语言的各种编程知识和技巧进行程序设计的能力,通过本次课程设计,学生应能达到具备设计功能较为复杂的应用程序的能力,同时培养学生自主学习和独立创新的精神。任务如下: 1进行需求分析和概要设计,给出流程图。 2写出详细设计,熟悉其中采用的关键技术。3给出具体的编码实现并调试。4写课程设计报告提交源程序。内容要求:设计并完成软件系统。要求:1应具有简洁友好的用户界面。2要求软件系统的功能完整。3要求程序具备正确性,可读性和运行的高效性。 二、进度安排:第13天: 查找资料,进行需求分析和概要设计;第46天: 各模块的详细设计;第712天: 软件实现与调试;第1314天:写课程设计报告并提交源程序。三、主要参考文献:1白晓勇.Visual Basic案例精编 M .北京:清华大学出版社, 20072吴昌平.Visual Basic6.0程序设计M北京:人民邮电出版社2008 指导教师签字: 年 月 日目 录摘 要 .IIAbstract.II1 概述.11.1基本思路.12 设计方案简述.22.1 基本方法.2 2.2程序流程图. .23 详细设计.43.1 设计架构.4 4 设计结果及分析.54.1数据库配置.54.2 分支模块.5 5总结. .125.1设计体会与总结.12参考文献. 13. 附录 主要程序代码.14摘 要家庭理财管理信息系统可以对家庭的现金、银行存款、应收款和欠款进行管理,操作流程简介,使记账不再是会计的专利,统计分析全面,让用户对家庭财务状况一目了然。家庭理财管理系统使用的是VB编程,VB语言的突出特点是可视化设计,它为用户提供了大量的界面元素容易开发。利用ADO控件可以实现数据库的连接,实现管理数据库的操作。VB语言通过事件来触发执行相应的事件过程,这就是事件驱动。所谓事件,就是对操作对象(比如窗体,控件等)进行操作(比如鼠标单击),从而产生的相应的响应。事件是窗体或控件识别的动作,在关联的事件过程中存在代码编辑器中。家庭管理系统就是基于事件操作的。本设计是基于vb的家庭理财管理系统,利用其提供的各种面向对象的开发工具实现个人家庭理财,从而可以有效地管理家庭收入与支出,解决了纸质化的理财,应用电脑帮助用户进行科学理财。关键词:可视化界面;ADO控件;模块设计 AbstractThe program is designed by a language called Visual Basic,which is good for a visualized program.The project is called a family financial management which can help you control your money more effiectly.The language of Visual Basic is a very poewer language for computer programming especially for the visualized screen . VB language through the event to trigger the execution of the corresponding event procedure, which is based event driven. The so-called events, that is the operating object (such as forms, controls, etc.) to operate (such as a mouse click), to produce the appropriate response. Event is a form or control action identified in the course of events associated with a code editor. Home management system is event-based operations.Keywords:video ; ADO control active ;model designing1 概述1.1 基本思路本设计是基于vb的家庭理财管理系统,利用其提供的各种面向对象的开发工具实现个人家庭理财,从而可以有效地管理家庭收入与支出,解决了纸质化的理财,应用电脑帮助人民进行科学理财,形象生动,具有一定的可实用性家庭理财系统是一种管理系统,开发内容主要是后台的数据库建立、维护以及前台的相应应用程序的开发。它应该能够为每个家庭的管理者提供充足的信息和快捷的查询手段,大大的方便家庭的管理者的合理理财。作为计算机应用的一部分,使用计算机对家庭理财进行管理,具有着手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高家庭财务管理的效率,也是家庭理财的科学化、正规化管理,与先进科学技术接轨的重要条件。VB的主窗口由标题栏、菜单栏、工具栏、工具箱、工程窗口、工程资源管理器、属性窗口、窗体布局窗口组成。工程资源管理器窗口中的文件分为:窗体文件(.frm)、标准模块文件(.bas)、类模块文件(.cls)、工程文件(.vbp)、工程组文件(.vbg)和资源文件(.res)。本家庭理财管理系统就是通过建立许多窗口文件,然后将这些窗口文件组合成一个模块建立一个工程。通过ADO控件,结合SQL语言又可以实现数据库的操作。家庭理财管理系统主要使用于家庭对财务状况的管理和查询,记录日常的收支情况,对银行账户状态的管理,家庭对外债关系的管理以及家庭的投资理财。开发工具主要采用Visual Basic 6.0 Microsoft Access 2003,VB主要是用来实现系统管理、理财项目管理、日常管理、查询管理、修改管理、统计报告管理、投资理财管理这七个功能的。总体见图1-1数据库登陆信息管理数据库综合信息管理 退出信息管理图1-1 思路图2设计方案简述2.1基本方法本设计利用了数据库报表,采用ADO控件实现了家庭理财管理系统的所有可视化界面,类似于MFC编写应用程序向导,ADO对象可以在所有支持COM和OLE的平台上使用,如VB,VC+等等。OLE DB是一种低层数据访问界面接口,它是一套部件对象模型(COM)接口,支持大量可用于数据源的DBMS功能,利用SQL语言,连接数据库。SQL全称是“结构化查询语言”,最最早的是IBM的圣约瑟研究室开发的一种查询语言。建立了表格,并在表格中插入了所需要的数据。台数据库使用Access,前台开发工具使用Visual Basic。本系统采用目前比较流行的ADO数据访问技术,并将每个数据库表的字段和操作封装到类中,从而成功地将面向对象的程序设计思想应用到数据库应用程序设计中。这也是本系统的特色和优势。具体如图2-1整体布局。图2-1 整体布局2.2程序流程图基于整体布局情况和程序运行结果及步骤,家庭理财管理系统的登陆界面是一个密码登陆系统,此界面与程序主题界面是分开的,提示用户输入密码,并根据用户预先设置的密码进行核对,如果两次输入密码不正确就会自动退出(次数可以设置)。进入登陆界面后,就进行财产管理,根据具体情况可以具体处理并画出饼形图,形象直观,科学导用户理财。当用户单击退出界面后,程序便退出系统。具体如图2-2家庭理财管理程图。3详细设计3.1设计架构基本设计框架如图3-1设计架构。家庭理财系统管理理财分析管理系统借还钱管理系统银行储蓄管理系统系统管理基础数据管理系统日常收支管理系统图3-1 设计架构3.1.1 设计框架简述家庭理财管理系统主要由六个分支管理系统构成,系统管理又分为:导出数据库,导入数据库,重新登录,退出。基础数据和管理系统又分为:收支项目管理,家庭成员管理。日常收支管理系统又分为:日常收入,日常支出。银行储蓄管理系统又分为:活期账户,定期储蓄。借还钱管理系统又分为:借入款,借出款。理财分析又分为:查询明细,理财报告。4设计结果及分析4.1数据库配置因为采用的是Microsoft Access数据库,所以配置非常简单。只要保证数据库的配置路径正确就可以了。此家庭理财管理系统用的路定是:Str_path = App.Path & "" & "databaseMoneyMIS.mdb"如图4-1所示。 图4-1 数据库4.2分支模块4.2.1各分支模块设计Visual Basic 语言程序设计是按窗体分类后进行模块化设计的,所以此家庭理财管理系统按照每个模块的功能逐一添加了相应的窗体后,在每个模块中添加相应的函数,然后连接数据库,使得每个模块的添加,修改,删除都能随时保持与数据库的及时更新,从而实现智能管理。(1)密码系统可以修改密码,输入旧密码,然后输入新密码,再次输入新的密码后,如果新密码与原密码相同,则可以修改密码否则提示密码不一致。VB语言通过事件来触发执行相应的事件过程,这就是事件驱动。所谓事件,就是对操作对象(比如窗体,控件等)进行操作(比如鼠标单击),从而产生的相应的响应。这样我们输入密码后,如果正确就可以进入系统。事件是窗体或控件识别的动作,在关联的事件过程中存在代码编辑器中。如图4-2-1所示。 图4-2-1 密码登陆(2)添加家庭成员可以添加修改删除成员列表,自动更新数据库,使得处理非常方便简洁。利用ADO控件连接数据库,使用SQL语言查询化结构语言直接操纵数据库。如图4-2-2所示。 图4-2-2 添加家庭成员 (3)日常收入与支出可以添加日期,方式,金额,项目,去向,人员,备注等,然后以表格形式呈现出来。当然也可以添加,删除,修改,保存.。如图4-2-3和图4-2-4所示。 图4-2-3 日常收入 图4-2-4 日常支出 (4) 借入款与借出款系统自动弹出一个对话框,显示当前记录,得款人,借款金额,出借人,借款日期,借款原因.,可以添加,修改,保存。借款原因这一项,可以帮助家庭进行反思,总结觉悟,从而有效利用家庭财产,受利益最大化。借入款与借出款配合,帮助家庭理财管理系统,然用户可以一目了然的看出具体的借钱情况,从而可以规划一下具体的钱财,有助于用户实时了解本年,或是本月具体情况,并可以根据具体情况做出具体的处理。在对话框我们给出了具体的记录,用户则根据具体的记录作出判断。具体如图4-2-5,4-2-6所示。 图4-2-5 借入款 图4-2-6 借出款 (5) 查询查询项目可以分为日常收入与日常支出。同时还可以按日期或是方式或是金额或是项目。系统自动会根据操作者所选的具体规则在对话框的下半部分显示具体的日常收入与日常支出。如图4-2-7,4-2-8所示。 图4-2-7 日常支出 图4-2-8 日常收入(6) 饼图饼图可以根据一定的比例形象的描绘出收入情况与支出情况,可以按照给定的比例形象生动的绘制出一定的饼状图形,采用不同的颜色,根据实际的数据,按照先后一定的顺序,配合表格,画出图形。饼图画出之后,可以选择具体的统计方式,可以按照人员统计方式进行统计,当然也可以按照具体的项目进行统计。应用两种不同的统计方式,可以满足用户不同的方面,也可以满足用户的不同侧重点,本次饼图只是统计了2010年的不同情况,具体的统计哪一年和那一个月是由在窗体中添加不同代码加以实现的,通过不同代码,可以实现不同年月份的统计统计饼图也可以根据收入情况或者是支出情况是支出情况作出调整。具体情况如图4-2-9所示。 图4-2-9 饼图5总结51设计体会与总结通过这十几天的计算机课程设计,我学会了将一种技能转移到另外一种技能上的本领。首先要感谢我的指导老师赵纪平老师,通过赵老师的VC+及MFC的课程讲解,让我学会的不仅仅是一种语言,更是一种编程的思想与算法。我编程主要是通过VB,通过对图书馆资料和网上的资料查询,我对VB有了一些初步的认识,通过此次课程设计更加深了我运用VB语言,利用ADO控件操作数据库的能力。同时我想在新时代的大背景下,我们运用程序的设计可以实现许多无纸化管理。这更符合环保的要求。由此可见计算机程序实训培养了我们学生实际的操作能力,这也符合新世纪环保节约的要求,同时意义也是很重大的。通过此次设计我对VB也有了更全面的认识。VB语言通过事件来触发执行相应的事件过程,这就是事件驱动。所谓事件,就是对操作对象(比如窗体,控件等)进行操作(比如鼠标单击),从而产生的相应的响应。VB的主要特点:1可视化编程2事件驱动3面向对象4数据库管理功能 5结构化程序设计语言。我想在以后的学习及工作中我会更加努力学习,不断丰富我的计算机程序设计能力。 参考文献1白晓勇.Visual Basic案例精编 M .北京:清华大学出版社, 20072吴昌平.Visual Basic6.0程序设计M北京:人民邮电出版社2008附录 主要程序代码(1)公共模块设计代码Public Str_path As StringPublic Cname As String '登陆时传用户名Public Cdate1 As String '传日期(收入情况列表)Public Cdate2 As String '传日期Public AA As Boolean '判断是否选择月份'ADO编程模型连接数据库Public Function Connectstring() As String'Dim Str_path As StringStr_path = App.Path & "" & "databaseMoneyMIS.mdb"Connectstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & Str_path & "'Persist Security Info=False"End Function'ADO编程模型连接数据库Public Function ExeCutesql(ByVal Sql As String, Msgstring As String) As ADODB.Recordset Dim Cnn As ADODB.Connection Dim Rst As ADODB.Recordset Dim Stokens() As String '数组 ' On Error GoTo executesql_error Stokens = Split(Sql) '将sql语句按关键字保存在数组中 Set Cnn = New ADODB.Connection Cnn.Open Connectstring If InStr("INSERT,DELETE,UPDATE", UCase$(Stokens(0) Then Cnn.Execute Sql Msgstring = Stokens(0) & "查询成功" Else Set Rst = New ADODB.Recordset Rst.Open Trim$(Sql), Cnn, adOpenKeyset, adLockOptimistic '重服务器中提取符合要求的记录集 Set ExeCutesql = Rst Msgstring = "查询到" & Rst.RecordCount & "条记录" End If executesql_exit: Set Rst = Nothing '释放记录集 Set Cnn = Nothing '释放连接语句 Exit Functionexecutesql_error: Msgstring = "查询错误:" & Err.Description Resume executesql_exitEnd Function(2)借入借出模块代码Dim Mydb As New ADODB.RecordsetDim Mydb1 As New ADODB.RecordsetDim Str_text As StringDim strflag As StringPrivate Sub cmd_close_Click() Unload MeEnd SubPrivate Sub cmd_add_Click() txt_man.Locked = False txt_way.Locked = False txt_money.Locked = False Combo1.Locked = False Check1.Enabled = True DTPicker1.Enabled = True txt_man.Text = "" txt_way.Text = "" txt_money.Text = "" Combo1.Text = "" strflag = "添加" Cmdsave.Enabled = TrueEnd SubPrivate Sub cmd_del_Click() Dim A As Boolean A = MsgBox("是否真的要删除这条记录?", vbOKCancel + 32 + 256, "删除") If A = True Then ExeCutesql "delete from 借入 where 得款人='" & txt_man.Text & "'", Str_text MsgBox "记录已删除!", , "删除" If Mydb.RecordCount > 0 Then Mydb.MoveNext If Mydb.EOF Then Mydb.MoveLast Call Db Call Bangding Label7.Caption = Mydb.RecordCount End If End IfEnd SubPrivate Sub cmd_edit_Click() On Error Resume Next Dim A As Boolean txt_man.Locked = False txt_way.Locked = False txt_money.Locked = False Combo1.Locked = False Check1.Enabled = True DTPicker1.Enabled = True strflag = "修改" Cmdsave.Enabled = TrueEnd SubPrivate Sub Cmdsave_Click() On Error Resume Next Dim A As Boolean If strflag = "添加" Then A = MsgBox("是否添加前记录?", vbYesNo + 32, "添加记录") If A = True Then ExeCutesql "insert into 借入 values('" & txt_man.Text & "','" & txt_money.Text & "','" & Combo1.Text & "','" & Format(DTPicker1.Value, "yyyy-mm-dd") & "','" & txt_way.Text & "','" & Check1.Value & "')", Str_text MsgBox "数据已经保存!", vbOKOnly + 64, "成功" Call Db Label7.Caption = Mydb.RecordCount End If ElseIf strflag = "修改" Then A = MsgBox("是否修改前记录?", vbYesNo + 32, "添加记录") If A = True Then Mydb.Update 'Mydb.Requery Call Db MsgBox "数据修改成功!", vbOKOnly + 64, "成功" End If End If txt_man.Locked = True txt_way.Locked = True txt_money.Locked = True Combo1.Locked = True Check1.Enabled = False DTPicker1.Enabled = False Cmdsave.Enabled = FalseEnd SubPrivate Sub Combo1_Change() Set Mydb1 = ExeCutesql("select 姓名 from 成员", Str_text) 'Set Combo1.DataSource = Mydb1 For I = 1 To Mydb1.RecordCount Combo1.AddItem (Mydb1.Fields(0) Mydb1.MoveNext If Mydb1.EOF Then Exit For Next IEnd SubPrivate Sub Command1_Click() On Error Resume Next ' Call Db Mydb.MoveFirst Call BangdingEnd SubPrivate Sub Command3_Click() On Error Resume Next 'Call Db Mydb.MoveNext If Mydb.EOF Then MsgBox "这已经是最后一条记录了!", vbOKOnly + 32, "注意" Mydb.MoveLast End If Call BangdingEnd SubPrivate Sub Command2_Click() On Error Resume Next Mydb.MovePrevious If Mydb.BOF Then MsgBox "这已经是第一条记录了!", vbOKOnly + 32, "注意" Mydb.MoveFirst End If Call BangdingEnd SubPrivate Sub Command4_Click() On Error Resume Next 'Call Db Mydb.MoveLast Call BangdingEnd SubPrivate Sub Form_Load() On Error Resume Next Call Db Call Bangding Cmdsave.Enabled = False Check1.Value = 0 Label7.Caption = Mydb.RecordCount DTPicker1.Value = Date txt_man.Locked = True txt_way.Locked = True txt_money.Locked = True Combo1.Locked = True Check1.Enabled = False DTPicker1.Enabled = FalseEnd SubPrivate Function Db() Set Mydb = ExeCutesql("select * from 借入", Str_text)End FunctionPrivate Function Bangding() On Error Resume Next Set txt_man.DataSource = Mydb Set txt_money.DataSource = Mydb Set DTPicker1.DataSource = Mydb Set txt_way.DataSource = Mydb Set Check1.DataSource = Mydb txt_man.DataField = "得款人" txt_money.DataField = "金额" DTPicker1.DataField = "日期" txt_way.DataField = "出借原因" Check1.DataField = "已还" Set Combo1.DataSource = Mydb Combo1.DataField = "出借人"End Function(3)主函数代码Private Sub mnu_bg_yue_Click()