交友系统论文设计报告.docx

上传人:b****5 文档编号:6815199 上传时间:2023-01-10 格式:DOCX 页数:17 大小:185KB
下载 相关 举报
交友系统论文设计报告.docx_第1页
第1页 / 共17页
交友系统论文设计报告.docx_第2页
第2页 / 共17页
交友系统论文设计报告.docx_第3页
第3页 / 共17页
交友系统论文设计报告.docx_第4页
第4页 / 共17页
交友系统论文设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

交友系统论文设计报告.docx

《交友系统论文设计报告.docx》由会员分享,可在线阅读,更多相关《交友系统论文设计报告.docx(17页珍藏版)》请在冰豆网上搜索。

交友系统论文设计报告.docx

交友系统论文设计报告

 

大型软件项目实训报告

题目:

交友网站系统

选题来源:

校外

指导教师:

姓名:

班级:

学号:

辽宁工程技术大学软件学院

1.序言

1.1选题背景

目前在电子商务大行其道的大情况下,越来越多的人选择上交友网站选择交友,网站上交友可以在家“交友〞,交友不受时间,地点的限制,同时,获得较大的人物信息,可以交到不在当地的朋友。

更重要的是网上交友比传统的交友更加的放便。

但同时网上交友也有很大的风险,遇到钓鱼网站,可能会泄露个人资料。

在现代社会里,网上交友作为一种网络的效劳形式得到了越来越多的人的认可,也已经成为近两年广泛受到用户欢送和商家请来的网络效劳工程。

网络技术的开展为交友的模式的革新带来了新的机遇,现代网络交友将结合现代网络技术,多媒体与传统沟通与学习的优势,改变传统名对面形式的交友方式。

1.2选题目的及意义

本文通过JAVA编程技术,使用主流的面向对象开发工具进行开发,这里我们主要用到myeclipse8.5,tomcat6.0,mysql等,因为要求交友的网站具有可视美观的操作界面,所以我们用基于c/s的myeclipse的作为开发的环境。

同时,本程序对系统要求配置较低,运行速度快,而却对数据库管理要求较低。

本程序数据库采用mysql进行数据存储,该数据库可实现关系较为简单的数据管理。

1.3选题完成情况

2021年12月25日选题后一个月内完成。

2.工程需求分析

2.1工程功能需求

1用户登录验证功能

2用户注册功能

3查看用户列表功能

4添加用户图片显示功能

5删除修改用户信息功能

2.2工程性能需求

该系统是专门用于异地的交友的群,实现了用户的登录和注册功能,可以在本地上传图片以及后续的添加删除操作等,不同用户可以查看全部的用户信息但不可以修改,只有当前登录用户才可以修改自己的根本信息。

它应该具有开放性、方便性和灵活性。

在本文中主要分析了用户交友网站的界面设计,功能介绍,使用说明以及系统需求,为用户提供可靠地交友平台。

用户可以是学校等单位的教师及学生和企事业单位的培训部门,有助于增加同时,学生之间的沟通和了解,有利于企业的团结和学校的交友。

3.工程概要设计

3.1系统功能结构设计

要实现一个软件系统,首先应该进行需求分析,这样才能令设计出的软件满足用户的各项功能。

用户注册登录,如果密码正确,那么进入菜单界面,进入在交友系统,结构图如下:

 

图3-1在线交友系统统结构图

4.工程详细设计

4.1模块1描述

4.1.1功能描述

〔一〕必备功能说明:

用户登录设置:

查询数据库,匹配密码,验证码。

用户注册设置:

插入用户根本信息,设置验证码。

根本信息库管理:

根本信息分为,用户的根本信息,和图片信息。

验证用户的平安性:

对非登录用户,不能修改用户信息。

〔二〕开发语言与开发环境:

MyEclipse、Java、MySql数据库

4.1.2性能描述

要实现一个软件系统,首先应该进行需求分析,这样才能令设计出的软件满足用户的各项功能。

