收支管理系统毕业论文.doc

上传人:文库蛋蛋多 文档编号:3944060 上传时间:2023-03-28 格式:DOC 页数:41 大小:291.50KB
返回 下载 相关 举报
收支管理系统毕业论文.doc_第1页
第1页 / 共41页
收支管理系统毕业论文.doc_第2页
第2页 / 共41页
收支管理系统毕业论文.doc_第3页
第3页 / 共41页
收支管理系统毕业论文.doc_第4页
第4页 / 共41页
收支管理系统毕业论文.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《收支管理系统毕业论文.doc》由会员分享,可在线阅读,更多相关《收支管理系统毕业论文.doc(41页珍藏版)》请在三一办公上搜索。

1、淮海工学院东港学院毕业设计(论文)说明书题 目: 小 小 收 支 簿 作 者: 黄 超 学 号: 5102203112 系 (院): 计 算 机 系 专 业: 软 件 指导者: 高明芳 讲师 评阅者: 陈云平 2005 年 6 月 连 云 港毕业设计(论文)中文摘要小 小 收 支 簿摘要 收支管理系统是一个企业或者家庭不可缺少的部分,企业很早就实施了收支的集中管理,而家庭使用的小型收支管理系统却只是凤毛麟角,收支是很小的一个部分,但大到企业,小到家庭都有十分重要的意义。从国内外社会经济和科学技术的发展趋势看,要使我国在日趋激烈的国际竞争中立于不败之地,就必须全面贯彻落实江泽民同志提出的“三个代

2、表”思想和中央提出的“科教兴国”战略,必须大力发展教育、科技和文化事业,大力推进教科文各项事业体制改革。在今后一个时间内,教科文各项事业必然有一个较快发展时期,必然对今后的教科文事业收支管理工作提出许多新问题和新要求。要适应新形势的需要,顺利完成教科文事业收支管理工作,就必须进一步转变思想观念,转变工作作风,增强创新意识,及时了解和掌握教科文事业与收支管理工作中的重要情况,及时解决工作中遇到的重点、难点和热点问题。可以说,没有一个好的收支制度,就没有良好的发展前景。我希望用我三年的所学编制出一个使用程序来帮助家庭有效的进行收支管理,主要有以下的功能:功能一:保存每次输入的收支记录,并提供三种查

3、询方式:日期法、种类法、金额法,或打开浏览窗口组合三种方法。 功能二:每月根据收支记录计算当月总收入、总支出、余额和各种类收支情况。功能三:根据计算的结果作出一年来各个月的总收入、总支出、余额和各种类收支情况的拆线图。功能四:对一些每天、每月、每季或每年都要发生的固定收支能进行自动添加。功能五:整个收支记录库可以导出为文本文件,以便做其它工作。功能六:收支记录可完全显示并保存较久时间,便于调查各个时间阶段不同的收支情况。关键词 收支管理 录入 查询 导出目 次1 引言(或绪论)411 需求分析41.2 开发设计思想41.3 开发和运行环境选择21.4 可行性分析21.4.1 经济可行性21.4

4、.2 技术可行性21.4.3 运行可行性32 报表模块的制作321 module1(公有模块)32.1.1 Frmhelp(帮助窗口)42.1.2 frmxb(收支报表)52.1.3 frmyear(年度选择)293关于VB访问SQL Server数据库30结 论34个人体会35致 谢36参 考 文 献37附录A:38附录B:381 引言(或绪论)收支管理系统在强调管理,强调信息,强调经济效益的现代社会中它越来越普及,越来越重要。收支管理一直运用于企业单位,是体现一个企业的竞争力,市场力和凝聚力的方面,可以说,没有一个符合企业状况的收支管理系统,这样的企业就没有良好的发展前景。现在,收支管理不

