ShoppingCart

Posted fenqinearl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ShoppingCart相关的知识,希望对你有一定的参考价值。


数据库设计
表结构
[dbo].[AdminInfo] 

AdminID, AdminName, AdminPassword, RoleID

 [dbo].[BK_Car]

 ID, CarID, ISBN, BookName, Price, Num

 [dbo].[BookInfo]

 ISBN, BookName, Author, Price, InCount, OutCount, Intro, Sort, ImageAds 

[dbo].[Indent] 

IndentID, UserName, BookName, Price, Num, IndentTime, FaHuoWay, PayHuoWay, FaHuo 

[dbo].[UserInfo] 

UserID, UserName, UserPwd, Email
连接字符串:
<connectionStrings>
    <add name="connStr" connectionString="Data Source=WINDOWS-AU6K8R5\SQLEXPRESS;Initial Catalog=BookShopping;User ID=sa;Pwd=123456"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

Model层SqlHelper封装

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace ShoppingCartDBHelper
{
   public class SqlHelper
    {
       public static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
       public static DataTable GetDataTable(string sql,CommandType type,params SqlParameter[]pars)
       {
           using (SqlConnection conn = new SqlConnection(connStr))
           {
               using (SqlDataAdapter apter = new SqlDataAdapter(sql, conn))
               {
                   if (pars != null)
                   {
                       apter.SelectCommand.Parameters.AddRange(pars);
                   }
                   apter.SelectCommand.CommandType = type;
                   DataTable da = new DataTable();
                   apter.Fill(da);
                   return da;
               }
           }
       }
?
       public static int ExecuteNonquery(string sql, CommandType type, params SqlParameter[] pars)
       {
           using (SqlConnection conn = new SqlConnection(connStr))
           {
               using (SqlCommand cmd = new SqlCommand(sql, conn))
               {
                   if (pars != null)
                   {
                       cmd.Parameters.AddRange(pars);
                   }
                   cmd.CommandType = type;
                   conn.Open();
                   return cmd.ExecuteNonQuery();
               }
           }
       }
?
        public DataTable FillDataTable(string v)
        {
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = v;
                SqlDataAdapter ada = new SqlDataAdapter();
                ada.SelectCommand = cmd;
                ada.Fill(dt);
            }
            return dt;
        }
?
        public static DataSet GetDataSet(String sql)
        {
            SqlConnection conn=new SqlConnection(connStr);
            SqlDataAdapter adapter=new SqlDataAdapter(sql,connStr);
            DataSet ds=new DataSet();
            adapter.Fill(ds);
            return ds;
        }
    }
}

?
母版页设计(仿豆瓣)
?
<!DOCTYPE html>
?
<html>
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>豆瓣书城</title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
    <link href="CSS/MasterStyle.css" rel="stylesheet" />
</head>
<body>
    <form id="form1" runat="server">
        <div class="top">
            <span class="l">
                <a href="#" target="_blank">豆瓣</a> |&nbsp;
                    <a href="#" target="_blank">读书</a>&nbsp; |
                    <a href="#" target="_blank">电影</a>&nbsp;|
                    <a href="#" target="_blank">音乐</a>&nbsp; |
                    <a href="#" target="_blank">同城</a>&nbsp; |
                    <a href="#" target="_blank">小组</a>&nbsp; |
                    <a href="#">阅读</a>
                <a href="#" target="_blank">FM</a>&nbsp; |
                    <a href="#" target="_blank">时间</a>&nbsp; |
                    <a href="#">豆品</a>
                <a href="#">更多</a>
            </span>
            <span class="r">
                <a>下载豆瓣客户端</a>
                <a href="../Member/Login.aspx">登录</a><a href="">/注册</a>
            </span>
?
        </div>
        <div style="width: inherit; text-align: left; background-color: #F6F6F1; border-bottom: cadetblue;">
            <div id="search">
                <img src="Images/LOGO.png" />
           
                <div style="height: 50px; width: 600px; margin: 15px 400px auto 50px;float: right">
                    <div id="left">
                    <asp:TextBox ID="TextBox1" runat="server" CssClass="search">书名、作者、ISBN</asp:TextBox>
                    </div>
                    <div id="right">
                    <asp:Image ID="Image1" runat="server" ImageUrl="Images/search.png" CssClass="searchbtn" />
                    </div>
                    </div>
                
            </div>
        </div>
        <div id="main">
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
            </asp:ContentPlaceHolder>
        </div>
        <div id="footer">
            <span id="fl">? 2005-2019 douban.com, all rights reserved 北京豆网科技有限公司
            </span>
            <span id="fr">
                <a href="#">关于豆瓣</a>
                <a href="#">·在豆瓣工作</a>
                <a href="#">·联系我们</a>
                <a href="#">·免责说明</a>
                <a href="#">·帮助中心</a>
                <a href="#">·图书馆合作</a>
                <a href="#">·移动应用</a>
                <a href="#">·豆瓣广告</a>
            </span>
        </div>
    </form>