该系统可以实现多个用户同时登录并参看全部用户的信息。

实现在本地上传图片功能。

登录和注册时进行平安验证使网友能够平安和真实的交到朋友。

4.2界面构建

1、应用了4个根本的静态的页面,分别是login,list。

Regist,listdetial。

2、登陆界面的主要功能是查询数据库信息,并进行判断,返回错误或者跳转到用户类表界面。

3、注册界的主要功能是向数据库插入数据,并进行平安验证,注册成功跳转到登录界面,并创立保存用户图片的文件夹。

4、当用户在进行个别录入、删除或错误输入操作时,会弹出相应对话框提示用户。

如当录入成功或删除成功会跳转到登陆界面中,当录入、删除失败以及输入不当时,弹出错误以及简单的错误原因提示用户重新操作。

5、页面布局尽量合理,各组件位置分布均匀美观。

6、用户列表界面,可以查看所有用户的根本信息,对当前用户的根本信息进行修改和查看。

7、用户详细界面,可以对当前用户的信息进行修改和删除,并向数据库进行修改,同时添加或删除当前用户图片。

4.3详细设计

4.3.1利用工厂化模型

如果dao中不只是一个接口的话,我们在service调用实现类就有一定的麻烦,不知道那个实现类完成那个接口。

所以就有了工厂模型,factory定义一个工厂工具类,再定一个,configutil工具类,用configutil读config.properties配置文件,并且提供相应的方法,来方便获得该配置文件的内容。

当中ClassLoader类类加载器负责查找.class文件,并且将该文件的内容读入到,方法区,然后依据这些内容构造一个对应的class对象。

〔ClassLoaderloaderConfigUtil.class.getClassLoader();〕类加载器的getResourceAsStream方法,会依据classpath搜索资源文件,并且转换成一个输入流。

这样就可以通过接口找出实现类的名称,在通过factroy类,利用反射创立出一个实例。

反射可以应用一个类的名字创立一个实例。

4.3.2servlet跳转界面优化设计

我们现在在web.xml文件中用到了太多的跳转,代码太多。

如何让一个servlet处理多种不同的请求,首先获取到地址页面的名称,Stringaction=uri.substring(uri.indexOf("/"),uri.lastIndexOf("."));在service方法里面,分析请求资源路径。

然后用ifelse判断页面的action名称就可以了。

在web.xml文件中*.action,匹配所有以.action结尾的请求。

这样就实现了让一个servlet处理多种不同的请求。

4.3.3用户登录时session验证设计

在进行登录操作中,如果直接输入list.jsp访问,会直接进入到列表界面,登录就失去意义了,所以要在登录时增加一个验证,session验证,浏览器在访问效劳器的时候,效劳器会先创立一个

session对象(该对象有一个id,其值是唯一的,一般称之为sessionId),接下来效劳器默认会使用cookie机制将sessionId发送给浏览器,浏览器会将这个sessionId保存在内存里面;当浏览器再次访问效劳器的时候,会将sessionId发送给效劳器,效劳器会依据sessionId找到之前创立的session对象。

具体的步骤,首先获得一个session,Sessions=request.getSession(booleanflag);flag=true时,效劳器会检查请求当中是否包含sessionId,如果没有,那么创立一个session对象;如果有,效劳器会依据sessionId查找对应的session对象,如果找到了,那么返回,找不到,会创立一个新的session对象。

当flag=false时,找不到,返回null。

进行session验证,在登录成功以后,在session对象上绑订相关的数据。

session.setAttribute("user",user);绑定一个user,然后对list页面进行session验证,

Objectobj=session.getAttribute("user");

if(obj==null){

//没有登录,那么跳转到登录页面response.sendRedirect("login.jsp");

return;

}

4.3.4文件上传设计

首先些个上传所要用到的jsp。

其中用到浏览框,设置时要注意对于表单,设置enctype="multipart/form-data",并且,表单的提交方式必须是"post"。

这是html里面的规定。

