在线问答系统.docx
- 文档编号:10107910
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:39
- 大小:579.97KB
在线问答系统.docx
《在线问答系统.docx》由会员分享,可在线阅读,更多相关《在线问答系统.docx(39页珍藏版)》请在冰点文库上搜索。
在线问答系统
《信息管理系统分析与设计》
课程设计
题目在线问答系统
班级信息111
学号201152275113/201152275117
学生姓名XXX
同组成员XXX
指导教师XX
编写日期2014.7.10
1开发计划
1.1项目名称
在线问答系统
1.2开发背景
读者朋友们对国内知名的大型搜索引擎网站——XX比较熟悉,其中“XX知道”这个功能非常吸引人,我们在XX上搜索的资料几乎都是来自于“XX知道”根据现行社会大多数用户的相关需求,因此开发了“明日知道问答系统”这个网站,实现的功能及流程操作和“XX知道”相似。
在网络应用中,互动性、人性化的网络服务已成为吸引访问者、提高网站访问量、增加客户转发度的一种手段,也是未来网络服务发展的趋势。
1.3原系统概述
在没有互联网的情况下,人们寻求解决问题的方案唯一途径是来自于寻求朋友或亲人的帮助,这种方式给询问者带来极大的不便且答复效率较低,往往不能及时得到最佳答案。
此外不同人会针对同一问题多次咨询,造成了严重的资源浪费。
1.4目标系统概述
明日知道在线问答系统主要是为了解决编程爱好者在编程过程中遇到的问题而开发的一个在线问答平台。
该系统为用户提供一个问题交流的平台,可以注册用户、提出问题、回答问题、关闭问题、设置最佳答案、设置悬赏积分等功能。
对于明日知道在线问答系统在设计时应该满足以下几个目标:
(1)要求是一个互动性很强的网站,需要多方参与、多方协作完成。
参与者越多,发挥的作用就越大、效果越好。
(2)有良好的人机交互功能:
用户界面直观、友好,数据录入灵活、简便。
(3)功能强大,拓展性强,稳定性高。
(4)系统无操作系统限制,方便不同平台之间的移植。
(5)网站最大限度地实现易维护性和易操作性。
(6)网站运行稳定、安全可靠。
1.5可行性分析
可行性分析的任务,并不是所有问题都有简单明显的解决办法,事实上,许多问题不可能在预定的系统规模之内解决。
如果问题没有可行的解,那么花费这项开发工程上的任何时间、资源、人力和经费都是无谓的浪费。
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。
所以从以上的分析原则来看,所设计的在线问答管理系统是一个规模不太大的系统,但是目标明确,清晰的描述了对目标系统的一切限制和约束。
在使用过程中,要看它能不能带来效益,毕竟在现今社会效率是第一位的。
21世纪是计算机的时代,它必然取代一部分人的工作,高科技的信息系统进入社会生活的方方面面是发展的趋势。
本设计从以下三个方面进行可行性研究:
1.5.1技术可行性分析
目前有很多程序语言和相应的开发工具都可以适用于本系统的开发,例如VB、ASP、PHP等,数据库有DB2、Oracle、Informix、SQLServer等,基本所有的软件程序都是用这些工具开发的,本系统网站开发环境运用的是MicrosoftVisualStudio2008集成开发环境,网站开发语言及核心技术是ASP.NET+C#+LINQ数据库访问技术,网站的后台数据库是SQLServer2005,这些技术都是成熟可靠的,所以在技术上本程序的开始时可行的。
1.5.2经济可行性分析
开发本系统操作系统采用WindowsServer2003(SPI),在开发过程中只需要一台PC,估算新系统的成本效益分析,其中包括估计项目开发的成本,开发费用和今后的运行、维护费用也不高,所以在经济上具有一定的可行性。
1.5.3操作可行性分析
本系统的操作对象主要是在线问答系统管理员或经身份认证的问答用户,对于他们不需要复杂的操作,而且此系统采用图形界面,界面美观大方形象,操作十分方便。
适合普通人群使用,对于错误操作或者操作频繁者会有相应的提示操作,所以操作可行。
1.6项目计划
表1-1项目计划
任务/时间分配
(1天)
人员分配
详细任务
原型系统研究
(1天)
XXX、XXX
搜索寻找合适的原型系统
开发计划/需求分析
(1天)
XXX、XXX
项目名称、开发背景、对原系统概述、目标系统概述、项目计划、可行行分析、需求分析、数据流程图、数据字典
数据库设计/详细设计
(1天)
XXX、XXX
系统功能模块图、数据库概要设计(E-R图)、代码设计、输入/输出界面设计、个人详细设计
编码/测试/分析
(1天)
XXX、XXX
实现主要界面/测试系统/分析系统优缺点
2需求分析
2.1需求定义说明书
2.1.1用户功能需求分析
通过对系统需求进行分析,我们可以确定系统中有两类用户:
管理员、用户。
各类用户的具体描述如下:
管理员:
管理员维护整个系统,包括查看用户信息、管理问题、删除问题。
具体功能解释如下:
(1)管理员功能是对用户提出的问题进行管理及用户相关信息(如积分、获得最佳答案数等)的查询。
用户:
搜索问题、注册账户、提出问题、回答问题、关闭问题、设置最佳答案;
具体功能解释如下:
(1)用户搜索各个编程语言的相关知识
(2)提问者可以发布某一编程语言的问题,回复者给出答案。
(3)提问者在众多答案中评选最佳答案,被评为最佳答案的回复者可以获得规定的积分奖励。
(4)如果没有正确的答案,提问者可以关闭该问题。
(5)用户可以在前台网站的搜索引擎中查找待解决或自己感兴趣的各个编程语言问题及最佳答案。
2.1.2性能需求分析
(1)安全性高:
本系统需要进过身份认证的人员才可以登录,安全性高;
(2)可靠性:
该系统应该运行正常,可靠性很好;
(3)稳定性:
该系统应该输出结果无误,稳定性很好;
(4)便捷性:
该系统采用图形界面,操作方便快速,便捷性好。
2.2数据流程图
根据系统调查阶段的数据资料,并依据用户的要求,确定该在线问答系统的基本功能和工作过程如下:
(1)顶层图
根据用户与该系统的交互可得出,用户主要就是提出问题和回答问题,管理员则管理问题。
如图2-1所示:
图2-1在线问答系统顶层图
(2)一层图
首先用户可根据自己的需求搜索问题寻找答案,也可直接选择提出问题,其他用户可根据此问题做出回复,原用户在众多回复中选择最优答案,若无满意答案或其他情况可随时关闭此问题。
管理员可对问题进行管理,删除不适当的问题。
根据相应的功能要求,我们绘制系统的一层数据流程图,如图2-2所示:
图2-2在线问答系统一层图
2.3数据字典
数据字典是对描述数据流程图中的数据项、数据流、数据存储、加工处理逻辑等组成部分的严格定义,下面是本系统的数据字典。
①数据项的定义
数据项编号:
1-01
数据项名称:
用户代码
别 名:
无
简述:
某个用户的编号
类 型:
字符串型
长 度:
50字节
②数据流的定义
数据流名称:
问题
编 号:
F1
简 述:
用户提出的问题
数据流来源:
用户
数据流去向:
问题记录系统
数据流组成:
日期+提问标题+提问内容
流通量:
无限制
高峰流通量:
无限制
③数据存储的定义
数据存储的名称:
答题信息
数据存储编号:
D1
简 述:
记录回复主题、回复内容、回复时间等信息
数据存储组成:
回复代码+回复主题+回复内容+回复时间
关键字:
回复内容
④处理逻辑的定义
处理名:
在线用户提问
编 号:
P1
输 入:
从用户输入
输 出:
从回答问题过程输出
描 述:
当用户将问题发布至系统时,其他用户可自行选择是否回复问题
⑤外部实体的定义
外部实体名称:
用户
外部实体编号:
1
外部实体组成:
用户代码+用户名+性别+邮件+密码+积分
简述:
用来描述外部实体的基本信息情况
3概要设计
3.1系统功能模块结构图
明日知道网分为前台操作和后台管理两个网站。
前台网站主要由提问模块、恢复模块、设置最佳答案模块、关闭问题模块、搜索问题模块、用户注册模块和用户登录模块7部分组成。
后台管理网站主要由用户管理模块和问题管理模块组成。
明日知道问答系统的功能结构如图3-1所示。
图3-1在线问答系统功能结构图
3.2数据库概要设计
数据库是数据库应用程序的核心。
数据库设计是建立一个应用程序最重要的步骤之一。
数据库设计一般要在需求分析和数据分析的基础上进行概念设计、逻辑设计和物理设计。
3.2.1概念设计
经过对该系统的研究我们了解到系统中的实体类型有:
用户、问题、答案、管理员,这些实体之间的相互关系有:
管理员与问题之间存在“管理”联系,是一对多的。
问题与答案之间存在“回答问题”关系,是一对多的。
用户和问题之间存在“提问”关系,是多对多的。
用户和答案之间存在“回答”关系,是多对多的。
每个实体的属性分别是:
用户:
用户代码,用户名,密码,性别,邮件,用户积分,获得悬赏积分,发出悬赏积分,回复问题数,被评为“最优问题”数,已解决问题数,未解决问题数,已关闭问题数,注册时间;
问题:
提问代码,提问目录,用户代码,提问标题,提问内容,悬赏分数,发布时间;
答案:
回复代码,提问代码,回复者代码,回复主题,回复内容,是否为最佳答案,好投票计数,不好投票计数;
画出在线问答系统的E-R图如图3-2所示。
图3-2在线问答系统E-R图
3.2.2物理设计
物理设计的目的是根据具体DBMS的特征,确定数据库的物理结构(存储结构)。
关系数据库的物理设计任务包括两个方面,一是确定所有数据库文件的名称及其所含字段的名称、类型和宽度;二是确定各数据库文件需要建立的索引,在什么字段上建立索引等。
各表结构如下表所示。
tb_Question(问题表),用于保存用户的提问信息,新建提问时状态为“未解决”;提问者设置最佳答案是状态变为“已解决”;提问关闭时状态为“已关闭”。
表结构如表3-1显示。
表3-1问题表
字段名
数据类型
长度
是否主键
描述
Code
varchar
50
是
提问代码
CatalogCode
varchar
50
否
目录代码
UserCode
varchar
50
否
用户代码
Title
nvarchar
200
否
提问标题
Text
ntext
16
否
提问内容
Mark
int
4
否
悬赏分数
PostDatetime
datetime
8
否
发布时间
State
int
4
否
状态(0-未解决;1-已解决;2-已关闭)
tb_Answer(答案表),用于保存答案的回复信息,提问者设置最佳答案时,将是否为最佳答案设置为真。
表结构如表3-2显示。
表3-2答案表
字段名
数据类型
长度
是否主键
描述
Code
varchar
50
是
回复代码
QuestionCode
varchar
50
否
提问代码
UserCode
varchar
50
否
回复者代码
Title
nvarchar
200
否
回复主题
Text
ntext
16
否
回复内容
BestAnswer
bit
1
否
是否为最佳答案
PostDatetime
datetime
8
否
回复时间
VoteNice
int
4
否
好投票计数
VoteBad
int
4
否
不好投票计数
tb_UserInfo(用户信息表),用于保存用户注册的信息。
表结构如表3-3所示。
表3-3用户信息表
字段名
数据类型
长度
是否主键
描述
Code
varchar
50
是
用户代码
UserName
nvarchar
200
否
用户名
Password
varchar
20
否
密码
Sex
char
2
否
性别
varchar
100
否
邮件
Mark
int
4
否
用户积分
RewardMark
int
4
否
获得悬赏积分
PaidMark
int
4
否
发出悬赏积分
ACount
int
4
否
回复问题数
AAcceptCount
int
4
否
被评为“最优答案”数
QSolvedCount
int
4
否
已解决问题数
QUnsolveCount
int
4
否
未解决问题数
QCancelledCount
int
4
否
已关闭问题数
CreatedCount
datetime
8
否
注册时间
3.3代码设计
3.3.1问题代码设计
为了方便对管理员对问题的管理,用户提问的信息编码以字符串表示。
根据在线问答系统的管理,“*”为小写的英文字母和数字来表示,用“-”来连接,格式固定。
问题代码设计方案如图3-3所示。
图3-3问题代码设计
3.4输入/输出界面设计
3.4.1明日知道前台首页
如图3-4所示:
(1)网页首尾部:
网页头部比较简单,但是却很精简,使明日知道搜索的LOGO一目了然。
在底部放置企业邮箱、传真、公司地址等信息,方便用户咨询。
(2)内容:
为增强用户体验度,该页面利用TextBox控件制作搜索文本框,方便用户搜索问题。
为了使用户更加精确搜索,特地在搜索框上方添加导航条,缩小搜索范围。
搜索框下方为热门搜索,可直接点击,简略输入操作。
(3)配色:
本页面以绿色为主,绿色与人类息息相关,是永恒的欣欣向荣的自然之色,代表了生命和希望,也充满了青春与活力,是寻求知识的最佳颜色,给人舒适与安宁,同时有缓解眼部疲劳的作用。
图3-4明日知道系统首页
3.4.2后台管理员问题界面
(1)布局:
在背景色主要为绿色的情况下,上方图片是双手打字的背景,可体现出用此软件搜索或发布或回答问题;左侧导航列特地选用白色背景,黑色字体,使管理员一眼就能找到系统的主要功能;在右侧问题显示表中淡绿色和白色间隔的形式,使管理员查看问题更加清晰明了。
(2)显示列表:
在管理员管理问题时最主要的就是问题类别、提问者以及提问标题,其他附加悬赏时间、发布时间及状态,方便管理员查看,每一行后面都有删除问题的按钮,管理员可根据行中信息决定是否删除问题。
在问题管理上方有搜索提问标题的文本框,管理员可输入敏感词汇更加方便查询是否存在这类的问题,方便删除。
图3-5管理员后台界面
4提问模块设计(XXX)
4.1提问模块主页展示
提问模块实现的功能是保存用户的提问信息。
用户首先在提问页面录入主题、内容、类别、悬赏分数,其中主题、类别、内容为必填项,然后单击“发送帖子”即可发布问题。
在加载提问页面时,程序首先会判断用户是否登录,如果没有登录先跳转到登录提示页面。
登录提示页面如图所示。
如果没有登录帐号,则可注册帐号再登录,若已经注册帐号,则直接登录即可发布信息。
如图4-1所示。
提问模块实现步骤:
(1)创建一个Web实体,命名为Qustion.aspx
(2)Answer.aspx页面运用的主要控件:
DropDownList控件、TextBox控件、ValidateCode控件、ImageButton控件
图4-1发布界面
4.2提问模块技术分析
在模块功能的展示上,绘制了提问模块的流程图。
如图4-2所示。
图4-2提问模块流程图
在上图中,执行提问主要用到LINQTOSQ中对数据库的插入和修改操作。
数据库的插入:
tb_Questionquestion=newtb_Question();//创建提问信息
question.Title=txtTitle.Text;//给实体成员赋值
DC.tb_Question.InsertOnSubmit(question);//保存提问信息
DC.SubmitChanges();//提交至服务端
数据库的修改操作:
tb_UserInfouser=DC.tb_UserInfo.FirstOrDefault(itm=>itm.Code==ClientHelper.UserCode);
user.QUnsolveCount=user.QUnsolveCount+1;//未解决问题数+1
DC.SubmitChanges();//提交至服务器端
5发布信息界面(XXX)
5.1代码设计
在该系统中由于提问问题、回复问题、设置最佳答案及关闭问题都涉及到分数的分配或问题数量的统计操作,所以必须先以注册会员的身份登录,然后才可以将提问者、回复者的信息与数据库中存储的信息进行核对,才可以有操作权限的判断及积分的分配。
图5-1发布界面
图5-1的主要实现代码如下:
(1)在提问页面的加载时间Page_load中,主要实现两个功能:
一个是判断用户是否登录,如果没有登录将提示登录;二是将数据类别数据库表中的内容填充到下拉列表框中,具体代码如下:
DataClassesDataContextDC=newDataClassesDataContext();
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!
Page.IsPostBack)
{
if(string.IsNullOrEmpty(ClientHelper.UserCode))//提问前判断用户是否登陆
{
Session["RedirectFrom"]=Request.Url;//记住当前的Url
Response.Redirect("NotLogin.aspx");//跳转到登陆提示页
}
varquery=fromiteminDC.tb_Catalog//取类别数据表中的数据
selectnew
{
Code=item.Code,
Name=item.Name
};
ddlCatalogCode.DataSource=query;//将类别数据表中的数据绑定到类别下拉列表框
ddlCatalogCode.DataTextField="Name";
ddlCatalogCode.DataValueField="Code";
ddlCatalogCode.DataBind();
}
}
(2)输入提问信息后,单击发送帖子按钮将提问信息保存到数据库中,由于提交了一个未解决的问题,所以提问者的未解决数加1,全局设置表中未解决总数也加1。
主要代码如下:
//保存提问信息
protectedvoidibtnPostQuestion_Click(objectsender,ImageClickEventArgse)
{
if(!
ValidateCode1.CheckSN(txtCheckCode.Text))//判断验证码是否正确
{
lblMessage.Text="输入验证码不正确!
";
return;
}
if(Page.IsValid)
{
tb_UserInfouser=DC.tb_UserInfo.FirstOrDefault(itm=>itm.Code==ClientHelper.UserCode);
if(txtMark.Text.Trim()!
=""&&user.Mark { Response.Write(""); return; } tb_Questionquestion=newtb_Question();//创建提问信息实体 question.Code=ClientHelper.BuildCode();//调用公共类生成唯一号 //给实体成员赋值 question.CatalogCode=ddlCatalogCode.SelectedValue; question.UserCode=ClientHelper.UserCode; question.Title=txtTitle.Text; question.Text=txtText.Text; if(txtMark.Text.Trim()! ="") question.Mark=Convert.ToInt32(txtMark.Text); question.PostDatetime=ClientHelper.ServerDate; question.State=0;//状态默认为0(未解决) DC.tb_Question.InsertOnSubmit(question);//保存提问信息 //用户信息表中提问者的"未解决问题数"+1 user.QUnsolveCount=user.QUnsolveCount+1; //全局配置表中"未解决问题数"+1 tb_Configconfig=DC.tb_Config.FirstOrDefault(); config.UnSolved=config.UnSolved+1; DC.SubmitChanges();//提交结果到服务器端 txtTitle.Text="";//清空输入内容 ddlCatalogCode.SelectedIndex=0; txtText.Text=""; txtMark.Text=""; txtCheckCode.Text=""; Response.Write(""); } } 5.2代码设计技术分析 LINQTOSQL可直接对数据库进行插入、查找、修改、删除、排序、聚合、分分区等操作。 在使用LINQTOSQL查询和操作数据库之前,首先创建自动生成的数据上下文类的实例。 其代码如下: DataClassesDataContextDC=newDataClassesDataContext(); 创建上下文类实例后可以查询数据库中的数据,与传统的SQL存储过程相比,使用此方法获取数据更加简洁。 在提问模块主要是发布问题,用到的是向数据库中添加数据,实现该功能主要通过InsertOnSubmit()方法和SubmitChange()方法实现,其中,InsertOnSubmit()方法将单个实体的集合添加到Table(T)类的实例中,SubmitChange()方法计算要插入、更新或删除的以修改对象的集,并执行相应命令以实现对数据库的修改。 6提问模块设计(XXX) 6.1提问模块测试设计 表6-1提问模块测试设计 检测项 测试条件 测试数据 预计测试结果 发布问题 未登录发布 未登录发布 跳转到提示页面 提示: 您需要登录才可以参与本站活动。 没有帐号? 注册 登录 用户密码账号正确 lyl,110110,egk3 登录成功 用户错误
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在线 问答 系统