资源描述
并裳饥巷恭砷田劈伤屉府呐瘫原货挽捎拒极菌淳氢搓擞都童羹索酶协崔屏金当卖视抽缩祁击寐筑抵擒咽掸级烟畏竟尚埠傻菜茧具拄设苏烽盒饯呜贵沾悼芒积会绝默鸡惩城千洗必赚钉磨装墨胜符绒漫泛巩负只妙或流呼爱泄毒绽瘸坤画续汝伴金挣撤瓢榆随谓仗汛洋荐摹喻琢懊狠韵票各恩侮漫倪糊防称之律鉴鞍共狄兢押丸滚宾从乱么盛夺候髓爆一寓首渗任瑶故巢茎摈蛛领亩碧盒涧港喳阿褂右浴哭箱迁霓同鼎血氖挪尸甸乌怒妨形八邮榴戮冶邹姜吗傣碾走谊亿影诽辕迅粹镀兽锥枷此拎碘昂癣每仟穷只灯伙穴族输跪戌柯是洞蓖论斤侮揣叙蒜戴富让嗣奔丙哥辗帘砷恨辙蘑即寿悠帆商的许霓涟泰 山 学 院本科毕业论文基于.NET的个人理财系统所 在 学 院 信息科学技术学院 专 业 名 称 计算机科学与技术 申请学士学位所属学科 工 学 年 敲伞羊绒扶潦子县蓖躺寇烯惩厂撅官戈伯烤眷锥负蚀弥谴桅症嘻怯阅卧宦曙钩能稿歹怜裂留仔冒膊沙癌岂傀鄙逐穷缀阐挨咋芹脓矗糠搏晃筏飞擦将摇坟再遭眯钉关扰葡文入抉偏渗驰愚田分六缎瘁握指官漓易躯抹煽膘铸锐刃角昆折礁瑚彪咏遥募尉叉将垣月怒出炙燥纺曳沽俗瘪铃争陆辰霖辰碉听汰循阉郡循裂层辨钵吮镭书修翱熙梗暮烧亡褒锦蠢抑规评功翟片搂汲璃圾忧阻参桩层岩吕苑篮稳什狱萄赤琼殴炔撂巧失建浊踏十定伪捡衡模痴烤聘蹲曰由漱肉池匪亨寅难泵骤早赵将耍逆涵得哄狸瀑相魔稳躺悉胳犬经毛氏哎菜翻畔穗锤下址贵霄栏雇盘宁艾辜胆擎圈盂哟汀整案冬于兼宠胸凿扔弥基于.NET的个人理财系统本科毕业论文祈典畏沙庄俺亩耪凉洋观帜钻浴蛋奥贪莲呀螟冕券挑嘿甭涣腾鉴宴旺杰差多昧仙彤霄空绊施凭珠舆瑟蜒憨怯邱褥哎丽汹森旗歌裕耻竣始障蹦霉遁品加沾汹宿昧佃仇莹歉谤蹲房倚挨勒慢瓶绵袖竿咒趴侗啦萌述邵冲沮骄禽锅盈烽酱后币兹彬垛答毗诱靳归即旷咏觅痢踪鸦鹅耀奢讼凛哥掣崩懈抛鹰卯梳质怜掏肮穴硕钾筹五爽付篇稿锤阔间蛮硕不斟惋利芍狰氓昏烈面涌铸捐义宵蚊择挝悬磕胸萝媳温延壶蛮芥靳君纵愤现拜浑滞丢越铱烦靶臃甜渣膜凋绕慨离训东菠请厦饱尧童资嚣助圣捣嫂溢惕缨命濒榴术苍胀董此励就阳篇钻课眨屎鹅盆穿摈户蝇催逞智介咳官砾再虏芝舆悸嚷娇邮疯笆拙误囊梭泰 山 学 院本科毕业论文基于.NET的个人理财系统所 在 学 院 信息科学技术学院 专 业 名 称 计算机科学与技术 申请学士学位所属学科 工 学 年 级 学生姓名、学号 指导教师姓名、职称 完 成 日 期 摘 要当今世界,人们处在信息爆炸的时代,通过计算机处理工作以及生活上的事情已经成为人们生活之中不可或缺的一部分。方便、快捷、清晰的处理自己的事情成为人们对计算机应用服务的基本要求。在高节奏的工作及生活之下,人们对自身财务的管理及分配便有着更高的期望和需求,因此在当今社会人们工作生活中普遍使用微软的操作系统的情况下,在.NET平台上开发一款财务管理系统显得恰逢其时。该系统可以提供最简单的财务登记方式,最直观的财务走向以及最方便的财务分配手段。本系统的实现用到了计算机程序领域的相关技术,其中包括C#语言、SQL Server数据库、XML数据集,使用到了Visual Studio 2010、SQL Server Management Studio等工具。关键词:C#;XML;SQL server数据库;Visual Studio ; SQL Server Management StudioABSTRACTIn today's world, people are in the era of information explosion, processing by computer and things in life has become an indispensable part of people's lives. Conv. Convenient, fast own things become the basic requirement for computer application service. Under the high pace of life and work, management and distribution of their financial people have higher expectations and demands, so the commonly used operating system Microsoft in today's society in people's life situation, the development of a financial management system was the right time on the.NET platform. The system can provide to registration, the most intuitive and most convenient means of financial allocation. This system make use of the computer program in the field of related technology, including C#,SQL, XML language Server database data set, use the Visual Studio 2010, SQL Server Management Studio and other tools.Key words: C#;XML;SQL server database;Visual Studio ; SQL Server Management Studio目 录1 引 言12 系统分析12.1 需求分析12.2 可行性分析23 总体设计23.1 项目规划23.2 系统窗体功能结构图23.3 设计目标33.4 开发工具及运行环境33.5 逻辑结构设计44 财务管理系统总体架构44.1 系统各功能窗体的运行结果44.2 系统数据集及数据库设计95 系统前台各功能模块的实现115.1 导航窗体功能及实现115.2 财务管理窗体主窗体115.3 财务管理系统财务记事窗体195.4 创建方法类246 结束语28参考文献30致谢311 引 言当今人们所处时代是一个科技、经济、人文高速发展以及信息量几何级数的增长与传递的时代,计算机的应用在短短的十几年间便已覆盖到全社会的方方面面。随着人们对生活越来越快捷、越来越方便的极致追求,人们越来越习惯于使用计算机来帮助人们达到工作、生活以及精神上的需求。人们善于利用计算机作为人际交流的平台,也善于利用计算机作为处理工作及生活上的琐事,使自身的生活更加方便和优质。计算机作为信息处理终端,最大的优点便在于它对数据处理的高效及精确。该系统为人们提供方便的财务管理办法,提供了最直观的财务走向及趋势。该系统能够快捷的登记人们的平时的花销与收入,能够直观的查看财务走向与收支情况。该平台拥有账户系统,可以区分财务登记人,可以申请账户,注销账户等功能;同时拥有管理员权限的人可以对账户进行管理,可以对后台数据库进行相关的维护和升级。2 系统分析2.1 需求分析在系统开发之前,用户的需求是系统开发的主要目标。通过用户的调查结果显示,我们要求的财务管理系统必须要求以下的基本功能:(1)支持财务登记、删除、查询;(2)支持财务的收入分类及开销分类;(3)支持财务数据的日期性存储;(4)支持数据按时间要求做出的收支计算。另外,为增强用户对系统的体验及对系统的功能性要求,需要对本系统的发展功能为:(1)支持将数据以折线图的形式显示出来;(2)支持数据按照日期进行查询;(3)支持财务数据按照分类进行查询显示;(4)添加账号系统,方便不同人使用;(5)添加日记系统,方便于做日常性总结;2.2 可行性分析财务管理系统对使用者的财务进行登记、处理、存储、查询,应用端以应用程序的方式进行前台的登记、管理和查询,方便用户的使用;服务端存储处理完毕后的分类数据;中间端采用XML数据集的方式存储处理中的数据,以加快程序的运行速度同时减少终端与服务器端过多的容错处理。3 总体设计3.1 项目规划 财务管理系统是一个功能全面并且方便快捷的应用程序,由前台应用程序、中间数据集及后台数据库胆大部分组成。(1)前台应用程序 前台应用程序主要包括财务登记、财务删除、财务更新、收支查询、时间段查询、分类项目查询、折线图等功能及模块。(2)中间数据集中间数据集主要功能是实现数据的快速插入、删除、修改的存储中继。(3)后台数据库后台数据库主要对前台处理的数据进行远程端的存储与备份,拥有简单的数据管理功能。3.2 系统窗体功能结构图财务管理系统前台窗体功能结构,如图1所示。图3-1 财务管理系统前台窗体功能结构图 3.3 设计目标本系统是针对用户自身的财务进行有效的、直观的管理为原则进行设计开发的,其需要达到的目标如下:(1)通过登记的财务信息,能够直观的查看收入支出。(2)可以管理财务数据。(3)能够直观的查看消费及收支费用的走势。(4)提供财务情况的记录功能。(5)能够按照时间段进行精确查询。3.4 开发工具及运行环境开发工具:C#编译器: Microsoft Visual Studio 2010XML文档编写器: SublimeText_2.0.2.2221_XiaZaiBa数据库管理工具: SQL Server Management Studio运行环境:CPU: P41.8GHz;内存: 256MB以上。操作系统: Windows XP/7操作系统;数据库: SQL Server 2008;4 财务管理系统总体架构4.1 系统各功能窗体的运行结果4.1.1财务管理系统导航窗体。21图4-1 财务管理系统导航窗体运行结果(ZhuTi.cs)导航说明如下:表4-1 财务管理系统导航窗体说明区域名称说明对应文件1主功能窗体财务管理系统的主要功能窗体MoneyMake.cs2日记功能窗体添加的其他功能窗体,主要应对用户对一些平常事情的记事formNoteBook.cs4.1.2财务管理系统主功能窗体-财务收支页面。54321图4-2 财务管理系统主功能窗体-财务收支页面(MoneyMake.cs)财务管理系统主功能窗体-财务收支页面功能如表2所示。表4-2 财务管理系统主功能窗体-财务收支页面功能展示区域名称说明对应文件1财务详细条目展示已登记财务的大体预览information.xml2财务入账模块是财务收入或支出的登记模块3财务收支状况的时间段查询主要对指定时间段内进行财务总收入的大体查询4财务查询结果显示查询后总体的结果5财务记事及账目删除模块1、 显示指定登记条目的财务记事;2、对指定登记条目执行删除命令4.1.3财务管理系统主功能窗体-财务走势页面。3421图4-3 财务管理系统主功能窗体-财务走势页面(MoneyMake.cs)财务管理系统主功能窗体-财务走势页面功能如表2所示。表4-3 财务管理系统主功能窗体-财务收支页面功能展示区域名称说明对应文件1折线图区域展示财务收支总走势information.xml2设定时间单位为需要展示的财务设定展示单位3实时数据显示鼠标所处位置的金钱数据4设定时间段显示查询后总体的结果4.1.4财务管理系统主功能窗体-消费走势页面。图4-4 财务管理系统主功能窗体-消费走势页面(MoneyMake.cs)4.1.5财务记事主功能窗体。图4-5 财务管理系统主功能窗体-消费走势页面(formNoteBook.cs)4.1.6财务记事新增窗体。图4-6 财务管理系统新增记事窗体(formNoteAdd.cs)4.1.7财务记事展开页窗体。图4-7 财务记事展开页窗体(formNoteRead.cs)4.2 系统数据集及数据库设计4.2.1 XML数据集设计(实例):<?xml version="1.0" encoding="gb2312"?> /声明,标示版本及标准<root> /根元素 <Inf> /子元素,标示一条财务信息 <编号>1</编号> /记录当前数目编号 <收支>支出</收支> /记录当前信息是收入还是支出 <金额>-35</金额> /记录金额 <类别>杂项</类别> /记录本条信息属于什么类别 <日期>2014/3/4</日期> /记录日期 <备注 /> /简单笔记 <支出>35</支出> /隐藏元素,做数据统计 <收入>0</收入> /隐藏元素,做数据统计 </Inf> /本条信息结束 <Inf> /下一条信息开始 <编号>2</编号> <收支>支出</收支> <金额>-132</金额> <类别>杂项</类别> <日期>2014/3/6</日期> <备注>das</备注> <支出>132</支出> <收入>0</收入> </Inf> </root>4.2.2 数据库架构设计表Strip_HaveMake设计如图(详细见附录)。图4-8 Strip_HaveMake表的表头及数据类型表UserInfo(详细见附录)。图4-9 UserInfo表的表头及数据类型5 系统前台各功能模块的实现5.1 导航窗体功能及实现作为导航窗体,其肩负的主要功能就是负责为用户提供一个快捷的功能通道,使用户能够快速的进入所需的功能窗体。本系统的设计实在财务统计和财务记事上做了导航,其跳转的实现如下:MoneyMake rofm = new MoneyMake(); /实例化财务管理窗体MoneyMake rofm.Show(); /使窗体显现 this.Hide(); /隐藏导航窗体财务记事窗体的跳转同上。退出功能是退出程序,各个主功能窗体都有添加(以下略过不再赘述),其实现如下: Application.Exit();5.2 财务管理窗体主窗体在本功能窗体之上,使用了TabControl容器组件,分别设计了财务收支页(tabPage1)、财务走势页(tabPage2)以及消费走势页(tabPage3)。其他公共区域有实时日期时间显示区域(DateTimeShow)、返回(btnBack)及退出,其详细实现如下代码显示:实时时间(添加计时控件Timer命名为TimeNow):TimeNow.Enabled = true; /开启控件 TimeNow.Interval = 1000; /设定时间间隔为1秒DateTime time = DateTime.Now; /定义时间函数time DateTimeShow.Text = time.ToString("yyyy-M-d HH:mm:ss"); /对获取的系统时间进行格式化并将实时时间显示在控件DateTimeShow上。 返回(btnBack)功能是返回导航窗体,其实现如下: /设置返回按钮的事件 private void btnBack_Click(object sender, EventArgs e) this.Close(); /关闭当前窗体 /添加窗体关闭事件,默认返回导航窗体(当单击窗体右上角小叉号时同样触发此事件)。private void MoneyMake_FormClosed(object sender, FormClosedEventArgs e) ZhuTi rofm = new ZhuTi(); rofm.Show();5.2.1财务收支页面作为财务收支页面,主要的工作是管理个人的财务信息,这里不仅有对数据的增、删、改、查,还有简单的预览和时间划分功能。数据条目功能区(dgvStrip_HaveMake)是作为已登记的财务信息的一览表,它首先绑定了一个数据集(information.xml),从中提取信息并显示在本控件中,其实现如下:/在窗体载入事件中定义并加载数据集。 /数据源绑定 xDataDoc.DataSet.ReadXml(".Fileinformation.xml"); dgvStrip_HaveMake.DataSource = xDataDoc.DataSet; dgvStrip_HaveMake.DataMember = "Inf" /定义数据表 DataTable dTable = xDataDoc.DataSet.Tables0; /时间段查询起始时间 dtp1_tab3.Value = dtp1.Value = startTime.Value = Convert.ToDateTime(dTable.Rows04.ToString(); dtp2_tab3.Value = dtp2.Value = Convert.ToDateTime(dTable.RowsdTable.Rows.Count - 14.ToString(); labXianShi(); /调用方法,在空间中显示信息/定义的方法 private void labXianShi()/显示财务,总 DataTable dTable = xDataDoc.DataSet.Tables0; int count = dTable.Rows.Count; /调用类FangFa中的方法getMoney()。 double haveMoney = FangFa.getMoney(xDataDoc, 7, Convert.ToDateTime(dTable.Rows04), Convert.ToDateTime(dTable.Rowscount - 14); double makeMoney = FangFa.getMoney(xDataDoc, 6, Convert.ToDateTime(dTable.Rows04), Convert.ToDateTime(dTable.Rowscount - 14); /显示大略的财务收支情况 labAllHave.Text = haveMoney.ToString(); labAllMake.Text = makeMoney.ToString(); labHaveMake.Text = (haveMoney - makeMoney).ToString(); labDataTime.Text = dTable.Rows04.ToString() + "-" + dTable.Rowscount - 14.ToString(); 财务登记功能区是财务管理系统的重要组成部分,它负责将用户的财务信息登记入系统之中,其设计如下:图5-1 财务入账功能其中,金额(txtMoney)限定最长字符5位,收支(cbxHaveMake)填写“收入”、“支出”两项,默认选定“支出”。入账(btnIn)按钮的功能实现比较复杂,它需要判断数据条目功能区(dgvStrip_HaveMake)中的数据序号是多少,需要依据写入的日期判断插入的数据应是在哪两条数据的之前、之中或之后?同时重新书写编号并刷新显示出来,之后清空入账区的数据,其具体的代码实现如下: private void btnIn_Click(object sender, EventArgs e)/添加数据 Regex re = new Regex("0-9*$"); if (re.IsMatch(txtMoney.Text) /该方法是修改数据集中的数据表(会同时刷新datagridview),然后更新xml。 /查找有没有相同日期的数据,有的话合并计算,没有的话加入新行。 DataTable dTable = xDataDoc.DataSet.Tables0; bool bol = true;/指示是否要在最后添加行 int count = dTable.Rows.Count; if (txtMoney.Text = "") txtMoney.Text = "0" string numMoney = cbxHaveMake.Text = "收入" ? txtMoney.Text.Trim() : "-" + txtMoney.Text.Trim(); DateTime dt = Convert.ToDateTime(dateTimePicker1.Value.ToShortDateString(); for (int i = 0; i < count; i+) if (dt < Convert.ToDateTime(dTable.Rowsi4.ToString() DataRow dr = dTable.NewRow();/新建行,下同。 if (dateTimePicker1.Value.ToShortDateString() = dTable.Rowsi4.ToString()/合并相同的日期金额 if (dTable.Rowsi5.ToString().Trim() = "")/备注的情况处理 if (txtBeiZhuIn.Text.Trim() = "") dTable.Rowsi5 = dTable.Rowsi3 + ":" + dTable.Rowsi2 + " " + cbxType.Text.Trim() + ":" + numMoney; else dTable.Rowsi5 = dTable.Rowsi3 + ":" + dTable.Rowsi2 + " " + cbxType.Text.Trim() + ":" + numMoney + "(" + txtBeiZhuIn.Text.Trim() + ")" else if (dTable.Rowsi5.ToString().Trim().IndexOf(":", 0) != -1)/第三次及以上数据合并 if (txtBeiZhuIn.Text.Trim() = "") dTable.Rowsi5 += " " + cbxType.Text.Trim() + ":" + numMoney; 时间段功能区主要负责设定查询时的时间段并使得数据条目功能区(dgvStrip_HaveMake)中处在时间段内的数据高亮。同时该功能区划定的时间段将作为一个默认数据传送到财务走势页和消费走势页,其功能实现如下:图5-2 时间段查询功能 private void searchTime_Click(object sender, EventArgs e)/时间段查询 /时间段内的数据高亮 DataTable dTable = xDataDoc.DataSet.Tables0; int count = dTable.Rows.Count; /清除原活动单元格的高亮for (int i = 0; i < count; i+) dgvStrip_HaveMake.Rowsi.Selected = false; for (int i = 0; i < count; i+) if (startTime.Value <= Convert.ToDateTime(dTable.Rowsi4) && finshTime.Value >= Convert.ToDateTime(dTable.Rowsi4) dgvStrip_HaveMake.Rowsi.Selected = true; /财务显示,调用类FangFa中的getMoney()方法。 double haveMoney = FangFa.getMoney(xDataDoc, 7, startTime.Value, finshTime.Value); double makeMoney = FangFa.getMoney(xDataDoc, 6, startTime.Value, finshTime.Value); labAllHave.Text = haveMoney.ToString(); labAllMake.Text = makeMoney.ToString(); labHaveMake.Text = (haveMoney - makeMoney).ToString(); labDataTime.Text = startTime.Value.ToShortDateString() + "-" + finshTime.Value.ToShortDateString(); 账目细则显示区是各个查询操作后产生数据显示的地方。图5-3 财务显示功能区账目管理区块是对选定的数据条目显示备注和对选定的条目执行删除的地方。当所有条目都删除掉时,将自动添加最后一行示例行,这中设定同时避免了在“入账”时产生的判断错误。其实现删除功能的代码如下:private void btnDelect_Click(object sender, EventArgs e)/删除活动单元格所在行。 DataTable dTable = xDataDoc.DataSet.Tables0; int count=xDataDoc.DataSet.Tables0.Rows.Count; int index = dgvStrip_HaveMake.CurrentCell.RowIndex;/读取活动状态单元格的行号。 /当数据条目空间中的数据不存在时,自动添加一行示例,避免入账时产生判断错误。if (count = 1) dTable.Rows00 = "1" dTable.Rows01 = "收入" dTable.Rows02 = "0" dTable.Rows03 = "示例" dTable.Rows04 = "2000/1/1" dTable.Rows05 = "这是示例行,请不要输入同此行的日期数据!" dTable.Rows06 = "0" dTable.Rows07 = "0" else dTable.Rows.RemoveAt(index);/删除行 FangFa.sortSID(xDataDoc.DataSet.Tables0);/重新编号 FangFa.newUpdata(xDataDoc);/更新xml FangFa.GeShi();/格式化xml /财务及其它信息显示 labXianShi(); txtBeiZhuPrint.Text = "" 5.2.2财务走势页面财务走势页面是财务管理系统中最直观反映用户最近财产的起伏变化的一个功能窗口,其最大的特色在于使用折线图的形式来表现。财务走势页面使用GDI绘图技术,通过最大值以及间距值等特殊计算方法使绘出的图像能够根据要求任意显示时间单位、时间间距等。主显示区域:本区域是图像呈现的画布,当根据时间单位进行计算得出数据小于两条时将不予显示并提示用户情况。其图像产生代码如下: /书写公共方法,使系统能够避免代码冗余。 public static void creatImage(int Xs, Bitmap image, DataTable dTable, bool XY, int moneyY,string nameX) Graphics g = Graphics.FromImage(image); Pen paintPen1 = new Pen(Color.Blue, 3); Pen paintPen2 = new Pen(Color.Blue, 1); g.Clear(Color.White);/绘制初始化 g.DrawLine(paintPen1, 40,170, 680, 170);/中横线 g.DrawLine(paintPen1, 40, 10, 40, 380);/左竖线 g.DrawLine(paintPen1, 40, 380, 680, 380);/下横线 int xJianGe = 638 / (Xs - 1);/计算纵线间的间隔,使用638而不是640,是为了留出最右边的一丝空隙。 if (XY = false)/横纵坐标线 for (int i = 1, xx = 40 + xJianGe; i < Xs; i+, xx += xJianGe)/若4个数据,只需绘制三根纵线,第一根是Y轴。 g.DrawLine(paintPen2, xx, 10, xx, 380);/画纵线 for (int j = 1, yy = 10; j < 38; j+, yy += 10) g.DrawLine(paintPen2, 40, yy, 678, yy);/画横线,678最右边的横坐标 /绘制横坐标值 Font fontX=new Font("宋体",12); DuiQi.Alignment=StringAlignment.Center; for (int i = 0, xx = 40; i < Xs; i+, xx += xJianGe) g.DrawString(nameXi,fontX,Brushes.Blue,xx,380,DuiQi); Point ZheXian = new PointXs;/定义折线的点集合 Pen redPen = new Pen(Color.Red, 3); for (int i = 0, rJianGe = 40; i < Xs; i+) ZheXiani.X = rJianGe;/写入横坐标 ZheXiani.Y = (170 - (moneyYi / 100) * 10);/计算并写入纵坐标 rJianGe += 638 / (Xs - 1);/计算横坐标 g.DrawLines(redPen,ZheXian); 时间段划定区域,开始时间(dtp1)以及结束时间(dtp2)是财务收支页面传递过来的参数。分别是查询数据集中最早的日期及最晚的日期。时间段是可以调节的,每当日期发生变化的时候,出发ValueChanged事件,其详细的代码如下(例起始时间): rbtnWeek.Checked = false; rbtnWeek.Checked = true; 隐藏坐标线功能,本功能启用时,折线图会隐藏坐标线以便于观察。其实现的方式是使用绘图方法时传递一个布尔值,指示是否绘制坐标线。设置查询单位,即设置时常是年、月、日,使用户按照需要查看不同时间内的情况。金额显示功能,此功能是可以实现鼠标在绘制的折线图上移动时可以实时显示金额数值,此功能十分便利于财务数额过大时。5.2.3消费走势页面本页面同比财务走势页面不同之处在于,本页面是直观反映一段时间内用户的消费情况,以便于用户对财务支配有合理的分配方式。主显示区域: /绘制图像,支出趋势 public static void creatImageMake(int Xs,Bitmap image,DataTable dTable,bool XY,int moneyY,string nameX) Graphics g = Graphics.FromImage(image); Pen paintPen1 = new Pen(Color.Blue, 3); Pen paintPen2 = new Pen(Color.Blue, 1); g.Clear(Color.White);/绘制初始化 g.DrawLine(paintPen1, 40, 10, 40, 360);/左竖线 g.DrawLine(paintPen1, 40, 360, 680, 360);/下横线 int xJianGe = 638 / (Xs - 1);/计算纵线间的间隔,使用638而不是640,是为了留出最右边的一丝空隙。 if (XY = false)/横纵坐标线 for (int i = 1, xx = 40 + xJianGe; i < Xs; i+, xx += xJianGe)/若4个数据,只需绘制三根纵线,第一根是Y轴。 g.DrawLine(paintPen2, xx, 10, xx, 360);/画纵线 for (int j = 1, yy = 10; j < 36; j+, yy += 10) g.DrawLine(paintPen2, 40, yy, 678, yy);/画横线,678最右边的横坐标 /绘制纵坐标值 Font fontY = new Font("Courier New", 8);/定义字体及大小 StringFormat DuiQi = new StringFormat();/设置文字对齐 DuiQi.Alignment = StringAlignment.Far; for (int mon = 3600, yy = 3, i = 1; i < 37; i+, yy += 10) mon = mon - 100;/坐标值 g.DrawString(Convert.ToString(mon), fontY, Brushes.Blue, 40, yy, DuiQi); Point ZheXian = new PointXs;/定义折线的点集合 Pen redPen = new Pen(Color.Red, 3); for (int i = 0, rJianGe = 40; i < Xs; i+) ZheXiani.X = rJianGe;/写入横坐标 ZheXiani.Y = (360 - (moneyYi / 100) * 10);/计算并写入纵坐标 rJianGe += 638 / (Xs - 1);/计算横坐标 g.DrawLines(redPen, ZheXian); 消费走势页与财务走势页绘制的图像不同之处是前者只有Y轴正坐标反映的是消费数值,后者Y轴分正负坐标是当前财务状况。5.3 财务管理系统财务记事窗体财务记事功能窗体是为用户做记事薄用的,它的功能相较财务管理窗体要简单许多,主要是对TXT文档进行处理。当从导航窗体跳转的时候,首先进入的是已记录的记事,主要对以往的记事进行增、删、改、查的管理功能。5.3.1财务记事主窗体(formNoteBook.cs)窗体在载入过程中触发formNoteBook_Load事件,查询并显示已记事条目,其详细的实现如下: dataGridView1.DataSource = dTable; if(dataGridView1.Rows.Count=0) button2.Enabled = false; button3.Enabled = false; 本段代码中的dTable数据集是事先声明的调用类FangFa中的方法creatDataSet()。 public static DataTable creatDataSet() DataTable dTable = new DataTable(); dTable.Columns.Add("编号", typeof(Int16); dTable.Columns.Add("标题", typeof(string); dTable.Columns.Add("日期", typeof(string); int count = Directory.GetFiles(".NoteFile").Count();/读取文件数量 string fileName = Directory.GetFiles(".NoteFile");/获取文件名数组 for (int i = 0; i < count;i+ ) DataRow dr = dTable.NewRow(); dr0 = i + 1; int s=fileNamei.LastIndexOf(""); dr1 = fileNamei.Substring(s + 1, fileNamei.Length - s - 5); StreamReader sr = new StreamReader(fileNamei); dr2 = sr.ReadLine();/读取第一行的日期
展开阅读全文