MyPetShop实验报告书

《Web程序设计》

MyPetShop程序实验报告书

班    级:       计算机科学与技术A1201    

学生姓名:    

学生学号:        

学生组别:            第七组                 

    指导老师:         朱广福            

                  

 20##年06月23日

目录

MyPetShop系统概述. 2

实验内容. 2

实验规划. 2

  网站设计中心思想和大体构架. 2

  系统的整体架构. 4

实验过程以及代码. 4

  母板页. 4

  数据库. 6

  登录模板. 8

  购物车. 9

  订单结算. 14

  地图功能. 19

心得. 21


MyPetShop系统概述

随着因特网的不断普及和信息高速公路的逐步延伸,人类社会现今已昂首步入信息社会时代,而商品交易模式在不断地发生着变化。在社会化大生产以及社会分工日趋专业化的今天,网上购物无形的占据着主要的地位。网上购物系统一般由商品管理,购物车管理,系统管理和会员管理等要素组成,是一个网上交易过程。其主要任务是交易各方以电子交易方式而不是通过当面交换或直接面谈方式进行的任何方式的商业交易。显然,这与“网上购物”的概念和内容既有联系,又有明显的区别。它们涉及的信息范围,服务功能以及社会意义等都不相同。网上购物系统搜集和管理的是特定的信息,其范围较窄,功能和目标比较明确,具体,主要是为特定的领域和机构的决策和管理服务;而信息管理则要对各类信息及其相关要素进行全方位管理,而对全社会开展信息服务,以便有效地满足社会的信息需求。今天,我们可以确信网上购物毋庸置疑是未来的发展方向。然而网上购物系统却还没有一个严格的定义。Intel公司认为:网上购物=电子市场+电子交易+电子服务;IBM认为:网上购物=web;HP公司则说:“网上购物是通过电子化的手段来完成商业贸易活动的一种方式。”如此等等。

实验内容

组内成员一起完成购物网站的设计与开发

实验规划

1、         网站设计中心思想和大体构架

1.前台商品浏览模块

按照电子商务网站的一般规划和人们使用电子商务网站的习惯,前台商品浏览模块主要实现按照各种条件显示、查看商品的前台显示功能。

2.用户注册登录模块

用户注册和登录模块与通常的会员系统类似,用户注册以后就可以成为系统的会员。用户只有在成功登录系统后,才可以实现商品的购买。注册用户还具有修改密码和找回密码的功能。

3.购物车模块

购物车是每个电子商务站点的基本元素。不允许匿名用户访问购物车。购物车中包含了用户决定购买的所以商品信息,包括商品编号、商品名称、商品价格、购买数量以及用户应付总价等。用户在查看商品详细信息时,如果决定购买即可将商品加入购物车,然后可以继续浏览其它产品。

4.订单结算模块

用户完成购物后即可进入结算中心,系统对用户的产品及数量进行价格计算,最后生成用户应付款金额。然后用户向系统下达订单并提供送货地址和付款方式等信息。

5.后台管理功能模块

后台管理功能模块是根据系统数据维护要求而设计的后台管理平台,只有拥有管理员角色的用户才可进入后台功能模块实现系统的维护与管理。

2、   系统的整体架构

系统功能模块设计、用户控件设计、系统数据库总体设计

web.config配置文件的设计

实验过程以及代码

首先我们应该先建立一个ASP的网站

然后我们添加该模板页

然后对模板页面进行编辑代码和布局增加控件

public partial class MasterPage : System.Web.UI.MasterPage

{

    protected void Page_Load(object sender, EventArgs e)

    {

        Initialize(); 

    }

    protected void Initialize()

    {

        if (Roles.GetAllRoles().Length == 0)

        {

            Roles.CreateRole("Member");

            Roles.CreateRole("Admin");

        }

    }

    protected void lnkbtnReset_Click(object sender, EventArgs e)

    {

  

        WebPartManager webPartManager = new WebPartManager();

        webPartManager = WebPartManager.GetCurrentWebPartManager(Page);

        webPartManager.Personalization.ResetPersonalizationState();

    }

    protected void imgbtnSearch_Click(object sender, ImageClickEventArgs e)

    {

     

        string strQuery = "";

        if (txtSearch.Text.Trim() == "")

        {

            strQuery = "";

        }

        else

        {

            strQuery = "?SearchText=" + txtSearch.Text.Trim();

        }

        Response.Redirect("~/Search.aspx" + strQuery, true);

    }

}

母版页的布局代码

实现的效果

然后增添数据库,商品的数据可和用户的数据库

商品种类的数据库

数据库表中的相互关系

将注册的用户添加到数据库里面

  注册新的用户界面

public partial class Login : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        Login1.Focus();

    }

}

登录控件代码

购物车的功能部分代码

