重庆大学网络教育学院
毕业设计(论文)
题目 网上书店设计与实现
学生所在校外学习中心 四川广安校外学习中心 批次 层次 专业 121专科起点本科 计算机科学与技术 学 号 W12111558 学 生 吴 清 指 导 教 师 屈 松
起 止 日 期 2013 年7月1日至 2013年8月21日止
摘 要
网上书店系统是一个基于ASP.NET技术和SQL Server数据库开发的系统。本论文首先介绍了网上书店系统开发的背景,然后详细描述了系统分析和数据库设计,最后又详细介绍了网上书店系统的模块设计与实现。通过本系统管理员可以通过Web浏览器进入后台,实现网上图书添加、删除、图书分类管理及定单管理、用户管理等功能和用户登录、注册,在站内进行搜索等功能。系统运行后,操作界面简单流畅,实用性强。
关键词:网上书店 数据库
目 录
摘要 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„II 1 绪论 ...................................................................... 1 1.1 课题背景 ................................................................ 1 1.2 开发目标 ................................................................ 1 2 系统分析 .................................................................. 2 2.1 需求分析 ................................................................ 2 2.2 可行性分析 .............................................................. 2 2.2.1 需求可行性 ............................................................ 2 2.2.2 技术可行性 ............................................................ 2 3 总体设计 .................................................................. 4 3.1 设计方案 ................................................................ 4 3.2 数据库设计 .............................................................. 4 3.2.1 数据库概念设计 ........................................................ 4 3.2.2 数据库E-R图 ........................................................... 5 3.2.3 数据库逻辑结构设计 .................................................... 5 3.3模块划分 ................................................................. 7 4 实现数据库访问层 ......................................................... 11 4.1 一般数据库操作的封装 ................................................... 11 4.2存储过程操作的封装 ...................................................... 13 5 详细设计与实现 ........................................................... 15 5.1 用户管理模块 ........................................................... 15 5.1.1 用户注册 ............................................................. 15 5.1.2 用户登录 ............................................................. 17 5.1.3 找回丢失密码 ......................................................... 18 5.1.4 修改个人信息 ......................................................... 19 5.2 图书管理模块 ........................................................... 20 5.2.1 管理图书类别 ......................................................... 20 5.2.2 添加、删除、修改图书信息 ............................................. 21 5.2.3 列表显示图书 ......................................................... 22 5.2.4 搜索图书 ............................................................. 23 5.3 购物车管理模块 ......................................................... 25 5.3.1 查看购物列表 ......................................................... 25 5.3.2 结账 ................................................................. 26 5.4 订单管理模块 ........................................................... 27 5.4.1 客户订单管理 ......................................................... 28 5.4.2 管理员订单管理 ....................................................... 29 5.5 后台管理模块 ........................................................... 31 5.5.1 查询用户信息 ......................................................... 32 5.5.2 查询销售情况 ......................................................... 33 6 系统测试 ................................................................. 35 6.1 单元测设 ............................................................... 35
6.2 集成测试 ............................................................... 35 结论 ....................................................................... 37 致谢 ....................................................................... 33 参考文献 ................................................................... 39
1 绪论
1.1 课题背景
随着网络技术的迅猛发展,越来越多的人热衷于上网,网上购物俨然已成为一种时尚和潮流。人们只要打开电脑,轻点鼠标,登录到购物网站,即可突破地域的限制,恣意遨游于信息的海洋。书籍作为一种文化的载体、智慧的结晶,也加入到了网络购物的热潮之中,越来越多的网上书店诞生了,并且生机勃勃。 1.2 开发目标
在Visual Studio 2010开发工具和SQL Server 2008数据库软件基础上,采用ASP.NET语言,开发一套网上书店系统,实现管理员可以通过Web浏览器进入后台,实现网上图书添加、删除、图书分类管理及定单管理、用户管理等功能,以及用户登录、注册,在站内进行搜索等功能。
2 系统分析
2.1 需求分析
网上书店系统包括如下基本功能:
用户注册和登录:为用户提供注册、登录、找回丢失密码、修改个人信息等功能。
图书信息查询及管理:对信息进行灵活的分类、存储,方便用户迅速从少则几万,多则几十万甚至上百万种图书中找出自己所需图书。
购物车管理:用语存储用户选择好的图书,完成购物后可以自动生成订单以供管理者进行管理。
订单管理:为用户提供订单查询功能,同时为管理者提供订单查询功能及处理功能。
后台管理:为管理者提供用户信息查询和销售情况查询等功能。 2.2 可行性分析 2.2.1 需求可行性
网上书店为人们提供了诸多方便。
更加广阔的环境:人们不受时间、空间的限制,不受传统购物的诸多限制,可随时随在网上交易。
更加广阔的市场:在网上这个世界将会变得很小,一个商家可以面对全球的消费者,而一个消费者可以在全球的任何一家商家购物。
更加快速的流通和低廉的价格:电子商务减少了商品流通的中间环节,节省大量开支,从而大大降低了商品流通和交易成本。
更加符合时代要求:如今人们越来越追求时尚、讲究个性,注重购物的环境,网上购物,更能体现个性化的购物过程。
综合应用所学知识,构建网上书店系统,并重点实现网上书店系统所涉及的功能,从而使本人把所学的理论知识能够很好的运用到实践当中。 2.2.2 技术可行性
近年来随着Internet技术的飞速发展及用户需求的不断升级,Web页面技术也
不断的推陈出新,使得Web站点的功能越来越强大,能够提供的服务种类越来越繁多。从HTML、Client Script 到CGI,从JAVA的诞生到ActiveX, Web页面设计人员不断受到冲击,微软公司在总结了以往技术,重新思考Web页面设计的真正需要后,推出了Active Server Pages (ASP),一种用以取代CGI(Common Gateway Interface,通用网关接口)的技术。
简单讲,ASP是位于服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式 Web 服务器应用程序,如交互式的动态网页,包括使用 HTML 表单收集和处理信息,上传与下载等等。更重要的是,ASP使用的ActiveX技术基于开放设计环境,用户可以自己定义和制作组件加入其中,使自己的动态网页几乎具有无限的扩充能力,这是传统的Web编写工具所远远不及的地方。使用ASP还有个好处,就在于ASP可利用ADO(Active Data Object,微软的一种新的数据访问模型)方便快捷地访问数据库,从而使得开发基于WWW的应用系统成为可能,这也是本系统选择ASP作为开发工具最重要的原因之一。
3 总体设计
3.1 设计方案
为实现需求分析中所提到的网上书店的功能,本系统分为4层,分别为表示层(由ASP.NET Web 窗体组成,主要用于显示信息和与用户交互)、商务逻辑层(用于抽象表示层功能,为表示层提供服务)、数据访问层(为商务逻辑层提供访问数据库系统的接口)和系统数据库。
表示层页面包括3类:用户处理相关图书信息的Book*.aspx、用于处理用户信息的User*.aspx页面、用于实现管理的Manage*.asp页面。
商务逻辑层包含Book.cs、User.cs、ShopCart.cs、Order.cs、Admin.cs文件,分别封装了为实现对图书、用户、购物车、订单、管理进行操作而需要的方法。该层可以直接访问数据访问层,并为表示层提供了访问接口,起到了表示层和数据访问层的桥梁的作用。
数访问层包含了SqlAcess.cs文件,封装了对SQL Server2008数据库中数据的读取和对储存过程的操作。
图3.1 系统分层图
3.2 数据库设计 3.2.1 数据库概念设计
该系统的数据库中涉及到的实体有:图书、用户、购物车、订单。
图书的属性有:图书类别、图书名称、图书作者、图书译者、图书出版社、图书价格、
图书封面、图书介绍。
用户的属性有:用户角色、用户名称、用户真名、用户密码、用户邮箱、用户提示问题、提示问题答案。
购物车的属性有:图书编号、图书名称、图书价格、购书数量。
订单的属性有:订单日期、订单总额、所购图书名称、所购图书单价、所购图书数量。
3.2.2 数据库E-R图
图3.2 数据库E-R图
3.2.3 数据库逻辑结构设计
本系统是典型的电子商务系统,数据库包含6个表。 ① 图书类别表(e-BookCategory)
网站的图书种类繁多,用图书类别表存储网站图书种类信息,可以简化图书管理。该表字段说明如下表3.1所示:
表3.1 图书类别表
② 图书信息表(e-Booklnfo)
图书信息表存储网站图书具体信息,该表引用BookCategory表的CategoryId字段作为外键,具体字段说明如下表3.2所示:
表3.2 图书信息表
③ 订单表(e-Order)
订单表用以存储用户订单,引用Userlnfo表中的UserId字段作为外键,其具体字段内容如下表3.3所示。
表3.3 订单表
④ 订单信息表(e-Orderlnfo)
订单信息表包含具体订单信息,引用BookInfo表的BookId作为外键,具体字段说明如下表3.4所示:
表3.4 订单信息表
⑤ 购物车表(e-ShopCart)
购物车表主要存储网站用户购物车信息,该表引用Booklnfo表的BookId作为外键,其具体字段说明如下表3.5所示:
表3.5 购物车表
⑥ 用户信息表(e-Userlnfo)
用户信息表主要用于储存网站用户信息,字段说明如下表3.6所示。
表3.6 用户信息表
3.3模块划分
该系统的整体模块组织图所示。
图3.3 管理员功能设计图
图3.4普通用户功能设计图
该系统为普通用户和管理员提供了不同的操作界面,为普通用户设计的操作界设计面如下图3.5所示,为管理员设计的操作界设计面如图3.6所示。
图3.5 普通用户界面设计图
图3.6 管理员操作界面图
普通用户界面划分为修改信息、修改密码、管理购物车、管理订单、搜索等模块,管理员界面划分为修改信息、修改密码、管理图书类别、增加图书、管理图书信息、管理订单、管理用户信息、查询销售信息和搜索等模块。
4 实现数据库访问层
在动态网页设计中,很多都要涉及到对数据库的操作,这是一件枯燥、费时、而且容易出错的工作,如果使用类来实现对数据库操作的封装,就可以使写出的程序在很小的改动下完成后台数据库的操作。 4.1 一般数据库操作的封装
SqlAcess.cs文件中封装了对一般数据库的操作,下面简单介绍下该文件中的主要数据库访问函数。
ExecuteNonQuery函数
该函数执行Sql命令,参数为连接字符串connString、命令类型cmdType、存储过程名称或T-SQL命令cmdText、SQL参数组cmdParms,返回值为受影响的行数val。 public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand(); //定义SqlCommand对象
using (SqlConnection conn = new SqlConnection(connString)) //定义SqlConnection
对象
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
//调用PrepareCommand方法
}
}
int val = cmd.ExecuteNonQuery(); //调用执行查询方法 cmd.Parameters.Clear(); //清空参数 return val; //返回val
ExecuteReader函数
该函数执行Sql命令,参数为连接字符串connString、命令类型cmdType、存储过程名称或T-SQL命令cmdText、SQL参数组cmdParms,返回值为SqlDataReader数据集。 public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlConnection conn = new SqlConnection(connString);//定义SqlConnection对象 try {
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
//调用PrepareCommand方法
}
}
catch //捕获异常 { }
conn.Close();//关闭链接 throw;//抛出异常
SqlDataReader rdr = md.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear();//清空参数 return rdr;//
ExecuteDataset函数
该函数通过SqlConnection执行Sql命令,参数为SqlConnection对象connection、命令类型cmdType、存储过程名称或T-SQL命令cmdText、SQL参数组cmdParms,返回值为DataSet数据集。
public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
//创建一个SqlCommand对象,并对其进行初始化 SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, //创建SqlDataAdapter对象以及DataSet SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); //填充ds da.Fill(ds);// 清除cmd的参数集合 cmd.Parameters.Clear();
commandText, commandParameters);
}
PrepareCommand函数
该函数完成数据库的连接和对命令的执行,供以上函数调用。
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{ }
//判断连接的状态。如果是关闭连接,则打开 if (conn.State != ConnectionState.Open)
conn.Open();//关闭连接
//cmd属性赋值 cmd.Connection = conn; cmd.CommandText = cmdText; //是否需要用到事物处理 if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType; //添加cmd需要的存储过程参数 if (cmdParms != null) { }
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
4.2存储过程操作的封装
网上书店系统的商务逻辑层调用数据访问层函数,完成对SQL Server数据库中存储过程的操作,这是因为使用存储过程封装应用有以下优点。 代码模块化,以减少数据库操作员和程序员的错误。 提高数据库安全性。
减少网络通信流量。 移植性较强。
5 详细设计与实现
5.1 用户管理模块
用户管理是一个网上书店系统补课缺少的部分,该模块主要实现用户注册、用户登录、找回丢失密码和修改个人信息等功能,用户管理模块主要包括以下页面。 用户注册页面UserRegister.aspx,代码隐藏文件为UserRegister.aspx.cs。 用户登录页面UserLogin.aspx,代码隐藏文件为UserLogin.aspx.cs。
找回丢失密码页面UserGetPassWord.aspx。代码隐藏文件UserGetPassWord.aspx.cs。 修改个人信息页面UserChangeInfo.aspx,代码隐藏文件为UserChangeInfo.aspx.cs。
图5.1 User类中的主要函数列表
5.1.1 用户注册
在如图5.2所设计的各项文本框中输入对应信息,然后单击【注册】按钮,可以注册新用户。
图5.2 用户注册界面设计图
用户注册的功能由函数AddUser_Click实现。函数AddUser_Click代码如下,该段代码保存在UserRegister.aspx.cs文件中。
protected void AddUser_Click(object sender, System.EventArgs e)
{
//得到用户注册信息
string userName = LoginName.Text.Trim();//定义用户名 string password = Password.Text.Trim();//定义密码 string question = Question.Text.Trim();//定义问题 string answer = Answer.Text.Trim();//定义问题答案
string userrealname=UserRealName.Text.Trim();//定义用户真实姓名 string email=Email.Text.Trim();//定义邮件地址 string role="用户"; User user = new User();
int userId = user.RegisterUser(userName, password, question,
answer,userrealname,email,role);//得到用户ID
//如果返回值为-1,表示用户名已经存在 if (userId == -1) {
}
Message.Text = "您注册的用户已经存在";
else {
//设置用户为通过验证
System.Web.Security.FormsAuthentication.SetAuthCookie(userId.ToString(),false);
}
}
//迁移购物车记录
//将用户重定向至用户帐户页面 Response.Redirect("UserLogin.aspx");
5.1.2 用户登录
在为用户登录所设计的图5.3中,输入对应信息,然后单击【登录】按钮,可以完成用户登录。
图5.3 用户登录界面设计图
用户登录的功能由函数LoginUser_Click实现,函数LoginUser_Click代码如下,该段代码保存在UserLogin.aspx.cs文件中。
protected void LoginUser_Click(object sender, System.EventArgs e)
{//实体化User对象
User user = new User();
int userId = user.Login (LoginName.Text,Password.Text);//注册用户 Session["UserRole "]=user.GetUserRole(userId);//得到用户角色 if (userId == 0)//如果返回为空
{ } else {
lblMessage.Text = "您输入的用户或密码有误";
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(userId.ToString(), }
}
CheckCookie.Checked);
5.1.3 找回丢失密码
在如图5.4所设计的【用户名】、【提示问题】、【问题答案】和【E-mail】文本框中输入对应信息,然后单击【提交】按钮,即可完成用户找回丢失密码的操作。
图5.4 找回丢失密码界面
用户找回丢失密码的功能由函数Submit_Click实现。函数Submit_Click代码如下所示。该段代码保存在UserGetPassWord.aspx.cs文件中。其中User类中的GetBackPassword函数具体内容代码保存在了User.cs中。
protected void Submit_Click(object sender, System.EventArgs e)
{//实例化user对象
User user = new eBookShop.User();
int result = user.GetBackPassword(LoginName.Text.Trim(),
Question.Text.Trim(),Answer.Text.Trim(), Email.Text);//得到密码
}
if (result == 1)//如果返回1 { } else { }
Message.Text = "您的输入信息有误";//提示失败
Message.Text = "您的6位密码已发送,请到邮箱查收";//提示成功
5.1.4 修改个人信息
在程序执行后的界面如图5.5所示,在真实姓名、问题、答案、E-mail文本框中输入对应信息,然后单击【提交】按钮,即可完成用户个人信息的修改。
图5.5 修改个人信息界面
修改个人信息的功能由函数UpdateUserInfo实现。函数UpdateUsernfo代码如下所示,这段代码保存在文件UserInfo.aspx.cs中。
void UpdateUserInfo()
{ //实例化user对象
User user = new User();
user.ChangeProfile(User.Identity.Name, RealName.Text,
Question.Text,Answer.Text , Email.Text);//改变用户信息
}
5.2 图书管理模块
图书管理是系统的重要组成部分,它主要实现图书类别的添加和删除,图书的添加、
删除和修改,列表显示图书,图书搜索等功能。
图5.6 Book类的主要函数列表
5.2.1 管理图书类别
图书类别管理的执行流程如图5.7所示。在如图5.8所示的图书类型文本框中输入图书类型信息,然后点击【添加】按钮,可以完成图书类型的添加操作。
图5.7 图书类别管理的执行流程
图5.8 管理图书类别
添加图书类型的功能由函数Add_Click实现,Add_Click函数代码保存在ManageBookType.aspx.cs文件中。 5.2.2 添加、删除、修改图书信息
添加、删除、修改图书信息的执行流程如图5.9所示。
在本节代码实现后,如图5.9所示的【图书名称】、【作者】、【译者】、【出版社】、【价格】、【介绍】文本框中输入对应信息,并单击【浏览】按钮,选择图书封面后单击【确定】
按钮,选择图书类别,然后单击【添加】按钮,即可完成新书的添加操作。
图5.9 添加、删除、修改图书信息的执行流程
图5.10 添加图书实现图
5.2.3 列表显示图书
图书列表显示功能由 DataListBind函数实现,函数 DataListBind(代码如下,该段代码保存在文件BookByType.aspx.cs中。
void DataListBind()
{
dl_BookByType.DataSource=Product.GetBookByCategory(int.Parse(ViewState["BookType
Id"].ToString()) );//设置数据源
dl_BookByType.DataBind();//绑定数据
}
图5.11为按类别列表显示信息的界面实现图。
图5.11 列表显示图书图
5.2.4 搜索图书
搜索图书的流程如图5.12所示,在如图5.13所示的【图书名称】、【作者】、【译者】、【出版社】文本框中输入对应信息,在【图书类型】下拉列表框中选择图书种类,然后单击【查找】按钮以实现搜索功能。
图5.12搜索图书的执行流程
图5.13 搜索图书
图5.14 搜索结果
图5.14以列表形式实现了显示搜索结果的程序,图书具体搜索功能由函数Bind实现。 5.3 购物车管理模块
购物车模块使用户可以在购物时随时查看自己购买的商品,并可以随时添加和删除所购买的商品。
图 5-15 ShopCart类中的主要函数列图
5.3.1 查看购物列表
查看购物列表的执行流程如图5.16所示。用户可以通过点击图书旁边的“加入购物
车”按钮,将图书加入购物车。图5.17显示了用户购物车,具体包括图书编号、图书名称、价格、数量、总金额记忆合计金额等内容。
图5.16 查看购物车列表的执行流程
图5.17 查看购物车列表
购物车列表显示功能由函数showshopcart 实现,该代码保存在MyShopCart.aspx.cs中。 5.3.2 结账
用户结账的执行流程如图5.18所示。图5.19为购物车结账界面,结账功能的实现与前面查看购物列表功能实现相似。
图5.18 用户结账的执行流程
图5.19 购物车结账界面
图5.19为代码实现后的截图,如果提交的购物记录出错,可跳转到购物车列表程序,而后再选择对现有的数据库的删除与修改操作。 5.4 订单管理模块
图5.20 订单Orders类中的主要函数列图
5.4.1 客户订单管理
查询客户信息的执行流程如图5.21所示。图5.22显示了客户所提供的订单,包括订单号、订单时间、订单总额等信息。
图 5.21 查询客户信息的执行流程
图5.22 客户订单浏览设计图
客户订单浏览功能在函数page_load中实现,其代码如下所示,该段代码保存在MyOrder.aspx.cs文件中。
protected void Page_Load(object sender, System.EventArgs e)
{
string userID = User.Identity.Name;//得到用户ID
Orders orderHistory = new Orders();//创建Orders对象
}
MyList.DataSource = orderHistory.GetOrderList(userID);//设置数据源 MyList.DataBind();//数据绑定
if (MyList.Items.Count == 0)//判断订单是否为空 { }
MyList.Visible = false;
MyError.Text = "您没有订单记录";
单击查询按钮可以查看具体某条订单的细节,如图5.23所示执行结果。
图5.23 客户订单细节浏览
5.4.2 管理员订单管理
订单管理的执行流程如图5.24所示。图5.25的执行结果图为管理员显示了全部客户已经提交的订单,改页面提供了浏览订单详细内容及订单处理的功能。
图5.24 订单管理的执行流程
图5.25 管理员订单浏览
客户订单显示的功能在函数Bind中实现,其代码如下所示。该点代码保存在ManageOrder.aspx.cs文件中。 void Bind()
{
try
{//实例化Orders对象
Orders orders = new Orders ();
DataSet ds = orders.GetAllOrder();//定义DataSet对象
this.Message.Text = "您共有" + ds.Tables[0].Rows.Count.ToString() + "条订
this.Datagrid1.DataSource = ds.Tables[0].DefaultView;//设置数据源′ this.Datagrid1.DataBind();//数据绑定
单";//提示订单条数
通过调用Orders 类的GetAllOrder方法获得全部订单信息,并在列表中显示。 5.5 后台管理模块
后台管理模块包含查询用户信息和查询销售信息,可以通过查询用户信息来增加管理员,通过查询销售信息从总体上了解图书销售数量及金额。
}
} catch { }
this.Message.Text="发生错误";//提示失败
图5.26 Admin类中主要函数图
5.5.1 查询用户信息
查询用户信息的执行流程如图5.27所示。图5.28为管理员提供了用户列表显示及角色管理的功能。角色管理的功能由函数GridUsers_UpdateCommand实现。
图5.27 查询用户信息的执行流程
图5.28 用户管理
GridUsers_UpdateCommand函数代码如下所示,该段代码保存在ManageUser.aspx.cs
文件中。
void GridUsers_UpdateCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string role = ((TextBox)e.Item.FindControl("Role")).Text.Trim();//得到用户角色
}
//获取要更改的用户的UserId
int userId = Convert.ToInt32(GridUsers.DataKeys[e.Item.ItemIndex]); AdminDB admin = new AdminDB();//创建admindb对象 admin.UpdateUserRole(role, userId.ToString());//改变用户角色 GridUsers.EditItemIndex = -1;//退出编辑状态 BindGrid();//绑定
5.5.2 查询销售情况
查询销售情况的执行流程如图5.29所示。图5.30所显示的查询销售情况页面为管理员提供了按月、日查询图书销售种类、数量、金额的功能。
图5.29 查询销售情况的执行流程
图5.30 查询销售情况
该功能主要由函数 BindGrid实现,相关代码保存在ManageSales.aspx.cs文件中。
6 系统测试
6.1 单元测设
测试一:在一般用户登陆时,用户名或密码有一项为空或者填写错误,系统是否出现
预先设定的操作提示。
具体操作:用户名、密码、任意一项为空或者填写有误。 结果:都出现相应的错误原因的信息提示。
结论:要求用户必须填写正确的用户名和密码,才能进入管理页面。 测试二:管理员删除一注册用户后,并让其登陆,看是否登陆成功。 具体操作:管理员删除一会员表中的用户后,该用户在前台登陆。 结果:该用户无法登陆。 结论:用户数据删除功能正常。
测试三:管理员删除一图书的信息,在前台按关键字查询,看是否能找到对应的信息。 具体操作:在图书管理页面中的图书查看与修改页面中删除一图书的信息。 结果:在前台搜索中,按关键字查询不到此书信息。 结论:删除图书信息功能正常。 6.2 集成测试
网上书店的建设基本上就算完成了,但是发现了这样一个事实,一个用户在访问一个网站时一般来讲只对该网站的部分内容感兴趣,而且这种兴趣会持续一段时间。这点启发我们,如果能根据用户的喜好为不同的用户显示其个性化的页面,即着重显示该用户感兴趣的内容,将为用户节约大量的检索时间,而且这样的网页显然是更具有吸引力的。一些站点已经在这方面作出了一定的尝试,通常采用的方法是,在用户登陆时为其提供一系列选项,使用户能够对站点进行一些自主的设置。这样做能够使站点呈现一定程度的个性化,但对用户来讲,仍旧比较烦琐,并且在用户了解一个站点前让其对站点进行设置,其结果未免有些粗糙。于是构想了这样一种方案,对用户登陆后的动作进行跟踪,分析,发掘用户点击规律,即用户先后点击的关联规则,这样,在用户点击一个主题(链接)之后,系统能够自动生成一页面,其中包含了该主题下用户经常关注的内容(若干链接),这样便再无须用户作出任何额外工作的情况下实现了为用户量身订做的个性化页面。
本次课程设计主要完成了网上书店的用户注册、登陆、图书分类浏览、图书信息查询、加入购物车、生成订单等功能,以及管理员的一系列相关操作。以上提出的改进想法以后将继续不断探索和完善。
结论
本系统是在Visual Studio 2010开发工具和SQL Server 2008数据库软件基础上,在同学和老师的帮助下经过许多时间设计完成的。但是仍有一些未实现的功能,如网上支付。但是通过本次网上书店系统的设计与完成,自己在网站建设方面有了很大的提高。望大家多多见谅与包涵,我会努力去学习更多的知识来充实自己,完善自我,相信我以后会做的更好、更理想。
本系统的设计实现中,主要有以下技术亮点:
介绍了表示层、商务逻辑层和数据访问层的设计结构。
图书信息添加、显示模块中,以二进制格式上传、下载图片文件,是ASP.NET的一个
技术难点,也是网上开发中的一个重点。这其中应用了文件对象操作。
DataGrid控件、DataList控件和Repeater控件的使用,使数据显示和更新更加多样
话、灵活化、丰富化。
本系统实现了用户注册、登录、个人信息修改、图书信息管理、购物车管理、订单管
理、销售查询等功能,这些功能是网上购物系统中不可缺少的部分。
致 谢
毕业论文马上就要结束了,在众多老师的谆谆教诲之下,在亲朋好友的鼓励之下,始终以积极的态度面对学习和生活。
本次论文的写作虽稍显枯燥却极富挑战。大家对我的支持鼓励,是我坚持完成本次论文的动力源泉。在此我要特别的感谢我的指导老师屈松老师对我们的指导,感谢老师在我们设计时,给予的帮助。在设计过程中,我遇到了许多困难但是我通过向老师的请教方式以及和同学交流沟通的方式解决了许多问题我还翻阅资料和网上查阅,这次方式使我更加丰富了我的知识面和提高我的求知欲。本课题在选题及研究过程中得到屈松老师的亲切关怀和悉心指导得以完成。指导老师严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深的感染和激励着我。从课题的选择到项目的最终完成,老师都始终给予我悉心的指导和不解的关怀,在此向屈松老师致以诚挚的谢意和崇高的敬意。
参考文献
[1]刘乃琦,王冲.JSP应用开发与实践[M].北京:人民邮电出版社,2012
[2]普雷斯曼.软件工程:实践者研究方法[M].北京:机械工业出版社,2011
[3]胡洁萍,杨树林.在Struts2中实现文件上传的动态跟踪[J],北京印刷学院
学报,2010(6)74-76
[4]tinymce.TinyMCEJavascriptWYSIWYGEditor[EBOL].httptinymce.moxie
code.com,2013
[5]肖建芳.基于B/S三层结构网上书店系统的设计[J],现代电子技
术,2012(22):39-41
重庆大学网络教育学院
毕业设计(论文)
题目 网上书店设计与实现
学生所在校外学习中心 四川广安校外学习中心 批次 层次 专业 121专科起点本科 计算机科学与技术 学 号 W12111558 学 生 吴 清 指 导 教 师 屈 松
起 止 日 期 2013 年7月1日至 2013年8月21日止
摘 要
网上书店系统是一个基于ASP.NET技术和SQL Server数据库开发的系统。本论文首先介绍了网上书店系统开发的背景,然后详细描述了系统分析和数据库设计,最后又详细介绍了网上书店系统的模块设计与实现。通过本系统管理员可以通过Web浏览器进入后台,实现网上图书添加、删除、图书分类管理及定单管理、用户管理等功能和用户登录、注册,在站内进行搜索等功能。系统运行后,操作界面简单流畅,实用性强。
关键词:网上书店 数据库
目 录
摘要 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„II 1 绪论 ...................................................................... 1 1.1 课题背景 ................................................................ 1 1.2 开发目标 ................................................................ 1 2 系统分析 .................................................................. 2 2.1 需求分析 ................................................................ 2 2.2 可行性分析 .............................................................. 2 2.2.1 需求可行性 ............................................................ 2 2.2.2 技术可行性 ............................................................ 2 3 总体设计 .................................................................. 4 3.1 设计方案 ................................................................ 4 3.2 数据库设计 .............................................................. 4 3.2.1 数据库概念设计 ........................................................ 4 3.2.2 数据库E-R图 ........................................................... 5 3.2.3 数据库逻辑结构设计 .................................................... 5 3.3模块划分 ................................................................. 7 4 实现数据库访问层 ......................................................... 11 4.1 一般数据库操作的封装 ................................................... 11 4.2存储过程操作的封装 ...................................................... 13 5 详细设计与实现 ........................................................... 15 5.1 用户管理模块 ........................................................... 15 5.1.1 用户注册 ............................................................. 15 5.1.2 用户登录 ............................................................. 17 5.1.3 找回丢失密码 ......................................................... 18 5.1.4 修改个人信息 ......................................................... 19 5.2 图书管理模块 ........................................................... 20 5.2.1 管理图书类别 ......................................................... 20 5.2.2 添加、删除、修改图书信息 ............................................. 21 5.2.3 列表显示图书 ......................................................... 22 5.2.4 搜索图书 ............................................................. 23 5.3 购物车管理模块 ......................................................... 25 5.3.1 查看购物列表 ......................................................... 25 5.3.2 结账 ................................................................. 26 5.4 订单管理模块 ........................................................... 27 5.4.1 客户订单管理 ......................................................... 28 5.4.2 管理员订单管理 ....................................................... 29 5.5 后台管理模块 ........................................................... 31 5.5.1 查询用户信息 ......................................................... 32 5.5.2 查询销售情况 ......................................................... 33 6 系统测试 ................................................................. 35 6.1 单元测设 ............................................................... 35
6.2 集成测试 ............................................................... 35 结论 ....................................................................... 37 致谢 ....................................................................... 33 参考文献 ................................................................... 39
1 绪论
1.1 课题背景
随着网络技术的迅猛发展,越来越多的人热衷于上网,网上购物俨然已成为一种时尚和潮流。人们只要打开电脑,轻点鼠标,登录到购物网站,即可突破地域的限制,恣意遨游于信息的海洋。书籍作为一种文化的载体、智慧的结晶,也加入到了网络购物的热潮之中,越来越多的网上书店诞生了,并且生机勃勃。 1.2 开发目标
在Visual Studio 2010开发工具和SQL Server 2008数据库软件基础上,采用ASP.NET语言,开发一套网上书店系统,实现管理员可以通过Web浏览器进入后台,实现网上图书添加、删除、图书分类管理及定单管理、用户管理等功能,以及用户登录、注册,在站内进行搜索等功能。
2 系统分析
2.1 需求分析
网上书店系统包括如下基本功能:
用户注册和登录:为用户提供注册、登录、找回丢失密码、修改个人信息等功能。
图书信息查询及管理:对信息进行灵活的分类、存储,方便用户迅速从少则几万,多则几十万甚至上百万种图书中找出自己所需图书。
购物车管理:用语存储用户选择好的图书,完成购物后可以自动生成订单以供管理者进行管理。
订单管理:为用户提供订单查询功能,同时为管理者提供订单查询功能及处理功能。
后台管理:为管理者提供用户信息查询和销售情况查询等功能。 2.2 可行性分析 2.2.1 需求可行性
网上书店为人们提供了诸多方便。
更加广阔的环境:人们不受时间、空间的限制,不受传统购物的诸多限制,可随时随在网上交易。
更加广阔的市场:在网上这个世界将会变得很小,一个商家可以面对全球的消费者,而一个消费者可以在全球的任何一家商家购物。
更加快速的流通和低廉的价格:电子商务减少了商品流通的中间环节,节省大量开支,从而大大降低了商品流通和交易成本。
更加符合时代要求:如今人们越来越追求时尚、讲究个性,注重购物的环境,网上购物,更能体现个性化的购物过程。
综合应用所学知识,构建网上书店系统,并重点实现网上书店系统所涉及的功能,从而使本人把所学的理论知识能够很好的运用到实践当中。 2.2.2 技术可行性
近年来随着Internet技术的飞速发展及用户需求的不断升级,Web页面技术也
不断的推陈出新,使得Web站点的功能越来越强大,能够提供的服务种类越来越繁多。从HTML、Client Script 到CGI,从JAVA的诞生到ActiveX, Web页面设计人员不断受到冲击,微软公司在总结了以往技术,重新思考Web页面设计的真正需要后,推出了Active Server Pages (ASP),一种用以取代CGI(Common Gateway Interface,通用网关接口)的技术。
简单讲,ASP是位于服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式 Web 服务器应用程序,如交互式的动态网页,包括使用 HTML 表单收集和处理信息,上传与下载等等。更重要的是,ASP使用的ActiveX技术基于开放设计环境,用户可以自己定义和制作组件加入其中,使自己的动态网页几乎具有无限的扩充能力,这是传统的Web编写工具所远远不及的地方。使用ASP还有个好处,就在于ASP可利用ADO(Active Data Object,微软的一种新的数据访问模型)方便快捷地访问数据库,从而使得开发基于WWW的应用系统成为可能,这也是本系统选择ASP作为开发工具最重要的原因之一。
3 总体设计
3.1 设计方案
为实现需求分析中所提到的网上书店的功能,本系统分为4层,分别为表示层(由ASP.NET Web 窗体组成,主要用于显示信息和与用户交互)、商务逻辑层(用于抽象表示层功能,为表示层提供服务)、数据访问层(为商务逻辑层提供访问数据库系统的接口)和系统数据库。
表示层页面包括3类:用户处理相关图书信息的Book*.aspx、用于处理用户信息的User*.aspx页面、用于实现管理的Manage*.asp页面。
商务逻辑层包含Book.cs、User.cs、ShopCart.cs、Order.cs、Admin.cs文件,分别封装了为实现对图书、用户、购物车、订单、管理进行操作而需要的方法。该层可以直接访问数据访问层,并为表示层提供了访问接口,起到了表示层和数据访问层的桥梁的作用。
数访问层包含了SqlAcess.cs文件,封装了对SQL Server2008数据库中数据的读取和对储存过程的操作。
图3.1 系统分层图
3.2 数据库设计 3.2.1 数据库概念设计
该系统的数据库中涉及到的实体有:图书、用户、购物车、订单。
图书的属性有:图书类别、图书名称、图书作者、图书译者、图书出版社、图书价格、
图书封面、图书介绍。
用户的属性有:用户角色、用户名称、用户真名、用户密码、用户邮箱、用户提示问题、提示问题答案。
购物车的属性有:图书编号、图书名称、图书价格、购书数量。
订单的属性有:订单日期、订单总额、所购图书名称、所购图书单价、所购图书数量。
3.2.2 数据库E-R图
图3.2 数据库E-R图
3.2.3 数据库逻辑结构设计
本系统是典型的电子商务系统,数据库包含6个表。 ① 图书类别表(e-BookCategory)
网站的图书种类繁多,用图书类别表存储网站图书种类信息,可以简化图书管理。该表字段说明如下表3.1所示:
表3.1 图书类别表
② 图书信息表(e-Booklnfo)
图书信息表存储网站图书具体信息,该表引用BookCategory表的CategoryId字段作为外键,具体字段说明如下表3.2所示:
表3.2 图书信息表
③ 订单表(e-Order)
订单表用以存储用户订单,引用Userlnfo表中的UserId字段作为外键,其具体字段内容如下表3.3所示。
表3.3 订单表
④ 订单信息表(e-Orderlnfo)
订单信息表包含具体订单信息,引用BookInfo表的BookId作为外键,具体字段说明如下表3.4所示:
表3.4 订单信息表
⑤ 购物车表(e-ShopCart)
购物车表主要存储网站用户购物车信息,该表引用Booklnfo表的BookId作为外键,其具体字段说明如下表3.5所示:
表3.5 购物车表
⑥ 用户信息表(e-Userlnfo)
用户信息表主要用于储存网站用户信息,字段说明如下表3.6所示。
表3.6 用户信息表
3.3模块划分
该系统的整体模块组织图所示。
图3.3 管理员功能设计图
图3.4普通用户功能设计图
该系统为普通用户和管理员提供了不同的操作界面,为普通用户设计的操作界设计面如下图3.5所示,为管理员设计的操作界设计面如图3.6所示。
图3.5 普通用户界面设计图
图3.6 管理员操作界面图
普通用户界面划分为修改信息、修改密码、管理购物车、管理订单、搜索等模块,管理员界面划分为修改信息、修改密码、管理图书类别、增加图书、管理图书信息、管理订单、管理用户信息、查询销售信息和搜索等模块。
4 实现数据库访问层
在动态网页设计中,很多都要涉及到对数据库的操作,这是一件枯燥、费时、而且容易出错的工作,如果使用类来实现对数据库操作的封装,就可以使写出的程序在很小的改动下完成后台数据库的操作。 4.1 一般数据库操作的封装
SqlAcess.cs文件中封装了对一般数据库的操作,下面简单介绍下该文件中的主要数据库访问函数。
ExecuteNonQuery函数
该函数执行Sql命令,参数为连接字符串connString、命令类型cmdType、存储过程名称或T-SQL命令cmdText、SQL参数组cmdParms,返回值为受影响的行数val。 public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand(); //定义SqlCommand对象
using (SqlConnection conn = new SqlConnection(connString)) //定义SqlConnection
对象
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
//调用PrepareCommand方法
}
}
int val = cmd.ExecuteNonQuery(); //调用执行查询方法 cmd.Parameters.Clear(); //清空参数 return val; //返回val
ExecuteReader函数
该函数执行Sql命令,参数为连接字符串connString、命令类型cmdType、存储过程名称或T-SQL命令cmdText、SQL参数组cmdParms,返回值为SqlDataReader数据集。 public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlConnection conn = new SqlConnection(connString);//定义SqlConnection对象 try {
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
//调用PrepareCommand方法
}
}
catch //捕获异常 { }
conn.Close();//关闭链接 throw;//抛出异常
SqlDataReader rdr = md.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear();//清空参数 return rdr;//
ExecuteDataset函数
该函数通过SqlConnection执行Sql命令,参数为SqlConnection对象connection、命令类型cmdType、存储过程名称或T-SQL命令cmdText、SQL参数组cmdParms,返回值为DataSet数据集。
public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
//创建一个SqlCommand对象,并对其进行初始化 SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, //创建SqlDataAdapter对象以及DataSet SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); //填充ds da.Fill(ds);// 清除cmd的参数集合 cmd.Parameters.Clear();
commandText, commandParameters);
}
PrepareCommand函数
该函数完成数据库的连接和对命令的执行,供以上函数调用。
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{ }
//判断连接的状态。如果是关闭连接,则打开 if (conn.State != ConnectionState.Open)
conn.Open();//关闭连接
//cmd属性赋值 cmd.Connection = conn; cmd.CommandText = cmdText; //是否需要用到事物处理 if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType; //添加cmd需要的存储过程参数 if (cmdParms != null) { }
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
4.2存储过程操作的封装
网上书店系统的商务逻辑层调用数据访问层函数,完成对SQL Server数据库中存储过程的操作,这是因为使用存储过程封装应用有以下优点。 代码模块化,以减少数据库操作员和程序员的错误。 提高数据库安全性。
减少网络通信流量。 移植性较强。
5 详细设计与实现
5.1 用户管理模块
用户管理是一个网上书店系统补课缺少的部分,该模块主要实现用户注册、用户登录、找回丢失密码和修改个人信息等功能,用户管理模块主要包括以下页面。 用户注册页面UserRegister.aspx,代码隐藏文件为UserRegister.aspx.cs。 用户登录页面UserLogin.aspx,代码隐藏文件为UserLogin.aspx.cs。
找回丢失密码页面UserGetPassWord.aspx。代码隐藏文件UserGetPassWord.aspx.cs。 修改个人信息页面UserChangeInfo.aspx,代码隐藏文件为UserChangeInfo.aspx.cs。
图5.1 User类中的主要函数列表
5.1.1 用户注册
在如图5.2所设计的各项文本框中输入对应信息,然后单击【注册】按钮,可以注册新用户。
图5.2 用户注册界面设计图
用户注册的功能由函数AddUser_Click实现。函数AddUser_Click代码如下,该段代码保存在UserRegister.aspx.cs文件中。
protected void AddUser_Click(object sender, System.EventArgs e)
{
//得到用户注册信息
string userName = LoginName.Text.Trim();//定义用户名 string password = Password.Text.Trim();//定义密码 string question = Question.Text.Trim();//定义问题 string answer = Answer.Text.Trim();//定义问题答案
string userrealname=UserRealName.Text.Trim();//定义用户真实姓名 string email=Email.Text.Trim();//定义邮件地址 string role="用户"; User user = new User();
int userId = user.RegisterUser(userName, password, question,
answer,userrealname,email,role);//得到用户ID
//如果返回值为-1,表示用户名已经存在 if (userId == -1) {
}
Message.Text = "您注册的用户已经存在";
else {
//设置用户为通过验证
System.Web.Security.FormsAuthentication.SetAuthCookie(userId.ToString(),false);
}
}
//迁移购物车记录
//将用户重定向至用户帐户页面 Response.Redirect("UserLogin.aspx");
5.1.2 用户登录
在为用户登录所设计的图5.3中,输入对应信息,然后单击【登录】按钮,可以完成用户登录。
图5.3 用户登录界面设计图
用户登录的功能由函数LoginUser_Click实现,函数LoginUser_Click代码如下,该段代码保存在UserLogin.aspx.cs文件中。
protected void LoginUser_Click(object sender, System.EventArgs e)
{//实体化User对象
User user = new User();
int userId = user.Login (LoginName.Text,Password.Text);//注册用户 Session["UserRole "]=user.GetUserRole(userId);//得到用户角色 if (userId == 0)//如果返回为空
{ } else {
lblMessage.Text = "您输入的用户或密码有误";
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(userId.ToString(), }
}
CheckCookie.Checked);
5.1.3 找回丢失密码
在如图5.4所设计的【用户名】、【提示问题】、【问题答案】和【E-mail】文本框中输入对应信息,然后单击【提交】按钮,即可完成用户找回丢失密码的操作。
图5.4 找回丢失密码界面
用户找回丢失密码的功能由函数Submit_Click实现。函数Submit_Click代码如下所示。该段代码保存在UserGetPassWord.aspx.cs文件中。其中User类中的GetBackPassword函数具体内容代码保存在了User.cs中。
protected void Submit_Click(object sender, System.EventArgs e)
{//实例化user对象
User user = new eBookShop.User();
int result = user.GetBackPassword(LoginName.Text.Trim(),
Question.Text.Trim(),Answer.Text.Trim(), Email.Text);//得到密码
}
if (result == 1)//如果返回1 { } else { }
Message.Text = "您的输入信息有误";//提示失败
Message.Text = "您的6位密码已发送,请到邮箱查收";//提示成功
5.1.4 修改个人信息
在程序执行后的界面如图5.5所示,在真实姓名、问题、答案、E-mail文本框中输入对应信息,然后单击【提交】按钮,即可完成用户个人信息的修改。
图5.5 修改个人信息界面
修改个人信息的功能由函数UpdateUserInfo实现。函数UpdateUsernfo代码如下所示,这段代码保存在文件UserInfo.aspx.cs中。
void UpdateUserInfo()
{ //实例化user对象
User user = new User();
user.ChangeProfile(User.Identity.Name, RealName.Text,
Question.Text,Answer.Text , Email.Text);//改变用户信息
}
5.2 图书管理模块
图书管理是系统的重要组成部分,它主要实现图书类别的添加和删除,图书的添加、
删除和修改,列表显示图书,图书搜索等功能。
图5.6 Book类的主要函数列表
5.2.1 管理图书类别
图书类别管理的执行流程如图5.7所示。在如图5.8所示的图书类型文本框中输入图书类型信息,然后点击【添加】按钮,可以完成图书类型的添加操作。
图5.7 图书类别管理的执行流程
图5.8 管理图书类别
添加图书类型的功能由函数Add_Click实现,Add_Click函数代码保存在ManageBookType.aspx.cs文件中。 5.2.2 添加、删除、修改图书信息
添加、删除、修改图书信息的执行流程如图5.9所示。
在本节代码实现后,如图5.9所示的【图书名称】、【作者】、【译者】、【出版社】、【价格】、【介绍】文本框中输入对应信息,并单击【浏览】按钮,选择图书封面后单击【确定】
按钮,选择图书类别,然后单击【添加】按钮,即可完成新书的添加操作。
图5.9 添加、删除、修改图书信息的执行流程
图5.10 添加图书实现图
5.2.3 列表显示图书
图书列表显示功能由 DataListBind函数实现,函数 DataListBind(代码如下,该段代码保存在文件BookByType.aspx.cs中。
void DataListBind()
{
dl_BookByType.DataSource=Product.GetBookByCategory(int.Parse(ViewState["BookType
Id"].ToString()) );//设置数据源
dl_BookByType.DataBind();//绑定数据
}
图5.11为按类别列表显示信息的界面实现图。
图5.11 列表显示图书图
5.2.4 搜索图书
搜索图书的流程如图5.12所示,在如图5.13所示的【图书名称】、【作者】、【译者】、【出版社】文本框中输入对应信息,在【图书类型】下拉列表框中选择图书种类,然后单击【查找】按钮以实现搜索功能。
图5.12搜索图书的执行流程
图5.13 搜索图书
图5.14 搜索结果
图5.14以列表形式实现了显示搜索结果的程序,图书具体搜索功能由函数Bind实现。 5.3 购物车管理模块
购物车模块使用户可以在购物时随时查看自己购买的商品,并可以随时添加和删除所购买的商品。
图 5-15 ShopCart类中的主要函数列图
5.3.1 查看购物列表
查看购物列表的执行流程如图5.16所示。用户可以通过点击图书旁边的“加入购物
车”按钮,将图书加入购物车。图5.17显示了用户购物车,具体包括图书编号、图书名称、价格、数量、总金额记忆合计金额等内容。
图5.16 查看购物车列表的执行流程
图5.17 查看购物车列表
购物车列表显示功能由函数showshopcart 实现,该代码保存在MyShopCart.aspx.cs中。 5.3.2 结账
用户结账的执行流程如图5.18所示。图5.19为购物车结账界面,结账功能的实现与前面查看购物列表功能实现相似。
图5.18 用户结账的执行流程
图5.19 购物车结账界面
图5.19为代码实现后的截图,如果提交的购物记录出错,可跳转到购物车列表程序,而后再选择对现有的数据库的删除与修改操作。 5.4 订单管理模块
图5.20 订单Orders类中的主要函数列图
5.4.1 客户订单管理
查询客户信息的执行流程如图5.21所示。图5.22显示了客户所提供的订单,包括订单号、订单时间、订单总额等信息。
图 5.21 查询客户信息的执行流程
图5.22 客户订单浏览设计图
客户订单浏览功能在函数page_load中实现,其代码如下所示,该段代码保存在MyOrder.aspx.cs文件中。
protected void Page_Load(object sender, System.EventArgs e)
{
string userID = User.Identity.Name;//得到用户ID
Orders orderHistory = new Orders();//创建Orders对象
}
MyList.DataSource = orderHistory.GetOrderList(userID);//设置数据源 MyList.DataBind();//数据绑定
if (MyList.Items.Count == 0)//判断订单是否为空 { }
MyList.Visible = false;
MyError.Text = "您没有订单记录";
单击查询按钮可以查看具体某条订单的细节,如图5.23所示执行结果。
图5.23 客户订单细节浏览
5.4.2 管理员订单管理
订单管理的执行流程如图5.24所示。图5.25的执行结果图为管理员显示了全部客户已经提交的订单,改页面提供了浏览订单详细内容及订单处理的功能。
图5.24 订单管理的执行流程
图5.25 管理员订单浏览
客户订单显示的功能在函数Bind中实现,其代码如下所示。该点代码保存在ManageOrder.aspx.cs文件中。 void Bind()
{
try
{//实例化Orders对象
Orders orders = new Orders ();
DataSet ds = orders.GetAllOrder();//定义DataSet对象
this.Message.Text = "您共有" + ds.Tables[0].Rows.Count.ToString() + "条订
this.Datagrid1.DataSource = ds.Tables[0].DefaultView;//设置数据源′ this.Datagrid1.DataBind();//数据绑定
单";//提示订单条数
通过调用Orders 类的GetAllOrder方法获得全部订单信息,并在列表中显示。 5.5 后台管理模块
后台管理模块包含查询用户信息和查询销售信息,可以通过查询用户信息来增加管理员,通过查询销售信息从总体上了解图书销售数量及金额。
}
} catch { }
this.Message.Text="发生错误";//提示失败
图5.26 Admin类中主要函数图
5.5.1 查询用户信息
查询用户信息的执行流程如图5.27所示。图5.28为管理员提供了用户列表显示及角色管理的功能。角色管理的功能由函数GridUsers_UpdateCommand实现。
图5.27 查询用户信息的执行流程
图5.28 用户管理
GridUsers_UpdateCommand函数代码如下所示,该段代码保存在ManageUser.aspx.cs
文件中。
void GridUsers_UpdateCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string role = ((TextBox)e.Item.FindControl("Role")).Text.Trim();//得到用户角色
}
//获取要更改的用户的UserId
int userId = Convert.ToInt32(GridUsers.DataKeys[e.Item.ItemIndex]); AdminDB admin = new AdminDB();//创建admindb对象 admin.UpdateUserRole(role, userId.ToString());//改变用户角色 GridUsers.EditItemIndex = -1;//退出编辑状态 BindGrid();//绑定
5.5.2 查询销售情况
查询销售情况的执行流程如图5.29所示。图5.30所显示的查询销售情况页面为管理员提供了按月、日查询图书销售种类、数量、金额的功能。
图5.29 查询销售情况的执行流程
图5.30 查询销售情况
该功能主要由函数 BindGrid实现,相关代码保存在ManageSales.aspx.cs文件中。
6 系统测试
6.1 单元测设
测试一:在一般用户登陆时,用户名或密码有一项为空或者填写错误,系统是否出现
预先设定的操作提示。
具体操作:用户名、密码、任意一项为空或者填写有误。 结果:都出现相应的错误原因的信息提示。
结论:要求用户必须填写正确的用户名和密码,才能进入管理页面。 测试二:管理员删除一注册用户后,并让其登陆,看是否登陆成功。 具体操作:管理员删除一会员表中的用户后,该用户在前台登陆。 结果:该用户无法登陆。 结论:用户数据删除功能正常。
测试三:管理员删除一图书的信息,在前台按关键字查询,看是否能找到对应的信息。 具体操作:在图书管理页面中的图书查看与修改页面中删除一图书的信息。 结果:在前台搜索中,按关键字查询不到此书信息。 结论:删除图书信息功能正常。 6.2 集成测试
网上书店的建设基本上就算完成了,但是发现了这样一个事实,一个用户在访问一个网站时一般来讲只对该网站的部分内容感兴趣,而且这种兴趣会持续一段时间。这点启发我们,如果能根据用户的喜好为不同的用户显示其个性化的页面,即着重显示该用户感兴趣的内容,将为用户节约大量的检索时间,而且这样的网页显然是更具有吸引力的。一些站点已经在这方面作出了一定的尝试,通常采用的方法是,在用户登陆时为其提供一系列选项,使用户能够对站点进行一些自主的设置。这样做能够使站点呈现一定程度的个性化,但对用户来讲,仍旧比较烦琐,并且在用户了解一个站点前让其对站点进行设置,其结果未免有些粗糙。于是构想了这样一种方案,对用户登陆后的动作进行跟踪,分析,发掘用户点击规律,即用户先后点击的关联规则,这样,在用户点击一个主题(链接)之后,系统能够自动生成一页面,其中包含了该主题下用户经常关注的内容(若干链接),这样便再无须用户作出任何额外工作的情况下实现了为用户量身订做的个性化页面。
本次课程设计主要完成了网上书店的用户注册、登陆、图书分类浏览、图书信息查询、加入购物车、生成订单等功能,以及管理员的一系列相关操作。以上提出的改进想法以后将继续不断探索和完善。
结论
本系统是在Visual Studio 2010开发工具和SQL Server 2008数据库软件基础上,在同学和老师的帮助下经过许多时间设计完成的。但是仍有一些未实现的功能,如网上支付。但是通过本次网上书店系统的设计与完成,自己在网站建设方面有了很大的提高。望大家多多见谅与包涵,我会努力去学习更多的知识来充实自己,完善自我,相信我以后会做的更好、更理想。
本系统的设计实现中,主要有以下技术亮点:
介绍了表示层、商务逻辑层和数据访问层的设计结构。
图书信息添加、显示模块中,以二进制格式上传、下载图片文件,是ASP.NET的一个
技术难点,也是网上开发中的一个重点。这其中应用了文件对象操作。
DataGrid控件、DataList控件和Repeater控件的使用,使数据显示和更新更加多样
话、灵活化、丰富化。
本系统实现了用户注册、登录、个人信息修改、图书信息管理、购物车管理、订单管
理、销售查询等功能,这些功能是网上购物系统中不可缺少的部分。
致 谢
毕业论文马上就要结束了,在众多老师的谆谆教诲之下,在亲朋好友的鼓励之下,始终以积极的态度面对学习和生活。
本次论文的写作虽稍显枯燥却极富挑战。大家对我的支持鼓励,是我坚持完成本次论文的动力源泉。在此我要特别的感谢我的指导老师屈松老师对我们的指导,感谢老师在我们设计时,给予的帮助。在设计过程中,我遇到了许多困难但是我通过向老师的请教方式以及和同学交流沟通的方式解决了许多问题我还翻阅资料和网上查阅,这次方式使我更加丰富了我的知识面和提高我的求知欲。本课题在选题及研究过程中得到屈松老师的亲切关怀和悉心指导得以完成。指导老师严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深的感染和激励着我。从课题的选择到项目的最终完成,老师都始终给予我悉心的指导和不解的关怀,在此向屈松老师致以诚挚的谢意和崇高的敬意。
参考文献
[1]刘乃琦,王冲.JSP应用开发与实践[M].北京:人民邮电出版社,2012
[2]普雷斯曼.软件工程:实践者研究方法[M].北京:机械工业出版社,2011
[3]胡洁萍,杨树林.在Struts2中实现文件上传的动态跟踪[J],北京印刷学院
学报,2010(6)74-76
[4]tinymce.TinyMCEJavascriptWYSIWYGEditor[EBOL].httptinymce.moxie
code.com,2013
[5]肖建芳.基于B/S三层结构网上书店系统的设计[J],现代电子技
术,2012(22):39-41