1、名片管理系统设计报告和代码分析名片管理系统专业 成员 指导老师 山东农业大学年 月【摘要】随着个人电脑的普及、计算机科学技术的迅猛发展,大家的商务生活逐渐频繁,一个功能强大,界面友好的名片管理系统是必要的。而市面上大多数个人信息管理系统都过于专业化,其趋高的价格也令大部分普通用户逐渐远离。而一个功能简单,界面友好的基于Strut2 + Hibernate的名片管理系统可以满足大多数用户的基础需求。【关键字】 Struts2 Hibernate 名片管理系统;1、前言随着社会发展的日新月异,商业来往日渐广泛,人们之间的交往也日益频繁,于是,人们手中便出现了名目繁多的通讯录、地址录、名片夹等对交友
2、或客户进行管理的工具,但是一张张名片上的信息虽然不多,却占据了很大的空间;同时,这些传统的手动管理方式存在着不易更新、不易存放、容易丢失、难以备份等重大缺陷;而在公共空间申请一个名片管理空间不仅费时费钱,且其设计只能满足一些用户的基本需求。因此开发一个既可以存储信息,又可以进行更新、查询等功能,同时界面友好可接受的名片管理系统就显得十分必要。1.1选题依据 对于大多数用户一个私人专业的管理软件还是奢侈和不必要的选择,一个公共方便的名片,不仅加快了大家的办公的效率,加快他们获取信息的速度,也为计算机技术的快速发展。1.2.系统介绍一个友好的名片管理系统首先包含的基础功能:增,删,改,查。肯定必不
3、可少的。 当用户进入系统时,首先根据用户注册与否跳转到相应的界面。当登录后,用户可以根据自己的需要选择是添加名片夹还是将名片放入回收站,放入回收站的通讯录名片并没有消失,而是不在主页面显示。用户可以用此系统对自己的名片通讯录进行批量删除,导入,导出等功能,极大的方便了用户的操作复杂度。2、相关技术2.1 Struts2技术2.1.1 Struts2的优势 Struts2框架是一个具有高度可扩展性的Java Web框架,Struts2属于MVC模式,它不依赖于Servlet API和Struts API,也就是说它有较低的耦合度。它的设计也属于无侵入式设计。 Struts2提供了一种拦截器,利用
4、这种拦截器可以进行AOP编程,实现如权限拦截等功能,是系统更加灵活多变,不再局限于OOP编程。 Struts中的类型转换器方便编程,同时它的技术支持也很全面。2.1.2 Struts2的搭建 Struts2是基于eclipse的一个技术扩展,版本更新十分迅速,但是它的搭建仅需三步。 (1)导入Struts2的相关jar包。其中包括一些必要的jar包和扩展jar包。 (2)编写于src中的Struts.xml,并根据不同的action控制器和jsp界面进行相应的配置。 (3)在web.xml中加入Struts2 的MVC框架启动配置。2.1.3 Struts2的核心组件 Struts2的核心配置
5、文件是struts.xml,所以struts.xml有其重要的作用,用户请求被Struts2的核心控制器FilterDispatcher拦截,FilterDispatcher是一个servlet过滤器,它是整个Web应用的配置项,然后业务控制器代理通过配置管理类查询配置文件struts.xml中由哪个Action处理。如果struts,xml不能满足web的需求,那么剩下的就是自定义一些web应用的执行环境和配置应用中的组件。其中执行环境主要通过“struts.properties”来完成。2.1.4 Struts2的应用组件 struts.properties文件:这个文件提供了一种更改框架
6、默认行为方式的机制。在一般情况下,如果不是打算让调试更加方便的话,你根本无须更改这个文件。在“struts.properties”文件中定义的属性都可以在“web.xml”文件的“init-param”标签中进行配置,或者通过“struts.xml”文件中的“constant”标签来修改。我们可以更改其中的一些属性来改变Freemarker的选项改变Action映射类,判断是否要重新载入xml配置文件。 Struts2中Action类的配置能够让Struts2知道Action的存在,并可以通过调用该Action来处理用户请求。Struts2使用包来组织和管理Action。Action配置在st
7、ruts.xml中的配置格式如下:元素的常用属性有:name:指定客户端发送请求的地址映射名称。class:指定Action对应的实现类,可选项。method:指定Action类中处理方法名,如get或post方法,可选项。converter:指定Action类型转换器的完整类名,可选项。 Struts2的拦截器的作用就是执行Action处理用户请求之前或者之后,执行拦截器来进行某些拦截操作。例如,用户请求删除某些数据时,拦截器判断用户是否有权删除,如果有权限,就通过Action删除,如果没有权限将不执行Action操作。2.1.5 Struts2的实现方式 Ioc方式:在Struts2框架中
8、,可以通过IoC方式将Servlet对象注入到Action中,需要在Action中实现以下接口 (1) org.apache.struts2.util.ServletContextAware:实现该接口的Action可以直接访问ServletContext对象,该接口中有void setServletContext(ServletContext servletContext)方法。(2)org.apache.struts2.interceptor.ServletRequestAware:实现该接口的Action可以直接访问HttpServletRequest对象,该接口有void setSer
9、vletRequest(HttpServletRequest ruquest)。(3)org.apache.struts2.interceptor.ServletResponseAware:实现该接口的Action可以直接访问HttpServletResponse对象,该接口有void setServleResponse (HttpServletResponse response)。(4)org.apache.struts2.interceptor.SessionAware:实现该接口的Action可以直接访问HttpSession对象,该接口有void setSession(Map map)
10、方法。 非Ioc方式:Struts2提供ServletActionContext类获得Servlet API。该类中的常用方法有:static getRequest():获取Web应用程序的HttpServletRequest对象。static getResponse():获取Web应用程序的HttpServletResponse对象。static getPageContext():获取Web应用程序的PageContext对象。static getServletContext():获取Web应用程序的ServletContext对象。2.2 Hibernate技术2.1.2 Hibernat
11、e的搭建(1)导入struts2的相关jar包。其中包括一些必要的jar包和扩展jar包。(2)在hibernate配置文件hibernate.cfg.xml文件中进行数据连接的配置。hibernate.cfg.xml连接的数据库种类很多,根据不同的数据库进行相应配置。例如本次系统使用mysql数据库,其连接方式:(3)配置映射文件hibernate.hbm.xml。它是为了建立实体类beans和数据库中相关表的映射关系。2.1.2 Hibernate的相关组件. 连接管理组件:hibernate的连接管理服务提供了高效的数据库连接管理方法。数据库连接是和数据库进行交互的唯一渠道,由于建立和关
12、闭一个数据连接要消耗许多不必要的资源,所以,hibernate用连接池的方法来管理与数据库的连接,以此来避免频繁的建立和关闭数据库连接。 事务管理组件:事务管理组件是数据库应用程序中需要额外处理的工作。Hibernate通过事物来依次执行多个sql语句,而且保证这些语句都执行成功或者不成功。对象/关系映射组件:对象/关系映射组件技术可以实现从对象模型到数据库中关系模型的映射工作。通过这一技术,hibernate实现了对象的持久化。2.1.2 Hibernate的主要类和接口 Configuration类:它负责管理Hiberante的配置信息,它主要用来加载一些配置文件。SessionFact
13、ory接口:SessionFactory负责Session实例的创建。Session接口:Session是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础,相当于JDBC中的Connection。Session对象是通过SessionFactory创建的。它有取得持久化对象,保存,更新和删除持久化对象,从Session生成Query对象等的用途。2. 3 JSP技术JSP全称JavaServer Page,由基本的HTML代码和嵌入在其中的Java代码共同组成。JSP 为建立高度动态的 Web 应用提供了一个独具特点的开发环境。JSP技术通过使用Java语言编写
14、tags和scriptlets,来封装产生动态网页的处理逻辑。JSP将业务层代码与网页设计显示分离,支持可重用的基于组件的设计,在服务器端执行,返回给客户端的是一个HTML文本,因此客户端只要有浏览器就能浏览,这使基于Web的应用程序的开发变得安全可靠。但是,Java的运行速度是用class常驻内存来完成的,并且它还需要硬盘空间来储存一系列的.java源文件和.class文件,以及对应的版本文件,因此它在一般情况下所使用的内存比起用户数量来说性能比很低。JSP内的一些内置对象:(1)request对象:该对象封装了用户提交的信息,并通过调用该对象相应的方法来获取封装的信息,即获取用户提交信息。
15、(2)session对象:该对象在第一个JSP页面被装载时自动创建,完成会话期管理,并且知道离开服务器再结束。(3)response对象:对客户的请求做出动态的响应的对象,并向客户端发送数据。(4)application对象:所有客户都共享的对象。(5)out对象:该对象是一个输出流,用out对象来向客户端输出各种类型的数据。(6)Cookie:Cookie是Web服务器保存在用户硬盘上的一段缓存记录。Cookie允许一个Web站点在用户的电脑上保存信息并且再取回信息。2. 4 数据库技术数据库技术是信息系统的一个核心技术。是一种计算机辅助管理数据的方法,它可以组织和存储数据,高效地获取和处理
16、数据。数据库技术的研究对象是数据,开发者用它来实现数据的添加、删除、修改、查询等功能,并利用应用管理系统最终实现对数据的处理、分析和理解,从数据中得到一些潜在的价值与不易于发现的规律。本次课程设计采用的是Mysql数据库,采用Navicat的可视化界面,其优势是数据库规模较小、资源消耗小、运行速度较快、安全性高、灵活性强,Mysql数据库可以完全满足本次课程设计需求。Navicat的可视化界面也带来了操作上的简化,它能更加直观清晰的展现出Mysql数据库中的信息,它能够以安全并且简单的方式创建、组织、访问并共用信息。数据库的使用可以高效的对JavaBean中的实体类进行操作,hibernate
17、连接方式直接让他们映射在一起,提高了效率,隔离了客户端与服务器端,增加了整个系统的安全性。3、系统需求分析3. 1 系统运行环境3.1.1 硬件运行环境软件运行的硬件环境:服务器端CPU Intel MMX 233MHz。内存要求:基本内256MB 内存以上。显卡:8MB以上的PCI或AGP显卡。硬盘:要求2G以上的可用空间来安装eclipse、mysql,并且配置struts2、hibernate和可视化界面下载。3.1.2 软件环境运行的软件环境:JDK、Mysql;操作系统:Windows xp及以上版本;浏览器:IE6.0或以上版本,功能强大,可执行JavaScript,Tomcat8
18、, Eclipse,支持多种Web协议;Web数据库:MySql使用方便,功能齐全。Web服务器:Tomcat8 服务器是一个免费的开放源代码的Web 应用服务器,技术先进、性能稳定,支持struts2的控制。开发工具:Eclipse,附带了一个标准的插件集,包括Java开发工具,Struts2、Hibernate相关工具。3.2 可行性分析 技术可行性:项目成员已掌握基本的Java编程语音,有数学理论基础,有面向对象的编程思想,会操作Mysql数据库,并对课外知识有一定的了解,具备了完成名片管理系统的能力。经济可行性:安装环境的经济消耗较低,经济上可以满足。操作可行性:操作要求低,会使用简单
19、的Windows系统操作即可。法律可行性:名片管理系统没有违反我国相关法律法规,法律上可行。4、概要设计本软件分为客户端和服务器端。客户端主要实现信息的显示的功能,服务器端主要实现对用户的操作和提交的信息进行处理的功能;客户端:(1) 登陆:用户输入用户名和密码;(2) 注册:用户输入个人信息和用户名以及密码;(3) 对名片的添加、删除、修改和查找;(4) 对回收站里的名片的还原、删除和查找;(5) 修改用户个人信息;服务端:(1) 对用户的登陆操作进行处理;(2) 对用户的注册操作进行处理;(3) 对用户的添删改查操作进行处理;(4) 对用户的还原等操作进行处理;(5) 对用户的修改自己信息
20、的操作进行处理;图1系统处理流程图5、数据库分析设计本系统共包括一个数据库,数据库名为card.sql,该数据库共含有两个表格,分别为用户信息表(user)和名片信息表(cardinfo);5.1表格字段设计1.1用户信息表(user):字段名为:id;用户名(name);密码(password);性别(sex);工作(work);手机(telephone);邮箱(email);地址(address);表格设计为:字段类型长度主键空递增idint11YNYnameVARCHAR40NNNpasswordVARCHAR80NNNsexVARCHAR11NNNworkVARCHAR255NNNte
21、lephoneVARCHAR255NNNemailVARCHAR80NNNaddressVARCHAR255NNN图1用户信息表(user)1.2名片信息表(cardinfo):字段名为:id;回收站标记(flag);用户名(name);性别(sex);工作(work);手机(telephone);邮箱(email);地址(address);用户(user);表格设计为:字段类型长度主键空递增idint11YNYflagint11NNNnameVARCHAR40NNNsexVARCHAR11NNNworkVARCHAR255NNNtelephoneVARCHAR255NNNemailVARCH
22、AR80NNNaddressVARCHAR255NNNuserVARCHAR40NNN图2名片信息表(cardinfo)5.2名片管理系统各实体间的E-R图图3名片管理系统各实体间的E-R图6、系统的详细设计与实现6.1系统功能描述1.1系统功能描述(1) 登陆:用户登录系统;(2) 注册:用户注册;(3) 添加名片:用户添加自己的联系人名片;(4) 删除名片:用户将自己的联系人名片放入回收站;(5) 修改名片:用户修改自己的联系人名片;(6) 查找名片:用户查找自己的联系人名片;(7) 彻底删除名片:用户将自己的联系人名片从回收站删除;(8) 恢复名片:用户将自己的联系人名片从回收站还原;(
23、9) 修改用户信息:用户修改自己信息;1.2系统功能模块图图4系统功能模块图6.2系统的数据流图 图5系统的数据流图6.3系统的具体实现(1)工程类和JSP网页图6工程类和JSP网页(2)系统的详细实现 各个主要界面和实现的核心代码:登陆界面代码:public Object login(user u) throws Exception try Session s = null; s = HibernateSessionFactory.getSession(); Query query = (Query) s .createQuery(select c from user c where c.n
24、ame=:name and c.password=:password); query.setParameter(name, u.getName(); query.setParameter(password, u.getPassword(); query.setMaxResults(1); user u2 = (user) query.uniqueResult(); return u2; catch (Exception e) HibernateSessionFactory.closeSession(); return null; 注册界面代码:public int register(user
25、u) throws Exception try Session s = null; Transaction tx = null; s = HibernateSessionFactory.getSession(); tx = s.beginTransaction(); int r=(Integer) s.save(u); u.setId(r); mit(); return 1; catch (Exception e) HibernateSessionFactory.closeSession(); return 0; 修改个人信息代码:public int updateself(user u) t
26、hrows Exception try Session s = null; Transaction tx = null; s = HibernateSessionFactory.getSession(); tx = s.beginTransaction(); Query query = (Query) s .createQuery(update user c set c.name=:name,c.password=:password,c.sex=:sex,c.work=:work,c.telephone=:telephone,c.email=:email,c.address=:address
27、where c.id=:id); query.setParameter(name, u.getName(); query.setParameter(password, u.getPassword(); query.setParameter(sex, u.getSex(); query.setParameter(work, u.getWork(); query.setParameter(telephone, u.getTelephone(); query.setParameter(email, u.getEmail(); query.setParameter(address, u.getAddr
28、ess(); query.setParameter(id, u.getId(); int r=query.executeUpdate(); mit(); return r; catch (Exception e) HibernateSessionFactory.closeSession(); return 0; 添加名片代码:public int insert(cardinfo cf) throws Exception try cf.setFlag(1); Session s = null; Transaction tx = null; s = HibernateSessionFactory.
29、getSession(); tx = s.beginTransaction(); s.save(cf); mit(); return 1; catch (Exception e) HibernateSessionFactory.closeSession(); return 0; 删除名片(放入回收站)代码:public int delete(int id) throws Exception try /cf.setFlag(0); Session s = null; Transaction tx = null; s = HibernateSessionFactory.getSession(); tx = s.beginTransaction(); Query query = (Query) s .createQuery(update cardinfo c set c.flag=:flag where c.id=:id); query.setParame