5、再仅仅是企业所要具备的,小到一个家庭,也是必不可少的。本人的这个小小收支簿就是为家庭而设计的,通过这个程序,我们可以便捷的记录每年每月每天的日常开销和收入,每年的固定支出情况也可轻松设定,我们只需要点击鼠标,就可以计算出收支的平衡情况,为家庭的理财提供帮助,有利于收支的良性发展。本论文详尽的论述了小小收支簿创建的各个过程,对目标设计,系统开发背景,开发和运行环境选择,系统功能分析,系统功能模块设计,数据库需求分析,数据库概念结构和逻辑结构设计,运行实现,系统编译等方面有详细的描述,使读者可清晰的透彻的掌握我这个小小收支簿的开发方法和步骤,望给予指导和批评。 11 需求分析近年来随着国内外社会经

6、济和科学技术的不断改革和发展,各种各样的开销与收入也越来越多,很多人对于日常帐目的管理感到越来越力不从心,收支管理已刻不容缓,在大多数家庭里,由于计算机知识的缺乏,人们还采用手写记帐的方法,这种管理方法存在跟多缺陷,如:效率低、保密性差,另外时间一长,将产生大量的冗余文件和数据,这对于查找、更新和维护工作都带来了很大的困难。小小收支簿就是通过计算机对人们日常的收支进行管理,具有相关的收支情况查询和录入,以及有关数据的打印输出,有计算机统计可使人们从繁重的劳动中解脱出来,通过一些简单的输入操作,及时,准确的获得需要的信息。1.2 开发设计思想 尽量采用学校现有软硬件环境,及先进的管理系统开发方案

7、,从而达到充分利用学校现有资源,提高系统开发水平和应用效果的目的。 系统应符合家庭收支情况的有关事项,满足对家庭日常管理的需要,并达到操作过程中的直观、方便、实用、安全等要求。 系统采用模块化程序设计方法,便于系统的各个组合和个性,也便于未参加开发的技术维护人员补充和维护。 系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。1.3 开发和运行环境选择 开发开发工具:Visual Basic 6.0 运行环境:Windows9x、Windows NT、Windows 2000操作1.4 可行性分析 目的:可行性研究的目的是用最小的代价在尽可能的时间内确定问题是否能

8、够解决。1.4.1 经济可行性 现在,计算机的价格已经十分低廉,性能却有了长足的进步。而本系统的开发, 为家庭的工作效率带来了一个质的飞跃,为此主要表现有以下几个方面:第一,本系统的运行可以代替人工进行许多繁杂的劳动;第二,本系统的运行可以节省许多资源;第三,本系统的运行可以大大的提高家庭的工作效率;第四,本系统可以使敏感文档更加安全,等等。所以,本系统在经济上是可行的。1.4.2 技术可行性 为了有助于更好的进行系统的开发,我对自己家庭的收入情况进行了初步的了解,现在我家的固定收入在2500圆左右,每月在衣食住行各个方面至少要1000圆左右的开销,加上各种固定的各项费用,方方面面很复杂,很难

9、清楚明了的记录下来,我父母一般是采用手工记帐,这样很麻烦,也算不清楚帐,每个月都要花大量的时间在算钱上。而由于我的父母没有电脑方面的知识,所以,我的电脑对他们来说只是摆设,但只要安装我设计的软件,他们只需要点击鼠标就而已十分便捷的对家庭的收支情况进行统计和计算。 本系统的开发我利用Microsoft SQL Server2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于各种大中小规模的 数据量需求。学校校园网的建设也为新系统服务器/客户端的结构提供 了硬件的支持。 使用Visual Basic6.0作为系统开发的开发环境,它作为一种现代 的编程语言,提供完善的指令控制语句、类与

10、对象的支持及丰富的数 据类型,给开发高性能系统提供的保障为开发满足客户要求的系统, 保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对 新系统的扩展与修改。 综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是 满足的,因此,它在技术上是可行的。1.4.3 运行可行性本系统为一个小型的家庭收支管理系统,所耗费的资源非常的小,学校的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。2 报表模块的制作 在本系统中,共有如下几个表单,分别是Frmabout,Frmadd,frmfirst,Frmlr,Frmpass,Frmpic,frmxb,frmyear,以及公有

