ASP.NET网上鲜花销售系统的设计

 

本系统实现了一般电子商务所具备的功能,如商品浏览、用户登录注册、网上与购物、结算、后台数据库管理等,利用这些功能可以对鲜花销售信息进行较好的管理。

网上鲜花销售系统的使用者主要是客户和销售管理者,对于客户来说,实现的功能包括客户浏览鲜花(搜索查询),存放选中的商品的购物车,最后产生订单;对于销售管理者来说,需要对客户的信息,鲜花的信息,以及销售的信息进行管理。

关键词购物车;鲜花管理;销售管理;客户管理;搜索查询

3系统需求分析与流程设计

3.1系统功能需求分析

网上鲜花销售系统的使用着主要是客户和销售管理者,对客户来说,实现的功能包括客户浏览鲜花,存放选中的商品的购物车,最后产生订单;对销售管理者来说,需要对客户的信息,鲜花的信息,以及销售的信息进行管理(如图2)。

前台客户功能可以概括为以下几点:

鲜花信息模块:包括鲜花信息的浏览,查询搜索等;

用户信息管理模块:处理用户注册、登录验证;

购物车模块:可以添加自己喜欢的鲜花;

订单模块:此模块中的信息由购物车结账产生,可以供客户查询订单状态,以及及时修改订单信息。

后台管理者功能可以概括为以下几点:

客户管理:可以查询、修改客户信息;

鲜花管理:可以添加、修改、删除鲜花信息;

销售管理:处理客户的订单,查询订单以及销售的情况;

5用户管理权限

管理员:在此系统中有且只有一个管理员,即系统管理员。他具有一般用户所没有的权限。他能够通过用户名(admin)密码(admin)进行登录,在管理栏中能够进行鲜花的增加与删除。

普通用户:主要是分为两种,一种之前已经注册过的用户,一种是一般的浏览网站的用户。已经注册过的用户可以浏览鲜花并且下单购买,然而一般的普通用户,只能浏览鲜花,他们只有在注册过后才能够下单购买鲜花。

6系统实现与分析

6.1购物车

购物车分为两种,一种是已经登录过的用户的购物车,在购物车编号中可以看到一个为具体数字的编号,购物车的ID等于用户ID另外一中是未登录过的用户的购物车,在购物车编号中可以看到一个字符串,该字符串保留在cookies,是利用System.GuidClass产生一个随机GUID(全局唯一标识符),回写到客户端指定的Cookie中,同时返回TempCartId作为购物车的编号。

注释:没有登录过的用户其购物车的编号是一个字符串,如图8,4906132b-567b-47f8-8be4-9a77cf697dcc,它是利用System.Guid.Class产生一个随机全局唯一标识符GUID。

图8 购物车1


注释:已登录过的用户其购物车编号为一个整型数字如图9。

主要代码如下:

public String GetShoppingCartID()

        {

            HttpContext Context = HttpContext.Current;

// 如果该用户已经通过验证后登录了系统,

那么以该用户的UserID作为购物车ID

            if (Context.User.Identity.Name != "")

            {

                return Context.User.Identity.Name;

             }

            // 否则, 如果浏览器Cookie中已经分配给该用户一个购物车ID

            if (Context.Request.Cookies["ShoppingCartID"] != null)

            {

                return Context.Request.Cookies["ShoppingCartID"].Value;

             }

            else

            {

                // 利用System.Guid Class产生一个随机GUID(全局唯一标识符)

                   Guid TempCartId = Guid.NewGuid();

                // 回写到客户端指定的Cookie中

   Context.Response.Cookies["ShoppingCartID"].Value = TempCartId.ToString();

                // 同时返回TempCartId

                    return TempCartId.ToString();

            }

        }

注释:送货地址采用了一个必须输入验证,邮编和联系电话采用了一个必须输入验证和正则表达式验证。

主要代码如下:

1.送货地址(采用了必须输入验证)

RequiredFieldValidatorID="RequiredFieldValidator1"runat="server" ControlToValidate="tbAddress" ValidationGroup="SaveOrder" Display="Dynamic"

2.邮编(采用了必须输入验证和正则表达式验证)

RequiredFieldValidatorID="RequiredFieldValidator1"runat="server" ControlToValidate="tbAddress" ValidationGroup="SaveOrder" Display="Dynamic"

ValidationExpression="\d{6}" ValidationGroup="SaveOrder" Display="Dynamic"

3.联系电话(采用了必须输入验证和正则表达式验证)

RequiredFieldValidatorID="RequiredFieldValidator3"runat="server" ValidationGroup="SaveOrder"ControlToValidate="tbTelephone"Display="Dynamic"