允许匿名用户访问购物车,购物车中包含了用户决定购买的所有商品信息,包括商品编号、商品名称、商品价格、购买数量以及用户应付总价等,用户在查看商品详细信息时,如果决定购买即可将商品加入购物车,然后可以继续浏览其他产品

public partial class ShopCart : System.Web.UI.Page

{

    DataConn dataconn = new DataConn();

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            if (Request.QueryString["ProductId"] != null)

            {

                int productId = int.Parse(Request.QueryString["ProductId"]);

                AddProduct(productId);

            }

            lblHint.Text = "温馨提示:更改购买数量后,请单击'重新计算'按钮进行更新!";

            Bind();

        }

    }

    protected void AddProduct(int productId)

    {

        int isExit = 0;

        for (int j = 0; j < Profile.Cart.ProName.Count; j++)

        {

        

            if (productId == (int)Profile.Cart.ProId[j])

            {

                int qty = (int)Profile.Cart.Qty[j];

                qty++;

                Profile.Cart.Qty[j] = qty;

                Profile.Save();

                isExit = 1;

            }

        }

        if (isExit == 0)

        {

        

            var products = from r in dataconn.Product

                           where r.ProductId == productId

                           select r;

            foreach (var product in products)

            {

                Profile.Cart.ListPrice.Add(product.ListPrice);

                Profile.Cart.Qty.Add(1);

                Profile.Cart.ProId.Add(product.ProductId);

                Profile.Cart.ProName.Add(product.Name);

            }

            Profile.Save();

        }

    }

    protected void Bind()

    {

        Profile.Cart.TotalPrice = TotalPrice().ToString();

        lblTotalPrice.Text = Profile.Cart.TotalPrice;

        DataTable dt = new DataTable();

        dt.Columns.Add("ProId");

        dt.Columns.Add("ProName");

        dt.Columns.Add("ListPrice");

        dt.Columns.Add("Qty");

        for (int i = 0; i < Profile.Cart.ProName.Count; i++)

        {

            DataRow row = dt.NewRow();

            row[0] = Profile.Cart.ProId[i];

            row[1] = Profile.Cart.ProName[i];

            row[2] = Profile.Cart.ListPrice[i];

            row[3] = Profile.Cart.Qty[i];

            dt.Rows.Add(row);

        }

        gvCart.DataSource = dt;

        gvCart.DataBind();

        if (gvCart.Rows.Count != 0)

        {

            pnlCart.Visible = true;

            lblCart.Text = "";

        }

        else

        {

            pnlCart.Visible = false;

            lblCart.Text = "购物车内无商品,请先购物!";

        }

    }

    protected decimal TotalPrice()

    {

        decimal sum = 0;

        for (int j = 0; j < Profile.Cart.ProName.Count; j++)

        {

            int qty = (int)Profile.Cart.Qty[j];

            decimal listPrice = (decimal)Profile.Cart.ListPrice[j];

            sum += qty * listPrice;

        }

        return sum;

    }

 

    protected void btnDelete_Click(object sender, EventArgs e)

    {

        int productId = 0;

        GridView gvCart = new GridView();

        gvCart = (GridView)Page.Master.FindControl("ContentPlaceHolder2").FindControl("gvCart");

        if (gvCart != null)

        {

            for (int i = 0; i < gvCart.Rows.Count; i++)

            {

                CheckBox chkProduct = new CheckBox();

                chkProduct = (CheckBox)gvCart.Rows[i].FindControl("chkProduct");

                if (chkProduct != null)

                {

                    if (chkProduct.Checked)

                    {

                        productId = int.Parse(gvCart.Rows[i].Cells[1].Text);

                        DeleteProduct(productId); 

                    }

                }

            }

        }

        Bind(); 

    }

    protected void DeleteProduct(int productId)

    {

      

        int j = 0;

        for (int i = 0; i < Profile.Cart.ProName.Count; i++)

        {

            if (productId == (int)Profile.Cart.ProId[i])

            {

                j = i;

                break;

            }

        }

    

        Profile.Cart.ListPrice.RemoveAt(j);

        Profile.Cart.ProId.RemoveAt(j);

        Profile.Cart.ProName.RemoveAt(j);

        Profile.Cart.Qty.RemoveAt(j);

        Profile.Save();

    }

    protected void btnClear_Click(object sender, EventArgs e)

    {

      

        Profile.Cart.Qty.Clear();

        Profile.Cart.ProName.Clear();

        Profile.Cart.ProId.Clear();

        Profile.Cart.ListPrice.Clear();

        Profile.Save();

        Response.Redirect("Default.aspx", true);

    }

    protected void btnComputeAgain_Click(object sender, EventArgs e)

    {

        lblError.Text = "";

        GridView gvCart = new GridView();

        gvCart = (GridView)Page.Master.FindControl("ContentPlaceHolder2").FindControl("gvCart");

        if (gvCart != null)

        {

            for (int i = 0; i < gvCart.Rows.Count; i++)

            {

                TextBox txtQty = new TextBox();

                txtQty = (TextBox)gvCart.Rows[i].FindControl("txtQty");

                if (txtQty != null)

                {

                    var product = (from p in dataconn.Product

                                   where p.ProductId == int.Parse(gvCart.Rows[i].Cells[1].Text)

                                   select p).First();

                    if (int.Parse(txtQty.Text) > product.Qty)

                    {

                        lblError.Text += "Error:库存不足,商品名为 " + gvCart.Rows[i].Cells[2].Text + " 的库存数量为 " + product.Qty.ToString() + "<br />";

                    }

                    else

                    {

                        ChangeQty(int.Parse(gvCart.Rows[i].Cells[1].Text), int.Parse(txtQty.Text));

                    }

                }

            }

        }

        Bind(); 

    }

    protected void ChangeQty(int productId, int qty)

    {

        for (int i = 0; i < Profile.Cart.ProName.Count; i++)

        {

            if (productId == (int)Profile.Cart.ProId[i])

            {

                Profile.Cart.Qty[i] = qty;

                Profile.Save();

            }

        }

    }

    protected void btnSettle_Click(object sender, EventArgs e)

    {

        if (User.Identity.IsAuthenticated)

        {

            Response.Redirect("SubmitCart.aspx", true);

        }

        else

        {

            Response.Redirect("Login.aspx");

        }

    }

}