11、的module1。 我所完成的部分是module1,Frmhelp,frmxb,frmyear.21 module1(公有模块)其代码如下:Option ExplicitPublic mw As StringSub main()Dim i As Integer, pas(7) As StringDim zb As DatabaseDim re As RecordsetSet zb = OpenDatabase(App.Path + /zb.mdb)Set re = zb.OpenRecordset(xb)If re.RecordCount 0 Then XB中有记录,说明不是首次使用 If D

12、ir(App.Path + /OK.PAS) ok.pas Then 保存密码的文件不在 MsgBox 保存密码的文件你藏哪去了?它叫OK.PAS,在同一目录里., 32, 出错 End Else mw = Open App.Path + /ok.pas For Input As #1 Input #1, mw Close #1 For i = 1 To Len(mw) pas(i - 1) = Mid(mw, i, 1) 将密文分成单个字符 pas(i - 1) = Chr(Asc(pas(i - 1) - 50 - i * 2) 单个字符解密 Next i mw = For i = 1 T

13、o 8 mw = mw + pas(i - 1) 合并得到明文 Next i i = 0 Do While True frmpass.Show 1 确认密码对话框 If frmpass.grzbpass mw Then 密码不对 i = i + 1 If i = 3 Then 三次都不对 MsgBox 请尊重他人的隐私权!你没有隐私吗?, 48, 我会告你的哦! End End If Else Exit Do End If Loop End IfEnd If frmxb.Show End Sub2.1.1 Frmhelp(帮助窗口)其代码如下:Option ExplicitPrivate Su

14、b Command1_Click()Unload MeEnd SubPrivate Sub Form_Load()Label1.Caption = 欢迎使用小小收支薄,这还是测试版,一定有不少BUG,请太家帮忙多抓点并MAIL TO : hcandlq 谢谢! + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + 小小收支薄是用来记录使用者每天的现金收入及支出情况,并自动进行每月、每年的结算,使现金使用情况一目了然。 + Chr(13) + Chr(10) + Chr(13) + Chr(10)Label1.Caption = Label1.

15、Caption + 这个版本比上一版本多了年终处理和文本导出这些简单但很实用的功能。 + Chr(13) + Chr(10) + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + 我介绍下小小收支薄的各种功能各操作方法: + Chr(13) + Chr(10) + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + 程序第一次启动时会要求你输入开始计账的年月和当时所有的现金数,输入后进入主界面,里面已有一条收支为0的记录了,您可以改掉它。 + Chr(13) + Chr(10) + Chr(1

16、3) + Chr(10)Label1.Caption = Label1.Caption + 新增、删除、前一记录、后一记录这些是常规性功能,不用我多说了吧。 + Chr(13) + Chr(10) + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + 查询框中可输入任一日期,回车或TAB键后将转到所输入日期的第一个记录上,若没有该日期的收支情况将转到最接近该日期的记录上。 + Chr(13) + Chr(10) + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + X月计算按钮将计算这个月份

17、的总收入、支出及各项收支的总和,并反映在下端的表格中,我们可以通过水平滚动条来决定计算哪个月,但你一定要保证上个月的计算结果是最新的,否则这个月以下的所有月份中的本月结余和上月结余都是错误的。你若发现某一月的结算中上月结余和上一月的本月结余不相符,请重新计算这个月及以下各月,或者使用整年计算按钮。 + Chr(13) + Chr(10) + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + 工具条上的强制按时间重排是为了在刚输入的前些天的情况也按收支时间排序。 + Chr(13) + Chr(10) + Chr(13) + Chr(10)La

