在线答疑系统设计.docx
《在线答疑系统设计.docx》由会员分享,可在线阅读,更多相关《在线答疑系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
![在线答疑系统设计.docx](https://file1.bdocx.com/fileroot1/2023-5/25/be90562b-e234-48bf-be94-1314a2c49f20/be90562b-e234-48bf-be94-1314a2c49f201.gif)
在线答疑系统设计
在线答疑系统
院(系):
专业:
班级:
学生:
学号:
指导教师:
职称:
设计日期:
年月日
至年月日
一、设计目的
当今社会已经进入信息化时代,信息正以前所未有的速度急剧增长,各类信息汇聚在一起构成知识的海洋。
面对信息爆炸时代,人们只有通过学习和交流帮助自己和他人提高学识水平和综合素质,在学习的过程中,必然会遇到各种各样的问题,孔子说:
“三人之行,必有我师”,因此问答是解决和回答问题的一个重要手段。
传统的问答方式限于书面和口头交流,容易受时间和空间影响,互联网时代的到来使得世界各地的人们有机会共享资源和交流信息,在线答疑系统的目的是及时收集各地人们提出的各种类型的问题,让来自不同行业、不同背景、不同年龄的人们集体参与解决。
最终使提问者获得满意的答案。
不同背景、不同年龄的人们集体参与解决。
最终使提问者获得满意的答案。
在线答疑系统的最终目的是帮助用户解决学习生产生活中的各种类型的问题,由于系统基于网络平台,因此来自不同地方的用户可以集体参与解决一个问题,让问题及时得到解决,突出了“一人有难,八方支援”的特点,这是互联网特有的优势,同时在线答疑系统将用户问题和回答保存在数据库中,建立了问题库,用户可以直接搜索与自己问题相类似的问题答案,省去了提问和等待浪费的时间。
行业背景:
经过调查发现,目前许多网站的在线答疑系统非常简单,只是一个简单的留言板,不能对用户提出的各种类型的问题做出准确的分类。
也没有提供问题库搜索功能。
改系统针对这些问题做了一些改进,实现了问题分类、问题搜索、用户积分等级制和消息互发等功能,有效的改善了用户回答问题的积极性,这样也使提问者能够及时的找到最佳答案。
而且系统为每个用户建立了个人中心,用户可以修改自己的资料,比如选择个性头像、个性签名等,用户也可以加其它用户好友,查看好友的资料、查看好友回答和提出的问题,还可以给用户发送消息,共同商讨问题的解决办法,这样做大大方便了用户提问和查找答案。
二、设计任务
本系统基于B/S,包含以下几个功能模块。
2.1用户管理模块
由用户登录、用户注册和用户退出3个部分组成。
用户可以以两种身份登录本系统:
普通用户和管理员;不同身份登录被系统授予不同的使用权限,这样提高本系统的安全性,避免无关人员获取不在他权限反范围内的信息。
2.2基本数据的维护
这个功能模块主要实现对问题库信息、答疑问题库信息和用户信息等基本数据的维护。
如用户信息的更新、删除;问题库和答疑问题库信息的删除、修改等。
2.3信息查询功能
系统提供了问题库和答疑问题库,问题库保存了用户提出的问题,答疑问题库保存了已经回答的问题。
信息查询是一项非常重要的功能,它主要包括已解决问题的查询、未解决问题查询、关键字问题查询、用户资料查询。
这项功能方便用户查询和自己的问题相关的答案,也有利于管理员维护问题库和用户信息。
2.4在线答疑室
在线答疑室分为主题答疑室和自由答疑室,用户可以在主题答疑室提出和回答与主题相关的问题,在自由答疑室用户可以提出各种类型的问题,让其它用户参与解答。
2.5离线答疑室
用户可以在离线答疑室查看自己提出的问题是否解决、也可以提出问题。
待上线后再将问题上传到在线答疑室。
三、设计内容
3.1系统的功能模块图如下:
图3.1系统的功能模块图
3.2用户管理模块
用户管理模块的功能模块图如下:
图3.2用户管理模块功能图
1)用户登录
用户输入用户名和密码后,系统对用户名和密码进行验证,如果登录成功,则可以进入主页面。
否则跳转到错误页面,用户最多可以尝试5次,如果5次均未成功,10分钟之内
2)用户注册
这个功能实现把用户基本信息输入到数据库中,用户基本资料包括用户名、密码、性别、电子邮箱等,如果输入了正确完整的信息,则将用户资料保存到数据库中。
基本流程如下:
3)用户退出
用户点击退出后,销毁session,安全退出系统。
3.3基本数据的维护
基本数据维护模块的具体功能如图所示。
基本信息维护包括:
问题库信息、答疑问题库信息和用户信息。
图3.3基本数据维护模块功能图
3.4信息查询功能
信息查询是系统不可缺少的一个部分。
信息查询包括:
问题库信息查询、答疑问题库信息查询以及用户信息查询。
用功能图表示如下:
图3.4信息查询模块功能图
3.5在线答疑室
在线答疑室包括自由答疑室和主题答疑室。
功能图表示如下:
图3.5在线答疑室
3.6离线答疑室
用户在线时可以将自己提出的问题信息下载到本地客户端,便于离线浏览。
同时用户可以离线提出问题。
当能够上线时用户可以将自己的问题上传到线上。
用活动图表如下:
图3.6离线答疑室
3.7系统用例
3.7.1通过分析的到以下用例:
Ø用户登录
Ø用户注册
Ø用户信息修改
Ø问题库信息查询
Ø问题库信息修改
Ø问题库浏览
Ø答疑问题库信息查询
Ø答疑问题库信息修改
Ø答疑问题库浏览
Ø主题答疑室增加
Ø在线下载问题库信息
Ø离线提问
Ø在线提问
Ø在线上传问题
Ø退出系统
3.7.1可以创建以下参与者:
Ø系统管理员
Ø用户
3.7.1系统管理员的用例关系图如下所示:
图3.7.1系统用例图
3.7.2用户的用例关系图如下:
图3.7.2用户用例关系图
3.8数据库设计
3.8.1E-R图
图3.8.1在线答疑系统E-R图
3.9数据库表
3.9.1用户表(users)功能:
保存用户名和密码
字段名
中文说明
数据类型
是否为空
默认值
检查约束
键约束
userid
用户编号
int
no
主键
username
用户名称
Nvarchar(30)
no
userpwd
用户密码
Nvarchar(40)
no
roleid
角色id
int
no
0
外键
3.9.2用户信息表(userinfo)功能:
保存用户注册资料
字段名
中文说明
数据类型
是否为空
默认值
检查约束
键约束
userinfoid
用户信息
int
no
主键
userid
用户id
int
外键
sex
性别
Char
(2)
no
男
男/女
headimg
头像
Varchar(20)
birthday
出生日期
datetime
no
regtime
注册日期
datetime
no
getDate()
userstate
用户状态
int
no
0
userclass
用户等级
int
no
1
userpoint
积分
long
no
20
term
学历
Varchar(10)
no
email
电子邮件
Varchar(30)
no
phone
电话号码
Varchar(15)
yes
introudce
个人介绍
Nvarchar(50)
yes
pwdofqs
密码问题
Nvarchar(50)
no
ansofqs
密码答案
Nvarchar(50)
no
3.9.3用户角色表(roles)功能:
保存用户角色信息
字段名
中文说明
数据类型
是否为空
默认值
检查约束
键约束
roleid
角色id
int
no
0
主键
rolename
角色名称
Varchar(6)
no
普通用户
3.9.4消息表(messages)功能:
保存所有用户发送的消息
字段名
中文说明
数据类型
是否为空
默认值
检查约束
键约束
msgid
消息id
int
no
主键
suserid
发送者ID
int
no
ruserid
发送者ID
int
no
msgtitle
消息标题
varchar(50)
no
msgcontent
消息内容
text
no
stime
发送时间
datetime
no
3.9.5好友表(friends)功能:
根据用户ID保存用户的好友ID
字段名
中文说明
数据类型
是否为空
默认值
检查约束
键约束
friendid
id
int
no
主键
userid
登录用户ID
int
no
fuserid
好友ID
int
no
3.9.6问题类型表功能:
保存问题的主题名
字段名
中文说明
数据类型
是否为空
默认值
检查约束
键约束
qstypeid
问题类型
int
no
主键
qstypename
问题类型名
Nvarchar(10)
no
3.9.7问题信息表(questions)功能:
保存所有用户的提问
字段名
中文说明
数据类型
是否为空
默认值
检查约束
键约束
qsid
问题id
int
no
主键
qstypeid
问题类型id
int
no
外键
userid
用户(提问者)id
int
no
外键
title
标题
Nvarchar(50)
no
content
内容
ntext
no
clickcount
点击数
int
no
qstime
提问时间
datetime
no
getDate()
lstrptime
最后回复时间
datetime
no
status
问题状态
Char(6)
no
未解决
3.9.8问题答案表(answers)功能:
根据问题ID保存相应的答案
字段名
中文说明
数据类型
是否为空
默认值
检查约束
键约束
ansid
答案id
int
no
主键
qsid
问题id
int
no
外键
qstypeid
主题id
int
no
外键
userid
用户id
int
no
外键
anstime
回答时间
datetime
no
getDate()
ansinfo
回答内容
ntext
yes
四、测试与评价
本系统采用asp语言开发,数据库采用sqlserver2000,实现了数据交互功能。
整个系统采用三层结构实现,即界面层、控制层和业务逻辑层,比较好的实现了代码的高类聚、低耦合,有利于系统的测试和升级。
同时系统部分采用了ajax技术,实现了页面的局部刷新,减轻了服务器端的压力。
五、体会与收获
通过这一个多月的学习和开发,在线答疑系统已基本完成了主要的功能。
此系统通过使用asp语言和sqlserver2000数据库,让我真正了解了理论与实践相结合的重要性和必要性。
由于初次接触asp语言,这一个月来有辛酸也有开心,在开发的过
程遇到了很多难以解决的问题,有时候真的很想放弃,但我还是坚持下来,当一个
个难题被解决的时候,那种成就感简直难以用言语来形容。
很庆幸彭老师给我们
这样一个可以锻炼自己实际操作能力的机会。
为了能更好的完成本课程设计,我
参考了大量书籍,基本能在预定的时间内完成此系统,在此很感谢老师以及同学
对我的帮助和指导。
六、附录
源代码清单:
1)classMain.asp的源代码:
<%
PublicFunctionExecuteSql(sqlstr)’执行sql语句并返回执行结果
OnErrorResumeNext’忽略错误继续执行
setExecuteSql=conn.execute(sqlstr)
IfErr.Number>0then’如果错误发生错误,则清除错误对象和连接对象
Err.Clear
Setconn=Nothing
Response.Write"数据库出现错误:
"&Err.Description
EndIf
EndFunction
PublicFunctionRsClose(rs)’关闭记录集
rs.close
setrs=nothing
EndFunction
PublicFunctionShowMsg(msg,url)’显示提示并跳转到指定页面
Response.Write(""&vbCrlf)
//获取对标记名为info的html标记的引用
Response.Write("var_td=document.getElementById('info');"&vbCrlf)
//创建文本结点
Response.Write("var_tn=document.createTextNode('"&msg&"');"&vbCrlf)
//添加文本结点到td中
Response.Write("_td.appendChild(_tn);"&vbCrlf)
Response.Write("varurl='"&url&"';"&vbCrlf)
//将页面重定向到指定的url
Response.Write("window.setTimeout('window.location.replace(url)',2000);")
Response.Write("")
EndFunction%>
2)conn.asp文件的源代码:
<%
setconn=Server.CreateObject("ADODB.Connection")’创建连接对象
DB_Name="net-qa"’数据库名
sql="Driver={SQLServer};server=.;uid=sa;database="&DB_Name’连接字符串
conn.Opensql’打开连接对象
%>
mydata.asp的部分代码:
--#includefile="../safe.asp"-->//安全文件
--#includefile="../conn.asp"-->//连接文件,连接对象由它生成
xmlversion="1.0"encoding="gb2312"?
>
<%
dimiPagesize,rs,sSQL,iCurPage,ipresize,icount,ipagecount,fuserid,sqlstr
fuserid=trim(request.QueryString("fuserid"))
'fuserid=36'测试数据
icurpage=trim(request.QueryString("curpage"))
iPagesize=10'页大小
setrs=server.createObject("ADODB.Recordset")’创建记录集对象,保存查询结果
sqlstr="selectcount(*)fromquestions,answerswherequestions.qsid=answers.qsid"&_
"andanswers.qsidin(selectqsidfromanswerswhereuserid="&fuserid&")groupbyanswers.qsid"
rs.opensqlstr,conn,1,1
icount=rs.recordcount'总记录数
rs.close
%>
<%ificount>0then%>
<%
ipagecount=int((icount-1)/iPagesize)+1'总页数
ificurpage=""then’如果是首次打开页面,则将当前页面icurpage置1
icurpage=1
else
icurpage=cint(icurpage)’否则获取当前页码
endif
ificurpage<1then’当前页码小于最小页码,则置当前页码icurpage=1
icurpage=1
endif
’当前页码大于最大页码,则置当前页码icurpage等于最大页码数ipagecount
ificurPage>ipagecountthenicurpage=ipagecount
ipreSize=(iCurPage-1)*ipagesize
ifipresize=0then
sqlstr="selectanswers.qsid,title,count(ansid),status,qstimefromquestions,answerswhere"&_
"questions.qsid=answers.qsidandanswers.qsidin(selectqsidfromanswerswhereuserid="&fuserid&")"&_
"groupbytitle,status,qstime,answers.qsid"
else
sqlstr="selecttop"&ipagesize&"*fromquestionswhereuserid="&fuserid&_
"andqsidnotin(selecttop"&ipresize&"qsidfromquestionsorderbyqsiddesc)orderbyqsiddesc"
sqlstr="selecttop"&ipresize&"answers.qsid,title,count(ansid),status,qstimefromquestions,answerswhere"&_
"questions.qsid=answers.qsidandanswers.qsidin(selectqsidfromanswerswhereuserid="&fuserid&")"&_
"andanswers.qsidnotin(selecttop"&ipresize&"answers.qsidfromquestions,answerswhere"&_
"questions.qsid=answers.qsidandanswers.qsidin(selectqsidfromanswerswhereuserid="&fuserid&"))"&_
"groupbytitle,status,qstime,answers.qsid"
endif
rs.opensqlstr,conn,1,1’执行sql语句
%>
"pagesize="<%=ipagesize%>"pagecount="<%=ipagecount%>">
<%
’循环读取数据,生成XML文件
whilenotrs.eof
%>
">
[CDATA[<%=rs(0)%>]]>
--生成问题编号-->
[CDATA[<%=rs
(1)%>]]>
--生成问题标题-->
<%=rs
(2)%>
--问题回答数-->
<%=rs(3)%>
--问题状态-->
<%=rs(4)%>
--提问时间-->
<%
rs.movenext’记录下移一行
wend
%>
自评
意见
在此次系统系统开发过程中,我比较严格的按照课程设计任务书的要求完成了在线答疑问系统的需求分析和数据库设计,实现了系统指定的功能。
并采用UML语言的用例图、状态图和活动图完成了系统的功能需求分析。
系统采用asp+sqlserver+ajax技术实现了基于网络平台的多用户在线答疑,所有用户都能及时的看到别人提出的问题和自己的回答,用户可以在个人中心给其他用户发送或接受其他用户发送的消息。
部分页面采用ajax技术实现了页面的局部刷新,减轻了服务器负担。
由于系统开发经验有限,可能部分功能分析不够透彻明朗,但是总体感觉还对各个部分的功能描述得比较得体。
系统自我评价:
优点:
界面比较美观,使用简单人性化,采用了模块设计和最新技术,
缺点:
由于是模拟项目,部分功能有待用户考验,有些功能比较简单,没有完全从用户得角度考虑。
自评
等级
良好
指导
教师
意见
签名:
年月日