ASP.NET一种基于C2C模式的网上购物系统的设计与实现

摘  要

网络购物已经慢慢地从一个新鲜的事物逐渐变成日常生活的一部分,以其特殊的优势而逐渐深入人心。本课题是设计开发一种基于C2C模式的网上购物系统。让各用户使用浏览器进行商品浏览。注册用户可以轻松的展示自己的网络商店,能对自己的用户信息进行修改,对发布的商品信息进行添加与管理,用自己的方法去推销产品。系统管理员可以对会员的相关信息进行管理。网站提供数据库检索和一定的安全保障,商品信息的发布和交易的协商都由作为独立个体的“买家”和“卖家”完成。利用.NET平台进行小型网站的开发是未来开发的趋势。本系统在.NET平台上进行开发,用C#进行了编码,并使用SQL server进行数据库设计,建立起一个比较完整的网上购物系统。其特点是方便快捷的操作方式,简单易懂的管理方法,因此对于企业和用户来说,都是一种新型的、节约型的系统。

关键词C2C模式;网上购物;C#;.NET;SQL Server

3.1  系统结构图

    1. 4.1 用户注册

该模块实现用户注册功能,用户进入后按照提示添写相关个人信息,确认信息后提交系统,完成用户注册。用户注册后要经过管理员审核通过才能使用注册帐号。当用户提交注册信息后,系统首先判断用户提交的商家图片是否符合要求,如果符合要求则将图片保存到指定目录,然后将用户提交的密码进行MD5加密以后和其他信息一起提交到数据库中,完成注册并返回给用户注册成功的提示。如果用户输入的注册名已存在,则认为注册信息无效,在用户提交注册的时候直接返回注册界面。

图4 用户注册界面

核心代码:

        try

        {    //上传图片

                   string upload3="";

            if (FileUpload1.HasFile == true)

            {

                string nam = FileUpload1.PostedFile.FileName; //得到上传的文件名

                int i = nam.LastIndexOf(".");              //取得文件名(包括路径)里最后一个"."的索引

                string newext = nam.Substring(i).ToLower();                                        //取得文件扩展名

                if (newext == ".gif" || newext == ".jpg" || newext == ".jpeg" || newext == ".bmp")  //过滤图片的格式

                {

                    string savePath1 = Server.MapPath("..\\upload\\");  //得到系统的相对路径

                    string savePathsmall = Server.MapPath("..\\smallupload\\");//生成缩略图

                    savePath1 += FileUpload1.PostedFile.ContentLength.ToString() + newext;//生成系统的文件名

                    savePathsmall += FileUpload1.PostedFile.ContentLength.ToString() + newext;

                    FileUpload1.SaveAs(savePathsmall);  //保存文件

                    SuperCommon.common.MakeSLT(savePathsmall,savePath1);

                    upload3 = FileUpload1.PostedFile.ContentLength.ToString() + newext; //生成系统的文件名

                }

                else

                {

                    Response.Write("<script>alert('你上传的图片格式不对,正确的图片格式为gif,jpg,jpeg,bmp!');</script>");//判定用户上传图片是否合法

                    return;

                }

            }

            string pwd = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(TxtPassword.Text, "md5");//用md5加密密码

            string strdate = DateTime.Now.ToShortDateString(); //得到系统时间

            string sql = "insert into Super_Company(Super_Company_Name,Super_Company_Image,Super_Company_Address,Super_Company_User,Super_Company_Tel,Super_Company_Fax,Super_Company_Traffic,Super_Company_Email,Super_Company_Site,Super_Type,Super_Company_UserName,Super_Company_Password,Super_Company_Description,Super_Company_Tag,Super_Company_Date,Super_Company_Area)values('" + TxtCompanyName.Text + "','" + upload3 + "','" + TxtAddress.Text + "','" + TxtContract.Text + "','" + TxtTel.Text + "','" + TxtFax.Text + "','" + TxtTraffic.Text + "','" + TxtEmail.Text + "','" + TxtWebSite.Text + "','" + DropDownList1.SelectedValue + "','" + TxtName.Text + "','" + pwd

+"','"+SuperCommon.common.strFormat(TxtDescription.Text)+"','"+TxtTag.Text+"','"+strdate+"','"+DropDownList2.SelectedValue+"')"; //写入数据库的sql语句

            common.ExecuteSql(sql);//执行数据库语句

            Response.Write("<script>alert('注册成功,请等待审核!');document.location='login.aspx';</script>");

        }

        catch{}//异常处理