写好jsp后在效劳器端注意,不能够直接使用requset.getParameter(Stringname)获取参数值。

需要用InputStreamips=request.getInputStream//获得一个2进制字节码。

具体步骤,首先创立一个解释器,提供解析是的缺省配置。

FileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadsfu=newServletFileUpload(factory);这样对象sfu.parseRequest(request〕将每一个jsp中表单的数据封装到一个对应的FileItem对象当中。

我们这里集合中就有两个类型的数据,一个是普通的文本框,另一个要上传文件的浏览框。

判断是否是普通的表单域item.isFormField()。

item是个集合,在判断时需要对它进行遍历。

根据逻辑路径获得实际部署的物理路径ServletContextsctx=getServletContext();获得实际部署时的物理路径Stringpath=sctx.getRealPath("upload");获得文件名,Stringfilename=item.getName();生成文件写入到硬盘当中Filefile=newFile(path+"//"+filename);item.write(file);这样就不用生硬的写出绝对路径,形成了动态的生成。

4.3.4用户登录设计

应用以前些的findbyusername()方法,根据username查询所有的user属性,在service方法中获得username和pwd,调用findbyusername()看看所得到的密码是否相同,如果相同那么成功登录跳转到list界面,不同报错,写个转发,用request绑定一句话,转发到login。

jsp页面,在用户登录文本框后面转发error-jsp,输出写好的话,加上<%=(msg==null?

"用户名不能为空":

msg)%>解决用户为空的问题。

本系统采用java编程,主要编程类与页面信息的设计如下:

表1:

包与类定义

包名

类名

功能

dao

PicDAO.java

图片功能实现类

UserDAO.java

用户功能实现类

Entitiy

Pic.java

图片实体类

User.java

用户实体类

Tag

DateTag.java

时间标签类

SessionValidate.java

Session验证标签

Util

DBUtil.java

数据库连接工具类

Web

ActionServlet.java

Servlet实现类

CheckCodeServlet.java

验证码类

 

表2:

页面定义

包名

类名

功能

Jsp页面

head.jsp

页面的表头

Index.jsp

页面索引

Login.jsp

登录页面

Regist.jsp

注册界面

User_list.jsp

用户列表界面

userDetail.jsp

用户详细界面

 

4.3.5模块设计

(1)用户注册模块

此模块是添加新的用户,填写用户个人根本信息,包括、性别、、密码、年龄、对方根本要求,并添加到用户数据库中。

(2)用户登录模块

如果用户要使用为注册用户提供的功能,那么在使用之前必须登录。

用户只要输入用户名、密码就可以了。

假设用户输入的以上两项与数据库中保存的相符,那么说明用户登录成功,可以开放全部前台子系统;如果不符,那么登录失败。

(3)用户,图片文件实现类模块

在此模块中包含通过用户名,用户id查找用户全部信息,保存用户信息。

用户登录时通过用户名查找用户密码,并进行验证,注册用户时调用save〔〕方法,保存数据信息。

在上传文件中通过PicDAO中保存图片文件到注册时指定的文件夹。

(4)用户详细资料模块

用户详细资料模块对用户的根本信息进行,删除、修改和添加图片的操作。

4.3.6功能界面

4.3.6.1登陆界面

 

4.3.6.2注册界面

4.3.6.3用户列表界面

 

4.3.6.4详细介绍界面

 

4.3.7主要源代码

主要servlet代码:

packageweb;

importjava.io.File;

importjava.io.IOException;

importjava.util.List;

importjavax.servlet.ServletException;

importjavax.servlet..Servlet;

importjavax.servlet..ServletRequest;

importjavax.servlet..ServletResponse;

importjavax.servlet..Session;

importorg.apachemons.fileupload.FileItem;

importorg.apachemons.fileupload.FileUploadException;

importorg.apachemons.fileupload.disk.DiskFileItemFactory;

importorg.apachemons.fileupload.servlet.ServletFileUpload;

importcom.sun.org.apachemons.beanutils.BeanUtils;

importdao.PicDAO;

importdao.UserDAO;

importentity.Pic;

importentity.User;

publicclassActionServletextendsServlet{

publicvoidservice(ServletRequestrequest,ServletResponseresponse)

throwsServletException,IOException{

request.setCharacterEncoding("utf-8");

Stringuri=request.getRequestURI();

Stringaction=uri.substring(

uri.lastIndexOf("/"),uri.lastIndexOf("."));

if(action.equals("/regist")){

Stringusername=request.getParameter("username");

UserDAOdao=newUserDAO();

try{

Useruser=dao.findByUsername(username);

if(user!

=null){

request.setAttribute(

"regist_error","注册错误");

request.getRequestDispatcher("regist.jsp")

.forward(request,response);

}else{

user=newUser();

BeanUtils.populate(user,

request.getParameterMap());

intid=dao.save(user);

/*Stringpath=getServletContext().getRealPath("upload");

Filefile=newFile(path+"//"+"pic_"+id);

if(!

file.exists())

file.mkdirs();*/

response.sendRedirect("login.jsp");

}

}catch(Exceptione){

e.printStackTrace();

thrownewServletException(e);

}

}elseif(action.equals("/login")){

Stringusername=request.getParameter("username");

Stringpwd=request.getParameter("pwd");

UserDAOdao=newUserDAO();

try{

Useruser=dao.findByUsername(username);

if(user!

=null&&user.getPwd().equals(pwd)){

Sessionsession=

request.getSession();

session.setAttribute("user",user);

response.sendRedirect("list.do");

}else{

request.setAttribute("login_error",

"登陆错误");

request.getRequestDispatcher("login.jsp")

.forward(request,response);

}

}catch(Exceptione){

e.printStackTrace();

}

}elseif(action.equals("/list")){

UserDAOdao=newUserDAO();

try{

Listusers=dao.findAll();

request.setAttribute("users",users);

request.getRequestDispatcher("user_list.jsp")

.forward(request,response);

}catch(Exceptione){

e.printStackTrace();

thrownewServletException(e);

}

}elseif(action.equals("/userDetail")){

intid=Integer.parseInt(request.getParameter("id"));

UserDAOdao=newUserDAO();

PicDAOdao2=newPicDAO();

try{

Useruser=dao.findByUserId(id);

Listpics=dao2.findPics(id);

request.setAttribute("user",user);

request.setAttribute("pics",pics);

request.getRequestDispatcher("userDetail.jsp")

.forward(request,response);

}catch(Exceptione){

e.printStackTrace();

thrownewServletException(e);

}

}elseif(action.equals("/upload")){

intuserId=Integer.parseInt(request.getParameter("id"));

DiskFileItemFactoryfactory=

newDiskFileItemFactory();

ServletFileUploadsfu=

newServletFileUpload(factory);

try{

Listitems=

sfu.parseRequest(request);

for(inti=0;i

FileItemcurr=items.get(i);

if(curr.isFormField()){

//

}else{

Stringpath=

getServletContext().getRealPath("upload");

StringfileName=curr.getName();

Filefile=newFile(path+"/pic_"+userId);

if(!

file.exists()){

file.mkdirs();

}

System.out.println(file);

fileName=fileName

.substring(fileName.lastIndexOf("/")+1);

curr.write(newFile(path+"//"+"pic_"+userId

+"//"+fileName));

PicDAOdao=newPicDAO();

Picpic=newPic();

pic.setPicName(fileName);

pic.setUserId(userId);

dao.save(pic);

response.sendRedirect(

"userDetail.do?

id="+userId);

}

}

}catch(Exceptione){

e.printStackTrace();

}

}elseif(action.equals("/delete")){

intuserId=Integer.parseInt(request.getParameter("userId"));

PicDAOdao=newPicDAO();

try{

Listpic=dao.findPics(userId);

//dao.delete(pic.get(userId));

}catch(Exceptio

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1