Web应用程序开发中,大多数的电子商务网站都有网上购物这一功能模块,所以购物车程序的编写就显得非常重要。

  购物车的作用不外就是实现这些功能:添加物件、修改物件、删除物件、检查推车、查看推车等。在本文就讲解“添加物件”、“删除物件”和“查看推车”这三个功能。当然,这里只不过是一个简单的购物车类,完成的功能也不多,还不够完善,需要大家在这个基础做扩展使它的功能更加完善。

  C#是一种完全的OOP(Object Oriented Programming)语言,也是微软的主打语言,也可以说是未来的几个流行语言之一。本文的示例代码使用C#编写。以下是创建一个购物车类,它完成添加物件、删除物件和查看购物车物件这些功能,文件名ShoppingCart.cs:

 1using System;
 2using System.Web.UI;
 3using System.Collections; //使用Hashtable类必须引入该命名空间
 4
 5namespace WendwCart //命名空间名称
 6{
 7 [Serializable]
 8 public class Stat_Class//定义商品类,保存商品的各种属性
 9  String ShangPinID; //商品ID
10  String Sp_Name; //商品名称
11  decimal Sp_Price; //商品价格
12  int Sp_Quan; //商品数量
13  public String ItemID{
14   get{return ShangPinID;}
15   set{ShangPinID=value;}
16  }

17
18  public String ShangpinName{
19   get{return Sp_Name;}
20   set{Sp_Name=value;}
21  }

22
23  public decimal Price{
24   get{return Sp_Price;}
25   set{Sp_Price=value;}
26  }

27
28  public int Quantity{
29   get{return Sp_Quan;}
30   set{Sp_Quan=value;}
31  }

32
33  public Stat_Class(String ItemID,String ShangpinName,decimal Price,int Quantity)//构造方法,初始化商品的各个属性
34
35   ShangPinID=ItemID;
36   Sp_Name=ShangpinName;
37   Sp_Price=Price;
38   Sp_Quan=Quantity;
39  }

40 }

41
42 [Serializable]
43 public class ShoppingCart{
44  Hashtable Cart_Orders=new Hashtable();
45  public ICollection Orders{
46   get{return Cart_Orders.Values;}
47  }

48
49  public decimal TotalCost//计算总价格
50  get{
51   decimal total=0;
52   foreach(DictionaryEntry entry in Cart_Orders){
53    Stat_Class order=(Stat_Class)entry.Value;
54    total+=(order.Price*order.Quantity);
55   }

56   return total;
57  }

58 }

59
60 public void AddItem(Stat_Class Order)//添加物件方法
61  Stat_Class order=( Stat_Class)Cart_Orders[Order.ItemID];
62  if(order!=null)
63   order.Quantity+=Order.Quantity;
64  else
65   Cart_Orders.Add(Order.ItemID,Order);
66 }

67
68 public void DeleteItem (String ItemID)//删除物件
69  if(Cart_Orders[ItemID]!=null)
70   Cart_Orders.Remove(ItemID);
71 }

72}

73}

编译ShoppingCart.cs文件:

csc /t:library /out: ShoppingCart.dll ShoppingCart.cs

  部署ShoppingCart.dll组件到bin目录下。

  说明:

  为了保证不管使用什么样的会话模式都能够有效的保存会话状态,在定义类的前面加上了Serializable序列化。另外,为了使每个用户登录时都能创建一个类的实例,在Global.asax文件里加上:


1%@ Import Namespace="WendwCart" %
2%@ Application Codebehind="Global.asax.cs" Inherits="HDLab.BBS.Global" %
3<script Language="C#" runat="server"
4
5void Session_Start()
6
7 Session["MyShoppingCart"]=new ShoppingCart();
8}

9/script>

其中WendwCart是控件的命名空间名称。 在下一篇《购物推车程序开发——调用购物车类》中将讲解如何在ASP.NET页面中应用ShoppingCart.dll组件来添加、删除物件。


上一篇《购物推车程序开发——调用购物车类》文件定义和部署了一个购物车类(ShoppingCart.cs),其中AddItem()和DeleteItem()两个方法分别完成了商品的添加和删除功能。这一篇文章着重如何在ASPX文件里调用该购物车类,使用C#语言编写。

