分类

课内:
不限
类型:
不限 毕业设计 课程设计 小学期 大作业
汇编语言 C语言 C++ JAVA C# JSP PYTHON PHP
数据结构与算法 操作系统 编译原理 数据库 计算机网络 软件工程 VC++程序设计
游戏 PC程序 APP 网站 其他
评分:
不限 10 9 8 7 6 5 4 3 2 1
年份:
不限 2018 2019 2020 2021

资源列表

  • 基于SSM和MySQL的新闻管理系统设计与实现

    1 开发背景1.1 系统开发背景与意义个人博客是当今网络的热点,个人博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体,Blog站点所形成的网状结构促成了不同于以往社区的Blog文化,Blog技术缔造了博客文化。
    随着网络出版、发表和张贴文章等网络活动的急速增长,博客已经成为了一个指称这种网络出版和发表文章的专有名词。博客通常是由简短且经常更新的张贴构成,这些张贴的文章都按照年份和日期排列。博客的内容和目的有很大的不同,从对其他网站的超级链接和评论,到有关公司的新闻或构想,或者是个人的日记、照片、诗歌、散文,甚至科幻小说的发表或张贴。许多博客是个人将自己的想法表达出来,或者是一群人根据某个特定主题或共同目标进行合作,每个人都可以随时把自己的思想火花和灵感更新到博客站点之上。简言之,博客就是以网络作为载体,简单迅速便捷地发布自己的心得,及时有效轻松地与他人进行交流,再集丰富多彩的个性化展示于一体的综合性平台。
    1.2 研究内容新闻博客管理系统通过简洁、一目了然的方法进行界面设计,主界面上可以查询最新的新闻博客和其他操作,方便的查看各模块的详细明细等信息。
    研究的内容主要包括以下方面:
    该系统的开发主要包括后台数据库的建立、连接和维护以及前台网络页面的开发两大方面。由于Java的跨平台性、安全性等诸多优势,本论文采用Jsp+SSM+MYSQL的技术途径和规范全局设计开发流程,在Eclipse的开发环境下设计、编写新闻博客管理系统。
    该系统主要模块有用户管理、博客文章管理、日志管理、权限管理、查询统计管理、登录等六大功能模块,管理员主要是进行登陆后,对所有新闻博客信息进行管理编辑,可以上传新闻博客,按条件查询新闻博客信息,修改新闻博客信息,删除新闻博客信息,权限设置等等。
    1.3 文档的组织结构文档的组织结果安排如下:

    第一章绪论介绍了系统开发的背景与意义,对主要研究内容进行了说明,对文档的组织结构进行了阐述
    第二章主要讨论了系统的需求以及实现相关功能的关键技术和方法
    第三章对系统进行了业务建设与设计,对系统的用户角色和功能需求作了初步设计
    第四章主要对系统相关实现作了更详细的阐述,阐述了系统开发过程中所设计的代码、接口等
    第五章性能测试与分析
    第六章主要阐述了对系统的总结和展望
    最后为致谢与参考文献

    2 系统需求分析2.1 系统需求分析需求是软件开发的基础,也是研发团队进行系统开发的凭据。有资料指出在软件开发周期中,如果软件项目越新颖、所涉及的应用领域越偏僻,需求分析所占用的时间可以达到整个开发周期的一半以上,而如果是迭代式的开发模型,需求时间也不应该少于1/3。可见,软件需求的重要性不言而喻。然而在软件开发中,需求不明确,客户的参与度不高,沟通不及时,获取客户的信息不完整;无法理解某些领域的技术指标和概念;客户想法的多变性都会造成需求的变更,而一旦变更就会对软件的开发进度和整体结构产生影响,甚至是灾害性的重新设计。
    2.2 可行性分析2.2.1 经济可行性现在,计算机的价格已经十分低廉,性能却有了长足的进步。而本系统的开发,基本无需任何特殊的硬件配置,仅需一台普通的电脑。此系统可以为博客主提供很多便利,主要表现有以下几个方面:

    第一,本系统的运行更加轻量化,相比于WordPress更加简洁高效,节省更多资源
    第二,本系统的操作界面简洁,可以显著提高博客主的效率
    第三,本系统博客主可以完全掌控,可以使敏感文档更加安全

    本系统的开发所需的设备在现有条件下,只需要少量的投入资金就可以实现,并且借助云的弹性计算和分时租赁可以最大化降低成本开支,因此在经济上是可行的。
    2.2.2 技术可行性本系统采用的是JSP、ssm和MySQL开发,Windows 7操作系统,采用JDBC方式与后台数据库进行连接,完成数据的添加、修改、删除、查询等功能。由于JSP、ssm功能强大,而MySQL灵活易维护在开发方面具有方便快捷、使用灵活的特点,以及目前的广泛实际应用,因此使用JSP、ssm、MySQL是开发轻平台的最佳组合从而说明本系统在技术方面可行。
    硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。
    2.2.3 操作可行性操作可行性是指对开发出来的系统的界面是否美观、简洁易操作,是否有操作步骤提示、相关信息能否自动生成或更新等进行分析。操作是否顺畅很大程度上决定了系统的可行性和受欢迎度,总的来说,用户操作必须简便,系统需要有较好的人机交互,改善用户体验。本新闻博客管理系统采用的是目前较为流行的前端开发技术,界面简单美观,用户操作起来应该十分简单,因此,本新闻博客管理系统在界面操作方面也完全可行。
    2.3 功能分析
    系统管理:该模块主要是对系统的菜单信息、用户信息、用户权限信息进行有效管理,并实现按不同条件对这些数据进行查询的功能
    用户管理:该模块主要是对博客系统的多用户进行管理,允许用户自注册,允许不同的用户不同的角色和权限
    系统日志:该模块主要是管理员及其其他用户的所有操作进行日志记录,便于后期查看及排障
    新闻管理:该模块是整个新闻博客管理系统的核心,包含新闻编辑、新闻管理、分类管理、评论管理、阅读统计等多个功能

    2.5 信息需求分析通过对几个想要搭建自己博客网站的同学的调查分析,已经了解了一般的博客主对系统的一些要求,接下来将对博客主的使用情况进行系统分析,考虑到与计算机管理系统的交互性、复杂性和计算机本身的一些特点,在开发新闻博客管理系统时不能简单的对现有的博客系统进行模仿,而应根据一般博客主的真实需求和常用需求进行分类和汇总,通过逐步确认各主要功能的范围,先对主要功能系统分析解决,然后构建出系统的业务流程图和系统结构图。
    2.5 性能需求分析
    系统界面友好美观,操作简单易行,查询灵活方便
    新闻博客文章管理信息化,可随时掌握当前博客文章访问的情况
    系统维护方便可靠,有较高的安全性,满足实用性、先进性的要求
    提供多用户并发访问的能力,支持高并发

    3 系统设计3.1 系统概述新闻博客管理系统分为前台模块和后台模块两大部分。前台模块主要是用来浏览新闻博客信息的。后台模块是管理人员用来管理新闻博客信息的。
    新闻博客管理系统采用JAVA的三层架构开发,发布版本的运行环境包括:

    客户端:

    操作系统:Win7浏览器:谷歌浏览器
    服务器端:

    操作系统:windows server 2003应用服务器:Tomcat
    数据库服务器端:

    操作系统:windows server 2003数据库系统:MYSQL5.1

    3.2 系统功能
    3.3 数据库设计3.3.1 数据库概念设计本新闻博客管理系统包含多个数据库表项,根据每个数据表项分析得到如下E-R 图。
    用户表

    新闻表

    日志表

    评论表

    角色权限管理表

    3.3.2数据库逻辑设计本系统数据库名称为db_news_sys,一共有七张数据表,分别为用户表(如表3-6所示)、新闻博客分类表(如表3-7所示)、新闻博客文章表(如表3-8所示)、菜单管理信息表(如表3-9所示)、评论管理表(如表3-10所示)、系统日志信息表(如表3-11所示)、用户权限管理表(如表3-12所示)。
    用户表(tb_user)表结构



    字段名称
    数据类型
    主键
    是否空
    说明




    id
    int
    Y
    N
    主键,用户ID


    username
    varchar(50)
    N
    N
    用户登录名


    password
    varchar(50)
    N
    N
    用户登录密码


    roleId
    int
    N
    N
    用户类别,是否为管理员


    photo
    varchar(128)
    Y
    N
    用户头像


    sex
    int(1)
    N
    N
    性别


    age
    int(3)
    N
    N
    年龄


    address
    varchar(128)
    Y
    N
    住址



    新闻博客分类表(tb_news_category)表结构



    字段名称
    数据类型
    主键
    是否空
    说明




    id
    Int
    Y
    N
    主键,供应商ID


    name
    varchar(128)
    N
    N
    分类名称


    sort
    int
    N
    N
    分类排序,默认值0



    新闻博客文章表(tb_news)表结构



    字段名称
    数据类型
    主键
    是否空
    说明




    id
    int
    Y
    N
    主键,文章ID


    categoryId
    int(11)
    N
    N
    文章分类ID


    title
    int(8)
    N
    N
    文章标题


    abstrs
    int(8)
    N
    N
    文章摘要


    tags
    datetime
    N
    N
    文章标签


    photo
    varchar
    N
    N
    文章需要的图片


    author
    Varchar
    N
    N
    文章作者


    content
    longtext
    N
    N
    文章内容


    viewNumber
    Int
    N
    N
    浏览次数


    commentNumber
    Int
    N
    N
    评论次数


    createTime
    Datetime
    N
    N
    创建时间



    菜单管理信息表(tb_menu)表结构



    字段名称
    数据类型
    主键
    是否空
    说明




    id
    int
    Y
    N
    主键


    parentId
    int
    N
    N
    本菜单的父菜单的ID


    name
    int
    N
    N
    菜单名称


    url
    int
    N
    N
    菜单连接


    icon
    int
    N
    N
    菜单的图片



    评论关系表(tb_comment)表结构



    字段名称
    数据类型
    主键
    是否空
    说明




    id
    int(11)
    Y
    N
    主键


    newsId
    int(11)
    N
    N
    用户类别ID


    nickname
    int(11)
    N
    N
    用户可以访问的菜单ID


    content
    varchar
    N
    N
    评论内容


    createTime
    datetime
    N
    N
    创建时间



    系统日志信息表(tb_log)表结构



    字段名称
    数据类型
    主键
    是否空
    说明




    id
    int(11)
    Y
    N
    主键


    content
    varchar(255)
    N
    Y
    日志内容


    createTime
    datetime
    N
    Y
    销售时间



    用户权限管理表(tb_authority)表结构



    字段名称
    数据类型
    主键
    是否空
    说明




    id
    int(11)
    Y
    N
    主键


    roleId
    int(11)
    N
    N
    用户类别ID


    menuId
    int(11)
    N
    N
    用户可以访问的菜单ID



    4 系统实现4.1 系统开发规划新闻博客管理系统采用JAVA标准分层的基于组件模型设计。将处理过程拆分到不同的层级、不同服务、不同应用服务器中分别处理,使服务器资源得到更好的利用,解决网络传输时高并发的问题。
    新闻博客管理系统采用经典的三层结构,面向对象的JAVA语言和MYSQL数据库存储数据。三层框架包括了界面层、逻辑层和数据层。

    表现层:是系统数据来源和UI部分,承担用户操作与逻辑层之间的交互。在本层中实现前台页面的信息显示。后台登录和基本信息的管理操作。用户通过界面操作和业务逻辑层传输数据。逻辑层是整个系统的核心,它与这个系统的业务紧密相关
    数据层:其功能主要是负责数据库的访问。简单的说就是实现对数据表的Select, Insert, Update, Delete的操作。数据库的设计是在这一套开发系统中十分重要的,好的数据库建立可以让其更快的完成项目。整个数据库的创建是新闻交流系统开发和创立的核心技术,概括的说,就是根据用户的需求创立起满足用户的需要的数据库。数据库的整体设计是在软件开发是其最主要的问题

    4.2 开发语言简介4.2.1 JSP语言JSP本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
    JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
    4.2.2 EasyUIjQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。
    4.2.3 SSM框架SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
    Sping
    Spring是一个开源框架,是于2003年兴起的一个轻量级的Java开发框架由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。
    Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。但是,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
    SpringMVC
    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。pring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
    SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
    Mybatis
    MyBatis是一个基于Java的持久层框架,mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
    页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据
    4.2.4 JSPJSP本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
    JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
    4.2.5 MYSQL数据库MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
    自从Oracle公司收购了MySQL后不久,就发行了MySQL的企业版(不再免费)。
    4.2.6 JavaScriptJavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它最初由网景公司(Netscape)的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。
    Javascript语言与Java语言在语法上比较相似,但随着对Javascript的深入了解后你会发现,它们说到底是两种语言。
    4.3 开发页面简介4.3.1 首页本界面是新闻博客管理系统的首页设计,其功能主要具体如图4-1所示。

    用户可以在首页进行新闻博客浏览、搜索功能,关键代码如下:
    @RequestMapping(value="/index",method=RequestMethod.GET) public ModelAndView index(ModelAndView model){ Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("offset", 0); queryMap.put("pageSize", 10); model.addObject("newsCategoryList", newsCategoryService.findAll()); model.addObject("newsList", newsService.findList(queryMap)); model.setViewName("home/index/index"); return model; }
    4.3.2 新闻内容页面本界面是新闻博客管理系统的新闻内容页面设计,其功能主要具体如图4-2所示。

    用户可以在新闻内容页进行内容浏览、搜索、评论等功能,关键代码如下:
    @RequestMapping(value="/detail",method=RequestMethod.GET) public ModelAndView detail(ModelAndView model,Long id){ model.addObject("newsCategoryList", newsCategoryService.findAll()); News news = newsService.find(id); model.addObject("news", news); model.addObject("title", news.getTitle()); model.addObject("tags", news.getTags().split(",")); model.setViewName("home/news/detail"); //查看数加1 newsService.updateViewNumber(id); return model; } @RequestMapping(value="/search_list",method=RequestMethod.GET) public ModelAndView searchList(ModelAndView model, @RequestParam(name="keyword",required=false,defaultValue="") String keyword, Page page ){ Map<String, Object> queryMap = new HashMap<String, Object>(); try { keyword= new String(keyword.getBytes("ISO-8859-1"), "UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } queryMap.put("offset", 0); queryMap.put("pageSize", 10); queryMap.put("title", keyword); model.addObject("newsCategoryList", newsCategoryService.findAll()); model.addObject("newsList", newsService.findList(queryMap)); model.addObject("title", keyword + "关键字下的新闻信息"); model.addObject("keyword", keyword); model.setViewName("home/news/search_list"); return model; }
    4.3.3 登陆本界面是新闻博客管理系统的后台登陆页面设计,其功能主要具体如图4-3所示。

    登录页面以简明的形式提供给用户一个登录界面。用户登录后会显示当前系统的基本信息。在本系统中实现了用户角色管理、基于角色的权限管理、用户基本信息录入修改、用户管理等功能;关键代码如下:
    @RequestMapping(value="/login",method=RequestMethod.POST) @ResponseBody public Map<String, String> loginAct(User user,String cpacha,HttpServletRequest request){ Map<String, String> ret = new HashMap<String, String>(); if(user == null){ ret.put("type", "error"); ret.put("msg", "请填写用户信息!"); return ret; } if(StringUtils.isEmpty(cpacha)){ ret.put("type", "error"); ret.put("msg", "请填写验证码!"); return ret; } if(StringUtils.isEmpty(user.getUsername())){ ret.put("type", "error"); ret.put("msg", "请填写用户名!"); return ret; } if(StringUtils.isEmpty(user.getPassword())){ ret.put("type", "error"); ret.put("msg", "请填写密码!"); return ret; } Object loginCpacha = request.getSession().getAttribute("loginCpacha"); if(loginCpacha == null){ ret.put("type", "error"); ret.put("msg", "会话超时,请刷新页面!"); return ret; } if(!cpacha.toUpperCase().equals(loginCpacha.toString().toUpperCase())){ ret.put("type", "error"); ret.put("msg", "验证码错误!"); logService.add("用户名为"+user.getUsername()+"的用户登录时输入验证码错误!"); return ret; } User findByUsername = userService.findByUsername(user.getUsername()); if(findByUsername == null){ ret.put("type", "error"); ret.put("msg", "该用户名不存在!"); logService.add("登录时,用户名为"+user.getUsername()+"的用户不存在!"); return ret; } if(!user.getPassword().equals(findByUsername.getPassword())){ ret.put("type", "error"); ret.put("msg", "密码错误!"); logService.add("用户名为"+user.getUsername()+"的用户登录时输入密码错误!"); return ret; } //说明用户名密码及验证码都正确 //此时需要查询用户的角色权限 Role role = roleService.find(findByUsername.getRoleId()); List<Authority> authorityList = authorityService.findListByRoleId(role.getId());//根据角色获取权限列表 String menuIds = ""; for(Authority authority:authorityList){ menuIds += authority.getMenuId() + ","; } if(!StringUtils.isEmpty(menuIds)){ menuIds = menuIds.substring(0,menuIds.length()-1); } List<Menu> userMenus = menuService.findListByIds(menuIds); //把角色信息、菜单信息放到session中 request.getSession().setAttribute("admin", findByUsername); request.getSession().setAttribute("role", role); request.getSession().setAttribute("userMenus", userMenus); ret.put("type", "success"); ret.put("msg", "登录成功!"); logService.add("用户名为{"+user.getUsername()+"},角色为{"+role.getName()+"}的用户登录成功!"); return ret; }
    4.3.4 菜单管理本界面是新闻博客管理系统的菜单管理设计,其功能主要具体如图4-4所示。

    本系统具备菜单管理的能力,可以添加删除菜单,也可给用户设置每个菜单的权限,每个菜单具有自己的icon,更加美观直观。关键代码如下:
    @RequestMapping(value="/list",method=RequestMethod.POST) @ResponseBody public Map<String, Object> getMenuList(Page page, @RequestParam(name="name",required=false,defaultValue="") String name ){ Map<String, Object> ret = new HashMap<String, Object>(); Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("offset", page.getOffset()); queryMap.put("pageSize", page.getRows()); queryMap.put("name", name); List<Menu> findList = menuService.findList(queryMap); ret.put("rows", findList); ret.put("total", menuService.getTotal(queryMap)); return ret; } /** * 获取指定目录下的系统icon集合 * @param request * @return */ @RequestMapping(value="/get_icons",method=RequestMethod.POST) @ResponseBody public Map<String, Object> getIconList(HttpServletRequest request){ Map<String, Object> ret = new HashMap<String, Object>(); String realPath = request.getServletContext().getRealPath("/"); File file = new File(realPath + "\\resources\\admin\\easyui\\css\\icons"); List<String> icons = new ArrayList<String>(); if(!file.exists()){ ret.put("type", "error"); ret.put("msg", "文件目录不存在!"); return ret; } File[] listFiles = file.listFiles(); for(File f:listFiles){ if(f!= null && f.getName().contains("png")){ icons.add("icon-" + f.getName().substring(0, f.getName().indexOf(".")).replace("_", "-")); } } ret.put("type", "success"); ret.put("content", icons); return ret; }
    4.3.5 系统日志记录本界面是新闻博客管理系统的系统日志记录设计,其功能主要具体如图4-5所示。

    管理员可以记录平台的基本日志、操作日志、用户登录日志等,可用于排障、记录等功能,关键代码如下:
    /** * 获取日志列表 * @param page * @param content * @param roleId * @param sex * @return */ @RequestMapping(value="/list",method=RequestMethod.POST) @ResponseBody public Map<String, Object> getList(Page page, @RequestParam(name="content",required=false,defaultValue="") String content ){ Map<String, Object> ret = new HashMap<String, Object>(); Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("content", content); queryMap.put("offset", page.getOffset()); queryMap.put("pageSize", page.getRows()); ret.put("rows", logService.findList(queryMap)); ret.put("total", logService.getTotal(queryMap)); return ret; } /** * 添加日志 * @param user * @return */ @RequestMapping(value="/add",method=RequestMethod.POST) @ResponseBody public Map<String, String> add(Log log){ Map<String, String> ret = new HashMap<String, String>(); if(log == null){ ret.put("type", "error"); ret.put("msg", "请填写正确的日志信息!"); return ret; } if(StringUtils.isEmpty(log.getContent())){ ret.put("type", "error"); ret.put("msg", "请填写日志内容!"); return ret; } log.setCreateTime(new Date()); if(logService.add(log) <= 0){ ret.put("type", "error"); ret.put("msg", "日志添加失败,请联系管理员!"); return ret; } ret.put("type", "success"); ret.put("msg", "日志添加成功!"); return ret; }
    5 性能测试与分析测试是开发时期最后一个阶段,是保证软件质量的重要手段。软件测试就是在受控制的条件下对系统或应用程序进行操作并评价操作结果的过程,所谓控制条件应包括正常条件与非正常条件。软件测试过程中应该故意地去促使错误的发生,也就是事情在不该出现的时候出现或者在应该出现的时候没有出现。从本质上说,软件测试是”探测”,在”探测”中发现软件的毛病。
    5.1 系统测试的目的与目标在此系统进行初步实现之后,开始进行对系统进行测试,找出系统中存在的Bug和不足,通过测试,用提交的Bug报告来为以后软件的改进提供标准和参考,能够在以后的系统改进中找到依据。
    测试后的软件各模块基本功能可以顺利进行,尽可能的提高软件的健壮性。
    5.2 系统测试方法
    从是否关心软件内部结构和具体实现的角度划分:黑盒测试和白盒测试
    从是否执行程序的角度:静态测试和动态测试
    从软件开发的过程按阶段划分有:单元测试、集成测试、确认测试、系统测试、验收测试、回归测试、Alpha测试、Beta测试

    单元测试又称模块测试,是针对软件设计的最小单位 ─ 程序模块(这里所说的程序模块在Java中一个模块就是一个方法),进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
    集成测试 (组装测试、联合测试),通常在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:

    在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失
    一个模块的功能是否会对另一个模块的功能产生不利的影响
    各个子功能组合起来,能否达到预期要求的父功能
    全局数据结构是否有问题
    单个模块的误差累积起来,是否会放大,从而达到不能接受的程度

    确认测试(Validation Testing),确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。
    系统测试(System Testing),是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛盾的地方。
    验收测试(Acceptance Testing),在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。验收测试是以用户为主的测试。软件开发人员和QA(质量保证)人员也应参加。由用户参加设计测试用例,使用生产中的实际数据进行测试。在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。
    5.3 系统测试用例新闻博客管理系统包括了多个功能,下面对各主要功能进行测试用例说明。由于测试过程具有一定的相似性,所以本系统选取一部分功能进行测试,其余相似功能模块不再一一展示。
    5.4 系统测试结论通过对系统的全面测试,所有测试条目都已经通过,实现了基本要求,系统可以正常运行。
    6 总结与展望设计开发基于 JSP 的企业新闻博客管理系统是集业务管理与软件技术为一身的工作,只有在理解业务的基础上,才能对业务操作流程进行提炼优化,并通过软件设计与开发技术实现。本文设计的企业新闻博客管理系统角色多样、功能丰富,能适应大部分环境下的企业进销存管理工作。本系统在设计采用了 SSM 框架,设计上实现了高内聚、低耦合的要求,在设计上做到了可扩张和维护。本文在论文撰写、系统开发时实地到一家企业进行调研,与企业的仓库管理工作人员沟通,做需求分析,设计了系统管理员登录、新闻管理、用户管理等模块。
    通过开发《新闻博客管理系统》,我较为全面的掌握了JAVA的基本知识和编程技巧,并在开发过程中我的JAVA开发能力得到了进一步的提高。如:更进一步的深入了解MVC设计模式,软件三层框架;SQL语言的使用。

    对新闻博客管理系统进行用户需求调研,将现有业务与传统技术进行对比总结,完成本系统的用户需求分析。通过对用户需求分析和技术背景研究,分析了系统的业务流程,并采用UML工具对用户需求进行统一建模,导出系统的软件需求分析说明
    新闻博客管理系统使用MYECLIPSE和MYSQL数据库开发
    根据系统业务需求对系统数据库进行详细设计,主要采用了数据库3NF标准对数据库内部各种关系进行抽象分析,建立数据库E-R模型图,最大程度上避免数据冗余,保证数据的一致性

    系统不免有错误和待改进之处,真诚欢迎各位师长、同行提出宝贵意见。
    参考文献[1] 刘慧杰,舒大兴,陆斌,吴欢.双翻斗与JSP-01A型智能雨量计比较实验分析[J].中国新技术新产品,2019(18):69-71.
    [2] 张雅棋.SQL Sever、MySQL、Oracle数据库在水务系统中的应用比较[J].天津科技,2019,46(09):52-54.
    [3] 罗永权.HTML语言的网页制作技巧与方法研究[J].计算机产品与流通,2019(10):151.
    [4] 郑茹琼,刘杨.基于SSM的母婴购物网站的设计与实现[J].电脑知识与技术,2019,15(26):264-265.
    [5] 赵硕,范俊甫,孙永进,王开放.基于MySQL的矢量数据访问引擎设计与实现[J].测绘与空间地理信息,2019,42(09):138-141.
    [6] 董珊,周德阳,罗荣良.基于SSM的实验室管理系统设计[J].电脑知识与技术,2019,15(27):45-46+49.
    [7] 杨嘉诚,柯海丰.基于HTML5和JavaScript的信息学学习网站的设计与实现[J].计算机时代,2019(11):32-34+37.
    [8] 张丛丛.基于HTML语言的网页制作方法[J].电子技术与软件工程,2019(20):20-21.
    [9] 赵晓丹.网页开发中的JSP技术分析[J].南方农机,2019,50(20):247-248.
    [10] 许佩迪,王海燕,李闯.基于JSP的网上在线图书借阅系统开发与设计[J].智能计算机与应用,2019,9(05):310-311+319.
    [11] 甘启宏,崔亚强,王皓,余淇,冯鸟东.基于SSM框架的高校教学设备管理系统设计与实现[J/OL].软件导刊:1-4[2019-11-16].http://kns.cnki.net/kcms/detail/42.1671.TP.20190906.1321.002.html.
    [12] Juan C. Roldán,Patricia Jiménez,Rafael Corchuelo. On extracting data from tables that are encoded using HTML[J]. Knowledge-Based Systems,2019.
    [13] 赵雪娇,李明伟,靳大伟,孙达明.基于MVC4+EasyUI框架下数字校园接待管理系统的设计与实现[J].工业技术与职业教育,2018,16(02):16-19.
    1 评论 12 下载 2020-12-08 10:19:00 下载需要11点积分
  • 基于Python的Django框架实现的新闻检索平台

    1 功能概述本软件为一个新闻检索平台,实现了检索及显示10000条来自人民网的新闻的功能。
    1.1 主页面输入127.0.0.1:8000/search后,可得到以下初始界面。

    可在本页面上端的搜索框中输入关键词进行搜索,也可通过下方的翻页键浏览新闻。
    1.2 搜索结果界面
    上图为搜索结果页面,搜索关键词为”习近平 普京 特朗普”,搜索引擎会返回所有与关键词部分匹配的页面,且匹配程度越高,排名越靠前。对于出现在标题、摘要中的关键词,会高亮显示。
    同时,搜索引擎还支持按时间检索,若搜索关键词中包含用&&包起来的两个日期,则会返回发布时间在这两个日期之间的文章。下图是输入&2017-01-01-2017-01-01&后的返回页面。

    1.3 详情界面点击上述两个页面中的新闻标题后,可进入新闻的详情界面。

    详情页面展示了新闻的全文,并推荐3篇数据库中相似性最高的文章。
    2 代码实现2.1 相关配置爬虫使用python2,其版本号为2.7.13,使用的第三方库有 requeests 2.19.1 , pandas 0.23.4。
    其余部分使用python3,其版本号为3.7.0,所使用的第三方库有:Django 2.1.1 , jieba 0.39 , numpy 1.14.5 , pandas 0.23.3 2.2 爬虫 。
    从网页 http://world.people.com.cn/n1/2018/0911/c1002-30284709.html 开始,对网页的相关新闻版块进行 bfs,提取每个网页的标题、发表时间、正文,从0开始按爬取时间对所有爬取到的网页进行编号,把标题、发表时间存至’ info.csv 文件中,将正文存到以编号命名的txt文件中。爬虫代码位于 scripts/crawler.py 中。
    2.3 数据处理从爬取到的文件中提取文章摘要,存到 info.csv 中。
    使用 jieba 的search模式对每篇文章的标题及正文进行分词,记录文中出现的词及出现次数(词在标题中每出现 一次按照5次计入),使用出现次数在2次及以上的词建立倒排索引,在索引表中同时存储出现次数,倒排索引存储于 mix.csv 中。
    上述代码主要位于 scripts/segment.py 中。
    使用 tf-idf+jaccard similarity 进行相关文章推荐,首先计算每个关键词的 idf 值,导入到 mix.csv 中,再枚举所有文章对,计算每一对文章的相似程度,存到 similarity 文件夹中以文章编号命名的csv文件中。此部分代码位于 scripts/similarity.py 中。
    之后,将 info.csv 、mix.csv 、similarity/*.csv 中内容导入Django创建的sqlite3数据库中,此部分代码位于主要位于 database_insert.py 中。
    2.4 搜索算法使用打分的方法进行搜索。
    若开启了时间检索,则为位于这个时间区间内的文章加20000分,并将 threshold_time 值设为20000,否则将 threshold_time 值设为0。
    若使用了关键词检索,则将 threshold_text 值设为1000,否则设为0。对于检索使用的每个关键词,若在某篇文章中出现,则为该篇文章加 次,其中t表示关键词在文章及标题中的出现次数(标题中每出现一次 按5次计算)。每个关键词有1000分的基础分保证了出现关键词较多的文章得分会较高,使用 log 函数是为了适当平衡出现次数多的关键词和出现次数少的关键词的贡献。
    之后,将得分大于等于 threshold_time+threshold_text 的文章返回,返回前将文章按得分从高到低排序。
    2.5 服务器搭建服务器使用Django进行搭建。
    前端分为2个页面 index.html 与 article.html ,index.html 用于展示主页面及搜索结果,并使用JavaScript 实现关键词高亮。article.html 用于展示新闻详情及新闻内容。
    这两个页面都是在网上下载的网页模板的基础上添加了搜索栏,更改了上部的网站名称而得到的,网站模板位于 template 文件夹中。
    后端使用数据库进行交互,当用户点击文章详情时,读取本地静态文件进行显示,当用户进行搜索时,调用2.4中所描述的搜索算法进行搜索。
    3 评论 77 下载 2019-02-21 13:46:46 下载需要13点积分
  • 基于JAVA的即时通信软件

    一.设计任务书1.1 设计任务本文设计的是一个简单的即时通信软件,利用 Java Socket 进行点到点通信,其工作机制模仿即时通信软件的基本功能,已实现的功能有:

    客户端登录客户端退出群组成员之间传输文字或图片信息
    该软件分为客户端与服务器端,客户端负责与服务器建立连接,且执行收发消息的操作,服务器端负责等待客户端连接并保存用户的昵称与客户端 Socket 的输出流的对应关系。
    1.2 技术指标本程序使用的是 TCP 协议实现的即时通信软件,程序是基于 Java 语言开发的,主要用到的技术有:

    Socket 编程自定义协议
    如果使用普通的方法来标记一条消息的结束,如换行符,那么程序就不易扩展,只能发送纯文本消息,所以需要自己定义一种消息的格式,并且我们还需要提供发送消息与解析消息的方法。
    服务器端创建一个 ServerSocket,循环等待客户端的连接,每当有客户端连接,就获取到客户端的 Socket 对象,并将该对象交付给一个服务器端线程处理,服务器端线程会不断从 Socket 的输入流中解析出消息类型、长度及消息内容,然后根据类型执行不同的操作。
    客户端与服务器建立连接,同时开启一个客户端线程接收服务器端发送的消息,客户端登录是向服务器发送一条登录命令,客户端向服务器发送一条消息首先需要包装成定义的消息格式,然后再发送给服务器。
    不管是发送消息还是发送命令其实本质都是一条消息,向服务器发送的消息都必须按照定义的格式来。
    1.3 论证结果经论证,这个任务是可行的。TCP 协议的实现细节 Java Socket 已经帮我们做好了,我们需要做的是定义一个协议工具类,实现发送消息与接收消息的方法,然后客户端与服务器端都利用这两个方法来进行消息的发送与解析。
    二.实现原理2.1 基于 TCP 协议的即时通信TCP 协议是一种端到端协议,当一台计算机要与远程的另一台计算机连接时,TCP 协议会让他们建立一个用于发送和接收数据的虚拟链路。TCP 要负责收集数据信息包,并将其按照适当的次序放好传送,接收端收到后再正确的还原,TCP协议使用了重发机制,当一个通信实体发送一个消息到另一个通信实体后,需要接收到另一个通信实体的确认消息,如果没有收到确认消息,则会重发消息。所以 TCP 协议保证了数据包在传输中不发生错误。通信示意图如图 1 所示。

    在通信实体 1 与通信实体 2 建立虚拟链路前,必须有一方主动来接收其他通信实体的连接请求,作出“主动”的通信实体称为服务器,发出连接请求的通信实体称为客户机。
    2.2 自定义协议的定义2.2.1 通信原理客户端与服务器端相互通信,首先要建立 Socket 连接,连接建立好后双方都会拿到一个 Socket 对象,通过 Socket 对象拿到输入、输出流可以实现写、读的功能。服务器端接收到客户端的连接,将客户端的 Socket 对象交付给一个线程,该线程负责维护该客户端,在线程体中需要使用死循环不断的获取客户端发给服务器的消息。
    2.2.2 存在的问题那么问题来了:怎么标志客户端发送的消息的结尾?如果不对结尾标志,服务器端将不知道客户端本次客户端发送的消息到哪里。
    2.2.3 文本消息的解决办法对文本消息的一般做法是将‘\n’作为结尾标记,操作过程如下:

    客户端与服务器端建立连接,服务器端将客户端的 Socket 加入集合中保存,并将客户端的 Socket 交付给一个服务器端线程处理,服务器线程初始化套接字、输入输出流,然后一直循环等待客户端发送消息
    客户端向服务器发送消息“Hello World!\n”,服务器线程获取到客户端发送的消息,然后使用输入流读取一行消息,读取到的消息是“Hello World!”,然后遍历服务器端的那个集合,获取到集合中每个 Socket 的输出流,向每个输出流中写入消息。

    以上是一般意义上群聊的实现原理:客户端向服务器发送消息,服务器获取到消息后转发给群组中的所有成员。
    2.2.4 依然存在的问题
    问题一:如果发送的是图片、文档应该怎么标记消息的结束?问题二:在实际应用中,客户端向服务器端发送消息并不像刚才的例子那么简单,还需要登录、注销、登录成功等命令,怎么来区别这些命令?
    2.2.5 自定义协议的内容为解决以上问题,我们规定:消息的发送与解析都必须使用以下格式:

    由表 1 知,数据分为三个部分

    type:1 字节,表示发送的消息类型,所以可以表示 65535 种消息类型。totalLen:4 字节,整型数据,表示发送的消息的总长度,包含 type、totalLen的长度以及消息内容的长度,totalLen 占用 4 字节,所以最大可以发送 2G 的数据。bytes[]:字节数组,表示发送的消息的内容,大小没有限制。
    2.2.6 使用自定义协议制定消息的规范后以上两个问题都会迎刃而解了,客户端向服务器端发送消息的过程如下:
    例 1:发送纯文本
    客户端:

    客户端的视图与用户交互获取到用户要发送的文本内容“你好啊”客户端将获取到的文本内容转化为字节数组 bytes客户端将消息包装成自定义的消息格式,如表 2 所示


    客户端往输出流中写入消息
    服务器端:

    服务器端线程一直等待接收客户端的消息服务器端线程获取到客户端发送的消息,按照格式解析出消息的类型、长度以及消息内容服务器端线程获取到的消息类型是文本类型 TYPE_TEXT,那么需要遍历服务器端的集合,获取到集合中每个 Socket 的输出流,使用这个输出流对消息转发,在转发前同样需要包装成定义的消息格式。
    例 2:登录功能
    客户端:

    客户端与服务器端建立连接之后,将用户输入的昵称包装成一条消息,如表 3 所示,消息类型是 TYPE_LOAD,字节数组 bytes 是用户昵称。


    在建立连接的同时客户端会开启一个线程等待接收服务器端的消息。将消息发给服务器端。客户端线程如果收到服务器端反馈的信息,就将信息告知用户。
    服务器端:

    接收到消息后获取到消息类型为 TYPE_LOAD,服务器端就可以知道这条消息是登录请求,然后 bytes[]数组里的数据就是用户昵称,将用户昵称、该客户端的 Socket 对象的输出流先保存到 Map 中,然后将该 Map 保存到集合中。服务器端线程对客户端的登录请求处理完成后,向客户端反馈一条标记着是否操作成功的消息,类型是 TYPE_LOADSUCCESS 和 TYPE_LOADFAIL,bytes 数组是服务器端反馈的消息。
    如果登录成功,服务器反馈的消息格式如表 4 所示。

    如果登录失败,服务器反馈的消息格式如表 5。

    2.2.7 小结其实不管客户端发送的消息是哪种类型,客户端只需要负责将要发送的消息转化为字节数组,然后对数据包装后发送给服务器。对于一些非命令类的消息,服务器接收到消息后只需要根据数据类型对数据进行解析、包装、转发即可。对于一些命令类的消息,如登录,退出等功能,则需要服务器端执行相应的操作,服务器端不需要对消息转发,可能需要对一些命令给予反馈。
    通过自定义协议可以解决上述的两个问题,并给出了客户端与服务器端使用自定义协议发送消息的两个详细步骤
    2.3 自定义协议的实现这个自定义协议就是自己定义的一个发送消息、解析消息的规范,无论是发消息还是收消息都必须按照这个规范来,实现这个协议无非需要考虑三个问题:

    问题一:如何发送消息?问题二:如何解析消息?问题三:如何表示解析消息后的结果?
    我们只需要定义两个类,协议工具类 Protocol 负责消息的发送与解析,消息结果类 Result 封装了一个消息的三个部分:type、totalLen、bytes,协议工具类对消息解析后会返回一个 Result 对象表示一次解析的结果。所以这两个类结合起来使用就可以解决以上三个问题。
    2.3.1 协议工具类的实现协议工具类 Protocol 负责消息的发送与解析,内部需要定义消息的格式,协议工具类的设计如图 2 所示。

    2.3.1.1 消息类型消息类型是协议工具类的静态的公共的整型常量,这样的设置为程序后期的扩展提供了方便,提供的消息类型如表 6 所示。

    2.3.1.2 发送消息发送消息就是按照定义的格式往输出流中写入数据,我们首先要做的是包装数据定义方法签名,如表 7 所示。


    包装数据
    一条数据有三部分,消息类型、消息内容已经通过参数获取到了,消息的长度还要程序计算:消息长度=消息的内容的长度+5 字节。
    int totalLen = 1 + 4 + bytes.length;

    按格式写入输出流,先写入消息类型,然后写入消息的总长度,最后再写入消息的内容。
    dos.writeByte(type);dos.writeInt(totalLen);dos.write(bytes);dos.flush();
    2.3.1.3 解析消息解析消息是指将从输入流中读取到一条消息,然后按照格式转化为一个结果对象 Result。定义方法签名如表 8 所示。


    消息提取
    从输入流中依次读取三部分:type、totalLen、bytes[],dis 是方法的参数,调用方法时需要传入输入流
    byte type = dis.readByte();int totalLen = dis.readInt();byte[] bytes = new byte[totalLen - 4 - 1];dis.readFully(bytes);

    结果返回
    将提取出来的数据的三个部分封装成一个结果对象作为方法的返回值,注意第一个参数:type & 0xFF,因为 type 是字节,需要与 0xFF 进行“与”运算得到一个整型值。
    return new Result(type & 0xFF, totalLen, bytes);
    2.3.2 结果类的实现结果类 Result 封装一条消息的三个部分,主要提供了 setter、getter 方法来设置或者获取消息的三个组成部分,结果类的设计如图 3 所示。

    2.3.2.1 消息格式Result 类定义了消息的格式,消息的组成如表 9 所示。

    2.3.2.2 方法Result 类的方法签名如表 10 所示。

    2.4 服务器端的实现2.4.1 服务器类Server 类负责等待客户端连接并将连接上的客户端交付给服务器线程类。Server 类的设计如图 4 所示。

    clients 维护一个 List 集合,集合中每个元素都是 Map,每个 Map 中都有两个 item,保存着客户端的昵称和对应的输出流。
    main 方法中要实现的是等待客户端连接,使用 ServerSocket,有客户端连接时开启一个线程来处理。代码如下:
    ServerSocket serverSocket = new ServerSocket(30000);while (true) { Socket socket = serverSocket.accept(); new Thread(new ServerThread(socket)).start();}
    2.4.2 服务器线程类ServerThread 类负责接收客户端的消息并对消息进行相应的处理,ServerThread 类的设计如图 5 所示。

    2.4.2.1 变量ServerThread 类的变量以及其含义如表 11 所示。

    2.4.2.2 方法签名ServerThread 类的方法签名以及含义如表 12 所示。

    2.5 客户端的实现2.5.1 客户端界面界面的元素有:登录输入框、聊天内容文本域、消息输入文本域、发送按钮。客户端界面初始化时会调用 Client 的方法执行客户端与服务器的连接请求,连接成功后客户端与服务器端会形成一个虚拟链路,当用户输入用户名后回车,客户端通过该虚拟链路向服务器端发送一条登录命令。View 类的设计如图 6 所示。

    2.5.2 客户端客户端 Client 负责处理客户端连接、客户端发送消息的任务,Client 类的设计如图 7 所示。

    2.5.2.1 建立连接socket = new Socket(address, port);dos = new DataOutputStream(socket.getOutputStream());// 监听服务器发回的消息new ClientThread(socket).start();
    2.5.2.2 登录public void load(String user) { Protocol.send(Protocol.TYPE_LOAD,user.getBytes(), dos);}
    2.5.2.3 发送消息public void sendMsg(String msg) { Protocol.send(Protocol.TYPE_TEXT, msg.getBytes(), dos);}
    2.5.2.4 退出public void logout(){ Protocol.send(Protocol.TYPE_LOGOUT, "logout".getBytes(),dos);}
    客户端线程负责接收服务器端发的消息,其对消息的处理方法与服务器端线程的处理方法类似,都是先解析消息,然后根据消息类型执行相应的操作。
    2.5.2 客户端线程客户端线程主要负责接收消息,并对接收到的消息进行显示。ClientThread类的设计如图 8 所示。

    ClientThread 类维护的是客户端的套接字以及输入流,那三个方法的作用和服务器端线程类似,这里不再细说。
    三.实验结果3.1 运行结果
    服务器端启动后是没有运行界面的,运行结果如图 9 所示。


    客户端启动后初始界面如图 10 所示。


    输入用户名后回车登录,登录后如图 11 所示。


    两个客户端互发消息,如图 12 所示。


    单个客户端退出

    3.2 主要问题及故障分析3.2.1 主要问题
    不知道如何标记一条消息的结尾界面问题
    3.2.2 故障分析对于第一个问题:如果只是发送一条文本消息的话,是没有这个问题的。但是为了使程序拥有更好的扩展性,使其可以发送图片以及文档,这个问题还是值得思考的。定义一种消息的格式,无论是发送还是接收消息都按照这个标准来,这个就是我们定义的协议工具类的作用。
    对于第二个问题:本程序是基于 Java 语言开发的,AWT 和 SWING 是 Java 语言开发 GUI 的工具包。SWING 和 AWT 写界面都不是很方便,所以本程序的界面有点粗糙。
    3.3 设计结论由于之前写过这类的程序,所以在程序层次上的实现并不难,本次实验不仅巩固了编写程序的功底,还加深了对 Socket 通信底层理论的理解,可以说是收获非常大。至此,本论文已经接近尾声,所研究的是一个简单的即时通信软件的实现过程以及实现原理。
    四.附录一:实验相关4.1 实验数据客户端与客户端 2 发送的消息数据,[]内部表示的是发送方的昵称,昵称外部是发送的消息内容,具体实验数据如下:

    [客户端 1]我是客户端 1[客户端 1]你好啊![客户端 2]我是客户端 2
    4.2 系统软硬件环境4.2.1 硬件环境
    系统:Window7 旗舰版系统类型:64 位操作系统处理器:i5-4210U安装内存:4.0GB
    4.2.2 软件环境已安装 JRE、JDK 并配置好环境变量
    4.3 使用说明本程序分为客户端与服务器端,首先需要启动服务器端,然后可以打开多个客户端,客户端打开后可以进行聊天。
    4.4 参考资料[1] 李刚,疯狂 Java 讲义第 3 版,北京:电子工业出版社,2014.7
    [2] James F.Kurose,Keith W.Ross,计算机网络-自顶向下方法上册(第 5 版),北京:高等教育出版社
    5 评论 371 下载 2018-11-03 13:32:16 下载需要10点积分
  • 基于JAVA和TCP SOCKET实现的P2P的局域网即时通信系统

    一、设计要求
    掌握P2P原理
    实现一个图形用户界面局域网内的消息系统。
    功能:建立一个局域网内的简单的P2P消息系统,程序既是服务器又是客户,服务器端口(自拟服务器端口号并选定)

    用户注册及对等方列表的获取:对等方A启动后,用户设置自己的信息(用户名,所在组);扫描网段中在线的对等方(服务器端口打开),向所有在线对等方的服务端口发送消息,接收方接收到消息后,把对等方A加入到自己的用户列表中,并发应答消息;对等方A把回应消息的其它对等方加入用户列表。双方交换的消息格式自己根据需要定义,至少包括用户名、IP地址发送消息和文件:用户在列表中选择用户,与用户建立TCP连接,发送文件或消息
    用户界面:界面上包括对等方列表;消息显示列表;消息输入框;文件传输进程显示及操作按钮或菜单

    二、软件开发工具及运行环境
    软件开发工具

    编程语言:Java开发环境:EclipseJDK版本:1.8操作系统:windows 10
    运行环境

    操作系统无关性:Windows、Linux、Mac OS X下安装了Java的运行环境JRE即可运行

    三、程序开发的基础知识3.1 学习Socket和TCP的基本原理和通信机制3.1.1 TCP连接电脑能够使用联网功能是因为电脑底层实现了TCP/IP协议,可以使电脑终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。
    建立起一个TCP连接需要经过“三次握手”:

    第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
    握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”。(过程就不细写了,就是服务器和客户端交互,最终确定断开)
    3.2 SOCKET原理3.2.1 套接字(socket)概念套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
    应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
    3.2.2 建立socket连接建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
    套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

    服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求
    客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求
    连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求

    3.3 SOCKET连接与TCP连接创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。
    3.4 主要运用知识
    Java socket编程Java GUI编程Java继承和事件绑定Java异常与捕获
    四、总体设计4.1 设计思路4.1.1 经典的TCP通信服务器客户端架构服务器有一个服务器等待用户连接的线程,该线程循环等待客户端的TCP连接请求。一旦用ServerSocket.accept()捕捉到了连接请求,就为该TCP连接分配一个客户服务线程,通过该消息传递线程服务器与客户端通信。服务器发送消息通过该客户服务线程的方法在主线程完成,而接收消息全部在客户服务线程中循环接收并处理。
    客户机能发起一个向服务器的socket连接请求,一旦收到服务器成功响应连接请求,客户机便为这个socket分配一个消息接收线程,否则关闭该socket。和服务器任务分配类似,发送消息作为非常用方法在主线程中完成,而接收消息在消息接收线程中不停刷新并作相应处理。
    4.2 统一ASCII码级文本传输协议为了实现客户机对服务器命令的响应、服务器对客户机需求的解读以及客户机与客户机之间的消息传递,我为服务器和客户端之间通信定义了一组文本传输协议。协议属于变长文本传输协议,用@作为各字段分隔符,所有消息的首节一定是消息类型,方便解析。协议定义了以下按发送方分类的消息格式:


    4.3 MVC分层模式Model-View-Controller是经典的应用程序开发设计模式,它讲究数据管理、界面显示和用户交互、程序维护管理分别封装在MVC三种类中,够成松耦合关系。本次课程设计中我也利用MVC的设计思路,独立了Model类User用于保存客户机用户信息,DefaultListModel模型类用于储存在线用户队列;将View单独放在一个包中,Controller监听用户操作事件,反映给Model类处理并在View中更新。
    MVC的思想即是M和V之间不要直接产生联系,业务逻辑均封装在MC中,而V仅仅负责显示。本实验为V类绑定了各自的Listener监听用户操作,在C中完成业务逻辑处理,保存并更新User和DefaultListModel,最后再显示到UI界面上。
    4.4 concurrentHashMap管理线程队列和用户列表concurrentHashMap是java.util.concurrent包中定义的多线程安全的哈希表,利用哈希表管理线程队列和用户列表可以快速索引,多线程安全也保证了多个用户服务线程之间共享资源的数据一致性。
    4.5 程序流程图
    4.6 关键数据结构4.6.1 User模型类
    构造方法
    有两个,一个是用独立的name和IP实例化一个User,另一个是用name%IP拼接而成的字符串实例化User
    只读字段
    name和ipAddr均是private的,给他们配置一个只读的getter
    description()用户描述
    返回name%IP拼接而成的字符串,用以代表一个独立的用户

    4.6.2 ServerView类
    UI相关的方法
    构造函数中的initUI()大部分是设置UI界面,其中用到了GridLayout和BorderLayout。用serviceUISetting(false)把所有连接状态才起作用的button和textField全部关闭了(false改为true开启他们,并关闭所有设置相关的button和textField)

    4.6.3 ServerMain类
    startServer()开启服务器方法———startButton绑定
    先检查maxClientNum和port的合法输入,如果不合法弹出出错窗口并退出。接着初始化管理客户服务线程队列的并发哈希表clientServiceThreads,初始化监听客户机连接请求的serverSocket,并且初始化和开启一个监听连接请求的线程。最后有一些差错处理以及服务器log日志
    请求监听线程ServerThread类
    isRunning作为线程运行标志位控制线程存活,线程start后会调用的函数run()里完成了监听逻辑。如果开启则一直循环,serverSocket.accept()是阻塞的,线程不会运行直到有其他线程/进程向其请求Socket连接。这也是我下面提到的一个bug的原因:accept()阻塞了线程它一直在等待,仅仅用标志位来结束线程并不能使之跳出阻塞状态(还没有循环到下一次while的判断),因此我在closeThread()中强行关闭serverSocket会报出一个异常!
    收到连接请求后accept()返回一个socket,这个socket用于和请求连接的客户机通信。至此时TCP建立连接3次握手已经完成,全部被serverSocket类封装起来了。获取了通信socket之后检查服务器在线人数是否已满,向客户机发送一个登陆成功或失败的消息。若在线人数未满连接成功,则为客户机分配一个clientServiceThread线程专门用于发送和接受客户机的TCP包。
    监听客户机消息的ClientServiceThread线程类
    该类比较庞大,我挑重点介绍。
    关键字段
    private Socket socket;private User user;private BufferedReader reader;private PrintWriter writer;private boolean isRunning;
    分别保存了通信socket、当前连接用户Model、绑定在socket输入流上的BufferedReader、绑定在socket输出流上的PrintWriter以及线程运行控制标志位isRunning。reader用来读取客户机消息输入,readLine方法也是阻塞的,直到客户机有消息发送过来。writer有一个写缓冲区,有flush()函数强制发送消息并刷新缓冲区,我把写消息封装在sendMessage(String)中。
    初始化
    初始化中先绑定reader和writer到socket响应流,在判断用户socket请求发送的消息格式是否正确(不正确线程将不能执行)。接着向所有已上线的用户通知一遍这个新用户上线了,发送通知需要遍历整个服务线程队列并发送文本传输协议中定义的各式的通知。注意到这时候该服务线程并没有加入到服务线程队列中,是在初始化完成之后加入的。
    通知了其他用户这个新客户机上线后,再告诉该客户机现在已经有哪些用户在线了,这也是用协议中的格式发送通知即可。这里用到了StringBuffer类,多字符串连接时该类比String的+的效率要高。
    线程run
    收到客户机消息后判断消息类型,若是LOGOUT通知客户机下线,则向所有其他客户端进程发送该用户下线的信息,并删除model类里的该用户对象和线程队列里的该线程。
    如果是消息则交与dispatchMessage(String)方法专门分发消息。
    分发消息方法dispatchMessage(String)
    该方法解析MSG类消息的to字段,根据to字段选择是将消息发给特定用户还是直接群发。发给特定用户的话根据to字段(userDescription)做索引,快速从服务线程队列找出服务该用户客户机的线程来发送信息。
    其他
    绑定时间如stopServer关闭服务器和sendAll群发消息都比较直白便省略介绍,主要需要注意一下其中的差错控制。关闭服务器还需要更新UI控制逻辑。
    说明
    ServerMain类虽然通过ClientServiceThread里的writer发送消息,并且也是调用封装在这个Thread内部类中的,但是调用writer来sendMessage并不是一定在该线程内完成的(该线程内指的是run()里的while循环内部),sendMessage是非阻塞的我们没有必要专门在线程中执行。ClientServiceThread主要工作是收听各个客户端向服务器发送的消息。

    4.6.4 ClientView类Client和Server稍微有点不一样,只有一个辅助线程MessageThread用于接收服务器消息。由于只需要绑定在一个socket上,所以writer和reader只有一个,是直接属于Client实例的字段。

    UI相关方法
    构造函数里的init和Server中几乎完全一样,这部分属于代码复用。注意需要多绑定一个监听器:
    javax.swing.event.ListSelectionListener类用来监听用户选择JList框里的条目,JList框里固定一个所有人的项(点击选中表示消息发送给所有人,默认发送给所有人,目标对象下线后也是自动把对象转变成所有人),其他则是在线用户。点击这些列表项时触发一个选择事件,通过判断index来判断用户的选择,并更新模型记录sendTarget和UI中messageToLabel显示的text。

    4.6.5 ClientMain类
    connect连接到服务器
    差错检测这里没有判断IP地址合法性,判断也不是很麻烦。用户输入合法时,根据服务器IP地址和端口实例化一个socket,这个socket用于将来和服务器通信。获取客户机本地IP地址并用这个IP地址实例化,通过socket给服务器发送一条自己用户信息(name和IP)的消息表示请求。发送完毕后立即开启MessageThread等待服务器的回应。
    MessageThread接受服务器消息线程
    reader.readLine()阻塞读取服务器消息。一直忘记介绍StringTokenizer类,这里说明一下。StringTokenizer类通过一个String和一个分割字符串实例或一个tokenizer,通过分割得到一系列记号流通过tokenizer.nextToken()获取这些记号字符串。不难发现其作用和String.split(String)一样也是做字符串分割,但是其效率显著优于split方法(百度搜索两者比较会有较详细的性能分析)。
    根据tokenizer返回的记号流我们来判断消息类型:
    服务器关闭:向服务器发送一个下线信息,关闭socket, write和read,清空记录Model,最后退出线程。
    服务器错误:log错误类型,啥也不干进入下一轮循环。
    登陆信息:
    成功:log成功,进入下一轮循环。
    失败:log失败,关闭socket, write和read,清空记录Model,最后退出线程。

    五、关键代码 private class ClientServiceThread extends Thread { private Socket socket; private User user; private BufferedReader reader; private PrintWriter writer; private boolean isRunning; private synchronized boolean init() { try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream()); String info = reader.readLine(); StringTokenizer tokenizer = new StringTokenizer(info, "@"); String type = tokenizer.nextToken(); if (!type.equals("LOGIN")) { sendMessage("ERROR@MESSAGE_TYPE"); return false; } user = new User(tokenizer.nextToken()); sendMessage("LOGIN@SUCCESS@" + user.description() + "与服务器连接成功!"); int clientNum = clientServiceThreads.size(); if (clientNum > 0) { //告诉该客户端还有谁在线 StringBuffer buffer = new StringBuffer(); buffer.append("@"); for (Map.Entry<String, ClientServiceThread> entry : clientServiceThreads.entrySet()) { ClientServiceThread serviceThread = entry.getValue(); buffer.append(serviceThread.getUser().description() + "@"); //告诉其他用户此用户在线 serviceThread.sendMessage("USER@ADD@" + user.description()); } sendMessage("USER@LIST@" + clientNum + buffer.toString()); } return true; } catch(Exception e) { e.printStackTrace(); return false; } } public ClientServiceThread(Socket socket) { this.socket = socket; this.isRunning = init(); if (!this.isRunning) { logMessage("服务线程开启失败!"); } } public void run() { while (isRunning) { try { String message = reader.readLine(); // System.out.println("recieve message: " + message); if (message.equals("LOGOUT")) { logMessage(user.description() + "下线..."); int clientNum = clientServiceThreads.size(); //告诉其他用户该用户已经下线 for (Map.Entry<String, ClientServiceThread> entry : clientServiceThreads.entrySet()) { entry.getValue().sendMessage("USER@DELETE@" + user.description()); } //移除该用户以及服务器线程 listModel.removeElement(user.getName()); clientServiceThreads.remove(user.description()); close(); return; } else { //发送消息 dispatchMessage(message); } } catch(Exception e) { e.printStackTrace(); } } } public void dispatchMessage(String message) { StringTokenizer tokenizer = new StringTokenizer(message, "@"); String type = tokenizer.nextToken(); if (!type.equals("MSG")) { sendMessage("ERROR@MESSAGE_TYPE"); return; } String to = tokenizer.nextToken(); String from = tokenizer.nextToken(); String content = tokenizer.nextToken(); logMessage(from + "->" + to + ": " + content); if (to.equals("ALL")) { //send to everyone for (Map.Entry<String, ClientServiceThread> entry : clientServiceThreads.entrySet()) { entry.getValue().sendMessage(message); } } else { //发送给某一个人 if (clientServiceThreads.containsKey(to)) { clientServiceThreads.get(to).sendMessage(message); } else { sendMessage("ERROR@INVALID_USER"); } } } public void close() throws IOException { this.isRunning = false; this.reader.close(); this.writer.close(); this.socket.close(); } public void sendMessage(String message) { writer.println(message); writer.flush(); } public User getUser() { return user; } }
    六、测试6.1 运行ServerMain和ClientMain本程序支持单服务器多客户端,我打开了1个Server和2个Client作为演示。进程开启后界面如下:


    服务器和客户端在未开启/连接的状态下无法发送消息只能修改配置,而在开启/连接状态下无法修改配置只能发送消息,UI逻辑均由开启/连接状态决定。
    服务器配置中可以修改监听端口和人数上限,开启后接收所有来自客户端的消息,模仿解析包动作进行转发,服务器可以群发消息。
    客户端可以设置自己的名字、服务器IP和服务器端口(默认均是192.168.1.154本地IP和端口6666)。客户端连接后可以在在线用户列表中选择所有人或其他在线用户发送消息。其他用户上下线信息在在线用户列表和聊天消息框中都有提示。
    6.2 开启服务器并登陆客户端下图是第二位登陆的用户杨劲登录时,从服务器接受其他用户,显示在左侧在线用户列表中。

    6.3 服务器群发消息
    6.4 客户端群发消息客户端 选择 所有人,并发送消息:

    客户端 收到了消息,并标记为群发:

    6.5 客户端发送私聊消息:客户端 和 客户端 私聊:


    6.6 客户端下线客户端下线时所有在线用户收到其下线消息,在线列表中不再出现此用户:
    客户端 下线,通知服务器,服务器转发其下线消息:

    客户端 收到 下线通知,左侧在线列表中已经没有下线的用户了:

    七、开发过程中遇到的问题及解决办法本次完成这个课程设计还是花了不少精力和时间,由于对于Java网络编程这一块并不是很擅长,开发过程中老是遇到各种大大小小的问题,例如一开始不太清楚tokenizer.nextToken()的意思以及用法, 在参考了一些书籍以及百度各种关于网络编程的文章,才得以顺利完成本次课设。
    八、程序中待解决的问题及改进方向程序可能还存在不少小bug,后期有时间再进行修复。目前发现的一个Bug是服务器关闭时,我关了服务器接收Socket请求的线程并close了该ServerSocket,但是该线程仍然继续执行了一次ServerSocket.accept()。我尝试用了synchronized方法并判断ServerSocket是否关闭,但这个异常还是会出现。我捕捉了该异常,仅仅printStackTrace而没有做其他错误处理,幸运的是这小Bug并不影响服务器关闭,所有客户端都能正确的接收服务器关闭的消息。希望以后有时间能把这个错误给改过来。
    8 评论 197 下载 2018-11-29 09:34:27 下载需要11点积分
  • 基于JavaWeb和SQL Server的物流管理系统的设计与实现

    摘 要物流作为中国经济发展迅速的代表行业之一,在当今时代,它在我们身边无处不在,我们几乎可以随时随地看到它们的身影,为什么我们能在网上买的东西能在几天时间里送到我们手中,都是因为有许许多多的物流企业存在,然而随着社会经济的发展,我们的购买能力的提升,物流企业信息管理面临着巨大的压力,如果还是照以前采用纸笔管理信息的方式,企业信息管理通常比较繁杂,企业工作的效率实在是太低,此时采用计算机来管理企业信息成为了一种趋势,计算机相比人为操作有更高的效率,更安全,也给企业工作人员降低了工作压力,工作管理人员只需要通过操作电脑,就可以管理企业的信息,但是我们如何通过计算机来管理企业信息呢,这时开发一个物流管系统成为了众多中小型物流企业的第一任务,它对于很多企业是发展中必不可少的一部。
    在本文中,我将介绍用Java语言实现物流管理系统的基本过程,以及各种使用的技术。在物流管理系统中,主要任务是简化企业信息的增删改查操作,通过一系列的开发,本系统基本实现了物流企业所需要的功能,基本达到了数据的一致性和安全性,为了达到企业内部管理的要求,本系统对人事信息和客户信息进行管理,使物流管理系统更加完善。
    关键词:物流;企业管理;Java
    1 绪论1.1 设计背景随着中国物流业的高速发展,物流管理的重要性不言而喻。而物流管理的效率更是各个物流企业最看重的地方。近些年来,我国计算机互联网技术高速发展,很多公司和企业都实现了自动化办公及信息管理,这样的管理方式更加高效率,工作人员只需要在电脑前动动手指,就可完成繁琐的管理操作,极大程度上减轻了工作人员的工作量。
    我通过在网络上对中小型物流企业的问卷调查,了解到仍有很多中小型企业对物流信息管理仍处于纸笔操作的阶段,我认为这种工作方式效率实在太低,这浪费了太多的人力物力,我认为我们应该采用计算机来管理物流企业信息将传统手工式的物流管理方式改变为以数据流驱动的信息化管理方式,实现信息化仓储,运输,车辆调度的管理系统,人机结合办公,大幅提高工作效率,为企业创造更好的效益,这也将会是现代物流管理的主流方式。
    1.2 设计意义人们生活工作与通信,目前都与信息密切相关,但很多国内企业的仓库作业没有达到信息化,因此为实现信息数字化,开发中小型物流管理系统正是最好的方式,利用现有的信息基础设施,实现计算机管理物流企业信息对社会有着重要的价值和意义。
    1.3 设计思路
    第1章为绪论部分:介绍了本系统的设计背景及意义,明确了设计目标,阐述了本系统的特色与创新之处
    第2章为需求分析部分:对所要开发的系统进行了详细的可行性分析和对系统的综合要求进行了分析,并介绍了数据库的逻辑模型
    第3章为系统设计部分:阐述了系统的总体设计,包括系统架构设计、模块设计数据设计
    第4章为产品实现部分:对产品实现的过程及个模块功能做出了详细的说明
    第5章为产品测试部分:对产品测试的过程及测试方法进行了详细的分析与说明
    第6章为结论部分:总结毕业设计的成果,详细说明此次设计的特点及使用价值,指出不足之处或者遗留的未解决的问题

    2 需求分析2.1 需求描述由于本系统只对企业内部人员开放,所以用户就是本企业管理层员工,用户可以通过自己的工作编号注册账号登录本系统进行业务操作,主要业务包括员工信息管理、货物信息管理、运输信息管理、订单信息管理等几个方面。
    2.2 用例建模用户具有登录后,可以进行货物信息管理、人事信息管理、车辆信息管理、订单信息管理的增删改查操作。如下图:

    2.2.1 人事信息管理人事信息管理主要包括员工信息管理和客户信息管理俩个模块,如下图:

    2.2.2 货物信息管理货物信息管理主要包括客户订单管理,货物出入库,库存等几个功能。如下图:

    2.2.3 订单信息管理订单信息管理主要包括订单基本信息管理、已处理订单信息管理、在途订单信息管理。如下图:

    2.3 用例描述
    员工管理用例描述

    用例编号:CASE01用例名称:员工管理用例描述:系统管理员对员工的信息进行CRUD操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了员工或修改了员工信息或删除了系统中已经存在的员工或查看某个员工的信息活动步骤
    系统管理员登录系统系统以分页模式显示员工信息列表(每页10条)系统管理点击【新增】按钮,弹出新建员工界面,系统管理员输入员工信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的员工列表系统管理员在用户列表中选择某个员工,点击【修改】,弹出员工信息修改界面,显示员工的当前信息,管理员更改员工信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的用户列表系统管理员在用户列表中选择某个用户,点击【删除】,弹出删除提示框,当用户确定删除后,系统将当前用户信息删除,并返回到用户列表,显示删除后的用户列表系统管理员也可以在左侧菜单查看自己信息,并根据自己需求可更改自己的密码
    扩展点:如果管理员没有没登录,则提示“请先登录”并返回至登录页面修改时:工作编号是不能修改的
    客户管理用例描述

    用例编号:CASE02用例名称:客户信息管理用例描述:系统管理员对客户的信息进行CRUD操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了客户或修改了客户信息或删除了系统中已经存在的客户或查看某个客户的信息活动步骤
    系统管理员登录系统系统以分页模式显示员工信息列表(每页10条)系统管理点击【新增】按钮,弹出添加客户信息界面,系统管理员输入客户信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的员工列表系统管理员在用户列表中选择某个客户,点击【修改】,弹出员工信息修改界面,显示客户的当前信息,管理员更改客户信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的客户列表系统管理员在客户列表中选择某个客户,点击【删除】,弹出删除提示框,当用户确定删除后,系统将当前用户信息删除,并返回到客户列表,显示删除后的客户列表

    订单管理用例描述

    用例编号:CASE03用例名称:订单信息管理用例描述:系统管理员对订单的信息进行CRUD操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了订单或修改了订单信息或删除了系统中已经存在的订单或查看某个订单的信息活动步骤
    系统管理员登录系统系统以分页模式显示订单信息列表(每页10条)系统管理点击【新增】按钮,弹出添加订单信息界面,系统管理员输入订单信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的订单列表系统管理员在用户列表中选择某个订单,点击【修改】,弹出订单信息修改界面,显示订单的当前信息,管理员更改订单信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的订单列表系统管理员在客户列表中选择某个订单,点击【删除】,弹出删除提示框,当用户确定删除后,系统将当前用户信息删除,并返回到客户列表,显示删除后的客户列表系统管理员还可以查看哪些订单已经完成,哪些订单正在途中
    扩展点:添加订单时,订单信息里的客户编号在客户信息表里必须存在此客户否则添加失败
    订单费用管理用例描述

    用例编号:CASE04用例名称:订单费用信息管理用例描述:系统管理员对订单费用的信息进行CRU操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了订单的费用信息或修改了订单的费用信息或查看某个订单的费用信息活动步骤
    系统管理员登录系统系统以分页模式显示订单的费用信息列表(每页10条)系统管理点击【新增】按钮,弹出添加订单的费用信息界面,系统管理员输入订单的费用信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的订单的费用信息列表系统管理员在用户列表中选择某个订单的费用信息,点击【修改】,弹出订单的费用信息修改界面,显示订单的当前信息,管理员更改订单的费用信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的订单的费用信息
    扩展点:添加订单的费用信息时,订单信息表里必须存在你所要添加的订单,否则添加失败
    货物统计管理用例描述

    用例编号:CASE05用例名称:货物统计管理用例描述:系统管理员对订单费用的信息进行CRUD操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了货物信息或修改了货物信息或查看某个订单的货物信息,或者删除某个订单的货物信息活动步骤
    系统管理员登录系统系统以分页模式显示订单的货物信息列表(每页10条)系统管理点击【新增】按钮,弹出添加订单的货物信息界面,系统管理员输入订单的货物信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的订单的货物信息列表系统管理员在用户列表中选择某个订单的货物信息,点击【修改】,弹出订单的货物信息修改界面,显示订单的货物信息,管理员更改订单的货物信息,点击【submit】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的订单的货物信息系统管理员在客户列表中选择某条货物信息,点击【删除】,弹出删除提示框,当用户确定删除后,系统将当前用户信息删除,并返回到货物信息列表,显示删除后的货物信息列表
    扩展点:添加订单的货物信息时,订单信息表里必须存在你所要添加的订单,否则添加失败

    3 系统设计本系统的主要功能:当客户有货物运输的需求时,系统管理员会询问客户的需求并进行分析,对客户提供的信息进行填写,首先填写客户信息,其中包含了客户的一些基本信息,比如说客户的名称,地址,电话等等,当客户所填写的信息提交后,可根据客户的需求为其生成订单,从而进行一系列的订单操作,最后完成订单。
    3.1 数据库设计在数据库设计方面上,我使用的是微软公司的SQL Server数据库管理系统,SQL Server是当今比较流行的关系型数据库管理系统,可跨越多种平台使用,其功能也是十分强大,作为一个全面的数据库平台,其为企业提供了非常安全和可靠的存储数据功能。
    3.1.1 概念模型
    3.1.2 逻辑模型
    3.1.3 物理模型
    3.1.4 数据库脚本create database LogisticsMggouse LogisticsMggo--用户表create table T_user(user_id int not null primary key identity,user_name varchar(20) not null,user_pwd varchar(20) not null,emp_worknum int not null)go--员工信息表create table T_emp(emp_worknum int not null primary key identity,emp_name varchar(20) not null,emp_sex char(2) not null,emp_brithday date ,emp_cardno varchar(60) not null,emp_address varchar(60),emp_tel varchar(40) ,dept_name varchar(40) not null,)go--部门表create table T_dept(dept_num int not null identity,dept_name varchar(40) primary key not null)go--客户信息表create table T_client(client_num int not null primary key identity,client_name varchar(40) not null,client_add varchar(60) not null,client_tel varchar(40) not null,client_email varchar(40),)go--客户订单表create table T_clientorder(order_num int not null primary key identity,client_num int not null ,tri_type varchar(20) not null,yufashijian date ,yudaodashijian date,ordercreatetime date ,order_whetherSend char(2) not null,con_name varchar(20) not null,con_tel varchar(40) not null,arrive varchar(60) not null,order_whetherReceive char(2),remake text,goodsName varchar(50),goodsNum varchar(50))go--库存信息表create table repertory(input_num int not null,order_num int not null,goods_type varchar(20) ,goods_name varchar(20) not null,goods_cilent varchar(20) not null,goods_num int not null,goods_boxnum int not null,goods_counts int not null,unit varchar(20) not null,input_time date,remake text)gocreate Table T_cost(order_id int not null,freight float not null,porerage float not null,stowage float not null,orderTime date,)alter table t_emp add Constraint fk_emp_dept foreign key( dept_name) references t_dept (dept_name) goalter table t_user add Constraint fk_user_empforeign key( emp_worknum) references t_emp(emp_worknum) goALTER TABLE t_user ADD CONSTRAINT unique_username UNIQUE (user_name)goalter table t_clientorder add Constraint fk_order_clientforeign key( client_num) references t_client(client_num) goinsert into T_dept values('财务部')goinsert into T_dept values('销售部')goinsert into T_dept values('操作管理部')goinsert into T_dept values('客服部')goinsert into T_dept values('质量管理部')
    3.2 系统架构设计本系统采用MVC设计模式:jsp页面为视图层,Entity包里所放的实体类为模型层,而action,service,dao组成控制层。Action存放所有页面请求的操作方法,Service存放业务逻辑接口,Dao存放对底层数据经行操作的接口,Entity 存放实体类。

    3.3 模块设计3.3.1 用户管理类图本系统使用了struts2框架进行设计,将实体类直接封装进Action作为数据模型对数据库进行操作,之后将结果返还给页面。
    员工管理类图

    客户管理类图

    订单管理类图

    3.3.2 用户管理操作流程员工管理时序图

    客户管理时序图

    订单管理时序图

    费用统计管理时序图

    3.3.3 角色管理操作流程
    4 产品实现4.1 系统管理模块实现4.1.1 界面设计系统登陆界面

    系统管理界面

    员工信息管理界面

    客户信息管理界面

    订单信息管理界面

    4.1.2 功能实现本系统运用了Struts2框架进行设计,在Action模块使用模型驱动封装处理数据,详细代码如下:

    Service层主要是将Action与Dao之间关联在一起的中间桥梁,详细代码如下:


    Dao是数据处理层,使用jdbc接口连接sqlserver数据库连接主要代码如下:


    5 产品测试5.1 测试方法与策略本系统采用了单元测试法,这是一种比较传统的测试方法,将每一段功能代码都一一测试,尽量减少代码的bug。单元测试法具有许许多多的多优点,首先因为通过对程序的一步一步编写和测试,如果每一段功能都可以保证其正确性,那么程序本身就不会存在太多问题,即使到了开发后期,我们也可以根据项目的需求,轻轻松松的增加自己所需要的功能,我们也不用担心这会破坏程序的核心,因为经过从程序开始的一步步验证,我们可以确保程序的核心不被破坏;其次,在写单元测试的同时我们也会从使用者的角度去想问题,将用户在实际中所遇到的所有问题都考虑在内一一测试,将每个单元功能分开测试,降低程序的耦合度。
    测试包括以下几个模块:程序功能性测试模块;程序界面测试模块;程序性能测试模块;程序安全性测试模块;程序兼容性测试模块

    程序功能性测试模块

    调试程序中的各个功能,按键,测试每个提交的数据是否合理,页面能否正确跳转数据显示测试,数据能否在界面上正确显示
    程序界面测试模块

    各个HTML页面是否完善,美观,风格一致页面中的重点内容和热点内容是否在页面中突出页面控件是否正常显示页面中文字、图片检查
    程序安全性测试

    登陆功能是否安全,是否保证不被恶意登陆系统数据是否存在溢出故障,导致数据丢失
    程序兼容性测试

    浏览器的兼容性操作系统的兼容性数据库的兼容性

    5.2 系统管理模块测试经过种种测试,系统原本设想的功能已基本实现,功能测试上,未发现异常,界面上并没有发现存在空页面和无效页面,有不正确的出错信息返回,各个提交按钮也能正常工作,页面风格统一,美观,布局合理,重点内容突出,控件正常使用。
    6 结论6.1 毕业设计成果特点此次毕业设计将中小型物流企业比较复杂繁多难以集中的信息,用计算机来管理,解决了中小型企业管理不便的问题,大幅度提高了企业管理效率,而这符合现代企业制度的主流,在当今信息化高度发展的社会中,无论是什么类型的企业,都会采用信息化管理制度,通过计算机互联网管理企业信息,不仅更加容易,且更加安全,不容易丢失。
    6.2 设计成果的实用价值或应用前景此次毕业设计的初心就是为了给中小型物流企业带来方便,而系统中的各个功能也基本满足了中小型物流企业的种种需求,为企业管理带了方便,我相信在以后的企业管理中,无论什么类型的企业都会采用计算机来管理信息,随着以后计算机技术越加发达,系统功能越到,将大大的为人类带来便利,其潜力也将是不可限量的。
    6.3 不足之处或遗留未予解决的问题在设计和实现该系统的过程中,由于系统的功能有限,因此并不能真正的投产于一个企业内部使用,一个项目又开始进行功能需求,到最终的实现是需要非常多的时间的,并且项目的开发过程并不是一个人能完成的,因此此系统只是大概模拟了现代物流的基本内容。但是通过此次毕业设计,我受益匪浅,通过对物流管理系统需求分析,不仅了解到了小型物流企业的基本工作流程,更重要的是真正体会到了软件开发流程中需求分析的重要性。本系统也将会在今后的应用中逐步完善,做到尽善尽美。
    参考文献[1] 刘京华 等. 《Java Web整合开发王者归来》[M]. 清华大学出版社, 2010年01月.
    [2] 萨师煊,王珊.《数据库系统概论》.高等教育出版社,2002年2月.
    [3] 张峋, 杨三成.《关键技术:JSP与JDBC应用详解》[M].中国铁道出版社, 2010年11月.
    [4] 徐玥. 《非平均访存集群中负载平衡零碎的设计与完成》[D]. 哈尔滨工业大学 2014
    [5] 黄大勇.《面向不同优先级网格作业资源重分配成绩的专业技术支持》[D].哈尔滨工业大学 2011
    [6] 刘振英. 《在媒介交融中不时开展 再创辉煌》[J]. 中国播送. 2011(03)
    [7] 刘宴兵,胡文平,杜江. 《基于物联网的网络信息平安体系》[J]. 中兴通讯技术. 2011(01)
    [8] 周鹏飞. 《国际有关SNS网站的研讨综述》[J]. 古代情报. 2010(07)
    [9] 何晓佑  《产品程序设计与方法》中国轻工业出版社,2003
    [10] 吴宏森,宋顺林. 《MVC架构在工程项目管理零碎中的使用》[J]. 微计算机信息. 2006(22)
    [11] 林锐.《软件工程与项目管理解析》[M].北京:电子工业出版社,2003.
    [12] 赵源.《使用JAVA语言编写计算器的设计研究》[J].今日科苑,2015.
    [13] 赵亚娟.计算机软件JAVA编程特点及其技术研究[J].数字技术与应用,2016.
    [14] 贾东.《基于java的文件监控程序设计与实现》[J].信息技术与信息化,2016.
    [15] 衣鹏,阎新芳,吴帅杰.《Java设计模式在数据库编程中的应用研究》[J].信息通信,2014.
    3 评论 25 下载 2020-08-24 12:21:25 下载需要12点积分
  • 基于Python实现的手写数字识别

    一、准备
    测试准备:pycharm,windows自带画图功能,python3.5
    安装python3.5
    将解压的文件夹拖入pycharm中,设置解释器路径为:文件解压路径\ML_num\venv\Scripts\python.exe
    若要调用文件,只要点入文件并点击右上角绿色三角或鼠标右键点 run 相应文件

    二、手写数字识别调用UI.py 得如图界面:

    测试可用windows自带画图功能,刷子选用喷枪,粗细第3个,尽量喷清楚,图片后缀为.png图片大小为400*400像素(其他大小也行只要不小于32*32)如下:

    点击选择文件找到测试文件,选择是否使用备份(默认使用)再点击开始识别, 可选择自动识别或手动识别,手动识别截图时鼠标左键按住拖动即可(数字周围尽量有些许空,若识别错误,很大原因是由于截的图左右空格太小、太大),再输入真实值,结果为:文件名为输入的真实值_最大数字.txt。以下结果为文件名为:6_3.txt 如图:

    三、摄像头务必使用笔记本电脑,数字尽量写得大一些,尽量在光线明亮处拍摄,点击摄像头,如图:

    按q键退出,其他键拍摄,之后点击开始识别与第二部分相同。
    四、介绍
    使用的非标准库:opencv,numpy,pillow
    机器学习技术:KNN邻近
    引用:《机器学习实战》源码并对其中部分内容修改,增加部分操作;部分代码参考cnblog与CSDN

    文件介绍


    data_set:备份文件夹
    images:图片文件
    testDigits:测试数据
    testDigits(测试):正确率测试数据
    trainingDigits:训练数据
    vedio_cut.py:摄像头拍摄
    hand_number.py:截取图片并修改大小为32*32, 转为灰度图
    zero_one.py:将灰度图转为01矩阵并存入testDigits文件夹内
    kNN.py:k值邻近算法识别数字并统计结果, 可以选择使用备份数据训练识别或重新开始
    get_next_num.py:得到指定数据文件数量
    check:测试正确率
    UI.py:使用tkinter库构造界面
    新增im:样例图片
    2 评论 176 下载 2019-04-19 10:14:37 下载需要11点积分
  • 基于java的网上考试系统

    开发一套标准化考试系统,要求通过该系统完成多个科目的标准化考试工作。考试开始时,考生在客户端机器上使用学号和密码登录进入考试系统,如下:

    所有考生的信息(包含学号,姓名和密码)在服务器端的student.cfg文件中保存,该文件的保存格式为:“学号:姓名:密码”,如下:

    登录成功后进入选择科目界面,考生选择一门考试科目,如下:

    所有考试科目的列表在服务器端的subject.cfg文件中保存,该文件不仅保存科目列表,还保存了与科目对应的试题文件的文件名,格式为:“科目名=试题文件名”,如下:

    考生选择考试科目后,程序将从服务器接收该科目的试题,并进入考试主界面,如下:

    每门科目的考试试题保存在服务器端的一个试题文件中,试题文件的格式如下:

    每5行构成一道试题,其中第一行为试题的题干,以下4行为试题的4个选项,并且在正确选项的行首用“<T>”来标示。
    考试完成后考生点击主界面上的“交卷”按钮,程序将自动计算考生的得分,并将得分发送给服务器,保存在服务器的*.sco文件中,每门科目都有一个相应的文件,该文件的格式为:
    “学号:成绩”,如下:

    为完成以上程序,定义以下包及类:

    1. 客户端和服务器端的通信方式
    登录请求
    客户端发送数据:学号、密码服务器端返回的数据:学生对象和当前能提供的考试科目列表
    选择考试科目
    客户端发送数据:科目名服务器端返回的数据:试卷对象
    交卷:
    客户端发送数据:学号,科目,成绩服务器端返回的数据:成功与否的信息
    退出
    2. 服务器端的文件
    若干试题库文件(corejava.exm)
    若干科目的成绩文件
    学生信息的文件

    3. 服务器对文件的访问方式:
    试题库文件:Paper getPaper(String 科目名);
    学生信息的文件:Student getStudent(int id,String passwd);
    成绩文件:addScore(int id,float score,String 科目);
    3 评论 70 下载 2019-05-08 22:06:34 下载需要11点积分
  • 基于java和Sql Server数据库的停车场管理系统

    一、实验内容:实现停车场管理系统,应用于车辆的出、入管理。
    二、功能要求:包括车辆进出管理与系统管理等功能模块,可根据车辆停放时间及收费标准自动收费。用户需要事先办理停车卡并充值,停车卡分优惠卡和普通卡两类。

    车场管理:车辆入场、车辆出场
    信息查询:某时间段的出入场信息,当前在场信息,车辆历史停车记录及收费信息
    信息维护:用户及停车卡信息维护、充值等
    系统管理:车位信息,计费标准等

    系统包含两类用户:管理员用户和普通用户。
    管理员可以使用系统所有功能,普通用户只能查询车辆历史记录、用户信息、停车卡充值,查询计费标准。
    三、实验环境:
    Windows XP
    JDK 1.6
    Eclipse
    SQL Server
    备注:

    在XP平台开发DK(JavaDevelopment Kit)是Sun Microsystems针对Java开发员的产品Eclipse进行前台和程序设计,开发图形用户界面和停车收费功能实施
    SQL建立数据库

    四、需求分析与设计:4.1 需求分析:本软件具有如下主要功能:

    本系统包括两类用户:管理员用户和普通用户。管理员可以使用系统所有功能,普通用户只能查询车辆历史记录、用户信息(只限于个人信息)、查询计费标准、查询当前在场信息、查询出入场信息、当前可用车位信息、口令修改。具体模块划分为如下模块:车场管理模块、信息查询模块、信息维护模块、系统管理模块。
    车场管理模块:(应该分为车辆入场和车辆出场两部分)

    车辆入场功能描述:车辆进入停车场时进行登记,记录入场时间并指定车位。只有具有停车卡的车辆才可进场,没有办理停车卡的车辆,应先办理车卡。如果没有相应车位,不能入场;如果卡中余额低于100元,应先充值后再入场。满足条件的车辆,为其指定车位并记录入场时间。车卡分两种类型普通型和优惠型。车辆出场功能描述:车辆开出停车场时进行登记,记录出场的时间并进行自动收费(从卡上扣除)。根据车辆进场时间,出场时间及收费标准自动计算车主应该缴纳的费用。如果停车时间包含不足一小时的时间,超过30分钟按一小时计算,不足三十分钟不计算。如果卡上余额足够则直接扣除;如果卡上余额不足,则应先充值后再扣除相应费用。
    信息查询模块功能描述:在这个模块里用户可以查询出入场信息、当前在场信息、用户个人信息、用户历史记录、收费标准以及当前可用车位信息
    查询出入场信息功能描述: 查询当前在场信息户可以在这里查询到两种车位的总量及当前可有的车位数量。
    查询用户个人信息功能描述:登录的管理员可以根据卡号和名字查询用户信息。登陆的普通用户只可以查到自己的信息。
    查询用户历史记录功能描述:用户可以输入卡号查询相应卡号的历史记录,包括车位号、开始停车时间、结束停车时间、停车总时间、相应收取的费用。
    收费标准功能描述:用户可以在这里查询不同种类的车位和不同卡的计费标准。
    当前在场信息功能描述:用户可以在这里查询到当前在场的车辆信息,包括卡号,车位号,开始停车时间。
    当前可用车位信息功能描述:在这里用户可以查询当前可用的车位的信息,包括车位号、车位类型。
    信息维护模块在这个模块里用户可以实现用户注册、用户修改及用户充值
    用户注册功能描述:在这里管理员可添加新的用户(普通用户)。
    用户修改管理员在这里可以修改用户。这里会以表的形式显示所有的用户信息,包括用户的停车卡信息维护,充值信息等。管理员点击相应的一行用户信息,这行信息会自动填充到表下的面板里,用户可以在面板里修改用户信息,面板下面有两个按钮,修改、删除,点击相应的按钮可以实现相应的功能。
    用户充值功能描述:用户可以再这里查到自己的余额,并且可以在这里完成充值。
    系统管理模块功能描述:在这个模块里可以修改相应的车位信息计费标准、注册管理员、更改用户口令以及查看系统声明信息。
    管理员注册功能描述:管理员可以在这里添加新的管理员。
    更改口令功能描述:用户可以在这里更该自己的密码。注:操作员只可以修改自己的密码。
    计费标准管理功能描述:管理员可以在这里不同车位类型、不同车卡类型的收费标准。
    关于功能描述:用户可以在这里看到系统声明。

    4.2 界面设计登陆界面

    管理员主界面

    普通用户主界面

    车辆入场界面

    车辆出场界面

    计费标准界面

    当场在场信息界面

    用户历史信息界面

    用户个人信息界面

    普通用户个人信息界面

    出入场信息界面

    当前可用车位信息界面

    用户注册界面

    用户修改界面

    用户充值界面

    管理员注册界面

    更改口令界面

    计费标准管理界面

    关于界面

    五、数据库设计5.1 数据库关系图
    5.2 数据表的结构设计


    用户表:users








    字段名称
    数据类型
    可空
    默认值
    说明


    cardid
    int
    不可

    主键,用户的停车卡号


    name
    Nvarchar(20)
    不可

    用户姓名


    password
    Nvarchar(20)


    用户密码


    cardtype
    Nvarchar(20)


    停车卡类型


    userstype
    Nvarchar(20)


    用户类型


    carid
    int


    用户车牌号


    tel
    int


    用户电话号码


    overage
    int


    用户余额






    车位信息表:sit_infor








    字段名称
    数据类型
    可空
    默认值
    说明


    stationid
    int
    不可

    主键,车位号


    stationtype
    Nvarchar(20)
    不可

    车位类型






    停车收费卡收费表:charger








    字段名称
    数据类型
    可空
    默认值
    说明


    cardtype
    Nvarchar(6)


    车卡类型


    stationtype
    Nvarchar(20)


    车位类型(车卡类型与车位类型一起作为主键)


    charge
    int


    价格






    停车表:park








    字段名称
    数据类型
    可空
    默认值
    说明


    cardid
    int


    车卡号(外键)


    stationid
    int


    车位号(外键)


    parkid
    int

    1,每次增加一
    停车号,主键


    startpark
    datetime


    停车开始时间


    endpark
    datetime


    停车结束时间


    fee
    int


    停车的收费


    sumpark
    int


    停车总时间



    六、关键技术介绍6.1 在其他类中得到当前登录用户对象 实现方法:在LoginFrame类中设置两个静态方法,在其他类中只需要引入LoginFrame类,然后调用他的静态方法即可。方法体如下:
    public static users getUser() { return user; } public static void setUser(users user) { LoginFrame.user = user; }
    6.2 实现用户类型不同,主界面不同的功能 可以定义静态方法disMenu().当用户是普通用户时,调用disMenu()方法即可。具体实现如下
    public void disMenu() { mnuPark.setEnabled(false); mnuSever.setEnabled(false); mnuManZhuCe.setEnabled(false); mnuManCharge.setEnabled(false); } if(user.getUserstype().equals("管理员")) { MdiFrame frame1 = new MdiFrame();//创建一个主窗体 frame1.setVisible(true);//设置其可见 LoginFrame.this.setVisible(false);//设置登录窗体为不显示 } else {//判断用户名是否为null MdiFrame frame = new MdiFrame();//创建一个主窗体 frame.disMenu(); frame.setVisible(true);//设置其可见 LoginFrame.this.setVisible(false);//设置登录窗体为不显示 }
    6.3 怎么得到系统时间 SimpleDateFormat myfmt=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String a4 = myfmt.format(new java.util.Date()).toString();
    6.4 怎么计算时间差值 try { java.util.Date now = myfmt.parse(a3);//a3是系统当前时间(即出场时间) java.util.Date date=myfmt.parse(a7);//a7是入场时间 int l=(int) (now.getTime()-date.getTime());//计算毫秒差值 day=l/(24*60*60*1000);//获取天数 hour=(l/(60*60*1000)-day*24);//获得小时 min=((l/(60*1000))-day*24*60-hour*60);//获得分钟 } catch (Exception e1) { JOptionPane.showMessageDialog(null,"消费计算错误"); } if(min < 30)//如果分钟小于30分钟 a8 = day*24+hour; else //如果分钟大于30分钟 a8 = day*24+hour+1;
    6.5 怎么让布局更优美 使用布局管理器; GridBagLayout,以更改密码界面为例:
    getContentPane().setLayout(new GridBagLayout()); setBounds(234, 129, 285, 223); final JLabel label_5 = new JLabel(); label_5.setText("登 录 名:"); final GridBagConstraints gridBagConstraints_11 = new GridBagConstraints(); gridBagConstraints_11.gridy = 2; gridBagConstraints_11.gridx = 0; getContentPane().add(label_5, gridBagConstraints_11);
    七、系统实现功能结构图
    48 评论 1461 下载 2018-11-19 09:32:08 下载需要13点积分
  • 基于LL1文法的语法分析

    一、目标本次实验的目的是对编译器进行词法分析的过程进行模拟,我选择了在实际中更为通用的自底向上的词法分析器的分析过程,最终产生规约序列。对于LR(0)和LR(1)问题,我的程序对于LR(0)和LR(1)是通用的,因为只要给出合法的parsing table和上下文无关文法, 程序就能进行相应的词法分析,而parsing table和文法都是用户输入文件给出。
    二、内容概述本文档描述了编译原理课程实验中,语法分析器部分的实验内容,实验方案以及结果。
    三、实验环境
    操作系统:win8.1编译器:eclipse使用的工具:github编码格式:utf-8
    四、思路和核心思想根据给出的文法,文法要求是非二义性的、非左递归的上下文无关文法,输入到product的文件中。从文件中读出输入的文法,先通过对输入的文法求每一个产生式中的非终结符的first和follow集合。来构建LL(1)的预测分析表。然后使用预测分析表来进行表格驱动,对于输入的串进行预测分析,使用书上的算法,现在在此处附上这算法,因为比较难打字,我附图:

    五、测试输入与输出:测试输入的文法产生式是书中的例子文法4-28,因为表示空的字符我打不出,就使用了#代替。书中的产生式还中的左边可以有或(|)进行连接,在我的输入中只能分开,当作多个产生式,同时不能有其他字符。对于终结符,只能有一个字母限定,书中的id我使用i代替。由于输入的原因,我把把书中的输入形式做了一下转变,实质上是同一个文法。
    同时,输入串中输入的文件在项目当中,截图如下:

    程序中产生的first和follow,如下,也存在项目中的文件first_follow.txt中:

    产生的预测分析表:

    预测分析过程:

    这些测试的结果都会以文件的形式产生在项目里的文件中。也会打印到控制台上。
    2 评论 93 下载 2018-11-02 16:00:40 下载需要8点积分
  • 基于Android系统手机通讯录管理软件的设计与开发

    摘要谷歌在安卓领域投入了大量精力来开发,使得安卓技术得以广泛推广,现安卓移动平台设备在市场上已经得到大量推广及普及。在Android移动终端操作系统的快速发展,Android的各种手机软件也大量增长。当然,在手机终端中,手机通讯录是手机终端必不可少的基础功能,其质量直接影响着用户对手机使用的体验与感觉。手机通讯管理软件不仅仅只是能够简单添加联系人以及联系方式的功能,而今已发展成为多种形式,丰富了联系人的信息,存储了更多的内容。此课程设计研究的这个项目,主要实现添加联系人的多种联系方式的功能。
    本软件采用Android Studio+Android SDK集成环境,应用程序编程语言采用Java高级语言开发。通过对通讯录中的联系人的管理,来方便用户通讯更加便捷,联系人的数据保存更加安全。在对Android手机通讯管理软件进行详细的系统设计时,对功能进行详细的划分并对其功能做了详细的介绍,列出了一些主要功能流程图。
    关键词:通讯录 Android 数据库 SQLite
    第一章 绪论1.1 项目研究背景经过多年的发展,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。
    Android是一套真正意义上的开放性移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android最大特点在于它是一个开放的体系架构,具有非常好的开发和调试环境,而且还支持各种可扩展的用户体验,Android里面具有非常丰富的图形系统,对多媒体的支持功能和非常强大的浏览器。
    Android平台的开放性等特点既能促进技术的创新,又有助于降低开发成本,还可以使运营商能非常方便地制定特色化的产品。
    1.2 项目研究的目的及意义随着4G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。在Google和Android手机联盟的共同推动下,Android在众多手机操作系统中脱颖而出,受到广大消费者的欢迎。
    手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。根据手机功能使用调查显示,有9成以上的消费者使用手机通讯录功能。随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展。通讯录从无到有,大大丰富了内容,同时结构也发生了革命性变化,而且随着手机的发展,相信更优秀的通讯录会越来越受到社会各层人士的喜爱。
    1.3 系统主要实现内容通过对Android技术的相关研究,了解Android源码实现原理以及过程,从而设计出一款能够使用的手机通讯录。
    这款手机通讯录实现的相关内容如下:

    简洁、实用的操作界面
    联系人的增删改查
    分类的增删改查
    呼叫联系人
    登录、注册、修改密码
    群组的增删改查
    导入导出联系人
    支持模糊查询手机通讯录

    第二章 系统分析2.1 系统可行性分析2.1.1 技术可行性Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java 应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。
    本软件用的是Java开发语言,在Android Studio集成开发环境下,调试容易。当前的计算机硬件配置或则现有安卓手机的硬件配置也完全能满足开发的需求,因此技术上是绝独可行的。
    2.1.2 经济可行性开发该系统所需的相关资料可以通过已存在的相关系统进行调查采集,所需的软件系统、硬件平台等都易于获得,且不需要Android平台机器,用模拟器即可实现开发研究,开发成本低,容易实现,从经济角度来看,该系统可行。
    2.1.3 操作可行性不管是安卓平台的手机,还是计算机,其成本的下降,导致计算机,安卓手机购买成本的降低.这套系统是利用自己的计算机,且使用安卓模拟器,使开发出来的系统有友好的用户界面、操作简单,因此在操作上是可行的。
    2.2 Android通讯录的使用意义该系统针对的主要用户是Android手机用户。Android手机通信管理系统包括以下主要内容:联系人增删改查、呼叫联系人、分类增删改查、多条件搜索、导入导出联系人、修改密码等功能。要设计一个良好的手机通讯录,就必须首先明确该应用环境对系统的要求。
    第三章 系统概要设计3.1 系统总体设计Android手机通讯管理软件主要功能模块包括:联系人增删改查、呼叫联系人、分类增删改查、多条件搜索、导入导出联系人、修改密码等。

    3.2 处理流程设计3.2.1 业务流程图用户首次进入手机通讯管理软件后,会进入用户注册界面,当用户注册成功之后,输入密码即可看到联系人列表界面。联系人列表界面右下方显示增加联系人按钮。上方可以进行联系人的多条件搜索。同时长按某个联系人可实现编辑删除功能。当然点击联系人也可以看到详细信息。界面中显示我的群组列表,打开之后即可进行群组的增删改查功能。点击菜单键,显示通讯录的导入导出功能以及修改密码功能。
    3.2.2 数据增加流程图添加联系人时,数据由用户输入,点击确定按钮,判断数据是否合法(及用户名是否为空),合法则插入到数据库;不合法,提示错误信息,让用户重新输入。流程如图所示:

    3.2.3 数据修改流程图编辑联系人时,点击编辑联系人菜单,输入修改后的数据,点击确定按钮,判断数据是否合法,合法,则更新数据库;不合法,则返回错误信息。 流程如图所示:

    3.2.4 数据删除流程当用户选定一个联系人时,单击删除联系人菜单,提示用户是否删除,点击确定按钮,则从数据库中删除此条记录。数据删除流程如图所示:

    3.3 数据库设计3.3.1 SQLite数据库简介SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低。
    本系统采用的是Android系统自带的SQLite轻型数据库数据库。因此占用资源非常小。
    3.3.3 数据库表结构首先创建数据库,在数据库中创建表用来存储联系人数据,其中包括联系人姓名、手机号、群组ID、地址等联系方式。创建群组表用来保存ID和群组名称等信息。两个表联合配合。表结构如图所示:

    第四章 系统详细设计4.1 联系人浏览模块进入手机通讯管理软件后,看到的第一个界面是联系人列表界面。该列表是由ListView控件生成的,打开数据库(如果数据库不存在则创建数据库,并创建数据表),查找数据库中所有的联系人,并把联系人姓名和移动电话号码以及职位这填充到ListView的adapter中。每一行显示一个联系人的姓名和手机号码,联系人的显示的顺序是根据插入数据库的顺序显示的。点击某个联系人会进入查看联系人界面,可以查看联系人的详细信息,对联系人进行编辑、删除、拨打电话、导入导出通讯录等。

    点击[菜单]按钮时,就会显示主菜单项,其中包括:修改密码、导出数据、导入数据。
    点击添加按钮,会进入添加联系人界面,可以输入联系人相关信息,完成联系人添加功能。点击上方搜索栏目,会进入联系人查找界面,可以进行联系人查找,搜索想要找的联系人。
    点击菜单按钮,打开修改密码、导出通讯录、导出通讯录等功能。

    长按列表的某一行时,会弹出长按菜单,其中包括:拨号、编辑联系人、删除联系人。点击查看联系人菜单会进入查看联系人界面。点击编辑联系人菜单会进入编辑联系人编辑界面。点击删除联系人时,会弹出对话框,询问是否删除联系人,点击确定,则从数据库中删除该联系人。

    4.2 查看联系人模块在联系人浏览界面点击某个联系人,则会跳转到该界面。该界面使用TextView把从数据库中调出的联系人的详细信息显示出来,这里面包括联系人姓名、手机号、地址等详细信息。

    4.3 编辑联系人模块编辑联系人界面使用EditView控件显示并修改联系人的详细信息。联系人的所有信息,处于可编辑状态,手机号和座机号的EditView设定为只能输入数字。修改完信息后点击确定按钮,触发确定按钮点击监听事件,从而对数据库中该联系人的信息进行更新, 然后自动返回联系人浏览界面。点击取消按钮会返回联系人浏览界面。

    4.4 查找联系人模块这里采用的查找方法是SQL模糊查询,可以只输入联系人姓名中的一部分,即可查找到所有包含该部分的联系人,并在ListView中显示出来所有的联系人的姓名和手机号码。可实现查找职位、手机号码、名字等信息。

    4.5 修改密码点击菜单,可以查看该软件的修改密码、导入导出等情况。并可实现全部功能。

    4.6 分类管理点击我的群组界面,可以查看群组并且显示群组。在里面可以对群组进行增删改查操作。
    77 评论 345 下载 2019-01-30 17:27:39 下载需要13点积分
  • 基于JSP和Mysql的城市公交查询系统的设计与实现

    摘 要近年来, Internet推动了以互联网技术为核心的各项工作蓬勃展开,互联网的强大也大大的促进了社会的发展,整个社会信息化进程逐步加快,网络也变成了我们日常活动中越来越重要的组成成分。为了使得我国公交乘客出行及查询有关信息更方便,本文运用JAVA语言技术,Jsp技术,Mysql数据库开发了B/S结构的城市公交查询系统。
    该系统顺应了时代发展且具有以下优点:首先,方便乘客的出行,乘客不用询问站牌工作人员如何倒车,便可到达目的地。其次,乘客在网上就可以查询到公交公司发布的路况信息,以便提早做好换乘准备节约出行时间。最后,本系统可以节约人力资源,以往的站牌附近要安排公交公司的工作人员来帮助不熟悉的乘客,有了公交查询系统提前上网查询便可知道。
    关键词:B/S架构;JAVA;Mysql;JSP
    AbstractIn recent years, Internet promoted the work of Internet technology as the core of the Internet booming, powerful also greatly promoted the development of the society, the information process of the society gradually accelerated, network has become an increasingly important component of our daily activities. In order to make our bus passengers travel and query information more convenient, this paper uses the JAVA language technology, Jsp technology, Mysql database to develop the B/S structure of urban public transport query system.
    The system complies with the development of the times and has the following advantages: first of all, to facilitate passenger travel, passengers do not ask the stop sign, how to reverse the staff, you can reach the destination. Secondly, passengers can inquire about the traffic information issued by the bus company in order to save the travel time. Finally, the system can save human resources, the bus stop near the bus station staff to help passengers who are not familiar with, with a public transport inquiry system, advance access to the Internet will be able to know.
    Key words: B/S architecture; JAVA; Mysql; JSP
    1 绪论1.1 选题背景随着低碳生活的普及,人们更倾向于低碳环保的出行方式,完善公交系统无疑具有重要意义。公交是居民日常生活中最常使用的交通工具之一,伴随着我国经济繁荣和城市人口增长,出行工具的选择也变得越来越重要。政府在公共交通方面的投入正在逐步加大,使得城市内、城乡间的公交系统更加完善,原来的公交线路不断更新,居民们接收到的信息滞后,出行变得很不方便。纸质公交指南时效性低且不方便使用者查询。本系统加入了浏览器查询、自动更新等功能完善系统使居民的出行更加方便快捷。
    1.2 国内外发展状况除了杭州,上海等几个城市的居民可以通过电子站牌了解公交车的行驶情况外,其它城市需要乘公交出行的居民获取公交实时信息几乎是不可能的。我国许多城市都有一些颇具设计感的公交站台,但我们却很难在这里找到我们出行需要的信息。因此,居民想要找到“静态线路信息”或者“动态实时信息”都感到十分困难。
    有了权威的交通信息发布机构才能确保乘客获得信息的时效性,而迄今为止我国大多数城市还没有有关的管理机构和相关法律法规。随着居民对于公共交通出行的需求越来越大,本文基于信息技术和管理理论建立了管理信息系统。从提高居民生活水平的角度看,将计算机管理信息系统应用于我们的日常生活中是时不我待的。所以我的毕业论文选择了公交车查询系统,就因为他是一个较为贴近生活的一个问题,并且如果开发出来,则可以很大的方便乘客查询相关的公交信息,为自己的出行制定良好的乘车计划。
    1.3 选题的目的近年来,我国的城市发展速度之快,道路修缮之完善令很多市民的非常吃惊,城市的范围在不断扩大,随之公交线路的铺设也在随时进行,作为当代的大学生,每学期从学校回到自己的故土,是否发现自己的家乡在经历着一些变化,一时间连自己家乡的方位都有些晕头转向,更何况是那些外地的打工者或是来当地旅游的游客他们未尝不是这样,询问当地的市民看似是一种好办法,但是遇到倒车频繁,路途偏远,也怕是心有余而力不足,所以一个好的,便捷的,用户体验好的公交查询系统甚是重要,想去什么地方把他们输入进去,一目了然,想途径什么地点自己也可随意的查看,也不用因为自己解释不清楚或听得不清楚引起不必要的绕远。我设计的系统不仅包括了站点,公交线路的查询,还包括了公告发布和在线提问功能,让市民实时掌握城市的公交动态,方便他们的出行。
    1.4 研究手段及意义1.4.1 研究方法本研究课题设计的公交查询系统客户端模块,主要工作有:

    亲身体验了解客户需求,进行相关的需求分析
    根据需求分析和设计的本系统的框架
    根据框架结构的设计,制结构图
    编写相关的开发技术文档
    编写代码
    对系统进行单元测试

    1.4.2 技术路线本文涉及的系统基于B/S(Browser/server,浏览器/服务器),该模式采用了多种技术,在所有平台下都能顺畅地运行。
    1.4.3 意义近年来,我国经济发展迅速,城市建设也越来越完善。随着人口的增加,城市交通压力也在不断加大,公共交通与居民的生活息息相关,同时对于经济发展有着不容忽视的影响。虽然公共交通快捷且客运量大,但是公交信息的更新却跟不上公交系统发展壮大的步伐,居民难以获得及时的信息造成耽误出行。因此,创建一个方便的的公交信息查询系统,包含浏览器查询,实现中心控制、自动更新等功能,将极大地提升居民的出行体验。
    2 相关技术简介2.1 Jsp技术介绍JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。 JSP是一种Java servlet,主要用来运行Java web的使用者界面。开发者通过使用HTML代码、XHTML代码、XML元素和嵌入JSP操作编写JSP。JSP技术使用web表单得到用户自定义数据、通过数据库和其他数据库资源,接着动态地建立网页。JSP标签有各种各样的功能,像访问数据库、记载用户采取的信息、造访JavaBeans组件等,不仅如此在各种网页中对信息的传达和共用。
    JSP程序通过Java的编程语言,对动态网页进行封装。根据tags和scriptlets,网页对存在于服务端的资源的应用逻辑的造访也是可以的。JSP将网页逻辑与网页设计和显示分隔开,对可重新利用的基于组件的设计进行支持,更易于对基于Web的应用程序进行开发。
    JSP以及Servlet ,在服务器上运行的,一般将运行后的html文本返送给客户端,仅仅在客户端的浏览器就能显示。先运行调用JSP页面的代码,然后在Web服务器送回的JSP文件的结果中碰到的HTML代码送回到客户端。Java程序段来运行数据库,重定向页面可以插入页面和动态页面的功能需要被新建。运用标记和编程语言技术形成动态生成的网页时,将形成逻辑处理包。
    Java Servlet 是JSP的技术根本,并且很多的Web应用程序的设计都要有Java Servlet和JSP的共同合作。JSP简单易用,完全的面向对象,不仅平台无关性还有安全可靠,这些都是继承了java技术。
    从JSP出世后,很多的企业都设立JSP技术的服务器,像IBM、Oracle、Bea这些企业,也让JSP快速变为商业应用的服务器端语言。JSP和 Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java 2 platform Enterprise Edition)应用体系中的一部分。Servlet与 CGI很相似,它是HTML程序和后台隔离开的。它们的开始原理也差不多,都是服务器接到客户端的指令后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process),而Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(Parent Thread)来实现资源共享,这样就减轻了服务器的负担,所以,Java Servlet可以用来做大规模的应用服务
    JSP技术的优点:

    一次编写,到处运行:除了系统之外,代码无需做任何改动
    系统的多平台支持:一般可以在所有情况下的平台上进行设计,可以放在所有情况下进行发展。相比ASP/.net来说,优点是显而易见的
    强大的可塑性:根据一个小的Jar程序能够对Servlet/JSP进行操作,也能根据不少的服务器进行集群和负载平衡,而且可以根据多个Application处理问题。单个服务器到多个服务器,Java表现了一个创造性的能力
    拥有多元化的工具:Java现有的很多设计方法中许多工具不需要成本,其中大部分均可以在各平台中顺利进行
    支持服务器端组件:web的运行需要强大的服务器支持,因此为了完善系统的可操作性,开发者应当在使用web时加入其它工具,JSP能够利用 JAVA BEANS 组件来展示出各式各样的商务功能
    内部对象表现出:request 用户端请求,这个请求会包括来自GET/POST请求的参数; response网页传回用户端的反应;管理pageContext 网页的属性;session 与请求相关的会话;application servlet正在进行的内容;out 用来输送响应的输出流; config 代码片段配置对象;page JSP网页本身

    2.2 MyEclipse简介MyEclipse是基于Eclipse进行插件合成,最终形成功能强大的开发软件。目前主要用于JAVA,JAVAEE的开发,也可以用于移动应用的开发,其主要特点是功能强大,应用广泛,并且支持很多开源的产品,应用前景非常广发。
    MyEclipse是由Eclipse通过对插件的集成而来,是对IDE的拓展,可以用来开发网页等应用,可以实现程序的开发,调试,发布等,能极大的提高开发效率,能完美支持HTML、STRUTS等,可以说集成后的MyEclipse包含了当前所有主流的开源产品。MyEclpise也经历了很多代的产品,从最开始的到后来的2014版本,2015版本等都说明了它在发展历程中的变化。
    MyEclipse的配置使用也非常智能,不需要使用者懂太多的知识,只需要在自己使用的功能中进行了解即可,在完成项目开发之后,也可以直接通过MyEclipse进行项目部署,可以将网页项目进行选中,直接运行在Tomcat中,也可以将项目打包通过导出功能将项目全部导出,然后将项目发布到tomcat中,通过对配置文件的设置安排项目,之后进行查看。可以说,有了MyEclipse之后,基本就能支持所有的web开发,就能使用快捷的编译工具进行快速的开发,也能在各种各样的服务器上进行代码测试。在其他方面,MyEclispe也有很多的开发前景,比如在云开发领域,在移动端开发领域,在企业级开发领域等等,因此,MyEclipse的应用场景非常的广泛。
    2.3 数据库技术数据库的设计是研究数据库及其应用系统的技术,是数据库在应用领域中主要的研究课题。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效的存储数据,满足各种用户的应用需求(信息要求和处理要求)。一个信息系统的各个部分能否紧密的结合在一起以及如何结合,关键在数据库。因此只有对数据库进行正确的概念设计、合理的逻辑设计以及有效的物理设计才能开发出完善而高效的信息系统。数据库设计是信息系统的开发和建设的重要组成部分。
    2.3.1 数据库的体系结构数据的体系结构分成三级:内部级(Internal),概念级(Conceptual)和外部级(External)。这个三级结构有时也称为“三级模式结构”。

    外部级:最接近用户,是单个用户所能看到的数据特性。单个用户使用的数据视图的描述称为“外模式”
    概念级:涉及到所有用户的数据定义、是全局的数据视图。全局视图的描述称为“概念模式”
    内部级:最接近于物理存储设备,涉及到实际数据存储的结构物理存储数据视图的描述称为“内模式”

    数据库的三级模式结构是数据的三个抽象级别。它把数据的具体组织留给DBMS去做,用户只要抽象地处理数据,而不必关心数据在计算机中的表示和存储,这样就减轻了用户使用系统的负担。
    2.3.2 数据库管理系统(DBMS)数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统。DBMS是数据库系统的核心组成部分。对数据库的一切操作,包括定义、查询、更新及各种控制,都是通过DBMS进行的。
    在不同的计算机系统中,由于缺乏统一的标准,即使同种数据模型的DBMS,它们在用户接口、系统功能方面也常常是不相同的。
    用户对数据库进行操作,是由DBMS把操作从应用程序带到外部级、概念级、再导向内部级,进而操作存储器中的数据。DBMS的主要目标,是使数据作为一种可管理的资源处理。
    DBMS的主要功能为:

    数据库定义功能:DBMS提供数据定义语言(DDL)定义数据库的三级结构,包括外模式、概念模式、内模式及基相互之间的映象,定义数据的完整性、安全控制等约束。因此,在DBMS中应包括DDL的编译程序
    数据库的操纵功能:DBMS提供数据操纵语言(DML)实现对数据库中数据的操作。基本的数据操作分成两类:检索、更新
    数据库的保护功能:数据库中的数据是信息社会的战略资源,对数据的保护是至关重要的大事
    数据库的恢复功能:在数据库被破坏或数据不正确时,系统有能力把数据库恢复到正确的状态
    数据库的并发控制:DBMS的并发控制子系统能防止错误发生,正确处理好多用户、多任务环境下的并发操作
    数据库的完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作
    数据库的安全性控制:防止未经授权的用户蓄谋或无意地存取数据库中的数据,以免数据的泄露、更改或破坏
    数据库的存储管理:把各种DML语句转换成低层的文件系统命令,起到数据的存储、检索和更新的作用
    数据库的维护功能:数据装载程序、备份程序、文件重组织程序、性能监控程序
    数据字典:数据库系统中存放三级结构定义的数据库称为数据字典(DD)。对数据库的操作都要通过访问DD才能实现,通常DD中还存放数据库运行时的统计信息

    2.3.3 Mysql数据库MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。

    MySQL是一种数据库管理系统:数据库是数据的结构化集合。它可以是任何东西,从简单的购物清单到画展,或企业网络中的海量信息。要想将数据添加到数据库,或访问、处理计算机数据库中保存的数据,需要使用数据库管理系统,如MySQL服务器。计算机是处理大量数据的理想工具,因此,数据库管理系统在计算方面扮演着关键的中心角色,或是作为独立的实用工具,或是作为其他应用程序的组成部分
    MySQL是一种关联数据库管理系统:关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL指得是“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言,它是由ANSI/ISO SQL标准定义的。SQL标准自1986年以来不断演化发展,有数种版本。在本手册中,“SQL-92”指得是1992年发布的标准,“SQL:1999” 指得是1999年发布的标准,“SQL:2003” 指得是标准的当前版本。我们采用术语“SQL标准”标示SQL标准的当前版本

    MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的优点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适用于Web站点或者其他应用软件的数据库后端的开发工作。此外,用户可利用许多语言编写访问MySQL数据库的程序。作为开放源代码运动的产物之一,MySQL关系数据库管理系统越来越受到人们的青睐,应用范围也越来越广。速度和易用性使MySQL特别适用于Web站点或应用软件的数据库后端的开发工作。
    该数据库是数据和数据库对象的集合,包括表数据库对象是指(表) ,视图(View ),存储过程(存储过程)和触发(触发)等。
    数据库通过SQL(Structured Query Language)来对数据进行操作和管理,这里包括一些基本的操作如select、delete、insert、update语句。ADO ( ActiveX数据对象)是微软的数据库应用程序开发和数据库访问技术。数据库访问接口,来自不同数据源的数据。 ADO封装了很多的程序中使用的OLE DB访问接口的COM接口,它是技术的高级别访问。在数据库管理系统和接口如图2-1所示的原则。 MySQL是一个小型关系型数据库管理系统,它的快速,多线程,多用户。可以与网页文件一起方便地放在网站的目录中的MySQL数据库文件,正是由于此类特点,网站开发的数据库支持技术通常采用MySQL数据库。使用图形化的管理工具的数据库管理。
    JSP MyAdmin是一个用JSP编写的、基于Web的、跨平台的MySQL管理程序,支持简体中文,使用Web浏览器作为管理界面。通过JSPMyAdmin可以进行绝大部分的MySQL操作,包括对数据库级操作,表级操作,以及数据管理等。

    2.3.4 MySQL特点特性
    可以处理拥有上千万条记录的大型数据
    支持常见的SQL语句规范
    可移植行高,安装简单小巧
    良好的运行效率,有丰富信息的网络支持
    调试、管理,优化简单(相对其他大型数据库)
    支持多种操作系统,这意味着在一个操作系统中实现的应用可以很方便地移植到其他的操作系统下
    MySQL的核心采用完全的多线程编程
    算法优化查询SQL,切实提高搜索速度

    2.3.5 MySQL数据库应用环境相对于其他主要数据库如Oracle,DB2,SQL Server,MySQL有自己的缺点,如,如有限MySQL集群,是一个相对贫穷的效率,但它并没有降低它的声誉。一般的个人消费者和中小型企业,非常的适用MySQL数据库,不仅因为其实一个开源的软件而且体积小、速度快、总体拥有成本低,这也是使用者考虑的范畴之一。
    目前,互联网的结构来最流行的网站上的LAMP(Linux操作系统,Apache+ MySQL的+ PHP)使用的操作系统,如Linux操作系统,Apache Web服务器,服务器端脚本解释器的MySQL数据库, PHP等四个免费软件或开源软件,因为,可持续和可以创建一个免费的网站系统(劳动力成本),所以你的花费不大。
    2.4 JAVA概述Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。面向对象主要有四大特性:封装、抽象、继承和多态。

    封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属性,同时也具有eat(),sleep()等行为,我们在行为中实现一定的功能,也可操作属性,这是面向对象的封装特性
    抽象:抽象就是将一类实体的共同特性抽象出来,封装在一个抽象类中,所以抽象在面向对象语言是由抽象类来体现的。比如鸟就是一个抽象实体,因为抽象实体并不是一个真正的对象,它的属性还不能完全描述一个对象,所以在语言中体现为抽象类不能实例化
    继承:继承就像是我们现实生活中的父子关系,儿子可以遗传父亲的一些特性,在面向对象语言中,就是一个类可以继承另一个类的一些特性,从而可以代码重用,其实继承体现的是is-a关系,父类同子类在本质上还是一类实体
    多态:多态就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为,多态可为程序提供更好的可扩展性,同样也可以代码重用

    2.5 J2EE技术J2EE 技术,即Java 2平台企业版(Java 2 Platform Enterprise Edition),是一种B/S模式的体系结构,是利用 Java技术简化企业应用系统开发、管理和部署等复杂问题的一套完整的体系结构。该技术由SUN公司推出,基于Java 2平台,它继承了Java语言方便、灵活、跨平台等优势,还提供了对EJB(Enterprise Java Bean)、Java Servlets、JSP(Java Server Pagers)、XML 、API等技术的支持,从而即降低了开发多层应用系统的难度和复杂性,又提供了对现有应用系统的强大支持。
    J2EE技术一般分为四个层级:客户层、WEB表示层、业务逻辑层、数据层(EIS)。如下图2-2所示。


    客户层:可以包括瘦客户端、胖客户端,用户可以与该层进行交互作用,是系统的用户界面,可以呈现出适当的视图,收集查询,显示最终结果,是用户在本地所使用的最后的模型成品
    Web表示层:接收客户层组件的要求,处理请求,然后将请求路由到业务层的适当组件;接受业务层传來的结果,计算一个适当的视图,然后将视图路由到对应客户端
    业务逻辑层:这一层由若干运行在EJB容器下的EJB组件和应用服务器组成。EJB封装了业务逻辑,应用服务器提供了JDBC技术,来访问数据库
    数据层(EIS): 将前端业务逻辑层的组件与后端数据库层连接起来,收集好的信息放在该层,供用户访问

    Web表示层和业务逻辑层是给 J2EE 发布工作任务的层次,主要是通过服务器完成工作。这两层是 J2EE 的核心层次。
    2.6 B/S结构B/S框架是目前被广泛采用的一种先进的框架结构,它是一种基于互联网的程序架构。当前的使用已经非常广泛,突破了传统的C/S结构的模式,给程序开发的模式带来新的技术革命。它是随着互联网技术的不断发展而发展起来的。随着互联网技术的不断发展,各种信息网站已经不能单独在一台电脑上使用和运行了,所以基于互联网的模式就逐步的发展起来了,并且得到了大规模的应用。
    B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易。
    B/S架构不需要在任何客户端来进行进行程序的部署,使用这样的程序结构来使用开发好的系统是利用浏览器来使用的,就是把开发好的程序配置到一台远程服务器上,在任何可以访问这台服务器的客户端电脑上都可以对程序进行操作和使用,这样的方式给使用者带来了极大的便捷。这样的结构提高了程序的运行效率,打破了地域的限制,降低了程序的使用成本。
    对于我的城市公交查询系统,我们可以把系统配置在远程的服务器上,在得到访问权限之后,只要能够上网就可以使用和访问该系统并进行相关的操作,这样的一种先进模式我们之后只需要对服务器上的程序进行维护即可保证程序的正常使用,大大的提高了工作效率,降低了维护的成本。
    C/S与B/S 区别:

    硬件环境不同:B/S 建立在广域网之上的,不必是专门的网络硬件环境,例如电话上网,租用设备,信息自己管理。有比C/S更强的适应范围,一般只要有操作系统和浏览器就行
    对安全要求不同:C/S 一般面向相对固定的用户群,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S 结构适宜。可以通过B/S发布部分可公开信息。 B/S 建立在广域网之上,对安全的控制能力相对弱,可能面向不可知的用户
    对程序架构不同:C/S 程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。B/S对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上。比C/S有更高的要求 B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk2000,Exchange2000等,全面支持网络的构件搭建的系统.SUN和IBM推的JavaBean构件技术等,使 B/S更加成熟
    软件重用不同:C/S 程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好。B/S 面对的多重结构,要求构件相对独立的功能,能够相对较好的重用,就如买来的餐桌可以再利用,而不是做在墙上的石头桌子
    系统维护不同:C/S 程序由于整体性,必须整体考察,处理出现的问题以及系统升级。升级难,可能要再做一个全新的系统。B/S 构件组成,方面构件个别的更换,实现系统的无缝升级。系统维护开销减到最小,用户从网上自己下载安装就可以实现升级
    处理问题不同:C/S 程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关,应该都是相同的系统。B/S 建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的. 与操作系统平台关系最小
    用户接口不同:C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高。B/S 建立在浏览器上,有更加丰富和生动的表现方式与用户交流。并且大部分难度减低,减低开发成本
    信息流不同:C/S 程序一般是典型的中央集权的机械式处理,交互性相对低

    B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化,更像交易中心。
    2.7 Tomcat服务器Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP[15]程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 服务器部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 服务器时,它实际上作为一个与Apache 独立的进程单独运行的。
    当配置正确时,Apache 为HTML页面服务,而Tomcat 服务器实际上运行JSP 页面和Servlet容器。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat服务器的默认模式。不过,Tomcat服务器处理静态HTML的能力不如Apache服务器。目前Tomcat服务器最新版本为8.0.0。
    Tomcat 服务器运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能。因此利用Tomcat服务器作为集群服务器管理系统的Web应用服务器。
    2.8 Web技术网络对人类生活的影响是革命性的。它改变了人们传统的生活方式,有了网络人们可以从众多的信息中搜索,然后找到自己想要的部分;无论何时何地人们都可以通过网络与朋友取得联系,通过网络可以坐在家里就能够认识来自世界各地的陌生人,还可以登陆网上银行或在网上购物,足不出户就可以货比三家。
    网络的快捷是大家有目共睹的,只要几秒种的时间就可以把一封电子邮件发送到大洋彼岸。可以让处在地球上不同角落的人在同一时间收到同一条讯息,这种传递信息的方式可以让消息的传送者与接收者之间能够及时进行互动,快捷的信息交流的方式服务了全人类。
    网络是非常自由的,在网络上人人都是平等的,无论是什么身份什么地位的人都有权力发表自己的观点和看法,做自己想做的事情,不必有所顾忌,不用在乎对方的职位、年龄。
    创新性是网络的另一特性。每一项技术的发展都离不开创新,网络技术的发展也是如此。不断创新是网络之所以始终保持旺盛的生命力的根本,这种创新性也让我们不断地接收新的观念,学习新的技术,从而引导我们更好地去发展我们社会。
    Web技术提供了下面的优点:

    一个提供了很好的用户体验,让用户能很容易地完成任务,并利用了设备本地的一些性能
    一个web应用提供了丰富的视觉体验,又不会分散人的注意力;它注重美学,使用和本地应用一样的设计模式,又不失易用性
    一个web应用非常注重用户的交互、参与和完成任务,而不是让他们仅仅浏览网页。应用程序是自包含的(self-contained),也即用户不用导航到其他站点或者应用来完成任务

    3 系统需求分析3.1 需求分析软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。通过对应问题及其环境的理解与分析,为问题涉及的信息、功能及系统行为建立模型,将用户需求精确化、完全化,最终形成需求规格说明,这一系列的活动即构成软件开发生命周期的需求分析阶段。
    需求分析是介于系统分析和软件设计阶段之间的桥梁。一方面,需求分析以系统规格说明和项目规划作为分析活动的基本出发点,并从软件角度对它们进行检查与调整;另一方面,需求规格说明又是软件设计、实现、测试直至维护的主要基础。良好的分析活动有助于避免或尽早剔除早期错误,从而提高软件生产率,降低开发成本,改进软件质量。
    3.1.1 设计的原则
    可用性原则:开发此系统本着以方便乘客查询准确的公交信息和方便用户对公交系统合理安排调度为原则
    可靠性原则:必须为管理员和用户提供安全的服务,尤其是要保证从 Internet 上可以访问到的后台用户管理,公交信息管理等功能的安全性
    友好性原则:使城市公交信息查询系统的操作上要求简单方便,便于用户和管理员掌握
    可维护性原则:能够对用户提出的相关的需求对该软件进行相关的修改和维护

    3.1.2 系统设计目标
    分析国内外公共交通建设及公交查询的研究现状和特点,简述学者在公交网络路径算法研究的发展历程
    分析系统的需求。研究乘客出行的心理和行为,包括乘客获取公交信息的 途径、关注的信息、出行的考虑因素等,从用户角度分析得到系统需要完成的目标 和功能
    设计系统的总体框架。介绍系统的开发环境和流程,从总体上设计系统的 功能,根据系统功能划分子模块,并详述每部分需要完成的功能,设计数据库
    查找了解现有公交查询系统的网络路径最优算法。分析城市的公交线路特点,通过对地理公交网络的抽象,建立了公交网络的路径模型,并在此模型基础上,探讨了公交网络的最优路径算法
    详述系统的设计与实现过程。对系统各模块的具体实现和结果给出了清晰的说明,以拟定的路线为实验数据,给出了查询的结果分析
    总结了查询系统的特点以及一些不足之处,并对系统的改进作了展望

    3.2 系统可行性分析可行性分析包括现有的条件和解决的问题,研究方法的分析,采用的技术路线,实验方案的可行性。现有的条件是:对城市公交查询系统的研究和体会,本人计算机完备的软硬件,对文献资料的准备。要解决的问题是实现页面的设计,数据库的建立,数据库连接和创造,每一个表的文件上传功能。
    3.2.1 经济可行性分析由于本系统属于小规模管理使用的系统,整个系统比较小,因此开发成本不是特别大。本人独立完成了整个开发过程,实现全部的开发任务只需要一台PC机和上述的各种软件。由于PC机是我原有的,而且无需专门升级硬件;而在网上又可以免费下载各种软件,因此,整个开发成本较小,这也为我们提供了非常大的方便,可以进一步完善网站。在使用成本上,连接国际互联网上的计算机,用户只需要拥有一台能够了,在世界的任何一个角落使用网站所有功能和服务只需要通过注册就行了。并且没有很高的要求计算机的硬件,软件方面也没有别的要求,访问与使用具有广泛性。因此,从经济可行性分析来看,这个系统体现了经济实惠,但是功能强大的特点。
    3.2.2 技术可行性分析本课题使用的是Java技术,开发平台选用MyEclipse,MyEclipse有这完整配备的功能,便于初学者使用还有代码提示,让我使用更加得心应手。在决定好编程框架后,再说用Java语言编码的优点:效率高、可重用性强、代码量少等。同时,使用的数据库是MySQL,开源的MySQL增添了可视化和稳定化的优点,而且安全方面也做得很好,更别说它的强大的保存数据功能以及查询数据功能。
    3.3 用户需求要设计一个良好的公交查询系统,就必须首先明确该应用环境对系统的要求。公交查询系统的应用背景为:方便市民搭乘公交车出行。所以乘客可以通过对车站站点查询、公交线路查询、站-站查询三种查询形式。同时设有管理员管理界面,负责添加、修改、删除指定的公交线路信息,为了更好的适应公交查询系统的实时性,使本系统更加完善,能更好的为用户所利用,我觉得还设计了在线提问和网站发布公告功能,在线提问能很好,很快的知道市民对公交查询系统的意见和一些对线路上不明确的提问,而网站发布功能则能更好的帮助政府和公交公司发布新闻和紧急情况,方便市民的知晓。因此,该系统需满足以下几方面需求:

    查询功能:系统需要提供几种不同方式的查询手段,包括根据公交线路、日常站点、和任意两个站点查询乘车路线。其次,采用算法查找任意两个站点之间的乘车路线。具体功能如下所述:

    根据公交站点进行相应的信息查询根据公交线路进行相应的信息查询通过选择任意两个站点,完成两站点之间最短乘车路线查询
    用户管理功能:主要是删除用户信息和修改用户基本信息

    后台车次管理功能主要包含添加车次和站点功能、更新车次和站点功能、删除车次和站点功能,这样做到系统实时更新,为用户查询提供更为准确的信息。具体如下:

    完成车次和站点添加功能
    完成车次和站点更新功能
    完成车次和站点删除功能
    用户登录验证功能
    用户注册信息功能
    用户注销功能
    删除用户信息功能
    在线提问功能:在线提问主要包括用户对公交线路疑惑的问题发布,旨在让市民和政府和共同为提出疑问的市民进行解决和讨论
    网站公告发布功能:进行一些实时新闻的发布,包括线路的绕行,公交车价格的调整,以及一些实时的路况信息,均可通过此来查询,旨在为用户提供一个实时的,便捷的公交插叙系统

    3.4 系统功能需求概述需求分析就是分析用户的需要与要求。如果需要评估的结果准确地反映用户的实际需求,这将直接影响到方案设计的整个阶段,而且对系统的使用产生影响。着眼于需求评估是完成调查,收集和研究,并可能受到影响的数据管理和安全信息的需求的过程。一般使用者都相对缺少相关的计算机方面的知识,并且可以确定计算机是否可以为自己做什么,不能做什么,所以无法非常准确的去表达自己的需求,但是他们是最终的用户,他们的需求才是最终的需求,但是技术人员缺少用户的专业方面的知识,不是很容易理解到用户的真正需求,有时候可能还会误解到用户的需求;新的硬件和软件技术的出现也会让系统的业务需求得打变化。所以技术人员必须要使用一些得到的方法来保证可以与用户不断的交流这样才可以确定用户最终的需求。通过与用户不断深入地进行交流,了解到目前系统存在的主要问题。
    需要研究是从用户分析和细化的信息,在功能和性能上有描述。它是软件开发过程中的第一阶段的一部分,主要任务是要了解你需要什么,什么应做的工作,以确定系统的,因此在目标系统提出完整,准确,清晰,具体的要求,并表示以书面形式唤醒。
    软件的用户界面是与该对象最直接的接触,包括是否允许用户简单,方便使用,该请求的响应时间,对整体的用户感受有很大落差。
    要设计一个良好的公交查询系统,就必须首先明确该应用环境对系统的要求。公交查询系统的应用背景为:方便市民搭乘公交车出行;手动(目前)、自动(将来)、及时更新查询数据。因此,该系统需满足以下几方面需求:

    查询功能:系统需要提供几种不同方式的查询手段,以实现灵活方便地管理整个系统
    数据的更新修改

    更新:系统允许管理员级别的用户对数据进行更新、修改并且存盘操作编辑:系统允许管理员级别的用户对数据进行编辑、删除的操作,保证现库的真实性与实时性

    系统采用B/S模式。整个系统最关键的就是数据库系统,一个强大的数据库可以支持完善一个优秀的软件设计,通过软件系统与数据库系统的连接来实现通过软件界面观察和处理操作数据。
    3.5 运行环境本系统是一个WEb版的应用程序,需要在服务器上部署中间件Tomcat、MySQL数据库,其他的客户端通过网络进行访问该服务器即可。

    开发硬件平台

    CPU:酷睿双核 3.2GHZ内存:4G以上硬盘:500GB
    服务器端硬件平台

    服务器参考配置:Intel Xeon Quad Core E5530 80W 2.40GHz/5.8GT/8MB Cache, 2x2GB DDR3-1066MHz, 2.5in HS 146GB SAS,HS 675W PSU, ServeRAID MR10i(RAID 5), 2*Giga Ethernet,Light Path, CD-RW/DVD Combo, 1U,3 Years Onsite Next Business Day. 146GB 10K 6Gbps SAS 2.5” SFF Slim-HS HDD x3550M2/x3650M2/HS22
    开发软件平台

    操作系统:Window 8 或Win 7均可数据库:Mysql

    4 系统概要设计4.1 概要设计的概论软件概要设计的核心内容就是依据需求规格或规格定义,合理、有效地实现产品规格中定义的各项需求。他注重框架设计、总体结构设计、数据库设计、接口设计、网络环境设计等。概要设计是将产品分割成一些可以独立设计和实现的部分,保证系统的各个部分可以和谐的工作。概要设计的原则包括:模块化和分层细化、模块独立和信息隐蔽。
    4.2 架构设计系统采用B/S模式架构。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix 、SQL Server或 MySQL等数据库。浏览器与同数据库进行数据交互,可以通过Web Server实现 。
    我们的系统使用的应用程序开发模型的B / S结构的三个阶段。目前,互联网应用架构,事务处理分为三个层次,即Web浏览器的互联网服务器数据库服务器。在这种架构中,通过Web浏览器业务表现是容易执行,用户通过Web浏览器提交表单时,将信息提供给消费需求的Internet服务器,Internet服务器,所需的分析查询,数据库服务器,数据库服务器执行,数据库服务器的查询结果返回给使用标准的HTML语言返回给Web浏览器的Internet服务器,Internet服务器。
    4.3 系统功能结构图及分析4.3.1 系统功能结构图系统功能结构图如图4-1所示:

    4.3.2 系统基本功能系统功能的划分方式可以分成很多种类,但是我按照界面流程将它分为了两大模块,第一个模块为前台查询模块。前台查询包括:站点查询,公交线路查询,站-站的查询,在线提问,网站公告。第二个模块为后台管理模块,后台管理模块包括:用户管理、线路维护、公告管理、提问管理。下面本节主要对各个基本的功能进行一个简要的介绍。
    站点查询
    站点查询是本系统的主要功能之一,为用户倒车提供前提条件,用户可以根据自己所到的站点,查询本站所经过的公交线路,从而完成换乘,前往自己的目的地,进入系统首页,在站点查询的对话框内输入自己要查询的地点,接着会转入到另一页面,这个页面包含了经过这一站点的所有公交线路,可点击查看,了解自己需换成的公交车的车号,完成换乘。
    公交线路查询
    公交线路查询是不系统不可缺少的功能之一,用户可根据自己了解到的公交线路名称,查询该线路途经的站点,事先了解好自己所要经过的站点,提前做好下车准备,防止自己下错站,进入功能页面,在公交线路的对话框里输入所要乘坐的公交线路名称,之后会出现匹配的公交线路,点击查看,了解自己的所经的站点信息。
    站—站的查询
    此功能是整个系统的核心,也是最便捷的公交查询方法,只要用户输入自己的位置,以及所要到的位置,就会出现公交线路名称,途径站,以及所要换乘的下一班车,无需自己查看,系统自己就会给成乘车意见。进入页面输入自己的起始站,然后在第二个对话框输入自己要到达的站点,系统将显示出换乘的路线,这个功能十分的便利,深受广大市民的喜欢。
    在线提问
    在线提问功能是本系统的辅助功能。用户可根据自己对公交线路的不明确,向广大的市民发出提问,也可以抱怨本系统的不完善的地方供系统的设计者进行修改,完善系统的功能。
    网站公告
    网站公告功能也是本系统的辅助功能,用户可以点击此模块,查看网站管理员发布的公交信息,包括一些公交价格的调整,以及道路的施工导致的公交线路的绕行都可以在上面发表。
    登录功能
    登录功能是一个系统的重要组成部分,也是一个系统重要的门户功能,登录功能主要实现了使用者对系统的登录,在本文所设计的系统中,登录主要分成了两种登录身份:一般用户登录和管理员登录。两种身份登陆,能细分系统的功能模块,实现更加方便的操作和管理。
    用户管理
    用户管理是一个系统的重要功能之一,对用户的管理可以实现对系统使用者的了解和查看,能让使用者更加方便的使用本系统,用户的种类分为多种,本文主要体现在一般用户和管理者两种用户上面,可以对用户的信息进行添加修改,也可以删除和禁用用户。
    线路维护
    线路维护是对此系统功能的最大的保障,一个系统的基本功能是否可以实现全靠此功能维护,线路维护功能可对现有公交线路进行修改和删除操作,也可添加新的公交线路,这部分属于管理员用户的功能。
    公告管理
    公告管理是对前面所说的公告发布的一种监管,管理员用户可对已经发布的公告就行修改和删除,也可对新的公告进行添加,旨在为用户提供一个实时的公交线路查询的体验,方便乘客出行。
    提问管理
    提问管理是系统管理员对在线提问内市民发布的问题进行答复的功能,这个功能是系统管理员与市民进行交流的一个模块,管理员不仅能回答市民的问题,也可以发布一些问题征求市民的意见。
    4.4 系统用例图4.4.1 UML用例图简介用例图用来确定需求的范围,这些需求是设计开发的依据。用例图将系统看作黑盒,从外部执行者的角度来理解系统。
    用例图展示了用例之间以及同用例参与者之间是怎样相互联系的。用例图用于对系统、子系统或类的行为进行可视化,使用户能够理解如何使用这些元素,并使开发者能够实现这些元素。
    下面简要介绍一下用例图中的组成元素:

    角色(Actor)是与系统中的用例交互的一些实体,在实际情况中,角色可以是人,也可以是其他系统或者硬件设备。在画用例图的过程中,角色往往是第一个被确定的,因为系统或者用例在开始时是模糊的,但是参与系统的角色是最容易明晰的。有了角色之后,根据角色与系统的交互,以及角色要求的功能,可以进一步确定系统和用例
    用例(Use case)指的是系统的功能,它是系统某个功能的所有执行动作的集合。在UML图示中它是一个椭圆,但是具体分析用例的时候需要给出这个用例的所有执行动作的步骤
    连接(Assocation)是角色与用例的连接,表达此角色可以初始化此用例
    注释(Note)可以添加到任何地方,对用例图的不同部分加以说明
    泛化(Generalization)在面向对象的技术中无处不在,它的另一个名字也许更为著名,就是“继承”

    4.4.2 系统用例图系统总用例图如图4-2所示:

    此用例图给出了系统所有用户的操作用例的框架,包括乘客用户和后台管理员用户,乘客用户的操作登陆浏览器,进入查询页面,选择查询方式,在线提问,以及查看发布的公告等功能,而后台管理员则可进行用户管理,线路管理及公告发布等功能,根据此用例图一目了然一般用户和管理员用户的职责。
    后台管理系统用例图如图4-3所示:

    后台管理用户包括的工作有:公交线路管理、公告发布管理、用户管理。公交线路管理包括对所用公交线路的进行的增加还有删除操作的功能。公告发布管理包括对公告的增加和删除操作,用户管理就是对所有使用该系统的管理员用户进行的管理,包括增加用户和删除用户。
    4.5 技术架构所使用的架构是系统建设的关键,传统c/s架构,访问和操作已经不能满足大量用户需求,目前网络系统应用的主流是b/s,它基于浏览器的架构,可以交给服务器端来处理大量的数据处理工作,只用通过普通IE浏览器的客户端,还可以访问系统,操作起来方便快捷,而且利于更新和维护系统,在该方面具有优势的是java语言。
    系统三层架构如图4-4所示:

    4.6 数据库结构设计数据库设计( Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。
    4.6.1 数据库设计的原则数据库的结构分析在系统开发前的设计中占有很重要的位置,一个好的系统离不开一个层次清晰、功能完整的后台数据库结构。
    在设计数据库时,应尽量分离各个实体和表,一个实体对应一个表;同时,应明确各实体间的关联,明确各实体间的属性,以便确定它的字段。总之,在设计数据库时,应注意各表间的独立性和关联性,这是一个好的数据库结构首先要具备的条件。下面给出了数据库设计中的几点要求:

    规范命名:所有的库名、表名、域名必须遵循统一的命名规则,并进行必要说明,以方便设计、维护、查询
    控制字段的引用:在设计时,可以选择适当的数据库设计管理工具,以方便开发人员的分布式设计和数据小组的集中审核管理。采用统一的命名规则,如果设计的字段已经存在,可直接引用;否则,应重新设计
    库表重复控制:在设计过程中,如果发现大部分字段已经存在,开发人员应怀疑所设计的库表是否已经存在。通过对字段所在的库表及相应设计人员的查询,可确认库表是否确实重复
    并发控制:设计中应进行并发控制,即对于同一个库表,在同一时间只有一个人有控制权,其他人只能进行查询

    4.6.2 数据库结构分析根据系统功能的要求,本系统管理和维护的数据元素(Entity 实体)有:系统用户、普通乘客用户、公交线路、公告发布,在线提问,提问评论。

    系统用户实体包含这样一些基本属性:系统用户的ID、登录账户、密码、姓名、联系电话、系统用户的状态。其中,系统用户的ID是用户的唯一标志。系统用户能够实现系统的登录,完成对后台公交线路的管理,包括对线路的添加和删除操作,还有对所有用户的管理,对公告发布的管理
    普通乘客用户可以直接点击主页上的公交信息查询按钮进入查询功能:包括两个站点之间的查询、根据公交线路进行查询、根据站点进行查询。还可以进行公告的查看和在线提问和评论
    公交线路的基本属性有:公交线路id,公交线路名称,公交线路所经站点,公交线路开始时间,以及公交线路终止时间
    公告发布的基本属性:公告id,公告的正文以及公告发布的标题
    在线提问的基本属性:问题id,问题的描述,问题的状态,问题发布的时间,问题的标题,问题发布者id

    4.6.3 数据库概念模型现今应用的最广泛的数据库是关系型数据库。因为它是一个面向对象的系统设计,当然,数据库的设计,必须是面向对象的。现在应该怎么考虑对类进行持久性操作,即对象类是怎样映射到关系数据库的二维表中的。现今,像PowerDesigner、Rose 等都可以采用数据库建模工具来实现。
    用户的信息实体图如图4-6:

    公交线路实体图如图4-7:

    公交公告发布实体图如图4-8:

    公交在线提问实体图如图4-9:

    4.6.4 部分数据库数据表字段设计在物理结构设计阶段,首先应该分两步走:

    一是,在关系数据库中,确定数据库的物理结构,主要是指存取方法和存储结构。时间和空间效率是对物理结构的评价
    二是,要选取存取方法,并且是正确的关系模式,存取索引方法、聚簇存取、HASH存取方法等都是常用的方法

    依据以上规范数据库的部分表设计见下页:
    用户表如表4-1所示:



    编号
    字段名称
    数据类型
    字段大小
    说明




    1
    userid
    char
    11
    用户id


    2
    password
    varchar
    20
    密码


    3
    phone
    varchar
    15
    用户联系电话


    4
    ralname
    varchar
    30
    用户姓名


    5
    state
    varchar
    2
    用户状态


    6
    username
    verchar
    20
    用户账号


    7
    usertype
    verchar
    20
    用户的类型



    公交线路信息表如表4-2所示:



    编号
    字段名称
    数据类型
    字段大小
    说明




    1
    bid
    char
    11
    公交线路id


    2
    bname
    varchar
    30
    公交线路名称


    3
    buspath
    Longtext

    公交线路站点


    4
    endDate
    varchar
    30
    公交线路起始时间


    5
    startDate
    varchar
    30
    公交线路终止时间



    公交系统公告发布信息表如表4-3所示:



    编号
    字段名称
    数据类型
    字段大小
    说明




    1
    pid
    char
    11
    公告发布id


    2
    content
    varchar
    255
    公告发布正文


    3
    title
    varchar
    30
    公告发布标题



    公交系统在线提问信息表如表4-4所示:



    编号
    字段名称
    数据类型
    字段大小
    说明




    1
    talkid
    char
    11
    在线提问id


    2
    talkcontent
    varchar
    255
    在线提问内容描述


    3
    talktime
    varchar
    30
    在线提问的时间


    4
    talktitle
    varchar
    30
    在线提问的标题


    5
    talkuserid
    char
    11
    在线提问的用户id



    5 系统详细设计详细设计是将解决问题的办法进行具体化。详细设计主要是针对程序开发部分来说的,但这个阶段是不真的编写程序的,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的代码。
    详细设计是将概要设计的框架内容具体化,明细化,将概要设计转化为可以操作的软件模型。在实际项目进行过程中,这个过程可以省略,主要是视项目的具体情况和项目要求而定,可以有详细设计,也可以直接按照概要设计进行编码。这个过程主要是保证编码的顺利进行,可以预先扫清编码过程中的障碍,提高代码的质量和编码的效率。详细设计的结果决定了最终的程序代码的质量。详细设计不仅仅要逻辑上正确的实现模块的功能,更重要的是设计出的出处理过程应该进可能简明易懂。
    5.1 系统数据库连接配置<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/newspubs"> </property> <property name="username" value="root"></property> <property name="password" value="123456"></property></bean>
    5.2 系统流程图的分析设计5.2.1 用户登录流程图用户登录流程图如图5-1所示:

    进入用户登录界面,首先输入用户名和密码,点击登录按钮,后台就行用户名和密码的匹配环节,如若俩个都正确及进入该用户界面,倘若有一个不对则登录失败,系统会提示用户重新输入。
    5.2.2 会员注册流程图会员注册的流程图如图5-2所示:

    用户注册进入注册页面,注册内容有,账号,密码,姓名以及手机号,当将这些信息输入之后,后台数据库会比对用户输入的信息是否有无注册,假如已经注册,系统则会提示用户这个信息已经注册过,需要重新输入,假如没有比对成功,则成功建立相应的账户,并在数据库中得以保存。
    5.3 系统登陆模块实现用户系统主要分为俩大类:一类是一般用户,一类是管理员用户。
    由于系统功能的特殊性,前台使用者不用登陆就可以实现公交查询的功能。
    第一部分主要是一般用户,一般用户可以随意注册,注册的信息主要包括:用户的账号,用户的密码,用户的信息,还有用户的电话这四大部分,注册的信息会同数据库中已存在的信息进行对比,查看是否重复,如果重复则重新输入。注册成功就可进行一般用户的登录,比对用户账号和密码是否正确,若正确登录成功,反之重新提醒用户进行登录。
    一般用户登录界面如图5-3所示:

    第二部分为管理员用户登录,因为管理员用户的登录界面不能存在注册按钮,所有管理员用户的信息必须从数据库中直接录入。
    实现的过程主要有几个步骤,进入首页后点击右上角的进入后台按钮,将会看到图5-4的登录界面,按照要求输入管理员用户的账号密码,首先对管理员输入的信息进行保存然后利用程序从数据库中进行检索看是不是有管理员输入的信息在数据库中是否存在如果存在就返回正确的结果,如果不正确就返回错误的结果。如果结果数据库中存在就显示登录成功,如果数据库不存在就显示失败请重新登录。
    管理员用户登录界面如图5-4所示:

    5.4 前台功能模块设计5.4.1 公交查询设计本系统的首页设计为查询界面,为的是方便高效和快捷,此系统查询分为三大功能:第一个功能为站-站的查询功能,第二个是公交线路的查询功能,第三个是公交站点的查询功能。接下来将介绍三大功能:

    站—站的查询功能:用户可将准备出发的起始站点和终止站点分别对应的输入到换乘查询的输入框内,系统会根据用户输入的站点信息,列出提供的换乘路线,系统将优先查找到的直达公交线路排在前面,方便用户的选择
    公交线路的查询功能:用户可以输入完整的公交线路号进行查询公交线路,系统会筛选出匹配的线路,用户可以点击查看,查看所查到的公交线路,里面有每个线路确切的途经站点
    公交站点的查询功能:用户在不了解公交线路的情况下,可以搜素要到达的公交站点,输入自己要到达的地点,公交查询系统会对比数据库为用户匹配出所有进过这一站点的公交线路,用户可根据此来选择乘坐的线路

    查询界面如图5-5所示:

    用户输入起始站与终点站查到的结果如图5-6所示:

    用户输入公交线路查询如图5-7所示:

    用户输入公交站点查询如图5-8所示:

    5.4.2 热门线路功能模块设计热门查询线路模块列举了所有在数据库中的公交线路,本人在网上随意挑选了一些公交线路录入其中,市民可以在热门线路中查看所有公交线路,挑选符合属于自己出行的公交线路
    下图是热门线路模块的界面,如图5-9所示:

    5.4.3 网站公告功能模块设计用户点击网站公告模块后会看到管理员发布的公交新闻,包括一些公交线路的改道,还有公交价格的调整,网站公告由后台管理员进行上传。
    下图是网站公告功能模块的实现界面图,如图5-10所示:

    下图是网站公告内容的详细信息,如图5-11所示:

    5.4.4 在线提问模块设计在线提问模块旨在帮助乘客解决他们在实际的乘车过程中遇到的困难,以及对城市公交查询系统的建议,这是一项非常人性化的设计,因为设计员并没有真正的参与使用,有些问题体会不到,用户可在此模块发表问题,提出自己的见解,也可在此回答其他市民的疑惑。
    下图是在线提问功能模块的界面,如图5-12所示:

    5.5 后台功能模块设计管理员的设置是为了系统能够安全的、系统的平稳运行,本系统为管理员设置了用户管理、公告管理、线路维护和会员提问四大功能模块。

    用户管理:用户管理是对已注册用户的基本信息进行更新维护;主要包括对用户的添加,用户的删除,用户的修改
    公告管理:公告管理是对公告进行发布和对已发布公告进行修改和删除操作,保证公告的实时性,及时添加新的公告,也要删除旧的,无用的公告
    线路维护:线路维护主要是对新线路进行添加和对不用线路的删除,以及对现有线路的修改
    会员提问:对市民提出的问题进行答复,帮助市民解决出行问题,更好的完善城市公交管理系统

    用户管理的实现界面,如图5-13所示:

    线路维护管理管理的实现界面如图5-14所示:

    公告管理的实现界面如图5-15所示:

    6 系统测试6.1 程序测试网站测试是软件设计的最后一道工序,也是非常重要的一步。用于检查软件的质量、性能、可靠性等是否符合用户需求。一套严谨的、规范的、完善的测试过程将大大提高软件的质量、可信度、可靠性,降低软件的出错率,降低用户风险系数。通常网站测试包括:功能测试,安全测试,可用性测试,性能测试、兼容性测试等方面。
    在系统设计的过程中,这是必然的,存在一些错误。对于错误的语言和语法,程序在运行时,会自动提示你错的地方,并请求立即修改,所以,这样类型的错误是比较容易发现和纠正的。但另一类错误是在程序执行时由于不正确的操作,或是导致的错误结果的对某些数据的计算公式的逻辑错误。这类错误隐蔽性很强,时而出现,因此,这是非常耗时费力的,对这一类动态发生的错误的排查。
    软件测试,描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
    为了使本软件运行更加稳定,我对它进行了全面的测试,其中测试分为二部分,一种是界面测试;另一种功能测试。
    首先我们来说界面测试,界面测试是为了使程序在不同的的操作平台上能够运行界面,并且能够保持原来的风格。经测试程序运行正常,运行界面上的字体图片等设置都能够保持得非常好。不出现字体变形等情况。
    其次进行功能测试。该系统测试采用的是单元测试,集成测试,完善性测试等多种方式进行测试。
    经过测试,所有功能都能得以实现,没有任何变形。至此,在功能的测试上也已经比较圆满的完成了。
    6.2 测试的重要性及目的6.2.1 测试的重要性系统测试是开发一个管理信息周期中非常重要而且漫长的的阶段。其重要性体现在他是保证系统质量与可靠性的重要关口,是对整个系统开发过程的最终审查。
    系统测试的主要任务是尽可能的检查出程序中的错误,提高系统的可靠性,主要的目的是位列检验系统“做得如何”。其中这一阶段又可以分为三个步骤:模块测试;组装测试;确认测试;通过测试整个管理系统来确定能不能够满足用户的需求。通过测试发现问题以后,我们要经过不断的调试找出错误具体原因和位置,然后对其进行修改。
    系统开发完成后就需要进行系统测试,测试在一个软件的开发过程中是非常重要的,其意义在于:

    发现软件错误
    有效定义和实现软件成分由低到高层的组装过程
    验证软件是否满足任务书和系统定义文档所规定的技术要求
    为软件质量模型的建立提供依据

    6.2.2 测试的目的Grenford J.Myers曾对软件测试的目的提出过以下观点:

    测试是为了更好的找出程序中存在的问题、错误
    好的测试方案是很有可能是到现在为止仍然未被发现的错误的测试方案
    成功的测试则是找出了至今仍然没有被发现的错误的测试
    测试并不单纯是为了找出错误。而是通过分析错误,来找出产生错误的原因,来避免发生错误,帮助程序员找出软件开发过程中的缺陷,以便及时进项改正
    测试是为了检验修改或优化过程是否引发新的问题、软件所能达到处理能力和是否达到预期的处理能力等

    6.3 测试的步骤就像开发过程,测试过程中要完成的一步一步的逻辑上的每一步都是在继续之前的一个步骤。由许多个子系统是大型软件系统,并且多个包括各子系统模块的。因此,一个软件系统的测试基本上由以下步骤组成:

    测试模块,编码和详细设计错误往往在本测试程序中找到
    在此测试步骤中遇到的测试系统的软件错误的设计,规范的要求的错误也可以找到
    系统需求规格说明书的错误也是在这个测试程序进行验收测试发现

    在我们设计软件的过程中,测试系统常用的测试方法主要有两种:功能测试和结构测试。
    功能测试也被叫做黑盒测试和数据驱动测试,是在已经知道系统应该具有的具体功能的情况下,通过黑盒测试来测试系统功能是不是能够正常运行。在测试时,将系统当做不能打开的盒子,在不管系统内部结构与特性的状况下进行测试,它只检查系统功能是不是根据系统说明书的规定正常运行的,同时检测系统是否能正确接收的输入信息和输出信息的正确对应,并保持系统的完整性的外部信息需求。
    白盒测试与黑盒测试相反,它了解系统内部工作的各项具体程序,能够通过测试来检查系统内部的运行是不是按照系统说明书的规定进行正常运作的,因此,白盒测试又被叫做结构测试和逻辑驱动测试。根据测试程序的结构在每个道路试验,当系统运行时不是能按预定要求正确运行,无论其功能如,白盒测试试验,道路试验是一个逻辑驱动器,这种测试主要用来软件测验。
    首先我们来说界面测试,界面测试是为了使程序在不同的的操作平台上能够运行界面,并且能够保持原来的风格。我把完整程序拷贝到不同版本的电脑平台环境下,程序运行正常,运行界面上的字体、图片等设置都能够保持得非常好。不出现字体变形等情况。
    其次进行功能测试和性能测试,功能测试主要包括五项内容:适用性、准确性、可操作性、依从性、安全性。
    系统性能测试主要是通过模拟系统运行环境,测试系统性能是否符合客户的需求。性能测试的重要技术指标是:系统的运行速度、系统响应的时间和支持并发节点数。
    最后进行系统的可用性测试,可用性测试用于检测系统的可理解性、可操作性和学习性等方面内容。
    6.4 测试的主要内容测试过程分为哪会保证测试,即质量几个阶段:代码审查,单元测试,集成测试,确认测试和系统测试。

    单元测试:集中在一个小软件单元设计审查 - 模块是一个测试单元,意识和定义模块的功能实际发现,这种情况不符合测试说明和编码错误
    集成测试:集成测试模块安装在根据进行集成测试的设计要求,其主要目的是为了发现问题相关的接口。例如有可能是一个问题,由于疏忽,与其他模块的模块,并造成有害影响;不能产生所需的功能键,组合功能;看起来可以接受的个别错误是不可接受的,当积累;可能有错误,如整个数据结构
    确认测试:该试验的目的是验证,该系统能够工作如期,根据需要,以显示未来的用户。集成测试后,已经把一个完整的软件系统,设计按照完成安装的所有模块,从根本上推动问题接口错误的,那么软件的有效性将能够得到进一步的确认,试验工作证实,它是功能和软件的性能,如用户所期望的
    系统测试:在软件开发完成后,并且系统将最终在包的其它部分,在测试系统上执行。包括恢复测试,安全性测试,强度测试和性能测试

    系统测试主要从以下几个方面:

    功能测试:测试满足发展的需要,旨在提供这里所描述的功能,用户需求是否得到满足。功能测试是测试最常用的系统和强制性测试和正式的规格通常是标准的软件测试
    强度测试和性能测试:该测试系统的最大实际程度的能力,即在某些情况下,负载的软件功能进行
    安全测试:验证内置到系统中的保护机制,它可以保护系统,所以从很不安。该系统主要是针对权限对系统进行测试,并为void仅仅是数据,错误的数据和测试数据的非法干扰的能力

    6.4.1 功能测试功能测试主要包括五项内容:适用性、准确性、可操作性、依从性、安全性。
    本系统功能测试如表6-1所示:



    测试内容
    测试结果




    适用性



    准确性



    可操作性



    依从性



    安全性




    本系统功能测试测试用例6-2所示:



    测试标识
    测试项目
    测试用例输入及说明
    预期结果
    测试记录




    用户管理模块功能点
    新增用户
    系统管理员单击”新增”按钮
    成功进入到新增用户界面
    测试通过


    用户管理模块功能点
    登录全部置空
    令所有文本框为空
    提示(请输入账号密码)
    测试通过


    用户管理模块功能点
    提交新增用户信息
    在新增用户界面输入有效数据并点击提交按钮
    显示注册成功
    测试通过


    用户管理模块功能点
    删除用户
    在界面上点击要删除的用户,并点击删除按钮
    删除成功,并退回到用户管理界面
    测试通过


    用户管理模块功能点
    编辑用户
    系统管理员单击”编辑”按钮
    成功进入到编辑用户界面
    测试通过


    公告管理模块功能点
    新增公告
    系统管理员单击”添加”按钮
    成功进入到新增公告界面
    测试通过


    公告管理模块功能点
    全部置空
    令所有文本框为空
    提示(标题不能为空)
    测试通过


    公告管理模块功能点
    提交新增公告信息
    在添加公告界面,点击保存
    添加成功后跳转到公告界面
    测试通过


    公告管理模块功能点
    删除公告
    系统管理员点击删除公告并点击删除键
    显示删除成功并跳转到公告界面
    测试通过


    线路维护模块功能点
    新增线路
    系统管理员单击”添加”按钮
    成功进入到添加线路界面
    测试通过


    线路维护模块功能点
    全部置空
    令所有文本框为空
    提示(线路名称不能为空)
    测试通过


    线路维护模块功能点
    提交新增线路信息
    在新增线路输入有效数据并点保存
    添加成功后跳转到线路维护界面
    测试通过


    线路维护模块功能点
    编辑线路
    系统管理员单击”编辑”按钮
    成功进入到编辑线路界面
    测试通过


    题目管理模块功能点
    删除线路
    点击删除的线路再点击删除按钮
    显示删除成功
    测试通过


    会员提问模块功能点
    查看问题
    点击查看按钮
    成功查看问题
    测试通过


    会员提问模块功能点
    回复问题
    点击查看问题并参与回复
    成功增加回复内容
    测试通过



    6.4.2 可用性测试可用性测试用于检测网站的可理解性、可操作性和学习性等方面内容。具体测试方面如表6-3所示。



    测试项
    测试人员的评价




    窗口移动、改变大小、关闭等操作是否正常



    操作模块是否友好



    模块和提示内容等文字描述是否正确



    模块布局是否合理、协调



    模块的状态是否正确(对选中项能否发生对应切换)



    键盘、鼠标操作是否支持



    所需的数据项是否正确显示



    操作流程是否合理



    是否提供帮助信息




    6.4.3 性能测试系统的性能测试主要是通过模拟网站运行环境,测试网站性能是否符合客户的需求。性能测试的重要技术指标是:网站的运行速度、网络响应的时间和支持并发节点数。

    测试网站的运行速度:通过在不同的计算机上进行试运行本网站,没有发现任何停顿、迟滞现象
    测试网络响应时间:网络响应时间主要包括:网络最小响应时间、平均响应时间和最大响应时间这三个参数。经过测试,在网络运营良好状态下,局域网内响应时间三参数为:1/2/5s,外网响应时间三参数为3/7/12s,符合客户的需求,属于在用户的心理可承受范围内
    支持并发节点数:经过模拟的环境测试,本网站在并发节点达到45个时,网络运营的速度会发生比较大的波动,延迟时间10秒左右,符合客户需求

    6.5 测试结论由于自己独立写的项目不多,考虑问题肯定会不周全,存在很多的难以预料的问题,写的功能有时候也难以满足用户需求,代码和接口也会出现很多问题,不规范的书写习惯,都会导致项目不无法达到用户的目标,无法让用户放心的使用,用户体验效果差。正是因为这样所有的项目在交付用户使用之前,必须经过专业技术人员的测试,一个好的项目需要不断的打磨,需要不断的反馈意见,不断地再加工,才能设计出符合用户要求,用户体验良好的项目。测试的技术人员,需要根据项目设计的人员制作的项目文档,对用户要求的各个功能进行测试并根据测试结果编写好测试的文档,在经过这一系列的工作后,可以有效的规避因设计人员在设计过程中的小纰漏,提升项目的质量,最终交付给用户一个完美的作品。
    本系统设计要求基本都可以达到,此系统具有完整的软件功能,良好的用户界面,能够正确的处理错误信息,而且能够准确的提出错误的种类。总体说来,软件通过测试。
    经过对上述的测试结果分析,本系统满足用户的通过计算机平台用户使用的要求和需求。所有基本功能齐全,操作简单,产品运行性能良好,是一个值得推广的公交查询系统。
    总结与展望本此毕业的内容所实现的是城市公交查询系统的设计与实现,主要介绍了java与jsp技术。本设计按照以下五个步骤对此项目进行设计:

    需求分析
    概要设计
    后台数据库的实现
    项目的详细设计
    系统的测试

    当下此系统的基本功能已得到实现,从3月份开始准备资料到5月份基本完成了项目的设计,要是想很好的完成这个项目,使它运用到生活中是远远不够的,还需要不断地用户反馈,不断修改,不断地充实,我也将会在今后的学习中,不断的完善它,改进它,使其更好。
    本系统具有以下优点:

    该系统可以运行在多个操作系统平台(Windows NT和Windows 2000 / Windows XP和Windows Vista)数据库管理系统采用MySQL和Java开发环境,可移植性好
    该系统界面简单,操作方便,容易进入的信息,人们使用的术语

    但也存在以下缺点:

    界面跳转复杂,接口不能被刷新,可以改进
    功能比较简单,没有进一步提高一些选修的程序等,不能更好的为用户提供更强大的功能服务
    数据库设计有冗余,需要进一步优化

    毕业设计的选题是在老师的指导下最终确立的,选题确定好后就开始学习这方面的资料进行学习,开始在这方面可以说是不熟悉的,虽然最初学习JSP技术,但学校学习的东西如果没有运用到实际的设计中终究是不行的,以前都是老师带领我们做,第一次做难免会怯场,但是最终通过自己的努力,老师的指导,同学的帮助,完成了本系统的设计。
    本次毕业设计已基本画上句号,在整个设计的道路上是劳动和汗水凝结的成果。为了解决一丢点的困难,我翻阅书籍,询问老师,与同学探讨,从不懂到熟知也是一个新的经验和新的收获的过程。学习是一个长期的过程,系统设计过程中,遇到了很多问题,后来通过自己的努力来解决大部分问题,但同时也学到了很多知识。通过这次毕业设计,我从最初的Java语言,和后来的Web开发学会了很多,然后在训练过程中,通过所学到的知识应用到实际发展实践中,最后到软件功能集成的整个设计过程的思想。
    该系统在实施过程中也常遇到一些困难,毕竟,JSP技术的掌握不熟练,有许多控件不能真正明白他们的意思,有一个对象调用的一些方法,并不十分了解,美化界面处理不好。所以开始的设计真的遇到了许多困难,但通过和老师同学的帮助以及在线学习,解决设计中的许多问题,但也使我有了一定的JSP技术的掌握,同时巩固了以前学过的知识。实现了质的上升,在一个纯粹的理论学习到实际上手再向完成毕业设计前进,理论联系实际情况,是学术认知的另一次跃进。
    参考文献[1] 汪光焘.畅通城市交通,实现城市的可持续发展.可持续发展,2002,(2):18-19
    [2] 马武定.城市化与城市可持续发展的基本问题.城市规划汇刊,2002,(2):7-9
    [3] 冯博.SQL实用教程.北京:人民邮电出版社,2005
    [4] 严蔚敏,吴伟明.数据结构(c语言版).北京清华大学出版社,1997
    [5] 张海藩.软件工程.北京:人民邮电出版社,2002
    [6] 黄斯伟.HTML完全使用详解.北京:人民邮电出版社,2005
    [7] Anthony J.Dos Reis. Compiler Construction Using Java,JavaCC,and Yacc. Wiley-IEEE Computer Society Pr; 1 , 2011
    [8] Joan Casteel. Oracle 12c:SQL. Course Technology; 3, 2015
    [9] Richard North Patterson. Eclipse. Pan Publishing, 2009
    [10] 李兴华,王月清.名师讲坛:Java Web开发实战经典基础篇(JSP、Servlet、Struts、Ajax) [平装][M].清华大学出版社,2010.
    [11] 李刚.轻量级Java EE企业应用实战(第3版):Struts 2+Spring 3+Hibernate整合开发[M].电子工业出版社,2012.
    [12] 孙卫琴:《精通Hibernate:Java对象持久化技术详解》[M].电子工业出版社出版,2010.
    [13] Budi Kurniawan (作者),崔毅 (译者),俞哲皆 (译者),俞黎敏 (译者).Servlet和JSP学习指南[M].机械工业出版社,2013.
    [14] 陆舟.Struts2技术内幕:深入解析Struts2架构设计与实现原理 [M].机械工业出版社,2012.
    [15] 陈亚辉,缪勇.Struts2+Spring+Hibernate框架技术与项目实战[M].清华大学出版社,2012.
    [16] 施瓦茨 (Baron Schwartz),扎伊采夫 (Peter Zaitsev),特卡琴科 (Vadim Tkachenko),宁海元.高性能MySQL(第3版)[M].电子工业出版社,2013.
    [17] 薛华成.信息管理与信息系统专业教材系列:管理信息系统(第6版)[M].清华大学出版社,2012.
    [18] 王颖.基于JSP的学生学籍信息管理系统的设计与实现[J].电子科技大学,2012.
    [19] 朱丽萍.基于JSP的高校图书管理系统开发和实现[J].电子科技大学,2011.
    [20] 吕勇.基于JSP的实验室项目管理系统的设计与实现[J].武汉理工大学,2012.
    [21] 庞丽娜.Java 应用开发技术详解[M],科学出版社,2007:126-235
    [22] Cay S.Horstmann,Gary Cornell著,叶乃文,邝劲筠,杜永萍.JAVA核心技术卷I:基础知识,程序设计教程[M].人民邮电出版社,2008.5:87-234
    [23] 张超.基于JSP Struts2技术的房地产信息管理系统的设计与实现[D].吉林大学,2012.
    [24] (美)Powell.R. (美)Weeks.R.著. 袁鹏飞译. C#和.NET架构. 北京:人民邮电出版社,2002.4 17
    [25] 萨师煊,王珊.数据库系统概论(第三版).北京:高等教育出版社,2000.2
    5 评论 148 下载 2020-08-10 11:47:16 下载需要13点积分
  • 基于J2EE的新闻管理系统的设计与实现

    摘 要为了实现网上新闻的发布与管理,方便后台人员操作,提高工作效率,构建了基于Java Web技术的新闻管理系统。文中论述了新闻管理系统的开发工具,系统分析、设计、实现和测试过程。分析了系统的可行性和用户需求,给出了系统的总体设计,包括功能模块划分和数据库设计,进一步阐述了系统的详细设计与实现。经过测试,系统实现了用户身份验证,管理员可以对新闻进行添加、修改、删除、查询等操作,普通用户可以浏览和评论新闻。系统比较完善,达到了预期目标。
    关键词:新闻管理,系统分析,系统设计,系统测试
    ABSTRACTIn order to implement the release and management of news on-line, be convenient to operate for administrators and improve the efficiency, the news management system based on Java Web technology is constructed. In the paper, it elaborates the development tools of the system, the procedure of system analysis, design, implementation and test. First, the feasibility and requirement are anglicized. Next, the general design, including function module dividing and database design is given. Furthermore, the detail design and implementation are expounded. After testing, the system has realized the functions of user authentication. Administrator can add news, update news, delete news, and search news, beside the ordinary people can browse news and review news. The system is nearly perfect, and the expected goal has achieved.
    KEY WORDS: News Management, System Analysis, System Design, System Testing
    1 绪论1.1 选题的背景现在是一个科学技术飞速发展的世纪。随着计算机及网络技术的飞速发展,Internet应用在全球范围内日益普及,当前社会正快速向信息化社会前进,各个领域都向系统化、规范化、自动化的方向发展,信息自动化的作用也越来越大,使得人们的工作效率、工作成绩和生活水平都日益提高。为了满足人们各自兴趣,如阅读新闻或对时事新闻的评论,社会上有不少的各类新闻网站等为人们提供获取新闻及新闻评论的平台。新闻管理系统在信息技术的强有力的推动下,已经叩响了人类的大门。当今社会,人们深深领略到了网络新闻的迅猛发展,在已经迈入21世纪的今天,认识、了解新闻管理系统,是每个人都要认真对待的一项新任务。
    1.2 选题的意义随着Internet的兴起,网络已经成为现代人生活的一部分,人们越来越想在最短的时间内知道所发生的各种新闻。于是新闻自动化便成了人们向往的事情,本系统就是一个基于B/S模式的新闻管理系统,采用的是J2EE技术,实现了网站新闻的动态管理,使得对信息的管理更加及时、高效,提高了工作效率。一方面,它提供了一个新闻发布和管理的功能;另一方面,现在的新闻发布要求与普通的用户实现交互,这一点也是其他一些媒体(电视、电台等)现在无法做到的,以后新闻管理系统会成为人们生活中不可缺少的一部分。
    1.3 系统及开发工具简介本系统是基于Java Web技术的新闻管理系统,其主要功能是信息的发布和管理,涉及到前台用户对新闻的浏览及评论和后台管理员对用户和新闻的管理。在前台新闻浏览模块,对新闻进行分类别展示,并通过栏目导航进入特定的新闻信息分类模块。前台浏览新闻不需要用户登录注册,对所有用户均开放,但是只有注册登录的用户才能发表评论。后台管理一般只有使用了正确的管理员账号和密码才能进入后台管理新闻和用户信息。
    本系统是采用Myeclipse8.6作为开发工具,MySQL作为后台数据库的基于B/S模式的新闻管理系统。MyEclipse是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能。MyEclipse可以简化Web应用开发,利用它可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大地提高工作效率。MySQL是一套功能强大的关系型数据库管理系统,适用于Windows平台,采用它作为新闻管理系统的数据来源,可以让用户很简便地实现所要进行的数据存取操作。
    2 系统分析2.1 系统设计原则新闻是直接与广大用户进行会面的,新闻管理系统是用户对外发布消息的门户,对用户也有非常重要的影响。在进行系统设计时要充分考虑新闻管理工作的特点,需要遵循以下几个原则[1]:
    目的要明确
    首先,要有明确的设计目标和意图,需要设计开发什么类型的系统,系统应该有哪些功能,只有这样才会构建一个良好的新闻管理系统。
    可扩展性较强
    新闻管理系统完成并投入使用以后,主、客观条件难免会发生变化,同时在使用过程中也许会发现软件系统不够完善,此外为了加强系统功能,都需要对该系统进行维护和优化,因此在系统开发过程中要预先考虑到系统可扩展性,采取一定方法,增强系统的可扩展性。
    实用性和经济性
    在新闻管理系统设计开发过程中,要在尽量降低成本的同时,满足系统实用的需要,使的系统操作更加简便,使用效率更高,灵活性更强。
    2.2 系统需求分析作为软件的开发人员,无论开发任何一种软件,设计任何一个软件系统,首先要做的第一步骤就是需求分析[2]。软件需求分析是软件生存期中重要的一步,也是决定性的一步。需求分析的基本任务是准确地回答“系统必须做什么”这个问题,深入描述软件的功能和性能需求,确定软件设计的约束和软件同其他系统元素的接口细节,定义软件的其他有效性需求[3]。
    系统的需求分析在整个系统的开发过程中有着举足轻重的作用,只有在做好系统需求分析的基础上,才能开发出好的应用系统。
    2.2.1 系统的功能需求分析在对文献研究以及对相关用户充分调研的基础上,总结出了新闻管理系统的功能需求:

    新闻管理系统首先要具有新闻管理的功能,即发布新闻、修改新闻和删除新闻
    级别不同的用户要有不同的权限:管理员不仅可以对新闻进行分类、添加、修改和删除,还可以管理普通用户;普通用户登录系统后可对新闻进行浏览和评论
    要优化新闻管理流程,提高效率,保证新闻时效性

    综上所述,可将新闻管理系统分为前台页面模块和后台管理模块两大部分进行设计与实现。
    前台页面模块主要提供浏览功能,是用户访问新闻的界面。具体功能如下:

    首页是整个新闻管理系统的第一个页面,负责从总体上对系统信息进行显示。在首页的顶部要有用户注册和登录的模块
    用户注册和登录模块的下方要有新闻分类的主题。可以将新闻分为国内、国际、军事、财经、体育、娱乐、科技、房产、汽车、社会、游戏、教育等几类。点击某个主题后,仅对应该分类的所有新闻要以列表的形式分页显示出来
    首页的左侧,要将新闻标题以列表的形式显示出来,图片新闻显示在首页的右侧
    由于新闻管理系统的数据量极大,新闻标题也会很多,所以系统对新闻标题的显示要有分页功能,每一页显示一定数量的新闻标题
    首页的底部要显示网站的服务链接,网站地图,留言反馈,常见问题解答,热线电话,举报邮箱,以及版权等相关信息
    点击新闻标题,打开一个新闻后,要在新闻内容的下方显示出评论列表。评论包括评论人、评论内容和评论时间。如果一条新闻还没有用户评论,则在新闻内容的下方显示“暂无评论”
    新闻阅读页面顶部要有返回新闻首页的链接,页面底部要有合作伙伴的友情链接
    普通用户登录新闻管理系统后,在首页的顶部要有“返回用户主页”的链接。管理员登录系统后,在首页的顶部要有“返回后台主页”的链接,方便管理员进入系统后台对新闻管理系统进行管理
    新闻管理系统要有一定的出错提示。例如用户登录时没有输密码或者密码输入错误,要有“请输入密码”或“密码错误,请重新输入”的提示;用户注册时输入的密码和确认密码不一致时也要有提示,同时,为了方便数据库的管理,对用户注册输入的用户名和密码要有长度限制,如果用户输入的信息不在此限制范围内,也要有出错提示
    系统还要用一定的确认操作提示,以防止用户在不小心的情况下对系统做出错误的操作,造成损失。例如管理员在删除用户、删除新闻和删除分类主题时,要有确认是否删除的对话框提示

    后台管理模块 主要实现新闻管理系统的管理与维护,又分为管理员管理维护系统的界面和普通用户的个人主页。具体功能如下:

    管理员登录系统后进入后台管理界面。用户管理模块实现用户信息的查看和删除。新闻管理模块实现新闻的添加、分类、编辑、删除及相关属性的设置。分类管理模块实现新闻类别的添加、修改、删除
    普通用户登录系统后进入个人主页,在个人主页可以查看个人信息,可以修改密码
    注册并登录过用户可以对新闻发表评论,未注册的用户则不能对新闻发表评论

    2.2.2 系统的性能需求分析在功能需求基础上,要提出系统的性能目标,新闻管理系统需要达到以下性能要求[4]:

    界面友好。系统各个模块的界面布局和背景要美观,不能给用户很乱的感觉
    操作简单。新闻管理系统所面向的用户众多,用户角色也各不相同,他们中有系统管理人员,有注册过的普通用户,也有以游客身份访问系统、无需登录系统的匿名用户。其文化程度各异,掌握的计算机水平也不同。因此,设计的新闻管理系统在操作上要简单易用,人机界面友好,使用户无需培训就能在较短时间内熟练使用系统,完成新闻的管理、浏览和评论等业务
    安全性高。新闻管理系统是用户对外宣传的门户,系统设计的安全性十分重要。一旦系统遭到非法入侵,破坏系统或发布不良信息,将对用户产生严重的不良影响。为此,新闻管理系统将采取用户信息加密、用户权限设计、数据库备份等措施来保证系统的安全性
    稳定性高,易维护。一般来讲,新闻管理系统运行在中心服务器上,因此新闻管理系统必须有较强的稳定性和易维护性,一旦系统出现问题,可以快速修复,恢复正常运行

    2.3 用例图用例图描述的是参与者(actor)所理解的系统功能。用例图的建立是系统开发者和用户反复讨论的结果,描述了开发者和用户对需求规格达成的共识[5]。首先,它描述了待开发系统的功能需求;其次,它把系统看做黑盒子,从参与者的角度来理解系统;第三,它驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的各个阶段和UML的各个模型[6]。
    用例图的主要元素是用例和参与者。该新闻管理系统的参与者主要有:管理员,注册过的用户和没有注册过的匿名用户。
    注册过的用户可以浏览新闻、评论新闻,可以查看个人信息,也可以修改自己的登录密码。
    注册过的用户在新闻首页任意点击一个新闻标题,系统就会跳转到新闻阅读界面,用户就可以查看新闻的具体内容。
    新闻内容的下方是评论列表,注册过的用户登录系统后,还可以在评论列表下方的评论框里发表对该新闻的评论。
    注册过的用户登录系统后会跳转到个人主页。
    在个人主页里,用户点击查看个人信息,就会在个人主页看到自己的用户名和密码。用户点击修改密码,在出现的文本框里输入自己的新密码,点击修改,提示修改成功,则用户的密码被成功修改。
    注册用户的用例图如图2-1所示:

    没有注册过的匿名用户只可以浏览新闻,在新闻首页点击任意一个新闻的标题,就能在阅读页面看到该新闻的具体内容和其他用户对该新闻的评论。
    匿名用户的用例图如图2-2所示:

    管理员对新闻管理系统的管理主要分为用户管理、新闻管理和主题管理。其中在用户管理模块中,管理员可以查看其他用户的信息,可以删除其他用户。在新闻管理模块中,管理员可以添加新闻、修改新闻、删除新闻和查找新闻,当然管理员也可以浏览和评论新闻。在主题管理模块中,管理员可以添加主题、修改主题和删除主题。
    管理员登录系统后会跳转到后台管理页面。
    管理员点击“用户管理”,用户的详细信息就会以表格的形式出现在用户管理页面。点击任意一条用户信息后面的“删除”,会弹出确认删除对话框,点击“确认”,就可以删除一条用户信息。
    管理员点击“添加新闻”,在添加新闻页面,从新闻分类的下拉菜单选择新闻分类的主题,输入新闻的标题、作者以及正文内容,点击“提交”,就能成功发布一条新闻。
    管理员点击“编辑新闻”,会出现新闻的标题列表,在新闻标题的后面有“修改”和“删除”两个按钮。
    点击新闻标题后的“修改”,会跳转到新闻编辑页面,管理员在新闻编辑页面可以对新闻的分类主题、标题、作者以及正文内容进行修改,修改完后点击“提交”,就能成功修改一条新闻。
    点击新闻标题后的“删除”,会弹出确认删除对话框,点击“确定”,就能成功删除一条新闻。
    管理员点击“查找新闻”,在查找框里输入要查找的新闻标题,点击“提交”,想要查找的新闻的标题就会以列表的形式出现在查找结果页面。点击新闻标题或者标题后的“修改”和“删除”,就可以对查找到的新闻进行进一步的操作。
    管理员点击“添加主题”,输入要添加的新闻分类的名称,点击“提交”,就能成功添加一个新闻分类。
    管理员点击“编辑主题”,新闻的分类主题就会以列表的形式分页显示出来,在每个主题的后面都有“修改”和“删除”两个按钮。
    点击主题名称后的“修改”,管理员在修改框里输入新的标题,点击“提交”,就能成功修改一个新闻分类。
    点击主题名称后的“删除”按钮,会弹出一个确认删除对话框,点击“确定”,就能成功删除一个新闻分类。
    管理员的用例图如图2-3所示:

    2.4 系统的可行性分析系统的可行性分析是对开发系统的可行性程度进行评价,以便对系统开发、应用进行评测,主要包括技术可行性、经济可行性、操作可行性等[7]。
    技术可行性分析
    新闻管理系统使用计算机对新闻信息进行全面管理。为了提高工作效率和工作质量,系统通过运用计算机网络技术和数据库技术,对新闻管理系统的各个阶段实现计算机管理和控制。
    考虑到系统的扩展性,本系统以Java为开发语言、MySQL作为后台数据库,进行新闻管理系统的研究与开发。Java语言是一种跨平台、适合分布式计算机环境的面向对象编程语言。它具有的特点很多,如简单易学、面向对象性、分布式、可靠性、安全性、平台无关性、高性能、多线程、动态性等。
    系统开发步骤依据软件工程的项目开发模型,结合通用的应用开发平台进行系统配置,且有很多相关的成熟系统可以参考,因此,课题开发在技术上完全可行的。
    操作可行性分析
    该系统基于B/S模式,客户端只需安装Web浏览器即可访问系统,通用简单的操作界面,具有一般计算机知识的人员都可以轻松掌握其使用方法。用户交互界面友好,简洁明了,能切实提高新闻管理系统的可操作性,几乎无需人员培训。
    经济可行性分析
    根据新闻系统的实际需求,开发本系统,不但可以提高用户的新闻管理水平,同时还可以大大提高新闻采编的效率,优化新闻流程,保证新闻的时效性。就目前这个系统,需求方并不需要花太大的代价就能保证系统的运行。服务器可以用原有的Tomcat6,至于数据库,需求方只需在服务器上安装MySQL5.5.15就可以了,运行维护过程中也不要花费很多人力和物力,只要有管理员和一般维护性人员即可,所以在经济方面也是可行的。
    3 系统总体设计3.1 系统体系结构设计新闻管理系统是典型的管理信息系统。管理信息系统的结构设计是系统设计中的一项重要工作,系统结构设计的好坏,直接影响着系统的效率、安全性、可维护性。管理信息系统常用的体系结构有:文件服务器模式(File/Server)、C/S模式(Client/Server,客户机/服务器)和B/S模式(Browser/Server,Web浏览器/服务器)[8]。
    新闻管理系统需要向外发布信息,用户众多,并且数据库信息的更新和维护涉及到地域和即时性的制约,系统的实现一般采用B/S结构,操作方便快捷,而且对服务器端数据库的访问量较小[9]。 B/S结构用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,简单易用,节约了开发成本,减轻了系统维护和升级的成本。可以说B/S结构,是当今Web应用软件的首选体系结构[10]。
    采用B/S结构的新闻管理系统可以轻松地发布新闻信息,而用户也无须安装专门的客户端软件,直接使用浏览器就可以查看新闻。
    未注册的普通用户可浏览新闻信息;注册用户可浏览新闻、发表评论等;系统管理员完成新闻管理、用户管理、系统维护等。
    3.2 系统功能模块新闻管理系统具有多个模块。该系统的用户分为三种:未注册的匿名用户,注册过的普通用户和管理员。
    所有用户都能浏览新闻。
    注册过的普通用户登录系统后可以查看自己的个人信息,可以对新闻进行评论,修改自己的密码。管理员登录后可以管理新闻、主题和用户,实现信息的添加、修改和删除。其中用户管理分为查看用户信息、删除用户;新闻管理分为添加新闻、查找新闻、编辑新闻和删除新闻;主题管理分为添加主题、修改主题和删除主题。
    系统功能模块如图3-1所示。

    3.3 数据库设计新闻管理系统的大量新闻信息保存在数据库中,同时新闻管理系统的用户相关信息也保存在数据库中。由于新闻管理系统处理的新闻信息数据更新较快,随着新闻管理系统使用时间的增长,数据日积月累,必将产生海量数据。同时在功能上考虑到数据处理速度、数据处理能力、性能稳定性、安全可靠性等,需要合理设计数据库系统。由于大量的信息被组织在数据库中,数据库的设计将影响整个管理系统的性能,数据库设计是系统设计中的一个重点。
    数据库作为新闻管理系统的基础,首先要保证其设计的合理性。在使用应用系统时,拥有设计合理的数据库往往可以起到事半功倍的效果。数据库设计是针对给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够高效地存储数据,满足系统用户的应用需求[11]。目前通用的数据库设计开发流程,主要分以下几个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护[12]。设计一个完善的数据库应用系统是不可能一蹴而就的,它往往是上述六个阶段的不断重复。
    本新闻管理系统一共用到四个表:评论信息表(comments),新闻信息表(news),用户信息表(news_users),分类信息表(topic)。这四个表的设计分别如下:
    评论信息表(comments)



    字段名称
    字段类型
    字段长度
    字段说明




    CID
    int
    11
    评论编号


    CNID
    int
    11
    评论所对应的新闻编号


    CCONTENT
    varchar
    3000
    评论内容


    CDATE
    datetime
    0
    评论日期


    CAUTHOR
    varchar
    100
    发表评论的用户



    新闻信息表(news)



    字段名称
    字段类型
    字段长度
    字段说明




    NID
    int
    11
    新闻编号


    NTID
    int
    11
    所属分类号


    NTITLE
    varchar
    200
    新闻标题


    NAUTHOR
    varchar
    50
    作者


    NCREATEDATE
    datetime
    0
    发布时间


    NCONTENT
    mediumtext
    0
    新闻内容



    用户信息表(news_users)



    字段名称
    字段类型
    字段长度
    字段说明




    USID
    int
    11
    用户编号


    UNAME
    varchar
    20
    用户名


    UPWD
    varchar
    20
    用户密码



    分类信息表(topic)



    字段名称
    字段类型
    字段长度
    字段说明




    TID
    int
    11
    主题编号


    TNAME
    varchar
    50
    主题名



    3.4 实体关系图实体关系图,简记E-R图,是指以实体、关系、属性三个基本概念概括数据的基本结构,从而描述静态数据结构的概念模式[13]。
    本新闻管理系统有四个实体,分别为用户、主题、新闻和评论。

    用户的属性:登录名,密码
    新闻的属性:主题,标题,作者,发布时间,内容。
    评论的属性:用户,内容,发表时间
    **主题只有主题名一个属性

    其中用户分为管理员和普通用户。管理员可以管理主题、新闻以及普通用户。所有用户都可以发表新闻评论。
    各实体之间的关系如图3-2和图3-3所示:


    3.5 过程设计概要设计的任务完成后,就进入详细设计阶段,也就是过程设计阶段。在这个阶段要解决新闻管理系统各个模块的实现算法,并使用过程描述工具(程序流程图、N-S图、PAD图、决策树等)精确地描述这些算法。对于比较简单的算法,可以采用自然语言来描述。但是对于此新闻管理系统,有一些算法比较复杂,使用自然语言描述就不太合适。一方面自然语言在语法上和语义上往往具有歧义性,常常要依赖上下文才能把问题描述清楚;另一方面,自然语言本身具有顺序性,不适合描述具有很多分支和循环的算法[14]。
    因此本新闻管理系统使用程序流程图来描述一些比较复杂的算法。
    用户注册的流程为:在新闻首页点击“注册”,输入用户名和密码,如果密码长度少于6位,则会提示“密码长度为6-255”,重新输入符合标准的密码后,输入“确认密码”,确认密码要和密码一致,否则会提示“密码不正确,请重新输入”。最后点击“注册”,跳转到注册成功页面,提示“注册成功”。
    用户注册流程图如图3-4所示:

    用户登录的流程为:用户输入登录名和密码,点击登录,如果是管理员账户,则跳转到后台管理页面;如果是注册过的普通用户,则跳转到普通用户的个人主页;如果输入的登录名和密码不是注册过的,则不能登录到系统,会提示请先注册。
    用户登录流程图如图3-5所示:

    3.6 类图模型的静态结构也称为静态模型,在UML中表示为类图。类图显示了类(及其接口)、类的内部结构以及与其他类的联系。联系是指类元之间的联系,在类的建模中可以使用关联、聚合和泛化(继承)关系[15]。
    在新闻管理系统中,涉及到的主要类有CommentsServlet,ExitServlet,LoginServlet,NewsServlet,ShowInfoServlet,TopicServlet,UserServlrt;CommentsServiceImpl,NewsServiceImpl,TopicServiceImpl,UserServiceImpl;CommentsDaoImpl,NewsDaoImpl,TopicDaoImpl,UserDaoImpl;DButil等。
    新闻管理系统的核心类图如图3-6所示。

    其中,CommentsServlet,CommentsServiceImpl,CommentsDaoImpl,这三个类是控制用户对新闻的评论的,实现的功能有用户新增评论,所有的评论以列表的形式显示出来,管理员删除评论。
    NewsServlet,NewsServiceImpl,NewsDaoImpl,这三个类是控制新闻管理的。实现的功能有浏览新闻、添加新闻、按标题查找新闻、编辑新闻、删除新闻等。
    TopicServlet,TopicServiceImpl,TopicDaoImpl,这三个类是控制主题管理的。所实现的功能有添加主题、编辑主题、删除主题等。
    UserServlrt,UserServiceImpl,UserDaoImpl,这三个类是控制用户管理的。所实现的功能有显示用户的信息,添加用户,修改用户信息,删除用户等。
    4 系统实现4.1 新闻首页用户进入本新闻管理系统后,首先看到的是新闻首页。
    首页的顶部是用户注册和登录模块,用户在本新闻管理系统注册后,输入登录名和密码即可登录本系统。
    在用户注册和登录模块的下方,是新闻管理系统的logo,“新闻中国,有态度的新闻门户”。网站logo里包含有一个超链接,用户在任意页面,只要点击网站的logo,就可以返回到新闻首页。
    网站logo的下方是一个类似于分割线功能的有色框。
    再下方是新闻分类主题的导航模块。有国内新闻、国际新闻、军事新闻、财经新闻、体育新闻、娱乐新闻、科技新闻、房产新闻、汽车新闻、社会新闻、游戏新闻、教育新闻等分类。
    新闻分类导航模块的下方是新闻浏览模块。新闻浏览模块左边是新闻列表,可以看到新闻标题列表和新闻发布时间。
    点击新闻标题,可以超链接到另一个显示新闻具体内容的阅读页面,可以查看新闻的具体内容。
    新闻浏览模块的右边,上部分是滚动的图片新闻,新闻的图片会自动切换,时间间隔是1秒。用户也可以分别点击滚动框里的四个按钮,可以查看相对应的新闻图片。
    下部分是旋转新闻,新闻标题以旋转的方式显示出来,旋转的轨迹是一个球形。把鼠标放在一个标题的上面,该标题的颜色会发生变化,突出显示出来。用户点击新闻标题就可以跳转到新闻阅读界面,查看新闻的详细内容。
    滚动新闻和旋转标题,这两部分都是用的特效。用Javascript控制图片滚动和标题旋转,用CSS控制这两部分的样式,再把Javascript和CSS引用到控制首页显示的JSP页面中,这两个特效就显示在网站的首页了。
    首页底部显示网站的一些服务的链接,包括广告服务、供稿服务、法律声明、招聘信息、网站地图、留言反馈等。还有热线电话,常见问题解答,举报邮箱,以及版权等信息。
    首页如图4-1所示。

    4.2 各类新闻浏览模块在该模块中,显示新闻的分类,新闻的标题列表,以及新闻的发布时间,还有图片新闻。
    新闻浏览模块如图4-2所示。

    4.3 用户注册点击新闻首页上方的“注册”,用户即可进入注册页面,输入用户名、密码和确认密码,点“注册”,即可完成注册。
    如果输入错误,可以点击“重置”,就会清空所有已输入的信息,重新输入用户名、密码和确认密码。
    注册页面如图4-4所示:

    注册成功后,系统会跳转到注册成功的提示页面。点击“现在登录”,返回新闻首页,即可用刚才注册的用户信息登录新闻管理系统。
    注册成功页面如图4-5所示:

    实现注册功能的关键代码如下:
    private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); User n = new User(); n.setUname(name); n.setUpwd(pwd); boolean b = userServiceImpl.save(n); if (b) { request.getRequestDispatcher("WEB-INF/user/doregister.jsp").forward(request, response); } }
    4.4 用户登录在新闻管理系统中有三种用户:未注册的用户,注册过的用户,管理员。
    在新闻首页,管理员和注册过的用户输入登录名和密码,点击“登录”即可进入新闻管理系统。在登录前勾选“七天免登录”,系统会自动记住该用户的登录名和密码,该用户七天内即可免登录进入新闻管理系统。
    用户登录模块如图4-6所示:

    其中,管理员登录到系统后会进入后台管理页面,普通用户登录到系统后会进入个人主页。判定输入的登录名和密码是否是管理员的关键代码如下:
    if ("admin".equals(name)) { request.getSession().setAttribute("sname", name); response.sendRedirect("NewsServlet");}if (!("admin".equals(name))) { request.getSession().setAttribute("sname", name); response.sendRedirect("UserServlet");}
    4.5 管理员后台管理模块用管理员账号登录后,即可进入后台管理页面,对新闻管理系统进行管理。
    在后台管理的欢迎页面,左边是功能模块,包括用户管理、添加新闻、编辑新闻、查找新闻、添加主题、编辑主题。欢迎页面的右边有欢迎语:“欢迎来到后台管理,数据无价,谨慎操作!”
    后台管理的欢迎页面如图4-7所示:

    4.5.1 用户管理页面在后台管理页面,点击“用户管理”进入用户管理界面,可以查看到注册用户的用户信息(包括用户名和密码),点击“删除”,会弹出确认删除对话框,再点击确定,就可删除一条用户信息。
    用户管理页面如图4-8所示。

    实现删除用户信息的关键代码如下:
    private void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String usid = request.getParameter("id"); System.out.println("++++deleteUser_usid++++"+usid); Integer id=Integer.parseInt(usid); System.out.println("++++deleteUser_usid++++"+id); boolean b = userServiceImpl.deleteById(id); if (b) { request.getRequestDispatcher("UserServlet?model=show_users").forward(request, response); }}
    4.5.2 添加新闻页面在该页面中,输入新闻的各项信息:点击下拉菜单选择新闻的分类主题,输入新闻的标题、作者、内容。点击“提交”,即可成功发布一条新闻,在新闻首页可以查看到新添加的新闻。如果新闻的某项信息填写有误,点击“重置”,即可清空所有已输入信息,方便重新输入。
    添加新闻页面如图4-9所示:

    实现添加新闻功能的关键代码如下:
    private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String ntid = request.getParameter("ntid");// 获取新闻id String ntitle = request.getParameter("ntitle");// 获取新闻title String nauthor = request.getParameter("nauthor");//获取新闻的author System.out.println("---->"+nauthor); String ncontent = request.getParameter("ncontent"); News n = new News(); // request获取到的值是字符串类型,转换成integer类型的。 Integer tid = Integer.valueOf(ntid); n.setNtid(tid); n.setNtitle(ntitle); n.setNauthor(nauthor); n.setNcontent(ncontent); boolean b = newsServiceImpl.save(n); if (b) { response.sendRedirect("NewsServlet"); }}
    4.5.3 编辑新闻页面管理员进入后台管理页面后,点击编辑新闻,会显示出新闻标题列表。
    新闻标题列表如图4-10所示。

    点击新闻标题后的“修改”,就进入新闻修改页面。在修改新闻页面可以对新闻的主题、标题、作者、内容进行修改,修改完后再点击“提交”即可完成修改。或者点击“重置”,就可以清空该新闻的所有信息,再重新输入新闻的主题、标题、作者、内容等。
    点击新闻标题后的“删除”,会弹出确认删除对话框,点击“确定”即可删除一条新闻。
    新闻修改页面如图4-11所示:

    实现修改新闻功能的关键代码如下:
    private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nid = request.getParameter("nid"); // 获取新闻id String ntid = request.getParameter("ntid"); // 获取新闻主题id String ntitle = request.getParameter("ntitle"); // 获取新闻title String nauthor = request.getParameter("nauthor"); // 获取新闻author System.out.println("nauthor"+nauthor); String ncontent = request.getParameter("ncontent"); News news = new News(); // request获取到的值是字符串类型,转换成integer类型的。 Integer id = Integer.valueOf(nid); Integer tid = Integer.valueOf(ntid); news.setNid(id); news.setNtid(tid); news.setNtitle(ntitle); news.setNauthor(nauthor); news.setNcontent(ncontent); boolean b = newsServiceImpl.update(news); if (b) { response.sendRedirect("NewsServlet"); } else { response.sendRedirect("NewsServlet?model=update_jsp"); }}
    4.5.4 查找新闻页面新闻管理系统的查找新闻的功能是根据新闻的标题查找的。
    在后台管理页面中点击“查找新闻”,在查找新闻页面中输入要查找的新闻标题,点击“提交”,即可得到想要查找的新闻。
    查找新闻页面如图4-12所示:

    查找结果如图4-13所示:

    实现查找新闻功能的关键代码如下:
    /*** 按新闻标题检索新闻* * @param request* @param response*/private void search(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String ntitle = request.getParameter("ntitle"); System.out.println("++++++++"+ntitle); List<News> lst = newsServiceImpl.findNews(ntitle); System.out.println("++++++++"+lst); request.setAttribute("lst", lst); request.getRequestDispatcher("WEB-INF/news/newList01.jsp").forward(request, response);}
    4.5.5 添加主题页面在该页面输入要添加的新闻分类名称,点击“提交”,即可添加一个新闻分类。在新闻首页就可以看到新添加的分类。同时,在“添加新闻”页面的新闻主题下拉菜单中也会增加新添加的新闻主题。
    添加主题页面如图4-14所示:

    4.5.6 编辑主题页面点击主题后的“修改”,就进入主题修改页面,在修改主题页面可以对主题进行修改,再点击“提交”即可完成修改。点击主题后的“删除”,会弹出确认删除对话框,点击“确定”即可删除一个新闻分类,否则点击“取消”。
    主题列表如图4-15所示:

    修改主题页面如图4-16所示:

    4.6 普通用户功能模块普通用户登录新闻管理系统后会进入个人主页的欢迎页面。
    欢迎页面的左边是功能模块,包括查看个人信息和修改密码。欢迎页面的右边是欢迎语:欢迎来到个人主页。
    欢迎页面如图4-17所示:

    4.6.1 查看个人信息普通用户登录系统后,点击“查看个人信息”,可查看该用户的登录名和密码。
    查看个人信息的页面如图4-18所示:

    实现查看个人信息功能的关键代码如下:
    private void show_users(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub List<User> lst=userServiceImpl.findAll(); request.setAttribute("lst", lst); request.getRequestDispatcher("WEB-INF/admin/userList.jsp").forward(request, response);}
    4.6.2 修改密码普通用户进入个人主页后点击“修改密码”,输入新密码,点击“修改”,即可修改该用户的密码。如果点击“取消”则会清空已输入的新密码。
    修改密码的页面如图4-19所示:

    实现修改密码功能的关键代码如下:
    private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uname=request.getParameter("uname"); String upwd = request.getParameter("password"); User user=new User(); user.setUname(uname); user.setUpwd(upwd); boolean b=userServiceImpl.update(user); if(b){ request.getRequestDispatcher("WEB-INF/user/success.jsp").forward(request, response); }else{ response.sendRedirect("UserServlet?model=update_jsp"); }}
    4.6.3 评论新闻普通用户登录新闻管理系统后,可以点击新闻标题浏览新闻,也可以在新闻内容的下方进行评论。用户在评论框里输入评论后,点击“发表”,即可发表评论。评论列表里会显示出发表评论的用户名、评论日期和评论内容。
    评论列表如图4-20所示:

    没有注册过的用户则只可以浏览新闻,不能对新闻进行评论。匿名用户在评论框里输入评论,点击提交时,会提示“您还没登陆,请先登录”。
    评论失败的提示如图4-21所示:

    实现评论功能的关键代码如下:
    public class CommentsServlet extends HttpServlet { private static final long serialVersionUID = 1L; public CommentsServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String nid=request.getParameter("cnid"); Integer cnid=Integer.parseInt(nid); String cauthor=request.getParameter("cauthor"); String ccontent=request.getParameter("ccontent"); //添加日期的格式 Timestamp cdate=new Timestamp(System.currentTimeMillis()+8*60*60*1000); String cip=request.getRemoteAddr(); Comments comments =new Comments(cnid,ccontent,cdate,cip,cauthor); CommentsServiceImpl commentsServiceImpl=new CommentsServiceImpl(); boolean b=commentsServiceImpl.save(comments); if(b){ response.sendRedirect("NewsServlet?model=read&nid="+cnid); } }}
    5 系统的测试与评价5.1 系统测试系统测试采用黑盒测试法(Black-box Testing),黑盒测试方法,也称功能测试或数据驱动测试方法,在测试时,把程序看做一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试人员针对软件直接进行测试[16]。
    首先运行整个程序进入到网站首页,在网站首页显示出用户登录、新闻分类、新闻标题、新闻图片等模块,达到了预期效果。
    首页中的各项均是用超链接实现的,依次点击相应的功能按键和超链接,查看功能是否能够按照设计时的构想实现,例如,在点击“注册”,出现用户注册界面,填写用户的登录名、密码和确认密码,再点击“注册”,进入注册成功页面等等。依照此思想逐个点击各项功能和超链接,检查是否实现该功能。



    测试项目
    功能描述
    操作步骤/输入数据
    预期结果
    测试结果




    新闻浏览
    查看新闻的具体内容
    进入主界面,点击新闻标题
    跳转到新闻阅读页面,能看到新闻的详细内容。
    成功


    新闻分类
    将新闻按照分类分页显示
    点击新闻主题
    新闻按照对应的分类分页显示
    成功


    未注册的用户的权限:不能评论新闻
    对新闻进行评论
    进入新闻管理系统后不登录,直接点击一条新闻标题,在新闻内容的下方输入评论,然后点击“发表”
    评论不成功,提示“您还没登陆,请先登陆”。
    成功


    用户注册
    注册一个新用户
    进入主界面,点击注册,输入登录名:aaa,密码:aaaaaa,确认密码:aaaaaa,提交表单后跳转到注册成功页面。
    成功注册一个新用户
    成功


    普通用户登录
    普通用户登录系统
    进入主界面,登录名输入“aaa”,密码输入“aaaaaa”,点击登录。
    登录成功,跳转到个人主页,返回新闻首页后在左上角显示用户名。
    成功


    管理员登录
    管理员登录系统
    进入主界面,登录名输入“admin”,密码输入“admin”,点击登录。
    登录成功,跳转到后台管理页面,返回新闻首页后在左上角显示管理员名称。
    成功


    查看个人信息
    查看已登录用户的个人信息
    进入主界面,登录名输入“aaa”,密码输入“aaaaaa”,点击登录,跳转到个人主页后点击“查看个人信息”。
    能看到个人信息:登录名为aaa,密码为aaaaaa。
    成功


    修改密码
    修改登录密码
    进入主界面,登录名输入“aaa”,密码输入“aaaaaa”,点击登录,跳转到个人主页后点击“修改密码”,输入新密码并点击“修改”。提示密码修改成功后退出当前用户,用新密码重新登录。
    提示密码修改成功,用新密码重新登录后能正常登录。
    成功


    评论新闻
    对新闻进行评论
    用用户aaa登录系统,点击新闻标题,跳转到新闻阅读页面后在新闻内容下方写评论,并点击“发表”。
    评论发表成功,在评论列表里能看到发表的评论。
    成功


    查看用户信息
    查看注册用户的登录名和密码
    用管理员身份登录系统后选择“用户管理”。
    能查看到注册用户的登录名和密码。
    成功


    删除用户
    删除一个注册过的用户
    用管理员身份登录系统后选择用户管理,点击想要删除的用户信息后的“删除”,在弹出的确认删除对话框里点“确定”。然后退出管理员,用刚删除的那个用户的登录名和密码登陆系统。
    成功删除一条用户信息,退出管理员后,用刚删除的用户的信息登录系统,提示请先注册。
    成功


    添加新闻
    向系统里添加一条新闻
    用管理员身份登录系统后选择“添加新闻”,填写新闻的主题、标题、作者、内容,点击“提交”。返回新闻首页,点击新添加的新闻所属的主题,看新闻列表里是否有刚才添加的新闻的标题。
    成功添加一条新闻,在新闻首页的新闻列表里能看到新添加的新闻。
    成功


    编辑新闻
    修改已经发布过的新闻
    用管理员身份登录系统后选择“编辑新闻”,点击新闻标题后面的“修改”,进入到新闻修改页面,修改新闻的主题、标题、作者、内容,点击“提交”。
    成功修改一条新闻。
    成功


    查找新闻
    根据新闻标题查找想要的新闻
    用管理员身份登录系统后选择“查找新闻”,进入新闻查找页面后输入新闻标题,点击“提交”。
    在一个新页面显示出要查找的新闻的标题。
    成功


    删除新闻
    删除过时的新闻
    用管理员身份登录系统,在后台管理页面,点击新闻标题后面的“删除”,再点击弹出的确认删除对话框里的“确定”。返回新闻首页,点击新添加的新闻所属的主题,看新闻列表里是否有刚才添加的新闻的标题。
    成功删除一条新闻,在新闻首页的新闻列表里也看不到删除的那条新闻的标题。
    成功


    添加主题
    添加一个新闻分类
    用管理员身份登录系统后选择“添加主题”,输入主题名称,点击“提交”。
    返回新闻首页后可以看到新添加的新闻分类,添加新闻时主题的下拉菜单里也有新添加的主题。
    成功


    编辑主题
    修改已有的主题
    用管理员身份登录系统后选择“编辑主题”,点击主题后面的“修改”,进入到主题修改页面,输入新的主题名,点击“提交”。
    返回新闻首页后可以看到修改后的新闻分类。
    成功


    删除主题
    删除一个新闻分类
    用管理员身份登录系统后选择“编辑主题”,点击主题后面的“删除”,再点击弹出的确认删除对话框里的“确定”。
    返回新闻首页后可以看到被删除的新闻分类不再显示,添加新闻时主题的下拉菜单里也看不到新添加的主题。
    成功


    分页功能
    让新闻分页显示
    依次点击新闻列表右下角的“下一页”、“上一页”、“末页”、“首页”。
    分页功能正常实现,在不同的页面能看到不同的新闻标题。
    成功



    经过不断的“测试——修改——测试”的往复,该系统已经达到设计要求,各项功能都得到了完美的实现,达到了预期的效果。
    5.2 系统的评价通过以上各步工作,该新闻管理系统基本符合要求,在这里对本系统做一个简单的评价。
    本系统在设计开发时采用后台的方法,整个系统具有以下几个特点:
    安全性和可移植性较好
    可以在任何Windows系统平台上运行。系统根据其权限做相应的处理,保护数据安全,方便管理员维护数据。
    容错性能较好
    在系统测试阶段对系统进行过大量的实例测试,并有许多出错提示,加强了系统的稳定与容错性。
    结束语课题结合新闻管理工作的实际需求,在B/S架构中,以数据库技术和Java语言作为主要工具,最终完成了新闻管理系统。其功能基本符合新闻管理的需求,并提供部分系统维护功能,使用户方便进行新闻浏览和管理员对数据进行添加、修改和删除。
    通过对新闻管理系统的设计和实现,使我对新闻工作有了更全面的理解,同时也将学习到的软件工程的相关知识运用到实践中,学习并运用Java编程语言基本完成了既定设计任务。虽然设计和开发的系统在用户界面人性化设计、操作便捷性、功能完善性和系统运行稳定性等方面还存在一定不足,但已基本达成预期目标。在课题研发和开发工作中所学习到的分析问题和解决问题的方法,对自己以后的学习和工作将大有裨益。
    通过做这个系统,我知道,有些东西细节决定成败,无论怎样都不能忽视细节的东西。这不是毕业设计的结束,更不是人生在学习生涯中的结束,而是新环境、新学习、新挑战的开始。只有这样我们才能学无止境,以求得更大的发展。对于我们年轻人来说,我相信:挑战越多,机会越多。我会打足精神,努力开创新的成绩,勇敢的面对以后发生的一切,更好的提高自己,以便能够更好为社会服务,为人民服务,进而体现自己在社会发展中的价值。
    参考文献[1] 史济民,顾春华,郑红.软件工程:原理、方法与应用[M].3版.北京:高等教育出版社,2009,298.
    [2] Shari Lawrence Pfleeger.Software Engineering Theory and Practice [M].2nd ed.影印版.北京:高等教育出版社,2001,57.
    [3] 郑人杰,马素霞,殷人昆.软件工程概论[M].北京:机械工业出版社,2009,38.
    [4] 吴洁明.软件工程实例教程[M].北京:清华大学出版社,2010,40-42.
    [5] Roger Pressman.Software Engineering:A Practitioner’s Approach [M].6th ed.影印版.北京:清华大学出版社,2005,207.
    [6] Stephen R Schach.面向对象与传统软件工程:统一过程的理论和实践[M].韩松,等译.6版.北京:机械工业出版社,2006,180.
    [7] 张海潘.软件工程导论[M].北京:清华大学出版社,2004.
    [8] 马军.JAVA完全自学手册[M].北京:机械工业出版社,2007,186.
    [9] 明日科技.Java Web从入门到精通[M].北京:清华大学出版社,2012,97.
    [10] Jon Duckett.Web编程入门经典[M].杜静,敖福江译.北京:清华大学出版社,2010,109.
    [11] 姚卿达.数据库设计[M].北京:高等教育出版社,1989,186.
    [12] 王珊,萨师煊.数据库系统概论[M].4版.北京:高等教育出版社,2006,202-203.
    [13] 百度百科—实体关系图:http://baike.baidu.com/link?url=FjXNUBVZNYUiuwf1aTOURJE3QIwcPe7_61Vi5Gnb85NIo2pmORpoIH_lTez6M-Yt#3
    [14] 齐治昌,谭庆平,宁洪.软件工程[M].3版.北京:高等教育出版社,2012,165.
    [15] 郑人杰,殷人昆,陶永磊.实用软件工程[M].3版.北京:清华大学出版社,2010,171.
    [16] 朱少民.软件测试方法和技术[M].2版.北京:清华大学出版社,2010,38.
    7 评论 89 下载 2019-05-20 22:09:24 下载需要15点积分
  • 基于JSP和MySQL的网上订餐管理系统的设计与实现

    摘 要随着科学技术与经济的快速发展,网络信息技术也有了显著的提升与进步,当今的社会是一个集数字化,网络化,信息化的,并且是以网络为核心的现代化社会。伴随信息互联网的高速成长,使得互联网应用也走进家家户户的日常生活。网上订餐作为一种新的生活方式,更加新颖。
    毕业设计中,界面的设计主要使用了在jsp插入HTML语言以及JavaScript对系统的页面进行相关的加工处理完善以使得页面实现的效果尽可能的满足美观的要求。而对于后台的设计主要是使用了javaSE基础编程,及javaEE中的Jsp页面的动态编程,servlet处理交互逻辑,并且使用jdbc连接数据库,数据库则选用了更为高效的MySql数据库。
    本论文就此次毕业设计的系统内容,从餐品的管理,餐品的分类以及查询,到订餐车实现,客户对订单的处理,再到系统对订餐和餐品的管理。系统从业务流程的角度上分析,完成了订餐系统的基本功能,可是使得用户通过互联网进行点餐以及交易。相比于以往的订餐方式,网上订餐更加便捷,高效,对于餐厅更加节省人力,有利于管理,对于顾客更加省时省力。
    关键字:网上订餐系统;JSP;系统管理
    AbstractWith the rapid development of science and technology and economy, network information technology has also been improved and significant progress, the society is a set of digital, network, information, and network as the core of the modern society. With the rapid growth of information and Internet, Internet applications have entered daily life in every family. Online ordering as a new way of life, more innovative.
    The graduation design, the interface design of the main use of the HTML language and JavaScript system to insert page processing related to the perfect page to achieve the effect of as much as possible to meet the aesthetic requirements in jsp. For the background of the design is mainly used javaSE based programming, dynamic programming and javaEE Jsp page, servlet interactive logic, and use JDBC to connect to the database, the database is more efficient in MySql database.
    This paper on the graduation design of the system content, from the management of the meal, the classification of food and query, to the order cart, customer order processing, and then to the system of ordering and food management. From the point of view of the business process, the system has completed the basic functions of the ordering system, but it allows users to order and trade via the internet. Compared to the previous way of ordering, online ordering more convenient and efficient, for restaurants to save more manpower, is conducive to management, for customers more time and effort.
    Keywords: online ordering system; JSP; system management
    绪 论随着我国在本世纪科学技术与经济的快速提高,网络信息技术也有了显著的提升与进步。在我们平日生活中有很多生活方式以及习惯随着周围信息化的快速提高也有和以往相比变化越发的翻天覆地。本次毕业设计“基于jsp的网上订餐系统的设计与实现”,相比与之前传统的电话订餐,门店订餐这种靠无线电话,人工传递的方式的信息途径,这些方式解决问题的效率很低,店家(餐厅)不能及时将餐厅对菜品的调整通知顾客,顾客对于用餐需求也不能进行调整,线下的交流并不能形成方便快捷的交互。很多时候对于,餐厅以及顾客都是一种损失。由于上述缺陷,为了适应当前时代信息快速发展,数据大爆炸的趋势,采用先进的发展的网上订餐管理系统使上述的种种缺陷得以得到缓解和解决,精简了餐厅的工作流程,顾客的订餐更加便捷,从而提高了餐厅的营业额。由于网络的的快速发展,所以订餐系统随着网络也要有一定的发展与变化。因此毕业设计“基于jsp的网上订餐系统的设计与实现”是非常有必要的。网上订餐系统对订餐所涉及的两个主要用户:客户与店家(餐厅),在实现网上订餐之前,双方进行订餐工作,双方都需要花费大量不必要的时间精力。而快速发展的网络技术,使得订餐系统中所要使用的管理流程在很大程度上做到了极大的简化了,使得餐厅的管理系统更加快速高效,更加便捷。提高餐厅工作人员的整体工作效率,更加给使用订餐系统的顾客更加便捷的使用享受和良好的用户体验。
    从始至终人们都寻求便捷,舒适的生活方式。网络作为提高生活水平的重要工具,在出现后,人们逐渐对其产生了依赖,在依赖的同时也希望网络能给自己带来更方便的帮助,从而大量的销售网站,娱乐网站等等也就慢慢诞生了,这个网上订餐系统是一种基于B/S架构的一种系统模式,订餐系统网站的上手非常的方便,即使第一次登陆,通过网站的指引也会让您订餐非常顺利便捷,如同多次订餐的老顾客一般。
    此次毕业设计的系统,网上订餐系统的开发与设计,在系统可靠性,以及项目的扩展性上占有极大优势。此外对一些java相关技术进行了部分研究,设计并且实现系统,同时为以后自己的可能还要做的其他项目打下了有效以及坚实的基础。
    1 系统概述与技术介绍网上订餐系统作为一个销售管理系统,首先在页面的结构上一定要相对有自己的独特之处,凸显餐厅的风格,餐品的质量。只有如此才能从一开始吸引顾客的目光,通过美观的页面满足顾客对此类订餐系统的好感依赖以及业务功能的需求。与此同时,系统也要有先对强的实用性,系统的实用性不强,这样的系统会是的顾客产生厌恶心理,不利于一个餐厅的未来发展。当然,作为一个销售管理系统,要对顾客的点餐做数据统计,这样才能方便餐厅对该顾客的用餐习惯分析,更好的对顾客实施更加人性化的服务。
    1.1 课题背景上世纪90年代,互联网逐渐走进人们的视野,在不知不觉中改变着社会的商品交易方式。国内各大企业从认识到互联网的重要性之后,一直坚持不断的探索网上交易的可能。但是由于网络生活具有很大的虚拟性,商家的信誉很难得到保证、有关网上交易的法规未出台、物流的滞后以及其他的一些问题,都成为了网络交易发展的绊脚石。但是,社会的进步是具有持续性的,21世纪以来,各个瓶颈问题包括网上支付、物流速递等一一被攻破,网上交易的黄金时代也随之来临。
    调查显示,由于科技的进步极大地繁荣了物质生产生活,人们对于生活的便利性要求进一步提高,网上交易特别是以食品外卖为代表与大众日常生活休戚相关的网络交易量将在未来几年达到高峰。
    网上交易这一方式给人们的消费模式注入了一股新的活力,极大地冲击了原有的传统购物消费习惯。网上订餐这一方式,在90后人群中拥有大量的支持者,促使他们做出选择的,不仅仅是这一形式的便利性,还包括相关网站对于消费者的引导。
    1.2 B/S结构的介绍此次系统的设计过程主要运用到了我们在学校以及公司经常提及使用的B/S结构。所谓的B/S系统就是浏览器、服务器的系统结构。网上订餐系统使用B/S结构,主要就是需要服务端的计算机安装数据库以及服务器。而在客户端,一个浏览器就足够。服务器在服务端运行,浏览器在客户端运行,
    B/S结构作为目前最先进的软件构造技术,在用户使用的浏览器向服务器提交了一些请求之后,服务器端如果接收到了用户在浏览器端发送的请求之后,服务器端对从浏览器接收而来的请求对其进行相应的业务逻辑处理,随后将其完成处理后的结果返回给浏览器所在的客户端。
    B/S结构也是有很多种的,例如:针对OA系统的开发,这些系统主要包括应用程序的研发(基于C/S结构的开发),以及使用传统的C/S结构的跟网络技术结合的混合应用,以及到目前为止是我们常常用到的网站制作的技术。但是不可否认的是,每中结构以及技术都有自己的优点以及缺点:在此前的C/S结构中,更多的它是一种比较传统的使用较为广泛的软件开发的模式,主要是通过客户端以及数据库两层结构完成系统的实现,在两层之间还可以加入其他层次与结构,C/S作为先前传统的软件开发标准以及开发设计结构,在伴随网络和软件的开发技术快速进步,在各种新兴技术不断出现下,被取代或弥补了其结构的很多缺陷,于是也被其衍生出来的新兴结构技术在系统开发的过程中渐渐的将其取代。
    1.3 JSP技术的介绍此次网上订餐系统中页面主要使用到的技术是java的JSP技术,JSP技术之所以被广泛被使用到各种项目中去,主要也是因为其自身拥有的很多功能,这使得在项目中可以实现满足开发人员,程序员对项目所需要的效果。
    作为JSP技术的基础,servlet技术在此前的开发中一直被开发人员所应用。JSP技术的优点:

    进过一次的开发和编写,可以在多种平台运行:因为JSP/Servlet都是基于Java变成语言的,因此具有其编程语言的一个主要优点——平台无关性,这个就是著名的的“一次编写,随处运行(WORA – Write Once, Run Anywhere)”
    系统的多平台支持性:在目前已知的所有平台JSP技术可以进行任意的环境开发,并且在平台中将项目部署在任意的环境里,相比于其他技术,可以根据自己项目的需求任意的环境中拓展。这些优势相比ASP/PHP的局限性是显而易见的
    强大的可伸缩性:JSP可以运行小到从有一个jar文件,大到多台服务器进行集群和负载均衡,多到多台Application进行transaction,还有消息处理,从一台服务器到无数台服务器,Java程序编程语言显示了其巨大的能量
    功能得多态多样以及获得大多数开发工具的技术支持:这个优势和ASP有点类似,java拥有众多的的开发工具并且极为优秀好用。并且都是免费下载使用的,而且可以成功稳定得在多个平台上顺利运行
    JSP标签可扩充性:JSP对Web网页的动态构建主要是利用脚本技术和标签,JSP技术站在开发者的角度考虑允许开发者拓展JSP标签,定制专属的标签库,xml标签拥有很好的兼容性以及强大的功能,网页制作者可以充分利用,减少对脚本语言的大量依赖,利用自己定制的标签,使网页制作程序员降低了制作网页的难度以及复杂度

    1.4 JavaScript语言介绍此次毕业设计,在其中的前台jsp页面中大量的使用了前端脚本语言JavaScript。 JavaScript编程语言以其独有特性,使得他在目前的大多数项目的前台页面设计以及编程都占有重要的一席之地。由于js设计来的产品会主要运行在用户的浏览器客户端,使得只要用户点击页面的一些按钮或者特殊位置,就可以触发特定的事件进行操作,在页面的JavaScript脚本就会将事件传给客户端(浏览器),在客户端被设计好的事件就会执行进行相应的事件处理完成一系列的操作。
    网上订餐管理系统在前台页面的编写设计中就多次使用到了JavaScript这种流行的前端编程语言,众多的优势,使得很多项目的前台都是它和它发展衍生的众多类库编写的,例如我们熟知的:jQuery,easyUI,Extjs等在众多的丰富的前端js类库。
    网上订餐管理系统在很多地方都用到了JavaScript脚本语言,例如:顾客以及管理员登录页面时候的,检出数据是否有效,包括重复为空等场景。
    1.5 MySQL数据库介绍首先要说的是MySQL是一个开源免费的数据库。这也是为什么作为一个小型关系型数据库管理系统,却获得了大量的使用,当然这并不是它的最大优点。MySQL数据库拥有很多优点,比如说:MySql的适应性很好,运行和反应速度快,使用的可靠性高。与此同时,结构化查询语句是MySql数据库系统主要使用的数据库管理方式,结构化查询语言也是目前在数据库管理语言中最受人们欢迎的,也是最为常用的。因此在很多的项目系统开发中都会被开发人员关注,经常使用。由于数据库开发者的允许,MySql作为开源的软件,在官方网站和很多其他网站都可下载到各种版本的MySql数据库。并且根据个人或者开发团队的项目需要对下载的代码做出合理的修改。由此我们可以看出,作为一个小型的关系型数据库,在一些项目的管理上是一个很好的选择,当然这也是在此项目没有超出MySql的数据处理能力的范围之外。
    1.6 MyEclipse介绍此次毕业设计主要是面向顾客用户在前台页面订餐,后台管理人员对前台页面出来的数据请求进行数据处理,并对客户端页面进行及时调整,完善的管理系统。
    MyEclipse开发软件对系统项目的开发更加方便快捷,开发项目的管理更具有条理性。相比于被广泛使用的Eclipse开发软件,MyEclipse在Eclipse开发软件的基础上进行了详细的优化和功能的完善,并且对Eclipse的开发环境进行了优化,最大的限度进行了拓展。使用Eclipse中很多时候我们自己要寻找安装插件,但是MyEclipse基本会帮开发人员在使用之前就集成好了,这对于开发人员的开发是十分便利的,因此目前正在广泛使用于企业级集成开发中去。而且,MyEclipse开发软件在应用程序的整合方面也显得十分成功,如果开发人员能十分熟悉Eclipse,那么对MyEclipse的使用也一定不会陌生,因为MyEclipse的快捷键与Eclipse基本保持一致。
    1.7 MVC模式介绍此次毕业设计为了能够在设计实现上达到最初的想法及要求。并且使完成的系统可以具有一个优秀系统所拥有的一些优点:安全性高,可移植性好,跨品台性高,拓展性优秀,还能具有分布式结构。因此在项目中用到了前文所介绍的B/S结构体系,我所设计实现的订餐系统正式基于Java编程语言的B/S设计模式的。为了更加完善系统,结合在大学时期学过的计算机软件知识,我还用到了另一个结构模式,MVC三层结构,MVC三层结构主要是指基于模型model,视图view以及控制controller的结构模型,而MVC正是这三者英文的首字母缩写。
    控制器,视图,模型三层软件设计模式是MVC软件设计模式的根本。这三层模式对应到了实际项目系统中的web服务器。目前,在网上订餐管理系统中主要使用的MVC模式,如下图。

    由以上的结构图可以得知,在此次的项目系统中,前台界面页面的主要任务就是使用系统的用户可以正常的使用系统逻辑正确完成所要实现的业务。当我们使用网上订餐管理系统的时候,仅仅需要在用户的本地计算机,移动通讯设备安装一个浏览器,在这里使用的浏览器不会限制其版本,开发团队以及类型。用户就可以通过这个浏览器作为客户端与我们的网上订餐管理系统建立网络连接,用户在使用的浏览器中发送需求信息,交由在系统当中的业务逻辑进行准确的数据处理,这些过程主要是由MVC结构中的对应层次进行处理的。业务逻辑得到准确的执行处理后,将处理好的数据进行数据库的数据交互。在模型层中,数据访问层必不可少,他主要实现了当前的系统(网上订餐管理系统)对数据的增、删、改、查等数据处理操作。
    由上述的阐述,我们可以得出MVC设计模式具有众多的优势,其中主要是有:

    低耦合性,高内聚性
    有利于开发者使用,极高的重用性
    可以简单方便的使用,快速的部署
    具有比较好的可维护性,易于未来的维护
    具有生命周期本身成本较低的优势
    软件过程化的管理方法更有利于开发的进行

    2 系统需求分析2.1 开发环境此次毕业设计“基于JSP的网上订餐管理系统”的开发计算机环境主要是:

    学校配发的戴尔品牌笔记本电脑,型号是惠普242G1
    处理器为英特尔酷睿i5 3代系列
    内存容量为 4GB
    显示屏 14英寸
    显卡芯片品牌NVIDIA
    型号NVIDIA GeForce GT 730M+Intel GMA HD 4000
    硬盘品牌希捷,容量500GB
    使用的系统是Windows7旗舰版 SP1

    在我开发完成的订餐项目系统中,主要使用的数据库是当前非常受欢迎的开源免费的数据库MySQL。进行项目系统开发,发布管理的软件也是MyEclipse工具。使用到的技术,主要是JSP技术,以及前端流行的脚本语言JavaScript,还有JAVA编程语言,HTML标签 等。此次完成的系统项目,订餐管理系统是不需要使用户安装客户端程序就可以使用,用户只需要使用浏览器就可以正常的,完整的使用订餐管理系统的全部所有功能。
    2.2 需求分析参照软件开发的标准规范,参考很多成功的软件开发案例,软件开发很重要的一环就是软件需求分析。软件需求分析当中很重要的一点就是通过这次分析,真正准确了解到用户的真实需求,完整准确地项目设计以及编码开发,这样才能在项目完成之后,交给用户一个满意的系统。不仅如此,同时还能在软件开发之初,对软件项目进行风险评估。最后完成一次完整的软件开发设计。
    软件项目的需求分析这个在软件开发过程中至关重要的一环,无论在什么时候都占有着不可忽视的地位,不能被省略或者敷衍而过。这正是因为它在整个的项目开发当中有着举足轻重的作用。因为软件项目的需求分析,才能在项目的设计开发之前,充分理解用户需要,准确的明确开发的方向。在开发的过程中知道。什么功能是必须实现的,什么工作是必须完成的。对系统进行全面的定义,准确,具体的需求,才能更好的实现在项目开发当中具有极其重要的功能。
    一个完善优秀的项目系统在开发之初,开发的初期就要准备充足的资料,进行项目的需求分析。只有在这个阶段完成一个明细,详尽的需求分析,我们才能在后期的设计,编码中更好的实现系统功能,完成一个用户满意的系统。
    2.3 可行性研究分析在开发的前期,对一个项目系统进行可行性分析,这是软件开发过程中不可或缺的工作。从多个角度,维度进行可行性分析,可以将项目分析的更加透彻具体,从项目的方方面面来深入理解项目系统。
    2.3.1 技术可行性分析在目前大多数的公司使用到的软件开发工具是MyEclipse ,例如我目前实习的公司就是用的是MyEclipse2016,因此我在我此次的项目系统,网上订餐管理系统就是用到了MyEclipse 软件开发工具。ava作为一当下最受欢迎关注的编程语言,历久弥新,而且方便灵活使用,是此次开发系统的不二之选。
    2.2.2 经济的可行性分析此次毕业设计,在整个项目系统设计编码完成之后,用户不需要在自己所在的客户端安装任何的客户端应用程序,只需要正常上网就可以完成对系统的访问和使用,除此之外,只要保证项目系统被正确的部署在服务器上,并且已经正常运行。那么,用户就可在任何连接互联网的浏览器上对系统进行访问。
    2.2.3 法律可行性分析此次毕业设计“基于JSP的网上订餐管理系统的设计与实现”,不仅可以提高餐厅对订餐的管理效率,为顾客对订餐需求上提供便利,提供更加贴心优质的服务,良好的用户使用体验。而且在整个的开发过程中都符合具体的软件开发流程及规范的。在项目的的开发过程中使用到的都是一些开源的免费的数据库以及开发人员主要使用的开发工具,参考以及使用到的一些代码,也都是在开源社区和论坛分享的主要开源代码。因此,此次的网上订餐管理系统是不存在任何问题,在法律上是可行的,满足法律可行性的所有要求。
    为了实现这些要求,我对界面页面的开发做到最大化的简单易懂,将功能实现尽可能的减少不必要的步骤,做到让顾客在最短的事件内可以快速订餐,突出餐厅餐品的特色。做到只要会使用电脑查看网页,就能成功点餐。因此,在操作可行性上也十分可靠。
    3 系统概要设计3.1 系统设计概述系统的设计阶段作为在项目开的发整个过程中,最为复杂的一环,其实也是在项目开发的整个过程中极为重要的的一环,必须经过,必不可缺少。在进行系统项目的设计之前,说明系统项目已经完成了对其自身的分析与设计阶段,这是一个具有发展性的过程,将从分析阶段得出的有些抽象的用户需求进行具体的实现,编码。在对系统项目的设计过程中需要考虑众多因素,例如在系统实现过程中所面对的内在环境和外在因素,对项目进行良好的业务和功能完善以及应该具有的敬业态度。
    作为主要的任务和目标,在系统设计阶段就是为了满足在系统分析阶段提出的用户要求.因此,要从用户的要求出发在不仅可以满足系统分析阶段得出的对系统项目逻辑功能的同时,还要充分考虑到多方因素,包括技术,成本以及时间环境等相关方面。对于不论是在正在进行中的整体的设计结构还是局部的每一个部分,都有相关的技术和针对性的应对方案。在合理的要求和基础上,对项目系统所必要的需求进行满足,并且提出该系统具体到实处的实行方案,使其可以得到完整的实现,完成最初的目标以及要求。
    系统设计的主要方向以及相关要点:

    在系统设计的阶段,主要工作涉及到了绝大多数都是技术以及专业知识
    为了满足用户的需求,在系统项目的设计过程中,可以对之前已经得出的系统项目分析结论作出一些修改,当然,这是基于非原则性上的
    使整个项目系统最终可以获得成功,不仅仅需要完善的分析,严谨的设计,更需要系统项目的设计环境。这个环境不仅仅是技术环境与管理环境,更是两者的有效结合。因此,这是急不可缺的重要一点

    有上述可知系统设计的要点,那么为了更好地设计系统项目就需要了解系统设计的原则:

    易用性原则:对项目做系统设计是为了,开发出的系统项目,可以满足用户提出的需求,达到用户的满意。这种满足需求表现在各个方面,例如:用户的业务需求,用户的逻辑需求,以及使用户处理部分业务时候更加简便,提高用户的用户体验
    开发阶段原则:开发项目系统软件,在系统技术选择阶段主要是站在系统的数据结构的角度进行设计与开发,而实现功能阶段则有不同,这是需要站到用户需求以及开发人员实现的角度考虑的
    业务完整原则:设计实现的项目系统软件,要保证在完成业务的同时保证数据的完整性,减少数据的无处,例如数据库中常常出现的脏读,误读等数据误差
    规范化的业务原则:在最初的设计阶段中,系统主要是完成用户需求要求的业务,但是在实际的操作总。对于系统项目的要求是更高的,它不仅要正确的完成用户的业务要求,也要面对完善的业务流程,以及系统安全性

    3.2 系统功能分析作为网上订餐管理系统主要是为顾客提供便捷,全面的订餐服务,重点要放在面对顾客的页面功能上,其次是管理员对餐品以及餐厅的管理,系统主要模块的设计:

    前台模块

    食品展示模块食品查询模块购物车模块收银台模块用户维护模块订单查询模块公告模块
    后台模块

    食品管理模块用户管理模块管理员维护模块订单管理模块公告管理模块留言管理模块

    如图3-1系统功能层次图所示。
    主要包括这几个方面,其中顾客订餐功能模块是主要重点模块,其次是管理员管理功能模块。当订餐系统管理员使用拥有管理权限的管理员用登录管理员页面的时候。可以看到目前订餐系统中保存的用户信息数据,菜品的数据,员工的数据以及状态,订餐的具体信息,采购原材料的具体情况,以及对顾客页面的管理,例如:留言板,以及营养小贴士等等。通过管理员对餐厅的管理,给予顾客最好的网上订餐服务。
    顾客订餐功能的相对应的模块:主要是顾客进入订餐系统网站之后,可以看到整体的订餐系统网站结构,进行系统的客户端登录,注册,以及对现登陆用户的信息修改,搜索菜品,点餐,订餐,支付,留言的相关功能,通过众多的订餐系统功能。
    管理员系统管理功能相关模块:主要是餐厅管理员从后台管理页面登录管理系统之后,对订餐系统的一些具体业务的调整,可以注册新管理员,以及对现有登录管理员信息的修改,查看分析管理目前注册的顾客的信息,查看修改调整现有菜品的具体情况,新增,删除,完善菜品;对目前餐厅原材料的采购和统计;以及对餐厅员工的管理,新增删除和调整状态;更重要的是可以对目前已知订餐的及时管理,还有就是对顾客订餐页面的一些人性化管理,查看顾客留言,修改给顾客查看的营养小贴士。
    通过这个两个主要的模块,可以完成订餐系统的综合管理,包括了顾客的主要功能,注册,登录,点餐等;以及管理员对餐厅多方面的管理,完成管理员对顾客的服务交互。

    3.3 系统用例图通过管理员用例图,可以清晰的,直观的看到管理员在网上订餐管理系统中对用户订餐以及用户本身的一些主要的操作:

    管理员可以管理餐品信息

    管理员可以添加菜品信息管理员可以删除菜品信息
    管理员可以管理订单信息
    管理员可以管理订餐系统中注册的用户信息

    管理员可以删除用户注册信息管理员可以修改用户信息
    管理员可以对留言进行管理
    管理员可以对用户进行管理

    管理员用例图图,如图3-2所示。

    通过用户(顾客)用例图,可以更加直观的理解在网上订餐管理系统中主要的客户端服务,用户主要使用的功能以及进行的操作,如下:

    游客可以注册会员信息
    游客可以浏览菜品
    游客可以查看公告
    注册会员的用户可以通过注册信息登录
    会员可以在订餐页面浏览菜品信息
    会员可以修改会员信息
    会员可以对正在进行的订餐进行修改
    会员可以对完成的订餐进行查询
    会员可以进行留言

    因此,为了可以更加准确,生动的理解上述所说的用户主要使用的订餐服务功能。绘制用例图就很方便的展示了用户使用主要使用的功能,用户(顾客)用例图,如图3-3所示。

    对于主要功能的业务处理,例如网上订餐管理系统整个业务逻辑处理中最为主要的一部分就是订单处理部分,为了更加直观的理解整个业务逻辑,最对订单的具体的操作如下:

    可以通过用户操作对订单信息,菜品信息进行添加
    可以通过用户操作对订单信息,菜品信息进行处理
    可以通过用户操作对订单信息,菜品信息进行删除

    3.4 系统流程图想对订餐管理系统进行操作,管理员需要登录订餐管理系统的后台管理系统,才能进行一系列的对应管理操作。如果登录时候出现异常,登录失败等状况,系统会要求管理员核对身份密码后重新登录。登录成功之后,就可以通过订餐管理系统的后台模块对整个订餐管理系统进行正确有效的管理。对订单的处理,对菜品的修改,添加,删除。对员工的添加,删除,管理。对原材料的采购登记。订餐管理系统目前的概况,都可以从订餐管理系统的管理员模块进行查看,分析,以及做出及时的相应调整。
    如图,是订餐管理系统的后台管理员模块操作的基本流程图,通过路程图,可以更为直观的看到管理员进行登录操作时的系统业务流程,进行登录,成功进行模块的管理,失败则重新登录等操作,如图3-4管理员流程图所示。

    4 数据库设计与实现4.1 数据库的结构设计一个项目系统软件的设计开发,数据库可以说是必不可少的,没有数据库,用户的数据无法保存,系统的使用人员无法处理数据,那么整个系统可以说是没有意义,以及没有任何使用价值的。在系统项目中,数据库就是用来给用户,管理员等各种使用系统的角色进行数据存储以及取出等交互动作的。不仅如此,根据数据的数据结构的不同,数据库还会对应有不同的存储方式。
    网上订餐管理系统,主要是使用流行的关系数据库MySQL,MySQL是一个开源的免费的关系型数据库,在开发者中极为流行,极为受欢迎。他的众多优点,例如:开源,免费使用,对服务器占用更小,速度更快,是系统更加流畅。这些都使得,系统软件开发的陈本较低,用户体验更佳。
    此次,我们毕业设计“基于JSP的网上订餐管理系统的设计与实现”中主要使用到了MySQL数据库,以下,就对主要的数据表结构进行描述与说明。
    4.1.1 概念结构设计本数据库为满足网上订餐系统的要求,保证使用者信息准确充分的同时,系统的安全性也同样重要。所以,至少要拥有以下功能:

    建立数据表保存使用者注册、登录、验证等功能所需要的数据
    建立两张表,分别保存食品分类信息和食品的详细信息所需要的数据,对食品分类信息分类管理
    使用者确认下单后出现的订单应当记录,包括订单号、地址等详细信息
    订单自动生成滞后,需要记录订单的状态
    除系统管理员外,其他人不能进行系统维护,所以要建立一张表保存管理员的信息
    使用者会对餐品提出意见,那么应该有留言表,留言表内含标题、日期和留言详情

    根据以上信息,网上订餐系统的E-R图如图4-1所示。

    4.1.2 表概要说明网上订餐管理系统主要包括了9张数据表,分别是餐品菜品信息数据表c_book,用户顾客注册数据表表member,管理员数据表admin,餐品菜品类别数据表c_booktype,用户评论数据表comment,订餐车数据表gouwuche,营养小贴士数据表news,订单数据表num,订单详情信息数据表orderbook。其中最为重要的5张数据表,将会在详细描述其表结构。
    4.1.3 数据表的结构餐品菜品信息表c_book
    餐品菜品信息数据表主要是用来保存菜品的基本信息,价格,菜名,描述等,该表的结构如表4-1所示。



    字段名
    数据类型
    长度
    主键否
    描述




    id
    int
    4

    ID


    name
    varchar
    50

    菜名


    author
    varchar
    50

    厨师


    price
    varchar
    50

    价钱


    number
    varchar
    50

    编号


    type
    varchar
    50

    类别


    Sum
    varchar
    50

    数量


    Remark
    varchar
    50

    描述


    tate
    varchar
    50

    原材料


    imgpath
    varchar
    150

    菜品图片



    管理员信息数据表admin
    管理员信息数据表,主要是适用于保存管理员的基本信息。表结构如表4-2所示。



    字段名
    数据类型
    长度
    主键否
    描述




    id
    int
    4

    ID


    name
    varchar
    50

    用户名


    quanxian
    varchar
    10

    权限


    pwd
    varchar
    50

    密码



    菜品类型数据表 c_booktype
    菜品类型数据表,主要保存了当前订餐系统的菜品类型,类型可以根据餐厅的需求,管理员对其进行增加,删除,以及修改等操作管理,如表4-3所示。



    字段名
    数据类型
    长度
    主键否
    描述




    Id
    int
    4

    id


    name
    varchar
    50

    菜品类型名



    用户(顾客)注册信息数据表member
    用户注册信息数据表主要保存了,使用订餐管理系统的用户注册的信息,这张数据表极为重要,表结构如表4-4所示。



    字段名
    数据类型
    长度
    主键否
    描述




    Id
    int
    4

    id


    name
    varchar
    50

    用户名


    pwd
    varchar
    50

    密码


    sex
    varchar
    50

    性别


    realname
    varchar
    50

    真实姓名


    age
    varchar
    50

    年龄


    card
    varchar
    50

    身份证号


    address
    varchar
    150

    地址


    phone
    varchar
    50

    电话(手机)


    email
    varchar
    50

    电子邮件


    code
    varchar
    50

    邮政编码


    type
    varchar
    50

    会员



    订单详情信息数据表orderbook
    订餐详细信息数据表,主要记录了顾客订餐之后,完成的订餐,订餐中主要记录了此时用户完成的订单的详细信息。数据表的结构如表4-5所示。



    字段名
    数据类型
    长度
    主键否
    描述




    id
    int
    4

    id


    userid
    varchar
    50

    用户id编号


    bookid
    varchar
    50

    菜品id标号


    booksum
    varchar
    50

    菜品数量


    times
    varchar
    50

    订餐时间



    5 系统的实现5.1 前台模块首页作为网上订餐管理系统,展现给用户的客户端前台页面是整个项目中最为重要的一环,而首页也是使用户的留下主要印象,重要的得分点之一。一个好的首页能为系统做良好的推广效应,展现系统的主要功能,使得用户可以通过简单快捷的熟悉上手,掌握使用方法,实现自己当前的需求。前台客户端页面首页,运行效果如图5-1。

    如图5-1,我们可以看到,用户使用的首页展示了系统客户端的主要功能,包括,用户的登录,一些管理员希望用户看到的信息,以及目前餐厅主要的菜品,还有就是重要的模块功能导航栏,通过导航栏的点击,用户可以进入相应的功能模块,实现自己目前的需求,包括:详细的点餐,会员中心,订餐车,留言,找回密码等主要用户使用功能。
    首页的部分JSP页面代码:
    <table border="0" width="99%" cellspacing="0" cellpadding="0"height="100%"><tr><td><% ArrayList alNewly = (ArrayList) request.getAttribute("books"); ArrayList alType = (ArrayList) request.getAttribute("type"); int tem = 0; int x = 0; if (alNewly.size() % 3 == 0) { tem = alNewly.size() / 3; } else { tem = alNewly.size() / 3 + 1; }for (int n = 1; n <= tem; n++) { %><table cellspacing="0" cellpadding="3" width="710" border="0"><tr><% for (int i = n * 3 - 3; i < alNewly.size(); i++) { ArrayList alNewlyRow = (ArrayList) alNewly.get(i); %><td align="middle" width="710"> <table border="0" cellspacing="0" cellpadding="0"><tr><td colspan="2" align="center" bgcolor="#FFE3BB"><font color="#ff9900"><% for (int j = 0; j < alType.size(); j++) { ArrayList alTypeRow = (ArrayList) alType.get(j); if (alTypeRow.get(0).equals(alNewlyRow.get(8))) { %><a href="servlet/SearchServlet?types=<%=aTypeRow.get(0)%>"><%=alTypeRow.get(1)%></a><% break;}}%></font>
    5.2 用户注册登录管理用户在使用订餐管理系统客户端页面进行订餐。首先需要登录系统,登录之后才能享受订餐系统带来的便捷快速的订餐服务,如果当前还没有可以登录的账号,首页提供有注册用户的入口。针对已经登录的用户,若果想对自己当前所使用的用户信息进行一些调整,系统也提供了会员中心管理页面,来满足此类用户的需求。如图5-2为用户登录功能的页面:

    用户进行登录之后就可以进行点餐,搜索等相应功能的操作了。用户登录的程序流程图如图5-3所示。

    在用户进行注册成为系统的正式用户之后,就可以进行功能的使用了,但是如果出现对当前用户信息的变更操作,就可以在用户的会员中心,对当前登录的用户信息进行修改,如图5-4为用户会员中心页面效果图:

    5.3 用户订餐管理功能订餐管理系统,作为用户使用的客户端的主要功能就是给用户带来便利的网上点餐服务,此次设计实现的基于JSP的网上订餐管理系统,点餐服务主要通过两个页面来展示菜品使用户进行点餐操作,一是首页点餐,首页会展示目前主要的菜品,以及销售排行和新上菜品,根据这些推荐信息,可以给用户带来更加贴心的用户体验;二是搜索点餐,可以通过首页上方的工具栏,点击进入搜索点餐页面,通过菜品的名称或者菜品所属的类别进行针对性的搜索,然后进行点餐,如图5-5为首页点餐页面效果图。

    如图5-6为搜索点餐页面效果图。

    搜索点餐页面,通过针对性的搜索可以使用户快速的找到自己需要的菜品,进而完成自己的点餐过程。
    进行菜品搜索的servlet部分主要代码是:
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Validate vd = new Validate(); String name = vd.getUnicode(request.getParameter("name")); String types = vd.getUnicode(request.getParameter("types")); String sql = "select * from s "; String[] args = {"id","name","author","publishing","number","price","storage","brief","type","tate","sums","imgpath","price1","sums1"}; if(name != null && !name.equals("")){ sql += "where name like '%"+name+"%'";//构建对菜品名称查询的SQL语句 } if(types != null && !types.equals("")){ sql += "where type='"+types+"'";//构建对菜品类别查询的SQL语句 } SelectBean sb = new SelectBean(); ArrayList al = sb.select(sql, args); request.setAttribute("search", al); RequestDispatcher rd=request.getRequestDispatcher("/qiantai/search.jsp");//跳转到前台菜品搜索页面 rd.forward(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); }
    当用户找到自己心仪的菜品之后,进行点餐操作,所选菜品点餐成功之后,将跳转到订餐车页面,订餐车页面将展示目前为止,用户所选的菜品,如图5-7为订餐车页面效果图。

    在购物车页面中,用户可以清晰的看到目前所点的菜品信息,也可以根据目前自己的需求对已经点的菜品进行操作,例如修改数量,或者删除目前选中的菜品,甚至清空,如果认为还有所需要的菜品,可以点击继续点餐,进入点餐页面,继续点餐操作。当用户认为菜品足够,可以点击收银台,进行订单的提交。
    进行提交之后,将进入收银台页面,点击在线支付,将提供支付宝链接,这样就可以支持网上在线支付,使得用户可以付款进而完成当前的订单。如图5-9为收银台页面效果图。

    5.4 用户其他功能操作页面网上订餐管理系统,不仅能让用户进行注册,登录,修改信息的操作,更重要的是让用户得到良好的订餐功能体验。因此,用户除了可以操作上述的订餐页面之外,也可由有其他更加人性化的功能,例如在此次毕业设计“基于JSP的网上订餐管理系统”中出现的营养小贴士,以及在线留言功能。
    营养小贴士可以用过管理员在后台进行编写,让点餐的用户看到,提供更加贴心的服务,而在线留言功能可以让用户对当前订餐管理系统中存在的问题,以及改进意见进行表达,达到更好的交互体验。如图5-10为用户在线留言页面效果图。

    5.5 后台管理员登录,注册功能作为一个订餐管理系统,仅仅有用户功能的页面是远远不够的,要提供更加全面的服务,为餐厅管理员提供功能管理页面就显得十分重要。通过系统的后台管理管理页面,对餐厅做出实时的管理,了解用户点餐情况以及目前员工的管理,这样才能更好运作系统,使得用户拥有更好的用户订餐体验。
    如图5-11为后台管理员登录页面效果图,5-11为注册管理员,以及修改管理员页面效果图。

    通过登录,管理员可以进入后台管理页面对订餐系统进行管理,可以对当前登录管理员进行修改以及添加新管理员。

    5.6 后台管理员菜品管理管理员通过添加新菜品,以及修改原有菜品,对订餐系统中的菜品进行调整,通过添加菜品的类别可以对菜品进行更加完善的管理。添加菜品时候,通过添加菜名,原材料,价格,图片,以及添加目前拥有的菜品类别等信息,来给用户展示一道菜的方方面面,这样使用户通过网络放心的进行订餐。如图5-13为添加菜品页面效果图。

    5.7 后台员工及会员管理管理员登录后台管理系统之后,不仅能对现有系统注册的会员进行管理,还可以对当前餐厅的员工进行管理,可以添加,删除,修改员工信息,根据目前员工的工作状态也可以在系统中进行标注。添加了员工搜索功能,这样方便了网上订餐管理系统,后台管理模块对员工的综合管理,如图5-14为员工管理页面效果图。

    5.8 后台材料采购管理作为一个订餐管理系统,要将每一天做菜使用的原材料进行统计管理,这样才是一个完善的订餐管理系统。对于原材料采购的记录管理,这样更能方便餐厅管理员,对整个餐厅进行全面的管理,做到对每一天的食材的把控,部分食材采购量的调整,对餐厅运营的成本的管理把控。如图5-15为原材料采购管理页面效果图。

    通过对原材料的统计把控,以及对一段时间的采购单种类及数量的分析,可以知道什么时候需要采购什么材料,采购的数量的参考量,采购的具体方向。对近期,原材料价格走向进行统计分析,得出对餐厅最为合适的采购方案,避免不必要的采购,或采购的数量不准确,导致的餐厅管理成本的提高,这都是需要注意以及及时避免的。
    5.9 销售订餐及统计管理作为网上订餐管理系统,对于当前订餐订单的管理是不可或缺的,因为只有对近期订单进行分析才能知道,用户喜欢的菜品,进而进行针对化的应对,挺高服务质量,对销量高的菜品背后的工作者—厨师,进行奖励管理,提高工作效率,菜品的质量保证。对近期采购单的统计,有效的看出采购方向,和采购数量,为今后采购提供了有力的数据参考保障,避免采购人员出现不必要的事物,餐厅承担不必要的损失。如图5-16为销售订单管理页面效果图。

    如图可以看到,管理页面提供了多样的搜索条件用来搜索符合条件的订餐,例如:用户id,菜品名称,订购数量,这些搜索条件可以快速定位符合条件的订单,然后反馈给管理员来进行订单的管理。
    除此之外,还有统计管理功能,如图5-17为统计管理功能页面效果图:

    如图,统计管理页面可以清晰,完整的看到当日的订餐销售量,销售信息,以及当日对原材料的采购量信息,这方便了管理员对餐厅的管理,也为用户提供快速,优质的使用体验实现了坚实的保障。
    使管理员对当前餐厅的实时状况有了深刻的认识,哪些菜品销量高,需要提前准备,原材料需要大量采购;哪些菜品销量过低,需要减少原材料的采购,甚至下架。近期的用户更喜欢,哪些类别的菜品,是否与天气季节相关,需要对员工厨师进行具体化的调整,提供了有力的数据佐证,与数据分析的资料。这都对今后餐厅的发展十分重要,也是网上订餐管理系统可以被餐厅使用的重要原因之一。
    6 系统测试在大学四年的专业知识学习中,可以得知。作为完整的规范的软件开发流程,在完成系统设计,编码开发之后,进行软件测试是非常重要的一环。是对完成开发,即将投入使用的系统的一次性能以及质量的综合鉴定。在项目正式上线使用之前,进行的必要工作。也是对项目最初的需求分析,系统的总体设计,编码开发的检验,多方面工作的综合最终审核。
    6.1 测试方法在项目进行完整的整合与交互中,对项目系统进行全面的测试,对项目的整体进行问题的查找,在这个过程中耗时相对而言较多。但是也正是因为系统测试的存在,使得系统有了综合质量的保证。
    为了确保网上订餐系统的稳定运行,本节对主要功能模块进行测试。
    6.2 测试流程写好测试的数据以及案例,并对测试数据进行设计逻辑的处理,得出期望结果。
    6.2.1 前台首页测试
    查询模块的测试:首先点击主页正中间的查询栏,在查询栏里中输入要查找的菜品关键字,如果弹出所查找菜品的信息,则说明该模块可行。对该模块进行大量数据的测试,验证其成功无错误
    菜品分类浏览模块的测试:单击页面左边的菜品分类信息,选定某一种类后,系统会弹出属于该类别的所有菜品信息。对给模块进行大量数据的测试,验证其成功无错误,该模块能够完整地实现功能

    6.2.2 购物车模块测试在本模块中首先对修改数量单元进行了测试,如果填写的数量为可行的有效数字如1、2、3,则系统提示修改成功,如果输入的制服非法,系统默认修改数量为1。通过随机数据的测试,验证其成功无错误。假如使用者订购了同一个商品,系统就会对该商品的购买数量进行累加。
    然后对购物车是否能满足使用者的购买数量进行测试,向购物车中添加大量的食品,查看购物车是否会发生崩溃现象。经过测试,购物车完全满足设计要求,达到了预期目标。
    6.2.3 菜品管理模块测试
    添加功能的测试:在菜品添加的功能下,对于已经选定的菜品名、菜品信息、菜品的图片、价格、特价、菜品种类进行添加。通过下拉的选择列表选择菜品的类别,对于菜品图片的添加,需要选择本地的菜品图片,然后上传,当所有必须的食品信息都已经填写完毕的时候,即可上传添加。完成添加以后,随机使用几组不完整的数据对本功能进行测试,均显示失败
    删除功能的测试:以上述添加的这一条记录为例,点击删除按钮,会跳出是否删除的提示信息,点击确定按钮之后,系统返回删除成功的信息。对于菜品分类信息的删除,则需要在本分类之下已经没有菜品信息,否则将不能删除

    6.2.4 会员注册模块测试在会员注册模块中涉及到了三项数据,项目分别为密码和确认密码、使用者真实姓名、住址、性别、E_mail、QQ。测试这个模块准备的数据有:

    979332、979332、王艺博、太原市万柏林区、男、123456@qq.com、123456
    岑志云、12345、1234岑志云、太原市万柏林区、男、bzhi@123.com、6434634

    点击注册按钮,输入第一组数据,单击注册按钮网站会提示表单信息不能为空,因为表单信息要全部填写,而昵称没有填写。接着测试第二组数据,两次所输入的密码并不一样,系统会弹出提示。
    6.3 系统测试结果当本次毕业设计完成完整的项目开发之后,对本次的“基于JSP的网上订餐管理系统设计与实现”,进行了相应的测试,主要的情况如下:
    在项目开发的过程中,每一个进程的每一步都需要被全面的考虑到,从而确保系统在个个时期具备可控性和稳定性。本章注重对前台首页、购物车模块、使用者注册模块和商品管理模块进行了详细的测试说明。对这些模块进行大量数据的测试,验证其成功无错误。
    参考文献[1] 康牧,JSP动态网站开发实用教程,清华大学出版社,2009.
    [2] 戴维尔,JavaScript程序员教程,电子工业出版社,2010.
    [3] 杨学瑜,高立军,软件开发过程与项目管理,电子工业出版社,2008.
    [4].唐友国 湛洪波著.JSP网站开发详解.电子工业出版社2008年10月.
    [5]卫红春等著.信息系统分析与设计[M].北京.清华大学出版社.2009.
    [6] 张文静 林琪著.JSP程序设计.人民邮电出版社.2005.
    [7] 张孝祥、徐明华, JAVA基础与案例开发详解, 清华大学出版社, 2009.
    [8] 张洁才,Java web应用开发教程,科学出版社,2005.
    [9] 戴维尔,JavaScript程序员教程,电子工业出版社,2010.
    [10] James D. McCaffrey等著.NET软件测试自动化之道[M]. 北京.电子工业出版社.2007.
    [11] 黎连业、王华、李淑春,软件测试与测试技术,清华大学出版社,2009.
    [12] 张大方 李玮等著.软件测试技术与管理[M].湖南.湖南大学出版社,2007.
    [13] (美)Elliotte Rusty Harold著.Java Network Programming.东南大学出版社 .2005.
    [14] (美)H.M.Deitel,P.Jdeitel著.Java程序设计教程(第五版). 清华大学出版社.2004.
    [15] (美)David flanagan著.Java技术手册(第五版).东南大学出版社.2006.
    [16] (美)John J.Patrick著.SQL基础(第二版).清华大学出版社.2004.
    8 评论 185 下载 2020-08-04 12:30:59 下载需要13点积分
  • 基于Android的手机音乐播放器的设计与实现

    摘 要随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活节奏的加快,生活压力越来越大,碎片化的时间越来越多,那么一个可以在碎片化的时间内调节自己心情的产品,无疑将拥有一个巨大的市场,而且随着移动设备硬件越来越先进,人们对移动设备的软件要求也越要越高,而基于Android系统的手机音乐播放器就能很好地满足这个需求。
    Android是一个开源的基于Linux的系统,本论文将基于Android开源系统技术,使用java语言和Android Studio开发工具实现基于Android系统的音乐播放器。相对于传统的卡带式音乐播放器,MP3播放器,MP4播放器,Android系统的手机音乐播放器有着反应速度快,在线听音乐,分享心情感受,收藏歌曲等无法比拟的优势,Android系统的手机音乐播放器逐渐成为人们生活不可或缺的一部分,所以一个基于Android的音乐播放器无疑将拥有一个巨大的市场。
    本文将会详细地从需求分析开始,认真分析用户需求,然后进行界面,数据库等的设计工作。进而使用java实现需求,开发出一个高效的贴近用户的操作简单的音乐APP。最后通过系统化的测试,检验系统的稳定性。同时也要总结整个过程并指出播放器的不足之处,并提出修改的思路。
    关键词:Android,音乐播放器,高效
    AbstractWith the rapid rise of the Android system and mobile Internet, mobile phones have become an indispensable part of people’s lives. In modern people’s lives, people’s life pace is accelerated, life pressure is increasing, and fragmentation takes more and more time. Then a product that can adjust its mood in a fragmented time will undoubtedly have a huge market, and as the hardware of mobile devices becomes more and more advanced, people’s software requirements for mobile devices will also be higher, based on Android. The system’s mobile music player will be able to meet this demand.
    Android is an open source Linux-based system. This article will be based on Android open source system technology, using java language and Android Studio development tools to achieve Android-based music player. Compared to traditional cassette music players, MP3 players, MP4 players, Android mobile music players have a fast response, listen to music online, share feelings, collect songs and other incomparable advantages, Android system Mobile music players have gradually become an integral part of people’s lives, so an Android-based music player will undoubtedly have a huge market.
    This article will start from the requirements analysis in detail, carefully analyze the user requirements, and then proceed with the design of the interface and database. Then use java to realize the demand and develop an efficient and simple music APP that is close to the user. Finally, through systematic testing, the stability of the system is checked. At the same time, we must also sum up the entire process and point out the inadequacies of the player and propose revised ideas.
    Key words: Android, MusicPlayer, Efficient
    1 前言1.1 研究目的与意义现今社会生活节奏越来越快,而听音乐是舒缓压力的有效方式之一,本文的主要目的是开发一个方便快捷地为大众提供服务的音乐播放器,它可以支持多种格式播放,比如MP3,Wav等多种格式,并且能够控制音乐的播放暂停,停止,上一首,下一首等功能,界面简洁,操作简单。
    在现代生活中,能在空闲的时间里听一下音乐,无疑是一大乐趣,而随着科技的进步,人们听音乐的方式也在悄悄地改变,从传统的MP3转到了智能手机,这时候一个好的音乐APP就可以满足你要求的一切,所以本系统选择移动手机作为开发平台。
    目前,移动互联网已经超越传统PC,成为最大的互联网市场,在庞大的手机市场中,主流的手机操作系统包括Android,IOS,Windows mobile,相对于Windows mobile的一蹶不振,IOS的封闭,Android系统由于它的开放性,吸引了越来越多的开发者投身于Android开发社区中,Android成为现今最受欢迎的系统,所以本文选择Android作为开发的目的系统。
    综上,本文选择为基于Android系统的手机音乐播放器,传统的手机音乐播放器一味地追求功能强大而忽略了CPU和内存占用率过大,对低端智能手机用户不友好,所以该APP追求的是一个更加简洁,通用性广的音乐播发器,同时本系统也会在这基础上追求为用户提供更多音乐资源,致力于打造一个最适合大部分用户的APP,同时本人也可以借助这个机会学习Android移动平台的开发技能。
    1.2 研究概况首先简单介绍一下Android系统,Android开始的时候是Rubin Andy团队开发的一个独立的手机系统,他是基于Linux内核,后来(2005年)该系统被Google公司收购,2007年11月Google宣布退出基于Linux的Android开源系统,而这时正值Apple发布革命性产品iPhone。发展到现在,Android已经更新的8.0,Android也经历了11个年头,也成为了市场占有率最高的系统。根据最新市场调查,在中国市场,Android市场份额上升7.2%,达到79.9%,iOS用户则下滑5.4%,Windows几乎面临“绝迹”,而且还具有上升的趋势。
    在Android系统中主流的音乐播放器有百度音乐,酷狗音乐、QQ音乐、天天动听、网易云音乐。
    百度音乐的前身为“千千静听”,二者进行整合之后更是发挥了自身优势,为用户带来了更加完美的视听享受。且百度音乐重视原创和正版,在应用中还专门设立了原创歌曲榜单。百度音乐独有场景电台功能,可根据当前的时间为您推荐不同种类的歌曲,相当的智能化,比如午后会为您推荐一些慵懒又温暖的音乐,而在下班的路上则会推荐一些较为轻快的乐曲。除此之外,百度音乐还有K歌台服务,这里有大量歌曲供您选择,且提供伴奏曲,您尽可以举着手机高歌一曲,保存后还可分享给好友们收听,或请他们也来PK一下,不只是听歌,百度音乐还能满足您唱歌的需求。
    酷狗算是老牌的音乐播放器了,出色的交互设计和良好的使用体验让它积累了不少忠实用户,酷狗音乐拥有海量乐曲库,并且都是正版,这是因为酷狗与多家媒体或唱片公司都是合作伙伴关系,不但在质量上有所保证,更新速度也能保持同步。酷狗音乐中有个功能叫做“演艺直播”,这里聚集着大量的草根明星,用自己的歌喉为用户们献上一首首精心录制的歌曲,用户可为她送礼物和她交流,也能自己点歌,和舞台上的明星不同,这里多了一丝亲切的味道。
    QQ音乐,但它的优势在于,结合着QQ自身的优势,让用户可以享受到更多的服务。听歌识曲应该是音乐客户端的标准配置了,可QQ音乐却将识曲与摇一摇相结合,无需任何点击,晃动一下即可启动,不仅方便还增添了不少乐趣。QQ音乐为用户们准备了明星部落,这里汇聚了明星们的一手消息,和大量的话题,保证能满足用户追星的需求。
    天天动听是上海水渡石旗下的一款音乐播放器,以其绚丽的可视化效果赢得了用户的喜爱,在播放时封面还会随着音乐一起变换,在视觉和听觉上都是一种享受。它功能丰富实用,支持多种格式的歌曲,操作简单流畅,听歌也能变得如此简单,它功能丰富实用,支持多种格式的歌曲,操作简单流畅,听歌也能变得如此简单,天天动听提供了摇一摇切歌功能,且摇的力度也不尽相同。用户可自己设置首页显示内容,个性化做的非常出众。
    网易云音乐上线仅有几年的时间,但是它却迅速成为了用户们追捧的对象,不止是因为其出众的界面设计,在操作体验上也令人印象深刻,网易云音乐在功能上也有创新,它融入了流行的社交元素,让用户在听歌之外,还能实现分享交流的目的。网易云音乐的与众不同之处,是社交,评论、分享让大家因为对音乐的共同品味而走到了一起,除此之外就是主播电台栏目,音乐故事、情感调频、娱乐八卦,还有热度极高的明星做主播,与听CD的感觉完全不同,偶像与粉丝之间消除了隔阂感,距离更近一些。当然其它的功能在网易云音乐中也能找到,比如听歌识曲、定时停止播放,还可以更换主题皮肤。
    1.3 论文的主要工作本文主要针对播放器的基本功能进行实现,主要研究内容分为:对播放界面的优化,美观的播放界面会给用户带来更好的体验,文中主要提到对图片毛玻璃效果的实现,基于百度音乐API的接口实现访问,跨进进程调度音乐播放器,最后还使用高德地图API实现实时的天气预报功能。
    1.4 论文的结构本论文各章内容安排如下:

    第一章:前言,介绍了国内的Android手机音乐播放器发展现状,并进一步分析了这些软件对于用户使用的一些不足
    第二章:开发技术及工具的介绍,这里主要阐述Android系统的发展和架构,Retrofit和Rxjava作为Android客户端访问网络的的框架,和使用MVP的设计模式,使用Android Studio 开发Android端,Idea作为后台的开发工具,JavaEE技术,MySQL数据库,Spring-Boot框架
    第三章:需求分析。通过对该系统实现的可行性做了分析,在了解需求的基础上,对系统的功能需求做了阐述,采用了用例图、用例简介、活动图、包图等对系统的流程进行了分析
    第四章:系统总体设计。概括分析说明了音乐播放器的主要功能,在了解需求的基础上,设计了系统的总体功能模块。从概念结构设计、物理结构设计及数据库设计三方面对系统的设计进行介绍
    第五章:系统详细设计。分别通过时序图、界面、核心代码(内附界面截图及精髓技术的代码)。阐述播放器播放音乐流程。并介绍了本文实践项目的一些亮点与独到之处
    第六章:系统测试。对目前常用的测试技术进行了介绍并介绍了测试该系统的方法
    第七章:结束语。总结整个设计,并说明不足及进一步改善的方向

    2 开发技术及工具的介绍在本章中,本系统主要采用Retrofit和Rxjava作为Android客户端访问网络的的框架,使用MVP的设计模式,使用Android Studio 开发Android端,Idea作为后台的开发工具,使用JavaEE技术,使用MySQL作为后台数据库,Spring-Boot框架。
    2.1 Android系统简介Android是一个基于Linux内核的开放源代码移动操作系统,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发,主要设计用于触屏移动设备如智能手机和平板电脑与其他便携式设备。
    Android系统最初并不是由Google公司研发的,Android最初由安迪•鲁宾(Andy Rubin)的团队开发制作,最初开发这个系统的目的是创建一个数码相机的先进操作系统;但是后来发现市场需求不够大,加上智能手机市场快速成长,于是Android成为一款面向智能手机的操作系统。于2005年7月11日被美国科技企业Google收购。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商成立开放手持设备联盟来共同研发改良Android,随后,Google以Apache免费开放源代码许可证的授权方式,发布了Android的源代码,开放源代码加速了Android普及,让生产商推出搭载Android的智能手机,Android后来更逐渐拓展到平板电脑及其他领域上。随着时间的推移,Android系统逐渐强大起来,现在Android已经成为了全球最大的移动操作系统,Android从面世以来已经有二十多个版本了在这几年的发展过程中,谷歌为Android建立了一个完整的生态系统[5]。Android系统的主要厂商有SAMSUNG,华为,HTC,OPPO,VIVO,小米等。目前最新的额Android版本是Android 8.1(更智能、更迅捷、更强大。广受世人喜爱的不仅仅是曲奇饼干,更是为您打造的全新 Android 系统[1]) 。
    Android系统由高到低分为Application层、Application Framework层、Libraries层、AndroidRuntime层,和 Linux 内核层。蓝色的代表java程序,黄色的代码为运行JAVA程序而实现的虚拟机,绿色部分为C/C和和语言编写的程序库,红色的代码内核(linux内核和driver)。在Application Framework之下,由C/C和和的程序库组成,通过JNI完成从JAVA到C的调用。

    2.1.1 Application所有的应用程序都是使用JAVA语言编写的,每一个应用程序由一个或者多个活动组成,活动必须以Activity类为超类,活动类似于操作系统上的进程,但是活动比操作系统的进程要更为灵活,与进程类似的是,活动在多种状态之间进行切换。利用JAVA的跨平台性质,基于Android框架开发的应用程序可以不用编译运行于任何一台安装有android系统的平台,这点正是Android的精髓所在[6]。
    2.1.2 Application Framework应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。帮助程序员快速的开发程序,并且该应用程序重用机制也使用户可以方便的替换程序组件[11]。
    2.1.3 LibrariesAndroid包含一个C/C和和库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库。
    2.1.4 Android Runtime层Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
    2.1.5 Linux内核Android 的核心系统服务依赖于 Linux 2.6 内核 ,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。
    2.2 Retrofit技术框架A type-safe HTTP client for Android and Java[2],这是Retrofit官网对Retrofit的定义。Retrofit 是 Square公司旗下的类型安全的 HTTP 客户端,支持 Android 和 Java 等,它能将你的 HTTP API 转换为 Java 接口。Retrofit其实就是对okhttp做了进一步一层封装优化。用户只需要通过简单的配置就能使用Retrofit来进行网络请求了。
    Retrofit能够直接返回Bean对象,例如如果用户进行一个网络接口的请求,返回来一串json字符串。那么这个时候一般用户都要拿到这个json字符串后进行解析得到对应的Bean对象,Retrofit只要依赖一下Gson的转换库然后进行简单的配置就能够直接拿到Bean对象了,不需要用户自己去解析。
    2.3 Rxjava技术框架RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences[3]。Rxjava和Retrofit都是由Square公司开发的开源框架,Rxjava一般配合Retrofit一起使用,RxJava是JVM的响应式编程扩展是一个为Java虚拟机编写的使用可观察序列的构建异步的基于事件的程序的类库。它基于观察者模式实现对数据/事件的序列的支持,并添加了一些操作符,允许你以声明式构建序列, 使得开发者无需关心底层的线程、同步、线程安全和并发数据结构。
    2.4 MVP框架技术简介对于一个应用而言用户需要对它抽象出各个层面,而在MVP架构中它将UI界面和数据进行隔离,所以用户的应用也就分为三个层次。

    View:对于View层也是视图层,在View层中只负责对数据的展示,提供友好的界面与用户进行交互。在Android开发中通常将Activity或者Fragment作为View层
    Model:对于Model层也是数据层。它区别于MVC架构中的Model,在这里不仅仅只是数据模型。在MVP架构中Model它负责对数据的存取操作,例如对数据库的读写,网络的数据的请求等
    Presenter:对于Presenter层他是连接View层与Model层的桥梁并对业务逻辑进行处理。在MVP架构中Model与View无法直接进行交互。所以在Presenter层它会从Model层获得所需要的数据,进行一些适当的处理后交由View层进行显示。这样通过Presenter将View与Model进行隔离,使得View和Model之间不存在耦合,同时也将业务逻辑从View中抽离。更好的使得单元测试得以实现[14]

    下图很好的展示了MVP各个组件间的关系:

    2.5 Android studio开发工具简介Android Studio是一个为Android平台开发程序的集成开发环境。2013年5月16日在Google I/O上发布,可供开发者免费使用。2013年5月发布早期预览版本,版本号为0.1。2014年6月发布0.8版本,至此进入beta阶段。第一个稳定版本1.0于2014年12月8日发布。Android Studio基于JetBrains IntelliJ IDEA,为Android开发特殊定制,并在Windows、OS X和Linux平台上均可运行。
    Android Studio 是基于 IntelliJ IDEA 的官方 Android 应用开发集成开发环境 (IDE)。 除了 IntelliJ 强大的代码编辑器和开发者工具,Android Studio 提供了更多可提高 Android 应用构建效率的功能,例如:

    基于 Gradle 的灵活构建系统
    快速且功能丰富的模拟器
    可针对所有 Android 设备进行开发的统一环境
    Instant Run,可将变更推送到正在运行的应用,无需构建新的 APK
    可帮助您构建常用应用功能和导入示例代码的代码模板和 GitHub 集成
    丰富的测试工具和框架
    可捕捉性能、易用性、版本兼容性以及其他问题的 Lint 工具
    C和和 和 NDK 支持
    内置对 Google 云端平台的支持,可轻松集成 Google Cloud Messaging 和 App 引擎
    对最新的Google主推的开发语言Kotlin进行支持

    目前Android Studio的最新版本时3.1。
    2.6 IntelliJ IDEA开发工具简介IntelliJ IDEA是一种商业化销售的Java集成开发环境(Integrated Development Environment,IDE)工具软件,由捷克软件公司JetBrains在2001年1月时推出最初版。
    IntelliJ IDEA是用于开发计算机软件的Java集成开发环境(IDE)。 它由JetBrains(以前称为IntelliJ)开发,可作为Apache 2许可社区版本和专有商业版本提供。 两者均可用于商业开发。
    IntelliJ IDEA能尽可能地促进程序员的编程速度。它包括了很多辅助的功能,并且与Java结合得相当好。不同的工具窗口围绕在主编程窗口周围,当鼠标点到时即可 打开,无用时也可轻松关闭,使用户得到了最大化的有效屏幕范围。以技术为导向的IDEA集成了调试器,支持本地和远程的调试,即使用户需要修改一些设置上 的东西使用户的工作顺利进展。另外,它还提供了通常的监视,分步调试以及手动设置断点功能,在这种断点模式下,用户可以自动地在断点之外设置现场访问,甚 至可以浏览不同的变量的值。IDE支持多重的JVM设置,几个编译程序和Ant建造系统,并且,它使得设置多重的自定义的类途径变得简单。
    IntelliJ IDEA是一个相对较新的Java IDE。它是Java开发环境中最为有用的一个。高度优化的IntelleJ Idea使普通任务变得相当容易,Idea支持很多整合功能,更重要的使它们设计的好容易使用。Idea支持XML中的代码实现,Idea同时还会校正 XML,Idea支持JSP的结构。作用于普通Java代码的众多功能同样适用于JSP(比如整合功能),同时支持JSP调试;支持EJB,尽管它不包括 对个别应用服务器的特殊支持。Idea支持Ant建立工具,不仅是运行目标它还支持编译与运行程序前后运行目标,另外也支持绑定键盘快捷键。在编辑一个 Ant建立XML文件时,Idea还对组成Ant工程的XML部分提供支持。IntelliJ IDEA 被称为是最好的JAVA IDE开发平台,这套软件就是以其聪明的即时分析和方便的 refactoring 功能深获大家所喜爱。缺点是较复杂,对初学者来说,理解起来比较困难。
    2.7 PowerDesign工具介绍Power Designer 是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,他几乎包括了数据库模型设计的全过程。利用Power Designer可以制作数据流程图、概念数据模型、物理数据模型,还可以为数据仓库制作结构模型,也能对团队设计模型进行控制。他可以与许多流行的数据库设计软件,例如PowberBuilder,Delphi,VB等相配合使来缩短开发时间和使系统设计更优化。
    2.8 Rotation Rose简介由于本系统使用RUP设计模式,需要建立可视化建模。可视化建模(VISUAL MODELING)是利用围绕现实想法组织模型的一种思考问题的方法。模型对于了解问题、与项目相关的每个人(客户、行业专家、分析师、设计者等)沟通、模仿企业流程、准备文档、设计程序和数据库来说都是有用的。建模促进了对需求的更好的理解、更清晰的设计、更加容易维护的系统。
    Rational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具。用于可视化建模和公司级水平软件应用的组件构造。
    Rational Rose 是一个完全的,具有能满足所有建模环境(Web开发,数据建模,Visual Studio和 C和和 )需求能力和灵活性的一套解决方案。Rose 允许开发人员,项目经理,系统工程师和分析人员在软件开发周期内在将需求和系统的体系架构转换成代码,消除浪费的消耗,对需求和系统的体系架构进行可视化,理解和精练。通过在软件开发周期内使用同一种建模工具可以确保更快更好的创建满足客户需求的可扩展的、灵活的并且可靠的应用系统。
    2.9 Spring-boot技术简介Spring Boot favors convention over configuration and is designed to get you up and running as quickly as possible[4]。Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
    从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。简便起见,该框架也提供了命令行界面,它可以用来运行和测试Boot应用。框架的发布版本,包括集成的CLI(命令行界面),可以在Spring仓库中手动下载和安装。
    要进行打包和分发的工程会依赖于像Maven或Gradle这样的构建系统。为了简化依赖图,Boot的功能是模块化的,通过导入Boot所谓的“starter”模块,可以将许多的依赖添加到工程之中。为了更容易地管理依赖版本和使用默认配置,框架提供了一个parent POM,工程可以继承它。
    2.10 Mysql数据库简介MySQL Enterprise Edition includes the most comprehensive set of advanced features, management tools and technical support to achieve the highest levels of MySQL scalability, security, reliability, and uptime。 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言—结构化查询语言(SQL)进行数据库管理。由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
    MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
    MySQL,虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。它的历史也富有传奇性。
    2.11 Glide框架Glide is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a simple and easy to use interface。[7]在泰国举行的谷歌开发者论坛上,谷歌为开发者介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。
    Glide中有一部分单词,用英文单词可能在行文中更加合适,还有一些词在Glide中有特别的含义,这里简要说明一下:

    View:一般情况下,指Android中的View及其子类控件(包括自定义的),尤其指ImageView。这些控件可在上面绘制Drawable
    Target:Glide中重要的概念,目标。它即可以指封装了一个View的Target(ViewTarget),也可以不包含View(SimpleTarget)
    Drawable:指Android中的Drawable类或者它的子类,如BitmapDrawable等。或者Glide中继承Drawable实现的自定义Drawable(如GifDrawable等)。Request - 加载请求,可以是网络请求或者其他任何下载图片的请求,也是Glide中的一个类
    Model:数据源的提供者,如Url,文件路径等,可以从model中获取InputStream
    Signature:签名,可以唯一地标识一个对象
    recycle():Glide中Resource类有此方法,表示该资源不被引用,可以放入池中(此时并没有释放空间)。Android中Bitmap也有此方法,表示释放Bitmap占用的内存

    2.12 MybatisMyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。[9]MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    3 需求分析3.1 系统概述本系统主要的用户为广大的Android手机用户提供音乐播放,歌曲下载,歌迷互动三大模块功能。
    3.2 系统分析3.2.1 系统需求分析随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活节奏的加快,生活压力越来越大,碎片化的时间越来越多,那么一个可以在碎片化的时间内调节自己心情的产品,无疑将拥有一个巨大的市场,而基于Android系统的手机音乐播放器就能很好地满足这个需求。
    通过调查分析,本系统的用户为广大的Android手机用户,用户可以通过本系统实现音乐播放的基本功能包括播放,暂停,上一首,下一首等。用户还可以分享歌曲,对歌曲进行评论或者点赞别人的评论,下载歌曲,具体需求如下:

    音乐播放,音乐播放包括了音乐播放的基本功能:开始,暂停,上一首,下一首,同时还可以滑动唱片来实现切换上下首,通过拖动进度条来切换到音乐的不同位置
    歌曲下载,首先用户需要搜索所需要的歌曲,然后点击下载。同时用户可以搜索不同平台的歌曲,这样就可以不会因为不同版权而听不到音乐
    乐迷互动,用户可以通过在播放页面的评论按钮评论歌曲,进入评论界面后还可以对自己喜欢的评论进行点赞或者评论,同时歌迷也可以通过分享到第三方平台一起享受音乐带来的乐趣

    3.2.2 系统可行性分析
    经济可行性:本系统作为一个毕业设计,并不需要任何的开发经费,而且本人也可以通过这次机会提升本人的Android开发技术和后台技术。并且本系统由于其简介的界面设计和丰富的资源平台将在这个巨大的市场有很大的发展空间
    技术可行性: 为了保证系统开发成功,必须采用RUP的系统开发方法。并且采取主流的MVP设计框架,运用成熟的技术比如Rxjava和Retrofit,还有Glide等。后台也采用了目前主流的MySQL作为数据库,数据安全得到了很好的保障,Tomcat 8.5作为服务器,使用Spring-Boot简易开发

    就本人而言,本人有系统地学习Android开发基础同时也有不错的Android开发技术,和Retrofit和Rxjava的开发经验,也有Spring-Boot的开发技术,所以技术可行性上是没有问题的。
    3.2.3 系统用力模型分析3.2.3.1 包图
    3.2.3.2 用例图及其用例简介用例图定义:由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。
    音乐播放用例:本用例可以通过通过播放器进行对音乐播放的基本操作,包括上一首,下一首,播放,暂停,还有拖动到某一时间点的功能。

    歌曲下载,首先用户需要搜索所需要的歌曲,然后点击下载。同时用户可以搜索不同平台的歌曲,这样就可以不会因为不同版权而听不到音乐。

    乐迷互动,用户可以通过在播放页面的评论按钮评论歌曲,进入评论界面后还可以对自己喜欢的评论进行点赞或者评论,同时歌迷也可以通过分享到第三方平台一起享受音乐带来的乐趣。

    3.3 系统用例分析本文将采用活动图来阐述系统的业务用例实现的工作流程,通过业务工作流程说明业务为向所服务的业务主角提供其所需的价值而必须完成的工作。业务用例由一系列活动组成,它们共同为业务主角生成某些工件。工作流程通常包括一个基本工作流程和一个或多个备选工作流程。工作流程的结构使用活动图来进行说明。
    3.3.1 用例阐述3.3.1.1 播放音乐
    基本流

    用户启动应用并进入播放界面后播放界面有播放,上一首,下一首三个按钮,用户点击播放按钮系统监听到用户点击播放按钮的回调后,系统查找播放列表,判断播列表是否有歌曲。系统找到歌曲,系统将歌曲信息发送给MediaPalyer,MediaPlayer根据歌曲信息找到播放源进行播放
    备选流

    系统在监听到用户点击播放按钮的回调后,系统查找播放列表,判断播放列表是否有歌曲。系统没有找到歌曲,系统提示用户播放列表为空

    3.3.1.2 暂停播放
    基本流

    用户处于播放界面,用户点击暂停按钮系统监听到用户点击暂停按钮的回调后,系统判断现在是否处于播放状态,系统处于播放状态。系统通知MediaPlayer暂停播放音乐,MediaPalyer暂停播放音乐
    备选流

    系统监听到用户点击暂停按钮的回调后,系统判断现在是否处于播放状态,系统并没有处于播放状态。提示用户现在是暂停状态

    3.3.1.3 播放上一首
    基本流

    用户启动应用并进入播放界面后播放界面有播放,上一首,下一首三个按钮,用户点击上一首按钮系统监听到用户点击播放按钮的回调后,系统查找播放列表,判断播列表是否有上一首歌曲。系统找到歌曲,系统将歌曲信息发送给MediaPalyer,MediaPlayer根据歌曲信息找到播放源进行播放
    备选流

    系统在监听到用户点击播放按钮的回调后,系统查找播放列表,判断播放列表是否有上一首歌曲。系统没有找到歌曲,系统提示用户播放列表没有上一首歌曲

    3.3.1.4 播放下一首
    基本流

    用户启动应用并进入播放界面后播放界面有播放,上一首,下一首三个按钮,用户点击下一首按钮系统监听到用户点击播放按钮的回调后,系统查找播放列表,判断播列表是否有下一首歌曲。系统找到歌曲,系统将歌曲信息发送给MediaPalyer,MediaPlayer根据歌曲信息找到播放源进行播放
    备选流

    系统在监听到用户点击播放按钮的回调后,系统查找播放列表,判断播放列表是否有下一首歌曲。系统没有找到歌曲,系统提示用户播放列表没有下一首歌曲

    3.3.1.5 歌曲下载
    基本流

    用户进入在线音乐并点击下载音乐系统弹出下载页面,并且下载音乐
    备选流

    假如网络错误,系统弹出错误界面

    3.3.1.6 评论歌曲
    基本流

    用户点击菜单的评论歌曲系统弹出输入框用户输入评论并点击提交,系统提交数据
    备选流

    假如网络错误,系统弹出错误界面。

    3.3.1.7 分享歌曲
    基本流

    用户点击分享按钮系统弹出分享途径选择,用户选择途径,系统根据选择分享到所选择的平台
    备选流

    假如网络错误,系统弹出错误界面

    3.4 领域涉及模型
    4 系统设计4.1 概念模型CDM:concept data model,即概念数据模型。简称概念模型,是面向数据库用户的实现世界的模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据管理系统(Database Management System,简称DBMS)无关。概念数据模型必须换成逻辑数据模型,才能在DBMS中实现。其只描述信息的特征和强调语义,而不涉及信息在计算机中的表示,是现实世界到信息世界的第一层抽象,根据需求分析及系统设计综合考虑,本系统的概念模型如下:

    4.2 物理模型PDM(Physical Data Model)即物理数据模型,提供了系统初始设计所需要的基础元素,以及相关元素之间的关系;数据库的物理设计阶段必须在此基础上进行详细的后台设计,包括数据库的存储过程、操作、触发、视图和索引表等;本系统的物理如下图:

    4.3 数据库设计根据关系化得到的各个模式,创建音乐播放器系统的各数据表如下。
    4.3.1 歌曲表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    ID
    songid
    bigint


    X


    唱片ID
    albumid
    bigint





    歌手ID
    singer_id
    bigint





    歌曲名
    songname
    varchar(32)
    32




    歌手名
    singername
    varchar(20)
    20




    播放链接
    m4a
    varchar(255)
    255




    下载地址
    downUrl
    varchar(255)
    255




    唱片小图
    albumpic_small
    varchar(255)
    255




    唱片大图
    albumpic_big
    varchar(255)
    255




    唱片名
    albumname
    varchar(32)
    32




    4.3.2 唱片表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    唱片ID
    albumid
    bigint


    X


    唱片名
    albumname
    varchar(20)
    20




    唱片大图
    albumpic_big
    varchar(255)
    255




    唱片小图
    albumpic_small
    varchar(255)
    255




    4.3.3 歌手表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    歌手ID
    singer_id
    bigint


    X


    歌手名
    singername
    varchar(20)
    20




    4.3.4 评论表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    评论ID
    comment_id
    bigint


    X


    用户ID
    user_id
    bigint





    ID
    songid
    bigint





    评论内容
    content
    varchar(517)
    517




    时间
    data
    date





    对应的评论的id
    to_comment_id
    bigint





    用户表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    用户ID
    user_id
    bigint


    X


    用户名
    user_name
    varchar(255)
    255




    4.4 目录结构设计4.4.1 RUP面向对象设计模式的可视化建模用例视图

    4.4.2 客户端工程文件目录图
    目录文件说明:

    Adapter:存放各种适配器
    Aidl:存放在不同进程间传递的Entity
    Application:存放Android的Application
    Contract:存放一下比如URl或者常量
    MVP

    base:存放BaseModle,BasePresent的接口和抽象类其他基于MVP模式的模块
    Interfac:存放一下监听接口
    Service:存放Android的Service
    Tool:存放一下工具类
    Weight:存放一下自定义的控件

    4.4.3 服务端工程文件目录图
    目录文件解释:

    controller:存放控制类,即各个请求相应的逻辑处理
    bean:存放数据实体类Entity
    util:存放开发的公共资源处理类和工具类
    repository:DAO层接口
    service:service层
    annotation:注解处理器
    map:Mybatis的Mapper
    Modle:Modle层
    tool:工具类

    5 系统详细设计5.1 系统时序图5.1.1 播放音乐
    5.2 系统界面及其核心代码5.2.1 播放器界面的实现
    播放界面的xml代码:

    播放控制代码:(播放器和界面分开为两个进程,界面使用AIDL远程控制播放器的进程)


    AIDL接口(通过在AIDL接口定义一个注册监听器的方法使得界面的进程可以接收到播放界面进程的返回参数,然后可以根据参数判断播放进程的状态):


    关键代码如下(歌词主要是通过一个Recycleview实现,通过解析lrc文件获取歌词和不同的时间段中间的歌词位置):


    播放列表主要使用Popwindwos实现,弹出播放列表的时候播放背景变灰,然后监控背景的点击事件,当被点击时播放列表收回,同时还为弹出很收回设置动画,用于获得更好的用户体验。
    关键代码:


    Android使用sharePrefrence来保存本地音乐列表,要获取本地音乐只需要扫描本地的sharePrefrence获取本地的音乐,为了保证主线程不被阻塞,使用AsynTask进行扫描数据,在OnpostExcute刷新界面数据。
    关键代码:



    分享歌曲是通过Android的系统分享途径分享音乐。
    关键代码:

    同时还可以删除音乐,通过删除音乐文件然后重新扫描本地歌曲的方法来删除歌曲;设置为铃声,通过Android系统提供的方法进行设置,这个需要Android系统的写入权限来实现。



    本系统是使用百度音乐API来获取音乐榜单,主要分类有:百度热歌榜,百度新歌榜,华语金曲榜,欧美金曲榜,情歌对唱榜,网络歌曲榜,经典老歌榜,摇滚榜,KTV热歌榜,Billboard,Hito中文版,叱咤歌曲榜等十二个榜单,适应更多用户的需求。列表的封面使用榜单第一名的歌曲,榜单显示全三场的歌曲的名字和歌手。
    关键代码:


    榜单详情使用Google原生的MaterialDesign风格,头部是可折叠的ToolBar,下面是一个RecycleView。
    界面详情:


    分享的实现很本地歌曲的分享是一样的,都是通过Android系统分享的途径来进行分享歌曲,同时也可以支持很多平台的分享,包括当前最流行的QQ和微信。
    关键代码:


    下载歌曲时会判断当前的网络状态,假如时使用移动网络那么会提醒是否要继续下载。
    代码实现:


    下载歌曲时会在通知栏显示下载内容和进度,这是调用系统的DownloadManger实现。
    关键代码:


    当DownloadManger下载完成后会有一个回调,可以通过回调来刷新本地歌曲的列表。
    关键代码:


    Android端可以通过播放界面的菜单进行评论歌曲,当点击发送时会向服务器发送该歌曲的ID和评论内容还有当点的登陆的user,所以要使用该功能必须要登陆以后,代码中的Contract.TOKEN是当用户登陆之后服务器返回的一串token值。
    关键代码:


    用户可以点击评论然后输入内容对已有的评论进行评论。

    在主菜单界面有天气的功能,这个是继承了高德地图API的定位服务和天气服务,首先先定位用户的经纬度,然后将经纬度发送给高德地图服务后台来获取当前的天气状况。
    关键代码:




    这是登陆和注册页面,登陆和注册页面可以相互切换,登陆只需要用户名和密码,点击登录后,Android端会向后台发送登陆验证,假如验证成功,就会向Android端返回一串TOKEN值,当使用到必须要登陆才能使用的服务比如评论歌曲时,Android端会给服务器的请求Http的header里面添加TOKEN值,服务器通过这串TOKEN值解析出用户,然后进行其他相关操作,同时Android端有一个记住密码的功能,只要用户有登陆成功,那么Android端就会在SharePrefernce报错密码和用户名。下次再次点击登录的时候就可以直接显示用户名和密码,方便用户操作。
    关键代码:


    搜索歌曲也是使用百度音乐API接口,可以根据歌手名称,歌曲名等相关联的进行搜索。当点击搜索结果时就可以听该歌曲。
    关键代码:

    6 系统测试6.1 软件测试常识及主要技术软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 从软件开发者的角度出发,希望表明软件产品不存在错误和缺陷,验证软件能正确地实现用户需用户求,确立人们对软件质量的信心。从用户角度出发,希望通过软件测试暴露软件隐藏的错误和缺陷,从而考虑是否接受该产品。一般来说软件测试应由独立的产品评测中心负责,严格按照软件测试流程,制定测试计划、测试方案、测试规范,实施测试,对测试记录进行分析,并根据回归测试情况撰写测试报告。测试是为了证明程序有错,而不能保证程序没有错误。
    测试工具介绍:
    Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,手势输入,触摸屏输入,如按键输入等,它实现对正在开发的应用程序进行压力测试,也有日志输出。实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性。
    MonkeyRunner类似于Monkey,它们都是Android SDK原有的。严格意义上来说MonkeyRunner其实是一个Api工具包,比Monkey强大,可以编写测试脚本来自定义数据、事件。但是MonkeyRunner的脚本是用Python来写,这样无疑会加重测试人员的负担。
    Instrumentation是早期Google提供的Android自动化测试工具类,相对于Junit Instrumentation允许你对应用程序做更为复杂的测试,甚至是框架层面的。通过Instrumentation你可以模拟按键按下、抬起、屏幕点击、滚动等事件而JUint几乎都是进行简单的方法测试。Instrumentation是通过将主程序和测试程序运行在同一个进程来实现这些功能,你可以把Instrumentation看成一个类似Activity或者Service并且不带界面的组件,在程序运行期间监控你的主程序。缺点是对测试人员来说编写代码能力要求较高,需要对Android相关知识有一定了解,还需要配置AndroidManifest.xml文件,但是它存在一个缺点就是不可以同一套测试方法只能在一个APP上使用。
    主要测试技术和方法介绍:
    黑盒测试,软件测试的主要方法之一,也可以称为功能测试、数据驱动测试或基于规格说明的测试。测试者不了解程序的内部情况,不需具备应用程序的代码、内部结构和编程语言的专门知识。在黑盒测试中,被测对象的内部结构,运作情况对测试人员是不可见的,测试人员对测试产品的验证主要是根据其规格,验证其与规格一致性。就像对一台自动售货机,为了验证其能否自动售出货物,你可以指定需要购买的物品,塞入钱币,然后观测售货机能否输出正确的货物并找出正确的零钱。在这个过程中你不需要关注自动售货机是如何判定钱币数额,如何选择货物,如何找出零钱等内部操作。这是白盒测试关注的范围,黑盒测试关注的是结果。
    此测试方法可适合大部分的软件测试,如集成测试(integration testing)以及系统测试(system testing)。
    白盒测试(white-box testing)又称透明盒测试(glass box testing)、结构测试(structural testing)等,软件测试的主要方法之一,也称结构测试、逻辑驱动测试或基于程序本身的测试。白盒测试(white-box testing)分为逻辑驱动测试:(语句覆盖,判定覆盖(分支覆盖),条件覆盖,判定/条件覆盖,条件组合覆盖)和基本路径测试。
    白盒测试可以应用于单元测试(unit testing)、集成测试(integration testing)和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。尽管这种测试的方法可以发现许多的错误或问题,它可能无法检测未使用部分的规范。
    6.2 测试用例及结果6.2.1 播放音乐


    Step Name
    Description
    Expected Result




    Step 1
    打开APP
    系统进入音乐播放界面


    Step 2
    点击播放音乐按钮
    系统开始播放音乐


    Step3
    点击播放上一首
    系统播放上一首音乐


    Step4
    点击播放下一首
    系统播放下一首音乐


    Step4
    点击暂停
    系统暂停播放音乐


    Stpe5
    点击歌词
    系统切换到歌词界面


    Step6
    拖动进度条
    系统播放对一个进度的音乐



    6.2.2 评论歌曲


    Step Name
    Description
    Expected Result




    Step 1
    打开APP
    系统进入音乐播放界面


    Step 2
    点击右边菜单栏
    系统展开菜单


    Step 3
    点击登录
    系统进入登录界面


    Step 4
    输入用户名和密码点击登录
    系统显示登录成功


    Step 5
    返回点击唱片图片
    系统进入播放界面


    Step 6
    点击菜单按钮选择评论
    系统进入评论界面


    Step 7
    在输入框输入评论内容发送
    系统显示新增的评论



    6.2.3 下载歌曲


    Step Name
    Description
    Expected Result




    Step 1
    打开APP
    系统进入音乐播放界面


    Step 2
    点击在线音乐
    系统进入在线音乐节目


    Step 3
    点击新歌榜
    系统进入新歌榜单


    Step 4
    点击第一首音乐点击菜单
    系统显示菜单界面


    Step 5
    点击下载音乐
    系统添加下载任务



    7 总结与展望7.1 总结本系统是基于Android的音乐播放器的设计与实现,本系统实现音乐播放器的基本功能,同时也拥有不错的界面设计。论文首先从现在Android音乐播放器的现状说起,分析音乐播放器的需求,然后对整个系统进行分析和设计,接下来就是代码实现,最后再用测试样本进行测试,以验证其可行性。
    尽管本系统实现了音乐播放器的基本功能但是还是有很多不足之处,比如说本系统只集成百度音乐API而不是各个平台的音乐API,因为版权关系,各家音乐播放器拥有不同的版权,导致很多用户需要下载多个音乐播放器才能满足日常需求,加入可以加入各个平台的音乐API就可以为用户提供更好的服务。其次,本系统缺少比较新颖的功能比如说听歌识曲和歌单等,新颖的功能无疑可以更加吸引用户。后台服务只是本地服务导致评论歌曲的功能在不同局域网的手机无法连接。
    7.2 展望正如上面所说本系统还存在各种不足之处,对此对如何改进各种不足做出展望:

    集成更多平台的音乐API
    利用第三方平台开发听过识曲等新颖功能
    买入阿里云服务器,上线服务

    参考文献[1] Android 开发者官网https://developer.android.com/index.html
    [2] Retrofit官网https://square.github.io/retrofit/
    [3] RxJava官网https://github.com/ReactiveX/RxJava
    [4] SpringBoot官网https://projects.spring.io/spring-boot/
    [5] MyBatis官网 http://www.mybatis.org/mybatis-3/zh/index.html
    [6] Mysql 官网 https://www.mysql.com/
    [7] Glide 官网 https://github.com/bumptech/glide
    [8] 《第一行代码Android》郭霖 人民邮电出版社2016.12
    [9] 《Android开发艺术探索》任玉刚电子工业出版社 2015.9
    [10] 《轻量级Java Web整合开发入门》李占波 清华大学出版社 2015.9.1
    [11] 《Spring MVC实战》张龙、覃璐、李哲、丁涛译电子工业出版社 2017.5.1
    [12] 《MyBatis技术内幕》徐郡明 电子工业出版社 2017.6.1
    [13] 《Android源码设计模式解析与实战》何红辉、关爱民 人民邮电出版社 2017.7
    [14] 《Android开发模式和最佳实战》菲尔 达特森 电子工业出版社 2017.2.1
    [15] 《软件工程》萨默维尔 机械工业出版社 2011.5.1
    6 评论 223 下载 2020-03-30 08:31:42 下载需要15点积分
  • 基于JSP的SSM框架实现的员工信息管理系统

    这是完整使用SSM框架开发的第一个项目,项目来源于北京动力节点的SSM框架整合教程,其中加入了一些自己的理解,增加了一个搜索功能的页面,这个项目总体来说对于新手是很友好的,涉及到了简单的ajax和jquery处理,UI搭建,后端SSM环境搭建,简单的业务流程设计(使用JSON交互)。
    使用SSM框架搭建的一个简单的员工信息管理系统,实现了基本的增删改查整个流程。
    直接把war包放到tomcat的webapps目录下,重启即可运行。
    一、系统架构
    二、功能分解
    查询和分页显示
    新增员工信息功能

    数据校验,需要校验用户名和邮箱是否合法前端使用jquery校验,后端使用JSR303
    修改员工信息功能
    单个删除员工
    批量删除员工
    使用Rest风格的URI
    搜索功能

    三、技术点
    基础框架:SpringMVC+Spring+MyBatis
    数据库:MySQL
    前端框架:BootStrap快速搭建
    项目依赖管理:Maven
    分页:pagehelper(Mybatis的工具)
    逆向工程:MyBatis Generator

    四、数据库表设计
    五、功能实现5.1 查询和分页显示5.1.1 数据分析分析前端UI,分析要从数据库获取的信息

    修改Mapper映射文件

    5.1.2 业务逻辑分析
    访问index.jsp页面
    发送ajax请求获取员工数据
    服务器返回JSON数据
    浏览器解析JSON数据,使用DOM增删页面

    5.1.3 实现
    导入jackson包,把对象转换成JSON字符串,在controller中添加ResponseBody注解即可
    定义一个新的实体类Msg.java

    3个属性:
    响应码(100成功 200失败)提示信息(msg)返回给浏览器的数据(Map<String,Object>封装)
    3个方法:
    静态Success:返回Msg对象,设置响应吗100,提示信息处理成功静态Fail:返回Msg对象,设置响应吗200,提示信息处理失败Add方法:用于把pageInfo放入到map中public Msg add(String key, Object value) { this.getExtend().put(key,value); return this;}


    index.jsp使用Jquery进行拼接元素,显示表格

    5.1.4 流程图
    5.2 新增员工信息功能5.2.1 业务逻辑
    index.jsp页面点击新增
    弹出新增员工的对话框(模态框)
    数据库查询部门列表,显示在对话框中
    用户输入数据

    校验数据
    完成保存

    5.2.2 数据分析
    姓名和邮箱要做前端+后端校验
    部门根据数据库信息返回的添加进去


    查出部门信息

    前端校验用户名和邮箱是否合法

    后端校验用户名和邮箱是否合法

    使用的是JSR303校验
    当输入框输入完成移开鼠标之后,发送AJAX到服务器请求用户名是否已经存在,并且是否是合法的用户名
    如果校验不通过,那么保存信息的按钮应处于不可用状态


    保存新增的员工信息
    调用的是Jquery的serialize()方法,把表单数据包装成对象

    5.3 修改员工信息功能5.3.1 逻辑分析
    点击修改按钮,发送AJAX信息,请求当前修改员工的数据库信息
    弹出模态框,回显员工信息,姓名不允许修改
    校验邮箱

    注意
    由于修改和删除按钮都是页面加载完成后,由AJAX发送请求,再添加到页面的,所有click事件不生效,所以要使用dom对象操作

    TOMCAT直接使用PUT请求的时候不会封装请求体数据,要使用SpringMVC的过滤器完成PUT

    5.3.2 数据分析
    5.3.3 业务实现
    获取部门信息增加到下拉框
    获取员工信息添加到模态框
    点击保存按钮更新员工信息到数据库


    5.4 删除员工5.4.1 单个删除
    5.4.2 批量删除
    添加选择按钮
    实现批量删除

    添加选择按钮

    实现批量删除

    5.5 搜索功能5.5.1 逻辑
    增加一个高级搜索的按钮,跳转到高级搜索的界面query.jsp
    后台需要判断输入条件

    5.5.2 数据分析
    5.5.3 实现表现层
    /*** 查询功能的查询员工信息* 查询出来的员工数据显示在一页上面*/@RequestMapping(value="/queryEmps",method=RequestMethod.POST)@ResponseBodypublic Msg queryEmp(Employee employee) { System.out.println(employee); List<Employee> emplist = employeeService.queryEmp(employee); return Msg.success().add("emplist",emplist);}
    Service层
    public List<Employee> queryEmp(Employee employee) { // TODO Auto-generated method stub EmployeeExample example = new EmployeeExample(); Criteria criteria = example.createCriteria(); System.out.println("".equals(employee.getEmpName())); if (!("".equals(employee.getEmpName()))) { criteria.andEmpNameEqualTo(employee.getEmpName()); } if(!("".equals(employee.getEmail()))) { criteria.andEmailEqualTo(employee.getEmail()); } criteria.andGenderEqualTo(employee.getGender()); criteria.andDIdEqualTo(employee.getdId()); return employeeMapper.selectByExampleWithDept(example);}
    5 评论 197 下载 2019-03-06 18:51:03 下载需要12点积分
显示 0 到 15 ,共 15 条
eject