执行控件功能

有增添商品  删除商品  清空购物车 重新计算等功能

public partial class SubmitCart : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!User.Identity.IsAuthenticated)

        {

            Response.Redirect("~/Login.aspx", true);

        }

        pnlConsignee.Visible = true;

        lblMsg.Text = "";

    }

    protected void btnSubmit_Click(object sender, EventArgs e)

    {

        DataConn dataconn = new DataConn();

        Order order = new Order();

        order.UserName = User.Identity.Name;

        order.OrderDate = DateTime.Now;

        order.Addr1 = txtAddr1.Text.Trim();

        order.Addr2 = txtAddr2.Text.Trim();

        order.City = txtCity.Text.Trim();

        order.State = txtState.Text.Trim();

        order.Zip = txtZip.Text.Trim();

        order.Phone = txtPhone.Text.Trim();

        order.Status = "未审核";

        dataconn.Order.InsertOnSubmit(order);

        dataconn.SubmitChanges();

        int orderId = order.OrderId;

        for (int i = 0; i < Profile.Cart.ProName.Count; i++)

        {

            OrderItem orderItem = new OrderItem();

            orderItem.OrderId = orderId;

            orderItem.ProName = (string)Profile.Cart.ProName[i];

            orderItem.ListPrice = (decimal)Profile.Cart.ListPrice[i];

            orderItem.Qty = (int)Profile.Cart.Qty[i];

            orderItem.TotalPrice = (int)Profile.Cart.Qty[i] * (decimal)Profile.Cart.ListPrice[i];

            var product = (from c in dataconn.Product

                           where c.ProductId == (int)Profile.Cart.ProId[i]

                           select c).First();

            product.Qty -= orderItem.Qty;

            dataconn.OrderItem.InsertOnSubmit(orderItem);

            dataconn.SubmitChanges();

        }

        Profile.Cart.Qty.Clear();

        Profile.Cart.ProName.Clear();

        Profile.Cart.ProId.Clear();

        Profile.Cart.ListPrice.Clear();

        Profile.Cart.TotalPrice = "";

        pnlConsignee.Visible = false;

        lblMsg.Text = "谢谢光临本店,祝您购物愉快!";

    }

}

对产品进行收货发货地址的填写

public partial class Search : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            Bind();

        }

    }

    protected void Bind()

    {

        if (Request.QueryString["SearchText"] != null)

        {

            string strSearchText = Request.QueryString["SearchText"].ToString();

            DataConn dataconn = new DataConn();

            var products = from p in dataconn.Product

                           where SqlMethods.Like(p.Name, "%" + strSearchText.Trim() + "%")

                           select p;

            gvProduct.DataSource = products;

            gvProduct.DataBind();

        }

        else

        {

            lblError.Text = "无搜索结果!";

        }

    }

    protected void gvProduct_PageIndexChanging(Object sender, GridViewPageEventArgs e)

    {

        gvProduct.PageIndex = e.NewPageIndex;

        Bind();

    }

}

商品的浏览和是否加入购物车

用户浏览时候的界面

public partial class UserControl_NewProduct : System.Web.UI.UserControl

{

    protected void Page_Load(object sender, EventArgs e)

