课程设计报告网上书店网站Word下载.docx
《课程设计报告网上书店网站Word下载.docx》由会员分享,可在线阅读,更多相关《课程设计报告网上书店网站Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
辅考网是对考试有关的书籍、考试真题、模拟考试的资料零售,本网站可实现在线查看、购买、支付等功能,极大地满足消费者的需求,网站总体模块分为管理员和用户两个模块,而用户又分为会员和顾客两个子模块。
管理员的功能模块图如1-1所示,用户的功能模块图如1-2所示。
图1-1
图1-2
2.3数据库需求分析
根据网站设计目标,网站需要具有商品的种类、商品的样式等商品的管理、用户管理、辅考资讯管理、留言管理、购物车管理等功能。
(1)商品管理功能。
商品管理功能包括商品种类的增删查改、商品样式的增删查改以及商品信息的增删查改。
(2)用户管理功能。
用户管理包括对管理员、会员的管理,包括增删查改等。
(3)辅考资讯管理功能。
主要是对考试动态、新闻的管理,包括首页的动态显示、后台的增删改。
(4)留言管理功能。
留言管理功能包括一般用户(顾客)的留言管理和会员的留言管理,其中克对蓝颜进行回复的功能。
(5)购物车管理功能。
购物车是对会员的购买的商品的具有保存和计算功能的工具。
2.4环境需求分析
网站的开发环境:
WindowsXP(SP2)、Microsoft.NET2008集成开发环境、Sql2005数据库、ASP.NET3.5中的C#语言。
3系统规划
3.1网站的总体规划
辅考网系统是一个前台赴考资料展示及销售、后台管理两部分组成。
1、前台商品展示及销售:
该部分主要包括推荐商品、最新商品、热门商品、试卷分类、购物车、会员登录、注册、辅考资料查询、留言板等。
2、后台管理:
该部分主要对商城内的一些基础数据进行有效管理,包括商品类型管理、商品样式、会员管理、订单管理、留言管理、辅考资讯管理等。
3.2网站的功能结构图(1-3图)
图1-3
4系统设计
4.1数据库命名
(1)数据库的命名采用了有意义的字段名,遵守3NF标准和3NF规范,即表的每一个值都只能被表示一次;
表的每一行都应该被有唯一的标识(即主键);
表内不应该存储依赖于其他键的非键信息。
保持字段名和类型的一致性等。
(2)数据库命名规则
数据库名称=数据库内容标识。
(3)表的定义
命名应尽量反应数据的存储内容,表名称=表名前缀—表内容标识(首字大写)。
基于以上的数据库命名要求,辅考网包含了News、tb_Admin、tb_BookInfo、tb_Class、tb_Detail、tb_Image、tb_Leaveword、tb_meber、tb_OrderInfo、tb_Reply十张表。
4.2程序代码的命名规范
(1)辅考网的程序代码采用了一般代码的命名方式,避免用公司名称或其它品牌的名称作为命名名称的前缀,其中的ADO.NET的命名表示如表1-1所示。
数据类型
数据类型简写
标准命名举例
Connection
con
conNorthwind
Command
cmd
cmdReturnProducts
Parameter
parm
parmProductID
DataAdapter
dad
dadProducts
DataReader
dtr
dtrProducts
DataSet
dst
dstNorthWind
DataTable
dtbl
dtblProduct
DataRow
drow
drowRow98
表1-1
(2)WinFormControl、WebControl命名规范(部分)如表1-2所示:
Label
lbl
lblMessage
Button
btn
btnSave
TextBox
txt
txtName
ListBox
lst
DropDownList
drop
dropCountries
表1-2
(3).NET中的命名规则(部分)
类和类成分的命名
类的命名原则是用名词或名词短语命名类,使用Pascal大写。
减少类名中缩写的使用量。
不要使用任何类前缀(比如C),不要使用带下划线的字符。
例如:
publicclassFileStream{}、publicclassDB{}、publicclassString{}
变量的命名
名称中各单词首字母均为小写。
例如:
findLastRecord、redrawMyForm
在内部范围中避免使用与外部范围中的名称相同的名称。
若访问错误变量,则会产生错误结果。
若变量与同一名称的关键字冲突,则必须在关键字前加适当的类型库以作标识。
例如:
若有一个名为date的变量,只能通过调用System.Date来使用内部Date函数。
函数和方法的命名。
函数和方法的命名应该以动词开始,使用Pascal大写。
不要使用带下划线的字符。
InitNameArray、CloseDialog
4.3数据库设计
4.3.1数据表的表结构
(各模块对应的表附在模块设计部分)
4.3.2存储过程的创建
存储过程是为了实现某个特定任务,有一组编译好的SQL语句组成,将其放在数据库上,由用户通过指定存储过程的名字来执行的一种数据库对象,在存储过程中有系统存储过程、扩展存储过程、用户自定义存储过程。
辅考网的存储过程有64个,大多数都是系统存储过程和用户自定义存储过程,语句的一半形式为:
createproceduresp_name()
begin
.........
end
调用存储过程。
基本语法:
callsp_name()。
注意:
存储过程名称后面必须加括号,哪怕该存储过程没有参数传递。
在网站的存储过程中,对每个数据库的增删查改的功能都运用得到,如proc_AddUser中的语句
ALTERproc[dbo].[proc_AddUser]
(
@UserNamevarchar(50),
@Passwordvarchar(50),
@RealNamevarchar(50),
@Sexbit,
@Phonecodechar(20),
@Emailvarchar(50),
@Addressvarchar(200),
@PostCodechar(10)
)
as
ifExists(select*fromtb_MemberwhereUserName=@UserName)
return-100
else
begin
Inserttb_Member(tb_Member(UserName,Password,RealName,Sex,Phonecode,Email,Address,PostCode)
values(@UserName,@Password,@RealName,@Sex,@Phonecode,@Email,@Address,@PostCode)
return100
end
是对数据库中的表tb_Member中的数据类型定义为@UserNamevarchar(50),@Passwordvarchar(50),@RealNamevarchar(50),@Sexbit,@Phonecodechar(20),@Emailvarchar(50),@Addressvarchar(200),@PostCodechar(10)然后再将表中的UserName、Password、RealName、Sex、Phonecode、Email、Address、PostCode数据进行数据的更新,这是比较简单的存储过程,而在网站的存储过程中用到了类型于这样的存储过程,包括了Proc_DeleteAreaInfo、proc_DeplayGI、proc_DeplayGI等存储过程。
在存储过程中,我们运用到了exists方法,Exists方法描述如果在Dictionary对象中指定的关键字存在,返回True,若不存在,返回False。
语法object.Exists(key)Exists方法语法有如下几部分:
部分描述Object必需的。
始终是一个Dictionary对象的名字。
Key必需的。
在Dictionary对象中搜索的Key值。
EXISTS在SQL中的作用是检验查询是否返回数据。
如
LTERproc[dbo].[proc_UserLogin]
@Passwordvarchar(50)
ifexists(select*fromtb_MemberwhereUserName=@UserNameandPassword=@Password)
select*fromtb_Member
whereUserName=@UserNameandPassword=@Password
此外,存储过程中还运用到其他的比如Delece、Updata、Insert的语句,便于编写代码。
4.4公共类编写
辅考网运用到七个公共类,分别是BankPay.cs、CommonClass.cs、DBClass.cs、GoodsClass.cs、OrderClass.cs、OrderProperty.cs、UserClass.cs,其中DBClass.cs是对数据库连接的类的书写,其代码如下:
publicSqlConnectionGetConnection()
{
stringmyStr=ConfigurationManager.AppSettings["
ConnectionString"
].ToString();
SqlConnectionmyConn=newSqlConnection(myStr);
returnmyConn;
}
///<
summary>
///执行SQL语句,并返回受影响的行数
/summary>
paramname="
myCmd"
>
执行SQL语句命令的SqlCommand对象<
/param>
publicvoidExecNonQuery(SqlCommandmyCmd)
try
if(myCmd.Connection.State!
=ConnectionState.Open)
myCmd.Connection.Open();
//打开与数据库的连接
//使用SqlCommand对象的ExecuteNonQuery方法执行SQL语句,并返回受影响的行数
myCmd.ExecuteNonQuery();
catch(Exceptionex)
thrownewException(ex.Message,ex);
finally
if(myCmd.Connection.State==ConnectionState.Open)
myCmd.Connection.Close();
//关闭与数据库的连接
}
4.5系统模块设计
在整个网站的开发设计中,我主要负责会员登录、后台登录、购物车及对应数据设计。
4.5.1会员注册、登录
注册、登录界面
图1-4图1-5
表
图1-7
相关代码
注册:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Data.SqlClient;
publicpartialclassRegister:
System.Web.UI.Page
{
CommonClassccObj=newCommonClass();
UserClassucObj=newUserClass();
protectedvoidPage_Load(objectsender,EventArgse)
protectedvoidbtnSave_Click(objectsender,EventArgse)
//判断是否输入必要的信息
if(this.txtPostCode.Text.Trim()=="
"
&
&
this.txtPhone.Text.Trim()=="
this.txtEmail.Text.Trim()=="
Response.Write(ccObj.MessageBoxPage("
请输入必要的信息!
));
else
//将用户输入的信息插入到用户表tb_Member中
intIntReturnValue=ucObj.AddUser(txtName.Text.Trim(),txtPassword.Text.Trim(),txtTrueName.Text.Trim(),transfer(this.ddlSex.SelectedItem.Text),txtPhone.Text.Trim(),txtEmail.Text.Trim(),txtAddress.Text.Trim(),txtPostCode.Text.Trim());
if(IntReturnValue==100)
Response.Write(ccObj.MessageBox("
恭喜您,注册成功!
"
Default.aspx"
注册失败,该名字已存在!
///将性别转化为Bool值
strValue"
需要转化的性别值<
returns>
返回转化后的性别值<
/returns>
protectedbooltransfer(stringstrValue)
if(strValue=="
男"
returntrue;
returnfalse;
protectedvoidbtnReset_Click(objectsender,EventArgse)
this.txtName.Text="
;
//用户名
this.txtPassword.Text="
//用户密码
this.txtTrueName.Text="
//用户真实姓名
this.txtPhone.Text="
//用户电话号码
this.txtPostCode.Text="
//邮政编码
this.txtEmail.Text="
//Email
this.txtAddress.Text="
//详细地址
}
登录:
publicpartialclassLoadingControl:
System.Web.UI.UserControl
//声明随机类对象
Randomrandom=newRandom();
if(!
IsPostBack)
lblCheckCode.Text=random.Next(1000,9999).ToString();
//产生随机验证码
protectedvoidbtnLoad_Click(objectsender,ImageClickEventArgse)
//清空Session对象
Session["
UserID"
]=null;
Username"
if(this.lblCheckCode.Text.Trim()=="
||this.txtCheckCode.Text.Trim()=="
登录名和密码不能为空!
if(this.txtCheckCode.Text.Trim()==this.lblCheckCode.Text.Trim())
//调用UserClass类的UserLogin方法判断用户是否为合法用户
DataTabledsTable=ucObj.UserLogin(this.txtName.Text.Trim(),this.txtPassword.Text.Trim());
if(dsTable!
=null)//判断用户是否存在
]=Convert.ToInt32(dsTable.Rows[0][0].ToString());
//保存用户ID
]=dsTable.Rows[0][1].ToString();
//保存用户登录名
//Response.Redirect(Request.CurrentExecutionFilePath);
//跳转到当前请求的虚拟路径
Response.Redirect("
);
您的登录有误,请核对后再重新登录!
请正确输入验证码!
protectedvoidButton1_Click(objectsender,EventArgse)
Register.aspx"
4.5.2后台登录
登录界面
图1-8
图1-9
publicpartialclassManage_Login:
//创建公共类CommonClass一个新实例对象
DBClassdbObj=newDBClass();
if