网上书店戴莉莉 徐文文Word下载.docx
《网上书店戴莉莉 徐文文Word下载.docx》由会员分享,可在线阅读,更多相关《网上书店戴莉莉 徐文文Word下载.docx(34页珍藏版)》请在冰豆网上搜索。
注册
用户注册
基本信息
录入到数据库
注册成功与否
2
书店介绍
发布最新消息
消息
更新
更新内容
3
更新用户信息
修改信息
用户名
查询数据库
更新用户
4
用户登录
录入用户登陆信息
核对
登陆成功与否
5
用户查询图书
用户
书名或作者
查询
显示
6
图书订购
录入订购信息
编号金额数量等
录入
页面显示
7
日销售额与赢利额统计
查询与统计
日期
统计
8
定单管理
管理定单
信息
查询当前定单
输出定单与状态
9
缺书统计
缺书登记
所缺图书编号及名称
2.2性能需求分析
a)正确性:
软件应具有较高的正确率,在运行时不会出错。
b)稳定性:
软件应具备长期持续工作的能力。
c)安全性:
有良好的用户身份认证体制和灵活的密码更改模块。
d)实用性:
用户界面直观、友好,业务人员只需经过简单培训即可操作。
e)可靠性:
采用良好的操作软件和数据库,确保数据的一致性和完整性,并使软件免受病毒感染。
f)健壮性:
对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。
g)可维护性:
在给定条件下使用规定的程序和资源进行维护时,在规定使用条件下设备保持在或恢复到能执行要求功能状态的能力。
2.3业务流程分析
2.3.1软件数据流图
图2.1业务流程分析图
2.3.2软件数据字典
(1)用户资料
包括的数据项有:
用户编号、用户名称、密码、Email、地址、性别和真实姓名。
(2)管理员资料
包括供管理员编号、姓名、密码。
(3)图书资料
包括采图书编号、图书名称、图书价格、打折、库存、作者、出版社、出版时间、版本号、纸张、详细信息、图片URL。
(4)订单管理
包括订单编号、收货人、订单时间、订单价格、订单状态、订单地址付款方式、送货方式、购买数量。
(5)订单详情
包括编号、订单号、书编号。
2.4数据需求分析
(1081308107戴莉莉)
根据用户的需求分析便可设计出各数据的需求分析以及它们之间的关系。
根据上面的设计规划出大的实体有:
图书实体、订单实体。
A.软件实体E-R图
图2.2软件实体E-R图
B.软件各实体属性图如下所示:
a)用户信息实体属性
图2.3用户信息实体属性图
b)管理员信息实体属性
图2.4管理员信息实体属性图
c)图书信息实体属性
图2.4图书信息实体属性图
c)订单管理实体属性
图2.5订单管理实体属性图
d)订单详情实体属性
图2.6订单详情实体属性图
3软件的设计
3.1软件的结构设计
本网上书店管理软件主要分为前台管理和后台管理两个模块。
后台管理模块主要完成的功能有:
管理员管理、图书管理、会员管理和订单管理。
前台管理模块主要完成的功能有:
登录注册用户、检索图书、购买图书和留言板。
3.1.1登录注册用户
a)用户注册:
注册新用户,填写用户的相关信息。
b)查询图书信息:
查询图书的详细信息,包括分类查找所需图书和检索图书。
c)购买图书:
将选中图书放入购物车中,并向管理员下订单。
3.1.2检索图书
a)检索图书:
无论是已注册用户和未注册用户都可以检索图书。
3.1.3购买图书
a)购买图书:
若想要购买图书,必须是已注册用户,未注册用户无法购买图书,只可查看图书的相关信息。
b)加入购物车:
用户找到想要购买的图书便可以加入到购物车中。
c)下订单:
加入购物车后便可向管理员下订单,系统自动生成一个订单号。
3.1.4留言板
a)用户留言:
已注册用户可以写下自己想要说的话。
3.1.5管理员管理
a)管理员基本信息管理:
包括管理员基本信息的修改、删除,管理书店里的各类书籍。
b)结账:
对普通用户放入购物车中的书目结算总金额。
3.1.6会员管理
a)用户基本信息管理:
包括用户基本信息的修改、删除和注册新用户。
包括分类查找所需书目和检索书目。
将选中书目放入购物车中。
3.1.7图书管理
a)图书基本信息管理:
包括采图书编号、图书名称、图书价格、打折、库存等,可以添加、修改和删除图书。
b)图书的查询和图书数量的统计。
3.1.8订单管理
a)订单详情:
b)订单总额:
即每张订单中所购书目的总金额,用户将书目放入购物车后等待系统结算。
根据上述的软件功能分析,可以得出如图3.1所示的软件功能模块图。
图3.1系统总功能图
3.2软件的数据库设计
3.2.1数据库逻辑设计
数据库设计是系统设计中非常重要的一个环节。
数据是一切系统设计的基础,通俗地说,数据库设计就像高楼大厦的根基一样,如果设计不合理、不完善,将在系统开发过程中、甚至到后期的系统维护、功能变更和功能扩充时引起较多问题,严重时甚至要重新设计项目,重做大量已完成的工作。
根据上述实体E-R图,得出数据库的关系模式如下:
(1)用户关系模式为:
用户(用户编号,用户名称,密码,Email,地址,性别,真实姓名)
(2)管理员关系模式为:
管理员(管理员编号、姓名、密码)
(3)图书关系模式为:
图书(图书编号,图书名称,图书价格,打折,库存,作者,出版社,出版时间,版本号,纸张,详细信息,图片URL)
(4)订单管理关系模式为:
订单管理(订单编号,收货人,订单时间,订单价格,订单状态,订单地址付款方式,送货方式,购买数量)
(5)订单详情关系模式为:
订单详情(编号,订单号,书编号)
3.2.2数据库物理设计
从软件的稳定性方面考虑,本软件使用SQLServer2005数据库软件。
结合需求分析中的E-R图,设计了以下各数据表:
a)用户信息表
表2.1用户信息表(UserList)
字段名称
数据类型
字段大小
必填字段
标识
说明
User_ID
int
是
用户编号,主键,自动生成
User_Name
varchar
20
用户名称
Passwd
密码
Email
否
邮箱
Address
30
地址
Sex
性别
Name
真实姓名
b)管理员信息表
表2.2管理员信息表(AdmintList)
Admin_ID
管理员编号,主键,自动生成
Admin_Name
管理员名称
c)图书信息表
表2.3图书信息表(BookList)
Book_ID
图书编号,主键,自动生成
Book_Name
40
图书名称
Book_Price
Smallmoney
10
图书价格
Book_Zhe
打折
Book_Stock
库存
Book_
作者
Book_Cbs
出版社
Book_Time
datatime
出版时间
Book_No
18
版本号
Book_Count
纸张
Information
Nvarchar
300
详细信息
Image
image
图片URL
d)订单管理信息表
表2.4订单管理信息表(OrdersList)
Order_ID
订单编号,主键,自动生成
Recieve
收货人
Order_Time
订单时间
Order_Is
订单状态
Order_Address
订单地址
Order_way
付款方式
Order_sh
送货方式
Counts
购买数量
e)订单详情信息表
表2.5订单详情信息表(DetailList)
ID
编号,主键,自动生成
订单号,主键,自动生成
图书号,主键,自动生成
3.3软件的详细设计
3.1.1后台详细设计
1)简要情况
后台管理主要是对用户的限制,主要是管理员用户。
管理员登录成功以后,可以对管理员进行管理;
可以进行商品管理,商品管理又分为两个子模块,包括类别添加和商品添加,在其中可以分别进行管理,如查看、修改和删除;
会员管理是对前台加进来的用户进行管理的,在前台注册成功以后,就会加进数据库中,管理员可以对会员进行查看、修改和删除操作;
订单管理主要是查看会员下的订单。
2)模块属性
主控模块运行时才能进入本模块,模块常驻内存,非子程序,不可并发。
3)局部数据结构
Sqlcon:
SqlConnection//打开数据库的连接
sqlcon:
string//连接参数
connectionscon:
SqlConnection//
3.1.2前台详细设计
前台管理主要是为普通用户提供的,主要是首页。
将首页分为四个模块,通过路径选择来完成,将其组成一个页面;
热品推荐、精品购物、特价展览都是在后台中设置的,前台也要通过数据库中的select来进行选择的;
客户留言与后台也有个接口,后台管理员可以管理客户的留言。
4软件的实现
详细设计是软件开发时期的第三个阶段,也是软件设计的第二步。
在概要设计已经确定了软件的总体结构,给予了软件中各个组成模块的功能和模块间的联系。
详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。
详细设计的目标有两个:
实现模块功能的算法要逻辑上正确和算法描述要简明易懂。
因此,软件的设计和实现如下。
4.1管理员登录模块
首先添加新建Web窗体,名称为Login.aspx,添加相关控件,并设置相关属性。
为登录系统和重新设置两个人控件添加代码,其中用到验证码,验证码的产生是调用的images.aspx类。
设计后的窗体如图4.1所示:
图4.1登录界面
图4.2提示登陆成功
图4.3登录后主页面
该模块的核心代码如下:
publicpartialclassadmin_Login:
System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
}
protectedvoidImageButton1_Click(objectsender,ImageClickEventArgse)
if(!
Database.bad(this.username.Value)||!
Database.bad(this.userpassword.Value))
Response.Write("
<
scriptlanguage='
javascript'
>
alert('
请不要输入特殊字符'
)<
/script>
"
);
}
else
stringcheckcode=this.number.Value.Trim();
if(checkcode.CompareTo(Session["
Vnumber"
].ToString())==1)
Response.Write(Database.MessageBox("
验证码错误"
"
login.aspx"
));
ManagerCheckUser=newManager();
CheckUser.Username=this.username.Value.Trim();
CheckUser.Password=Database.GetMD5(this.userpassword.Value.Trim());
if(CheckUser.ExistsManger(CheckUser))
Session["
Username"
]=this.username.Value;
登陆成功"
AdminIndex.aspx"
登陆失败"
protectedvoidImageButton2_Click(objectsender,ImageClickEventArgse)
生成验证码的核心代码:
///生成验证码的类
publicclassValidateNumber
publicValidateNumber()
///验证码的最大长度
publicintMaxLength
get{return10;
///验证码的最小长度
publicintMinLength
get{return1;
///生成验证码
///<
paramname="
length"
指定验证码的长度<
/param>
returns>
/returns>
publicstringCreateValidateNumber(intlength)
int[]randMembers=newint[length];
int[]validateNums=newint[length];
stringvalidateNumberStr="
;
//生成起始序列值
intseekSeek=unchecked((int)DateTime.Now.Ticks);
RandomseekRand=newRandom(seekSeek);
intbeginSeek=(int)seekRand.Next(0,Int32.MaxValue-length*10000);
int[]seeks=newint[length];
for(inti=0;
i<
length;
i++)
beginSeek+=10000;
seeks[i]=beginSeek;
//生成随机数字
Randomrand=newRandom(seeks[i]);
intpownum=1*(int)Math.Pow(10,length);
randMembers[i]=rand.Next(pownum,Int32.MaxValue);
//抽取随机数字
stringnumStr=randMembers[i].ToString();
intnumLength=numStr.Length;
Randomrand=newRandom();
intnumPosition=rand.Next(0,numLength-1);
validateNums[i]=Int32.Parse(numStr.Substring(numPosition,1));
//生成验证码
validateNumberStr+=validateNums[i].ToString();
returnvalidateNumberStr;
summary>
///创建验证码的图片
/summary>
containsPage"
要输出到的page对象<
validateNum"
验证码<
publicvoidCreateValidateGraphic(PagecontainsPage,stringvalidateNum)
Bitmapimage=newBitmap((int)Math.Ceiling(validateNum.Length*12.5),22);
Graphicsg=Graphics.FromImage(image);
try
//生成随机生成器
Randomrandom=newRandom();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
25;
intx1=random.Next(image.Width);
intx2=random.Next(image.Width);
inty1=random.Next(image.Height);
inty2=random.Next(image.Height);
g.DrawLine(newPen(Color.Silver),x1,y1,x2,y2);
Fontfont=newFont("
Arial"
12,(FontStyle.Bold|FontStyle.Italic));
LinearGradientBrushbrush=newLinearGradientBrush(newRectangle(0,0,image.Width,image.Height),
Color.Blue,Color.DarkRed,1.2f,true);
g.DrawString(validateNum,font,brush,3,2);
//画图片的前景干扰点
100;
intx=random.Next(image.Width);
inty=random.Next(image.Height);
image.SetPixel(x,y,Color.FromArgb(random.Next()));
//画图片的边框线
g.DrawRectangle(newPen(Color.Silver),0,0,image.Width-1,image.Height-1);
//保存图片数据
MemoryStreamstream=newMemoryStream();
image.Save(stream,ImageFormat.Jpeg);
//输出图片
containsPage.Response.Clear();
containsPage.Response.ContentType="
image/jpeg"
containsPage.Response.BinaryWrite(stream.ToArray());
finally