网上图书购物系统.docx
《网上图书购物系统.docx》由会员分享,可在线阅读,更多相关《网上图书购物系统.docx(22页珍藏版)》请在冰豆网上搜索。
网上图书购物系统
____软件设计实践___报告
实训/实验内容与要求
通过实现一个完整的软件,体验软件项目开发的工作流程,加深对相关理论知识的理解,提高实际分析设计能力。
完成软件的需求分析、架构设计、模块划分并编程实现。
指导教师:
指导教师评语
成绩:
指导教师:
_______________
年月日
目录
1.需求分析1
2.详细设计2
2.1系统功能2
2.2详细设计4
3.数据库设计5
3.1完整性和安全性5
3.2数据字典6
3.3物理结构设计7
4.系统实现9
4.1用户登录界面10
4.2用户查看图书界面12
4.3用户注册界面15
4.4用户订单界16
5.总结19
1.需求分析
在当下的信息技术时代,消费者大众越来越热衷于阅读书籍,从书籍中获取更多的知识。
但是现在的实体书店越来越少了,造成了很多消费者很难购买到图书。
而且实体书店有房租、店员工资、库存管理等运营成本,造成了图书的销售价格过高,消费者不愿花费太多的钱在购买图书上,整体导致实体书店经营困难。
考虑到现在消费者都有网上购物的习惯,所以开发了这个图书销售系统,方便消费者浏览和购买图书。
作为一个图书商城管理系统,不仅要求便于管理,而且要求为用户和管理员提供方便快捷的查找、购买、更改等功能,提高工作效率。
商城管理人员可以浏览、查询、删除、修改等操作。
具体功能:
设计用户的登陆权限和登陆方法。
对所有的用户开放浏览购买等功能。
用户查看更改自己的用户信息。
商城管理人员对信息和数据库进行维护,包括信息的增删改。
要进行统一的管理,也要求具有很强的时效性。
一方面,对图书的种类和图书的销售情况进行实时掌握;另一方面,要减少内容的重复,做到图书种类的齐全,对书籍进行有效的管理,提高商城管理有效的利用。
2.详细设计
2.1系统功能
本系统主要针对两种用户,一个是消费者,一个是图书管理员。
消费者可以进行登录,修改密码,分类浏览、分类模糊搜索(只需要输入关键字就可以搜索出含有该关键字的相关图书)图书信息,支持组合查询,可以将图书名称、作者名、出版社名组合起来进行查询,将需要购买的图书添加进购物车,提交订单,查看订单等功能。
图书管理员也可以进行登录,修改密码,还能添加、修改、删除、查看图书信息与图书类别,对订单进行处理。
消费者系统如图2-1所示.
消费者系统图2-1
管理员系统如图2-2所示。
图书管理系统图2-2
2.2详细设计
1.系统登录,要求用户在登录时必须输入正确的用户名和密码。
2.注册功能,要求用户在注册时应输入用户名、密码、二次输入密码,其中用户名、密码均不能为空且不能与已存在的用户名冲突。
3.修改密码功能,用户需要修改密码时。
如果用户名、原始密码验证成功,则允许密码重置,否则密码重置失败。
4.图书信息搜索功能,用户可以输入关键字对图书名称进行模糊搜索,支持组合条件查询,可以使用图书名称、作者名、出版社名三者形成组合条件进行查询,搜索成功则展示图书,若搜索不到结果,则提示用户没有此图书。
5.图书信息查看功能,用户可以点击某本图书,查看该图书的基本信息,如图书名称、图书作者、出版社名称。
6.购物车管理功能,消费者找到需要购买的图书后,可以点击相应按钮将其加入到购物车,购物车可同时放入多本不同种类图书,同时在购物车中还能增加、减少图书购买数量。
7.查看订单功能,用户在登录系统后,可以查看订单状态,订单状态包括已支付,未支付。
消费者的主要功能功能如图2-3
图2-3
3.数据库设计
3.1完整性和安全性
系统安全性要求体现在数据库的安全性、信息的安全性和系统平台的安全性等方面。
安全性先通过视图机制,不同的用户拥有不同的视图权限,这样可提供数据库在一定程度上的安全性,在通过分配权限、设置权限级别来区分对待不同的访问对象,来实现对数据库操作的安全要求;系统平台的安全性体现在操作系统安全和网络安全等方面,通过加强系统平台的安全性,才能更好地保证数据库的正常运行工作。
完整性要求是,要求系统中的数据的正确性以及相容性。
通过建立主、外键,时用约束语句,或是使用触发器和级联更新等。
3.2数据字典
数据项是系统的显示单位,即不可再分的单元。
本系统的数据定义为:
表2-1管理员信息表
名字
Admin
别名
管理员
描述
储存管理员的各项信息
定义
管理员信息=ID+密码
备注
记录管理员信息
表2-2图书信息表
名字
BookInf
别名
图书
描述
储存图书的各项信息
定义
图书=书号+图书名+作者+出版商+价格+库存+类别+图片
备注
记录图书信息
表2-3用户信息表
名字
User
别名
消费者
描述
储存消费者的各项信息
定义
消费者=ID+密码+名字+地址+邮箱号+电话
备注
记消费者信息
表2-4订单信息表
名字
OrderForm
别名
订单
描述
订单各项信息
定义
订单=订单编号+用户号+书号+下单时间+结算价格+图书数量+付款状态
备注
记录订单信息
表2-5充值信息表
名字
Recharge
别名
消费者充值
描述
消费者充值信息
定义
充值=充值编号+消费者帐号+金额+充值时间
备注
记录充值表信息
3.3物理结构设计
数据库在物理设备上的存储结构域存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统,为了一个给定的数据库模型选取一个合适的应用要求的数据结构的过程是数据库的物理设计。
数据库的物理设计主要分两步:
一步是确定数据库的物理结构,在关系数据库中主要存取方法和存储结构;另一步是对数据结构进行评价。
根据题目的要求设计的数据库的物理结构如下:
系统数据库命名为Book数据库中的数据表有:
图书信息表,管理员信息表,用户信息表,订单信息表,订单商品信息表;
表3-7图书信息数据表
字段名
数据类型
长度
主键
描述
BookId
varchar
50
是
图书编号
BookName
varchar
50
否
书名
BookAuthor
varchar
50
否
作者
BookPress
varchar
50
否
出版社
Image
varchar
50
否
图片地址
BookClass
varchar
50
否
类别
Bookprice
varchar
50
否
价格
Bookstock
varchar
50
否
库存
表3-8管理员信息数据表
字段名
数据类型
长度
主键
描述
AdminId
Varchar
50
是
管理员编号
AdminPwd
Varchar
50
否
密码
表3-9用户信息数据表
字段名
数据类型
长度
主键
描述
UserId
Varchar
50
是
用户编号
UserName
Varchar
50
否
昵称
UserPwd
Varchar
50
否
密码
UserTel
Varchar
50
否
电话
UserAddr
Varchar
50
否
住址
UserPost
Varchar
50
否
邮编
表3-10订单信息数据表
字段名
数据类型
长度
主键
描述
OrderId
Int
是
订单号
UserId
varchar
50
否
用户Id
BookId
varchar
50
否
图书标号
BookName
varchar
50
否
书名
OrderDate
Datetime
否
时间
IsConfirm
varchar
50
否
是否付款
Expenditure
Money
否
金额
Number
Int
50
否
数量
表3-11订单详细信息数据表
字段名
数据类型
长度
主键
描述
Id
Int
是
记录编号
UserId
varchar
50
是
用户编号
IMoney
Smallmoney
否
消费记录
Idatetime
Datetime
否
充值时间
表3-12用户余额信息表
字段名
数据类型
长度
主键
描述
UserId
Varchar
50
是
用户编号
UserBlance
Smallmoney
否
用户余额
4.系统实现
图书销售管理系统是典型的信息系统,其开发包括后台的数据库的建立、维护以及前台应用程序的开发两个方面:
一方面要求建立数据一致和完整性强、数据安全性高的数据库;另一方面要求应用程序具有功能简单、实用。
图书管理涉及图书信息、用户信息、系统用户信息等多种数据的管理。
管理可分三类:
图书信息管理、用户信息管理、和系统用户管理。
4.1用户登录界面
输入用户名和密码,经过数据库的验证即可登录到主页面,登陆界面设计不同用户的登陆权限和登陆方法。
对所有的用户开放图书的浏览功能。
查看自己的信息。
用户登录界面如图4-1。
图4-1
主要代码如下:
publicpartialclass_Default:
System.Web.UI.Page
{
//创建公共类DBClass一个新实例对象
DBClassdbObj=newDBClass();
protectedvoidButton1_Click(objectsender,EventArgse)
{
if(this.Username.Text.Trim()!
=""||this.Userpwd.Text.Trim()!
="")
{
//定义一个字符串,获取用户信息
stringusertest="select*fromUserswhereUserId='"+Username.Text+
"'";
DataTabledstTable=dbObj.GetDataSetStr(usertest,"tbUsers");
//判断用户是否存在
if(dstTable.Rows.Count==0)
useridtest.Text="该用户不存在";
else
{
stringuserlogin=string.Format("select*fromUserswhere
UserId='{0}'andUserPwd='{1}'",Username.Text,Userpwd.Text);
DataTabledslTable=dbObj.GetDataSetStr(userlogin,"tbUsers");
if(dslTable.Rows.Count==0)
{
useridtest.Visible=false;
userpwdtest.Visible=true;
}
else
{
Session["UserId"]=dslTable.Rows[0][0].ToString();//保存用户ID
Session["UserName"]=dslTable.Rows[0][1].ToString();//保存用户名
Response.Write("");
//Response.Redirect("../zhuye2.aspx");
}
}
}
else
{
useridtest.Visible=true;
useridtest.Text="用户名不能为空";
}
}
4.2用户查看图书界面
用户网上购买图书,查看图书信息。
如图4-2
图4-2
主要代码:
publicpartialclasszhuye2:
System.Web.UI.Page
{
CommonClassccObj=newCommonClass();
DBClassdbObj=newDBClass();
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!
Page.IsPostBack)getchanpin();
if(Session["UserId"]!
=null)
{
LinkButton2.Text=Session["UserName"].ToString();
LinkButton2.PostBackUrl="~/users/updatainf.aspx";
}
}
protectedvoidLinkButtonPrev_Click(objectsender,EventArgse)
{
this.LabelPage.Text=Convert.ToString(int.Parse(this.LabelPage.Text)-1);
getchanpin();
}
protectedvoidLinkButtonNext_Click(objectsender,EventArgse)
{
this.LabelPage.Text=Convert.ToString(int.Parse(this.LabelPage.Text)+1);
getchanpin();
}
protectedvoidLinkButtonLast_Click(objectsender,EventArgse)
{
this.LabelPage.Text=this.LabelTotalPage.Text;
}
protectedvoidLinkButtonFirst_Click(objectsender,EventArgse)
{
this.LabelPage.Text="1";
getchanpin();
}
privatevoidgetchanpin()
{
stringstrSql=getstring();
//stringstrSql="select*fromBookInforderbyBookId";
DataTabledsTable=dbObj.GetDataSetStr(strSql,"tbMember");
PagedDataSourceobj=newPagedDataSource();
obj.DataSource=dsTable.DefaultView;
obj.AllowPaging=true;
obj.PageSize=4;
intdpage=Convert.ToInt32(this.LabelPage.Text);
obj.CurrentPageIndex=dpage-1;
if(obj.CurrentPageIndex<0)
{
obj.CurrentPageIndex=0;
}
//只有一页时禁止上下页按钮
if(obj.PageCount==1)
{
LinkButtonPrev.Enabled=false;
LinkButtonNext.Enabled=false;
}
else//duoyeshi
{
if(dpage==1)
{
LinkButtonPrev.Enabled=false;
LinkButtonNext.Enabled=true;
}
if(dpage==obj.PageCount)
{
LinkButtonPrev.Enabled=true;
LinkButtonNext.Enabled=false;
}
}
this.LabelTotalPage.Text=Convert.ToString(obj.PageCount);
DataList1.DataSource=obj;
DataList1.DataBind();
}
protectedvoidButton1_Click(objectsender,EventArgse)
{
getstring();
getchanpin();
}
publicstringgetstring()
{
stringbookname=booknameBox.Text;
stringbookauthor=authorBox.Text;
stringbookpress=TextBox1.Text;
stringbookclass=DropDownList1.Text;
stringstrSql="selectBookId,BookName,BookAuthor,BookPress,BookStock,
BookPrice,BookClass,ImagefromBookInfwhere1=1";
if(bookname!
="")
{
strSql=strSql+"andBookNamelike'%"+bookname+"%'";
}
if(bookauthor!
="")
{
strSql+="andBookAuthorlike'%"+bookauthor+"%'";
}
if(bookpress!
="")
{
strSql+="andBookPresslike'%"+bookpress+"%'";
}
if(bookclass!
="")
{
strSql+="andBookClass='"+bookclass+"'";
}
return(strSql);
}
}
4.3用户注册界面
用户可以注册自己的信息,如图4-3
图4-3
SqlConnectionstrSq=dbObj.GetConnection();
stringstrSql="select*fromUserswhereUserId='"+this.TxtName.Text.Trim()+"'";
DataTabledsTable=dbObj.GetDataSetStr(strSql,"tbAdmin");
if(dsTable.Rows.Count>0)
{
Response.Write(ccObj.MessageBoxPage("该?
用®?
户¡ì已°?
存ä?
在¨²!
ê?
"));
}
else
{
stringstrId=this.TxtName.Text.Trim();
stringstrname=this.txtPassWord.Text.Trim();
stringstrAdd=this.TextBox1.Text.Trim();
stringstrPost=this.TextBox2.Text.Trim();
stringstrPwd=this.TextBox3.Text.Trim();
stringstrTel=this.TextBox5.Text.Trim();
stringstrAddSql="insertintoUsers(UserId,UserName,UserAddr,UserPost,UserPwd,UserTel)";
strAddSql+="values('"+strId+"','"+strname+"','"+strAdd+"','"+strPost+"','"+strPwd+"','"+strTel+"')insertintoBalance(UserId,UserBalance)values('"+strId+"','0')";
SqlCommandmyCmd=dbObj.GetCommandStr(strAddSql);
myCmd.Connection=strSq;
strSq.Open();
myCmd.ExecuteNonQuery();
Response.Write("");
}
4.4用户订单界
用户可以查看已支付和未支付订单,如图4-4。
图4-4
stringconbuy="selectExpenditure,NumberfromOrderFormwhereOrderId='"+TextBox1.Text+"'";
DataTablebbTable=dbObj.GetDataSetStr(conbuy,"tbOrderForm");
if(bbTable.Rows.Count!
=0)
{
stringcombuy="selectUserBalancefromBalancewhereUserId='"+Session["UserId"]+"'";
DataTablebbyTable=dbObj.GetDataSetStr(combuy,"tbBalance");
floata=float.Parse(bbTable.Rows[0][0].ToString());
floatb=float.Parse(bbyTable.Rows[0][0].ToString());
if(a>b)
{
Response.Write("");
}
else
{
SqlConnectionstrSql=dbObj.GetConnection();
SqlCommandupdCmd=newSqlCommand();
strSql.Open();
Response.Write(Session["booknum"]);
updCmd.CommandText="declare@iintselect@i=(se