图5 注册成功返回

4.2  用户登陆

用户需要填写正确的用户名和密码,登陆失败给出错误原因并返回登陆界面,登录成功进入登录成功页面。进入登陆界面后,用户可以对个人信息进行修改,查看相关留言评论,查看个人已发布商品,发布新商品。

首先在数据库中查询用户提交的帐号,如果不存在此帐号则返回错误信息,如果存在帐号,则继续将用户提供的密码进行MD5加密后与数据库中对应的密码进行比较,如果正确,则登陆成功,将页面导航到用户个人管理页面,否则登陆失败,返回登陆错误提示信息。

图6-1用户登陆界面

图6-2登陆错误返回

核心代码:

protected void BtnLogin_Click1(object sender, ImageClickEventArgs e)

    {

        string pwd = TxtPassword.Text;//得到密码字符传

        pwd = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");//将用户提供的密码进行MD5加密

        string sql = "select * from Super_Company where Super_Company_UserName='" + TxtUserName.Text + "' and Super_Company_Password='" + pwd + "' and Super_Company_Audit=1";//将用户提供的帐号和密码与数据库中对应的相比较

        if (common.CheckSql(sql) == "1")  //用户名是否存在

        {

            Session["SuperCompanyUserName"] = TxtUserName.Text;//把用户名保存在Session

            //Response.Redirect("Productmanage.aspx");

            Response.Redirect("manage.aspx"); //页面转向

        }

        Else  //用户名和密码检查失败

        {

            LblSuccess.Text = "抱歉,密码错误或你还没有通过审核";

            LblSuccess.ForeColor = System.Drawing.Color.FromName("red");

        }

}

4.3  发布商品

用户发布商品时要先确认发布商品类型,再进入商品详细描述,商品名称,商品图片,打折情况等。

首先检查用户是否具相应权限,确认权限后取得用户提交的商品图片等信息,判断图片文件类型是否合法,然后保存到指定目录,完成后自动生成商品的一些相关信息,如发布时间、发布商品的用户等,然后商品的这些详细信息保存到数据库中,并返回发布成功提示信息,否则返回错误提示信息。

图7 用户发布商品界面

图8 用户发布商品截图

核心代码:

protected void BtnSave_Click(object sender, EventArgs e)

    {

        if (checkRequest() == false)

        {

            return;

        }

        try

        {

            string nam = FileUpload1.PostedFile.FileName;//得到上传的文件名

            string upload3 = "";

            if (FileUpload1.HasFile == true)

            {

                int i = nam.LastIndexOf(".");//取得文件名(包括路径)里最后一个"."的索引

                string newext = nam.Substring(i).ToLower();                                        //取得文件扩展名

                if (newext == ".gif" || newext == ".jpg" || newext == ".jpeg" || newext == ".bmp")       //过滤图片文件的格式

                {

                    string savePath1 = Server.MapPath("..\\upload\\"); //得到文件的系统相对路径

                    savePath1 += FileUpload1.PostedFile.ContentLength.ToString() + newext;

                    FileUpload1.SaveAs(savePath1);  //保存文件

                    upload3 = FileUpload1.PostedFile.ContentLength.ToString() + newext;   //返回文件的保存地址

                }

                else

                {

                    Response.Write("<script>alert('你上传的图片格式不对,正确的图片格式为gif,jpg,jpeg,bmp!');</script>");

                    return;

                }

            }

            string image = upload3;//图片

            string freetb =SuperCommon.common.strFormat(TextBox1.Text);//商品详细信息

            string audit = common.CheckAudit(Session["SuperCompanyUserName"].ToString());//审核(先判断用户是否具有自动审核功能

            string companyID =Session["SuperCompanyUserName"].ToString();//登陆名

            string SuperProDate = DateTime.Now.ToShortDateString();  //得到系统时间

            string sql = "insert into Super_Product(Super_Product_Name,Super_Product_OriPrice,Super_Product_DisPrice,Super_Product_Image,Super_Product_Description,Super_Product_DisBiginDate,Super_Product_DisEndDate,Super_Product_OtherBenefits,Super_Product_Type,Super_Product_Audit,Super_Company_UserName,Super_Product_Tag,Super_Product_BrandType,Super_Product_Date,Super_Product_Dis)values('" + TxtProName.Text + "'," + TxtProOriPrice.Text + "," + TxtProDisPrice.Text + ",'" + image + "','" + freetb + "','" + TxtProBeginDate.SelectedValue + "','" + TxtProEndDate.SelectedValue + "','" + TxtProOtherBenefits.Text + "','" + DropDownList1.SelectedValue + "','" + audit + "','" + companyID + "','" + TxtProTags.Text + "','" + TxtBand.Text + "','" + SuperProDate + "','" + TxtProDis.Text + "')";  //写入数据库语句

            if (common.ExecuteSql(sql) == "1")  //执行数据库语句

            {

                Response.Write("<script>alert('你添加的信息已经成功提交。');</script>");

            }

            else

            {

                Response.Write("<script>alert('抱歉,添加信息错误,请检查信息是否正确。');</script>");

            }

        }

        catch(Exception ex)  //异常处理

        {

            Response.Write(ex+"alert('抱歉,添加信息错误,请检查信息是否正确。');");

        }

}

