《浅析家庭理财系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《浅析家庭理财系统的设计与实现.docx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、四 川 工 程 职 业 技 术 学 院 毕 业 论 文浅析家庭理财系统的设计与实现摘要:经济全球化和居民生活需求的变化以及计算机技术不断发展的今天,人们生活水平越来越高,家庭(尤其是财务)管理也变得越来越重要,理财直接影响着人们的生活,本系统应用于C/S结构的平台,本研究课题的主要目的是提供财务数据统一管理和做出合理的财务决策,其界面友好,操作简单,除具备基本的财务信息管理外,还提供了数据统计,数据查询,图表自动统计等功能。为方便操作,从多方面把用户的家庭收入、家庭支出、统计节余等财产管理的数据,以及他们的生活结余和消费统计,用科学统计的方法把这些数据存储在财务管理软件之中。以实际数据说明收入
2、、支出、节余三者之间的相互关系,为家庭的财产的有效管理和合理分配提供帮助,本文着重论述了该系统的功能与实现,如:数据流程与存储,管理等功能,并对关键的技术作了较详细的介绍。关键词:需求分析,数据库需求分析,理财系统,系统设计Analyses family financial managementsystem design and implementationAbstract: Economic globalization and residents living demand changes and computer technology development today, people l
3、ife level more and more high, family (especially financial) management is also becoming more important, financial management directly affect peoples life, the system applied in C/S structure of platform, the main purpose of this research is to provide financial data unified management and make reaso
4、nable financial decisions, its friendly interface, simple operation, in addition to basic financial information management outside, also provides data statistics, data query, chart functions such as automatic statistics. For the convenience of operation, the users from various aspects of domestic in
5、come, household spending, statistics section property management of data, such as their life balance and consumption statistics, using science statistics method put these data storage in financial management software in. Based on the actual data suggests revenues, expenses, section of the interrelat
6、ionship of family property, for the effective management and distribution help, this paper focuses on the function of the system and implementation, such as: the data flow and storage, management, and other functions, and the key technology are introduced in detail.Keyword: Demand analysis Database
7、requirement analysis Financial system System design1、绪论随着金融市场的迅速发展、金融工具的不断创新,理财业务正在悄然进入人们的生活。伴随着经济生活的日益多元化,人们的金融意识正在发生着根本的变化,最为突出的是人们对资本增值的要求从无意识变为有意识,投资理念逐步走向家庭,投资方式所涵盖的范围日益扩大,以家庭为主体的经济活动已经从传统的收支、储蓄等保守型经济行为,逐步转向以经营股票、债券、期货、外汇、保险等为主体的投资型、开放型经济行为。人们开始意识到不仅要懂得如何积累财富,更重要的是要通过专业化的理财服务,利用有效的金融市场和多元化的金融工具
8、,确保财富的保值增值,以及进行必要的风险管理。我国居民的储蓄存款超过十万亿人民币。特别是像上海、深圳等发达城市,居民的可支配收入正在逐步达到中等发达国家水平,许多居民除了购房、购车外有大量的金融资产,如何分配、管理金融资产是居民最大的需求。大多数家庭对金融方面的需求从储蓄、保管金融资产向金融资产的保值、增值转变。有些人盲目投资于股市而导致大量损失,还有许多家庭把大部分资产存在银行做定期储蓄;最多的是介于二者之间,不知如何分配其金融资产。家庭如何管理金融资产呢?如何安排家庭的富余的现金流,如何筹集家庭所需的资金,成为了一个现实的问题。因此,家庭财务的管理已经成为一种时尚,如何更为积极地、稳妥地运
9、用和处理好家庭的钱财,是提高投资效率、改善生活质量的现实需要。家庭理财又称家庭财务规划,是为实现家庭提高生活目标而制定、安排、实施和管理的一个各方面总体协调的财务计划的过程,或者说对家庭资产的合理安排与管理。具体是指:1.1采用全面系统的管理思想来管理家庭所有资源。所以统一规划家庭的所有资产、负债、投资、计划等一切就是家庭财富管理的范畴。它类似于企业资源计划(ERP:Enterprise Resource Planning)系统,也可简单地把家庭财富管理叫做家庭资源计划 (FRP:Family Resource Planning)系统。1.2体现出现代和专业的理财理念。家庭财富管理以综合现代会
10、计学、财务学、投资学、统计学等学科的家庭理财学为基础。只有包含以上学科的综合知识,才能为现代家庭提供正确、科学及专业的理财指导。1.3紧密结合理财市场与金融现状。概括来说,家庭理财就是采取全面、专业、系统的理财思想与方法来规划家庭的所有一切,使家庭财产处于收支均衡的理想状态,并达到家庭财富的最大化目标。在这样的背景下,各种理财工具层出不穷,同时理财软件市场也发展得相当迅速。各个款式的理财软件以其出色的理财与账务管理功能赢得了人们的信赖,成为家庭理财不可或缺的好帮手。但是。目前国内理财软件市场上的产品质量参差不齐,即使最畅销的几款也有美中不足之处,所以一款功能完备又具有个性化服务的理财软件的设计
11、成功正是家庭理财高手们翘首以盼的。2、 需求分析2.1 业务需求:2.1.1 用户管理对家庭成员的添加、编辑、删除等操作(要求照片也可以随时更新),当用户登录本系统的时候,要求显示该用户的包括照片在内的各种信息。2.1.2 消费管理用户登录本系统之后,能够对消费信息的添加,计算(当日,当周,当月,当季度,当年的剩余金额),查询(提供按天、周、月、季度、和一年的查询),能够讲查询的信息打印出来。并且能够计算出相应的开支。2.1.3节假管理每当遇到节假日时,可以给用户产生一个节假安排。如,安排旅游等信息。为用户提供一系列的建议。并且用户能够自己为某个节假日自行设计、安排。2.2 算法需求单个产品支
12、出=产品数量*产品单价;支出=消费项目1+消费项目2+消费项目3+消费项目N。余额=收入-支出(可以以日、周、月、季度、年为单位进行计算)2.3 系统需求2.3.1 性能需求:查询并显示第一条记录的时间应小于3秒。页面切换时间不大于2秒。切换到分析状态不大于3秒。平均程序错误率不应大于1次/页面。(查询显示时间与系统硬件资源和系统的数据量有关,只能在一定条件下满足。)2.3.2 系统架构:采用C/S模式开发,利用.NET提供的控件和自定义控件开发前台界面,使用SQL Server2005.数据库做后台。3、 业务流程分析3.1 主业务流程分析:3.2 子业务流程分析:3.2.1 用户信息管理流
13、程实现功能:对家庭的用户实现添加、删除、编辑、上传图片的操作;3.2.2 消费管理流程3.2.2.1收入管理流程实现功能:对每个月的收入进行添加、删除、编辑、查询等操作;并作系统的收入分析;3.2.2.2支出管理流程实现功能:对每个月的支出进行添加、删除、编辑、查询等操作;并作系统的收入分析;并和收入做一定的比较看看当月、当年等的消费支出情况等;3.2.3 假日计划管理流程实现功能:在假期之前对节假日做一个详细地安排,到了指定的日期(五天以前)的时候系统会自动提示用户。还可以对假日计划添加,并实现过期的节假安排自动删除。4、 数据库需求分析4.1 系统用户表(Login)字段名称字段类型是否为
14、主键是否允许为空备注IdInt是否主键,自动增长usernameNvarchar(50)否否用户名pwdNvarchar(50)否否密码birthdayDatetime否是生日cnameNvarchar(50)否是姓名4.2 消费项目表(cords)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长productNvarchar(50)否是产品名称ptypeNvarchar(50)否是消费类型priceFloat否是产品单价spendFloat否是消费总额ctimedatetime否是消费时间weekdayNvarchar(50)否是星期cnameNvarchar(50)否
15、是消费对象commentnvarchar(50)否是注释4.3 消费类型表(ctype)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长ptypeNvarchar(50)否是消费类型名称4.4 收入表(icome)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长priceFloat否是收入金额shouruFloat否是收入总额itypeNvarchar(50)否是收入类型itimedatetime否是收入时间4.5 收入类型表(itype)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长itypeNvarchar(50)否是收入
16、类型名称4.6 假期安排表(plan)字段名称字段类型是否为主键是否允许为空备注idint是否主键,自动增长jqlbNchar(10)否是假期类别tsint否是假期天数yjkxfloat否是预计开销5、 主要功能模块实现过程5.1窗体特效的实现:各个窗体的特效代码(运用dll文件实现窗体的现实特效):System.Runtime.InteropServices.DllImport(user32)函数功能:该函数能在显示与隐藏窗口时能产生特殊的效果。有两种类型的动画效果:滚动动画和滑动动画。 extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在
17、其他模块中寻找其定义。另外,extern也可用来进行链接指定private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);const int AW_HOR_POSITIVE = 0x0001; /从左向右显示const int AW_HOR_NEGATIVE = 0x0002; /从右向左显示const int AW_VER_POSITIVE = 0x0004; /从上到下显示const int AW_VER_NEGATIVE = 0x0008;/从下到上显示const int AW_CENTER
18、= 0x0010;/从中间向四周const int AW_HIDE = 0x10000;const int AW_ACTIVATE = 0x20000;/普通显示const int AW_SLIDE = 0x40000;调用窗体的特效方法(可以自己改变参数的值):AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_HIDE |AW_VER_NEGATIVE); const int AW_BLEND = 0x80000; /透明渐变显示效果5.2 数据库操作的实现:class SqlHelp /连接数据库的连接字符串 public const strin
19、g constr = Server=GSQ;InitialCatalog=home;uid=sa;pwd=sa; /创建一个SqlDataReader 的read方法 public SqlDataReader read(string str) SqlConnection conn = new SqlConnection(constr); conn.Open(); SqlCommand cmd = new SqlCommand(str, conn); SqlDataReader;dr=cmd.ExecuteReader(CommandBehavior.CloseConnection); retu
20、rn dr; / 更新数据 public int update(string str) SqlConnection conn = new SqlConnection(constr); conn.Open(); SqlCommand cmd = new SqlCommand(str, conn); int a = cmd.ExecuteNonQuery(); conn.Close(); return a; /获取数据列表(数据集) 返回数据集-列表 public DataSet getlist(string str) DataSet ds = new DataSet(); using (SqlC
21、onnection conn = new SqlConnection(constr) SqlDataAdapter da = new SqlDataAdapter(str, conn); da.Fill(ds); return ds; 5.3系统登录及图形验证码功能:public string str;/验证码/产生随机数的函数 private string CheckCode(ref string s) int number; char code;string checkCode = String.Empty; /空字符串且为只读属性Random random = new Random();
22、 /新建一个随机数产生器 for (int i = 0; i 4; i+) number = random.Next(); /随机产生一个整数 if (number % 2 = 0) /如果随机数是偶数 取余 code = (char)(0 + (char)(number % 10); else /如果随机数是奇数 选择从A-Z code = (char)(A + (char)(number % 26); checkCode += + code.ToString(); /4个字符的组合 s = s + code.ToString(); return checkCode; /返回字符串check
23、Code/建立一个随机图形private void CodeImage(string checkCode) if (checkCode = null | checkCode.Trim() = String.Empty) return; /建立一个位图文件 确定长宽 System.Drawing.Bitmap image = new System.Drawing.Bitmap(int)Math.Ceiling(checkCode.Length * 8.5), 20);Graphics g = Graphics.FromImage(image); try Random random = new R
24、andom();/生成随机生成器 g.Clear(Color.White); /清空图片背景色 for (int i = 0; i 3; i+) /画图片的背景噪音线 int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2); Font font = new System.D
25、rawing.Font(Arial, 12,(System.Drawing.FontStyle.Bold); /把产生的随机数以字体的形式写入画面 g.DrawString(checkCode, font, new SolidBrush(Color.Red), 2, 2); for (int i = 0; i page) this.button1.Enabled = true; getcords();SqlDataReader dr1 = dataconn.read(select * from ptype); ArrayList list = new ArrayList(); /创建一个Arr
26、ayList集合list.Add(new DictionaryEntry(所有类型, ); /首先添加一条记录if (dr1.HasRows) while (dr1.Read() /将查询出来的数据,按照键和值的添加到list中list.Add(new DictionaryEntry(dr1ptype.ToString(),dr1ptype.ToString(); this.ptype.DataSource = list; /设置下拉框的数据源为listthis.ptype.DisplayMember = key;this.ptype.ValueMember = value; dr1.Clos
27、e(); public void kk(int ss)if (ss = 0)page -= 1;else page += 1; getpagecount();string keysql = ; keysql = and product like % + key + % ;string sql=;if (page page)this.button1.Enabled = true; else if (page = pagecount)sql = select top + pagesize + * from cords where ctime 1)this.button2.Enabled = tru
28、e; this.button1.Enabled = false; elsesql = select top + pagesize + * from cords where ctime (select min(ctime) from (select top + (page - 1) * pagesize + ctime from cords order by ctime desc) as temp) order by ctime desc; this.button2.Enabled = true; this.button1.Enabled = true; DataSet ds = datacon
29、n.getlist(sql);this.dataGridView1.DataSource = ds.Tables0.DefaultView;getcords();SqlDataReader dr1 = dataconn.read(select * from ptype);ArrayList list = new ArrayList();list.Add(new DictionaryEntry(所有类型,);if (dr1.HasRows) while (dr1.Read()list.Add(new DictionaryEntry(dr1ptype.ToString(), dr1ptype.To
30、String(); this.ptype.DataSource = list;this.ptype.DisplayMember = key;this.ptype.ValueMember = value; dr1.Close(); / 设置分页public void getpagecount() DataSet dw = dataconn.getlist(select * from cords);count = dw.Tables0.Rows.Count;if (count % pagesize = 0)pagecount = count / pagesize;elsepagecount = c
31、ount / pagesize + 1;this.label2.Text = 共 + pagecount.ToString() + 页 当前第 + page.ToString() + 页; / 上一页private void button2_Click(object sender, EventArgs e) kk(0); / 下一页private void button1_Click(object sender, EventArgs e) kk(1); private void dataGridView1_CellContentClick(object sender, DataGridView
32、CellEventArgs e)if (dataGridView1.Columnse.ColumnIndex.Name = del) int id = Convert.ToInt16(dataGridView1.Rowse.RowIndex.Cells2.Value);dataconn.update(delete from cords where id = + id);MessageBox.Show(成功删除一个消费记录!,友情提示);page = 2;getpagecount();kk(0); if (dataGridView1.Columnse.ColumnIndex.Name = edi
33、t) AddJiLu cordsfrm = new AddJiLu(int.Parse (dataGridView1.Rowse.RowIndex.Cells2.Value.ToString(), this);cordsfrm.ShowDialog(); / 添加一条新记录private void button3_Click(object sender, EventArgs e)AddJiLu cordsfrm = new AddJiLu(0, this);cordsfrm.ShowDialog(); / 调用成员管理窗体private void button4_Click(object se
34、nder, EventArgs e)Member frm2 = new Member();frm2.Show();this.Hide(); / 退出系统private void button6_Click(object sender, EventArgs e) AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_HIDE | AW_VER_NEGATIVE);Application.Exit(); / 查询按钮private void button5_Click(object sender, EventArgs e)key = this.textBox
35、1.Text;if (ptype.Text != 所有类型)psql = and ptype= + this.ptype.Text + ; elsepsql = ; kk(0); / 显示全部的消费记录private void button7_Click(object sender, EventArgs e)key = jlsql = ;psql = ; kk(0); / 查询消费记录public void getcords()double cords = 0;for (int i = 0; i this.dataGridView1.Rows.Count; i+)cords += Convert.ToDouble(this.dataGridView1.Rowsi.Cellsspend.Value); this.label4.Text = 消费金额总计: + cords.ToString() + 圆!; / 查看本月的消费记录private void button8_Click(object sender, EventArgs e) jlsql = and datediff(Month,ctime,getdate()=0 ;key = ; psql = ; kk(0); / 查看本周的消费记录private