18、bel1.Caption = Label1.Caption + 工具条上的初始化设置可调出预定面板,在预定面板上我们可以填入一些固定的收支情况(如每月的固定工资),程序将按设置自动填入数据库中,若你有一些日子没用本程序,在下一次启动时,也会自动进行补填。在预定面板上还能重新设置本年度第一个月的上月结余数,用来修改第一次启动程序时输入的现金总数。 + Chr(13) + Chr(10) + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + 工具条上的作拆线图可以用不同颜色拆线显示出当年的任何一项或几项收支或月结算情况,纵坐标轴的比例可是随最大值

19、变化的呢。这是我花了一番心血弄出来的,比调EXCEL要快吧,况且我们不一定都有EXCEL。 + Chr(13) + Chr(10) + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + 它的功能不是很多,大家若有什么好的点子EMAIL给我,我尽快更新,先谢谢各位了! + Chr(13) + Chr(10)Label1.Caption = Label1.Caption + 99-6-17End SubPrivate Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Si

20、ngle, Y As Single)Label1.Top = Label1.Top - 2200If Label1.Top + Label1.Height 1000 ThenLabel1.Top = 105End IfEnd Sub经测试,成功运行后图象为:2.1.2 frmxb(收支报表)其代码如下:Option ExplicitPublic myyear As StringPrivate Sub MYHELP() Frmhelp.Show 1End SubPrivate Sub visok(test As Boolean) 在某些功能启用时,另一些功能不允许用Dim kk As Integ

21、erIf test Then textfind.Enabled = True Toolbar1.Buttons.Item(1).Visible = True zj.Enabled = True Toolbar1.Buttons.Item(3).Visible = True sy.Enabled = True Toolbar1.Buttons.Item(4).Visible = True XY.Enabled = True Toolbar1.Buttons.Item(5).Visible = True xg.Enabled = True Toolbar1.Buttons.Item(7).Visi

22、ble = False Toolbar1.Buttons.Item(8).Visible = False Slirecon.Enabled = True For kk = 10 To 16 Toolbar1.Buttons.Item(kk).Visible = True Next kk xz.Enabled = True cl.Enabled = True YJS.Enabled = True PX.Enabled = True YD.Enabled = True SC.Enabled = True CX.Enabled = True EX.Enabled = True dc.Enabled

23、= True Text1(0).Locked = True Text1(1).Locked = True Text1(2).Locked = True Combo1.Locked = TrueElse textfind.Enabled = False Toolbar1.Buttons.Item(1).Visible = False zj.Enabled = False Toolbar1.Buttons.Item(3).Visible = False sy.Enabled = False Toolbar1.Buttons.Item(4).Visible = False XY.Enabled =

24、False Toolbar1.Buttons.Item(5).Visible = False xg.Enabled = False Toolbar1.Buttons.Item(7).Visible = True Toolbar1.Buttons.Item(8).Visible = True Slirecon.Enabled = False For kk = 10 To 16 Toolbar1.Buttons.Item(kk).Visible = False Next kk xz.Enabled = False cl.Enabled = False YJS.Enabled = False PX.

25、Enabled = False YD.Enabled = False SC.Enabled = False CX.Enabled = False EX.Enabled = False dc.Enabled = False Text1(0).Locked = False Text1(1).Locked = False Text1(2).Locked = False Combo1.Locked = FalseEnd IfEnd SubPrivate Sub mok() 前进,后退按钮在记录位不同时的不同状态Dim l As Integer, n As Integer, book As Varian

26、ttextfind.Text = Format(Data1.Recordset.Fields(0), yyyy-mm-dd)book = Data1.Recordset.BookmarkData1.Recordset.MoveFirstData1.Recordset.MoveLastData1.Recordset.Bookmark = bookn = Data1.Recordset.AbsolutePositionl = Data1.Recordset.RecordCount - 1Select Case n Case 0 Toolbar1.Buttons.Item(3).Enabled =