ValidationExpression="\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}

|\(0\d{3}\)[- ]?\d{7}|0\d{3}[- ]?\d{7}

|13\d{9}|159\d{8}”

    注释:意思是以“(028)-”开头后面加8位数字或者是以“028-” 开头后面加8位数字,或者是以“(0???)-”开头后面加7位数字或者是以“0??? -”开头后面加7位数字的固定电话,再或者以“13”开头后面加9位的手机号码,或者是以“159” 开头后面加8位的手机号码。

6.2用户登录与注册

当已经注册过的用户输入其用户名以及密码单击登录按钮便可以登录,但如果为新用户,单击注册按钮,在下一个页面中输入信息后再单击注册按钮后便可成为注册用户。

用户登录主要实现过程:通过spUserLogin存储过程获得UserID,作为用户ID,在通过GetShoppingCartID()获得TempCartID,之后再调用一个存储过程spShoppingCartMigrate将购物车合并。用户注册的实现过程与用户登录的实现过程基本上一样。

主要代码如下:

用户登录

if (Page.IsValid)

            {

                String ID = da.spUserLogin(tbUserName.Text.Trim(), tbPassword.Text.Trim());

                if (ID != null)

                {

                    String TempCartID = da.GetShoppingCartID();

                    // 将当前临时的购物车清单转换到登录用户名下

                    da.spShoppingCartMigrate(TempCartID, ID);

                    // 保存登录用户Cookies

                    Response.Cookies["ShoppingCartUser"].Value = tbUserName.Text.Trim();

                    // 重定向浏览器到目标页面

                    FormsAuthentication.RedirectFromLoginPage(ID, false);

                }

                else

                {

                    da.Alert("用户名或密码错误!");

                }

            }

其中调用了两个存储过程:spUserLogin, spShoppingCartMigrate

CREATE PROCEDURE  dbo.spUserLogin

(

        @UserName CHAR(10),

@Password CHAR(10),

@UserID INT OUTPUT

)

AS

SELECT  @UserID = UserID  FROM  Users

WHERE  UserName = @UserName

AND  Password = @Password

IF @@Rowcount < 1

SELECT  @UserID = 0

GO

CREATE PROCEDURE  dbo.spShoppingCartMigrate

(

           @OldCartID VARCHAR(50),

           @NewCartID VARCHAR(50)

)

AS

UPDATE  ShoppingCart 

SET  CartID = @NewCartID  WHERE  CartID = @OldCartID

GO

用户注册的实现代码:

          if (Page.IsValid)

                  {

                         //保存旧的购物车编号,以便注册后合并购物车

                           String TempCartID = da.GetShoppingCartID();

                //添加用户信息到数据库

String UserID = da.AddUser(tbUserName.Value,tbPassword.Value,

tbAddress.Value, tbPostCode.Value, tbTelephone.Value);

                         if (UserID != "")

                         {

                                //将用户ID指定为通过安全登录的信息

                                FormsAuthentication.SetAuthCookie(UserID,false);

                                //合并购物车

                                da.spShoppingCartMigrate(TempCartID,UserID);

                                //将用户姓名保存到Cookies中

      Response.Cookies["UserName"].Value = Server.HtmlEncode(tbUserName.Value.Trim());

                    //重定向到购物车界面

                                Response.Redirect("shopcart.aspx");

                         }

                         else

                         {

                                   da.Alert("该用户名已被注册!");

                }

            }

调用了一个存储过程spShoppingCartMigrate.

CREATE PROCEDURE dbo.spShoppingCartMigrate

(

@OldCartID VARCHAR(50), @NewCartID VARCHAR(50)

)

AS

UPDATE   ShoppingCart

SET  CartID = @NewCartID  WHERE   CartID = @OldCartID

GO

在用户注册的时候需要输入电话号码,电话号码采用了一个正则表达式,只有输入正确的格式才能注册,否则将提示错误信息。

主要代码如下:

ValidationExpression="\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}

|\(0\d{3}\)[- ]?\d{7}|0\d{3}[- ]?\d{7}

|13\d{9}|159\d{8}”

6.3注销

用户可以变化身份登录,主要采取的方法是用户注销,再重新以另外一种身份登录。

注销的实现过程:通过调用.NET的一个控件FormsAuthentication.SignOut()来完成。

主要代码如下:

protected void btnLogout_Click(object sender, EventArgs e)

        {

            FormsAuthentication.SignOut();

            Response.Redirect("index.aspx");

        }

6.4下订单

客户在购物车的页面中填完送货地址、邮编及电话后按保存按钮可以下订单,在管理页面中点击查看订单详情可以查看所下订单,如图10,11所示。

