毕业设计说明书
码头船只出行及配套货柜码放
管理系统
码头船只出行及配套货柜码放管理系统
摘要
伴随着全球化的发展,码头的物流和客运增多,码头业务迎来新的高峰。然而码头业务的增加,导致了人员成本和工作量的增多。为了解决这一基本问题,码头船只出行及配套货柜码放管理系统应运而生。
此次码头船只出行及配套货柜码放管理系统的开发与设计将使用当前主流的编程语言Java来开发,采用流行的Java三大框架(Spring + Struts +Hibernate)实现出一个功能相对齐全、界面简洁、使用方便、用户体验度相对较高的码头船只出行及配套货柜码放管理系统。
该系统为用户提供了一个码头船只出行及配套货柜码放管理系统,在系统中可以管理用户、管理船只、管理货柜等等,另外设置了两种权限(管理员和员工),不同权限的用户登录后操作不一样,让用户体会到一个真实的码头船只出行及配套货柜码放管理系统。
本设计遵循码头业务流程,从实际出发,多方调研,反复测试,实现一个功能稳定、性能极佳的码头船只出行及配套货柜码放管理系统。
关键词:系统,Java,管理,web
Pier boats and supporting container stacking management system
Abstract
With the development of globalization, the progress of the society, increasing terminal logistics, passenger transport, port operations will usher in new heights. Increase the terminal business, lead to increased personnel costs, staff workload. In order to solve the basic problem, emerge as the times require ships travel and related container stacking management system.
Development and design of the pier boats and supporting container stacking management system will use the current mainstream programming language Java to develop, using the popular Java three framework (Spring + Struts +Hibernate) to realize the function of a relatively complete, the interface is simple, easy to use, the user experience the ships travel and related container stacking management system the relatively high.
The system provides a ferry boats and supporting container stacking management system for the user, the system can manage users, management, management of container ships and so on, in addition to set up two kinds of permissions (administrators and staff), without permission of the user login and operation are not the same, lets the user feel a real ships travel and related container stacking management system.
The design follows the wharf business process, from a practical point of view, researches, repeated testing, to achieve the ships travel and related container stacking a functional management system, excellent stability.
Key words: System, Java, management, web
目录
1 引言
1.1 课题研究的背景和意义
1.2 国内外现状
1.2.1 国外主要现状
1.2.2 国内主要现状
1.3 课题研究的目的及主要内容
1.3.1 课题研究的目的
1.3.2 课题研究的主要内容
1.4 可行性分析
1.4.1 技术可行性研究
1.4.2 经济可行性研究
1.4.3 操作可行性研究
1.5 论文内容安排
2 系统开发技术及环境
2.1 java语言
2.2 开发工具My Eclipse
2.3 My SQL数据库
2.4 JSP技术
2.5 Servlet
2.6 系统开发环境
3 系统需求分析
3.1 系统功能需求
3.2 系统性能需求
3.3 系统运行需求
3.4 系统的用例分析
4 系统的设计与实现
4.1 总体设计
4.1.1 软件结构设计
4.1.2 数据库设计
4.2 详细设计
4.2.1 首页实现
4.2.2 用户登录的实现
4.2.3 用户管理的实现
4.2.4 个人信息维护的实现
4.2.5 船只管理的实现
4.2.6 货柜管理的实现
4.2.7 路线管理的实现
4.2.8 船只分配路线的实现
4.2.9 船只分配货柜的实现
5 系统测试
结论
参考文献
致谢
21世纪是一个全新的具有挑战性的世纪,全世界的码头都将面对全新的问题,面临新的挑战。全球化大潮的涌动,催促着一种新的国际体制的加速形成。国际贸易港口码头之间的合作与竞争将更加频繁和激烈。以信息技术为代表的新技术革命迅猛发展,高集成度、智能化、光纤化、数字化、综合化、网络化,为船运和码头业提供了更为广阔的发展空间;国际经济结构的调整,经济全球化的加速,必将促进港口间国际贸易的发展与运量的增长[1]。
随着计算机管理技术的高速发展,各个领域都应用计算机对相关信息进行管理。本系统是一个复杂而且涉及内容众多的系统,码头船只出行及配套货柜码放管理系统是码头管理系统中一个比较重要的部分。为了码头管理工作节省不必要的人力、物力和资源,迫切需要较好的码头船只出行及配套货柜码放管理系统软件来提高工作效率和信息的准确率,以降低经济成本。利用计算机、网络、计算机应用软件等现代科技和手段,加强和改进码头管理工作,可以降低管理工作的成本,减轻工作强度,提高工作效率。科技的发展就是要为生产服务,有了码头船只出行及配套货柜码放管理系统一定会为码头工作带来便捷。
(1)世界港口码头发展的重心正在加快向中国转移,二战过后,世界港口码头发展日新月异。随着世界经济的变化更迭,传统的大港地位发生变动,新的优势港口码头不断涌现。
20世纪90年代以来,世界港口码头业最大的变化莫过于其发展重心已经向亚洲,特别是中国转移,而且转移的速度正在加快。全世界有许多著名的海港码头。据有资料记载,目前全世界有亿吨港20个;最大的是新加坡港,2000年货物吞吐量达3.3亿吨;货物吞吐量居前20位的港口中,中国占9个(上海、宁波、广州、天津、青岛、秦皇岛、大连和香港、高雄),美国占4个,日本占3个,欧洲占2个,韩国占2个。按集装箱吞吐量,最大的港口是香港,2002年吞吐量达1900万标准箱;排名居前10位的港口中,中国占4个(香港、上海、高雄、深圳),欧洲占3个,新加坡、韩国、美国各占1个。按照最新统计,2003年上海港货物吞吐量超过3亿吨,集装箱吐量将达到1120万TEU左右,超过韩国釜山港位居世界集装箱港口第三位。深圳港将跨人亿吨大港行列,集装箱吞吐量也可突破1000万TEU达1050万TEU,居世界集装箱港口第四位,由此,世界排名居前4位的港口中,中国就占3个,优势已经十分明显。我国已是世界名副其实的港口大国。目前,中国大陆已拥有1467个港口,其中沿海港口165个;对外开放口岸134个[2]。
(2)港口码头的科技含量越来越高,近年来,随着科技进步步伐的加快,为码头大型化、装卸作业高速化创造了条件,码头科技含量越来越高,码头作业全过程由电子设备、计算机系统指挥和监控。特别是集装箱装卸设备发生了一系列变化,岸桥、场桥的起重量,起升高度,外伸距,速度参数等均日益增大,向大型高速高效方向发展。由于竞争异常激烈,注入新的高科技内容以提高港口码头作业率是各港口经营者和港机供货商采取的措施和不断追求的目标[2]。
自20世纪70年代初新加坡港修建了该地区第1个集装箱码头以来,PSA(新加坡港务局)就不断引进新的程序系统提高码头操作效率,完善服务标准,一步到位满足客户的需求。过去的几年中,PSA在其技术上的投资已经产生出新的产品与服务,使客户拥有更大的灵活性,节省了时间与成本。这些创新包括无人驾驶吊车、自动门卫申报系统以及无纸化装卸单证系统[3] ,高效方便的管理码头的系统也势在必行。
我国港口经过60年的发展,码头成绩显著,基础设施规模扩大,生产能力增强,港口码头的服务能力和水平明显提高。近年来,伴随我国经济的快速发展,港口发展速度和建设脚步加快,港口密度骤然增大。在“十一五”期间,中国经济尤其是对外贸易发展对运输的需求不断增加,直接推动中国港口码头建设投资的增长,为港口码头扩张提供动力[4]。
中国传统的港口,大都是综合性的接卸码头,没有具体的码头装卸分工。改革开放以后,特别是加入WTO以后,传统港口格局随着国内和国际两种资源和两种市场的双向选择而发生了历史性的变化,逐渐由港口的综合运用而出现明确的分工[5]。
20世纪80年代以后至今。世界经济发展的背景是计算机、通讯、网络现代高科技产业,其在发达国家的国民经济中取得了主导地位,它要求运输体系适应运程的需要,主要货物表现在集装箱运输量增长,散货、液体货物呈负增长。码头的功能战略为运输方式的交换点、散货、杂货的集散中心,运输、金融、信息、工业与商业中心、现代物流的集散中心、全程运输中心的贸易后勤基地。组织特点为港口与用户关系密切,实现资金流、信息流与物流的同步发展。随着国际市场更加开放,海洋运输体系将提高到更加重要的位置[6]。
为了方便港口码头的管理,船只的管理,提高工作人员的工作效率并且能更好更准确的为码头服务,开发一个完善的码头船只出行及配套货柜码放管理系统十分必要。
本课题的主要目的就是开发一个实用的完善的码头船只出行及配套货柜码放管理系统,以方便港口码头工作人员更好的去管理船只出行,并且能够更高效的分配货柜,提高港口运输业效率。
随着社会的进步和计算机的不断普及,各行各业的管理、控制都越来越离不开计算机的辅助。该课题就是要以港口码头发展为背景,研究码头船只出行及货柜分配的最佳管理方式。
本系统从用户来看分为三部分:管理员、一般(看)用户、一般(操作)用户;
(1)管理员有对船只、货柜等的操作功能(增删改等)以及对一般用户的管理功能;
(2)一般(看)用户有对各类信息的查看功能以及个人信息维护功能;
(3)一般(操作)用户对新闻公告、船只、货柜、路线等有增删改功能以及个人信息维护功能。
开发任何一个基于计算机的系统都会受到时间和资源的限制。因此在开发软件项目之前,必须根据可利用的时间和资源等条件进行可行性研究。可行性研究工作的主要任务不是研究如何解决问题,而是要用最小的代价在最短的时间内确定该项目是否具有开发的可行性。
该文的可行性研究主要包括技术可行性研究,经济可行性研究,操作可行性研究,等等。
技术上的可行性分析要考虑将来要采用的硬件和软件技术能否满足用户提出的要求(如计算机的容量、速度等)。此外,还要考虑开发人员的水平,作为软件工程专业的学生,数据库设计方面理论上还算扎实,在学校里生活了4年,对这个管理模式应该比较熟悉。我掌握了数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,从一定程度上具备了开发一个小型系统的能力,再加上参考一些技术性文档,查询相关资料等,因此总体上该项目在技术上是可行的[7]。
在IT行业中从业的工作人员一般都要求掌握计算机技术,具有一定的软硬件基础,会使用各种管理软件,熟悉IT产品。因此,有的码头对员工的素质要求比较高,从管理层到下面的前台操作人员,都要求具有一定的计算机基础,所以在新系统投入使用时,只要对员工进行少量的培训,系统的功能和使用方法就基本上能够使系统顺利运行。
软件就其它产品来说,属于高端行业,无论是产品的价格还是质量都比较高,而码头都要求有雄厚的资金支持。所以,在系统的开发过程中,码头完全有能力承担开发费用。因为通过软件系统的管理可以减少码头管理工作不必要的开支,同时该系统可以提高码头的管理效率,即提高了码头的经济效益,所以从经济上完全是可行的。
本系统采用基于B/S结构实现系统,系统采用最友好的交互界面,简洁明了。开发工具使用了具有可视化界面的Myeclipse,它不需要配置JDK,并且有自带的Tomcat。数据库方面采用了MYSQL。这些开发工具的使用,使得开发方便快捷,具有操作可行性。
综合以上三方面,无论是从技术上或者经济上还是操作上该系统具有很高的开发可行性。
该码头船只出行及配套货柜码放管理系统,我计划完成对码头船只分配货柜和路线的管理问题。论文内容分为六大部分。
第一部分是引言,简要描述课题的背景、课题的意义以及研究目的等。从而得到开发一个针对码头工作者的码头船只出行和货柜码放管理系统的可行性与必要性。
第二部分则是系统开发工具及环境分析,对系统中用到的的关键语言和技术进行大致的解释。
第三部分对码头船只出行及配套货柜码放管理系统的需求进行了分析,列出了详细的需求列表,对系统的功能、性能、运行等方面进行有效的分析。
第四部分对该系统进行详细的设计与实现,针对各个模块的流程与类进行了详细设计,最后对系统的数据库进行了设计。通过该章,为之后的编码提供了基础。
第五部分则主要描述了对系统核心功能的测试。
第六部分进行结论的总结,总结论文的研究方法与成果,并且说明系统目前存在的问题,并展望今后的扩展方向。
本次开发中我使用了java语言进行实现。采用该语言的原因主要是它在跨平台、动态的Web、Internet计算等方面很出色。并且常用的浏览器现在均支持Java applet。另一方面,Java技术在不断更新。Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言,是一种非常实用的语言 [8][9] 。
Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface,简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可以分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。
MyEclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。对于编程人员来说,MyEclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)会提供很大的便利。由于My Eclipse 中的每样东西都是插件,对于给 MyEclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 MyEclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C++ 、 COBOL、PHP 等编程语言的插件已经可用。
JSP是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态技术标准。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP网页。
JSP全名为java server page,其根本是一个简化的Servlet设计,他实现了HTML语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能 [11] 。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
Servlet是在服务器上运行的小程序。这个词是在Java applet的环境中创造的,Java applet是一种当作单独文件跟网页一起发送的小程序,它通常用于在服务器端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务 [11]。
服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口(CGI(Common Gateway Interface))应用程序完成的。然而,在服务器上运行Java,这种程序可使用Java编程语言实现。在通信量大的服务器上,Java servlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。
最早支持Servlet技术的是JavaSoft的Java Web Server。此后,一些其它的基于Java的WebServer开始支持标准的ServletAPI。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程为:
①客户端发送请求至服务器端。
②服务器将请求信息发送至Servlet。
③Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求。
④服务器将响应返回给客户端。
Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java ServletAPI的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于Servlet运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为FacelessObject。
一个Servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然Servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。
J2EE的开发平台是一个开放的平台,可以选用Sun公司的开发平台NetBeans、也可以使用最为流行的开发平台Eclipse等。在这个课题里我选用现在最为通用的,也是开发效率最高的开发平台My eclipse。由于本课题采用的SSH架构在开发和使用阶段对硬件没有特殊要求,所以在设计开发过程中,出于性能和效率的考虑,我们采用了较为简单的Tomcat作为Web服务器。如下是该码头船只出行及其配套货柜码放管理系统的开发环境:
操作系统:Windows 7
数据库:MySQL 5.0
Web服务器:Tomcat 6.0
Java编译器:JDK 1.6
开发框架:Struts 2 + Spring 2.5+ Hibernate 3.1
开发工具:My eclipse
一款实用的软件就是要能够让用户得到很好的体验,本系统开发就是本着这样的目标,首先必须了解用户真正的需要。做好一个强大的市场调查和合理的需求分析,在开发过程中多问自己一些“用户需要什么”的问题。
软件开发前的需求分析[12]是软件最终成败的关键,如果没有进行详细的需求分析,没有充分理解系统中各类用户的实际需求,那么最终的软件成品充其量只能说是软件开发者的作品而已,而没有任何实用价值可言。所以,在开发码头船只出行及其配套货柜码放管理系统之初 ,要对系统需求进行详细的分析,本系统所实现的最终目标:就是要使码头管理实现全面的规范化、科学化、自动化、高效化和流程化。对于码头日常管理来说,主要是码头船只的管理,码头信息的发布,码头船只配套货柜的管理,码头出行路线的管理等等。该系统为基于web开发的码头船只出行及配套货柜码放管理系统,通过ssh框架实现的。拥有的功能有:用户登录、修改个人信息、查看码头信息;增加、删除、修改系统管理人员;增加、删除、修改船只信息;删除、增加、修改船只路线信息;增加、修改、删除货柜信息。因此,该系统应具有如下的功能,如图3.1.1。
a.用户登录:该模块分为三种用户的登录,一是一般(查看)用户,他的权限只有修改个人信息和查看功能;二是一般(操作)用户登录,他可以修改自己的信息,还可以对系统内容进行增加、删除和修改;三是具有最大权限的系统管理员,他可以修改自己的信息,并且不仅有查看、增删改的基本权限,还有对用户的管理和注册权限。
b.用户管理:该模块实现对用户的增加,删除和修改
c.个人信息维护:该模块实现用户对自己的名字和密码等个人信息的修改
d.新闻公告管理:该模块实现新闻公告的增加,删除和修改
e.船只管理:该模块实现船只的增加,删除和修改
f.路线管理:该模块实现路线的增加,删除和修改,以及船只与路线关系的管理
g.货柜管理:该模块实现货柜的增加,删除和修改,以及船只与货柜关系的管理
图3.1.1 系统功能图
系统必须满足的一些使用过程中要做到的技术目标,通常包括速度,安全性等方面的需求。
软件方面:系统使用Windows 7操作系统和Tomcat6.0以上版本,MyEclipse8.5 为开发和测试平台,前台以JSP为前端界面编辑环境,后台用MySQL5.5来管理数据库。运行时对JDK的版本要求为1.6。
硬件方面:PIII500 CPU 或更高配置,256M内存或更高,20G以上硬盘,更好有10M共享带宽或更高。
码头船只出行及配套货柜码放管理系统主要是面对三类用户,即一般(看)用户、一般(操作)用户、系统管理员,不同的角色有不同功能.。因此,在设计系统的时候,将系统的整体功能划分为三个子系统,为一般(看)用户子系统、一般(操作)用户子系统和系统管理员子系统。 这三个系统因为其面对的用户不同,其功能也不相同,具有相对独立性。但它们又是紧密联系和相互关联的,各用例设计如图3.4.1-图3.4.3所示。
图3.4.1 管理员用例图
图3.4.2 一般(看)用户用例图
图3.4.3 一般(操作)用户用例图
系统的功能结构图,如图4.1.1.1所示。该系统从总体功能结构上分为四大块。第一块是用户管理,包括对用户的增加、删除和修改。第二块是船只管理,包括对船只信息的增加、删除和修改。第三块是货柜管理,包括对货柜信息的增加、删除和修改。第四块是对应关系管理,包括为船只分配路线的管理和为船只分配货柜的管理。
图4.1.1.1 系统功能模块图
数据库设计在软件开发的过程中起着极其重要的作用[13][14]。数据库设计是否合理对整个软件的开发是至关重要的。数据库的设计通常包括下述四个步骤:
(1)模式设计。模式设计的目的是确定物理数据结构。一般用第三范式,第三范式形式的实体及关系数据模型是模式设计过程的输入,模式设计的主要问题是处理具体的数据库管理系统的结构约束。
(2)子模式设计。子模式是用户使用的数据视图。
(3)完整性和安全性的设计。
(4)优化。主要目的是通过改进模式和子模式,来优化数据的存取。
对于该码头管理系统,我从分析的资料和设计的功能模块出发,设计出7张数据库表机构,分别是新闻信息表、用户信息表、船只信息表、货柜信息表、船只货柜对应关系信息表、路线信息表和船只路线对应关系信息表。具体内容如表4.1.2.1-4.1.2.7所示。
表4.1.2.1 新闻信息表
表4.1.2.2 用户信息表
表4.1.2.3 船只信息表
表4.1.2.4 货柜信息表
表4.1.2.5 船只货柜对应关系信息表
表4.1.2.6 路线信息表
表4.1.2.7 船只对应路线信息表
详细设计阶段的根本目的是确定应怎样具体地实现所要求的系统,也就是在这个阶段的设计工作,应该是对针对目标系统的精确描述,从而在编码阶段能够把这个描述直接翻译成可用某种程序设计语言书写的程序。详细设计阶段的任务是设计出程序的“蓝图”,程序员以后根据这个蓝图写出实际的程序代码[15]。
详细设计的目标不只是在逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。在每个模块中都应有相应的功能界面。
结构程序设计是实现上述目标的关键技术,是详细设计的逻辑基础。下面是系统中主要的功能模块及其子功能模块具体的实现方法(仅对一些典型基础模块进行说明)
首页主要分为Banner信息栏,导航栏,和版权信息栏。如图4.2.1.1所示。点击导航栏的任意某一内容,屏幕会列出想要查看的信息。如图4.2.1.2所示,点击出行船只,就会以分页显示的方式列出最新码头船只出行的情况。
图4.1.1.1 首页界面
图4.2.1.2 点击出行船只后显示界面
实现船只出行信息罗列的核心代码如下:
public String getAll() {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("newsmodel",chuxingEbi.getAll(0, 6));
request.setAttribute("newsnum",chuxingEbi.getAllCount());
return "newsall";
}
public String getAllqt() {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("newsmodel",chuxingEbi.getAll());
request.setAttribute("newsnum",chuxingEbi.getAllCount());
return "qtall";
}
登录界面分为管理员登录与一般用户(操作、看)登录。登录页面设计相对比较简单,界面清晰,背景配以黑灰渐变色,首页运行效果,如图4.2.2.1。
用户的登录分为三种情况,第一种是管理员登录,如图4.2.2.2是管理员登录后的界面。管理员可以进行用户管理,个人信息维护,新闻公告管理,船只管理,货柜管理,当然还可以查看新闻信息。
第二种是一般(操作)用户,如图4.2.2.3显示的是一般用户登录后的界面,与管理员操作大体相同,只是功能相对较少些。一般用户登录代码与管理员代码大致相似,只是功能少一些。
第三种是一般(看)用户,该图4.2.2.4是一般用户(看)登录后的界面,只有查看权限,包括新闻,船只,货柜及其路线的查看。该用户的登录实现代码亦同上。
图4.2.2.1 首页登录界面
图4.2.2.2 管理员登录界面
图4.2.2.3 一般用户(操作)登录界面
图4.2.2.4 一般用户(看)登录界面
用户登录后主要是对各模块进行权限内的合法操作,其实现登录的核心代码如下:
public String login()
{
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
String username = request.getParameter("username");
String password = request.getParameter("password");
//System.out.println(username+";"+password);
UserQueryModel qm = new UserQueryModel();
qm.setUsername(username);
qm.setPassword(password);
int num = userEbi.getByConditionCount(qm);
//System.out.println("数量:+"+num);
if(num>0){
int sta = userEbi.getByCondition(qm, 0, 100).get(0).getState();
switch (sta) {
case 0:
session.setAttribute("useradmin", username);
return "admin";
case 1:
session.setAttribute("useradmin", username);
return "admin1";
case 2:
session.setAttribute("useradmin", username);
return "admin2";
default:
request.setAttribute("error", "用户名或密码不对");
return "loginf";
}
}else{
request.setAttribute("error", "用户名或密码不对");
return "loginf";
}
}
只有管理员才有用户管理的权限,该功能模块可以实现管理员对用户密码以及权限的初始设置和修改。用户的权限有看和操作两种。管理员还可以通过点击删除按钮来实现对用户的删除。如图4.2.3.1所示。
图4.2.3.1 用户管理界面
图4.2.3.1显示的是管理员的用户管理界面,其核心代码如下:
//根据Id得到用户信息去修改
public String getUserById(){
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
UserQueryModel qm = new UserQueryModel();
qm.setId(id);
request.setAttribute("userupdate", userEbi.getByCondition(qm, 0, 20));
return "byid";
}
//删除
public String deletedById() {
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
userEbi.delete(id);
return "delete";
}
//修改
public String update() {
userEbi.update(userModel);
return "update";
}
public String create() {
HttpServletRequest request = ServletActionContext.getRequest();
userEbi.create(userModel);
return SUCCESS;
}
个人信息的维护功能模块的实现,方便了用户对自己的个人信息的修改,比如名字和密码。用户登录该系统之后,通过个人信息维护模块,重新输入自己的名字和密码来修改个人信息。其界面如图4.2.4.1所示。
图4.2.4.1 个人信息维护界面
实现个人信息维护的核心代码如下:
public String getxiugai(){
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
UserQueryModel qm = new UserQueryModel();
qm.setId(id);
request.setAttribute("userupdate", userEbi.getByCondition(qm, 0, 20));
return "byid";
}
该功能模块实现了可操作人员对船只的增加、删除和修改功能。用户通过添加船只编号、名称、体积和详细信息来增加船只,实现船只的增加功能。如图4.2.5.1。通过船只管理模块,点击想要修改或者删除的船只信息后方的修改或者删除按钮,实现对船只的修改和删除功能。如图4.2.5.2所示。
图4.2.5.1 船只增加界面
图4.2.5.2 船只管理界面
上图4.2.5.1和4.2.5.2显示的是船只的增加和管理界面,其核心代码:
public String create() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
chuanzhiModel.setTtime(ttime);
chuanzhiEbi.create(chuanzhiModel);
return SUCCESS;
}
//根据Id得到船只信息去修改
public String getUserById(){
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
ChuanzhiQueryModel qm = new ChuanzhiQueryModel();
qm.setId(id);
request.setAttribute("newsupdate", chuanzhiEbi.getByCondition(qm, 0, 20));
return "byid";
}
//删除
public String deletedById() {
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
chuanzhiEbi.delete(id);
return "delete";
}
码头船只的配套货柜码放管理功能模块,实现了对货柜的增加、删除和修改。用户通过对货柜编号、名称、体积和详细信息的输入,来完成货柜的增加功能。如图4.2.6.1。在货柜管理中,通过货柜的删除按钮和修改按钮实现目标货柜的删除和修改。如图4.2.6.2所示。
图4.2.6.1 货柜增加界面
图4.2.6.2 货柜管理界面
图4.2.6.1和图4.2.6.2显示的是货柜增加和管理功能,其核心代码如下:
public String create() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
huoguiModel.setTtime(ttime);
huoguiEbi.create(huoguiModel);
return SUCCESS;
}
//根据Id得到货柜信息去修改
public String getUserById(){
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
HuoguiQueryModel qm = new HuoguiQueryModel();
qm.setId(id);
request.setAttribute("newsupdate", huoguiEbi.getByCondition(qm, 0, 20));
return "byid";
}
//删除
public String deletedById() {
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
huoguiEbi.delete(id);
return "delete";
}
public String update() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
huoguiModel.setTtime(ttime);
huoguiEbi.update(huoguiModel);
return "update";
}
}
路线管理功能模块实现了可操作人员对线路的增加、删除和修改。使得路线的管理方便快捷。用户可以通过对路线编号、名称、具体路线以及详细信息的添加来实现增加路线功能。如图4.2.7.1。用户通过点击出行路线管理界面上的修改和删除按钮来修改和删除目标路线,如图4.2.7.2所示。
图4.2.7.1 出行路线增加界面
图4.2.7.2 出行路线管理界面
public String create() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
luxianModel.setTtime(ttime);
luxianEbi.create(luxianModel);
return SUCCESS;
}
//根据Id得到信息去修改
public String getUserById(){
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
LuxianQueryModel qm = new LuxianQueryModel();
qm.setId(id);
request.setAttribute("newsupdate", luxianEbi.getByCondition(qm, 0, 20));
return "byid";
}
//删除
public String deletedById() {
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
luxianEbi.delete(id);
return "delete";
}
public String update() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
luxianModel.setTtime(ttime);
luxianEbi.update(luxianModel);
return "update";
}
}
该模块实现了用户对船只出行路线的设置。用户通过船只的选择和路线的选择、以及说明信息的填写,实现为船只分配路线的功能,如图4.2.8.1所示。还可以通过对删除和修改按钮的点击,来删除或者修改分配好的船只路线组合,如图4.2.8.2所示。
图4.2.8.1 船只分配出行路线界面
图4.2.8.2 船只出行路线管理界面
其核心代码如下:
public String create() {
//System.out.println("????????????????????");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
chuxingModel.setTtime(ttime);
//System.out.println(chuxingModel.toString());
chuxingEbi.create(chuxingModel);
return SUCCESS;
}
//根据Id得到信息去修改
public String getUserById(){
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
ChuxingQueryModel qm = new ChuxingQueryModel();
qm.setId(id);
request.setAttribute("newsupdate", chuxingEbi.getByCondition(qm, 0, 20));
return "byid";
}
//删除
public String deletedById() {
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
chuxingEbi.delete(id);
return SUCCESS;
}
public String update() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
chuxingModel.setTtime(ttime);
chuxingEbi.update(chuxingModel);
return "update";
}
//去获取船只,线路的信息
public String getCL(){
HttpServletRequest request = ServletActionContext.getRequest();
List<ChuanzhiModel> czlist = chuanzhiEbi.getAll();
List<LuxianModel> lxlist = luxianEbi.getAll();
System.out.println(czlist+"//"+lxlist);
request.setAttribute("czmodel",czlist);
request.setAttribute("lxmodel",lxlist);
return "addcl";
}
}
船只分配货柜这一功能模块主要是为每一艘轮船进行货柜的分配,还有对已分配货柜的船只进行信息的修改和删除。用户可以通过船只的选择、货柜的选择和说明信息(该轮船可以放置多少个货柜等等信息)的填写来实现分配货柜功能,如图4.2.9.1所示。用户还可以通过点击删除和修改按钮来实现对已分配货柜船只组合的删除和修改,如图4.2.9.2所示。
图4.2.9.1 船只分配货柜界面
图4.2.9.2船只对应配套货柜管理界面
该功能模块实现了用户对船只进行货柜码放的管理。其核心代码如下:
public String create() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
peitaohgModel.setTtime(ttime);
peitaohgEbi.create(peitaohgModel);
return SUCCESS;
}
//根据Id得到用户信息去修改
public String getUserById(){
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
PeitaohgQueryModel qm = new PeitaohgQueryModel();
qm.setId(id);
request.setAttribute("newsupdate", peitaohgEbi.getByCondition(qm, 0, 20));
return "byid";
}
//删除
public String deletedById() {
HttpServletRequest request = ServletActionContext.getRequest();
int id = Integer.parseInt(request.getParameter("id"));
peitaohgEbi.delete(id);
return SUCCESS;
}
public String update() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String ttime = df.format(new Date());// new Date()为获取当前系统时间
peitaohgModel.setTtime(ttime);
peitaohgEbi.update(peitaohgModel);
return "update";
}
public String getczhg(){
HttpServletRequest request = ServletActionContext.getRequest();
List<HuoguiModel> hglist = huoguiEbi.getAll();
List<ChuanzhiModel> czlist = chuanzhiEbi.getAll();
request.setAttribute("hgmodel",hglist);
request.setAttribute("czmodel",czlist);
return "addczhg";
}
}
一个完善的系统,是要经得起“考验”的,所谓的“考验”就是在系统真正上线之前进行各种测试,主要大的方面是白盒和黑盒测试[16],包括上线之后用户的使用的测试,比如用户体验度的反馈,系统压力的测试反馈等。在这里主要进行的是上线之前的测试工作。
测试一:用户登录时,用户名或密码有一项为空或者填写错误,系统是否出现预先设定的操作提示。
具体操作:用户名、密码、任意一项为空或者填写有误。
结果:都出现相应的错误原因的信息提示。
结论:要求用户必须填写正确的用户名和密码,才能进入管理系统。
测试二:管理员对用户的管理方面,即对用户进行增加,修改,删除时看用户管理界面是否产生相应变化。
具体操作:对用户进行增删改查。
结果:都相应出现正确的改变。
结论:管理员可以直接在用户管理界面修改用户信息。
测试三:用户对船只信息的管理,即用户对船只信息的增加,删除和修改,是否可以实现。
具体操作:用户修改船只信息,通过船只管理界面查看船只信息是否已按相应要求修改。
结果:都出现相应的变化,用户修改船只信息,在船只管理以及其他相关页面都可以看到。
结论:用户可以在船只增加和船只管理界面进行船只信息的修改。
测试四:用户登录时,是否区分一般看用户和一般操作用户。
具体操作:以管理员身份登陆系统,进行两种用户的设置,然后以设置好的不同用户身份登陆,查看其各自拥有的权限。
结果:一般看用户只有查看权限。一般操作用户则既有查看权限,还有增删改权限。
结论:要求管理员必须正确设置用户的权限。
测试五:修改系统的新闻公告﹑返回前台,看其是否更新成功。
具体操作:通过新闻公告管理页面中的修改功能修改新闻公告的内容,看其是否修改成功。
结果:新闻公告内容更新为修改后的信息。
结论:修改新闻公告功能正常。
测试六:管理员删除某一原有用户后,并让其登陆,看是否登陆成功。
具体操作:管理员删除用户表中的某一用户后,该用户在前台登陆。
结果:该用户无法登录。
结论:用户数据删除功能正常。
随着毕业的临近,毕业设计也接近尾声了。经过三个多月的查阅,分析,设计,编程,完善,修改等等一系列的步骤,我终于完成了码头船只出行及配套货柜码放管理系统的开发。从一开始对Java的一知半解到后来整个系统的完成,其间充满着坎坷,面对问题时无从下手,但是在学长和老师的帮助下解决那些棘手的问题时,充满的是欣慰与快乐。
经过几个月的“奋战”,我基本上完成了系统的开发和设计,基本实现了前期所制定的功能。系统在不断的设计、更改和调试过程中逐渐完善起来。由于自己对Java的了解还不够深,对JSP页面的陌生,所以程序中存在着一些缺陷。主要有:界面不够美观,业务流程方面不够完美,用户身份的验证不够紧密,信息的添加功能不够完善。这些都是有待提高的地方。
经过这次的毕业设计,拓宽了我的知识,使得我能够以不同于以前的方式(PHP)制作动态网页,创建网站。我在编程方面,我有了进一步的提高,对于编程的格式以及一些编程思想都有了相应的提升。在数据库方面,我不仅巩固了用sql语句来实现增删改查的功能,并且还能实现分页功能。另外,我还了解了项目开发的各种工作步骤和流程,可以独立完成一个中小型项目,提高了动手能力,并在思想上有了项目的概念,对以后的学习和工作都十分有帮助。
毕业设计虽然告一段落,但是我对Java及其相关知识的学习不能停止,日后也会不断完善这个系统,使其成为一个真实的,功能完善且可以给用户带来用途的系统。
[1] Li Wei. Problem studies of international container port competition in Shanghai.Master scientific dissertation ,2006.
[2] 屠德铭.港口行业发展现状及前景[A].中国港口协会[C].上海:200000;
[3] 鲁懿春.新加坡港在港口操作中的创新[J].集装箱化,2004,12:20.
[4] 中国港口现状[J].中国电子杂志出版社.2010,4,5.
[5]史博臻,任荃.海洋时代,上海的“远”与“近”[N].文汇报,2010-12—1l(2).
[6] 张明齐,张永峰,刘万峰.中国世界级_强港_建设分析与探讨[J].中国港湾建设,2011,3:77.
[7] 韩万江,姜立新.软件项目管理案例教程.机械工业出版社,2007,12
[8] Ken Arnold,James Gosling.Java程序设计语言.人民邮电出版社,2006,11
[9] (美)艾克尔.布鲁斯.JAVA编程思想[M].出版地:机械工业出版社,2007.6.
[10] 王珊,萨师煊.数据库系统概论(第四版).高等教育出版社,2007,7
[11] Mary Hall,Larry Brown.Servlet和JSP核心编程.清华大学出版社,2007,1
[12] 张海藩. 软件工程导论. 北京:清华大学出版社,2008.2
[13] 李红. 数据库原理及应用[M]. 高等教育出版社,2003.3
[14] 刘世峰.数据库基础与应用.中央广播电视大学出版社,2004.
[15] 樊海玮,吕进,杜瑾等. 软件详细设计教程[M]. 西安电子科技大学出版社,2010.12
[16] 朱少民. 软件测试方法和技术[M]. 清华大学出版社,2010.7
经过接近半年的忙碌,本次毕业设计也接近了尾声。由于本人知识的疏漏和经验的匮乏,有许多考虑不周全的地方,如果没有指导老师的督促和指导,以及学长的悉心帮助,我的毕业设计是很难完成的。
因此,在这里首先要感谢我的指导老师。本论文是在他们的悉心指导下完成的。各位指导老师让我掌握了开发Java Web程序的方法,一步一步的将毕业设计做到完善。本论文从选题到完成,每一步都是在老师的指导下完成的,倾注了老师们大量的心血。在此,谨向他们表示崇高的敬意和衷心的感谢!
这四年中与我朝夕相处一路走来的同学们,我同样要衷心的感谢你们。四年的大学生活是我人生中重要的转折点,也是我人生的重要财富。我不仅得到了同学的诸多帮助,而且从同学身上学到许多美好的东西。衷心感谢所有在我成长的道路上给予我关怀和帮助的友人。
最后要对我的家人致以最深情的敬意。他们用无私的爱给予我默默的关心和支持。是他们给我创造了学习的良好氛围,使我能够安安心心地进行学习和研究。感谢他们的陪伴与付出。
完成毕业设计,是一个大学本科生学业的终点,却也是步入社会的一个起点!我将铭记大家对我的帮助,扬起船帆,乘风破浪,创造更好的明天!