浅析家庭理财系统的设计与实现7220.docx
四 川 工 程 职 业 技 术 学 院 毕 业 论 文浅析家庭理财系系统的设计与与实现摘要:经济全球化和居居民生活需求求的变化以及及计算机技术术不断发展的的今天,人们们生活水平越越来越高,家家庭(尤其是是财务)管理理也变得越来来越重要,理理财直接影响响着人们的生生活,本系统统应用于C/S结构的平平台,本研究究课题的主要要目的是提供供财务数据统统一管理和做做出合理的财财务决策,其其界面友好,操作简单,除具备基本本的财务信息息管理外,还还提供了数据据统计,数据据查询,图表表自动统计等等功能。为方便操作作,从多方面面把用户的家家庭收入、家庭支出、统计节余等等财产管理的的数据,以及及他们的生活活结余和消费费统计,用科科学统计的方方法把这些数数据存储在财财务管理软件件之中。以实际数据说明明收入、支出、节余三者之之间的相互关关系,为家庭庭的财产的有有效管理和合合理分配提供供帮助,本文着重论论述了该系统统的功能与实实现,如:数数据流程与存存储,管理等功能能,并对关键键的技术作了了较详细的介介绍。关键词:需求分析,数据据库需求分析析,理财系统统,系统设计计Analysees fammily ffinanccial mmanageementsystem desiggn andd impllementtationnAbstracct: Econommic gllobaliizatioon andd resiidentss liviing deemand changges annd commputerr techhnologgy devvelopmment ttoday, peopple liife leevel mmore aand moore hiigh, ffamilyy (esppeciallly fiinanciial) mmanageement is allso beecominng morre impportannt, fiinanciial maanagemment ddirecttly afffect peoplle's llife, the ssystemm appllied iin C/SS struucturee of pplatfoorm, tthe maain puurposee of tthis rresearrch iss to pprovidde finnanciaal datta uniified managgementt and make reasoonablee finaanciall deciisionss, itss frieendly interrface, simpple opperatiion, iin addditionn to bbasic finanncial inforrmatioon mannagemeent ouutsidee, alsso proovidess dataa stattisticcs, daata quuery, chartt funcctionss suchh as aautomaatic sstatisstics. For the cconvenniencee of ooperattion, the uusers from varioous asspectss of ddomesttic inncome, housseholdd spennding, stattisticcs secction propeerty mmanageement of daata, ssuch aas theeir liife baalancee and consuumptioon staatistiics, uusing sciennce sttatisttics mmethodd put thesee dataa storrage iin finnanciaal mannagemeent sooftwarre in. Baseed on the aactuall dataa sugggests revennues, expennses, sectiion off the interrrelattionshhip off famiily prropertty, foor thee effeectivee manaagemennt andd disttributtion hhelp, this paperr focuuses oon thee funcction of thhe sysstem aand immplemeentatiion, ssuch aas: thhe datta floow andd storrage, managgementt, andd otheer funnctionns, annd thee key technnologyy are introoducedd in ddetaill.Keywordd: Demand analyysis Databbase rrequirrementt anallysis Finaanciall systtem SSystemm desiign1、绪论随着金融市场的的迅速发展、金金融工具的不不断创新,理财业务正正在悄然进入入人们的生活活。伴随着经经济生活的日日益多元化,人人们的金融意意识正在发生生着根本的变变化,最为突突出的是人们们对资本增值值的要求从无无意识变为有有意识,投资资理念逐步走走向家庭,投投资方式所涵涵盖的范围日日益扩大,以以家庭为主体体的经济活动动已经从传统统的收支、储储蓄等保守型型经济行为,逐逐步转向以经经营股票、债债券、期货、外外汇、保险等等为主体的投投资型、开放放型经济行为为。人们开始始意识到不仅仅要懂得如何何积累财富,更更重要的是要要通过专业化化的理财服务务,利用有效效的金融市场场和多元化的的金融工具,确确保财富的保保值增值,以以及进行必要要的风险管理理。我国居民的的储蓄存款超超过十万亿人人民币。特别别是像上海、深深圳等发达城城市,居民的的可支配收入入正在逐步达达到中等发达达国家水平,许许多居民除了了购房、购车车外有大量的的金融资产,如如何分配、管管理金融资产产是居民最大大的需求。大大多数家庭对金融方方面的需求从从储蓄、保管管金融资产向向金融资产的的保值、增值值转变。有些些人盲目投资资于股市而导导致大量损失失,还有许多多家庭把大部分分资产存在银银行做定期储储蓄;最多的的是介于二者者之间,不知知如何分配其其金融资产。家家庭如何管理理金融资产呢呢?如何安排排家庭的富余的的现金流,如如何筹集家庭庭所需的资金金,成为了一一个现实的问问题。因此,家家庭财务的管管理已经成为为一种时尚,如如何更为积极极地、稳妥地地运用和处理理好家庭的钱财,是是提高投资效效率、改善生生活质量的现现实需要。家庭理财又称家家庭财务规划划,是为实现现家庭提高生生活目标而制制定、安排、实实施和管理的的一个各方面面总体协调的的财务计划的的过程,或者者说对家庭资产的合合理安排与管管理。具体是是指:1.1采用全面面系统的管理理思想来管理理家庭所有资源源。所以统一一规划家庭的的所有资产、负负债、投资、计计划等一切就就是家庭财富管理理的范畴。它它类似于企业业资源计划(ERP:EEnterpprise Resouurce PPlanniing)系统统,也可简单单地把家庭财富管理理叫做家庭资源计划划 (FRPP:Famiily Reesourcce Plaanningg)系统。1.2体现出现现代和专业的的理财理念。家庭财富管理以综合现代会计学、财务学、投资学、统计学等学科的家庭理财学为基础。只有包含以上学科的综合知识,才能为现代家庭提供正确、科学及专业的理财指导。1.3紧密结合合理财市场与与金融现状。概概括来说,家家庭理财就是是采取全面、专专业、系统的的理财思想与与方法来规划划家庭的所有一一切,使家庭庭财产处于收支支均衡的理想想状态,并达达到家庭财富的最最大化目标。在这样的背景下下,各种理财财工具层出不不穷,同时理理财软件市场场也发展得相相当迅速。各各个款式的理理财软件以其其出色的理财财与账务管理功能能赢得了人们们的信赖,成成为家庭理财不可可或缺的好帮帮手。但是。目目前国内理财财软件市场上上的产品质量量参差不齐,即即使最畅销的的几款也有美美中不足之处处,所以一款款功能完备又又具有个性化化服务的理财财软件的设计计成功正是家家庭理财高手手们翘首以盼盼的。2、 需求分析2.1 业务需需求:2.1.1 用用户管理对家庭成员的添添加、编辑、删删除等操作(要要求照片也可可以随时更新新),当用户户登录本系统统的时候,要要求显示该用用户的包括照照片在内的各各种信息。2.1.2 消消费管理用户登录本系统统之后,能够够对消费信息息的添加,计计算(当日,当当周,当月,当当季度,当年年的剩余金额额),查询(提提供按天、周周、月、季度度、和一年的的查询),能能够讲查询的的信息打印出出来。并且能能够计算出相相应的开支。2.1.3节假假管理每当遇到节假日日时,可以给给用户产生一一个节假安排排。如,安排排旅游等信息息。为用户提提供一系列的的建议。并且且用户能够自自己为某个节节假日自行设设计、安排。2.2 算法需需求单个产品支出=产品数量*产品单价;支出=消费项目目1+消费项项目2+消费费项目3+消费项目NN。余额=收入-支支出(可以以以日、周、月月、季度、年年为单位进行行计算)2.3 系统需需求2.3.1 性能需求:查询并显示第一一条记录的时时间应小于33秒。页面切切换时间不大大于2秒。切切换到分析状态不不大于3秒。平平均程序错误误率不应大于于1次/页面面。(查询显显示时间与系系统硬件资源源和系统的数数据量有关,只只能在一定条条件下满足。)2.3.2 系系统架构:采用C/S模式式开发,利用用.NET提提供的控件和和自定义控件件开发前台界界面,使用SSQL Seerver22005.数据库做后后台。3、 业务流程分析3.1 主业务流程分析析:3.2 子业务务流程分析:3.2.1 用用户信息管理理流程实现功能:对家庭的用户实实现添加、删删除、编辑、上上传图片的操操作;3.2.2 消消费管理流程程3.2.2.11收入管理流流程实现功能:对每个月的收入入进行添加、删删除、编辑、查查询等操作;并作系统的的收入分析;3.2.2.22支出管理流流程实现功能:对每个月的支出出进行添加、删删除、编辑、查查询等操作;并作系统的的收入分析;并和收入做做一定的比较较看看当月、当当年等的消费费支出情况等等;3.2.3 假假日计划管理理流程实现功能:在假期之前对节节假日做一个个详细地安排排,到了指定定的日期(五五天以前)的的时候系统会会自动提示用用户。还可以以对假日计划划添加,并实实现过期的节节假安排自动动删除。4、 数据库需求分析析4.1 系统用用户表(Login)字段名称字段类型是否为主键是否允许为空备注IdInt是否主键,自动增长长usernammeNvarchaar(50)否否用户名pwdNvarchaar(50)否否密码birthdaayDatetimme否是生日cnameNvarchaar(50)否是姓名4.2 消费项项目表(coords)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长长producttNvarchaar(50)否是产品名称ptypeNvarchaar(50)否是消费类型priceFloat否是产品单价spendFloat否是消费总额ctimedatetimme否是消费时间weekdayyNvarchaar(50)否是星期cnameNvarchaar(50)否是消费对象commenttnvarchaar(50)否是注释4.3 消费类类型表(cttype)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长长ptypeNvarchaar(50)否是消费类型名称4.4 收入表表(icomme)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长长priceFloat否是收入金额shouruFloat否是收入总额itypeNvarchaar(50)否是收入类型itimedatetimme否是收入时间4.5 收入类型表(iitype)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长长itypeNvarchaar(50)否是收入类型名称4.6 假期安排表(pplan)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长长jqlbNchar(110)否是假期类别tsint否是假期天数yjkxfloat否是预计开销5、 主要功能模块实实现过程5.1窗体特效效的实现:各个窗体的特效效代码(运用用dll文件件实现窗体的的现实特效):Systemm.Runttime.IInteroopServvices.DllImmport("userr32")函数功能:该函数能在显示示与隐藏窗口口时能产生特特殊的效果。有有两种类型的的动画效果:滚动动画和和滑动动画。 extern可可以置于变量量或者函数前前,以表示变变量或者函数数的定义在别别的文件中,提提示编译器遇遇到此变量和和函数时在其其他模块中寻寻找其定义。另另外,exttern也可可用来进行链链接指定privatee stattic exxtern bool AnimaateWinndow(IIntPtrr hwndd, intt dwTiime, iint dwwFlagss);const iint AWW_HOR_POSITTIVE = 0x00001; /从左向右右显示const iint AWW_HOR_NEGATTIVE = 0x00002; /从右向向左显示const iint AWW_VER_POSITTIVE = 0x00004; /从上到下下显示const iint AWW_VER_NEGATTIVE = 0x00008;/从下到上上显示const iint AWW_CENTTER = 0x00110;/从中间向四四周const iint AWW_HIDEE = 0xx100000;const iint AWW_ACTIIVATE = 0x220000;/普通显示示const iint AWW_SLIDDE = 00x400000;调用窗体的特效效方法(可以以自己改变参参数的值):AnimateeWindoow(thiis.Hanndle, 1000, AW_SSLIDE | AW_HIDE |AW_VVER_NEEGATIVVE); const iint AWW_BLENND = 00x800000; /透明渐变变显示效果5.2 数据库操作的实实现:class SSqlHellp /连接接数据库的连连接字符串 ppublicc connst strinng consstr = "Serrver=GGSQ;InnitiallCatallog=hoome;uiid=sa;pwd=ssa" /创建建一个SqllDataRReaderr 的read方法法 publlic SqqlDataaReadeer reaad(strring sstr) SqlCoonnecttion cconn = new SqlCoonnecttion(cconstrr); conn.Open(); SqlCoommandd cmd = neww SqlCCommannd(strr, connn); SqlDaataReaader;dr=cmd.ExecuuteReaader(CCommanndBehaavior.CloseeConneectionn); returrn dr; / 更更新数据 publlic innt upddate(sstringg str) SqlCoonnecttion cconn = new SqlCoonnecttion(cconstrr); conn.Open(); SqlCoommandd cmd = neww SqlCCommannd(strr, connn); int aa = cmmd.ExeecuteNNonQueery(); conn.Closee(); returrn a; /获取取数据列表(数数据集) 返回数据集集-列表 publlic DaataSett getllist(sstringg str) DattaSet ds = new DDataSeet(); usingg (SqllConneectionn connn = neew SqllConneectionn(consstr) SqlDDataAddapterr da = new SqlDaataAdaapter(str, conn); dda.Filll(ds); returrn ds; 5.3系统登录录及图形验证码码功能:public strinng strr;/验证证码/产生随机数数的函数 privatte strring CCheckCCode(rref sttring s) innt nummber; chhar coode;string checkkCode = Strring.EEmpty; /空字符串串且为只读属属性Random randoom = nnew Raandom(); /新建一个个随机数产生生器 for (iint i = 0; i < 44; i+) nuumber = ranndom.NNext(); /随机产生生一个整数 if (numbeer % 22 = 00) /如果随机机数是偶数 取余 coode = (charr)('0'' + (cchar)(numbeer % 110); else /如果随机机数是奇数 选择从A-Z codee = (cchar)('A' + (chaar)(nuumber % 26); checckCodee += "" " + code.ToStrring(); /4个字符符的组合 s = s + code.ToStrring(); retuurn chheckCoode; /返回字符符串checckCodee/建立一个随随机图形privatee voidd CodeeImagee(striing chheckCoode) if (checkkCode = nuull | checckCodee.Trimm() = Striing.Emmpty) returrn; /建立一个个位图文件 确定长宽 System.Drawiing.Biitmap imagee = new Sysstem.DDrawinng.Bittmap(int)MMath.CCeilinng(chheckCoode.Leength * 8.55), 220);Graphiccs g = Grapphics.FromIImage(imagee); try Ranndom rrandomm = neew Ranndom();/生成随机机生成器 g.Clearr(Coloor.Whiite); /清空图图片背景色 for (innt i = 0; ii < 3; i+) /画图片的的背景噪音线线 intt x1 = randdom.Neext(immage.WWidth); intt x2 = randdom.Neext(immage.WWidth); intt y1 = randdom.Neext(immage.HHeightt); intt y2 = randdom.Neext(immage.HHeightt); g.DrrawLinne(neww Pen(Colorr.Blacck), xx1, y11, x2, y2); Font foont = new SSystemm.Drawwing.FFont(""Ariall", 122,(Sysstem.DDrawinng.FonntStylle.Bolld); /把产生的随随机数以字体体的形式写入入画面 g.DrawSStringg(checckCodee, fonnt, neew SollidBruush(Coolor.RRed), 2, 2); for (innt i = 0; ii < 1550; i+) /画图片的的前景噪音点点 intt x = randoom.Nexxt(imaage.Wiidth); intt y = randoom.Nexxt(imaage.Heeight); imaage.SeetPixeel(x, y, Coolor.FFromArrgb(raandom.Next(); /画图片的边边框线 g.DrawRRectanngle(nnew Peen(Collor.Siilver), 0, 0, immage.WWidth - 1, imagee.Heigght - 1); this.ppicturreBox11.Widtth = iimage.Widthh; this.ppicturreBox11.Heigght = imagee.Heigght; this.ppicturreBox11.BackkgrounndImagge = iimage; catch 5.4系统主界界面:5.5消费管理理界面:/创建SqllHelp类类的一个daataconnn对象SqlHelpp dataaconn = neww SqlHHelp();public int ppagesiize, ccount, pageecountt, pagge;public strinng keyy = """public strinng jlssql = ""public strinng psqql = """public XiaoFFeiMG() /构造函函数InitiaalizeCComponnent();pagesizze = 220; pagee = 1; getppagecoount();DataSett ds = dataaconn.getliist("sselectt top " + ppagesiize + " * ffrom ccords orderr by iid dessc");this.daataGriidVieww1.DattaSourrce = ds.Taables0.DeefaulttView;this.daataGriidVieww1.Collumns0.Viisiblee = faalse;this.daataGriidVieww1.Collumns1.HeeaderTText = "产品名名称"this.daataGriidVieww1.Collumns2.HeeaderTText = "类型"this.daataGriidVieww1.Collumns3.HeeaderTText = "单价"this.daataGriidVieww1.Collumns4.HeeaderTText = "费用"this.daataGriidVieww1.Collumns5.HeeaderTText = "日期"this.daataGriidVieww1.Collumns6.HeeaderTText = "星期"this.daataGriidVieww1.Collumns7.HeeaderTText = "消费者者"this.daataGriidVieww1.Collumns8.HeeaderTText = "备注"DataGriidViewwButtoonColuumn bttn1 = new DDataGrridVieewButttonCollumn();btn1.HeeaderTText = "" bttn1.Teext = "修改"btn1.Naame = "editt" btnn1.Widdth = 60;btn1.UsseColuumnTexxtForBButtonnValuee = trrue;this.daataGriidVieww1.Collumns.Add(bbtn1);DataGriidViewwButtoonColuumn bttn = nnew DaataGriidViewwButtoonColuumn();btn.HeaaderTeext = "" btnn.Textt = "删删除"btn.Namme = ""del"btn.SorrtModee = DaataGriidViewwColummnSorttMode.NotSoortablle;btn.Widdth = 60; btn.UUseCollumnTeextForrButtoonValuue = ttrue;this.daataGriidVieww1.Collumns.Add(bbtn);this.daataGriidVieww1.RowwPostPPaint += neew DattaGriddViewRRowPosstPainntEvenntHanddler(DDrawRoowIndeex);this.buutton11.Enabbled = falsse;this.buutton22.Enabbled = falsse;if (paggecounnt > ppage) thiss.buttton1.EEnableed = ttrue; getcordds();SqlDataaReadeer dr11 = daataconnn.reaad("seelect * froom ptyype"); ArrayLiist liist = new AArrayLList(); /创建一个个ArrayyList集集合list.Addd(neww DicttionarryEntrry("所有有类型", ""); /首先添添加一条记录录if (dr11.HasRRows) whille (drr1.Reaad() /将将查询出来的的数据,按照照键和值的添添加到lisst中list.Addd(neww DicttionarryEntrry(dr11"ptyype".ToStrring(),dr1"ptyppe".TToStriing(); this.pttype.DDataSoource = lisst; /设置下拉拉框的数据源源为listtthis.pttype.DDisplaayMembber = "key""this.pttype.VValueMMemberr = "vvalue"" dr1.Cloose(); public void kk(innt ss)if (sss = 00)page -= 1;else page += 1; getpageecountt();string keysqql = """ keysqql = "" and produuct liike '%" + kkey + "%' ""string sql="""if (pagge <= 1) pagee = 1;sql = ""selecct topp " + pagessize + " * from cordss wherre id is noot nulll " + keyssql + jlsqll + pssql + " ordder byy ctimme dessc"this.buutton22.Enabbled = falsse;if (paggecounnt > ppage)this.bbuttonn1.Enaabled = truue; else iff (pagge >= pageccount)sql = ""selecct topp " + pagessize + " * from cordss wherre ctiime < (seleect miin(ctiime) ffrom (selecct topp " + (pagee - 1) * paagesizze + "" ctimme froom corrds orrder bby ctiime deesc) aas temmp) orrder bby ctiime deesc"if (paggecounnt > 11)this.bbuttonn2.Enaabled = truue; this.buutton11.Enabbled = falsse; elsesql = ""selecct topp " + pagessize + " * from cordss wherre ctiime < (seleect miin(ctiime) ffrom (selecct topp " + (pagee - 1) * paagesizze + "" ctimme froom corrds orrder bby ctiime deesc) aas temmp) orrder bby ctiime deesc" this.bbuttonn2.Enaabled = truue; this.bbuttonn1.Enaabled = truue; DataSett ds = dataaconn.getliist(sqql);this.daataGriidVieww1.DattaSourrce = ds.Taables0.DeefaulttView;getcordds();SqlDataaReadeer dr11 = daataconnn.reaad("seelect * froom ptyype");ArrayLiist liist = new AArrayLList();list.Addd(neww DicttionarryEntrry("所有有类型",""");if (dr11.HasRRows) whilee (dr11.Readd()list.Addd(neww DicttionarryEntrry(dr11"ptyype".ToStrring(), dr11"ptyype".ToStrring(); this.pttype.DDataSoource = lisst;this.pttype.DDisplaayMembber = "key""this.pttype.VValueMMemberr = "vvalue"" dr1.CClose(); / 设置分页页public void getpaagecouunt() DattaSet dw = datacconn.ggetlisst("seelect * froom corrds");count = dw.TTabless0.RRows.CCount;if (couunt % pagessize = 0)pagecouunt = countt / paagesizze;elsepagecouunt = countt / paagesizze + 11;this.laabel2