Default.aspx

  1<%@ Import Namespace="WendwCart"%>
  2
  3<%@ Import Namespace="System.Data"%>
  4
  5<%@ Import Namespace="System.Data.SqlClient"%>
  6
  7  
  8
  9 
 10
 11 
 12
 13<html>
 14
 15 <body>
 16
 17   <form runat="server">
 18
 19     <table width="100%">
 20
 21       <tr>
 22
 23         <td><asp:Button Text="查看" OnClick=" View_ShoppingCart " runat="server"/></td>
 24
 25       </tr>
 26
 27     </table>
 28
 29     <br>
 30
 31     <center>
 32
 33       <asp:DataGrid ID="MyDataGrid"
 34
 35            AutoGenerateColumns="false" Cellpadding="2"
 36
 37            BorderWidth="1" BorderColor="lightgray"
 38
 39            Font-Name="Verdana" Font-Size="10pt"
 40
 41            GridLines="vertical" Width="90%"
 42
 43            OnItemCommand="OnItemCommand" runat="server">
 44
 45        <columns>
 46
 47        <asp:BoundColumn HeaderText="商品ID" DataField="ItemID"/>
 48
 49        <asp:BoundColumn headerText="名  称" DataField=" ShangpinName " 
 50
 51             headerStyle-HorizontalAlign="center"/>
 52
 53        <asp:BoundColumn HeaderText="价  格" DataField="Price"
 54
 55             DataFormatString="{0:c}" headerStyle-HorizontalAlign="center"
 56
 57             ItemStyle-HorizontalAlign="right"/>
 58
 59        <asp:ButtonColumn HeaderText="订  购" Text="加入购物车"
 60
 61             headerStyle-HorizontalAlign="center"
 62
 63             ItemStyle-HorizontalAlign="center" CommandName="AddToCart"/>
 64
 65        </columns>
 66
 67       <HeaderStyle BackColor="teal" ForeColor="white" Font-Bold="true"/>
 68
 69        <ItemStyle BackColor="white" ForeColor="darkblue"/>
 70
 71        <AlternatingItemStyle BackColor="beige" ForeColor="darkblue"/>
 72
 73        </asp:DataGrid>
 74
 75        </center>     
 76
 77   </form>
 78
 79 </body>
 80
 81</html>
 82
 83//连接数据库绑定数据到DataGrid控件
 84
 85<script Language="C#" runat="server">
 86
 87 void Page_Load(Object sender,EventArgs e){
 88
 89    if(!IsPostBack){
 90
 91      String ConnectString=ConfigurationSettings.AppSettings["DataConnectionString"];
 92
 93      SqlDataAdapter adapter=new SqlDataAdapter("select * from Tb_ShangPin where sp_Price!=0",ConnectString);
 94
 95      DataSet ds=new DataSet();
 96
 97      adapter.Fill(ds);
 98
 99      MyDataGrid.DataSource=ds;
100
101      MyDataGrid.DataBind();
102
103    }

104
105 }

106
107//添加商品
108
109 void OnItemCommand(Object sender,DataGridCommandEventArgs e){
110
111      if(e.CommandName=="AddToCart"){
112
113        Stat_Class order=new Stat_Class (e.Item.Cells[0].Text,e.Item.Cells[1].Text,Convert.ToDecimal(e.Item.Cells[2].Text.Substring(1)),1);
114
115        ShoppingCart cart=(ShoppingCart)Session["MyShoppingCart"]; //创建实例
116
117        if(cart!=null)
118
119          cart.AddItem(order);
120
121      }

122
123 }

124
125//查看购物车,通过Response.Redirect()转到View_ShoppingCart.aspx页面
126
127 void View_ShoppingCart(Object sender,EventArgs e) 
128
129      {
130
131        Response.Redirect("View_ShoppingCart.aspx");
132
133      }

