Asp聊天工具设计报告.docx
《Asp聊天工具设计报告.docx》由会员分享,可在线阅读,更多相关《Asp聊天工具设计报告.docx(28页珍藏版)》请在冰点文库上搜索。
Asp聊天工具设计报告
《Asp聊天系统》
课程设计报告
小组成员:
专业:
班级:
指导老师:
2012年5月4日
目录
1.需求分析1
2.功能分析1
3.数据库设计1
4.主要程序实现3
4.1.登录页面设计3
4.2.其他主要界面设计与实现6
5..心得体会17
Asp聊天系统
1.需求分析
聊天室是最能吸引人的节目。
聊天室(chatroom)是一个网上空间,为了保证谈话的焦点,聊天室通常有一定的谈话主题。
任何一个联入Internet、使用正确的聊天软件,并且渴望谈论的人都可以享受其乐趣。
聊天室有语音聊天室和视频聊天室等分类。
2.功能分析
目前网上聊天室一般都是比较复杂的,通常包括公共交淡、秘密交淡、显示在线人数和名单、各种表情、开辟新的聊天房间等功能。
本系统是一个小小聊天室,功能简单,包括公共交淡、选择说话颜色、添加说话表情、查看在线人员名单等基本功能。
根据这样的设计思想,本系统包括以下以文件。
1、首页index.asp——这是登录页,用户输入用户名后就可以进入聊天室,同时会将该用户添加到在线人员名单中,在线人数加1.
2、聊天室主页chat.asp——这是一个框架页,其中显示main.asp、online.asp、refreshpage.asprefreshpage.asp、chatform.asp.
3、显示聊天信息页面main.asp——其中用于显示聊天信息。
4、输入聊天内容页面chatform.asp——在其中可以发言
5、显示在线人员名单页面online.asp——其中会显示当前在线人员名单及人数。
6、refreshpage.asp——刷新在线名单、刷新屏幕、退出系统等功能。
7、incfoot.asp——隔(endtime-starttime)*1000&"毫秒后刷新聊天内容。
8、config.asp、function.asp——这些是公共文件,用来存放几个常量、函数。
3.数据库设计
1、聊天记录信息表chatinfo的设计视图:
2、用户信息表userinfo的设计视图
4.
图2:
类关系图
4.主要程序实现
4.1.登录页面设计
在登陆界面中,首先检查是否存在该用户,如果不存在则添加新用户信息,包括用户名、密码、性别;如果已经存在,则将输入的密码与数据库中密码对比,如果匹配则正常登录,否则报错。
主要代码如下:
<%
FunctionSplitWords(mys,coun)
dimts,i,l
ifisnull(mys)thenexitFunction
ts=0
Fori=1ToLen(mys)
l=Mid(mys,i,1)
IfAsc(l)>0andAsc(l)<255Then
ts=ts+1
EndIf
ifi-ts/2>counthenexitfor
Next
Ifi-ts/2>counThen
ts=ts\2+coun
mys=left(mys,ts)
endif
SplitWords=mys
endFunction
userid=request.form("userid")
ifrequest.form("submit")="登陆"then
userid=request.form("userid")
password=request.form("password")
usersex=trim(request.form("usersex"))
ifusersex<>"男"andusersex<>"女"then
usersex="保密"
endif
ifuserid=""orpassword=""then
response.write""&chr(13)
response.write"
--"&chr(13)
response.write"alert('请将呢称和密码填写完整!
');"&chr(13)
response.write"window.history.go(-1);"&chr(13)
response.write"//-->"&chr(13)
response.write""&chr(13)
elseiftrim(userid)<>useridortrim(password)<>passwordorinstr(userid,"'")>0orinstr(userid,"""")>0orinstr(password,"'")>0orinstr(password,"""")>0then
response.write""&chr(13)
response.write"
--"&chr(13)
response.write"alert('用户名和密码中不得包含空格以及引号!
');"&chr(13)
response.write"window.history.go(-1);"&chr(13)
response.write"//-->"&chr(13)
response.write""&chr(13)
else
userid=SplitWords(userid,5)
sql="select*fromuserinfowhereuserid='"&userid&"'"
rs.opensql,conn,0,3
ifrs.bofandrs.eofthen
session("loginstatus")="logined"
session("userid")=userid
session("grade")=1
rs.addnew
rs("userid")=userid
rs("password")=password
rs("usersex")=usersex
rs("regtime")=now()
rs("logintime")=now()
rs("timecount")=0
rs("userip")=userip
rs("logincount")=0
rs("grade")=1
rs("isonline")=true
rs.update
rs.close
sql="selecttop1*fromchatinfoorderbyputtimeasc"
rs.opensql,conn,0,3
rs("userid")=""
rs("sayto")=""
rs("saycontent")="欢迎新人"&session("userid")&"来到本聊天室!
"
rs("puttime")=now()
rs("ispublic")=true
rs.update
rs.close
response.redirect"chat.asp?
ntime="&ntime
elseifrs("password")<>passwordthen
rs.close
session("loginstatus")=""
session("userid")=""
session("grade")=""
response.write""&chr(13)
response.write"
--"&chr(13)
response.write"alert('密码不正确,请重新输入!
');"&chr(13)
response.write"window.history.go(-1);"&chr(13)
response.write"//-->"&chr(13)
response.write""&chr(13)
else
session("loginstatus")="logined"
session("userid")=userid
session("grade")=rs("grade")
n_vgrade=(rs("timecount")-30)\60
ifn_vgrade>rs("grade")andn_vgrade<=maxgradethen
rs("grade")=n_vgrade
elseifn_vgrade>rs("grade")andn_vgrade>maxgradethen
rs("grade")=maxgrade
endif
rs("logintime")=now()
rs("userip")=userip
rs("logincount")=rs("logincount")+1
ifisnull(rs("timecount"))then
rs("timecount")=0
endif
rs("isonline")=true
rs.update
rs.close
sql="select*fromchatinfoorderbyputtimeasc"
rs.opensql,conn,0,3
rs("userid")=""
rs("sayto")=""
rs("saycontent")="欢迎"&session("userid")&"来到聊天室!
"
rs("puttime")=now()
rs("ispublic")=true
rs.update
rs.close
response.redirect"chat.asp?
ntime="&ntime
endif
endif
setrs=nothing
conn.close
setconn=nothing
else
%>
4.2.其他主要界面设计与实现
(聊天室主界面)
1、Config设置:
<%
pagetitle="小小聊天室"'聊天室的名称
starttime=timer()
ntime=server.urlencode(now())
userip=request.servervariables("remote_addr")
selfname=request.servervariables("script_name")
sessionout=120
maxrecordnum=50'定义聊天室中最多显示的最近的聊天信息条数
'以下几行为供聊友选择的聊天室的文字色彩
colorA="000000"
colorB="000080"
colorC="0000ff"
colorD="008080"
colorE="0080ff"
colorF="8080ff"
colorG="8000ff"
colorH="aa00cc"
colorI="808000"
colorJ="808080"
colorK="ccaa00"
colorL="800000"
colorM="ff0000"
colorN="ff0080"
colorO="ff00ff"
colorP="ff8080"
colorQ="ff8000"
colorR="ff80ff"
colorS="008000"
colorT="345678"
%>
2、刷新设置功能:
<%=pagetitle%>--手动刷新页面
--
functiontimeurl()
{
varnow=newDate();
returnnow.getTime();
}
//-->
--
input,body,table{font-size:
12px}
body{
width:
120px;
background:
#0099cc;
text-align:
center;
vertical-align:
center;
background-color:
#00ADAC;
background-image:
url(images/chatformbg.jpg);
}
form{margin:
0;padding:
0}
.button{background:
#C2F5F3;color:
#000090;border:
solid1px#ffffff;width:
100px;height:
20px;margin:
2px0;padding-top:
1px;}
-->
3、main.asp:
--#includefile="config.asp"-->
--#includefile="functions.asp"-->
<%
ifsession("loginstatus")<>"logined"orsession("userid")=""orsession("grade")=""then
response.write""&vbcrlf
response.write"
--"&vbcrlf
response.write"top.window.location.href='index.asp?
ntime="&ntime&"';"&vbcrlf
response.write"//-->"&vbcrlf
response.write""&vbcrlf
response.end
endif
%>
--#includefile="conn.asp"-->
<%
ifrequest.querystring("act")<>"login"then
sql="select*fromuserinfowhereisonline=trueanduserid='"&session("userid")&"'"
rs.opensql,conn,0,1
ifrs.eofandrs.bofthen
rs.close
setrs=nothing
conn.close
setconn=nothing
session("loginstatus")=""
session("userid")=""
session("grade")=""
response.write""&vbcrlf
response.write"
--"&vbcrlf
response.write"top.window.location.href='index.asp';"&vbcrlf
response.write"//-->"&vbcrlf
response.write""&vbcrlf
response.end
else
sql="updateuserinfosettimecount=timecount+"&datediff("n",rs("logintime"),now())&",logintime=#"&now&"#whereisonline=trueanduserid='"&session("userid")&"'"
rs.close
conn.execute(sql)
endif
endif
%>
?
ntime=<%=ntime%>">
聊天内容显示页面
varnDots=7;
varXpos=0;
varYpos=0;
varDELTAT=.01;
varSEGLEN=10;
varSPRINGK=10;
varMASS=1;
varXGRAVITY=0;
varYGRAVITY=50;
varRESISTANCE=10;
varSTOPVEL=0.1;
varSTOPACC=0.1;
varDOTSIZE=11;
varBOUNCE=0.75;
varisNetscape=navigator.appName=="Netscape";
varfollowmouse=true;
vardots=newArray();
init();
functioninit()
{
vari=0;
for(i=0;idots[i]=newdot(i);
}
if(!
isNetscape){
}
for(i=0;idots[i].obj.left=dots[i].X;
dots[i].obj.top=dots[i].Y;
}
if(isNetscape){
startanimate();
}else{
setTimeout("startanimate()",1000);
}
}
functionstartanimate(){
setInterval("animate()",20);
}
functionsetInitPositions(dots)
{
varstartloc=document.all.tags("LI");
vari=0;
for(i=0;idots[i+1].X=startloc[i].offsetLeft
startloc[i].offsetParent.offsetLeft-DOTSIZE;
dots[i+1].Y=startloc[i].offsetTop+
startloc[i].offsetParent.offsetTop+2*DOTSIZE;
}
dots[0].X=dots[1].X;
dots[0].Y=dots[1].Y-SEGLEN;
}
functionvec(X,Y)
{
this.X=X;
this.Y=Y;
}
functionspringForce(i,j,spring)
{
vardx=(dots[i].X-dots[j].X);
vardy=(dots[i].Y-dots[j].Y);
varlen=Math.sqrt(dx*dx+dy*dy);
if(len>SEGLEN){
varspringF=SPRINGK*(len-SEGLEN);
spring.X+=(dx/len)*springF;
spring.Y+=(dy/len)*springF;
}
}
functionanimate(){
varstart=0;
if(followmouse){
dots[0].X=Xpos;
dots[0].Y=Ypos;
start=1;
}
for(i=start;ivarspring=newvec(0,0);
if(i>0){
springForce(i-1,i,spring);
}
if(i<(nDots-1)){
springForce(i+1,i,spring);
}
varresist=newvec(-dots[i].dx*RESISTANCE,
-dots[i].dy*RESISTANCE);
varaccel=newvec((spring.X+resist.X)/MASS+XGRAVITY,
(spring.Y+resist.Y)/MASS+YGRAVITY);
dots[i].dx+=(DELTAT*accel.X);
dots[i].dy+=(DELTAT*accel.Y);
if(M