在今天这个专题中,我们将完成我们的第一个报表:帐户余额表。对于一个信息管理系统而言,或者简而言之,对于一个数据管理系统而言,最终能够很方便地产生一套完善的报表是至关重要,所以在很多时候,我们的整个系统就是为了这最终产生的几张报表,当然按照现在的计算机应用趋势,计算机的应用已经不再是仅仅取代人工去产生几张报表,而是直接介入管理。但是,即便如此,报表的产生及查询仍然是所有信息管理系统的基本功能之一。所以,当我们在接手一个业务不太熟悉的信息系统的设计时,当我们在与一些非计算机专业的客户打交道时,我们搜集业务需求的过程中必不可少的是搜集各种报表。
其实,在专题五中,我们的account.php已经给出了帐户余额表的基本格式。只不过在我们的帐户余额表中,我们还必须增加一些新的内容。
一、在这里,我们将不再显示所有的帐户,而是显示在某时间前已经存在的帐户,明确地说,就是开户时间在我们的查询时间前的帐户。
二、我们所显示的帐户余额也不再是帐户的最终余额,而是在该查询时间各帐户的余额,这就涉及到一个取数的问题。对于在收支情况库中该查询时间后没有收支记录的帐户,我们所需要的帐户余额就是该帐户的最终余额;而对于在收支情况库中该查询时间后有收支记录的帐户,我们将在收支情况库中找出该查询时间后的第一笔记录,并根据该记录得到该查询时间的帐户余额。
三、我们的帐户将根据币种分别合计。
其实,在一般情况下,我们编制报表也有一种常用的定式:首先是根据该报表的格式,先做一个字段与之相符的临时数据表,然后编制一个存储过程,在带入参数执行过该存储过程后,我们实际上已经得到我们所需的报表,下面的工作就是这个报表的显示。如果该报表会被经常查询,我们会把该临时表的记录灌入到一个固定的数据表中去。
在这里,我们之所以要提到存储过程,实在是因为少了存储过程的确是一件很痛苦的事,对于一段稍微复杂的数据处理,用相同的思路,使用存储过程与不使用存储过程其处理速度的差距往往是一个甚至几个数据级。而我们都知道,MySQL并不支持存储过程,这不能不说这是我们目前心中最大的痛。我们只能在心里祈祷MySQL能够早日完善。而在目前,我只能奉劝诸位,如果你设计的是一个数据处理比较复杂的系统的话,还是放弃MySQL,改用其他数据库。至于NASA为什么会选中MySQL,其原因我就不得而知了。
为了模拟这种编程方法,在我们今后的报表设计中,我们将用类来取代临时表,用类的方法来取代存储过程。
<?php
include ("cookie_check.php");
class report_1 {
var $currency; //币种
var $name; //帐户名称
var $balance;//帐户余额
// 本方法生成某用户的帐户余额表
function add_item ($name, $date) {
$query = "select account.code as code,account.name as name,currency.
name as currency,money_open as balance from
account,currency where date_open<='".$date."'and account.
currency=currency.code and user='".$name."' order by
account.currency,date_open,account.code";
$res = mysql_query($query);
$currency_sum=0;
$row = @mysql_fetch_array($res);
$currency_pre=$row['currency'];
$this->currency[1] = $row['currency'];
$this->name[1] = '';
$this->balance[1] = '';
$i=1;
while ($row)
{$i++;
if ($row['currency']<>$currency_pre)
{$this->currency[$i] = '合计'.$currency_pre;
$this->name[$i] = '';
$this->balance[$i] = $currency_sum;
$currency_sum=0;
$i++;
$this->currency[$i] = $row['currency'];
$this->name[$i] = '';
$this->balance[$i] = '';
$i++;}
$this->name[$i] = $row['name'];
$query = "select money,balance,in_ex_type from in_ex_condition
where date>'".$date."' and user='".$name."' and
account=".$row['code']." order by date,code";
$res1 = mysql_query($query);
$row1 = @mysql_fetch_array($res1);
if (!$row1) $this->balance[$i] = $row['balance'];
else {
$query = "select type from in_ex_type where code=".$row1['in_ex_type'];
$res2 = mysql_query($query);
$row2 = @mysql_fetch_array($res2);
if ($row2['type']==0) $this->balance[$i] = $row1['balance']-$row1['money'];
else $this->balance[$i] = $row1['balance']+$row1['money'];
}
$currency_pre=$row['currency'];
$currency_sum+=$this->balance[$i];
$row = @mysql_fetch_array($res);
}
$i++;
$this->currency[$i] = '合计'.$currency_pre;
$this->name[$i] = '';
$this->balance[$i] = $currency_sum;
return $i;
}
}
?>
<HTML>
<TITLE> 网上理财:帐户余额表 </TITLE>
<BODY>
<P ALIGN=CENTER><FONT FACE="隶书" SIZE="7" COLOR="#0000FF">
网上理财</FONT><BR>
<P ALIGN=LEFT>
<FONT FACE="宋体" SIZE="3" COLOR="#0000FF"><A HREF="index.php"
STYLE="Text-Decoration:none">首页</A>>><A HREF="report_01.php"
STYLE="Text-Decoration:none">帐户余额表</A>
<P ALIGN=CENTER><FONT FACE="隶书" SIZE="6" COLOR="#0000FF">
帐户余额表</FONT><BR>
<FORM NAME="report_1" ACTION="report_1.php" METHOD="POST">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR>
<TD BGCOLOR="#FFFFFF" width=700>
<Font Face=宋体 Size=2 Color="#0000FF" >截止日期<INPUT TYPE=TEXT
NAME="date" SIZE="10" MAXLENGTH="10" value=<?php
if (!$date)
{$today=getdate();
$date=sprintf ("%04s-%02s-%02s",$today['year'],$today['mon'],$today['mday']);}
echo $date
?>></FONT>
</TD><TD BGCOLOR="#FFFFFF" width=100>
<INPUT TYPE=SUBMIT VALUE= 刷新 >
</TD></TR>
</TABLE>
</FORM><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" align=center>
<TR>
<TD BGCOLOR="#FFFFFF" ALIGN="left" VALIGN="MIDDLE" width=200>
<Font Face=宋体 Size=4 Color="#0000FF" >
币种</FONT>
</TD><TD BGCOLOR="#FFFFFF" ALIGN="left" width=300>
<Font Face=宋体 Size=4 Color="#0000FF" >
帐户</FONT>
</TD><TD BGCOLOR="#FFFFFF" ALIGN="left" width=300>
<Font Face=宋体 Size=4 Color="#0000FF" >
余额</FONT>
</TD></TR>
<?php
$report_1= new report_1;
$k=$report_1->add_item($cookie_user,$date);
if (!$limit) $limit=0;
$i=1;
while ($i<=15 and ($report_1->balance[$limit+$i] or
$report_1->currency[$limit+$i] or $report_1->name[$limit+$i]))
{echo "<TR>";
echo "<TD BGCOLOR='#FFFFFF' ALIGN=left>";
echo "<Font Face=宋体 Size=3 Color='#0000FF' >";
echo $report_1->currency[$limit+$i];
echo "</FONT>";
echo "</TD><TD BGCOLOR='#FFFFFF' ALIGN=left>";
echo "<Font Face=宋体 Size=2 Color='#0000FF' >";
echo $report_1->name[$limit+$i];
echo "</FONT>";
echo "</TD><TD BGCOLOR='#FFFFFF' ALIGN=right>";
echo "<Font Face=宋体 Size=2 Color='#0000FF' >";
if ($report_1->balance[$limit+$i])
printf ("%.2f",$report_1->balance[$limit+$i]);
echo "</FONT>";
echo "</TD></TR>";
$i++;}
echo "</TABLE>";
echo "<P ALIGN=RIGHT>";
$total=floor(($k-1)/15)*15;
$limit_pre=$limit-15;
$limit_next=$limit+15;
echo "<Font Face=宋体 Size=3 Color='#0000FF' >";
echo "第";
echo $limit/15+1;
echo "页 共";
echo $total/15+1;
echo "页 ";
if ($limit!=0)
echo "<A HREF='report_1.php?limit=0&date='".$date."
STYLE='Text-Decoration:none'>";
echo "首页 ";
if ($limit!=0)
echo "</A>";
if ($limit<$total)
echo "<A HREF='report_1.php?limit=".$total."&date=".$date."
' STYLE='Text-Decoration:none'>";
echo "尾页 ";
if ($limit!=$total)
echo "</A>";
if ($limit_pre>=0)
echo "<A HREF='report_1.php?limit=".$limit_pre."&date=".$date."
' STYLE='Text-Decoration:none'>";
echo "前页 ";
if ($limit_pre>=0) echo "</A>";
if ($limit_next<=$total)
echo "<A HREF='report_1.php?limit=".$limit_next."&date=".$date."
' STYLE='Text-Decoration:none'>";
echo "后页 ";
if ($limit_next<=$total)
echo "</A>";
echo "</FONT>";
?>
</BODY>
</HTML>
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:一个网上理财站点的设计(七)
下一篇:一个网上理财站点的设计(九)
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】
更多相关文章
|
|