.net实现统计txt记事本消费单的数据

54 篇文章 0 订阅

平时用系统自带的记事本记录日常消费,简单快捷但是缺少统计功能,不清楚每个月花费多少,于是写个程序统计一下。

下面只给出一点测试数据:

 统计结果如下:

 实现代码:

Default.aspx

 <style type="text/css">
.f{ color:Red; font-weight:bold;}
</style>

<asp:Literal runat="server" ID="ltlResult"></asp:Literal>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Text;
namespace TestProject2011
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string filepath = Server.MapPath("~/test.txt");
            using (StreamReader sr = new StreamReader(filepath, Encoding.UTF8))
            {
                StringBuilder sbDetail = new StringBuilder(); //详细
                StringBuilder sbMonth = new StringBuilder(); //月份统计
                StringBuilder sbYear = new StringBuilder(); //年统计
                string strline = null; //txt文本每行内容
                decimal daySum = 0; //日金额
                decimal monthSum = 0; //月份金额
                decimal yearSum = 0; //年金额
                decimal allSum = 0; //总金额
                DateTime dtLastDate = DateTime.MinValue; //临时保存统计的最后一个月
                string patternDate = @"/d{4,4}-/d{1,2}-/d{1,2}"; //日期正则
                string patternMoney = @"^/d+(/./d+)?";//金额正则
                while ((strline = sr.ReadLine()) != null)
                {
                    Match m = Regex.Match(strline, patternDate);
                    if (m.Success)
                    {
                        DateTime dt = Convert.ToDateTime(m.ToString());
                        if (dt.Month > dtLastDate.Month || dt.Year > dtLastDate.Year) //下一个月或下一年
                        {
                            if (dtLastDate != DateTime.MinValue)
                            {
                                sbDetail.Append("<span class='f'>本月统计到" + dtLastDate.Day + "号结束,消费金额:" + monthSum + "</span><br />");
                                sbMonth.Append(dt.AddMonths(-1).ToString("yyyy年MM月") + ":" + monthSum + "</span><br />");
                                if (dt.Year > dtLastDate.Year)
                                {
                                    sbYear.Append(dtLastDate.Year + "年的消费金额:" + yearSum + "<br />");
                                    yearSum = 0;
                                }
                                monthSum = 0;
                            }
                            sbDetail.Append("<span class='f'>本月开始:" + m.ToString() + "</span><br />" + strline + "<br />");
                        }
                        else if (dt < dt.AddMonths(1).AddDays(-1))
                        {
                            sbDetail.Append(m.ToString() + "<br />");
                        }
                        dtLastDate = dt;
                    }
                    else
                    {
                        string[] sArr = strline.Split('、');
                        foreach (string s in sArr)
                        {
                            if (!string.IsNullOrEmpty(s))
                            {
                                Match mm = Regex.Match(s, patternMoney);
                                if (mm.Success)
                                {
                                    decimal tempNum = decimal.Parse(mm.ToString());
                                    daySum += tempNum;
                                    monthSum += tempNum;
                                    yearSum += tempNum;
                                    allSum += tempNum;
                                }
                            }
                        }
                        string daySumStr = daySum > Convert.ToDecimal(100) ? "<span class='f'>" + daySum.ToString() + "</span>" : daySum.ToString();
                        sbDetail.Append(strline.PadRight(30, '=') + "当天:" + daySumStr + " 当月:" + monthSum + " 当年:" + yearSum + " 总共:" + allSum + "<br />");
                        daySum = 0;
                    }
                }
                sbDetail.Append("<span class='f'>本月统计到" + dtLastDate.Day + "号结束,消费金额:" + monthSum + "</span><br />");
                sbMonth.Append(dtLastDate.ToString("yyyy年MM月") + ":" + monthSum + "<br />");
                sbYear.Append(dtLastDate.Year + "年的消费金额:" + yearSum + "<br />");
                ltlResult.Text = sbDetail.ToString() + "<br /><br />按月统计如下:<br />" + sbMonth.ToString() + "<br />按年统计如下:<br />" + sbYear.ToString() + "总共消费金额:" + allSum;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值