资源描述
网上书店设计与实现
59
2020年4月19日
文档仅供参考
重庆大学网络教育学院
毕业设计(论文)
题目 网上书店设计与实现
学生所在校外学习中心 四川广安校外学习中心
批次 层次 专业 121专科起点本科 计算机科学与技术
学 号 W12111558
学 生 吴 清
指 导 教 师 屈 松
起 止 日 期 年7月1日至 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 开发工具和SQL Server 数据库软件基础上,采用ASP.NET语言,开发一套网上书店系统,实现管理员能够经过Web浏览器进入后台,实现网上图书添加、删除、图书分类管理及定单管理、用户管理等功能,以及用户登录、注册,在站内进行搜索等功能。
2 系统分析
2.1 需求分析
网上书店系统包括如下基本功能:
l 用户注册和登录:为用户提供注册、登录、找回丢失密码、修改个人信息等功能。
l 图书信息查询及管理:对信息进行灵活的分类、存储,方便用户迅速从少则几万,多则几十万甚至上百万种图书中找出自己所需图书。
l 购物车管理:用语存储用户选择好的图书,完成购物后能够自动生成订单以供管理者进行管理。
l 订单管理:为用户提供订单查询功能,同时为管理者提供订单查询功能及处理功能。
l 后台管理:为管理者提供用户信息查询和销售情况查询等功能。
2.2 可行性分析
2.2.1 需求可行性
网上书店为人们提供了诸多方便。
l 更加广阔的环境:人们不受时间、空间的限制,不受传统购物的诸多限制,可随时随在网上交易。
l 更加广阔的市场:在网上这个世界将会变得很小,一个商家能够面对全球的消费者,而一个消费者能够在全球的任何一家商家购物。
l 更加快速的流通和低廉的价格:电子商务减少了商品流通的中间环节,节省大量开支,从而大大降低了商品流通和交易成本。
l 更加符合时代要求:如今人们越来越追求时尚、讲究个性,注重购物的环境,网上购物,更能体现个性化的购物过程。
综合应用所学知识,构建网上书店系统,并重点实现网上书店系统所涉及的功能,从而使本人把所学的理论知识能够很好的运用到实践当中。
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 Server 数据库中数据的读取和对储存过程的操作。
图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 图书类别表
字段名
类型
长度
允许空
键值
备注
CategoryId
int
4
否
是
图书类别ID
CategoryName
nvarchar
50
是
否
图书类别名称
② 图书信息表(e-Booklnfo)
图书信息表存储网站图书具体信息,该表引用BookCategory表的CategoryId字段作为外键,具体字段说明如下表3.2所示:
表3.2 图书信息表
字段名
类型
长度
允许空
键值
备注
BookId
int
4
否
是
图书ID
BookName
nvarchar
50
是
否
图书名称
Cover
binary
50
是
否
图书封面
CategoryId
int
4
是
否
图书类别ID
Author
nvarchar
50
是
否
图书作者
Translator
nvarchar
50
是
否
图书译者
Press
nvarchar
50
是
否
图书出版社
Price
decimal
9
是
否
图书价格
Intorduction
nvarchar
200
是
否
图书介绍
③ 订单表(e-Order)
订单表用以存储用户订单,引用Userlnfo表中的UserId字段作为外键,其具体字段内容如下表3.3所示。
表3.3 订单表
字段名
类型
长度
允许空
键值
备注
OrderId
int
4
否
是
订单ID
UserId
int
4
是
否
用户ID
OrderDate
datetime
8
是
否
订单日期
Status
nvarchar
50
是
否
订单状态
④ 订单信息表(e-Orderlnfo)
订单信息表包含具体订单信息,引用BookInfo表的BookId作为外键,具体字段说明如下表3.4所示:
表3.4 订单信息表
字段名
类型
长度
允许空
键值
备注
OrderId
int
4
否
是
订单ID
BookId
int
4
否
是
图书ID
Quantity
int
4
是
否
图书数量
UnitCost
decimal
9
是
否
图书价格
⑤ 购物车表(e-ShopCart)
购物车表主要存储网站用户购物车信息,该表引用Booklnfo表的BookId作为外键,其具体字段说明如下表3.5所示:
表3.5 购物车表
字段名
类型
长度
允许空
键值
备注
Id
int
4
否
是
ID
CartId
nvarchar
50
是
否
购物车ID
BookId
int
4
是
否
图书ID
Quantity
int
4
是
否
图书数量
CreatedDate
datetime
6
是
否
创立日期
⑥ 用户信息表(e-Userlnfo)
用户信息表主要用于储存网站用户信息,字段说明如下表3.6所示。
表3.6 用户信息表
字段名
类型
长度
允许空
键值
备注
UserId
int
4
否
是
用户ID
UserName
nvarchar
50
是
否
用户名称
UserPwd
nvarchar
50
是
否
用户密码
UserRole
nvarchar
50
是
否
用户角色
UserRealName
nvarchar
50
是
否
用户真实姓名
Question
nvarchar
50
是
否
用户提问
Answer
nvarchar
50
是
否
提问答案
Email
nvarchar
50
是
否
邮箱地址
3.3模块划分
该系统的整体模块组织图所示。
图3.3 管理员功能设计图
图3.4普通用户功能设计图
该系统为普通用户和管理员提供了不同的操作界面,为普通用户设计的操作界设计面如下图3.5所示,为管理员设计的操作界设计面如图3.6所示。
图3.5 普通用户界面设计图
图3.6 管理员操作界面图
普通用户界面划分为修改信息、修改密码、管理购物车、管理订单、搜索等模块,管理员界面划分为修改信息、修改密码、管理图书类别、增加图书、管理图书信息、管理订单、管理用户信息、查询销售信息和搜索等模块。
4 实现数据库访问层
在动态网页设计中,很多都要涉及到对数据库的操作,这是一件枯燥、费时、而且容易出错的工作,如果使用类来实现对数据库操作的封装,就能够使写出的程序在很小的改动下完成后台数据库的操作。
4.1 一般数据库操作的封装
SqlAcess.cs文件中封装了对一般数据库的操作,下面简单介绍下该文件中的主要数据库访问函数。
l 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
}
}
l ExecuteReader函数
该函数执行Sql命令,参数为连接字符串connString、命令类型cmdType、存储过程名称或T-SQL命令cmdText、SQL参数组cmdParms,返回值为SqlDataReader数据集。
public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();//定义SqlCommand 对象
SqlConnection conn = new SqlConnection(connString);//定义SqlConnection对象
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
//调用PrepareCommand方法
SqlDataReader rdr = md.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();//清空参数
return rdr;//
}
catch //捕获异常
{
conn.Close();//关闭链接
throw;//抛出异常
}
}
l 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, commandText, commandParameters);
//创立SqlDataAdapter对象以及DataSet
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet(); //填充ds
da.Fill(ds);// 清除cmd的参数集合
cmd.Parameters.Clear();
return ds;//返回ds
}
l 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数据库中存储过程的操作,这是因为使用存储过程封装应用有以下优点。
l 代码模块化,以减少数据库操作员和程序员的错误。
l 提高数据库安全性。
l 减少网络通信流量。
l 移植性较强。
5 详细设计与实现
5.1 用户管理模块
用户管理是一个网上书店系统补课缺少的部分,该模块主要实现用户注册、用户登录、找回丢失密码和修改个人信息等功能,用户管理模块主要包括以下页面。
l 用户注册页面UserRegister.aspx,代码隐藏文件为UserRegister.aspx.cs。
l 用户登录页面UserLogin.aspx,代码隐藏文件为UserLogin.aspx.cs。
l 找回丢失密码页面UserGetPassWord.aspx。代码隐藏文件UserGetPassWord.aspx.cs。
l 修改个人信息页面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)//如果返回为空
{
lblMessage.Text = "您输入的用户或密码有误";
}
else
{
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
{
Message.Text = "您的6位密码已发送,请到邮箱查收";//提示成功
}
else
{
Message.Text = "您的输入信息有误";//提示失败
}
}
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["BookTypeId"].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.Datagrid1.DataSource = ds.Tables[0].DefaultView;//设置数据源′
this.Datagrid1.DataBind();//数据绑定
this.Message.Text = "您共有" + ds.Tables[0].Rows.Count.ToString() + "条订单";//提示订单条数
}
catch
{
this.Message.Text="发生错误";//提示失败
}
}
经过调用Orders 类的GetAllOrder方法获得全部订单信息,并在列表中显示。
5.5 后台管理模块
后台管理模块包含查询用户信息和查询销售信息,能够经过查询用户信息来增加管理员,经过查询销售信息从总体上了解图书销售数量及金额。
图5.26 Admin类中主要函数图
5.5.1 查询用户信息
查询用户信息的执行流程如图5.27所示。图5.28为管理员提供了用户列表显示及角色管理的功能。角色管理的功能由函数GridUsers_UpdateCommand实现。
开始
显示用户列表
角色修改
保存
是否需修改
结束
是
否
图5.27 查询用户信息的执行流程
图5.28 用户管理
GridUsers_UpdateCommand函数代码如下所示,该段代码保存在M
展开阅读全文