27、False sy.Enabled = False Toolbar1.Buttons.Item(4).Enabled = True XY.Enabled = True Case 1 To l - 1 Toolbar1.Buttons.Item(3).Enabled = True Toolbar1.Buttons.Item(4).Enabled = True sy.Enabled = True XY.Enabled = True Case l Toolbar1.Buttons.Item(3).Enabled = True Toolbar1.Buttons.Item(4).Enabled = Fal

28、se XY.Enabled = False sy.Enabled = TrueEnd SelectIf l = 0 ThenToolbar1.Buttons.Item(3).Enabled = FalseToolbar1.Buttons.Item(4).Enabled = FalseEnd IfSlirecon.Value = Data1.Recordset.AbsolutePositionLabel10.Caption = Str(Data1.Recordset.AbsolutePosition + 1)End SubPrivate Sub dctable(tb As String) 导出表

29、为TEXT文件Dim zb As DatabaseDim re As RecordsetDim refield As ByteDim recount As IntegerDim filenum As ByteDim i As IntegerSet zb = OpenDatabase(App.Path + zb.mdb)Set re = zb.OpenRecordset(tb)refield = re.Fields.Countre.MoveLastre.MoveFirstrecount = re.RecordCountfilenum = FreeFileOpen App.Path + + CSt

30、r(Date) + .txt For Output As filenumSelect Case refield Case 6 Write #filenum, re.Fields(0).Name, re.Fields(1).Name, re.Fields(2).Name, re.Fields(3).Name, re.Fields(4).Name, re.Fields(5).Name Case 15 Write #filenum, re.Fields(0).Name, re.Fields(1).Name, re.Fields(2).Name, re.Fields(3).Name, re.Field

31、s(4).Name, _ re.Fields(5).Name, re.Fields(6).Name, re.Fields(7).Name, re.Fields(8).Name, re.Fields(9).Name, _ re.Fields(10).Name, re.Fields(11).Name, re.Fields(12).Name, re.Fields(13).Name, re.Fields(14).NameEnd SelectFor i = 0 To recount - 1 Select Case refield Case 6 Write #filenum, CStr(re.Fields

32、(0).Value), re.Fields(1).Value, re.Fields(2).Value, re.Fields(3).Value, CInt(re.Fields(4).Value), re.Fields(5).Value Case 15 Write #filenum, CStr(re.Fields(0).Value), re.Fields(1).Value, re.Fields(2).Value, re.Fields(3).Value, re.Fields(4).Value, _ re.Fields(5).Value, re.Fields(6).Value, re.Fields(7

33、).Value, re.Fields(8).Value, re.Fields(9).Value, _ re.Fields(10).Value, re.Fields(11).Value, re.Fields(12).Value, re.Fields(13).Value, re.Fields(14).Value End Select re.MoveNextNext iClose filenumMsgBox 数据已顺利导出,文件保存为 + App.Path + + CStr(Date) + .txt。 + Chr(13) + 请及时处理,因为当天若再有数据导出将会被覆盖!, 48, 提示End Su

34、bPrivate Sub cl_Click()If Not (Month(Date) = 12 And Day(Date) = 31) Then Dim n As Integer n = MsgBox(未到12月31日,如提前作年终处理,则使统计数据不准和这以后的数据当年度查不到!(除非在元旦前不输数据) + Chr(13) + 你的确要作此处理吗?, 36, 年终处理) If n = 7 Then Exit SubEnd IfComzt_Click 整年处理Dim i As Integer, j As Integer, SZ As SingleDim zb As DatabaseDim re

35、year As RecordsetDim reyzj As RecordsetSet zb = OpenDatabase(App.Path + zb.mdb)Set reyear = zb.OpenRecordset(year, dbOpenDynaset) dbOpenDynaset类型才能用findreyear.FindFirst (年度= + myyear + ) 在YEAR表中找当前年度的处理情况If reyear.NoMatch = True Then 若没有当前年度的记录则加入reyear.AddNewreyear.Fields(0) = myyearreyear.Updatere

