数据库课程设计留言板系统.docx
《数据库课程设计留言板系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计留言板系统.docx(20页珍藏版)》请在冰豆网上搜索。
数据库课程设计留言板系统
第一章总体设计
1.1需求分析
1.2模块设计
第二章系统分析
2.1留言板管理系统前端的主要功能
2.2留言板管理系统后台管理的主要功能………………………………………
2.3留言板管理系统性能要求……………………………………………………
第三章详细设计
3.1.数据库分析……………………………………………………
3.2.E-R图……………………………………………………………
3.3.管理员表
3.4.用户信息表
3.5.留言信息表
3.6.数据库快照及字段说明
3.7.数据库连接详细设计
第四章前端页面设计
第一章总体设计
1.1需求分析
随着网络热潮的发展,各种各样的网站正成倍的迅速增长,面对各种网站,论坛的发展,人们开始更多的在网上交流。
这就需要一个发表留言的系统——留言板。
通过这样的系统,可以做到信息的规范管理、科学统计和快速的发表言论。
由于计算机和网络的普及,若建立一个留言板系统,人们便可以通过网络的登陆成为会员,取得发表言论上午资格,也使得留言板管理工作系统化,规范化,自动化。
1.2模块设计
留言板系统的基本功能包括用户信息的录入、查询、修改和删除。
用户留言及头像的前台显示功能。
其中还包括管理员的登录信息。
整体功能设计图如下所示:
第二章系统分析
2.1留言板管理系统前端的主要功能
(1)用户注册。
(2)用户登录。
(3)用户发表主题。
(4)用户回复。
(5)用户修改个人注册信息。
(6)用户查看所有发帖以及回复信息。
(7)用户查看自己发表的主题。
(8)用户对主题进行各种查询。
2.2留言板管理系统后台管理的主要功能
(1)管理员登陆。
(2)修改用户注册信息。
(3)管理员修改用户发帖或回复的信息。
(4)管理员删除用户发帖或回复的信息。
(5)对用户发帖信息进行加精处理。
2.3留言板管理系统性能要求
(1)页面响应速度快。
(2)页面美观整洁。
第三章详细设计
3.1数据库分析
用户需求具体管理系统提供保存、更新、查询、维护,这就需求数据库结构能充分满足各种信息的输入与输出,实现有组织地、动态地存储大量关联数据,方便用户访问系统中的数据,它与文件系统的重要区别是数据的充分共享,交叉访问,与应用程序的高度独立性。
3.2数据库概念结构设计:
E-R图
3.3管理员表
Createtableadmin(
Anochar(10)primarykey,
Pwdchar(10)
)
Insertintoadmin(ano,pwd)values('gao','111')
管理员(姓名、密码)对应E—R图如下:
3.4用户信息表
createtableusers(
unochar(20)primarykey,
unamechar(20),
sexchar(20),
pwdchar(20),
imgchar(100),
)
用户信息(账号、性别、姓名、密码、头像)对应E—R图如下:
3.5留言信息表
createtablejiaoliu(
jnointidentity(1,1)primarykey,
unochar(20),
nerongchar(2000),
foreignkey(uno)referencesusers(uno)
ondeletecascade
onupdatecascade
)
留言信息(用户账号、留言信息)对应E—R图如下:
3.6数据库快照及字段说明(数据库为SQLserver2005)
普通用户表:
user
表格属性
说明
是否为主码
user_name
用户注册的用户名。
否
password
用户名的密码。
否
user_sex
用户输入的性别。
否
user_qq
用户输入的qq号码。
是
user_email
用户输入的email地址。
否
主题表:
theme
表格属性
说明
是否为主码
theme_id
主题id。
是
theme_user_name
发表主题的用户名。
否
theme_content
主题的内容。
否
click_number
主题被点击的次数。
否
dateline
发表的时间。
否
message_number
留言的数量。
否
theme_name
主题名。
否
is_good
是否被加精。
否
用户留言表:
message
表格属性
说明
是否为主码
message_id
留言id
是
message_date
留言时间。
否
message_content
留言内容。
否
message_user_name
留言者的用户名
否
theme_id
留言对应的主题。
否
管理员账户表:
admin
表格属性
说明
是否为主码
admin_name
管理员用户名。
是
admin_password
管理员用户密码。
否
3.7数据库连接详细设计:
系统管理模块:
(代码实现)
voidCLoginDlg:
:
OnOK()//响应按钮连接数据库
{
CStringstr,strPasswd;
_RecordsetPtrpRS;//Recordset对象
UpdateData();//更新数据
//打开数据库
if(pTheConn->GetState()==adStateClosed)
pTheConn->Open(m_strDSN.AllocSysString(),"","",-1);
pRS.CreateInstance(__uuidof(Recordset));//创建Recordset对象实例
strPasswd=CCrypt:
:
Encrypt(m_strPasswd,123);//密码加密
//设置过滤条件
str="ID='"+m_strUser
+"'andPASSWD='"+strPasswd
+"'andAUTHORITY='5'";
try
{
pRS->Filter=str.AllocSysString();
pRS->Open("PERSON",
pTheConn.GetInterfacePtr(),
adOpenStatic,adLockReadOnly,adCmdTable);
}
catch(_com_error*e)
{
CStringError=e->ErrorMessage();
AfxMessageBox(e->ErrorMessage());
}
catch(...)
{
AfxMessageBox("打开数据集对象出错!
");
}
inta=pRS->RecordCount;
if(pRS->RecordCount==1)//判断认证是否通过
{
EndDialog(IDOK);//关闭对话框
}
else
MessageBox("请确认用户名和密码,注意大小写!
","认证失败");
}
voidCSalaryDlg:
:
OnSystemConnect()//显示用户登录窗口
{
CLoginDlgLoginDlg;
if(LoginDlg.DoModal()==IDOK)//认证通过
m_wndStatusBar.SetPaneText(1,"已连接到数据库:
"+LoginDlg.m_strDSN);
}
voidCSalaryDlg:
:
OnSystemDisconnect()//断开连接
{
//关闭Connetion对象
if(pTheConn->GetState()==adStateOpen)
pTheConn->Close();
m_wndStatusBar.SetPaneText(1,"尚未登录数据库,请按F2登录");
第四章前端页面设计
主页面(图1)
用户浏览主页面,将会显示所有标题信息。
如果用户没有登陆则会在右上角用红色的字体显示“登陆”和“注册”。
标题按时间顺序降序排列,标题如果被加精则会在标题名称后面显示红色的“[精品]”。
在标题名前显示了点击数和留言数。
主页面中还有搜索标题的功能可对标题进行模糊查询,并进行了不为空的验证(主页面代码太多,省略)。
在主界面上当用户点击了“精品区”,“人气排行”,“首页”和标题名称这些链接后,将会通过Struts2的机制进行跳转至后台处理。
以下是这几个链接的后台处理文件代码和在Struts2配置文件中的配置代码:
publicStringexecute(){
ActionContextct=ActionContext.getContext();
HttpServletRequestrequest=(HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST);
if(request.getParameter("action")!
=null){
if(request.getParameter("action").equals("message")){
Listlist=newMessageDAO().findAll(request.getParameter("id"));
request.setAttribute("message",list);
Listtemp1=(List)newThemeDAO().findById(request.getParameter("id"));
Themetheme=(Theme)temp1.get(0);
request.setAttribute("theme",theme);
newThemeDAO().click(theme);
Listtemp2=(List)newUserDAO().findByName(theme.getUsertable().getUserName());
Usertableuser=(Usertable)temp2.get(0);
request.setAttribute("sex",user.getUserSex());
return"index";
}
if(request.getParameter("action").equals("isGood")){
Listlist=newThemeDAO().findisGood();
request.setAttribute("list",list);
return"index";
}
if(request.getParameter("action").equals("orderby")){
Listlist=newThemeDAO().findOrderBy();
request.setAttribute("list",list);
return"index";
}
}
Listlist=newThemeDAO().findAll();
request.setAttribute("list",list);
return"index";
}
/alert.jsp
/index.jsp
/error.jsp
其中alert.jsp页面用于显示各种提示信息。
在我的设计中,如果需要提示信息时,会将短小的脚本代码设置到request范围中,然后通过Struts2机制跳转到alert.jsp页面,在alert.jsp页面中输出request中的信息。
脚本中的信息一般是提示框,点击后跳转到用户所需要的页面。
用户点击“首页”,“精品区”,“人气排行”和标题的链接最后都依旧会跳到主页面,只是显示的内容不同。
点击“首页”会将所有标题信息显示,按时间降序排列(图1所示)。
点击“精品区”会显示所有被加精品的标题(如图2)。
点击“人气排行”会显示所有标题,但是将按照留言数量进行排序(留言数量相同时按照点击数排序,如图3)。
点击标题链接则会将该标题的所有留言信息显示出来,在此时“创建标题”链接将会变成“留言”链接(如图4)。
图2
图3
图4
在主页面中,虽然所有浏览该页面的人都能看到“创建标题”和“留言”链接。
但是如果浏览者没有登陆,则无法进行“创建标题”和“留言”。
点击是会被提示(图5),然后将登陆层显示(如图6),让用户登陆后在进行“创建标题”和“留言”操作。
图5
图6
登陆后用户进行“创建标题”和“留言”(同时也可以看到右上角的“登陆”,“注册”,变成了“修改注册信息”,“我创建的标题”)。
用户点击“创建标题”时,会将创建标题层显示,创建标题中失去焦点时即有脚本进行验证,并通过动态改变DIV的样式和文字来达到美观,简单的提示用户的效果(如图7)。
用户点击留言后,会弹出和创建标题层相同的层,不同的是标题变成无法修改,用户只能输入留言(图8)。
图7
图8
在显示留言时,当用户注册信息性别为女时会显示女头像,为男时显示男头像(该功能可以扩展为用户任意选择头像)。
当浏览页面想“创建标题”和“留言”但没有账号时就要通过注册页面进行注册,然后在进行登陆后的“创建标题”和“留言”。
注册页面(图9)
在注册页面我使用了大量的脚本进行验证,在“用户名”栏使用了AJAX技术,在注册者输入用户名后,将进行脚本验证,验证通过后通过AJAX的方式提交到后台(AJAX也采用Struts2,图10)。
验证同样是通过动态改变DIV样式和文字来达到提示的效果,并且当用户提交时,会使验证没有通过的文本框获得焦点。
图10
图11
以下是Struts2简单的AJAX,在配置文件文件中的代码:
在action中的代码:
publicStringexecute(){
ActionContextct=ActionContext.getContext();
HttpServletRequestrequest=(HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST);
Listlist=newUserDAO().findByName(request.getParameter("name"));
if(list.size()==0){
isUser="true";
}else{
isUser="false";
}
return"success";
}
前台部分代码:
varxmlHttp=newXMLHttpRequest();
createXMLHttpRequest();
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
result();
}
}
xmlHttp.open('POST',"Ajax?
name="+values);
xmlHttp.send(null);
解析方法:
functionresult(){
varoBook=eval('('+xmlHttp.responseText+')');
if(oBook.isUser=="true"){
document.getElementById("nameSpan").className="div2";
document.getElementById("nameSpan").innerHTML="恭喜!
该用户名可以使用";
flag1=true;
}else{
document.getElementById("nameSpan").className="div1";
document.getElementById("nameSpan").innerHTML="sorry,该用户名已被使用";
flag1=false;
}
}
以上为前台页面的内容,页面设计主要以简单,美观,简短为主,仍有大量需要改进之处。
下面对后台功能进行简单的介绍。
后台管理登陆页面(图12)
在从后台登陆以后会跳到主页面,在点击进入标题链接进入显示留言的主页面后。
页面中显示的标题和留言后出现了,各种管理的链接(图13)。
管理员可以通过这些链接,有针对性的对标题留言进行各种操作(可以看见右上角的链接又变成了“管理用户”)。
图13
管理员在进行删除和加精操作是会有相应的提示,在删除标题时则会提示两次。