​​​​​​​4.4  留言

游客或用户在浏览商品时,可以发表对该商品的意见。如果有购买的打算,可以在留言里面告诉商家,以便商家和买家之间的联系。

图9 点评留言界面

核心代码:

protected void BtnSave_Click(object sender, EventArgs e)

    {//点击留言按钮执行的函数

        string username =Session["netusername"].ToString();//获取用户名

        int userid = int.Parse(Session["netuserid"].ToString());//获取用户ID

        string proId = Request["id"].ToString();//获取产品ID

        string date = DateTime.Now.ToShortDateString();//获取当前日期时间

        //设置sql字符串,并将留言信息插入数据库

        string sql = "insert into Super_Comment(Super_Comment_UserName,Super_Comment_Content,Super_Product_ID,Super_Comment_Services,Super_Comment_Environment,Super_Comment_Price,Super_Comment_Date,Super_Comment_UserId)values('" + username + "','" + TextBox1.Text.Replace("'", "").ToString() + "','" + proId + "','" + DropDownList2.SelectedValue + "','" + DropDownList1.SelectedValue + "','" + DropDownList3.SelectedValue + "','" + date + "',"+userid+")";

        if (common.ExecuteSql(sql)=="1")

        {//如果添加留言成功,返回成功信息

            Response.Write("<script>alert('你已经成功参与点评了');</script>");

            TextBox1.Text = "";

            Label9.Visible = true;

        }

        else

        {//如果添加留言失败,返回错误信息

            Response.Write("<script>alert('抱歉,点评失败!');</script>");

        }

    }

    public string Init2()

    {//根据传入的产品ID初始化界面,如果传入产品ID为空,则返回错误信息

        if (Request["id"] != null && Request["id"].ToString() != "")

        {

            string sql = "select top 1 * from Super_Product where Super_Product_ID=" + int.Parse(Request["id"].ToString());//根据产品ID查询数据库相应产品

            IDataReader dr = common.GetDataReader(sql);

            string ret = "<font color='red'>传入的参数不正确,请关闭此页</font>";

            if (dr.Read())

            {

                ret = "<font color='#595FB0' size='2px'>" + dr["Super_Product_Name"].ToString() + "</font>/添加点评";//显示产品名称

            }

            dr.Close();

            return ret;

        }

        else

        {//传入产品ID为空时,返回错误信息

            return "<font color='red'>传入的参数不正确,请关闭此页</font>";

        }

    }

4.5  管理员登陆

管理员登陆方式是管理员网页登陆,先进入页面登陆页面,输入帐号和密码,网址http://localhost:14698/SuperMarket/super_manage/login.aspx,登陆成功后进入管理员操作界面,进行用户注册审核,商品类型修改等操作。如果输入的帐号或密码错误,则返回错误提示。

将输入的帐号密码与预先定义好的帐号密码进行比较,比较成功则判断为合法管理员,登陆成功,为用户赋session值并转向管理页面,否则登陆失败,返回错误提示信息。

图10-1管理员登陆界面

图10-2登陆失败返回提示

核心代码:

