赞
踩
大家好,今天给大家介绍基于C#+asp.net+sqlserver的网络商店销售管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦
文章目录:
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:8717个字30页
包含内容:整套源码+完整毕业论文
提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
1 引言
1.1开发背景
省略
系统正是使用ASP.NET技术的动态网页与SQL Server2000数据库结合打造的一个网上商店管理系统,一般用户通过网络访问该系统,提供用户注册功能,商品查询功能;系统用户(已注册用户)可以修改注册信息,购买商品等;管理员可以修改、删除、添加、模糊查询用户信息、配送商、供应商信息,对顾客的定单安排配送商(即进行销售)以及向供应商定货和处理供应商发送来的货物(即进货和库存管理)。本系统充分发挥了ASP.NET技术显示于客户端,运行于服务器端的特点,保护用户资料的安全性。经过分析,本文作者使用的是Microsoft公司的visual studio.net开发工具,利用其提供的面向对象的开发工具,尤其是数据窗口这一能方便而简洁操作数据库的智能化对象,首先在短时间内建立系统应用原型,然后对初始原型系统进行需求迭代,不断修正和改进,直到完成系统。
1.2系统功能
整个网络销售管理系统的包括用户,超级管理员和一般管理员三种角色,系统为不同的角色提供不同的入口。两个管理员是一种隶属关系,一般管理员要受超级管理员的限制。
用户和管理员具有不同的操作权限,用户可以注册新用户,修改自己的密码、个人资料。查看/搜索自己的喜欢的商品的信息;超级管理员具有添加新管理员、删除管理员、修改密码,添加、删除商品类别;添加、修改、删除商品信息;查询用户信息、修改用户的账户金额,还有查询销售情况。一般管理员具有除添加管理员、删除管理员之外的其他权限。
1.3系统软硬件配置要求
在运行本系统前,请先检查一下软硬件配置是否符合以下要求:
硬件环境:
服务器端/客户端:
处理器:Intel Pentium4
内存: 128M
硬盘空间:20G
安装 NET运行环境
软件环境:
操作系统:Windows 2000
网络协议:TCP/IP
浏览器:Internet Explore 6.0
显示器:VGA或更高分辨率的
1.4相关软件及技术介绍
1.4.1 ASP.NET技术
ASP.NET 是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.NET构架是可以用Microsoft(R)公司最新的产品 Visual Studio开发环境进行开发ASP.NET是基于通用语言的编译运行的程序,可以使它运行在Web应用软件开发者的几乎全部的平台上。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.NET的Web应用中。
1.4.2 SQL Server
SQL Server 是一个具备完全 Web 支持的数据库产品,提供了对可扩展标记语言 (XML) 的核心支持以及在 Internet 上和防火墙外进行查询的能力,提供了以 Web 标准为基础的扩展数据库编程功能。
1.4.3 Visual Studio.net
它是Microsoft推出.NET应用程序开发工具。它易学易用的特性得到很多的好评。Microsoft又推出新版的.NET应用程序开发工具 Visual Studio.NET ,加入更多的好用功能,是.net的好开发工具。
2.项目模块及框图
2.1 系统功能模快设计
系统主体采用B/ S(Browser/ Server ,浏览器/ 服务器) 结构,即采用目前分布式系统流行的3 层软件结构,即在传统的客户和服务器之间加入应用服务器(Application server) ,3 层即是表现层(浏览器) 、业务逻辑层(Web 服务器) 、数据层(数据服务器) ,系统简图如图2-1所示。数据服务器与Web 服务器是完全分开的,分开之后的3 层软件结构功能明确:客户层只提供应用程序的用户界面,负责与用户交互;业务逻辑层是应用系统的关键,它负责处理所有用户请求,进行具体的运算和决定程序的流程,并把处理结果返回给表现层;服务器层仍然提供的是数据库支持、维护和更新应用程序的数据。
2.2 网络销售管理流程图
图1 网络销售管理系统数据流程
2.3网络销售管理系统模块组织图
图2A系统模块组织图
图2B系统模块组织图
3 项目方案需求
3.1 项目特色
项目采用Visual Studio .net 与SQL Server 进行开发。Visual Studio .net是微软最新推出的强大的可视化集成开发环境. VS.NET是ASP. NET中的一员,它继承了VB6.0通俗易懂的语法和可视化的应用程序界面设计,同时加入完全面向对象的设计思想,使应用程序的设计更加方便、快捷。另外,ADO.NET的引入使得访问数据库更加容易。
项目在启动时需要进行登录验证,由于用户的信息保存在服务器的数据库中,所以在本地应当连接数据库服务器的信息 把所得到的信息进行验证(服务器的名称,登录数据库的用户名、密码等),用户通过验证后在给予用户相应的权限,在进入系统进行操作。
3.2 方案选择
3.2.1 数据库需求分析
网络商店销售管理系统数据库系统,针对它要实现的业务功能,数据库中应该具有以下的模块:
用户信息:包括用户的编号、用户名、密码、帐户金额、姓名等内容。
商品信息:包括商品编号、商品名称、商品价格、描述以及所属类别等。
管理员信息:与用户信息相类似,包括管理员编号、登录名、密码、角色类别等。
管理员日志:包括日志编号、发生事件以及时间。
购物车:用来存储用户购物的信息,如商品的编号、数量等
定单:一笔完整的定单记录应该包括它所相关的商品集合以及各个商品的数量等信息
3.2.2数据库逻辑结构设计
系统共涉及9张表,分别是:用户信息表Userinfo、商品信息表Productinfo、商品类别字典表Category、购物车表Shoppingcate、定单表Orders、定单信息表Orderitems、管理员信息表Admin、管理员角色字典表Adminrole和管理员日志表Adminaction。
主要设计思想:
尽管在需求分析中,商品类别仅仅是商品的一个属性,但是数据库设计中一般将其分离出去创建单独的表。这就是面向对象的思想,这种做法有利于系统的扩展,同样的思想也体现在了Admin和Adminrole表的设计中。还有就是由于定单可能包括多种商品。而且数量不一。所以也用两个表来共同体现定单的这个实体。9张表如下:
3.2.3业务模式
系统分为两大功能模块:前台和后台管理员。前台包括商品信息模块、用户信息管理模块。后台有管理员信息、商品信息用户信息、销售管理等模块。后台数据库管理系统采用SQL 2000。
·查询系统:
采用浏览器-Web应用服务器-数据库服务器三层结构,供用户、各管理员在网上查询信息,编程技术主要运用C#.net
·管理系统:
采用B/S结构,供管理员对用户和商品的各种信息进行输入、查询和更新和删改的操作,实现工具主要是ASP.NET。应用程序通过ODBC与SQL2000相连。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。
B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如CA证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。服务器负责有效地管理系统的资源,其任务集中于:
a. 数据库安全性的要求。
b. 数据库访问并发性的控制。
c. 数据库前端的客户应用程序的全局数据完整性规则。
d. 数据库的备份与恢复。
4.模块设计、分析、开发
4.1主页面设计
主页面是直接展示给用户的部分。在这一模块中,主要包括以下自定义控件和页面的实现:
页面头部控件(HeadMenu.ascx):主要包括登录链接和搜索框
商品分类导航控件(CategoryList.ascx):显示所有商品的列表,作为页面的左侧导航目录。
4.1.1页面头部控件设计
页面头部控件是为了方便用户快速导航到某个页面的,在HeaderMenu.ascx的设计中,具有技巧性的地方是如何展示给登录用户和匿名用户不同的导航条,为了区别登录用户和匿名用户,在HeaderMenu.ascx中将匿名用户所拥有的链接放在一个Span容器中,并将Span设为“Runat=Server”,这样就方便在代码中对去是否可见进行控制。同样,将登录用户需要的链接也放在另一个Span中。另
外,“搜索”也是一个超级链接,但它并非链接到某个Url。而是执行一条JavaScript语句“javascript:searh.submit()”,即把页面提交。如下图所示:
控件代码的实现
在HeaderMenu的代码中,主要是判断用户的情况并控制Span容器的可见性。在HeaderMenu.ascx.cs中定义了下面的方法:
void showButton() { //是否是匿名用户 if (Request.IsAuthenticated != true) { //登录用户区域不可见 areaLoggedIn.Visible = false; //匿名用户区域可见 areaLoggedOut.Visible = true; } else { areaLoggedIn.Visible = true; areaLoggedOut.Visible = false; } }
这样在窗体加载即执行Pvage_Load()是调用上面的方法就可以实现效果了:
Private void Page_Load(object sender,System.EventArgs e)
{
showButton();
}
4.1.2 商品分
类导航控件的设计
该控件显示所有商品的分类,单击目录中某个商品类别是将显示相应类别的商品列表页面。在CategoryList.ascx中主要用到了DataList控件,它用来绑定数据源。
控件代码的实现
private void Page_Load(object sender, System.EventArgs e)
{
// 设置目录的选定项
string selectionID = Request.Params["selection"];
if ( selectionID != null)
{
MyList.SelectedIndex = Int32.Parse(selectionID);
}
//将数据源绑定至DataList控件
MyList.DataSource = BLL.Product.GetCategoryList();
MyList.DataBind();
}
可以看到,MyList的绑定数据源是方法GetCategoryList()的返回值,这个方法在BLL层中的Product类中,他调用数据库的存储过程GetCatergoryList。
4.2 商品信息模块页面
分类显示商品显示某种类型的所有商品。
ProductList.aspx页面的布局和首页基本相似,不同的是,在页面的中心位置放置了一个Reperter控件来绑定数据源,Repeater控件中用一个表格的第一行作为它的HeaderTemplate,而ItemTempmlate项中绑定了数据源的相应字段。“购物”也是通过超级链接来实现页面的传递。主要代码如下:
//页的大小 private static int PageSize = 5; private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsPostBack) { //显示第一页的记录 ShowResult(0, PageSize); } } void ShowResult(int pageIndex, int pageSize) { /绑定Repeater控件 products.DataSource = BLL.Product.GetProductsByCategory(int.Parse(Request.QueryString["categoryId"](pageSize, pageIndex); products.DataBind(); //调用Product类中的方法获得该类商品的总数 int resultCount = BLL.Product.GetProductCountByCategory(int.Parse(Request.QueryString["categoryId"])); int count; //如果查询结果总数是页大小的整数倍 if (resultCount%PageSize == 0) { count = resultCount/PageSize; PageCount.Text = count.ToString(); } else { count = resultCount/PageSize+1; PageCount.Text = count.ToString(); } page.Items.Clear(); //绑定页码到DropDownList控件 for(int i=0; i<count; i++) { ListItem item = new ListItem((i+1).ToString(), i.ToString()); page.Items.Add(item); } page.SelectedIndex = pageIndex; }
4.3 用户信息管理模块设计
4.3.1登录页面设计
图5 用户登录界面
在这个系统中采用Froms验证方式,当自定义的验证程序确认用户身份时,可以让Froms验证系统发出Cookie,Cookie中除了包含验证票据之外,还可以通过程序写入被验证用户的标识信息,比如用户编号,然后使用该Cookie访问个人的信息。Forms验证方式还可以保证有权限要求的页面无法被匿名用户访问。例如,密码修改页面(ChangePwd.aspx)不能被匿名用户访问,要达到上诉目标,需要在配置文件Web。Config里面创建一个项。代码如下:
<!_验证方式为Forms_>
<authentication mode=”Forms”>
<formsname=”eshop” loginUrl=”signIn.aspx”protecon=”all”path=”/”/>
</authentication>
需要注意的是,<forms>标记中,name的值为验证系统所发出的Cookie的名称,loginUrl表示匿名用户被重定向到的页面的地址。如何防止ChangPwd不被匿名用户直接访问呢,也需要创建下面的项:
<location path=”ChangePwd.aspx”> <system.web> <authorization> <!--拒绝匿名用户--> <deny user=”?”/> </authorization> </system.web> </location> 同样,用户可以注销验证信息,注销页面(SignOut.aspx)代码如下: private void Page_Load(object sender, System.EventArgs e) { //注销验证信息 System.Web.Security.FormsAuthentication.SignOut(); //清空Session Session.Clear(); //返回首页 Response.Redirect("default.aspx"); }
4.3.2 注册页面的设计
注册新用户时候,仅需输入最基本的信息,个人详细资料在注册之后再进行修改,Register.aspx的界面主要是接收一些用户输入的文本框,以及相应的验证控件、“注册”按钮和显示提示信息的Lable控件。
图6 注册页面
代码的实现:通过存储过程AddNewUser实现注册的功能:
CREATE PROCEDURE AddNewUser ( @username nvarchar(50), @password nvarchar(50), @question nvarchar(50), @answer nvarchar(50), @result int output ) AS /*是否存在相同的用户名*/ if not exists (SELECT * FROM USERINFO WHERE USERNAME=@USERNAME ) BEGIN /*插入新的用户记录*/ INSERT INTO USERINFO (USERNAME, USERPWD, QUESTION, ANSWER) VALUES (@USERNAME, @PASSWORD, @question, @answer) /*将Result赋值为新添加用户的UserId*/ SELECT @result = SCOPE_IDENTITY() END ELSE BEGIN SET @RESULT = -1 END
该存储过程带有输出参数,如果有相同的用户存在,输出参数为-1,否则,输出的参数的值为该用户的UserID。在User类中定义方法AddNewUser()调用AddNewUser存储过程,
4.4购物车功能的设计与实现
在前面的流程图中,我们可以看到这个购物流程是不允许匿名用户拥有购物车的,匿名用户注册并登录之后,才能使用购物车。登录用户的购物车编号CartID为用户编号。CartID生成过程中用到了Cookie,Cookie是用来保存个人信息的对象,它存在于客户端。针对购物车的功能,设计了ShoppingCart类,其中定义了GetShoppingCartID(),代码如下:
public String GetShoppingCartID() { HttpContext Context = HttpContext.Current; // 如果该用户已经通过验证后登录了系统, 那么以该用户的UserID作为购物车ID if (Context.User.Identity.Name != "") { Response.Redirect("/esop/SignIn.aspx"); } if (Context.Request.Cookies["ShoppingCartID"] != null) { return Context.Request.Cookies["ShoppingCartID"].Value; } 在数据库中定义了存储过程ShoppingCartAddItem,实现向购物车添加商品的功能,代码如下: CREATE Procedure ShoppingCartAddItem ( @CartID nvarchar(50), @ProductID int, @Quantity int ) As DECLARE @CountItems int SELECT @CountItems = Count(ProductID) FROM ShoppingCart WHERE ProductID = @ProductID AND CartID = @CartID IF @CountItems > 0 /* 该购物车中已有该商品的记录,更新数量 */ UPDATE ShoppingCart SET Quantity = (@Quantity + ShoppingCart.Quantity) WHERE ProductID = @ProductID AND CartID = @CartID ELSE /* 该购物车中没有这个商品的记录,插入新记录 */ INSERT INTO ShoppingCart ( CartID, Quantity, ProductID ) VALUES ( @CartID, @Quantity, @ProductID ) GO
4.5 购物车的结算设计与实现
图
7 商品结算界面
如果用户的预存款金额不足够支付本次购物,则会出现“存款不足”的提示如果能够支付,则生成新的订单,实现预存款支付订单的存储过程代码如下:
CREATE PROCEDURE PayOrder @userId int, @totalcost decimal, @result int output AS DECLARE @tmp decimal /*@tmp为当前用户预存款金额*/ SELECT @tmp = acount FROM UserInfo WHERE userID = @userId /*如果预存款不足*/ IF @tmp <@totalcost BEGIN /*置标志为-1*/ SET @result = -1 END /*预存款足够支付,扣除相应的金额*/ ELSE BEGIN UPDATE UserInfo SET acount = acount -@totalcost WHERE userId= @userId /*置标志为1*/ SET @result = 1 END GO
4.6查询销售情况页面的设计
模块的查询支持按月查询、日查询。查询的结果是每种商品的相关的定单数、售出数量和销售收入。页面主要包括3个DropDownList,分别用来选择年、月、日,两个按钮分别进行按月查询和按日查询,以及显示查询的结果的DataGrid。页面第一次加载时,显示日期为当前日期,并绑定到当前的销售情况。
图8销售情况图
代码的实现
查询销售情况的存储过程定义为GetSails,有3个输入参数,分别为@year(年)、@month(月)、@day(日)。当@day为0时,表示查询月记录,否则为查询当日记录。
在adminDB类中定义GetSails()方法调用上面的GetSails存储过程,并返回记录集。代码如下:
public DataSet GetSails(string year, string month, string day) { SqlParameter[] para = { new SqlParameter("@year", int.Parse(year)), new SqlParameter("@month", int.Parse(month)), new SqlParameter("@day", int.Parse(day)) }; return eshop.DAL.SQLHelper.ExecuteDataset(eshop.DAL.SQLHelper.CONN_STRING, CommandType.StoredProcedure, "GetSails", para); } 在用户表示层,首先需要绑定选择日期的DropDownList。定义BindDate()方法,代码如下: void BindDate() { //绑定年 for (int i=2007; i<2020; i++) { ListItem item = new ListItem(Convert.ToString(i),Convert.ToString(i)); Year.Items.Add(item); } //绑定月 for (int i = 1 ; i<13 ; i++) { ListItem item1 = new ListItem(Convert.ToString(i),Convert.ToString(i)); Month.Items.Add(item1); } //绑定日 for (int i=1; i<32; i++) { ListItem item2 = new; Day.Items.Add(item2); } } 此外,定义绑定DataGrid的方法BindGrid(): void BindGrid(string year, string month, string day) { GridSails.DataSource = new AdminDB().GetSails(year, month, day); GridSails.DataBind(); } 在页面加载时间处理方法Page_Load()中对数据进行绑定,并显示当前日期以及当日销售记录: private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsPostBack) { BindDate(); //绑定当天记录 BindGrid(DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString(), DateTime.Now.Day.ToString()); //显示为当前日期 Year.SelectedValue = DateTime.Now.Year.ToString(); Month.SelectedValue = DateTime.Now.Month.ToString(); Day.SelectedValue = DateTime.Now.Day.ToString(); //插入日志 AdminDB.InsertAction("查看当日销售记录", System.DateTime.Now, User.Identity.Name); } } 最后,在两个按钮单击事件处理方法中添加绑定数据以及插入日志的代码: //查询所选日期的月销售记录 private void QueryMonth_Click(object sender, System.EventArgs e) { BindGrid(Year.SelectedValue, Month.SelectedValue, "0"); AdminDB.InsertAction("查看"+Year.SelectedValue+"年"+Month.SelectedValue+"月" + "的销售记录", System.DateTime.Now, User.Identity.Name); } //查询所选日期的日销售记录 private void QueryDay_Click(object sender, System.EventArgs e) { BindGrid(Year.SelectedValue, Month.SelectedValue, Day.SelectedValue); AdminDB.InsertAction("查看"+Year.SelectedValue+"年"+Month.SelectedValue+"月" + Day.SelectedValue +"日的销售记录", System.DateTime.Now,User.Identity.Name }
5.结果测试,性能分析
5.1 测试主页面
图9 主页面
主页面是直接面向所有用户的页面,所有的用户都可以在这里查询和搜索所需要的商品信息。已经注册了的用户可以进行登录操作。
5.2测试登录页面
用户修改、查看自己的信息时,必须先进行登录,如下图所示。
图10用户登录入页面
如果是注册了的用户,进入个人信息管理界面,在这里,用户可以修改自己的密码和个人资料,查看自己的购物记录和账户里还有多少钱。如下图所示:
图11 用户个人信息页面
如果是没有注册的用户点击图10中的注册新用户,进入用户注册页面,如下图:
图12 用户注册页面
单击注册,注册成功,转入个人信息页面。如图5.2-2
图13管理员登陆页面
登录成功后,进入管理员功能项目模块页面,如下图:
图14 管理员功能项目模块页面
这个页面中,管理员可以进行修改自己的密码,高权限管理员可以添加,删除底权限的管理员。可以添加商品,删除商品。查看、修改用户、商品信息。
5.3测试购物车
在向购物车中添加商品前,购物车是空的。如下图:
图15 添加商品前的购物车图
添加商品后,购物车中出现了添加商品的名称,数量,价格。如下图:
图16添加商品后的购物车图
5.4测试查询销售情况
查询商品的销售情况,可以查询销售商品的编号、商品名称、销售数量和销售金额。可以按月查询,也可以按日查询。
图17 查询销售情况页面
5.5测试查询、修改用户信息页面
管理员才具有的权限。能够查看用户的基本信息、添加用户的预存款,管理员只能添加用户的预存款,无权渐少用户的预备存款,当管理员向预备存款中输入存款数目时候,点击更新,输入的预存款为以前的存款加上刚输入的存款,输入的存款不能为负数。所以管理员不能减少用户的预备存款如下:
图18 查询、修改用户信息页面
上图中用户名为WPC的用户现在预存款为10000元,点击编辑按钮,把预存款增加20000元,再更新,预存款就变为30000元。如下图:
图19查询、修改用户信息后的页面
结 论
论文简要介绍了典型B/S电子商务网上购物系统的主要体系结构及功能模块,讨论了系统开发工具、开发语言技术以及系统的数据库建设,系统流程图,功能模块的代码分析和系统功能的测试。这些过程的讨论和分析,让大家对系统的体系结构,功能模块等有了更深的了解。
省略
参考文献
[1] 陈世明,江高举. ASP.NET从入门到精通[M].北京:中国铁道出版社,2002。
[2] 黄明,梁旭. ASP.NET信息系统设计与开发实例[M].北京:中国工业出版社,2005。
[3] 任新见. ASP.NET动态网站快速开发实务[M].北京:电子工业出版社,2004。
[4] 石志国. ASP.NET内幕技术[M].北京:机械工业出版社,2003。
[5] 苏贵洋,黄穗,何莉. ASP.NET网络编程从基础到实践[M].北京:北京电子工业出版社,2005。
[6] 王华杰,孙一波.C#数据库开发[M].北京:清华大学出版社,2003。
致 谢
省略
本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。
序号 | 毕业设计全套资源(点击下载) |
---|---|
本项目源码 | 基于C#+asp.net+sqlserver的电子商务网上购物系统设计与实现(源码+文档)_C#_BS架构_网上购物系统.zip |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。