主要实现过程:1)获取当前用户的OrderID

              2)利用ShoppingCart表和Flower表的内联接,将当前用户的当前购物车复制到当前所产生的订单详情中

              3)利用OrderDetails 表和Flower表的内联接,扣除Flower表中的鲜花库存

              4)调用另一存储过程spShoppingCartEmpty将购物车清空

图10 下订单

主要代码如下:

CREATE PROCEDURE dbo.spOrdersInsert

(

                  @UserID  INT,  @CartID   NVARCHAR(50),

                  @Address  VARCHAR(50),  @PostCode  CHAR(10),

                  @Telephone  VARCHAR(50), @OrderID   INT OUTPUT

)

AS

BEGIN TRAN OrdersInsert  /* 产生订单 */

INSERT INTO Orders

(

               UserID, Address, PostCode, Telephone, OrderDate

)

VALUES

(

               @UserID, @Address, @PostCode, @Telephone

               GETDATE()

)

-- 返回当前所产生的OrderID

SELECT  @OrderID = @@Identity

/* 将当前用户的当前购物车复制到当前所产生的订单详情中*/

INSERT INTO OrderDetails

(

                OrderID, FlowerID, Quantity

)

SELECT  OrderID, ShoppingCart.FlowerID, Quantity

FROM  ShoppingCart  INNER JOIN

Flower ON  ShoppingCart.FlowerID = Flower.FlowerID

WHERE  CartID = @CartID

/*扣除相应的库存鲜花数量*/

UPDATE  Flower

SET  FlowerStock = FlowerStock - OrderDetails.Quantity

FROM  OrderDetails INNER JOIN

Flower ON OrderDetails.FlowerID = Flower.FlowerID

WHERE  OrderDetails.OrderID = @OrderID

/* 完成后, 调用另一存储过程spShoppingCartEmpty

清空当前购物车ID的所有明细*/

EXEC spShoppingCartEmpty @CartID

COMMIT TRAN OrdersInsert

GO

其中调用了一个存储过程spShoppingCartEmpty

主要代码如下:

CREATE Procedure spShoppingCartEmpty

(

                    @CartID nvarchar(50)

)

AS

DELETE FROM ShoppingCart

WHERE  CartID = @CartID

GO

6.5撤消订单

客户可以在规定的时间内将自己所下的订单撤消,如图12。

主要实现过程:将Orders表中的Dispatched值设置为1,因为系统的默认为0,0表示未发货,1代表已发货,如果已经发了货,自然就相当于将订单删除。

图12 撤消订单

主要的代码如下:

public void spCancelOrder(int iUserID, int iOrderID)

        {

            ConnOpen();

            SqlCommand1 = new SqlCommand("spCancelOrder", SqlConnection1);

            SqlCommand1.CommandType = CommandType.StoredProcedure;

            SqlParameter Param1 = new SqlParameter("@UserID", SqlDbType.Int, 4);

            SqlParameter Param2 = new SqlParameter("@OrderID", SqlDbType.Int, 4);

            SqlCommand1.Parameters.Add(Param1);

            SqlCommand1.Parameters.Add(Param2);

            Param1.Value = iUserID;

            Param2.Value = iOrderID;

            SqlCommand1.ExecuteNonQuery();

            ConnClose();

         }

其中调用了一个存储过程spCancelOrder

CREATE PROCEDURE dbo.spCancelOrder

(

               @UserID INT,  @OrderID INT

)

AS

UPDATE  Orders  SET  Dispatched = 1

WHERE  UserID = @UserID  AND  OrderID = @OrderID

GO

6.6鲜花管理

当为管理员登录的时候,会在页面的右方看见一个DetailsView的表,可以进行鲜花的添加、删除操作。如果不是管理员登录则不会显示该表,如图13。

主要实现过程:利用SQL语句中的DELETE、INSERT 、UPDATE方法分别实现鲜花的删除,新建,编辑功能。

图13 鲜花添加删除

主要代码如下:

try

                {

                    int UserID = Convert.ToInt32(User.Identity.Name);

                    if (UserID == 1)

                    {

                        lblUserName.Text = "管理员";

                        DetailsView1.Visible = true;

                    }

                    string sSQL = "SELECT [UserID], [UserName], [IdealMoney] FROM [Users] WHERE ([UserID] = " + UserID + ")";

                }

                catch

                {

                    Response.Redirect("error.aspx?info=请先登录或注册!");

                }

            }

SQL语句包含在页面上,主要代码如下:

DeleteCommand="DELETE FROM [Flower] WHERE [FlowerID] = @FlowerID"

