摘要
首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项目软件架构选择B/S模式,总体功能模块运用自顶向下的分层思想。再然后就是实现系统并进行代码编写实现功能。论文的最后章节总结一下自己完成本论文和开发本项目的心得和总结。通过移动办公系统app将会使在移动办公系统管理各个方面的工作效率带来实质性的提升。
关键字:B/S模式 、 移动办公系统app、 软件架构
Abstract
First of all, at the beginning of the paper is a clear discussion of the system of research content. Secondly, analyze the system requirements analysis to understand “what to do”. The analysis includes business analysis, business process analysis and use case analysis to further clarify the requirements of the system. Then on the basis of understanding the requirements of the system need to further design the system, mainly including software architecture pattern, overall functional modules, database design. The software architecture of this project chooses B/S mode, and the overall functional module adopts the top-down hierarchical idea. And then is to implement the system and code to achieve the function. The last chapter of the paper summarizes the experience and summary of completing this paper and developing this project. Through mobile office system app, the work efficiency in all aspects of mobile office system management will be substantially improved.
Keywords: B/S mode, mobile office system app, software architecture
目录
1绪论 4
1.1项目研究的背景 4
1.2开发意义 4
1.3项目研究内容与结构 4
2开发技术介绍 5
2.1B/S架构 5
2.2 Android平台 5
2.3 Java语言简介 5
2.4 MySQL 介绍 6
2.5 MySQL环境配置 8
2.6 SSM框架 8
3系统分析 9
3.1可行性分析 9
3.1.1技术可行性 9
3.1.2经济可行性 9
3.1.3操作可行性 9
3.2 app性能需求分析 10
3.3 app设计规则与运行环境 10
3.4 app功能分析 10
3.5 app流程的分析 11
3.5.1 部门管理的流程 12
3.5.2 个人中心管理流程 13
3.5.3 登录流程 13
4系统设计 14
4.1 软件功能模块设计 14
4.2 数据库设计 14
4.2.1 概念模型设计 14
4.2.2 物理模型设计 15
5系统详细设计 18
5.1 APP端 18
5.2管理员功能模块 20
6系统测试 23
7总结与心得体会 24
7.1 总结 24
7.2 心得体会 24
参考文献 25
致谢 26
1绪论
1.1项目研究的背景
在发展迅速的信息化时代中,越来越多互联网科技走进人们的生活,人们开始接受互联网带来的方便快捷的服务,同时享受这互联网带来的冲击与。移动办公系统是目前高校不可或缺的管理系统,但是由于各种无法预测的现实原因让它无法普遍实现出来,。如果时间久了,管理十分不便利,存在误差,查询难的现象,一旦数据过多,人工管理方式就很难维持。随着信息技术的应用拓展,逐渐引用了信息化技术管理,逐渐取代了人工管理模式,采用计算机系统来管理漫画信息,智能的管理减少了人力物力财力,节省了管理的时间和空间,提升了工作的准确率和效率。本次系统开发,主要以移动办公系统人群为对象,根据需求来完成功能设计[1][2]。
困扰管理层的许多问题当中,移动办公系统也是不敢忽视的一块。但是管理好移动办公系统又面临很多麻烦需要解决,例如:如何在工作琐碎,记录繁多的情况下将移动办公系统的当前情况反应给系统管理员决策,等等。在此情况下开发一款移动办公系统app,于是乎变得非常合乎时宜。
经过网上调查和搜集数据,我们可以发现移动办公系统方面的app在并不是相当普及,同时在移动办公系统管理方面的可以有许多改进。实际上如今信息化成为一个未来的趋势或者可以说在当前现代化的城市典范中,信息化已经成为主流,开发一个移动办公系统app一方面的可能会更合乎时宜,另一方面来说也可以提高在移动办公系统方面的效率给相关管理人员的工作带来一定的便利。
1.2国内外研究现状
移动办公系统的理念是率先由美国于上世纪五十年代提出来的,主要是通过企业对员工进行全面的移动办公系统。移动办公系统已经在美国、欧洲等西方国家形成了一台非常健全完善的体系,主要是以“企业–员工”的形式运行整个社会的移动办公系统体系。
在日本,移动办公系统的一些私立企业和公立企业组成了主要的移动办公系统体系,普通员工都能查询移动办公系统档案,便与全面细致对员工进行长期有效的管理。
芬兰也从上世纪70年代开始,逐渐发现了一种新的移动办公系统模式:通过倡导积极观念,并且积极发挥移动办公系统APP的功能。
移动办公系统在我国国内出现的时间是在二十世纪九十年代末,相比较于国外算起来比较晚了。但是在2003年后,政府开始重视移动办公系统,同时人们也慢慢意识到移动办公系统的重要性,促使了移动办公系统服务行业在国内的迅猛发展。我国的移动办公系统还是以考察员工为主要形式,以工作需求为主要牵引。在2003年至2007年间,移动办公系统得到了快速的兴起,并且关于移动办公系统的理念诉求也渐渐的渗透到人们的意识中。2007年,我国的移动办公系统行业又迎来了一个发展的时期。从此,我国移动办公系统的学术理论研究和行业开始步入科学规范有序的发展轨道。这段时间学术组织、理论研究以及和多刊物传媒很大的推动了我国移动办公系统产业的发展。2008年至2015年,移动办公系统已经正式的纳入国家现代化教学创新体系和“二十五”国家教学科技规划之中,有了政策和科学技术的支持,我国的移动办公系统事业正在迅速发展,惠及更多的人群。
1.3开发意义
随当今世界,科学技术的经济文化都处在一个高速发展的时期,人们已经创造了丰富的物质条件。但同时生活节奏的加快和工作的压力,也让人们越来越重视自己的学习问题。
现在,随着计算机技术和通讯技术的迅猛发展,移动互联网时代和信息时代已经到来,4G技术已经相当成熟,5G技术开始普及,并且智能手机的全球占有率已经逼近100%。人们时时刻刻都在享受着移动互联网带给我们的方便快捷以及大量的信息。而且智能手机市场,Android占有率已经达到78.9%。并且Android以期开源性的特点得到了各大手机厂商的开源爱好者的青睐和追捧,致使各种Android版本和Android英勇层出不穷,人们对Android手机的使用程度和认可程度都很高。
基于Android的移动办公系统使员工可以随时随地对自己的教学信息进行查看和管理。
1.4项目研究内容与结构
移动办公系统方面的任务繁琐,以至于每年都在移动办公系统这方面投入较多的精力却效果甚微,移动办公系统的目标就是为了能够缓解移动办公系统管理面临的压力,让移动办公系统方面的工作变得更加高效准确。
本项目在开发和设计过程中涉及到原理和技术有: B/S、java技术、ssm框架、MySQL数据库等等;
第一章绪论;剖析项目背景,说明研究的内容。
第二章开发技。系统主要使用了java技术,ssm框架、b/s模式和myspl数据库,并对此做了介绍。
第三章系统分析;包罗了系统总体结构、对系统的性能、功能、流程图进行了分析。
第四章系统设计;对软件功能模块和数据库进行详细设计。
第五章系统总体设计;对系统管理员和用户的功能进行描述,
第六章对系统进行测试,
第七章总结心得;在论文最后结束章节总结了开发这个系统和撰写论文时候自己的总结、感想,包括致谢。
2开发技术介绍
2.1B/S架构
B/S结构是目前使用最多的结构模式,它可以使得系统的开发更加的简单,好操作,而且还可以对其进行维护。使用该结构时只需要在计算机中安装数据库,和一些很常用的浏览器就可以了。浏览器就会与数据库进行信息的连接,可以实现很多的功能,B/S结构是可以直接进行使用的,而且B/S结构在使用中极大的减少了工作的维护。基于B/S的软件,所有的数据库之间都是相互独立的,因此是非常安全的。因为基于B/S结构可以清楚的看到系统正在处理的业务,并且能够及时的让管理人员做出决策,这样就可以避免企业的损失。B/S结构的基本特点是集中式的管理模式,用户使用系统生成数据后,这些数据就可以存储到系统的数据库中,方便日后能够用到,这样就可以满足人们的所有的需求。
图2-1 B/S模式三层结构图
针对现在的购物商城,选择系统结构为B/S(Browser /Service ),即浏览器和服务器结构。是目前国内最为常见,而且对于用户而言是最方便的一个常用结构,对以往的客户机/服务器结构(Client/Service)进行更深一层的优化。用户为了使用浏览器进行操作,浏览各个网站,进行实现和使用浏览器获取的资料和信息。获取的主要信息和逻辑都在服务器端保存的数据,这些数据,当用户通过浏览器请求服务器时,服务器进行对请求的响应作答,返回一系列数据,因此在服务器端进行业务逻辑的处理,在客户端的浏览器主要处理很少的简单的逻辑。所谓的传统的C/S结构模式发展演变成如今在web上的三层模式。现如今此结构模式非常广泛的运用在各个互联网上,其对系统维护所产生的升级成本和人力时间更低,用户使用成本低,以目前的技术发展情况看,其技术相对来讲易于把握。
此网站系统开发主要运用了java语言,和最新流行的三大框架,比如Spring,SpringMVC,MyBatis,这些技术主要运用在后端的开发实现上,数据库方面主要用轻巧简单的实用的Mysql数据库。前端用了HTML,JQuery和Bootstrap框架技术。在Web应用程序的开发实践中,Spring公司研制了基于MVC模式应用的轻量级的框架—Spring。Spring使用的思路在于JavaBean的生成和销毁的生命周期,为了完成以前的EJB完成的任务。Spring框架主要核心作用在于IOC和AOP容器,IOC控制反转,顾名思义,将以前创建对象的控制对象的权利交给Spring的IOC容器来完成,方便管理所有的对象,解决开发中生成的大量的对象,使开发变得简单容易。AOP面向切面,主要为了分离开发系统中的业务逻辑,当有大量重复的业务逻辑时,可以运用AOP技术,使重复做的工作量变得简单,最核心的为了完成业务逻辑。根据MVC模式的特点,构建了SpringMVC框架,使得Web应用开发更加方便操作。JQuery的插件为了和Bootstrap兼容的整合到一起,构建了Bootstrap的UI组件库。此UI库,含有大量的实用性的组件,给前端开发人员快速开发非常方便。以JavaScript为核心技术,开发封装了一套简单、方便使用的JQuery框架,此框架能特别快速上手。JavaScript中的很多的常用功能代码都进行封装,提供简单的操作,使得其能和HTML标签快速融合,进行前后端的人机交互。Bootstrap主要又在JQuery的基础上进行更多的的封装,使得开发人员操作起来更加的人性化,完善了JQuery的不足之处,形成了栅格式的网站风格,页面变得简洁大气美观。
2.2 Android平台
Android是谷歌旗下著名的移动开源操作系统。这个系统的内核是Linux。 该系统具有很高的兼容性,可以用在包括智能手机、电视、平板等诸多设备上。有着高度兼容的特性。最重要的是,Android开源的属性使开发者可以自由的通过Android系统进行开发。而本系统就是基于Android开发的一款企业挂号系统。Android的开源属性在07年已经推出,就受到了开发者的高度赞扬,而Android开发也成为一时间最热门的词语。开发者可以在Android系统上尽情挥舞画笔随心所欲地创作。Android作为以智能手机、平板、电视为主战场的可移动设备操作系统,使用度和适用性非常广泛,远远超过诸如塞班、IOS等系统。在Android平台上,APP的体系结构很大幅度的上简化了组件的工作。在这之中,Java成为了APP开发的唯一语言,Java通过跨平台功能,无需编译基于Android框架开发的软件应用程序,即任意一台搭载了Android的设备均可运行。
2.3 Java语言简介
Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景,它是面向对象的,分布式的,动态的,具有平台无关性、安全性、健壮性。Java语言的基本语句语法和C++一样,但是它面向对象的技术更加彻底,因为Java要求将所有的内容都必须封装成类,把类作为程序的基本单位。由于不允许类外有变量、方法。 Java语言的分布式体现在数据分布和操作分布,它是面向网络的语言,可以处理TCP/IP协议,它也支持客户机/服务器的计算模式。Java语言的动态性是指类在运行时是动态安装的,使得Java可以动态的维护程序。Java不支持指针,对内存访问的所有操作都是通过对象实例化实现的,这样就避免了指针操作中易产生的错误,同时也预防了病毒对系统的破坏和威胁。
Java语言的编程风格与C语言非常接近,它继承了C++面向对象技术的核心,它面世之后发展迅速,非常流行,对高级C语言形成了很大的冲击。业内人士称之为“一次编译、到处执行”。当然java也有缺点,在每次执行编译后,字节码都需要消耗一定的时间,在某些程度上降低了性能。但是这并不影响java成为此次设计语言的选择。Java语言简单易学,使用它的编程时间短,功能性强,开发者学习起来更简便、更快。Java的主要特性有以下几个:
1.面向对象
面向对象有四个特点:封装、继承、多态、抽象。抽象是指忽略一个问题中的次要部分,关注主要部分。多态是指对同一种消息做出的不同反应。继承是指在原有的父类方法基础上增加自己独有的方法,而不改变原来父类。
2.平台无关性、
Java编译出来的是字节码,直接由虚拟机执行。在任何平台上,只要有Java虚拟机,Java代码都能运行。
3.可靠性和安全性
Java对内存的访问都必须通过对象的实例变量来实现,避免了指针中出现的错误。
4. 多线程
Java提供了多线程功能,利用编程实现同一时间同时工作的功能。
2.4 MySQL 介绍
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。简单来讲,存储粮食的仓库叫粮仓存储数据的仓库就叫数据库。数据库在软件项目中扮演着操作管理数据的角色同时还能够保证数据的独立性、一致性和安全性,并为系统访问数据提供有效方式不仅如此数据库还能大大减少程序员开发程序时间。在日常能够接触实用的一般有两类数据库,一类是以(Oracle,DB2,SQL Server,MySQL )为代表的关系型数据库和以(NoSql、MongeDB)为代表的非关系型数据库,两类数据库各有各的优缺点。其中非关系型数据库又分为网络数据库和层级数据库。网络数据库网络数据库是指在计算机网络系统中应用数据库技术然后借助网络技术将存储于数据库中的大量信息及时发布出去;在成熟的数据库技术的帮助下,计算机网络实现了对网络中的各种数据的有效管理,用户与网络中的数据库数据交互也借此得以进行。作为最成功的典型层次模型数据库系统,IMS是最早研制成功的数据库系统。1970年由埃德加·科德于首先提出的关系模型融合了“科德十二定律”。现如今即使很多人仍旧不看好这个模型,但它依旧是数据存储的传统标准。关系数据结构、关系操作集合、关系完整性约束构成了关系模型。作为数据库另外一种区分方式的存储介质被大家分为磁盘和内存这 两种。例如:关系型数据库就存储在磁盘中,非关系型数据库则存储在内存中。典型的关系型数据库有:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL、SQLite。小型关系型数据库:Microsoft Access,SQLite;中型关系型数据库:SQL Server,Mysql;大型关系型数据库:Oracle,DB2。
大家常用的其他关系形数据库系统大多是MySQL AB公司开发的,其中MySQL也是由这家开发的,所应用的分布式数据库管理系统是客户机/服务器体系结构得益于此结构,而且用这个系统建造的数据库具有很强的适用性,用C和C++编写的系统让他拥有很强的适用性所以他可以在大部分操作系统上使用并能和php结合。不同的API函数针对不同的语言(C,C++,JAVA等)来处理不同数据;为了更好地支持多CPU多线程通过使用核心线程来实现;提供的存储机制分为事务和非事务存储机制;MySQL采用双重许可,不管是从MySQL AB公司获得正式的商业许可又或是许可条款下以免费软件或开放源码软件的方式使用MySQL软件都是被允许的。
MySQL作为数据库拥有很多优点,其中由于是开放源码,所以使用成本特别低,而它体积小的特点决定了速度快的特性。因此,My Sql具有开放性,多线程支持多种API,可跨数据库连接,国际化,数据库体积巨大等特点。简单的来说 ,MySql是一个开放的、快速的、多线程的、多用户的数据库服务器。
选用MySQL作为数据库的其中一个原因就是支持多线程,支持多线程的特点为利用系统资源提供了便捷并因此大大提高了系统运行速度和效率,而且连接数据库的方式多样包括但不局限于TCP/IP、ODBC和JDBC等途径;但是没有东西是完美无缺的,即便MySQL也如此,虽说它有着众多优点但其功能不够强大,规模也相对较小,无法应对大型数据哭的处理。但是对于本系统来说,选用MySQL作为数据库,其功能性能已绰绰有余,如果要进行二次开发的数据库表结构空间的扩展也是完全可行的。综上所述,MySQL是作为本系统数据库的最优选择。
图2-2 数据库管理系统和接口的原理
2.5 MySQL环境配置
本系统的数据使用的是MySQL,所以要将MySQL安装到指定目录,如果下载的是非安装的MySQL压缩包,直接解压到指定目录就可以了。然后点击C:\Program Files\MySQL\bin\winMySQLadmin.exe这个文件其中C:\Program Files\MySQL是MySQL安装目录。输入winMySQLadmin的初始用户、密码(注:这不是MySQL里的用户、密码)随便填不必在意,确定之后右下角任务的启动栏会出现一个红绿灯的图标,红灯亮代表服务停止,绿灯亮代表服务正常,左击这个图标->winnt->install the service 安装此服务,再左击这个图标->winnt->start the service 启动MySQL服务。
修改MySQL数据库的root密码。用cmd进入命令行模式输入如下命令:
cd C:\Program Files\MySQL\bin
MySQLadmin -u root -p password 123
回车出现Enter password: ,这是要输入原密码. 刚安装时密码为空,所以直接回车,此时MySQL 中账号 root 的密码被改为 123 安装完毕。
2.6 SSM框架
开发信息管理系统的主流框架是SSM(Spring + Spring MVC + MyBatis),SSM框架web层使用Spring MVC框架,使传输前后端数据变得简单;对于业务层使用Spring作为轻量级控制反转和面向切面的容器框架;对于相关SQL操作,采用Mybatis作为持久层框架,对JDBC进行封装,使得数据库的底层面向开发者操作处于一种透明状态。
2.5 JSP技术
本系统的开发主要用JSP(Hypertext Preprocessor,超文本预处理器)这一门开发语言。作为开发语言,这是一种通用的开源脚本语言。这种语法主要是将C语言、Java和Perl等语言的相关特点进行总结吸收形成自身特点,使得更加方便学习,当前广泛在Web领域进行使用。此语法的独特之处在于将C、Java、Perl这三种语言进行了归纳,并创新出JSP具有自己特点的语法。它在执行动态网页方面相对于CGI和Perl语言更加高效。用动态页面如果是使用JSP语言,那么相对于其它的编程语言,JSP的执行主要是体现在将程序嵌入到HTML文档中,相对于其它语言,其执行的效率一般都领先于其它的语言。此外,JSP编译后代码方面也是做得比较好的,一般其编译能够使代码的运行速度比一般语言都要快[7]。
其主要特性有以下几个方面:
1)免费性
和其它技术相比,JSP本身免费且是开源代码。
2)快捷性
使用JSP编程的程序一般开发比较快,而且系统运行也比较快,也易于学习[2]。嵌入于HTML的这种方式,使其相对于其它开发语言编辑起来相对简单,实用性也更加强,对初学者是比较适用的。
3)跨平台性强
由于JSP是运行在服务器的脚本,可以运行在UNIX、LINUX、WINDOWS、MacOS、Android等平台
4)效率高
JSP占用相当少的系统资源。
JSP是面向对象且独立于架构的动态脚本语言,使用JSP和HTML编写WEB页面,JSP服务器先对页面的JSP代码进行解析,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器。JSP是一种源代码开放程序,拥有很好的跨平台兼容性。JSP代码可以在Window系统以及许多版本的linux系统上完美运行。
JSP语言是不需要任何特殊的开发环境的,所以用户可以直接在WEB页面中输入JSP命令代码。在WEB页面中,所有的JSP代码都被放置在“<?JSP”和“?>”中。
3系统分析
3.1可行性分析
在开发系统之前要进行系统可行性分析,目的是在用最简单的方法去解决最大的问题,程序一旦开发出来满足了用户的需要,所带来的利益也很多。下面我们将从技术、操作、经济等方面来选择这个系统最终是否开发。
可行性分析就是可行性研究,它对于这个项目起着十分重要的作用,利用系统确定题目的前期,需要就行走访、市场调差、亲身体验等各种方式去了解系统未来的存在价值、使用价值、长远利益等,为了避免项目出现瓶颈,减少项目不必要的损失,保障项目的成功投资,系统主要从经济可行性、技术可行性、管理可行性和开发环境可行性做评估,利用较短的时间,确定未来可能出现问题的解决方案。
技术本身来说是完全可以实现移动办公系统的所有功能,不存在技术的不完整性,和功能的不可实现性。就自己的技术水平来说,随着毕业设计的不断深入,自己也在不断的学习,通过互联网的查询、图书馆资料的查阅、导师热情的指点及同学朋友的帮助,自身技术会不断提高,相信通过自己的努力,自身的技术水平可以达到系统实现的要求。
3.1.1技术可行性
本系统开发选择java技术,java是一个完全面向对象的语言,java为开发者提供了丰富的类库,大大减少了使用windows编程的难度,减少开发人员在设计算法上的难度,作为java开发 Visual Studio更是一个必不可少的角色,它友好的界面,以及强大的功能,给程序开发人员带来了很多方便,加上环境简单,转移方便,无疑使此系统最佳的选择。所以后台设计选择使用MySQL数据库主要用来的建立和维护信息。对于前台开发要求应具备功能完善、易于操作等优点,后台数据库的要求则是能够建立和维护数据信息的统一性和完整性。
依据上述目标来分析本系统的硬件如下:
奔腾3的处理器;
内存是 2G;
硬盘是50G;
操作系统是Window 10;
在软件方面的话,安装了Visul Studio 0 和MySQL数据库开发工具。根据以上的软件与硬件要求,得到这个系统的技术是可行的。
3.1.2经济可行性
基于ssm的移动办公系统app,该app软件开发仅需要一台普通的计算机便可完成实现开发,其成本很低。另外,作为毕业设计作品来讲,开发成本基本上可以忽略不计,且该系统软件的投入使用,可以实现更加快速高效的移动办公系统,同时还能实现对人力资源和管理资源的有效节约,该移动办公系统在经济上完全可行。
3.1.3操作可行性
现在随着科技的飞速发展,计算机早已经进入了人们的日常生活中,人们的工作环境也不像以前有那么多的要求,需要员工一定要到公司办公,有的工作在家也可以完成。这使得人们的工作效益有了很大的提高。操作的多样性也变高了。因此,管理的计算机化,智能化是社会发展而带来的必然趋势,各种智能的软件层出不穷,不同的软件能完成用户不同的需求,这不仅提高了工作效率还能完成一些客户特定的一些需求。本系统不仅界面简洁明了还采用可视化界面,用户只要用鼠标和键盘就可以完成对相关信息的修改,删除,添加等操作。因为这个系统的操作十分简单,方便上手,对于第一次使用系统的人,只需要很少的时间就可以上手操作。由此可见,本系统在操作上是可行的。
2.3 系统性能分析
(1)系统响应效率:页面响应时问应该在3秒以内,最长不能超过4秒,并支持至少10000人同时在线所有系统。
(2)界面简洁清晰:系统界面要求简单明了,容易操作,符合用户操作习惯。
(3)储存性高:因为移动办公系统app站中有很多的信息需要存储,因此对于系统的存储量有很大的要求,需要有一个强大的数据库的支持才能确保所有的信息都能安全稳定的进行存储。
(4)易学性:该系统在操作上必须简单好上手,没有很多复杂的操作,只需要简单的进行学习就能操作该系统。
(5)稳定性需求:开发的移动办公系统app站要求运行稳定,运行过程中无界面不清楚、字体模糊等现象。
3.2 app性能需求分析
对网站性能进行分析,可对系统反应度、界面简洁清晰度、储存能性、易学性和稳定性进行分析;
系统反应度:同时上万人在线时反应时间应该在两三秒以内,。
界面简洁清晰:系统界面要求简单明了,操作简单,用户操作容易上手。
储存性能高:移动办公系统中需要存储的信息有很多,所以对系统的存储量要求很高,因此数据库就应该很强大,才能保证信息能安全稳定的进行存储;
易学性:该系统在操作上必须简单好上手,没有很多复杂的操作,只需要简单的进行学习就能操作该系统。
稳定性:要求移动办公系统运行要稳定,界面清楚、字体清晰等。
3.3 app设计规则与运行环境
软件系统的优劣很大程度上是由系统设计的完善与否决定的。世间万物都必须遵循生老病死的法则,这是大自然的规则不能违反,软件设计也一样需要遵循系统设计规则。因此,在设计过程中必须遵循系统设计规则。
规则如下:
简单性:为了扩大系统使用者的受众面,系统设计应该本着操作越简单约好的原则,这样不仅能提高系统的使用率更能够扩大系统使用面。。
针对性:一个系统针对性越强,所能提供的功能必然越完善,用户体验肯定更好,所以应该明确指定系统针对性。
实用性:实用永远是检验一个系统是否成功的唯一标准,使用的语言再高端,使用的结构再新颖但不能满足管理员和用户的要求那就是失败。
运行环境:
本系统是利用B/S结构来开发的,数据库在服务器上进行部署 Mysql即可,其他包括My Eclipse等常规开发程序。
3.4 app功能分析
考虑到实际生活中在移动办公系统方面的需要以及对该系统认真的分析,将app权限按管理员和用户这两类涉及用户划分。
(a) 管理员;管理员使用本系统涉到的功能主要有系统首页、个人中心、部门管理、职位管理、员工管理、个人事务管理、邮件信息管理、行政信息管理、工作计划管理、公文信息管理、系统管理等功能。管理员用例图如图3-1所示。
图3-1 管理员用例图
(b) 用户;用户进入app可以实现首页、个人事务、行政信息、工作计划、我的等,在我的页面可以对个人事务、邮件信息、工作计划、公文信息等功能进行操作。用户用例图如图3-2所示。
图3-2用户用例图
3.5 app流程的分析
由于不同的系统实际使用用户角色的不同,他们的业务分析也会变得有所不一样,为了论述方便接下来都将以用户功能权限下的系统业务流程来分析,如下图所展示:
3.5.1 部门管理的流程
图3-3 部门管理流程
3.5.2 个人中心管理流程
图3-4 个人中心管理流程
3.5.3 登录流程
图3-4 登录流程
4系统设计
4.1 软件功能模块设计
App整体功能如下图所示:
图 4-1 整体功能模块图
4.1.1 系统架构
系统架构图如图3.2所示。
图3.2 系统架构图
系统架构选用Spring3.0架构。作为在Java领域最为成功的开源软件之一,Spring在Java EE 开发中使用者众多。Spring抽象了我们在目前许多应用开发中所遇到的最共性的问题,同时作为一个轻量级的应用开发框架,Spring和传统的J2EE开发相比,有其自身特有的特点。Spring通过这些自身特有的特点充分体现了它的设计理念:在Java EE的应用开发中,支持POJO(JavaBean)的开发方式,使应用能够面向接口开发,充分支持OO(面向对象)的设计方法。在IOC容器和AOP面向切面编程的核心模块的支持下,使得程序员能够高度简化了Java EE的开发过程。为应用开发提供了极其丰富的系统组件,通过这些组件,为企业应用服务的实现提供驱动支持。
4.2 数据库设计
4.3.1数据库设计概述
数据库的设计在这一套开发系统中扮演者非常重要的角色,完善的数据库建立可以让其更快的完成项目。整个数据库的创建是库存管理系统开发和创立的核心技术,概括的说,就是根据用户的需求创立起满足用户的需要的数据库。数据库的整体设计是在软件开发是其最主要的问题。
再考虑到数据库设计的时候,我们首先应该想到把这个系统的数据设计和处理设计密切结合起来,从而使得把整个库存信息管理系统相结合起来。
4.3.1概念设计
一个完整的数据分析过程与这个数据库的逻辑结构和物理结构有十分密切的联系,我们需要一系列操作来完成对应用数据库所使用的信息进行确认、编纂、组织、挑选。我们可以采用特定的方法来获取有关用户的所有的有效信息,从而使这些有用信息可以直接成为数据库的重要数据。
概念模型是对现实中的问题出现的事物的进行描述,ER图是由实体及其关系构成的图,通过E-R图可以清楚地描述系统涉及到的实体之间的相互关系。
4.2.2 物理模型设计
根据上诉的逻辑模型设计,下面给出物理模型的设计,如下表:
config
表注释: 配置文件
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
name varchar(100) 否 配置参数名称
value varchar(100) 是 NULL 配置参数值
news
表注释: 个人事务
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
addtime timestamp 否 CURRENT_TIMESTAMP 创建时间
title varchar(200) 否 产品名称
introduction longtext 是 NULL 简介
picture varchar(200) 否 图片
content longtext 否 内容
tijianbaogao
表注释: 职位管理
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
addtime timestamp 否 CURRENT_TIMESTAMP 创建时间
baogaobianhao varchar(200) 是 NULL 报告编号
xiangmubianhao varchar(200) 是 NULL 项目编号
yiyuanmingcheng varchar(200) 是 NULL 企业名称
xiangmumingcheng varchar(200) 是 NULL 项目名称
xiangmufenlei varchar(200) 是 NULL 项目分类
xiangmufengmian varchar(200) 是 NULL 项目封面
yishengzhanghao varchar(200) 是 NULL 医生账号
yishengxingming varchar(200) 是 NULL 医生姓名
baogaoshijian date 是 NULL 报告时间
yonghuzhanghao varchar(200) 是 NULL 用户账号
yonghuxingming varchar(200) 是 NULL 用户姓名
baogaojieguo longtext 是 NULL 报告结果
yishengjianyi longtext 是 NULL 医生建议
userid bigint(20) 是 NULL 用户id
tijianxiangmu
表注释: 在线预约
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
addtime timestamp 否 CURRENT_TIMESTAMP 创建时间
xiangmubianhao varchar(200) 是 NULL 项目编号
yiyuanmingcheng varchar(200) 是 NULL 企业名称
xiangmumingcheng varchar(200) 是 NULL 项目名称
xiangmufenlei varchar(200) 是 NULL 项目分类
xiangmufengmian varchar(200) 是 NULL 项目封面
xiangmujiage float 是 NULL 项目价格
fabushijian date 是 NULL 发布时间
xiangmuxiangqing longtext 是 NULL 项目详情
yishengzhanghao varchar(200) 是 NULL 医生账号
yishengxingming varchar(200) 是 NULL 医生姓名
tijianyuyue
表注释: 体检预约
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
addtime timestamp 否 CURRENT_TIMESTAMP 创建时间
yuyuebianhao varchar(200) 是 NULL 预约编号
xiangmubianhao varchar(200) 是 NULL 项目编号
yiyuanmingcheng varchar(200) 是 NULL 企业名称
xiangmumingcheng varchar(200) 是 NULL 项目名称
xiangmufenlei varchar(200) 是 NULL 项目分类
xiangmufengmian varchar(200) 是 NULL 项目封面
xiangmujiage float 是 NULL 项目价格
yishengzhanghao varchar(200) 是 NULL 医生账号
yishengxingming varchar(200) 是 NULL 医生姓名
yuyueshijian date 是 NULL 预约时间
yonghuzhanghao varchar(200) 是 NULL 用户账号
yonghuxingming varchar(200) 是 NULL 用户姓名
beizhu longtext 是 NULL 备注
sfsh varchar(200) 是 否 是否审核
shhf longtext 是 NULL 审核回复
ispay varchar(200) 是 未支付 是否支付
userid bigint(20) 是 NULL 用户id
token
表注释: token表
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
userid bigint(20) 否 用户id
username varchar(100) 否 用户名
tablename varchar(100) 是 NULL 表名
role varchar(100) 是 NULL 角色
token varchar(200) 否 密码
addtime timestamp 否 CURRENT_TIMESTAMP 新增时间
expiratedtime timestamp 否 CURRENT_TIMESTAMP 过期时间
users
表注释: 用户表
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
username varchar(100) 否 用户名
password varchar(100) 否 密码
role varchar(100) 是 管理员 角色
addtime timestamp 否 CURRENT_TIMESTAMP 新增时间
xiangmufenlei
表注释: 项目分类
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
addtime timestamp 否 CURRENT_TIMESTAMP 创建时间
xiangmufenlei varchar(200) 是 NULL 项目分类
yisheng
表注释: 医生
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
addtime timestamp 否 CURRENT_TIMESTAMP 创建时间
yishengzhanghao varchar(200) 否 医生账号
mima varchar(200) 否 密码
yishengxingming varchar(200) 否 医生姓名
xingbie varchar(200) 是 NULL 性别
zhicheng varchar(200) 是 NULL 职称
lianxidianhua varchar(200) 是 NULL 联系电话
touxiang varchar(200) 是 NULL 头像
yiyuanxinxi
表注释: 美容视频
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
addtime timestamp 否 CURRENT_TIMESTAMP 创建时间
yiyuanmingcheng varchar(200) 是 NULL 企业名称
yiyuantupian varchar(200) 是 NULL 企业图片
yiyuandizhi varchar(200) 是 NULL 企业地址
fuzeren varchar(200) 是 NULL 负责人
lianxidianhua varchar(200) 是 NULL 联系电话
yingyeshijian varchar(200) 是 NULL 营业时间
yiyuandengji varchar(200) 是 NULL 企业等级
yiyuanjieshao longtext 是 NULL 企业介绍
yonghu
表注释: 用户
字段 类型 空 默认 注释
id (主键) bigint(20) 否 主键
addtime timestamp 否 CURRENT_TIMESTAMP 创建时间
yonghuzhanghao varchar(200) 否 用户账号
mima varchar(200) 否 密码
yonghuxingming varchar(200) 否 用户姓名
xingbie varchar(200) 是 NULL 性别
lianxifangshi varchar(200) 是 NULL 联系方式
touxiang varchar(200) 是 NULL 头像
5系统详细设计
(一)基本任务
系统实现阶段的根本目标在这个阶段的设计工作中精确地描述出目标系统,从而在编码阶段可以直接根据这个描述翻译成用程序语言编写的系统。
系统实现的基本任务有以下几个:
(1) 为每个模块进行详细的算法设计。用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。
(2) 为模块内的数据结构进行设计。对于需求分析、概要设计确定的概念性的数据类型进行确切的定义。
(3) 对数据结构进行物理设计,即确定数据库的物理结构。
(4) 其他设计:根据软件系统的类型,可能还需要进行代码设计、输入/输出格式设计、人机对话设计。
(5) 编写系统实现说明书。
(6) 评审。对处理过程的算法和数据库的物理结构都要评审。
系统结构可分为src的java源代码,database文件夹为系统的数据库文件,webroot为系统的界面代码文件。Src文件夹里面包含control包、dao包、util包,dao包为逻辑层,是系统方法的底层包,包括各种数据增删改查的方法,control包是控制层,用来连接逻辑层和视图层,在逻辑层调用逻辑层,完成视图层需要的功能,视图层为系统的界面代码,完成界面的设计和数据的显示。
5.1 APP端
用户登录,用户进入app,输入自己的账号和密码,并选择对应的角色进行系统登录操作,如图5-1所示。
图5-1登录界面图
用户注册,在用户注册页面通过填写员工工号、密码、确认密码、员工姓名、头像、部门、职位、手机、地址、身份证等内容进行用户注册操作,如图5-2所示。
图5-2用户注册界面图
用户登陆系统后,可以对系统首页、个人事务、行政信息、工作计划、我的等内容进行详细操作,如图5-3所示。
图5-3 app系统首页界面图
我的,在我的页面可以查看个人事务、邮寄信息、工作计划、公文信息等信息,如图5-4所示。
图5-4我的界面图
用户信息,在用户信息页面通过填写员工工号、密码、员工姓名、头像、性别、部门、职位、手机、地址、身份证等信息进行保存或退出登录操作,如图5-5所示。
图5-5用户信息界面图
5.2管理员功能模块
管理员登录,管理员通过输入用户名,密码,在角色中选择管理员,点击登录进入系统操作进行操作,如图5-6所示。
图5-6管理员登录界面图
该模块控制层主要代码:
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = “/login”)
public R login(String username, String password, String captcha, HttpServletRequest request) {
YonghuEntity user = yonghuService.selectOne(new EntityWrapper().eq(“yonghuming”, username));
if(user==null || !user.getMima().equals(password)) {
return R.error(“账号或密码不正确”);
}
String token = tokenService.generateToken(user.getId(), username,“yonghu”, “用户” );
return R.ok().put(“token”, token);
}
/**
* 注册
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody YonghuEntity yonghu){
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
yonghu.setId(uId);
yonghuService.insert(yonghu);
return R.ok();
}
/**
* 退出
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
}
管理员登陆系统后,可以查看系统首页、个人中心、职位管理、职位管理、个人事务管理、邮件信息管理、行政信息管理、工作计划管理、公文信息管理、系统管理等功能,还能对每个功能逐一进行相应操作,如图5-7所示。
图5-7管理员功能界面图
该模块控制层主要代码:
/**
* 列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper ew = new EntityWrapper();
PageUtils page = configService.queryPage(params);
return R.ok().put(“data”, page);
}
/**
* 列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
PageUtils page = configService.queryPage(params);
return R.ok().put("data", page);
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 根据name获取信息
*/
@RequestMapping("/info")
public R infoByName(@RequestParam String name){
ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
return R.ok().put("data", config);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.insert(config);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.updateById(config);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
configService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
}
部门管理,在部门管理页面可以对序号、部门、操作等内容进行修改和删除操作,如图5-8所示。
图5-8部门管理界面图
该模块控制层主要代码:
* 后端列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,YonghuEntity yonghu,
HttpServletRequest request){
EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,YonghuEntity yonghu,
HttpServletRequest request){
EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( YonghuEntity yonghu){
EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu"));
return R.ok().put("data", yonghuService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(YonghuEntity yonghu){
EntityWrapper< YonghuEntity> ew = new EntityWrapper< YonghuEntity>();
ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu"));
YonghuView yonghuView = yonghuService.selectView(ew);
return R.ok("查询用户成功").put("data", yonghuView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
YonghuEntity yonghu = yonghuService.selectById(id);
return R.ok().put("data", yonghu);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
YonghuEntity yonghu = yonghuService.selectById(id);
return R.ok().put("data", yonghu);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("用户已存在");
}
yonghu.setId(new Date().getTime());
yonghuService.insert(yonghu);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("用户已存在");
}
yonghu.setId(new Date().getTime());
yonghuService.insert(yonghu);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
//ValidatorUtils.validateEntity(yonghu);
yonghuService.updateById(yonghu);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
yonghuService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
职位管理,在职位管理页面可以对序号、职位、操作等内容进行详情和删除操作,如图5-9所示。
图5-9职位管理界面图
该模块控制层主要代码:
/**
* 后端列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,ForumEntity forum,
HttpServletRequest request){
if(!request.getSession().getAttribute(“role”).toString().equals(“管理员”)) {
forum.setUserid((Long)request.getSession().getAttribute(“userId”));
}
EntityWrapper<ForumEntity> ew = new EntityWrapper<ForumEntity>();
PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ForumEntity forum,
HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
forum.setUserid((Long)request.getSession().getAttribute("userId"));
}
EntityWrapper<ForumEntity> ew = new EntityWrapper<ForumEntity>();
PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@IgnoreAuth
@RequestMapping("/flist")
public R flist(@RequestParam Map<String, Object> params,ForumEntity forum, HttpServletRequest request){
EntityWrapper<ForumEntity> ew = new EntityWrapper<ForumEntity>();
PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params));
return R.ok().put("data", page);
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(ForumEntity forum){
EntityWrapper< ForumEntity> ew = new EntityWrapper< ForumEntity>();
ew.allEq(MPUtil.allEQMapPre( forum, "forum"));
ForumView forumView = forumService.selectView(ew);
return R.ok("查询移动办公系统表成功").put("data", forumView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
ForumEntity forum = forumService.selectById(id);
return R.ok().put("data", forum);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
ForumEntity forum = forumService.selectById(id);
return R.ok().put("data", forum);
}
/**
* 移动办公系统详情
*/
@IgnoreAuth
@RequestMapping("/list/{id}")
public R list(@PathVariable("id") String id){
ForumEntity forum = forumService.selectById(id);
getChilds(forum);
return R.ok().put("data", forum);
}
private ForumEntity getChilds(ForumEntity forum) {
List<ForumEntity> childs = new ArrayList<ForumEntity>();
childs = forumService.selectList(new EntityWrapper<ForumEntity>().eq("parentid", forum.getId()));
if(childs == null || childs.size()==0) {
return null;
}
forum.setChilds(childs);
for(ForumEntity forumEntity : childs) {
getChilds(forumEntity);
}
return forum;
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ForumEntity forum, HttpServletRequest request){
forum.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(forum);
forum.setUserid((Long)request.getSession().getAttribute("userId"));
forumService.insert(forum);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ForumEntity forum, HttpServletRequest request){
forum.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(forum);
forum.setUserid((Long)request.getSession().getAttribute("userId"));
forumService.insert(forum);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ForumEntity forum, HttpServletRequest request){
//ValidatorUtils.validateEntity(forum);
forumService.updateById(forum);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
forumService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
员工管理,在员工管理信息管理页面可以对员工工号、员工姓名、头像、性别、部门、职位、手机等内容进行详情和删除操作,如图5-10所示。
图5-10员工管理界面图
该模块控制层主要代码:
/**
* 后端列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,MessagesEntity messages,
HttpServletRequest request){
if(!request.getSession().getAttribute(“role”).toString().equals(“管理员”)) {
messages.setUserid((Long)request.getSession().getAttribute(“userId”));
}
EntityWrapper<MessagesEntity> ew = new EntityWrapper<MessagesEntity>();
PageUtils page = messagesService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, messages), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,MessagesEntity messages,
HttpServletRequest request){
EntityWrapper<MessagesEntity> ew = new EntityWrapper<MessagesEntity>();
PageUtils page = messagesService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, messages), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( MessagesEntity messages){
EntityWrapper<MessagesEntity> ew = new EntityWrapper<MessagesEntity>();
ew.allEq(MPUtil.allEQMapPre( messages, "messages"));
return R.ok().put("data", messagesService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(MessagesEntity messages){
EntityWrapper< MessagesEntity> ew = new EntityWrapper< MessagesEntity>();
ew.allEq(MPUtil.allEQMapPre( messages, "messages"));
MessagesView messagesView = messagesService.selectView(ew);
return R.ok("查询职位管理成功").put("data", messagesView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
MessagesEntity messages = messagesService.selectById(id);
return R.ok().put("data", messages);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
MessagesEntity messages = messagesService.selectById(id);
return R.ok().put("data", messages);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody MessagesEntity messages, HttpServletRequest request){
messages.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(messages);
messagesService.insert(messages);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody MessagesEntity messages, HttpServletRequest request){
messages.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(messages);
messagesService.insert(messages);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody MessagesEntity messages, HttpServletRequest request){
//ValidatorUtils.validateEntity(messages);
messagesService.updateById(messages);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
messagesService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
个人事务管理,在个人事务管理页面可以对事务标题、事务类型、事务状态、添加日期、员工工号、员工姓名等内容进行详情和删除操作;如图5-11所示。
图5-11个人事务管理界面图
该模块控制层主要代码:
/**
* 列表
*/
@IgnoreAuth
@RequestMapping(“/list”)
public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper ew = new EntityWrapper();
PageUtils page = configService.queryPage(params);
return R.ok().put(“data”, page);
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 根据name获取信息
*/
@RequestMapping("/info")
public R infoByName(@RequestParam String name){
ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
return R.ok().put("data", config);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.insert(config);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.updateById(config);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
configService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
} }
6系统测试
系统测试不仅仅是发现系统潜在的BUG或错误,而更为重要的是为用户提供一个良好的体验和安全可使用的产品服务。而通过发现错误或潜在的问题,将有助于提升产品的竞争力,这也是软件测试的其中的重要目的之一。
软件测试的方法有好几种,但目前主要采用的是包括以功能为主要测试方向的黑盒测试以及以逻辑为主要测试方向的白盒测试,这是两种不同的测试方法,针对的测试侧重点不同,本课题根据实际需求情况,选择以功能为主要的黑盒测试方法,同时测试是要遵循一定的规则来执行的,一个测试要执行其执行的依据一般是由测试用例来规定的,而测试用例一般是依据需求或说明书来综合制定的,测试在硬件出厂前是十分重要的一个过程,本课题由于时间和精力的关系,选择以实现的功能作为测试要点来进行测试。具体测试过程如下:
测试用例1及测试过程:
登录:录入登录信息,账号,密码和选择权限,点击登录按钮,会出现两种情况:登录成功进入用户具有权限的功能界面和提示登录失败。
测试用例2及测试过程:
管理员登录:录入登录信息,管理员账号,密码和选择权限,点击登录按钮,会出现两种情况:登录成功进入管理员具有权限的功能界面和提示登录失败。
(一)测试目的
软件测试的目的主要是发现软件缺陷和漏洞,其次,软件测试能够识别项目风险。为开发人员和程序经理提供软件测试的反馈结果,为风险评估提供必要的信息。再者,软件测试确保在上线日前达到上线标准。包括持续追踪项目进度和严格把控各个开发阶段的产品质量。
基于ssm的移动办公系统app系统,主要测试客户端的使用和后台服务器的使用。客户端主要是测试行政信息管理、工作计划管理页面是否进行跳转等功能是否实现。管理员的使用主要是测试部门管理、职位管理、个人事务管理以及邮件信息管理功能是否实现。
(二)测试概述
1.测试的原则
(1)系统测试应该避免测试自己的程序,以免发现不了细小的问题。
(2)系统测试用例应有两部分组成,分别为输入测试和输出测试。
(3)系统测试数据应当引用不合理的数据进行测试,选取不同情况的进行逐一测试。
(4)不仅要检查程序是否达到预期的效果,还要检查程序是否执行了规定以外的操作。
(5)对出现错误多的模块进行集中测试。
(6)已发现错误的模块修改后,应及时进行重新测试。
2.测试的方法
测试方法主要有人工测试和机器测试。
(1)人工测试
人工测试又称代码复审,包括个人复查、走查、会审三种方法[7]。
(2)机器测试
机器测试主要是由黑盒测试和白盒测试两种方法。
在最后的测试阶段,系统采用后黑盒测试和白盒测试想结合的方法。黑盒测试主要用于对系统的输入和输出特性进行测试,检测功能方面存在的错误与可能存在的缺陷。白盒测试主要用于对软件的过程及逻辑路径进行测试,发现性能方面的错误。具体采用的测试方法为系统测试和单元测试。
(三)单元测试
(1)注册测试
游客用户得先注册账号才能登录系统,用户输入符合规则的用户名后,填写2次一样的密码,点击注册按钮,系统提示“注册成功“。当用户2次密码不一致时,系统提示两次密码不一致。
注册测试用例如下表所示。
表6-1注册测试用例
测试模块 用户注册模块测试
测试目的 测试当注册信息输入不符合要求时,系统是否能进行相应处理并给出提示。
测试方法 黑盒测试
测试数据 1不输入用户名和密码,直接点击注册。
2输入未注册过的用户名。例如:abcd
3输入正确用户名,两次密码不一样。例如:用户名abcdefg、密码 000,确认密码111
预期结果 1 界面不跳转,弹出对话框,提示用户输入必填项。
2界面跳转,弹出对话框,提示用户注册成功。
3界面不跳转,弹出对话框,提示两次密码不一致。
实际结果 与预想一致。
结论 注册模块实现了基本的异常输入应对。
(2)登录测试
登录模块需要测试的功能有:输入登录名和密码,点击“登录”按钮是否正常进入系统系统首页。
登录测试用例如下表所示。
表6-2登录测试用例
测试模块 用户登录模块测试
测试目的 测试当登陆信息输入不符合要求时,系统是否能进行相应处理并给出提示。
测试方法 黑盒测试
测试数据 1不输入用户名和密码,直接点击登陆。
2输入未注册过的用户名。例如:abcdefg
3输入正确用户名,错误密码。例如:用户名abcdefg、密码 000
4输入正确用户名,正确匹配密码。例如:用户名abcdefg、密码 111
预期结果 1 界面不跳转,弹出对话框,提示用户输入必填项。
2界面不跳转,弹出对话框,提示用户当前用户名尚未注册。
3界面不跳转,弹出对话框,提示用户密码错误。
4界面实现跳转,登陆功能正常进行。
实际结果 与预想一致。
结论 登陆模块实现了基本的异常输入应对。
(3)集成测试
集成测试的方案主要如下所述:
1.将系统移植到另一台计算机上,运行出错。修改配置信息后运行成功。
2.用户信息管理模块综合测试,添加新用户roess,为其分配一般管理员角色,查看一般管理员角色权限,保存设置,以roess身份登录,查看所拥有权限。
3.最后按照移动办公系统app系统的设计与实现,以不同角色的身份进入系统,对系统各模块功能进行测试,测试模块间逻辑功是否有误。
经过测试,发现此开发系统可以满足移动办公系统app系统流程的基本工作流程和基本要求。
7总结与心得体会
7.1 总结
通过完成该移动办公系统app和本论文的撰写让我更加明白了软件开发过程中软件工程思想的重要性。在项目的前期由于对需求分析做的不够谨慎和明确,导致了后面在设计甚至编码时候造成了许多不必要的麻烦。由此在今后的学习和工作开发之中必须要牢牢把握住软件工程的设计思想和方法,这样可以进一步保证项目开发的健壮性和准确性。
本app所实现的是一个移动办公系统,该系统严格按照需求分析制作相关模块,并利用所学知识尽力完成,但是本人由于学识浅薄,无法真正做到让该程序可以投入市场使用,仅仅简单实现部分功能,希望日后还能改善。
本app具有以下优点:
该app具有较高的适用性,选用B/S结构,可以在绝大部分个人平台上使用该系统。
系统将用户权限进行划分,管理员和用户能看到及操作的信息不一样,两者具备不同的操作权限。
该app操作界面简单明了,大部分人都可以正常使用。
但也存在以下问题需要改进:
运行时窗口不能被刷新,可以改进。
系统过于简单,显示的信息有限。
不能添加多个管理员账号,如果可以则将利于发展移动办公系统规模,便于在移动办公系统信息集中管理。
不能实时预约接待消息和移动办公系统反馈建议,容易被忽视,不利于管理员服务客户。
在毕业设计开发的这些时间中,付出努力和心血,终于将移动办公系统app网站完美的完成。这套系统具有很多优点,不仅能完成日常客户的管理,还可以对用户进行记事本业务进行扩展。不过在本项目完成的同时,由于时间短,项目紧促,造成了该系统也有很多不足的地方。整个项目仍有改进的空间。具体的改进如下:
优点
本项目的优点在于项目前后台分离,各自负责不同的部分。同时还应用了较为新颖的技术。项目运用了JQuery,使项目能有较高的易用性,其强大的UI库保证了界面的美观程度。
缺点
本项目的缺点在于由于只有一个人完成整个项目,以此来计算的情况下完成整套系统的时间显得非常仓促。在需求调研阶段就调研结果而言并不能高度满足于现有系统真正所需要的要求。另外在项目中,并没能很好的完全分离前后台,这一点还有待加强学习。
对于移动办公系统app系统的缺点的相对应改善计划是,理清前后台的业务逻辑,使之能够做到前后台分离。而JQuery中我们可以通过加强对JavaScript的使用对其进行补充。使得项目能够有更好的易用性。针对JQuery组件库过多的问题,可以对其进行库设计,从而达到快速引用的设计。
通过这几个月的不断努力和学习,最终独立的完成了整个项目。对此有很多的感触。项目中应用到了不少的新技术。有很多都不在企业的课堂中学习到而是通过不断的实践获得的。有很多的知识通过在公司的实习和在对技术的应用中获得,而这些知识将全部应用在移动办公系统app系统这个项目上来。随着技术的进步,我们还需要不断的学习与探索,会有更好的天地等着我们去实现。
7.2 心得体会
由于经验和能力不足,导致在开发、设计该app的时候,出现了比较多的问题,例如需要用到的技术不熟悉、程序报错等,后来我积极地向同学询问自己出现的问题同时也会找一些相关的书进行学习,慢慢的一点点将自己遇到的问题逐渐解决。所以不管以后在任何时候合作都会让自己事半功倍。通过本app的完整的开发,可以遇到自己平时写一些简单的小程序遇不到的问题,不仅仅局限与技术与业务方面的,同时也使得自己更加深入的了解软件过程的开发设计思想,对于即将踏入社会工作而言,这些心得都十分重要。在以后的研究生学习生涯也必须加深这方面的理解,将最好的开发技术和最新的科学原理运用到自己以后的开发工作和学习研究中去。
参考文献
[1] 李长江,安筱鹏.开放手机联盟:重塑移动互联网产业链.中国电子报,2018.
[2] 方银旺,赵向道,李欣.Symbian操作系统及其应用程序开发.计算机工程,2013(1):275-277.
[3] 余志龙,陈昱勋,郑名杰等著.Google Android SDK开发范例大全[M].北京:人民邮电出版社,2016:2.
[4] 马宁.嵌入式移动开发.程序员,2017,(12):14-15.
[5] Chris Haseman.Android Essentials.PEF Electronic Book,2018.
[6] 杨丰盛著.Android应用开发揭秘[M].北京:机械工业出版社,2019:96.
[7] W.Frank Ableson (美) Charlie Collins RobiSen(美)著.张波,高朝勤,杨越译.Google Android揭秘[M].北京:人民邮电出版社,2015:2-7.
[8] 朱桂英.Android开发应用从入门到精通[M].北京:中国铁道出版社,2011:21.
[9] 余志龙,陈昱勋,郑名杰等著.Google Android SDK开发范例大全[M].北京:人民邮电出版社,2017:2.
[10] 郭宏志著.Android应用开发详解[M].北京:电子工业出版社,2016:96.
[11] 姚旻旻,刘卫国著.计算机系统应用.计算机应用,2018:17(11).
[12]BruceEckel著.陈昊鹏等译.Thinking in Java 3th Edition[M] .机械工业出版社,2014:75.
[13] Comp-U-Learn Tech India Ltd(美)著,贾素玲译.Java编程基础[M].北京:高等教育出版社,2017:20.
[14] 王水著.软件工程[M].河南:河南科学技术出版社,2018:80.
[15]吴洁明著.软件工程实例教程[M].北京:清华大学出版社,2015:11.
[16] Ed Burnette(美)著.张波等译.Hello Android[M] .北京:人民邮电出版社,2019:34.
[17] Ron patton(美)著小松.王钰,曹跃译.软件测试[M].北京:机械工业出版社,2016:4.
致谢
在系统全部完成之际,我非常感谢在毕业设计时给予我帮助的人。没有他们的帮助,就没有我能够顺利的完成毕业设计。
首先,我要感谢我的指导老师,这几个月来,老师为我们付出了很多的努力,针对我们的系统和论文进行了非常细心的指导。根据毕业设计期间的要求和政策对我提出了不少的意见和建议。在她的建议下我能够圆满完成我的毕业设计任务。对此再次表示衷心的感谢。
其次我需要感谢的是我的父母,在整个毕业设计期间,是我的父母,作为在毕业设计期间最强有力的后盾,我可以全身心的去关注、去撰写我的毕业设计论文。在大学生活中我的每时每刻都离不开来自于我的父母的全力支持和关心。
过程永远比结果重要。毕业设计是大学生活中最为浓墨重彩的一笔,在这个过程中不仅学到更为全面的书本和实践知识,更让我感受到了浓浓的同窗之情及师生情。虽然大学四年间做过不少实验作业,但是独立完成这样一个操作系统还是第一次,遇到困难时理所当然,我也有所心理准备,但是超出自身能力的部分还是需要寻求老师及同学的帮助。在此,我衷心地感谢我的指导老师,可以说,没有老师我就不能顺利完成这次设计。他总是在一筹莫展的时候为我指引方向。比如在开题报告,我的指导老师就细致地指导我该怎么有逻辑地将自己的想法和做法表达清楚,在此由衷感谢他。在设计的过程中,老师百忙之中也乐于给予我指导,不管多晚给老师发消息,不管是不是上班时间去老师办公室寻求帮助,他总能在第一时间对我施以援手,由于我在设计期间需要离校实习,不能及时到老师办公室检查设计进度,当时已经是晚上6点多,我匆匆赶到办公室时,老师依然在伏案办公,桌上是同学们的中期检查报告,检查完毕业设计后,他又继续查看同学们的中期报告,并督促我及时上交报告。老师给的意见总是一针见血地指出我设计及论文中的不足,并举例详细说明我的改进方法,不得不佩服他的学术水平及教学水平。在我开始着手实现这个设计的时候,通过需求分析及可行性分析对该系统有了较为浅显的认识;但是在我真正开始实现时发现事情并没有这么简单。任何成功都不是一蹴而就的,就算是一个简单的毕业设计也需要日积月累的知识和经验。于是,我便去寻求老师和同学的帮助,这也使得我得以从不同的角度重新考虑我的设计。终于,这个系统在我内心有了雏形。在真正实现这个设计的过程中,学习新知识是必定的,同时那些由于时间关系或者本来就没有掌握牢固的知识也有了进一步巩固的机会。然而最重要的是了解到如何作为一个开发人员,以开发人员的思维来看待软件开发的步骤和方法策略。
本次毕业设计的完成预示着大学时代的句号,在这个设计过程中,我收获到的绝不仅仅是做项目过程中要到的知识,更多的是同窗情谊和师生情谊,最重要的是做任何事情都要具备的认真态度,以及真正职业的思考方式方法。
之后,我要感谢的是全体软件工程系的大力协助,在大学的四年间,您们严谨的教学态度和科学的工作方法对我们的成长有很重要的影响。没有您们为我们无私的传授知识和获取知识的方法,就没有我们能够在软件行业立足的基础。
最后我要感谢的,是我们的学校。不仅教育我们知识,对我们的思想道德的培养更多。使我们不仅能够做一名合格的大学生,更能在走出校园时,能够成为一名合格的社会人。