登录模块验证程序根据数据库中已有的注册信息,对客户端发送过来的Email和密码进行验证。判断该Email地址及相应的密码在数据库中是否存在,进而可进行购买图书等操作。输入信息,点击“登录”按钮将执行的部分程序代码如下: http://www.paper51.com
private void btnLogin_Click(object sender,System.EventArgs e) copyright paper51.com { http://www.paper51.com intiRet = CustomerSystem.Login(Email, Password); http://www.paper51.com if((Email=="huangjun999@126.com")&&(Password=="admin")) 内容来自www.paper51.com
{ copyright paper51.com Session["UserName"]="huangjun999@126.com";//通过session验证管理员 copyright paper51.com Response.Redirect("~/admin/Default.aspx"); //进入管理员页面 paper51.com } http://www.paper51.com else http://www.paper51.com { paper51.com if(iRet > 0) 内容来自论文无忧网 www.paper51.com FormsAuthentication.RedirectFromLoginPage(iRet.ToString(),false);//重定向 else http://www.paper51.com { copyright paper51.com lblMessage.Visible= true; http://www.paper51.com lblMessage.Text= LOGIN_FAIL_MESSAGE; copyright paper51.com } paper51.com } paper51.com 如果Email为"huangjun999@126.com"并且Password为"admin",就进入后台管理员页面,其它用户成功登录后则进入前台图书销售页面。 copyright paper51.com 4.1.2 图书浏览 内容来自论文无忧网 www.paper51.com 图书浏览使用2种方式实现:分类浏览和热门书推荐。页面设计中,两种方式都使用了ASP.NET中的DataList控件来绑定数据,以列表方式显示。因为datalist自定义模块比datagrid更能够显示丰富多变的数据列表。 内容来自www.paper51.com 分类浏览和热门书推荐的实现都差不多,唯一的差异就是热门书推荐部分只显示销售量前4的图书。 copyright paper51.com
分类浏览图书页面的执行结果如图4-3所示。 内容来自www.paper51.com 当用户点击相关类别链接时,就可以实现分类浏览。这些链接包含查询字符串,在Web服务器中通过解析这些字符串来确定用户所点击的链接。当点击“艺术”链接时,页面上半部分显示热门书推荐,下半部分显示全部图书列表,显示结果如图4-4所示。 http://www.paper51.com
内容来自www.paper51.com 图4-3 分类浏览页面 内容来自www.paper51.com paper51.com 图4-4 分类浏览显示结果 http://www.paper51.com 在分类浏览页面Category.aspx的实现过程中,“收藏夹”按钮只有在用户登录的情况下才显示,在DataList控件里ItemCreate事件的相应函数中添加了相应的代码进行判断。其后台的部分代码如下: paper51.com private voiddlBook_ItemCreated(object sender,System.Web.UI.WebControls.DataListItemEventArgs e) paper51.com
{ //DataList.ItemCreated ,当在 DataList 控件中创建项时在服务器上发生。 内容来自www.paper51.com ImageButtonib = e.Item.FindControl("ibFavorite") as ImageButton; paper51.com
if(ib != null) http://www.paper51.com ib.Visible= ucHeader.IsLogin; paper51.com } 内容来自www.paper51.com //dlBook_ItemCommand,当单击 DataList 控件中的任一按钮时发生 http://www.paper51.com private voiddlBook_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgse) //添加图书到收藏夹或购物车 内容来自论文无忧网 www.paper51.com { http://www.paper51.com if(e.CommandName == "AddFavorite") 内容来自论文无忧网 www.paper51.com { paper51.com intiItemId = Convert.ToInt32(e.CommandArgument); http://www.paper51.com intiCustomerId = Convert.ToInt32(User.Identity.Name); http://www.paper51.com Common.Favoritef = new Common.Favorite(iItemId, iCustomerId); http://www.paper51.com if(FavoriteSystem.AddFavorite(f) > 0) paper51.com
Response.Redirect("~/Favorite.aspx"); paper51.com
else copyright paper51.com Response.Write(ADD_FAVORITE_FAIL); 内容来自www.paper51.com } paper51.com elseif (e.CommandName == "AddCart") 内容来自论文无忧网 www.paper51.com { http://www.paper51.com intiItemId = Convert.ToInt32(e.CommandArgument); copyright paper51.com BookCart.SetItem(iItemId); 内容来自论文无忧网 www.paper51.com Response.Redirect("~/ShoppingCart.aspx"); copyright paper51.com } 内容来自论文无忧网 www.paper51.com } copyright paper51.com 4.1.3 图书显示 copyright paper51.com 显示图书详细信息,书名、作者、价格、出版商、ISBN等信息,通过DataList控件来实现数据绑定。同时提供“购物车”和“收藏夹”链接,用于将图书加入购物车或收藏夹。 内容来自www.paper51.com 点击图书封面图片,如“莲花”,会显示图书相关信息,如图4-5所示。 paper51.com copyright paper51.com 图4-5 图书详细信息显示页面 内容来自www.paper51.com 如果喜欢该本书,可以通过点击“购物车”或“收藏夹”链接,将当前图书加入购物车或收藏夹。 copyright paper51.com
4.1.4 图书搜索 内容来自www.paper51.com 用户点击“查找”按钮,可以对图书进行快速搜索,该功能也是通过一个DataList控件来实现的。图书搜索方式使用<asp:DropDownList>控件标识定义,分别为书名、作者、ISBN和关键词,然后由用户输入搜索条件,程序便执行数据库中的存储工程在数据表中查找数据并显示出来。如果方式选择作者,输入条件为“安妮”,搜索结果如图3-6所示。 copyright paper51.com 内容来自www.paper51.com 图4-6 图书搜索结果显示 内容来自www.paper51.com 4.1.5 收藏夹 内容来自论文无忧网 www.paper51.com
用户收藏夹存储书名、价格等信息。该页面的实现还是通过使用DataList控件来显示用户收藏的图书。收藏夹页面执行结果如图3-7所示。 内容来自www.paper51.com 图4-7 收藏夹页面 copyright paper51.com
用户点击“收藏夹”链接,可以先将自己感兴趣的图书放入图书收藏夹。如果打算购买再从收藏夹中加入购物车,同时也提供了“删除”按钮,如果不喜欢收藏夹的部分图书,可以点击“删除”按钮删除收藏的图书。 copyright paper51.com
4.1.6 购物车 内容来自论文无忧网 www.paper51.com 购物车是本系统的重要组成部分,这部分的设计是重点和难点。在本系统了主要实现了两个基本功能。用户添加图书,即用户将打算购买的图书添加到购物车中;和用户管理自己的订单,即用户可以随时查看购物车,更新购物车中的图书数量,或者删除不想购买的图书。 paper51.com 购物车利用DataGrid控件来显示用户所选择的图书书名、单价、数量以及总价格等信息。在DataGrid中主要使用了模板列TemplateColumn进行显示和处理,模板列包括数量Quantity、书名Title、单价UnitPrice和小计Price,其中用户只可对图书数量进行修改。 paper51.com 购物车的内容通过Session对象来保存,因为会话状态Session可以在会话期间为用户提供单独的数据,不同会话之间的信息是不共享的。其实现的代码如下: paper51.com publicCart BookCart //通过Session对象保存购物车内容 paper51.com { paper51.com get http://www.paper51.com { 内容来自论文无忧网 www.paper51.com if(Session["Cart"] == null) paper51.com Session["Cart"]= new Cart(); paper51.com return(Cart)Session["Cart"]; 内容来自www.paper51.com } 内容来自www.paper51.com
set 内容来自论文无忧网 www.paper51.com { 内容来自论文无忧网 www.paper51.com Session["Cart"]= value; 内容来自论文无忧网 www.paper51.com } copyright paper51.com } copyright paper51.com
程序中使用Page_Load()调用BindGrid()函数将购物车中的图书信息绑定到DataGrid中。 paper51.com BindGrid()实现数据绑定,通过使用大小可按需动态增加的数组ArrayList来记录图书项的ID和购买数量,然后计算购买图书的总价格,其代码如下: http://www.paper51.com privatevoid BindGrid() 内容来自www.paper51.com { 内容来自www.paper51.com
decimaltotalprice = 0; copyright paper51.com
BookDatabookdata = new BookData(); paper51.com bookdata.Tables["Books"].Columns.Add("Quantity",typeof(System.Int32)); 内容来自www.paper51.com
bookdata.Tables["Books"].Columns.Add("Price",typeof(System.Decimal)); copyright paper51.com for(int i = 0;i < BookCart.Count;i++) //通过数组来实现计算总价格 copyright paper51.com { 内容来自www.paper51.com intiItemId = BookCart.GetItemId(i); copyright paper51.com intiQuantity = BookCart.GetQuantity(i); 内容来自论文无忧网 www.paper51.com
BookDatatempdata = BookSystem.SearchBooks(BookSearchType.PKId, iItemId.ToString()); http://www.paper51.com bookdata.Tables["Books"].ImportRow(tempdata.Tables["Books"].Rows[0]); 内容来自论文无忧网 www.paper51.com bookdata.Tables["Books"].Rows[i]["Quantity"]= iQuantity; http://www.paper51.com decimalunitprice = Convert.ToDecimal(tempdata.Tables["Books"].Rows[0]["UnitPrice"]); 内容来自www.paper51.com bookdata.Tables["Books"].Rows[i]["Price"]= iQuantity * unitprice; //每项书的总价钱(小计=数量×单价) 内容来自www.paper51.com
totalprice+= iQuantity * unitprice; //总价格 copyright paper51.com } 内容来自论文无忧网 www.paper51.com bookdata.AcceptChanges(); 内容来自www.paper51.com dgCart.DataSource= bookdata; copyright paper51.com dgCart.DataBind(); paper51.com lblTotal.Text= string.Format("总价:{0}",totalprice); 内容来自论文无忧网 www.paper51.com
} 内容来自论文无忧网 www.paper51.com 其中BooCart是购物车对象Cart的一个实例,Cart类保存了多组图书项ID和购物数量的值,并且根据应用的需要实现了GetItemID、GetQuantity、SetItem、Clear等方法。部分代码如下: paper51.com
privateArrayList _itemid_arr; copyright paper51.com privateArrayList _quantity_arr; 内容来自www.paper51.com publicint Count 内容来自论文无忧网 www.paper51.com { paper51.com get{return _itemid_arr.Count;} paper51.com } 内容来自论文无忧网 www.paper51.com publicint GetItemId(int index) //获取图书项ID copyright paper51.com
{ 内容来自论文无忧网 www.paper51.com if(index < Count) copyright paper51.com
return(int)_itemid_arr[index]; paper51.com else http://www.paper51.com return-1; 内容来自论文无忧网 www.paper51.com } 内容来自www.paper51.com publicint GetQuantity(int index) //获取各类图书的数量 内容来自www.paper51.com { 内容来自www.paper51.com if(index < Count) 内容来自www.paper51.com
return(int)_quantity_arr[index]; copyright paper51.com
else 内容来自www.paper51.com return-1; 内容来自论文无忧网 www.paper51.com } copyright paper51.com publicvoid SetItem(int iItemId) //购买图书,系统自动设置数量为1本 http://www.paper51.com { copyright paper51.com intindex = _itemid_arr.IndexOf(iItemId); 内容来自论文无忧网 www.paper51.com if(index != -1) 内容来自www.paper51.com { 内容来自论文无忧网 www.paper51.com _quantity_arr[index]= (int)_quantity_arr[index] + 1; copyright paper51.com } 内容来自www.paper51.com else 内容来自www.paper51.com { paper51.com _itemid_arr.Add(iItemId); 内容来自www.paper51.com
_quantity_arr.Add(1); 内容来自www.paper51.com } copyright paper51.com } http://www.paper51.com publicvoid SetItem(int iItemId, int iQuantity) //(重载函数)购买图书,用户设置数量 内容来自论文无忧网 www.paper51.com { 内容来自www.paper51.com
intindex = _itemid_arr.IndexOf(iItemId); copyright paper51.com if(index != -1) paper51.com { http://www.paper51.com if(iQuantity > 0) paper51.com _quantity_arr[index]= iQuantity; 内容来自论文无忧网 www.paper51.com else 内容来自论文无忧网 www.paper51.com { paper51.com _itemid_arr.RemoveAt(index); http://www.paper51.com
_quantity_arr.RemoveAt(index); paper51.com } http://www.paper51.com } http://www.paper51.com
else 内容来自论文无忧网 www.paper51.com { http://www.paper51.com _itemid_arr.Add(iItemId); http://www.paper51.com
_quantity_arr.Add(iQuantity); copyright paper51.com } http://www.paper51.com } http://www.paper51.com
购物车执行结果如图4-8所示: paper51.com 图4-8 购物车页面 copyright paper51.com 如果用户想购买几本同样的图书,可以在购买数量文本框中输入想要购买的本数,然后单击“更新购物车”来更新购买数量,其实现代码如下: copyright paper51.com private voidlbUpdate_Click(object sender, System.EventArgs e) //更新购物车 copyright paper51.com { 内容来自论文无忧网 www.paper51.com foreach(DataGridItem item in dgCart.Items) 内容来自www.paper51.com
{ 内容来自www.paper51.com intiQuantity = Convert.ToInt32(((TextBox)item.FindControl("tbQuantity")).Text); http://www.paper51.com intiItemId =Convert.ToInt32(((HtmlInputHidden)item.FindControl("hidItemId")).Value); 内容来自www.paper51.com BookCart.SetItem(iItemId,iQuantity); 内容来自www.paper51.com } http://www.paper51.com
BindGrid(); 内容来自www.paper51.com
} 内容来自论文无忧网 www.paper51.com |