    {

        DataConn dataconn = new DataConn();

        var products = (from c in dataconn.Product

                        orderby c.ProductId descending

                        select c).Take(7);

        gvProduct.DataSource = products;

        gvProduct.DataBind();

    }

}

商品显示的名称和价格

若已经登录则则跳转若没有登录则跳转至登录界面

public partial class Default2 : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        try

        {

        

            DataSet ds = WeatherClass.getSupportDataSet();

            if (!Page.IsPostBack)

            {

                DataTable dt = ds.Tables[0];

                ddlProvince.DataSource = dt;

           

                ddlProvince.DataValueField = "ID";

            

                ddlProvince.DataTextField = "Zone";

                ddlProvince.DataBind();

                ddlCity.SelectedIndex = 1;

            

                CityDataBind("1");

                GetWeatherByCode("54511");

            }

        }

        catch (Exception)

        {

            lblTitle.Text = "网络连接异常";

        }

    }

    protected void CityDataBind(string zoneID)

    {

        DataView dv = new DataView(WeatherClass.getSupportDataSet().Tables[1]);

   

        dv.RowFilter = "[ZoneID] = " + zoneID;

        ddlCity.DataSource = dv;

        ddlCity.DataTextField = "Area";

        ddlCity.DataValueField = "AreaCode";

        ddlCity.DataBind();

        ddlCity.Items.Insert(0, new ListItem("选择城市", "0"));

        ddlCity.SelectedIndex = 0;

    }

    protected void GetWeatherByCode(string cityCode)

    {

        String[] wa = WeatherClass.GetCityWeather(cityCode.Trim());

        lblNow.Text = wa[10];

        lblToday.Text = wa[6] + "&nbsp;&nbsp;&nbsp;" + wa[5] + "&nbsp;&nbsp;&nbsp;" + wa[7];

        lblTomorrow.Text = wa[13] + "&nbsp;&nbsp;&nbsp;" + wa[12] + "&nbsp;&nbsp;&nbsp;" + wa[14];

        lblAfterTmr.Text = wa[18] + "&nbsp;&nbsp;&nbsp;" + wa[17] + "&nbsp;&nbsp;&nbsp;" + wa[19];

        lblExponent.Text = wa[11].Replace("\n", "<br />");

        lblCityIntro.Text = wa[22].Replace("\n", "<br />");

        lblTime.Text = DateTime.Parse(wa[4]).ToString("yyyy年MM月dd日 dddd HH:mm");

        lblCity.Text = wa[0] + " / " + wa[1];

        imgWeathertrendsTdS.ImageUrl = "~/img/weather/" + wa[8]; 

        imgWeathertrendsTdE.ImageUrl = "~/img/weather/" + wa[9];

        imgWeathertrendsTmS.ImageUrl = "~/img/weather/" + wa[15]; 

        imgWeathertrendsTmE.ImageUrl = "~/img/weather/" + wa[16];

        imgWeathertrendsAfS.ImageUrl = "~/img/weather/" + wa[20]; 

        imgWeathertrendsAfE.ImageUrl = "~/img/weather/" + wa[21]; 

        imgCityPhoto.ImageUrl = "http://www.cma.gov.cn/tqyb/img/city/" + wa[3];

        imgCityPhoto.AlternateText = ddlCity.SelectedItem.Text;

    }

    protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)

    {

      

        CityDataBind(ddlProvince.SelectedItem.Value.Trim());

    }

    protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)

    {

        if (ddlCity.Items[0].Value == "0")

        {

            ddlCity.Items.RemoveAt(0);

        }

  

        GetWeatherByCode(ddlCity.SelectedItem.Value.Trim());

    }

}

地图代码的信息天气等功能的简介,需要连至互联网才可以查看

心得

历经这次实验,让我对WEB程序设计的学习信心备受打击,但也极力的激励了我那个对学习饥渴的心,让我觉得怎么都没有学够,怎么都没学会、薛懂。因为,这次的实验很综合、很需要耐心和细心,曾经一个错误让我寝食难安,让我侧夜难眠,,曾经也因为我能找出一个错误,让我兴高采烈,让我狂欢不止,这次实验,让我重新审视了这门课程的学习。仍记得,这学期的开始为程序的那种绞尽脑汁痛苦不堪,对这门课的作业感到不知所措,不知道怎么下手做,但是很多事情当我们亲身去体验,去实践,把我们想做不敢做的事情静下心来慢慢的去做去享受。我会去好好的学习ASP.NET,不管这么课程还下学期学或者不学,我不会允许我自己就这么丢下,因为学习这门课程洗礼了我的知识,让我知道了看似简单的事情不一定简单,也让我见识了什么事情敢于去做,敢于动手,什么困难都迎然而解。对于以后的其他课程,我要争取尽自己最大的努力,学习更多的知识,来丰富自己。

相关推荐