需要做一个小项目,网站流量统计。需求是:
1.以天为单位,创建XML文件,存储到访用户信息(IP,IE版本,系统版本)
2.用线程把XML以每小时存到数据库
3.用GDI+绘图,以柱状,折线图显示网站流量关键字:线程,XML,GDI+请问大家具体该怎么做?
1.以天为单位,创建XML文件,存储到访用户信息(IP,IE版本,系统版本)
2.用线程把XML以每小时存到数据库
3.用GDI+绘图,以柱状,折线图显示网站流量关键字:线程,XML,GDI+请问大家具体该怎么做?
解决方案 »
- asp.net 如何在指定路径文件夹下找到所需的文件并上传。文件名重名为当前的时间。
- cshtml代码和页面混在一起的?
- js传参数问题
- 难题请教:membership节点是何时被什么程序载入和实例化的?
- asp.net发送邮件
- textbox.text为什么从数据库获取数据在客户端显示以后再做修改死活提交不了数据呢???
- 熟悉xmlhttp的进来
- 各位老鸟:在ASP.NET中怎么实现从数据库中提取权限编码自动生成菜单的功能,非常棘手!!!!!
- 大家帮我看看这个奇怪的问题,高分请教
- 请问在asp.net(vb.net)里怎么设置当点某个按纽的时候不执行服务器端的验证!谢谢!
- GridView 表头内容居中.
- 怎么隐藏一个html标签啊?????
http://www.cnblogs.com/ajaxren/archive/2007/05/15/747789.html
1.写一个程序,每天创建一个xml文件,文件名如"20080408.xml"
2.写一个程序,获取来访用户信息(IP,IE版本...),并随时把来访的所有用户存到今天的这个XML文件中
3.绘制柱状,折线图来显示每天24小时来访人数
4.用线程,设置每隔1小时把XML中的来访用户信息存入数据库保存不知道大家觉得怎么样,请给点意见或者提示,本人确实对这个不怎么了解
把访问者的信息现存到XML中,然后线程定期存到数据库中,这样是为了避免用户访问用户人数过多,操作数据库的时候造成很慢,所以选择了先把来访者信息存到XML中,再用线程定期存到数据库中我只是把我对这个的认识说一下,至于这个完整的思路是什么,请大家都来说一下
rdlc报表做图.
1、记录每个人访问信息;(这个建议使用数据库来实现,需要考虑的就是多次刷新的问题)
2、统计每个小时的流量,计算好以后生成xml文件;
3、实现图表显示;(这个你去找找网上现成的com控件,服务器上安装一下使用么好了)用线程这个不是很搞得清楚你要实现什么,或者就是你的思路有问题;
我也不知道我这个想法可行不?
中国无忧商务网-无忧商务 商务无忧
www.cn5135.com
哪么后面的读取信息,显示除柱状图,折线图又该怎么办?
-------------------------------------------
3.用GDI+绘图,以柱状,折线图显示网站流量
一图形显示不一定非歹GDI+绘图,可以控制图片宽度显示。
今天又要来研究rdlc了又是以头雾水...
和别还要自己费时开发?而且开发的没有人家的好运,美观,耐用等。
8楼的兄弟说的:webChart 足可以应付你的绘图+数据库 就很对。很好用。你所的几步,也就是几个类就可以。
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Drawing2D;
using BLL;
using ObjectInfo;
using WebChart;
using System.Globalization;public partial class Analysis_ChartProfit : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BasePage.Control.BindDicList(ddlType, "chartTypeStruct", 0);
lbTip.Text = "[" + System.DateTime.Now.ToString("yyyy-MM-dd") + "]";
}
myChart.Charts.Clear();
switch (ddlType.SelectedValue.ToLower())
{
case "column":
DrawColumn();
break;
case "pie":
DrawPie();
break;
default:
Javascript.Alert("显示参数未正确定义");
break;
}
}
#region 饼图
protected void DrawPie()
{
Color[] cl;
float startPoint = 0;
ChartPointCollection data = GetData(out cl, ref startPoint,true);
PieChart pc = new PieChart(data);
//pc.Fill.StartPoint = new Point(150, 300);
pc.Colors = cl;
pc.ShowLineMarkers = false;
ChartShadow cs = pc.Shadow;
cs.OffsetX = 2;
cs.OffsetY = 4;
cs.Color = Color.Gray;
cs.Visible = true;
pc.Legend = "资产总量分析图";
pc.ShowLegend = true;
ChartDataLabels cdl = pc.DataLabels;
cdl.ShowZeroValues =true;
cdl.Position = DataLabelPosition.Center;
cdl.ShowLegend = false;
cdl.ShowXTitle = false;
cdl.ShowValue = true;
NumberFormatInfo ni = new NumberFormatInfo();
cdl.NumberFormat = "#0.##" + "'%";
cdl.Visible = true;
pc.Explosion = 0;
System.Drawing.Point p1 = pc.Fill.StartPoint;
System.Drawing.Point p2 = pc.Fill.EndPoint;
myChart.Charts.Add(pc);
myChart.ChartPadding = 0;
myChart.LeftChartPadding = 0;
myChart.ShowXValues = true;
myChart.ShowTitlesOnBackground = false;
myChart.YCustomStart = (float)0.01;
myChart.Width = 750;
myChart.Height = 550;
myChart.Legend.Width = 140;
myChart.RedrawChart();
}
#endregion #region 柱图
protected void DrawColumn()
{
Color[] cl;
float startPoint = 0;
ChartPointCollection data = GetData(out cl,ref startPoint, false);
myChart.YCustomStart = 0;
ColumnChart c = new ColumnChart(data);
c.Fill.Color = Color.Gray;
c.Fill.Type = InteriorType.Hatch;
c.Fill.HatchStyle = HatchStyle.DottedDiamond;
c.Fill.ForeColor = Color.LightBlue;
c.Line.Color = Color.White;
c.MaxColumnWidth = 100;
c.ShowLegend = false;
c.DataLabels.ForeColor = Color.White;
c.DataLabels.NumberFormat = "¥0.00";
c.DataLabels.Position = DataLabelPosition.Top;
c.DataLabels.Background.Color = Color.SteelBlue;
c.DataLabels.ShowXTitle = false;
c.DataLabels.ShowValue = true;
c.DataLabels.Border.Color = Color.Red;
c.DataLabels.Separator = " ";
c.DataLabels.ShowLegend = false;
c.DataLabels.MaxPointsWidth = 1;
c.DataLabels.Visible = true;
c.ShowLineMarkers = true;
c.DataLabels.ShowZeroValues = true; ChartShadow cs = c.Shadow;
cs.OffsetX = 5;
cs.OffsetY = 4;
cs.Color = Color.LightSlateGray;
cs.Visible = true;
myChart.YTitle.Text = "万元";
myChart.YTitle.StringFormat.Alignment = StringAlignment.Near;
//myChart.YTitle.StringFormat.LineAlignment = StringAlignment.Far;
myChart.YTitle.StringFormat.FormatFlags = StringFormatFlags.DirectionRightToLeft;
//myChart.YCustomEnd = 0;
myChart.Width = 750;
myChart.Height = 550;
myChart.TopChartPadding = 10;
myChart.LeftChartPadding = 30;
myChart.BottomChartPadding = 20;
myChart.ShowXValues = true;
myChart.Legend.Width = 0;
myChart.ShowTitlesOnBackground = false;
myChart.Charts.Add(c);
myChart.RedrawChart();
}
#endregion #region 取数据
protected ChartPointCollection GetData(out Color[] cl,ref float startPoint,bool showPercent)
{
DataTable dtType = BLL.Query.AssetTypeInfo();
QProfitInfo p = new QProfitInfo();
DataTable dtData = BLL.Query.AssetProfit(p);
ChartPointCollection data = new ChartPointCollection();
Color[] cls = CommonFunc.AssetTypeColors();
cl = new Color[dtType.Rows.Count];
float total = (dtData.Compute("sum(fee)", "true")==DBNull.Value?0:Convert.ToSingle(dtData.Compute("sum(fee)", "true")))/10000;
bool minValue = false;
for(int i=0;i<dtType.Rows.Count;i++)
{
cl[i] =cls[i];
string minCode = dtType.Rows[i].IsNull("minCode") ? "00" : dtType.Rows[i]["minCode"].ToString()+"-00000";
string maxCode = dtType.Rows[i].IsNull("maxCode") ? "00" : dtType.Rows[i]["maxCode"].ToString() + "-00000";
DataRow[] dr = dtData.Select("fstrAssetName>='" + minCode + "' AND fstrAssetName<='" + maxCode + "'");
string name = dtType.Rows[i].IsNull("lb") ? "00" : dtType.Rows[i]["lb"].ToString();
object v = dtData.Compute("sum(fee)", "fstrAssetName>='" + minCode + "' AND fstrAssetName<='" + maxCode + "'");
float f = Convert.ToSingle(v ==DBNull.Value ? 0 : v) / 10000;
ChartPoint cp = new ChartPoint(f<0?name+"-(负)":name, showPercent?f*100/total:f);
data.Add(cp);
startPoint = startPoint > f ? f : startPoint;
}
if(startPoint>0.01)
{
startPoint *= 1.5F;
}
return data;
}
#endregion
}
+是个啥东西!
我个人觉得看你网站流量大小,流量小DB,XML足够了,流量大的话可以考虑用消息队列,统计图可以考虑用开原的一个控件ZedGraph 或者购买infragistics。另外数据量大的话建议每天都新建一张表
strvip = ServerVariables["REMOTE_ADDR"].ToString();-- 这个是显示ip的--也可以用循环把键值对全部输出看一下-
要查询的时候取出来:
DataTable dt=Application["your_DataTable"] as DataTable
//然后用Linq to DataTable 或者其他方法查询
这些都是再Global.asax.cs里操作吧
不一定要在global里写.在Page_Load里记录到表上就可以了.
要查看统计表就在那个page的page_Load里查询表,然后绑GridView.如果要显示图片稍微麻烦一点.可以用GDI+绘图.