自习室查询系统分析与设计毕业论文
目录
第1章 前 言 ........................................................ 1 1.1 概述 ........................................................ 1
1.2 国现状 ...................................................... 1 1.3 系统特点 .................................................... 2 第2章 需求分析 ..................................................... 3
2.1 产品系统分析 ................................................. 3 2.2 产品功能需求分析 ............................................. 3 第3章 系统设计 ..................................................... 6
3.1 系统功能模式图
3.2 各模块功能设计开发平台
3.2.1 系统中所采用的技术 ..................................... 8
3.2.2 系统中所采用的数据库 ................................... 8
3.2.3 系统开发环境 ........................................... 8
第4章 系统需求分析 ............................................... 17
4.1 系统调查 ................................................... 17 4.2 系统业务分析 ............................................... 18 4.3 系统功能描述 ............................................... 19 4.4 本章小结 ................................................... 22 第5章 系统设计 ................................................... 23
5.1 系统的Web体系结构 ......................................... 23
.WORD版本.
5.2 系统功能模块 ............................................... 24
5.2.1 权限管理 ............................................. 24 5.2.2 组织机构 ............................................. 25 5.2.3 个人办公 ............................................. 26 5.2.4 部 ................................................... 27 5.2.5 公共信息 ............................................. 27 5.2.6 日常管理 ............................................. 27 5.2.7 考勤管理 ............................................. 29 5.2.8 系统管理 ............................................. 30 5.2.9 个人管理 ............................................. 31 5.2.10 工具箱 .............................................. 31 5.3 数据库设计 ................................................. 31
5.3.1 数据库概念设计 ....................................... 31 5.3.2 数据库逻辑设计 ....................................... 35 5.4 本章小结 ................................................... 40 第6章 系统的实现 ................................................. 41
6.1 系统的开发环境 ............................................. 41
6.1.1 硬件环境 ............................................. 41 6.1.2 软件环境 ............................................. 41 6.2 编码 ....................................................... 41
6.2.1 新提醒编码实现 ....................................... 41
.WORD版本.
6.2.2 用户登录验证编码实现 ................................. 42 6.2.3 用户管理Service编码实现 ............................. 42 6.2.4 用户管理Dao编码实现 ................................. 42 6.3 界面设计 ................................................... 51 6.4 系统测试 ................................................... 62 6.5 系统的维护 ................................................. 65 6.6 本章小结 ................................................... 66 第7章 总结与展望 ................................................. 67
7.1 结论 ....................................................... 67 7.2 展望 ....................................................... 67 致谢 .............................................................. 69 参考文献 .......................................................... 70
.WORD版本.
第1章 前 言
概述
随着网络的发展,学校教务管理也跟上了社会的发展潮流有了,就可以非常方便的了解教室使用情况,方便调整教学资源。当今的教育教学发展已进入到高速的信息化、网络化时代,传统的学校经营模式正在逐步地被打破, 传统的学生管理服务模式更不能满足现代学生扩招带来的日益增长的需求。因此,将计算机网络、信息技术融入学校的日常工作中,建立适应时代发展的现代学校,转换经营模式,改善学生服务机制,提高工作效率,适应信息化、网络化的时代需要,对于学校来说已势在必行。学校学生自习室管理系统的建立与应用,使教学资源管理向自动化、信息化、现代化管理迈进了一大步,作为学校网络业务的重要支持手段,提供延伸服务,丰富服务容。学校利用互联网的交互性、分布广、无地域限制和反应快速等特点,提供传统服务所不能达到的服务。学校的建设,一方面提高了教学资源整合工作效率,更好地支持了教学和科研;另一方面,也强化了学生管理,方便学生自习使用教室状况。
1.2 国状况
随着我国Internet的迅速发展,逐渐成为教学资源,互联网已普及,成为许多学生生活中不可或缺的一部分。目前使用的系统只能反映教室是否用于教学活动,
无法反映非教学活动的占用情况,缺乏灵活性,有待开发新软件,更好整合资源。
系统特点
本主要适用于全国高等院校在读大学生,研究生等人群。
系统的主要功能是通过监控设备和数字图像处理与模式识别系统的配合,搜索空闲教室的具体信息,搜索空闲自习室的具体信息,实时准确地反映教室的使用情况和详细信息,通过网页和客户端反馈给学生,方便学生寻找合适自习室,更加高效地学习。
第二章 需求分析
(一)系统需求
自习室座位管理系统应该具有信息全面准确、更新快速、显示简洁移动等特点。自习室座位信息更新界面应简单易用,输入方便,这样才能使自习室管理者能够方便快捷地对当前自习
.WORD版本.
室座位信息情况进行更新。 (二)功能需求
自习室座位管理系统主要为学生提供自习室座位情况信息,学生可以通过网络查询开放的自习室和各自习室的人数。管理员可定时更新各个自习室的剩余座位数信息。
1、学生查询功能:为了方便学生查找自习室座位等信息,将所有信息按照需要进行分 类。这样学生就能很方便的找到自己需要的信息。
2、学生登记功能:学生可以通过简单的操作,例如刷信息卡等进行自习登记。 3、添加功能:管理员可以通过填写表格的形式输入开放的自习室等相关信息。系统可以自动避免重复信息。
4、更新功能:管理员可以对数据库中的信息进行更新。系统能够通过当前开放的自习室提供需要更新的信息,对更新后的信息进行保存,并自动查找是否是重复信息。
5、删除功能:管理员可以对数据进行删除操作。系统能够通过管理员给出的条件查找出要删除的信息,并提示是否确定删除,如果确定删除,则把相关信息从数据库中删除掉。
6、管理员查询功能:管理员可以通过条件选择查询所有信息,并进行排序。 7、统计功能:管理员可以通过此功能对信息进行统计。如统计当天各个自习室自习人数等。
三、系统设计
(一)系统功能模块图
“自习室座位管理系统”主要分为学生信息和自习室信息两个方面信息服务子系统,其功能模块划分如图1所示。
学生浏览 自习
室座.WORD版本. 位管理
查询 显示 登记
图1 “自习室管理系统”系统主模块功能图 统计 后台管理 删除 更新 添加 (二)各模块功能设计
1、登录模块:填写学生的学号,填写正确的密码,进入相应的自习室查询模块。 2、显示模块:显示要求的容。
3、查询模块:提供多种查询条件,可按需要进行查询。 4、添加模块:向数据库中添加空闲自习室记录。 5、更新模块:在数据库中更新自习室剩余座位信息。 6、删除模块:在数据库中找到要删除的记录,并将其删除。 7、统计模块:对数据库中的信息进行统计。
Administrator *Admi_NUB Admi_Password Roomnub .WORD版本.
3.2 开发平台
3.2.1 系统中所采用的技术
的开发工具选择了Visual Studio 2005。ASP.NET完全基于模块与组件,具有更好的可扩展性与可定制性,数据处理方面更是引入了许多激动人心的新技术,这些具有革新意义的新特性提供给Web开发更好的灵活性,有效缩短了Web应用程序的开发周期。ASP.NET与access的完美组合,为中小型企业的Web商业模型提供了一个更为稳定,高效,安全的运行环境。
的数据库系统采用的是access。Access数据库非常适合数据量不大的。同时其易用性也是许多程序员选择它的重要原因
图片的处理工具选择了Photoshop 7.0。动画的制作和处理工具选择的是Macromedia Flash 8。
的数据处理方面采用了C,C++等技术,这些技术让开发的更加人性化。
3.2.2 系统中所采用的数据库
该是学校的设计与实现,主要帮助学校快速发布信息,辅助学校以学生为中心,整合自习室资源,为学生服务,实现学生方便查询,数据量并不是很庞大,因此采用的是Access数据库,更易于学生操作与掌握。
3.2.3 系统开发环境
本系统采用的软件环境是.net。服务器端的最低配置是由所建立站点所需要的软件所决定的,通常应给服务器端配置至少为Inter Pentium 4 1.6 GHz 或更高的处理器,存为1GB,硬盘空间为80G。
.WORD版本.
.WORD版本.
.WORD版本.
第1章 绪 论
1.1 课题的提出
现今的商业社会中,许多非计算机专业的公司企业对于计算机的应用操作还相对停留在一个比较肤浅的应用层面上,并没有充分发挥计算机系统的高性能的智能的优势,计算机只是用来进行一些比较简单的文档处理,网业浏览和信息保存,这些相对于计算机系统强大的功能来说是一种十分严重的资源浪费。计算机系统完全可以充分的融入公司日常的管理经营工作中去,使工作人员通过一定的软件操作界面,进行几个简单的按钮操作和文字输入,就可以完成平时的工作,而且通过计算机网络的辅助,可以随时记录当时的工作情况和重要信息的保存,从而使公司的经营管理工作完全摆脱纸笔记录和人员繁复操作的情况,大大降低了繁复工作所带来的高失误率,提高了工作效率,并且有助于提高工作的性和各种信息保存的安全性,工作人员避免了因为某些工作而不得不停下手边的工作去和别的人员频繁见面的情况,只需通过计算机系统进行一定围的相互通信,使用几个简单的操作就可以省却许多不必要的麻烦。
因此可见,开发一套适用于公司日常经营管理活动的无纸化办公系统对于一个公司企业来说是十分具有现实意义的。
但是在现实环境中,每一个公司的实际情况都有所不同,所从事的行业也各不相同,进而所采取的经营管理模式和工作步骤也有很大的不同,因此每一个公司都需要有一套适应各自实际情况的管理系统,这对与系统的开发是一个很大的难题,不过我以为,既然我们已经有了设计这种系统的思路就应该坚持不懈的走下去,通过我们的努力一定可以实现我们的想法。虽然开发一套适用与目前所有
.WORD版本.
公司企业的管理系统还是不太可能的事情,但是在同一领域,各个企业还是具有其相同性的,开发一套适用于一定行业领域的管理系统还是有其可行性的,本系统就是基于这样的条件而开发的,希望可以通过本系统的开发为今后在各个行业领域的管理软件的开发提供一个思路与参考。
一般公司以前的经营管理状态是比较传统的纸笔记录,人员面对面的频繁交流,客户联系通过纸笔记录,有时客户不能直接见面就要通过邮寄的方式将资料寄到公司保存,周期长,容易出错,而且成本高,公司经理的管理工作也变的十分烦琐,又要应付客户,又要频繁的和公司部员工面对面的交流,有时需要外出办事却又不能离开公司,工作效率十分低下。因此开发管理软件就变的十分的迫切。
1.2 国外研究现状
办公自动化(Office Automation,简称OA)是20世纪70年代中期发达国家迅速发展起来的一门综合性技术。我国的OA经过从80年代末至今10多年的发展,已从最初提供面向单机的辅助办公产品,发展到今天可提供面向应用的大型协同工作产品。现在,办公自动化到底要解决什么问题呢?我们说,办公自动化就是用信息技术把办公过程电子化、数字化,就是要创造一个集成的办公环境,使所有的办公人员都在同一个桌面环境下一起工作。办公自动化没有统一的定义,凡是在传统的办公室中采用各种新技术、新机器、新设备从事办公业务,都属于办公自动化的领域。办公自动化设备中有各种机器,如计算机、复印机、速印机、机、传真机、网络设备、光盘机等等,这些设备统称为硬设备,或称硬件。而各种信息设备中还需要有管理设备的软件,例如,计算机的操作系统、网络操作系统、文字处理软件、专项工作程序软件等等[1]。
随着科技,经济及社会的不断发展与进步,管理和办公活动的重要性日渐突出,引起了各级领导者,管理学者以及技术人员的普遍重视。20世纪60年代以来,在微电子技术和通信技术迅速发展的推动下,办公室也开始了以自动化为重要容的\"办公室革命\",也称为\"管理革命\",其目标是借助先进的信息处理技术和
.WORD版本.
计算机网络技术来提高办公效率和质量,将管理与办公活动纳入到自动化/现代化的轨道中。办公自动化(简称OA)是20世纪70年代中期在发达国家迅速发展起来的一门综合性技术。办公自动化或办公信息系统(简称OIS)是现代信息社会的重要标志之一,涉及到系统工程学,行为科学,管理学,人机工程学,社会学等基本理论以及计算机,通信,自动化等支撑技术,属于复杂的大系统科学与工程。
科学技术突飞猛进的发展,在各个领域都改变着人们的工作和生活条件,社会向着物质文明和不断提高的劳动生产率大踏步前进。科学技术的飞速发展也使办公室这一传统的以人工(脑力和体力劳动的高度结合)为主的领域古老的劳动方式发生了巨大的变化。办公室中使用的各类现代化的办公设备很大程度上代替了原来的文房四宝,办公桌上的打字机被计算机文字处理机所取,无论在时间上还是在空间上都被大大地压缩了,这不但减轻或节省了人们的办公劳动,而且大大提高了办公效率,改善了办公环境,使人们从原先繁重的重复性,例行性的办公事务中解放出来,从而有更多的时间和精力投放在更需要人的思维来考虑和解决的问题上。用于办公室工作的这些技术越来越先进,设备越来越多,功能越来越强,性能也越来越高,这为实现办公自动化和无纸办公创造了必要的条件。例如,用于处理办公信息和进行协同工作的各种计算机(包括微型机,超级小型机和中,大型机);制作报表用的电子表格打印机;编排各种文件,资料格式等的电子台式出版系统;存放,管理文件和档案用的文档资料管理系统;自动控制各种工作流程的办公自动化系统;支持远距离协同工作的视频会议系统;计算机通信用的局部网络系统;用于办公通信的现代化机,传真机;复制资料用的复印机等,这些技术和设备对办公室工作提供有力的支持,在不同程度上为办公室工作的自动化提供了现代化的推动手段。
在这些技术和设备中,对办公室自动化的发展起最显著作用的是计算机信息处理设备和构成办公室信息通信的计算机通信网络系统。信息处理技术得益于计算机的高速处理能力。信息处理技术也延伸了办公室业务处理的涵,成为办公室自动化的主要技术手段,其容也在不断地深化和丰富。近年来,计算机工业和产
.WORD版本.
品的飞速发展扩大了信息处理技术的应用围,也使办公室信息处理技术向纵深方向发展,并不断扩大其应用围。网络通信技术的发展,有可能使相隔任意距离的办公室之间,超越空间的界限,实现处于不同地点的办公室之间的同时办公。Internet,数据仓库与数据挖掘,电子,多媒体信息的传输与处理,电子数据交换,信息安全等新技术使办公室自动化技术更上升到一个新的技术境界。信息处理和信息通信两者的紧密结合,使办公室自动化技术具有更高的效能,也是办公室自动化技术发展的重要趋势。
1.3 主要研究容
本系统从实际应用出发,结合企业的实际需求,主要研究通用OA系统的权限管理、机构管理、及信息发布平台等方向。本文阐述系统从需求分析到系统实现的开发过程,让读者对系统整个开发流程的有所了解。
1.4 论文组织结构
本文共分六章,各章的主要容如下:
第一章“绪论”部分主要综述了系统的开发背景、国研究现状、系统特点及组织结构。
第二章“课题研究相关技术综述”部分对论文研究中所用到的工具、技术及采用的设计模式做了简单的介绍。
第三章“可行性分析”部分主要描述了系统实现的可行性。
第四章“系统需求分析”部分主要描述了系统的需求分析过程,包括系统的需求调查,功能分析。
第五章“系统设计”部分对系统的总体设计和详细设计过程做了阐述,主要包括系统的设计环境,系统体系结构设计、系统的功能模块设计以及通信协议的定义。
第六章“系统实现”部分对系统实现和测试做了概述,主要包括系统实现采用的编码工具及编码风格,核心技术编码,系统的界面展示等。
.WORD版本.
第七章“总结与展望”部分讲述了对系统开发的总结和对下一步工作的预测。
.WORD版本.
第2章 课题关键技术
2.1 面向对象方法概述
面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
面向对象方法主要特征: 封装性:
封装是一种信息隐蔽技术,它体现了类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的特性(保存部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性:
继承性是子类自动共享父类的数据和方法。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。
继承具有传递性。继职分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
多态性:
.WORD版本.
对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给图或表时调用的打印方法与将同样的Print消息发送给正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
综上可知,在OO方法中,对象和传递消息分别表现事物及事物间相互联系的概念。类和继承是是适应人们一般思维方式的描述式。方法是允许作用于该类对象上的各种操作。这种对象、类、消息和方法的程序设计式的基本点在于对象的封装性和类的继承性。通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态关联和实体的多态性,从而构成了面向对象的基本特征[2]。
2.2 Java简介
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
Java语言的特点: (1) 平台无关性
平台无关性是指Java能运行于不同的平台。Java引进虚拟机 原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在
.WORD版本.
世界围共享。Java的数据类型与 机器无关,Java虚拟机(Java Virtual Machine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能, 提供于不同平台的接口的。
(2) 安全性
Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。
(3) 面向对象
Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特点。
(4) 解释型
我们知道C,C++等语言,都是针对CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CPU有关。Java不像C或C++,它不针对CPU芯片进行编译,而是把程序编译成称为自字节码的一种“中间代码”。字节码是很接近机器码的文件,可以在提供了java虚拟机(JVM)的任何系统上被解释执行。
(5) 动态
java程序的基本组成单元就是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分部环境中动态的维护程序及分类,而不像C++那样,没档期类库升级以后,如果想让程序具有新类库提供的功能,就需要修改程序,重新编译。
2.3 SSH框架简介
(1) Struts
Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技
.WORD版本.
术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架[3]。 (2) Spring Framework
Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的[4]。
Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。 (3) Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代
.WORD版本.
CMP,完成数据持久化的重任[5]。
2.4 MVC开发模式简介
MVC模式是\"Model-View-Controller\"的缩写,中文翻译为\"模式-视图-控制器\"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。MVC模式最早是smalltalk语言研究团提出的,应用于用户交互应用程序中。smalltalk语言和java语言有很多相似性,都是面向对象语言,很自然的SUN在petstore(宠物店)事例应用程序中就推荐MVC模式作为开发Web应用的架构模式。MVC模式是一种架构模式,其实需要其他模式协作完成。在J2EE模式目录中,通常采用service to worker模式实现,而service to worker模式可由集中控制器模式,派遣器模式和Page Helper模式组成。而Struts只实现了MVC的View和Controller两个部分,Model部分需要开发者自己来实现,Struts提供了抽象类Action使开发者能将Model应用于Struts框架中。
图2.4.1 MVC组件类型的关系和功能
.WORD版本.
2.5 AJAX简介
AJAX即“Asynchronous JavaScript and XML”,意思是异步的JavaScript 和 XML。AJAX并不是一种新技术,或者说它不是一种技术,实际上,它是结合了JavaScript、XML、XHTML、XSTL、XMLHttpRequest等编程技术以强大的方式组合而成,可以让开发人员构建基于PHP技术的Web应用,并打破了页面重载的惯例。Ajax是web2.0标准的核心技术,基于Ajax的web模型通过在客户端建构中间层,可实现页面表现与应用逻辑的分离,并支持用户操作与服务器响应的异步化[6]。
Ajax核心要素包括:
(1) 使用XHTML和CSS实现标准化的呈现界面; (2) 使用DOM实现动态的显示和交互;
(3) 使用XMLHttpRequest实现与服务器的异步通信;
(4) 使用Javascript将XHTML、DOM、XML、XMLHttpRequest绑定。 将Ajax技术应用在网络课程中有如下技术优势,即:“无刷新”式更新页面、促使web应用从瞬态模式适应到独占模式、进一步促进页面呈现与数据分离。还可充分实现丰富的客户端功能、直接编辑web数据、草稿自动保存、提升站点性能、节省网络带宽超过60%等功能,更能改变传统web应用模型中“点击——等待”的不连贯行为方式,显著提高学习者的交互体验。
AJAX是一种运用浏览器的技术,它可以在浏览器和服务器之间得到异步通信机制进行数据通信,从而允许浏览器向服务器获取少量信息而不是刷新整个页面。引入Ajax的Web模型与传统Web模型的比较如下图所示。
.WORD版本.
图2.5.1 传统web应用模型与Ajax web应用模型的比较
2.6 开发环境简介
(1) JDK软件
我们要开发J2EE的系统,却需要安装的是J2SE。J2SE的JDK是开发任何Java系统必须安装的工具包,而J2EE是指EJB、JSF等这些工具包,在不需要开发这些功能时是不需要安装的[7]。
我们选用1.6的版本进行开发。 (2) 数据库软件MySQL
MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。它因为以下优点而广受欢迎[8]。
MySQL是一个数据库管理系统。 MySQL是一个关系数据库管理系统。 MySQL是开源的。
.WORD版本.
MySQL服务器是一个快捷的、可靠的和易于使用的数据库服务器。 MySQL服务器工作在客户/服务器或嵌入系统中。 有大量的MySQL软件可以使用。
在此系统中我们选用MySQL5.5进行开发。 (3) Web服务器Tomcat
Tomcat是Apache-Jarkarta的一个子项目,是一个免费的、开放源码的、支持JSP和Servlet技术的容器,它同时又是一个Web服务器软件。
Tomcat很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与服务等开发应用系统常用的功能。Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选[9]。
在本系统中我们选用稳定版本Tomcat 7.0进行开发。 (4) 集成开发工具Eclipse+MyEclipse
Eclipse是目前最流行的Java集成开发工具。Eclipse一经出现就以其快速、丰富的特性赢得了认可,其主要的属性有快速的性能、重构性能、快速修复错误、调整/组织导入包、弹出窗口进行代码自动装配。由于功能强大,Eclipse一度成为Java IDE领域的霸主。它能够很好地与MySQL、Tomcat进行集成[10]。
本系统中我们选用MyEclipse9.0作为Eclipse的扩展开发工具。
2.7 软件体系结构
基于中小企业的办公自动化系统采用结构化与原型法相结合的方法。这种综合法的优点是它兼顾了结构化开发方法开发过程控制性强的特点以及原型法开发周期短、见效快的特点。采用两者结合的形式进行系统的开发时,采用了结构化生命周期法的设计思想,即自顶向下,从总体到部分,合理划分系统的结构,设计数据库模型。在系统的分析与初步设计上采用原型法做出原始模型,根据实际反映的情况,继续按结构化生命周期法进行系统的详细设计及其实施与转换、系
.WORD版本.
统维护与评价阶段的工作。合理采用综合法,使开发过程更具灵活性,往往会取得更好的开发效果。
该系统是基于 B/S(Browser/Server,B/S)架构的三层体系结构,即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层结构。这样就大大简化了客户端电脑载荷,减轻了系统的维护与升级的成本和工作量,降低了用户的总体成本。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。如果能将该系统划分的用户身份验证模块和其他模块再分解成一些相互独立、功能简单、易于理解和修改的模块,这样的系统就具备了系统设计首要考虑的可变更性。由模块组合构成的系统一般称为模块化结构系统。在这样的系统中,由于各个模块之间基本上是相互独立的,所以每个模块都可以独立的被理解、编程、调试和修改,使其复杂的系统设计工作变得相对简单。在遵循模块化结构设计原则的基础上,根据实现的目标,用户身份验证只需要一个模块,而其他模块则分成了几个不同的子模块,各子模块既相互配合,又各自具有一定的独立功能。这样就形成了一个树形的结构[11]。
2.8 系统技术亮点
该系统是基于 B/S(Browser/Server,B/S)架构的三层体系结构。系统维护和升级方式简单,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的。
系统应用MVC开发模式,采用Struts+Spring+Hibernate框架结构。视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。 分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码,这样就提高了各层组
.WORD版本.
件之间的高重用性和可适用性。另外有利于软件工程化管理,由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。
系统在web层采用html+div+css布局,并使用轻量级的js库jQuery框架。它兼容CSS3,还兼容各种浏览器。可以方便地处理HTML documents、events、实现动画效果,并且方便地为提供AJAX交互。jQuery能够使用户的html页面保持代码和html容分离,使html代码更加简洁。
2.9 本章小结
本系统的开发过程中,用到了以上技术,整个的开发过程中对加强我的编码能力、技术水平起到了一次强化作用,以上技术对于我系统的开发也是非常有帮助的。
.WORD版本.
第3章 可行性分析
可行性是系统开发的一项关键步骤,它是通过对整个系统的需求,技术及开发方法,以及开发人员,所需资金的综合考虑以评估对于该系统的开发是否符合实际。可行性分析包括:组织和管理上的可行性、技术可行性、经济可行性。
3.1 组织和管理可行性
基于中小型企业的办公自动化系统采用模块化开发方法,将整个系统划分为多个功能模块,并根据开发小组成员的实际能力分配相应的模块,这种将系统功能平行划分的方法有助于系统开发的组织和管理。
3.2 经济可行性
通过对企业部信息进行全面的自动化的管理,大大提高了企业的办公效率。通过系统对企业生产经营过程中的数据进行全面的管理和统计,避免人为处理各类数据时所产生的各种问题,提高了企业的经济效益,为企业经营决策提供了大量的、权威的数据,使企业的管理进行到科学化、系统化的畴。
硬件方面主要是计算机,我们的实际情况可以满足开发任务,所需资料书籍可以到图书馆翻阅或者个人购买,因此整个系统的所需投资符合我们的支付状况,经济可行性良好。
3.3 技术可行性
基于中小型企业的办公自动化系统的开发采用了先进成熟并且符合实际应用的开发方法,广泛应用于开发的网页开发工具Dreamweaver,MyEclipse,动态网页开发技术JSP,提供用户全新体验的AJAX技术,功能强大的数据库管理工具MySQL,采用最新最流行的框架技术Struts+Spring+Hiberate+AJAX等,结合自己的实际开发能力,可以开发出较为完善的办公自动化系统。
.WORD版本.
应解决的主要问题及技术要求: (1) 收集系统开发所使用的足够的信息。
(2) 按实际应用的可行性划分模块,确定模块功能。 (3) 建立完善的数据库支持环境。
(4) 使用JSP语言实现前台页面视图,使用AJAX技术实现数据与页面的整体
实现,并实现与数据库之间的各项操作。 (5) 各模块功能的协调及信息的沟通。
.WORD版本.
第4章 系统需求分析
4.1 系统调查
根据对一般型企业和行政机关的调查,通常办公室的业务,主要是员工个人工作任务处理,如当前任务容及一般信息的记录等;还有员工之间的远程电子通信等;另外管理人员进行大量文件的处理,通知、会议管理等。所以采用计算机文字处理技术生产各种文档,存储各种文档,或者采用计算机网络技术传递文档,是办公室自动化的基本特征。办公室是各行业工作的领导进行决策的场所。领导机关做出决策,发布指示,除了文档上的往来之外,更深层的工作,实际上是信息的收集、存储、检索、处理、分析,从而做出决策,并将决策作为信息传向下级机构或合作单位,或业务关联单位。 这些都需要办公自动化的辅助。因此需要一个能运用于各种企业的办公自动化系统。
本系统适用于中小型企业,中小企业规模相对较小,但其在功能上对系统的需求却是全面的。大体可分为:一方面是满足员工管理个人任务的常用办公功能,如任务记录查询和便笺记录等日常办公功能;一方面是员工电子交流信息,如电子等;另一方面则是通过信息发布为主的方式,如通知公告、会议记录、考勤管理等功能;。即完全采用计算机技术处理办公业务,使企业部人员能够方便快捷地共享信息、交流信息,高效地协同工作,既兼顾个人办公效率的提高,又可以实现群体协同工作。
经调查和分析,本系统将要实现的是能够满足中小型企业的需求功能,能够处理和解决企业基本的办公业务,因此设计了十大功能模块,其中包括个人办公,部,公共信息,日常管理,考勤管理,组织机构、权限管理、系统管理,个人管理,工具箱。系统需实现的是对用户登录的验证及监督,对公告的查看和发布,对员工信息查看、添加、浏览和删除。这些功能的实现使企业办公业务自动化,快速了解公司的最近信息、活动、会议和重大决策,减少人力和物力的支出,让企业能在激烈的市场竞争中更加灵活的应付所出现的问题,加强了公司处
.WORD版本.
理业务的能力。
日常管理员工管理管考勤理企业办公自动化系统管理机构消息通信个人办公
图4.1.1 系统功能结构分析图
4.2 系统业务分析
本系统适用于中小型企业,中小企业规模相对较小,但机构人员却不乏复杂,因此OA系统中角色不免繁多,OA系统也越做越大,权限管理是人们不得不面对的一个问题。对合法用户在系统中能做什么,对不同级别的合法用户在信息的访问和操作方面应该进行的权限控制,对非授权用户应该进行哪些的限制,都是应该解决的问题。另外,此系统是基于B/S设计模式实现的,B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S下的业务系统都需要有一个权限管理系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。对也特殊的流程,即使是合法用户也要验证其真实的身份,保证流程的安全运转。
因此,一个安全的OA系统,首先必须有其针对性的权限管理系统。
.WORD版本.
在本系统中初始角色设置:系统管理员、普通员工、系统任何用户均应具有普通员工的权限。
该系统的主要流程是用户通过登录模块进入系统主页,之后可以选择相应的功能对自己的信息进行处理。业务流程图如下: 个人办公 内部邮件 登 入 日常管理 权限管理 用户身份验证模块 系统主页 组织机构 考勤管理 重新登入 系统管理 个人管理 图4.2.1办公自动化系统业务流程图
4.3 系统功能描述
4.3.1 权限管理
(1)用户(User)可以拥有多个角色(Role),角色可以被分配给多个用户。 (2)权限的意思就是对某个资源的某个操作,现在规定:
1) 所谓资源,即系统的模块
2) 所谓操作,包括:增加、删除、修改、查询等操作 (3)权限管理系统的总体功能分为:授权与认证 (4)授权,指将权限授予角色或用户
1) 如果用户A拥有角色B、角色C,那么,缺省的情况下,用户A将拥有被
分配给角色A和角色C的所有权限(即默认情况下,用户A继承其拥有的角色所具有的所有权限)
2) 如果用户拥有多个角色,那么用户的权限是这些角色权限的合集
.WORD版本.
3) 如果用户拥有多个角色,而且角色之间的授权有冲突(比如对同一个资源
的同一个操作,一个角色为“允许”,另外一个角色为“不允许”),将以优先级别高的角色为准(所谓优先级别,也就是对于这个用户所拥有的角色而言,是有顺序的,同一个角色在不同的用户那里可能拥有不同的优先级)
4) 除了可以对角色进行授权外,也可以针对用户进行授权,也就是说,将权
限授予用户。针对某个资源的所有操作,我们可以设置这些权限对用户来说是“继承”或“不继承”
a. 继承:意思是这些权限将使用其(即用户)所拥有的角色的权限,而
不使用其(即用户)单独设置的权限
b. 不继承:意思是这些权限将使用其单独设置的权限,而不使用其所拥
有的角色的权限
(5)认证,指用户访问资源的某些操作时,根据授权,判断是否允许用户的访问
1) 在用户访问的时候,需要进行即时的判断(是否有权访问) 2) 应该提供查询的功能,可以查询某个用户所拥有的所有权限 总体上,可分为模块管理、角色管理和用户管理模块。 4.3.2 组织机构
系统需对公司部门机构和员工档案进行管理。
实现公司部门机构的增加、删除、修改、查找操作。机构管理模块共包括四个功能子菜单:浏览机构信息、添加新机构信息、删除机构信息。此功能只能由设置相应权限的管理员才能进行操作。
实现员工信息的增加、删除、修改、查找操作。员工管理模块共包括四个功能子菜单:浏览员工信息、添加新员工、删除员工信息、修改个人信息。其中每一个登录用户都能够修改个人信息。浏览员工信息、添加新员工、删除员工信息功能操作设置相应权限的管理员才能进行操作。
.WORD版本.
4.3.3 个人办公
我的办公桌:打开个人办公桌,在个人办公桌上,是到达各种管理功能的快捷,以及公司发布的一些公告信息。
我的便签:员工随手记录的信息,用于提醒备忘。
我的任务:员工个人添加个人任务,方便随时查看个人任务,提醒自己当前工作。 4.3.4 部
该模块用作当前的登录用户给系统的其他用户发送短消息,并可以查看其他用户发来的消息。本模块中应该保存的信息有:接收者、发送者、消息容、发送时间。包括写新、收件箱、发件箱、草稿箱,可以基本实现系统部人员的信息交流。
4.3.5 公共信息
该模块用作每一个登录系统的用户来查询公司所有员工的公开信息,方便联系。
4.3.6 日常管理
用户发送通知,大家都可以查看,只有管理员才有权修改、删除通知。本模块中应该保存的信息有:公告发布人、公告标题、公告容、公告时间。通过对数据表的查询,能及时了解公司的动态状况和公共信息。
会议进行时,用户客随时记录会议信息,然后保存备案。 4.3.7 考勤管理
系统实现员工请假管理,上下班时间定义和员工上下班登记。
请假管理:由人事管理员进行管理,对员工提交的请假申请进行登记,销假工作。
上下班时间定义:一年随季节变化,上下班时间不能固定,可自定义调整员工上下班时间。
.WORD版本.
上下班登记:由员工个人进行上下班登记。 4.3.8 系统管理
系统界面标题设置,用于自定义OA系统标题。 系统数据初始化,用于初始化系统原始数据。 4.3.9 个人管理
员工个人能够修改个人登录密码,以及更新个人公开信息,及时更新个人最新信息。 4.3.10 工具箱
系统提供日历、计算器等常用工具方便使用。
各个功能区的实现包括了公司日常所要进行的各种公司管理活动,以简单直观的形式体现出了原本枯燥乏味的各种数据,省却了许多繁复且容易出错的工作,不仅提高了工作的效率也增强了数据的可靠性和安全性。使公司的管理人员能够及时地对公司的现况做出分析与判断,并提出有力的依据。
4.4 本章小结
通过本章的编写我认识到。需求分析是一项重要的工作,也是最困难的工作。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个开发过程中最关键的一个过程。假如在需求分析时分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。需求分析之所以重要,就因为他具有决策性,方向性,策略性的作用,他在软件开发的过程中具有举足轻重的地位.在一个大型软件系统的开发中,他的作用要远远大于程序设计大家一定要对需求分析具有足够的重视。
.WORD版本.
第5章 系统设计
5.1 系统的Web体系结构
图5.1.1 系统功能图
.WORD版本.
5.2 系统功能模块
本系统共划分为十大功能模块,即个人办公,部,公共信息,日常管理,考勤管理,组织机构、权限管理、系统管理,个人管理,工具箱。 5.2.1 权限管理
在本系统中,权限管理模块是基础模块,表现为对某人对系统中资源的访问权限的管理,其他模块均在其基础上运行,拥有相应资源的权限能对该资源进行相应的操作,否则不能进行操作。
权限管理模块包括三个子模块:模块管理、角色管理、用户管理。
权限管理 模块管理 角色管理 图5.2.1.1权限管理功能模块图
用户管理
(1) 模块管理
模块就是我们要加以控制的资源信息,也就是系统中的功能模块,如机构管理、人员管理等。这些模块是树状结构的,是可以控制的,可以进行添加和删除。根据权限可以查看其详细信息。 (2) 角色管理
角色是一些权限的集合,可以把一组权限添加到角色中,方便权限的分配。系统中我们可以进行添加和删除角色,对角色进行授权。角色是有优先级的,优先级是认为定义的。特殊的角色应该有数字认证。 (3) 用户管理
用户和公司中的员工是一一对应的,每一个用户都拥有自己的账号和权限。我们可以对用户进行分配账号、删除、分配角色、单独对用户进行授权。分配角色时可以设定角色的优先级。对用户进行授权考虑是否继承其角色的权限。
.WORD版本.
(4) 其他
由于权限管理系统是OA系统中的基础模块,有一些测试模块如:机构管理、人员管理;拥有其权限的用户可以对其进行相应的操作;
关键问题:授权和认证过程 认证过程:
(1) 在用户进行登录的时候,进行身份认证,根据用户账号查找该用户有读取权限
的模块,并在页面中显示出来,否则不进行显示。
(2) 在用户对模块进行操作时,要验证该用户对该资源是否拥有相应的权限。 5.2.2 组织机构
此模块包括机构管理和员工管理两个子模块。 (1) 机构管理
本模块主要是为了实现应用本系统的公司对其公司组织架构管理,包括增加、删除公司机构信息,并且本模块只能被系统管理员所使用。
机构管理浏览机构信息列表添加新机构信息删除机构信息
图5.2.2.1机构管理功能模块图
(2) 员工管理
本模块主要是为了实现对注册员工的信息的管理,包括增加、删除以及修改,并且本模块只能被系统管理员所使用,其他普通用户只能修改自己的一些信息。
.WORD版本.
员工管理浏览员工信息列表添加员工信息删除员工信息修改个人信息
图5.2.2.2 员工管理功能模块图
5.2.3 个人办公
个人办公 我的办公桌 我的任务 我的便笺 图5.2.3.1个人办公功能模块图
(1) 我的办公桌
打开个人办公桌,在个人办公桌上,是到达各种管理功能的快捷,以及公司发布的一些公告信息。 (2) 我的便签
员工随手记录的信息,用于提醒备忘。 (3) 我的任务
员工个人添加个人任务,方便随时查看个人任务,提醒自己当前工作。
.WORD版本.
5.2.4 部
内部邮件 收件箱发件箱草稿箱垃圾箱发邮件该模块用作当前的登录用户给系统的其他用户发送短消息,并可以查看其他用户发来的消息。本模块中应该保存的信息有:接收者、发送者、消息容、发送时间。包括写新、收件箱、发件箱、草稿箱,可以基本实现系统部人员的信息交流。
5.2.5 公共信息
该模块用作每一个登录系统的用户来查询公司所有员工的公开信息,及联系方式。
用户可以选择按部门分类查找员工信息,也可以输入员工关键词来搜索员工信息。
5.2.6 日常管理 (1) 公告管理模块 具体功能如下:
1) 浏览公告:以列表的形式将公告信息显示给用户。 2) 添加新公告:向数据库中增加新的公告信息。 3) 修改公告:更新选定的信息。
.WORD版本.
图5.2.4.1部功能模块图
4) 删除公告:将选定的公告信息从数据库中删除。 5) 查看公告详细容:查看选定公告的具体信息。
公告管理浏览公告添加新公告修改公告删除公告查看公告详细内容 图5.2.6.1公告管理功能模块图
进入系统主页,单击“日常管理”进入二级菜单,单击“通知公告”便可看到公告以列表形式呈现的框架,公告的记录包括“公告主题”、“公告人”、“公告时间”和“操作”,“操作”包括“查看”、“编辑”和“删除”三个子功能,单击查看可查看该公告的详细信息;用户单击编辑便可修改的公告的原始信息存入到数据库中,查看公告信息列表中会显示新的信息。其中可更新的容包括“主题”、“容”和“发布人”,而“发布时间”则是系统自动记录的,不能更改。
单击“添加新公告”按钮便可到发布公告的对话框,用户可添加新公告,添加容包括“主题”和“容”。单击“添加公告”按钮提交后在“浏览公告”中查看到列表中新增了该公告。 (2) 会议管理模块
会议管理浏览会议记录录入会议修改会议信息删除会议记录查看会议详细内容
图5.2.6.2 会议管理功能模块图
.WORD版本.
5.2.7 考勤管理
本模块包括三个子模块:员工请假管理、上下班时间设置和员工上下班登记。 (1) 员工请假管理
一般由人事管理员登录系统,对员工提交的请假申请进行登记,销假工作。具体功能如下:
1) 浏览员工请假信息:以列表的形式将员工请假信息显示给用户。 2) 员工请假:向数据库中增加新的员工请假信息。 3) 修改员工请假信息:更新选定的信息。
4) 删除员工请假信息:将选定的员工请假信息从数据库中删除。
请假管理浏览员工请假信息员工请假修改员工请假信息删除员工请假信息
图5.2.7.1请假管理功能模块图
进入系统主页,单击“考勤管理”进入二级菜单,单击“请假管理”便可看到最近员工请假信息以列表形式按时间顺序呈现的框架,请假记录包括 “”、“所在部门”、“请假时间”、“预期返回时间”、“实际返回时间”、“请假说明”、“状态”和“操作”,“操作”包括 “销假”、“编辑”和“删除”两个子功能,用户单击销假便可请假信息,并重新更新请假状态;用户单击编辑便可修改的原始请假信息存入到数据库中,查看请假信息列表中会显示新的信息,其中可更新的容包括“请假时间”、“预期返回时间”和“请假说明”,其他信息则是系统自动记录的,不能更改。 (2) 上下班时间设置功能设计
一般由人事管理员登录系统,按季节自定义添加并启用相应的上下班时间。在同一时间,有且仅有一个选项是可以被启用的。 (3) 员工上下班登记功能设计
.WORD版本.
由登录用户进行操作,员工可查看个人考勤信息,完成当天的上下班登记操作。具体功能如图:
上下班登记浏览个人登记信息上班登记下班登记
图5.2.7.2 员工上下班登记功能模块图
员工登录系统后,选择上下班登记模块,进入该主页,即可浏览个人最近时间的上下班登记状态,并可进行上下班登记操作。 5.2.8 系统管理
本模块应由系统管理员进行操作。
系统管理 界面设置 数据初始化 图5.2.8.1 系统管理功能模块图
进入系统主页,单击“系统管理”进入二级菜单,单击“界面设置”便可看到原界面标题信息。擦除原信息,填入新信息,保存即完成修改界面标题操作。
进入系统主页,单击“系统管理”进入二级菜单,单击“系统数据初始化”,应该再次填入系统管理员密码以确保用户的合法性,保存即完成系统数据初始化操作。
.WORD版本.
5.2.9 个人管理
本模块包含两个功能:修改密码,修改个人信息。
修改密码:登录用户需填写原始密码,新密码及确认新密码来实现密码的修改。
修改个人信息:登录用户需删除原始旧信息,填写个人最新信息,并确认修改。
5.2.10 工具箱
该模块提供日历、计算器常用小工具。此类工具可以使用javascript制作成为客户端工具。
5.3 数据库设计
数据库的设计是本系统的关键,系统的所有主要功能都依靠数据库的服务来实现,一个功能、强大,结构合理的数据库是系统正常运行的基础。MySQL数据库是一个关系型数据库。它的功能强大,运用灵活,下面我就来详细论述本系统数据库的设计与实现。 5.3.1 数据库概念设计
将需求分析得到的用户需求抽象为信息结构及概念模型的过程是概念结构设计。为了描述数据库结构的概念模式,这里采用E-R图来描述数据库的实体关系。
.WORD版本.
(1) 组织机构模块的E-R图如图5.3.1.1所示:
图5.3.1.1 组织机构E-R图
(2) 权限管理模块的E-R图如图5.3.1.2所示:
图5.3.1.2 权限管理E-R图
.WORD版本.
(3) 管理模块的E-R图如图5.3.1.3所示:
图5.3.1.3 管理E-R图
(4) 我的任务模块的E-R图如图5.3.1.4所示:
图5.3.1.4 我的任务E-R图
.WORD版本.
(5) 我的便笺模块的E-R图如图5.3.1.5所示:
图5.3.1.5 我的便笺E-R图
(6) 公告管理模块的E-R图如图5.3.1.6所示:
图5.3.1.6 公告表E-R图
.WORD版本.
(7) 请假管理模块的E-R图如图5.3.1.7所示:
图5.3.1.7 请假管理E-R图
(8) 上下班登记模块的E-R图如图5.3.1.8所示:
图5.3.1.8上下班登记模块E-R图
5.3.2 数据库逻辑设计
逻辑结构设计的任务是把概念结构设计阶段设计好的E-R图转换成与选用的DBMS产品所支持的数据模型相符合的逻辑结构。
E-R图转换为关系数据模型所要解决的问题是如何将实体和实体间的联系转换成关系模式,如何确定这些关系模式的属性和码[12]。
数据库中两实体间1:n联系转换为一个与n端对应的关系模式合并的关系模
.WORD版本.
式的方法是将联系的属性与1端的码加入n端作为属性,主码为n端实体的主码。 (1) 组织机构管理模块中由E-R图转换成的关系数据模式有:
表5.3.2.1 表名:t_employee
字段名称 ID name sex orgId duty phone address 字段说明 唯一ID 用户名 性别 部门id 职务 地址 字段类型 int(10) varchar(50) varchar(4) int(10) varchar(20) varchar(20) varchar(50) 可否为空 否 否 是 否 是 是 是 主键 是 备注 自增字段 外键 表5.3.2.2 表名:t_organization
字段名称 ID name sn description parentId 字段说明 唯一ID 机构名称 机构编号 描述说明 父机构id 字段类型 int(10) varchar(50) varchar(4) varchar(20) int(10) 可否为空 否 否 是 是 否 主键 是 备注 自增字段 外键 (2) 权限管理模块中由E-R图转换成的关系数据模式有:
表5.3.2.3 表名:t_user
字段名称 ID username password createTime expireTime empId 字段说明 唯一ID 用户名 用户密码 创建时间 过期时间 员工id 字段类型 int(10) varchar(50) varchar(50) datetime datetime int(10) 表5.3.2.4 表名:t_role
可否为空 否 否 否 是 是 否 主键 是 备注 自增字段 外键 字段名称 ID name 字段说明 唯一ID 角色名称 字段类型 int(10) varchar(50)
可否为空 主键 否 是 否 备注 自增字段 .WORD版本.
表5.3.2.5 表名:t_usersroles
字段名称 ID userId roleId ordrNo 字段说明 唯一ID 用户id 角色id 顺序编号 字段类型 int(10) int(10) int(10) int(10) 表5.3.2.6 表名:t_module
可否为空 否 否 否 是 主键 是 否 否 否 备注 自增字段 外键 外键 字段名称 ID Name Sn url ordrNo parentId 字段说明 唯一ID 模块名称 模块编号 导航路径 顺序编号 父模块id 字段类型 int(10) varchar(50) varchar(4) varchar(20) int(10) varchar(10) 表5.3.2.7 表名:t_acl
可否为空 否 否 否 否 是 否 主键 是 否 否 否 否 否 备注 自增字段 外键 字段名称 ID principalTyle principalSn resourceSn aclState aclTriState 字段说明 唯一ID 权限类型 时间 日期 资源模块id 权限标志 权限继承 字段类型 int(10) Varchar(45) int(10) int(10) int(10) int(10) 可否为空 否 否 否 否 否 否 主键 是 否 否 否 否 否 备注 自增字段 外键 外键 (3) 管理模块中由E-R图转换成的关系数据模式有:
表5.3.2.8 表名:t_mail
字段名称 ID Subject Content sendDate Attachment 字段说明 唯一ID 主题 容 发送日期 日志容 字段类型 int(10) int(10) verchar(1000) datetime verchar(1000)
可否为空 否 否 是 是 是 主键 是 否 否 否 否 备注 自增字段 .WORD版本.
表5.3.2.9 表名:t_usersmails
字段名称 ID userType userId mailId handledType lastHandledType isRead senderId 字段说明 唯一ID 用户类型 用户id id 类型 原始类型 是否已读 发用户id 字段类型 int(10) int(10) int(10) int(10) int(10) int(10) int(10) int(10) 可否为空 否 否 否 否 否 否 否 否 主键 是 否 否 否 否 否 否 否 备注 自增字段 外键 外键 外键 (4) 我的任务模块中由E-R图转换成的关系数据模式有:
表5.3.2.10 表名:t_task
字段名称 ID subject startTime endTime Content process createTime userId 字段说明 唯一ID 主题 开始时间 结束时间 容 进度 创建时间 用户id 字段类型 int(10) varchar(255) datetime datetime varchar(1000) varchar(255) int(10) int(10) 可否为空 否 否 是 是 是 是 是 否 主键 是 否 否 否 否 否 否 否 备注 自增字段 外键 (5) 我的便笺模块中由E-R图转换成的关系数据模式有:
表5.3.2.11 表名:t_note
字段名称 ID title content createtime userId
字段说明 唯一ID 标题 容 创建时间 用户id 字段类型 int(10) varchar(50) varchar(1000) datetime int(10) 可否为空 否 否 是 否 否 主键 是 否 否 否 否 备注 自增字段 外键 .WORD版本.
(6) 公告管理模块中由E-R图转换成的关系数据模式有:
表5.3.2.12 表名:t_placard
字段名称 ID subject content informer createTime 字段说明 唯一ID 主题 会议容 发布人 公布时间 字段类型 int(10) varchar(50) varchar(1000) varchar(50) datetime 可否为空 否 否 是 否 否 主键 是 否 否 否 否 备注 自增字段 (7) 请假管理模块中由E-R图转换成的关系数据模式有:
表5.3.2.13 表名:t_leave
字段名称 ID leaveTime ReturnTime actualReturnTime Reason Status userId 字段说明 唯一ID 请假时间 预期返回时间 实际返回时间 发布人 请假状态 用户id 字段类型 int(10) datetime datetime datetime 可否为空 否 是 是 是 主键 是 否 否 否 否 否 否 备注 自增字段 外键 varchar(1000) 是 int(10) 否 int(10) 否 (8) 上下班登记模块中由E-R图转换成的关系数据模式有:
表5.3.2.14 表名:t_dutyruletime
字段名称 ID onDutyRuleTime offDutyRuleTime comment Status 字段说明 唯一ID 上班时间 下班时间 说明 启用状态 字段类型 int(10) time time varchar(1000) int(10)
可否为空 否 否 否 是 否 主键 是 否 否 否 否 备注 自增字段 .WORD版本.
表5.3.2.15 表名:t_dutylog
字段名称 ID dutyDate onDutyTime offDutyTime onDutyStatus offDutyStatus userId dutyRuleTimeId 字段说明 唯一ID 上班日期 上班时间 下班时间 上班登记状态 下班登记状态 用户id 上下班时间参照id 字段类型 int(10) date time time varchar(1000) int(10) int(10) int(10) 可否为空 否 是 是 是 是 否 否 否 主键 是 否 否 否 否 否 否 否 备注 自增字段 外键 外键 5.4 本章小结
本章对OA软件系统进行了系统设计,描述了系统的体系结构,系统功能模块的定义。
这一章中主要设计软件系统的模块层次结构,设计数据库的结构以及设计模块的控制流程,其目的是明确软件系统\"如何做\"。这个阶段又分两个步骤:概要设计和详细设计。概要设计解决软件系统的模块划分和模块的层次机构以及数据库设计;详细设计解决每个模块的控制流程,部算法和数据结构的设计。这个阶段结束,要交付概要设计说明书和设计说明,也可以合并在一起,称为设计说明书。
在对此系统分析的基础上,我们设计出能满足预定目标的系统的过程。系统设计容主要包括:确定设计方针和方法,将系统分解为若干子系统,确定各子系统的目标、功能及其相互关系,决定对子系统的管理体制和控制方式,对各子系统进行技术设计和评价,对全系统进行技术设计和评价等。
.WORD版本.
第6章 系统的实现
6.1 系统的开发环境
6.1.1 硬件环境
处理器:Intel(R) Core(TM) i5 存:4G 硬盘:500G 6.1.2 软件环境
操作系统:Windows 7 ultimate sp1 数据库:MySQL 5.5 Web服务器:Tomcat 7.0 IDE:MyEclipse 9.0
在整个系统实现过程中,采用MVC三层架构的开发模式,即:Struts+Spring+Hibernate三层架构,这些组件可以进行交互和重用;另外在构建环境的时候,使用MySQL+Tomcat+MyEclipse进行开发[13]。
6.2 编码
由于代码繁多,此处仅列出部分模块代码示例,其他模块详见项目源代码文件。
6.2.1 新提醒编码实现
当有接收到新时,系统在状态栏给予提醒,此处编码实现使用javascript轮询方式通过ajax定时向服务器轮询请求,代码如下:
$.ajax({
//处理ajax请求
url:'${ctx }/mailMgr/mail_getNotReadCount.action', cache: false,
//回调函数返回未读短信数目 success: function(responseData){
$('#messageCount').html(responseData); },
error:function(data){ //alert(\"加载失败\"); } });
//每隔5秒递归调用一次,刷新未读短信数目
window.setTimeout(GetMessageCount.FindMessage,10000);//核心语句
6.2.2 用户登录验证编码实现
用户登录Action代码示例(文件LogInOutAction.java):
public String login() {
HttpServletResponse response = ServletActionContext.getResponse();
.WORD版本.
response.setCharacterEncoding(\"UTF-8\");
ResponseMessageBody rmb = new ResponseMessageBody();
String rand =
ServletActionContext.getRequest().getSession().getAttribute(\"rand\").toString().trim();
if(loginForm.getCheckCode() == null
|| !rand.equals(loginForm.getCheckCode())){ rmb.setCode(ResponseCode.FAILED);
rmb.setMessage(ResponseMessage.LoginCheckCodeError); ResponseUtil.printData(response, JsonUtil.getJSONStringFromObject(rmb)); return null; }
User user = null;
String responseCodeText =
userService.validateLoginUser(loginForm.getUsername(), loginForm.getPassword()); if(!responseCodeText.equals(ResponseCode.LoginValidateSuccess)){ rmb.setCode(ResponseCode.FAILED); rmb.setMessage(responseCodeText); ResponseUtil.printData(response, JsonUtil.getJSONStringFromObject(rmb)); return null; }else{
user = userService.findLoginUserByUserName(loginForm.getUsername());
ServletActionContext.getRequest().getSession().setAttribute(\"loginUser\user);
rmb.setCode(ResponseCode.SUCCESS); rmb.setMessage(responseCodeText); ResponseUtil.printData(response, JsonUtil.getJSONStringFromObject(rmb)); return null; } }
6.2.3 用户管理Service编码实现
用户Service代码示例(文件UserService.java):
public class UserService implements IUserService {
private IUserDAO userDAO;
.WORD版本.
public IUserDAO getUserDAO() { return userDAO; }
public void setUserDAO(IUserDAO userDAO) { this.userDAO = userDAO; }
private IRoleDAO roleDAO;
public void setRoleDAO(IRoleDAO roleDAO) { this.roleDAO = roleDAO; }
public IRoleDAO getRoleDAO() { return roleDAO; }
private IUsersRolesDAO usersRolesDAO;
public void setUsersRolesDAO(IUsersRolesDAO usersRolesDAO) { this.usersRolesDAO = usersRolesDAO; }
public IUsersRolesDAO getUsersRolesDAO() { return usersRolesDAO; }
private IEmployeeDAO employeeDAO;
public void setEmployeeDAO(IEmployeeDAO employeeDAO) { this.employeeDAO = employeeDAO; }
public IEmployeeDAO getEmployeeDAO() { return employeeDAO; } /**
* 新增用户 */
public void addUser(User user, int employeeId) { if(employeeId == 0){
throw new SystemException(\"必须选择相应的人员信息\"); }
user.setEmployee(employeeDAO.findById(employeeId));
//设置创建时间
user.setCreateTime(new Date());
userDAO.save(user);
.WORD版本.
} /**
* 删除用户 */
public void delUser(int userId) {
User user = userDAO.findById(userId); userDAO.delete(user); } /**
* 更新用户帐号信息 */
public void updateUser(User user, int employeeId) { if(employeeId == 0){
throw new SystemException(\"必须选择相应的人员信息\"); }
user.setEmployee(employeeDAO.findById(employeeId)); userDAO.merge(user); } /**
* 按id查找用户账户信息 */
public User findUser(int userId) { return userDAO.findById(userId); }
/**
* 分页查找用户列表 */
public PagerModel searchUsers() { PagerUtil pu = new PagerUtil();
pu.setSession(userDAO.getMySession());
return pu.searchPaginated(\"from User\"); } /**
* 根据用户id查找相应的用户角色 */
public List searchUserRoles(int userId) {
return usersRolesDAO.findByProperty(\"user.id\}
.WORD版本.
/**
* 添加或更新用户拥有的角色,如果用户[userId]已经拥有角色[roleId], * 则更新其优先级[orderNo],否则给用户分配相应的角色,并设置优先级 * param userId * param roleId * param orderNo */
public void addOrUpdateUserRole(int userId, int roleId, int orderNo) { //首先根据userId和roleId查找UsersRoles对象 UsersRoles ur = findUsersRoles(userId,roleId);
if(ur == null){
ur = new UsersRoles(); ur.setOrderNo(orderNo);
ur.setUser(userDAO.findById(userId)); ur.setRole(roleDAO.findById(roleId));
usersRolesDAO.save(ur); return; } //
ur.setOrderNo(orderNo); usersRolesDAO.merge(ur); }
/**
* 删除分配给用户的角色(关联) * param userId * param roleId */
public void delUserRole(int userId, int roleId) { //首先根据userId和roleId查找UsersRoles对象 UsersRoles ur = findUsersRoles(userId, roleId); usersRolesDAO.delete(ur); } /**
* 用户登录验证操作,返回验证反馈代码 * param username * param password
* return 验证反馈代码 */
.WORD版本.
public String validateLoginUser(String username, String password) { List users = userDAO.findByUsername(username);
if(users == null || users.size() < 1){ return ResponseCode.LoginNotExistUser; }
if(users.size() > 1){
return ResponseCode.LoginExistMoreUser; }
User user = (User) users.get(0);
if(!user.getPassword().equals(password)){ return ResponseCode.LoginPasswordError; }
if(user.getExpireTime() != null){
//现在时间
Calendar now = Calendar.getInstance();
//失效时间
Calendar expireTime = Calendar.getInstance(); expireTime.setTime(user.getExpireTime());
//如果现在在失效时间之后 if(now.after(expireTime)){
return ResponseCode.LoginUserExpired; } }
return ResponseCode.LoginValidateSuccess; }
/**
* 查找登录用户 */
public User findLoginUserByUserName(String username) { List users = userDAO.findByUsername(username); return (User)users.get(0); }
/**
* 修改密码 */
.WORD版本.
public void modifyPassword(int userId, String oldPassword, String newPassword) {
User user = userDAO.findById(userId);
if(user.getPassword().equals(oldPassword)) {
user.setPassword(newPassword); userDAO.merge(user); }else{
throw new SystemException(\"password is incorrect.\"); } }
/**
* 按用户id和角色id查找用户角色信息 * param userId * param roleId * return */
private UsersRoles findUsersRoles(int userId, int roleId) { Session session = usersRolesDAO.getMySession(); String hql = \"select ur from UsersRoles ur where ur.role.id = ? and ur.user.id = ?\";
return (UsersRoles)session.createQuery(hql)
.setParameter(0, roleId) .setParameter(1, userId) .uniqueResult(); } }
6.2.4 用户管理Dao编码实现
用户DAO层Hibernate数据访问代码示例(UserDAO.java):
public class UserDAO extends HibernateDaoSupport implements IUserDAO {
private static final Logger log = LoggerFactory.getLogger(UserDAO.class); protected void initDao() { //do nothing }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#save(.qtech.hhoa.model.User) */
public void save(User transientInstance) { log.debug(\"saving User instance\"); try {
getHibernateTemplate().save(transientInstance);
.WORD版本.
log.debug(\"save successful\"); } catch (RuntimeException re) { log.error(\"save failed\ throw re; } }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#delete(.qtech.hhoa.model.User) */
public void delete(User persistentInstance) { log.debug(\"deleting User instance\"); try {
getHibernateTemplate().delete(persistentInstance); log.debug(\"delete successful\"); } catch (RuntimeException re) { log.error(\"delete failed\ throw re; } }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#findById(java.lang.Integer) */
public User findById( java.lang.Integer id) {
log.debug(\"getting User instance with id: \" + id); try {
User instance = (User) getHibernateTemplate() .get(\".qtech.hhoa.model.User\ return instance;
} catch (RuntimeException re) { log.error(\"get failed\ throw re; } }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#findByExample(.qtech.hhoa.model.User) */
public List findByExample(User instance) {
log.debug(\"finding User instance by example\"); try {
List results = getHibernateTemplate().findByExample(instance);
log.debug(\"find by example successful, result size: \" + results.size());
.WORD版本.
return results;
} catch (RuntimeException re) {
log.error(\"find by example failed\ throw re; } }
/* (non-Javadoc) * see .qtech.hhoa.dao.IUserDAO#findByProperty(java.lang.String, java.lang.Object) */
public List findByProperty(String propertyName, Object value) { log.debug(\"finding User instance with property: \" + propertyName + \ try {
String queryString = \"from User as model where model.\" + propertyName + \"= ?\";
return getHibernateTemplate().find(queryString, value); } catch (RuntimeException re) {
log.error(\"find by property name failed\ throw re; } }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#findByUsername(java.lang.Object) */
public List findByUsername(Object username ) {
return findByProperty(USERNAME, username ); }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#findByPassword(java.lang.Object) */
public List findByPassword(Object password ) {
return findByProperty(PASSWORD, password ); }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#findAll()
.WORD版本.
*/
public List findAll() {
log.debug(\"finding all User instances\"); try {
String queryString = \"from User\";
return getHibernateTemplate().find(queryString); } catch (RuntimeException re) {
log.error(\"find all failed\ throw re; } }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#merge(.qtech.hhoa.model.User) */
public User merge(User detachedInstance) { log.debug(\"merging User instance\"); try {
User result = (User) getHibernateTemplate() .merge(detachedInstance); log.debug(\"merge successful\"); return result;
} catch (RuntimeException re) { log.error(\"merge failed\ throw re; } }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#attachDirty(.qtech.hhoa.model.User) */
public void attachDirty(User instance) {
log.debug(\"attaching dirty User instance\"); try {
getHibernateTemplate().saveOrUpdate(instance); log.debug(\"attach successful\"); } catch (RuntimeException re) { log.error(\"attach failed\ throw re; } }
/* (non-Javadoc)
* see .qtech.hhoa.dao.IUserDAO#attachClean(.qtech.hhoa.model.User) */
.WORD版本.
public void attachClean(User instance) {
log.debug(\"attaching clean User instance\"); try {
getHibernateTemplate().lock(instance, LockMode.NONE); log.debug(\"attach successful\"); } catch (RuntimeException re) { log.error(\"attach failed\ throw re; } }
public static UserDAO getFromApplicationContext(ApplicationContext ctx) { return (UserDAO) ctx.getBean(\"UserDAO\"); }
public Session getMySession() { return this.getSession(); } }
6.3 界面设计
优美的界面效果是至关重要的,它直接关系到用户体验,本系统在界面设计中以简洁干净为原则进行设计,采用html+div+css进行布局实现,下面要介绍本系统界面设计。
.WORD版本.
6.3.1 登录界面设计
图6.3.1.1 登录界面
输入用户名、密码及验证码,点击 “登录”按钮,系统进行信息验证确定用户合法后,用户即进入OA系统操作主界面。 6.3.2 系统主界面设计
.WORD版本.
图6.3.2.1 系统主界面
主页顶部为标题栏,显示有公司logo,登录用户名,及当前时间。在实际操作使用时,用户可点击hide隐藏标题栏以扩大操作区域。
左侧是菜单导航栏,拥有不同角色或权限的用户会看到不同的导航菜单。用户根据需要选择点击导航。
右侧是操作区,用户在操作区可得到所需的信息,并对信息进行操作。 6.3.3 个人办公模块界面设计 我的任务列表界面如图6.3.3.1所示:
图6.3.3.1我的任务列表界面
我的任务列表显示了当前的任务。点击右上角添加新任务即可弹出新任务录入界面进行信息录入;还可对相应的记录进行查看、编辑、删除操作;可按日期查询对应日期的任务方便操作。
.WORD版本.
图6.3.3.2 我的任务添加界面
用户填入信息,点击“OK”,即可保存任务信息,以备查看。
图6.3.3.3 我的便笺界面
我的便笺以方块形式显示,方便易于浏览。方块可拖动,交互更加人性化。另外,用户可以编辑或删除相应的便笺。
.WORD版本.
6.3.4 公共信息模块界面设计 公共通讯录界面如图6.3.4.1所示:
图6.3.4.1 公共通讯录
用户可以根据需要按部门查询员工联系信息,或者按中的关键字查询员工联系信息。
6.3.5 管理模块界面设计 收件箱界面如图6.3.5.1所示
图6.3.5.1收件箱界面
.WORD版本.
收件箱列表即可按时间顺序查看到信息。可以点击每项的“删除”进行单项删除,还可以根据需要勾选相应的记录项,点击右上角的“删除所选”按钮进行批量删除。
6.3.6 考勤管理模块界面设计 请假管理界面如图6.3.6.1所示:
图6.3.6.1请假管理界面
用户可以对员工提交的请假申请进行登记、编辑操作,在确定员工反假后进行相应的销假操作。
上下班时间设置界面如图6.3.6.2所示:
.WORD版本.
图6.3.6.2 上下班时间设置界面
用户可根据需要添加新的上下班作息时间,对所需的记录项启用,所有员工即能按照所指定的作息时间进行上下班登记操作。需注意的是:有却仅有一个记录项可以被启用。
上下班登记界面如图6.3.6.3所示:
图6.3.6.3上下班登记界面
用户可以查看个人上下班登记信息。点击“上班登记”、“下班登记”即可完成相应的登记操作。
.WORD版本.
6.3.7 日常管理模块界面设计 通知公告界面如图6.3.7.1所示:
图6.3.7.1 通知公告界面
用户可以通过列表浏览近期的通知公告信息,并可完成添加、删除、修改、查看通知公告信息操作。
添加通知公告界面如图6.3.7.2所示:
图6.3.7.2 添加通知公告界面
.WORD版本.
6.3.8 权限管理模块界面设计 模块管理界面
图6.3.8.1 模块管理界面
角色管理界面
图6.3.8.2 角色管理界面
用户管理界面
.WORD版本.
图6.3.8.3 用户管理界面
6.3.9 组织机构管理模块界面设计 机构管理界面
.WORD版本.
图6.3.9.1 机构管理界面
员工管理界面
图6.3.4.1 员工管理界面
.WORD版本.
6.3.10 系统管理模块界面设计 界面标题设置界面
图6.3.10.1 界面标题设置界面
6.3.11 个人管理模块界面设计 个人修改密码界面
图6.3.4.1 个人修改密码界面
修改个人信息界面
图6.3.4.1 修改个人信息界面
用户需更新个人信息,代开修该个人信息界面,此时旧有的信息会显示在页面上,用户只需要在相应的文本框中擦除旧信息,填入新信息并点击“修
.WORD版本.
改”保存即可。
6.4 系统测试
所谓系统测试就是为了发现程序中错误而执行程序的过程。
在设计系统的过程中,存在一些错误是必然的。对于语句的语法错误,在程序运行时自动提示,并请求立即纠正,因此,这类错误比较容易发现和纠正。但另一类错误是在程序执行时由于不正确的操作或对某些数据的计算公式的逻辑错误导致的错误结果。这类错误隐蔽性强,有时会出现,有时又不出现,因此,对这一类动态发生的错误的排查是耗时费力的[13]。
与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由若干个模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成:
(1)模块测试 在这个测试步骤中所发现的往往是编码和详细设计的错误。 (2)系统测试 在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。
(3)验收测试 在这个测试步骤中发现的往往是系统需求说明书中的错误。 为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。
(1)单元测试
单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。
(2)集成测试
集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。
(3)确认测试
.WORD版本.
确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。
(4)系统测试
软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。
单独对系统的测试主要从以下几方面入手:
① 功能测试:测试是否满足开发要求,是否提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准。
② 强度测试及性能测试:测试系统能力最高实际限度,即软件在一些超负荷情况下功能实现的情况。
③ 安全测试:验证安装在系统的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。针对本系统主要是对权限系统的测试和对无效数据、错数据、和非法数据干扰的能力的测试。 6.4.1 测试实例的研究与选择
程序测试的主要方法分为两大类,白盒测试和黑盒测试。本OA系统的测试综合了白盒测试、黑盒测试两种方法,但主要使用的是黑盒测试方法。 6.4.2 测试环境与测试条件
处理器:Intel(R) Core(TM) i5 存:4G 硬盘:500G
操作系统:Windows 7 ultimate sp1 数据库:MySQL 5.5 Web服务器:Tomcat 7.0
.WORD版本.
6.4.3 对身份验证功能进行测试 测试用例设计:
(1) 输入正确的用户名、密码和验证码。用户名:admin,密码:admin,验证码:5478。
(2) 输入错误的用户名、密码和正确的验证码。用户名:admn,密码:admn,验证码:4389。
(3) 输入正确的用户名、密码和错误的验证码。用户名:admin,密码:admin,验证码:4444。
6.4.4 对员工信息管理功能进行测试 测试用例设计:
(1) 新增员工。:liujw,性别:男,部门:人事部,职务:经理,联系:654321,联系地址:市。
(2) 修改员工信息。将用户联系改为12345。 (3) 查看用户名为admin为admin的个人信息。 (4) 删除用户名为admin为liujw的个人信息。 6.4.5 测试结果
表6.4.5.1 登录测试结果 测试项目 输入正确用户名、密码和验证码 输入错误用户名、密码和正确验证码 输入正确用户名、密码和错误验证码 测试数据 预期测试结果 用户名:admin,密码:admin,验证码:5478。 登陆成功,进入系统 用户名:admn,密码:admn,验证码:4389。 登陆失败,系统显示用户不存在 用户名:admin,密码:admin,验证码:4444。 登陆失败,系统显示验证码错误
.WORD版本.
测试项目 新增员工 修改员工信息 查看用户信息 删除用户信息
表6.4.5.2 员工信息管理功能测试结果 测试数据 预期测试结果 :liujw,性别:男,部门:人事部,职务:增加成功 经理,联系:654321,联系地址:市。 将用户admin的联系改为12345,身份改为修改成功 系统管理员。 查看用户名为admin为admin的个人信息。 正确显示 删除用户名为admin为admin的个人信息。 删除成功 6.5 系统的维护
在OA软件系统投入日常运行后,就需要不断地对系统进行维护,使程序和运行始终处于最佳的工作状态。任何一个软件系统,在它存在的整个生命周期中,应当不断地改进。没有一成不变的系统,没有一成不变的程序,也没有一成不变的数据。由于企业要发展,环境在变化,因此对研发生产活动来说,也会不断产生新的要求,随之而来要对功放调试软件系统加以修改。一般来说,用于维护系统的费用比建立系统所花的费用多一倍以上
维护定义:
系统维护是指信息系统投入运行后,为了改正错误或者满足新的需要而修改系统的过程。根据维护活动的目的不同,可把系统维护分为改正性维护、适应性维护、完整性维护和预防性维护。
(1)改正性维护
任何软件都会存在潜在的错误,在投入使用后,诊断和改正这类错误的过程称为改正性错误[15]。
(2)适应性错误
由于信息技术发展日新月异,计算机领域的各个方面都在急剧变化。随着新的计算机硬件系统的不断更新,新的操作系统与数据库,或者操作系统与数据库的新版本就会经常出现,外部设备和其他部件也要经常修改和改进。测试系统的使用寿命一般超过最初开发时的系统环境的寿命。为了适应新的变化而对系统进行的修改,称为适应性维护。
.WORD版本.
[14]
。
(3)完善性维护
一个测试系统投入使用和成功运行后,使用人员会提出增加新功能,修改已有的功能以及一般的改进要求和建议,例如修改输入输出格式,增加新的测试项目等。为了满足和部分满足这类要求,就要进行完善性维护。这类维护占软件维护工作的大部分[16]。
(4)预防性维护
为了进一步改进测试系统的可维护性和可靠性,或者为了提供更好的基础而对测试系统进行的修改,称为预防性维护。相对而言,在系统维护中这类维护是很少的。本系统的维护工作主要是完善性维护,根据运行过程中用户的新需要,对系统进改。
6.6 本章小结
系统的实现和测试是系统设计过程的最后阶段,此阶段首先应根据详细设计阶段对系统的各个功能模块的设计来实现各个功能模块的功能,然后针对各个功能模块的功能实现情况进行单元测试,最后将各个功能模块集成到一起进行集成测试。测试后可能会发现系统中存在的错误和系统的不完善之处,然后针对这些错误和不完善的地方进行修改并调试,将系统中的错误减到最少。
.WORD版本.
第7章 总结与展望
7.1 结论
办公自动化系统是一个将企业管理及基础办公需求作为核心,基于B/S模式的信息服务系统,它集先进的计算机技术与办公自动化理论于一身,适应当今办公自动化系统的开发需求。经过一个月的开发与设计,办公自动化系统的用户身份验证模块和其他基本功能模块已开发成为一个较完善的信息交互平台,初步具备实际使用的能力。
在系统的开发过程中,我们对系统开发与实际应用有了更深了理解和认识,为我们以后的学习和工作打下了坚实的理论与实际操作相结合的基础。同时,在开发过程中,我们对SSH框架、数据库(MySQL)、dwr、AJAX、jQuery等相关技术知识也有了更深层次的认识。特别是对SSH的学习。
由于开发设计能力有限,开发经验不足,系统仍存在很多不足,与实际应用中还有很大差距。在调研阶段,搜集的信息不充足,对实际情况了解不足。因此,在开发过程中做出的需求分析不彻底,系统的功能及工作流程不能在设计之初完整地确定下来,系统的某些功能是随着设计的进行逐步确定和修改的,在一些功能中仍存在不完善之处,页面需进一步美化,系统后台管理方面需给予进一步重视。用户输入容错设计方面需进一步加强。
这次毕业设计可谓是综合了我大学所学的所有知识得到了应用,但由于水平和经验所限,系统还存在不足之处,有待进一步完善和改进。
7.2 展望
本系统的实现实际意义在于提高了公司经营管理工作的效率,减少了工作的失误率。由于本系统在应运方面现在还存在一定的领域局限性,但是通过在一定领域的实际运行的经验的积累,可以总结出一定的规律而使其在经过修改之后可以运行在别的商业领域。值得一提的是本系统现在已经投入使用开始正常工作
.WORD版本.
了。
在今后的开发工作中系统的性能结合新技术的使用不仅可以使系统具有时代性也可以提高系统的运行效率,在计算机世界中还有很多方面值得我们深入研究,希望今后可以有所突破。
.WORD版本.
致谢
在我们的指导老师王成钢老师的悉心指导下,我们的毕业设计和毕业论文圆满完成了。
在OA办公系统的开发过程中,我们得到了指导老师的细心指导。老师与我们一起研讨开发项目,为我们提供开发实例,帮助我们进行调研和分析,耐心地指导我们进行开发和解决问题。他严密的逻辑思维以及严谨的治学态度都给予了我们极大的鼓励与帮助,在他的帮助下我们不断进步并自我们提高。在此过程中,对于我们遇到的所有问题和困难,老师都给予了细心的解答和真诚的帮助,在此我们表示衷心的感谢。
在这里我们还要感谢我们的同学,在开发过程中,我们以积极上进的精神,刻苦钻研,互相帮助使设计目标得以实现。我们很高兴能在这样有凝聚力和好学上进的氛围中学习和工作,是大家的支持和帮助让我们的毕业设计和毕业论文能够顺利完成!
这次毕业设计也为我走上激烈竞争的社会打下了一个好的基础,也培养了我自学钻研技术的能力,这对我在将来适应和跟上高速发展的信息技术是十分重要的。
此外,我们的毕业设计课题得以很好的完成,这和学校为我们提供的良好的学习和工作环境,以及设计过程给予我支持和帮助的软件工程各位老师是分不开的,特此向他们表示衷心的感谢!
2012年6月
.WORD版本.
参考文献
[1]正涛.OA系统发展历程与趋势[M] .清华大学.2008.8 [2]王立.UML与软件工程基础[M].高等教育.2004.2 [3]邱哲,马斗.Struts设计开发大全[M].清华大学.2006.2 [4] 沃尔斯.Spring in Action [M].人民邮电.2005.6
[5]刚.整合STRUTS+HIBERNATE+SPRING应用开发详解[M].清华大学,2007 [6]耿祥义,跃平.JAVA 2实用教程[M].清华大学.2004.2 [7]晓华.JSP应用开发详解[M].电子工业.2007.5 [8] 斯瓦尼.MySQL 完全手册[M].电子工业.2005.2 [9]刚.ECLIPSE从入门到精通[M] .清华大学.2006.2 [10]文龙、淑珍、吴芸.软件工程[M] .电子工业.2007.10 [11]王中兵.Java Web主流框架整合[M].电子工业.2008.2
[12]王珊,萨师煊.数据库系统概论[M].(第四版).北京:高等教育,2006 [13]芝兴,瑞龙.Java EE Web 编程[M] .机械工业.2008.5
[14] Grady Booch,James Rumbaugh,Ivar Jacobson..UML用户指南[M].北京:机械工业.2006 [15] Derek Thompson.Fundamentals of Spatial Information Systems.Academic Press, 2006
[16] Bruce Eckel. Thinking in Java[M], Prentice Hall PTR 2003.8
.WORD版本.
因篇幅问题不能全部显示,请点此查看更多更全内容