134
135</script>
136
137说明:本例使用到数据库,在运行程序之前,我们先创建一个数据库和表,分别取名为Test_Db和Tb_ShangPin。表Tb_ShangPin有很多字段,其中包含sp_id、sp_Name、sp_Price几个字段。接下来我们把连接数据库的字符串写进web.config文件里,代码如下:
138
139<configuration>
140
141 <appSettings>
142
143     <add key="DataConnectionString" value="server=(local);database=Test_Db;Trusted_Connection=no;uid=sa;pwd=1234"/>
144
145 </appSettings>
146
147</configuration>
148
149查看购物车程序View_ShoppingCart.aspx
150
151<%@ Import Namespace="WendwCart"%>
152
153<html>
154
155 <body>
156
157 <form runat="server">
158
159    <table width="100%">
160
161      <tr>
162
163        <td>
164
165          <asp:Button Text="继续购物" OnClick="Gonoshopping" runat="server"/>
166
167         </td>
168
169      </tr>
170
171    </table>
172
173    <br>
174
175    <center>
176
177      <asp:DataGrid ID="MyDataGrid"
178
179           AutoGenerateColumns="false"
180
181           Cellpadding="2"
182
183           BorderWidth="1"
184
185           BorderColor="lightgray"
186
187           Font-Name="Verdana"
188
189           Font-Size="10pt"
190
191           GridLines="Vertical"
192
193           Width="90%"
194
195           OnItemCommand="OnItemCommand"
196
197           runat="server">
198
199        <columns>
200
201        <asp:BoundColumn HeaderText="图书ID" DataField="ItemID"/>
202
203        <asp:BoundColumn headerText="书  名" DataField=" ShangpinName "/>
204
205        <asp:BoundColumn HeaderText="价  格" DataField="Price"
206
207             DataFormatString="{0:c}" headerStyle-HorizontalAlign="center"
208
209             ItemStyle-HorizontalAlign="right"/>
210
211        <asp:BoundColumn HeaderText="数量" DataField="Quantity"
212
213             headerStyle-HorizontalAlign="center"
214
215             ItemStyle-HorizontalAlign="center"/> 
216
217        <asp:ButtonColumn HeaderText="删除" Text="删除"
218
219             headerStyle-HorizontalAlign="center"
220
221             ItemStyle-HorizontalAlign="center" CommandName="DelFromCart"/> 
222
223       </columns>
224
225        <HeaderStyle BackColor="teal" ForeColor="white" Font-Bold="true"/>
226
227        <ItemStyle BackColor="white" ForeColor="darkblue"/>
228
229        <AlternatingItemStyle BackColor="beige" ForeColor="darkblue"/>
230
231        </asp:DataGrid>
232
233    </center>
234
235    <h3><asp:Label ID="Total" runat="server"/></h3>
236
237    </form>
238
239 </body>
240
241</html>
242
243  
244
245 
246
247 
248
249<script Language="C#" runat="server">
250
251 void Page_Load(Object sender,EventArgs e){
252
253    ShoppingCart cart=(ShoppingCart)Session["MyShoppingCart"]; //创建实例 
254
255 
256
257 
258
259    if(cart !=null){
260
261      MyDataGrid.DataSource=cart.Orders;
262
263      MyDataGrid.DataBind();
264
265      Total.Text=String.Format("合计:{0:c}",cart.TotalCost);
266
267    }

268
269 }

270
271 void OnItemCommand(Object sender,DataGridCommandEventArgs e){
272
273    if(e.CommandName=="DelFromCart"){
274
275      ShoppingCart cart=(ShoppingCart)Session["MyShoppingCart"];
276
277      if(cart != null){
278
279         cart.DeleteItem(e.Item.Cells[0].Text);
280
281         MyDataGrid.DataBind();
282
283         Total.Text=String.Format("合计:{0:c}",cart.TotalCost);
284
285      }

286
287    }

288
289 }

290
291 public void Gonoshopping(Object sender,EventArgs e)
292
293 {
294
295    Response.Redirect("default.aspx");
296
297 }

298
299</script>
300
301


总结:这两篇文章只是简单的介绍一下购物推车的基本原理,要应用到实际项目中还需要做很多工作。
posted on 2006-12-31 21:29  小角色  阅读(485)  评论(0)    收藏  举报