</body>
</html>

?
body {
    padding: 0;
    margin: 0;
}
.top {
    background-color: #545652;
    width: initial;
    height: 25px;
    font-size: 12px;
    padding-top: 10px;
}
.l a{
    color: white;
    border:0;
    text-decoration: none;
}
.l{ float: left;}
.r {
    float: right;
}
.search {
    width: 463px;
    height: 35px;
    border: 0;
    border-radius: 4px 0px 0px 4px;
    box-shadow: 2px 2px 2px #cdcdcd;
    vertical-align: middle;
    padding: 0px;
}
.searchbtn {
    padding: 0px;
    height: 35px;
    width: 35px;
    border-radius: 0px 4px 4px 0px;
}
#left {
    float: left;
}
#right {
    float: left;
  
}
#footer {
    height: 30px;
    width: inherit;
    background-color: #545652;
}
#fl {
    float: left;
    padding-top: 10px;
}
#fr {
    padding-top: 10px;
    float: right;
?
}
#fr a {
    text-decoration: none;
    font-size: 12px;
    color: white;
}

技术图片

百度识图作图床有点糊啊!

表现层商品展示页
<%@ Page Title="" Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="ShoppingCart.Index" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <br/><br/><br/><br/><br/>
    <a href="ShoppingCart.aspx">我的购物车</a>
    <br/><br/>
    <asp:DataList ID="DataList1" runat="server" Width="100%" RepeatDirection="Horizontal" OnItemDataBound="DataList1_OnItemDataBound" >
        <ItemTemplate>
            <%-- [ISBN],[BookName],[Author],[Price],[ImageAds] --%>
            <%-- ImageUrl =<%# Eval("ImageAds") %> --%>
            <div>
                <asp:Image ID="Image1" runat="server" ImageUrl =<%# Eval("ImageAds") %> Height="115" Width="105" />
                
            </div>
            <div>
                <a href="ShoppingCart.aspx?ISBN=<%#Eval("ISBN") %>"><%# Eval("BookName")%></a>
                    
            </div>
            <div>
                <a href="ShoppingCart.aspx?ISBN=<%#Eval("ISBN") %>"><img src="Images/add.jpg" alt="添加到购物车" border="0" title="添加到购物车" /> </a>
            </div>
            <div>
                <font color="red"><%# Eval("Price")%></font>
            </div>
            
        </ItemTemplate>
        <SelectedItemStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
        </asp:DataList><br/><br/><br/><br/>
    <div style="float: right">
        <asp:Label ID="lblCurrentPage" runat="server"></asp:Label>/
        <asp:Label ID="lblPageCount" runat="server"></asp:Label>页 &nbsp;
        <asp:HyperLink ID="lnkFirst" runat="server">首页</asp:HyperLink>
        &nbsp;
        <asp:HyperLink ID="lnkPrev" runat="server">上页</asp:HyperLink>
        &nbsp;
        <asp:HyperLink ID="lnkNext" runat="server">下页</asp:HyperLink>
        &nbsp;
        <asp:HyperLink ID="lnkLast" runat="server">末页</asp:HyperLink>
    </div>
    <br/><br/>
    </asp:Content>
?

后台代码:

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.Bindlist();
            }
        }
?
        private void Bindlist()
        {
            DbHelper helper = new DbHelper();
            PagedDataSource pdSource = new PagedDataSource();
            pdSource.DataSource = helper.FillTable("select [ISBN],[BookName],[Author],[Price],[ImageAds] from BookInfo")
                .DefaultView;
            pdSource.AllowPaging = true;
            DataList1.DataSource = pdSource;
            DataList1.DataBind();
        }
?
        protected void DataList1_OnItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                DataRowView drView = (DataRowView)e.Item.DataItem;
               // ((Image) e.Item.FindControl("Image1")).ImageUrl =drView["ImageAds"].ToString();
                // string rootdir = Server.MapPath(HttpContext.Current.Request.ApplicationPath);
                // string path = drView["ImageAds"].ToString().Replace(rootdir, "");
                  //path = path.Replace(@"\",@"/");
                //  Response.Write("<script>alert(‘"+path+"‘);</script>");
                // ((Image) e.Item.FindControl("Image1")).ImageUrl = Server.MapPath(path);
              //前面从数据库取同ImageUrl =‘<%# Eval("ImageAds") %>‘
            }
        }

这里使用了datalist模板列。通过地址栏传参给购物车页。

