题 目 小型企业OA系统的设计与开发 学生姓名 专业名称 信息系统与信息管理 指导教师
小型企业OA系统的设计与开发
「摘 要」随着互联网的高速发展,办公室自动化管理正向着网络化,系统化方向发展。办公室自动化系统正是为广大员工提供方便快捷的工作管理。本系统是一款简单易用,功能多样的管理软件。
本系统尝试用JSP在网络上架构一个动态的办公室自动化管理网站,它是在Windows XP下,以SQL Server 2008为数据库开发平台,Tomcat网络信息服务作为应用服务器,采用JSP(Java Server Pages)技术开发的办公室自动化系统,以struts框架搭建而成。本系统包括普通用户模块和系统管理员模块。普通用户模块包括个人基本信息管理,文档管理,公告查看,收发文管理,查看会议记录,发送建议等员工日常事务管理。系统管理员模块除了包括上述基本管理外,还包括系统管理,即人力资源管理,添加删除会议记录,发布公告,更新公告等等。
「关键词」办公室自动化系统;JSP;SQL Sever 2008
THEdesign and development OF Office Automation System [Abstract]Along with the rapid development of the Internet, office automation is developing towards the direction of networking and systematic.Office automation System can provide the convenient and prompt work management for the majority of the stuff.This system is a kind of easy-using and feature-riched management software.
The system attempts to use JSP to set up a dynamic office automation management website in the network. It is a office automation system under Windows XP, which using SQL Server 2008 as the database development platform, Tomcat network information service as the application server, JSP as the developing technology and struts as the framework. This system includes ordinary users module and system administrators module. Ordinary users module includes the routine managements of staff as basic personal information management, document management, bulletin viewing, text sending and receiving management, meeting notes viewing, suggestions sending and so on. System Administrator includes not only the basic managements above mentioned but also includes the system management as human resources management, adding and deleting
of meeting notes, publishing and updating of bulletin and so on.
[Key words] Office Automation System ; JSP; SQL Server 2008
目 录
1 绪论 ............................................... 1 1.1 系统开发的背景和意义 .............................. 1 1.2 国内外发展状况 .................................... 2 1.3 研究内容 .......................................... 2 2 程序设计技术相关知识 ............................... 3 2.1 JSP 简介 .......................................... 3 2.2 JSP技术 .......................................... 3 2.3 SQL server及其优点 .............................. 3 2.4MyEclipse开发工具 ................................. 4 2.5 TOMCAT ............................................ 4 2.6 Struts架构 ....................................... 5 2.7JavaBean简介 ...................................... 5 2.8本章小结 .......................................... 5 3 OA系统需求分析 ..................................... 6 3.1可行性分析 ........................................ 6 3.1.1 系统总体目标 .................................... 6 3.1.2 技术可行性分析 .................................. 6 3.1.3 功能需求 ........................................ 6 3.1.4 性能需求 ........................................ 6 3.2系统总体结构 ...................................... 7 3.3系统功能模块结构 .................................. 7 3.3.1 用户登录模块 .................................... 8 3.3.2文档管理模块 .................................... 8
3.3.3 人力资源管理模块 ................................ 9 3.3.4 收/发文管理模块 ................................ 10 3.3.5 会议管理模块 ................................... 11 3.3.6 公告管理模块 ................................... 12 3.3.7 意见箱模块 ..................................... 13 3.3.8 重新登录模块 ................................... 14 3.4 数据库设计 ....................................... 15 3.5 本章小结 ......................................... 22 4 系统设计与实现 .................................... 22 4.1用户登录设计 ..................................... 23 4.1.1访问控制技术 ................................... 23 4.1.2 struts框架在登录应用 .......................... 24 4.2 文档管理的实现 ................................... 25 4.2.1 文档的上传 ..................................... 25 4.2.2 删除文档 ....................................... 26 4.2.3 下载文档 ....................................... 25 4.3 人力资源管理模块 ................................. 26 4.4 收/发文管理模块的实现 ............................ 30 4.5 会议管理模块的实现 ............................... 32 4.6公告管理模块的实现 ............................... 34 4.7意见箱模块的实现 ................................. 37 4.8重新登录模块的实现 ............................... 38 4.9系统测试与实践部署 ............................... 38 4.9.1 测试目标 ....................................... 38 4.9.2 模块测试 ....................................... 38
4.9.3系统部署的意义 ................................. 39 4.10本章小结 ........................................ 39 5 结束语 ............................................ 40 5.1设计中的体会 ..................................... 40 5.2设计中的不足 ..................................... 40 参考文献 ............................................ 41 致 谢 .............................................. 42
1 绪论
Internet已经成为人们生活、工作、学习越来越离不开的平台。Web技术已经不在局限于单纯地提供信息服务,而是日益成为一个操作平台,为用户提供强大的服务功能。例如网上电子商务、社会信息数据库等。网络实现了远程通讯,人们能够通过计算机网络进行电子邮件的发送,召开网络会议,网上购物,甚至坐在家里就可以上大学(网上教育)。网络有巨大的潜力待我们去开发与探索。因此,OA系统的出现提供了企业管理的网络化。
OA系统也是每个企业信息化初期就开始投入建设的基本系统。从C/S结构到B/S结构,从最初桌面办公软件的应用、收发邮件到后来公文流转、车辆管理、会议管理、网上审批等功能应用,OA已经是我们日常使用最多、最频繁的一个基本系统。 1.1 系统开发的背景和意义
随着全球经济一体化进程的加快和信息技术的飞速发展,Internet技术及其应用给人们的日常生活和工作等各个方面带来了深刻的影响。网络应用技术的不断提高,企业对于相互之间的通讯能力提出了更高的要求。许多企业都具有一定信息化基础,有一定数量的信息设备和信息源,有相互连通的接口,需要实现消息的无缝传递。因此以信息化来武装企业,目前已经是大势所趋。顺应这种潮流,办公室自动化的出现满足了人们的需求。而办公室自动化也就是所谓的OA(Office Automation)。它是利用先进的技术,使人的各种办公业务活动逐步由各种设备、各种人机信息系统来协助完成,达到充分利用信息,提高工作效率和工作质量,提高生产率的目的一个系统。
1.2 国内外发展状况
OA系统从应用内容的角度上分为4个阶段:最开始的一个阶段为:文件型OA(1980年~1999年)主要关注个体的工作行为,主要提供文档电子化等服务,所以我们可以将该阶段称之为“文件型OA”。 随后的第二个阶段:流程性OA(2000年~2005年)该阶段从最初的关注个体、以办公文件/档案管理为核心的文件型OA, 到目前正在成为应用主流的流程性OA,它以工作流为中心,实现了公文流转、流程审批、文档管理、制度管理、会议管理、车辆管理、新闻发布等众多实用的功能。再之后的第三阶段:知识型OA(2005年~2010年)随着OA系统应用的逐步深入,企业的员工每天上班做得第一件事情可能就是登录OA系统,收一下邮件、看看公司最新的新闻、处理自己今天需要待办的工作等。OA俨然成为一个日常工作的基础平台。而目前最常见的则是智能型OA,它随着组织流程的固化和改进、知识的积累和应用、技术的创新和提升,表现为该阶段OA更关注组织的决策效率,提供决策支持、知识挖掘、商业智能等服务。
1.3 研究内容
本系统实现了在线简单管理企业信息的目的,以员工提高工作效率,提高企业信息的发布速度,使员工及时了解工作信息,并提供交流的平台。
(1)开发工具的选择
本OA系统主要是利用浏览器作为界面,利用B/S模式,即用户可利用浏览器直接访问本站点。主要用到的技术是采用JSP技术和SQL Server 2008数据库以及MyEclipse集成开发工具,设计出了各种功能,其功能在系统内部有源代码直接完成。
(2)设计思想:
本系统拥有灵活的权限,用户权限可以定义到每个子模块的两种权限级别(系统管理员,普通用户)。例如在人力资源管理方面,两种用户分别拥有不同维护权限,即普通用户只有管理自己信息的权限,系统管理员则负责维护所有用户的信息。
(3)设计研究内容(要实现的系统功能简介) 本系统包括以下功能模块:
用户有效身份登录、人力资源管理、会议管理等功能。 人力资源管理(员工信息浏览,查看个人用户信息,添加和删除用户)
公告管理(对公告进行添加,删除和浏览) 文档管理(可以共享一些文档信息)
收/发文管理(内部用户可以相互之间发送消息) 会议管理(对会议信息进行管理)
意见箱(员工可以对工作中的问题提出自己的意见) 2 程序设计技术相关知识 2.1 JSP 简介
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
JSP可用一种简单易懂的等式表示为:HTML+Java=JSP。
2.2 JSP技术
为了快速方便地进行动态网站的开发,JSP在以下几个方面做了改进,使其成为快速建立跨平台的动态网站的首选方案。
(1)将内容的生成和显示进行分离 (2)可重用组件 (3)采用标识 (4)适应平台 (5)数据库连接
JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且能扩展到支持企业级的分布式应用中。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。 由于JSP页面的内置脚本语言是基于Java的,而且所有的JSP页面都被编译成为Java Servlets,所以JSP页面具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。
2.3 SQL server及其优点
本系统采用的是SQL Server 2008数据库系统,
SQL Server 是一个关系数据库管理系统,它最初是由Microsoft Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了。Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本;Sybase 则较专注于SQL Server在UNIX 操作系统上的应用。
在本书中介绍的是Microsoft SQL Server 以后简称为SQL Server或MS SQL Server。
2.4MyEclipse开发工具
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。在结构上,MyEclipse的特征可以被分为7类:
(1)JavaEE模型 (2)WEB开发工具 (3)EJB开发工具
(4)应用程序服务器的连接器 (5)JavaEE项目部署服务 (6)数据库服务 (7)MyEclipse整合帮助
对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
2.5 TOMCAT
Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;
而且它还在不断的
改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
2.6 Struts架构
Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准。Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。这个框架之所以叫\"Struts\",是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷时候的基础支撑。这也是一个解释Struts在开发Web应用程序中所扮演的角色的精彩描述。当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。同样,软件工程师使用Struts为业务应用的每一层提供支持。它的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。
2.7JavaBean简介
JavaBean是一种基于Java的软件组件,JavaBean和Active控件一样,可以通过封装业务逻辑建立一整套可重复利用的对象库。JSP对于在Web应用中集成JavaBean组件提供了完善的支持,这种支持不仅能缩短开发时间(可以直接利用经过测试和可信任的已有组件),避免重复开发,也为JSP应用带来了更多的可伸缩性。JavaBean组件可以用来执行复杂的计算任务,或负责与数据库的交互及数据提取
等。
2.8本章小结
在本章中主要介绍了软件开发时所用的开发工具和相关的技术,重点介绍了JSP相关知识以及JSP技术在系统中的实际作用。同时也详细介绍了本系统的运行环境及其开发工具。
3 OA系统需求分析 3.1可行性分析 3.1.1 系统总体目标
本系统主要是为了给员工提供一个交流和工作的平台,对管理者里说可以方便的管理企业的各种信息,对于员工来说是一个工作和交流的平台,而且员工可以及时得到工作信息,以此来提高工作效率。
3.1.2 技术可行性分析
这个系统是基于WEB来开发的,主要运用JSP技术、JDBC技术,Struts框架等相关技术,以SQL Server 2008为后台数据库、TOMCAT为应用服务器。这些应用软件都可以在网络上免费下载得来,并且这些软件都是JAVA程序员最常用的网页开发工具,都能够快和好的掌握,并且也学了有关网页开发的课程,所以一些最常用的技术能够比较好的实现,所以对于本系统在技术上是可以达到的。
3.1.3 功能需求
本系统应该具有:用户登录、会议管理、公告管理、收/发文管
理等功能。
3.1.4 性能需求
设备需求:PC机,Windows7/8操作系统, 1G RAM。TOMCAT服务器、采用SQL Server 2008数据库管理。
3.2系统总体结构
本系统所研究的是班级管理等一系列的问题,大致分为: 人力资源管理:此模块实现用户维护自己的信息功能,系统管理员还能添加用户账号和修改其信息。
会议管理:普通管理员和系统管理员可以添加,修改,删除,查看会议信息。
公告管理:系统管理员和普通管理员可以添加公告,所有用户都可以查看公告。
文档管理:所有用户都可以上传和下载文档。
收/发文管理:所有用户都可以通过用户名向其他用户发送信息。 意见箱:所有用户都可以查看建议,系统管理员和普通管理员有提交建议的权限。
重新登录:注销登录状态。
图1 总体架构图
3.3系统功能模块结构
系统分为八大模块:用户登录模块、人力资源管理模块、会议管理模块、收/发文管理模块、公告管理模块、文档管理模块、意见箱模块、重新登录模块。用户登录后可以对其拥有权限的模块进行操作。
3.3.1 用户登录模块
(1)业务描述:对用户来讲,正常登录后,将他们的资料从后台数据库中读取出来然后根据用户的需要进行相应的验证,验证成功进入主页,失败返回登录页面。
(2)业务流程。用户登录流程图如图2所示。
开始登录 输入用户名密否 显示出错原输入正是 主页 结束 图2 用户登录流程图
(3)错误处理:在登录验证不成功会提示密码或账号不正确,并返回登录页面。
(4)输出结果:无
(5)角色说明:所有用户都可以用。 3.3.2文档管理模块
(1)业务描述:上传和下载文档。
(2)业务流程:浏览所有文档,可以选择下载(系统管理员能删除),选择上传文档,显示上传界面。人力资源管理流程图如图3所示。
图3 文档管理流程图
(3)错误处理:上传文档过大,显示文档错误原因。 (4)输入数据:选择用户需要上传文档。
(5)输出结果:在文档浏览中显示已上传的文档名和时间。 (6)角色说明:所有用户都可以使用,游客无权限删除。
3.3.3 人力资源管理模块
(1)业务描述:管理个人信息。系统管理员管理所有人信息。 (2)业务流程:用户点击人力资源管理,对应相应权限提供相应功能,当点击个人信息,显示个人信息,并有修改和返回2个选项,点击修改即进入用户修改界面,用户输入信息后点击更新即可修改个人信息。系统管理员则可以有其他2个选项,如添加新用户和浏览所有人信息,系统管理员在浏览所有人信息中可以修个其他用户的信息。
图4 人力资源管理流程图
(3)错误处理:所有字段必须逐一给出相应的数据信息。 (4)输入数据:输入相应数据信息。
(5)输出结果:修改个人信息显示更新信息成功。增加新用户则显示插入记录成功。
(6)角色说明:修改个人信息所有用户都可以使用。其余则只有系统管理员能用。
3.3.4 收/发文管理模块
(1)业务描述:对用户来讲,该模块是用于通站内用户联系的一种方法,通过发送短消息,用户之间可以互相交流。
(2)业务流程:选择用户发送消息。
图5 收/发文流程图
(3)错误处理:所有字段必须逐一给出相应的数据信息。 (4)输入数据:由用户输入相应的数据信息。 (5)输出结果:插入记录成功。 (6)角色说明:所有用户。
3.3.5 会议管理模块
(1)业务描述:会议信息添加,浏览所有会议信息,修改会议内容,删除会议。
(2)业务流程:点击会议管理,显示添加会议信息和浏览会议信息,点击添加会议信息,显示会议添加页面,输入会议信息后点击更新则可添加新的会议信息。
图6 会议管理流程图
(3)错误处理:所有字段必须逐一给出相应的数据信息。 (4)输入数据:由用户输入相应的数据信息。 (5)输出结果:插入记录成功。
(6)角色说明:普通用户无权限添加和修改,只有查看权限。 3.3.6 公告管理模块
(1)业务描述:公告信息添加,浏览所有公告信息,修改公告内容,删除公告。
(2)业务流程:用户点击公告管理,显示添加公告和浏览公告,点击添加公告显示添加公告页面,输入数据信息后点击更新即可添加新公告,点击浏览即可看到所有发布的公告。
图7 公告管理流程图
(3)错误处理:所有字段必须逐一给出相应的数据信息。 (4)输入数据:输入相应数据信息。
(5)输出结果:修改显示更新信息成功。增加则显示插入记录成功。
(6)角色说明:普通用户无权限添加和修改公告,只有查看权限。
3.3.7 意见箱模块
(1)业务描述:添加建议和浏览建议。
(2)业务流程:用户点击意见箱,显示发送建议和浏览建议,点击发送建议显示发送建议页面,输入数据信息后点击发送即可添加建议,点击浏览即可看到所有发布的建议。
图8 意见箱流程图
(3)错误处理:所有字段必须逐一给出相应的数据信息。 (4)输入数据:输入相应数据信息。 (5)输出结果:增加则显示插入记录成功。
(6)角色说明:普通只有发送,系统管理员有查看和发送权限。 3.3.8 重新登录模块
(1)业务描述:注销登录状态。
(2)业务流程:点击重新登录,直接返回登录页面。
图9 重新登录流程图
(3)错误处理:无。 (4)输入数据:无。
(5)输出结果:返回登录页面。 (6)角色说明:所有用户。 3.4 数据库设计
数据库是系统工作的基础,合理的数据库结构对系统整体由事半功倍的作用。根据上述的系统模型结构,经过分析和设计,得到数据库表结构及关系如下:
(1)人力资源管理表 :包括的数据项有:用户名(主键),创建
时间,访问次数,地址,电话号码,E-mail地址,性别,职务,所在部门,是否为优秀员工,用户密码, 真实姓名, 用户权限, 自增字段
E-R图见图10。
图10 人力资源管理E-R图
根据E-R图所设计的数据库表见表5-1。
表5-1人力资源管理表(db_user)
列名
数据类型
User-id User_name
Int varcher
User_password True_name
varcher varchar
User_able
smallint
User_good
varchar
User_branch User_job
varchar varchar
User_sex
Varcha
2
NOT NULL
50
NOT NULL
50
NOT NULL
2
NOT NULL
是否为优秀员工 用户所在部门 用户的职务 用户的性
50
NOT NULL
用户权限
50
NOT NULL
真实姓名
10
NOT NULL
4 20
NOT NULL NOT NULL
自动编号 用户名(主键) 用户密码
字长
可否为空
说明
r
User_email
Varchar
User_tel
Varchar
User_address User_accessTimes User_foundTime
Varchar
50
NULL
Varchar int
4
NULL
100
NOT NULL
15
NOT NULL
50
NOT NULL
别 用户的E-mail地址 用户的电话号码 用户的地址 用户访问次数 用户的创建时间
(2)文件表:包括的数据项有:自增字段(主键),文件描述信息,文件上传时间,文件上传者,文件名字,文件大小。
E-R图见图11。
图11 文件共享模块E-R图
根据E-R图所设计的数据库表见表5-2。
表5-2文件表(tb_file)
列名
数据类型
File_id
Int
4
NOT NULL
自增字段(主键)
File_name File_uper File_size File_uptime File_info
Varchar
50
NULL
Image Varcher Varchar Varchar
50 50 50 50
NOT NULL NOT NULL NOT NULL NOT NULL
文件名字 文件上传者 文件大小 文件上传时间 文件描述信息
(3)下拉列表信息表:包括的数据项有:自增字段(主键),下拉列表项值,下拉列表名称,下拉列表类型,下拉列表项排列次序。
数据库表见表5-3。
表 5-3下拉列表信息表(tb_label)
列名
数据类型
Label_id
int
4
NOT NULL
自增字段(主键)
Label_name
Varchar
50
NOT NULL
下拉列表名称
Label_valu
Varchar
50
NOT NULL
下拉列表项
字 长
可否为空
说明
字长
可否为空
说明
e Label_type
Varchar
50
NOT NULL
值 下拉列表类型
Label_order
smallint
2 null 下拉列表项排列
(4)功能菜单表:包括的数据项有:程序菜单名称(主键),显示菜单名称, 父菜单menu_id值,菜单级别,菜单触发请求操作,菜单页面排序,菜单权限级别。
数据库表见表5-4。
表 5-4功能菜单表(tb_menu)
列名
数据类型
Menu_id
Varchar
50
NOT NULL
程序中名称(主键)
Menu_name
Varchar
50
NOT NULL
显示菜单名称
Menu_paretid Menu_action Menu_jibie Menu_order
Varchar int
2 4
NOT NULL NOT NULL
Varchar
50
NOT NULL
Varchar
50
NOT NULL
父菜单menu_id值 菜单触发请求操作 菜单级别 菜单页面排序
user_able
int
4
NOT NULL
菜单权限级别
字 长
可否为空
说明
(5)收/发文表:包括的数据项有:自增字段(主键), 主题,标题,接受者,发送者,内容,发送时间,标记,接收者是否删除标记,发送者是否删除标记。
E-R图见图12。
图12 收/发文管理E-R图
根据E-R图所设计的数据库表见表5-5。
表 5-5收/发文表(tb_text)
列名
数据类型
Text_id
Int
4
NOT NULL
自增字段(主键)
Text _subject
Text _geter Text _sender
Text _content
Text _sendtime Text _mark Del_getter
Varchar Varchar
2 1
NOT NULL NOT NULL
Varchar
50
NOT NULL
发文发送时间 发文标记 公文接收者
Varchar
16
NOT NULL
发文内容
Varchar
50
NOT NULL
发文发送者
Varchar
50
NOT NULL
发文接收者
Varchar
50
NOT NULL
发文主题
字长
可否为空
说明
是否删除标记,0表示没有删除,1
表示删除
Del_sender
Varchar
1
NOT NULL
公文发送者
是否删除标记,0表示没有删除,1
表示删除
(6)公告表:包括的数据项有:自增字段(主键),公告发布时间,公告发布人,公告主题,公告内容。
E-R图见图13。
图13 公告管理E-R图
根据E-R图所设计的数据库表见表5-6。
表 5-6公告表(tb_pcard)
列 名
数据类型
Pcard_id
int
4
NOT NULL
自增字段(主键)
Pcard_content Pcard_subject Pcard_author Pcard_time
varchar
50
NULL
varchar
50
NULL
公告发布人 公告发布时间
(7)会议表:包括的数据项有:自增字段(主键),会议时间,会议主持人,会议主题,会议内容,会议地点,会议出席者
varchar
50
NULL
公告主题
varchar
200
NULL
公告内容
字长
可否为空
说 明
E-R图见图14。
图14 会议模块E-R图
根据E-R图所设计的数据库表见表5-7。
表 5-7会议表(tb_meet)
列 名
数据类型
Meet_id
int
4
NOT NULL
自增字段(主键)
Meet _content
Meet _subject Meet_speaker
varchar
50
NULL
会议主持人
varchar
50
NULL
会议主题
text
16
NULL
会议内容
字长
可否为空
说 明
Meet _listener Meet _time Meet_address
varchar 50 NULL 会议出席者
varchar varchar
50 50
NULL NULL
会议时间 会议地点
(8)公告表:包括的数据项有:自增字段(主键),建议内容,建议主题,建议人,建议时间,建议部门。
E-R图见图15.。 图15 建议模块E-R图
根据E-R图所设计的数据库表见表5-8。
表 5-8建议表(tb_advice)
列 名
数据类型 int
字长
可否为空
说 明 自增字段(主键) 建议内容
Advice_id Advice _content Advice _subject Advice _sender Advice _time Advice_sendbranch
4 NOT NULL
varchar 50 NULL
varchar 50 NULL 建议主题
varchar 50 NULL 建议人
varchar 50 NULL 建议时间
varchar 50 NULL 建议部门
3.5 本章小结
本章详细描述了系统的体系结构,对系统进行了简单的可行性分析,确定了各子系统要完成的功能,详细介绍了系统的各个重要模块的需求,同时给出了各子功能系统流程图。并初步得到了系统模型和功能模块划分,通过本章中描述的系统体系,下章是根据本章的叙述进行详细具体的设计实现。
4 系统设计与实现
系统实现阶段的根本目标是确定应该怎样具体的实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成某种程序设计语言书写的程序。本章主要实现了各个模块的具体功能。
4.1用户登录设计
用户登录的界面设计要简洁明,首先进行的是验证,判断登录者的账号和密码是否正确。用户登录界面如图6所示。
图16 用户登录页面
4.1.1访问控制技术
访问控制决定了谁能够访问系统,能访问系统的何种资源以及如何使用这些资源。适当的访问控制能阻止未经允许的用户有意或无意地获取数据。访问控制的手段包括用户识别代码、口令、登录控制、资源授权、授权核查、日志和审计。访问控制是按用户身份及其所归属的某预定义组来限制用户对某些信息项的访问,或限制对某些控制功能的使用,通常用于系统管理员控制用户对服务器、目录、文件等
网络资源的访问。
访问控制的功能主要有以下:(1)防止非法的主体进入受保护的网络资源。(2)允许合法用户访问受保护的网络资源。(3)防止合法的用户对受保护的网络资源进行非授权的访问。
最后经过多个验证后进入活跃用户列表,并显示登录成功界面(如图7所示)。
图17用户登录成功
4.1.2 struts框架在登录应用
登录后,数据从浏览器发送到中央ActionServlet中,即有个logonForm类(Model)从用户登录页面index.jsp(View)接受数据,通过配置文件Struts-config.xml找到并转发给logonAction类(Action)进行对数据的处理,最后将结果返回到jsp页面中。下图是总体流程图:
图18 struts框架
4.2 文档管理的实现
设计思想:登录用户可以上传文档并管理之。可以根据自己或其他用户的需要选择是否上传文档到共享区,如果加入的话点击上传文档按钮,选择上传路径单击上传。用户可以浏览共享区中的已经上传的文档,删除文档直接点击对应文档名称旁边的删除按钮就可以了,用户也可以点击对应文档名称旁边的下载按钮来下载文档。这里管理的只有系统管理员可以对其进行删除操作,普通用户是无权限的,而且上传成功的文件是保存在服务器中。
4.2.1 文档的上传
用户成功登录后点击文档管理,就能来到本用户的文档管理页面,如图9所示,先选择上传文档,选择要上传的文档,并对文档进行描述。
图19文档上传页面
点击上传可以跳转到上传成功页面,即显示上传成功。 4.2.2 删除文档
删除文档有2种:一种是只是从记录中删除,并不删除磁盘文件,另外一种是2者都删除。无论哪种都只有系统管理员可以才有权限操作。如果是普通员工则显示无权限。
图20 文档浏览页面
4.2.3 下载文档
下载文档的处理类代码如下:
public ActionForward executeFileDownLoad(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response){
HttpSession session=request.getSession(); session.setAttribute(\"selectmenu2\ ActionMessages errors=new ActionMessages(); String fileid=request.getParameter(\"id\"); String filename=request.getParameter(\"filename\"); String
endname=filename.substring(filename.lastIndexOf(\".\"));
String
filepath=session.getServletContext().getRealPath(\"\");
filepath+=\"\\\\file\\\\allfile\\\\\"; byte b[]=new byte[100];
File file=new File(filepath,fileid+endname); if(!file.exists()){
errors.add(\"downloadR\ActionMessage(\"office.file.noexists\"));
saveErrors(request,errors);
return mapping.findForward(\"false\");}
response.setHeader(\"Content-disposition\ename=\"+filename);
try{
OutputStream
outstream=response.getOutputStream();
FileInputStream in=new FileInputStream(file); int n=0;
while((n=in.read(b))!=-1){ outstream.write(b,0,n);} in.close(); outstream.close();}
catch(Exception e){e.printStackTrace();}} 4.3 人力资源管理模块
设计思想:一个系统实现实用的功能很重要,但好的系统,一定能很好的管理用户信息和方便用户使用。因此,修改,删除,添加用户资料等等是必不可少的。个人资源管理模块对于普通用户(游客和普通管理员)只能修改个人信息。系统管理员不仅能修改个人信息,还有修改用户资料,删除用户资料,添加用户资料,浏览所有人资料。修改用户资料是对数据库中已有的数据进行修改。修改资料时,不可修改用户名,因此,修改过程中主键不变。删除用户资料是可以点击删除进入删除用户界面手动删除某些用户,一旦点击删除某用户,该用户的所有资料都将删除。添加用户资料是添加系统用户可以设置用户所有信息。可以浏览所有人资料。
(1)查看个人信息:
a.普通用户和管理员都是一样的用下面代码,此功能是显示自己的详细信息,在下面还有修改自己信息的链接。具体页面见下面图片中查看个人信息图片:
图21 查看个人信息界面
其处理类代码如下: public ActionForward
executePersonMyselfLook(ActionMapping mapping,
ActionForm form, HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(); session.setAttribute(\"selectmenu1\ session.setAttribute(\"selectmenu2\\"person_myself\");
ArrayList
personsextypelist=Searchtypelist.getpersonsextypelist();
ArrayList
personabletypelist=Searchtypelist.getpersonabletypelist();
ArrayList
personjobtypelist=Searchtypelist.getpersonjobtypelist();
ArrayList
personbranchtypelist=Searchtypelist.getpersonbranchtypelist();
ArrayList
persongoodtypelist=Searchtypelist.getpersongoodtypelist();
session.setAttribute(\"personabletypelist\personabletypelist);
session.setAttribute(\"personjobtypelist\personjobtypelist);
session.setAttribute(\"personbranchtypelist\personbranchtypelist);
session.setAttribute(\"persongoodtypelist\persongoodtypelist);
session.setAttribute(\"personsextypelist\personsextypelist);
LogonForm
logonform=(LogonForm)session.getAttribute(\"logonuser\");
LogonForm myform=(LogonForm)form;
myform.setUsername(logonform.getUsername());
myform.setUsertruename(logonform.getUsertruename());
myform.setUserable(logonform.getUserable()); myform.setUsergood(logonform.getUsergood()); myform.setUserbranch(logonform.getUserbranch()); myform.setUserjob(logonform.getUserjob()); myform.setUsersex(logonform.getUsersex()); myform.setUseremail(logonform.getUseremail()); myform.setUsertel(logonform.getUsertel()); myform.setUseraddress(logonform.getUseraddress());
myform.setUseraccesstimes(logonform.getUseraccesstimes());
myform.setUserfoundtime(logonform.getUserfoundtime());
return mapping.findForward(\"success\");
}
b.系统管理员浏览所有员工信息,也可以通过该功能进行关键字查询员工。页面见图11中查询浏览员工信息,这个功能普通用户是没权限操作,也是功能模块中不会显示的。关键字快速查询,为实现该功能设置的SearchForm类存储了查询的条件和查询值,当单击搜索栏中的“搜索”时按钮后,请求被转发到UserAction类,该类获取SearchForm类中的数据做为sql的查询条件查询出符合该条件的所有记录,然后转发到响应页面进行显示。这个查询功能包含在浏览员工信息功能中。
图22 浏览员工信息界面
(2)修改用户详细信息:
a.管理员修改用户信息,这个功能中,系统管理员可以修改用户的密码,权限等等信息,也就是说用户的所有信息,系统管理员都是可以修改的,包括你用户改密码后,忘记了自己的密码,系统管理员可以利用此功能帮你修改新的密码:
图23 修改个人信息界面
(4)添加用户,系统管理员遇到新进公司员工,可以给新员工新系统的账号,即设置初始信息和初始密码。
图24 添加新员工界面
4.4 收/发文管理模块的实现
设计思想:用户可以向其他用户发送公文,还可以查看自己发过的公文或别人发给自己的公文。可以建立发文,查看收件箱和发件箱,点击主题即可查看公文。在收件箱和发件箱中,新接收的信息还能显示未读,当你点击信息名称进行查看后,未读自动变成已读。
(1)查看公文:分为浏览公文详细信息,浏览收件箱和浏览发件箱。该模块分为3个小模块进行编程,对于每个小模块同样在struts-config.xml文件中配置,在TextAction编写各自的出来方法,并设计各自的Jsp显示页面。收件箱是通过接收人当前登录的用户名来实现的,因此发件箱就可以通过查询数据表中发文的发件人为当前登录的用户名来实现。
a. 发件箱中浏览接收到的公文:
图25 浏览收件箱信息界面
其处理类代码如下:
public ActionForward executeTextLookGet(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response){
ArrayList gettextlist=new ArrayList(); HttpSession session=request.getSession(); session.setAttribute(\"selectmenu2\
session.setAttribute(\"selectmenu3\
LogonForm
logonuser=(LogonForm)session.getAttribute(\"logonuser\");
String user=logonuser.getUsername();
String sql_get=\"select * from \"+Content.TB_TEXT+\" where \"+Content.TEXTGETER+\" ='\"+user+\"' and \"+Content.TEXTDELGETER+\"='0'\"+\" order by
\"+Content.TEXTMARK+\" desc,\"+Content.TEXTSENDTIME+\" desc\";
String
str_currentpage=request.getParameter(\"page\");
if(str_currentpage==null||str_currentpage.equals(\"\"))
str_currentpage=\"0\";
int currentpage=Change.strtoint(str_currentpage); if(currentpage<=0) currentpage=1; DB db=new DB();
gettextlist=db.getalltextlist(sql_get,currentpage);
db.closed();
session.setAttribute(\"numrs\));
session.setAttribute(\"numper\Integer.toString(db.getNumper()));
session.setAttribute(\"currentpage\urrentPage()));
session.setAttribute(\"numpages\Integer.toString(db.getNumPages()));
session.setAttribute(\"gettextlist\ return mapping.findForward(\"success\"); }
b.发件箱中浏览已经发送的公文:
图26 浏览发件箱信息界面
其处理类代码与收件箱中类似,所以省略。 (2)建立发文:
图27 新建发文界面
(4)查看公文详细:
图28查看公文详细信息界面
4.5 会议管理模块的实现
设计思想:此模块实现了会议信息的添加,删除,查看,浏览所有会议 信息等功能。
(1)查看会议记录: a.浏览所有记录:
图29浏览所有会议记录界面
其处理类代码如下:
public ActionForward executeMeetLook(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response){
ArrayList meetlist=new ArrayList(); HttpSession session=request.getSession(); session.setAttribute(\"selectmenu1\ session.setAttribute(\"selectmenu2\ String sql=\"select * from \"+Content.TB_MEET+\" order by \"+Content.MEETTIME+\" desc\";
String
str_currentpage=request.getParameter(\"page\");
if(str_currentpage==null||str_currentpage.equals(\"\"))
str_currentpage=\"0\";
int currentpage=Change.strtoint(str_currentpage);
if(currentpage<=0) currentpage=1; DB db=new DB();
meetlist=db.getallmeetlist(sql,currentpage);
session.setAttribute(\"numrs\));
session.setAttribute(\"numper\Integer.toString(db.getNumper()));
session.setAttribute(\"currentpage\urrentPage()));
session.setAttribute(\"numpages\Integer.toString(db.getNumPages()));
session.setAttribute(\"meetlist\ return mapping.findForward(\"success\");} b.查看单条记录:
图30查看会议详细信息界面
(3)添加记录:
图31添加会议记录界面
4.6公告管理模块的实现
这个模块是为了方便发布一些工作信息,使所有员工都能快速了解一些工作详情,如开会时间等等信息。管理员可以对公告进行管理,其余用户只有查看的权利。
(1) 查看公告:
a.浏览公告:
图32浏览公告界面
其处理类代码如下:
public ActionForward executePcardLook(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response){
HttpSession session=request.getSession(); session.setAttribute(\"selectmenu1\ session.setAttribute(\"selectmenu2\
String sql=\"select * from \"+Content.TB_PCARD+\" order by \"+Content.PCARDTIME+\" desc\"; String
str_currentpage=request.getParameter(\"page\");
if(str_currentpage==null||str_currentpage.equals(\"\"))
str_currentpage=\"0\";
int currentpage=Change.strtoint(str_currentpage); if(currentpage<=0) currentpage=1; DB db=new DB(); ArrayList
pcardlist=db.getallpcardlist(sql,currentpage);
session.setAttribute(\"numrs\));
session.setAttribute(\"numper\Integer.toString(db.getNumper()));
session.setAttribute(\"currentpage\urrentPage()));
session.setAttribute(\"numpages\Integer.toString(db.getNumPages()));
session.setAttribute(\"pcardlist\ return mapping.findForward(\"success\");} b.查看公告:
图33查看公告详细信息界面
其处理类代码如下:
public ActionForward executePcardSigleLook(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response){
HttpSession session=request.getSession(); PcardForm pcardform=(PcardForm)form; String lookid1=request.getParameter(\"id\"); if(lookid1==null||lookid1.equals(\"\"))lookid1=\"0\"; int lookid=Change.strtoint(lookid1); ArrayList
pcardlist=(ArrayList)session.getAttribute(\"pcardlist\");
boolean flag=false;
if(pcardlist!=null||pcardlist.size()!=0){ for(int i=0;i pcardsigleform=(PcardForm)pcardlist.get(i); if(lookid==pcardsigleform.getPcardid()){ flag=true; pcardform.setSubject(pcardsigleform.getSubject()); pcardform.setAuthor(pcardsigleform.getAuthor()); pcardform.setTime(pcardsigleform.getTime()); pcardform.setContent(pcardsigleform.getContent()); break;}}} if(!flag){ ActionMessages errors=new ActionMessages(); errors.add(\"lookR\ ActionMessage(\"office.pcard.look.sigle.error\")); saveErrors(request,errors); return mapping.findForward(\"false\");} return mapping.findForward(\"success\");} (2) 添加公告: 图34添加公告界面 (3) 修改公告: 4.7意见箱模块的实现 这个模块是提交的建议存放的地方。不仅可以提交建议,而且还 可以查看别人发送的建议。 (1)浏览建议箱,系统管理员直接查看所有意见箱中意见,还能进行关键字快速查询: 图36浏览意见箱界面 (2)查看建议,是公司管理层查看建议: 图37查看建议详细信息界面 (3)添加建议,其实普通员工给管理层提交建议,而且不显示建议者姓名: 图38发送建议界面 4.8重新登录模块的实现 点击该按钮后直接返回登录页面,并注销该用户的登录状态。 其代码处理类如下: public class LogoffAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) { ActionMessages errors=new ActionMessages(); HttpSession session=request.getSession(); LogonForm logonuser=(LogonForm)session.getAttribute(\"logonuser\"); if(logonuser==null){ errors=new ActionMessages(); errors.add(\"notAllow\ActionMessage(\"office.logon.notallow\")); saveErrors(request,errors); return mapping.findForward(\"notallowlogon\"); } session.invalidate(); String mark=mapping.getParameter(); if(mark.equals(\"logon_agin\")) return mapping.findForward(\"logon_agin\"); else return mapping.findForward(\"logoff\");}} 4.9系统测试与实践部署 4.9.1 测试目标 软件测试的目标是: (1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是尽可能发现迄今为止尚未发现的错误的有效方案; (3)成功的测试方案是发现了至今为止尚未发现的错误的测试方案。 由以上可以看出正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。如果是为了表明程序的正确性而进行测试,就会设计出一些不易保露错误的测试方案;而如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。 4.9.2 模块测试 (1)人力资源管理测试 进入用户登录页面,在此页面上输入用户名和密码后点击登录按钮可以看到用户的管理功能列表。然后点击人力资源管理就可以看到自己在人力资源管理中有的操作权限的功能按钮,每个功能上面都有操作按钮,分别用三种权限登录后进行操作,均能到达正确的操作页面,并一路顺利完成操作功能。 修改用户信息,删除用户信息等按钮实现相应的功能,并且显示结果正确。 (2)文档管理测试 点击“文档管理”进入文档页面,在每个列出的文档旁边有个上传,删除的图标,点击删除后确定,可以正常删除文档资料,删除测试结果正确无误。点击上传文档进入上传页面,点击浏览可以顺利查找到用户电脑中想要上传的文档资料,然后点击上传即可上传,上传测试结果也没有问题。然后尝试下载已上传文档,发现结果仍然无问题。 4.9.3系统部署的意义 虽然经过本人初步的测试,发现了一部分系统Bug并及时改正过来了,但我认为系统里面一定还有更多不完善的地方需要在实际应用中去获得检验,然后取得不断改善和提高,因为系统的价值还是要在实践检验中才能体现出来的。 4.10本章小结 在本章中,详细地讲述了如何使用JSP技术来构建了一个简单的OA系统,完成了系统在Internet上的真实部署,实现了系统由思想变为现实的过程。代码由于篇幅有限不能全部写出来,但是重要的核心思想以及实施流程都已经详细展现出来了,系统实现主要体现在灵 活多变,不拘泥于一种想法,目的就是尽量使程序更加完善。 5 结束语 5.1设计中的体会 本课题在开发的中,从开始到结束经历了很多过程,从前老以为只要程序编得好就行,很少有意识的训练自己对整个系统的设计。而且每次课程设计都是急于编码,根本不从整体考虑系统和设计。显然,这种方法是不可取得,若是一个小程序还可以,但是涉及到稍微大一些的项目时,就会出现顾此失彼,多次返工,最后会心有余而力不足,使整个系统以失败结束。而且在以后的工作中,一些大型的程序都是需要很多人一起编写,所以需要用共同的框架来编写,才能更好的利用人多的优势,而不至相互不协调。 此次的OA系统是一种基于Struts架构的管理系统,它采用目前流行的JSP等来实现该系统。通过这次毕业设计,发现了以前对系统设计的理解是多么的肤浅,以前很多知识点都是只知其一,不知其二,都不能在实战中融会贯通,通过这次毕业设计,我深刻的明白了:知识掌握得越多越熟,设计的过程就将更全面、更顺利。同时在撰写论文的过程中我还学会了怎样查阅资料和利用工具书。毕业设计是对以前学过的理论知识的回顾同时也是进一步的消化和巩固的过程。 5.2设计中的不足 在本次设计开发过程中,在代码的整体编排上独立性有一很大的提高,但是随之而来的,在可读性方面可能还有一些欠缺考虑的地方存在,对于其本系统的设计者来看,整体的架构可能还不太清晰,总体还是不够好,今后应该在实践中继续提高,在注释的书写方面也是有待加强,应着重重视这一方面文字的书写,这样更可以便于阅读, 加快读程序者了解程序整体架构和思路,这也是日后要加强的部分。在管理员权限方面,由于设计的时间安排不够合理,管理员登录的功能没能够完全实现,比如管理员应该锁定用户,但这次设计中没有完成此功能。 总之,由于个人的知识水平和经验的不足,本设计中可能存在很多的问题,我会在今后的学习中逐步加强。 参考文献 [1] 郭鹏. 《基于JSP的动态树型菜单实现》[J]. 河北省科学院学报.2007/02 [2] 靳其兵,李晓波. 《基于JSP的数据库连接技术的研究》[J]. 计算机仿真,2007,24(4):108-111. [3] 张伟玲. 《Windows下JSP开发环境的配置》[J]. 内蒙古科技与经济2005年 第03期 [4] 王辉. 《基于JSP技术的动态日历实现》[J]. 现代情报. 2005年 第07期 [5] 朱末霞. 《基于JSP开发的网上调查系统》[J]. 大学图书情报学刊. 2007年 第01期 [6] 焦玉华. 《JSP中的数据库连接技术》[M]. 电脑知识与技术(学术交流). 2007年 第08期 [7] 陈义彬 吴保国. 《基于JSP的Web应用中数据库访问技术及其比较》[J]. 计算机与现代化. 2005年 第06期 [8] 闵小玲. 《Web应用系统设计的JSP技术方法》[J]. 黄石理工学院学报. 2005年 第04期 [9] 王兆婧 张玉龙. 《基于JSP的Web页面组装技术》[J]. 兰州工业高等专科学校学报. 2006年 第04期 [10] 莫佳. 《JavaBean在访问数据库中的应用》[J] . 西南科技大学学报, 2006,(01) . [11] 李苹. 《基于JSP与JavaBean技术的数据库访问方法研究》[J]. 楚雄师范学院学报. 2006,(09) . [12] 江莎. 《基于Java的数据库连接池的研究》[D]武汉理工大 学 , 2006 . [13] Michael Kofler《MySQL 5权威指南(第3版)》[M] .人民邮电出版社 2006年12月 [14] 刘彬. 《JSP数据库高级教程》[M] . 清华大学出版社, 302-12373-X 2006年3月. [15] 王国辉 王易. 《JSP数据库系统开发案例精选》[M]. 人民邮电出版社(学术交流). 2006年5月 [16] 王先国. 《JSP 动态网页编程技术》[M]. 电子工业出版社. 2006年12月 [17] 吴建 张旭东. 《JSP网络开发入门与实践》[M]. 人民邮电出版社. 2006年11月 [18][美]Bruce Eckel. Thinking In Java.英文第4版.[M].北京:机械工业出版社,2007 [19]《KarlAvedal DannyAyers TimothyBriggs》 黎文 袁德利 吴焱 译.JSP编程指南[M].北京:电子工业出版社,2001 [20] Joshua Bloch《Effective Java Programming Language Guide》 [M].Addison-Wesley Professional,2001 致 谢 非常感谢XX老师在我大学的最后学习阶段——毕业设计阶段给自己的指导,从最初的定题,到资料收集,到写作、修改,到论文定稿,他给了我耐心的指导和无私的帮助。为了指导我们的毕业论文,他放弃了自己的休息时间,他的这种无私奉献的敬业精神令人钦佩,在此我向他表示我诚挚的谢意。同时,感谢所有任课老师和所有同学在这四年来给自己的指导和帮助,是他们教会了我专业知识,教会了 我如何学习,教会了我如何做人。正是由于他们,我才能在各方面取得显着的进步,在此向他们表示我由衷的谢意,并祝所有的老师培养出越来越多的优秀人才,桃李满天下! 通过这一阶段的努力,我的毕业论文《小型企业OA系统设计开发》终于完成了,这意味着大学生活即将结束。在大学阶段,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。 在本论文的写作过程中,我的导师倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍地指出每稿中的具体问题,严格把关,循循善诱,在此我表示衷心感谢。同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。 写作毕业论文是一次再系统学习的过程,毕业论文的完成,同样也意味着新的学习生活的开始。我将铭记我曾是一名学子,在今后的工作中把的优良传统发扬光大。 最后要感谢各位老师的批评指导。 因篇幅问题不能全部显示,请点此查看更多更全内容