protected void Button1_Click(object sender, EventArgs e)

    {

        if (TextBox1.Text == "jiang" && TextBox2.Text == "mima")  //字符串判断

        {

            Session["supermarket_admin"] = "admin";  //判断Session变量

            Response.Redirect("manage.aspx");  //页面转向

        }

        else  //登陆失败

        {

            Response.Write("<script>alert('密码不正确');</script>");

        }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Sping源码(七)—ConfigurationClassPostProcessor ——@PropertySources解析

序言 先来简单回顾一下ConfigurationClassPostProcessor大致的一个处理流程&#xff0c;再来详细的讲解PropertySources注解的处理逻辑。 详细的步骤可参考ConfigurationClassPostProcessor这篇帖子。 流程图 从获取所有BeanDefinition -> 过滤、赋值、遍历 -> 解析 -&…

璞华科技中标苏州工业园区“科技发展公司运营管理系统”升级改造项目

近日&#xff0c;璞华科技中标苏州工业园区科技发展有限公司“科技发展公司运营管理系统”升级改造项目。 苏州工业园区科技发展有限公司成立于2000年&#xff0c;是苏州工业园区管委会直属国有企业&#xff0c;聚焦以人工智能为引领的数字经济产业创新集群&#xff0c;重点布局…

Web自动化 - selenium

文章目录 一、selenium的使用selenium的安装 二、元素1. 定位选择元素1.id 定位2. class_name 定位find_element 和 find_elements的区别3. TAG_NAME 定位4. 超链接 定位 2. 操控元素1. 查询内容2. 获取元素文本内容3. 获取元素属性 3. 浏览器常用操作API4. 鼠标操作 - perform…

17 M-LAG 配置思路

16 华三数据中心最流行的技术 M-LAG-CSDN博客 M-LAG 配置思路 什么是M-LAG&#xff1f;为什么需要M-LAG&#xff1f; - 华为 (huawei.com) 1 配置 M-LAG 的固定的MAC地址 [SW-MLAG]m-lag system-mac 2-2-2 2 配置M-LAG 的系统标识符系统范围1到2 [SW-MLAG]m-lag system-nu…

【算法】动态规划之线性DP问题

前言&#xff1a; 本系列是看的B站董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 树塔-记忆化搜索 特点&#xff08;前提&#xff09;&#xff1a;从上向下的累加和是不能重复使用的&#xff0c;从下向上的累加和是可以重…

人民币汇率相关历史数据集(2006-2022年)

01、数据简介 汇率指的是两种货币之间兑换的比率&#xff0c;亦可视为一个国家的货币对另一种货币的价值。具体来说&#xff0c;汇率亦可视为一个国家的两种货币之间所存在的兑换比率&#xff0c;亦可视为一个国家的货币对另一种货币的价值。汇率的变动对一国的进出口贸易有着…

k8s 数据流向 与 核心概念详细介绍

目录 一 k8s 数据流向 1&#xff0c;超级详细版 2&#xff0c;核心主键及含义 3&#xff0c;K8S 创建Pod 流程 4&#xff0c;用户访问流程 二 Kubernetes 核心概念 1&#xff0c;Pod 1.1 Pod 是什么 1.2 pod 与容器的关系 1.3 pod中容器 的通信 2&#xff0c; …

94、动态规划-最长公共子序列

递归的基本思路&#xff1a; 比较两个字符串的最后一个字符。如果相同&#xff0c;则这个字符一定属于最长公共子序列&#xff0c;然后在剩余的字符串上递归求解。如果最后一个字符不相同&#xff0c;则分两种情况递归求解&#xff1a; 去掉 text1 的最后一个字符&#xff0c;保…

中国当代最具影响力的人物颜廷利:死神(死亡)并不可怕,可怕的是…

中国当代最具影响力的人物颜廷利&#xff1a;死神&#xff08;死亡&#xff09;并不可怕&#xff0c;可怕的是… 在中国优秀传统文化之中&#xff0c;汉语‘巳’字与‘四’同音&#xff0c;在阿拉伯数字里面&#xff0c;通常用‘4’来表示&#xff1b; 作为汉语‘九’字&#x…

mysql设置远程访问权限,允许其他IP访问

文章目录 更改mysql配置文件登录mysql 更改mysql配置文件 查找.ini或者.cnf文件 更改bind-address为0.0.0.0 [mysqld] character-set-serverutf8mb4 bind-address0.0.0.0 default-storage-engineINNODB [mysql] default-character-setutf8mb4 [client] default-character-s…

【getopt函数用法】

这里写目录标题 一、概述二、选项字符串规则&#xff1a;三、getopt 返回值四、会用到的全局变量&#xff1a;三、示例代码四、上机实验 一、概述 int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; //这个最常用&#xff0c;保存一个…

conan2 基础入门(06)-conanfile.py入门

conan2 基础入门(06)-conanfile.py入门 文章目录 conan2 基础入门(06)-conanfile.py入门⭐准备预备文件和Code ⭐使用流程指令 ⭐具体讲解conanfile.pyconan install END视频教学 ⭐准备 注意&#xff0c;如果想跟好的学习conanfile.py建议使用python来安装conan。 当然使用其…

C++之STL-priority_queue和仿函数的讲解

目录 一、priority_queue的介绍和使用 1.1 priority_queue的介绍 1.2 priority_queue的基本接口 二、仿函数的介绍 2.1 基本概念 2.2 适用场景 三、模拟实现priority_queue 3.1 向上调整算法 3.2 向下调整算法 3.3 整体框架 一、priority_queue的介绍和使用 1.1 prio…

U盘文件遇损?拯救“文件或目录损坏且无法读取”的秘籍!

在数字化时代&#xff0c;U盘已成为我们日常生活与工作中不可或缺的数据存储和传输工具。然而&#xff0c;有时我们可能会遇到一个非常令人沮丧的问题——U盘中的文件或目录突然损坏且无法读取。这种突发状况往往让人措手不及&#xff0c;甚至可能引发数据丢失的严重后果。那么…

【基于 PyTorch 的 Python 深度学习】6 视觉处理基础:卷积神经网络(2)

前言 文章性质&#xff1a;学习笔记 &#x1f4d6; 学习资料&#xff1a;吴茂贵《 Python 深度学习基于 PyTorch ( 第 2 版 ) 》【ISBN】978-7-111-71880-2 主要内容&#xff1a;根据学习资料撰写的学习笔记&#xff0c;该篇主要介绍了卷积神经网络的池化层部分和现代经典网络。…

2022CSP-S易错题解析

21.B i的取值分别是0、5、6、7、8、13&#xff0c;其中i5时&#xff0c;j运行3次&#xff1b;i6时&#xff0c;j运行2次&#xff1b;i7时&#xff0c;j运行1次&#xff1b;i13时&#xff0c;j运行4次。共10次。 25.D 第1次执行时&#xff0c;数字是按照三进制下的最低位从小到…

【C++】——string类

前言 在C语言里面我们用的字符串都是以\0结尾的字符合集&#xff0c;为了操作方便所以在c中推出了stirng类 一 string介绍 1.string是表示字符串的字符串类 2.因为是类&#xff0c;所以他会有一些常用的接口&#xff0c;同时也添加了专门用来操作string的常规操作 3.string…

什么是$t?$t的介绍及使用

目录 $t介绍&#xff1a; 作用&#xff1a; 安装国际化插件&#xff1a; 创建国际化资源文件 配置 vue-i18n &#xff1a; 切换语言&#xff1a; 下面为中文和英文状态下的效果&#xff1a; 如下面所示&#xff0c;这是一段前端代码&#xff1a; <el-form-item :label…

基于短时傅里叶变换域的一维信号邻域降噪方法(MATLAB)

基于傅里叶变换的信号频域表示及能量频域分布揭示了信号在频域的特征&#xff0c;但傅里叶变换是一种整体变换&#xff0c;只能了解信号的全局特性&#xff0c;不能有效检测信号频率随时间的变化情况。只有把时域和频域结合起来才能更好地反映非平稳信号的特征。时频分析的基本…

Redis 的主从复制

Redis 的主从复制 1、主从复制的实现2、主从复制的同步功能(PSYNC)2.1、部分重同步 本文讲解的Redis 主从复制机制&#xff0c;是基于 2.8及以后的版本而言&#xff0c;2.8以前的版本主从复制机制与此有所不同&#xff0c;请知悉。 Redis的复制功能分为 同步 (psync) 和 命令传…