InsertCommand="INSERT INTO [Flower] ([FlowerSerialNumber], [FlowerName], [FlowerStock], [FlowerPrice], [FlowerDescription], [FlowerImage]) VALUES (@FlowerSerialNumber, @FlowerName, @FlowerStock, @FlowerPrice, @FlowerDescription, @FlowerImage)"

SelectCommand="SELECT * FROM [Flower]"

UpdateCommand="UPDATE [Flower] SET [FlowerSerialNumber] = @FlowerSerialNumber, [FlowerName] = @FlowerName, [FlowerStock] = @FlowerStock, [FlowerPrice] = @FlowerPrice, [FlowerDescription] = @FlowerDescription, [FlowerImage] = @FlowerImage WHERE [FlowerID] = @FlowerID">

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/674475.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传统汽车空调系统工作原理

1.首先讲一个概念 液体变成气体&#xff1a;吸热 气体变成液体&#xff1a;放热 2.在汽车空调系统中热量的传递的介质不是水&#xff0c;而是氟利昂&#xff0c;简称&#xff1a;“氟”。 3.传统式汽车空调结构如下 该三个部件位于车头进气口位置 该部位位于汽车驾驶车厢前方…

上海个人购房提取公积金经历和注意事项(收藏不踩坑)

在前一篇文章中&#xff0c;我介绍了 2024 年 4 月 24 日上海个人购房个税退税经历&#xff0c;我于 4 月 27 日周六&#xff0c;顺利办理租房公积金提取业务&#xff0c;资金在业务办理完成后 10 分钟左右到账。通过本文分享办理过程的材料和注意事项&#xff0c;避免大家踩坑…

PTQ4SAM、Mamba-Attention、AniTalker、IceFormer、U-DiTs、CogDPM

本文首发于公众号&#xff1a;机器感知 PTQ4SAM、Mamba-Attention、AniTalker、IceFormer、U-DiTs、CogDPM PTQ4SAM: Post-Training Quantization for Segment Anything Segment Anything Model (SAM) has achieved impressive performance in many computer vision tasks. Ho…

uni-app+vue3 +uni.connectSocket 使用websocket

前言 最近在uni-appvue3websocket实现聊天功能&#xff0c;在使用websocket还是遇到很多问题 这次因为是app手机应用&#xff0c;就没有使用websocket对象&#xff0c;使用的是uni-app的uni.connectSocket 为了方便测试这次用的是node.js一个简单的dom&#xff0c;来联调模拟…

基于Springboot的校园新闻管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园新闻管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

EOCR-ELR-30RM7Q电机保护器 施耐德韩国三和

EOCR-ELR-30RM7Q电机保护器 施耐德韩国三和 基于MCU(微处理器)的密集型设计 精确的接地故障保护功能 电力系统和电动机的接地故障保护 零序电流互感器监测接地故障 电流和故障延时单独设定 LED显示电源输入和运行状态 嵌入式安装 EOCR主要产品有电子式电动机保护继电器&#xf…

如何在已经安装好的PostgreSQL14中安装uuid 扩展

当前环境 PG14.8 LINUX 8.8 存在问题&#xff1a; 开发人员问&#xff0c;PG中&#xff0c;支持 生成UUID吗&#xff0c;具体是什么&#xff0c;答&#xff0c;类似这个函数 uuid_generate_v4() 看了一下&#xff0c; select uuid_generate_v4();会报错&#xff0…

GDPU 天码行空11

&#xff08;一&#xff09;实验目的 1、掌握JAVA中IO中各种类及其构造方法&#xff1b; 2、重点掌握IO中类所具有的IO操作方法&#xff1b; 3、熟悉软件中登录模块的开发方法&#xff1b; 4、掌握IO中读写常用方法。 5、进一步熟悉正则规则的使用方法。 &#xff08;二&…

Linux内核之获取文件系统超级块:sget用法实例(六十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

SpringBoot+Vue+Element-UI实现医患档案管理系统

目录 前言介绍 系统展示 管理员页面 患者管理 诊疗信息管理 病历信息管理 处方信息管理 患者页面 医生页面 部分核心代码 病历信息 上传文件 数据库配置 前言介绍 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技…

【LAMMPS学习】八、基础知识(5.9)LAMMPS 近场动力学

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各种模拟。 …

20240506 深度学习高级技术点

1.基于BN层剪枝 基于Batch Normalization (BN)层进行剪枝是一种常用的模型压缩方法&#xff0c;特别是在卷积神经网络(CNNs)中。BN层在训练期间用于加速收敛和提高模型的泛化能力&#xff0c;而在剪枝过程中&#xff0c;BN层提供的统计信息&#xff08;特别是均值(mean)和方差…