资源描述
目录
一 绪论 1
1.1 课题背景及现实状况 1
1.2 开发工具介绍 1
二 需求分析 2
三 概要设计 5
四 逻辑设计 7
五 具体设计 9
六 测试结果 21
七 小结 21
参考文件 25
一 绪论
1.1 课题背景及现实状况
软件定义:仓库管理系统
在当今时代,伴随社会,技术,尤其是计算机发展,人工智能已经成为时代需求,而纯人工已经成为过去。在这么一个背景下!仓库存放作为一个时代产物,信息化,智能化也成为必需了。同时开发一个仓库管理系统也变得紧迫需要。
仓库管理系统用于对企业出入库日常管理,是一套高效信息管理系统。它能够为企业提供优异业务信息管了处理方案,改善传统工作方法,提升企业所经营物品供、销、存运转效率,缩短管理周期,降低因为反复操作而带来人为差错,减轻管理人员工作强度、降低管理成本。
软件定义:从用户需求开始,从对用户需求分析,到数据步骤图完成,然后,概念设计,E-R图设计,接下来,将E-R图转换成关系模型,当然这个关系模型要满足一定范式地 要求,这么要是依据实际情况决定!再接下来,设计数据库,进行具体设计,依据用户需求选择是做成c/s,还是b/s形式!!最终是软件测试和维护。这个整个过程是一个完整步骤,这个过程被称为软件开发。成品为软件。
1.2 开发工具介绍
这次项目关键是使用Eclipse和Microsoft SQL Server。
Sqlsever 数据开发工具! Sqlsever是微软企业开发智能,大型实用型数据库设计工具!现在在市场上大部分企业用是oracle,bb2等数据开发工具。因为我们课堂上介绍是Sqlsever,我就选择了它。
Eclipse是开放源代码项目,其本身是用Java语言编写。Eclipse是我们在学习Java中使用过工具,它功效比较完整!乍一看起来,Eclipse界面有点象JBuilder,但实际操作进程中会发觉它更象IVJ,毕竟开发Eclipse主导用量是开发IVJ原班人马。
Eclipse开发环境和IVJ一样,Eclipse开发环境被称为Workbench,它关键由三个部分组成:视图(Perspective),编辑窗口(Editor)和观察窗口(View)。在下面介绍中,期望读者能知道Java视图,Java包浏览窗口,资源视图,资源浏览窗口等区分(其实最关键也就是要区分视图和窗口)。
Asp运行在装有MicrosoftIIs操作系统中,所以创建Asp应用程序之前,需要安装相关操作系统和Web服务器。
二 需求分析
2.1目标设计:
仓库管理系统需要实现功效相对来说比较简单,最关键是物品入库操作、出库操作和提货单管理,对供给商、提货单位管理功效,和对库存中物品数目标管理功效。另外,作为一个完整系统,为了确保系统安全,还有必需对使用本系统用户进行身份验证和权限管理等。
仓库管理系统实现功效以下:
1.系统用户登录和身份验证
●系统用户进入系统需要经过身份验证。
●系统用户在登录系统以后,在不一样页面跳转浏览时身份验证。
2.库存管理功效
●库存信息管理,包含添加仓库、查看仓库、删除仓库。
●提货单为信息添加。
●货物类别信息添加。
●物品信息添加。
●提货单管理。
3.权限管理功效
在本系统中,将权限分为俩种,一个为超级管理员权限,该权限能够管理系统中定义全部仓库;而另一个为一般管理员权限,该权限只能管理分配给她某个仓库。
2.2数据流图:
商品入库数据流图:
商品入库登记
产生入库表
更新数据库
处理事务
仓库管理员
入库单
供给商
事务 事务
库存清单
商品出货数据流图:
商品出库登记
更新数据库
处理事务
采购员
产生出库表
出库单
仓库管理员
事务 事务
库存清单
商品订货数据流图:
订货信息
产生订货表
处理事务
更新数据库
采购员
仓库管理员
事务 事务 订货单
库存清单
2.3数据字典:
1:名字: 用户表
描述: 统计全部能够登录该系统用户名、密码和其它相关数据;
定义: 用户名+密码+备注+IP地址;
位置: 输出到打印机;
2:名字: 供给商信息表
描述: 此表统计全部供给商信息。;
定义: 供给商名称+供给商编号+备注;
位置: 输出到打印机;
3:名字: 提货单位信息表
描述: 该表是指某物在出库时提货者信息;、
定义: 使用编号+名称+备注;
位置: 输出到打印机;
4: 名字: 仓库信息表
描述: 一个企业可能会有很多仓库,就存放在这个表中;
定义: 仓库编号+仓库名称+备注;
位置: 输出到打印机;
5:名字: 物品类别信息表
描述: 该表统计仓库中具体物件名称和其它相关信息;
定义: 类别名称+类型编号+所属仓库名
位置: 输出到打印机;
6. 名字: 物品信息表
描述: 此表统计仓库中具体物件名称和其它相关信息;
定义: 仓库编号+类型编号+品名编号+品名物品名称+计量单位+目前库存数+目前库存总金额+最大储存量+最小储存量+储存地点+规格+货号+货名;
位置: 输出到打印机;
7. 名字:入库/出库明细表
描述: 该表统计全部各个仓库入库、出库统计,每当进行出库或入库操作是,就会有一条统计插入该表;
定义: 编号+统计日期+种类+号数+收入数量+收入单价+收入金额+发出数量+发出单价+发出金额+结存数量+结存单价+结存金额+品名编号+仓库编号+供给商编号+接收这编号+剩下数量
位置: 输出到打印机;
三 概要设计
这一设计阶段是在需求分析基础上,设计出能够满足需求多种实体,和它们之间关系,为后面逻辑结构设计打下基础。
本实例依据上面设计计划出实体有职员实体、供给商实体、提货单位实体、仓库实体、物品类别实体、物品信息实体、出库/入库实体。各个实体E-R图及其关系描述以下。
1.职员实体E-R图(用户编号,用户名,密码,是否在线,备注,IP地址)
User
User-id
username
password
isonlie
memo
ip
2.供给商实体E-R图(供给号,供给商名称,备注)
Provide
Provider-id
Provider-name
memo
3.提货单位实体E-R图(使用编号,使用名称,备注)
Uses
Uses-id
Uses-name
memo
4.仓库实体实体E-R图(仓库编号,仓库名称,备注)
Storage
Storage-id
Storage-name
memo
5.物品类别实体E-R图(类型名称,类型编号,该类别所属仓库)
Type
type-name
Type-id
in-storage
6.物品实体E-R图(仓库编号,类型编号,品名编号,物品名称,记量单位,目前库存数,目前库存总金额,最大储存量,最小储存量,储存地点,规格,货号,货名)
Stock
Storage-id
no
Type-id
Name-id
unit
Now-stoc
now-stoc
max
rule
hm
address
min
7.入库/出库实体E-R图(编号,统计日期,种类,号数,收入数量,收入单价,收入金额,发出数量,发出单价,发出金额,结存数量,结存单价,结存金额,品名编号,仓库编号,供给商编号,用户编号,剩下数量)
Detail
In-price
rq
zl
hs
In-num
In-sum
id
Out-sum
Out-price
Out-sum
Now-price
Now-sum
Name-id
Provider-id
Storage-id
Left-num
Uses-id
四 逻辑设计
4.1基础表关系:
1.职员 (用户编号,用户名,密码,是否在线,备注,IP地址)
2.供给商(供给编号,供给商名称,备注)
3.提货单位(使用编号,使用名称,备注)
4.仓库(仓库编号,仓库名称,备注)
5.物品类别(类型名称,类型编号,该类别所属仓库)
6.物品(仓库编号,类型编号,品名编号,物品名称,记量单位,目前库存数,目前库存总金额,最大储存量,最小储存量,储存地点,规格,货号,货名)
7.入库/出库(编号,统计日期,种类,号数,收入数量,收入单价,收入金额,发出数量,发出单价,发出金额,结存数量,结存单价,结存金额,品名编号,仓库编号,供给商编号,用户编号,剩下数量)
4.2 数据库截图
职员:
供给商:
提货单位
仓库信息:
物品类别信息:
物品信息:
入库/出库:
前5个关系达成了BC范式,后俩个达成3范式。
4.3定义权限:
管理:用户表user中字段in_storage意思是所属仓库,在表storage中存放着仓库,且表中字段storage_id就是仓库编号,in_storage和之对应,而storage_id是自动编号产生,所以不会有小于等于0数字,依据这么,当in_storage值为0时,即不属于任何仓库用户,即她们能够管理任何仓库,也即能够称之管理员了!
查看:用户表user中字段viewother是查看其它仓库,一个用户是否能够查看全部仓库首先看她是否能够管理全部仓库,假如能够就能够查看其它仓库,假如不能够,即只能管理一个仓库,那么就要看字段viewother值为何,假如为“是”那么能够查看其它仓库,假如为“否”则不能看其它仓库。
五 具体设计
在该系统中关键由基础信息维护模块、库存管理模块和安全管理模块3大模块组成。
库存管理系统
基础信息维护模块
库存管理模块
安全管理模块
1 系统功效模块图
基础信息维护模块
职员信息
仓库信息管理
2 基础信息模块图
库存管理模块
入库管理
出库管理
提货单管理
3 库存管理模块
安全管理模块
权限管理
用户管理
4 安全管理
5.1功效说明:
1.登录:
登录模块在文件default.asp中,即仓库首页中,在登录时需要填写“用户名、密码、选择仓库”三项,假如用户名和密码有最少一个不正确时,就提醒“用户名或密码错误”。
2、分类查看库存 - type.asp
因为该界面使用一个目录树结构概念,进入时显示总分类类别,总分类下也可直接创建物品,但通常全部不会有。
3、浏览库存(管理库存) - brow.asp
她适合于规模小,分类简单仓库,而且在上面将该仓库全部分类名称列出来,能够很方便选择哪个分类来查看该类别下全部库存。
4、今日库存报表 - report.asp
日报表是将今日全部仓库中物品依据出、入库情况进行填充报表表格,她能够自动计算某样物品今日全部出库数量、出库金额、入库数量、入库金额、目前库存数、目前库存金额。
5、查看全部库存 - all.asp
只有在这里才能够一览全部仓库情况,能够很方便选择某个仓库再选择其下某个类别进行查看,或查找时,是针对全部仓库来找,要进入此页面,必需该用户含有能够查看其它仓库权限。
6、修改密码 - chkpass.asp
修改密码是让用户在线时进行修改自己密码,要先以自己用户名和密码登录进去,新密码和校验密码一致时才能够正确修改密码。
7、查看在线人数online.asp
能够查看目前在线人数,和她们用户名,登录时间和其IP地 址。
8、新增用户 - newuser.asp
在线式进行增加用户名,这种方法含有权限继承性,即只有能够管理全部仓库才能够分配给新用户这种权限,只有能够查看全部仓库才能够分配给新用户这种权限。
9、新增分类
typemanage.asp只是新增总分类下类别。
Newtype.asp是在树型结构中进行动态分类,是增加目前类别下 新类别。
10、新增仓库 - storagemanage.asp
对表storage进行增加仓库名称,该程序一个很大优点就在于此,只要新加入一个仓库,这个仓库在使用时和其它仓库使用没有任何关系,只是她们能够放在一起进行查看,是她们唯一联络。
11、新增供给商 - providermanage.asp
对每一个进库物品,全部需要指明供给商是谁,不然不就搞出了三无产品嘛?对供给商管理还有待完善。
12、新增用处 - usesmanage.asp
用处是相对供给商,既然货有源,那么使用也得有个对象,要从这里反应出,某物品从哪里来,又走象哪里了。
13、新增品名 - newname.asp
对目前仓库目前类别下新增物品,用来描述物品信息。当新增某物品时还需对她进行入库、出库等操作,该物品才算有意思。
14、入库操作 - in.asp
即收入,对仓库一个进过程,需要输入物品数量、单价、摘要、供给商等信息。当数据全正确确定能够保留时,程序先将全部已经有库存统计逐一重新誊写一遍至目前日,然后再新增一个统计表示现在入库数据,并重新统计现在库存数量,并写到stock中表示现有库存情况,而且重新改写“记帐统计标志jz_log”,用来标识最终一个操作,置全部统计为0,并将刚誊写及新增统计为1,只在list.asp显示明细中用颜色块显示时使用,清楚表示目前库存情况。
15、出库操作 - out.asp
出库和入库相反,在出库时先将出库请求数量和现有库存数量比较,假如小于等于库存数,则能够出库,假如大于库存了,则提醒不能出库,以save_out.asp来检测数据。当能够出库也是将全部已经有库存统计逐一重新誊写一遍至目前日,产生新数据,然后依据具体出库数量依据“先入先出”标准从最早一批开始出库,假如第一批数量不足,再继续出第二批,第二批不足,再继续出第三批,依次类推,直到全部达成出库请求数量。
16、退出 - logout.asp
在使用完后,一定要使用退出来结束工作,一来是注册表user使自己名称已经下线,并统计下线时间,二来为了安全起见。
5.2功效实现:
首页
一. 基础信息维护模块:
1. 新增职员:
页面设计:
本系统添加职员页面图所表示,在该页面上管理员需要输入用户、职员登录密码和分配给该职员管理仓库而且需要给该职员给予一定权限。
实现方法:当用户填写表单后,首先把填写结果交给指定程序检验,这里采取在服务器端检验填写结果正当性。假如填写结果正当,则将表单内容交给newuser.asp页面,负责将用户信息写入数据库中。newuser.asp文件关键代码以下:
if request("name")="" then
msg=msg+"请输入用户名!<br>"
end if
if request("password")="" then
msg=msg+"请输入密码!<br>"
end if
if request("confirm")="" then
msg=msg+"请输入确定密码!<br>"
end if
if request("password")<>request("confirm") then
msg=msg+"密码和确定密码不一致!<br>"
end if
if request("selstorage")=0 and request("manage")="" then
msg=msg+"隶属仓库和是否能够管理其它仓库最少选择一样!"
end if
sql="select * from user where username='"&session("username")&"'"
rs.open sql,conn
if rs("in_storage")>0 and request("manage")<>"" then
msg=msg&rs("username")&"本身就没有管理其它仓库权限,所以这里就不能选!<br>"
end if
if rs("viewother")=False and request("view_other")<>"" then
msg=msg&rs("username")&"本身就没有查看其它仓库权限,所以这里就不能选!<br>"
end if
rs.close
if msg<>"" then
showerror(msg)
end if
sql="select * from [user] where username='"&request.form("name")&"'"
rs.open sql,conn,3,2
if not rs.eof then
showerror("该用户名已经存在,请重新选择另一个试试!")
else
rs.addnew
rs("username")=request.form("name")
rs("password")=request.form("password")
rs("memo")=request.form("memo")
if request.form("manage")="" then
if request.form("selstorage")<>0 then
rs("in_storage")=request.form("selstorage")
else
rs("in_storage")=session("storage")
end if
else
rs("in_storage")=0
end if
if request.form("view_other")="" then
rs("viewother")=False
else
rs("viewother")=True
end if
rs.update
ShowSuccess("数据已经成功保留!")
end if
rs.close
else
%>
2.查看/删除职员信息
页面设计:
若管理员单击了“查看用户信息”超链接,将会进入图所表示页面,在该页面上列出了全部使用该系统用户名称、所管理仓库、最近登录时间等信息、
实现方法:
查看用户信息页面使用是用户信息表,应用该表username用户名、in-storage所在仓库、login-time登录时间、memo备注等信息。实现文件viewuser.asp代码段以下:
<%
CheckLogin
getStorage(session("storage"))
SQL="select * from [user] order by username"
rs.open sql,conn
%>
<table border='1' width=50% align='center' cellspacing='0' cellpadding='0' bordercolorlight='#000000'bordercolordark='#FFFFFF'>
<tr>
<td colspan=4 align=center><b><font>用户信息</font></b></td>
</tr>
<tr>
<td align=center><font>姓名</font></td>
<td align=center><font>所属仓库代码</font></td>
<td align=center><font>最近登录时间</font></td>
<td align=center><font>备注</font></td>
<td align=center><font>操作</font></td>
</tr>
<%
rs.movefirst
if not rs.eof then
do while not rs.eof
%>
<tr>
<td align=center><%=rs("username")%></td>
<td align=center><%=rs("in_storage")%></td>
<td align=center><%=rs("login_time")%></td>
<td align=center><%=rs("memo")%></td>
<td align=center><a href=deluser.asp?id=<%=rs("user_id")%>>删除该用户</a></td>
</tr>
<%
rs.movenext
loop
else
%>
二. 仓库信息管理(本模块实现仓库信息新增和查询处理)
1. 新增仓库
对于实际应用,企业或是单位仓库肯定不止一个,所以这就要求系统必需含有增加仓库功效。这个仓库在使用时和其它仓库使用没有任何关系,只是能够把它们放在一起进行查看,这是她们唯一关系。效果图以下:
实现代码:
<%
if Request.ServerVariables("REQUEST_METHOD")="POST" then
if request.form("storagename")<>"" then
sql="selec* from storage where storage_name='"&request.form("storagename")&"'"
rs.open sql,conn,3,2
if rs.eof then
rs.addnew
rs("storage_name")=request.form("storagename")
rs("memo")=request.form("memo")
rs.update
ShowSuccess("数据已经成功保留!")
else
showerror("该仓库已经存在,请重新输入")
end if
rs.close
else
showerror("请输入仓库名称")
end if
else
%>
2. 查看仓库信息
<%
CheckLogin
SQL="select * from storage order by storage_id"
rs.open sql,conn
%>
三. 库存管理
1. 入库管理
入库即操作,是对仓库一个进过程。需要输入商品数量、单价、摘要、供给商等信息。故该页面关键功效是显示该物品部分基础信息如物品名称、目前库存数目和单位等信息,而且搜集用户端输入待入库物品数量、单价、供给商等信息。
%>
当用户填写完所需信息后,单击“添加”,服务器将会把用户信息传给save-in.asp文件,其关键代码:
if msg<>"" then
showerror(msg)
end if
session("selprovider")=request("selprovider")
sql= "update detail set jz_log=0 where name_id="&session("name_id")&" and storage_id="&session("storage")
rs.open sql,conn
sql="select * from detail where name_id="&session("name_id")&" and storage_id="&session("storage") &" and left_num>0 order by id"
rs.open sql,conn,3,2
if not rs.eof then
sql="select * from detail"
rs3.open sql,conn,3,2
do while not rs.eof
rs3.addnew
rs3("jz_log")=0
rs3("storage_id")=session("storage")
rs3("provider_id")=request("selprovider")
rs3("name_id")=session("name_id")
rs3("rq")=date()
rs3("zl")=request("zl")
rs3("hs")=request("hs")
rs3("zy")=request("zy")
rs3("now_num")=rs("now_num")
rs3("now_price")=rs("now_price")
rs3("now_sum")=rs("now_sum")
rs3("left_num")=rs("left_num")
rs3("jz_log")=1
rs3.update
rs("left_num")=0
rs("jz_log")=0
rs.update
rs.movenext
loop
rs3.close
end if
rs.close
sql="select * from detail"
rs.open sql,conn,3,2
rs.addnew
rs("jz_log")=1
rs("storage_id")=session("storage")
rs("provider_id")=request("selprovider")
rs("name_id")=session("name_id")
rs("rq")=date()
rs("zl")=request("zl")
rs("hs")=request("hs")
rs("zy")=request("zy")
rs("in_num")=request("in_num")
rs("in_price")=request("in_price")
rs("in_sum")=rs("in_num")*rs("in_price")
rs("out_num")=0
rs("out_price")=0
rs("out_sum")=0
rs("now_num")=rs("in_num")
rs("now_price")=rs("in_price")
rs("now_sum")=rs("in_sum")
rs("left_num")=rs("in_num")
rs.update
rs.close
update_stock
response.redirect "list.asp?id="&session("name_id")
2. 出库管理
假如用户经过了验证,登录到管理页面,而且库存充足就能够进行出库操作了。该页面表单关键作用是搜集出库物品数量、提货单位等基础信息。
其关键代码为:
<%
CheckLogin
getStorage(session("storage"))
if request("id")<>"" then
session("name_id")=request("id")
sql="select * from stock where name_id="&request("id")
rs.open sql,conn,3,2
if not rs.eof then
session("name")=rs("name")
session("now_stock")="<font color=red>"&rs("now_stock")&"</font> "&rs("unit")
rs.close
gettypepath
response.write " -> [ <font color=red>"&session("name")&" </font> ]"
else
showerror("没有找到统计!")
end if
%>
3.提货单管理
<%
sql="select * from stock where name_id="&request("id")
rs.open sql,conn
if not rs.eof then
%>
四. 用户管理
1. 用户登录
出于对系统安全考虑,需要给系统使用者提供一个登录系统入口。该系统有一个登录系统入口,要求系统使用者输入对应用户名和密码,并依据需求分析分配出俩种权限-----仓库管理员权限和系统管理员权限。
在该登录页面,用户输入完自己用户名和密码,并在下拉列表中选择登录仓库,单价OK按钮后,表单将会被提交到loginchk.asp进行用户名和密码验证。其部分处理代码以下:
<%
showtitle("登录检验")
session("logname")=request("username")
dim user,password,selstorage
user=request("username")
password=request("password")
selstorage=request("selstorage")
sql="select * from [user] where username='"&user&"' and password='"&password&"'"
rs.open sql,conn,3,2
if not rs.eof then
rs("isonline")=True
rs("login_time")=now()
rs("ip")=Request.ServerVariables("REMOTE_HOST")
rs.update
if (rs("in_storage")>0 and rs("in_storage")-selstorage=0) or rs("in_storage")=0 then
session("userlogin")="true"
session("storage")=selstorage
session("username")=user
response.cookies("adminok")=true
2. 用户修改密码
<%
if Request.ServerVariables("REQUEST_METHOD")="POST" then
sql="select * from [user] where username='"&session("username")&"' and password='"&request.form("old_pass")&"'"
rs.open sql,conn,3,2
if not rs.eof then
if request.form("new_pass")=request.form("confirm_pass") then
rs("password")=request.form("new_pass")
rs.update
showsuccess "修改成功!"
else
showerror "错误!"
end if
六 测试结果
1.新增用户:
2.新增物品类别:
3.新增供给商类别
4.新增仓库
5.新添物品
6.货物清单
7.供货商信息
8.货物清单
七 小结
完成这个超小型仓库管理系统以后,确实有很多感想。 最深感慨就是:学习软件专业,必需去实践,不然一切学习只能是纸上谈兵。
首先:开始时候,我总是在想我学习还是不够,这个仓库管理系统该怎么弄呢?总是徘徊之中,不知道从何处下手。
然后:我去图书馆找到一本相关数据库开发书,我开始学习VBScript编程,即使我们没有学过,不过因为有了学习语言基础,还有足够时间,我开始根据那本书上教一步步做,而且开始了对这个仓库管理系统思索,首先我对这个系统界面进行了一定思索。也查询了很多学习资料。
和此同时,软件工程,数据库理论学习,已经有了一定火侯了,软件工程,从软件工程角度更深度考虑了,整个软件步骤!和软件开发思绪,这使得我思绪一下子就被打通了。数据库理论学习中,我学到了E-R图,数据库设计过程:需求分析,概要设计,逻辑设计,具体设计,数据库维护。这和我在软件工程当中学习十分吻合!
最终:我开始我制作,我是一边制作,一边思索,在制作过程当中,我碰到了相当多问题,我经过internet,经过其它同学,经过老师,将问题一个一个吃掉。那种愉快真难以忘怀!
当我处理了一个关键问题时候我们心里久久难以平静!到了最终我还是有了小小成绩。
在期间,我碰到很多问题,比如:1;将数据库表数据取出表现在系统界面上。我花了好长时间。2;在配置IIs时也出了问题,根据书上做,总是有问题,以后找了高手帮我处理了。3; 满足多种需求查询,我也考虑了很多查询需求。最终还是较满意。
我这个软件只是小小试试,学习一个过程,假如要真正完善这个软件还有很多事情要去做。在Web应用中“回话状态”对于跟踪保留用户操作有着至关关键作用。在本仓库管理系统开发中,因为用户登录系统以后需要在不一样页面 切换,而在这些页面中全部需要显示该用户登录仓库,所以,把仓库编号保留到Session范围中,就能够方便地在不一样页面中引用它。不过在带来方便同时,也付出了性能上代价。当大量用户访问时,将会占用大量宝贵服务器内存。在实际应用中还是应该尽可能少用Session对象来保留变量。比如:1;我还没有时间进行当用户使用时候,输入破坏了数据库完整性,给用户和提醒。2;还有临时表建立。3;数据存放过程建立,索引得 建立,4;多种完善,依据用户需求查询要求。5;数据库安全性考虑,程序健壮性考虑,6;系统整体效率考虑等等……
八 参考文件
[1]王珊,萨师煊.数据库系统概念.高等教育出版社.
[2]张海藩.软件工程导论(第四版).清华出版社.
[3]屈喜龙,朱杰.ASP+SQL Server开发动态网站实例荟萃.
[4] 张友生主编.数据库系统工程师考试试题分类精解和题型练习(第2版).电子工业出版社.
[5] 邵峰晶,于忠清主编.数据挖掘原理和算法.清华大学出版社.
[6] 丁振凡主编.Java语言实
展开阅读全文