平时用系统自带的记事本记录日常消费,简单快捷但是缺少统计功能,不清楚每个月花费多少,于是写个程序统计一下。
下面只给出一点测试数据:
统计结果如下:
实现代码:
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;
}
}
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步