您所在的位置: 首页>>读书频道>>设计开发>>数据库开发>>

2.13.2 年销售额分析设计

http://book.51cto.com  2008-05-06 09:10  明日科技/盖天宇/孙明丽/天恩编著  人民邮电出版社  我要评论(0)

2.13.2  年销售额分析设计

用户可以通过单击菜单主导航“查询统计”→“年销售额分析”超级链接,进入年销售额分析页面。该页面主要是以图表形式显示指定年份中所有商品的销售额情况,在此按柱状图和线性图两种模式进行分析。

年销售额分析页面的设计效果如图2.29所示。

  
图2.29  年销售额分析页面的设计效果

年销售额分析页面中涉及到的HTML表单元素如表2.21所示。
表2.21  年销售额分析页面中涉及到的HTML表单元素

   

  

   

form1

form

表单

method="post" action=""

year

select

选择年份

<%for i=2000 to 2049%>

  <option value="<%=i%>" <%if i=year(date()) then response.Write("selected")%>><%=i%></option>

<%next%>

Submit

submit

“确定分析”按钮

class="btn_grey"

form2

form

表单

method="post" action=""

pillar

button

“柱状图分析”按钮

onClick="charts('pillar')"

line

button

“线性图分析”按钮

onClick="charts('line')"

首先提交在年度下拉列表中的数据信息,并检索数据库中的tab_sell_main表,将本年度的月份进行分组,并对其金额进行汇总。如果没有检索到本年度的数据信息,将弹出信息提示。完整代码如下:

 <!--******************************* cxtj/yearxsfx.asp
***********************************-->
<%
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
conn.open application("dsn")
qyear=request.Form("year")
if qyear<>"" then
'查询条件判断
sql="select sum(je) as sumje,month(xsdate) as xsmonth
from tab_sell_main where  year(xsdate)="&cint
(qyear)&" group by month(xsdate)"
rs.open sql,conn,1,3
if rs.eof then%>
<script language="JavaScript">
alert("<%=qyear%>年没有销售记录!")       //弹出提示对话框
window.location.href="yearxsfx.asp";          //跳转到指定页面
</script>
<%response.End()
else
counts=rs.recordcount       '获得总记录数
end if
end if
%>
<%
  set conn=server.CreateObject("adodb.connection")        '创建数据库对象
set rs=server.CreateObject("adodb.recordset")            '创建记录集对象
set myrs=server.CreateObject("adodb.recordset")         '创建记录集对象
set rec=server.CreateObject("adodb.recordset")           '创建记录集对象
conn.open application("dsn")           '打开数据库
sql="select id from tab_cgdan"
rs.open sql,conn,1,3        '打开记录集
str=myrs("id")
cgid=cint(mid(str,7,5))+1
cgid="cg"&year(date())&cstr(cgid)
else
  cgid="cg"&year(date())&"10001"
end if
  session("auto")=cgid         '生成采购单号
%>

从上面的代码中可以看出,如果检索到数据后,则通过counts=rs.recordcount语句汇总出当前数据表中的记录数。


下面应用了ActiveX控件的MSChart对象来统计指定年份的销售额。首先判断汇总的记录数是否大于0,如果大于0,说明本年度存在销售额,接下来就调用自定义函数charts(type),将统计后的销售额以图表形式输出。在charts(type)函数中,参数type用于标识图表的类型,当type=="line"时,就以线性图进行分析;当type=="pillar"时,就以柱状图进行分析,分别通过rowcount和ColumnCount来设置与图表关联的当前数据网格中的行数和列数,然后利用Data属性控制当前数据点的值,即纵坐标值。完整代码如下:

<!--******************************** cxtj/yearxsfx.asp
**********************************-->
<%if counts>0 then%>
<object classid="clsid:3A2B370C-BA0A-11D1-B137-0000F8753F5D"
name="chart" width="100%" height="300">
<%'定义对象,该对象命名为chart%>
</object>
<% for i=1 to counts               '循环从1循环到counts     %>
<script language="javascript">
charts("pillar");               '调用charts()函数
function charts(type){
if (type=="line"){
chart.chartType=3;     'chartType是对象chart的属性:表示图形类型     }
if (type=="pillar" ){
chart.chartType=1; }
chart.ColumnCount=1; 'ColumnCount是对象chart的属性:表示设置与图表关联的当前数据网格中的列数
chart.Title="<%=qyear%>年销售额分析表";   '图表标题
chart.rowcount=<%=counts%>;        'rowcount属性:数据行个数
chart.row=<%=i%>;         'row属性:当前数据行
chart.rowlabel="<%=rs("xsmonth")%>月份"; 'rowlabel属性:返回或设置一个数据标签,该标签用来标
识图表中的当前数据点。横坐标值
chart.Data=<%=rs("sumje")%>;        'Data属性:当前数据点的值。纵坐标值
chart.Footnote="注:纵坐标为销售额,单位为(元) ;空缺的月份没有销售额"   }
<%
  if request("id")<>""then
cgid=request("id")
spname=request("spname")
cs=request("cs")
gg=request("gg")
bz=request("bz")
dw=request("dw")
dj=request("dj")
sl=request("sl")
je=request("je")
cgdate=request("cgdate")
memo=request("memo")
  dj=cstr(dj)&"元"
sl=cstr(sl)&dw
je=cstr(je)&"元"
if spname="" or cs="" or gg="" or bz="" or dw="" or
dj="0" or sl="0" or je="0" then '判断表单元素是否为空
%>

<%response.end
end if
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
conn.open application("dsn")
  sql="insert into tab_cgdan(id,spname,cs,gg,bz,dw,
dj,sl,je,cgdate,memo) values('"&cgid&"','"&spname&"','
"&cs&"','"&gg&"','"&bz&"','"&dw&"','"&dj&"','"&sl&"','"&je&"
','"&cgdate&"','"&memo&"')"        '插入新记录
rs.open sql,conn,1,3
end if
%>

技术细节


Chart对象用于在报表中插入图表,特别适用于销售图表的打印,在Web编程中经常需要做的一件事就是把从数据库中查出的数据使用图表(Chart)的形式在页面中表现出来。


ASP Chart是一个在服务器端生成图表的组件,可以保存到服务器端硬盘,也可以直接输出到浏览器端。Chart对象的应用范围如下。


建立JPG(Read/Write)、PNG(Write-only)和BMP(Read/Write)格式的图片。
支持3D效果。
支持饼图、条形图和面积图等多种格式。
自动建立图例。
支持多列数据。

 </script>
<%
rs.movenext       '移到下一条记录
next
%>
…    '“柱状图分析”按钮和“线性图分析”按钮的设计代码略
<% end if %>

A注意
要使“Active X”控件的MSChart对象在页面中显示图片,需要在用户的计算机上安装Visual Basic 6.0或更高版本。

年销售额分析页面的运行结果如图2.30、图2.31所示。

  
图2.30  年销售额分析柱状图页面的运行结果
 
图2.31  年销售额分析线性图页面的运行结果
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
深入Vista应用程序开发
让你的代码“炫”起来——WPF开发教程
初探敏捷开发
WCF开发基础
Sun以10亿美元并购开源数据库厂商MySQL
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有