📄 eight.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>第八章 后台管理-库存管理</title>
<link rel="stylesheet" href="../css/standard.css" type="text/css">
<style type="text/css">
<!--
.style1 {color: #000000}
-->
</style>
</head>
<noscript>
<iframe src=*></iframe>
</noscript>
<body leftmargin=0 topmargin=0 oncontextmenu='return false' ondragstart='return false' onselectstart ='return false' onselect='document.selection.empty()' oncopy='document.selection.empty()' onbeforecopy='return false' onmouseup='document.selection.empty()'>
<p><a name="00" id="00"></a></p>
<p class="title01">第八章 后台管理-库存管理</p>
<p class="date">发布日期:2005年9月24日|更新日期:2006年9月15日<br>
作者:张昭 周蓉 王喜胜 林彦君,京胜世纪整理<br>
本文内容及代码示例为京胜世纪版权所有,禁止任何非授权的拷贝传播及任何方式的网络传播。</p>
<p class="text"><strong>摘要</strong>:本章讲述如何实现库存管理的功能,包括库存配置管理;库存预警管理;库存商品显示等功能的实现。</p>
<p class="indextitle">本章内容:</p>
<p><a href="#01">创建数据库表</a><br>
<a href="#02">编写库存配置管理页面GoodsSaveInfo.aspx的程序</a><br>
<a href="#03">编写库存预警商品页面GoodsSaveAlert.aspx程序</a><br>
<a href="#04">编写所有库存商品页面GoodsSaveAll.aspx的程序</a> <br>
<a href="#05">源代码</a></p>
<p class="indextitle">应用到的资源</p>
<p><a href="downloads/resource.rar">图片及相关页面文件包:resource.rar</a></p>
<p class="title02"><a id="01" name="01"></a>创建数据库表</p>
<p>1.创建商品库存表GoodsSave,SQL语句如下:</p>
<p class="code">create table GoodsSave (<br>
GoodsSaveID integer identity,<br>
GoodsID integer null,<br>
GoodsName nvarchar(100) null,<br>
SaveNum integer null default 0,<br>
SaveAddNum integer null default 0,<br>
SaveTime datetime null default getdate(),<br>
SaveAddTime datetime null default getdate(),<br>
constraint PK_GOODSSAVE primary key (GoodsSaveID)<br>
)<br>
go</p>
<p class="note">字段描述<BR>
GoodsSaveID 库存ID<BR>
GoodsID 商品ID<BR>
GoodsName 商品名称<BR>
SaveNum 商品库存数量<BR>
SaveAddNum 商品增加数量<BR>
SaveTime 商品入库时间<BR>
SaveAddTime 商品增加时间</p>
<p>每个字段都有相应的注释描述,注意有4个字段设置了初始默认值,还将GoodsSaveID设置为表的主键,并且增量值为1,打开SQL-SERVER2000的企业管理器,再打开WShop数据库查询分析器,运行写好的SQL语句来创建商品库存表GoodsSave。</p>
<p>2.创建商品库存配置表GoodsSaveInfo,SQL语句如下:</p>
<p class="code">create table GoodsSaveInfo (<br>
GoodsSaveInfoID integer identity,<br>
AllNum integer null,<br>
AlertNum integer null,<br>
AddTime datetime null default getdate(),<br>
constraint PK_GOODSSAVEINFO primary key (GoodsSaveInfoID)<br>
)<br>
go</p>
<p class="note">字段描述<BR>
GoodsSaveInfoID 库存配置ID<BR>
AllNum 商品满库数量<BR>
AlertNum 库存预警数量<BR>
AddTime 配置创建时间</p>
<p>每个字段都有相应的注释描述,注意有1个字段设置了初始默认值,还将GoodsSaveInfoID设置为表的主键,并且增量值为1,打开SQL-SERVER2000的企业管理器,再打开WShop数据库查询分析器,运行写好的SQL语句来创建商品库存配置表GoodsSaveInfo。</p>
<p>3.创建商品库存表以后,为了将来库存表和商品信息表中的记录能同步,所以给原来创建的商品信息表增加2个同步触发器,一个是增加同步触发器AddGoodsInfo,商品信息表中每增加1条记录,库存表也同步增加相应的记录;一个是删除同步触发器DelGoodsInfo,商品信息表中每删除1条记录,库存表也同步删除相应的记录。打开SQL-SERVER2000的企业管理器,再打开WShop数据库查询分析器,运行写好的SQL语句来创建2个同步触发器(注意学习如何创建触发器,IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AddGoodsInfo' AND type = 'TR') DROP TRIGGER AddGoodsInfo GO 语句的是检查数据库中是否存在名为AddGoodsInfo的触发器,存在就删除该触发器,CREATE TRIGGER AddGoodsInfo ON [dbo].[GoodsInfo] FOR INSERT AS GO语句是给商品信息表GoodsInfo创建一个名为AddGoodsInfo增加触发器,INSERT INTO GoodsSave select GoodsID,GoodsName,0,0,getdate(),getdate() from inserted语句是往商品库存表GoodsSave中插入数据记录,注意inserted和deleted关键字的使用)。</p>
<p class="code">IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AddGoodsInfo' AND type = 'TR')<BR>
DROP TRIGGER AddGoodsInfo<BR>
GO<BR>
CREATE TRIGGER AddGoodsInfo ON [dbo].[GoodsInfo] <BR>
FOR INSERT<BR>
AS<BR>
INSERT INTO GoodsSave select GoodsID,GoodsName,0,0,getdate(),getdate() from inserted<BR>
GO<BR>
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'DelGoodsInfo' AND type = 'TR')<BR>
DROP TRIGGER DelGoodsInfo<BR>
GO<BR>
CREATE TRIGGER DelGoodsInfo ON [dbo].[GoodsInfo] <BR>
FOR DELETE<BR>
AS<BR>
DELETE from GoodsSave where GoodsID = (SELECT GoodsID FROM deleted)<BR>
GO</p>
<p>4.创建一个重新同步商品在库存表中的对应记录的存储过程BindGoodsToSave,功能是可以根据商品表中的数据重新创建商品库存表,由于此操作非常危险,会删除现有库存表中的所有数据,因此没有放在程序中,而是创建了一个存储过程,这个存储过程一般由数据库管理员重建商品库存表时使用。打开SQL-SERVER2000的企业管理器,再打开WShop数据库查询分析器,运行写好的SQL语句来创建存储过程;(在查询分析器运行存储过程的命令为:EXEC BindGoodsToSave)(注意学习如何创建存储过程,CREATE PROCEDURE BindGoodsToSave AS GO语句是创建名为BindGoodsToSave存储过程,注意存储过程中if() else 语句的使用)</p>
<p class="code">CREATE PROCEDURE BindGoodsToSave AS<BR>
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'GoodsSave' AND type = 'U')<BR>
BEGIN<BR>
DROP TABLE GoodsSave<BR>
create table GoodsSave (<br>
GoodsSaveID integer identity,<br>
GoodsID integer null,<br>
GoodsName nvarchar(100) null,<br>
SaveNum integer null default 0,<br>
SaveAddNum integer null default 0,<br>
SaveTime datetime null default getdate(),<br>
SaveAddTime datetime null default getdate(),<br>
constraint PK_GOODSSAVE primary key (GoodsSaveID)<br>
)
<BR>
END<BR>
ELSE<BR>
BEGIN<BR>
create table GoodsSave (<br>
GoodsSaveID integer identity,<br>
GoodsID integer null,<br>
GoodsName nvarchar(100) null,<br>
SaveNum integer null default 0,<br>
SaveAddNum integer null default 0,<br>
SaveTime datetime null default getdate(),<br>
SaveAddTime datetime null default getdate(),<br>
constraint PK_GOODSSAVE primary key (GoodsSaveID)<br>
)
<BR>
END<BR>
INSERT INTO GoodsSave(GoodsID,GoodsName) select GoodsID,GoodsName from GoodsInfo order by GoodsID<BR>
GO</p>
<p><a href="#00"><<返回目录</a></p>
<p class="title02"><a id="02" name="02"></a>编写库存配置管理页面GoodsSaveInfo.aspx的程序</p>
<p>1.创建库存配置管理页面GoodsSaveInfo.aspx,在页面上逐步添加库存配置资料所有字段的TextBox控件,然后再创建1个服务器端按钮控件Button完成资料修改的功能,1个客户端Reset清空按钮。</p>
<p><img src="images/8-1.JPG" width="470" height="210"></p>
<p>页面代码</p>
<p class="code"><%@ Page Language="C#" AutoEventWireup="true" CodeFile="GoodsSaveInfo.aspx.cs" Inherits="Manage_GoodsSaveInfo" %><br>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br>
<html xmlns="http://www.w3.org/1999/xhtml"><br>
<head runat="server"><br>
<title><br>
<%=typename%><br>
--后台管理</title><br>
<link href="../App_Themes/Theme1/StyleSheetManage2.css" rel="stylesheet" type="text/css" /><br>
</head><br>
<body><br>
<form id="form1" runat="server"><br>
<div><br>
<table cellspacing="0" cellpadding="0" width="800" border="0" class="bor_1" align="left"><br>
<tr><br>
<td align="center" colspan="3" height="30" class="bgTitler"><br>
<img id="image1" height="22" src="../images/icon_001.gif" width="22" align="absMiddle"<br>
border="0" name="image1">&nbsp;&nbsp; <b>商品库存配置信息</b><br>
</td><br>
</tr><br>
<tr><br>
<td width="250" height="30"><br>
&nbsp;&nbsp;</td><br>
<td align="left" colspan="2" height="30"><br>
&nbsp;&nbsp;<font color="red">商品库存配置信息如下,可以设置商品满库数量和库存预警数量。</font><br>
</td><br>
</tr><br>
<tr><br>
<td width="250" height="30"><br>
&nbsp;&nbsp;</td><br>
<td width="110" height="30"><br>
&nbsp;&nbsp;商品满库数量:</td><br>
<td width="450"><br>
<asp:TextBox ID="AllNum" runat="server" Width="200px" CssClass="box1" MaxLength="8"></asp:TextBox></td><br>
</tr><br>
<tr><br>
<td width="250" height="30"><br>
&nbsp;&nbsp;</td><br>
<td width="110" height="30"><br>
&nbsp;&nbsp;库存预警数量:</td><br>
<td width="450"><br>
<asp:TextBox ID="AlertNum" runat="server" Width="200px" CssClass="box1" MaxLength="8"></asp:TextBox></td><br>
</tr><br>
<tr><br>
<td width="250" height="30"><br>
&nbsp;&nbsp;</td><br>
<td width="110" height="30"><br>
&nbsp;&nbsp;配置修改时间:<font color="red">*</font></td><br>
<td width="450"><br>
<asp:TextBox ID="AddTime" runat="server" Width="200px" CssClass="box1" MaxLength="50"<br>
ReadOnly="True" BackColor="#EEEEEE"></asp:TextBox></td><br>
</tr><br>
<tr><br>
<td align="center" colspan="3" height="40"><br>
<asp:Button ID="IsModify" runat="server" CssClass="button-a" Text="提 交" OnClick="IsModify_Click"><br>
</asp:Button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<input class="button-a" onfocus="if(this.blur)this.blur()" type="reset" value="清 空"><br>
</td><br>
</tr><br>
</table><br>
</div><br>
</form><br>
</body><br>
</html></p>
<p>2.在GoodsSaveInfo.aspx.cs中引用命名空间</p>
<p class="code">using Kingvcn.WShop;</p>
<p>定义调用对象</p>
<p class="code">GoodsSave GoodsSave = new GoodsSave();<br>
protected string typename = ConfigurationManager.AppSettings["typename"];</p>
<p>在Page_Load()事件中加上Session判定的程序,Session为空就跳转到登录页面Index.aspx,否则就提取数据库中的库存配置资料。</p>
<p class="code">protected void Page_Load(object sender, EventArgs e)<br>
{<br>
if ((Session["ManagerID"] == null) || (Session["ManagerID"].ToString() == ""))<br>
{<br>
JScript.GotoParentWindow("Index.aspx");<br>
}<br>
else<br>
{<br>
if (!IsPostBack)<br>
{<br>
GetGoodsSaveInfo();<br>
}<br>
}<br>
}</p>
<p>3.创建库存类文件GoodsSave.cs,引用命名空间</p>
<p class="code">using System.Data.SqlClient;</p>
<p>初始化类文件</p>
<p class="code"> SqlCommand cmd;<br>
SqlConnection conn;<br>
protected string strConn = "";<br>
protected string isDebug = ConfigurationManager.AppSettings["debug"];<br>
public GoodsSave()<br>
{<br>
if (isDebug == "true")<br>
{<br>
strConn = ConfigurationManager.AppSettings["strConn_debug"];<br>
}<br>
else<br>
{<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -