目录
第一章 前言 2
第二章编程环境基础知识 3
2.1 利用ADO访问数据库 3
2.2ASP与CGI的比较 4
第三章需求分析 6
3.1功能需求分析 6
3.2性能需求分析 6
3.2.1软件 6
3.2.2硬件 6
第四章总体设计 7
4.1数据库的设计 7
4.1.1数据库的需求分析 7
4.1.2概念结构的设计 7
4.1.3数据库逻辑结构的设计 10
4.1.4物理结构的设计 10
4.2功能模块的划分 14
第五章 详细设计 14
5.1模块详细的设计 15
5.1.1模块接口 15
5.2页面设计及代码 18
5.2.1注册页面及代码分析 18
5.2.2用户登陆界面及代码分析 20
5.2.3 影片浏览界面及代码 22
5.2.4用户信息界面及代码分析 26
5.2.5 用户资料界面及代码 30
5.2.6 查看用户租赁信息截面及代码 35
5.2.7 用户预定影片界面及代码 38
5.2.8 用户注销的代码分析 40
第六章节调试 41
结论 42
结束语 42
致谢 43
参考文献 43
第一章 前言
互联网发展速度迅猛,电子商务成为21世纪商务发展道路上的一大热点,随着宽带网络的普及及互联网应用方式的发展,电子商务正以前所未有的速度对
传统的商务方式及理论造成可很大的冲击。并对以往的商务方式所进行的行业进行可很大程度的渗透。
电子商务以其低廉的成本,相对方便的应用,以及互联网络所带来的前所未有的宣传效应,正成为商务活动发展的一个至关重要的平台。因此我们想开发一个在线的影片租赁系统,以此来表达我们对电子商务发展的拥护和对其前景的看好
第二章编程环境基础知识
2.1 利用ADO访问数据库
ADO(ActiveX Data Objects)是一种操作Microsoft所支持的数据库的新技术。在ASP中,ADO可以看作是一个服务器组件(Server Component),更简单点说,是一系列的对象,应用这些功能强大的对象,即可轻松完成对数据库复杂的操作。本文中个性化页面的实现便大量地用到了ADO技术。具体的操作步骤可以归纳为以下几步:
1.创建数据库源名(DSN)
2.创建数据库链接(Connection)
3.创建数据对象
4.操作数据库
5.关闭数据对象和链接
每一步的作法如下:
1、创建数据源名
DSN(Date Source Name)即数据源名称。我们知道,ODBC是一种访问数据库的方法,只要系统中有相应的ODBC驱动程序,任何程序就可以通过ODBC操纵驱动程序的数据库。比如我们系统中有Access的ODBC驱动程序,那么即使我们没有Access软件,也可以在我们的程序中对一个Access的MDB数据库加、删、改记录。而且我们根本不用知道这个数据库是放在哪里的。我们只要写出SQL语句,ODBC驱动程序就会帮我们做一切事情。我们在给ODBC驱动程序传SQL指令时,即是用DSN来告诉它到底操作的是哪一个数据库。如果数据库的平台变了,比如我们改用了SQL Server的数据库,只要其中表的结构没变,我们就不用改写我们的程序,只要重新在系统中配置DSN就行了。由此可见,DSN是应用程序和数据库之间的桥梁。
2、创建数据库链接(Connection)
链接用以保持一些关于正在访问的数据的一些状态信息,以及链接者信息。ASP文件中如果要访问数据,必须首先创建与数据库的链接,其语法如下:
set Conn=Server.createObject(“ADOBD.CONNECTION”)
这条语句创建了链接对象Conn,接下来:
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data.Source="&Server.MapPath(""&db&"")
conn.Open connstr
这条语句打开链接,用到了DSN,本例为“connstr”。
以上两个步骤缺一不可,因为链接对象的创建与打开是两回事,只有打开了才真正可以使用。
3、创建数据对象(Record Set)
ADO中的数据对象通常保存的是查询结果。Record Set是ADO中最复杂的对象,有许多属性和方法。Record Set保存的是一行行的记录,并标有一个当前记录。以下是创建方法:
Set Record Set=Conn.Execute(sqtStr)
这条语句创建并打开了对象Record Set,其中Con是先前创建的链接对象,rs是一个字串,代表一条标准的SQL语句。例如:
rs=“SELECT * FROM shop_books”
Set Record Set=mConn.Execute(rs)
这条语句执行后,对象Record Set中就保存了表tab1中的所有记录。
4、操作数据库
我们通过调用链接对象的Execute方法来将查询结果返回给一个数据对象或进行插入、删除等操作。例如:
rs=“INSERT INTO tab1 VALUES(1,2)”
mConn.Execute(rs)
/执行插入操作
5、关闭数据对象和链接对象
在使用了ADO对象之后要关闭它,因为它使用了一定的服务器资源。通过调用方法close实现关闭,然后再释放它。
Record Set.close
Set Record Set=Nothing
/关闭创建的数据对象
mConn.close
Set mConn=Nothing
/关闭创建的链接对象
2.2ASP与CGI的比较
CGI(Common Gateway Interface,通用网关接口)也是Internet上一种功能强大的Web页面技术,其工作方式有别于ASP。我们现对二者进行比较。
Active Server Pages开发Web应用程序的特点:
完全嵌入HTML,与HTML、Script语言完美结合。
无须手动编译和链接程序。
面向对象,并可扩展ActiveX Server组件功能。
使用脚本语言(java script、VBScript或PERL)编写。
存取数据库轻松容易(使用ADO组件)。
可使用任何语言编写自己的ActiveX Server组件。
无浏览器兼容问题。
程序代码隐藏,客户端仅能看到ASP输出的HTML文件。
缩短Web开发时间。
相比之下,使用CGI开发Web应用程序具有以下缺点:
不易与HTML文件集成。
须使用其他较复杂的语言来开发CGI程序。
程序开发时间较长。
存取数据库不容易。
每个CGI程序被不同用户执行时都得重新执行一次,并占去Server的一个端口(Port),降低Server效率。
可见,ASP在数据库访问、与HTML的集成、提高服务器的效率等诸多方面都优于CGI,更适应Web应用程序开发的需要,因此本文选择了ASP作为个性化页面生成器的开发工具。
第三章需求分析
3.1功能需求分析
传统的影片出租方式是以客户到固定的店面进行挑选,确定后找店员进行登记,交押金以后才能把片子带走,这种出租方式过程中的一些过程非常烦琐,给客户和店主带来的许多的不便。比如:商店的选址,客户在遇到业务繁忙的情况等等,这就容易造成一些本来可以避免的错误的发生。
因此,我们在开发在线的影片租赁系统的时,应对传统出租过程中的一些问题进行分析,并对其进行修改。
综上所述,影片租赁系统客户界面部分在开发的时候主要的功能、大致如下:
客户界面部分
用户的登陆和注册
个人信息的查看修改
影片的浏览
影片的预定
租赁信息的查看
3.2性能需求分析
3.2.1软件
开发环境为:OS(操作系统) Windows XP专业版
服务器:IIS 5.X
开发工具为:ASP ACCESS数据库 Dreamweaver
运行环境的基本需求: IE浏览器
3.2.2硬件
OS最低运行环境: CPU PENTIUNⅡ 300MHZ
内存 128MB
硬盘 20GB
Dreamweaver最低运行环境:
WinXP, Win2000, NT, Win9X
软件理想的运行环境:
Windonws Xp专业版
CPU PENTIUNⅡ 300MHZ
内存 128MB
硬盘 20GB
第四章总体设计
依据需求分析所确定的系统目标进行总体设计
4.1数据库的设计
4.1.1数据库的需求分析
用户的需求主要体现在对各总细心的浏览的,查询,保存和更新的操作上,这就要求数据库设计上能够满足用户的这些需求,并且在结构的设计上能够做到简单明了,并保证系统的工作效率
因此,影片的租赁系统客户管理部分在数据设计时,经过上述的需求分析,应该设计如下的数据项
用户信息:用户名 密码 真实姓名 身份证 详细住址,电话 E-MAIL
影片信息:片名 类型 简介,图片 影片ID 状态
影片类型:类型ID 类型名称
租赁信息:影片ID 用户ID 租借时间 租期 押金 结算时间 退还金额
系统信息: 版权 关于 联系人
4.1.2概念结构的设计
①为了方便设计与识别,以后E-R图中 代表实体 代表属性。
②实体与属性
实体: 用户 影片类型 影片 租借信息
属性:
用户:用户名 密码 真实姓名 身份证 详细住址
电话 E-MAIL
影片类型: 类型编号 名称
影片: 影片ID 片名 简介 图片
租借信息:影片ID 用户ID 租借时间 租期 押金 结算时间 退还金额 错误信息
③实体之间联系的分析
用户分为普通用户和管理员用户
影片从属与影片类型
一个用户可以拥有多个预定和租借关系
一部影片也可以同时拥有多个用户租赁和预定
一个租赁关系只能拥有一个相对应的租赁信息
④E-R图
总E-R图
影片实体E-R图
影片分类E-R图
系统信息E-R图
用户信息E-R图
租赁信息E-R图
4.1.3数据库逻辑结构的设计
影片租赁系统中所有的数据都存贮在ACCESS数据库中
将上面的数据库感念结构转化为ACCESS数据库所支持的关系数据模型
①关系模式
影片:(影片ID 名称 类型 简介 图片 状态)
用户: (用户ID 用户名 密码 真实姓名 身份证 详 细住址 电话 E-MAIL)
影片类型: (编号 名称)
租赁信息:(影片ID 用户ID 租借时间 租期 押金 退 还时间 退还金额 错误信息)
②范式分析
在数据库逻辑结构设计上,会接触到关系模型数据库关系的最常用的三个范式。数据库关系的完善程度,很大程度上决定了数据库逻辑结构设计的成败,因此,对实体与属性之间的范式分析,是很有必要的。各个实体与属性之间的范式分析如下:
数据库表中的字段都是单一属性的,不可再分
数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖
数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖
4.1.4物理结构的设计
命名规则:
1.没一个表把一个缩写用做表的一部分,如Viddeoinfo被缩写成VI
2.所有的列名后面都有一个后缀,用来表示大致的数据类型,如S代表字符串类型,N代表数值数据类型等等
3.主键包含一个后缀ID
4.外键包含其父键的主键名称及后缀F
由上面对实体与属性之间的关系分析与范式分式,得出了系统的物理结构如下:
租价方案表
字段名 描述 键 类型 长度 空值 默认值
PMT_ID_N 租价方案ID ● autocount Not Null
PMT_Price_N 日租价 single Not Null 0
PMT_Deposit_N 押金 single Not Null
PMT_Description_N 租价方案描述 varchar 50 Not Null 0
PMT_LateFee_N 滞纳金 single Not Null 0
。
供应商信息表
字段名 描述 键 类型 长度 空值 默认值
PI_ID_N 供应商ID ● autocount Not Null
PI_Name_S 名称 varchar 50 Not Null
PI_Description_S 描述 varchar 250
系统信息表
字段名 描述 键 类型 长度 空值 默认值
SI_Owner_S 系统使用者 ● varchar 250
SI_Copyright_N 版权所有者 varchar 200
SI_About_S 关于 varchar 250
SI_Logo_S Logo地址 varchar 250
SI_Content_S 联系人Email varchar 250
租赁信息表
字段名 描述 键 类型 长度 空值 默认值
TAC_ID_N 租赁号 ● auto count Not Null
TAC_VI_ID_FN 租赁影片ID ○ int Not Null
TAC_UI_ID_FN 租赁用户ID ○ int Not Null
TAC_ReserveTime_D 预定时间 datetime Not Null
TAC_TimeOut_B 是否超时 datetime Not Null False
TAC_Return_B 是否返还 boolean Not Null False
TAC_StartTime_D 起租时间 datetime
TAC_Lease_N 租期 int 1
TAC_EndTime_D 结租时间 datetime
TAC_UserPayment_N 用户付款数 single 0
TAC_Status_N 租赁状态 int Not Null
影片承载介质表
字段名 描述 键 类型 长度 空值 默认值
TI_ID_N 介质ID ● autocount Not Null
TI_Description_S 介质名 varchar 100 Not Null
影片信息表
字段名 描述 键 类型 长度 空值 默认值
VI_ID_N 影片ID ● autocount Not Null
VI_TI_ID_FN 影片介质ID ○ int Not Null
VI_VS_ID_FN 影片类型ID ○ int Not Null
VI_PMT_ID_FN 租价方案ID ○ int Not Null
VI_PI_ID_FN 供应商ID ○ int Not Null
VI_Title_S 影片名 varchar 50 Not Null
VI_Content_S 内容 big varchar
VI_Director_S 导演 varchar 100
VI_Playactor_S 演员 varchar 100
VI_Issuer_S 发行商 varchar
VI_Rank_N 评价 int Not Null 1
VI_RentCount_N 出租次数 int Not Null 0
VI_Count_N 浏览计数 int Not Null 0
VI_Status_N 影片状态 int Not Null 1
VI_AddTime_D 添加时间 datetime Not Null Now()
VI_Img_S 图片地址 varchar 150
影片类型表
字段名 描述 键 类型 长度 空值 默认值
VS_ID_N 影片类型ID ● autocount Not Null
VS_Description_S 描述 varchar 50 Not Null
VS_Count_N 类型浏览技术 int Not Null 0
VS_RentCount_N 类型租赁计数 int Not Null 0
用户信息表
字段名 描述 键 类型 长度 空值 默认值
UI_ID_N 用户ID ● autocount Not Null
UI_PI_ID_FN 供应商ID ○ int Not Null 0
UI_Name_S 用户名 varchar 20 Not Null
UI_Password_S 密码 varchar 100 Not Null
UI_IsLock_B 用户是否锁定 boolean Not Null False
UI_CerRank_N 信用级别 int Not Null 0
UI_IsProvider_B 用户是否为供应商 boolean Not Null False
UI_Email_S Email varchar 50 Not Null
UI_QQ_S QQ varchar 20
UI_IsAdmin_B 用户是否为管理员 boolean Not Null False
UI_RentCount_N 用户租赁计数 int Not Null 0
注意:键类型中,“●”标注的为主键;“○”标注的为外键。
4.2功能模块的划分
由于我做的主要是客户界面的设计,因此,经过上面的分析,由实体与属性之间的关系,以及对实际租赁过程的分析,得出客户界面的功能大致如下:
第五章 详细设计
5.1模块详细的设计
Index.asp 系统初始界面
功能:用户可在这里浏览,租赁影片,可以进行登陆,注册
Login.asp 用户登陆模块
功能:用户可以进行登陆
Logout.asp 用户用户注销登陆模块
功能 用户可以进行用户帐号的注销
Reg.asp 用户注册模块
功能 用户可以进行帐号的注册
BookMovie.asp 用户预定影片模块
功能 用户可以在这里进行影片的预定
Disprent.asp 显示租赁信息模块
功能: 可以显示租赁信息
Dispmovie.asp 显示影片信息
功能: 用户可以在这里浏览影片
5.1.1模块接口
在用户登陆主界面的时候,调用模块与被调用的模块,及调用的数据库文件之间的关系如下:
调用模块名 index.asp
被调用模块名 login.asp reg.asp dispmovie.sap NavBar.asp
index为首页 在这上面有用户的登陆注册,和影片的浏览,用户在点注册的时候的就调用了reg.sap,在点登陆的时候就调用了login.asp,在点注销的时候就调用了logout.asp,在用户打开页面的时候,可以浏览影片,这时候就要调用dispmovie.asp
输入,输出部分
在用户进行登陆的时候,用户名和密码为输入项,由login.asp收并连入数据库与userinfo进行比较核对,看是否为已经注册的用户
。
用户不是注册用户的话,可以进行注册,这时候调用reg.asp,又它把用户的注册信息输入数据库userinfo
在打开系统时,且没注册时用户可以浏览影片,这时候调用dispmovie.asp,从数据库videoinfo调出影片的信息
也可以点影片的类型名称进行浏览影片,这时间调用的是NavBar.asp,由它连入数据库VideoStyle,调出数据项
当用户登陆时,如果帐号密码输入不正确的话,这时候调用chkerr.asp,并连入数据库ErrCode,输出信息提醒用户
用户登陆以后可以在这里进行用户的管理,已租,预定的影片和到期影片的查看和影片的浏览,注销,和影片的分类浏览。
调用的模块是Login.asp,
被调用的是modifyUser.asp Disprent.asp Dispmovie.asp logout.asp
输入输出部分
当用户在点击用户管理时,调用modifyUser.asp,由它连入数据库userinfo,当用户修改了信息的时候,又由modifyUser.asp把修改后的信息存入userinfo中
当用户在点击已租,到期影片的查看的时候,调用的是login.asp,由它连入数据库Tenancy
当用户点注销的时候,调用的是logout.asp
用户在浏览和租赁影片的时候
调用的是head.asp
被调用的是NavBar.asp BookMovie.asp Dispmovie.asp
输入输出部分:
当用户浏览影片的时候,调用的Dispmovie.asp,由它连入数据库VideoInfo,并把信息输出
当用户点击影片分类浏览影片的时候,调用的是NavBar.asp,由它连入数据库,并把信息输出
当用户在预定影片的时候调用的是BookMovie.asp,由它连入数据库Tenancy,并把数据输出
5.2页面设计及代码
5.2.1注册页面及代码分析
代码分析:
当用户在点击注册,填写了注册信息,点注册按钮的时候,执行的代码如下:
‘如果检测到浏览器传递的值IsReg不为空,则执行代码;如果为空,则显示页面
‘代码部分
If Request("IsReg")<>"" Then
'判断用户输入的合法性
‘用户名、密码、确认密码、Email不能为空
If Request("UserName")="" Or Request("UserPassword")=""&_
Or Request("ConfirmPassword")="" Or Request("Email")="" Then
ResultMsg("必填的项目没有填写,请返回重新填写完整的信息!")
Response.End
End If
‘用户名不能为一排空格
Dim tmpUserName
For i=1 To Len(Request("UserName"))
tmpUserName=tmpUserName&" "
Next
If tmpUserName=Request("UserName") Then
ResultMsg("请不要输入空格代替必填项目,请返回重新填写完整的信息!")
Response.End
End If
‘密码与确认密码的输入必须匹配
If Request("UserPassword")<>Request("ConfirmPassword") Then
ResultMsg("两次输入的密码不匹配,请返回重新输入!")
Response.End
End If
‘Email必须符合格式
If IsValidEmail(Request("Email"))=False Then
ResultMsg("Email输入不符合规范,请返回重新输入!")
Response.End
End If
‘若QQ号不为空,则输入必须为数字
If Request("QQ")<>"" Then
If IsNumeric(Request("QQ"))=False Then
ResultMsg("QQ号码必须为数字,请返回重新输入!")
Response.End
End If
End If
‘用户名与密码中不能包含SQL字符“’”
If InStr(Request("UserName"),"'")>0 Or InStr(Request("UserPassword"),"'")>0 Then
ResultMsg("字符“'”为非法输入,请去掉此字符!")
Response.End
End If
‘用户名、密码、Email和QQ的字符数量不能超过数据库项目的数据类型的限制
If Len(Request("UserName"))>20 Or Len(Request("UserPassword"))>20&_
Or Len(Request("Email"))>50 Or Len(Request("QQ"))>20 Then
ResultMsg("输入超出了最大字符数量限制(用户名20字符以内”&_
”,密码20字符以内,Email 50字符以内,QQ 20字符以内。)")
Response.End
End If
'取得用户输入
Dim UserName,UserPassword,Email,QQ
UserName=Server.HTMLEncode(Request("UserName"))
'根据用户名判断用户是否已存在
strSQL="SELECT UI_Name_S FROM [UserInfo]”&_
” WHERE UI_Name_S='"&Request("UserName")&"'"
Set objRS=Server.CreateObject("ADODB.RecordSet")
objRS.Open strSQL,objConn,1,3
‘如果没有找到任何用户,则输出操作信息
If Not objRS.BOF Or Not objRS.BOF Then
ResultMsg("所注册的用户名已存在,请更换用户重新注册!")
Response.End
End If
objRS.Close
'将用户信息写入数据库
strSQL="INSERT INTO [UserInfo] (UI_PI_ID_FN,UI_Name_S,UI_Password_S”&_
”,UI_IsLocked_B””,UI_CerRank_N,UI_IsProvider_B,UI_Email_S,UI_QQ_S,”&_
”UI_IsAdmin_B,UI_RentCount_N)VALUES(0,'"&UserName&"','"&UserPassword&_
"',False,0,False,'"&Email&"','"&QQ&"',False,0)"
objConn.Execute(strSQL)
ResultMsg("您的注册已成功!")
Set objRS=Nothing
CloseDatabase
Else
5.2.2用户登陆界面及代码分析
用户登录时,需要检测用户名和用户密码;用户名和密码通过检测后,需要判断用户是否被锁定。检测通过后,还需要遍历数据库中的数据,找出有没有用户的租赁超过了期限,如果超过了则在数据库中进行标注。
代码分析:
<!--#include file="CONN.ASP"-->
<!--#include file="ChkSQL.asp"-->
<!--#include file="ChkErr.asp"-->
<%
Dim strSQL,objRS
Set objRS=Server.CreateObject("ADODB.RecordSet")
'取得用户文件名、密码
Dim UserName,UserPassword
'过滤SQL字符,防止SQL漏洞注入
UserName=ChkSQL(Request("UserName"))
‘UserPassword= Request("UserPassword")
'在数据库中查找用户
strSQL="SELECT * FROM [UserInfo] WHERE UI_Name_S='"&UserName&"'"
objRS.Open strSQL,objConn,1,3
'判断用户是否存在
'若用户不存在则通过GetErr()函数提交并显示错误代码
If objRS.BOF Or objrs.EOF Then
objRS.Close
Set objRS=Nothing
Response.Write GetErr(3)
Response.End
Else
'若用户存在,则检测用户密码的正误
If objRS("UI_Password_S")<>UserPassword Then
objRS.Close
Set objRS=Nothing
Response.Write GetErr(4)
Response.End
End IF
'判断用户是否被锁定
If objRS("UI_IsLocked_B")=True Then
objRS.Close
Set objRS=Nothing
Response.Write GetErr(5)
Response.End
End If
'建立用户私有变量
Session.Timeout =30
Session("UserID")=objRS("UI_ID_N")
objRS.Close
'每当有用户登录则刷新数据库,判断是否有影片的预订超时或超期未还
strSQL="SELECT TAC_ReserveTime_D,TAC_StartTime_D FROM [Tenancy]”&_
” WHERE TAC_StartTime_D IS NULL"
objRS.Open strSQL,objConn,1,3
For i=1 To objRS.RecordCount
'有超时的预订则删除
If IsNull(objRS("TAC_StartTime_D"))=True And&_
DateDiff("h",objRS("TAC_ReserveTime_D"),Now())>12 Then
objRS.Delete
End If
objRS.MoveNext
Next
objRS.Close
strSQL="SELECT * FROM [Tenancy] WHERE TAC_StartTime_D”&_
” IS NOT NULL AND TAC_EndTime_D IS NULL"
objRS.Open strSQL,objConn,1,3
Dim MsgUser
For i=1 To objRS.RecordCount
'有超期租赁的则标注
If DateDiff("d",DateAdd("d",objRS("TAC_Lease_N"),&_
objRS("TAC_StartTime_D")),Now())=>objRS("TAC_Lease_N") Then
strSQL="UPDATE [Tenancy] SET TAC_TimeOut_B=True,”&_
”TAC_MsgUser_B=True WHERE TAC_ID