36、year.FindFirst (年度= + myyear + )End IfData2.Recordset.MoveLastData2.Recordset.MoveFirst YZJ表移到头reyear.EditIf reyear.AbsolutePosition = 0 Then 如果是年度中的第一个记录 reyear.Fields(1) = Data2.Recordset.Fields(1) 则用月表中的第一条记录的上月结余Else 若是其它年度记录则用上年度的结余 reyear.MovePrevious SZ = reyear.Fields(4) reyear.MoveNext reye

37、ar.Edit reyear.Fields(1) = SZEnd IfFor i = 5 To reyear.Fields.Count - 1 SZ = 0 For j = 1 To Data2.Recordset.RecordCount SZ = Data2.Recordset.Fields(i) + SZ 循环计算YZJ表中各项收支数值和并存入YEAR表中 Data2.Recordset.MoveNext Next j reyear.Fields(i) = SZ Data2.Recordset.MoveFirstNext iData2.Recordset.MoveLastreyear.Fi

38、elds(2) = 0reyear.Fields(3) = 0For i = 1 To 5reyear.Fields(2) = reyear.Fields(i + 4) + reyear.Fields(2) 当年的收入reyear.Fields(3) = reyear.Fields(i + 9) + reyear.Fields(3) 当年的支出Next ireyear.Fields(4) = reyear.Fields(1) + reyear.Fields(2) - reyear.Fields(3) 得到当年结余SZ = reyear.Fields(4)reyear.Updatereyear.

39、FindFirst (年度 = + Trim(Str(Val(myyear) + 1) + ) 当年处理完后,找下一年度的记录If reyear.NoMatch = True Thenreyear.AddNew 没有则加入Elsereyear.EditEnd Ifreyear.Fields(0) = Trim(Str(Val(myyear) + 1) 并且对year表中下一年度初始化reyear.Fields(1) = SZreyear.UpdateSet reyzj = zb.OpenRecordset(yzj, dbOpenDynaset) 打开含有每年收支数据的YZJ表(dbOpenDy

40、naset类型才能用find)reyzj.FindFirst (year(年月)= + Trim(Str(Val(myyear) + 1) + ) 查找下一年度的第一条记录If reyzj.NoMatch = True Thenreyzj.AddNew 没找到则加入reyzj.Fields(0) = CDate(Trim(Str(Val(myyear) + 1) + -1-1) 时间定为一月Elsereyzj.Edit 有则修改End Ifreyzj.Fields(1) = SZ YZJ表中的上月结余修改reyzj.UpdateSet reyzj = zb.OpenRecordset(xb,

41、dbOpenDynaset) 打开含有每天收支数据的XB表(dbOpenDynaset类型才能用find)reyzj.FindFirst (year(收支日期)= + Trim(Str(Val(myyear) + 1) + ) 查找下一年度的第一条记录If reyzj.NoMatch = True Thenreyzj.AddNew 没找到则加入reyzj.Fields(0) = CDate(Trim(Str(Val(myyear) + 1) + -1-1) 时间定为一月reyzj.Fields(1) = 0reyzj.Fields(2) = 其它收入reyzj.Fields(3) = 这条记录

42、是程序自己加的,若本年中没有其它收支记录,请不要删除它,但可以修改.reyzj.Fields(4) = Falsereyzj.Update 加入一个0收入的记录使程序下次启动时不会测到最新年度记录数为0End Ifreyzj.Closereyear.FindFirst (年度 = + myyear + ) 回到刚处理的年度MsgBox myyear + 年度情况: + Chr(13) + 去年结余: + Str(reyear.Fields(1) + Chr(13) _+ 当年收入: + Str(reyear.Fields(2) + Chr(13) + 当年支出: + Str(reyear.Fields(3) + Chr(13) _+ 当年结余: + Str(reyear.Fields(4) + Chr(13), 48, myyear + 年度处理完毕End SubPrivate Sub Comauto_Click()Frmadd.Show 1Data2.RefreshEnd SubPrivate Sub Combo1_LostFocus(

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号