表现层购物车
<asp:GridView ID="gvCart" runat="server" AutoGenerateColumns="False" Width="100%" DataKeyNames="ID" ShowFooter="True" OnRowDataBound="gvCart_OnRowDataBound" OnRowDeleting="gvCart_OnRowDeleting" Height="331px">
            <Columns>
                <asp:BoundField HeaderText="ISBN" DataField="ISBN" />
                <asp:BoundField HeaderText="书名" DataField="BookName" />
                <asp:TemplateField HeaderText="单价">
                    <ItemTemplate>
                        <%# Eval("Price") %>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="数量">
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_OnClick">-</asp:LinkButton>
                        
                        <asp:TextBox  ID="txtCount" runat="server" Width="80" Height="16" Text=<%#Eval("Num") %>  ></asp:TextBox>
                        <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_OnClick">+</asp:LinkButton>
                        </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="总价">
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<%--                     <% --%>
<%-- --%>
<%--                         price = Convert.ToInt32(FindControl("txtCount").ClientID) * Convert.ToInt32(Eval("Price")); --%>
<%--                  Response.Write(price); --%>
<%--                     %> --%>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField HeaderText="删除" DeleteText="删除" ShowDeleteButton="True" />
            </Columns> 
            <EmptyDataTemplate>
                您的购物车中没有任何商品。
            </EmptyDataTemplate>
        </asp:GridView>

后台代码:

public partial class ShoppingCart : System.Web.UI.Page
    {
        public  static int price { get; set; }
        protected static PagedDataSource ps=new PagedDataSource();
        public void Bind()
        {
            string sql = "select * from BK_Car";
          DbHelper helper=new DbHelper();
           ps.DataSource = helper.FillTable(sql).DefaultView;
           ps.AllowPaging = true;
           this.gvCart.DataSource = ps;
           this.gvCart.DataBind();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            { 
                BindCartList();
            }
        }
        private void BindCartList()
        {
            string isbn = Request.QueryString["ISBN"];
            string sql = "select count(*) from BK_Car where ISBN="+isbn;
//            SqlParameter[] parameters = new SqlParameter[]
//            {
//                new SqlParameter("@ISBN",isbn),
//            };
            DataSet dataSet = SqlHelper.GetDataSet(sql);
            if (dataSet.Tables[0].Rows[0][0].ToString() == "0")
            {
                string selsql = "select BookName,Price from BookInfo where ISBN="+isbn;
                //SqlParameter parameter = new SqlParameter("@ISBN", isbn);
                DataSet ds = SqlHelper.GetDataSet(selsql);
                string BookName = ds.Tables[0].Rows[0][0].ToString();
                string Price = ds.Tables[0].Rows[0][1].ToString();
                int num = 1;
                string insert = "insert into BK_Car(ISBN,BookName,Price,Num) values(@ISBN,@BookName,@Price,@Num)";
                SqlParameter[] pars = new SqlParameter[]
                {
                    new SqlParameter("@ISBN",isbn),
                    new SqlParameter("@BookName",BookName),
                    new SqlParameter("@Price",Price),
                    new SqlParameter("@Num",num),
                };
             SqlHelper.ExecuteNonquery(insert, CommandType.Text, pars);
             Bind();
            }
            else
            {
                string update = "update BK_Car set Num=Num+1 where [email protected]";
                SqlParameter parameter = new SqlParameter("@ISBN", isbn);
                SqlHelper.ExecuteNonquery(update,CommandType.Text,parameter);
                Bind();
            }
            
        }
        protected void gvCart_OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType==DataControlRowType.DataRow)
            {
                e.Row.Attributes.Add("onmouseover", "b=this.style.backgroundColor;this.style.backgroundColor=‘#E1ECEE‘");
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=b");
                TextBox tbBox = (TextBox) e.Row.FindControl("txtCount");
                
                //处理问题:GridView模版列btn添加事件
                //GridView,获取模版列txt的值
            }
        }
        protected void gvCart_OnRowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            //点击删除时从DataTable中删除对应的数据行
            if (Session["Cart"] != null)
            {
                DataTable dt = (DataTable)Session["Cart"];
                dt.Rows.RemoveAt(e.RowIndex);
                dt.AcceptChanges();
                Session["Cart"] = dt;
                Response.Redirect("ShoppingCart.aspx");
            }
        }
    }

技术图片

代码待优化,非成品分层系统项目,后期override。

基操。

以上是关于ShoppingCart的主要内容,如果未能解决你的问题,请参考以下文章

ShoppingCart类图

护网杯 task_shoppingCart 记录

Python 基础 - Day 2 Assignment - ShoppingCart 购物车程序

美好明天,常用代码

atm-interface-shopping

仿饿了么购物车